/* ============================================================================
 * sn-overrides.css — JEDINI ručno pisan CSS sloj S-Nautica teme.
 *
 * Kaskada (partials/head.php): sn-fonts → sn-theme (kompajlirani Tailwind,
 * NIKAD se ručno ne edituje) → cookieconsent → auth → flex-toast → OVAJ FAJL.
 * Per-strana shop/tour/charter CSS se učitava kasnije, u <body> — zato se
 * `--sh-*` remap radi kroz `:root:root` (vidi §5).
 *
 * Sekcije 1-5 su redoslijed propisan planom E-tema-asseti.md §9 Faza 3.
 * Sekcije 6-9 su dodate zato što su izmjerene kao stvarni regresi poslije
 * reza; svaka nosi obrazloženje i uslov pod kojim se briše.
 *   1. host `--c-*` tokeni (bloker B-9)  <- BEZ OVOGA SHOP OSTAJE BEZ BOJA
 *   2. `--sn-*` tokeni (S-Nautica paleta, imenovano)
 *   3. body background / boja teksta
 *   4. re-skin FlexCMS widgeta (cookie bar, toast, auth modal)
 *   5. `--sh-*` remap površina (bijele kartice na tamnoj podlozi)
 *   6. `.container` — layout primitiv koji je otišao sa theme-base.css
 *   7. PRIVREMENI most za naslijeđeni header/footer markup
 *   8. popravka PDP galerije (flexbox `min-width:auto` + Swiper)
 *   9. čitljivost native kontrola na tamnoj podlozi
 *  10. forma upita (katalog režim) — samo stanja greške, koja izvor nema
 *
 * Sve boje su doslovno iz `html/css/style.css` (kompajlirani Tailwind output);
 * nijedna nije izmišljena. Referenca vrijednosti:
 *   ink #0A1722 - ink-soft #0E1E2C - accent #B08D57 - accent-dark #977639
 *   heading #F4F6F8 - body #AEB7C2 - silver #C3CBD3 - silver-dark #8A95A1
 *
 * Cache-busting: ručni `?v=` literal u <link> tagu (plan §3 — nema helpera,
 * nema build koraka). Bump PATCH pri svakoj izmjeni ovog fajla.
 * ========================================================================== */


/* ============================================================================
 * 1. HOST TOKENI  (bloker B-9)
 * ----------------------------------------------------------------------------
 * `theme-base.css:11-33` je izašao iz load-a, a njegov `:root` blok je bio
 * jedini izvor ovih 20 tokena. Shop CSS ih koristi na 286 mjesta BEZ fallback
 * vrijednosti (provjereno programski nad fajlovima koji ostaju u load-u:
 * shop-tokens/components/plp/pdp/cart/checkout/reviews). Bez ovog bloka
 * shop nije "off-brand" — on je slomljen (crn tekst, oštri uglovi, bez sjenki).
 *
 * Imena su DOSLOVNO ista kao u theme-base.css; vrijednosti su S-Nautica.
 * Vrijednosti su literalne (ne var(--sn-*)) namjerno — ovaj blok mora
 * preživjeti i ako se sekcija 2 ikad razdvoji u zaseban fajl.
 *
 * 12 od 20 tokena se stvarno koristi bez fallbacka (--c-navy, --c-blue,
 * --c-blue-d, --c-text, --c-muted, --c-border, --c-bg-soft, --radius-sm,
 * --radius, --radius-lg, --shadow, --ease). Preostalih 8 se deklariše po
 * odluci D4 — troše ih fajlovi koji izlaze iz load-a, ali set mora biti
 * kompletan da ponovno uključivanje bilo kog fajla ne vrati AirJet boje.
 * ========================================================================== */
:root {
  /* --- površine ----------------------------------------------------- */
  --c-navy:      #0A1722;              /* ink       — bivše #0a1733 */
  --c-navy-2:    #0E1E2C;              /* ink-soft  — bivše #0e1c3d */
  --c-bg:        #0A1722;              /* ink       — bivše #ffffff */
  --c-bg-soft:   #0E1E2C;              /* ink-soft  — bivše #f1f4f9 */
  --c-bg-cookie: #0E1E2C;              /* ink-soft  — bivše #1e5bd6 */

  /* --- akcent -------------------------------------------------------
     U shopu je `--c-blue` semantički "primarna akcija", ne boja. Mapira se
     na S-Nautica mesing. `--c-blue-d` = rgb(151 118 57) postoji u izvornom
     style.css (tamnija varijanta akcenta) — nije izmišljena. */
  --c-blue:      #B08D57;              /* accent      — bivše #2b5bd7 */
  --c-blue-d:    #977639;              /* accent-dark — bivše #1f49b8 */
  --c-accent:    #B08D57;              /* accent      — bivše #3b82f6 */

  /* --- tipografija --------------------------------------------------- */
  --c-text:      #F4F6F8;              /* heading     — bivše #0f172a */
  --c-muted:     #8A95A1;              /* silver-dark — bivše #64748b */

  /* --- linije --------------------------------------------------------
     Izvor koristi border-white/10 i border-white/15 na tamnoj podlozi;
     .12 je sredina tog raspona i jedini ekvivalent svijetlom #e3e7ee. */
  --c-border:    rgba(255, 255, 255, .12);

  /* --- geometrija -----------------------------------------------------
     Izvor nema imenovane radijus tokene (Tailwind ih peče u utility klase),
     pa se AirJet vrijednosti zadržavaju kao funkcionalno ekvivalentne. */
  --radius-sm:   8px;
  --radius:      12px;
  --radius-lg:   18px;

  /* Sjenke: original je računat za bijelu podlogu (rgba(15,23,42,.06)) i na
     tamnoj je nevidljiv. Prebačeno na crnu sa većom alfom — ista geometrija,
     vidljivo na ink podlozi. */
  --shadow-sm:   0 2px 6px rgba(0, 0, 0, .35);
  --shadow:      0 8px 24px rgba(0, 0, 0, .45);

  /* .wrap iz style.css: max-width:1340px; padding-left/right:1.25rem = 20px. */
  --container:   1340px;               /* bivše 1500px */
  --pad:         20px;
  --header-h:    80px;

  /* cubic-bezier(.22,1,.36,1) postoji u izvornom style.css. */
  --ease:        cubic-bezier(.22, 1, .36, 1);
}


/* ============================================================================
 * 2. `--sn-*` TOKENI — imenovana S-Nautica paleta
 * ----------------------------------------------------------------------------
 * Postoje da se ručno pisana pravila ispod (i budući šabloni) ne oslanjaju na
 * `--c-*` imena koja su naslijeđena od AirJeta i semantički pogrešna
 * ("blue" = mesing). sn-theme.css ih NE koristi — Tailwind je boje ispekao u
 * literale — pa ovaj blok ne može ništa pregaziti.
 * ========================================================================== */
:root {
  --sn-ink:         #0A1722;   /* rgb(10 23 34)    — pozadina sajta */
  --sn-ink-soft:    #0E1E2C;   /* rgb(14 30 44)    — sekcije/kartice */
  --sn-accent:      #B08D57;   /* rgb(176 141 87)  — mesing/zlato */
  --sn-accent-dark: #977639;   /* rgb(151 118 57)  — tamnija varijanta */
  --sn-heading:     #F4F6F8;   /* rgb(244 246 248) */
  --sn-body:        #AEB7C2;   /* rgb(174 183 194) */
  --sn-silver:      #C3CBD3;   /* rgb(195 203 211) */
  --sn-silver-dark: #8A95A1;   /* rgb(138 149 161) */

  --sn-hairline:    rgba(255, 255, 255, .10);
  --sn-hairline-2:  rgba(255, 255, 255, .15);

  --sn-font-body:    Inter, system-ui, sans-serif;
  --sn-font-display: 'Cormorant Garamond', serif;
}


/* ============================================================================
 * 3. BODY
 * ----------------------------------------------------------------------------
 * sn-theme.css već nosi `body{background-color:rgb(10 23 34/…);font-family:
 * Inter…;color:rgb(174 183 194/…)}` — statički izvor to postiže klasom
 * `bg-ink` na <body>, a FlexCMS `$bodyClass` emituje samo kad je neprazan
 * (default.php:68). Ovo je isti izraz kroz tokene, bez izmjene PHP-a
 * (plan §6.3, opcija A) i bez oslanjanja na to da Tailwind base sloj ostane.
 * ========================================================================== */
body {
  background-color: var(--sn-ink);
  color: var(--sn-body);
}


/* ============================================================================
 * 4. RE-SKIN FLEXCMS WIDGETA
 * ========================================================================== */

/* --- 4.1 Cookie bar (Orest Bida CookieConsent v3) -------------------------
 * Vendor izlaže `--cc-*` custom property-je; postavljaju se na `#cc-main`
 * (korijen widgeta) umjesto na `:root` da ne mogu iscuriti na ostatak sajta.
 * Sva imena su provjerena u `:root` bloku cookieconsent.css. */
#cc-main {
  --cc-bg:                            var(--sn-ink-soft);
  --cc-primary-color:                 var(--sn-heading);
  --cc-secondary-color:               var(--sn-body);

  --cc-btn-primary-bg:                var(--sn-accent);
  --cc-btn-primary-color:             var(--sn-ink);
  --cc-btn-primary-hover-bg:          var(--sn-accent-dark);
  --cc-btn-primary-hover-color:       var(--sn-ink);

  --cc-btn-secondary-bg:              rgba(255, 255, 255, .08);
  --cc-btn-secondary-hover-bg:        rgba(255, 255, 255, .14);
  --cc-btn-secondary-hover-color:     var(--sn-heading);
  --cc-btn-secondary-border-color:    var(--sn-hairline-2);
  --cc-btn-secondary-hover-border-color: var(--sn-hairline-2);

  --cc-separator-border-color:        var(--sn-hairline);
  --cc-cookie-category-block-bg:      rgba(255, 255, 255, .04);
  --cc-cookie-category-block-border:  var(--sn-hairline);
  --cc-cookie-category-block-hover-bg: rgba(255, 255, 255, .07);
  --cc-cookie-category-block-hover-border: var(--sn-hairline-2);
  --cc-cookie-category-expanded-block-hover-bg: rgba(255, 255, 255, .07);

  --cc-toggle-off-bg:                 var(--sn-silver-dark);
  --cc-toggle-readonly-bg:            rgba(255, 255, 255, .18);
  --cc-toggle-readonly-knob-bg:       var(--sn-ink-soft);
  --cc-toggle-readonly-knob-icon-color: var(--sn-ink-soft);

  --cc-footer-bg:                     var(--sn-ink);
  --cc-footer-color:                  var(--sn-body);
  --cc-footer-border-color:           var(--sn-hairline);

  --cc-overlay-bg:                    rgba(10, 23, 34, .72);
  --cc-font-family:                   var(--sn-font-body);
}

/* --- 4.2 Flex Toast -------------------------------------------------------
 * `border-left-color` se NE dira: `.flex-toast--success/--error/--warning/
 * --info` ga postavljaju u flex-toast.css, koji je ranije u kaskadi — pa bi
 * `border` ili `border-color` shorthand ovdje pojeo semantičku traku.
 * Zato tri longhanda umjesto shorthanda. */
.flex-toast {
  background: var(--sn-ink-soft);
  color: var(--sn-heading);
  border-top-color:    var(--sn-hairline-2);
  border-right-color:  var(--sn-hairline-2);
  border-bottom-color: var(--sn-hairline-2);
  box-shadow: var(--shadow);
}
.flex-toast__msg   { color: var(--sn-heading); }
.flex-toast__close { color: var(--sn-silver-dark); }
.flex-toast__close:hover { color: var(--sn-heading); }

/* --- 4.3 Auth modali ------------------------------------------------------
 * ODSTUPANJE OD PLANA (§1.6.2), namjerno i provjereno:
 * plan predlaže `.auth-modal-title{color:var(--sn-heading)}`, ali `.auth-modal`
 * ima `background:var(--white,#fff)` (auth.css:279) i cijela unutrašnjost je
 * hardkodovana za svijetlu podlogu (#333 labele, #888 hint, #adb5bd
 * placeholder, #666 close/switch). Svijetao naslov na bijeloj kartici bio bi
 * nevidljiv, a potpuni tamni re-skin traži prepisivanje auth.css — što je
 * izvan opsega Faze 3 (§6.4 auth modale ionako vodi kao svjesno off-brand).
 *
 * Zato se ovdje mijenja SAMO ono što je brand-netačno a kontrastno bezbjedno:
 * (a) zlatna paleta koju auth.css čita kroz `var(--gold*, …)` fallback-e
 *     -> S-Nautica mesing, (b) tipografija -> Inter + Cormorant za naslov.
 * `members_enabled = 0` u flex_podesavanja, pa se ovaj markup danas i ne
 * renderuje — blok je pripremljen za trenutak kad se članovi uključe. */
:root {
  --gold:          #B08D57;
  --gold-dark:     #977639;
  --gold-gradient: linear-gradient(135deg, #C3A06A 0%, #B08D57 50%, #977639 100%);
  --shadow-gold:   0 4px 20px rgba(176, 141, 87, .18);
  --dark:          #0A1722;
}
.auth-modal, .auth-modal * { font-family: var(--sn-font-body); }
.auth-modal-title {
  font-family: var(--sn-font-display);
  font-size: 32px;
  font-weight: 500;
  letter-spacing: 0;
}


/* ============================================================================
 * 5. `--sh-*` REMAP — površine shopa
 * ----------------------------------------------------------------------------
 * shop-tokens.css se učitava PER-STRANU, iz <body> (npr. shop/catalog/index.php
 * :91), dakle POSLIJE ovog fajla. Njegov selektor je `:root` (specifičnost
 * 0,1,0), pa bi obično `:root` ovdje izgubilo. `:root:root` (0,2,0) dobija.
 *
 * Remapiraju se samo tri tokena, i to iz nužde, ne iz estetike:
 *  --sh-surface  #ffffff  -> bijele kartice + `--c-text` (sad svijetao) = bijeli
 *                            tekst na bijelom. Ovo je čitljivost, ne stil.
 *  --sh-overlay  rgba(10,23,51,.55) -> AirJet navy scrim.
 *  --sh-focus    #2b5bd7            -> doslovna AirJet brand plava u focus ringu.
 * Semantičke boje (--sh-sale/-success/-warning/-danger/-star/-b2b i njihove
 * `-bg` parice) se NE diraju — one su WCAG parovi i mijenjaju se tek kad se
 * shop view-ovi prepišu (webshop plan).
 * `--sh-surface-2` i `--sh-price` prate automatski (već su var(--c-bg-soft)
 * odnosno var(--c-text)).
 * ========================================================================== */
:root:root {
  --sh-surface: var(--sn-ink-soft);
  --sh-overlay: rgba(10, 23, 34, .72);
  --sh-focus:   var(--sn-accent);
}


/* ============================================================================
 * 6. `.container` — layout primitiv koji je otišao sa theme-base.css
 * ----------------------------------------------------------------------------
 * `.container` NIJE stil, nego jedini horizontalni layout primitiv koji
 * FlexCMS view-ovi koriste: `class="container"` se javlja u 64 view fajla
 * (shop PLP/PDP/cart/checkout/home, tours, charter, pages, header, footer).
 * Njegovo jedino pravilo je živjelo u `theme-base.css:63-68` — kad je taj fajl
 * izašao iz load-a, cio sadržaj je pao uz ivicu viewporta.
 *
 * Geometrija je preslikana sa `.wrap` iz izvornog style.css (max-width:1340px;
 * padding 1.25rem / 2rem ≥640px / 2.5rem ≥1024px) — dakle iz izvora, a ne
 * AirJet varijanta (1500px + fiksnih 20px). Tako `.container` i buduci
 * S-Nautica `.wrap` daju IDENTIČAN okvir, pa se strane mogu prevoditi jedna
 * po jedna bez skoka širine.
 * ========================================================================== */
.container {
  width: 100%;
  max-width: var(--container);
  margin-left: auto;
  margin-right: auto;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
@media (min-width: 640px) {
  .container { padding-left: 2rem; padding-right: 2rem; }
}
@media (min-width: 1024px) {
  .container { padding-left: 2.5rem; padding-right: 2.5rem; }
}


/* ============================================================================
 * 7. PRIVREMENI MOST ZA NASLIJEĐENI HEADER MARKUP
 * ----------------------------------------------------------------------------
 * !! OVAJ BLOK SE BRIŠE čim `partials/header.php` bude prepisan na S-Nautica
 *    markup. Ne dograđivati ga.
 *
 * Zašto postoji: theme-header.css (7 151 B) i theme-footer.css (2 720 B) su
 * izašli iz load-a zajedno sa ostatkom AirJet teme (plan §1.5), ali PHP
 * partiali još emituju AirJet markup (`.site-header`, `.header-inner`,
 * `.main-nav`, `.hamburger`…). Bez ijednog pravila header postaje neuređen
 * niz elemenata. Ovo NIJE dizajn — ovo je minimum da sajt ostane upotrebljiv
 * između dvije faze: raspored + kontrast, ništa više.
 *
 * Selektori su isključivo legacy imena klasa kojih u S-Nautica markupu nema
 * (izvor koristi `.header`, `.wrap`, `.nav-link`, `.mobile-menu`), pa kad se
 * partiali prepišu ovaj blok prestane da se poklapa sam od sebe.
 *
 * FOOTER DIO JE OBRISAN (2026-08-01): `partials/footer.php` je prepisan na
 * izvorni markup (`html/partials/footer.html`) i više ne emituje nijednu od
 * `.site-footer` / `.footer-top` / `.footer-grid` / `.footer-side` /
 * `.footer-bottom` / `.payments` / `.footer-legal` klasa — sva ta pravila su
 * postala mrtva. Novi footer stilove uzima iz `sn-theme.css` (`.wrap`,
 * `.overline`, `.footer-link`, `.social`, `.text-body-sm` + utility klase).
 *
 * Boje su isključivo iz palete gore. Nijedna vrijednost nije nova.
 * ========================================================================== */

/* HEADER DIO JE OBRISAN (2026-08-01): `partials/header.php` je prepisan na
   izvorni markup (`html/partials/header.html`) i više ne emituje nijednu od
   `.site-header` / `.header-inner` / `.main-nav` / `.hamburger` / `.icon-btn` /
   `.header-lang` / `.btn-sign-in` klasa — sva ta pravila su postala mrtva.
   Nova traka stilove uzima iz `sn-theme.css` (`.header`, `.wrap`, `.nav-link`,
   `.lang-btn`, `.tap-target`, `.skip-link` + utility klase), pa most za header
   više ne postoji. */

/* Footer: nema ga više ovdje — v. napomenu u zaglavlju §7. */


/* ============================================================================
 * 8. POPRAVKA: PDP galerija — flexbox `min-width:auto` + Swiper
 * ----------------------------------------------------------------------------
 * Simptom: na `/plovila/<model>/` je `<html>` bio širok 40 120 px umjesto
 * 1 265 px, galerija je gurala info kolonu van ekrana i pojavljivao se
 * horizontalni scrollbar.
 *
 * Mehanizam (izmjereno u browseru, ne pretpostavljeno):
 *   `.sh-pdp__top{display:flex;flex-direction:row}` (shop-pdp.css:500-504)
 *   `.sh-pdp__gallery{flex:1 1 52%}` (:505-510) — flex stavka bez `min-width`,
 *   dakle `min-width:auto`. Automatski minimum je min-content sadržaja, a to
 *   je zbir intrinzičnih širina slajd-slika (1800 px svaka; `max-width:100%`
 *   se u intrinzičnom računu ignoriše jer je procenat). Swiper pri init-u
 *   pročita tu naduvanu `clientWidth` i UPIŠE je inline na svaki
 *   `.swiper-slide` (`style="width:9968px"`), čime se stanje zaključa.
 *
 * Ovo je latentan defekt u `shop-pdp.css`, ne u S-Nautica temi — ranije ga je
 * maskirao `body{overflow-x:hidden}` iz `theme-base.css` (:53), koji je
 * sakrivao scrollbar. Popravka je standardni flexbox lijek, jedna linija, i
 * ostaje ovdje dok se ne prenese u sam `shop-pdp.css`.
 *
 * Provjereno poslije popravke: galerija 625 px, info 512 px,
 * `document.documentElement.scrollWidth == clientWidth` (nema prelijevanja).
 * ========================================================================== */
.sh-pdp__gallery,
.sh-pdp__info { min-width: 0; }


/* ============================================================================
 * 9. ČITLJIVOST NA TAMNOJ PODLOZI — native kontrole i preostale bijele plohe
 * ----------------------------------------------------------------------------
 * Posljedica obrtanja palete (§1): `--c-text` je iz tamnog (#0f172a) postao
 * svijetao (#F4F6F8). Svaka ploha koja je ostala bijela sad nosi svijetao
 * tekst na bijelom = nečitljivo. Tri su izvora takvih ploha:
 *
 *  (a) NATIVE kontrole bez ijednog CSS pravila za pozadinu (npr.
 *      `.sh-qty__input` — shop-pdp.css:314-323 i shop-cart.css:31-40 postavljaju
 *      sve osim `background`, pa vrijedi UA default = bijela). Rješava se
 *      `color-scheme: dark` na `:root`: to je standardni signal browseru da je
 *      dokument taman, pa UA sam prebojava inpute, `<select>` padajuće liste,
 *      scrollbarove i spinner dugmad. Nije izmišljena boja — nijedna vrijednost
 *      se ne navodi, samo se browseru kaže istina o dokumentu.
 *
 *  (b) EKSPLICITNI `background:#fff` u shop CSS-u, pisan za svijetlu temu.
 *      Prebrojano u fajlovima koji ostaju u load-u: 5 mjesta. Tri od njih nose
 *      i `var(--c-text)` ili svijetlu ikonu pa su kontrastni promašaj:
 *        shop-reviews.css:28  `.sh-field input, .sh-field textarea`
 *        shop-reviews.css:48  `.sh-reviews__sort select`
 *        shop-pdp.css:110     `.sh-gallery__nav:hover`
 *      Preostala dva su bezbjedna i NE diraju se:
 *        shop-components.css:359 `.sh-promo .btn-primary` (bijela + `--c-navy`
 *          tekst — `--c-navy` je i dalje taman, kontrast ostaje)
 *        shop-checkout.css:271 `.sh-checkout__item-media img` (podloga ispod
 *          slike proizvoda, tekst je ne dodiruje)
 *
 *  (c) Specifičnost: ti fajlovi se učitavaju PER-STRANU, dakle POSLIJE ovog.
 *      Zato `:root` prefiks — podiže specifičnost za jedan nivo i pobjeđuje bez
 *      `!important`.
 *
 * Ovo je jedini blok u fajlu koji dira shop komponente izvan tokena. Briše se
 * kad se odgovarajuća pravila isprave u samim `shop-*.css` fajlovima.
 * ========================================================================== */
:root { color-scheme: dark; }

:root .sh-qty__input {
  background: var(--sn-ink-soft);
  color: var(--sn-heading);
}
:root .sh-field input,
:root .sh-field textarea,
:root .sh-reviews__sort select {
  background: var(--sn-ink-soft);
  color: var(--sn-heading);
}
:root .sh-gallery__nav:hover {
  background: var(--sn-ink-soft);
  color: var(--sn-heading);
}

/* ─────────────────────────────────────────────────────────────────────────────
   Breadcrumb — siroče poslije izlaska theme-pages.css/page.css iz load-a.
   CMS emituje semantičke klase (.breadcrumb__list > li), a statički izvor je
   crtao mrvice Tailwind utility klasama u pages.js::crumb(). Ovdje se ta ista
   pravila preslikavaju 1:1 na CMS markup (D1 — izgled identičan izvoru):
     ol   → flex flex-wrap items-center gap-2 text-[12px] uppercase tracking-[0.12em] text-silver-dark
     a    → inline-block py-1.5 transition-colors hover:text-white
     akt. → text-silver
     sep  → '/' u text-white/20 (izvor ga emituje kao <li>, ovdje je ::before)
   ────────────────────────────────────────────────────────────────────────── */
.breadcrumb {
  padding-top: 7rem;                     /* pt-28 iz izvora — čisti fiksni header */
}
@media (min-width: 640px) {
  .breadcrumb { padding-top: 8rem; }     /* sm:pt-32 */
}

.breadcrumb__list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;                           /* gap-2 */
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--sn-silver-dark, #8A95A1);
}

.breadcrumb__list > li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

/* Separator: izvor ga emituje kao zaseban <li>; CMS ga nema, pa ide kroz ::before. */
.breadcrumb__list > li + li::before {
  content: '/';
  color: rgb(255 255 255 / 0.2);         /* text-white/20 */
  speak: never;
}

.breadcrumb__list a {
  display: inline-block;
  padding-top: 0.375rem;                 /* py-1.5 */
  padding-bottom: 0.375rem;
  color: inherit;
  text-decoration: none;
  transition: color 150ms var(--ease, cubic-bezier(.4, 0, .2, 1));
}

.breadcrumb__list a:hover,
.breadcrumb__list a:focus-visible {
  color: #fff;                           /* hover:text-white */
}

.breadcrumb__list [aria-current="page"] {
  color: var(--sn-silver, #C3CBD3);      /* text-silver */
}


/* ============================================================================
 * 10. FORMA UPITA (katalog režim) — SAMO stanja koja izvor nema
 * ----------------------------------------------------------------------------
 * Blok `.sn-inquiry` (partials/sn-inquiry-form.php) je 1:1 port izvora
 * (html/js/pages.js::inquiryForm) i sav raspored/tipografiju dobija iz
 * kompajliranog Tailwinda u sn-theme.css — `.field`, `.btn .btn-md .btn-accent`,
 * `grid gap-4 sm:grid-cols-2`, `rounded-3xl bg-ink-soft`, `text-silver-dark`.
 * Sve te klase su provjereno prisutne u sn-theme.css, pa se OVDJE NE ponavljaju.
 *
 * Ovdje su samo tri stvari koje izvor nije mogao imati, jer je maketa bez
 * backenda: greške po polju (422 iz /api/contact), nevalidno polje i greška
 * u statusnoj poruci. Front nema Bootstrap CSS (provjereno u <head>: samo
 * bootstrap-ICONS sa CDN-a), a `.is-invalid`/`.invalid-feedback` su Bootstrap
 * konvencija koju handler nasljeđuje od ajax-forms.js — bez ovih pravila
 * poruka greške bi se renderovala potpuno nestilizovana.
 *
 * Crvena je `--sh-danger` iz shop-tokens.css (#d92d20, „out-of-stock, errors").
 * shop-tokens.css se učitava POSLIJE ovog fajla, ali custom property se
 * razrješava u trenutku upotrebe, pa redoslijed ne smeta; literal je fallback
 * za stranice koje shop tokene ne učitavaju.
 *
 * Sidrenje `#sn-inquiry` NE treba pravilo — sn-theme.css već nosi
 * `:target{scroll-margin-top:6rem}` iz izvora.
 *
 * Briše se kad forma upita dobije stanja greške u samom izvoru dizajna.
 * ========================================================================== */
.sn-inquiry .invalid-feedback {
  display: block;
  margin-top: 0.375rem;
  font-size: 12px;
  line-height: 1.4;
  color: var(--sh-danger, #d92d20);
}

.sn-inquiry .field.is-invalid {
  border-color: var(--sh-danger, #d92d20);
}

/* Statusna poruka nosi `text-accent` iz izvora (uspjeh = mesing); greška je
   preboji. Specifičnost 0,3,0 > 0,1,0 utility klase, pa bez `!important`. */
.sn-inquiry [data-form-msg].sn-inquiry__msg--error {
  color: var(--sh-danger, #d92d20);
}

/* Dugme je disable-ovano dok request traje (sn-inquiry.js). */
.sn-inquiry button[type="submit"]:disabled {
  opacity: 0.6;
  cursor: default;
}


/* ============================================================================
 * 11. `.sn-prose` — tijelo pravnog dokumenta (pages/legal.php)
 * ----------------------------------------------------------------------------
 * `flex_page_translations.text` čuva SEMANTIČKI HTML (`<p>`, `<h2 id="kolacici">`)
 * bez Tailwind klasa — admin ga uređuje u WYSIWYG-u, koji bi utility klase
 * pojeo prvom izmjenom. Ova pravila vraćaju tipografiju izvora
 * (`html/privacy-policy.html:55-65`) na taj goli markup, 1:1:
 *
 *   izvorni element                        → ovdje
 *   `p.mt-8.text-body.leading-relaxed.text-silver`   (uvod)  → `.sn-prose > p:first-child`
 *   `div.mt-10.space-y-8` (omotač sekcija)                   → razmaci na `h2`
 *   `h2.font-display.text-[22px].text-heading`               → `.sn-prose > h2`
 *   `p.mt-3.text-body.leading-relaxed.text-silver`           → `.sn-prose > h2 + p`
 *
 * Vrijednosti su iz kompajliranog Tailwinda u sn-theme.css, ne procijenjene:
 *   text-body = 16px/26px, leading-relaxed = 1.625, text-[22px] = 22px,
 *   mt-3 = .75rem, mt-8 = 2rem, mt-10 = 2.5rem, space-y-8 = 2rem.
 *
 * Postoji jer je `.prose` iz starog `page.css`/`theme-pages.css` ostao siroče
 * kad su ti fajlovi izašli iz load-a (plan E §6.2) — pravila nema nigdje, pa bi
 * tijelo strane bilo nestilizovano.
 * ========================================================================== */
.sn-prose > p {
  font-size: 16px;                       /* text-body */
  line-height: 1.625;                    /* leading-relaxed gazi 26px iz text-body */
  color: var(--sn-silver, #C3CBD3);      /* text-silver */
}

.sn-prose > h2 {
  margin-top: 2rem;                      /* space-y-8 između sekcija */
  font-family: var(--sn-font-display, 'Cormorant Garamond', serif);
  font-size: 22px;                       /* text-[22px] */
  font-weight: 400;
  line-height: 1.25;
  color: var(--sn-heading, #F4F6F8);     /* text-heading */
}

/* Uvodni pasus stoji 2rem ispod naslova strane (mt-8 u izvoru). */
.sn-prose > p:first-child {
  margin-top: 2rem;
}

/* Prvi h2 je 2.5rem ispod uvoda (mt-10 na omotaču sekcija), ostali 2rem. */
.sn-prose > p:first-child + h2 {
  margin-top: 2.5rem;
}

/* Pasus unutar sekcije je uz svoj naslov (mt-3). */
.sn-prose > h2 + p {
  margin-top: 0.75rem;
}

/* Sidro `#kolacici` — sn-theme.css nosi `:target{scroll-margin-top:6rem}` iz
   izvora, pa fiksni header ne prekriva naslov sekcije. Bez dodatnog pravila. */

/* Linkovi u tijelu dokumenta (npr. mailto:) — mesing, kao svuda u izvoru. */
.sn-prose a {
  color: var(--sn-accent, #B08D57);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.sn-prose a:hover,
.sn-prose a:focus-visible {
  color: var(--sn-heading, #F4F6F8);
}

/* ─────────────────────────────────────────────────────────────────────────────
   Mobilni drawer — determinističko stanje.
   `.mobile-menu` (sn-theme.css) nosi poziciju i tranziciju, a pomjeranje dolazi
   iz utility klase `.translate-x-full` koju initMobileMenu() dodaje/uklanja.
   Ta utility klasa ima istu specifičnost (0,1,0) kao i mnoge druge, pa je
   rezultujući transform zavisio od redoslijeda u bundle-u i u praksi ostajao
   zaglavljen na translateX(100%) i kad je klasa uklonjena.
   Ovdje se stanje veže na `.mobile-menu` sa specifičnošću (0,2,0), pa je
   ishod jednoznačan u oba smjera. Ugovor klasa je nepromijenjen — JS i dalje
   samo dodaje/uklanja `translate-x-full`, tačno kao izvor.
   ────────────────────────────────────────────────────────────────────────── */
.mobile-menu.translate-x-full { transform: translateX(100%); }
.mobile-menu:not(.translate-x-full) { transform: translateX(0); }

/* `.lang-btn` u izvoru je `<button>`, ovdje je `<a>` (jezik je URL, ne stanje).
   Dodaje se SAMO ono što anchor ne dobija od klase: `text-decoration` i kursor.
   Boju, razmak, verzal i aktivno stanje već nosi `sn-theme.css`
   (`.lang-btn.is-active,.lang-btn:hover{color:#fff}`) — pisati ih ponovo ovdje
   značilo bi tiho odstupanje od izvora. */
.lang-btn { text-decoration: none; cursor: pointer; }

/* ============================================================================
 * 12. Isporučeni webshop PDP — tabovi (revizija G2, 2026-08-01)
 *
 * `shop-pdp.js:567-600` prebacuje `.is-active` sa jednog `.sh-tabs__panel` na
 * drugi, ali u `shop-pdp.css` postoji SAMO `.sh-tabs__panel { padding … }` —
 * nijedno pravilo koje bi neaktivan panel sakrilo. Rezultat je bio: svih pet
 * panela (opis, specifikacije, recenzije, pitanja, dostava) vidljivo odjednom,
 * a klik na tab je pomjerao samo podvlaku.
 *
 * NE TIČE SE PDP-A PLOVILA: `shop/product/sn-boat.php` po nalogu NEMA tabove
 * (ni recenzije, ni pitanja) — provjereno, `sh-tabs` se u tom view-u ne
 * pojavljuje. Pravilo je ovdje isključivo zbog isporučenog `shop/product/
 * detail.php`, koji se u ovoj instalaciji ne renderuje (sva 126 proizvoda su
 * plovila i idu na sn-boat.php), ali bi se aktivirao čim se doda proizvod bez
 * atributa `boat_type`. Popravka ide u ovaj fajl (a ne u shop-pdp.css) jer se
 * on učitava na svakoj strani, pa vrijedi i ako `shop-pdp.css` izostane.
 *
 * `:target` I `.is-active` ZAJEDNO SU DVA PANELA (ispravka, 2026-08-01).
 * Prva verzija ovog bloka davala je `display:block` i jednom i drugom, uz
 * obrazloženje da uvijek pokazuju na isti panel. Izmjereno na živoj strani —
 * ne pokazuju, u dva od četiri stanja:
 *
 *   A. bez JS-a, bez hash-a   → „Opis" (.is-active)              1 panel  OK
 *   B. bez JS-a, deep-link    → „Opis" + „Recenzije"             2 panela ✗
 *   C. sa JS-om, deep-link    → initTabs() pomjeri .is-active    1 panel  OK
 *   D. sa JS-om, pa klik      → „Specifikacije" + „Recenzije"    2 panela ✗
 *
 * B: server je `.is-active` stavio na „Opis", a `:target` otvara „Recenzije“ —
 * niko ne sklanja „Opis“. D je gori: `initTabs()` na klik radi
 * `history.replaceState()`, a `replaceState` NE preračunava `:target` (mjereno:
 * `location.hash` je `#sh-tab-specs`, `document.querySelector(':target')` i
 * dalje `#sh-tab-reviews`) — pa `:target` ostane zaglavljen na dolaznom
 * fragmentu i drži tuđi panel otvorenim do kraja sjednice.
 *
 * Rješenje: `:target` je ISKLJUČIVO no-JS grana. `initTabs()` na startu stavi
 * `data-tabs-js` na omotač (`shop-pdp.js`), što tu granu gasi u cjelini i
 * ostavlja `.is-active` kao jedini izvor istine — a to je tačno ono što JS
 * održava. Bez JS-a atributa nema, pa `:target` otvara svoj panel, a `:has()`
 * sklanja serverski podrazumijevani. Omotač je `<section class="sh-pdp__tabs"
 * data-tabs>` (detail.php:445) — selektor ide na `[data-tabs]`, ne na `.sh-tabs`.
 * ========================================================================== */
.sh-tabs__panel { display: none; }
.sh-tabs__panel.is-active { display: block; }

/* No-JS grana: dolazni `#sh-tab-…` otvara svoj panel, a podrazumijevani ustupa.
   Sa JS-om `[data-tabs-js]` obara oba pravila (vidi `initTabs()`). */
[data-tabs]:not([data-tabs-js]) .sh-tabs__panel:target { display: block; }
[data-tabs]:not([data-tabs-js]):has(.sh-tabs__panel:target) .sh-tabs__panel.is-active:not(:target) { display: none; }

/* `.sh-ico` — SVG zamjena za `<i class="bi bi-*">` u shop view-ovima.
   Bootstrap Icons je font-ikona pa je nasljeđivala font-size i currentColor;
   sprite je SVG, pa mu treba eksplicitna dimenzija vezana za tekst da se
   poravnanje i skaliranje ponašaju isto kao prije zamjene. */
.sh-ico {
  width: 1em;
  height: 1em;
  flex: 0 0 auto;
  fill: none;
  stroke: currentColor;
  vertical-align: -0.125em;
}


/* ============================================================================
 * 11. SEKCIJE POČETNE — isporučeni tipovi u S-Nautica dizajnu (2026-08-01)
 * ----------------------------------------------------------------------------
 * Početnu crta ČETIRI ISPORUČENA tipa iz kataloga „Dodaj sekciju":
 *   `hero-slideshow`  `universal-page` ×2  `shop-brands`
 * Njihov markup je generički (BEM klase `.home-hero__*`, `.home-universal__*`,
 * `.home-brand-strip__*`), a stilove za njega nosi `theme/css/home.css` — koji
 * u ovoj temi NIJE u load-u (kaskada je `sn-fonts → sn-theme → … → ovaj fajl).
 * Bez ovog bloka te sekcije renderuju nestilizovan HTML.
 *
 * Vrijednosti nisu izmišljene: preslikane su iz `html/index.html` (sekcije
 * `#top`, `#intro`, `#brands`, `#location`) i njegovog Tailwind outputa, pa
 * generičke klase dobiju TAČNO onu geometriju i tipografiju koju su imale
 * utility klase u izvoru. Gdje izvor ima utility (npr. `py-24 sm:py-28
 * lg:py-32`), ovdje stoji isti raspon kroz media query.
 *
 * Zašto CSS a ne novi partial: sekcija koja se zove „S-Nautica — …" postoji
 * samo na ovom sajtu i vraća nas na hardkodovanu kopiju. Isporučeni tip +
 * tematski sloj znači da vlasnik sadržaj unosi kroz *Slajdovi*, *Strane* i
 * *Prodavnicu*, a tema samo odlučuje kako to izgleda.
 * ========================================================================== */

/* --- 11.1 Hero: kopija po slajdu ------------------------------------------
   `.hero-slide` (slika) već ima fade u `sn-theme.css`; ploče teksta dobijaju
   isti mehanizam. Grid stack umjesto `position:absolute` — visina sekcije se
   računa po NAJVIŠOJ ploči, pa duži naslov na drugom slajdu ne izlazi iz
   heroja i ništa ne poskakuje pri smjeni. */
.home-hero .hero-copy { display: grid; }
.home-hero .hero-copy__item {
  grid-area: 1 / 1;
  opacity: 0;
  pointer-events: none;
  transition: opacity 1.5s ease-in-out;
}
.home-hero .hero-copy__item.is-active { opacity: 1; pointer-events: auto; }

@media (prefers-reduced-motion: reduce) {
  .home-hero .hero-copy__item { transition: none; }
}

/* --- 11.2 Univerzalna sekcija — okvir i ritam ------------------------------
   Izvor: `py-24 sm:py-28 lg:py-32` na svakoj sekciji. Grupa (`…-group`) je
   omotač koji partial emituje oko SVIH tabova jedne sekcije; kad ih ima više
   (kontakt = Sadržaj + Kontakt/Mapa), unutrašnji razmak bi se udvostručio —
   zato drugi i svaki sljedeći tab gube gornji padding i čitaju se kao jedna
   traka. */
.home-universal { padding-block: 6rem; }
@media (min-width: 640px)  { .home-universal { padding-block: 7rem; } }
@media (min-width: 1024px) { .home-universal { padding-block: 8rem; } }
.home-universal-group > .home-universal + .home-universal { padding-top: 0; }

/* Kontakt traka stoji na `ink-soft` — izvor smjenjuje plohe (`#intro` je ink,
   `#location` ink-soft). Boja ide na GRUPU, da je dijele oba njena taba. */
.home-universal-group:has(.home-universal--contact) { background: var(--sn-ink-soft); }

/* --- 11.3 Univerzalna sekcija — tab „Sadržaj" -----------------------------
   Izvor (`#intro`): tekst lijevo, slika 4:5 desno, `gap-12 lg:gap-20`.
   `auto-fit` umjesto fiksne dvije kolone jer strana bez naslovne slike (npr.
   kontakt) emituje samo tekstualnu kolonu — sa `1fr 1fr` bi ostala u lijevoj
   polovini, a ovako zauzme punu širinu. */
.home-universal__content-grid {
  display: grid;
  align-items: center;
  gap: 3rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
}
@media (min-width: 1024px) { .home-universal__content-grid { gap: 5rem; } }

/* Izvor drži tekst lijevo, sliku desno; partial u DOM-u emituje sliku prvu
   (da bez CSS-a ide iznad teksta). `order` vraća dizajn bez izmjene markupa. */
.home-universal__text   { order: 1; }
.home-universal__visual { order: 2; }

/* `overflow:hidden` je namjerno NA SLICI, ne na omotaču: pločica ispod
   (`__badge`) po izvoru viri IZVAN donjeg lijevog ugla slike, pa bi je omotač
   koji klipuje odsjekao. Zaobljenje i linija zato idu na <img>. */
.home-universal__visual {
  position: relative;
  aspect-ratio: 4 / 5;
}
.home-universal__visual img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
}

/* Pločica „2016 / EST. — Jadran" — prva statistika povezane strane.
   Geometrija i staklo su iz izvora (index.html:145-148:
   `glass absolute -bottom-6 -left-6 hidden rounded-2xl px-7 py-5 sm:block`),
   samo izraženo kroz BEM klase jer partial je isporučen i ne smije nositi
   Tailwind utility-je ove teme. Na telefonu je nema — kao ni u izvoru: pomjeraj
   od -1.5rem bi na uskom ekranu izašao iz `.container` padding-a. */
.home-universal__badge {
  display: none;
  position: absolute;
  left: -1.5rem;
  bottom: -1.5rem;
  padding: 1.25rem 1.75rem;
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
  background: hsla(0, 0%, 100%, .06);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
}
@media (min-width: 640px) { .home-universal__badge { display: block; } }

.home-universal__badge-value {
  display: block;
  font-family: var(--sn-font-body);
  font-size: 40px;
  font-weight: 500;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  color: var(--sn-heading);
}
/* `.overline` iz izvora: mesingana linija iznad, verzal, široki razmak. */
.home-universal__badge-label {
  display: block;
  width: fit-content;
  margin-top: .25rem;
  padding-top: 11px;
  border-top: 1px solid;
  font-family: var(--sn-font-body);
  font-size: 13px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .22em;
  color: var(--sn-silver-dark);
}

/* Tipografija: `.eyebrow` je generički ekvivalent `.overline` iz izvora
   (isti font, razmak i mesingana linija iznad), `h2` je `.section-title`. */
.home-universal .eyebrow,
.home-shop-brands .eyebrow,
.home-shop-categories .eyebrow {
  width: fit-content;
  font-family: var(--sn-font-body);
  font-size: 13px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .22em;
  color: var(--sn-silver);
  border-top: 1px solid;
  padding-top: 11px;
}
.home-universal h2,
.home-shop-brands h2,
.home-shop-categories h2 {
  margin-top: 1.25rem;
  font-family: var(--sn-font-display);
  font-size: 32px;
  font-weight: 500;
  line-height: 1.1;
  color: var(--sn-heading);
}
@media (min-width: 640px)  { .home-universal h2, .home-shop-brands h2, .home-shop-categories h2 { font-size: 36px; line-height: 1.16; } }
@media (min-width: 1024px) { .home-universal h2, .home-shop-brands h2, .home-shop-categories h2 { font-size: 48px; line-height: 1.08; } }

/* Tekst strane (TinyMCE). Prvi pasus je „lead" — izvor mu daje 18px/silver,
   ostatak je 15px/body. Bez posebnog polja u CMS-u: red je taj koji nosi
   ulogu, kao i u izvoru. */
.home-universal .prose > p { margin-top: 1.25rem; line-height: 1.7; color: var(--sn-body); }
.home-universal .prose > p:first-child { margin-top: 1.75rem; font-size: 18px; color: var(--sn-silver); }
.home-universal .prose a { color: var(--sn-accent); }

/* Lista u tekstu = red „prednosti" iz izvora (`intro.point1..3`): čipovi u
   jednom redu sa mesinganom kvačicom, ne bullet lista. */
.home-universal .prose ul {
  list-style: none;
  margin: 2.25rem 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 1rem 2rem;
}
.home-universal .prose ul li {
  display: flex;
  align-items: center;
  gap: .625rem;
  font-size: 15px;
  color: var(--sn-heading);
}
.home-universal .prose ul li::before {
  content: "✓";
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 2.25rem;
  height: 2.25rem;
  border-radius: 9999px;
  border: 1px solid var(--sn-hairline-2);
  background: rgba(176, 141, 87, .10);
  color: var(--sn-accent);
  font-size: 13px;
}

/* --- 11.4 Univerzalna sekcija — tab „Kontakt/Mapa" ------------------------
   Izvor (`#location`): podaci lijevo (ikona + labela, vrijednost uvučena),
   mapa desno u zaobljenom okviru sa istim filterom. */
.home-universal__contact-grid {
  display: grid;
  align-items: center;
  gap: 3rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
}
@media (min-width: 1024px) { .home-universal__contact-grid { gap: 4rem; } }

.home-universal__contact-rows { list-style: none; margin: 0; padding: 0; display: grid; gap: 2rem; }
.home-universal__contact-row  { display: flex; align-items: flex-start; gap: 1rem; }

.home-universal__contact-icon {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 9999px;
  border: 1px solid var(--sn-hairline-2);
  background: rgba(176, 141, 87, .10);
  color: var(--sn-accent);
  font-size: 1.05rem;
}

.home-universal__contact-label {
  display: block;
  font-family: var(--sn-font-body);
  font-size: 13px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .22em;
  color: var(--sn-silver-dark);
}
.home-universal__contact-value {
  display: inline-block;
  margin-top: .625rem;
  font-size: 15px;
  color: var(--sn-heading);
  text-decoration: none;
  transition: color .3s var(--ease);
}
a.home-universal__contact-value:hover { color: var(--sn-accent); }

.home-universal__map {
  overflow: hidden;
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
  background: var(--sn-ink);
}
/* Iframe nosi inline `height` i `border-radius` iz partiala; radijus preuzima
   omotač (inače bi se dva radijusa preklapala), a visina prati izvor. */
.home-universal__map iframe {
  display: block;
  width: 100%;
  height: 360px;
  border: 0;
  border-radius: 0;
  filter: grayscale(0.35) contrast(1.05) brightness(0.9);
}
@media (min-width: 1024px) { .home-universal__map iframe { height: 480px; } }

/* --- 11.5 Brendovi — kartice sa fotografijom ------------------------------
   Izvor (`#brands`): mreža 4:3 kartica, fotografija preko cijele kartice,
   gradijent ka dnu, naziv + tagline u dnu, blagi zoom na hover.
   `shop-components.css` (koji sekcija sama učitava) daje samo `.sh-section`
   padding; sve ostalo je ovdje. */
.home-shop-brands { background: var(--sn-ink-soft); padding-block: 6rem; }
@media (min-width: 640px)  { .home-shop-brands { padding-block: 7rem; } }
@media (min-width: 1024px) { .home-shop-brands { padding-block: 8rem; } }

.home-shop-brands .section-head { max-width: 42rem; }
.home-shop-brands .section-head .lead {
  margin-top: 1.25rem;
  font-size: 15px;
  line-height: 1.7;
  color: var(--sn-body);
}

/* `flex-start`, ne `center` kao u izvoru: sedam kartica u tri kolone ostavlja
   posljednji red sa jednom karticom, a centrirana je „visila" na sredini umjesto
   da stoji u koloni iznad sebe. Puni redovi izgledaju isto u oba slučaja. */
.home-brand-strip {
  list-style: none;
  margin: 3.5rem 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  gap: 1.25rem;
}
/* Širine iz izvora: 1 / 2 / 3 u redu, `gap-5` (20px) oduzet od procenta. */
.home-brand-strip__item { width: 100%; }
@media (min-width: 640px)  { .home-brand-strip__item { width: calc(50% - 10px); } }
@media (min-width: 1024px) { .home-brand-strip__item { width: calc(33.333% - 14px); } }

.home-brand-strip__link {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  aspect-ratio: 4 / 3;
  padding: 1.75rem;
  overflow: hidden;
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
  background: var(--sn-ink);
  text-decoration: none;
  transition: border-color .3s var(--ease), box-shadow .3s var(--ease);
}
.home-brand-strip__link:hover {
  border-color: rgba(195, 203, 211, .3);
  box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .7);
}
.home-brand-strip__link img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1200ms cubic-bezier(.22, 1, .36, 1);
}
.home-brand-strip__link:hover img { transform: scale(1.05); }

/* Gradijent je pseudo-element, ne <div>: partial ga ne emituje, a bez njega
   bijeli tekst na svijetloj fotografiji nema kontrast. */
.home-brand-strip__link::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, var(--sn-ink) 0%, rgba(10, 23, 34, .45) 45%, transparent 100%);
}
.home-brand-strip__name,
.home-brand-strip__tag {
  position: relative;
  z-index: 1;
  display: block;
}
.home-brand-strip__name {
  font-family: var(--sn-font-display);
  font-size: 26px;
  line-height: 1.15;
  color: var(--sn-heading);
}
.home-brand-strip__tag {
  margin-top: .375rem;
  font-size: 14px;
  line-height: 1.4;
  color: var(--sn-silver);
}

/* --- 11.6 Sekcije prodavnice — broj proizvoda i mreža kategorija ----------
   Obje sekcije („Brendovi", „Kategorije proizvoda") od 2026-08-01 nose
   `product_count` iz kataloga. Broj je razlog da se na kartici uopšte klikne,
   pa dobija svoje mjesto, a ne da se lijepi uz naziv.

   Kategorije koriste `sh-tiles` iz `shop-components.css` (sekcija ga sama
   učitava); ovdje se dodaje samo ono što taj sloj nema — zaglavlje u tipografiji
   teme i brojač ispod naziva. */
.home-shop-categories { padding-block: 6rem; }
@media (min-width: 640px)  { .home-shop-categories { padding-block: 7rem; } }
@media (min-width: 1024px) { .home-shop-categories { padding-block: 8rem; } }

.home-shop-categories .section-head { margin-bottom: 3rem; }
.home-shop-categories .section-head .lead {
  margin-top: 1.25rem;
  font-size: 15px;
  line-height: 1.7;
  color: var(--sn-body);
}

.home-shop-categories .sh-tile__media {
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
  background: var(--sn-ink-soft);
}
.home-shop-categories .sh-tile__name {
  margin-top: .25rem;
  font-family: var(--sn-font-display);
  font-size: 20px;
  font-weight: 500;
  color: var(--sn-heading);
}
.home-shop-categories .sh-tile__count,
.home-brand-strip__count {
  font-family: var(--sn-font-body);
  font-size: 12px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .14em;
  color: var(--sn-silver-dark);
}
.home-shop-categories .sh-tile__count { display: block; text-align: center; }

/* Na kartici brenda broj ide u gornji desni ugao — dno kartice već drži naziv
   i tagline, a broj tamo ne bi imao gdje. Pločica je iznad gradijenta
   (`z-index`), inače je fotografija proguta. */
.home-brand-strip__count {
  position: absolute;
  top: 1.25rem;
  right: 1.25rem;
  z-index: 1;
  padding: .375rem .75rem;
  border-radius: 9999px;
  border: 1px solid var(--sn-hairline-2);
  background: rgba(10, 23, 34, .55);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  color: var(--sn-silver);
}


/* ============================================================================
 * 13. LISTING PLOVILA — TOOLBAR (linije + dužina + sortiranje), 2026-08-01
 * ----------------------------------------------------------------------------
 * Prvi prolaz je ovo imao kao DVIJE odvojene trake jedna iznad druge: kontrole
 * u punoj širini sa hairline-om iznad i ispod, pa pilule bez ikakvog okvira.
 * Dva vizuelna jezika u nizu — otud „nabacano". Sada je JEDNA PLOHA sa dva
 * reda i jasnom hijerarhijom:
 *
 *   .sn-toolbar__nav      ŠTA gledaš   → linije (primarna navigacija, pilule)
 *   .sn-toolbar__refine   KAKO gledaš  → dužina, sortiranje, broj (sekundarno)
 *
 * Ploha je `ink-soft` sa hairline okvirom i radijusom kao kartice — isti jezik
 * koji tema koristi svuda (`.boat-card`, `.glass`, `.field`).
 * ========================================================================== */
/* TRAKA STOJI U TOKU STRANE — ne lijepi se pri skrolovanju.
   Do 2026-08-02 je od `lg` naviše bila `position: sticky; top: 96px`, pa je
   plutala preko liste dok se skroluje. Sada je statična: proskroluje zajedno sa
   sadržajem i ostaje tamo gdje je i u izvoru, iznad prve kartice.
   `.sn-listing` ostaje kao omotač liste (bio je uveden da sticky ima preko čega
   da klizi); `position: relative` na njemu i dalje služi kao referentni okvir
   za apsolutno pozicionirane elemente kartica unutra. */
.sn-listing { position: relative; }
.sn-toolbar-wrap { margin-top: 2.5rem; }

/* `overflow:hidden` je NA NAV-REDU, ne na panelu: panel mora da pusti padajuću
   listu da izađe iz svojih granica, a klipovanje treba samo scroll-strip
   tabova (i to zbog gornjih zaobljenih uglova). */
.sn-toolbar {
  border-radius: 1rem;
  border: 1px solid var(--sn-hairline);
  background: var(--sn-ink-soft);
}
/* „Staklo" je NA PSEUDO-SLOJU, ne na samom panelu.
   `backdrop-filter` u Chromium-u ne pravi samo kontekst slaganja — on i
   KLIPUJE potomke na svoj border-box. Dok je filter stajao na `.sn-toolbar`,
   padajuća lista filtera (`.sn-select__list`, position:absolute, z-index:40)
   bila je odsječena tačno na donjoj ivici panela: od četiri opsega dužine
   vidjela su se dva i po. Provjereno hit-testom — tačka unutar liste, ispod
   ivice panela, pogađala je karticu proizvoda ispod, a ne opciju liste.
   Efekat se javljao samo od 1024px naviše, jer se filter tu i primjenjuje.

   `overflow:hidden` je iz istog razloga još ranije izmješten na nav-red
   (komentar iznad) — ovo je isti problem koji se vratio kroz drugu osobinu.

   Pseudo-sloj nema potomaka pa nema šta ni da klipuje. Pozadina ide NA NJEGA,
   ne na panel: `backdrop-filter` uzorkuje sve što je iscrtano ispod elementa,
   pa bi pozadina panela zamutila samu sebe i staklo bi se izgubilo.
   `.sn-toolbar > *` dobija `position: relative` da sadržaj ostane iznad
   sloja — oba su z-index:auto, pa redoslijed crtanja prati DOM. */
@media (min-width: 1024px) {
  .sn-toolbar {
    position: relative;
    background: transparent;
  }
  .sn-toolbar::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background: rgba(14, 30, 44, .86);
    -webkit-backdrop-filter: blur(14px);
            backdrop-filter: blur(14px);
  }
  .sn-toolbar > * { position: relative; }
}

/* --- 13.1 Red 1: linije ------------------------------------------------- */
.sn-toolbar__nav {
  padding: .875rem 1rem;
  border-bottom: 1px solid var(--sn-hairline);
  border-radius: 1rem 1rem 0 0;
  overflow: hidden;
}
@media (min-width: 640px) { .sn-toolbar__nav { padding-inline: 1.25rem; } }

/* Jedan red koji se po potrebi skroluje vodoravno — 8 tabova na 375 px
   prelomljeno je zauzimalo 117 px prije prve kartice. Rubovi se stapaju
   (`mask-image`) da se vidi da red ima nastavak. */
.sn-tabs {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: .5rem;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  padding: 1px;   /* da ivica prve/posljednje pilule ne bude odsječena */
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 1.25rem, #000 calc(100% - 1.25rem), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 1.25rem, #000 calc(100% - 1.25rem), transparent 100%);
}
.sn-tabs::-webkit-scrollbar { display: none; }

/* PILULE, A NE PODVUČENI TABOVI: cijela tema je na `border-radius:9999px`
   (`.btn`, `.field`, `.value-icon`, `.lang-btn`), pa je podvučeni tab tuđi
   jezik (Material). Aktivna nosi mesing — tanka ivica + 12% podloge + tekst:
   vidi se iz prve, a osam pilula ne viče. */
.sn-tab {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: .5rem;
  padding: .5rem 1rem;
  border-radius: 9999px;
  border: 1px solid transparent;
  background: transparent;
  font-family: var(--sn-font-body);
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .12em;
  white-space: nowrap;
  color: var(--sn-silver-dark);
  text-decoration: none;
  cursor: pointer;
  transition: color .25s var(--ease), border-color .25s var(--ease), background-color .25s var(--ease);
}
.sn-tab:hover {
  background: rgba(255, 255, 255, .05);
  color: var(--sn-silver);
}
.sn-tab.is-active {
  border-color: rgba(176, 141, 87, .45);
  background: rgba(176, 141, 87, .12);
  color: var(--sn-accent);
}
.sn-tab:focus-visible { outline: 2px solid var(--sn-accent); outline-offset: 2px; }

/* Brojač: tabularne cifre da se pilule ne „klate" kad se filter promijeni. */
.sn-tab__count {
  font-size: 11px;
  letter-spacing: .06em;
  font-variant-numeric: tabular-nums;
  opacity: .6;
  transition: opacity .25s var(--ease);
}
.sn-tab:hover .sn-tab__count,
.sn-tab.is-active .sn-tab__count { opacity: .85; }

/* --- 13.2 Red 2: dužina + broj -------------------------------------------
   Od 2026-08-01 ovdje je JEDNA kontrola (izbor sortiranja je uklonjen po
   nalogu), pa je red flex na svim širinama: filter lijevo, broj desno.
   Ranije je na telefonu bio grid `1fr 1fr` zbog dvije kontrole — sa jednom bi
   ta mreža ostavila praznu polovinu. */
.sn-toolbar__refine {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .75rem 1.5rem;
  padding: .875rem 1rem 1rem;
}
@media (min-width: 640px) { .sn-toolbar__refine { padding: .875rem 1.25rem; } }

/* Na uskom ekranu kontrola uzima cio red, pa polje (i padajuća lista nad njim)
   dobiju punu širinu; bez `flex-grow` su se skupljali na širinu teksta „Sve"
   i lista je ispadala 87 px široka. Od 400 px kontrola je opet po sadržaju. */
.sn-control { display: flex; min-width: 0; flex: 1 1 auto; align-items: center; gap: .75rem; }
@media (min-width: 400px) { .sn-control { flex: 0 0 auto; } }

.sn-control__label {
  flex-shrink: 0;
  font-family: var(--sn-font-body);
  font-size: 11px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .14em;
  color: var(--sn-silver-dark);
}
.sn-control__field { position: relative; display: block; min-width: 0; flex: 1 1 auto; }
@media (min-width: 400px) { .sn-control__field { width: 168px; flex: 0 0 auto; } }

/* `.field` (sn-theme.css) već nosi pilulu, ivicu i fokus — ovdje samo strelica,
   jer `appearance:none` skida nativnu. Manji vertikalni padding od `.field`
   podrazumijevanog: kontrola u toolbaru je gušća od kontrole u formi. */
.sn-toolbar .field { padding-block: .625rem; font-size: 13px; }
.sn-control__chevron {
  pointer-events: none;
  position: absolute;
  right: .875rem;
  top: 50%;
  width: .875rem;
  height: .875rem;
  transform: translateY(-50%);
  color: var(--sn-silver-dark);
}

/* Broj rezultata — desno, tiho. Na telefonu ide u novi red preko obje kolone. */
.sn-toolbar__count {
  margin: 0;
  font-family: var(--sn-font-body);
  font-size: 11px;
  line-height: 1;
  text-transform: uppercase;
  letter-spacing: .14em;
  font-variant-numeric: tabular-nums;
  color: var(--sn-silver-dark);
}
/* Na najužem ekranu broj ide u svoj red, da kontrola (i lista nad njom) dobiju
   punu širinu — dijeljenje reda ostavljalo je polje na 115 px. */
.sn-toolbar__count { flex: 1 0 100%; }
@media (min-width: 400px) { .sn-toolbar__count { flex: 0 0 auto; margin-left: auto; } }

/* Dugme postoji samo bez JavaScript-a; `initListControls()` stavi
   `data-sn-controls-js` na formu i selekt se šalje na promjenu. */
.sn-toolbar__submit { flex: 0 0 auto; }
[data-sn-controls-js] .sn-toolbar__submit { display: none; }

/* Skriveni panel: `[hidden]` je UA default, ali `.wrap` i utility klase u
   sn-theme.css postavljaju `display`, pa se eksplicitno obara. */
[data-sn-line][hidden] { display: none; }

@media (prefers-reduced-motion: reduce) {
  .sn-tab, .sn-tab__count { transition: none; }
}


/* ============================================================================
 * 14. PADAJUĆA LISTA U TEMI (`.sn-select`), 2026-08-01
 * ----------------------------------------------------------------------------
 * Zatvoren `<select>` se da stilizovati (`.field` mu daje pilulu), ali NJEGOVU
 * OTVORENU LISTU crta operativni sistem — siva ploha sa plavim highlightom,
 * potpuno strana tamnoj temi, i nijedan CSS je ne dohvata. Zato `initSelects()`
 * preko nativnog selekta gradi `role="listbox"`, a selekt ostaje u DOM-u kao
 * izvor istine za GET formu i kao jedina kontrola bez JavaScript-a.
 *
 * Bez JS-a se ovaj blok NE aktivira (`.sn-select` klasu dodaje JS), pa se vidi
 * nativni selekt — ružniji, ali potpuno funkcionalan.
 * ========================================================================== */
.sn-select .sn-control__field { position: relative; }

/* Nativni selekt se sklanja iz vidnog polja, ali ostaje fokusabilan za AT koji
   ga koristi direktno; vizuelnu i tastaturnu ulogu preuzima `__trigger`. */
.sn-select select {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
/* Strelica iz markupa pripada nativnom selektu — okidač crta svoju. */
.sn-select .sn-control__chevron { display: none; }

.sn-select__trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
  width: 100%;
  text-align: left;
  cursor: pointer;
}
/* Strelica okidača — ista geometrija koju je imala `.sn-control__chevron`,
   samo se rotira kad je lista otvorena. */
.sn-select__trigger::after {
  content: "";
  flex: 0 0 auto;
  width: .5rem;
  height: .5rem;
  margin-right: .125rem;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  color: var(--sn-silver-dark);
  transition: transform .25s var(--ease);
}
.sn-select.is-open .sn-select__trigger::after { transform: translateY(1px) rotate(225deg); }
.sn-select.is-open .sn-select__trigger { border-color: rgba(176, 141, 87, .45); }

.sn-select__list {
  position: absolute;
  z-index: 40;
  top: calc(100% + .5rem);
  left: 0;
  right: 0;
  min-width: 100%;
  max-height: 15rem;
  overflow-y: auto;
  overscroll-behavior: contain;
  margin: 0;
  padding: .375rem;
  list-style: none;
  border-radius: .875rem;
  border: 1px solid var(--sn-hairline-2);
  background: rgba(14, 30, 44, .96);
  -webkit-backdrop-filter: blur(16px);
          backdrop-filter: blur(16px);
  box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .8);
}

.sn-select__option {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .5rem .75rem;
  border-radius: .625rem;
  font-size: 13px;
  line-height: 1.2;
  color: var(--sn-silver);
  cursor: pointer;
  transition: background-color .15s var(--ease), color .15s var(--ease);
}
/* `is-active` je stavka pod mišem/strelicama, `is-selected` je izabrana —
   dva različita stanja, kao u nativnom listboxu. */
.sn-select__option.is-active { background: rgba(255, 255, 255, .07); color: var(--sn-heading); }
.sn-select__option.is-selected { color: var(--sn-accent); }

/* Kvačica ispred izabrane; ostale drže isti uvlaku praznim mjestom, da tekst
   ne skače pri promjeni izbora. */
.sn-select__option::before {
  content: "";
  flex: 0 0 auto;
  width: .875rem;
  height: .875rem;
  background: currentColor;
  opacity: 0;
  -webkit-mask: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M9.55 17.6 4 12.05l1.4-1.4 4.15 4.15L18.6 5.7 20 7.1z'/%3E%3C/svg%3E");
          mask: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M9.55 17.6 4 12.05l1.4-1.4 4.15 4.15L18.6 5.7 20 7.1z'/%3E%3C/svg%3E");
}
.sn-select__option.is-selected::before { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  .sn-select__trigger::after, .sn-select__option { transition: none; }
}

/* ==========================================================================
 * 14. PDP — ključne brojke + ploča sa specifikacijama          (2026-08-02)
 * ==========================================================================
 * Plovilo sa 11+ redova specifikacije je u desnoj koloni pravilo spisak od ~1150
 * px, dok galerija lijevo staje na ~560 px: ispod fotografije je zjapila
 * praznina, a cijena i CTA — jedina dva elementa koja nešto traže od posjetioca —
 * padali su van prvog ekrana. Zato preko praga (view: `$specCompactMax`) kolona
 * zadržava samo KLJUČNE BROJKE, a pun spisak silazi u ploču preko cijele širine.
 *
 * Ploča NE uvodi novu površinu: `bg-ink-soft` + hairline + veliki radijus su
 * isti jezik koji blok forme upita već koristi odmah ispod nje.
 * Ispod praga se ništa od ovoga ne primjenjuje — tamo stoji izvorni <dl>.
 * ========================================================================== */

/* --- 14.1 Ključne brojke ------------------------------------------------- */
/* `auto-fit` a ne fiksne 4 kolone: kad model nema sve slotove strip dobije tri
   brojke i one se rasporede po istoj širini, bez rupe na kraju reda.
   MINIMUM JE 130 px, ne 112: na telefonu (kolona ~350 px) 112 je davalo TRI
   kolone za četiri brojke, pa je četvrta ostajala sama u drugom redu, a duga
   vrijednost („9.06 – 9.90 m") se u 116 px lomila preko svoje labele. 130 daje
   2 kolone na telefonu (4 brojke → uredan 2×2) i 4 na desktopu (kolona ~560 px),
   bez ijednog media query-ja. */
.sn-keyfigs {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
  gap: 0;
  margin-bottom: 0;
  border-bottom: 1px solid var(--sn-hairline);
}
/* OD `lg` DO ~1200 px hero se lomi u dvije kolone, pa strip dobija samo ~433 px
   i `auto-fit` stane na TRI staze — četiri brojke tada daju raspored 3+1, sa
   četvrtom samom u drugom redu. `auto-fit` to ne može sam da izbjegne: on pakuje
   koliko stane i ne zna koliko stavki dolazi. Zato u tom pojasu četiri brojke
   idu u uredan 2×2.
   Uslovljeno na `data-n="4"` jer bi isto pravilo model sa TRI brojke (17 modela,
   npr. Astondoa 577 Coupé bez podatka „Osoba") oborilo sa 3 u nizu na 2+1. */
@media (min-width: 1024px) and (max-width: 1199.98px) {
  .sn-keyfigs[data-n="4"] { grid-template-columns: repeat(2, 1fr); }
}
/* Bar jedna vrijednost duža od devet znakova (raspon dužine ili snage) — četiri
   kolone joj ne daju ni 124 px, pa se lomi preko svoje labele. Dvije kolone joj
   daju ~264 px na desktopu i ~159 px na telefonu.
   MORA biti POSLIJE gornjeg media query-ja: ista specifičnost, pa odlučuje
   redoslijed, a ovo pravilo važi na svim širinama. */
.sn-keyfigs[data-wide="1"] { grid-template-columns: repeat(2, 1fr); }
/* Linija je NA STAVKAMA, ne na kontejneru: kad se strip prelomi u dva reda,
   drugi red tako dobije svoju gornju liniju i redovi se ne slijepe. Sa
   `border-top` na kontejneru separatora ne bi bilo. */
/* Razmak do susjedne kolone je padding SVIH stavki s desne strane — ne
   `gap` (prekinuo bi liniju u isprekidane crtice) i ne `padding-inline-start`
   na `+ .sn-keyfig` (u 2×2 rasporedu treća stavka je PRVA u svom redu, pa bi
   dobila lijevi razmak koji prva nema i kolone bi se raspoređivale). */
.sn-keyfig {
  padding: 1.0625rem 1rem .9375rem 0;
  border-top: 1px solid var(--sn-hairline);
}

/* `<dd>` je namjerno PRIJE `<dt>` u markup-u (brojka pa labela): vizuelni
   redoslijed se ne smije praviti CSS-om jer čitač ekrana ide po DOM-u. */
.sn-keyfig__n {
  margin: 0;
  font-family: var(--sn-font-display);
  font-size: 29px;
  line-height: 1;
  color: var(--sn-heading);
  font-variant-numeric: tabular-nums;
}
.sn-keyfig__k {
  margin-top: .4375rem;
  font-family: var(--sn-font-body);
  font-size: 10.5px;
  line-height: 1.3;
  text-transform: uppercase;
  letter-spacing: .13em;
  color: var(--sn-silver-dark);
}

/* --- 14.2 Ploča --------------------------------------------------------- */
.sn-specs {
  border: 1px solid var(--sn-hairline);
  border-radius: 1.5rem;
  background: var(--sn-ink-soft);
  padding: 2.125rem 2rem 2.25rem;
}
.sn-specs__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1.25rem;
  flex-wrap: wrap;
  padding-bottom: 1.375rem;
  border-bottom: 1px solid var(--sn-hairline);
}
.sn-specs__meta {
  margin: 0;
  font-family: var(--sn-font-body);
  font-size: 12px;
  letter-spacing: .1em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
  color: var(--sn-silver-dark);
}

/* Grupe u `auto-fit` kolone — nejednake dužine se same poravnaju, pa se ne mora
   ručno birati koja grupa ide u koju kolonu (a taj izbor bi pukao čim model
   dobije novi slot). */
.sn-specs__groups {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(228px, 1fr));
  gap: 2.125rem 2.75rem;
  margin-top: 1.625rem;
}
.sn-specs__group { display: flex; flex-direction: column; }

/* Ravan prikaz — `columns`, ne grid. Multi-column puni PRVU kolonu do kraja pa
   prelazi u drugu, pa se spisak čita nadolje i izvorni redoslijed ostaje.
   Grid bi ređao slijeva nadesno, pa bi se dužina/širina/trup čitali popreko.
   Dvije kolone, ne tri: 11 redova daje 6+5, a duga vrijednost (kad se pojavi)
   ima ~560 px umjesto ~360 px, pa stane u par redova.
   `break-inside: avoid` drži red na okupu na prelomu kolone. */
.sn-specs__flat {
  margin: 1.625rem 0 0;
  columns: 2;
  column-gap: 2.75rem;
}
.sn-specs__flat .sn-specs__row {
  break-inside: avoid;
  -webkit-column-break-inside: avoid;
}
/* Prvi red u koloni ne smije da nosi gornji razmak koji bi ga odlijepio od vrha
   druge kolone — hairline ispod reda je ionako nosilac ritma. */
.sn-specs__flat .sn-specs__row:first-child { padding-top: 0; }
/* Grupa sa dugom vrijednošću (motorizacija) uzima cio red — u koloni od 228 px
   bi se lomila u tri reda. */
.sn-specs__group.is-wide { grid-column: 1 / -1; }

.sn-specs__gt {
  margin: 0;
  font-family: var(--sn-font-body);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: .15em;
  text-transform: uppercase;
  color: var(--sn-accent);
  padding-bottom: .6875rem;
  border-bottom: 1px solid rgba(176, 141, 87, .26);   /* --sn-accent @ 26% */
}
.sn-specs__group dl { margin: 0; }

/* `flex-wrap` je OVDJE nosilac otpornosti, ne prag u view-u. Vrijednost koja ne
   stane pored labele pada u svoj red (i dalje desno poravnata) umjesto da stisne
   labelu na 30 px i izlomi je u četiri reda. Isto radi i izvorni red u
   kompaktnom spisku (`flex-wrap gap-y-1`), pa se ponašanje poklapa.
   Zato prag `$specIsLong` ne mora da pogodi tačan broj znakova — on odlučuje
   samo ko dobija PUNU ŠIRINU, a sve između se riješi prelamanjem. */
.sn-specs__row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: .25rem 1.125rem;
  padding: .6875rem 0;
  border-bottom: 1px solid var(--sn-hairline);
}
.sn-specs__row dt {
  margin: 0;
  font-family: var(--sn-font-body);
  font-size: 11.5px;
  letter-spacing: .06em;
  color: var(--sn-silver-dark);
}
/* Bez `white-space: nowrap`: vrijednost se smije prelomiti. Uz `flex-wrap` gore
   to znači da srednje duga vrijednost („RINA C ✠ Hull Mach; Y") sama pređe u
   svoj red umjesto da guši labelu. */
.sn-specs__row dd {
  margin: 0;
  font-family: var(--sn-font-body);
  font-size: 14.5px;
  color: var(--sn-heading);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
/* Stvarno duga vrijednost (motorizacija — do 235 znakova): labela IZNAD, tekst
   lijevo poravnat. Desno poravnat blok od deset redova bi bio ragged s obje
   strane; uz to grupa dobija punu širinu (`is-wide`), pa ima gdje da se razvije. */
.sn-specs__row.is-long { display: block; }
.sn-specs__row.is-long dd {
  margin-top: .375rem;
  text-align: left;
  font-size: 14px;
  line-height: 1.55;
}

@media (max-width: 640px) {
  .sn-specs__flat { columns: 1; }
  .sn-specs { padding: 1.625rem 1.25rem 1.75rem; border-radius: 1.25rem; }
  .sn-specs__groups { gap: 1.75rem; }
}

/* Brojka ostaje smanjena SVE DO `md`, ne samo na telefonu. Između 641 i 767 px
   hero je još u jednoj koloni, pa strip ide preko pune širine sa ČETIRI kolone
   od ~128 px. Najduža vrijednost u katalogu („9.06 – 9.90 m", Lomac Adrenalina)
   na 29 px traži 126 px — dva piksela rezerve, koliko i jedna razlika u
   renderovanju fonta na drugom uređaju. Na 25 px rezerva je devetnaest. */
@media (max-width: 767.98px) {
  .sn-keyfig__n { font-size: 25px; }
}
