.jsj-srp{
  --jsj-bg:#000;
  --jsj-panel:rgba(10,12,16,.60);
  --jsj-panel-card:rgba(10,12,16,.72);
  --jsj-panel-2:rgba(255,255,255,.035);
  --jsj-hairline:rgba(255,255,255,.06);
  --jsj-hairline-2:rgba(255,255,255,.08);
  --jsj-hairline-3:rgba(255,255,255,.14);
  --jsj-blue:#2e6be6;
  --jsj-blue-deep:#1f56c4;
  --jsj-blue-light:#6fa2f5;
  --jsj-blue-pale:#9cc0fa;
  --jsj-blue-link:#8fb4f2;
  --jsj-copper:#c8884a;
  --jsj-copper-light:#e7b57a;
  --jsj-gold-bright:#ffd9a8;
  --jsj-text:#f4f6f9;
  --jsj-text-2:#dbe0e7;
  --jsj-muted:#8c95a0;
  --jsj-muted-2:#6e7682;
  --jsj-display:"Saira Condensed","Saira",sans-serif;
  --jsj-ui:"Saira",sans-serif;
  --jsj-body:"Inter",sans-serif;
  --jsj-mono:"JetBrains Mono","Roboto Mono",monospace;
  --jsj-r-card:14px;
  --jsj-r-md:10px;
  --jsj-r-sm:9px;
  --jsj-r-xs:8px;
  /* Shell width. The approved comp is 1320px on a 1440 canvas; on the wide
     monitors this site is reviewed on that leaves huge dead gutters, so the
     shell scales up to 1560px and keeps a gutter instead of going edge-to-edge. */
  --jsj-shell:1560px;
  position:relative;
  background:var(--jsj-bg);
  color:var(--jsj-text);
  font-family:var(--jsj-body);
  padding:0 26px 72px;
  /* overflow-x:clip clips stray horizontal overflow WITHOUT creating a scroll
     container — overflow:hidden here would break position:sticky on the
     filter sidebar. */
  overflow-x:clip;
}
.jsj-srp-page .page-header,.jsj-srp-page .entry-header,.jsj-srp-page .entry-title{display:none}
.jsj-srp *{box-sizing:border-box}
.jsj-srp a:hover{color:var(--jsj-copper)}
.jsj-srp button,.jsj-srp input,.jsj-srp select{font-family:inherit}
/* hello-elementor's reset.css paints every button pink in its RESTING state:
     [type="button"],[type="submit"],button
       {border:1px solid #c36;color:#c36;border-radius:3px;...}
   That is 0-1-0, the same weight as a bare component class of ours, and
   WP.com concatenates the theme AFTER this file in one _static bundle — so on
   a tie the theme wins and the carousel chevron rendered pink with a pink
   ring, not white. 0-1-1 here clears it for good; component rules scoped
   .jsj-srp .x are 0-2-0 and still re-assert their own borders and colours. */
.jsj-srp button{border:0;border-radius:0;background-color:transparent;color:inherit;font:inherit;letter-spacing:inherit}
.jsj-srp button:hover,.jsj-srp button:focus,.jsj-srp button:active{box-shadow:none}
/* The pink.
   hello-elementor's reset.css paints EVERY button on hover and focus:
     button:focus,button:hover,[type="button"]:focus,[type="button"]:hover
       {background-color:#c36;color:#fff}
   (written #c36, which is why grepping cc3366 finds nothing). At 0-2-0 that
   beats any bare-class rule of ours, and WP.com concatenates the theme AFTER
   this file in one _static bundle so even a specificity tie loses on order.
   It was surfacing on nine controls here — most visibly the compare toggle,
   the carousel arrows and the view toggle, which keep :focus after a click and
   so stayed pink.
   :is() carries a class's weight, making this 0-2-1 and immune to bundle
   order. It only clears the theme's paint; every component below re-asserts
   its own hover colours, so nothing else changes. The one deliberate colour is
   the focus ring: copper, not the theme's pink, and only on :focus-visible so
   it appears for keyboard users without leaving a ring behind after a click. */
.jsj-srp button:is(:hover,:focus,:active,:focus-visible){background-color:transparent;color:inherit;outline:none}
.jsj-srp button:focus-visible{outline:2px solid var(--jsj-copper);outline-offset:2px}
/* The carousel arrow is the only <button> here whose hover background comes
   from a bare class (0-2-0), so it alone would lose to the guard above.
   Bumped to 0-3-0 to keep its blue. Everything else that styles a hover is
   either already scoped .jsj-srp .x (0-3-0) or is an <a>, which the guard
   does not touch. */
.jsj-srp .jsj-srp-card__nav:hover{background:rgba(91,147,240,.72);color:#fff}
.jsj-srp > *:not(.jsj-aurora){position:relative;z-index:1}
.jsj-aurora{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.jsj-aurora__band{position:absolute;display:block;mix-blend-mode:screen;will-change:transform,opacity,border-radius}
.jsj-aurora__band--blue{top:-15%;left:-10%;width:70vw;height:60vw;max-width:900px;max-height:800px;background:linear-gradient(135deg,rgba(46,107,230,.8),rgba(91,147,240,.32) 65%,transparent 85%);filter:blur(65px);animation:jsj-aurora-1 13s ease-in-out infinite}
.jsj-aurora__band--copper{top:20%;right:-15%;width:65vw;height:55vw;max-width:820px;max-height:760px;background:linear-gradient(200deg,rgba(200,136,74,.75),rgba(231,181,122,.34) 60%,transparent 85%);filter:blur(65px);animation:jsj-aurora-2 16s ease-in-out infinite}
.jsj-aurora__band--silver{bottom:-20%;left:10%;width:60vw;height:50vw;max-width:760px;max-height:700px;background:linear-gradient(160deg,rgba(230,236,244,.42),rgba(91,147,240,.30) 55%,transparent 85%);filter:blur(75px);animation:jsj-aurora-3 19s ease-in-out infinite}
@keyframes jsj-aurora-1{0%,100%{transform:translate(-8%,-6%) rotate(-4deg) scale(1);border-radius:42% 58% 65% 35%/50% 45% 55% 50%;opacity:.6}50%{transform:translate(12%,8%) rotate(8deg) scale(1.24);border-radius:60% 40% 45% 55%/55% 60% 40% 45%;opacity:.9}}
@keyframes jsj-aurora-2{0%,100%{transform:translate(6%,8%) rotate(3deg) scale(1.05);border-radius:55% 45% 40% 60%/45% 55% 50% 50%;opacity:.45}50%{transform:translate(-12%,-7%) rotate(-10deg) scale(.88);border-radius:38% 62% 60% 40%/60% 40% 55% 45%;opacity:.75}}
@keyframes jsj-aurora-3{0%,100%{transform:translate(-5%,7%) rotate(5deg) scale(.98);border-radius:48% 52% 58% 42%/55% 45% 50% 50%;opacity:.36}50%{transform:translate(9%,-11%) rotate(-6deg) scale(1.16);border-radius:62% 38% 42% 58%/42% 58% 48% 52%;opacity:.58}}
.jsj-srp__hero{display:flex;align-items:flex-end;justify-content:space-between;gap:28px;max-width:var(--jsj-shell);margin:0 auto;padding:30px 0 18px}
.jsj-srp__breadcrumb{margin-bottom:14px;color:#8da0be;font-size:13px}
.jsj-srp__breadcrumb a{color:#8da0be;text-decoration:none}
.jsj-srp__intro h1{margin:0 0 12px;color:#d5dae0;font-family:var(--jsj-display);font-size:46px;line-height:.9;font-weight:800;text-transform:uppercase;letter-spacing:.8px}
.jsj-srp__intro p{margin:0;color:#9ba3ac;font-size:15px}
.jsj-srp__intro p strong{color:var(--jsj-blue-light)}
.jsj-srp__search{display:flex;align-items:center;gap:10px;min-width:min(100%,520px)}
.jsj-srp__search input{width:100%;height:44px;border:1px solid rgba(255,255,255,.14);border-radius:9px;background:rgba(255,255,255,.045);color:#fff;padding:0 14px;font-size:14px;outline:none}
.jsj-srp__search input:focus{border-color:rgba(200,136,74,.72);box-shadow:0 0 0 3px rgba(200,136,74,.13)}
.jsj-srp__search button{flex:none;height:44px;border:0;border-radius:8px;background:linear-gradient(180deg,#729df7,var(--jsj-blue));color:#fff;padding:0 22px;font-family:var(--jsj-ui);font-weight:900;cursor:pointer}
.jsj-srp__search button:hover{background:linear-gradient(180deg,var(--jsj-copper),#a86b30)}
.jsj-srp__form{position:relative;z-index:1}
.jsj-srp__toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin:0 0 18px;padding:12px 15px;border:1px solid var(--jsj-hairline-2);border-radius:12px;background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.012))}
.jsj-srp__toolbar-left{display:flex;align-items:center;flex-wrap:wrap;gap:14px;min-width:0}
.jsj-srp__count{font-size:13.5px;color:#c9cfd8;white-space:nowrap}
.jsj-srp__count strong{color:#5b93f0;font-family:var(--jsj-ui);font-weight:700}
.jsj-srp__controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.jsj-srp-view-toggle{display:inline-flex;align-items:center;gap:2px;border:1px solid rgba(255,255,255,.1);border-radius:9px;padding:3px;background:rgba(255,255,255,.04)}
.jsj-srp .jsj-srp-view-toggle__btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:26px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--jsj-muted);cursor:pointer;line-height:0}
.jsj-srp .jsj-srp-view-toggle__btn:hover{color:#fff;background:rgba(255,255,255,.06)}
.jsj-srp .jsj-srp-view-toggle__btn.is-active{background:var(--jsj-blue);color:#fff}
.jsj-srp__pager-link{display:inline-flex;align-items:center;justify-content:center;height:30px;min-width:30px;padding:0 7px;border:1px solid rgba(255,255,255,.14);border-radius:7px;background:rgba(255,255,255,.03);color:#c9cfd8;font-family:var(--jsj-ui);font-size:12.5px;font-weight:600;text-decoration:none;cursor:pointer;line-height:1}
.jsj-srp__pager-link:hover{border-color:rgba(91,147,240,.55);background:rgba(46,107,230,.12);color:#fff}
.jsj-srp__pager-link.is-active{background:var(--jsj-blue);color:#fff;border-color:var(--jsj-blue)}
.jsj-srp__pager-link.is-disabled{opacity:.45;pointer-events:none;cursor:not-allowed}
.jsj-srp__sort{display:flex;align-items:center;gap:9px;color:var(--jsj-muted);font-size:12px}
/* Fully custom control: without appearance:none the browser paints its own
   select chrome (light background + native arrow) and the toolbar breaks. */
/* !important on the paint properties: the host stylesheets that ship with
   WP.com are cross-origin and set select{background:#fff;color:#000} — without
   this the control reverts to the light native look. */
.jsj-srp .jsj-srp__sort select{appearance:none!important;-webkit-appearance:none!important;-moz-appearance:none!important;height:34px;min-width:172px;border:1px solid rgba(255,255,255,.14)!important;border-radius:9px;background-color:#0d0f14!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%238c95a0' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important;background-repeat:no-repeat!important;background-position:right 12px center!important;color:#e6e9ee!important;padding:0 32px 0 12px;font-family:var(--jsj-body);font-size:12.5px;line-height:34px;cursor:pointer;outline:none;text-shadow:none;box-shadow:none}
.jsj-srp .jsj-srp__sort select:hover{border-color:rgba(255,255,255,.24)!important}
.jsj-srp .jsj-srp__sort select option{background:#0d0f14;color:#e6e9ee}
.jsj-srp__pager{display:flex;align-items:center;gap:5px;margin-left:6px}
.jsj-srp__pager-gap{display:inline-flex;align-items:center;justify-content:center;color:var(--jsj-muted);min-width:20px}
.jsj-srp__body{display:grid;grid-template-columns:292px minmax(0,1fr);gap:28px;align-items:start;max-width:var(--jsj-shell);margin:0 auto}
.jsj-srp__content{min-width:0}
.jsj-srp__sidebar{position:sticky;top:110px;align-self:start;max-height:calc(100vh - 128px);overflow-y:auto;overscroll-behavior:contain;border:1px solid var(--jsj-hairline-2);border-radius:14px;background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.012))}
.jsj-srp__sidebar::-webkit-scrollbar{width:9px}
.jsj-srp__sidebar::-webkit-scrollbar-track{background:rgba(255,255,255,.04)}
.jsj-srp__sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border-radius:999px}
.jsj-srp__sidebar::-webkit-scrollbar-thumb:hover{background:rgba(91,147,240,.45)}
.jsj-srp__sidebar-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 18px 14px}
.jsj-srp__sidebar-head span{font-family:var(--jsj-display);font-size:19px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
.jsj-srp__sidebar-head a{color:var(--jsj-blue-pale);font-family:var(--jsj-body);font-size:11.5px;font-weight:600;text-decoration:none}
.jsj-srp-filter{margin:0 18px;padding:0;border:0;border-top:1px solid rgba(255,255,255,.07)}
.jsj-srp-filter summary{display:flex;width:100%;align-items:center;justify-content:space-between;padding:12px 0;color:#e6e9ee;font-family:var(--jsj-ui);font-size:13.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;list-style:none;cursor:pointer}
.jsj-srp-filter summary::-webkit-details-marker{display:none}
.jsj-srp-filter summary::after{content:"›";color:#7d8794;transition:transform .18s ease}
.jsj-srp-filter[open] summary::after{transform:rotate(90deg)}
.jsj-srp-filter__options{display:flex;flex-direction:column;gap:2px;padding:0 0 12px}
.jsj-srp-filter__options--scroll{max-height:154px;overflow-y:auto;padding-right:8px;margin-right:6px}
.jsj-srp-filter__options--scroll::-webkit-scrollbar{width:9px}
.jsj-srp-filter__options--scroll::-webkit-scrollbar-track{background:rgba(255,255,255,.05);border-radius:999px}
.jsj-srp-filter__options--scroll::-webkit-scrollbar-thumb{background:rgba(8,10,14,.82);border-radius:999px}
.jsj-srp-filter__empty{color:#7d8794;font-size:12px;line-height:1.35}
.jsj-srp-filter__choice{display:flex;align-items:center;gap:8px;min-height:25px;color:#aeb6bf;font-size:12px;cursor:pointer}
.jsj-srp-filter__choice:hover{color:#dbe8ff}
.jsj-srp-filter__choice input{appearance:none;width:14px;height:14px;border:1px solid rgba(255,255,255,.26);border-radius:4px;background:rgba(255,255,255,.035);display:grid;place-items:center;flex:none}
.jsj-srp-filter__choice input:checked{border-color:var(--jsj-blue-light);background:var(--jsj-blue)}
.jsj-srp-filter__choice input:checked::after{content:"";width:5px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px}
.jsj-srp-filter__choice em{margin-left:auto;color:#6f7985;font-style:normal;font-size:11px}
.jsj-srp-filter__options--swatches .jsj-srp-filter__choice input{display:none}
.jsj-srp-filter__swatch{width:14px;height:14px;border-radius:50%;border:1px solid rgba(255,255,255,.28);background:#777;box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}
.jsj-srp-filter__swatch--black{background:#050608}
.jsj-srp-filter__swatch--white{background:#f2f2ed}
.jsj-srp-filter__swatch--silver{background:#b9c0c8}
.jsj-srp-filter__swatch--gray,.jsj-srp-filter__swatch--grey{background:#6c737b}
.jsj-srp-filter__swatch--red{background:#9a2424}
.jsj-srp-filter__swatch--blue{background:#2e6be6}
.jsj-srp-filter__swatch--brown{background:#76502e}
.jsj-srp-filter__swatch--green{background:#1f7d45}
.jsj-srp-filter__swatch--gold{background:#c8884a}
.jsj-srp-filter--range,.jsj-srp-filter--mileage{padding-bottom:0}
.jsj-srp-filter__range-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;padding:0 0 12px}
.jsj-srp-filter__range-row input{min-width:0;height:34px;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:rgba(5,7,10,.7);color:#fff;padding:0 9px;font-size:12px;outline:none}
.jsj-srp-filter__apply{grid-column:1/-1;min-height:34px;border:0;border-radius:8px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;font-family:var(--jsj-ui);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.5px;cursor:pointer}
.jsj-srp-filter__apply:hover{filter:brightness(1.08)}
.jsj-srp-filter__range-row input:focus,.jsj-srp-filter--mileage input:focus,.jsj-srp__search input:focus,.jsj-srp__sort select:focus{border-color:rgba(91,147,240,.65);box-shadow:0 0 0 3px rgba(46,107,230,.12)}
.jsj-srp-filter__range-row span{color:#7b8490;font-size:11px}
.jsj-srp-filter__mileage-value{padding:0 0 8px;color:#9cc0fa;font-size:12px;font-weight:700}
.jsj-srp-filter--mileage input{width:100%;margin:0 0 12px;accent-color:var(--jsj-blue)}
.jsj-srp__filter-submit{width:calc(100% - 36px);margin:14px 18px;border:0;border-radius:9px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;min-height:40px;font-family:var(--jsj-ui);font-weight:900;text-transform:uppercase;letter-spacing:.5px;cursor:pointer}
.jsj-srp__filter-submit:hover{filter:brightness(1.08);color:#fff}
.jsj-srp__chips-region:empty{display:none}
.jsj-srp__chips{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.jsj-srp__chip-remove{display:inline-flex;align-items:center;gap:5px;border:1px solid rgba(91,147,240,.35);border-radius:7px;background:rgba(91,147,240,.12);color:var(--jsj-blue-pale);padding:4px 9px;font-size:11.5px;font-weight:600;font-style:normal;text-decoration:none;line-height:1.35}
.jsj-srp__chip-remove:hover{border-color:rgba(200,136,74,.5);background:rgba(200,136,74,.12);color:#f0c088}
.jsj-srp__chip-remove span{opacity:.7;font-size:12px;line-height:1}
/* Vertical cards track the approved ~465px comp: three up on the wide shell,
   two on mid widths, never narrower than the card design tolerates. */
.jsj-srp__results{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:18px;min-width:0}
.jsj-srp__empty{grid-column:1/-1;border:1px dashed rgba(255,255,255,.12);border-radius:14px;background:rgba(255,255,255,.02);padding:56px 20px;color:#8c95a0;text-align:center}
.jsj-srp[data-jsj-srp-layout=horizontal] .jsj-srp__results{grid-template-columns:1fr}
.jsj-srp-card{display:flex;flex-direction:column;position:relative;overflow:hidden;border:1px solid var(--jsj-hairline-2);border-radius:var(--jsj-r-card);background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.015));box-shadow:0 18px 40px -24px rgba(0,0,0,.9);color:#e6e9ee;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.jsj-srp-card:hover{transform:translateY(-2px);border-color:rgba(46,107,230,.34)}
.jsj-srp-card--horizontal{flex-direction:row}
.jsj-srp-card__media{position:relative;display:flex;flex-direction:column;background:#0a0c10}
.jsj-srp-card--horizontal .jsj-srp-card__media{flex:none;width:290px;align-self:stretch;overflow:hidden}
.jsj-srp-card__media-strip{flex:none;height:30px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 12px;background:linear-gradient(180deg,#0b0d11,#070809);border-bottom:1px solid var(--jsj-hairline)}
.jsj-srp-card--horizontal .jsj-srp-card__media-strip{height:28px;padding:0 10px}
.jsj-srp-card__phone{color:var(--jsj-copper);font-family:var(--jsj-ui);font-size:12.5px;font-weight:600;letter-spacing:.04em;text-decoration:none;white-space:nowrap}
.jsj-srp-card--horizontal .jsj-srp-card__phone{font-size:10.5px}
.jsj-srp .jsj-srp-card__alert{display:inline-flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:var(--jsj-copper-light);cursor:pointer}
.jsj-srp .jsj-srp-card__alert:hover,.jsj-srp .jsj-srp-card__alert:focus,.jsj-srp .jsj-srp-card__alert:active{background:transparent;box-shadow:none;outline:none}
.jsj-srp-card__alert-label{color:#5b93f0;font-family:var(--jsj-body);font-size:11.5px;font-weight:600;letter-spacing:.02em;white-space:nowrap}
.jsj-srp-card--horizontal .jsj-srp-card__alert-label{font-size:10px}
.jsj-srp .jsj-srp-card__alert:hover .jsj-srp-card__alert-label{color:var(--jsj-blue-pale)}
.jsj-srp-card__alert-bell{transform-origin:top center;animation:jsj-bell 3.2s ease-in-out infinite}
@keyframes jsj-bell{0%,80%,100%{transform:rotate(0)}84%{transform:rotate(14deg)}88%{transform:rotate(-12deg)}92%{transform:rotate(8deg)}96%{transform:rotate(-4deg)}}
.jsj-srp .jsj-srp-card__alert.is-on .jsj-srp-card__alert-bell{fill:var(--jsj-copper-light);animation:none}
/* Fixed media box. Inventory photos arrive at every aspect ratio, so the box
   never resizes — the photo is contained inside it and the leftover is black. */
.jsj-srp-card__frame{position:relative;flex:1 1 auto;height:250px;min-height:250px;background:#000;overflow:hidden}
.jsj-srp-card--horizontal .jsj-srp-card__frame{height:auto;min-height:190px}
/* pointer-events:none so a click that lands on a badge still reaches the photo
   link underneath — the badges are labels, not controls. The Compare toggle
   next to them keeps its own events. */
.jsj-srp-card__badges{position:absolute;z-index:6;left:9px;top:9px;display:flex;flex-direction:column;align-items:flex-start;gap:5px;pointer-events:none}
/* Photo -> vehicle. tabindex="-1" in the markup keeps it out of the tab order:
   the card title immediately below is the same link with a real label, so a
   keyboard user would otherwise hit the same destination twice per card. */
.jsj-srp .jsj-srp-card__frame-link{position:absolute;inset:0;z-index:2;display:block;border:0;border-radius:inherit;background:none}
.jsj-srp-card__badge{display:inline-flex;align-items:center;border:1px solid rgba(255,255,255,.2);border-radius:5px;background:rgba(10,12,16,.7);color:#e6e9ee;padding:3px 8px;font-family:var(--jsj-ui);font-weight:600;font-size:10px;line-height:1.25;text-transform:uppercase;letter-spacing:.07em;backdrop-filter:blur(4px)}
.jsj-srp-card__badge--arrival{background:rgba(91,147,240,.85);color:#06080c;border-color:rgba(255,255,255,.25)}
.jsj-srp-card__badge--incoming{background:rgba(200,136,74,.92);color:#15100a;border-color:rgba(255,222,184,.5)}
.jsj-srp-card__badge--muted{background:rgba(10,12,16,.72);color:#e6e9ee;border-color:rgba(255,255,255,.22)}
.jsj-srp-card__badge--ev{background:rgba(10,12,16,.7);color:#7fd3a2;border-color:rgba(46,150,90,.5)}
.jsj-srp .jsj-srp-card__compare{position:absolute;z-index:6;right:9px;top:9px;display:inline-flex;align-items:center;gap:6px;border-radius:7px;background:rgba(8,10,14,.66);border:1px solid rgba(255,255,255,.2);color:#e6e9ee;padding:4px 9px 4px 6px;font-family:var(--jsj-body);font-size:11px;font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease}
.jsj-srp .jsj-srp-card__compare:hover{border-color:var(--jsj-blue-light);background:rgba(7,8,10,.86);color:#fff}
.jsj-srp-card__compare-box{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border:1.5px solid currentColor;border-radius:4px;background:transparent;font-size:10px;line-height:1}
.jsj-srp .jsj-srp-card__compare.is-active{background:var(--jsj-blue);border-color:var(--jsj-blue);color:#fff}
.jsj-srp .jsj-srp-card__compare.is-active .jsj-srp-card__compare-box{background:#fff;border-color:#fff}
.jsj-srp .jsj-srp-card__compare.is-active .jsj-srp-card__compare-box::after{content:"✓";color:var(--jsj-blue);font-weight:900}
.jsj-srp-card.is-compared{border-color:rgba(91,147,240,.6)}
.jsj-srp-card__alert-bell{flex:none}
.jsj-srp-card__carousel,.jsj-srp-card__placeholder{position:absolute;inset:0}
/* width/height forced: the theme ships img{height:auto}, which collapsed the
   slide to its natural ratio and silently cropped it instead of containing it. */
.jsj-srp .jsj-srp-card__slide{position:absolute;inset:0;width:100%!important;height:100%!important;max-width:none;object-fit:contain;object-position:center;background:#000;opacity:0;transition:opacity .25s ease}
.jsj-srp-card__slide.is-active{opacity:1}
.jsj-srp-card__placeholder{display:grid;place-items:center;background:linear-gradient(135deg,#151922,#080a0d);color:#7c848e;font-family:var(--jsj-ui);font-size:12px;text-transform:uppercase;letter-spacing:1px}
.jsj-srp .jsj-srp-card__nav{position:absolute;top:50%;z-index:4;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid rgba(255,255,255,.18);border-radius:50%;background:rgba(8,10,14,.62);backdrop-filter:blur(4px);color:#fff;font-size:16px;line-height:1;cursor:pointer}
.jsj-srp-card--horizontal .jsj-srp-card__nav{width:26px;height:26px;font-size:14px}
.jsj-srp-card__nav:hover{background:rgba(91,147,240,.72);color:#fff}
.jsj-srp-card__nav--prev{left:8px}
.jsj-srp-card__nav--next{right:8px}
.jsj-srp-card__counter{position:absolute;right:10px;bottom:9px;z-index:4;border-radius:5px;background:rgba(8,10,14,.66);backdrop-filter:blur(4px);color:#fff;padding:2px 7px;font-family:var(--jsj-body);font-size:10.5px;font-weight:600}
.jsj-srp-card__dots{position:absolute;left:0;right:0;bottom:10px;z-index:4;display:flex;justify-content:center;gap:5px;pointer-events:none}
/* Dealership mark over the photography — the same overlay the VDP gallery
   uses. Top-centre and hard against the edge, because the dealer's photo
   service burns a phone number across the top of each vehicle's lead shot and
   this is meant to sit over it. The corners are all taken here anyway: badges
   top-left, Compare top-right, arrows at the sides, counter bottom-right.
   The scrim on the wrapper does the hiding — the lockup alone would let that
   number read through the gaps in the letterforms — and it fades to nothing
   short of its own box so it reads as shading, not a panel.
   z-index 3 keeps it under the badges (6) and arrows (4): on the narrow
   horizontal card the boxes can graze, and a badge over a soft wash is a much
   better failure than a badge under one. */
.jsj-srp .jsj-srp-card__dot{pointer-events:auto;width:6px;height:6px;padding:0;border:0;border-radius:3px;background:rgba(255,255,255,.4);cursor:pointer;transition:width .2s ease,background .2s ease}
.jsj-srp .jsj-srp-card__dot.is-active{width:18px;background:#5b93f0}
.jsj-srp .jsj-srp-card__dot:hover{background:#fff}
/* Vertical order = price → CTA → tools → specs; horizontal = specs → CTA →
   tools, matching the two approved comps from one markup order. */
.jsj-srp-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:11px;padding:14px 16px 16px}
.jsj-srp-card--horizontal .jsj-srp-card__body{padding:14px 18px 16px}
.jsj-srp-card__head{order:1;display:flex;flex-direction:column;gap:11px;min-width:0}
.jsj-srp-card__ctas{order:2}
.jsj-srp-card__tiles{order:3}
.jsj-srp-card__highlights{order:4}
.jsj-srp-card--horizontal .jsj-srp-card__head{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.jsj-srp-card--horizontal .jsj-srp-card__highlights{order:2}
.jsj-srp-card--horizontal .jsj-srp-card__ctas{order:3;margin-top:auto}
.jsj-srp-card--horizontal .jsj-srp-card__tiles{order:4}
.jsj-srp-card__marquee{flex:none;height:27px;overflow:hidden;border-top:1px solid rgba(200,136,74,.3);border-bottom:1px solid rgba(200,136,74,.2);background:linear-gradient(90deg,#1a1206,#251803,#1a1206);color:var(--jsj-copper-light);font-family:var(--jsj-ui);font-size:12px;font-weight:700;line-height:27px;letter-spacing:.1em;text-transform:uppercase}
.jsj-srp-card--horizontal .jsj-srp-card__marquee{height:24px;line-height:24px;font-size:11px;letter-spacing:.08em;border-bottom:0}
.jsj-srp-card__marquee-text{display:inline-block;white-space:nowrap;padding-left:100%;animation:jsj-marquee 11s linear infinite}
.jsj-srp-card__marquee--noprice{display:flex;align-items:center;justify-content:center;border-top-color:rgba(91,147,240,.22);border-bottom-color:var(--jsj-hairline);background:linear-gradient(90deg,#0c0e12,#11141a,#0c0e12);color:var(--jsj-muted);font-size:11px;font-weight:600;letter-spacing:.14em}
.jsj-srp-card--horizontal .jsj-srp-card__marquee--noprice{font-size:10px;letter-spacing:.1em}
@keyframes jsj-marquee{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}
.jsj-srp-card__title-block{min-width:0}
/* Titles stay on one line so every card in a row keeps the same rhythm; the
   ellipsis is the backstop for the occasional very long year/make/model. */
.jsj-srp-card__title{margin:0;font-family:var(--jsj-display);font-size:19px;line-height:1.15;font-weight:700;text-transform:uppercase;letter-spacing:.01em}
.jsj-srp-card--horizontal .jsj-srp-card__title{font-size:20px;line-height:1.1}
.jsj-srp-card__title a{display:block;color:#f4f6f9;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jsj-srp-card__title a:hover{color:var(--jsj-blue-pale)}
.jsj-srp-card__subtitle{display:block;margin-top:2px;color:var(--jsj-blue-link);font-family:var(--jsj-ui);font-size:13.5px;font-weight:500;text-decoration:none}
.jsj-srp-card--horizontal .jsj-srp-card__subtitle{font-size:13px}
.jsj-srp-card__identity{display:flex;flex-wrap:wrap;gap:16px;margin-top:8px;color:#7b8390;font-family:var(--jsj-mono);font-size:10.5px;letter-spacing:.02em}
.jsj-srp-card--horizontal .jsj-srp-card__identity{gap:12px;margin-top:6px;font-size:10px}
.jsj-srp-card__price-panel{display:flex;flex-direction:column;gap:2px;border:1px solid rgba(46,107,230,.22);border-radius:11px;background:linear-gradient(135deg,rgba(46,107,230,.13),rgba(46,107,230,.03));padding:13px 14px}
.jsj-srp-card--horizontal .jsj-srp-card__price-panel{flex:none;min-width:186px;padding:10px 13px;border-radius:10px;gap:1px}
.jsj-srp-card__price-panel--noprice{flex-direction:row;align-items:center;justify-content:space-between;gap:12px;border-color:rgba(255,255,255,.09);background:rgba(255,255,255,.03);padding:13px}
.jsj-srp-card__price-label{display:block;margin-top:3px;color:var(--jsj-muted-2);font-family:var(--jsj-body);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
.jsj-srp-card--horizontal .jsj-srp-card__price-label{font-size:9px;margin-top:2px;letter-spacing:.07em}
.jsj-srp-card__price-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.jsj-srp-card--horizontal .jsj-srp-card__price-row{justify-content:flex-start;gap:8px}
.jsj-srp-card__price{display:block;color:var(--jsj-blue-light);font-family:var(--jsj-display);font-size:30px;line-height:1;font-weight:700}
.jsj-srp-card--horizontal .jsj-srp-card__price{font-size:23px}
.jsj-srp-card__msrp{display:block;color:#a7aeb8;font-family:var(--jsj-body);font-size:13.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;text-decoration:line-through;text-decoration-color:rgba(255,255,255,.5)}
.jsj-srp-card--horizontal .jsj-srp-card__msrp{font-size:11px;letter-spacing:.03em}
/* Holds the retail line's space open on a car with no discount, so its price
   panel matches a discounted one and the CTA below stays on the same line
   across the row. 1lh is exactly the line box the real <del> would occupy, so
   this tracks the font size on both card layouts instead of guessing at it. */
.jsj-srp-card__msrp--reserved{min-height:1lh;visibility:hidden}
/* The You Save pill is taller than the price it sits beside, so its slot is
   held open too. visibility:hidden rather than opacity so it cannot be read
   or hovered, and the pulse is switched off — there is nothing to draw the
   eye to. Between this and the reserved retail line the panel is the same
   height on every card without a single hard-coded pixel. */
.jsj-srp .jsj-srp-card__savings--reserved{visibility:hidden;animation:none;box-shadow:none}
.jsj-srp-card__savings{display:inline-flex;align-items:baseline;gap:6px;border:1px solid rgba(231,181,122,.55);border-radius:8px;background:linear-gradient(135deg,#3a2609,#2a1c08);color:#f3c98a;padding:5px 12px;font-family:var(--jsj-display);font-size:12.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;box-shadow:0 6px 16px -8px rgba(200,136,74,.55);animation:jsj-pulse 2.6s ease-in-out infinite}
.jsj-srp-card__savings strong{color:var(--jsj-gold-bright);font-size:20px;line-height:1}
.jsj-srp-card--horizontal .jsj-srp-card__savings{padding:3px 8px;border-radius:7px;font-size:10.5px;letter-spacing:.04em}
.jsj-srp-card--horizontal .jsj-srp-card__savings strong{font-size:14px}
.jsj-srp-card__price-contact{color:var(--jsj-text-2);font-family:var(--jsj-display);font-size:21px;font-weight:700}
.jsj-srp-card__call{display:inline-flex;align-items:center;border-radius:8px;background:var(--jsj-copper);color:#15100a;padding:8px 14px;font-family:var(--jsj-ui);font-size:12px;font-weight:900;text-transform:uppercase;text-decoration:none}
.jsj-srp .jsj-srp-card__call:hover{background:var(--jsj-copper-light);color:#15100a}
@keyframes jsj-pulse{0%,100%{opacity:1}50%{opacity:.55}}
.jsj-srp-card__highlights-title{display:flex;align-items:center;gap:7px;color:#5e6670;font-family:var(--jsj-ui);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px}
.jsj-srp-card__highlights-title::after{content:"";height:1px;flex:1;background:var(--jsj-hairline)}
.jsj-srp-card--horizontal .jsj-srp-card__highlights-title{display:none}
.jsj-srp-card__spec-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;border:1px solid var(--jsj-hairline);border-radius:var(--jsj-r-sm) var(--jsj-r-sm) 0 0;overflow:hidden;background:var(--jsj-hairline)}
.jsj-srp-card--horizontal .jsj-srp-card__spec-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.jsj-srp-card__spec{min-width:0;background:rgba(10,12,16,.6);padding:7px 10px}
.jsj-srp-card--horizontal .jsj-srp-card__spec{padding:6px 9px}
.jsj-srp-card__spec span{display:block;color:var(--jsj-muted-2);font-family:var(--jsj-body);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jsj-srp-card__spec strong{display:block;margin-top:2px;color:var(--jsj-text-2);font-family:var(--jsj-ui);font-size:13px;font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jsj-srp-card--horizontal .jsj-srp-card__spec span{font-size:9px;letter-spacing:.05em}
.jsj-srp-card--horizontal .jsj-srp-card__spec strong{font-size:12px}
.jsj-srp-card__spec--extra{display:none}
.jsj-srp-card.is-specs-open .jsj-srp-card__spec--extra{display:block}
.jsj-srp .jsj-srp-card__spec-toggle{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;min-height:32px;padding:8px;border:1px solid var(--jsj-hairline);border-top:0;border-radius:0 0 var(--jsj-r-sm) var(--jsj-r-sm);background:rgba(46,107,230,.07);color:var(--jsj-blue-pale);font-family:var(--jsj-body);font-size:11.5px;font-weight:600;letter-spacing:.02em;cursor:pointer}
.jsj-srp-card--horizontal .jsj-srp-card__spec-toggle{min-height:26px;padding:6px;font-size:11px}
.jsj-srp .jsj-srp-card__spec-toggle:hover,.jsj-srp .jsj-srp-card__spec-toggle:focus,.jsj-srp .jsj-srp-card__spec-toggle:active{background:rgba(46,107,230,.13);border-color:rgba(91,147,240,.28);color:var(--jsj-blue-pale);outline:none;box-shadow:none}
.jsj-srp-card__ctas{display:flex;flex-direction:column;gap:9px}
/* `.jsj-srp .jsj-srp-card__cta`, not the bare class. This became a <button> on
   2026-08-21 so it could open the Check Availability form instead of only
   navigating, and the moment it did, the pink-button guard near the top of this
   sheet — `.jsj-srp button`, 0-1-1 — started outranking a bare 0-1-0 component
   class and stripping the CTA back to transparent with an inherited font. Same
   trap the carousel arrows hit. 0-2-0 here settles it. */
.jsj-srp .jsj-srp-card__cta{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:13px;border:0;border-radius:9px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;text-decoration:none;font-family:var(--jsj-ui);font-weight:700;font-size:15px;letter-spacing:.02em;line-height:1.2;cursor:pointer;box-shadow:0 10px 24px -10px rgba(46,107,230,.7)}
.jsj-srp .jsj-srp-card--horizontal .jsj-srp-card__cta{padding:12px;font-size:14px}
.jsj-srp .jsj-srp-card__cta:is(:hover,:focus,:active){filter:brightness(1.08);color:#fff;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep))}
.jsj-srp-card__tiles{--jsj-tile-gap:9px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--jsj-tile-gap)}
.jsj-srp-card--horizontal .jsj-srp-card__tiles{--jsj-tile-gap:8px}
.jsj-srp-card__tile{min-width:0;display:flex;align-items:center;justify-content:flex-start;gap:7px;border:1px solid var(--jsj-hairline-2);border-radius:var(--jsj-r-md);background:var(--jsj-panel-2);color:#fff;text-decoration:none;padding:9px 7px}
.jsj-srp-card__tile--wide{grid-column:1/-1;justify-content:center}
.jsj-srp-card__tile--wide .jsj-srp-card__tile-text{flex:none;text-align:center}
.jsj-srp-card__tile:hover{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.16);color:#fff}
.jsj-srp-card__tile-logo{flex:none;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--jsj-r-xs);background:#fff;color:var(--jsj-blue);font-family:var(--jsj-ui);font-weight:700;font-size:9px;padding:2.5px;overflow:hidden;text-align:center}
.jsj-srp-card__tile-logo img{width:100%;height:100%;object-fit:contain;display:block}
.jsj-srp-card__tile-text{min-width:0;flex:1;display:flex;flex-direction:column}
.jsj-srp-card__tile strong,.jsj-srp-card__tile small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jsj-srp-card__tile strong{color:#e6e9ee;font-family:var(--jsj-body);font-size:10.5px;font-weight:700;line-height:1.2}
.jsj-srp-card__tile small{color:var(--jsj-muted);font-family:var(--jsj-body);font-size:9px;font-weight:500;line-height:1.25}
/* Vendor-drawn partner slots. CARFAX supply the button artwork and CarGurus
   paint their own badge into the span, so these two keep the tile footprint
   without the tile chrome. A slot left alone (no VIN, or no price for CarGurus
   to rate) spans the row rather than leaving a hole beside it. */
/* min-height 74, not 60. CarGurus force their badge to exactly 60px, so a
   paired tile measures 60 + 12 padding + 2 border = 74 (border-box), while a
   CARFAX-only tile sat at the old 60 floor. That left the row 14px shorter on
   the ~40% of vehicles CarGurus has no data for, so cards in the same grid row
   disagreed about where VEHICLE HIGHLIGHTS starts. Holding 74 makes the row
   identical either way. If CarGurus ever change that 60, this follows it. */
.jsj-srp-card__partner{min-width:0;display:flex;align-items:center;justify-content:center;min-height:84px;border:1px solid var(--jsj-hairline-2);border-radius:var(--jsj-r-md);background:var(--jsj-panel-2);padding:6px}
.jsj-srp-card__partner--solo{grid-column:1/-1}
.jsj-srp-card__partner:hover{border-color:rgba(255,255,255,.16)}
/* The CARFAX mark is not centred inside CARFAX's own file: their button is a
   156x56 JPEG whose artwork occupies only x 8-95, y 3-33, leaving 60px of white
   to its right and 22px below. Centring the <img> centres all that empty
   canvas, which is what left the logo sitting high and to the left of the tile.
   So the link becomes a 104x37 window onto the top-left of their canvas — the
   tightest crop that puts the mark dead centre on both axes while keeping the
   8px and 3px of clear space CARFAX built into the file. Their artwork is never
   altered or scaled unevenly; only blank canvas is hidden. The percentages are
   source over window: 156/104 = 150%, 56/37 = 151.35%. Re-measure both if
   CARFAX reissue the asset. Measured 2026-08-12. */
.jsj-carfax-button{position:relative;display:block;overflow:hidden;line-height:0;width:112px;max-width:100%;aspect-ratio:104/37}
.jsj-carfax-button img{position:absolute;top:0;left:0;display:block;width:150%;height:151.35%;max-width:none;max-height:none;border:0;border-radius:0}
/* THE CARGURUS BADGE NEEDS A LIGHT GROUND, and this is not a preference.
   The badge is an SVG served by CarGurus, one file per deal rating, drawn with
   the wording as outlined paths in #0D1722 — a near-black navy — on a
   TRANSPARENT background. Checked against the three files we can get:
     great.svg  "GREAT DEAL" in #078A0B green   -> legible on our dark card
     good.svg   "Good Deal"  in #0D1722 near-black -> invisible on our dark card
     fair.svg   "Fair Deal"  in #0D1722 near-black -> invisible on our dark card
   So the text is not sometimes green and sometimes black at random: it is green
   on one rating and near-black on the other two, and the dealer happened to be
   looking at different cars. Same reason it looked different between browsers —
   different vehicles, not different rendering.
   We cannot recolour it: it is an <img>, so its innards are out of reach, and
   the file is CarGurus' to change. Filtering it is the same dead end the Pin-Up
   logo hit — any adjustment big enough to lift the navy destroys the red and
   blue of the CarGurus wordmark beside it. So the ground changes instead, which
   is how CarGurus draw these to be used. #0D1722 on white measures about 17:1. */
/* A SMALL WHITE PLATE ON THE BADGE, DARK TILE BEHIND IT — matching the way
   CARFAX's own button sits as a white rectangle on the dark card. The first
   attempt whited the whole tile; the dealer found that too much white, so the
   plate shrank back to the badge.
   THE BADGE IMAGE CANNOT BE RESIZED. CarGurus' script writes
   `style="height: 60px !important"` INLINE on the img, which is the highest
   priority declaration in CSS — no stylesheet rule of ours can touch it. An
   attempt to cap it at 34px here matched the element and computed to nothing,
   which is what sent me looking at the inline attribute.
   So the tile is sized around the badge instead of the other way round: 60px of
   image plus 10px of plate padding plus 12px of tile padding needs 82px, and
   the min-height below is 84px for EVERY partner tile, whether CarGurus
   answered or not. That last part is the whole fix — the misalignment was never
   the badge being tall, it was the row height depending on whether a rating
   came back. */
.jsj-cargurus-badge{display:block;max-width:100%;line-height:0;background:#fff;border-radius:6px;padding:5px 8px;box-sizing:border-box}
.jsj-cargurus-badge img{display:block;width:auto;max-width:100%}
/* CarGurus answers "no information" for a VIN it has no market data on — about
   a third of this lot — and writes an empty error span rather than nothing at
   all. So the slot stays hidden until a real badge lands in it, and CARFAX
   takes the whole row when none does. */
.jsj-srp-card__partner--cargurus{display:none}
.jsj-srp-card__partner--cargurus:has(.cg-dealrating-badge){display:flex}
/* CarGurus answer "no information" for roughly 40% of these VINs, so the
   CARFAX tile is often alone on its row and takes the whole width. Full width
   on purpose: every other block in this column — the Finance Application tile
   above, the highlights panel below — runs edge to edge, and a narrower tile
   between them reads as misplaced even though it is centred. Row height is
   held steady by .jsj-srp-card__partner's min-height, so cards still line up
   with each other whether or not CarGurus answered. */
.jsj-srp-card__tiles:not(:has(.cg-dealrating-badge)) .jsj-srp-card__partner--carfax{grid-column:1/-1}
/* Slim promo strip: fixed height + cover, exactly as approved — the source
   banners are 16:9/3:1 art, so without the crop they tower over the page. */
/* Stretched link for the homepage Featured Inventory cards. Nothing inside
   that Elementor loop card links anywhere — image, title and the DETAILS
   button are all unlinked — so [jsj_vehicle_card_link] drops an empty anchor
   in and this makes it cover the card.
   z-index 6 puts it above the badge (5) and the artwork, so a click anywhere
   on the card navigates. The card container is already position:relative from
   the featured-inventory rules further down, which is what it is measured
   against. The focus ring is not decoration: an empty anchor is invisible to a
   keyboard user without it. */
.jsj-vehicle-card__link{position:absolute;inset:0;z-index:6;border-radius:inherit;text-decoration:none}
.jsj-vehicle-card__link:focus-visible{outline:2px solid #5b93f0;outline-offset:-3px}
.jsj-srp__banner{max-width:var(--jsj-shell);margin:18px auto 0;border-radius:14px;overflow:hidden;border:1px solid rgba(255,255,255,.07);background:#000;line-height:0}
/* Approved comp is a 1268x178 strip — hold that 7.12:1 proportion at whatever
   width the shell resolves to instead of copying the raw pixel height. */
/* Aspect ratio is the artwork's own (3120x440), and there is deliberately NO
   min-height: a floor taller than width/7.09 makes the box squatter than the
   banner, and object-fit:cover then slices the sides off — 58% of the image
   was being cut at 375px. `contain` means a future asset at a different ratio
   letterboxes instead of losing its wording, which is the safer failure for
   art that is mostly text. */
.jsj-srp__banner img{display:block;width:100%;height:auto;aspect-ratio:3120/440;object-fit:contain;object-position:center;background:#000}
/* The banner strip is Elementor Pro's Media Carousel, NOT the free Image
   Carousel it started as. The swap was forced by a requirement, not a
   preference: Image Carousel has ONE link for the whole set (link_to + link),
   so both banners had to point at the same page. Media Carousel is the only
   stock widget with a per-slide Link control, which is what "each banner to a
   different URL" needs.
   The cost is that it paints each slide as a background-image on a div instead
   of an <img>, so the three lines below have to reproduce for a div what the
   img rule above does: the artwork's own 3120x440, whole, never cropped. Its
   defaults are the opposite of what this slot wants — a fixed 230px tall box
   (.elementor-skin-carousel .elementor-main-swiper) and background-size:cover,
   which together would crop the sides off text-heavy art. */
.jsj-srp__banner .elementor-main-swiper{height:auto!important}
.jsj-srp__banner .elementor-carousel-image{aspect-ratio:3120/440;height:auto;background-size:contain;background-position:center;background-color:#000}
/* The slide's <a> is inline by default, so the image div inside it would sit on
   a text baseline and leave a gap under the strip. */
.jsj-srp__banner .swiper-slide>a{display:block}
/* The banner slot embeds an Elementor template, so the theme's boxed content
   width and the carousel's reserved dot strip have to be neutralised here. */
.jsj-srp__banner .elementor-container,.jsj-srp__banner .e-con-inner{max-width:none!important;width:100%!important}
.jsj-srp__banner .elementor-widget-wrap,.jsj-srp__banner .elementor-image-carousel-wrapper,.jsj-srp__banner .elementor-image-carousel,.jsj-srp__banner .swiper{padding:0!important;margin:0!important}
.jsj-srp__banner .elementor-widget-image,.jsj-srp__banner figure,.jsj-srp__banner .elementor-image,.jsj-srp__banner .swiper-slide-inner{margin:0;line-height:0}
/* Elementor narrows the carousel by 60px to park its prev/next arrows outside
   the slides. Those arrows render at zero width here, so the gap was pure
   loss — 265px of a 325px slot on a phone. */
.jsj-srp__banner .elementor-image-carousel-wrapper,.jsj-srp__banner .elementor-swiper,.jsj-srp__banner .swiper{width:100%!important}
/* Phones: run the banner edge to edge and floor it at 55px. At 7.09:1 the only
   way to make the artwork itself bigger without cropping is to give it more
   width, and cancelling the 14px page gutter buys ~10%. 390px (iPhone 12-16)
   lands at exactly 55px of artwork; narrower phones get the 55px box with a
   ~1px letterbox rather than a slice off the sides. */
/* Phones: full width, whole image, never cropped. The height is whatever the
   3120x440 artwork works out to at the screen's width (~55px at 390px) — with
   `contain` there is no height to set, because forcing a taller box only adds
   letterbox bars and leaves the artwork exactly as small. A squarer mobile
   creative is the only way to make the wording bigger.
   calc(50% - 50vw) rather than a fixed negative margin: the inset is the
   page's own 14px PLUS the ~10px the theme leaves on .site-main, and this
   reaches the viewport edge without having to know the total. */
@media (max-width:900px){
  .jsj-srp__banner{
    width:auto;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
    border-radius:0;border-left:0;border-right:0;
  }
}
/* Hidden on phones, per the user's own fallback. A taller container cannot
   rescue this: with `contain` the image is capped by the WIDTH available, so a
   65px or 100px box would leave the artwork at the same ~55px and just add
   letterbox bars. 7.09:1 art needs ~780px of width to reach 110px tall, which
   no phone has. It stays on tablet and desktop, where it renders 137-191px and
   reads properly. Raise this breakpoint to bring it back on small screens. */
@media (max-width:767px){
  .jsj-srp__banner{display:none}
}
.jsj-srp__empty p{margin:0 0 16px}
.jsj-srp__empty-reset{display:inline-flex;align-items:center;justify-content:center;border-radius:9px;background:var(--jsj-blue);color:#fff;padding:10px 20px;font-family:var(--jsj-ui);font-size:13px;font-weight:800;text-decoration:none}
.jsj-srp__empty-reset:hover{filter:brightness(1.1);color:#fff}
.jsj-srp__pagination{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;margin-top:28px}
.jsj-srp__pagination .jsj-srp__pager-link{height:36px;min-width:38px;padding:0 13px;font-family:var(--jsj-ui);font-size:13px}
/* No backdrop-filter, deliberately. At 94% opacity there is essentially nothing
   showing through to blur, so it bought no visible effect — while a blurred
   backdrop on a fixed element is a per-frame composite of everything behind it
   for the whole width of the screen, on the element most likely to be on screen
   during a scroll. iOS in particular has a long history of mispainting exactly
   this combination; it is why the mobile menu overlay lost its blur too. */
.jsj-srp .jsj-srp-compare-bar{position:fixed;left:0;right:0;bottom:0;z-index:90;background:rgba(9,11,15,.97);border-top:1px solid rgba(91,147,240,.3);box-shadow:0 -12px 30px -16px rgba(0,0,0,.9)}
.jsj-srp .jsj-srp-compare-bar[hidden]{display:none}
/* Centred rather than spread: the label, the thumbnails and the two buttons
   read as one group, and on a wide screen the 400-odd pixels that used to sit
   between the thumbnails and Compare Now go to the outside instead.

   The right padding is the Capital One chat launcher's gutter. The launcher is
   nailed to the floor of the window and never moves, so on a desktop, where it
   shares the bar's own height, the bar keeps its buttons out of that corner
   instead. On a phone the launcher is below the filter bar, well clear of this
   panel, so the gutter collapses to a plain 16px. */
.jsj-srp-compare-bar__inner{display:flex;align-items:center;justify-content:center;gap:16px;max-width:var(--jsj-shell);margin:0 auto;padding:11px var(--jsj-chat-gutter) 11px 16px}
.jsj-srp-compare-bar__label{color:#e6e9ee;font-family:var(--jsj-display);font-size:18px;font-weight:800;text-transform:uppercase;white-space:nowrap}
.jsj-srp-compare-bar__label strong{color:var(--jsj-blue-light)}
.jsj-srp-compare-bar__label em{color:var(--jsj-muted-2);font-style:normal}
/* Shrink-wrapped, so the centring above has something to centre — flex:1 made
   this fill every spare pixel and pinned the buttons to the far edge. The
   padding is not decoration: each thumbnail's remove button hangs 6px past its
   right edge and 6px above its top, which in a shrink-wrapped scroller is real
   overflow — enough for a permanent scrollbar under the row on any platform
   that draws them, and enough to clip the top of the circles. */
.jsj-srp-compare-bar__items{display:flex;gap:10px;flex:0 1 auto;min-width:0;overflow-x:auto;padding:8px 8px 2px 0}
.jsj-srp-compare-bar__item{position:relative;flex:0 0 auto;width:112px}
.jsj-srp-compare-bar__item img{width:112px;height:56px;object-fit:cover;border-radius:8px;border:1px solid rgba(255,255,255,.12);background:#0a0c10;display:block}
.jsj-srp-compare-bar__item.is-noimage img{height:56px;object-fit:none}
.jsj-srp .jsj-srp-compare-bar__remove{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;border:1px solid rgba(255,255,255,.2);background:#1a1d24;color:#fff;cursor:pointer;font-size:11px;line-height:1;padding:0}
.jsj-srp .jsj-srp-compare-bar__remove:hover{background:#2e3440}
.jsj-srp-compare-bar__item-title{display:block;margin-top:3px;color:#9ca3ad;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jsj-srp-compare-bar__actions{display:flex;gap:9px;white-space:nowrap}
.jsj-srp .jsj-srp-compare-bar__clear{padding:10px 16px;border-radius:9px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:#c9cfd8;cursor:pointer;font-family:var(--jsj-ui);font-weight:700;font-size:13px}
.jsj-srp .jsj-srp-compare-bar__clear:hover{border-color:rgba(255,255,255,.3);color:#fff}
.jsj-srp .jsj-srp-compare-bar__go{padding:10px 22px;border-radius:9px;border:0;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;cursor:pointer;font-family:var(--jsj-ui);font-weight:900;font-size:13.5px;box-shadow:0 10px 22px -12px rgba(46,107,230,.8)}
.jsj-srp .jsj-srp-compare-bar__go:hover{filter:brightness(1.08)}
.jsj-srp-compare-bar.is-limit .jsj-srp-compare-bar__label{animation:jsj-compare-shake .5s ease}
@keyframes jsj-compare-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}50%{transform:translateX(4px)}75%{transform:translateX(-2px)}}
body.jsj-srp-has-compare .jsj-srp{padding-bottom:calc(150px + var(--jsj-mobile-bar-h))}

/* ---- mobile filter drawer -------------------------------------------------
   Off-canvas below --jsj-drawer-bp; above it the wrapper dissolves with
   display:contents so .jsj-srp__sidebar stays a direct child of the
   .jsj-srp__body grid and the desktop layout is byte-for-byte unchanged.
   --jsj-mobile-bar-h is 0 on desktop, so every calc() that reserves room for
   the pinned bar collapses to its old value there. ------------------------- */
/* Capital One's chat launcher is 328px wide and pinned to the bottom right,
   and it NEVER MOVES — lifting it clear of the bar was tried on 2026-08-19 and
   the client rejected it on sight, because a launcher that jumps up the page
   the moment you tick a vehicle reads as broken. It is welcome to sit in front
   of the bar; what it must not sit in front of is Clear and Compare Now. So
   the bar yields instead, and the launcher overlaps nothing but empty panel.

   --jsj-chat-w is that footprint: the launcher's own 328px, plus the 5px it is
   inset from the right edge on a desktop, plus 12px of daylight. The gutter is
   TWICE it, because centring hands half of
   any padding straight back to the other side. It is clamped at both ends: at
   1493px and up it collapses to a plain 16px and the group sits dead centre,
   and it never grows past the point where the group would have to squeeze — so
   all four thumbnails stay visible and the strip never sprouts a scrollbar it
   did not need. The 24px in that cap is 16px of left padding plus 8px of
   slack: at exactly the group's own width the strip overflows by a rounding
   error and a real scrollbar appears. Between 1101px and about 1188px the
   launcher and the group genuinely cannot both fit, and there the launcher
   wins; the client has said an overlap is acceptable, a moving launcher is
   not.

   On a phone there is no gutter, because there the launcher is not beside the
   bar at all — it is under everything. --jsj-chat-h is its height there. */
/* All of the above is conditional on there being a launcher, and since
   2026-08-21 there usually is not — the dealer removed Capital One's chat.
   Everything the launcher cost is expressed as these two variables, so the
   whole reservation collapses by leaving them at their zero defaults, and
   comes back the moment class-capital-one.php puts `jsj-c1-chat` on the body
   again. Nothing here needs editing to switch Chat on or off.

   The body class is a site setting, not page state: it is the same on every
   page and never changes while someone is reading. That distinction is the
   whole point — a gutter that appears when you tick a vehicle is exactly what
   the client rejected. */
.jsj-srp{--jsj-mobile-bar-h:0px;--jsj-chat-h:0px;--jsj-chat-w:345px;--jsj-compare-group:813px;--jsj-chat-gutter:16px}
body.jsj-c1-chat .jsj-srp{--jsj-chat-gutter:clamp(16px,calc(2 * var(--jsj-chat-w) + var(--jsj-compare-group) + 16px - 100%),calc(100% - var(--jsj-compare-group) - 24px))}
.jsj-srp__drawer{display:contents}
.jsj-srp__drawer-head,.jsj-srp__drawer-foot,.jsj-srp__scrim,.jsj-srp__mobile-bar{display:none}

@media (max-width:1100px){
  /* Down here the bottom of the window is a stack, read from the floor up:
     the Capital One launcher, then the filter bar, then the compare bar. The
     launcher is 40px tall and pinned to the floor by class-capital-one.php, so
     everything else is measured off it — a 328px-wide launcher on a 375px
     screen leaves no room to stand beside it, which is why the desktop gutter
     is switched off and the furniture stacks instead.

     --jsj-chat-h is 50px: the launcher's own 40px height plus the 10px it is
     held off the floor. It is the room to leave for it, not its height. Track
     it against the offset in class-capital-one.php — change one, change both.

     --jsj-mobile-bar-h stays what it has always been: the total height of the
     fixed furniture, which every reserve and every `bottom` here is a calc()
     against. It just has one more storey in it now. */
  .jsj-srp{--jsj-chat-gutter:16px}
  body.jsj-c1-chat .jsj-srp{--jsj-chat-h:50px}
  /* Our own launcher is 128px, not 328 — it fits beside Filters and Sort, so it
     takes width on the right rather than a row of its own underneath. */
  .jsj-srp{--jsj-textus-w:14px}
  body.jsj-textus-corner .jsj-srp{--jsj-textus-w:148px}
  .jsj-srp{--jsj-mobile-bar-h:calc(58px + var(--jsj-chat-h) + env(safe-area-inset-bottom,0px))}

  .jsj-srp{padding-bottom:calc(40px + var(--jsj-mobile-bar-h))}

  /* The drawer has to live inside the form or its checkboxes never submit,
     but .jsj-srp__form is a z-index:1 stacking context and the compare bar is
     a sibling at 90 — so the whole form is lifted while the drawer is open.
     Still under the alert modal's 120, which is also a sibling. */
  body.jsj-srp-drawer-open .jsj-srp__form{z-index:100}

  .jsj-srp__drawer{position:fixed;top:0;bottom:0;left:0;z-index:110;display:flex;flex-direction:column;width:min(88vw,380px);border-right:1px solid var(--jsj-hairline-3);background:#0a0c10;box-shadow:0 0 60px -10px rgba(0,0,0,.9);transform:translateX(-100%);visibility:hidden;transition:transform .26s cubic-bezier(.22,.61,.36,1),visibility .26s}
  body.jsj-srp-drawer-open .jsj-srp__drawer{transform:translateX(0);visibility:visible}
  body.jsj-srp-drawer-open{overflow:hidden}

  .jsj-srp__drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto;padding:15px 16px;border-bottom:1px solid var(--jsj-hairline-2)}
  .jsj-srp__drawer-head span{font-family:var(--jsj-display);font-size:20px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
  .jsj-srp .jsj-srp__drawer-close{display:flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:1px solid var(--jsj-hairline-3);border-radius:50%;background:transparent;color:#e6e9ee;font-size:21px;line-height:1;cursor:pointer}

  /* The drawer owns the scrolling; the sidebar goes back to plain flow.
     align-self must be reset too: the desktop sticky rule sets it to `start`,
     and in this column flex container that is the CROSS axis, so the sidebar
     shrink-wrapped to 191px inside a 330px drawer. */
  .jsj-srp__sidebar{position:static;top:auto;align-self:stretch;flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;border:0;border-radius:0;background:none}
  .jsj-srp__sidebar-head{display:none}

  .jsj-srp__drawer-foot{display:flex;align-items:center;gap:10px;flex:0 0 auto;padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--jsj-hairline-2);background:rgba(255,255,255,.03)}
  .jsj-srp .jsj-srp__drawer-reset{flex:0 0 auto;padding:12px 16px;border:1px solid var(--jsj-hairline-3);border-radius:10px;background:transparent;color:var(--jsj-muted);font-family:var(--jsj-ui);font-size:13px;font-weight:700;text-decoration:none}
  .jsj-srp .jsj-srp__drawer-apply{flex:1 1 auto;min-height:44px;padding:12px 18px;border:0;border-radius:10px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;font-family:var(--jsj-ui);font-size:14px;font-weight:900;cursor:pointer}
  .jsj-srp .jsj-srp__drawer-apply.is-busy{opacity:.6}

  .jsj-srp__scrim{display:block;position:fixed;inset:0;z-index:105;background:rgba(0,0,0,.62);opacity:0;visibility:hidden;transition:opacity .26s ease,visibility .26s}
  body.jsj-srp-drawer-open .jsj-srp__scrim{opacity:1;visibility:visible}

  /* The launcher owns the floor, so Filters and Sort sit above it — but this
     bar still reaches the floor itself. Lifting the whole bar instead left a
     40px letterbox of cards scrolling past underneath it, which reads as a
     rendering fault; growing the padding puts the launcher on the bar's own
     panel with the controls clear above. Same total height either way, which
     is what --jsj-mobile-bar-h counts. */
  /* Filters, Sort and Text Us on ONE row.
     The bar reserves its own height plus the safe-area inset below it, and the
     Text Us launcher floats at bottom:10px+inset — so on an iPhone the two sat
     about 40px apart with a band of empty black between them, which is what
     the dealer saw as "a gap". Reserving room on the RIGHT instead of below
     puts the launcher on the same line as the controls, and the bar's own
     bottom padding drops back to the inset it actually needs.

     --jsj-textus-w is the launcher's footprint at this size: roughly 128px of
     pill plus 10px of right inset plus 10px of daylight. Sort stops there
     rather than running underneath it. */
  .jsj-srp__mobile-bar{display:flex;align-items:center;gap:10px;position:fixed;left:0;right:0;bottom:0;z-index:95;padding:9px var(--jsj-textus-w) calc(9px + var(--jsj-chat-h) + env(safe-area-inset-bottom,0px)) 14px;border-top:1px solid var(--jsj-hairline-3);background:rgba(9,11,15,.97)}
  .jsj-srp .jsj-srp__mobile-filters{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 15px;border:1px solid var(--jsj-hairline-3);border-radius:10px;background:rgba(255,255,255,.05);color:#e6e9ee;font-family:var(--jsj-ui);font-size:13.5px;font-weight:800;cursor:pointer}
  .jsj-srp__mobile-badge{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:var(--jsj-copper);color:#0a0c10;font-size:11px;font-weight:900}
  .jsj-srp__mobile-sort{flex:1 1 auto;min-width:0}
  .jsj-srp .jsj-srp__mobile-sort select{width:100%;min-width:0;height:40px;line-height:40px}

  /* The compare bar stacks directly on top of the filter bar rather than
     under it, so neither one covers the other while vehicles are selected. */
  .jsj-srp .jsj-srp-compare-bar{bottom:var(--jsj-mobile-bar-h)}

  /* Sort lives in the pinned bar down here, so the toolbar's copy would be a
     second identical control on the same screen. Desktop keeps its own. */
  .jsj-srp__toolbar .jsj-srp__sort{display:none}
}

@media (max-width:1100px) and (prefers-reduced-motion:reduce){
  .jsj-srp__drawer,.jsj-srp__scrim{transition:none}
}
.jsj-srp [data-jsj-srp-chips]:empty,.jsj-srp [data-jsj-srp-pagination]:empty{display:none}
.jsj-srp [data-jsj-srp-results],.jsj-srp [data-jsj-srp-sidebar],.jsj-srp [data-jsj-srp-toolbar],.jsj-srp [data-jsj-srp-pagination],.jsj-srp [data-jsj-srp-chips]{transition:opacity .22s ease}
.jsj-srp.is-updating [data-jsj-srp-results],.jsj-srp.is-updating [data-jsj-srp-sidebar],.jsj-srp.is-updating [data-jsj-srp-toolbar],.jsj-srp.is-updating [data-jsj-srp-pagination],.jsj-srp.is-updating [data-jsj-srp-chips]{opacity:.4;pointer-events:none}
body.jsj-modal-open{overflow:hidden}
.jsj-srp .jsj-alert-modal{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:18px}
.jsj-srp .jsj-alert-modal[hidden]{display:none}
.jsj-alert-modal__backdrop{position:absolute;inset:0;background:rgba(4,5,8,.72);backdrop-filter:blur(6px)}
/* max-height:100%, not 100vh — the container is fixed and inset-0, so this is
   the truly visible height. See the long note in vdp.css: 100vh on a phone
   is the chrome-collapsed viewport, which centres a too-tall dialog half
   off the top of the screen until you scroll. */
.jsj-alert-modal__panel{position:relative;z-index:1;width:min(440px,100%);max-height:100%;overflow-y:auto;border:1px solid rgba(255,255,255,.12);border-radius:16px;background:#0d0f14;box-shadow:0 30px 90px -20px rgba(0,0,0,.9);padding:24px 22px;animation:jsj-fade-up .22s ease}
@keyframes jsj-fade-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.jsj-alert-modal__head{display:flex;align-items:center;gap:9px;color:#f4f6f9;font-family:var(--jsj-display);font-size:19px;font-weight:800;text-transform:uppercase;letter-spacing:.5px}
.jsj-alert-modal__bell{color:var(--jsj-copper-light);flex:none}
.jsj-alert-modal__sub{margin:10px 0 16px;color:var(--jsj-muted);font-size:13.5px;line-height:1.55}
.jsj-alert-modal__sub strong{color:var(--jsj-blue-link);font-weight:700}
.jsj-alert-modal__form{display:flex;flex-direction:column;gap:11px}
/* First and last name side by side, so splitting the field for VinSolutions
   costs the customer no extra vertical space in a modal that already has to
   fit above the fold on a phone. Collapses to stacked below 380px, where two
   inputs across leave neither wide enough to read what you typed. */
.jsj-alert-modal__row{display:grid;grid-template-columns:1fr 1fr;gap:11px}
@media (max-width:380px){.jsj-alert-modal__row{grid-template-columns:1fr}}
.jsj-alert-modal__form input,.jsj-alert-modal__form textarea{width:100%;border:1px solid rgba(255,255,255,.13);border-radius:10px;background:rgba(255,255,255,.045);color:#f4f6f9;padding:12px 14px;font-family:var(--jsj-body);font-size:13.5px;outline:none;resize:vertical}
.jsj-alert-modal__form input::placeholder,.jsj-alert-modal__form textarea::placeholder{color:#7d8794}
.jsj-alert-modal__form input:focus,.jsj-alert-modal__form textarea:focus{border-color:rgba(91,147,240,.65);box-shadow:0 0 0 3px rgba(46,107,230,.14)}
.jsj-alert-modal__stock{color:#9ba3ac;background:rgba(0,0,0,.35)}
.jsj-alert-modal .jsj-alert-modal__stock:focus{border-color:rgba(255,255,255,.13);box-shadow:none}
.jsj-alert-modal__hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
.jsj-alert-modal__error{border:1px solid rgba(154,36,36,.55);border-radius:9px;background:rgba(154,36,36,.14);color:#f2b8b8;padding:10px 12px;font-size:12.5px}
.jsj-alert-modal__success{border:1px solid rgba(46,150,90,.5);border-radius:9px;background:rgba(46,150,90,.13);color:#7fd3a2;padding:10px 12px;font-size:13px;font-weight:600}
.jsj-alert-modal.is-success .jsj-alert-modal__actions,.jsj-alert-modal.is-success input:not(.jsj-alert-modal__stock),.jsj-alert-modal.is-success textarea{display:none}
.jsj-alert-modal__actions{display:grid;grid-template-columns:1fr 1.3fr;gap:10px;margin-top:4px}
.jsj-alert-modal .jsj-alert-modal__cancel{border:1px solid rgba(255,255,255,.15);border-radius:10px;background:rgba(255,255,255,.04);color:#c9cfd8;padding:12px;font-family:var(--jsj-ui);font-size:13.5px;font-weight:700;cursor:pointer}
.jsj-alert-modal .jsj-alert-modal__cancel:hover{border-color:rgba(255,255,255,.3);color:#fff}
.jsj-alert-modal .jsj-alert-modal__submit{border:0;border-radius:10px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;padding:12px;font-family:var(--jsj-ui);font-size:13.5px;font-weight:800;cursor:pointer;box-shadow:0 10px 22px -12px rgba(46,107,230,.8)}
.jsj-alert-modal .jsj-alert-modal__submit:hover{filter:brightness(1.08)}
.jsj-alert-modal .jsj-alert-modal__submit:disabled{opacity:.6;cursor:default}
.jsj-srp--bare{background:transparent;padding:0;overflow:visible}
.jsj-srp--bare .jsj-aurora{display:none}
.jsj-trade-holder,.jsj-trade-holder.e-con{padding:0;min-height:0;margin:0}
body.jsj-srp-page,html body.jsj-srp-page{background:#07080a}
.jsj-home-card-link.jsj-home-card-link{position:absolute!important;inset:0!important;display:block!important;z-index:5;border-radius:inherit;margin:0!important;padding:0!important}
.jsj-review-star-pulse.jsj-review-star-pulse{display:inline-block!important;color:#f5b954!important;-webkit-text-fill-color:#f5b954!important;background:none!important;text-shadow:0 0 14px rgba(255,187,84,.85),0 0 34px rgba(255,166,48,.5)!important;animation:jsj-star-glow 2.4s ease-in-out infinite!important}
@keyframes jsj-star-glow{0%,100%{transform:scale(1);text-shadow:0 0 12px rgba(255,187,84,.7),0 0 28px rgba(255,166,48,.4)}50%{transform:scale(1.12);text-shadow:0 0 20px rgba(255,197,104,1),0 0 44px rgba(255,166,48,.65)}}
/* Heading and the live-availability pill share one row, so the pill lands
   directly above the Search button at the end of the field row. */
.jsj-finder__head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 18px;margin:0 0 18px}
.jsj-finder__heading{display:flex;align-items:center;gap:12px;min-width:0}
.jsj-finder__rule{flex:none;width:30px;height:1px;background:linear-gradient(90deg,#c8884a,rgba(0,0,0,0))}
.jsj-finder__heading h2{margin:0;color:#fff;font-family:var(--jsj-display);font-size:24px;line-height:1.15;font-weight:700;text-transform:uppercase;letter-spacing:.6px}
/* The Elementor heading + rule this replaces. */
.elementor-element-f9d7254{display:none!important}
/* Reviews: the Google widget renders its own eyebrow, rating line AND lede,
   and offers no option to switch them off, so all three matching Elementor
   headings above it are hidden to stop the duplication — 7dc6034 is the
   "Real reviews from real customers…" lede, which the widget repeats verbatim.
   Deleting this one rule brings all three back; the content is untouched and
   still editable in Elementor. */
.elementor [data-id="6872ec0"],.elementor [data-id="de2f2ed"],.elementor [data-id="7dc6034"]{display:none!important}
/* The eyebrow also carries a display:inline-flex !important rule from the
   page's own custom CSS, so it needs a heavier selector to stay hidden. */
.elementor .elementor-element.elementor-element-6872ec0.jsj-reviews-eyebrow[data-id="6872ec0"]{display:none!important}
.jsj-finder__count{display:inline-flex;align-items:center;gap:9px;margin:0;border:1px solid rgba(255,255,255,.14);border-radius:999px;background:rgba(10,12,16,.62);padding:7px 15px;color:#9ba3ac;font-size:13.5px;white-space:nowrap}
.jsj-finder__count::before{content:"";width:8px;height:8px;border-radius:50%;background:#3ddc84;box-shadow:0 0 8px rgba(61,220,132,.9);animation:jsj-dot-pulse 2.4s ease-in-out infinite}
@keyframes jsj-dot-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.5}}
/* Hero eyebrow already draws a green dot; it just never moved. */
.jsj-hero-status .elementor-heading-title::before{animation:jsj-dot-pulse 2.4s ease-in-out infinite!important}
.jsj-finder__count strong{color:var(--jsj-blue-light)}
.jsj-finder__form{display:grid;grid-template-columns:repeat(5,minmax(0,1fr)) auto;gap:10px;align-items:end}
.jsj-finder__field{display:flex;flex-direction:column;gap:6px;min-width:0}
.jsj-finder__field span{color:var(--jsj-muted-2);font-family:var(--jsj-ui);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.jsj-finder__field select{width:100%;height:44px;border:1px solid rgba(255,255,255,.14);border-radius:9px;background:#0b0e13;color:#f4f6f9;padding:0 34px 0 12px;font-family:var(--jsj-body);font-size:13.5px;outline:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%238c95a0' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
.jsj-finder__field select:focus{border-color:rgba(91,147,240,.65);box-shadow:0 0 0 3px rgba(46,107,230,.14)}
/* .jsj-srp .x, not a bare class: the pink-button guard near the top of this
   sheet sets `.jsj-srp button{border-radius:0}` at 0-2-0, which outranks a
   0-1-0 rule here — the Search button rendered square while every select
   beside it was 9px. */
.jsj-srp .jsj-finder__submit{height:44px;border:0;border-radius:9px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;padding:0 26px;font-family:var(--jsj-ui);font-size:14px;font-weight:900;cursor:pointer;box-shadow:0 10px 24px -10px rgba(46,107,230,.7)}
.jsj-srp .jsj-finder__submit:hover{filter:brightness(1.08)}
@media (max-width:1000px){.jsj-finder__form{grid-template-columns:repeat(2,minmax(0,1fr))}.jsj-finder__submit{grid-column:1/-1}}
@media (max-width:520px){.jsj-finder__form{grid-template-columns:1fr}.jsj-finder__head{gap:10px}.jsj-finder__heading h2{font-size:21px}.jsj-finder__count{font-size:12.5px;padding:6px 13px}}

/* ---- Homepage responsive corrections -------------------------------------
   Section gutters had drifted apart at small widths (18px in the hero, 30px on
   the body-type grid, and a doubled 30+30px on Featured Inventory, which left
   those cards only 257px wide). Everything below lands content on one 20px
   gutter and stops the nested paddings from stacking. */
@media (max-width:767px){
  .elementor-element-f3233aa,.elementor-element-0ec69e1{padding-left:20px!important;padding-right:20px!important}
  .elementor-element-79b3c4f{padding-left:0!important;padding-right:0!important}
  .elementor-element-9e1ac5b,.elementor-element-8078388{padding-left:20px!important;padding-right:20px!important}
  /* Beats the 30px !important rule the featured-inventory styles already set. */
  .jsj-featured-inventory .jsj-featured-inner.elementor-element-8078388 > .e-con-inner{padding-left:0!important;padding-right:0!important}
  .elementor-element-6aa949e{padding-left:14px!important;padding-right:14px!important}
  .jsj-srp--bare{padding-left:0!important;padding-right:0!important}
  .jsj-featured-loop-grid .elementor-loop-container{margin-left:0!important;margin-right:0!important}
}
/* Shop by Body Type carries a fixed grid height per breakpoint (434/678/1072px).
   Once the cards stack, five rows need more than the mobile value, so the last
   card (Hybrid & Electric) overflowed into the section's overflow:hidden and got
   cut in half. Let the grid size to its rows below desktop.
   Atomic elements are styled via generated e-<id>-<hash> classes, hence [data-id]. */
@media (max-width:1024px){
  .elementor [data-id="19d21af"]{height:auto!important}
}
@media (min-width:768px) and (max-width:1024px){
  .elementor-element-f3233aa,.elementor-element-0ec69e1,.elementor-element-9e1ac5b,.elementor-element-8078388{padding-left:28px!important;padding-right:28px!important}
  /* Beats the 30px !important rule the featured-inventory styles already set. */
  .jsj-featured-inventory .jsj-featured-inner.elementor-element-8078388 > .e-con-inner{padding-left:0!important;padding-right:0!important}
  .jsj-srp--bare{padding-left:0!important;padding-right:0!important}
}
.jsj-srp--bare .jsj-alert-modal{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:18px}
.jsj-srp--bare .jsj-alert-modal[hidden]{display:none}
.jsj-trade-modal__panel{width:min(600px,100%)}
.jsj-trade-modal__icon{color:var(--jsj-copper-light);font-size:19px;line-height:1}
.jsj-trade-modal__section{margin-top:4px;color:var(--jsj-copper-light);font-family:var(--jsj-ui);font-size:10.5px;font-weight:900;text-transform:uppercase;letter-spacing:.12em}
.jsj-trade-modal__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.jsj-trade-modal__grid input{width:100%}
.jsj-trade-modal__options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px 12px}
.jsj-trade-modal__option{display:flex;align-items:center;gap:8px;color:#c9cfd8;font-size:13px;cursor:pointer}
.jsj-trade-modal__option input{width:15px;height:15px;accent-color:var(--jsj-blue);cursor:pointer;flex:none}
.jsj-trade-modal.is-success .jsj-trade-modal__section,.jsj-trade-modal.is-success .jsj-trade-modal__grid,.jsj-trade-modal.is-success .jsj-trade-modal__options{display:none}
@media (max-width:520px){.jsj-trade-modal__grid,.jsj-trade-modal__options{grid-template-columns:1fr}}
.jsj-compare{padding:0 26px 80px;min-height:60vh}
.jsj-compare__head{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:16px;max-width:var(--jsj-shell);margin:0 auto;padding:30px 0 20px}
.jsj-compare__head h1{margin:0;color:#d5dae0;font-family:var(--jsj-display);font-size:40px;line-height:.95;font-weight:800;text-transform:uppercase;letter-spacing:.8px}
.jsj-compare__back{display:inline-flex;align-items:center;gap:6px;padding:9px 15px;border-radius:8px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:#dbe0e7;text-decoration:none;font-family:var(--jsj-ui);font-weight:700;font-size:13px;white-space:nowrap}
.jsj-compare__back:hover{border-color:rgba(91,147,240,.5);color:#fff}
.jsj-compare__empty{max-width:560px;margin:0 auto;padding:80px 0 60px;text-align:center}
.jsj-compare__empty-title{color:#f4f6f9;font-family:var(--jsj-display);font-size:26px;font-weight:800;text-transform:uppercase;margin-bottom:10px}
.jsj-compare__empty p{color:var(--jsj-muted);font-size:14px;line-height:1.6;margin:0 0 22px}
.jsj-compare__browse{display:inline-flex;padding:12px 22px;border-radius:9px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;text-decoration:none;font-family:var(--jsj-ui);font-weight:800;font-size:14px}
.jsj-compare__browse:hover{filter:brightness(1.08);color:#fff}
.jsj-compare__scroll{max-width:var(--jsj-shell);margin:0 auto;overflow-x:auto;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(7,8,10,.6);backdrop-filter:blur(8px)}
.jsj-compare__row{display:grid;grid-template-columns:var(--jsj-compare-cols)}
.jsj-compare__row:nth-child(even) .jsj-compare__cell{background:rgba(255,255,255,.015)}
.jsj-compare__row:nth-child(even) .jsj-compare__label{background:#0a0c10}
.jsj-compare__label{position:sticky;left:0;z-index:2;display:flex;align-items:center;background:#07080a;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.06);border-right:1px solid rgba(255,255,255,.08)}
.jsj-compare__label span{color:#b8bfc9;font-size:12.5px;font-weight:600}
.jsj-compare__label--head{z-index:3;align-items:flex-end;background:#0d0f13;border-bottom:2px solid rgba(255,255,255,.1)}
.jsj-compare__label--head span{color:#5e6670;font-family:var(--jsj-ui);font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.jsj-compare__cell{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.06);border-left:1px solid rgba(255,255,255,.06)}
.jsj-compare__cell span{color:#dbe0e7;font-family:var(--jsj-ui);font-size:13px;font-weight:600}
.jsj-compare__col{display:flex;flex-direction:column;gap:10px;padding:16px;border-bottom:2px solid rgba(255,255,255,.1);border-left:1px solid rgba(255,255,255,.06)}
.jsj-compare__col-media{position:relative}
.jsj-compare__col-media img{width:100%;height:120px;object-fit:cover;border-radius:9px;border:1px solid rgba(255,255,255,.1);display:block}
.jsj-compare__col-noimage{display:grid;place-items:center;width:100%;height:120px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:linear-gradient(135deg,#151922,#080a0d);color:#7c848e;font-family:var(--jsj-ui);font-size:11px;text-transform:uppercase;letter-spacing:1px}
.jsj-compare__col-remove{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(8,10,14,.75);color:#fff;text-decoration:none;font-size:12px;line-height:1}
.jsj-compare__col-remove:hover{background:rgba(154,36,36,.85);color:#fff}
.jsj-compare__col-title{color:#f4f6f9;text-decoration:none;font-family:var(--jsj-display);font-size:17px;line-height:1.12;font-weight:800;text-transform:uppercase}
.jsj-compare__col-title:hover{color:var(--jsj-blue-pale)}
.jsj-compare__col-trim{color:var(--jsj-blue-link);font-family:var(--jsj-ui);font-size:12px;font-weight:600}
.jsj-compare__col-price{color:var(--jsj-blue-light);font-family:var(--jsj-display);font-size:22px;font-weight:800}
.jsj-compare__col-price--call{color:var(--jsj-text-2);font-size:17px}
.jsj-compare__col-cta{display:flex;align-items:center;justify-content:center;margin-top:auto;min-height:36px;border-radius:8px;background:linear-gradient(135deg,var(--jsj-blue),var(--jsj-blue-deep));color:#fff;text-decoration:none;font-family:var(--jsj-ui);font-weight:800;font-size:12.5px}
.jsj-compare__col-cta:hover{filter:brightness(1.08);color:#fff}
@media (prefers-reduced-motion:reduce){.jsj-aurora__band{animation:none}.jsj-aurora__band--blue{opacity:.55}.jsj-aurora__band--copper{opacity:.4}.jsj-aurora__band--silver{opacity:.3}.jsj-srp-card__marquee-text,.jsj-srp-card__savings,.jsj-srp-card__alert-bell{animation:none}.jsj-srp-card__marquee-text{padding-left:0}.jsj-srp-compare-bar.is-limit .jsj-srp-compare-bar__label{animation:none}.jsj-alert-modal__panel{animation:none}}
/* The sidebar moves into the drawer here, so the body grid is a single
   column of results. Sidebar positioning is owned by the drawer block above. */
@media (max-width:1100px){.jsj-srp__body{grid-template-columns:1fr}}
/* Both view modes render identically once the grid is one column and the
   horizontal card stacks — which is exactly what happens at this width. Two
   buttons that visibly do nothing are worse than no buttons, so below 900px
   the toggle goes. The setting itself is untouched: whatever the visitor
   last chose on a desktop is still what they get when they widen the
   window. Asked for 2026-08-26. */
@media (max-width:900px){.jsj-srp-view-toggle{display:none}.jsj-srp{padding-left:14px;padding-right:14px}.jsj-srp__hero{align-items:flex-start;flex-direction:column;padding-top:26px}.jsj-srp__search{min-width:0;width:100%}.jsj-srp__toolbar{align-items:flex-start;flex-direction:column}.jsj-srp__results{grid-template-columns:1fr}.jsj-srp-card--horizontal{flex-direction:column}.jsj-srp-card--horizontal .jsj-srp-card__media{width:auto}.jsj-srp-card--horizontal .jsj-srp-card__frame{height:250px;min-height:250px}.jsj-srp-card--horizontal .jsj-srp-card__head{flex-direction:column}.jsj-srp-card--horizontal .jsj-srp-card__spec-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.jsj-compare__head{align-items:flex-start;flex-direction:column}.jsj-srp-compare-bar__item{width:88px}.jsj-srp-compare-bar__item img{width:88px;height:46px}.jsj-srp-compare-bar__item-title{display:none}}
/* Mobile aurora. Two problems on a phone: the desktop keyframes animate
   `border-radius`, which is not a compositor property, so every frame
   repaints a 45px-blurred, mix-blend-mode layer — expensive enough that the
   drift can stall entirely; and at 375px the bands are only ~260px wide, so a
   translate of 8-12% is a ~25px crawl over 6.5s and reads as static.
   The mobile keyframes move transform + opacity ONLY, and the bands are sized
   past the viewport so the same percentages cover real distance. */
@media (max-width:782px){
  .jsj-aurora__band{filter:blur(45px);will-change:transform,opacity}
  .jsj-aurora__band--blue{top:-20%;left:-28%;width:130vw;height:115vw;max-width:none;max-height:none;animation:jsj-aurora-m1 11s ease-in-out infinite}
  .jsj-aurora__band--copper{top:16%;right:-32%;width:125vw;height:105vw;max-width:none;max-height:none;animation:jsj-aurora-m2 14s ease-in-out infinite}
  .jsj-aurora__band--silver{display:none}
}
@keyframes jsj-aurora-m1{0%,100%{transform:translate(-10%,-8%) scale(1);opacity:.55}50%{transform:translate(14%,12%) scale(1.18);opacity:.9}}
@keyframes jsj-aurora-m2{0%,100%{transform:translate(8%,10%) scale(1.06);opacity:.4}50%{transform:translate(-14%,-9%) scale(.9);opacity:.78}}
@media (max-width:600px){.jsj-srp-card__frame{height:210px;min-height:210px}.jsj-srp__search{flex-direction:column}.jsj-srp__search button{width:100%}.jsj-srp-compare-bar__inner{flex-wrap:wrap;gap:10px}.jsj-srp-compare-bar__items{order:3;flex-basis:100%}.jsj-srp-compare-bar__actions{margin-left:auto}.jsj-srp-compare-bar__label{font-size:15px}body.jsj-srp-has-compare .jsj-srp{padding-bottom:calc(190px + var(--jsj-mobile-bar-h))}}

/* ---- Financing pages ------------------------------------------------------
   These render outside .jsj-srp, so they carry their own colours rather than
   inheriting the SRP custom properties. */
.jsj-finance{--jsj-fin-blue:#2e6be6;--jsj-fin-blue-deep:#1f56c4;--jsj-fin-copper:#c8884a;max-width:1180px;margin:0 auto;padding:0 20px 8px;color:#e6e9ee;font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif}
/* The theme prints a bare <h1> above the content on a default page template.
   These pages render their own masthead instead, so that one is hidden and the
   page takes the site's dark ground rather than the theme's white. */
body.jsj-finance-page .page-header{display:none!important}
body.jsj-finance-page,body.jsj-finance-page .site-main,body.jsj-finance-page .page-content{background:#07080a}
body.jsj-finance-page .page-content{padding-bottom:64px}
.jsj-finance__hero{padding:52px 0 30px}
.jsj-finance__trust{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:0 0 24px;padding:0;list-style:none}
.jsj-finance__trust li{display:inline-flex;align-items:center;gap:7px;border:1px solid rgba(255,255,255,.1);border-radius:999px;background:rgba(255,255,255,.035);padding:7px 15px;color:#9ba3ac;font-size:12.5px;letter-spacing:.01em}
.jsj-finance__trust li::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--jsj-fin-copper)}
.jsj-finance__options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
/* The hub dropped to a single option on 2026-08-27 when Get Pre-Approved was
   removed from it. A lone card in a two-column grid sits in the left half with
   a hole beside it; centre it at a readable width instead of stretching it
   across the whole page. */
.jsj-finance__options:has(>:first-child:last-child){grid-template-columns:minmax(0,520px);justify-content:center}
.jsj-finance__aside{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;margin-top:18px;border:1px solid rgba(255,255,255,.08);border-radius:14px;background:rgba(255,255,255,.025);padding:18px 22px}
.jsj-finance__aside-copy{margin:0;color:#9ba3ac;font-size:14.5px;line-height:1.55}
/* The application itself is a white third-party form; the bar above it keeps it
   inside the site's frame instead of dropping a white slab onto a dark page. */
.jsj-finance__frame-shell{overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:16px;background:rgba(10,12,16,.72)}
.jsj-finance__frame-bar{display:flex;align-items:center;gap:9px;border-bottom:1px solid rgba(255,255,255,.08);padding:13px 20px;color:#c7ccd3;font-family:'Saira Condensed','Saira',sans-serif;font-size:12.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.jsj-finance__frame-lock{display:inline-flex;color:var(--jsj-fin-copper)}
/* The theme underlines every link inside page content at a specificity the
   anchor's own rule cannot beat, and text-decoration inherits into children. */
.jsj-finance a,.jsj-finance a *{text-decoration:none!important}
.jsj-finance__fallback a,.jsj-finance__fallback a *{text-decoration:underline!important}
.jsj-finance__option{display:flex;flex-direction:column;gap:7px;border:1px solid rgba(255,255,255,.1);border-radius:16px;background:rgba(10,12,16,.72);padding:26px 24px 22px;color:#e6e9ee;text-decoration:none;transition:border-color .18s ease,transform .18s ease}
.jsj-finance__option:hover{border-color:rgba(255,255,255,.22);transform:translateY(-2px);color:#e6e9ee}
.jsj-finance__option-eyebrow{color:var(--jsj-fin-copper);font-family:'Saira Condensed','Saira',sans-serif;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jsj-finance__option-title{color:#fff;font-family:'Saira','Inter',sans-serif;font-size:24px;font-weight:700;line-height:1.15}
.jsj-finance__option-copy{color:#9ba3ac;font-size:14px;line-height:1.5}
.jsj-finance__option-cta{margin-top:10px;align-self:flex-start;border-radius:9px;background:rgba(255,255,255,.06);padding:9px 18px;font-size:13px;font-weight:700}
.jsj-finance__option--primary .jsj-finance__option-cta{background:linear-gradient(135deg,var(--jsj-fin-blue),var(--jsj-fin-blue-deep));color:#fff;box-shadow:0 10px 24px -12px rgba(46,107,230,.8)}
/* 700Credit's form sends no framing restrictions, so it runs inline. The frame
   is deliberately tall: the application is cross-origin, so its height cannot
   be measured and a short frame would nest a second scrollbar. */
.jsj-finance__frame{position:relative;overflow:hidden;background:#fff;height:var(--jsj-finance-frame-height,1750px)}
.jsj-finance__frame iframe{display:block;width:100%;height:100%;border:0}
.jsj-finance__fallback{margin:12px 0 0;color:#9ba3ac;font-size:13px;text-align:center}
.jsj-finance__fallback a{color:#8fb4f2;text-decoration:underline}
.jsj-finance__panel{border:1px solid rgba(255,255,255,.1);border-radius:16px;background:rgba(10,12,16,.72);padding:30px 26px}
/* Explicit, because [hidden] is a UA rule at the lowest weight and any later
   `display:` on this panel would silently reveal the Capital One fallback. */
.jsj-finance__panel[hidden]{display:none!important}
.jsj-finance__panel-copy{margin:0;color:#c7ccd3;font-size:15px;line-height:1.6}
.jsj-finance__panel-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:20px}
.jsj-finance__button{display:inline-flex;align-items:center;justify-content:center;border-radius:10px;background:linear-gradient(135deg,var(--jsj-fin-blue),var(--jsj-fin-blue-deep));padding:12px 24px;color:#fff;font-size:14px;font-weight:800;text-decoration:none;box-shadow:0 10px 24px -12px rgba(46,107,230,.8)}
.jsj-finance__button:hover{filter:brightness(1.08);color:#fff}
.jsj-finance__button--ghost{background:transparent;border:1px solid rgba(255,255,255,.18);box-shadow:none}
.jsj-finance__embed{border-radius:16px;overflow:hidden}
@media (max-width:820px){.jsj-finance__options{grid-template-columns:1fr}.jsj-finance__frame{height:var(--jsj-finance-frame-height,1750px)}}
@media (max-width:600px){.jsj-finance{padding-left:14px;padding-right:14px}.jsj-finance__option{padding:22px 18px}.jsj-finance__panel{padding:24px 18px}.jsj-finance__button{width:100%}.jsj-finance__hero{padding:34px 0 22px}.jsj-finance__aside{flex-direction:column;align-items:flex-start}.jsj-finance__frame-bar{padding:11px 15px;font-size:11.5px}}

/* ---- Branded content pages ------------------------------------------------
   Shared blocks for About and any page built from the jsj_* shortcodes. The
   heading tokens are lifted from the homepage "Welcome to the JSJ Family"
   block so every masthead on the site reads the same. */
body.jsj-brand-page{background:#000}
/* Lift the page furniture above the fixed aurora ground behind it.
   `:not(.jsj-overlay)` is load-bearing, not tidiness. This selector is 0-2-1
   and hits EVERY top-level element on the page, which on a WordPress page means
   the header, main and footer — and also anything a plugin appends to <body> at
   wp_footer. It was overriding `position:fixed` on the Text Us launcher and its
   dialog (0-1-1), dropping the launcher into the flow below the footer on every
   branded page: About, Meet the Team, Trade-In, FAQ, Financing, the blog and
   the posts. Reported 2026-08-21. Anything that positions itself must be
   excluded here rather than trying to out-specify this rule from its own
   stylesheet, so the marker class is the contract: give a body-level overlay
   `jsj-overlay` and this leaves it alone. */
body.jsj-brand-page>*:not(.jsj-aurora):not(.jsj-overlay){position:relative;z-index:1}
body.jsj-brand-page .site-main,body.jsj-brand-page .page-content{background:transparent}
body.jsj-brand-page .page-header{display:none!important}
body.jsj-brand-page .page-content{padding-bottom:72px}
.jsj-page{--jsj-pg-blue:#2e6be6;--jsj-pg-blue-deep:#1f56c4;--jsj-pg-copper:#c8884a;max-width:1180px;margin:0 auto;padding:0 20px;color:#e6e9ee;font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif}
.jsj-page+.jsj-page{margin-top:54px}
.jsj-page--heading{padding-top:52px}
.jsj-heading{text-align:center}
.jsj-heading__eyebrow{display:flex;align-items:center;justify-content:center;gap:12px;margin:0 0 14px}
.jsj-heading__eyebrow-text{font-family:'Saira',sans-serif;font-size:12.5px;font-weight:600;line-height:1;letter-spacing:3px;text-transform:uppercase;color:var(--jsj-pg-copper)}
.jsj-heading__rule{flex:0 0 46px;width:46px;height:1px}
.jsj-heading__rule--left{background:linear-gradient(90deg,transparent,var(--jsj-pg-copper))}
.jsj-heading__rule--right{background:linear-gradient(90deg,var(--jsj-pg-copper),transparent)}
.jsj-heading__title{margin:0;font-family:'Saira Condensed','Saira',sans-serif;font-size:56px;font-weight:700;line-height:1;letter-spacing:.5px;text-transform:uppercase;color:transparent;background-image:linear-gradient(170deg,#fcfdfe 0%,#c4cad2 26%,#8e96a0 46%,#ffffff 52%,#aeb5be 64%,#787f88 84%,#b4bac2 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.jsj-heading__lede{margin:18px auto 0;max-width:620px;font-family:'Inter',sans-serif;font-size:16.5px;line-height:1.7;color:#a8b0ba}
.jsj-prose{max-width:760px;margin:0 auto;color:#c7ccd3;font-size:16.5px;line-height:1.8}
.jsj-prose--center{text-align:center}
.jsj-prose p{margin:0 0 18px}
.jsj-prose p:last-child{margin-bottom:0}
.jsj-prose strong{color:#fff}
.jsj-prose a{color:#8fb4f2}
.jsj-pullquote{max-width:760px;margin:26px auto 0;border-left:3px solid var(--jsj-pg-copper);padding:6px 0 6px 22px;color:#fff;font-family:'Saira','Inter',sans-serif;font-size:21px;font-weight:600;line-height:1.45}
.jsj-pillars{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
/* Two pillars must fill the row, not sit in two thirds of it with a hole on
   the right. The Value Your Trade page dropped to two on 2026-08-27 when the
   "Usually same day" promise was withdrawn, and a hard repeat(3) leaves the
   gap visible on desktop only. Scoped to the exactly-two case so the three-up
   pages are untouched. */
.jsj-pillars:has(>:nth-child(2):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}
.jsj-pillar{border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:26px 24px 24px;backdrop-filter:blur(6px)}
.jsj-pillar__icon{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;margin-bottom:16px;border:1px solid rgba(200,136,74,.35);border-radius:11px;background:rgba(200,136,74,.10);color:var(--jsj-pg-copper)}
.jsj-pillar__icon svg{width:21px;height:21px}
.jsj-pillar__title{margin:0 0 9px;color:#fff;font-family:'Saira','Inter',sans-serif;font-size:19px;font-weight:700;line-height:1.2}
.jsj-pillar__body{color:#9ba3ac;font-size:14.5px;line-height:1.65}
.jsj-pillar__body p{margin:0}
.jsj-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:26px 22px}
.jsj-stat{text-align:center}
.jsj-stat__value{display:block;font-family:'Saira Condensed','Saira',sans-serif;font-size:38px;font-weight:700;line-height:1;color:#fff}
.jsj-stat__label{display:block;margin-top:8px;font-family:'Saira',sans-serif;font-size:11.5px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;color:#8c95a0}
.jsj-visit{border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:28px 26px}
.jsj-visit__row{display:flex;flex-wrap:wrap;gap:6px 18px;padding:14px 0;border-bottom:1px solid rgba(255,255,255,.06)}
.jsj-visit__row:first-child{padding-top:0}
.jsj-visit__label{flex:0 0 110px;font-family:'Saira',sans-serif;font-size:11.5px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;color:var(--jsj-pg-copper)}
.jsj-visit__value{flex:1;min-width:200px;color:#c7ccd3;font-size:15.5px;line-height:1.6}
.jsj-visit__value a{color:#8fb4f2;text-decoration:none}
.jsj-visit .jsj-button{margin-top:20px}
.jsj-cta-band{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;border:1px solid rgba(255,255,255,.10);border-radius:18px;background:linear-gradient(120deg,rgba(46,107,230,.14),rgba(200,136,74,.10));padding:28px 30px}
.jsj-cta-band__title{display:block;font-family:'Saira Condensed','Saira',sans-serif;font-size:30px;font-weight:700;line-height:1.05;text-transform:uppercase;color:#fff}
.jsj-cta-band__lede{display:block;margin-top:7px;color:#9ba3ac;font-size:14.5px}
.jsj-cta-band__actions{display:flex;flex-wrap:wrap;gap:12px}
.jsj-button{display:inline-flex;align-items:center;justify-content:center;border-radius:10px;background:linear-gradient(135deg,var(--jsj-pg-blue),var(--jsj-pg-blue-deep));padding:12px 24px;color:#fff;font-size:14px;font-weight:800;text-decoration:none;box-shadow:0 10px 24px -12px rgba(46,107,230,.8)}
.jsj-button:hover{filter:brightness(1.08);color:#fff}
.jsj-button--ghost{background:transparent;border:1px solid rgba(255,255,255,.2);box-shadow:none}
.jsj-page a,.jsj-page a *{text-decoration:none!important}
.jsj-prose a,.jsj-visit__value a{text-decoration:underline!important}
@media (max-width:1024px){.jsj-heading__title{font-size:42px}.jsj-pillars{grid-template-columns:repeat(2,minmax(0,1fr))}.jsj-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}}
@media (max-width:600px){.jsj-page{padding:0 14px}.jsj-page+.jsj-page{margin-top:40px}.jsj-page--heading{padding-top:34px}.jsj-heading__title{font-size:32px}.jsj-heading__lede{font-size:15.5px;line-height:1.6}.jsj-heading__rule{flex-basis:28px;width:28px}.jsj-prose,.jsj-pullquote{font-size:15.5px}.jsj-pillars{grid-template-columns:1fr}.jsj-stats{grid-template-columns:1fr;gap:14px}.jsj-cta-band{padding:24px 20px}.jsj-cta-band__actions{width:100%}.jsj-button{flex:1;min-width:150px}.jsj-visit__label{flex-basis:100%}}

/* ---- FAQ accordion ------------------------------------------------------ */
.jsj-page--faq{max-width:860px;margin-left:auto;margin-right:auto}
.jsj-faq__title{margin:0 0 22px;font-family:'Saira Condensed','Saira',sans-serif;font-size:30px;font-weight:700;line-height:1.1;text-transform:uppercase;letter-spacing:.5px;color:#fff;text-align:center}
.jsj-faq{display:flex;flex-direction:column;gap:12px}
.jsj-faq__item{border:1px solid rgba(255,255,255,.09);border-radius:14px;background:rgba(10,12,16,.66);overflow:hidden;transition:border-color .18s ease,background-color .18s ease}
.jsj-faq__item[open]{border-color:rgba(91,147,240,.32);background:rgba(12,15,20,.8)}
.jsj-faq .jsj-faq__q{display:flex;align-items:center;justify-content:space-between;gap:16px;cursor:pointer;list-style:none;padding:18px 20px;font-family:'Saira',sans-serif;font-size:16px;font-weight:600;line-height:1.35;color:#e6e9ee}
.jsj-faq__q::-webkit-details-marker{display:none}
.jsj-faq__q:hover{color:#fff}
.jsj-faq__item:focus-within .jsj-faq__q{outline:2px solid var(--jsj-copper,#c8884a);outline-offset:-2px}
/* Plus sign drawn from two bars so it can rotate into a minus on open. */
.jsj-faq__mark{position:relative;flex:none;width:18px;height:18px}
.jsj-faq__mark::before,.jsj-faq__mark::after{content:"";position:absolute;top:50%;left:0;width:18px;height:2px;border-radius:2px;background:var(--jsj-copper,#c8884a);transform:translateY(-50%);transition:transform .22s ease,opacity .22s ease}
.jsj-faq__mark::after{transform:translateY(-50%) rotate(90deg)}
.jsj-faq__item[open] .jsj-faq__mark::after{transform:translateY(-50%) rotate(0deg);opacity:0}
.jsj-faq__a{padding:0 20px 20px;color:#a8b0ba;font-family:'Inter',system-ui,sans-serif;font-size:15.5px;line-height:1.7}
.jsj-faq__a p{margin:0 0 12px}
.jsj-faq__a p:last-child{margin-bottom:0}
.jsj-faq__a a{color:#9cc0fa}
.jsj-faq__a img{max-width:100%;height:auto;border-radius:10px}
.jsj-faq__a ul,.jsj-faq__a ol{margin:0 0 12px;padding-left:20px}
.jsj-faq__a li{margin:0 0 6px}
@media (prefers-reduced-motion:reduce){.jsj-faq__mark::before,.jsj-faq__mark::after{transition:none}}
@media (max-width:600px){
  .jsj-faq__title{font-size:25px}
  .jsj-faq .jsj-faq__q{padding:15px 16px;font-size:15px}
  .jsj-faq__a{padding:0 16px 16px;font-size:14.5px}
}

/* ---- Meet the team --------------------------------------------------------
   The photo box is a fixed 4:5 frame with object-fit:cover, so whatever the
   dealer uploads later crops to the same shape and the row stays even. */
.jsj-team{display:grid;gap:18px}
.jsj-team-member{display:grid;grid-template-columns:250px minmax(0,1fr);gap:28px;align-items:start;border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:26px;backdrop-filter:blur(6px)}
.jsj-team-member__photo{position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.08);border-radius:13px;background:#0b0e13;aspect-ratio:4/5}
.jsj-team-member__img{display:block;width:100%;height:100%;object-fit:cover}
.jsj-team-member__placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:radial-gradient(120% 90% at 50% 12%,rgba(200,136,74,.14),transparent 62%);color:rgba(200,136,74,.62)}
.jsj-team-member__placeholder svg{width:64px;height:64px}
.jsj-team-member__placeholder-label{font-family:'Saira',sans-serif;font-size:10.5px;font-weight:600;letter-spacing:1.7px;text-transform:uppercase;color:#79818c}
.jsj-team-member__name{margin:0;color:#fff;font-family:'Saira Condensed','Saira',sans-serif;font-size:30px;font-weight:700;line-height:1.05;letter-spacing:.4px;text-transform:uppercase}
.jsj-team-member__role{margin:7px 0 0;font-family:'Saira',sans-serif;font-size:11.5px;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:var(--jsj-pg-copper)}
.jsj-team-member__contact{display:flex;flex-wrap:wrap;gap:8px 10px;margin:16px 0 0;padding:0;list-style:none}
.jsj-team-member__contact li{display:inline-flex}
.jsj-team-member__contact a{display:inline-flex;align-items:center;border:1px solid rgba(255,255,255,.12);border-radius:999px;background:rgba(255,255,255,.04);padding:7px 15px;color:#c7ccd3;font-size:13px;text-decoration:none!important;transition:border-color .15s ease,color .15s ease}
.jsj-team-member__contact a:hover{border-color:rgba(111,162,245,.5);color:#fff}
.jsj-team-member__bio{margin-top:18px;color:#9ba3ac;font-size:15px;line-height:1.75}
.jsj-team-member__bio p{margin:0 0 14px}
.jsj-team-member__bio p:last-child{margin-bottom:0}
@media (max-width:820px){.jsj-team-member{grid-template-columns:1fr;gap:20px;padding:22px}.jsj-team-member__photo{max-width:200px;margin:0 auto}.jsj-team-member__body{text-align:center}.jsj-team-member__contact{justify-content:center}.jsj-team-member__bio{text-align:left}}
@media (max-width:600px){.jsj-team-member__name{font-size:25px}.jsj-team-member__bio{font-size:14.5px}}

/* ---- Blog: index, archives and single posts -------------------------------
   hello-elementor rendered all of these itself — an "Archives" <h1> over bare
   <article class="post"> stubs on a white page. These views are generated from
   the query rather than authored, so they are built in PHP (templates/
   blog-archive.php, templates/single-post.php) out of the same blocks as the
   branded content pages: .jsj-page for the shell, .jsj-heading for the
   masthead, .jsj-button for actions, and the aurora ground inherited through
   body.jsj-brand-page. Only the pieces the blog needs on top live here. */
body.jsj-blog-page .page-header,
body.jsj-blog-page .entry-header,
body.jsj-blog-page > .site-main > .page-header{display:none!important}
body.jsj-blog-page .site-main,body.jsj-blog-page .page-content{background:transparent;padding-top:0}
.jsj-blog{--jsj-bl-copper:#c8884a;--jsj-bl-blue:#6fa2f5;padding-bottom:16px;color:#e6e9ee;font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif}
.jsj-blog .jsj-page+.jsj-page{margin-top:36px}
.jsj-blog__main{padding-top:6px}

/* Category filter. A row of chips rather than a select: with a handful of
   categories the whole choice is visible, and each one is a real URL. */
.jsj-blog__cats{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 26px;justify-content:center}
.jsj-blog__cat{display:inline-flex;align-items:center;border:1px solid rgba(255,255,255,.12);border-radius:999px;background:rgba(255,255,255,.035);padding:8px 17px;color:#a8b0ba;font-family:'Saira',sans-serif;font-size:12.5px;font-weight:600;letter-spacing:.04em;text-decoration:none!important;transition:border-color .16s ease,color .16s ease,background-color .16s ease}
.jsj-blog__cat:hover{border-color:rgba(111,162,245,.5);background:rgba(46,107,230,.12);color:#fff}
.jsj-blog__cat.is-active{border-color:rgba(200,136,74,.55);background:rgba(200,136,74,.13);color:var(--jsj-bl-copper)}

/* The grid is three-up, and the newest post spans two of those columns on its
   own row so the index has a lead item instead of a uniform wall. */
.jsj-blog__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:stretch}
/* Three columns only pay their way from the third card. Below that the track
   narrows and centres, so a young blog looks deliberate rather than unfinished
   — which matters here, where the index opens with a single imported post. */
.jsj-blog__grid--single{grid-template-columns:minmax(0,1fr);max-width:860px;margin:0 auto}
.jsj-blog__grid--single .jsj-blog-card--lead{grid-column:span 1}
.jsj-blog__grid--pair{grid-template-columns:repeat(2,minmax(0,1fr));max-width:920px;margin:0 auto}
.jsj-blog-card{position:relative;display:flex;flex-direction:column;overflow:hidden;border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.72);backdrop-filter:blur(6px);transition:border-color .18s ease,transform .18s ease,box-shadow .18s ease}
.jsj-blog-card:hover{border-color:rgba(111,162,245,.42);transform:translateY(-3px);box-shadow:0 22px 44px -26px rgba(0,0,0,.9)}
.jsj-blog-card--lead{grid-column:span 2;flex-direction:row}
.jsj-blog-card__media{position:relative;overflow:hidden;background:#0b0e13;aspect-ratio:16/9}
.jsj-blog-card--lead .jsj-blog-card__media{flex:0 0 46%;aspect-ratio:auto}
.jsj-blog-card__img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.jsj-blog-card:hover .jsj-blog-card__img{transform:scale(1.04)}
/* Imported posts carry no featured image. A branded plate keyed to the brand
   marks beats a grey box, and keeps every card the same height. */
.jsj-blog-card__plate{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:radial-gradient(120% 100% at 30% 15%,rgba(46,107,230,.22),transparent 60%),radial-gradient(110% 100% at 82% 88%,rgba(200,136,74,.20),transparent 62%),#0b0e13}
.jsj-blog-card__monogram{font-family:'Saira Condensed','Saira',sans-serif;font-size:44px;font-weight:800;letter-spacing:.12em;color:transparent;background-image:linear-gradient(170deg,#fcfdfe,#c4cad2 30%,#8e96a0 52%,#e9edf2 68%,#828a94);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;opacity:.5}
.jsj-blog-card--lead .jsj-blog-card__monogram{font-size:62px}
/* The logo standing in for a missing featured image. Sized as a mark on a
   plate, not as a photo: contained, centred, and held well inside the tile so
   it reads as branding rather than as a picture that failed to crop. Opacity
   matches the monogram it replaces so a grid mixing the two still looks even. */
.jsj-blog-card__logo{width:min(46%,150px);height:auto;object-fit:contain;opacity:.92}
.jsj-blog-card--lead .jsj-blog-card__logo{width:min(38%,210px)}
.jsj-blog-card__body{display:flex;flex-direction:column;flex:1;gap:10px;padding:20px 20px 18px}
.jsj-blog-card--lead .jsj-blog-card__body{padding:28px 28px 24px;justify-content:center}
.jsj-blog-card__cat{align-self:flex-start;color:var(--jsj-bl-copper);font-family:'Saira Condensed','Saira',sans-serif;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jsj-blog-card__title{margin:0;color:#fff;font-family:'Saira','Inter',sans-serif;font-size:20px;font-weight:700;line-height:1.22;letter-spacing:.01em}
.jsj-blog-card--lead .jsj-blog-card__title{font-family:'Saira Condensed','Saira',sans-serif;font-size:34px;line-height:1.06;text-transform:uppercase;letter-spacing:.4px}
.jsj-blog-card__excerpt{margin:0;color:#9ba3ac;font-size:14.5px;line-height:1.62}
.jsj-blog-card--lead .jsj-blog-card__excerpt{font-size:15.5px}
.jsj-blog-card__foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.07)}
.jsj-blog-card__meta{display:inline-flex;align-items:center;gap:8px;color:#79818c;font-family:'Saira',sans-serif;font-size:12px;font-weight:500;letter-spacing:.03em}
.jsj-blog-card__dot{color:#4d545d}
.jsj-blog-card__cta{display:inline-flex;align-items:center;gap:7px;color:var(--jsj-bl-blue);font-family:'Saira',sans-serif;font-size:12.5px;font-weight:700;letter-spacing:.03em}
.jsj-blog-card__cta span{transition:transform .18s ease}
.jsj-blog-card:hover .jsj-blog-card__cta span{transform:translateX(3px)}
/* One overlay anchor covers the card, so the title, image and CTA are all the
   same target and the accessible name is announced once. */
.jsj-blog-card__link{position:absolute;inset:0;z-index:2;display:block;border:0;border-radius:inherit;background:none}
.jsj-blog-card__link:focus-visible{outline:2px solid var(--jsj-bl-copper);outline-offset:3px}

.jsj-blog__empty{border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:48px 26px;text-align:center}
.jsj-blog__empty-title{margin:0;color:#fff;font-family:'Saira Condensed','Saira',sans-serif;font-size:26px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.jsj-blog__empty-copy{margin:10px auto 22px;max-width:420px;color:#9ba3ac;font-size:15px;line-height:1.65}

.jsj-blog__pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:7px;margin-top:34px}
.jsj-blog__pager-link{display:inline-flex;align-items:center;justify-content:center;height:34px;min-width:34px;padding:0 11px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:rgba(255,255,255,.03);color:#c9cfd8;font-family:'Saira',sans-serif;font-size:13px;font-weight:600;text-decoration:none!important;line-height:1}
.jsj-blog__pager-link:hover{border-color:rgba(91,147,240,.55);background:rgba(46,107,230,.12);color:#fff}
.jsj-blog__pager-link.is-active{background:var(--jsj-pg-blue,#2e6be6);border-color:var(--jsj-pg-blue,#2e6be6);color:#fff}
.jsj-blog__pager-link.is-disabled{opacity:.4;pointer-events:none}
.jsj-blog__pager-gap{color:#5b636d;padding:0 2px}

/* ---- Single post -------------------------------------------------------- */
.jsj-post__crumb{margin:0 0 18px;text-align:center;font-family:'Saira',sans-serif;font-size:12.5px;font-weight:600;letter-spacing:.06em}
.jsj-post__crumb a{color:#8c95a0;text-decoration:none!important}
.jsj-post__crumb a:hover{color:var(--jsj-bl-copper)}
.jsj-post__meta{margin:18px 0 0;text-align:center}
.jsj-post__hero{margin-top:30px}
.jsj-post__hero-img{display:block;width:100%;max-width:900px;margin:0 auto;border:1px solid rgba(255,255,255,.08);border-radius:16px;object-fit:cover}
.jsj-post__body{margin-top:30px}
/* The article measure is a touch wider than .jsj-prose's 760px — long-form
   reading, not a page intro — and the editor's own headings, lists, quotes and
   images all need styling because none of them come from a shortcode. */
.jsj-prose--article{max-width:800px;font-size:17px;line-height:1.82;color:#c3c9d1}
.jsj-prose--article>*:first-child{margin-top:0}
.jsj-prose--article h1,.jsj-prose--article h2,.jsj-prose--article h3,.jsj-prose--article h4{margin:38px 0 14px;color:#fff;font-family:'Saira','Inter',sans-serif;font-weight:700;line-height:1.24}
.jsj-prose--article h2{font-family:'Saira Condensed','Saira',sans-serif;font-size:30px;text-transform:uppercase;letter-spacing:.4px}
.jsj-prose--article h3{font-size:21px}
.jsj-prose--article h4{font-size:17.5px}
.jsj-prose--article ul,.jsj-prose--article ol{margin:0 0 20px;padding-left:24px}
.jsj-prose--article li{margin-bottom:9px}
.jsj-prose--article li::marker{color:var(--jsj-bl-copper)}
.jsj-prose--article img{display:block;max-width:100%;height:auto;margin:26px auto;border-radius:14px}
.jsj-prose--article figure{margin:26px 0}
.jsj-prose--article figcaption{margin-top:9px;color:#79818c;font-size:13px;text-align:center}
.jsj-prose--article blockquote{margin:26px 0;border-left:3px solid var(--jsj-bl-copper);padding:4px 0 4px 20px;color:#fff;font-family:'Saira','Inter',sans-serif;font-size:19px;font-weight:600;line-height:1.5}
.jsj-prose--article blockquote p:last-child{margin-bottom:0}
.jsj-prose--article hr{margin:34px 0;border:0;border-top:1px solid rgba(255,255,255,.09)}
.jsj-prose--article a{color:#8fb4f2;text-decoration:underline!important}
.jsj-prose--article a:hover{color:var(--jsj-bl-copper)}
.jsj-prose--article table{width:100%;border-collapse:collapse;margin:24px 0;font-size:15px}
.jsj-prose--article th,.jsj-prose--article td{border:1px solid rgba(255,255,255,.09);padding:10px 13px;text-align:left}
.jsj-prose--article th{background:rgba(255,255,255,.04);color:#fff;font-family:'Saira',sans-serif;font-weight:700}

.jsj-post__adjacent{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:40px}
.jsj-post__adjacent-link{display:flex;flex-direction:column;gap:7px;border:1px solid rgba(255,255,255,.09);border-radius:14px;background:rgba(10,12,16,.66);padding:18px 20px;text-decoration:none!important;transition:border-color .18s ease,transform .18s ease}
.jsj-post__adjacent-link:hover{border-color:rgba(111,162,245,.42);transform:translateY(-2px)}
/* With only one neighbour the single card would stretch across both columns;
   Next stays on the right and Previous on the left either way. */
.jsj-post__adjacent-link--next{grid-column:2;text-align:right}
.jsj-post__adjacent-label{color:var(--jsj-bl-copper);font-family:'Saira Condensed','Saira',sans-serif;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.jsj-post__adjacent-title{color:#e6e9ee;font-family:'Saira','Inter',sans-serif;font-size:16px;font-weight:600;line-height:1.3}

@media (max-width:1024px){
  .jsj-blog__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .jsj-blog-card--lead{grid-column:span 2}
  .jsj-blog-card--lead .jsj-blog-card__title{font-size:29px}
}
@media (max-width:760px){
  .jsj-blog__grid{grid-template-columns:1fr;gap:16px}
  .jsj-blog-card--lead{grid-column:span 1;flex-direction:column}
  .jsj-blog-card--lead .jsj-blog-card__media{flex:none;aspect-ratio:16/9}
  .jsj-blog-card--lead .jsj-blog-card__body{padding:20px 20px 18px}
  .jsj-blog-card--lead .jsj-blog-card__title{font-size:24px}
  .jsj-blog-card--lead .jsj-blog-card__excerpt{font-size:14.5px}
  .jsj-blog__cats{justify-content:flex-start;margin-bottom:20px}
  .jsj-blog__cat{padding:7px 14px;font-size:12px}
  .jsj-prose--article{font-size:16px;line-height:1.75}
  .jsj-prose--article h2{font-size:25px}
  .jsj-prose--article h3{font-size:19px}
  .jsj-post__adjacent{grid-template-columns:1fr}
  .jsj-post__adjacent-link--next{grid-column:1;text-align:left}
  .jsj-post__hero{margin-top:22px}
}
@media (prefers-reduced-motion:reduce){
  .jsj-blog-card,.jsj-blog-card__img,.jsj-blog-card__cta span,.jsj-post__adjacent-link{transition:none}
  .jsj-blog-card:hover{transform:none}
  .jsj-blog-card:hover .jsj-blog-card__img{transform:none}
  .jsj-post__adjacent-link:hover{transform:none}
}

/* ---- Value Your Trade form ------------------------------------------------
   Sits inside the branded-page shell (.jsj-page), so it inherits the measure
   and the ground; only the form itself is styled here. */
.jsj-page--trade{max-width:920px}
/* Prose that follows the appraisal form lines up with the form, not with the
   page. `.jsj-prose` is normally a 760px measure centred inside a 1180px page,
   which put "Prefer to just bring it by?" 60px to the RIGHT of the Get My
   Trade Value button directly above it (measured at 1280px: form and button
   start at 193, the paragraph at 253) — close enough to look like a mistake
   rather than a decision.

   Scoped to the sibling relationship rather than to a page id: it says what it
   means — prose that follows the form matches the form — and it survives the
   page being rebuilt.

   `~` and not `+`: the appraisal form prints its own inline <script> right
   after itself, so the prose block is never the *adjacent* sibling and `+`
   silently matched nothing. Non-rendered nodes still count for `+`, which is
   easy to forget when the two blocks look adjacent on screen. */
.jsj-page--trade ~ .jsj-page--prose{max-width:920px}
.jsj-page--trade ~ .jsj-page--prose .jsj-prose{max-width:none}
.jsj-trade{display:flex;flex-direction:column;gap:26px}
.jsj-trade__group{border:1px solid rgba(255,255,255,.09);border-radius:16px;background:rgba(10,12,16,.66);padding:26px 24px 24px;backdrop-filter:blur(6px)}
.jsj-trade__legend{margin:0 0 18px;color:#fff;font-family:'Saira Condensed','Saira',sans-serif;font-size:20px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.jsj-trade__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.jsj-trade__field{display:flex;flex-direction:column;gap:7px;min-width:0}
.jsj-trade__field--wide{grid-column:1/-1}
.jsj-trade__field>span{display:flex;align-items:baseline;gap:6px;font-family:'Saira',sans-serif;font-size:11.5px;font-weight:600;letter-spacing:1.4px;text-transform:uppercase;color:#8c95a0}
.jsj-trade__field b{color:var(--jsj-pg-copper,#c8884a);font-weight:700}
.jsj-trade__field small{font-size:10.5px;letter-spacing:.06em;text-transform:none;color:#6e7682}
/* appearance:none or the browser paints its own light control over the dark
   panel — the same fix the SRP sort control needs. */
.jsj-trade__field input,.jsj-trade__field select,.jsj-trade__field textarea{
  width:100%;border:1px solid rgba(255,255,255,.14)!important;border-radius:10px;
  background-color:rgba(255,255,255,.04)!important;color:#f4f6f9!important;
  padding:11px 13px;font-family:'Inter',sans-serif;font-size:15px;line-height:1.4;outline:none;
  appearance:none;-webkit-appearance:none;box-shadow:none;
}
.jsj-trade__field select{
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%238c95a0' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important;
  background-repeat:no-repeat!important;background-position:right 13px center!important;padding-right:34px;cursor:pointer;
}
.jsj-trade__field textarea{resize:vertical;min-height:96px}
.jsj-trade__field input::placeholder,.jsj-trade__field textarea::placeholder{color:#5b636d}
.jsj-trade__field input:focus,.jsj-trade__field select:focus,.jsj-trade__field textarea:focus{
  border-color:rgba(200,136,74,.72)!important;box-shadow:0 0 0 3px rgba(200,136,74,.13);
}
/* Off-screen rather than display:none — some bots skip hidden fields. */
.jsj-trade__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.jsj-trade__error{margin:0;border:1px solid rgba(224,90,90,.4);border-radius:10px;background:rgba(224,90,90,.10);padding:12px 15px;color:#f0b4b4;font-size:14.5px}
.jsj-trade__foot{display:flex;flex-wrap:wrap;align-items:center;gap:16px 22px}
.jsj-trade .jsj-trade__submit{border:0;cursor:pointer;font-family:'Saira',sans-serif;padding:14px 30px;font-size:15px}
.jsj-trade .jsj-trade__submit:disabled{opacity:.6;cursor:progress}
.jsj-trade__note{flex:1;min-width:240px;margin:0;color:#8c95a0;font-size:13.5px;line-height:1.55}
.jsj-trade__done{border:1px solid rgba(91,147,240,.32);border-radius:16px;background:rgba(12,15,20,.8);padding:38px 30px;text-align:center}
.jsj-trade__done-title{margin:0;color:#fff;font-family:'Saira Condensed','Saira',sans-serif;font-size:28px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.jsj-trade__done-copy{margin:12px auto 22px;max-width:460px;color:#9ba3ac;font-size:15px;line-height:1.65}
.jsj-trade__done-copy a{color:#8fb4f2}
@media (max-width:820px){.jsj-trade__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){
  .jsj-trade__grid{grid-template-columns:1fr}
  .jsj-trade__group{padding:22px 18px}
  .jsj-trade .jsj-trade__submit{width:100%}
  .jsj-trade__note{min-width:0}
}

/* Options picker — the old form's 51 checkboxes, collapsed. */
.jsj-trade__options{position:relative}
.jsj-trade .jsj-trade__options-toggle{
  display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;
  border:1px solid rgba(255,255,255,.14);border-radius:10px;background:rgba(255,255,255,.04);
  color:#8c95a0;padding:11px 13px;font-family:'Inter',sans-serif;font-size:15px;text-align:left;cursor:pointer;
}
.jsj-trade .jsj-trade__options-toggle:hover{border-color:rgba(255,255,255,.26)}
.jsj-trade__options.has-selection .jsj-trade__options-toggle{color:#f4f6f9;border-color:rgba(200,136,74,.5)}
.jsj-trade__options-toggle svg{flex:none;transition:transform .18s ease}
.jsj-trade__options.is-open .jsj-trade__options-toggle svg{transform:rotate(180deg)}
/* Absolute so opening it does not shove the rest of the form down the page. */
.jsj-trade__options-panel{
  position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:20;
  max-height:300px;overflow-y:auto;
  border:1px solid rgba(255,255,255,.16);border-radius:12px;background:#0d1015;
  padding:14px;box-shadow:0 24px 48px -20px rgba(0,0,0,.9);
}
.jsj-trade__options-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px 14px}
.jsj-trade__option{display:flex;align-items:center;gap:9px;padding:6px 4px;border-radius:7px;color:#c7ccd3;font-size:14px;cursor:pointer}
.jsj-trade__option:hover{background:rgba(255,255,255,.05);color:#fff}
.jsj-trade__option input{flex:none;width:15px;height:15px;accent-color:#2e6be6;cursor:pointer}
@media (max-width:820px){.jsj-trade__options-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.jsj-trade__options-grid{grid-template-columns:1fr}.jsj-trade__options-panel{max-height:260px}}
/* [hidden] is a UA rule at the lowest weight, so any display: on the same
   element beats it — the two finance fields start with the attribute set and
   were showing anyway. */
.jsj-trade__field[hidden],.jsj-trade__options-panel[hidden]{display:none!important}
/* ...AND THE FORM ITSELF, which was the one this list forgot. `.jsj-trade` is
   display:flex, so on success `form.hidden = true` set an attribute that lost
   to it and the form stayed on screen — with its button still reading
   "Sending…" — sitting above the success panel that had just appeared below it.
   Reported 2026-08-24: "it still shows sending even though I got the email".
   The email had gone; only the form refused to leave. */
.jsj-trade[hidden]{display:none!important}
/* Each group carries backdrop-filter, which makes it a stacking context — so
   the options panel's own z-index cannot lift it above a LATER group, and the
   History card painted straight over the open list. Raise the group instead. */
.jsj-trade__group{position:relative;z-index:1}
.jsj-trade__group.is-raised{z-index:30}
/* Vehicle of interest: the select and its escape hatch to the full inventory. */
.jsj-trade__interest{display:flex;align-items:stretch;gap:10px}
.jsj-trade__interest select{flex:1;min-width:0}
.jsj-trade .jsj-trade__interest-all{
  flex:none;display:inline-flex;align-items:center;
  border:1px solid rgba(255,255,255,.16);border-radius:10px;background:rgba(255,255,255,.05);
  padding:0 16px;color:#8fb4f2;font-family:'Saira',sans-serif;font-size:13px;font-weight:600;
  white-space:nowrap;text-decoration:none!important;
}
.jsj-trade .jsj-trade__interest-all:hover{border-color:rgba(111,162,245,.5);color:#fff}
/* The generic `.jsj-trade__field input` rule above sets appearance:none so the
   text inputs and selects can be dark — but these checkboxes are inside a
   field too, so they were stripped of their native rendering and left as empty
   boxes that could never show a tick, however many were selected. They need
   their own checked state drawn explicitly. !important throughout because the
   rule it is overriding uses it on the same properties. */
.jsj-trade .jsj-trade__option input{
  appearance:none;-webkit-appearance:none;
  flex:none;width:18px;height:18px;padding:0!important;
  border:1px solid rgba(255,255,255,.30)!important;
  border-radius:5px!important;
  background-color:rgba(255,255,255,.05)!important;
  background-image:none!important;
  cursor:pointer;
  transition:background-color .12s ease,border-color .12s ease;
}
.jsj-trade .jsj-trade__option input:hover{border-color:rgba(255,255,255,.5)!important}
.jsj-trade .jsj-trade__option input:checked{
  border-color:#2e6be6!important;
  background-color:#2e6be6!important;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M1.5 6.4L4.4 9.3L10.5 3' stroke='%23ffffff' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important;
  background-repeat:no-repeat!important;
  background-position:center!important;
  background-size:12px 12px!important;
}
.jsj-trade .jsj-trade__option input:focus-visible{outline:2px solid var(--jsj-pg-copper,#c8884a);outline-offset:2px}
/* The whole row lights up too, so a ticked option is readable at a glance
   rather than only by its 18px box. */
.jsj-trade__option:has(input:checked){color:#fff;background:rgba(46,107,230,.10)}

/* ---- compare table on a phone ---------------------------------------------
   Reported 2026-08-26: "difficult to see the data". The desktop template is
   `200px repeat(n, minmax(235px, 280px))` with a min-width of 200 + n*250 —
   which on a 375px screen spends 200px, over half the viewport, on the label
   gutter and leaves 175px of a 235px vehicle column showing. You end up
   reading a third of one car at a time.

   grid-auto-flow rather than repeat(): the column count is only known
   server-side, and repeat() will not take a var() for its repetition count in
   any engine. Declaring the label track explicitly and letting the vehicle
   columns auto-flow sidesteps that entirely and works for two, three or four.

   Each vehicle column is then sized to the rest of the viewport, so exactly one
   car is on screen beside its labels and the table is swiped through car by
   car — which is how a comparison is read on a phone anyway. min-width has to
   be beaten with !important because it is set inline, per column count. */
@media (max-width:600px){
  /* NO scroll-snap here. It was tried and removed the same day: snapping to
     .jsj-compare__col aligns a car to the container's start edge, and the
     start edge is behind the sticky label column — so the table loaded
     already scrolled, with the first car half-hidden under its own labels. */
  .jsj-compare__scroll{border-radius:12px}
  .jsj-compare__table{min-width:0!important}
  .jsj-compare__row{
    grid-template-columns:104px;
    grid-auto-flow:column;
    grid-auto-columns:calc(100vw - 132px);
  }
  .jsj-compare__label{padding:11px 11px}
  .jsj-compare__label span{font-size:11.5px;line-height:1.35}
  .jsj-compare__cell{padding:11px 13px}
  .jsj-compare__cell span{font-size:13.5px}
  .jsj-compare__col{padding:13px;gap:8px}
  .jsj-compare__col-media img{height:96px}
}
