/*
 Theme Name:   Brokk
 Theme URI:    https://www.brokk.com/
 Description:  Brokk's child theme for Bricks. Holds the site's own components
               (themes/bricks-child/components/), the region and language layer,
               and the overrides that the design system in DESIGN.md documents.
               The design system itself lives in the database, not here.
 Author:       CCO
 Author URI:   https://cco.se/
 Template:     bricks
 Version:      1.2
 Text Domain:  bricks-child
*/


/* ---- Långa ord i rubriker (mobil) ----
   Tyska och polska sammansättningar i versaler är bredare än rutan i mobil
   ("BRANCHENPRÄGENDE" 416 px i en 284 px ruta på The Brokk Way, 2026-10-05) och
   gav sidled-skroll. Avstavning bara för ord på minst 12 tecken, så kortare
   ord bryts som förut; break-word tar det som ändå inte får plats. :where()
   håller vikten på noll. */
@media (max-width: 767px) {
    :where(h1, h2, h3, h4) {
        overflow-wrap: break-word;
        hyphens: auto;
        hyphenate-limit-chars: 12 5 5;
    }
}

/* ---- Ikonspråket (inc/icons.php, Bricks-ikonset "Brokk") ----
   Ikonen tar textens färg och har ingen egen. Utan width/height-attribut
   följer den textstorleken. --flip vänder chevronen uppåt.

   :where() ger reglerna vikten noll: de är reserver, och allt som styr en ikon
   i sitt sammanhang ska vinna utan att behöva räkna vikt. Utan det tog
   svg.brokk-icon:not([width]) över .btn--pill > svg (3em-plattan med 1.05em
   padding) och nedladdningsikonen i produktbladsknappen blev 0 px bred
   innanför sin padding — osynlig (2026-09-18). */
:where(.brokk-icon) { flex: 0 0 auto; }
:where(svg.brokk-icon:not([width])) { width: 1em; height: 1em; }
.brokk-icon--flip { transform: rotate(180deg); }

/* Knappikoner: en storlek överallt, 18 px (Ikonspråk 1b: "Request a quote" med
   pil i 18). Före 2026-09-18 blev det 24 px i vanliga knappar (svg-filens
   width/height), 18 px i Expand all och dropdownknapparna och 13–14 px i
   plattknapparna (.btn--pill: 3em bred platta med 1.05em padding runt).

   Plattan behåller sin bredd, 1.8rem + 2 × 1.4rem = 4.6rem ≈ de 3em den hade,
   men paddingen läggs bara i sidled. Höjden sträcks redan av .btn--pill
   (align-self: stretch), och ikonen centreras i den av viewBox. Två klasser
   plus elementet väger över .btn--pill > svg och .tech-specs-open-all > svg. */
.bricks-button > svg.brokk-icon {
    width: 1.8rem;
    height: 1.8rem;
}

.btn--pill > svg.brokk-icon {
    width: calc(1.8rem + 2 * 1.4rem);
    height: auto;
    padding: 0 1.4rem;
}

/* Avstånd mellan text och ikon: ett värde för knappar, ett för länkar (Anders 2026-11-09).
   Före varierade det 4–21 px: Bricks egna standarder (knapp 10, textlänk 5), id-regler på
   enskilda element (#brxe-…), globala klasser (brokk-hero-xl__btn = --space-xs) och
   komponenter. #brx-content/#brx-footer i selektorn väger över elementens id-regler, så att
   ingen behöver räkna vikt. Sidhuvudet och dropdownknapparna (ikon längst till höger) undantas.
   Ikonfilerna har 3 px luft i sin ram, så det synliga avståndet blir ca 3 px större. */
body :is(#brx-content, #brx-footer) .bricks-button:not(.c-dropdown__toggle):has(> svg, > i, > .icon) {
    column-gap: var(--icon-gap-btn);
}
body :is(#brx-content, #brx-footer) :is(.brxe-text-link, .brokk-ind__link, .brokk-ind-cards__more, .bapp-all__open, .brk-event__back, .brk-as-head__link, .pp-link, .brk-pl__case-cta, .brk-il__case-cta, .brk-il__compare-cta, .dl__geo):has(svg, i) {
    column-gap: var(--icon-gap-link);
}

/* Textlänkar med ikon (Bricks Text link): samma 18 px som knapparna. Bricks ritar ikonen i
   24 px, vilket blev för stort bredvid de små versalerna i "View all posts" (2026-11-09). */
.brxe-text-link > .icon > svg.brokk-icon {
    width: 1.8rem;
    height: 1.8rem;
}

/* Pil efter text: samma lilla knuff åt höger överallt (plan 079). Gäller ikonsetets pil
   (brokk_icon( 'arrow' ) och Bricks ikon "Brokk arrow"), relaterat- och Explore-kortens
   pilikon och Services-pilarna som ritas med ::after. Hover bara för mus, fokus för
   tangentbord, stilla vid reducerad rörelse. Externa länkar (↗) och chevroner rörs inte.
   Komponenter ska inte ha egen pilknuff; regeln täcker dem. */
:is(a, button) :is(svg.brokk-icon--arrow, .brk-pk__related-icon:not(.brokk-icon--external), .brk-explore__arrow),
.brk-sv-linklist a:not([href^="tel:"])::after,
.brk-sv-card__cta::after,
.brk-sv-self__cta::after,
.brk-sv-self__more a::after {
    transition: translate var(--dur-fast) var(--ease-out);
}
@media (prefers-reduced-motion: no-preference) {
    :is(a, button):focus-visible :is(svg.brokk-icon--arrow, .brk-pk__related-icon:not(.brokk-icon--external), .brk-explore__arrow),
    .brk-sv-linklist a:not([href^="tel:"]):focus-visible::after,
    .brk-sv-card:focus-within .brk-sv-card__cta::after,
    .brk-sv-self__item:focus-within .brk-sv-self__cta::after,
    .brk-sv-self__more a:focus-visible::after {
        translate: var(--arrow-nudge) 0;
    }
}
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
    :is(a, button):hover :is(svg.brokk-icon--arrow, .brk-pk__related-icon:not(.brokk-icon--external), .brk-explore__arrow),
    .brk-sv-linklist a:not([href^="tel:"]):hover::after,
    .brk-sv-card:hover .brk-sv-card__cta::after,
    .brk-sv-self__item:hover .brk-sv-self__cta::after,
    .brk-sv-self__more a:hover::after {
        translate: var(--arrow-nudge) 0;
    }
}

/* ---- Responsive embed (YouTube / Vimeo) ---- */
/* Universal: alla YouTube/Vimeo-iframes blir 100% breda + 16:9 utan wrapper */
iframe[src*="youtube.com"],
iframe[src*="youtu.be"],
iframe[src*="youtube-nocookie.com"],
iframe[src*="vimeo.com"],
iframe[src*="player.vimeo.com"],
/* Complianz byter src mot about:blank tills samtycke finns och lägger adressen här */
iframe[data-src-cmplz*="youtube"],
iframe[data-src-cmplz*="vimeo"],
.embed-responsive iframe {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    aspect-ratio: 16 / 9;
    border: 0;
}

/* ---- Button: pill-icon modifier --------------------------------
 * Adds a darker "pill" on the right side of any .bricks-button that
 * contains an SVG icon. Works on top of all ACSS button variants
 * (primary / secondary / base / neutral, light / dark, outline, etc.)
 *
 * Usage: add `btn--pill` as a CSS class on the button in Bricks.
 *   <a class="bricks-button btn--primary btn--pill">Read more <svg>...</svg></a>
 * ------------------------------------------------------------ */
.btn--pill {
    display: inline-flex !important;
    align-items: center;
    overflow: hidden;
    padding-right: 0 !important;
    transition:
        background-color 0.35s ease,
        color            0.35s ease,
        border-color     0.35s ease,
        box-shadow       0.35s ease !important;
}

/* Solid pill buttons: drop the ACSS border entirely. It reads as an ugly frame —
 * a primary-colored ring peeking around the darker icon area (and around the whole
 * button on hover, when the background changes but the border color doesn't).
 * Outline pills keep theirs — the border IS that variant.
 *
 * The removed border MUST be paid back as padding. ACSS buttons are border-box
 * with auto height, so dropping the border made every solid pill exactly
 * 2×--btn-border-width shorter (and its label 1× closer to the left edge) than
 * the ACSS buttons beside it. Paying it back in ACSS's own tokens keeps the box
 * math identical at every size (btn--s/--l scale via the em-based padding) while
 * the icon pill still reaches the outer edge — merely making the border
 * TRANSPARENT would restore the height but clip the dark pill at the padding
 * box, leaving a visible ring of button colour around it. */
.btn--pill:not(.btn--outline) {
    border: 0 !important;
    padding-block: calc(var(--btn-padding-block) + var(--btn-border-width)) !important;
    padding-left: calc(var(--btn-padding-inline) + var(--btn-border-width)) !important;
}

.btn--pill > svg {
    flex-shrink: 0;
    align-self: stretch;
    width: 3em;
    height: auto;    /* override HTML attribute height="16" */
    /* Negativa margins drar SVG:n ut i knappens padding så pill-ytan
       fyller knappen kloss top→bottom. Klipps av overflow:hidden. */
    margin-block: -100px;
    margin-left: var(--btn-medium-inline, 1.5rem);
    padding: 1.05em;
    box-sizing: border-box;
    background-color: rgba(0, 0, 0, 0.18);   /* darken any underlying color */
    color: inherit;
    transition: background-color 0.35s ease;
}

/* For outline / light-background buttons the dark overlay would look harsh
 * — invert to a soft light overlay instead. */
.btn--pill.btn--outline > svg,
.btn--pill[class*="light"]:not([class*="background-"]) > svg {
    background-color: rgba(0, 0, 0, 0.08);
}

.btn--pill:hover > svg {
    background-color: var(--base);
    color: var(--base-light, #d9d9d9);
}

/* Fixed min-width so the button doesn't resize when the label toggles
   between "Expand all" / "Collapse all". */
.tech-specs-open-all,
.tech-specs-open-all.btn--pill,
.tech-specs-open-all.is-open {
    min-width: 185px;
    justify-content: center;
}

/* "Expand all" specs toggle: NO hover effect at all (still uses .btn--pill markup). */
.tech-specs-open-all.btn--pill,
.tech-specs-open-all.btn--pill > svg {
    transition: none !important;
}
.tech-specs-open-all.btn--pill:hover {
    box-shadow: none;
}
/* Icon is a masked currentColor glyph — keep it unchanged on hover. */
.tech-specs-open-all.btn--pill:hover > svg {
    background-color: currentColor;
    transform: none;
}

/* Expand/collapse icon: render the button's <svg> as a masked icon that swaps
   with state and inherits the text colour. (Replaces the btn--pill arrow.)
   Ikonsetet: Plus stängd, Minus öppen — plus/minus är dragspelets ikoner. */
.tech-specs-open-all > svg {
    width: 1.1em;
    height: 1.1em;
    flex: 0 0 auto;
    margin: 0 0 0 0.5em;
    padding: 0;
    background-color: currentColor;
    -webkit-mask: url("/wp-content/themes/bricks-child/icons/brokk-plus.svg") center / contain no-repeat;
            mask: url("/wp-content/themes/bricks-child/icons/brokk-plus.svg") center / contain no-repeat;
}
.tech-specs-open-all.is-open > svg {
    -webkit-mask-image: url("/wp-content/themes/bricks-child/icons/brokk-minus.svg");
            mask-image: url("/wp-content/themes/bricks-child/icons/brokk-minus.svg");
}

/* ---- Hero hover reveal --------------------------------------
 * Add the class `hero-reveal` to the hero <section>.
 * Targets the existing `.overlay::before` pseudo (which already
 * provides the dark tint via var(--black-trans-50)).
 * On hover, the overlay lightens so the bg image shines through.
 * Text inside gets a subtle shadow so it stays legible.
 * ------------------------------------------------------------ */
/* Works whether `hero-reveal` is on the <section> OR on the overlay <figure> itself */
.hero-reveal .overlay::before,
.hero-reveal.overlay::before,
.hero-reveal :where(.overlay)::before {
    transition: background-color 0.4s ease !important;
}

.hero-reveal:hover .overlay::before,
.hero-reveal.overlay:hover::before,
.hero-reveal:hover :where(.overlay)::before {
    background-color: rgba(10, 10, 10, 0.25) !important;
}

.hero-reveal :is(h1, h2, h3, .brxe-heading) {
    text-shadow: 0 1px 16px rgba(0, 0, 0, 0.55);
}

/* Body text needs more help against bright bg on hover.
 * Stacked shadows create a soft localised dark patch behind the
 * text without needing extra markup or z-index tricks. */
.hero-reveal :is(p, .brxe-text-basic) {
    font-weight: 500;
    text-shadow:
        0 0 2px  rgba(0, 0, 0, 0.95),
        0 0 10px rgba(0, 0, 0, 0.85),
        0 0 28px rgba(0, 0, 0, 0.7),
        0 0 56px rgba(0, 0, 0, 0.55);
}

/* ---- News/post body: tidy image alignments -----------------
 * Articles use WP's alignleft/alignright/aligncenter on inline
 * <img>/<figure>. Left/right are kept as a polished ~50% float so
 * text wraps nicely beside the image (50/50 feel); centre/none
 * become full-width blocks. On small screens floats stack to 100%.
 * Scoped to the single-post wrapper so the rest of the site is
 * untouched. Fixes every article at once. (Master plan 1.4)
 * ------------------------------------------------------------ */
.brokk-single-post__content :is(img, figure) { max-width: 100%; height: auto; }

/* Aligned images → clean full-width centred blocks.
 * Floating the (tall) imported article images leaves awkward whitespace
 * next to short paragraphs, so every article image is presented as a
 * consistent full-width block regardless of the editor's align choice.
 * To make images intentionally smaller, change `width: 100%` to e.g. 75%. */
.brokk-single-post__content :is(img, figure):is(.alignleft, .alignright, .aligncenter, .alignnone) {
    float: none;
    display: block;
    width: 100%;
    margin: var(--space-m, 2rem) auto;
}
.brokk-single-post__content figure img { width: 100%; height: auto; }

/* Alla artikelbilder fyller textspalten, även utan align-klass (Anders 2026-10-06).
 * wp-image-* = bild infogad i texten; galleriernas bilder saknar klassen och står kvar
 * i sitt rutnät. Den klassiska bildtextramen (.wp-caption) hade 3 px padding + 1 px kant
 * och en inline-bredd i pixlar → bilden blev 8 px smalare än spalten. */
.brokk-single-post__content img[class*="wp-image-"] {
    display: block;
    width: 100%;
    height: auto;
}
.brokk-single-post__content .wp-caption {
    max-width: 100%;
    padding: 0;
    border: 0;
}
/* Långa adresser i brödtexten (YouTube-adresser, ofta som vanlig text) får brytas,
 * annars sidled-skroll i mobil. break-word bryter bara ord som inte får plats. */
.brokk-single-post__content { overflow-wrap: break-word; }

/* ---- Mobilheaderns träffytor -----------------------------------
 * Sökknappen renderar 34x34 och regionväljaren 26px hög — båda under
 * de 44px som gäller för touch. De sitter dessutom kant i kant (0px
 * mellanrum), så de kan inte bara växa i sidled utan att träffytorna
 * skulle överlappa och göra det oförutsägbart vad en tumme träffar.
 *
 * Därför: höjd och bredd upp till 44px, plus en liten lucka emellan.
 * Raden växer från 40 till 44px på mobil, vilket är hela ingreppet.
 * Ikonernas visuella storlek är oförändrad — det är bara den
 * klickbara ytan runt dem som blir större.
 *
 * Scopat till <=991 där burgaren tar över och enheten rimligen är
 * touch. Pekdon har en lägre tröskel och desktop lämnas orörd.
 * ------------------------------------------------------------ */
@media (max-width: 991px) {
    .brokk-search-trigger {
        min-width: 44px;
        min-height: 44px;
        margin-right: var(--space-xs);
    }

    /* Boxen blir 44px hög. Att de yttersta hörnen inte aktiverar knappen är
       inte en bugg utan formen: triggern är en pillerknapp med
       border-radius:999px (region-switcher.css:22), alltså 22px radie på en
       44px hög knapp. Träffytetestet följer border-radius, inte boxen, så en
       punkt (d,d) in från hörnet ligger utanför tills d >= 22-22/sqrt(2) ~ 6,4px.
       Uppmätt: d=3 ger .brxe-shortcode, d=6 ger knappen. Wrappern har identisk
       box, vilket är varför det såg ut som att något slukade eventet.
       Vill man ha hela 44x44-rektangeln klickbar är enda rena vägen att sanka
       radien (DESIGN.md foreskriver --radius-xs); det ar ett designbeslut. */
    .brokk-region-trigger {
        min-height: 44px;
    }

    /* Brokk-menyns knapp för undermenyn (sidfoten): minst 44 × 44 px träffyta.
       Knappen fyller radens höjd (raden är länkens höjd, se nedan), så
       föräldraposter och vanliga poster blir lika höga. Ikonen behåller sin
       storlek, centrerad i knappen. Tidigare BricksExtras-knappen satt inuti
       länken och krävde negativa marginaler för samma resultat (2026-09-22). */
    .brokk-menu__toggle {
        min-width: 44px;
        min-height: 44px;
    }

    /* Förälder utan egen sida (hela raden är knappen): pilen centreras i samma
       44 px breda ruta, så att den står där den stod. */
    .brokk-menu__link--toggle > .brokk-menu__icon {
        min-width: 44px;
    }

    /* Undermenyns poster en aning indragna så nivån syns. 0-6-0 väger över
       sidfotsklassens padding-left: 0, som Bricks skriver inline efter temat som
       .brokk-footer-menu__link-text.brxe-brokk-menu .menu-item > … (0-5-0). */
    .brxe-brokk-menu.brokk-menu .sub-menu > .menu-item > .brokk-menu__row > .brokk-menu__link {
        padding-left: calc(10px + var(--space-xs));
    }
}

/* ══════════════════════════════════════════════════════════════════════════
   Klassiskt innehåll får inte vara bredare än skärmen

   Bricks theme style sätter `#brx-content.wordpress { width: var(--content-width) }`
   — alltså en FAST bredd på 1600px, utan max-width. `.wordpress`-klassen sätts
   på sidor vars innehåll är klassiskt WordPress-innehåll i stället för
   Bricks-element.

   Följden: sådana sidor är 1600px breda oavsett skärm. Uppmätt på
   /services/manuals-tech-documents/ vid 375px viewport: 1240px horisontellt
   spill, alltså 1600 minus 360. Vid 1000px: 615px.

   Rätt fix vore max-width i själva theme style-inställningen, men den är en
   global Bricks-inställning i databasen. Den här raden gör samma sak utan att
   röra den, och kostar ingenting när sidan ändå får plats.

   Hittad i ett svep av sajtens 76 publicerade sidor. Det var den enda av de
   fyra funna spill-orsakerna som hade en GLOBAL grund — övriga tre sitter i
   enskilda elements egen data. */
#brx-content.wordpress {
    max-width: 100%;
}

/* ══════════════════════════════════════════════════════════════════════════
   Partnergalleriets bilder får inte spränga spalten

   Galleriet är inline-HTML inuti ett Bricks-textelement, importerat från den
   gamla sajten av _project-docs/scripts/import-partner-products.php:

       <div class="partner-gallery" style="display:flex; flex-wrap:wrap; …">
         <figure style="margin:0; flex: 0 0 auto;">
           <img style="max-width: 420px; height: auto;" …>

   Två saker gör att bilderna inte kan krympa: figuren har `flex: 0 0 auto`,
   alltså noll shrink, och bilden har en absolut max-width i pixlar i stället
   för en relativ. På /partner-products/darda/, /ecovolve/ och
   /firstgreen-industries/ är spalten 320px vid 375px viewport medan bilden är
   420 — uppmätt 80px horisontellt spill.

   `!important` behövs på BÅDA reglerna eftersom både figurens flex och bildens
   max-width står som INLINE-stil, och inline vinner annars över varje stilmall.
   Det är inte specificitetskapplöpning för dess egen skull — det är enda vägen
   att nå värden som ligger i importerad markup.

   Båda behövs, och det räcker inte med den ena: med enbart max-width på bilden
   står figuren kvar på `flex: 0 0 auto` och behåller sin bredd från bildens
   naturliga 420px, varpå bildens `100%` resolverar mot just 420 och ingenting
   händer. Först när figuren får krympa (`flex-shrink: 1` plus `min-width: 0`)
   följer bilden med ned till spaltens bredd.

   Fixen sitter i CSS och inte i innehållet just för att markupen kommer från ett
   importskript: rättas den i databasen kommer nästa import tillbaka med samma
   inline-stilar. */
.partner-gallery figure {
    flex: 0 1 auto !important;
    min-width: 0;
}

.partner-gallery img {
    max-width: 100% !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   Den delade dropdown-sektionen får rundade hörn

   Sektionen finns på två sidor — startsidan och
   /brokk-innovations/what-is-a-demolition-robot/ — och är två paneler: ett foto
   och en gul yta, var och en med en dropdown-knapp.

   ── Varför rundningen INTE sitter på containern ────────────────────────────
   Först låg en enda regel på den inre containern. Den fungerade visuellt, men
   containern har overflow: hidden, och dropdownernas paneler ligger INUTI
   panelerna och fälls ut 308px nedanför containerns underkant. De klipptes av.

   Klippningen fanns före rundningen — overflow: hidden kommer från Bricks — men
   en radius på containern kan inte finnas utan den: utan klippning hade
   panelernas raka hörn stuckit ut genom den rundade containern.

   Därför flyttas rundningen ut till panelerna själva, och containern slutar
   klippa. Då kan dropdownen ta sig ut, och hörnen sitter ändå.

   ── Varför per hörn, och varför en brytpunkt ──────────────────────────────
   Bara ytterhörnen ska rundas. De två kanter som möts i mitten ska vara raka —
   en full radius på båda panelerna hade gett en rundad söm mitt i rutan.

   Vilka hörn som är ytterhörn beror på hur panelerna ligger, och de byter plats
   vid 991px (uppmätt: 992 ger två spalter, 991 en). Dessutom byter de ordning —
   på mobil ligger den GULA panelen överst trots att fotot står först i DOM:en.
   Därför pekar mobilreglerna på :last-child för toppen.

   ── Fotot ─────────────────────────────────────────────────────────────────
   Fotopanelens egen bakgrund är genomskinlig; den synliga ytan är en <figure>
   med en <img> i. Figuren får därför samma hörn som sin panel, plus
   overflow: hidden så att bilden klipps mot dem. Det är säkert att klippa just
   figuren: dropdownen är dess SYSKON, inte dess barn.

   ── Varför !important på overflow ─────────────────────────────────────────
   overflow: hidden är INTE en temadefault — den är satt som en inställning på
   just den containern i Bricks-byggaren, och Bricks skriver ut den som en
   id-regel:

       #brxe-krkkqi { overflow: hidden }

   En id-väljare (1-0-0) slår varje klassväljare, så regeln nedan förlorade utan
   !important — uppmätt: panelernas hörn satt, men overflow stod kvar på hidden
   och dropdownen klipptes fortfarande.

   Att i stället möta den med en egen id-väljare går inte: id:t är olika på de
   två sidorna (brxe-krkkqi på startsidan, brxe-kkyvfl på what-is-a-demolition-
   robot). En klassregel med !important är det enda som täcker båda.

   Går inställningen att stänga av i byggaren är det den snyggare vägen, och då
   blir raden nedan överflödig men oskadlig.

   --radius (5px) enligt DESIGN.md: en box som håller innehåll. */
.split-dropdown-section > .brxe-container {
    overflow: visible !important;
    border-radius: var(--radius, 5px);
}

.split-dropdown-section > .brxe-container > * > figure {
    overflow: hidden;
}

/* Panelens ::before måste följa panelens hörn.

   Bricks lägger bakgrundsbilden på ett ::before som är absolutpositionerat över
   hela panelen, inte på panelen själv. Pseudoelementet ärver inte border-radius,
   så det låg kvar som en rak fyrkant OVANPÅ de rundade hörnen och gjorde dem
   raka igen. Uppmätt på den gula panelen: ::before på 646x484 med
   border-radius: 0, kant i kant med panelen.

   Det syntes inte i felsökningen förrän radien tillfälligt sattes till 40px:
   då rundades fotosidan tydligt medan den gula förblev spikrak. Att ta bort
   panelens background-color ändrade ingenting, eftersom det gula i praktiken
   kommer från pseudoelementets bild.

   inherit och inte ett fast värde: panelerna har olika hörn beroende på
   brytpunkt (se reglerna nedan), och inherit följer med automatiskt.

   overflow: hidden på panelen vore det enklare greppet men är uteslutet —
   dropdownen ligger inuti panelen och måste kunna fällas ut nedanför den. */
.split-dropdown-section > .brxe-container > *::before {
    border-radius: inherit;
}

/* Sida vid sida: foto till vänster, gul till höger */
@media (min-width: 992px) {
    .split-dropdown-section > .brxe-container > *:first-child,
    .split-dropdown-section > .brxe-container > *:first-child > figure {
        border-radius: var(--radius, 5px) 0 0 var(--radius, 5px);
    }

    .split-dropdown-section > .brxe-container > *:last-child {
        border-radius: 0 var(--radius, 5px) var(--radius, 5px) 0;
    }
}

/* Staplade: den gula (:last-child) hamnar överst, fotot under */
@media (max-width: 991px) {
    .split-dropdown-section > .brxe-container > *:last-child {
        border-radius: var(--radius, 5px) var(--radius, 5px) 0 0;
    }

    .split-dropdown-section > .brxe-container > *:first-child,
    .split-dropdown-section > .brxe-container > *:first-child > figure {
        border-radius: 0 0 var(--radius, 5px) var(--radius, 5px);
    }
}


/* ------------------------------------------------------------
 * .btn-white — vit knapp, för mörka ytor
 *
 * ACSS har primary/secondary/outline men ingen vit variant.
 *
 * Usage: lägg `btn-white` som CSS-klass på knappen i Bricks.
 *   <a class="bricks-button btn-white">Login to My Brokk</a>
 *
 * SÄTTER ACSS EGNA VARIABLER, INTE background-color.
 * Första försöket satte background-color på .bricks-button.btn-white och tog
 * inte. ACSS ritar knappen med `background: var(--btn-background)` — en
 * kortform, som slår en senare background-color oavsett specificitet. Dess
 * ark (automatic-bricks.css, style-manager.min.css) laddas dessutom EFTER
 * style.css. Att sätta variablerna i stället gör regeln ordningsoberoende och
 * låter ACSS behålla all sin geometri.
 * Uppmätta namn: --btn-background, --btn-border-color, --btn-text-color,
 * --btn-background-hover.
 *
 * Två klasser i selektorn, inte en. Knappen bär i praktiken alltid en
 * ACSS-variant (btn--primary m.fl.) som sätter samma variabler med
 * specificitet 0,1,0 — och laddas senare. .btn-white ensam förlorade därför.
 * .bricks-button.btn-white är 0,2,0 och vinner oavsett ordning.
 * ------------------------------------------------------------ */
.bricks-button.btn-white,
.brxe-button.btn-white {
    /* Variablerna för ACSS egen geometri och hover ... */
    --btn-background: var(--white);
    --btn-border-color: var(--white);
    --btn-text-color: var(--text-dark);
    --btn-background-hover: var(--neutral-light);

    /* ... och färgerna direkt, för att faktiskt måla.
       Att bara sätta --btn-background räckte inte: uppmätt blev variabeln #fff
       men knappen fortsatte rita gult. Målningen sker i automatic-bricks.css
       på [class*="btn--"], och ett variabelbyte ensamt slog inte igenom.
       .bricks-button.btn-white är 0,2,0 mot den regelns 0,1,0. */
    background: var(--white);
    border-color: var(--white);
    color: var(--text-dark);
}

.bricks-button.btn-white:is(:hover, :focus-visible),
.brxe-button.btn-white:is(:hover, :focus-visible) {
    background: var(--neutral-light);
    border-color: var(--neutral-light);
    color: var(--text-dark);
}

/* ── Formulärknappar (WS Form) ──────────────────────────────
   Alla WS Form-knappar bär bricks-button btn--primary (fältklass i WS Form)
   och ska se ut som sajtens övriga primärknappar. Två regler skriver annars
   över det: WS Forms egen (.wsf-form button.wsf-button) byter typsnitt,
   storlek och padding till sitt fältfont, och ACSS:s .form--light målar
   knappen --neutral. Här sätts ACSS:s knapptokens och primärfärgerna
   tillbaka, sajtbrett, så det räcker med en regel i stället för en per
   formulär (startsidan, kontaktsidan, branschsidorna). Typsnittet är det
   enda som saknar token: temastilen sätter Saira direkt på .bricks-button,
   så samma familj upprepas här med flit. Hovern behöver !important —
   ACSS:s form--light-hover vann även med högre specificitet. */
/* ACSS:s form--light-regel väger tyngre och läser --f-btn-font-weight; WS Form
   läser sin egen. Båda sätts till 600 så vikten blir 600 överallt. */
.wsf-form {
    --f-btn-font-weight: 600;
    --wsf-field-button-font-weight: 600;
}

.wsf-form button.wsf-button.bricks-button {
    width: auto;
    min-width: var(--btn-min-width, 14rem);
    padding: var(--btn-pad-y, .875em) var(--btn-pad-x, 1.5em);
    font-family: "Saira Semi Condensed", sans-serif;
    font-size: var(--btn-font-size, var(--text-m));
    font-weight: 600; /* fast, inte --btn-weight: den gav 700 på vissa sidor */
    line-height: var(--btn-line-height, 1);
    letter-spacing: var(--btn-letter-spacing, 0);
    text-transform: var(--btn-text-transform, uppercase);
    border-width: var(--btn-border-width, 2px);
    border-radius: var(--btn-radius, var(--radius-xs));
}

.wsf-form button.wsf-button.bricks-button.btn--primary {
    background: var(--primary, #ffcd00);
    border-color: var(--primary, #ffcd00);
    color: var(--primary-ultra-dark, #332900);
}

.wsf-form button.wsf-button.bricks-button.btn--primary:hover,
.wsf-form button.wsf-button.bricks-button.btn--primary:focus-visible {
    background: var(--primary-hover, #ffd324) !important;
    border-color: var(--primary-hover, #ffd324) !important;
    color: var(--primary-ultra-dark, #332900) !important;
}

/* ── <pre> i inläggstext = bildtext, inte kod ────────────────
   Nyhetsinläggen från gamla sajten (t.ex. "What's north of north", "Electric
   pioneers underground") har bildtexterna som <pre>-block under bilderna, och
   kodstilen gör dem röda i monospace på grå botten. Det finns ingen kod i
   redaktionella inlägg, så <pre> i brödtexten sätts som en bildtext: löpande
   text i brödfonten, dämpad. Ingen kant till vänster (plan 055). */
/* Citat i inläggstext: Bricks ritar en grå 4 px-kant till vänster. Inga
   markeringar i vänsterkanter (plan 055) – citatet bär sig på indraget. */
.brokk-single-post__content blockquote {
    border-left: 0;
}

.brokk-single-post__content pre {
    margin: 0 0 var(--space-m, 2.4rem);
    padding: 0.2em 0;
    border: 0;
    border-radius: 0;
    background: none;
    font-family: inherit;
    font-size: var(--text-s, 1.4rem);
    line-height: 1.55;
    color: var(--text-dark-muted, rgba(0, 0, 0, 0.8));
    white-space: normal;
    overflow: visible;
}

/* Ett <pre> som bara håller bilden är ingen bildtext: ingen kant, ingen
   indragning — bilden ritas som vanligt och texten i nästa <pre> följer. */
.brokk-single-post__content pre:has(> img:only-child) {
    margin-bottom: var(--space-xs, 1.2rem);
    padding: 0;
    border-left: 0;
}

/* ══════════════════════════════════════════════════════════════════════════
   MOBILPOLERING 2026-09-14 — sajtövergripande regler
   Underlag: _project-docs/docs/mobil-inventering-2026-09-14.md, åtgärder i
   _project-docs/docs/handoff-mobilpolering-2026-09-14.md.

   Varför här och inte i respektive komponentfil: flera av komponentfilerna
   (office, contact-hub, contact-form, product-stat-bar, region-switcher,
   360-viewer, product-top) hade ocommittat arbete av Anders när passet
   gjordes, och det arbetet ska inte följa med i mobilpoleringens commit.
   Reglerna nedan är därför grupperade per komponent med sin tilltänkta
   hemvist i rubriken, så att de kan flyttas när den filen är committad.
   Inte automatic-custom-css.scss: den kompileras bara vid en ACSS-
   regenerering (WP_ADMIN-fällan i DESIGN.md) och ligger utanför git.

   Brytpunkterna är projektets: 991 / 767 / 478. Under 992 är enheten
   rimligen touch (huvudmenyn bryter till hamburgare där), så träffytorna
   sätts vid 991 och inte vid hover:none — Chromes emulering och vissa
   plattor med mus skulle annars falla utanför.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Träffytor ≥ 44 px (≤ 991) ──────────────────────────────────────────
   px och inte rem: en träffyta får inte krympa om rotstorleken ändras. */
@media (max-width: 991px) {
    /* Knappar: ACSS ger 43 px (0.975em padding + 2 px ram). En pixel till. */
    .bricks-button,
    .brxe-button {
        min-height: 44px;
    }

    /* Footerns menyer (Brokk-meny): 39/41. Texten i vanliga poster står kvar
       överst i 44-pixelsraden (align-items: stretch från brokk-menu.css), som
       med BricksExtras; föräldraposter centreras, så att text och pil delar
       mittlinje (iOS-skärmdump 2026-09-22). Två klasser: brokk-menu.css
       laddas efter style.css. */
    .brokk-menu .brokk-menu__link {
        min-height: 44px;
    }

    .brokk-menu .menu-item-has-children > .brokk-menu__row > .brokk-menu__link {
        align-items: center;
    }

    /* Footerns legal-rad och sociala ikoner (24×18 inuti 44-rutan). */
    .brokk-footer-legal a,
    .brokk-footer-legal__link {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    .bm-social-share__icon-wrapper .bricks-link-wrapper {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 44px;
        min-height: 44px;
    }

    /* Breadcrumbs (35×13): paddingen betalas tillbaka med negativ marginal
       så bandet inte växer. */
    .brxe-breadcrumbs a.item {
        display: inline-block;
        padding-block: 1.55rem;
        margin-block: -1.55rem;
    }

    /* Kortens länkrad (produkt-/casearkiv: "+ Compare models", "Find a dealer"). */
    .card__content .brxe-text-link {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* Nyhetsartikel: dela-ikoner 34×34, prev/next 21 px höga. */
    .brokk-single-post__share a {
        min-width: 44px;
        min-height: 44px;
    }

    .brokk-single-post__post-navigation a {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* Textlänkar med pil ("View all posts →", "All cases →", footerns
       telefon/e-post): 16–18 px höga. */
    a.brxe-text-link,
    .brokk-footer__alpha a {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* Find dealers: kortens telefon/e-post/webb-länkar (dl-card__contact,
       21 px) — hem: dealer-locator.css. */
    .dl-card__contact {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }

    /* Produktsidans "Read more"-fällning (summary, 25 px). */
    summary.brk-more__toggle {
        min-height: 44px;
        display: flex;
        align-items: center;
    }

    /* Karusellpilarna (startsidans cases, produktsidans redskap): 20×20 → 44.
       Storleken är satt per element i byggaren och kommer som id-regel
       (#brxe-… .splide__arrow), som ingen klassselektor slår — därför
       !important. Ikonens storlek styrs av svg:n, bara knappen växer. */
    .brxe-slider-nested .splide__arrow {
        width: 44px !important;
        height: 44px !important;
    }
}

/* ── news-feed (hem: news-feed.css) ────────────────────────────────────────
   Chipsen är 40 px; news-feed.css sätter det med två klasser och laddas
   efter — tre här. */
@media (max-width: 991px) {
    .brk-feed .brk-feed__chips .brk-feed__chip {
        min-height: 44px;
    }
}

/* ── industry-lower: redskapschips 43 px ─────────────────────────────────── */
@media (max-width: 991px) {
    .brk-il__chips .brk-il__chip {
        min-height: 44px;
    }
}

/* ── product-stat-bar (hem: product-stat-bar.css) ───────────────────────
   Info-knappen ritas 16×16 i kortets hörn. Träffytan växer till 44 via ett
   osynligt pseudoelement — knappen är redan position:absolute. */
@media (max-width: 991px) {
    .product-stat-bar__info-btn::before {
        content: '';
        position: absolute;
        inset: -14px;
    }
}

/* ── 360-viewer (hem: viewer.css) ─────────────────────────────────────────
   Play/helskärm 34×34 → 44. */
@media (max-width: 991px) {
    /* Två klasser: viewer.css laddas efter style.css och sätter 34 px med en. */
    .pv360-controls .pv360-btn {
        width: 44px;
        height: 44px;
    }
}

/* ── region-switcher (hem: region-switcher.css) ────────────────────────────
   Marknadsväljarens modal: raderna 26 px och språkchipsen 23 px. Under 992
   får varje länk 44 px höjd, och stängknappen som region-switcher.js lägger
   in får sin plats i rubrikraden. Modalen fyller bredden minus gutter. */
@media (max-width: 991px) {
    .brokk-market-selector--modal a.brokk-market-selector__lang {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }

    /* Raden är ett rutnät (namn | språk) i region-switcher.css med (0,3,0)
       och min-height 2,6rem; display rörs inte, bara höjden. */
    .brokk-market-selector.brokk-market-selector--modal .brokk-market-selector__row > .brokk-market-selector__link {
        min-height: 44px;
        align-content: center;
    }
}

.brokk-market-selector__close {
    position: absolute;
    top: 0;
    right: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: var(--radius-xs, 2.222px);
    background: transparent;
    color: inherit;
    cursor: pointer;
}

.brokk-market-selector__close:hover,
.brokk-market-selector__close:focus-visible {
    background: var(--hdd-link-bg-hover, #f4f2ee);
}

.brokk-market-selector__close:focus-visible {
    outline: 2px solid var(--primary, #ffcd00);
    outline-offset: 2px;
}

.brokk-market-selector__close svg {
    width: 1.6rem;
    height: 1.6rem;
    display: block;
}

/* Rubrikraden är knappens referens; rubriken får plats till vänster om den. */
.brokk-market-selector--modal {
    position: relative;
}

.brokk-market-selector--modal .brokk-market-selector__title {
    padding-right: 5rem;
}

/* ── Formulär (WS Form, hem: contact-form.css) ─────────────────────────────
   Fälten var 14,4–15 px: under 16 zoomar iOS in fältet vid fokus och lämnar
   sidan inzoomad. 16px som literal med flit — tokenet --text-m är 14 px i
   mobil och gränsen är webbläsarens, inte designsystemets. Fältens höjd
   (60 px) rörs inte. Under 479 tar skicka-knappen hela bredden: det mörka
   CTA-formuläret på produkt-, bransch- och casesidor hade den 140 px bred och
   högerställd. */
@media (max-width: 991px) {
    /* Specificiteten är vald mot det som annars vinner: ACSS:s
       .form--light .wsf-form select.wsf-field (0,3,1, laddas efter) och det
       mörka CTA-formulärets .bcf-form.bcf-form input.wsf-field[type="text"]
       (0,4,1). */
    .wsf-form .wsf-fields .wsf-field-wrapper input.wsf-field:not([type="checkbox"]):not([type="radio"]),
    .wsf-form .wsf-fields .wsf-field-wrapper select.wsf-field,
    .wsf-form .wsf-fields .wsf-field-wrapper textarea.wsf-field,
    /* Ljusa formulär: ACSS:s .form--light-regel för select väger tyngre än
       för input/textarea — en klass till för just select. */
    .form--light .wsf-form .wsf-fields .wsf-field-wrapper select.wsf-field,
    /* Find dealers-sökfältet (dealer-locator.css, --text-s = 14 px). */
    input.dl__input,
    .bcf-form.bcf-form .wsf-form .wsf-field-wrapper input.wsf-field,
    .bcf-form.bcf-form .wsf-form .wsf-field-wrapper select.wsf-field,
    .bcf-form.bcf-form .wsf-form .wsf-field-wrapper textarea.wsf-field {
        font-size: 16px;
    }
}

@media (max-width: 478px) {
    .wsf-form button.wsf-button.bricks-button,
    /* Det mörka CTA-formuläret (contact-form.css) sätter bredden med
       .bcf-form.bcf-form … (0,5,0) och laddas efter — en klass till här. */
    .bcf-form.bcf-form.bcf-form .wsf-form button.wsf-button.bricks-button {
        width: 100%;
        min-width: 0;
    }
}

/* 404-mallen: WordPress ostilade sökfält (200 px, grå ram). Sajtens
   fältstil tills mallen görs om — se förslagen i handoffen. */
.error404 .search-form,
.error404 form[role="search"] {
    display: flex;
    gap: var(--space-xs, 1.896rem);
    width: 100%;
    /* Rubrikens bredd ungefär; på 1600 hade fältet annars tagit 1 270 px. */
    max-width: 56rem;
    margin-inline: auto;
}

.error404 input[type="search"] {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 44px;
    padding: 0.8rem 1.2rem;
    border: 1px solid var(--neutral-light, #d9d9d9);
    border-radius: var(--radius-xs, 2.222px);
    background: var(--white, #fff);
    font-size: 16px;
}

/* ── Knappar i mobil (≤ 478): fullbredd, staplade ─────────────────────────
   Hero, CTA-band, kort och formulär: knappen tar containerns bredd, och en
   grupp knappar staplas med --space-s. Selektorn tar varje Bricks-block/-div
   som direkt innehåller minst två knappar; nyhetsflödets chips-rad
   (.brk-feed__chips) är undantagen — de är chips, inte CTA:er.
   ACSS:s --btn-min-width (14rem) släpps. Primär/sekundär-hierarkin rörs inte:
   det är bara bredden som ändras. */
@media (max-width: 478px) {
    .brxe-block:not(.brk-feed__chips):has(> .bricks-button ~ .bricks-button),
    .brxe-div:not(.brk-feed__chips):has(> .bricks-button ~ .bricks-button),
    .brxe-block:has(> .brxe-shortcode > .bricks-button) {
        flex-direction: column;
        /* Startsidans heroblock har flex-direction: row som id-regel från
           Bricks (#brxe-flipuz) och vinner över klassen. Med wrap och
           knappar på 100 % staplas de ändå, med blockets radavstånd. */
        flex-wrap: wrap;
        align-items: stretch;
        gap: var(--space-s, 2.133rem);
    }

    .brxe-block:not(.brk-feed__chips) > .bricks-button,
    .brxe-div:not(.brk-feed__chips) > .bricks-button,
    .brokk-hero-xl__btn,
    .brokk-hero-s .bricks-button,
    .card__content .bricks-button,
    .card__content .btn--pill,
    .brk-pk__section .bricks-button,
    .boxed-content .bricks-button {
        width: 100%;
        min-width: 0;
        --btn-min-width: 0;
    }

    /* Pill-knappen (ikonpanel till höger): texten vänster, panelen kvar i
       högerkanten när knappen blir bred — samma grepp som produkttoppen. */
    .card__content .btn--pill,
    .brokk-hero-xl__btn.btn--pill,
    .brxe-block > .btn--pill {
        justify-content: space-between;
    }

    /* Casearkivets "VIEW PROJECT" är en span med knappklasser, inte <a>. */
    .card__content span.bricks-button {
        display: inline-flex;
        justify-content: space-between;
    }

    /* Chips och dropdown-knappar ska INTE bli fullbredd. */
    .brk-feed__chip,
    .c-dropdown__toggle,
    .brk-filter__pill,
    .tech-specs-open-all {
        width: auto;
    }
}

/* ── Produktsidans topp (hem: product-top.css) ─────────────────────────────
   Ordningen i mobil: rubrik + ingress + statbar + knappar först, 360-snurran
   (bilden) under — öppen punkt sedan baslinjen 09-02. Rent CSS-order i
   02B-rutnätet (.brk-pt). Snurran får 4:3 i stället för 1:1 under 479 så att
   den inte tar en hel skärm (417 px av 800).

   Det gamla sidhuvudet (#brxe-cwgnzq, ligger kvar tills Anders städar det)
   har samma problem: Bricks sätter order:-1 på snurrblocket #brxe-mmkmbi
   under 992. Två id:n i selektorn väger tyngre än Bricks ena. */
@media (max-width: 767px) {
    .brk-pt .brk-pt__spec {
        order: -1;
    }

    #brxe-cwgnzq #brxe-mmkmbi {
        order: 1;
    }
}

@media (max-width: 478px) {
    .brk-pt .brk-pt__media {
        aspect-ratio: 4 / 3;
    }
}

/* ── Kort (Bricks globala klasser i DB) ────────────────────────────────────
   Utdraget är 12 px i alla bredder (card__excerpt). På en telefon är det för
   litet; --text-s (14 px) under 768. Desktop orörd. */
@media (max-width: 767px) {
    .card__excerpt {
        font-size: var(--text-s, 1.42rem);
    }
}

/* ── Kontaktsidan (hem: office.css / contact-hub.css) ─────────────────────
   - Brevlåderemsan: två celler per rad blev 208 px breda celler med
     radbrutna adresser; en per rad under 479.
   - Telefon/e-post på personrader och kontorskort: 18–20 px höga länkar,
     träffytan upp till 44 utan att raden växer.
   - Avdelningsknapparna 41 → 44.
   - Kontorskortens foto är låst till 18 rem under 1280; i 359 px är kortet
     300 px brett och fotot 288 högt. 16:9 under 479, som enkontorsfotot. */
@media (max-width: 478px) {
    /* office.css sätter auto-fit med en klass och laddas efter — två här. */
    .brk-people__mailboxes .brk-people__mailbox-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .brk-hub__cell-photo {
        height: auto;
        aspect-ratio: 16 / 9;
    }
}

@media (max-width: 991px) {
    .brk-people__reach a,
    .brk-office__line a {
        display: inline-block;
        padding-block: 1.2rem;
        margin-block: -1.2rem;
    }

    /* office.css laddas efter och sätter min-height med en klass — två här. */
    .brk-people__dept-list .brk-people__dept {
        min-height: 44px;
    }
}

/* ── Case-singelns faktaplatta (Bricks globala klasser i DB) ──────────────
   Fem rader staplade tog 900 px innan breadcrumb och H1. Två spalter under
   768 halverar det. Ordningen (platta före rubrik) är Bricks-trädets och
   listas som förslag i handoffen. */
@media (max-width: 767px) {
    .brokk-case-project__metadata {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: var(--space-s, 2.133rem);
    }

    .brokk-case-project__metadata > .brxe-div:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }
}

/* ── Typografitoken ──────────────────────────────────────────────────────────
   Den smala rubrikfonten som komponenterna sätter på badgar, siffror, etiketter
   och andra ytor UTAN globala stilar. Rubriker (h1–h6) och .bricks-button ärver
   samma font från Bricks temastil och ska inte sätta font-family själva.
   Ersatte 48 hårdkodade "Saira Semi Condensed" 2026-09-21. */
:root { --font-condensed: "Saira Semi Condensed", sans-serif; }
:root {
    /* Rörelse (plan 016 / 011). Värdena är de som används i dag. fx.js och news-events.js
       har samma kurva som konstant: WAAPI läser inte CSS-variabler. */
    --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
    --dur-fast: 150ms;
    --dur-base: 200ms;
    --dur-slow: 450ms;
    /* Hela ytor som byter färg (kort vitt → svart). --ease-out gör ~90 % av bytet de
       första 40 ms och upplevdes som ett hårt klipp (Anders 2026-10-13). */
    --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
    --dur-surface: 250ms;
    /* Mobilmenyns låda och bakgrund (Bricks Offcanvas .brk-offcanvas). Samma värden som
       BricksExtras-offcanvasen hade, så att menyn glider som förut (plan 058). Plan 003
       föreslår en mjukare kurva: då ändras bara de här två. */
    --ease-drawer: cubic-bezier(0.77, 0, 0.175, 1);
    --dur-drawer: 300ms;
    /* Pilen efter en länktext knuffas åt höger vid hover/fokus (plan 079). */
    --arrow-nudge: 0.3rem;
    /* Avstånd mellan text och ikon (Anders 2026-11-09): knappar 10 px, länkar 8 px. */
    --icon-gap-btn: 1rem;
    --icon-gap-link: 0.8rem;
    /* Startsidans hero: långsam zoom in en gång vid laddning (components/hero-kenburns). */
    --dur-kenburns: 36s;   /* 2026-11-10: lite segare (var 30 s) */
    --ease-kenburns: cubic-bezier(0.25, 0.1, 0.25, 1);
    --kenburns-scale: 1.12;
    --kenburns-drift-x: -1.5%;
    --kenburns-drift-y: -1%;
    /* Branschsidornas zigzag-bilder: utsnittet glider så här långt åt vardera hållet från mitten
       när bilden passerar (components/industry-parallax). Fast avstånd, inte procent: procent
       räknas på bildens överskott, som är 80 px för 3:2 men 600 px för stående bilder. */
    --parallax-shift: 1.2rem;
    /* Bildzoom på hover i kort: långsam och mjuk – 200 ms med --ease-out kändes ryckig (Anders 2026-11-09). */
    --dur-image-zoom: 500ms;
    --ease-image-zoom: var(--ease-in-out);
    /* Fokusring i två färger (plan 063, DESIGN.md Elevation & Depth): gult band mot elementet,
       svart utanför. En enfärgad ring syns inte på både gult, vitt och svart. */
    --focus-ring-inner: var(--primary);
    --focus-ring-outer: var(--black);
    --focus-ring-width: var(--focus-width);
    /* Den klistrade headerns höjd (≥ 768, site-header). För scroll-margin och klistrade spalter. */
    --sticky-header-h: 12.4rem;
}

/* ---- Fokusring (plan 063) ----------------------------------------
 * Ersätter ACSS:s enfärgade ring och knapparnas egna --focus-color. automatic-bricks.css
 * laddas efter style.css med (0,3,1), så klassen upprepas en gång till (0,4,1), som ACSS
 * själv gör. Komponentregler med lägre specificitet förlorade redan mot ACSS och påverkas
 * inte av bytet. Inre bandet ligger i offsetens mellanrum
 * (box-shadow), yttre bandet är outline. focus-parent-klasserna ritar ringen på
 * föräldern; barnets ring stängs av av ACSS (`:focus { outline: none !important }`). */
body.bricks-is-frontend.bricks-is-frontend.bricks-is-frontend :focus-visible,
body.bricks-is-frontend :is(.focus-parent, .focus-parent--outline, .focus-parent--shadow):focus-within:has(:focus-visible) {
    outline: var(--focus-ring-width) solid var(--focus-ring-outer);
    outline-offset: var(--focus-ring-width);
    box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-inner);
}

/* Delade knappar (dropdown + "All …" bredvid, startsidans split-dropdown-section): ringen
   ritas inuti knappen, båda banden kvar – svart ytterst, gult innanför. Utanför låg den
   över grannknappen och såg trasig ut (Anders 2026-11-09). */
body.bricks-is-frontend.bricks-is-frontend.bricks-is-frontend .split-dropdown-section :is(.c-dropdown__toggle, .bricks-button):focus-visible {
    outline-offset: calc(var(--focus-ring-width) * -1);
    box-shadow: inset 0 0 0 calc(var(--focus-ring-width) * 2) var(--focus-ring-inner);
}

/* ---- Logotypens 50-årsflagga över megamenyn ---------------------
 * Flaggan hänger 25 px under headern. Megamenyns panel (.brx-dropdown-content,
 * z-index 1000 i dropdownens stackningskontext) lade sig över den. Logotypen
 * är syskon till dropdownen i headerns kontext, så ett eget z-index över 1000
 * räcker för att flaggan ska ligga överst när menyn är öppen. */
#brx-header .brxe-logo {
    position: relative;
    z-index: 1001;
}

/* ---- Typsnitt: latin-ext (polska ą ć ę ł ń ś ź ż m.fl.) ----------
 * Bricks typsnittsfiler (uploads/…/geist-v4-latin-*, saira-semi-condensed-v15-latin-*) är
 * latin-subset och saknar de polska tecknen, som ritades i Times på /pl/ (uppmätt
 * 2026-11-10, plan 082). Filerna i fonts/ är samma familjer och versioner med latin-ext
 * (Google Fonts, OFL); de delade glyferna är pixelidentiska med Bricks filer.
 *
 * unicode-range är exakt de tecken filen tillför utöver Bricks latin-fil (räknat ur
 * filernas cmap, 153 tecken i Geist och 242 i Saira). Webbläsaren hämtar därför en fil
 * först när sidan visar ett sådant tecken: övriga språk hämtar ingenting extra. Googles
 * bredare latin-ext-intervall duger inte här: det täcker U+1D35 (ᴵ i "120Dᴵᴵ"), som ingen
 * av filerna har, och hade gett en bortkastad hämtning varje gång produktnamnet visas.
 *
 * Familjenamnen måste vara exakt Bricks namn. Bricks egna @font-face rörs inte. */
@font-face { font-family: "Geist"; font-weight: 400; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-regular.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Geist"; font-weight: 500; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-500.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Geist"; font-weight: 600; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-600.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Geist"; font-weight: 700; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-700.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Geist"; font-weight: 800; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-800.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Geist"; font-weight: 900; font-style: normal; font-display: swap; src: url("fonts/geist-v4-latin-ext-900.woff2") format("woff2"); unicode-range: U+0100-0101, U+0103-0113, U+0116-012B, U+012E-0130, U+0132-0137, U+0139-013E, U+0141-0148, U+014A-014D, U+0150-0151, U+0154-017E, U+018F, U+0192, U+01CD-01CE, U+01E4-01E9, U+0218-021B, U+0237, U+0259, U+02B9, U+02C7-02C8, U+02DD, U+1E20-1E21, U+1E80-1E85, U+1E9E, U+1EF2-1EF3, U+1EF8-1EF9, U+2020, U+20AA, U+20B4, U+20B9, U+20BD, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 400; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-regular.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 500; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-500.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 600; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-600.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 700; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-700.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 800; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-800.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }
@font-face { font-family: "Saira Semi Condensed"; font-weight: 900; font-style: normal; font-display: swap; src: url("fonts/saira-semi-condensed-v15-latin-ext-900.woff2") format("woff2"); unicode-range: U+0100-0130, U+0132-0151, U+0154-017F, U+018F, U+0192, U+019D, U+01A0-01A1, U+01AF-01B0, U+01C4-01DC, U+01E6-01E7, U+01EA-01EB, U+01F1-01F5, U+01FA-021B, U+0232-0233, U+0237, U+0259, U+0272, U+02C7, U+02C9, U+02DD, U+1E0C-1E0D, U+1E24-1E25, U+1E44-1E45, U+1E5A-1E5B, U+1E62-1E63, U+1E6C-1E6D, U+1E80-1E85, U+1E92-1E93, U+1E9E, U+1EF2-1EF9, U+2020, U+20B2, U+2113, U+A78B-A78C; }

/* Tillval utan PDF (plan 085, 2026-11-11): knappen "Download PDF" i mallen Products Option – Single
   (7153, element mcipwl) skrevs ut utan href när fältet Download file är tomt (2 av 16 tillval).
   Dold tills elementet har fått villkoret {acf_download_file} i Bricks; ta bort regeln då.
   !important: .btn--pill sätter display: inline-flex !important längre upp i den här filen. */
#brxe-mcipwl:not([href]) { display: none !important; }
