/* ============================================================
   ClearRound "Web2" — premium concept design
   Brief: plan/Inspiration_NyClearound.txt, positioned between
   Range Rover × Rolex × Hermès. Every color below reads from
   --w2-* tokens redefined per branding profile, so the whole
   canvas (not just the accent) can flip from the default dark
   cinematic look to a light one (NewClearround) while staying
   legible either way. The hero section is the one exception —
   it sits on a photo with a fixed dark scrim, so its text stays
   fixed light regardless of profile.
   ============================================================ */

.w2 {
    --w2-bg:        #101214;
    --w2-bg-alt:    #16181b;
    --w2-bg-alt2:   #1c1f22;
    --w2-fg:        #F2EFE9;
    --w2-heading:   #ffffff;
    --w2-mute:      rgba(242,239,233,.68);
    --w2-line:      rgba(242,239,233,.12);
    --w2-nav-bg:    rgba(16,18,20,.85);
    --w2-footer-bg: #0b0c0e;
    --w2-btn-outline: rgba(255,255,255,.4);
    --w2-accent:    #C9A66B; /* champagne gold — default look */

    background: var(--w2-bg);
    color: var(--w2-fg);
    font-family: var(--cr-font-body);
    min-height: 100vh;
}

/* Per-profile accent: most themes' own primary already reads well on a
   dark canvas; Mercedes' and NewClearround's primaries are too dark/near-black
   there, so those two borrow their theme's secondary color instead. */
html[data-theme="nk"]            .w2, html[data-theme="sangvaruhuset"] .w2,
html[data-theme="svenskttenn"]   .w2, html[data-theme="noir"]          .w2 {
    --w2-accent: var(--cr-primary);
}
html[data-theme="mercedes"] .w2,
html[data-theme="newclearround"] .w2 { --w2-accent: var(--cr-secondary); }

/* NewClearround — the one profile that switches Web2 to a genuinely light
   canvas (per its own brief), reusing the CRM's light tokens for this theme. */
html[data-theme="newclearround"] .w2 {
    --w2-bg:        var(--cr-bg);
    --w2-bg-alt:    var(--cr-sand);
    --w2-bg-alt2:   #ffffff;
    --w2-fg:        var(--cr-text);
    --w2-heading:   var(--cr-text);
    --w2-mute:      var(--cr-gray-mid);
    --w2-line:      rgba(26,29,33,.12);
    --w2-nav-bg:    rgba(248,249,249,.9);
    --w2-footer-bg: var(--cr-sand);
    --w2-btn-outline: rgba(26,29,33,.3);
}

.w2 * { box-sizing: border-box; }
.w2 img { max-width: 100%; height: auto; display: block; }
:where(.w2) a { color: inherit; text-decoration: none; }
.w2 h1, .w2 h2, .w2 h3 { font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 600; line-height: 1.15; color: var(--w2-heading); }
.w2 h1 { font-size: clamp(2.75rem, 6vw, 5rem); font-weight: 600; }
.w2 h2 { font-size: clamp(2rem, 4.5vw, 3rem); }
.w2 h3 { font-size: clamp(1.2rem, 2.5vw, 1.5rem); font-family: var(--cr-font-body); font-weight: 600; }
.w2 p { color: var(--w2-mute); line-height: 1.7; }
.w2-container { max-width: 1180px; margin: 0 auto; padding: 0 2rem; }
.w2-eyebrow { display: block; font-size: .78rem; letter-spacing: 3px; text-transform: uppercase; color: var(--w2-accent); margin-bottom: 1rem; }
.w2-center { text-align: center; }
.w2-section { padding: 7rem 0; }
.w2-section-alt { background: var(--w2-bg-alt); }

/* ── Startpage announcement banner (admin-managed via /utilities/banners) —
   a full-width strip pinned to the viewport's top or bottom edge, only
   shown on the Web2 startpage. When pinned to the top, it sits above the
   fixed nav, which is pushed down to sit just below it (see has-top-banner).
   --w2-banner-top-h is set by web2.js to the banner's actual rendered
   height, since it varies with message length/wrapping and the logo. */
.w2-banner {
    position: fixed; left: 0; right: 0; z-index: 1100;
    min-height: 44px; display: flex; align-items: center; justify-content: center;
    gap: .75rem; background: var(--w2-accent); color: var(--w2-bg);
    font-size: .85rem; font-weight: 600; letter-spacing: .3px; text-align: center;
    padding: .5rem 3rem;
}
a.w2-banner { cursor: pointer; transition: opacity .15s ease; }
a.w2-banner:hover { opacity: .9; }
.w2-banner-top { top: 0; }
.w2-banner-bottom { bottom: 0; }
.w2-banner-logo { height: 22px; width: auto; flex-shrink: 0; }
/* Caps the logo at 75% of its own banner's actual rendered height (set by
   web2.js) so a taller/wrapped banner never lets the logo visually dominate
   or outgrow the strip — max-height wins over the 22px default when the
   banner is short enough to make that necessary. */
.w2-banner-top .w2-banner-logo { max-height: calc(var(--w2-banner-top-h, 44px) * 0.75); }
.w2-banner-bottom .w2-banner-logo { max-height: calc(var(--w2-banner-bottom-h, 44px) * 0.75); }
.w2.has-top-banner .w2-nav { top: var(--w2-banner-top-h, 44px); }

/* ── Nav ── */
.w2-nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; background: var(--w2-nav-bg); backdrop-filter: blur(10px); border-bottom: 1px solid var(--w2-line); transition: top .2s ease; }
.w2-nav-wrapper { max-width: 1400px; margin: 0 auto; padding: 1.1rem 2rem; display: flex; align-items: center; gap: 2.5rem; }
.w2-wordmark {
    display: inline-flex; align-items: center; gap: .5rem;
    font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.4rem; letter-spacing: 4px; color: var(--w2-heading);
}
.w2-wordmark-icon { height: 1em; width: auto; flex-shrink: 0; }
/* Sized to match the "CLEAR ROUND" text it replaced: 1em of the wordmark's
   own font-size, exactly like the horse icon beside it, so header (1.4rem)
   and footer (1.1rem) each keep their previous proportions. Selector needs
   the "img" type (not just the class) to out-rank the earlier `.w2 img`
   reset, which otherwise forces height:auto and lets this render at its
   raw ~987×98px intrinsic size. */
img.w2-wordmark-text { height: .5em; width: auto; flex-shrink: 0; }
/* Mobile-only menu toggle — hidden by default (and so invisible/inert on
   desktop); only switched on inside the 980px mobile media query below. */
.w2-hamburger {
    display: none; flex-direction: column; justify-content: center; gap: 5px;
    width: 30px; height: 30px; padding: 0; background: none; border: none; cursor: pointer; flex-shrink: 0;
}
.w2-hamburger span { display: block; height: 2px; width: 100%; background: var(--w2-heading); border-radius: 2px; transition: transform .2s ease, opacity .2s ease; }
.w2-hamburger.w2-hamburger-active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.w2-hamburger.w2-hamburger-active span:nth-child(2) { opacity: 0; }
.w2-hamburger.w2-hamburger-active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.w2-nav-menu { display: flex; gap: 2rem; flex: 1; justify-content: center; flex-wrap: wrap; }
.w2-nav-menu a { font-size: .85rem; letter-spacing: .5px; color: var(--w2-mute); }
.w2-nav-menu a:hover { color: var(--w2-accent); }
/* Vehicle Book's nav link should read as a quiet utility link, not another
   primary nav item — smaller and more muted than its siblings. */
.w2-nav-discreet { font-size: .75rem; opacity: .6; }
.w2-nav-discreet:hover { opacity: 1; }
.w2-nav-actions { display: flex; align-items: center; gap: 1rem; }
/* Same orange badge as the CRM's top bar; only rendered outside Production. */
.w2-env-badge {
    padding: .3rem .75rem; border-radius: 4px;
    background: #d97706; color: #fff;
    font-family: system-ui, sans-serif; font-size: .75rem; font-weight: 700;
    letter-spacing: .06em; text-transform: uppercase; white-space: nowrap;
}
.w2-theme-switcher { min-width: 150px; }
.w2-lang-switch { display: flex; gap: .4rem; align-items: center; }
.w2-lang-switch button {
    background: none; border: none; padding: .1rem; line-height: 1; cursor: pointer;
    display: flex; align-items: center;
    opacity: .4; filter: grayscale(60%); transition: opacity .2s ease, filter .2s ease;
}
.w2-lang-switch button:hover { opacity: .75; }
.w2-lang-switch button.active { opacity: 1; filter: none; }
.w2-flag-icon { height: 14px; width: auto; display: block; border-radius: 1px; }
.w2-btn-cta { border: 1px solid var(--w2-accent); color: var(--w2-accent) !important; padding: .55rem 1.4rem; font-size: .8rem; letter-spacing: 1px; text-transform: uppercase; border-radius: 2px; white-space: nowrap; transition: all .25s ease; }
.w2-btn-cta:hover { background: var(--w2-accent); color: #14181c !important; }
@media (max-width: 980px) {
    .w2-hamburger { display: flex; order: -1; }
    .w2-nav-menu { display: none; }
    .w2-nav-menu.w2-nav-menu-open {
        display: flex; flex-direction: column; align-items: flex-start;
        position: absolute; top: 100%; left: 0; right: 0;
        background: var(--w2-nav-bg); backdrop-filter: blur(10px);
        border-bottom: 1px solid var(--w2-line);
        padding: 1.25rem; gap: 1.25rem;
    }
    /* Three-slot phone header: hamburger pinned left, wordmark centered
       (via absolute positioning so it ignores the flex distribution),
       language switcher pushed to the right. */
    .w2-nav-wrapper { padding: .85rem 1.25rem; gap: .75rem; position: relative; justify-content: space-between; }
    /* Centering an auto-width absolutely-positioned box with left:50% clamps
       its shrink-to-fit width to whatever space remains to the right of that
       50% mark — at phone widths that's narrower than "CLEAR ROUND", so it
       wrapped onto two lines and spilled out of the header. Forcing the
       intrinsic (unwrapped) width sidesteps that clamp.
       Scoped to the nav's own wordmark only — the footer reuses the same
       .w2-wordmark class for its (already correctly static) logo, and an
       unscoped rule here would make that copy position:absolute too, with
       no positioned ancestor of its own to anchor to, sending it flying to
       the middle of the whole document instead of staying in the footer. */
    .w2-nav-wrapper .w2-wordmark { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: max-content; white-space: nowrap; }
    .w2-nav-actions { gap: .5rem; }
    /* Web2 always forces the NewClearround profile on load (see Web2Layout's
       OnInitialized + the pathname check in App.razor's head script), so the
       picker itself is just extra clutter on a phone header — hide it. */
    .w2-theme-switcher { display: none; }
    /* The nav's own CTA gets tight for space next to the language switcher
       on a phone header; every page already repeats this same call-to-action
       in its own content, so drop it here only. */
    .w2-nav-actions .w2-btn-cta { display: none; }
}

/* ── Buttons ── */
.w2-btn-primary, .w2-btn-secondary {
    display: inline-block; padding: 1rem 2.25rem; font-size: .85rem; letter-spacing: 1.5px;
    text-transform: uppercase; border-radius: 2px; transition: all .25s ease; cursor: pointer;
    min-width: 220px; text-align: center;
}
.w2-btn-primary { background: var(--w2-accent); color: #fff; border: 1px solid var(--w2-accent); }
.w2-btn-primary:hover { background: transparent; color: var(--w2-accent); }
.w2-btn-secondary { background: transparent; color: var(--w2-heading); border: 1px solid var(--w2-btn-outline); }
.w2-btn-secondary:hover { border-color: var(--w2-heading); }
.w2-actions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; }

/* ── Hero — always a photo with a fixed dark scrim, so its text stays
   fixed light regardless of the active profile (incl. NewClearround). ── */
.w2-hero {
    position: relative; min-height: 100vh; display: flex; align-items: center; justify-content: center;
    text-align: center; overflow: hidden;
    background: #101214; /* shows briefly before the video paints, and if it fails to load */
}
.w2-hero-video {
    position: absolute; inset: 0; z-index: 0;
    width: 100%; height: 100%; object-fit: cover;
}
.w2-hero-overlay {
    position: absolute; inset: 0; z-index: 1;
    background: linear-gradient(to bottom, rgba(16,18,20,.35), rgba(16,18,20,.92));
}
.w2-hero-scroll-dim {
    position: absolute; inset: 0; z-index: 1;
    background: #E9ECEC;
    opacity: 0;
    pointer-events: none;
}
.w2-hero-content { position: relative; z-index: 2; max-width: 780px; padding: 0 1.5rem; }
.w2-hero-content h1 { color: #fff; text-shadow: 0 4px 30px rgba(0,0,0,.5); margin-bottom: 1.25rem; }
/* The hero always sits over a dark video, regardless of branding profile,
   so its secondary button stays fixed light too (same reasoning as the
   fixed-white h1/p above) instead of reading the theme-reactive tokens. */
.w2-hero-content .w2-btn-secondary { color: #fff; border-color: rgba(255,255,255,.6); }
.w2-hero-content .w2-btn-secondary:hover { border-color: #fff; background: rgba(255,255,255,.1); }
.w2-hero-content p { color: rgba(255,255,255,.9); font-size: 1.15rem; max-width: 600px; margin: 0 auto 2.25rem; }

/* ── Loading spinner (Web2Loader.razor) — shown while awaiting an API/DB
   response, e.g. the models list or the in-stock list. Positioned within
   normal page flow (not viewport-fixed) since it replaces in-place content
   inside a section rather than covering the whole page. */
.w2-loader-wrap { display: flex; align-items: center; justify-content: center; padding: 4rem 0; }
.w2-loader { position: relative; width: 64px; height: 64px; border-radius: 50%; perspective: 800px; }
.w2-loader-inner { position: absolute; box-sizing: border-box; width: 100%; height: 100%; border-radius: 50%; }
.w2-loader-inner.one { left: 0; top: 0; animation: w2-loader-rotate-one 1s linear infinite; border-bottom: 3px solid var(--w2-accent); }
.w2-loader-inner.two { right: 0; top: 0; animation: w2-loader-rotate-two 1s linear infinite; border-right: 3px solid var(--w2-accent); }
.w2-loader-inner.three { right: 0; bottom: 0; animation: w2-loader-rotate-three 1s linear infinite; border-top: 3px solid var(--w2-accent); }

@keyframes w2-loader-rotate-one {
    0% { transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); }
    100% { transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); }
}
@keyframes w2-loader-rotate-two {
    0% { transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); }
    100% { transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); }
}
@keyframes w2-loader-rotate-three {
    0% { transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); }
    100% { transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); }
}

/* ── Pillars / grids ── */
.w2-pillars { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 2.5rem; margin-top: 3rem; }
/* Safety page — longer, two-paragraph pillar text reads better as two wide
   columns with more rows than the usual auto-fit (3-4 narrow columns). */
.w2-pillars-2col { grid-template-columns: repeat(2, 1fr); }
.w2-pillar { text-align: center; padding: 0 1rem; }
.w2-pillar h3 { color: var(--w2-accent); text-transform: uppercase; letter-spacing: 1px; font-size: .95rem; margin-bottom: .75rem; }

.w2-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 2rem; }

.w2-safety-grid { display: grid; grid-template-columns: 1fr 1fr; grid-auto-rows: 1fr; gap: .75rem; aspect-ratio: 4/5; }
.w2-safety-grid a { display: block; width: 100%; height: 100%; }
.w2-safety-grid img {
    width: 100%; height: 100%; object-fit: cover; border-radius: 4px; border: 1px solid var(--w2-line);
    transition: opacity .25s ease, transform .25s ease, box-shadow .25s ease;
}
/* Hovering a feature-list item dims the other three photos and highlights
   the one matching it (paired by position: 1st li ↔ 1st image, etc). Scoped
   to just the first 4 items — the list has since grown with facts that have
   no matching photo in the grid, and without this the base dim rule would
   fire for those too, greying out every image with nothing to highlight.
   Both the list items and the photos now link to /web2/sakerhet, each
   wrapped in an <a> — the img is no longer a direct grid child, so the
   pairing below matches on the wrapping <a>'s position instead. */
#sakerhet .w2-split:has(.w2-feature-list li:nth-child(-n+4):hover) .w2-safety-grid img { opacity: .4; }
#sakerhet .w2-split:has(.w2-feature-list li:nth-child(1):hover) .w2-safety-grid a:nth-child(1) img,
#sakerhet .w2-split:has(.w2-feature-list li:nth-child(2):hover) .w2-safety-grid a:nth-child(2) img,
#sakerhet .w2-split:has(.w2-feature-list li:nth-child(3):hover) .w2-safety-grid a:nth-child(3) img,
#sakerhet .w2-split:has(.w2-feature-list li:nth-child(4):hover) .w2-safety-grid a:nth-child(4) img {
    opacity: 1;
    transform: scale(1.03);
    box-shadow: 0 0 0 3px var(--w2-accent);
}

.w2-card {
    display: block; background: var(--w2-bg-alt2); border: 1px solid var(--w2-line); border-radius: 4px;
    padding: 2.5rem 2rem; transition: transform .25s ease, border-color .25s ease;
}
.w2-card:hover { transform: translateY(-4px); border-color: var(--w2-accent); }
.w2-card h3 { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.6rem; font-weight: 600; color: var(--w2-heading); margin-bottom: .75rem; }
.w2-card-tag {
    display: flex; align-items: center; gap: .35rem;
    font-size: .8rem; /* 50% of .w2-card h3's 1.6rem */
    letter-spacing: 2px; text-transform: uppercase; color: var(--w2-accent); margin-bottom: .4rem;
}
.w2-detail-tag { font-size: clamp(1.375rem, 3vw, 2.5rem); /* 50% of .w2 h1 */ margin-bottom: .6rem; gap: .5rem; }
.w2-cr-badge { width: 1em; height: 1.24em; flex-shrink: 0; color: currentColor; opacity: .55; }
/* "Clear Round" coachbuilder tag borrows the nav wordmark's own typographic
   identity (see .w2-wordmark) instead of the plain uppercase tag style used
   for every other coachbuilder. */
.w2-card-tag-wordmark {
    font-family: 'Cormorant Garamond', Georgia, serif;
    letter-spacing: 1px; text-transform: uppercase; color: var(--w2-heading);
}
.w2-card a { color: var(--w2-accent); font-size: .85rem; letter-spacing: .5px; }
.w2-card-media {
    aspect-ratio: 16 / 10; margin: -2.5rem -2rem 1.5rem; border-radius: 4px 4px 0 0; overflow: hidden;
    background: linear-gradient(155deg, var(--w2-bg-alt2), var(--w2-bg)); display: flex;
    align-items: center; justify-content: center; color: var(--w2-mute); font-size: 2rem;
}
.w2-card-media img { width: 100%; height: 100%; object-fit: cover; }

/* Models list (/web2/modeller) — deliberately NOT .w2-card: that panel's own
   background/border/gradient read as a boxed tile sitting on top of the
   section, which looked inconsistent across five photos of differing
   proportions. These tiles carry no background or border of their own, so
   they share the section's plain canvas uniformly, and each truck is shown
   in full rather than cropped to fill it. Sized by WIDTH (not
   object-fit:contain's own width-or-height-whichever-fits logic) so every
   truck reads at roughly the same size regardless of its own photo's aspect
   ratio — a wide side-profile shot and a narrower three-quarter shot would
   otherwise fill very different fractions of the frame. max-height is just
   a safety cap for an unusually tall photo. */
.w2-model-grid { row-gap: 3rem; }
.w2-model-tile { display: block; text-align: center; }
.w2-model-tile-media {
    aspect-ratio: 16 / 10; display: flex; align-items: center; justify-content: center;
    overflow: hidden; margin-bottom: 1.25rem;
}
.w2-model-tile-media img { width: 75%; height: auto; max-height: 100%; object-fit: contain; transition: width .25s ease; }
.w2-model-tile:hover .w2-model-tile-media img { width: 80%; }
.w2-model-tile h3 { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.6rem; font-weight: 600; color: var(--w2-heading); margin-bottom: .5rem; }
.w2-model-tile p { color: var(--w2-mute); margin-bottom: .75rem; }

/* ── Vehicle detail (Web2 lager/{id}) — always light, like the model list. ── */
.w2-back-link { display: inline-block; margin-bottom: 1.5rem; color: var(--w2-accent); font-size: .85rem; letter-spacing: .5px; }
.w2-vehicle-detail-grid { display: grid; grid-template-columns: 3fr 2fr; gap: 3rem; align-items: start; margin-bottom: 5rem; }
@media (max-width: 860px) { .w2-vehicle-detail-grid { grid-template-columns: 1fr; } }
.w2-vehicle-photo {
    aspect-ratio: 4 / 3; overflow: hidden;
    background: linear-gradient(155deg, #eef0f0, #e2e5e5); display: flex;
    align-items: center; justify-content: center; color: #9aa0a3; font-size: 3rem;
}
.w2-vehicle-photo img { width: 100%; height: 100%; object-fit: cover; }
.w2-vehicle-price {
    display: flex; align-items: center; justify-content: space-between;
    margin-top: 1.25rem; padding: 1.25rem 1.5rem;
    background: var(--w2-bg-alt2); border: 1px solid var(--w2-line); border-radius: 4px;
}
.w2-vehicle-price-label { font-size: .78rem; letter-spacing: 2px; text-transform: uppercase; color: var(--w2-mute); }
.w2-vehicle-price-value { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.75rem; font-weight: 600; color: var(--w2-accent); }

/* Quick-fact chips — same shape/type treatment as .w2-btn-primary/secondary
   (rounded 2px corners, uppercase, letter-spacing) but non-interactive.
   Fixed dark-on-light colors, like the rest of this always-light page,
   rather than the theme-reactive --w2-heading/--w2-btn-outline tokens. */
.w2-fact-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 1.25rem; }
@media (max-width: 560px) { .w2-fact-grid { grid-template-columns: repeat(2, 1fr); } }
.w2-fact-box {
    display: flex; align-items: center; gap: .75rem;
    padding: 1rem 1.1rem; border: 1px solid rgba(20,24,28,.2); border-radius: 2px;
}
.w2-fact-icon { width: 22px; height: 22px; flex-shrink: 0; color: var(--w2-accent); }
.w2-fact-value { font-size: .8rem; letter-spacing: 1px; text-transform: uppercase; font-weight: 600; color: #14181c; }
/* A "specification sheet" look: cream paper tone, soft drop shadow like a
   physical sheet resting on the page, thin rules between each fact. */
.w2-spec-sheet {
    border: 1px solid rgba(20,24,28,.08); border-radius: 2px;
    padding: 2rem 2.25rem;
}
.w2-spec-sheet h3 {
    font-family: 'Cormorant Garamond', Georgia, serif; text-transform: uppercase;
    letter-spacing: 2px; font-size: 1.15rem; color: #14181c; margin-bottom: 1.25rem;
    padding-bottom: 1rem; border-bottom: 1px solid rgba(20,24,28,.15);
}
.w2-spec-row { display: flex; justify-content: space-between; gap: 1rem; padding: .65rem 0; border-bottom: 1px solid rgba(20,24,28,.1); font-size: .92rem; }
.w2-spec-row:last-child { border-bottom: none; }
.w2-spec-label { color: #6b6f73; }
.w2-spec-value { color: #14181c; font-weight: 600; text-align: right; }

/* Compact model list — always light, like the signposts, since it sits in
   a plain content section rather than over a photo. */
.w2-model-list {
    display: flex; flex-direction: column; gap: 1px;
    background: rgba(20,24,28,.1); border: 1px solid rgba(20,24,28,.1);
    border-radius: 6px; overflow: hidden; max-width: 900px; margin: 0 auto;
}
.w2-model-row {
    display: flex; align-items: center; gap: 1.5rem;
    background: #fff; padding: 1.1rem 1.5rem; transition: background .2s ease;
}
.w2-model-row:hover { background: #f5f6f6; }
.w2-model-row img { width: 72px; height: 72px; object-fit: contain; border-radius: 4px; flex-shrink: 0; }
.w2-model-row-body { flex: 1; min-width: 0; }
.w2-model-row-tag { display: block; font-size: .7rem; letter-spacing: .5px; text-transform: uppercase; color: var(--w2-mute); margin-bottom: .15rem; }
.w2-model-row-body h3 { font-family: var(--cr-font-body); text-transform: uppercase; font-weight: 800; letter-spacing: .3px; font-size: 1.05rem; color: #14181c; margin-bottom: .15rem; }
.w2-model-row-body p { color: #6b6f73; font-size: .88rem; margin: 0; }
/* Styled like .w2-btn-primary (same class added in markup) — this rule only
   adds the flex-layout bit that button needs to sit correctly in a row;
   it must NOT redeclare font-size/color/etc., since as the later rule in
   the cascade it would win over .w2-btn-primary's and — worst of all —
   repaint the button's own label the same accent color as its background. */
.w2-model-row-cta { flex-shrink: 0; }

@media (max-width: 760px) {
    /* Compact edge-to-edge rows with a bigger flush-left thumbnail and a
       trailing chevron, closer to a native "vehicle list" pattern. */
    .w2-model-list { border-radius: 0; border-left: none; border-right: none; max-width: none; }
    .w2-container:has(> .w2-model-list) { padding: 0; }
    .w2-model-row { padding: 0; gap: 0; }
    /* Scales down on narrower phones instead of staying a fixed 110px, so
       the row's image + text + button always fit the screen width rather
       than forcing the row (or the whole page) to overflow horizontally. */
    .w2-model-row img { width: clamp(64px, 26vw, 110px); height: clamp(64px, 26vw, 110px); border-radius: 0; }
    .w2-model-row-body { padding: .75rem 1rem; }
    .w2-model-row-tag { display: none; }
    .w2-model-row-body h3 { font-size: .95rem; }
    .w2-model-row-body p { font-size: .82rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    /* Same button, just scaled down to fit the compact flush-edge row —
       .w2-btn-primary's own 220px min-width and generous padding are sized
       for a standalone hero CTA, not a trailing element in a list row. Also
       cancels the general mobile rule (below) that stretches every button
       to width:100% for stacked hero/CTA sections — this one isn't stacked,
       it's a trailing flex item next to the row's text. */
    .w2-model-row-cta.w2-btn-primary { width: auto; min-width: 0; padding: .5rem .9rem; font-size: .7rem; margin-right: 1rem; }
    /* Contact rows carry an avatar rather than a photo thumbnail, and their
       details line (role · email · phone) needs to keep wrapping rather
       than being clipped like the vehicle-photo rows above. They also keep
       side margins (and their original rounded card look) instead of the
       vehicle list's edge-to-edge treatment. */
    .w2-container:has(> .w2-contact-list) { padding: 0 1.25rem; }
    .w2-contact-list { border-radius: 6px; border-left: 1px solid rgba(20,24,28,.1); border-right: 1px solid rgba(20,24,28,.1); }
    /* Unlike the flush vehicle-photo rows above, contact rows keep their own
       card frame (the border-left/right above), so the avatar needs some
       breathing room from it instead of touching it edge-to-edge. */
    .w2-contact-list .w2-model-row { padding: 1rem; gap: 1rem; }
    .w2-contact-list .w2-model-row img { width: 64px; height: 64px; }
    .w2-contact-list .w2-model-row-body { padding: 0; }
    .w2-contact-list .w2-model-row-body p { white-space: normal; overflow: visible; text-overflow: unset; }
}

.w2-lede { max-width: 720px; margin: 0 auto 1.5rem; font-size: 1.05rem; }

/* ── Feature list (Säkerhet) ── */
.w2-feature-list { list-style: none; margin: 2rem 0; padding: 0; max-width: 520px; }
.w2-feature-list li { padding: 1rem 0; border-bottom: 1px solid var(--w2-line); font-size: 1.05rem; color: var(--w2-heading); transition: color .2s ease; }
.w2-feature-list li:hover { color: var(--w2-accent); }

/* Grouped equipment checklist (model pages' "Included as standard") — a
   denser variant of .w2-feature-list, broken into labelled categories
   instead of one long flat list. Always sits on an always-light section,
   like the spec sheet next to it, so colors are fixed rather than theme
   tokens. */
.w2-feature-group-label {
    font-size: .72rem; letter-spacing: 1.3px; text-transform: uppercase; font-weight: 700;
    color: #6b6f73; margin: 1.75rem 0 .5rem;
}
.w2-feature-group-label:first-of-type { margin-top: 0; }
.w2-feature-list-compact { list-style: none; margin: 0; padding: 0; }
.w2-feature-list-compact li { padding: .6rem 0; border-bottom: 1px solid rgba(20,24,28,.08); font-size: .92rem; color: #14181c; }
.w2-feature-list-compact li:last-child { border-bottom: none; }
.w2-split { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; }
@media (max-width: 860px) { .w2-split { grid-template-columns: 1fr; } }
.w2-media-block {
    aspect-ratio: 4/5; border-radius: 4px; overflow: hidden;
    background: linear-gradient(155deg, var(--w2-bg-alt2), var(--w2-bg));
    border: 1px solid var(--w2-line);
    display: flex; align-items: center; justify-content: center;
    font-size: 3rem; color: var(--w2-mute);
}

/* ── Stats / warranty badges ── */
.w2-stats { display: flex; gap: 3rem; justify-content: center; flex-wrap: wrap; margin-top: 2.5rem; }
.w2-stat { text-align: center; }
.w2-stat strong { display: block; font-family: 'Cormorant Garamond', Georgia, serif; font-size: 2.75rem; color: var(--w2-accent); font-weight: 600; }
.w2-stat span { font-size: .85rem; letter-spacing: .5px; color: var(--w2-mute); text-transform: uppercase; }

/* ── Testimonials ── */
.w2-quote-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 2.5rem; }
.w2-quote { border-left: 2px solid var(--w2-accent); padding-left: 1.75rem; }
.w2-quote p { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.4rem; font-style: italic; color: var(--w2-heading); line-height: 1.5; }
.w2-quote cite { font-size: .8rem; letter-spacing: 1px; text-transform: uppercase; color: var(--w2-accent); font-style: normal; }

/* ── Customer references (admin-managed via /utilities/references) —
   two-per-row cards: an italic quote with a giant faint quotation mark on
   the left, a thin divider, and a meta column (name, company/truck model,
   our public comment, optional Instagram link) on the right. ── */
.w2-reference-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2rem; }
.w2-reference-card {
    display: flex; align-items: stretch; gap: 2rem;
    background: var(--w2-bg-alt2); border: 1px solid var(--w2-line); border-radius: 4px;
    padding: 2rem;
}
.w2-reference-quote { position: relative; flex: 1 1 60%; padding-right: 2rem; border-right: 1px solid var(--w2-line); }
.w2-reference-mark {
    position: absolute; top: -2.5rem; left: -.25rem;
    font-family: 'Cormorant Garamond', Georgia, serif; font-size: 15rem; line-height: 1;
    color: var(--w2-heading); opacity: .1; pointer-events: none;
}
.w2-reference-quote p { position: relative; font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.3rem; font-style: italic; color: var(--w2-heading); line-height: 1.6; }
.w2-reference-statement {
    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 7; overflow: hidden;
}
.w2-reference-more {
    display: none; margin-top: .5rem; padding: 0; background: none; border: none;
    font-family: inherit; font-size: .85rem; letter-spacing: .3px; text-transform: uppercase;
    color: var(--w2-accent); cursor: pointer; text-decoration: underline; text-underline-offset: 3px;
}
.w2-reference-quote.is-overflowing .w2-reference-more { display: inline-block; }
.w2-reference-modal-backdrop {
    position: fixed; inset: 0; background: rgba(0, 0, 0, .65); z-index: 1000;
    display: flex; align-items: center; justify-content: center; padding: 1.5rem;
}
.w2-reference-modal {
    position: relative; width: 100%; max-width: 640px; max-height: 80vh; overflow-y: auto;
    background: var(--w2-bg-alt2); border-radius: 4px; padding: 3rem 2.5rem 2.5rem;
}
.w2-reference-modal p { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.3rem; font-style: italic; color: var(--w2-heading); line-height: 1.6; }
.w2-reference-modal h4 { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.3rem; font-weight: 600; color: var(--w2-heading); margin: 1.5rem 0 0; }
.w2-reference-modal-close {
    position: absolute; top: .75rem; right: 1rem; background: none; border: none;
    font-size: 1.75rem; line-height: 1; color: var(--w2-mute); cursor: pointer;
}
.w2-reference-modal-close:hover { color: var(--w2-heading); }
.w2-reference-meta { flex: 1 1 40%; display: flex; flex-direction: column; justify-content: center; gap: .5rem; }
.w2-reference-meta h4 { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.4rem; font-weight: 600; color: var(--w2-heading); margin: 0; }
.w2-reference-tag { font-size: .78rem; letter-spacing: 1px; text-transform: uppercase; color: var(--w2-mute); margin: 0; }
.w2-reference-comment { font-size: .85rem; color: var(--w2-mute); margin: 0; }
.w2-reference-insta {
    display: flex; align-items: center; gap: .6rem; margin-top: .5rem;
    color: var(--w2-accent); font-size: .78rem; letter-spacing: .3px; line-height: 1.4;
}
.w2-reference-insta svg { width: 26px; height: 26px; flex-shrink: 0; }
@media (max-width: 760px) {
    .w2-reference-grid { grid-template-columns: 1fr; gap: 1.5rem; }
    .w2-reference-card { flex-direction: column; gap: 1.25rem; padding: 1.5rem; }
    .w2-reference-quote { padding-right: 0; border-right: none; border-bottom: 1px solid var(--w2-line); padding-bottom: 1.25rem; }
}

/* ── Model signposts — a small photo collage on one side, plain light
   background on the other with just a bold model name, a one-line
   description, an "Explore" button and a secondary text link. Deliberately
   always light (like a dedicated showroom wall), independent of the
   page's own dark/light profile — the same fixed-treatment idea as the
   hero, just inverted. ── */
.w2-signpost { background: #fff; padding: 6.5rem 0; overflow: hidden; }
.w2-signpost--alt { background: #f5f6f6; }
.w2-signpost-inner {
    max-width: 1440px; margin: 0 auto; padding: 0 2rem;
    display: flex; align-items: center; gap: 5rem; flex-wrap: wrap;
}
.w2-signpost--reverse .w2-signpost-inner { flex-direction: row-reverse; }
.w2-signpost-media {
    flex: 1 1 640px;
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    grid-template-rows: 175px 300px;
    grid-template-areas:
        "a a b b b"
        "c d d d d";
    gap: .75rem;
}
/* Row 1 (tile[0] + the model's own primary photo) keeps its original ~40/60
   split and height — "as is". Row 2 reshapes into a small vertical tile
   (the remaining random photo) next to one large horizontal one (the video). */
.w2-signpost-media > :nth-child(1) { grid-area: a; }
.w2-signpost-media > :nth-child(2) { grid-area: b; }
.w2-signpost-media > :nth-child(3) { grid-area: c; }
.w2-signpost-media > :nth-child(4) { grid-area: d; }
/* A 3rd, full-width row for the carousel (Web2Carousel.razor) — only added
   via this modifier class (toggled in Web2ModelDetail.razor when the model
   has carousel images) so a model with none doesn't reserve an empty row. */
.w2-signpost-media.has-carousel {
    grid-template-rows: 175px 300px 300px;
    grid-template-areas:
        "a a b b b"
        "c d d d d"
        "e e e e e";
}
.w2-signpost-media > :nth-child(5) { grid-area: e; }
/* Stable wrapper for a zoomable gallery image (Web2ModelDetail.razor) — keeps
   exactly one direct child per grid slot so the :nth-child rules above still
   hold once Web2ZoomImage's lightbox <div> (a sibling of its <img>, not a
   child) mounts on click; without this, opening any image but the last would
   insert a 5th direct child and shift every image after it into the wrong
   grid-area. */
.w2-signpost-tile { width: 100%; height: 100%; }
/* The carousel's own wrapper for grid slot "e" — deliberately a different
   class from .w2-signpost-tile (just below) so its image does NOT pick up
   that class's object-fit:cover cropping rule; Web2Carousel scales its own
   image to fit instead. */
.w2-signpost-carousel-slot { width: 100%; height: 100%; }
/* Direct-child combinators, not a plain descendant selector: the lightbox
   <img class="w2-lightbox-img"> that Web2ZoomImage mounts on click lives one
   level deeper (inside its own .w2-lightbox div, a grandchild of the tile),
   so it must NOT match here — otherwise this rule's object-fit:cover beats
   .w2-lightbox-img's object-fit:contain (higher specificity: class+type vs
   class alone) and the zoomed view shows the same crop as the thumbnail. */
.w2-signpost-media > img,
.w2-signpost-tile > img,
.w2-signpost-media .w2-tile-abstract { width: 100%; height: 100%; border-radius: 2px; object-fit: cover; }
.w2-tile-video { position: relative; width: 100%; height: 100%; border-radius: 2px; overflow: hidden; }
.w2-tile-video video {
    position: absolute; top: 50%; left: 50%;
    width: 100%; height: auto;
    transform: translate(-50%, -50%);
}
.w2-tile-abstract {
    display: flex; align-items: center; justify-content: center;
    font-size: 1.5rem; color: rgba(0,0,0,.35);
    background: linear-gradient(155deg, #e3e5e6, #cfd3d5);
}
.w2-signpost-content { flex: 1 1 280px; max-width: 340px; }
.w2-signpost-content h2 {
    font-family: var(--cr-font-body); color: #14181c; text-transform: uppercase;
    font-weight: 800; letter-spacing: .5px; font-size: 1.6rem; margin-bottom: .6rem;
}
.w2-model-translation { font-size: .85rem; font-style: italic; color: #6b6f73; margin: -.4rem 0 .75rem; }
.w2-signpost-content p { color: #6b6f73; font-size: .95rem; margin-bottom: 1.5rem; }
.w2-signpost-actions { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; }

/* Signposts are always light regardless of the active branding profile,
   but .w2-btn-primary/.w2-btn-secondary normally read the theme-reactive
   --w2-heading token (white under 5 of the 6 profiles) — force the fixed
   dark styling here too, same reasoning as the hero's fixed-light override. */
.w2-signpost .w2-btn-secondary { color: #14181c; border-color: rgba(20,24,28,.3); }
.w2-signpost .w2-btn-secondary:hover { border-color: #14181c; background: rgba(20,24,28,.05); }

@media (max-width: 760px) {
    /* Same content, much less air around it — the desktop values (7rem/
       6.5rem section padding, 5rem gaps, 220px-min buttons) were designed
       for a wide canvas and just read as empty space on a phone. */
    .w2-section { padding: 3rem 0; }
    .w2-container { padding: 0 1.25rem; }
    .w2-pillars, .w2-grid, .w2-quote-grid { gap: 1.5rem; margin-top: 2rem; }
    .w2-pillars-2col { grid-template-columns: 1fr; }
    .w2-card { padding: 1.75rem 1.5rem; }
    .w2-card-media { margin: -1.75rem -1.5rem 1.25rem; }

    .w2-hero { min-height: 100svh; }
    .w2-hero-content h1 { margin-bottom: .85rem; }

    .w2-signpost { padding: 3rem 0; }
    .w2-signpost-inner, .w2-signpost--reverse .w2-signpost-inner {
        flex-direction: column; align-items: stretch; gap: 1rem;
    }
    .w2-signpost-media {
        order: 2;
        flex-basis: auto; /* desktop's 640px flex-basis means "height" once the
                              container above switches to flex-direction: column */
        /* Columns/areas are intentionally NOT overridden here — the desktop
           5-column fr-based grid already scales proportionally with width,
           so keeping it preserves the same 2:3 / 1:4 tile-size ratios. Only
           the row heights need scaling down, kept at the same 175:300 ratio. */
        grid-template-rows: 95px 163px;
    }
    .w2-signpost-media.has-carousel { grid-template-rows: 95px 163px 163px; }
    /* Title + description need to render above the images and the buttons
       below them — display:contents lifts the wrapper out of the way so its
       children become directly orderable alongside the media block. */
    .w2-signpost-content { display: contents; max-width: none; }
    .w2-signpost-content > h2,
    .w2-signpost-content > .w2-model-translation,
    .w2-signpost-content > p { order: 1; }
    .w2-signpost-content > .w2-signpost-actions { order: 3; }

    .w2-btn-primary, .w2-btn-secondary { min-width: 0; width: 100%; padding: .85rem 1.5rem; }
    .w2-actions, .w2-signpost-actions { flex-direction: column; align-items: stretch; }

    .w2-footer { padding: 2.5rem 0 1.25rem; }
}

/* ── Footer ── */
.w2-footer { background: var(--w2-footer-bg); border-top: 1px solid var(--w2-line); padding: 4rem 0 1.5rem; }
.w2-footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 3rem; margin-bottom: 2.5rem; }
@media (max-width: 760px) { .w2-footer-grid { grid-template-columns: 1fr; } }
.w2-footer-brand p { max-width: 320px; margin-top: 1rem; }
.w2-footer-social { margin-top: 1.25rem; }
.w2-social-link {
    display: inline-flex; align-items: center; gap: .65rem;
    color: var(--w2-mute); font-size: .9rem;
    transition: color .2s ease;
}
.w2-social-link:hover { color: var(--w2-accent); }
.w2-social-icon {
    display: flex; align-items: center; justify-content: center;
    width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0;
    border: 1px solid var(--w2-btn-outline); color: inherit;
    transition: border-color .2s ease;
}
.w2-social-icon svg { width: 17px; height: 17px; }
.w2-social-link:hover .w2-social-icon { border-color: var(--w2-accent); }
.w2-footer-column h3 { color: var(--w2-heading); font-size: 1rem; margin-bottom: 1rem; text-transform: uppercase; letter-spacing: .5px; }
.w2-footer-column ul { list-style: none; margin: 0; padding: 0; }
.w2-footer-column ul li { margin-bottom: .6rem; }
.w2-footer-column a { color: var(--w2-mute); font-size: .9rem; }
.w2-footer-column a:hover { color: var(--w2-accent); }
.w2-footer-bottom { text-align: center; padding-top: 1.5rem; border-top: 1px solid var(--w2-line); font-size: .8rem; color: var(--w2-mute); }

/* ── Model-page image lightbox (Web2ZoomImage.razor) ── */
.w2-lightbox {
    position: fixed; inset: 0; z-index: 2000;
    background: rgba(10,12,14,.92);
    display: flex; align-items: center; justify-content: center;
    padding: 2rem;
    cursor: zoom-out;
}
.w2-lightbox-img {
    max-width: 90vw; max-height: 85vh; object-fit: contain;
    cursor: zoom-in;
    transition: transform .3s ease;
    touch-action: pinch-zoom;
}
.w2-lightbox-img-zoomed { transform: scale(1.5); cursor: grab; touch-action: none; }
.w2-lightbox-img-zoomed:active { cursor: grabbing; }
.w2-lightbox-close {
    position: absolute; top: 1.25rem; right: 1.5rem; z-index: 1;
    width: 44px; height: 44px; border-radius: 50%;
    background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.3);
    color: #fff; font-size: 1.75rem; line-height: 1; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    transition: background .2s ease;
}
.w2-lightbox-close:hover { background: rgba(255,255,255,.18); }
.w2-lightbox-nav {
    position: absolute; top: 50%; transform: translateY(-50%); z-index: 1;
    width: 48px; height: 48px; border-radius: 50%;
    background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.3);
    color: #fff; font-size: 2rem; line-height: 1; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    transition: background .2s ease;
}
.w2-lightbox-nav:hover { background: rgba(255,255,255,.18); }
.w2-lightbox-nav-prev { left: 1.25rem; }
.w2-lightbox-nav-next { right: 1.25rem; }

/* ── Model-page image carousel (Web2Carousel.razor) — the gallery grid's
   3rd, full-width row, so it spans exactly the gallery's width and fills
   whatever height that grid cell gives it (height:100%), not a size of its
   own. Three columns: a dimmed sliver of the previous slide, the current
   slide, a dimmed sliver of the next — same .75rem gap as the gallery
   tiles above, so it reads as part of the same collage. ── */
/* The single row is pinned to the container's height (minmax(0, 1fr)) and
   every panel gets min-height:0 — an implicit auto row would instead grow
   to each image's natural height, so the row (and with it the chevrons and
   the counter pill) would jump up and down with every slide. */
.w2-carousel {
    width: 100%; height: 100%;
    display: grid; grid-template-columns: 1fr 4fr 1fr; grid-template-rows: minmax(0, 1fr); gap: .75rem;
}
.w2-carousel--single { grid-template-columns: 1fr; }
.w2-carousel-current { position: relative; min-width: 0; min-height: 0; height: 100%; overflow: hidden; border-radius: 2px; }
/* Direct-child selector on the image (not a plain descendant one), same
   reason as the gallery fix: the lightbox's full-screen <img> that
   Web2ZoomImage mounts on click lives one level deeper (inside its own
   .w2-lightbox div), so it must NOT pick up this cover crop — otherwise the
   "zoomed" view shows the same crop as the inline slide. */
.w2-carousel-current > img { width: 100%; height: 100%; object-fit: cover; border-radius: 2px; display: block; }

/* The slivers show the edge of the neighbouring slide that faces the
   current one (the previous slide's right edge, the next slide's left
   edge), so the row reads as one continuous strip. */
.w2-carousel-peek {
    position: relative; min-width: 0; min-height: 0; height: 100%;
    padding: 0; border: 0; background: none; cursor: pointer;
    overflow: hidden; border-radius: 2px;
}
.w2-carousel-peek img { width: 100%; height: 100%; object-fit: cover; display: block; opacity: .45; transition: opacity .25s ease; }
.w2-carousel-peek-prev img { object-position: right center; }
.w2-carousel-peek-next img { object-position: left center; }
.w2-carousel-peek:hover img { opacity: .7; }
.w2-carousel-chevron {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
    color: #fff; filter: drop-shadow(0 1px 3px rgba(0,0,0,.45));
    display: flex;
}
.w2-carousel-chevron svg { width: 14px; height: 24px; display: block; }

/* Crossfade: the outgoing slide is laid over the new one and fades out.
   Rendered before the chevron/counter in the DOM, so those stay on top;
   pointer-events off so clicks reach the new slide underneath. */
.w2-carousel-current > img.w2-carousel-fade,
.w2-carousel-peek img.w2-carousel-fade {
    position: absolute; inset: 0;
    pointer-events: none;
    animation: w2-carousel-fade-out .5s ease forwards;
}
.w2-carousel-peek img.w2-carousel-fade { animation-name: w2-carousel-peek-fade-out; }
@keyframes w2-carousel-fade-out { from { opacity: 1; } to { opacity: 0; } }
@keyframes w2-carousel-peek-fade-out { from { opacity: .45; } to { opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
    .w2-carousel-current > img.w2-carousel-fade,
    .w2-carousel-peek img.w2-carousel-fade { animation: none; opacity: 0; }
}

/* Counter pill on the current slide — translucent dark so it stays legible
   over any photo, independent of the page's branding profile (same fixed
   photo-overlay register as the lightbox chrome). */
.w2-carousel-counter {
    position: absolute; left: 1.75rem; bottom: 1.5rem;
    display: flex; align-items: center; gap: .35rem;
    padding: .4rem .55rem; border-radius: 6px;
    background: rgba(20,24,28,.45); color: #fff;
    font-size: .85rem; font-weight: 600; letter-spacing: .04em;
    backdrop-filter: blur(4px);
}
.w2-carousel-counter span { min-width: 2.75rem; text-align: center; font-variant-numeric: tabular-nums; }
.w2-carousel-counter button {
    padding: .2rem .3rem; border: 0; background: none; color: inherit; cursor: pointer;
    display: flex; opacity: .85;
}
.w2-carousel-counter button:hover { opacity: 1; }
.w2-carousel-counter svg { width: 8px; height: 13px; display: block; }

@media (max-width: 760px) {
    .w2-carousel { grid-template-columns: 1fr 6fr 1fr; gap: .5rem; }
    .w2-carousel-counter { left: .75rem; bottom: .75rem; font-size: .75rem; padding: .3rem .45rem; }
    .w2-carousel-chevron svg { width: 10px; height: 18px; }
}


/* ── Vehicle Book (truck-logbook) — styled to match the Premium PDF
   product sheet (ProductSheetPremiumPdfService.cs): dark cinematic ground,
   cream serif display type, a thin gold rule, uppercase letter-spaced
   labels. Fixed colors regardless of branding profile, same reasoning as
   .w2-hero's fixed-light override — this is meant to feel like a printed
   keepsake handed to the owner, not the site's everyday theme, so it
   doesn't follow NewClearround (or any other profile) switching the rest
   of the page to a light canvas. Exact hex values are copied from the PDF
   service's own constants so the two stay pixel-matched. */
.vb-premium {
    background: #24282C;
    color: #F5EFE2;
}
.vb-premium .w2-eyebrow { color: #C9A66B; }
.vb-premium h1, .vb-premium h2 { color: #F5EFE2; }
.vb-premium .w2-lede { color: #A69C88; }
.vb-premium .w2-btn-primary { background: #C9A66B; border-color: #C9A66B; color: #24282C; }
.vb-premium .w2-btn-primary:hover { background: transparent; color: #C9A66B; }
.vb-premium .w2-btn-primary:disabled { opacity: .55; cursor: default; }
.vb-premium .alert-danger {
    background: rgba(201,90,90,.14); border: 1px solid rgba(201,90,90,.4);
    color: #F2C9C9; border-radius: 2px; font-size: .9rem;
}

.vb-divider { width: 42px; height: 1px; background: #C9A66B; margin: 1.1rem auto 1.75rem; }

.vb-card { background: #1c1f22; border: 1px solid #3A3F44; border-radius: 4px; padding: 1.75rem; }
@media (max-width: 560px) { .vb-card { padding: 1.25rem; } }

.vb-label {
    display: block; font-size: .72rem; letter-spacing: 1.5px; text-transform: uppercase;
    color: #A69C88; margin-bottom: .5rem;
}
.vb-input, .vb-textarea, .vb-file {
    background: #16181b; border: 1px solid #3A3F44; color: #F5EFE2; border-radius: 2px;
    padding: .7rem .9rem; width: 100%; font-family: var(--cr-font-body); font-size: .95rem;
}
.vb-input::placeholder, .vb-textarea::placeholder { color: #6E6656; }
.vb-input:focus, .vb-textarea:focus, .vb-file:focus {
    outline: none; border-color: #C9A66B;
}
.vb-code-input {
    font-family: monospace; font-size: 1.3rem; letter-spacing: .3em; text-align: center;
    text-transform: uppercase;
}

.vb-section-label {
    display: block; text-align: center; font-size: .72rem; letter-spacing: 2px;
    text-transform: uppercase; color: #C9A66B; margin: 2.5rem 0 1.25rem;
}
.vb-muted { color: #A69C88; }

.vb-entry { padding: 1.5rem 0; border-bottom: 1px solid #3A3F44; }
.vb-entry:last-child { border-bottom: none; }
.vb-entry-date { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 1.3rem; color: #F5EFE2; }
.vb-entry-note { color: #A69C88; margin-top: .4rem; margin-bottom: 0; white-space: pre-wrap; line-height: 1.6; }

.vb-attachments { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: .9rem; }
.vb-attachment-image {
    width: 72px; height: 72px; object-fit: cover; border-radius: 2px; border: 1px solid #3A3F44;
}
.vb-attachment-file {
    display: flex; align-items: center; gap: .4rem; font-size: .8rem; color: #A69C88;
    border: 1px solid #3A3F44; border-radius: 2px; padding: .5rem .7rem; transition: all .2s ease;
}
.vb-attachment-file:hover { border-color: #C9A66B; color: #F5EFE2; }

.vb-badge {
    display: inline-flex; align-items: center; gap: .35rem; font-size: .72rem;
    letter-spacing: .5px; color: #A69C88; border: 1px solid #3A3F44; border-radius: 2px;
    padding: .3rem .6rem;
}
