/* =====================================================================
   IRONHORSE — DESIGN SYSTEM
   Ported from the Claude Design export (site/style.css, 113 classes).
   ---------------------------------------------------------------------
   LOADS AFTER style.css. Do not reorder — see inc/enqueue.php.

   STRATEGY: SCOPE, DON'T RENAME.

   38 of the export's 113 class names are live Bootstrap classes that
   Motors bundles and uses internally: .btn .card .nav .row .grid .media
   .body .h1 .h2 .h3 .hero .meta .track .brand .links .field .pill and
   twenty-one more.

   Renaming all 113 to .ihc-* would mean rewriting every class attribute
   across ten HTML files before a single line could be pasted into a
   WPBakery Raw HTML block — and redoing it on every design revision.
   Instead every rule below is prefixed .ih-scope, which:

     · raises specificity to (0,2,0), beating bare Bootstrap (0,1,0)
       with no !important anywhere except the prefers-reduced-motion
       guard, where overriding every transition is the whole point
     · contains us — nothing here reaches Motors' header, footer, filter
       sidebar, listing loop or the admin bar
     · leaves the export's markup byte-identical, so pasting is mechanical

   USAGE: wrap each ported section in an element carrying .ih-scope.
   In WPBakery that is the Row's Extra Class Name field.

   THREE CLASSES ARE STILL RENAMED. Scoping cannot save them, because
   they are JS state hooks rather than styling:

     .in   ->  .is-in     Bootstrap's collapse-open state. The reveal
                          observer adds it on scroll, which would pop
                          open every Motors accordion as you scroll.
     .on   ->  .is-on     nav, thumbnails, pills, wizard panes.
     .open ->  .is-open   burger menu.

   assets/js/ih-site.js already uses the renamed forms.

   TOKENS: style.css is the single source of truth for the palette, and
   every var() below was remapped onto its --ih-* names. Only the two
   genuinely missing values are declared here.

   FONT: --ih-f-display resolves to Roboto Condensed via style.css.
   The export specified Exo 2, which ships no Greek subset on Google
   Fonts — Greek headings would fall back to the browser serif. Same
   disqualifies Rajdhani from the brand guidelines. See inc/enqueue.php.

   NOT PORTED: the export's html/body rules. Motors owns those. The two
   exceptions are the scroll rules below, which have to live on the
   scrolling element and cannot be scoped.

   NEVER set `overflow-x: hidden` on html or body. It makes that element
   a scroll container, and every `position: sticky` descendant silently
   stops sticking — the nav, the listing hero and the #ltabs bar all
   depend on sticky. This is true with or without a scroll library. If
   horizontal overflow appears, use `overflow-x: clip`, which clips
   without creating a scroll container.
   ===================================================================== */

:root {
	/* Interactive red. Distinct from --ih-red, which stays the fill and
	   rule colour. This is the hover / link / accent-text value. */
	--ih-red-hi: #FF2733;

	/* The export's single easing curve. Every transition in this file
	   uses it, so motion reads as one system rather than per-component
	   guesses. ih-site.js uses the same curve. */
	--ih-ease: cubic-bezier(.22, .8, .28, 1);
}

/* ── NATIVE SMOOTH SCROLL ────────────────────────────────────────────
   Replaces Lenis. Two declarations do the whole job:

     scroll-behavior     eases in-page anchor jumps
     scroll-padding-top  offsets the target so it does not land
                         underneath the sticky header

   --ih-nav-h is measured and published by assets/js/ih-site.js on load
   and on resize, so the offset stays right across breakpoints and after
   the nav is rebuilt. The fallback covers the moment before JS runs.

   These must sit on the scrolling element, so they cannot be scoped to
   .ih-scope like everything else in this file.

   This gives eased anchor scrolling. It does NOT give eased wheel
   momentum — that was Lenis's only other contribution and was dropped
   deliberately.
   ──────────────────────────────────────────────────────────────────── */
html {
	scroll-behavior: smooth;
	scroll-padding-top: calc(var(--ih-nav-h, 88px) + 12px);
}

/* ih-site.js adds .ih-lenis when it owns a Lenis instance. Both engines
   easing the same anchor jump fight each other — Lenis wins the animation
   and CSS fights it mid-flight, which reads as a stutter. Lenis handles
   the offset itself via its `anchors` option. */
html.ih-lenis{ scroll-behavior: auto; }

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
}

.ih-scope *{box-sizing:border-box;margin:0;padding:0}
.ih-scope img{display:block;max-width:100%}
.ih-scope a{color:var(--ih-white);text-decoration:none;transition:color .25s}
.ih-scope a:hover{color:var(--ih-red-hi)}
.ih-scope button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
.ih-scope :focus-visible{outline:2px solid var(--ih-red);outline-offset:3px}
.ih-scope ::selection{background:var(--ih-red);color:#fff}
body.ih-page::before{content:'';position:fixed;inset:0;z-index:95;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}

/* diagnostic progress line */
.ih-scope .dprog{position:fixed;top:0;left:0;height:2px;width:100%;z-index:99;background:transparent}
.ih-scope .dprog i{display:block;height:100%;width:0;background:var(--ih-red);transition:width .1s linear}

/* ===== utility bar ===== */
.ih-scope .util{border-bottom:1px solid var(--ih-line);font-family:var(--ih-f-mono);font-size:10.5px;color:var(--ih-steel);letter-spacing:.1em}
.ih-scope .util .row{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:8px var(--ih-pad-x)}
.ih-scope .util .r{display:flex;gap:20px;align-items:center}
.ih-scope .util a{color:var(--ih-steel)}
.ih-scope .util a:hover{color:var(--ih-white)}
.ih-scope .util .dot{color:var(--ih-red)}
.ih-scope .util .lang a.is-on{color:var(--ih-white)}

/* ===== nav ===== */
.ih-scope .nav{position:sticky;top:0;z-index:50;background:rgba(13,13,13,.7);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid transparent;transition:background .3s,border-color .3s}
.ih-scope .nav.is-on{background:rgba(13,13,13,.95);border-bottom-color:var(--ih-line)}
.ih-scope .nav .row{display:flex;align-items:center;gap:28px;padding:14px var(--ih-pad-x)}
.ih-scope .brand{display:flex;align-items:center;gap:12px;flex-shrink:0}
.ih-scope .brand img{height:32px;width:auto}
.ih-scope .brand .w{display:flex;flex-direction:column;line-height:1}
.ih-scope .brand .w b{font-weight:800;font-size:18px;letter-spacing:.08em}
.ih-scope .brand .w b i{color:var(--ih-red);font-style:normal}
.ih-scope .brand .w span{font-family:var(--ih-f-mono);font-size:7.5px;letter-spacing:.48em;color:var(--ih-steel);margin-top:4px;text-transform:uppercase}
.ih-scope .links{display:flex;gap:20px;list-style:none;margin-left:auto;align-items:center}
.ih-scope .links a{position:relative;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ih-white);padding:8px 0;white-space:nowrap}
.ih-scope .links a::after{content:'';position:absolute;left:0;bottom:2px;height:2px;width:0;background:var(--ih-red);transition:width .3s var(--ih-ease)}
.ih-scope .links a:hover::after, .ih-scope .links a.act::after{width:100%}
.ih-scope .links a.act{color:var(--ih-red-hi)}
.ih-scope .burger{display:none;flex-direction:column;gap:5px;width:42px;height:42px;justify-content:center;align-items:center;border:1px solid var(--ih-line-strong)}
.ih-scope .burger span{width:20px;height:2px;background:var(--ih-white);transition:.3s}
.ih-scope .burger.is-open span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.ih-scope .burger.is-open span:nth-child(2){opacity:0}
.ih-scope .burger.is-open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ===== buttons ===== */
.ih-scope .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:14px 26px;font-weight:700;font-size:12px;letter-spacing:.12em;text-transform:uppercase;border:1px solid transparent;clip-path:polygon(0 0,calc(100% - 10px) 0,100% 10px,100% 100%,10px 100%,0 calc(100% - 10px));transition:.25s;cursor:pointer;min-height:44px}
.ih-scope .btn-red{background:var(--ih-red);color:#fff}
.ih-scope .btn-red:hover{background:var(--ih-red-hi);color:#fff}
.ih-scope .btn-ghost{border-color:var(--ih-line-strong);color:var(--ih-white)}
.ih-scope .btn-ghost:hover{border-color:var(--ih-red);color:var(--ih-red-hi)}
.ih-scope .btn-w{background:var(--ih-white);color:var(--ih-black)}
.ih-scope .btn-w:hover{background:#fff;color:var(--ih-red)}
.ih-scope .btn-sm{padding:10px 18px;font-size:11px;min-height:40px}

/* ===== type ===== */
.ih-scope .kick{font-family:var(--ih-f-mono);font-size:11px;color:var(--ih-red-hi);letter-spacing:.3em;text-transform:uppercase;display:flex;align-items:center;gap:14px;margin-bottom:20px}
.ih-scope .kick::before{content:'';width:34px;height:2px;background:var(--ih-red)}
.ih-scope .h1{font-weight:800;font-size:clamp(40px,6.6vw,96px);line-height:.98;letter-spacing:-.01em;text-transform:uppercase}
.ih-scope .h2{font-weight:800;font-size:clamp(30px,4.2vw,58px);line-height:1;letter-spacing:-.005em;text-transform:uppercase}
.ih-scope .h3{font-weight:800;font-size:clamp(20px,2.2vw,27px);line-height:1.1;letter-spacing:.01em;text-transform:uppercase}
.ih-scope .acc{color:var(--ih-red-hi)}
.ih-scope .lede{color:rgba(242,242,242,.72);font-size:17px;line-height:1.7;max-width:580px}
.ih-scope .mono{font-family:var(--ih-f-mono)}
.ih-scope .micro{font-family:var(--ih-f-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ih-steel)}
.ih-scope .demo-tag{display:inline-flex;align-items:center;gap:6px;font-family:var(--ih-f-mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ih-orange);border:1px solid rgba(255,77,0,.35);padding:3px 8px}

/* ===== layout ===== */
.ih-scope section{padding:clamp(70px,9vw,124px) var(--ih-pad-x);position:relative}
.ih-scope .shead{display:flex;justify-content:space-between;align-items:end;flex-wrap:wrap;gap:26px;margin-bottom:clamp(34px,5vw,60px)}
.ih-scope .shead .meta{font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ih-steel);text-align:right;max-width:330px;line-height:1.8}
.ih-scope .shead .meta b{color:var(--ih-white);font-weight:500}
.ih-scope .hairline{height:1px;background:var(--ih-line);margin:0 var(--ih-pad-x)}

/* diagnostic line device */
.ih-scope .dline{position:relative;padding-left:26px}
.ih-scope .dline::before{content:'';position:absolute;left:0;top:6px;bottom:6px;width:2px;background:linear-gradient(var(--ih-red),rgba(227,6,19,.15));transform:scaleY(0);transform-origin:top;transition:transform 1s var(--ih-ease) .2s}
.ih-scope .is-in .dline::before, .ih-scope .dline.is-in::before{transform:scaleY(1)}

/* ===== hero ===== */
.ih-scope .hero{position:relative;min-height:88vh;display:flex;align-items:flex-end;overflow:hidden}
.ih-scope .hero .bg{position:absolute;inset:0;background-size:cover;background-position:center;filter:saturate(.82) contrast(1.04)}
.ih-scope .hero::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,13,13,.55),rgba(13,13,13,.2) 42%,rgba(13,13,13,.95) 94%)}
.ih-scope .hero .is-in{position:relative;z-index:2;padding:110px var(--ih-pad-x) 80px;max-width:1150px;width:100%}
.ih-scope .hero .lede{margin:24px 0 34px}
.ih-scope .ctas{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.ih-scope .ctas .aside{font-family:var(--ih-f-mono);font-size:11px;color:var(--ih-steel);letter-spacing:.06em}
.ih-scope .ctas .aside a{color:var(--ih-muted);text-decoration:underline;text-underline-offset:4px}
.ih-scope .ctas .aside a:hover{color:var(--ih-red-hi)}
.ih-scope .hero .tag{position:absolute;right:var(--ih-pad-x);bottom:34px;z-index:2;font-family:var(--ih-f-mono);font-size:10px;color:var(--ih-steel);letter-spacing:.22em;text-transform:uppercase;text-align:right;line-height:1.9}
.ih-scope .hero-sub{min-height:56vh}

/* ===== trust strip ===== */
.ih-scope .trust{display:grid;grid-template-columns:repeat(5,1fr);border:1px solid var(--ih-line);background:var(--ih-surface)}
.ih-scope .trust div{padding:22px 24px;border-right:1px solid var(--ih-line);font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ih-muted);line-height:1.7;display:flex;align-items:center;gap:12px}
.ih-scope .trust div:last-child{border-right:none}
.ih-scope .trust i{color:var(--ih-red);font-style:normal}

/* ===== grids/cards ===== */
.ih-scope .grid{display:grid;gap:22px}
.ih-scope .g2{grid-template-columns:repeat(2,1fr)}
.ih-scope .g3{grid-template-columns:repeat(3,1fr)}
.ih-scope .g4{grid-template-columns:repeat(4,1fr)}
.ih-scope .card{background:var(--ih-surface);border:1px solid var(--ih-line);display:flex;flex-direction:column;transition:transform .35s var(--ih-ease),border-color .35s;position:relative;overflow:hidden}
.ih-scope .card:hover{transform:translateY(-4px);border-color:rgba(227,6,19,.5)}
.ih-scope .card .media{aspect-ratio:4/3;background:var(--ih-surface-2) url(assets/ih-white.png) center/30% no-repeat;position:relative;overflow:hidden}
.ih-scope .card .media img{width:100%;height:100%;object-fit:cover;filter:saturate(.88);transition:transform .6s var(--ih-ease)}
.ih-scope .card:hover .media img{transform:scale(1.04)}
.ih-scope .card .media .bdg{position:absolute;z-index:2;top:12px;left:12px;font-family:var(--ih-f-mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;background:rgba(13,13,13,.85);border:1px solid var(--ih-line-strong);padding:5px 10px;color:var(--ih-white)}
.ih-scope .card .body{padding:20px;display:flex;flex-direction:column;gap:12px;flex:1}
.ih-scope .card .nm{font-weight:800;font-size:21px;letter-spacing:.02em;text-transform:uppercase;line-height:1.1}
.ih-scope .card .ds{color:rgba(242,242,242,.6);font-size:14px;line-height:1.6}
.ih-scope .card .specs{display:flex;gap:14px;flex-wrap:wrap;font-family:var(--ih-f-mono);font-size:10.5px;color:var(--ih-steel);letter-spacing:.06em;text-transform:uppercase}
.ih-scope .card .specs b{color:var(--ih-white);font-weight:500}
.ih-scope .card .foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--ih-line);padding-top:14px}
.ih-scope .card .foot .cta{font-weight:700;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ih-red-hi)}
.ih-scope .card .foot .micro{font-size:9.5px}

/* category tiles */
.ih-scope .cats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.ih-scope .cat{position:relative;aspect-ratio:16/10;border:1px solid var(--ih-line);overflow:hidden;background:var(--ih-surface-2);display:flex;align-items:flex-end;padding:22px;transition:border-color .3s}
.ih-scope .cat .cbg{position:absolute;inset:0;background-size:cover;background-position:center;filter:saturate(.8) brightness(.75);transition:transform .6s var(--ih-ease),filter .4s}
.ih-scope .cat:hover .cbg{transform:scale(1.05);filter:saturate(.95) brightness(.9)}
.ih-scope .cat::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,transparent 30%,rgba(13,13,13,.88))}
.ih-scope .cat .cin{position:relative;z-index:2;width:100%}
.ih-scope .cat h4{font-weight:800;font-size:22px;text-transform:uppercase;letter-spacing:.02em}
.ih-scope .cat p{font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ih-muted);margin-top:6px;opacity:0;transform:translateY(6px);transition:.35s var(--ih-ease)}
.ih-scope .cat:hover p{opacity:1;transform:none}
.ih-scope .cat .ln{position:absolute;left:22px;right:22px;bottom:64px;height:2px;background:var(--ih-red);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ih-ease);z-index:2}
.ih-scope .cat:hover .ln{transform:scaleX(1)}
.ih-scope .cat:hover{border-color:rgba(227,6,19,.5)}

/* ===== services editorial ===== */
.ih-scope .svc{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--ih-line);border:1px solid var(--ih-line)}
.ih-scope .svc-it{background:var(--ih-surface);padding:34px 32px;position:relative;transition:background .3s}
.ih-scope .svc-it:hover{background:var(--ih-surface-2)}
.ih-scope .svc-it .n{font-family:var(--ih-f-mono);font-size:11px;color:var(--ih-red-hi);letter-spacing:.25em;margin-bottom:16px}
.ih-scope .svc-it h4{font-weight:800;font-size:22px;letter-spacing:.02em;text-transform:uppercase;margin-bottom:10px}
.ih-scope .svc-it .tl{color:var(--ih-muted);font-size:15px;font-style:italic;margin-bottom:12px}
.ih-scope .svc-it p{color:rgba(242,242,242,.6);font-size:14px;line-height:1.65}
.ih-scope .svc-it a.more{display:inline-flex;gap:8px;align-items:center;margin-top:18px;font-weight:700;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ih-red-hi)}

/* ===== standard (process line) ===== */
.ih-scope .std{position:relative;padding-left:0}
.ih-scope .std .track{position:absolute;left:23px;top:10px;bottom:10px;width:2px;background:rgba(242,242,242,.1)}
.ih-scope .std .track i{position:absolute;left:0;top:0;width:100%;height:0;background:var(--ih-red);transition:height 1.4s var(--ih-ease)}
.ih-scope .std.is-in .track i{height:100%}
.ih-scope .std ol{list-style:none;display:flex;flex-direction:column;gap:34px}
.ih-scope .std li{position:relative;padding-left:70px}
.ih-scope .std .pt{position:absolute;left:14px;top:2px;width:20px;height:20px;border:2px solid var(--ih-red);background:var(--ih-black);transform:rotate(45deg)}
.ih-scope .std .stage{font-family:var(--ih-f-mono);font-size:10.5px;color:var(--ih-red-hi);letter-spacing:.25em;text-transform:uppercase}
.ih-scope .std h4{font-weight:800;font-size:22px;text-transform:uppercase;letter-spacing:.02em;margin:8px 0 8px}
.ih-scope .std p{color:rgba(242,242,242,.62);font-size:15px;line-height:1.65;max-width:560px}

/* ===== duo/editorial ===== */
.ih-scope .duo{display:grid;grid-template-columns:1.05fr 1fr;gap:clamp(30px,5vw,70px);align-items:center}
.ih-scope .duo .txt p{color:rgba(242,242,242,.72);font-size:16px;line-height:1.75;margin-bottom:18px}
.ih-scope .duo .txt p b{color:var(--ih-white)}
.ih-scope .frame{position:relative;border:1px solid var(--ih-line);background:var(--ih-surface-2)}
.ih-scope .frame img{width:100%;height:100%;object-fit:cover;aspect-ratio:4/3;filter:saturate(.85)}
.ih-scope .frame .tab{position:absolute;left:0;bottom:0;background:var(--ih-red);color:#fff;font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;padding:9px 15px;z-index:2}

/* ===== stats ===== */
.ih-scope .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--ih-line);border:1px solid var(--ih-line)}
.ih-scope .stat{background:var(--ih-black);padding:32px 28px}
.ih-scope .stat .v{font-weight:800;font-size:clamp(38px,4.4vw,58px);line-height:1}
.ih-scope .stat .v i{color:var(--ih-red-hi);font-style:normal}
.ih-scope .stat .k{font-family:var(--ih-f-mono);font-size:10.5px;color:var(--ih-steel);letter-spacing:.18em;text-transform:uppercase;margin-top:12px;line-height:1.7}

/* ===== band CTA ===== */
.ih-scope .band{background:var(--ih-surface);border-top:1px solid var(--ih-line);border-bottom:1px solid var(--ih-line);display:grid;grid-template-columns:1.4fr auto;align-items:center;gap:30px;padding:clamp(48px,6vw,76px) var(--ih-pad-x)}
.ih-scope .band h3{font-weight:800;font-size:clamp(26px,3.6vw,46px);text-transform:uppercase;line-height:1.02}
.ih-scope .band p{color:rgba(242,242,242,.65);margin-top:12px;font-size:15.5px;max-width:560px;line-height:1.65}
.ih-scope .band .ctas{justify-content:flex-end}

/* ===== forms ===== */
.ih-scope .field{display:flex;flex-direction:column;gap:8px}
.ih-scope .field label{font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ih-muted)}
.ih-scope .field label i{color:var(--ih-red-hi);font-style:normal}
.ih-scope .field input, .ih-scope .field textarea, .ih-scope .field select{background:var(--ih-surface-2);border:1px solid var(--ih-line-strong);color:var(--ih-white);font-family:var(--ih-f-display);font-size:15px;padding:13px 14px;outline:none;transition:border-color .25s;border-radius:0;min-height:46px}
.ih-scope .field textarea{min-height:110px;resize:vertical}
.ih-scope .field input:focus, .ih-scope .field textarea:focus, .ih-scope .field select:focus{border-color:var(--ih-red)}
.ih-scope .field .err{display:none;font-family:var(--ih-f-mono);font-size:10px;color:var(--ih-red-hi);letter-spacing:.08em}
.ih-scope .field.bad input, .ih-scope .field.bad select, .ih-scope .field.bad textarea{border-color:var(--ih-red)}
.ih-scope .field.bad .err{display:block}
.ih-scope .check{display:flex;gap:12px;align-items:flex-start;font-size:14px;color:rgba(242,242,242,.72);line-height:1.6}
.ih-scope .check input{width:18px;height:18px;accent-color:var(--ih-red);margin-top:2px;flex-shrink:0}

/* booking wizard */
.ih-scope .wiz{max-width:860px;margin:0 auto}
.ih-scope .wsteps{display:flex;gap:0;border:1px solid var(--ih-line);margin-bottom:40px;overflow-x:auto}
.ih-scope .wsteps div{flex:1;padding:14px 10px;text-align:center;font-family:var(--ih-f-mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ih-steel);border-right:1px solid var(--ih-line);white-space:nowrap;position:relative;min-width:92px}
.ih-scope .wsteps div:last-child{border-right:none}
.ih-scope .wsteps div.is-on{color:var(--ih-white);background:var(--ih-surface-2)}
.ih-scope .wsteps div.is-on::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--ih-red)}
.ih-scope .wsteps div.done{color:var(--ih-red-hi)}
.ih-scope .wpane{display:none}
.ih-scope .wpane.is-on{display:block}
.ih-scope .wpane h3{font-weight:800;font-size:24px;text-transform:uppercase;margin-bottom:8px}
.ih-scope .wpane .hint{color:var(--ih-steel);font-size:14px;line-height:1.6;margin-bottom:28px}
.ih-scope .frow{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}
.ih-scope .frow.one{grid-template-columns:1fr}
.ih-scope .wnav{display:flex;justify-content:space-between;gap:14px;margin-top:34px;border-top:1px solid var(--ih-line);padding-top:24px}
.ih-scope .pills{display:flex;gap:10px;flex-wrap:wrap}
.ih-scope .pill{font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ih-muted);border:1px solid var(--ih-line-strong);padding:11px 16px;cursor:pointer;transition:.25s;min-height:44px;display:inline-flex;align-items:center}
.ih-scope .pill:hover{color:var(--ih-white);border-color:var(--ih-white)}
.ih-scope .pill.is-on{background:var(--ih-red);border-color:var(--ih-red);color:#fff}
.ih-scope .wsuccess{display:none;text-align:center;padding:60px 20px;border:1px solid var(--ih-line);background:var(--ih-surface)}
.ih-scope .wsuccess.is-on{display:block}
.ih-scope .wsuccess .ref{font-family:var(--ih-f-mono);font-size:13px;color:var(--ih-red-hi);letter-spacing:.2em;margin:18px 0}

/* ===== chips filter ===== */
.ih-scope .chips{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:38px}
.ih-scope .chip{font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ih-steel);border:1px solid var(--ih-line-strong);padding:11px 18px;transition:.25s;cursor:pointer;min-height:44px}
.ih-scope .chip:hover{color:var(--ih-white);border-color:var(--ih-white)}
.ih-scope .chip.act{background:var(--ih-red);border-color:var(--ih-red);color:#fff}

/* ===== case studies ===== */
.ih-scope .case{border:1px solid var(--ih-line);background:var(--ih-surface);display:grid;grid-template-columns:1fr 1.2fr;overflow:hidden}
.ih-scope .case .cimg{background:var(--ih-surface-2);min-height:280px;position:relative}
.ih-scope .case .cimg img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.85)}
.ih-scope .case .cbody{padding:30px}
.ih-scope .case dl{display:grid;grid-template-columns:110px 1fr;gap:10px 18px;margin-top:18px}
.ih-scope .case dt{font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ih-red-hi);padding-top:2px}
.ih-scope .case dd{color:rgba(242,242,242,.75);font-size:14px;line-height:1.55}

/* ===== tables (specs) ===== */
.ih-scope .spec-t{width:100%;border-collapse:collapse;border:1px solid var(--ih-line)}
.ih-scope .spec-t th{font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ih-red-hi);text-align:left;padding:14px 16px;border-bottom:1px solid var(--ih-line);background:var(--ih-surface-2)}
.ih-scope .spec-t td{padding:12px 16px;border-bottom:1px solid var(--ih-line);font-size:14px;color:rgba(242,242,242,.78)}
.ih-scope .spec-t td:first-child{font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.08em;color:var(--ih-steel);text-transform:uppercase;width:44%}

/* faq */
.ih-scope .faq{border:1px solid var(--ih-line)}
.ih-scope .faq details{border-bottom:1px solid var(--ih-line);background:var(--ih-surface)}
.ih-scope .faq details:last-child{border-bottom:none}
.ih-scope .faq summary{padding:20px 24px;font-weight:700;font-size:15.5px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px}
.ih-scope .faq summary::after{content:'+';font-family:var(--ih-f-mono);color:var(--ih-red-hi);font-size:18px}
.ih-scope .faq details[open] summary::after{content:'—'}
.ih-scope .faq .a{padding:0 24px 22px;color:rgba(242,242,242,.65);font-size:14.5px;line-height:1.7;max-width:720px}

/* ===== footer ===== */
.ih-scope footer{border-top:1px solid var(--ih-line);background:var(--ih-surface)}
.ih-scope .fgrid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.1fr;gap:40px;padding:60px var(--ih-pad-x) 46px}
.ih-scope .fgrid .fb img{height:42px;margin-bottom:16px}
.ih-scope .fgrid .fb p{color:var(--ih-steel);font-size:14px;line-height:1.7;max-width:300px}
.ih-scope .fgrid h5{font-family:var(--ih-f-mono);font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--ih-red-hi);margin-bottom:18px}
.ih-scope .fgrid ul{list-style:none;display:flex;flex-direction:column;gap:10px}
.ih-scope .fgrid ul a, .ih-scope .fgrid ul li{color:rgba(242,242,242,.72);font-size:14px}
.ih-scope .fgrid ul a:hover{color:var(--ih-red-hi)}
.ih-scope .fgrid .mono-sm{font-family:var(--ih-f-mono);font-size:12px;letter-spacing:.04em;line-height:2;color:rgba(242,242,242,.72)}
.ih-scope .fgrid .mono-sm b{color:var(--ih-white);font-weight:500}
.ih-scope .fbot{border-top:1px solid var(--ih-line);display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:18px var(--ih-pad-x);font-family:var(--ih-f-mono);font-size:10px;color:var(--ih-steel);letter-spacing:.14em;text-transform:uppercase}
.ih-scope .fbot .r{display:flex;gap:18px;flex-wrap:wrap}
.ih-scope .fbot a{color:var(--ih-steel)}
.ih-scope .fbot a:hover{color:var(--ih-white)}
.ih-scope .fbot .dot{color:var(--ih-red)}

/* mobile conversion bar */
.ih-scope .mbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:60;background:rgba(13,13,13,.97);border-top:1px solid var(--ih-line-strong);grid-template-columns:1.3fr 1fr 1fr}
.ih-scope .mbar a{display:flex;align-items:center;justify-content:center;gap:8px;padding:15px 8px;font-weight:700;font-size:12px;letter-spacing:.1em;text-transform:uppercase;min-height:52px}
.ih-scope .mbar a:first-child{background:var(--ih-red);color:#fff}
.ih-scope .mbar a+a{border-left:1px solid var(--ih-line)}

/* reveal */
.ih-scope .rv{opacity:0;transform:translateY(24px);transition:opacity .7s var(--ih-ease),transform .7s var(--ih-ease)}
.ih-scope .rv.is-in{opacity:1;transform:none}

/* page hero (sub) */
.ih-scope .phero{position:relative;padding:clamp(80px,10vw,150px) var(--ih-pad-x) clamp(50px,6vw,80px);border-bottom:1px solid var(--ih-line);overflow:hidden}
.ih-scope .phero .bgm{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.32;filter:saturate(.7)}
.ih-scope .phero::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,13,13,.35),rgba(13,13,13,.96))}
.ih-scope .phero>div{position:relative;z-index:2}
.ih-scope .crumbs{font-family:var(--ih-f-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ih-steel);margin-bottom:26px}
.ih-scope .crumbs a{color:var(--ih-steel)}
.ih-scope .crumbs a:hover{color:var(--ih-white)}
.ih-scope .crumbs i{color:var(--ih-red);font-style:normal;padding:0 8px}

/* responsive */
@media(max-width:1240px){
.ih-scope .links{gap:14px}
.ih-scope .links a{font-size:11px}
}
@media(max-width:1080px){
.ih-scope .g4{grid-template-columns:repeat(2,1fr)}
.ih-scope .g3{grid-template-columns:repeat(2,1fr)}
.ih-scope .cats{grid-template-columns:repeat(2,1fr)}
.ih-scope .svc{grid-template-columns:1fr}
.ih-scope .trust{grid-template-columns:repeat(2,1fr)}
.ih-scope .trust div{border-bottom:1px solid var(--ih-line)}
.ih-scope .stats{grid-template-columns:repeat(2,1fr)}
.ih-scope .duo{grid-template-columns:1fr}
.ih-scope .fgrid{grid-template-columns:1fr 1fr}
.ih-scope .case{grid-template-columns:1fr}
.ih-scope .band{grid-template-columns:1fr}
.ih-scope .band .ctas{justify-content:flex-start}
}
@media(max-width:1140px){
.ih-scope .links{display:none;position:absolute;top:100%;left:0;right:0;background:rgba(13,13,13,.98);border-bottom:1px solid var(--ih-line);flex-direction:column;align-items:flex-start;padding:18px var(--ih-pad-x) 26px;gap:4px;margin-left:0}
.ih-scope .links.is-open{display:flex}
.ih-scope .links a{font-size:16px;padding:12px 0}
.ih-scope .burger{display:flex;margin-left:auto}
.ih-scope .nav .row{gap:16px}
}
@media(max-width:900px){
.ih-scope .mbar{display:grid}
.ih-scope .util .r .hide-m{display:none}
}
@media(max-width:640px){
.ih-scope .g4, .ih-scope .g3, .ih-scope .g2, .ih-scope .cats{grid-template-columns:1fr}
.ih-scope .stats{grid-template-columns:1fr 1fr}
.ih-scope .fgrid{grid-template-columns:1fr}
.ih-scope .hero{min-height:74vh}
.ih-scope .frow{grid-template-columns:1fr}
.ih-scope .trust{grid-template-columns:1fr}
.ih-scope .case dl{grid-template-columns:96px 1fr}
}
@media(prefers-reduced-motion:reduce){
.ih-scope *, .ih-scope *::before, .ih-scope *::after{animation:none!important;transition:none!important}
.ih-scope .rv{opacity:1;transform:none}
.ih-scope .dline::before{transform:none}
.ih-scope .std .track i{height:100%}
}

/* ── SCOPE ROOT ──────────────────────────────────────────────────────
   Carries what html,body carried in the export. Every ported section
   sits inside an element with this class. */
.ih-scope{
	background: var(--ih-black);
	color: var(--ih-white);
	font-family: var(--ih-f-display);
	-webkit-font-smoothing: antialiased;
}

/* ── BRAND-LOCKED PAGES ──────────────────────────────────────────────
   inc/brand-lock.php stamps .ih-brand-locked onto <body> on 4706 and
   4754. The Μάρκα dropdown is meaningless there: selecting Royal
   Enfield on the CF Moto page ANDs against the lock and returns zero
   results. Correct behaviour, confusing screen — remove the control
   rather than weaken the lock. */
.ih-brand-locked .filter-sidebar .stm-filter_make{ display: none; }

/* ── PARALLAX ────────────────────────────────────────────────────────
   Paired with the parallax engine in assets/js/ih-site.js. One system
   for every photo block. Do NOT also set parallax="content-moving" on
   the same WPBakery row — two engines translating one layer judder.

   Markup:
     <div class="ih-px" data-speed="0.35">
       <div class="ih-px-img" style="background-image:url(…)"></div>
       <div class="ih-px-body"> …content… </div>
     </div>

   The -15% inset top and bottom gives the image 30% more height than
   its container, which is the headroom the transform travels within.
   Change it here and change `rect.height * 0.15` in ih-site.js to match,
   or an edge will show at the extremes.

   isolation:isolate creates a stacking context so the image layer can
   never escape above WPBakery chrome sitting outside the block.
   ──────────────────────────────────────────────────────────────────── */

.ih-scope .ih-px{
	position: relative;
	overflow: hidden;
	isolation: isolate;
}

.ih-scope .ih-px-img{
	position: absolute;
	inset: 0;
	transform: scale(1.15);
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
	will-change: transform;
	z-index: 0;
}

/* Everything that is not the image layer sits above it. */
.ih-scope .ih-px > *:not(.ih-px-img){
	position: relative;
	z-index: 1;
}

/* Legibility scrim. Without it, white type over a bright photo fails
   contrast on roughly half the frames a cover-fitted image can land on. */
.ih-scope .ih-px-img::after{
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(
		180deg,
		rgba(13,13,13,.35) 0%,
		rgba(13,13,13,.55) 55%,
		rgba(13,13,13,.85) 100%
	);
}

/* Darker scrim for blocks carrying a lot of body copy. */
.ih-scope .ih-px.ih-px-deep .ih-px-img::after{
	background: linear-gradient(
		180deg,
		rgba(13,13,13,.62) 0%,
		rgba(13,13,13,.78) 100%
	);
}

/* Side-lit variant for split rows where type sits on one half. */
.ih-scope .ih-px.ih-px-left .ih-px-img::after{
	background: linear-gradient(
		90deg,
		rgba(13,13,13,.88) 0%,
		rgba(13,13,13,.55) 45%,
		rgba(13,13,13,.15) 100%
	);
}

.ih-scope .ih-px-body{
	padding: clamp(56px, 9vw, 132px) var(--ih-pad-x);
}

/* Full-height hero. min-height rather than height so long Greek
   headlines can push it taller instead of overflowing. */
.ih-scope .ih-px-hero{
	min-height: min(88vh, 780px);
	display: flex;
	align-items: flex-end;
}

@media (max-width: 900px){
	/* Engine is off below this width; the transform is cleared in JS. */
	.ih-scope .ih-px-img{ transform: none; }
	.ih-scope .ih-px-hero{ min-height: 62vh; }
}

@media (prefers-reduced-motion: reduce){
	.ih-scope .ih-px-img{ transform: none !important; }
}

/* ── WPBAKERY BRIDGE ─────────────────────────────────────────────────
   Makes NATIVE WPBakery elements render in the design's voice, so pages
   are built from editable blocks instead of Raw HTML. Text, headings,
   images and buttons all stay editable in the visual editor.

   Recipe per element — the class goes in "Extra Class Name":

     Row              ih-scope            required on every design row
                      ih-px               + a background image = parallax
                      ih-px-fast/slow     travel speed
                      ih-band             surface bg + hairline rules
                      ih-tight            kills the row's vertical padding

     Custom Heading   kick                mono eyebrow, red, letterspaced
                      h1 / h2 / h3        display scale
     Text Block       lede                large intro paragraph
                      meta                small muted right-column note
     Button           (nothing needed — styled below)
     Single Image     ih-logo             contained, drop-shadowed brand mark

   .ih-scope already sets the background and font, so a row carrying it
   needs no Design Options colour work.
   ──────────────────────────────────────────────────────────────────── */

/* Row padding: WPBakery ships 0; the design expects real breathing room. */
.ih-scope > .vc_column_container > .vc_column-inner,
.ih-scope .vc_row > .vc_column_container > .vc_column-inner{
	padding-top: 0;
	padding-bottom: 0;
}

.vc_row.ih-scope{
	padding: clamp(48px, 5.5vw, 92px) var(--ih-pad-x);
}

/* Section rhythm.
   A heading row above a content row otherwise stacks 92px of bottom
   padding on 92px of top padding — 184px of black between a heading and
   the thing it introduces, which reads as a broken layout rather than
   breathing room.

   Pair them: ih-tight-b on the heading row, ih-tight-t on the content
   row below it. Adjacent-sibling CSS cannot do this automatically —
   WPBakery injects .vc_row-full-width placeholder divs between rows, so
   `+` selectors miss. */
.vc_row.ih-scope.ih-tight  { padding-top: 0; padding-bottom: 0; }
.vc_row.ih-scope.ih-tight-t{ padding-top: 0; }
.vc_row.ih-scope.ih-tight-b{ padding-bottom: 22px; }

.vc_row.ih-scope.ih-band{
	background: var(--ih-surface);
	border-top: 1px solid var(--ih-line);
	border-bottom: 1px solid var(--ih-line);
}

/* A parallax row needs its own stacking context and clipping, same as
   the hand-written .ih-px block. */
.vc_row.ih-scope.ih-px{
	position: relative;
	overflow: hidden;
	isolation: isolate;
}

.vc_row.ih-scope.ih-px > .vc_column_container{
	position: relative;
	z-index: 1;
}

/* Custom Heading — WPBakery emits inline font-size/color when those
   fields are filled in, and inline beats a stylesheet. Leave the
   typography fields EMPTY in the editor and let these classes work. */
.ih-scope .vc_custom_heading.kick{
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .28em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	margin-bottom: 18px;
}

.ih-scope .vc_custom_heading.h1{
	font-size: clamp(38px, 6.2vw, 78px);
	font-weight: 700;
	line-height: 1.03;
	letter-spacing: -.015em;
	color: var(--ih-white);
	margin-bottom: 22px;
}

.ih-scope .vc_custom_heading.h2{
	font-size: clamp(28px, 4vw, 48px);
	font-weight: 700;
	line-height: 1.08;
	color: var(--ih-white);
	margin-bottom: 18px;
}

.ih-scope .vc_custom_heading.h3.align-h2{ margin-top: 34px; }

.ih-scope .vc_custom_heading.h3{
	font-size: clamp(19px, 2vw, 24px);
	font-weight: 600;
	line-height: 1.2;
	color: var(--ih-white);
	margin-bottom: 10px;
}

.ih-scope .vc_custom_heading .acc{ color: var(--ih-red); }

/* Text blocks */
.ih-scope .wpb_text_column p{
	color: rgba(242,242,242,.72);
	line-height: 1.66;
}
.ih-scope .wpb_text_column p + p{ margin-top: 14px; }
.ih-scope .wpb_text_column b,
.ih-scope .wpb_text_column strong{ color: var(--ih-white); font-weight: 600; }
.ih-scope .wpb_text_column a{
	color: var(--ih-white);
	text-decoration: none;
	border-bottom: 1px solid var(--ih-red);
	padding-bottom: 1px;
	transition: color .2s var(--ih-ease), border-color .2s var(--ih-ease);
}
.ih-scope .wpb_text_column a:hover{
	color: var(--ih-red-hi);
	border-color: var(--ih-red-hi);
}

/* Contact details set larger than body copy — they are the point of the
   block, not a footnote. */
.ih-scope .wpb_text_column.contact p{
	font-size: clamp(17px, 1.6vw, 21px);
	line-height: 2;
	color: var(--ih-white);
}

.ih-scope .wpb_text_column.lede p{
	font-size: clamp(16px, 1.5vw, 19px);
	color: rgba(242,242,242,.82);
	max-width: 62ch;
}

.ih-scope .wpb_text_column.meta p{
	font-size: 14px;
	color: var(--ih-steel);
	max-width: 44ch;
}

/* Buttons — override vc_btn3 rather than asking the editor to set nine
   colour fields per button. Leave the button style as "Default". */
.ih-scope .vc_btn3-container{ display: inline-block; margin: 0 12px 12px 0; }

.ih-scope .vc_btn3.vc_general{
	font-family: var(--ih-f-display);
	font-size: 14px;
	font-weight: 600;
	letter-spacing: .06em;
	text-transform: uppercase;
	padding: 15px 30px;
	border-radius: 0;
	border: 1px solid var(--ih-red);
	background: var(--ih-red);
	color: #fff;
	transition: background .25s var(--ih-ease), border-color .25s var(--ih-ease), transform .25s var(--ih-ease);
}

.ih-scope .vc_btn3.vc_general:hover{
	background: var(--ih-red-hi);
	border-color: var(--ih-red-hi);
	color: #fff;
	transform: translateY(-2px);
}

/* Secondary: add "ghost" to the button's Extra Class Name. */
.ih-scope .ghost .vc_btn3.vc_general,
.ih-scope .vc_btn3.vc_general.ghost{
	background: transparent;
	border-color: var(--ih-line-strong);
	color: var(--ih-white);
}
.ih-scope .ghost .vc_btn3.vc_general:hover,
.ih-scope .vc_btn3.vc_general.ghost:hover{
	background: var(--ih-red);
	border-color: var(--ih-red);
}

/* Single Image used as a brand mark */
.ih-scope .ih-logo .vc_single_image-wrapper{ display: block; }
.ih-scope .ih-logo img{
	max-height: 190px;
	width: auto;
	object-fit: contain;
	filter: drop-shadow(0 24px 30px rgba(0,0,0,.6));
}

/* Separator */
.ih-scope .vc_separator .vc_sep_line{ border-color: var(--ih-line); }

@media (max-width: 900px){
	.vc_row.ih-scope{ padding: clamp(44px, 9vw, 72px) var(--ih-pad-x); }
	.ih-scope .vc_btn3-container{ display: block; margin-right: 0; }
	.ih-scope .vc_btn3.vc_general{ display: block; text-align: center; }
}

/* Closing band slash — the logo motif as decoration on .ih-slash.
   Pseudo-elements rather than markup, so the row stays fully editable. */
.vc_row.ih-scope.ih-slash{ position: relative; overflow: hidden; }
.vc_row.ih-scope.ih-slash > .vc_column_container{ position: relative; z-index: 1; }
.vc_row.ih-scope.ih-slash::before,
.vc_row.ih-scope.ih-slash::after{
	content: '';
	position: absolute;
	top: -40%;
	height: 180%;
	transform: skewX(-18deg);
	pointer-events: none;
}
.vc_row.ih-scope.ih-slash::before{
	right: -6%; width: 34%;
	background: var(--ih-red); opacity: .14;
}
.vc_row.ih-scope.ih-slash::after{
	right: 12%; width: 6%;
	background: var(--ih-white); opacity: .07;
}
@media (max-width: 900px){
	.vc_row.ih-scope.ih-slash::before,
	.vc_row.ih-scope.ih-slash::after{ display: none; }
}

/* Hero row: the design's full-height treatment, applied by class rather
   than by inline Design Options so it survives an editor round-trip. */
.vc_row.ih-scope.ih-hero-row{
	min-height: min(82vh, 760px);
	display: flex;
	align-items: flex-end;
}
@media (max-width: 900px){
	.vc_row.ih-scope.ih-hero-row{ min-height: 60vh; }
}

/* ── THE IRONHORSE STANDARD ──────────────────────────────────────────
   Six-stage process track, built from six native WPBakery columns so
   every stage stays editable. Row class: ih-std

   Per column: Custom Heading .stage  +  Custom Heading .h4  +  Text Block
   The connecting line and the node dots are drawn here, not in markup. */

.vc_row.ih-scope.ih-std{ position: relative; }

/* The line. Sits behind the nodes, inset by half a column so it starts
   and ends under the first and last dot rather than at the row edge. */
.vc_row.ih-scope.ih-std > .vc_column_container::before{
	content: '';
	position: absolute;
	top: 7px;
	left: 0;
	right: 0;
	height: 1px;
	background: var(--ih-line-strong);
	z-index: 0;
}
.vc_row.ih-scope.ih-std > .vc_column_container:first-child::before{ left: 50%; }
.vc_row.ih-scope.ih-std > .vc_column_container:last-child::before{ right: 50%; }

/* The node. */
.vc_row.ih-scope.ih-std > .vc_column_container > .vc_column-inner{
	position: relative;
	padding-top: 30px !important;
	padding-right: 18px;
}
.vc_row.ih-scope.ih-std > .vc_column_container > .vc_column-inner::before{
	content: '';
	position: absolute;
	top: 2px;
	left: 0;
	width: 11px;
	height: 11px;
	background: var(--ih-red);
	transform: skewX(-18deg);
	z-index: 1;
}

.ih-scope .vc_custom_heading.stage{
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .2em;
	text-transform: uppercase;
	color: var(--ih-steel);
	margin-bottom: 8px;
}
.ih-scope .vc_custom_heading.h4{
	font-size: 17px;
	font-weight: 600;
	color: var(--ih-white);
	margin-bottom: 8px;
}
.vc_row.ih-scope.ih-std .wpb_text_column p{ font-size: 13.5px; line-height: 1.55; }

@media (max-width: 900px){
	/* Line goes vertical, running down the left of the stack. */
	.vc_row.ih-scope.ih-std > .vc_column_container::before{
		top: 0; bottom: 0; height: auto;
		left: 5px; right: auto; width: 1px;
	}
	.vc_row.ih-scope.ih-std > .vc_column_container:first-child::before{ left: 5px; top: 12px; }
	.vc_row.ih-scope.ih-std > .vc_column_container:last-child::before{ right: auto; bottom: 50%; }
	.vc_row.ih-scope.ih-std > .vc_column_container > .vc_column-inner{
		padding-top: 0 !important;
		padding-left: 30px;
		padding-bottom: 26px;
	}
	.vc_row.ih-scope.ih-std > .vc_column_container > .vc_column-inner::before{ top: 6px; }
}

/* ── STATS BAND ──────────────────────────────────────────────────────
   Four native columns. Row class: ih-stats
   Per column: Custom Heading .stat-v  +  Text Block .stat-k */

.ih-scope .vc_custom_heading.stat-v{
	font-size: clamp(40px, 5vw, 66px);
	font-weight: 700;
	line-height: 1;
	letter-spacing: -.02em;
	color: var(--ih-white);
	margin-bottom: 10px;
}
.ih-scope .vc_custom_heading.stat-v em{
	font-style: normal;
	font-size: .45em;
	color: var(--ih-red);
	margin-left: 2px;
}
.ih-scope .wpb_text_column.stat-k p{
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel);
}
.vc_row.ih-scope.ih-stats > .vc_column_container{
	border-left: 1px solid var(--ih-line);
}
.vc_row.ih-scope.ih-stats > .vc_column_container:first-child{ border-left: 0; }
.vc_row.ih-scope.ih-stats > .vc_column_container > .vc_column-inner{ padding-left: 26px; }
.vc_row.ih-scope.ih-stats > .vc_column_container:first-child > .vc_column-inner{ padding-left: 0; }

@media (max-width: 900px){
	.vc_row.ih-scope.ih-stats > .vc_column_container{ border-left: 0; border-top: 1px solid var(--ih-line); }
	.vc_row.ih-scope.ih-stats > .vc_column_container:first-child{ border-top: 0; }
	.vc_row.ih-scope.ih-stats > .vc_column_container > .vc_column-inner{ padding: 20px 0 !important; }
}

/* [stm_car_listing_features] renders an empty wrapper when no listing
   carries the featured flag, and that wrapper still reserves height.
   Collapse it so an unflagged inventory reads as "not built yet"
   rather than "broken". Remove once listings are flagged. */
.ih-scope .stm-car-listing-features:empty,
.ih-scope .car-listing-row:empty{ display: none; }

/* ── MOTORS PALETTE OVERRIDE ─────────────────────────────────────────
   Repaints Motors — theme AND plugin — in one place.

   WHY HERE AND NOT IN THEME OPTIONS:
   Colours resolve per template (inc/custom.php:2258). This site runs
   stm-template-motorcycle, so the "Car Dealer Color" fields in Theme
   Options → General write to the dealer template and never render.
   Chasing the right field per setting is slow and easy to get wrong.

   This works because of stylesheet order in <head>:
     motors-style-inline-css     plugin :root
     stm-theme-style-inline-css  theme  :root
     child-style-css             ours
     ih-design.css               ours, last  ← wins

   Same specificity, later in the cascade. No !important needed.

   Values are the IRONHORSE brand palette. #df1d1d, Motors' motorcycle
   default red, is close enough to #E30613 to look like a mistake when
   both appear on one screen — which is exactly what was happening.
   ──────────────────────────────────────────────────────────────────── */

:root{
	/* Theme */
	--motors-default-base-color:      #E30613;
	--motors-default-secondary-color: #1F1F1F;
	--motors-base-color:              #E30613;
	--motors-secondary-color:         #1F1F1F;

	/* Header mega-menu.
	   TRANSPARENT, not a colour. stm-megamenu paints a block behind each
	   <li> from these; the design has no block at all — just the text and
	   its underline sweep. Setting them to any colour puts a chip behind
	   every menu item, which is what a dark value did here and what
	   Motors' #df1d1d default did before that. */
	--hma_background_color:      transparent;
	--hma_item_bg_color:         transparent;
	--hma_hover_bg_color:        transparent;
	--hma_hover_active_bg_color: transparent;
	--hma_hover_text_color:      #F2F2F2;
	--hma_underline:             transparent;
	--hma_underline_2:           transparent;
	--hma_hover_underline:       transparent;
	--hma_hover_underline_2:     transparent;

	/* Plugin — accent */
	--motors-accent-color:                 #E30613;
	--motors-accent-color-alpha:           rgba(227,6,19,.5);
	--motors-accent-color-highalpha:       rgba(227,6,19,.7);
	--motors-accent-color-lowalpha:        rgba(227,6,19,.3);
	--motors-accent-color-super-lowalpha:  rgba(227,6,19,.1);

	/* Plugin — surfaces */
	--motors-bg-color:            #0D0D0D;
	--motors-bg-shade:            #141414;
	--motors-bg-lowalpha-color:   rgba(13,13,13,.3);
	--motors-bg-alpha-color:      rgba(13,13,13,.5);
	--motors-bg-highalpha-color:  rgba(13,13,13,.7);
	--motors-bg-contrast:         #F2F2F2;

	--motors-bg-lowestalpha-contrast:  rgba(242,242,242,.08);
	--motors-bg-lowalpha-contrast:     rgba(242,242,242,.2);
	--motors-bg-alpha-contrast:        rgba(242,242,242,.4);
	--motors-bg-highalpha-contrast:    rgba(242,242,242,.65);
	--motors-bg-highestalpha-contrast: rgba(242,242,242,.85);

	/* Plugin — text. Inverted: Motors assumes dark-on-light. */
	--motors-text-color:                       #F2F2F2;
	--motors-contrast-text-color:              #0D0D0D;
	--motors-text-highalpha-color:             rgba(242,242,242,.72);
	--motors-text-highestalpha-color:          rgba(242,242,242,.85);
	--motors-text-alpha-color:                 rgba(242,242,242,.55);
	--motors-text-lowalpha-color:              rgba(242,242,242,.32);
	--motors-text-lowestalpha-color:           rgba(242,242,242,.12);
	--motors-contrast-text-lowestalpha-color:  rgba(13,13,13,.1);
	--motors-contrast-text-lowalpha-color:     rgba(13,13,13,.3);
	--motors-contrast-text-alpha-color:        rgba(13,13,13,.5);
	--motors-contrast-text-highalpha-color:    rgba(13,13,13,.7);
	--motors-contrast-text-highestalpha-color: rgba(13,13,13,.85);

	--motors-border-color:          rgba(242,242,242,.12);
	--motors-contrast-border-color: rgba(13,13,13,.15);

	/* Plugin — badges. Sold is deliberately grey: a red "sold" badge
	   beside a red brand accent reads as an error, not a status. */
	--motors-spec-badge-color: #FF4D00;
	--motors-sold-badge-color: #6B6B6B;

	--motors-error-bg-color:   rgba(227,6,19,.15);
	--motors-notice-bg-color:  rgba(255,77,0,.15);
	--motors-success-bg-color: rgba(74,222,128,.15);
	--motors-error-text-color:   #FF2733;
	--motors-notice-text-color:  #FF4D00;
	--motors-success-text-color: #4ADE80;

	/* Plugin — cards */
	--motors-card-bg-color:        #141414;
	--motors-card-bg-hover-color:  #1A1A1A;
	--motors-card-title-color:     #F2F2F2;
	--motors-card-price-color:     rgba(242,242,242,.62);
	--motors-card-border-color:    rgba(242,242,242,.10);
	--motors-card-options-color:   #8A8680;
	--motors-card-options-color-super-low-alpha: rgba(242,242,242,.10);
	--motors-card-btn-color:                     #E30613;
	--motors-card-btn-color-lowalpha:            rgba(227,6,19,.6);
	--motors-card-btn-color-highalpha:           rgba(227,6,19,.8);
	--motors-card-btn-color-super-lowalpha:      rgba(227,6,19,.15);
	--motors-card-popup-hover-bg-color: #1A1A1A;
	--motors-card-popup-border-color:   rgba(242,242,242,.15);

	/* Plugin — filter sidebar */
	--motors-filter-inputs-color:  #1A1A1A;
	--motors-filter-bg-color:      #141414;
	--motors-filter-border-color:  #232323;
	--motors-filter-border-color-mediumalpha:    rgba(35,35,35,.5);
	--motors-filter-border-color-highalpha:      rgba(35,35,35,.8);
	--motors-filter-border-color-lowalpha:       rgba(35,35,35,.3);
	--motors-filter-border-color-super-lowalpha: rgba(35,35,35,.2);

	--motors-filter-text-color:                  #F2F2F2;
	--motors-filter-text-color-lowalpha:         rgba(242,242,242,.5);
	--motors-filter-text-color-highalpha:        rgba(242,242,242,.8);
	--motors-filter-text-color-super-lowalpha:   rgba(242,242,242,.2);

	--motors-filter-field-bg-color:                        #1A1A1A;
	--motors-filter-field-text-color:                      #F2F2F2;
	--motors-filter-field-text-color-lowalpha:             rgba(242,242,242,.5);
	--motors-filter-field-text-color-highalpha:            rgba(242,242,242,.8);
	--motors-filter-field-text-color-super-lowalpha:       rgba(242,242,242,.2);
	--motors-filter-field-text-color-secondary:            #F2F2F2;
	--motors-filter-field-text-color-secondary-lowalpha:   rgba(242,242,242,.4);
	--motors-filter-field-text-color-secondary-highalpha:  rgba(242,242,242,.8);
	--motors-filter-field-border-color:                    rgba(242,242,242,.2);
	--motors-filter-field-border-color-lowalpha:           rgba(242,242,242,.1);
	--motors-filter-field-link-color:                      #E30613;
	--motors-filter-field-link-color-lowalpha:             rgba(227,6,19,.5);
	--motors-filter-field-link-color-highalpha:            rgba(227,6,19,.8);
	--motors-filter-field-link-color-super-lowalpha:       rgba(227,6,19,.2);

	/* Legacy MVL set, still referenced by some plugin components. */
	--mvl-primary-color:         #E30613;
	--mvl-secondary-color:       #1F1F1F;
	--mvl-secondary-color-dark:  #141414;
	--mvl-third-color:           #232323;
	--mvl-fourth-color:          #0D0D0D;
}

/* The single-listing tab bar renders inactive tabs in the accent colour
   and the active one dark — louder than the thing it is not. Invert. */
.stm-filter-tabs-skewed .stm-filter-tab-single-unit{
	background: var(--ih-surface-2);
}
.stm-filter-tabs-skewed .stm-filter-tab-single-unit a{ color: var(--ih-muted); }
.stm-filter-tabs-skewed .stm-filter-tab-single-unit.active{ background: var(--ih-red); }
.stm-filter-tabs-skewed .stm-filter-tab-single-unit.active a{ color: #fff; }

/* ── FEATURED GRID CARDS ─────────────────────────────────────────────
   Reskin for [ih_featured], matching the design's .cat category tile:
   full-bleed image, title overlaid at the foot, a red line wiping in
   from the left on hover, and the taxonomy line revealing beneath it.

   Motors' markup is
     .stm_moto_single_grid_item > a > .image + .listing-car-item-meta
   with the meta stacked BELOW the image. The design overlays it, so the
   anchor becomes the aspect-ratio frame, .image is absolutely filled,
   and the meta is pinned to the bottom.

   Line and reveal come from the design verbatim:
     transform: scaleX(0) -> scaleX(1), origin left, .45s
     opacity 0 + translateY(6px) -> 1 + none, .35s
   ──────────────────────────────────────────────────────────────────── */

.ih-featured-grid .row{
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 16px;
	margin: 0;
}

/* Bootstrap gives .row a clearfix — `.row:before{content:" ";display:table}`.
   In a grid container PSEUDO-ELEMENTS ARE GRID ITEMS, so ::before took
   cell one and shunted every card along by a slot. */
.ih-featured-grid .row::before,
.ih-featured-grid .row::after{ content: none !important; display: none !important; }

/* Motors also emits an empty <style> per card — likewise a grid item. */
.ih-featured-grid .row > *:not(.stm_moto_single_grid_item){ display: none !important; }

.ih-featured-grid .row > .stm_moto_single_grid_item{
	width: 100% !important;
	max-width: none !important;
	padding: 0 !important;
	margin: 0 !important;
	float: none !important;
	border: 1px solid var(--ih-line);
	background: var(--ih-surface-2);
	overflow: hidden;
	transition: border-color .3s var(--ih-ease);
}
.ih-featured-grid .stm_moto_single_grid_item:hover{
	border-color: rgba(227,6,19,.5);
}

/* The anchor is the frame. */
.ih-featured-grid .stm_moto_single_grid_item > a{
	position: relative;
	display: block;
	aspect-ratio: 16 / 10;
	overflow: hidden;
	text-decoration: none;
}

/* Scrim. Without it, white type over a bright photo fails contrast on
   roughly half the frames a cover fit can land on. */
.ih-featured-grid .stm_moto_single_grid_item > a::after{
	content: '';
	position: absolute;
	inset: 0;
	z-index: 1;
	background: linear-gradient(180deg, transparent 30%, rgba(13,13,13,.88));
	pointer-events: none;
}

.ih-featured-grid .image{
	position: absolute !important;
	inset: 0;
	width: 100%;
	height: 100%;
	margin: 0 !important;
	background: var(--ih-surface-2);
	overflow: hidden;
}

/* cover, matching the design's .cbg. Studio cutouts with wide
   transparent margins will crop at the edges — switch this one
   declaration to `contain` if you would rather letterbox them. */
.ih-featured-grid .image img{
	position: absolute;
	inset: 0;
	width: 100% !important;
	height: 100% !important;
	object-fit: cover;
	object-position: center;
	display: block;
	filter: saturate(.8) brightness(.75);
	transition: transform .6s var(--ih-ease), filter .4s var(--ih-ease);
}
.ih-featured-grid .stm_moto_single_grid_item:hover .image img{
	transform: scale(1.05);
	filter: saturate(.95) brightness(.9);
}

/* Meta overlays the foot of the frame. */
.ih-featured-grid .listing-car-item-meta,
.ih-featured-grid .listing-car-item-meta *{
	background: transparent !important;
	border: 0 !important;
	border-radius: 0 !important;
}
.ih-featured-grid .listing-car-item-meta{
	position: absolute !important;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 2;
	padding: 22px !important;
	margin: 0 !important;
}

/* THE WIPE LINE. Sits on the title's midline and spans the tile. */
.ih-featured-grid .car-meta-top{
	position: relative;
	margin: 0 !important;
	padding: 0 !important;
}
.ih-featured-grid .car-meta-top::after{
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 50%;
	height: 2px;
	background: var(--ih-red);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .45s var(--ih-ease);
	z-index: 3;
}
.ih-featured-grid .stm_moto_single_grid_item:hover .car-meta-top::after{
	transform: scaleX(1);
}

.ih-featured-grid .car-title{
	font-weight: 800;
	font-size: 22px;
	line-height: 1.1;
	text-transform: uppercase;
	letter-spacing: .02em;
	color: var(--ih-white);
	transition: color .35s var(--ih-ease);
}
.ih-featured-grid .stm_moto_single_grid_item:hover .car-title{ color: var(--ih-red); }

/* Taxonomy line: hidden, revealed on hover, exactly as .cat p. */
.ih-featured-grid .listing-car-item-meta ul,
.ih-featured-grid .listing-car-item-meta li{ list-style: none; margin: 0; padding: 0; }
.ih-featured-grid .listing-car-item-meta li{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-muted);
	margin-top: 6px !important;
	opacity: 0;
	transform: translateY(6px);
	transition: opacity .35s var(--ih-ease), transform .35s var(--ih-ease);
}
.ih-featured-grid .stm_moto_single_grid_item:hover .listing-car-item-meta li{
	opacity: 1;
	transform: none;
}

/* Ribbon sits above the scrim. */
.ih-featured-grid .special-label{
	z-index: 4;
	font-size: 9.5px !important;
	letter-spacing: .14em;
	font-weight: 600;
}

/* Motors' own hover unit (compare, photo count) would collide with the
   overlaid title — it is redundant on a featured band. */
.ih-featured-grid .stm_moto_hover_unit{ display: none !important; }

@media (max-width: 1024px){
	.ih-featured-grid .row{ grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px){
	.ih-featured-grid .row{ grid-template-columns: 1fr; }
	/* No hover on touch — reveal the taxonomy line permanently. */
	.ih-featured-grid .listing-car-item-meta li{ opacity: 1; transform: none; }
	.ih-featured-grid .car-meta-top::after{ transform: scaleX(1); }
}

/* ── FULL-BLEED ROW PADDING ──────────────────────────────────────────
   stretch_row_content_no_spaces adds .vc_row-no-padding, which zeroes
   the padding WPBakery would otherwise apply — so a hero built that way
   has its copy hard against the viewport edge. Restore it here; the
   row is still edge-to-edge, only the content is inset. */
.vc_row.ih-scope.vc_row-no-padding{
	padding-left: var(--ih-pad-x);
	padding-right: var(--ih-pad-x);
}
.vc_row.ih-scope.vc_row-no-padding > .vc_column_container > .vc_column-inner{
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* ── HERO ────────────────────────────────────────────────────────────
   The header is transparent and sits over the hero, so the top padding
   has to clear it or the kicker slides under the top bar.

   Flex is used to sit the copy at the foot of the frame. Bootstrap's
   grid floats, so the two columns need explicit flex bases — without
   them they collapse to content width the moment the parent turns into
   a flex container. */
/* ── HERO: FULL VIEWPORT ─────────────────────────────────────────────
   100svh, not 100vh. On mobile, 100vh is measured against the viewport
   WITHOUT the browser's collapsing address bar, so a hero sized that way
   is taller than the screen on load and its bottom edge — where the copy
   and buttons sit — starts off-screen. svh uses the small viewport, so
   the hero always fits and never jumps as the bar hides. The vh line
   before it is the fallback for anything that does not know svh.

   Content is bottom-aligned, with top padding clearing the transparent
   header so the kicker cannot slide under the nav. */
.vc_row.ih-scope.ih-hero-row{
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	min-height: 100vh;
	min-height: 100svh;
	padding-top: calc(var(--ih-nav-h, 140px) + 40px);
	padding-bottom: clamp(56px, 7vh, 110px);
}
.vc_row.ih-scope.ih-hero-row > .vc_col-sm-8{ flex: 0 0 66.6667%; max-width: 66.6667%; }
.vc_row.ih-scope.ih-hero-row > .vc_col-sm-4{ flex: 0 0 33.3333%; max-width: 33.3333%; }

/* The workshop band is also no-padding; it needs vertical room back. */
.vc_row.ih-scope.ih-px:not(.ih-hero-row){
	padding-top: clamp(64px, 8vw, 128px);
	padding-bottom: clamp(64px, 8vw, 128px);
}

@media (max-width: 900px){
	/* 92svh rather than 100 — a sliver of the next section shows at the
	   fold, which tells the reader there is more below. On a phone a
	   hero that fills the screen exactly can read as the whole page. */
	.vc_row.ih-scope.ih-hero-row{
		min-height: 92svh;
		padding-top: calc(var(--ih-nav-h, 110px) + 28px);
	}
	.vc_row.ih-scope.ih-hero-row > .vc_col-sm-8,
	.vc_row.ih-scope.ih-hero-row > .vc_col-sm-4{ flex: 0 0 100%; max-width: 100%; }
}

/* ── FILTER TILES ────────────────────────────────────────────────────
   Series tiles on the brand pages. Type-led rather than photographic:
   the inventory has no consistent per-series imagery, and four tiles
   where one lacks a photo reads worse than four that never had one.

   Each links back to the SAME page with a taxonomy query
   (?category_type=naked#inventory), so the visitor stays on the brand
   page and inc/brand-lock.php still supplies the make. That is the fix
   for [stm_inventory_categories], which hardcodes /listings/?… and
   sends people off the brand page entirely.

   To add photography later: give the anchor a background image and the
   ih-px class — the parallax engine hoists it automatically.
   ──────────────────────────────────────────────────────────────────── */

.ih-scope .ih-tiles{
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 16px;
}

.ih-scope .ih-tile{
	position: relative;
	display: block;
	padding: 30px 26px 34px;
	background: var(--ih-surface);
	border: 1px solid var(--ih-line);
	text-decoration: none;
	overflow: hidden;
	transition: border-color .3s var(--ih-ease), background .3s var(--ih-ease);
}
.ih-scope .ih-tile:hover{
	border-color: rgba(227,6,19,.5);
	background: var(--ih-surface-2);
	text-decoration: none;
}

.ih-scope .ih-tile-n{
	display: block;
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .22em;
	color: var(--ih-red-hi);
	margin-bottom: 26px;
}
.ih-scope .ih-tile-t{
	display: block;
	font-size: clamp(19px, 1.8vw, 24px);
	font-weight: 700;
	line-height: 1.1;
	text-transform: uppercase;
	letter-spacing: .01em;
	color: var(--ih-white);
	transition: color .3s var(--ih-ease);
}
.ih-scope .ih-tile:hover .ih-tile-t{ color: var(--ih-red); }

.ih-scope .ih-tile-s{
	display: block;
	margin-top: 10px;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-steel);
	opacity: 0;
	transform: translateY(6px);
	transition: opacity .35s var(--ih-ease), transform .35s var(--ih-ease);
}
.ih-scope .ih-tile:hover .ih-tile-s{ opacity: 1; transform: none; }

/* The wipe, same curve and origin as the design's .cat .ln */
.ih-scope .ih-tile-ln{
	position: absolute;
	left: 26px;
	right: 26px;
	bottom: 24px;
	height: 2px;
	background: var(--ih-red);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .45s var(--ih-ease);
}
.ih-scope .ih-tile:hover .ih-tile-ln{ transform: scaleX(1); }

@media (max-width: 1024px){
	.ih-scope .ih-tiles{ grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 560px){
	.ih-scope .ih-tiles{ grid-template-columns: 1fr; }
	/* No hover on touch. */
	.ih-scope .ih-tile-s{ opacity: 1; transform: none; }
	.ih-scope .ih-tile-ln{ transform: scaleX(1); }
}

/* ═══ MOTION LAYER ═══════════════════════════════════════════════════
   Ported from the design's motion pass. Every timing, easing and
   distance below is taken from site/style.css verbatim — do not round
   them, the stagger reads wrong if the steps drift.
   ═══════════════════════════════════════════════════════════════════ */

/* ── PAGE IN ─────────────────────────────────────────────────────────
   Pairs with the veil in ih-site.js: the outgoing page fades to jet,
   the incoming one fades up, and a navigation reads as one movement
   rather than a white flash. */
@keyframes ih-pageIn{ from{ opacity: 0 } to{ opacity: 1 } }
@keyframes ih-rise{
	from{ opacity: 0; transform: translateY(26px) }
	to  { opacity: 1; transform: none }
}

body{ animation: ih-pageIn .5s ease both; }

/* ── HERO ENTRANCE ───────────────────────────────────────────────────
   Kicker, headline, lede and buttons rise in sequence. In the design
   these are direct children of .hero .in; WPBakery nests them one level
   deeper inside .wpb_wrapper. */
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *{
	animation: ih-rise .9s var(--ih-ease) both;
}
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *:nth-child(2){ animation-delay: .08s }
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *:nth-child(3){ animation-delay: .16s }
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *:nth-child(4){ animation-delay: .24s }
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *:nth-child(n+5){ animation-delay: .32s }

/* JS drives transform and opacity on this wrapper as the hero scrolls. */
.vc_row.ih-scope.ih-hero-row .wpb_wrapper{ will-change: transform, opacity; }

/* ── SECTION STAGGER ─────────────────────────────────────────────────
   ih-site.js adds .is-in to every .ih-scope row on entry. Children step
   in at 70ms intervals, capped at the 9th so a long column never ends
   up waiting most of a second. */
.vc_row.ih-scope .wpb_wrapper > *{
	opacity: 0;
	transform: translateY(16px);
	transition: opacity .6s var(--ih-ease), transform .6s var(--ih-ease);
}
.vc_row.ih-scope.is-in .wpb_wrapper > *{ opacity: 1; transform: none; }

.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(2){ transition-delay: .07s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(3){ transition-delay: .14s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(4){ transition-delay: .21s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(5){ transition-delay: .28s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(6){ transition-delay: .35s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(7){ transition-delay: .42s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(8){ transition-delay: .49s }
.vc_row.ih-scope.is-in .wpb_wrapper > *:nth-child(n+9){ transition-delay: .56s }

/* The hero runs the keyframe entrance instead — exclude it, or its
   children start at opacity 0 and never transition. */
.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *{ opacity: 1; transform: none; }

/* No-JS fallback: without .is-in every section would stay invisible. */
.no-js .vc_row.ih-scope .wpb_wrapper > *{ opacity: 1; transform: none; }

/* ── BUTTON SHEEN ────────────────────────────────────────────────────
   A skewed highlight sweeps across on hover. The skew matches the
   logo's 18° slash, so the motion belongs to the brand rather than
   being a generic shine. */
.ih-scope .vc_btn3.vc_general{ position: relative; overflow: hidden; }
.ih-scope .vc_btn3.vc_general::before{
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	left: -70%;
	width: 45%;
	background: linear-gradient(105deg, transparent, rgba(255,255,255,.22), transparent);
	transform: skewX(-18deg);
	transition: left .55s var(--ih-ease);
	pointer-events: none;
}
.ih-scope .vc_btn3.vc_general:hover::before{ left: 125%; }

/* Same treatment on the filter tiles. */
.ih-scope .ih-tile::before{
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	left: -70%;
	width: 45%;
	background: linear-gradient(105deg, transparent, rgba(255,255,255,.06), transparent);
	transform: skewX(-18deg);
	transition: left .55s var(--ih-ease);
	pointer-events: none;
}
.ih-scope .ih-tile:hover::before{ left: 125%; }

/* ── FRAMED IMAGE ────────────────────────────────────────────────────
   Wrapper for images that should drift against the scroll. Add ih-frame
   to a Single Image element's Extra Class Name; ih-site.js picks up
   `.ih-frame > img` at depth -34, opposite to backgrounds. */
.ih-scope .ih-frame{ position: relative; overflow: hidden; }
.ih-scope .ih-frame img{ will-change: transform; transform: scale(1.15); display: block; }

/* ── PAGE VEIL ───────────────────────────────────────────────────────
   Created by ih-site.js on load. z-index 120 clears WPBakery modals and
   the sticky header but stays under the WP admin bar. */
.ih-veil{
	position: fixed;
	inset: 0;
	z-index: 120;
	background: var(--ih-black);
	opacity: 0;
	pointer-events: none;
	transition: opacity .32s ease;
}
.ih-veil::after{
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	background: var(--ih-red);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .34s var(--ih-ease);
}
.ih-veil.is-on{ opacity: 1; pointer-events: all; }
.ih-veil.is-on::after{ transform: scaleX(1); }

/* ── REDUCED MOTION ──────────────────────────────────────────────────
   Everything above is decorative. Nothing here may hide content: the
   overriding risk with entrance animations is that a reader who has
   asked for no motion is left staring at opacity 0. */
@media (prefers-reduced-motion: reduce){
	body,
	.vc_row.ih-scope.ih-hero-row .wpb_wrapper > *{
		animation: none !important;
		opacity: 1 !important;
	}
	.vc_row.ih-scope .wpb_wrapper > *{
		opacity: 1 !important;
		transform: none !important;
		transition: none !important;
	}
	.ih-scope .ih-px-img,
	.ih-scope .ih-frame img{ transform: none !important; }
	.ih-scope .vc_btn3.vc_general::before,
	.ih-scope .ih-tile::before{ display: none; }
	.ih-veil{ display: none; }
}

/* ── STICKY HEADER TRANSITION ────────────────────────────────────────
   Motors ships a slide-down transition for the motorcycle, equipment,
   aircrafts and magazine headers, and omits it for ev_dealer — which is
   the one this site uses. dist/headers/header-ev_dealer.css has only:

     .header-main.stm-fixed { padding:18px 30px; position:fixed; top:0 }

   No transform, no opacity, no transition. A static→fixed flip cannot
   animate, so the bar jumps.

   Ported from header-motorcycle.css, which does it correctly. Paired
   with the two-threshold handler in ih-site.js: the bar hides at 120px,
   then slides back at 300px.
   ──────────────────────────────────────────────────────────────────── */

#header .header-main-ev_dealer{
	transition: transform .28s var(--ih-ease),
	            opacity .28s var(--ih-ease),
	            background-color .28s var(--ih-ease);
	will-change: transform, opacity;
}

#header .header-main-ev_dealer.stm-fixed-invisible{
	transform: translateY(-100%);
	opacity: 0;
}

/* .stm-fixed must come after .stm-fixed-invisible — both are applied
   while the bar is docked, and this one has to win. */
#header .header-main-ev_dealer.stm-fixed{
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	transform: translateY(0);
	opacity: 1;
	visibility: visible;
	z-index: 110;

	/* Docked, the bar no longer has the hero behind it, so it needs its
	   own surface. Blur keeps it feeling layered over the page rather
	   than pasted on top. */
	background: rgba(13, 13, 13, .93);
	-webkit-backdrop-filter: saturate(140%) blur(12px);
	backdrop-filter: saturate(140%) blur(12px);
	border-bottom: 1px solid var(--ih-line);
	padding-top: 10px;
	padding-bottom: 10px;
}

/* The top bar belongs to the hero, not to the docked state. */
#header.stm-sticky-on .top-bar-wrap{ opacity: 0; pointer-events: none; }
#header .top-bar-wrap{ transition: opacity .25s var(--ih-ease); }

/* Clear the WP admin bar when logged in. */
.admin-bar #header .header-main-ev_dealer.stm-fixed{ top: 32px; }
@media screen and (max-width: 782px){
	.admin-bar #header .header-main-ev_dealer.stm-fixed{ top: 46px; }
}

@media (prefers-reduced-motion: reduce){
	#header .header-main-ev_dealer{ transition: none !important; }
	#header .header-main-ev_dealer.stm-fixed-invisible{ transform: none; opacity: 1; }
}

/* ═══ HOMEPAGE FINISH ════════════════════════════════════════════════ */

/* ── 02 · BRAND CARDS ────────────────────────────────────────────────
   Add ih-brand to each brand COLUMN's Extra Class Name. The column's
   existing Single Image / Heading / Text / Button stay fully editable —
   this treats the whole column as a card rather than replacing it with
   Raw HTML. */

.ih-scope .ih-brand > .vc_column-inner{
	position: relative;
	background: var(--ih-surface);
	border: 1px solid var(--ih-line);
	padding: 0 !important;
	overflow: hidden;
	transition: border-color .35s var(--ih-ease), transform .35s var(--ih-ease);
}
.ih-scope .ih-brand:hover > .vc_column-inner{
	border-color: rgba(227,6,19,.45);
	transform: translateY(-4px);
}

/* The logo sits on a lit plate that brightens on hover. */
.ih-scope .ih-brand .wpb_single_image{
	position: relative;
	margin: 0 !important;
	padding: clamp(34px, 4vw, 60px) clamp(24px, 3vw, 44px);
	background:
		radial-gradient(120% 90% at 50% 0%, rgba(227,6,19,.10), transparent 62%),
		var(--ih-surface-2);
	border-bottom: 1px solid var(--ih-line);
	overflow: hidden;
	transition: background .45s var(--ih-ease);
}
.ih-scope .ih-brand:hover .wpb_single_image{
	background:
		radial-gradient(120% 90% at 50% 0%, rgba(227,6,19,.20), transparent 62%),
		var(--ih-surface-2);
}
.ih-scope .ih-brand .wpb_single_image img{
	transition: transform .55s var(--ih-ease);
}
.ih-scope .ih-brand:hover .wpb_single_image img{ transform: scale(1.05); }

/* The logo's diagonal slash, sweeping across on hover. */
.ih-scope .ih-brand .wpb_single_image::after{
	content: '';
	position: absolute;
	top: -20%;
	bottom: -20%;
	left: -60%;
	width: 38%;
	background: linear-gradient(105deg, transparent, rgba(255,255,255,.10), transparent);
	transform: skewX(-18deg);
	transition: left .7s var(--ih-ease);
	pointer-events: none;
}
.ih-scope .ih-brand:hover .wpb_single_image::after{ left: 130%; }

.ih-scope .ih-brand .vc_custom_heading.h3,
.ih-scope .ih-brand .wpb_text_column,
.ih-scope .ih-brand .vc_btn3-container{
	padding-left: clamp(24px, 3vw, 40px);
	padding-right: clamp(24px, 3vw, 40px);
}
.ih-scope .ih-brand .vc_custom_heading.h3{ padding-top: 28px; }
.ih-scope .ih-brand .vc_btn3-container{ padding-bottom: 30px; }

/* Red rule under the plate, wiping in from the left. */
.ih-scope .ih-brand > .vc_column-inner::before{
	content: '';
	position: absolute;
	left: 0; right: 0;
	top: 0;
	height: 2px;
	background: var(--ih-red);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .5s var(--ih-ease);
	z-index: 2;
}
.ih-scope .ih-brand:hover > .vc_column-inner::before{ transform: scaleX(1); }

/* ── 04 · CARBON BAND ────────────────────────────────────────────────
   Add ih-carbon to the row. A 4px twill woven from four gradients —
   no image request, and it scales cleanly on any display density.
   From the brand book's "Premium Mechanical" reference. */

.vc_row.ih-scope.ih-carbon{
	position: relative;
	background-color: var(--ih-surface);
	background-image:
		repeating-linear-gradient( 45deg, rgba(255,255,255,.022) 0 1px, transparent 1px 4px),
		repeating-linear-gradient(-45deg, rgba(255,255,255,.022) 0 1px, transparent 1px 4px),
		repeating-linear-gradient( 45deg, rgba(0,0,0,.30) 0 2px, transparent 2px 4px),
		repeating-linear-gradient(-45deg, rgba(0,0,0,.30) 0 2px, transparent 2px 4px);
	background-size: 4px 4px;
}
/* Vignette, so the weave reads as a surface rather than wallpaper. */
.vc_row.ih-scope.ih-carbon::after{
	content: '';
	position: absolute;
	inset: 0;
	background: radial-gradient(80% 120% at 50% 0%, transparent 30%, rgba(13,13,13,.55));
	pointer-events: none;
}
.vc_row.ih-scope.ih-carbon > .vc_column_container{ position: relative; z-index: 1; }

.ih-scope .ih-carbon .icon-box{
	background: transparent !important;
	border: 1px solid var(--ih-line);
	padding: 32px 28px !important;
	height: 100%;
	transition: border-color .3s var(--ih-ease), background .3s var(--ih-ease);
}
.ih-scope .ih-carbon .icon-box:hover{
	border-color: rgba(227,6,19,.4);
	background: rgba(13,13,13,.5) !important;
}

/* ── FRAME ───────────────────────────────────────────────────────────
   A bounded image with an optional red caption tab. Put `ih-frame` in a
   COLUMN's Extra Class Name and drop a Single Image inside it.

   NO ASPECT RATIO IS SET HERE ON PURPOSE. Hardcoding one means every
   dimensional change has to come back through the stylesheet, which is
   the wrong place for a choice you should be able to make in the
   builder. Add a ratio class alongside it — see RATIOS below — or add
   none and the image keeps its natural proportions.

   The height chain is the fiddly part: WPBakery nests the image five
   levels deep, and every one of them needs height:100% or the image
   sits at its natural size inside a taller box. That was the gap.
   ──────────────────────────────────────────────────────────────────── */
.ih-scope .ih-frame{
	position: relative;
	overflow: hidden;
	border: 1px solid var(--ih-line);
	background: var(--ih-surface-2);
}
.ih-scope .ih-frame > .vc_column-inner,
.ih-scope .ih-frame .wpb_wrapper,
.ih-scope .ih-frame .wpb_single_image,
.ih-scope .ih-frame .vc_single_image-wrapper{
	height: 100%;
	margin: 0;
	display: block;
}
.ih-scope .ih-frame img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	transform: scale(1.15);
	will-change: transform;
}

/* Caption tab. Set the column's data-cap attribute to show it. */
.ih-scope .ih-frame[data-cap]::after{
	content: attr(data-cap);
	position: absolute;
	left: 0;
	bottom: 0;
	padding: 9px 15px;
	background: var(--ih-red);
	color: #fff;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .2em;
	text-transform: uppercase;
	z-index: 2;
}

/* ── RATIOS ──────────────────────────────────────────────────────────
   Extra Class Name, on the same column as ih-frame. Also works on any
   .ih-scope element that should hold a shape.

     ih-16x9   wide, cinematic
     ih-3x2    classic photograph
     ih-4x3    default-ish, works for most product shots
     ih-1x1    square
     ih-4x5    portrait
     ih-2x3    tall portrait
     (none)    natural height — the image decides

   Pair with the Single Image element's own Image Size field: set that
   to the crop you want WordPress to serve, and the ratio class to the
   shape you want the box to hold. */
.ih-scope .ih-16x9{ aspect-ratio: 16 / 9; }
.ih-scope .ih-3x2 { aspect-ratio: 3 / 2;  }
.ih-scope .ih-4x3 { aspect-ratio: 4 / 3;  }
.ih-scope .ih-1x1 { aspect-ratio: 1 / 1;  }
.ih-scope .ih-4x5 { aspect-ratio: 4 / 5;  }
.ih-scope .ih-2x3 { aspect-ratio: 2 / 3;  }

/* ── FIT ─────────────────────────────────────────────────────────────
   ih-contain   letterbox instead of crop — for logos and cutouts
   ih-fill      stretch (rarely right, but occasionally needed)
   ih-still     cancel the 1.15 scale, for images that must not crop */
.ih-scope .ih-contain img{ object-fit: contain; transform: none; }
.ih-scope .ih-fill img{ object-fit: fill; transform: none; }
.ih-scope .ih-still img{ transform: none; }

/* ── 05 · PINNED STAGE SEQUENCE ──────────────────────────────────────
   The Ironhorse Standard. The section pins and each stage takes the
   screen in turn at display size — six stages at 24px read as a spec
   sheet; one at 90px reads as a statement.

   Stages are STACKED, not laid out side by side: every column occupies
   the same grid cell, and only the active one is visible. That is what
   lets the type be this large without the row becoming enormous.

   ih-site.js creates .ih-pin and the numbered rail, and clears any
   clipping ancestor that would cancel position:sticky.

   OPTIONAL IMAGERY: give a stage column a background image in Design
   Options and it becomes the backdrop for that stage — the CSS below
   already handles it. Reads as complete without one.
   ──────────────────────────────────────────────────────────────────── */

/* FULL-BLEED WRAPPER.
   .ih-pin sits inside WPBakery's centred container, so in the absolute
   states `left: 0` is the CONTAINER's left edge while in the fixed state
   it is the VIEWPORT's. That difference is the ~165px horizontal jump at
   the handover. Spanning the viewport makes both origins the same edge. */
.ih-pin{
	position: relative;
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

/* THREE STATES, driven by ih-site.js. position:fixed rather than sticky —
   see the note in the JS. The before/after states keep the row anchored
   to the wrapper's top and bottom edges so nothing jumps at the
   handover. */
.ih-pin > .vc_row.ih-std{
	height: 100vh;
	width: 100%;
	left: 0;
	right: 0;
	display: grid !important;
	grid-template-columns: 1fr;
	align-items: center;
	overflow: hidden;
	padding: 0 var(--ih-pad-x) !important;
	background: var(--ih-black);
	z-index: 1;
}

/* !important IS REQUIRED HERE — this is not defensive habit.

   WPBakery's full-width script writes INLINE styles onto every row
   carrying data-vc-full-width:

     style="position: relative; left: -82px; width: 1444px; max-width: 1444px"

   Inline beats any selector-based specificity, so position:sticky and
   then position:fixed were both silently overridden before they could
   apply. `left` and `width` need the same treatment or the fixed row is
   thrown 82px off-screen at the wrong width.

   A stylesheet !important does beat a non-important inline style, which
   is the one case where it is the correct tool rather than a shortcut.
   WPBakery also rewrites these on resize, and !important survives that
   where a JS-set inline value would be clobbered. */
.ih-pin > .vc_row.ih-std.is-before,
.ih-pin > .vc_row.ih-std.is-fixed,
.ih-pin > .vc_row.ih-std.is-after{
	left: 0 !important;
	right: auto !important;
	width: 100% !important;
	max-width: 100% !important;
}
.ih-pin > .vc_row.ih-std.is-before{ position: absolute !important; top: 0 !important; }
.ih-pin > .vc_row.ih-std.is-fixed { position: fixed !important;    top: 0 !important; }
.ih-pin > .vc_row.ih-std.is-after { position: absolute !important; bottom: 0 !important; top: auto !important; }

/* Every stage in the same cell. */
.ih-pin > .vc_row.ih-std > .vc_column_container{
	grid-area: 1 / 1;
	align-self: center;
	position: relative;
	width: 100% !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
	opacity: 0;
	visibility: hidden;
	transform: translateY(28px);
	transition: opacity .55s var(--ih-ease), transform .55s var(--ih-ease), visibility .55s;
	pointer-events: none;
}
.ih-pin > .vc_row.ih-std > .vc_column_container.is-active{
	opacity: 1;
	visibility: visible;
	transform: none;
	pointer-events: auto;
}
/* Stages already passed leave upward, so the sequence has direction. */
.ih-pin > .vc_row.ih-std > .vc_column_container.is-past{ transform: translateY(-28px); }

/* The stage spans the whole frame. A max-width here confined BOTH
   columns to one narrow band, which is why the photo sat mid-canvas
   with dead space to its right and could not align to the copy.
   Left padding clears the 01–06 rail; the copy is bounded on its own. */
.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner{
	padding: 0 0 0 clamp(96px, 11vw, 210px) !important;
	max-width: none;
	position: relative;
	z-index: 2;
}
/* The horizontal track's node and line have no place here. */
.ih-pin > .vc_row.ih-std > .vc_column_container::before,
.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner::before{ display: none; }

/* Optional per-stage backdrop. */
.ih-pin > .vc_row.ih-std > .vc_column_container[style*="background-image"]{
	background-size: cover;
	background-position: center;
}
.ih-pin > .vc_row.ih-std > .vc_column_container[style*="background-image"] > .vc_column-inner{
	position: relative;
	z-index: 1;
}

/* ── DISPLAY TYPE ────────────────────────────────────────────────────*/
.ih-pin .vc_custom_heading.stage{
	font-family: var(--ih-f-mono);
	font-size: clamp(11px, 1vw, 13px);
	letter-spacing: .32em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	margin-bottom: 26px;
	display: flex;
	align-items: center;
	gap: 16px;
}
.ih-pin .vc_custom_heading.stage::before{
	content: '';
	width: clamp(34px, 4vw, 70px);
	height: 2px;
	background: var(--ih-red);
}

.ih-pin .vc_custom_heading.h4{
	font-size: clamp(48px, 8vw, 118px) !important;
	font-weight: 800;
	line-height: .94;
	letter-spacing: -.02em;
	text-transform: uppercase;
	color: var(--ih-white);
	margin-bottom: 28px;
}

.ih-pin .wpb_text_column p{
	font-size: clamp(16px, 1.6vw, 22px) !important;
	line-height: 1.6 !important;
	color: rgba(242,242,242,.7);
	max-width: 46ch;
}

/* Stagger inside the active stage only. */
.ih-pin > .vc_row.ih-std .wpb_wrapper > *{
	opacity: 0;
	transform: translateY(14px);
	transition: opacity .5s var(--ih-ease), transform .5s var(--ih-ease);
}
.ih-pin > .vc_row.ih-std > .is-active .wpb_wrapper > *{ opacity: 1; transform: none; }
.ih-pin > .vc_row.ih-std > .is-active .wpb_wrapper > *:nth-child(2){ transition-delay: .09s }
.ih-pin > .vc_row.ih-std > .is-active .wpb_wrapper > *:nth-child(3){ transition-delay: .18s }

/* ── PROGRESS RAIL ───────────────────────────────────────────────────
   Numbered ticks down the left. Tells the reader how far through the
   sequence they are — without it, a pinned section feels stuck. */
.ih-pin .ih-pin-rail{
	position: absolute;
	left: var(--ih-pad-x);
	top: 50%;
	transform: translateY(-50%);
	display: flex;
	flex-direction: column;
	gap: 18px;
	z-index: 3;
}
.ih-pin .ih-pin-rail span{
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .12em;
	color: rgba(242,242,242,.22);
	position: relative;
	padding-left: 26px;
	transition: color .35s var(--ih-ease);
}
.ih-pin .ih-pin-rail span::before{
	content: '';
	position: absolute;
	left: 0;
	top: 50%;
	width: 16px;
	height: 1px;
	background: currentColor;
	transform: translateY(-50%) scaleX(.5);
	transform-origin: left;
	transition: transform .35s var(--ih-ease);
}
.ih-pin .ih-pin-rail span.is-past{ color: rgba(242,242,242,.4); }
.ih-pin .ih-pin-rail span.is-on{ color: var(--ih-red); }
.ih-pin .ih-pin-rail span.is-on::before{ transform: translateY(-50%) scaleX(1); }

@media (max-width: 900px){
	/* Engine off — stages stack and read normally. */
	.ih-pin{ height: auto !important; }
	.ih-pin > .vc_row.ih-std,
	.ih-pin > .vc_row.ih-std.is-before,
	.ih-pin > .vc_row.ih-std.is-fixed,
	.ih-pin > .vc_row.ih-std.is-after{
		position: static;
		height: auto;
		display: block !important;
		padding: clamp(48px, 5.5vw, 92px) var(--ih-pad-x) !important;
	}
	.ih-pin > .vc_row.ih-std > .vc_column_container{
		opacity: 1;
		visibility: visible;
		transform: none;
		margin-bottom: 40px;
	}
	.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner{ padding: 0 !important; }
	.ih-pin > .vc_row.ih-std .wpb_wrapper > *{ opacity: 1; transform: none; }
	.ih-pin .ih-pin-rail{ display: none; }
	.ih-pin .vc_custom_heading.h4{ font-size: clamp(30px, 8vw, 46px) !important; }
}

@media (prefers-reduced-motion: reduce){
	.ih-pin{ height: auto !important; }
	.ih-pin > .vc_row.ih-std,
	.ih-pin > .vc_row.ih-std.is-before,
	.ih-pin > .vc_row.ih-std.is-fixed,
	.ih-pin > .vc_row.ih-std.is-after{ position: static; height: auto; display: block !important; }
	.ih-pin > .vc_row.ih-std > .vc_column_container{ opacity: 1; visibility: visible; transform: none; }
	.ih-pin .ih-pin-rail{ display: none; }
}

/* ── 08 · CONTACT FORM ───────────────────────────────────────────────
   CF7 form 717 renders Motors' markup, which assumes a light page:
   near-white inputs on Jet Black, labels overlapping their fields.
   Add ih-form to the row.

   All colour is set explicitly rather than through --motors-* vars,
   because Motors targets these inputs with three-class selectors. */

.ih-scope .ih-form .wpcf7 .row{ display: flex; flex-wrap: wrap; margin: 0 -10px; }
.ih-scope .ih-form .wpcf7 .row > [class*="col-"]{ padding: 0 10px; }

.ih-scope .ih-form .form-group,
.ih-scope .ih-form .form-group-textarea{ margin-bottom: 18px; }

.ih-scope .ih-form .contact-us-label,
.ih-scope .ih-form .form-label{
	display: block;
	margin-bottom: 8px;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel);
}

.ih-scope .ih-form input[type="text"],
.ih-scope .ih-form input[type="email"],
.ih-scope .ih-form input[type="tel"],
.ih-scope .ih-form textarea,
.ih-scope .ih-form select{
	width: 100%;
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
	color: var(--ih-white) !important;
	font-family: var(--ih-f-display);
	font-size: 15px;
	padding: 14px 16px;
	box-shadow: none !important;
	transition: border-color .25s var(--ih-ease), background .25s var(--ih-ease);
}
.ih-scope .ih-form textarea{ min-height: 148px; resize: vertical; }

.ih-scope .ih-form input::placeholder,
.ih-scope .ih-form textarea::placeholder{ color: rgba(242,242,242,.28); }

.ih-scope .ih-form input:focus,
.ih-scope .ih-form textarea:focus{
	border-color: var(--ih-red) !important;
	background: var(--ih-surface-2) !important;
	outline: none;
}

/* Consent checkbox */
.ih-scope .ih-form .wpcf7-list-item{ margin: 0; }
.ih-scope .ih-form .wpcf7-list-item-label{
	font-size: 13px;
	color: rgba(242,242,242,.6);
	margin-left: 8px;
}
.ih-scope .ih-form input[type="checkbox"]{ accent-color: var(--ih-red); width: 16px; height: 16px; }
.ih-scope .ih-form .stm-contact-us-checkbox{ margin: 6px 0 20px; }

/* Submit, matching the site's buttons. */
.ih-scope .ih-form input[type="submit"]{
	position: relative;
	background: var(--ih-red) !important;
	border: 1px solid var(--ih-red) !important;
	border-radius: 0 !important;
	color: #fff !important;
	font-family: var(--ih-f-display);
	font-size: 14px;
	font-weight: 600;
	letter-spacing: .06em;
	text-transform: uppercase;
	padding: 15px 38px;
	cursor: pointer;
	transition: background .25s var(--ih-ease), transform .25s var(--ih-ease);
}
.ih-scope .ih-form input[type="submit"]:hover{
	background: var(--ih-red-hi) !important;
	border-color: var(--ih-red-hi) !important;
	transform: translateY(-2px);
}

/* CF7 messages */
.ih-scope .ih-form .wpcf7-not-valid-tip{
	color: var(--ih-red-hi);
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .1em;
	text-transform: uppercase;
	margin-top: 6px;
}
.ih-scope .ih-form .wpcf7-response-output{
	border: 1px solid var(--ih-line-strong) !important;
	border-left: 2px solid var(--ih-red) !important;
	background: var(--ih-surface);
	color: var(--ih-white);
	padding: 14px 18px !important;
	margin: 18px 0 0 !important;
	font-size: 14px;
}
.ih-scope .ih-form .wpcf7 form.sent .wpcf7-response-output{ border-left-color: #4ADE80 !important; }

@media (max-width: 782px){
	.ih-scope .ih-form .wpcf7 .row{ display: block; margin: 0; }
	.ih-scope .ih-form .wpcf7 .row > [class*="col-"]{ padding: 0; }
}

/* ═══ HEADER ═════════════════════════════════════════════════════════
   Motors' header renders OUTSIDE .ih-scope, so none of the design
   system reached it — which is why Theme Options and this stylesheet
   appeared to be fighting. They were not; nothing here had ever
   targeted the header at all.

   Ported from the design's .util / .nav / .links, values verbatim:

     .nav    rgba(13,13,13,.7) + blur(14px), → .95 + hairline when docked
     .links  12px / 600 / .08em / uppercase, gap 20px
             ::after 2px red, width 0 → 100% on hover, .3s var(--ease)
     .act    --red-hi text with the underline already full
     .util   mono 10.5px, steel, .1em, 8px padding, bottom hairline

   None of this is reachable from Theme Options — the underline sweep
   and the backdrop blur are not settings.
   ═══════════════════════════════════════════════════════════════════ */

/* ── FULL-BLEED ──────────────────────────────────────────────────────
   The design's bar runs edge to edge with var(--ih-pad-x) inset. Motors
   wraps it in a fixed-width .container. */
#header .top-bar-wrap > .container,
#header .header-main-ev_dealer > .container{
	max-width: 100%;
	width: 100%;
	padding-left: var(--ih-pad-x);
	padding-right: var(--ih-pad-x);
}

/* ── UTILITY BAR ─────────────────────────────────────────────────────*/
#header .top-bar-wrap{
	background: transparent;
	border-bottom: 1px solid var(--ih-line);
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .1em;
	color: var(--ih-steel);
}
#header .stm-c-f-top-bar{
	display: flex;
	align-items: center;
	gap: 26px;
	padding: 9px 0;
	flex-wrap: wrap;
}
#header .stm-top-address-wrap{ float: none; display: flex; align-items: center; }
#header .top-bar-wrap span,
#header .top-bar-wrap a{
	color: var(--ih-steel);
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .1em;
	transition: color .2s var(--ih-ease);
}
#header .top-bar-wrap a:hover{ color: var(--ih-white); }
#header .top-bar-wrap i{ margin-right: 7px; }

/* Socials sit at the far end. */
#header .top-bar-wrap .pull-right{ float: none; margin-left: auto; }
#header .header-top-bar-socs ul{ display: flex; gap: 14px; margin: 0; padding: 0; list-style: none; }
#header .header-top-bar-socs a{ color: var(--ih-steel); font-size: 12px; }
#header .header-top-bar-socs a:hover{ color: var(--ih-red); }

/* ── NAV BAR ─────────────────────────────────────────────────────────*/
#header .header-main-ev_dealer{
	/* Transparent at rest. A translucent bar over a bright hero reads as
	   a grey stripe rather than glass, and its bottom edge cuts the image
	   in half. Legibility comes from the gradient scrim on #header below,
	   which has no edge to notice. The blur returns when docked, where
	   the bar genuinely needs its own surface. */
	background: transparent !important;
	-webkit-backdrop-filter: none;
	backdrop-filter: none;
	border-bottom: 1px solid transparent;
	padding: 8px 0 !important;
	position: relative;
	z-index: 2;
}
#header .header-main-ev_dealer .header-row{
	display: flex;
	align-items: center;
	margin: 0;
	min-height: 56px;
}
#header .header-main-ev_dealer .col-md-2,
#header .header-main-ev_dealer .col-md-10{ padding: 0; float: none; }
#header .header-main-ev_dealer .col-md-2{ width: auto; flex: 0 0 auto; }
#header .header-main-ev_dealer .col-md-10{ width: auto; flex: 1 1 auto; }

#header .stm-header-right{
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 28px;
}

/* Motors paints a solid block behind the menu; the design does not. */
#header .main-menu{ background: transparent !important; padding: 0 !important; }

/* ── LINKS ───────────────────────────────────────────────────────────*/
#header .main-menu .header-menu{
	display: flex;
	gap: 28px;
	align-items: center;
	margin: 0;
	padding: 0;
	list-style: none;
	float: none;
}
#header .main-menu .header-menu > li{ float: none; margin: 0; padding: 0; }

/* ALIGNMENT.
   Vertical padding on the links made their boxes taller than the logo
   and the phone, so flex centred three boxes of different heights and
   the TEXT ended up off-centre. A shared height with flex centring
   inside puts all three on the same optical line — padding cannot,
   because it only balances against itself. */
#header .main-menu .header-menu > li > a{
	position: relative;
	display: flex;
	align-items: center;
	height: 46px;
	padding: 0;
	line-height: 1;
	font-family: var(--ih-f-display);
	font-size: 17px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: var(--ih-white);
	white-space: nowrap;
	background: none;
	transition: color .25s var(--ih-ease);
}

/* The underline sweep. Not available as a Theme Options setting. */
#header .main-menu .header-menu > li > a::after{
	content: '';
	position: absolute;
	left: 0;
	bottom: 9px;
	height: 2px;
	width: 0;
	background: var(--ih-red);
	transition: width .3s var(--ih-ease);
}
#header .main-menu .header-menu > li > a:hover::after,
#header .main-menu .header-menu > li.current-menu-item > a::after,
#header .main-menu .header-menu > li.current_page_item > a::after{ width: 100%; }

#header .main-menu .header-menu > li.current-menu-item > a,
#header .main-menu .header-menu > li.current_page_item > a{ color: var(--ih-red-hi); }

/* ── PHONE ───────────────────────────────────────────────────────────*/
#header .head-phone-wrap{
	display: flex;
	align-items: center;
	gap: 26px;
	height: 46px;
	padding: 0;
	margin: 0;
	float: none;
}

/* THE DIVIDER is a flex ITEM, not an absolutely positioned pseudo.
   Absolute positioning centres against the nearest positioned ancestor,
   which after the header became a flex container was no longer the box
   you can see. As a flex item, `align-items: center` on the parent
   centres it against the same line as the number — no arithmetic, and
   it cannot drift when the header height changes.

   Not available in Theme Options: Motors' header ships no divider. */
#header .head-phone-wrap::before{
	content: '';
	display: block;
	flex: 0 0 auto;
	width: 1px;
	height: 22px;
	background: var(--ih-line-strong);
}

/* Motors emits .ph-title containing WHITESPACE, so :empty never matched
   it — :empty ignores elements with text nodes, even blank ones. Hidden
   outright instead. If a "phone title" is ever set in Theme Options,
   delete this rule to show it. */
#header .ph-title{ display: none; }
#header .head-phone-wrap .phone{
	font-family: var(--ih-f-display);
	font-size: 19px;
	line-height: 1;
	font-weight: 700;
	letter-spacing: .02em;
	color: var(--ih-white);
	white-space: nowrap;
}

/* ── LOGO ────────────────────────────────────────────────────────────*/
#header .logo-main{ display: flex; align-items: center; }
#header .logo-main img{ height: 46px; width: auto; display: block; transition: height .28s var(--ih-ease); }
#header .header-main-ev_dealer.stm-fixed .logo-main img{ height: 38px; }

/* ── DOCKED ──────────────────────────────────────────────────────────
   Overrides the earlier sticky block: matches the design's .nav.on. */
#header .header-main-ev_dealer.stm-fixed{
	background: rgba(13, 13, 13, .95) !important;
	border-bottom-color: var(--ih-line);
}

/* ── READING PROGRESS ────────────────────────────────────────────────
   The design's .dprog — a 2px red rule across the top. Created by
   ih-site.js so no markup is needed. */
.ih-dprog{
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	z-index: 130;
	background: transparent;
	pointer-events: none;
}
.ih-dprog i{
	display: block;
	height: 100%;
	width: 0;
	background: var(--ih-red);
	transition: width .1s linear;
}
.admin-bar .ih-dprog{ top: 32px; }

/* ── BREAKPOINTS ─────────────────────────────────────────────────────
   The design keeps the full menu to 1140px, then switches to a burger.
   Motors renders BOTH menus and swaps them at its own breakpoint —
   .main-menu for desktop, .mobile-menu-holder plus .mobile-menu-trigger
   for touch. The rules above set display:flex on .main-menu with no
   media query, which would have shown the desktop menu on a phone
   alongside the burger. Bounded here to match the design. */

@media (max-width: 1400px){
	#header .main-menu .header-menu{ gap: 22px; }
	#header .main-menu .header-menu > li > a{ font-size: 15px; }
	#header .head-phone-wrap .phone{ font-size: 17px; }
}
@media (max-width: 1240px){
	#header .main-menu .header-menu{ gap: 16px; }
	#header .main-menu .header-menu > li > a{ font-size: 13.5px; }
	#header .head-phone-wrap .phone{ font-size: 15px; }
}

@media (max-width: 1140px){
	/* Hand the menu back to Motors' own mobile handling. */
	#header .main-menu{ display: none !important; }
	#header .stm-header-right{ justify-content: flex-end; gap: 16px; }
	#header .header-main-ev_dealer .col-md-2{ flex: 1 1 auto; }
	#header .header-main-ev_dealer .col-md-10{ flex: 0 0 auto; }

	/* Motors' burger, restyled to the design's 42px bordered square. */
	#header .mobile-menu-trigger{
		display: flex !important;
		flex-direction: column;
		justify-content: center;
		align-items: center;
		gap: 5px;
		width: 42px;
		height: 42px;
		border: 1px solid var(--ih-line-strong);
		background: none;
		float: none;
		margin: 0;
	}
	#header .mobile-menu-trigger span{
		display: block;
		width: 20px;
		height: 2px;
		background: var(--ih-white);
		margin: 0;
		transition: transform .3s var(--ih-ease), opacity .3s var(--ih-ease);
	}
	#header .logo-main{ display: flex; align-items: center; justify-content: space-between; gap: 20px; }

	/* Panel drops from under the bar, as the design's .links.open does. */
	#header .mobile-menu-holder .header-menu{
		background: rgba(13,13,13,.98);
		border-bottom: 1px solid var(--ih-line);
		padding: 18px var(--ih-pad-x) 26px;
	}
	#header .mobile-menu-holder .header-menu > li > a{
		display: block;
		font-family: var(--ih-f-display);
		font-size: 16px;
		font-weight: 600;
		letter-spacing: .06em;
		text-transform: uppercase;
		color: var(--ih-white);
		padding: 12px 0;
		border-bottom: 1px solid var(--ih-line);
	}
	#header .mobile-menu-holder .header-menu > li.current-menu-item > a{ color: var(--ih-red-hi); }
}

@media (max-width: 992px){
	#header .stm-c-f-top-bar{ gap: 14px; font-size: 9.5px; }
	#header .head-phone-wrap{ display: none; }
}

@media (max-width: 782px){
	/* Address and hours only — the phone is one tap away in the menu. */
	#header .top-bar-wrap #top-bar-info{ display: none; }
	#header .header-top-bar-socs{ display: none; }
	#header .logo-main img{ height: 36px; }
}

/* ── MENU: NO BLOCKS ─────────────────────────────────────────────────
   Belt to the transparent --hma_* variables above. stm-megamenu and
   header-ev_dealer.css both paint backgrounds on the list items with
   their own selectors, so clearing the variables alone is not always
   enough depending on which stylesheet loaded last.

   The design's menu is text plus an underline. Nothing behind it. */
#header .main-menu .header-menu,
#header .main-menu .header-menu > li,
#header .main-menu .header-menu > li > a,
#header .main-menu .header-menu > li:hover > a,
#header .main-menu .header-menu > li.current-menu-item > a,
#header .main-menu .header-menu > li.current_page_item > a{
	background: none !important;
	background-color: transparent !important;
	box-shadow: none !important;
	border-radius: 0 !important;
}
#header .main-menu .header-menu > li > a{ padding: 8px 0 !important; }

/* ── TOP BAR LEGIBILITY ──────────────────────────────────────────────
   Steel mono over a bright hero photo fails contrast — in the current
   hero the address is almost unreadable against the sand. A short scrim
   behind the utility bar fixes it without darkening the whole image. */
/* ONE SCRIM across the whole header — utility bar and nav together —
   fading to nothing at its foot. No band, no edge, and the hero image
   stays uninterrupted. Skipped when docked: the fixed bar carries its
   own surface then. */
#header{ position: relative; }
#header::before{
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 0;
	height: 220px;
	background: linear-gradient(180deg,
		rgba(13,13,13,.88) 0%,
		rgba(13,13,13,.62) 42%,
		rgba(13,13,13,.28) 72%,
		transparent 100%);
	pointer-events: none;
	z-index: 0;
}
#header.stm-sticky-on::before{ opacity: 0; transition: opacity .3s var(--ih-ease); }

#header .top-bar-wrap{ position: relative; z-index: 2; }
/* Lift the text a step off pure steel so it holds against a light frame. */
#header .top-bar-wrap span,
#header .top-bar-wrap a{ color: rgba(242,242,242,.62); }
#header .top-bar-wrap a:hover{ color: var(--ih-white); }

/* ═══ INVENTORY BLOCK ════════════════════════════════════════════════
   [stm_classic_filter] + [stm_inventory_search_results] on the brand
   pages. Motors renders a Bootstrap 3 push/pull layout — .col-md-9
   .col-md-pull-3 beside .col-md-3 .col-md-push-9 — which relies on
   relative left/right offsets. Any ancestor that changes display mode
   collapses it and the sidebar lands on top of the results.

   Rather than hunt the offending ancestor, the row is rebuilt as CSS
   Grid and the push/pull offsets are neutralised. Grid ignores the
   whole mechanism, so this holds regardless of what else changes.
   ═══════════════════════════════════════════════════════════════════ */

.ih-scope .archive-listing-page{ padding: 0; }
.ih-scope .archive-listing-page > .container{ max-width: 100%; padding: 0; width: 100%; }

.ih-scope .archive-listing-page > .container > .row{
	display: grid;
	grid-template-columns: 1fr;
	gap: 0;
	margin: 0;
}

/* Kill Bootstrap's push/pull; grid places them by order instead. */
.ih-scope .archive-listing-page .col-md-9,
.ih-scope .archive-listing-page .col-md-3{
	left: auto !important;
	right: auto !important;
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
}
/* Filter bar above, results below. */
.ih-scope .archive-listing-page .col-md-3{ order: 1; }
.ih-scope .archive-listing-page .col-md-9{ order: 2; min-width: 0; }

/* ── FILTER BAR ──────────────────────────────────────────────────────
   Motors renders the filter as a sidebar column. It is restyled here
   into a horizontal bar above the results and made sticky, which is the
   current catalogue pattern and better here for three reasons:

     · the same layout works at every width — a sidebar has to become
       something else on mobile, a bar does not
     · the list cards get the full width, which they need
     · filters stay reachable at result 40 without scrolling back

   It only works because the filter set is small: Μάρκα is locked on
   these pages and Τιμή is suppressed, leaving four controls plus
   keywords. Ten filters would still need a sidebar.

   STICKY OFFSET uses --ih-nav-dock-h, not --ih-nav-h. The utility bar
   belongs to the hero state and is hidden once the header docks, so
   offsetting by the full header height would leave a visible gap. Both
   values are published by ih-site.js and re-measured on resize. */

.ih-scope .filter-sidebar{
	position: sticky;
	top: var(--ih-nav-dock-h, 72px);
	z-index: 40;
	background: rgba(20,20,20,.96);
	-webkit-backdrop-filter: blur(12px);
	backdrop-filter: blur(12px);
	border: 1px solid var(--ih-line);
	border-left: 2px solid var(--ih-red);
	padding: 14px 18px;
	margin-bottom: 26px;
}

/* Header row: label left, reset right. */
.ih-scope .sidebar-entry-header{
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 12px;
	padding: 0 0 12px;
	margin-bottom: 12px;
	border-bottom: 1px solid var(--ih-line);
}
.ih-scope .sidebar-entry-header .h4{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .24em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	font-weight: 400;
}
.ih-scope .sidebar-entry-header a{
	font-family: var(--ih-f-mono);
	font-size: 9.5px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-steel);
	border: 0;
}
.ih-scope .sidebar-entry-header a:hover{ color: var(--ih-red-hi); }

/* Controls flow across. auto-fit keeps them even however many survive
   the brand lock and price suppression. */
.ih-scope .filter-sidebar > .filter > .row{
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
	gap: 10px;
	margin: 0;
}
.ih-scope .filter-sidebar [class*="col-"]{
	width: auto;
	max-width: none;
	padding: 0;
	float: none;
}
.ih-scope .filter-sidebar .form-group{ margin: 0; }

.ih-scope .filter-sidebar select,
.ih-scope .filter-sidebar input[type="text"]{
	width: 100%;
	background: var(--ih-surface-2) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
	color: var(--ih-white) !important;
	font-family: var(--ih-f-display);
	font-size: 13.5px;
	padding: 11px 13px;
	height: auto;
	transition: border-color .25s var(--ih-ease);
}
.ih-scope .filter-sidebar select:focus,
.ih-scope .filter-sidebar input:focus{ border-color: var(--ih-red) !important; outline: none; }

/* Keywords spans the remainder rather than sitting alone on a new line. */
.ih-scope .filter-sidebar .stm-search_keywords{ grid-column: 1 / -1; }

.ih-scope .sidebar-action-units{ display: none; }

/* Motors' own sidebar widget slot below the filter — empty here. */
.ih-scope .stm-inventory-sidebar:empty{ display: none; }

/* The brand chip carries an X. On a brand-locked page a visitor can
   delete the lock from their own view, landing on /cf-moto/ showing
   Royal Enfields. Hide it; the lock re-applies on reload anyway. */
.ih-brand-locked .stm-filter-chosen-units{ display: none; }

/* ── RESULTS HEADER ──────────────────────────────────────────────────*/
.ih-scope .stm-car-listing-sort-units{
	display: flex;
	align-items: center;
	gap: 20px;
	flex-wrap: wrap;
	padding-bottom: 18px;
	margin-bottom: 22px;
	border-bottom: 1px solid var(--ih-line);
}
.ih-scope .stm-listing-directory-title{ display: flex; align-items: baseline; gap: 14px; }
.ih-scope .stm-listing-directory-title .title{
	font-size: clamp(20px, 2.2vw, 28px);
	font-weight: 700;
	text-transform: uppercase;
	color: var(--ih-white);
	margin: 0;
}
.ih-scope .stm-listing-directory-total-matches{
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel);
	display: block !important;
}
.ih-scope .stm-directory-listing-top__right{ margin-left: auto; }
.ih-scope .stm-sort-by-options span{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-steel);
}
.ih-scope .stm-view-by a{
	color: var(--ih-steel);
	padding: 6px;
	transition: color .2s var(--ih-ease);
}
.ih-scope .stm-view-by a.active,
.ih-scope .stm-view-by a:hover{ color: var(--ih-red); }

/* ── CHIPS ───────────────────────────────────────────────────────────
   Built by ih-site.js from Motors' category <select>, which stays in the
   DOM and remains the source of truth. Styling verbatim from the
   design's .chip. */

.ih-scope .ih-chips{
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
	margin-bottom: 30px;
}
.ih-scope .ih-chip{
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel);
	background: transparent;
	border: 1px solid var(--ih-line-strong);
	padding: 12px 20px;
	min-height: 44px;
	cursor: pointer;
	transition: color .25s var(--ih-ease), border-color .25s var(--ih-ease), background .25s var(--ih-ease);
}
.ih-scope .ih-chip:hover{ color: var(--ih-white); border-color: var(--ih-white); }
.ih-scope .ih-chip.is-on{
	background: var(--ih-red);
	border-color: var(--ih-red);
	color: #fff;
}
.ih-scope .ih-hidden-filter{ display: none !important; }

.ih-scope #listings-result .stm_moto_single_grid_item{
	width: auto !important;
	max-width: none !important;
	padding: 0 !important;
	margin: 0 !important;
	float: none !important;
	background: var(--ih-surface);
	border: 1px solid var(--ih-line);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	transition: transform .35s var(--ih-ease), border-color .35s var(--ih-ease);
}
.ih-scope #listings-result .stm_moto_single_grid_item:hover{
	transform: translateY(-4px);
	border-color: rgba(227,6,19,.5);
}
.ih-scope #listings-result .stm_moto_single_grid_item > a{
	display: flex;
	flex-direction: column;
	height: 100%;
}

/* Image — 4:3, as the design's .card .media */
.ih-scope #listings-result .image{
	position: relative;
	aspect-ratio: 4 / 3;
	background: var(--ih-surface-2);
	overflow: hidden;
	margin: 0;
	flex: 0 0 auto;
}
.ih-scope #listings-result .image img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: saturate(.88);
	transition: transform .6s var(--ih-ease);
}
.ih-scope #listings-result .stm_moto_single_grid_item:hover .image img{ transform: scale(1.04); }

/* Category badge, top-left over the image. */
.ih-scope #listings-result .special-label{
	top: 12px !important;
	left: 12px !important;
	right: auto !important;
	transform: none !important;
	background: rgba(13,13,13,.85) !important;
	border: 1px solid var(--ih-line-strong);
	font-family: var(--ih-f-mono);
	font-size: 9.5px !important;
	letter-spacing: .18em;
	text-transform: uppercase;
	padding: 5px 10px !important;
	color: var(--ih-white);
	z-index: 3;
}
.ih-scope #listings-result .stm_moto_hover_unit{ display: none !important; }

/* Body */
.ih-scope #listings-result .listing-car-item-meta{
	background: transparent !important;
	padding: 20px !important;
	margin: 0 !important;
	display: flex;
	flex-direction: column;
	gap: 12px;
	flex: 1;
}
.ih-scope #listings-result .car-meta-top{ margin: 0 !important; padding: 0 !important; }
.ih-scope #listings-result .car-title{
	font-weight: 800;
	font-size: 21px;
	line-height: 1.1;
	letter-spacing: .02em;
	text-transform: uppercase;
	color: var(--ih-white);
	transition: color .25s var(--ih-ease);
}
.ih-scope #listings-result .stm_moto_single_grid_item:hover .car-title{ color: var(--ih-red-hi); }

/* Spec rows — mono label, white value, as the design's .card .specs */
.ih-scope #listings-result .car-meta-bottom ul{ list-style: none; margin: 0; padding: 0; }
.ih-scope #listings-result .car-meta-bottom li{
	display: flex;
	gap: 8px;
	align-items: baseline;
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--ih-steel);
	margin: 0 0 6px;
}
.ih-scope #listings-result .car-meta-bottom li span:last-child,
.ih-scope #listings-result .car-meta-bottom li b{ color: var(--ih-white); font-weight: 500; }

/* Foot — CTA left, micro right, divided from the body.
   The design has these two colliding at narrow widths; a gap and
   a min-width on the CTA keeps them apart. */
.ih-scope #listings-result .stm-single-car-links{
	margin-top: auto;
	padding-top: 14px;
	border-top: 1px solid var(--ih-line);
	display: flex;
	gap: 16px;
	flex-wrap: wrap;
}
.ih-scope #listings-result .stm-single-car-link{ background: none !important; padding: 0 !important; }
.ih-scope #listings-result .stm-single-car-link a{
	display: inline-flex;
	align-items: center;
	gap: 7px;
	background: none !important;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-muted);
	padding: 0;
	transition: color .25s var(--ih-ease);
}
.ih-scope #listings-result .stm-single-car-link:first-child a{ color: var(--ih-red-hi); font-weight: 700; }
.ih-scope #listings-result .stm-single-car-link a:hover{ color: var(--ih-red-hi); }
.ih-scope #listings-result .stm-single-car-link i{ font-size: 13px; }
.ih-scope #listings-result .stm-car-view-more{ display: none; }

/* ── TYPE TABS ───────────────────────────────────────────────────────
   The skewed parallelogram tabs are Motors' 2016 styling. Squared off,
   with the active state as the filled one — Motors has it inverted. */
.ih-scope .stm-filter-tabs-skewed{ display: flex; gap: 2px; margin-bottom: 26px; }
.ih-scope .stm-filter-tab-single-unit{
	transform: none;
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line);
}
.ih-scope .stm-filter-tab-single-unit a{
	transform: none;
	display: block;
	padding: 12px 24px;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel) !important;
}
.ih-scope .stm-filter-tab-single-unit.active{
	background: var(--ih-red) !important;
	border-color: var(--ih-red);
}
.ih-scope .stm-filter-tab-single-unit.active a{ color: #fff !important; }

/* ── PAGINATION ──────────────────────────────────────────────────────*/
.ih-scope .stm-blog-pagination ul{ display: flex; gap: 6px; list-style: none; margin: 0; padding: 0; }
.ih-scope .stm-blog-pagination .page-numbers{
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 42px;
	height: 42px;
	border: 1px solid var(--ih-line);
	background: var(--ih-surface);
	font-family: var(--ih-f-mono);
	font-size: 12px;
	color: var(--ih-muted);
	transition: border-color .25s var(--ih-ease), color .25s var(--ih-ease);
}
.ih-scope .stm-blog-pagination a.page-numbers:hover{ border-color: var(--ih-red); color: var(--ih-white); }
.ih-scope .stm-blog-pagination .page-numbers.current{
	background: var(--ih-red);
	border-color: var(--ih-red);
	color: #fff;
}
.ih-scope .stm-motorcycle-per-page{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-steel);
}

/* Motors' "search results" carousel duplicates the grid above it. */
.ih-scope .stm-isearch-results-carousel-wrap{ display: none; }

@media (max-width: 782px){
	/* Sticky on a short viewport costs more than it gives — the bar would
	   own a third of the screen. */
	.ih-scope .filter-sidebar{ position: static; }
	.ih-scope .filter-sidebar > .filter > .row{ grid-template-columns: 1fr 1fr; }
}

/* ── PINNED STAGE: FILLING THE FRAME ─────────────────────────────────
   A full viewport holding one heading and one sentence leaves two
   thirds of the screen empty. Filled the way editorial layouts do,
   with devices rather than content — nothing here needs assets or
   copy the client has to write.

     · an oversized outlined numeral on the right
     · the brand's 18° slash behind it
     · a mono footer line anchoring the bottom edge
   ──────────────────────────────────────────────────────────────────── */

/* GHOST NUMERAL. Outlined rather than filled: at this size a solid
   numeral would compete with the headline instead of sitting behind it.
   Sized in vh so it scales with the pinned frame, not the text. */
.ih-pin > .vc_row.ih-std > .vc_column_container::after{
	content: attr(data-n);
	position: absolute;
	right: clamp(20px, 5vw, 90px);
	top: 50%;
	transform: translateY(-50%) translateX(40px);
	font-family: var(--ih-f-display);
	font-size: min(52vh, 30vw);
	font-weight: 800;
	line-height: .78;
	letter-spacing: -.04em;
	color: transparent;
	-webkit-text-stroke: 1px rgba(242,242,242,.09);
	z-index: 0;
	pointer-events: none;
	opacity: 0;
	transition: opacity .7s var(--ih-ease), transform .7s var(--ih-ease);
}
.ih-pin > .vc_row.ih-std > .vc_column_container.is-active::after{
	opacity: 1;
	transform: translateY(-50%) translateX(0);
}

/* THE SLASH. The logo's 18° skew, behind the numeral, tying the frame
   to the brand rather than to a generic big-number layout. */
.ih-pin > .vc_row.ih-std::before{
	content: '';
	position: absolute;
	top: -20%;
	bottom: -20%;
	right: 6%;
	width: 26%;
	background: linear-gradient(180deg, rgba(227,6,19,.13), rgba(227,6,19,.02));
	transform: skewX(-18deg);
	z-index: 0;
	pointer-events: none;
}
.ih-pin > .vc_row.ih-std::after{
	content: '';
	position: absolute;
	top: -20%;
	bottom: -20%;
	right: 21%;
	width: 3%;
	background: rgba(242,242,242,.04);
	transform: skewX(-18deg);
	z-index: 0;
	pointer-events: none;
}

/* FOOTER LINE. Anchors the bottom edge, which otherwise falls away into
   nothing, and repeats the section name so the reader knows where they
   are three stages in. */
.ih-pin .ih-pin-foot{
	position: absolute;
	left: var(--ih-pad-x);
	right: var(--ih-pad-x);
	bottom: clamp(24px, 4vh, 46px);
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	padding-top: 16px;
	border-top: 1px solid var(--ih-line);
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--ih-steel);
	z-index: 3;
	pointer-events: none;
}
.ih-pin .ih-pin-foot b{ color: var(--ih-white); font-weight: 400; }

/* The rail moves out of the vertical centre — with the numeral on the
   right, centring both leaves the middle hollow. */
.ih-pin .ih-pin-rail{
	top: auto;
	bottom: clamp(90px, 14vh, 150px);
	transform: none;
}

@media (max-width: 1200px){
	.ih-pin > .vc_row.ih-std > .vc_column_container::after{ font-size: min(40vh, 34vw); }
}
@media (max-width: 900px){
	.ih-pin > .vc_row.ih-std > .vc_column_container::after,
	.ih-pin > .vc_row.ih-std::before,
	.ih-pin > .vc_row.ih-std::after,
	.ih-pin .ih-pin-foot{ display: none; }
	.ih-pin{ width: auto; margin-left: 0; margin-right: 0; }
}

/* ═══ DESIGN PARITY: DUO / BAND ══════════════════════════════════════
   Two layouts the design uses repeatedly and this port had not built:

     .duo   text beside a framed image, columns 1.05fr / 1fr
     .band  a full-width CTA strip, columns 1.4fr / auto

   Both values verbatim from site/style.css. The workshop section had
   been built as a full-bleed parallax band, which is a different
   structure — this restores the design's.
   ═══════════════════════════════════════════════════════════════════ */

/* CLEARFIX PSEUDOS ARE GRID ITEMS.
   .vc_row-fluid carries Bootstrap's clearfix — ::before and ::after with
   content:" ". Harmless in a normal row; in a GRID row they become grid
   items, so ::before takes cell one, the first column lands in cell two
   and the second wraps to a new row. Cancelled on every grid row here.
   Not on .ih-slash or .ih-std, whose pseudos are decorative and
   absolutely positioned — absolute children are not grid items. */
.vc_row.ih-scope.ih-duo::before,
.vc_row.ih-scope.ih-duo::after,
.vc_row.ih-scope.ih-band-cta::before,
.vc_row.ih-scope.ih-band-cta::after{
	content: none !important;
	display: none !important;
}

.vc_row.ih-scope.ih-duo{
	display: grid !important;
	grid-template-columns: 1.05fr 1fr;
	gap: clamp(30px, 5vw, 70px);
	align-items: center;
}
.vc_row.ih-scope.ih-duo > .vc_column_container{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
}

/* Body copy with the red rule down its left edge. */
.ih-scope .ih-rule{
	border-left: 2px solid var(--ih-red);
	padding-left: clamp(18px, 2vw, 28px);
}
.ih-scope .ih-rule p{
	color: rgba(242,242,242,.72);
	font-size: 16px;
	line-height: 1.75;
	margin-bottom: 18px;
}
.ih-scope .ih-rule p:last-child{ margin-bottom: 0; }
.ih-scope .ih-rule p b{ color: var(--ih-white); }

/* Mono detail rows — address, phone, email, hours. */
.ih-scope .ih-mono p{
	font-family: var(--ih-f-mono);
	font-size: 13px;
	line-height: 2.2;
	color: rgba(242,242,242,.78);
}
.ih-scope .ih-mono b{ color: var(--ih-white); font-weight: 400; }
.ih-scope .ih-mono a{ color: rgba(242,242,242,.78); border-bottom-color: var(--ih-red); }
.ih-scope .ih-mono a:hover{ color: var(--ih-red-hi); }

/* ── CTA BAND ────────────────────────────────────────────────────────*/
.vc_row.ih-scope.ih-band-cta{
	display: grid !important;
	grid-template-columns: 1.4fr auto;
	align-items: center;
	gap: 30px;
	background: var(--ih-surface);
	border-top: 1px solid var(--ih-line);
	border-bottom: 1px solid var(--ih-line);
	padding: clamp(48px, 6vw, 76px) var(--ih-pad-x) !important;
}
.vc_row.ih-scope.ih-band-cta > .vc_column_container{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
}
.vc_row.ih-scope.ih-band-cta .vc_custom_heading.h2{
	font-size: clamp(26px, 3.6vw, 46px);
	line-height: 1.02;
	margin-bottom: 12px;
}
.vc_row.ih-scope.ih-band-cta .wpb_text_column p{
	font-size: 15.5px;
	line-height: 1.65;
	max-width: 560px;
	color: rgba(242,242,242,.65);
}
.vc_row.ih-scope.ih-band-cta .wpb_wrapper{ display: flex; flex-wrap: wrap; gap: 14px; align-items: center; }
.vc_row.ih-scope.ih-band-cta > .vc_column_container:first-child .wpb_wrapper{ display: block; }

/* The primary CTA carries the logo's skew — the one place the design
   uses a shaped button rather than a rectangle. */
.ih-scope .vc_btn3-container.ih-skew .vc_btn3.vc_general{
	transform: skewX(-12deg);
	padding-left: 40px;
	padding-right: 40px;
}
.ih-scope .vc_btn3-container.ih-skew .vc_btn3.vc_general > *{ display: inline-block; transform: skewX(12deg); }
.ih-scope .vc_btn3-container.ih-skew .vc_btn3.vc_general:hover{ transform: skewX(-12deg) translateY(-2px); }

/* ── FRAME: MAP VARIANT ──────────────────────────────────────────────
   Google's embed is light by default and would be the only bright
   rectangle on the page. grayscale + invert + a contrast pull renders
   it as a dark map without needing a styled Maps API key. */
.ih-scope .ih-frame.ih-map{ aspect-ratio: 4 / 3; }
.ih-scope .ih-frame.ih-map iframe{
	width: 100%;
	height: 100%;
	border: 0;
	display: block;
	filter: grayscale(1) invert(.92) contrast(.9);
}
.ih-scope .ih-frame.ih-map::after{ content: none; }

@media (max-width: 900px){
	.vc_row.ih-scope.ih-duo,
	.vc_row.ih-scope.ih-band-cta{ grid-template-columns: 1fr; }
	.vc_row.ih-scope.ih-band-cta .wpb_wrapper{ justify-content: flex-start; }
}

/* ── STAGE ICONS ─────────────────────────────────────────────────────
   A large glyph behind the ghost numeral on each Standard stage.

   Add ONE of these to the stage COLUMN's Extra Class Name, alongside
   nothing else — the icon is chosen in the builder, not in this file:

     ih-ico-clipboard   check-in, intake, paperwork
     ih-ico-search      diagnosis, inspection
     ih-ico-check       approval, sign-off
     ih-ico-wrench      execution, the work itself
     ih-ico-shield      verification, quality
     ih-ico-moto        delivery, handover
     ih-ico-gear        mechanical, general
     ih-ico-bolt        electrical, diagnostics

   Font Awesome ships with Motors, so no new request. The family list
   covers FA5 and FA6 — Motors' bundled version varies by release, and
   naming only one silently renders a blank box on the other. */

.ih-pin > .vc_row.ih-std > .vc_column_container[class*="ih-ico-"] > .vc_column-inner::after{
	font-family: "Font Awesome 6 Free", "Font Awesome 5 Free", FontAwesome;
	font-weight: 900;
	position: absolute;
	left: clamp(96px, 11vw, 210px);
	bottom: 4%;
	transform: translateY(20px);
	font-size: min(22vh, 12vw);
	line-height: 1;
	color: var(--ih-red);
	opacity: 0;
	z-index: -1;
	pointer-events: none;
	transition: opacity .8s var(--ih-ease), transform .8s var(--ih-ease);
}
/* Behind the numeral, not beside it: the numeral is the label, the icon
   is texture. 7% keeps it readable as a shape without competing. */
.ih-pin > .vc_row.ih-std > .vc_column_container.is-active[class*="ih-ico-"] > .vc_column-inner::after{
	opacity: .05;
	transform: translateY(0);
}

.ih-pin .ih-ico-clipboard > .vc_column-inner::after{ content: "\f46d"; }
.ih-pin .ih-ico-search    > .vc_column-inner::after{ content: "\f002"; }
.ih-pin .ih-ico-check     > .vc_column-inner::after{ content: "\f058"; }
.ih-pin .ih-ico-wrench    > .vc_column-inner::after{ content: "\f7d9"; }
.ih-pin .ih-ico-shield    > .vc_column-inner::after{ content: "\f3ed"; }
.ih-pin .ih-ico-moto      > .vc_column-inner::after{ content: "\f21c"; }
.ih-pin .ih-ico-gear      > .vc_column-inner::after{ content: "\f013"; }
.ih-pin .ih-ico-bolt      > .vc_column-inner::after{ content: "\f0e7"; }

/* The column-inner needs a stacking context for z-index:-1 to sit the
   icon behind the numeral rather than behind the section background. */
.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner{ isolation: isolate; }

@media (max-width: 900px){
	.ih-pin > .vc_row.ih-std > .vc_column_container[class*="ih-ico-"] > .vc_column-inner::after{ display: none; }
}

/* ═══ FOOTER ═════════════════════════════════════════════════════════
   Ported from the design's <footer>. Motors builds its footer from
   WIDGETS — .footer_widgets_wrapper > .widgets.cols_4 > aside.widget —
   so this styles that structure rather than replacing it. Four widgets
   in the footer area become the four columns; the content stays
   editable in Appearance → Widgets, which is where a client would
   expect to find it.

   Grid, gaps and type all verbatim from site/style.css:
     .fgrid  1.4fr 1fr 1fr 1.1fr, gap 40, padding 60/46
     h5      mono 11px, .24em, red-hi
     links   14px, .72 white
     mono    12px, .04em, line-height 2
     .fbot   mono 10px, .14em, hairline above
   ═══════════════════════════════════════════════════════════════════ */

#footer{
	border-top: 1px solid var(--ih-line);
	background: var(--ih-surface);
}

#footer .footer_widgets_wrapper .container{
	max-width: 100%;
	width: 100%;
	padding: 0;
}

#footer .widgets{
	display: grid;
	grid-template-columns: 1.4fr 1fr 1fr 1.1fr;
	gap: 40px;
	padding: 60px var(--ih-pad-x) 46px;
	float: none;
}
/* Bootstrap clearfix again — in a grid container these take cells. */
#footer .widgets::before,
#footer .widgets::after{ content: none !important; display: none !important; }

#footer .widget{
	width: auto;
	float: none;
	margin: 0;
	padding: 0;
	background: none;
	border: 0;
}
#footer .widget-wrapper{ padding: 0; background: none; border: 0; }

/* Column heading — works BOTH ways:
     · the widget's Title field, which Motors wraps in .widget-title > h6
     · an <h5> or <h6> written inside a Custom HTML widget's content
   The title field is the better default: it stays a labelled text box
   for whoever edits the footer instead of a heading buried in markup,
   and it survives a later swap to a Navigation Menu widget. */
#footer .widget-title h6,
#footer .widget-title h5,
#footer .widget-title,
#footer .textwidget h5,
#footer .textwidget h6,
#footer .widget > h5,
#footer .widget > h6{
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .24em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	margin: 0 0 18px;
	font-weight: 400;
	border: 0;
	padding: 0;
}

/* Link columns — works for a Custom HTML list or a Navigation Menu
   widget, so the client can swap to a real menu later without CSS. */
#footer .widget ul{
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 10px;
	margin: 0;
	padding: 0;
}
#footer .widget ul li{ margin: 0; padding: 0; border: 0; }
#footer .widget ul li a{
	color: rgba(242,242,242,.72);
	font-size: 14px;
	border: 0;
	transition: color .2s var(--ih-ease);
}
#footer .widget ul li a:hover{ color: var(--ih-red-hi); }

/* Brand column */
#footer .ih-fbrand img{ height: 42px; width: auto; margin-bottom: 16px; display: block; }
#footer .ih-fbrand p{
	color: var(--ih-steel);
	font-size: 14px;
	line-height: 1.7;
	max-width: 300px;
}

/* Contact column */
#footer .ih-fmono{
	font-family: var(--ih-f-mono);
	font-size: 12px;
	letter-spacing: .04em;
	line-height: 2;
	color: rgba(242,242,242,.72);
}
#footer .ih-fmono b{ color: var(--ih-white); font-weight: 500; }
#footer .ih-fmono a{ color: rgba(242,242,242,.72); border: 0; }
#footer .ih-fmono a:hover{ color: var(--ih-red-hi); }

/* ── BOTTOM BAR ──────────────────────────────────────────────────────*/
#footer-copyright{
	background: var(--ih-surface) !important;
	border-top: 1px solid var(--ih-line);
}
#footer-copyright .container{ max-width: 100%; width: 100%; padding: 0; }
#footer-copyright .footer-copyright > .row{
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
	margin: 0;
	padding: 18px var(--ih-pad-x);
}
#footer-copyright .footer-copyright > .row::before,
#footer-copyright .footer-copyright > .row::after{ content: none !important; display: none !important; }
#footer-copyright [class*="col-"]{ width: auto; float: none; padding: 0; }

#footer-copyright .copyright-text,
#footer-copyright .copyright-text a{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ih-steel);
	border: 0;
}
#footer-copyright .copyright-text a{ margin-left: 18px; }
#footer-copyright .copyright-text a:first-of-type{ margin-left: 0; }
#footer-copyright .copyright-text a:hover{ color: var(--ih-white); }
#footer-copyright .copyright-text .dot{ color: var(--ih-red); }

#footer-copyright .copyright-socials ul{ display: flex; gap: 16px; list-style: none; margin: 0; padding: 0; }
#footer-copyright .copyright-socials a{ color: var(--ih-steel); font-size: 13px; }
#footer-copyright .copyright-socials a:hover{ color: var(--ih-red); }

@media (max-width: 1024px){
	#footer .widgets{ grid-template-columns: 1fr 1fr; gap: 34px; }
}
@media (max-width: 620px){
	#footer .widgets{ grid-template-columns: 1fr; }
	#footer-copyright .footer-copyright > .row{ justify-content: flex-start; }
}

/* ── USP ROW ─────────────────────────────────────────────────────────
   Three Motors icon boxes read as separate cards floating on a band.
   Joined into one row with hairline dividers, icon and copy on a shared
   baseline. Row classes: ih-scope ih-carbon ih-usp */

.vc_row.ih-scope.ih-usp{ padding: 0 !important; }
.vc_row.ih-scope.ih-usp > .vc_column_container{
	border-left: 1px solid var(--ih-line);
	padding: 0 !important;
}
.vc_row.ih-scope.ih-usp > .vc_column_container:first-child{ border-left: 0; }
.vc_row.ih-scope.ih-usp > .vc_column_container > .vc_column-inner{
	padding: clamp(34px, 4vw, 54px) clamp(24px, 3vw, 44px) !important;
	height: 100%;
}

.ih-scope .ih-usp .icon-box{
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 20px;
	align-items: start;
	background: none !important;
	border: 0 !important;
	padding: 0 !important;
	height: 100%;
}
.ih-scope .ih-usp .icon-box .boat-line{ display: none; }
.ih-scope .ih-usp .icon-box .icon{
	grid-row: 1 / span 2;
	font-size: 34px !important;
	line-height: 1;
	margin: 0 !important;
	padding: 0 !important;
}
.ih-scope .ih-usp .icon-box .icon-text{ grid-column: 2; }
.ih-scope .ih-usp .icon-box .title{
	font-size: clamp(15px, 1.3vw, 18px) !important;
	font-weight: 700;
	letter-spacing: .02em;
	text-transform: uppercase;
	margin: 0 0 10px !important;
	line-height: 1.2;
}
.ih-scope .ih-usp .icon-box .content p{
	font-size: 13.5px !important;
	line-height: 1.6;
	color: rgba(242,242,242,.62) !important;
	text-transform: none;
}

@media (max-width: 900px){
	.vc_row.ih-scope.ih-usp > .vc_column_container{
		border-left: 0;
		border-top: 1px solid var(--ih-line);
	}
	.vc_row.ih-scope.ih-usp > .vc_column_container:first-child{ border-top: 0; }
}

/* ── STAGE WITH A PHOTO ──────────────────────────────────────────────
   A ghost numeral fills the frame but says nothing. Drop a Single Image
   into a stage column and the stage becomes copy left, framed photo
   right — the image carries the meaning and the numeral steps aside.

   No extra class needed: the layout switches on whether an image is
   present, so a stage with one and a stage without both read correctly
   and you can add them as the photography arrives. */

/* THE PHOTO IS TAKEN OUT OF FLOW, not placed in a grid cell.

   Spanning it across the copy's three rows made every row inherit a
   share of the image height, which is what threw the kicker, headline
   and body apart. Absolute positioning removes it from the row
   calculation entirely: the copy flows normally in the left half, the
   photo is centred in the right half, and neither affects the other. */
/* DELIBERATELY NOT position:relative.
   With the inner positioned, the photo centred on the COPY BLOCK — a
   few hundred pixels tall — instead of the frame. Leaving it static
   makes the offset parent the pinned row itself, which is exactly
   100vh, so top:50% is the middle of the viewport. */
.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner:has(.wpb_single_image) > .wpb_wrapper{
	max-width: min(40%, 620px);
}

/* Centred on the copy, pushed to the right edge of the frame.
   Width is capped in vh as well as %, because at 4:3 a percentage
   width alone becomes taller than the viewport on a wide monitor and
   the photo would run out of the pinned frame. */
/* Centred in the pinned frame, hard right.

   !important on transform is required: the section-stagger rule
   `.ih-pin > .vc_row.ih-std > .is-active .wpb_wrapper > *` sets
   transform:none at (0,5,0) — higher than any sane selector for this
   element — which cancelled the centring and left the photo hanging
   from its top edge. Excluding the image from that rule instead would
   cost it the entrance fade, which it should keep.

   Width capped so height (4:3) never exceeds 75vh and the photo cannot
   run out of the frame on a short viewport. */
.ih-pin .wpb_wrapper > .wpb_single_image{
	position: absolute;
	right: 0;
	top: 50% !important;
	transform: translateY(-50%) !important;
	width: min(46%, 100vh);
	margin: 0;
	z-index: 1;
}

.ih-pin .wpb_single_image .vc_single_image-wrapper{
	position: relative;
	display: block;
	border: 1px solid var(--ih-line);
	overflow: hidden;
	background: var(--ih-surface-2);
}
.ih-pin .wpb_single_image img{
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	display: block;
	filter: saturate(.85);
	transform: scale(1.06);
	transition: transform 1.1s var(--ih-ease);
}
.ih-pin > .vc_row.ih-std > .is-active .wpb_single_image img{ transform: scale(1); }

/* A red edge on the photo, tying it to the stage rail. */
.ih-pin .wpb_single_image .vc_single_image-wrapper::after{
	content: '';
	position: absolute;
	left: 0;
	bottom: 0;
	width: 100%;
	height: 3px;
	background: var(--ih-red);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform .8s var(--ih-ease);
}
.ih-pin > .vc_row.ih-std > .is-active .wpb_single_image .vc_single_image-wrapper::after{
	transform: scaleX(1);
}

/* With a photo present the numeral would collide with it — the photo is
   doing that job now, so the numeral retires for that stage. */
.ih-pin > .vc_row.ih-std > .vc_column_container:has(.wpb_single_image)::after{ content: none; }
/* The numeral retires when a photo is present, but the icon stays —
   moved bottom-left, under the copy column, where it reads as a
   watermark rather than colliding with the image. */

/* Copy narrows so the two columns balance. */
.ih-pin > .vc_row.ih-std > .vc_column_container:has(.wpb_single_image) .vc_custom_heading.h4{
	font-size: clamp(40px, 5.4vw, 82px) !important;
}
.ih-pin > .vc_row.ih-std > .vc_column_container:has(.wpb_single_image) .wpb_text_column p{
	font-size: clamp(15px, 1.3vw, 19px) !important;
	max-width: 38ch;
}

@media (max-width: 900px){
	.ih-pin > .vc_row.ih-std > .vc_column_container > .vc_column-inner:has(.wpb_single_image) > .wpb_wrapper{
		max-width: 100%;
	}
	.ih-pin .wpb_wrapper > .wpb_single_image{
		position: static;
		width: 100%;
		transform: none;
		margin-top: 22px;
	}
}

/* ── PINNED SECTION HEADER ───────────────────────────────────────────
   ih-site.js moves the heading row into the pinned frame, where it
   persists across all six stages. Left: section number and title.
   Right: the standing note, sitting above the photograph.

   The row keeps the ih-std-head class in the shortcode and remains a
   normal editable heading row in the builder — only its runtime
   position changes. */

/* Offset by the DOCKED header height. The pinned frame starts at
   top:0, which is behind the sticky nav — without this the section
   title and the standing note are cut off by it, which is exactly what
   the frame is supposed to prevent. */
.ih-pin .ih-pin-head{
	position: absolute;
	top: calc(var(--ih-nav-dock-h, 72px) + clamp(22px, 4vh, 52px));
	left: clamp(96px, 11vw, 210px);
	right: var(--ih-pad-x);
	display: grid;
	grid-template-columns: 1fr min(38%, 480px);
	gap: clamp(24px, 4vw, 70px);
	align-items: start;
	z-index: 3;
}
.ih-pin .ih-pin-head > .vc_column_container{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
	opacity: 1 !important;
	visibility: visible !important;
	transform: none !important;
}
.ih-pin .ih-pin-head .vc_column-inner{ padding: 0 !important; }
.ih-pin .ih-pin-head .wpb_wrapper > *{
	opacity: 1 !important;
	transform: none !important;
	max-width: none !important;
}

/* The section title steps down so it cannot compete with the stage
   name below it — the stage is the headline, this is the label. */
.ih-pin .ih-pin-head .vc_custom_heading.kick{ margin-bottom: 10px; }
.ih-pin .ih-pin-head .vc_custom_heading.h2{
	font-size: clamp(19px, 2vw, 30px) !important;
	line-height: 1.1;
	margin: 0;
}
.ih-pin .ih-pin-head .wpb_text_column p{
	font-size: 13.5px !important;
	line-height: 1.6 !important;
	color: var(--ih-steel);
	max-width: none;
}
.ih-pin .ih-pin-head .wpb_text_column b{ color: var(--ih-white); }

/* Stages centre in the space left below the header rather than in the
   whole frame, so the two never collide. */
.ih-pin > .vc_row.ih-std{
	padding-top: calc(var(--ih-nav-dock-h, 72px) + clamp(110px, 16vh, 190px)) !important;
	padding-bottom: clamp(70px, 10vh, 120px) !important;
}

@media (max-width: 900px){
	.ih-pin .ih-pin-head{
		position: static;
		grid-template-columns: 1fr;
		left: auto;
		right: auto;
		margin-bottom: 30px;
	}
	.ih-pin > .vc_row.ih-std{ padding-top: clamp(48px, 5.5vw, 92px) !important; }
}

/* ── CONTACT FORM ────────────────────────────────────────────────────
   Styles the CF7 markup in cf7-contact-form.txt, which uses .ih-f
   wrappers rather than Motors' demo classes. Row class: ih-form

   Two columns on desktop; .ih-f-wide spans both. Every colour is set
   explicitly, not through --motors-*, because CF7 and Motors both
   target these inputs with their own selectors. */

.ih-scope .ih-form-grid{
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 18px 20px;
	margin-top: 30px;
}
.ih-scope .ih-f{ margin: 0; }
.ih-scope .ih-f-wide{ grid-column: 1 / -1; }

.ih-scope .ih-f label{
	display: block;
	margin-bottom: 8px;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ih-steel);
}
.ih-scope .ih-f label span{ color: var(--ih-red); }

.ih-scope .ih-form input[type="text"],
.ih-scope .ih-form input[type="email"],
.ih-scope .ih-form input[type="tel"],
.ih-scope .ih-form textarea,
.ih-scope .ih-form select{
	width: 100%;
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
	color: var(--ih-white) !important;
	font-family: var(--ih-f-display);
	font-size: 15px;
	padding: 14px 16px;
	box-shadow: none !important;
	appearance: none;
	transition: border-color .25s var(--ih-ease), background .25s var(--ih-ease);
}
.ih-scope .ih-form textarea{ min-height: 150px; resize: vertical; }

/* Native select arrows are drawn by the OS and stay light on a dark
   field. Drawn here as an SVG data URI instead. */
.ih-scope .ih-form select{
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath fill='%23E30613' d='M0 0h12L6 8z'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: right 16px center !important;
	padding-right: 42px;
	cursor: pointer;
}
.ih-scope .ih-form option{ background: var(--ih-surface); color: var(--ih-white); }

.ih-scope .ih-form input::placeholder,
.ih-scope .ih-form textarea::placeholder{ color: rgba(242,242,242,.26); }

.ih-scope .ih-form input:focus,
.ih-scope .ih-form textarea:focus,
.ih-scope .ih-form select:focus{
	border-color: var(--ih-red) !important;
	background-color: var(--ih-surface-2) !important;
	outline: none;
}

/* Consent rows */
.ih-scope .ih-consent{
	display: flex;
	align-items: flex-start;
	gap: 12px;
	font-size: 13.5px;
	line-height: 1.6;
	color: rgba(242,242,242,.62);
}
.ih-scope .ih-consent .wpcf7-list-item{ margin: 0; }
.ih-scope .ih-consent label{
	margin: 0;
	font-family: var(--ih-f-display);
	font-size: 13.5px;
	letter-spacing: 0;
	text-transform: none;
	color: inherit;
}
.ih-scope .ih-form input[type="checkbox"]{
	accent-color: var(--ih-red);
	width: 17px;
	height: 17px;
	margin-top: 2px;
	flex: 0 0 auto;
}
.ih-scope .ih-consent a{ color: var(--ih-white); border-bottom: 1px solid var(--ih-red); }
.ih-scope .ih-consent a:hover{ color: var(--ih-red-hi); }

/* Submit */
.ih-scope .ih-submit{ margin-top: 6px; }
.ih-scope .ih-form input[type="submit"]{
	background: var(--ih-red) !important;
	border: 1px solid var(--ih-red) !important;
	border-radius: 0 !important;
	color: #fff !important;
	font-family: var(--ih-f-display);
	font-size: 14px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	padding: 16px 42px;
	cursor: pointer;
	width: auto;
	transition: background .25s var(--ih-ease), transform .25s var(--ih-ease);
}
.ih-scope .ih-form input[type="submit"]:hover{
	background: var(--ih-red-hi) !important;
	border-color: var(--ih-red-hi) !important;
	transform: translateY(-2px);
}

/* CF7 feedback */
.ih-scope .ih-form .wpcf7-not-valid-tip{
	color: var(--ih-red-hi);
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .1em;
	text-transform: uppercase;
	margin-top: 7px;
}
.ih-scope .ih-form .wpcf7-not-valid{ border-color: var(--ih-red) !important; }
.ih-scope .ih-form .wpcf7-response-output{
	grid-column: 1 / -1;
	border: 1px solid var(--ih-line-strong) !important;
	border-left: 2px solid var(--ih-red) !important;
	background: var(--ih-surface);
	color: var(--ih-white);
	padding: 15px 18px !important;
	margin: 22px 0 0 !important;
	font-size: 14px;
}
.ih-scope .ih-form form.sent .wpcf7-response-output{ border-left-color: #4ADE80 !important; }
.ih-scope .ih-form .wpcf7-spinner{ background: var(--ih-red); }

/* Sub-page heroes are full height too. The class is kept as a hook —
   set a min-height on it here to shorten any single page's hero without
   touching the others. */
.vc_row.ih-scope.ih-hero-sub{ min-height: 100vh; min-height: 100svh; }
@media (max-width: 900px){
	.vc_row.ih-scope.ih-hero-sub{ min-height: 92svh; }
}

@media (max-width: 782px){
	.ih-scope .ih-form-grid{ grid-template-columns: 1fr; }
}

/* ═══ PAGE COMPONENTS ════════════════════════════════════════════════
   Two layouts the inner pages need. Values from site/style.css.
   ═══════════════════════════════════════════════════════════════════ */

/* ── SERVICE GRID ────────────────────────────────────────────────────
   Row class: ih-svc. Each service is a COLUMN; the 1px gap is the grid
   background showing through, which is how the design draws the rules
   without a border per cell doubling up at the seams.

   Column content: Custom Heading .n  ·  Custom Heading .h4
                   Text Block .tl (the quote)  ·  Text Block (body) */
.vc_row.ih-scope.ih-svc{
	display: grid !important;
	grid-template-columns: repeat(2, 1fr);
	gap: 1px;
	background: var(--ih-line);
	border: 1px solid var(--ih-line);
	padding: 0 !important;
}
.vc_row.ih-scope.ih-svc::before,
.vc_row.ih-scope.ih-svc::after{ content: none !important; display: none !important; }
.vc_row.ih-scope.ih-svc > .vc_column_container{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
	background: var(--ih-surface);
	transition: background .3s var(--ih-ease);
}
.vc_row.ih-scope.ih-svc > .vc_column_container:hover{ background: var(--ih-surface-2); }
.vc_row.ih-scope.ih-svc > .vc_column_container > .vc_column-inner{
	padding: clamp(26px, 3vw, 36px) clamp(24px, 2.6vw, 34px) !important;
}

.ih-scope .ih-svc .vc_custom_heading.n{
	font-family: var(--ih-f-mono);
	font-size: 11px;
	letter-spacing: .25em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	margin-bottom: 16px;
}
.ih-scope .ih-svc .vc_custom_heading.h4{
	font-weight: 800;
	font-size: 22px;
	letter-spacing: .02em;
	text-transform: uppercase;
	color: var(--ih-white);
	margin-bottom: 10px;
}
.ih-scope .ih-svc .wpb_text_column.tl p{
	color: var(--ih-muted);
	font-size: 15px;
	font-style: italic;
	margin-bottom: 12px;
}
.ih-scope .ih-svc .wpb_text_column p{ font-size: 14px; line-height: 1.65; }

@media (max-width: 780px){
	.vc_row.ih-scope.ih-svc{ grid-template-columns: 1fr; }
}

/* ── CASE STUDY ──────────────────────────────────────────────────────
   Row class: ih-case. Image column left (ih-frame), body right.
   Body uses a Text Block with .ih-dl for the definition rows. */
.vc_row.ih-scope.ih-case{
	display: grid !important;
	grid-template-columns: 1fr 1.2fr;
	border: 1px solid var(--ih-line);
	background: var(--ih-surface);
	overflow: hidden;
	padding: 0 !important;
	margin-bottom: 20px;
}
.vc_row.ih-scope.ih-case::before,
.vc_row.ih-scope.ih-case::after{ content: none !important; display: none !important; }
.vc_row.ih-scope.ih-case > .vc_column_container{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
}
.vc_row.ih-scope.ih-case > .vc_column_container:last-child > .vc_column-inner{
	padding: clamp(24px, 2.6vw, 34px) !important;
}
.ih-scope .ih-case .ih-frame{ border: 0; height: 100%; min-height: 280px; }

/* Definition rows: label left in red mono, value right. */
.ih-scope .ih-dl dl{ display: grid; grid-template-columns: 110px 1fr; gap: 10px 18px; margin: 18px 0 0; }
.ih-scope .ih-dl dt{
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .18em;
	text-transform: uppercase;
	color: var(--ih-red-hi);
	padding-top: 2px;
	margin: 0;
}
.ih-scope .ih-dl dd{ color: rgba(242,242,242,.75); font-size: 14px; line-height: 1.55; margin: 0; }

@media (max-width: 860px){
	.vc_row.ih-scope.ih-case{ grid-template-columns: 1fr; }
	.ih-scope .ih-dl dl{ grid-template-columns: 92px 1fr; }
}

/* ── ACCORDION (WPBakery Tabs/Tours/Accordion element) ───────────────*/
.ih-scope .vc_tta-accordion .vc_tta-panel{ border: 0 !important; margin-bottom: 1px !important; }
.ih-scope .vc_tta-accordion .vc_tta-panel-heading{
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line) !important;
	border-radius: 0 !important;
	transition: border-color .25s var(--ih-ease);
}
.ih-scope .vc_tta-accordion .vc_tta-panel.vc_active .vc_tta-panel-heading{ border-color: var(--ih-red) !important; }
.ih-scope .vc_tta-accordion .vc_tta-panel-title > a{
	padding: 18px 22px !important;
	font-family: var(--ih-f-display);
	font-size: 15px;
	font-weight: 700;
	letter-spacing: .02em;
	color: var(--ih-white) !important;
}
.ih-scope .vc_tta-accordion .vc_tta-controls-icon::before,
.ih-scope .vc_tta-accordion .vc_tta-controls-icon::after{ border-color: var(--ih-red) !important; }
.ih-scope .vc_tta-accordion .vc_tta-panel-body{
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line) !important;
	border-top: 0 !important;
	border-radius: 0 !important;
	padding: 4px 22px 22px !important;
}
.ih-scope .vc_tta-accordion .vc_tta-panel-body p{ font-size: 14.5px; line-height: 1.7; }

/* ── FILTER BAR CORRECTIONS ──────────────────────────────────────────*/

/* The "SEARCH" label renders through several tags depending on Motors
   version; target the header's children rather than guessing one. */
.ih-scope .sidebar-entry-header > *,
.ih-scope .sidebar-entry-header h4,
.ih-scope .sidebar-entry-header h5,
.ih-scope .sidebar-entry-header .h4,
.ih-scope .sidebar-entry-header .h5{
	font-family: var(--ih-f-mono) !important;
	font-size: 10px !important;
	font-weight: 400 !important;
	letter-spacing: .24em !important;
	text-transform: uppercase !important;
	color: var(--ih-red-hi) !important;
	margin: 0 !important;
	line-height: 1.4 !important;
}
.ih-scope .sidebar-entry-header a,
.ih-scope .sidebar-entry-header a *{
	color: var(--ih-steel) !important;
	font-size: 9.5px !important;
	letter-spacing: .14em !important;
}
.ih-scope .sidebar-entry-header a:hover,
.ih-scope .sidebar-entry-header a:hover *{ color: var(--ih-red-hi) !important; }

/* SELECT2 renders its dropdown in a container appended to <body>, so it
   sits outside .ih-scope and never inherited any of the dark styling —
   which is why an open Μοντέλο list was a white panel. Styled globally,
   which is safe: nothing else on this site uses select2. */
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--multiple{
	background: var(--ih-surface-2) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
	height: auto !important;
	padding: 10px 12px !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered{
	color: var(--ih-white) !important;
	line-height: 1.4 !important;
	padding: 0 !important;
	font-family: var(--ih-f-display);
	font-size: 14px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow b{
	border-color: var(--ih-red) transparent transparent transparent !important;
}
.select2-dropdown{
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
}
.select2-container--default .select2-results__option{
	background: var(--ih-surface) !important;
	color: rgba(242,242,242,.75) !important;
	font-family: var(--ih-f-display);
	font-size: 14px;
	padding: 10px 14px !important;
}
.select2-container--default .select2-results__option--highlighted[aria-selected],
.select2-container--default .select2-results__option[aria-selected="true"]{
	background: var(--ih-red) !important;
	color: #fff !important;
}
.select2-search--dropdown .select2-search__field{
	background: var(--ih-surface-2) !important;
	border: 1px solid var(--ih-line-strong) !important;
	color: var(--ih-white) !important;
	border-radius: 0 !important;
}

/* Chips: outline only. Motors' own button rules were painting the red
   border seen on the inactive ones. */
.ih-scope .ih-chip{
	border: 1px solid var(--ih-line-strong) !important;
	background: transparent !important;
	box-shadow: none !important;
}
.ih-scope .ih-chip:hover{ border-color: var(--ih-white) !important; }
.ih-scope .ih-chip.is-on{
	background: var(--ih-red) !important;
	border-color: var(--ih-red) !important;
}

/* ── FILTER BAR: OPTIONAL ────────────────────────────────────────────
   Add ih-nofilter to the inventory ROW to hide the dropdown bar while
   keeping the results, the sort control and the view toggle.

   Worth doing on the brand pages: 21 CFMOTO and 13 Royal Enfield fit on
   one screen of cards, and a filter that returns "13 of 13" is furniture
   rather than a tool. The chips already cover CFMOTO's series.

   The filter markup stays in the DOM, so the brand lock, the AJAX
   endpoint and the sort control keep working exactly as before — this
   hides a control, it does not remove a mechanism. */
.vc_row.ih-nofilter .filter-sidebar,
.vc_row.ih-nofilter .stm-filter-tabs-skewed,
.vc_row.ih-nofilter .archive-listing-page .col-md-3{ display: none !important; }

/* With the dropdowns gone the chips become the filter, so they get the
   sticky treatment the bar had. Offset by the docked header, not the
   full one — the utility bar is hidden once the header docks. */
.vc_row.ih-nofilter .ih-chips{
	position: sticky;
	top: var(--ih-nav-dock-h, 72px);
	z-index: 40;
	background: rgba(13,13,13,.94);
	-webkit-backdrop-filter: blur(12px);
	backdrop-filter: blur(12px);
	padding: 16px 0;
	margin-bottom: 26px;
	border-bottom: 1px solid var(--ih-line);
}

/* ── RESULTS HEADER ──────────────────────────────────────────────────
   The sort control renders its text outside its own box. Motors sizes
   the select from a width the theme sets elsewhere, and the label wraps
   under it. Given explicit dimensions here. */
.ih-scope .stm-sort-by-options{ position: relative; }
.ih-scope .stm-sort-by-options select,
.ih-scope .stm-sort-by-options .select2-container{
	min-width: 210px !important;
	width: auto !important;
}
.ih-scope .stm-sort-by-options select{
	background: var(--ih-surface) !important;
	border: 1px solid var(--ih-line-strong) !important;
	border-radius: 0 !important;
	color: var(--ih-white) !important;
	font-family: var(--ih-f-mono);
	font-size: 10.5px;
	letter-spacing: .12em;
	text-transform: uppercase;
	padding: 11px 38px 11px 14px;
	height: auto;
	line-height: 1.2;
	appearance: none;
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath fill='%23E30613' d='M0 0h12L6 8z'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: right 14px center !important;
}

/* The type tabs offer one type. Hidden with the rest of the filter. */
.ih-scope .stm-filter-tabs-skewed{ margin-bottom: 20px; }

@media (max-width: 1080px){
	.ih-scope .stm-isotope-sorting,
}
@media (max-width: 620px){
	.ih-scope .stm-isotope-sorting,
}

/* ── INVENTORY GRID ──────────────────────────────────────────────────
   Confirmed against the live DOM rather than inferred:

     .stm-isotope-sorting                     outer wrapper
       └ .row.car-listing-row                 THE ACTUAL ROW
           └ .col-md-6.stm_moto_single_grid_item   the cards

   Three earlier attempts made .stm-isotope-sorting the grid container.
   It has exactly ONE child — that inner row — so the cards were never
   grid items and everything stacked in a single column. The grid
   belongs on .car-listing-row.

   The cards carry no inline styles, so Isotope is not positioning them
   here; they are plain Bootstrap columns. No !important needed beyond
   overriding the col-md widths. */

.ih-scope .stm-isotope-sorting{ height: auto; }

.ih-scope .stm-isotope-sorting .car-listing-row{
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 22px;
	margin: 0;
}
/* Bootstrap clearfix pseudos would take two cells. */
.ih-scope .stm-isotope-sorting .car-listing-row::before,
.ih-scope .stm-isotope-sorting .car-listing-row::after{ content: none; display: none; }

.ih-scope .stm-isotope-sorting .stm_moto_single_grid_item{
	width: auto !important;
	max-width: none !important;
	float: none !important;
	padding: 0 !important;
	margin: 0 !important;
	background: var(--ih-surface);
	border: 1px solid var(--ih-line);
	overflow: hidden;
	display: flex;
	transition: transform .35s var(--ih-ease), border-color .35s var(--ih-ease);
}
.ih-scope .stm-isotope-sorting .stm_moto_single_grid_item:hover{
	transform: translateY(-4px);
	border-color: rgba(227,6,19,.5);
}
.ih-scope .stm-isotope-sorting .stm_moto_single_grid_item > a{
	display: flex;
	flex-direction: column;
	width: 100%;
	text-decoration: none;
}

/* Image — 4:3, cropped. Motors serves a 255px thumbnail by default, so
   the srcset does the rest; object-fit handles the ratio mismatch
   between studio cutouts and lifestyle shots. */
.ih-scope .stm-isotope-sorting .image{
	position: relative;
	aspect-ratio: 4 / 3;
	background: var(--ih-surface-2);
	overflow: hidden;
	margin: 0;
	flex: 0 0 auto;
}
.ih-scope .stm-isotope-sorting .image img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: saturate(.88);
	transition: transform .6s var(--ih-ease);
}
.ih-scope .stm-isotope-sorting .stm_moto_single_grid_item:hover .image img{ transform: scale(1.05); }

/* Badge top-left. */
.ih-scope .stm-isotope-sorting .special-label{
	position: absolute;
	top: 12px;
	left: 12px;
	right: auto;
	transform: none;
	background: var(--ih-red) !important;
	font-family: var(--ih-f-mono);
	font-size: 9.5px;
	letter-spacing: .18em;
	text-transform: uppercase;
	padding: 5px 10px;
	color: #fff;
	z-index: 3;
}

/* Compare / photo-count overlay is redundant on a browse grid. */
.ih-scope .stm-isotope-sorting .stm_moto_hover_unit{ display: none !important; }

/* Body */
.ih-scope .stm-isotope-sorting .listing-car-item-meta{
	background: transparent !important;
	padding: 18px 20px 20px !important;
	margin: 0 !important;
	border-top: 2px solid var(--ih-red);
	flex: 1;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: 74px;
}
.ih-scope .stm-isotope-sorting .car-meta-top{ margin: 0 !important; padding: 0 !important; }
.ih-scope .stm-isotope-sorting .car-title{
	font-weight: 800;
	font-size: 20px;
	line-height: 1.15;
	letter-spacing: .02em;
	text-transform: uppercase;
	color: var(--ih-white);
	transition: color .25s var(--ih-ease);
}
.ih-scope .stm-isotope-sorting .stm_moto_single_grid_item:hover .car-title{ color: var(--ih-red-hi); }

/* Spec rows, where a listing has them. */
.ih-scope .stm-isotope-sorting .car-meta-bottom ul{ list-style: none; margin: 8px 0 0; padding: 0; }
.ih-scope .stm-isotope-sorting .car-meta-bottom li{
	display: flex;
	gap: 8px;
	font-family: var(--ih-f-mono);
	font-size: 10px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--ih-steel);
	margin: 0 0 4px;
}
.ih-scope .stm-isotope-sorting .car-meta-bottom li span:last-child{ color: var(--ih-white); }

@media (max-width: 1080px){
	.ih-scope .stm-isotope-sorting .car-listing-row{ grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 620px){
	.ih-scope .stm-isotope-sorting .car-listing-row{ grid-template-columns: 1fr; }
}


/* ═══ SLATE PURGE ════════════════════════════════════════════════════
   Motors HARDCODES #2f3c40 in twenty-four places in
   assets/css/dist/motorcycle/app.css, and only uses
   var(--motors-secondary-color) in six. So the :root palette override
   near the top of this file could never fix more than a fifth of them —
   the rest are literals, immune to any variable change.

   Every selector below was read out of that stylesheet rather than
   guessed. Grouped by what it actually is, because several are on pages
   not built yet and would otherwise reappear later looking like a new
   bug.

   THE COLOUR ITSELF: #2f3c40 is a blue-grey. On a Jet Black site with a
   pure red accent it reads as a third, unintended brand colour — which
   is why it kept standing out even at small sizes.
   ═══════════════════════════════════════════════════════════════════ */

/* ── Filter fields ───────────────────────────────────────────────────*/
.stm-template-motorcycle .filter-sidebar{
	--location-field-bg-color: var(--ih-surface-2);
	--location-field-border-color: var(--ih-line-strong);
	--location-field-empty-border-color: var(--ih-line-strong);
}
.stm-template-motorcycle .classic-filter-row .filter-sidebar .stm_listing_search_location,
.stm-template-motorcycle .classic-filter-row .filter-sidebar input[type="text"],
.stm-template-motorcycle .classic-filter-row .filter-sidebar .select2-selection.select2-selection--single,
.stm-template-motorcycle .classic-filter-row .filter-sidebar .select2-selection.select2-selection--multiple{
	background: var(--ih-surface-2) !important;
	border: 1px solid var(--ih-line-strong) !important;
}
.stm-template-motorcycle .classic-filter-row .filter-sidebar .stm_listing_search_location:focus,
.stm-template-motorcycle .classic-filter-row .filter-sidebar input[type="text"]:focus{
	background: var(--ih-surface-2) !important;
	border-color: var(--ih-red) !important;
}

/* ── Sort control ────────────────────────────────────────────────────
   This is the slate box behind the sort dropdown. It sits on select2's
   own wrapper, which is why styling the <select> alone left it. */
.stm-template-motorcycle .stm-car-listing-sort-units .stm-sort-by-options .stm-select-sorting
	.select2-container--default .select2-selection--single,
.stm-template-motorcycle .stm-car-listing-sort-units .stm-sort-by-options .stm-select-sorting
	.select2-container--default .select2-selection--single .select2-selection__rendered{
	background: var(--ih-surface) !important;
	border-color: var(--ih-line-strong) !important;
	color: var(--ih-white) !important;
}

/* ── Type tabs ───────────────────────────────────────────────────────*/
.stm-template-motorcycle .stm-filter-tabs-skewed .stm-filter-tab-single-unit:nth-child(odd)::after{
	background: var(--ih-surface) !important;
}

/* ── Pagination ──────────────────────────────────────────────────────*/
.stm-template-motorcycle .stm-blog-pagination .stm-prev-next,
.stm-template-motorcycle .stm-blog-pagination ul.page-numbers li > a,
.stm-template-motorcycle .stm-blog-pagination ul.page-numbers li > span.dots{
	background-color: var(--ih-surface) !important;
	border: 1px solid var(--ih-line);
}
.stm-template-motorcycle .stm-blog-pagination ul.page-numbers li > a:hover{
	border-color: var(--ih-red) !important;
}

/* ── Blog and archive furniture (pages not built yet — pre-empted so
      the colour does not resurface later looking like a new fault) ───*/
.stm-template-motorcycle .post-list-single-item .blog-meta,
.stm-template-motorcycle .post-grid-single-unit .sticky-post,
.stm-template-motorcycle .stm-sell-a-car-form .form-content .contact-details,
.stm-template-motorcycle .wp-block-tag-cloud a,
.stm-template-motorcycle .tagcloud a{
	background: var(--ih-surface) !important;
	background-color: var(--ih-surface) !important;
}
.stm-template-motorcycle .post-grid-single-unit .content,
.stm-template-motorcycle .stm_auto_loan_calculator{
	border-color: var(--ih-line) !important;
}

/* ── Mobile filter sheet ─────────────────────────────────────────────*/
.stm-template-motorcycle form.mobile-search-filter,
.stm-template-motorcycle form.mobile-search-filter .sticky-filter-actions{
	background-color: var(--ih-surface) !important;
}

/* ── Card meta ───────────────────────────────────────────────────────
   The slate behind listing titles comes from the card meta block, which
   Motors paints on a child rather than the wrapper. */
.ih-scope .stm-isotope-sorting .listing-car-item-meta,
.ih-scope .stm-isotope-sorting .listing-car-item-meta *,
.ih-scope .stm-isotope-sorting .car-meta-top,
.ih-scope .stm-isotope-sorting .car-meta-bottom{
	background: transparent !important;
	background-color: transparent !important;
}
.ih-scope .stm-isotope-sorting .listing-car-item-meta{ background: var(--ih-surface) !important; }


/* ═══ MOBILE PASS ════════════════════════════════════════════════════
   Components that had no rule below 900px. Each was reachable on a
   phone and would have rendered at desktop proportions.
   ═══════════════════════════════════════════════════════════════════ */

@media (max-width: 782px){

	/* CHIPS — sticky was making them compete with the sticky header for
	   a short viewport. Static on a phone, and scrollable sideways so
	   five series do not wrap into three rows. */
	.vc_row.ih-nofilter .ih-chips,
	.ih-scope .ih-chips{
		position: static;
		display: flex;
		flex-wrap: nowrap;
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		padding: 12px 0;
		margin: 0 calc(var(--ih-pad-x) * -1) 20px;
		padding-left: var(--ih-pad-x);
		padding-right: var(--ih-pad-x);
	}
	.ih-scope .ih-chips::-webkit-scrollbar{ display: none; }
	.ih-scope .ih-chip{ flex: 0 0 auto; }

	/* FRAME — the 1.15 scale exists so the parallax has headroom to
	   travel. Parallax is off below 900px, so the scale is pure crop. */
	.ih-scope .ih-frame img{ transform: none; }
	.ih-scope .ih-frame[data-cap]::after{ font-size: 9px; padding: 7px 11px; }

	/* CARBON — a 4px weave at phone density is noise rather than
	   texture, and it costs four gradient layers to paint. */
	.vc_row.ih-scope.ih-carbon{ background-image: none; }
	.vc_row.ih-scope.ih-carbon::after{ display: none; }

	/* MONO ROWS — 13px monospace at .04em overflows a 360px screen on
	   the address line. */
	.ih-scope .ih-mono p{ font-size: 12px; line-height: 1.95; word-break: break-word; }

	/* RED RULE — 28px of indent is a lot of a narrow column. */
	.ih-scope .ih-rule{ padding-left: 14px; }

	/* RESULTS HEADER — title, count, sort and view toggle will not sit
	   on one line. Wrapped, with the controls dropping beneath. */
	.ih-scope .stm-car-listing-sort-units{
		flex-wrap: wrap;
		gap: 12px;
		align-items: flex-start;
	}
	.ih-scope .stm-directory-listing-top__right{ margin-left: 0; width: 100%; }
	.ih-scope .stm-sort-by-options select,
	.ih-scope .stm-sort-by-options .select2-container{ min-width: 0 !important; width: 100% !important; }

	/* ACCORDION — 22px of padding each side leaves little for a Greek
	   FAQ question. */
	.ih-scope .vc_tta-accordion .vc_tta-panel-title > a{ padding: 15px 16px !important; font-size: 14px; }
	.ih-scope .vc_tta-accordion .vc_tta-panel-body{ padding: 4px 16px 18px !important; }

	/* TOUCH TARGETS — anything tappable to 44px, the minimum that can be
	   hit reliably without zooming. */
	.ih-scope .vc_btn3.vc_general,
	.ih-scope .ih-form input[type="submit"]{ min-height: 48px; }
	.ih-scope .ih-tile{ min-height: 88px; }

	/* iOS zooms the page when a field under 16px receives focus. */
	.ih-scope .ih-form input,
	.ih-scope .ih-form textarea,
	.ih-scope .ih-form select,
	.ih-scope .filter-sidebar select,
	.ih-scope .filter-sidebar input{ font-size: 16px !important; }

	/* The map is 4:3 on desktop; taller reads better in one column. */
	.ih-scope .ih-frame.ih-map{ aspect-ratio: 3 / 2; }
}

/* Below 380px — the narrow end of what is still common. */
@media (max-width: 380px){
	.ih-scope .ih-mono p{ font-size: 11.5px; letter-spacing: 0; }
	.ih-scope .ih-chip{ font-size: 10px; padding: 11px 14px; }
	#header .logo-main img{ height: 32px; }
}

/* No hover on touch: every reveal-on-hover state is shown outright, or
   the content is unreachable. */
@media (hover: none){
	.ih-scope .ih-tile-s,
	.ih-featured-grid .listing-car-item-meta li{ opacity: 1; transform: none; }
	.ih-scope .ih-tile-ln,
	.ih-featured-grid .car-meta-top::after{ transform: scaleX(1); }
	.ih-scope .vc_btn3.vc_general::before,
	.ih-scope .ih-tile::before{ display: none; }
}

/* Nothing may cause a sideways scrollbar. Full-bleed rows use negative
   margins, and one miscalculation shifts the whole page. */
html, body{ overflow-x: hidden; }


/* ═══ MOBILE REFINEMENTS ═════════════════════════════════════════════ */

@media (max-width: 900px){

	/* TOP BAR OFF.
	   Address, hours, phone and socials wrap to three or four lines on a
	   phone and consumed roughly half the hero before the logo appeared.
	   Every item in it is repeated: the phone in the menu, the address
	   and hours in the footer and on the contact page. It is a desktop
	   convenience, not content.

	   --ih-nav-h is measured from #header by ih-site.js, so hiding this
	   automatically shrinks the hero's top padding and every anchor
	   offset — nothing else needs adjusting. */
	#header .top-bar-wrap{ display: none; }

	/* The scrim was sized for a header carrying the top bar. */
	#header::before{ height: 130px; }

	/* Logo and burger on one line, with real breathing room. */
	#header .header-main-ev_dealer{ padding: 10px 0 !important; }
	#header .logo-main{
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
		gap: 16px;
	}

	/* The trust strip is pulled up 40px to overlap the hero on desktop.
	   With a full-height hero on a phone that lands it on top of the
	   buttons. */
	.ih-scope .trust{ transform: none !important; }
	.ih-scope .trust > div{ padding: 15px var(--ih-pad-x); font-size: 11px; }
}

/* ── FOOTER ON MOBILE ────────────────────────────────────────────────
   Four stacked columns at desktop spacing made the footer roughly two
   screens tall, with 40px gaps reading as breaks between unrelated
   blocks rather than one footer. */
@media (max-width: 782px){
	#footer .widgets{
		grid-template-columns: 1fr;
		gap: 30px;
		padding: 40px var(--ih-pad-x) 34px;
	}
	#footer .widget-title,
	#footer .textwidget h5,
	#footer .textwidget h6{ margin-bottom: 12px; }
	#footer .widget ul{ gap: 8px; }
	#footer .widget ul li a{ font-size: 15px; display: inline-block; padding: 3px 0; }
	#footer .ih-fbrand img{ height: 34px; margin-bottom: 12px; }
	#footer .ih-fbrand p{ font-size: 13.5px; max-width: none; }
	#footer .ih-fmono{ font-size: 12.5px; line-height: 1.9; }

	#footer-copyright .footer-copyright > .row{
		flex-direction: column;
		align-items: flex-start;
		gap: 14px;
		padding: 18px var(--ih-pad-x) 22px;
	}
	#footer-copyright .copyright-text{ line-height: 1.9; }
	#footer-copyright .copyright-text a{ margin-left: 0; margin-right: 16px; }
}