:root {
    --color-primary: #1b5159;
    --color-accent: #111111;
    
    --color-discounted-price: #C62828;

    --color-success: 190, 251, 224;
    --color-alert-bg: 253, 164, 175;
    --color-alert: 142, 44, 45;

    --color-text: #111111;
    --color-foreground: #111111;
    --color-background: #ffffff;

    --text-footer: #ffffff;

    --bg-body: #ffffff;
    --bg-header: #ffffff;
    --bg-card: #ffffff;
    --bg-footer: #111111;
    --bg-overlay: 146, 146, 146;

    --gap: 1rem;

    --button-py: calc(1rem * 1);
    --button-px: calc(2rem * 1);
    --button-rounding: 0.25rem;
    --button-text: var(--color-text);
    --button-text-primary: #ffffff;

    --input-bg: #ffffff;

    --input-border: 1px solid rgb(209 213 219);
    --input-color: var(--color-text);
    --input-rounding: 0.25rem;
    --input-px: 1rem;
    --input-py: 0.75rem;

    /* Swiper */
    --swiper-navigation-color: var(--color-text);
    --swiper-pagination-color: var(--color-accent);
    --swiper-navigation-size: 2rem;
    --swiper-theme-color: var(--color-primary);
}















body {
    font-family: 'Inter',sans-serif !important;
}
@media (min-width: 768px) {
    body { overflow: overlay; }
}

.font-body {
    font-family: 'Inter',sans-serif;
}

h1, h2, h3, h4, h5, h6, .font-heading, button, .qs-cart-submit {
    font-family: 'Montserrat',
sans-serif;
    font-weight: bold;
    line-height: 120%;
}

/**
 * Colors
 */

.bg-card {
    background-color: var(--bg-card);
}

/**
 * Primary color
 */ 
.text-primary {
    color: var(--color-primary);
}
.hover\:text-primary:hover {
    color: var(--color-primary);
}
.ring-primary,
.ring-primary:focus {
    --tw-ring-color: var(--color-primary);
}
.bg-primary {
    background-color: var(--color-primary) !important;
}
.hover\:bg-primary:hover {
    background-color: var(--color-primary);
}
.border-primary {
    border-color: var(--color-primary);
}

/**
 * Secondary color
 */ 
.text-secondary {
    color: var(--color-accent);
}
.hover\:text-secondary:hover {
    color: var(--color-accent);
}
.ring-secondary {
    --tw-ring-color: var(--color-accent);
}
.bg-secondary {
    background-color: var(--color-accent);
}
.hover\:bg-secondary:hover {
    background-color: var(--color-accent);
}
.border-secondary,
.focus\:border-secondary:focus {
    border-color: var(--color-accent);
}

/**
 * Accent color
 */ 
.text-accent {
    color: var(--color-accent);
}
.hover\:text-accent:hover {
    color: var(--color-accent);
}
.ring-accent {
    --tw-ring-color: var(--color-accent);
}
.bg-accent {
    background-color: var(--color-accent) !important;
}
.hover\:bg-accent:hover {
    background-color: var(--color-accent);
}

/**
 * Discounted price color
 */ 
.text-discounted-price {
    color: var(--color-discounted-price, var(--color-accent));
}

/**
 * Foreground color
 */ 
.text-body {
    color: var(--color-text);
}
.text-inverted {
    color: var(--color-background);
}
.hover\:text-body:hover {
    color: var(--color-text);
}
.divide-foreground>:not([hidden])~:not([hidden]),
.border-foreground {
    border-color: var(--color-foreground);
}
.hover\:border-foreground:hover {
    border-color: var(--color-foreground);
}
.bg-foreground {
    background-color: var(--color-foreground) !important;
}
.hover\:bg-foreground:hover {
    background-color: var(--color-foreground);
}


.bg-success {
    background: rgba(var(--color-success), .2);
}

.text-alert {
    color: rgb(var(--color-alert));
}
.bg-alert {
    background-color: rgba(var(--color-alert-bg), .2)
}

.bg-body {
    background-color: var(--bg-body);
}

.to-body {
    --tw-gradient-to: var(--bg-body) var(--tw-gradient-to-position) !important;
}

.bg-header {
    background-color: var(--bg-header);
}
.border-header {
    border-color: var(--bg-header);
}

.bg-footer {
    background-color: var(--bg-footer);
}

.text-footer {
    color: var(--text-footer);
}

.bg-overlay {
    background-color: rgba(var(--bg-overlay), var(--tw-bg-opacity));
}

.border-highlight {
    border-color: var(--color-accent) !important;
}

.gap-default {
    gap: var(--gap);
}

.gap-default-2 {
    gap: calc(var(--gap) * 2);
}

.button-py {
    padding-top: var(--button-py);
    padding-bottom: var(--button-py);
}
.button-px {
    padding-left: var(--button-px);
    padding-right: var(--button-px);
}
.button-rounding {
    border-radius: var(--button-rounding);
}
.button-text-primary {
    color: var(--button-text-primary);
}

.input-bg {
    background-color: var(--input-bg);
}
.input-border {
    border: var(--input-border);
}
.input-rounding {
    border-radius: 0.25rem;
}
.input-py {
    padding-top: var(--input-py);
    padding-bottom: var(--input-py);
}
.input-px {
    padding-left: var(--input-px);
    padding-right: var(--input-px);
}
.input-text {
    color: var(--color-text);
}

/**
 * Transition duration
 */
.duration-default {
    transition-duration: 200ms !important;
}

/**
 * Cart bubble tweaks
 */
.cart-bubble.text-xs {
    font-size: 0.6rem;
    line-height: 1;
}

/**
 * Disable spinner arrows on number inputs
 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
input[type="number"] {
    -moz-appearance: textfield;
}

/**
 * Tailwind
 */
[multiple]:focus, [type=date]:focus, [type=datetime-local]:focus, [type=email]:focus, [type=month]:focus, [type=number]:focus, [type=password]:focus, [type=search]:focus, [type=tel]:focus, [type=text]:focus, [type=time]:focus, [type=url]:focus, [type=week]:focus, select:focus, textarea:focus {
    --tw-ring-color: var(--color-primary) !important;
    outline: none;
    border-color: var(--color-primary) !important;
}

/**
 * PhotoSwipe
 */
.pswp {
    --pswp-icon-color-secondary: var(--color-text);
    --pswp-icon-color: var(--color-text);
    --pswp-bg: var(--bg-body);
    --pswp-icon-stroke-color: var(--pswp-bg);
}

.pswp img {
    max-width: none;
    object-fit: contain;
}

.pswp__img--placeholder {
    display: none !important;
}

.pswp__counter {
    font-weight: bold;
    text-shadow: 0 0 2px var(--pswp-bg)
}

/**
 * Swiper
 */

/** Fix for pinch zoom on main product image */
.swiper.swiper-horizontal {
    touch-action: auto;
}

.swiper-button-next,
.swiper-button-prev {
    width: auto;
}

.swiper-button-next.swiper-button-disabled,
.swiper-button-prev.swiper-button-disabled {
    display: none
}

.swiper-button-next:after,
.swiper-button-prev:after {
    content: '';
}

.products-swiper-main {
    min-height: 200px; /* fallback before Swiper/Imgix init */
}

@media (min-width: 768px) {
    .products-swiper-main {
        min-height: 300px;
    }
}

/**
 * Hero Slider
 */
.hero-slider {
    transition: height 0.3s ease;
    min-height: 500px;
}

@media (min-width: 768px) {
    .hero-slider {
        min-height: 700px;
    }
}

.hero-slider .swiper-slide {
    height: 100%;
}

.hero-slider .swiper-button-next,
.hero-slider .swiper-button-prev {
    color: white;
    width: 44px;
    height: 44px;
    background: rgba(0, 0, 0, 0.5);
    border-radius: 50%;
    transition: all 0.3s ease;
    cursor: pointer;
}

.hero-slider .swiper-button-next:hover,
.hero-slider .swiper-button-prev:hover {
    background: rgba(0, 0, 0, 0.8);
}

/* Remove Swiper's default arrow pseudo-elements */
.hero-slider .swiper-button-next:after,
.hero-slider .swiper-button-prev:after {
    content: none;
}

/* Style the SVG icons inside the arrow buttons */
.hero-slider .swiper-button-next svg,
.hero-slider .swiper-button-prev svg {
    stroke: white;
    stroke-width: 2.5;
}

.hero-slider .swiper-pagination {
    bottom: 20px;
}

.hero-slider .swiper-pagination-bullet {
    width: 12px;
    height: 12px;
    background: white;
    opacity: 0.7;
    transition: all 0.3s ease;
}

.hero-slider .swiper-pagination-bullet-active {
    opacity: 1;
    background: white;
    width: 32px;
    border-radius: 6px;
}

.product-slider .swiper-pagination {
    margin-top: 2rem;
    position: relative;
}

.bg-dark-overlay {
    background: rgba(0, 0, 0, 0.4);
}

.bg-light-overlay {
    background: rgba(255, 255, 255, 0.4);
}

.products-swiper-thumbs {
    --swiper-navigation-size: 30px;
}

/* Stamped badge: pill with ★ rating (count) — overlaid on the product image */
.stamped-main-badge {
    display: inline-flex !important;
    align-items: center;
    gap: 0.3125rem;
    background-color: rgba(255, 255, 255, 0.55);
    backdrop-filter: blur(12px) saturate(1.2);
    -webkit-backdrop-filter: blur(12px) saturate(1.2);
    border-radius: 9999px;
    padding: 0.3125rem 0.6875rem;
    line-height: 1;
    border: 1px solid rgba(255, 255, 255, 0.6);
    box-shadow: 0 6px 20px -10px rgba(14, 15, 16, 0.35);
}
/* Stamped's own gold 5-star icon row (.stamped-badge-starrating) is hidden — we
   render a single star via ::before below instead */
.stamped-badge-starrating {
    display: none !important;
}
/* Star lives on the outer wrapper (not the caption) so it can be sized
   independently of the rating/count text — the ★ glyph reads visually
   smaller than bold digits at matching font-size, so it's bumped up a touch */
.stamped-main-badge::before {
    content: '\2605' !important;
    font-size: 0.9375rem;
    line-height: 1;
    color: #F2C41B;
}
.stamped-badge-caption {
    font-size: 0 !important;
}
.stamped-badge-caption::before {
    content: attr(data-rating) !important;
    font-size: 0.8125rem;
    font-weight: 700;
    color: var(--color-ink);
}
/* Stamped's widget.min.css ships
   .stamped-badge-caption[data-reviews][data-label][data-version="2"]::after { content: '' !important }
   loaded async after our stylesheet, with higher specificity than a plain
   .stamped-badge-caption::after. The repeated class below raises our
   specificity past theirs so our count still renders. */
.stamped-main-badge .stamped-badge-caption.stamped-badge-caption.stamped-badge-caption.stamped-badge-caption::after {
    content: ' (' attr(data-reviews) ')' !important;
    font-size: 0.75rem;
    font-weight: 400;
    text-decoration: none !important;
    color: var(--color-ink-soft);
    margin-left: 0.25rem;
}
.stamped-main-badge:has(.stamped-badge-caption[data-reviews="0"]),
.stamped-main-badge:not(:has(.stamped-badge-caption)) {
    display: none !important;
}

/* Card badge: quiet inline "★ 4.6 (12)" under the product title.
   Reuses the same ::before/::after technique as the main badge; the amber
   star fill is the one sanctioned non-brand hue (see DESIGN.md). */
.stamped-card-badge {
    display: inline-flex !important;
    align-items: center;
    gap: 0.25rem;
    margin-top: 0.375rem;
    line-height: 1;
}
.stamped-card-badge::before {
    content: '\2605';
    font-size: 0.8125rem;
    line-height: 1;
    color: #F2C41B;
}
.stamped-card-badge .stamped-badge-caption::before {
    content: attr(data-rating) !important;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--color-ink);
}
/* Same specificity bump as the main badge — Stamped's async CSS blanks
   the version-2 caption ::after, ours must outrank it */
.stamped-card-badge .stamped-badge-caption.stamped-badge-caption.stamped-badge-caption.stamped-badge-caption::after {
    content: ' (' attr(data-reviews) ')' !important;
    font-size: 0.75rem;
    font-weight: 400;
    text-decoration: none;
    color: var(--color-ink-soft);
    margin-left: 0.25rem;
}
.stamped-card-badge:has(.stamped-badge-caption[data-reviews="0"]),
.stamped-card-badge:not(:has(.stamped-badge-caption)) {
    display: none !important;
}

/* ==========================================================================
   STAMPED CAROUSEL → 3-UP GRID / MOBILE SWIPE RAIL (product page, datafield_2)
   Reskins the same #stamped-reviews-widget[data-widget-type="carousel"] DOM
   used everywhere else — no new Stamped widget type, just this wrapper class
   on the container the widget snippet already sits in. DESIGN.md's Cards and
   Testimonials specs govern below: 4px radius, Light Grey fill, no shadow,
   Montserrat name/title, Inter quote, amber star.
   ≥1024px: three cards in one row. Below: a native scroll-snap rail
   (same pattern as .nh2-rail) — no Swiper instance, Stamped's markup is
   async and rebuilt by its own JS, so CSS-only survives its re-renders.

   Stamped's own stylesheet loads async (its <link> lands in <head> after
   ours) and its carousel JS inline-styles `left` on .scroll-wrapper and
   `width`/`height` on each .block for the horizontal scroll/autoplay. Every
   selector below matches Stamped's own #stamped-reviews-widget[...] prefix
   so it wins on specificity regardless of load order, and the handful of
   properties fighting those inline styles carry !important — same technique
   as the badge override above.

   The "Läs alla recensioner" link has no Stamped equivalent and ships
   `display:none` inline in the datafield HTML, so a theme with no matching
   CSS (i.e. simple-87, which reads the same datafield_2) renders exactly as
   it does today; only this stylesheet reveals it. The per-product overlap
   photo ships the same way but stays hidden here. */

/* One centred 72rem column; link and widget share its single cell so the
   link pins to the grid's right edge, not the (wider) container's. The
   datafield ships an inline margin-bottom:-10px that pulled the next
   section up over the last card row — cancelled here. */
.nh-review-stack {
    position: relative;
    display: grid;
    grid-template-columns: min(100%, 72rem);
    justify-content: center;
    padding-top: 3rem;
    padding-bottom: 3.5rem;
    margin-bottom: 0 !important;
}
/* min-width:0 — otherwise the rail's max-content width becomes the grid
   item's minimum and the page scrolls sideways on tablet. */
.nh-review-stack > * {
    grid-area: 1 / 1;
    min-width: 0;
}
.nh-review-stack .nh-review-readall {
    display: block !important;
    justify-self: end;
    align-self: start;
    z-index: 1;
    margin-top: 0.5rem;
    font-family: 'Inter',sans-serif;
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--color-brand);
    text-decoration: underline;
    text-underline-offset: 3px;
}
.nh-review-stack .nh-review-readall:hover {
    color: var(--color-brand-hover);
}

/* overflow:visible so the mobile rail can bleed to the container edge */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] {
    width: 100%;
    overflow: visible !important;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-title {
    float: none;
    max-width: calc(100% - 11rem);
    font-family: 'Montserrat',
sans-serif;
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--color-ink) !important;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-buttons {
    display: none !important;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-subtitle {
    float: none;
    max-width: calc(100% - 11rem);
    margin: 0.5rem 0 2rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-family: 'Inter',sans-serif;
    color: var(--color-ink-soft);
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-subtitle .fa-star::before {
    font-size: 1rem;
}

@media (max-width: 640px) {
    .nh-review-stack > * {
        grid-area: auto;
    }
    /* below the rail, left-aligned — reads as the rail's footer */
    .nh-review-stack .nh-review-readall {
        order: 1;
        justify-self: start;
        margin-top: 1.25rem;
    }
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-title,
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-subtitle {
        max-width: 100%;
    }
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-title {
        font-size: 1.5rem;
    }
}

/* Cards. .scroll-wrapper's `left` and each .block's `width`/`height` are
   inline-styled by Stamped's carousel JS on a timer — !important pins the
   layout regardless. Default (<1024px) is the swipe rail: it bleeds into
   the container's side padding so cards scroll edge to edge, and the next
   card peeks in to signal there's more. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll {
    height: auto !important;
    overflow: visible !important;
    float: none;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll::before {
    display: none;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll-wrapper {
    position: static !important;
    left: 0 !important;
    width: auto !important;
    display: flex;
    gap: 0.75rem;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    margin-left: calc(-1 * var(--nh-rv-bleed, 1rem));
    margin-right: calc(-1 * var(--nh-rv-bleed, 1rem));
    padding: 0 var(--nh-rv-bleed, 1rem) 0.25rem;
    scroll-padding-left: var(--nh-rv-bleed, 1rem);
    scroll-padding-right: var(--nh-rv-bleed, 1rem);
    scrollbar-width: none;
    -ms-overflow-style: none;
    overscroll-behavior-x: contain;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll-wrapper::-webkit-scrollbar {
    display: none;
}
/* Flex column so every card in a row is the same height and the author
   line sits on the card's bottom edge however long the quote runs. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .block {
    display: flex !important;
    flex-direction: column;
    flex: 0 0 85%;
    width: auto !important;
    height: auto !important;
    scroll-snap-align: start;
    background: var(--bg-mist);
    border-radius: var(--radius-base);
    padding: 1.5rem;
    white-space: normal;
    color: var(--color-body);
    font-family: 'Inter',sans-serif;
    font-size: 0.9375rem;
}
/* Stamped renders a full page (~30) of reviews for its own pagination;
   the rail keeps 8, the desktop row 3. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .block:nth-of-type(n+9) {
    display: none !important;
}
@media (min-width: 640px) {
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .block {
        flex-basis: 46%;
    }
}
@media (min-width: 1024px) {
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll-wrapper {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 1.5rem;
        overflow-x: visible;
        scroll-snap-type: none;
        margin-left: 0;
        margin-right: 0;
        padding: 0;
    }
    .nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .block:nth-of-type(n+4) {
        display: none !important;
    }
}

/* Date. Stamped renders it above the card's content; js/nhReviews.js moves
   it into .nh-rv-head beside the stars. Until that runs (or if it can't),
   it stays hidden rather than float loose at the top of the card. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-date {
    display: none;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .nh-rv-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.625rem;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .nh-rv-head .stamped-reviews-rating {
    margin-bottom: 0;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .nh-rv-head .stamped-reviews-date {
    display: block;
    float: none;
    margin: 0;
    padding: 0;
    font-family: 'Inter',sans-serif;
    font-size: 0.75rem;
    line-height: 1;
    color: var(--color-ink-soft);
    white-space: nowrap;
}


/* No photo per card in this layout — the title runs straight into the
   quote instead, so the thumbnail Stamped renders is dropped entirely. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-image {
    display: none !important;
}

.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-ratings-wrapper {
    display: flex !important;
    flex-direction: column;
    flex: 1 1 auto;
    float: none !important;
    width: auto !important;
    margin: 0 !important;
    padding: 0;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-rating {
    margin-bottom: 0.625rem;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .stamped-reviews-rating,
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .fa-star::before,
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .fa-star-half-o::before,
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .fa-star-o::before {
    font-size: 1rem;
}

/* Stamped's own async stylesheet floats the title (its default is a 2-col
   title/photo layout) with a fixed width and link-blue color. Grid used to
   neutralize that for free — grid items can't float — but .block is normal
   flow now, so every one of those has to be cancelled explicitly.
   Title and quote each get their own line rather than flowing as one
   inline paragraph: at this card's real width (up to ~555px, half of the
   72rem-capped widget) a short quote never wraps, so an inline lead-in just
   strands a bold word on the left with a wall of empty space next to it —
   only the mockup's much narrower card made the inline version read as
   prose. Stacked reads the same regardless of card width or quote length. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-title {
    display: block !important;
    float: none !important;
    width: auto !important;
    max-width: none !important;
    margin-bottom: 0.375rem;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    line-height: 1.4;
    color: var(--color-ink) !important;
}
/* The title text is Stamped's own permalink <a class="stamped-reviews-link
   stamped-style-color-link"> — that inner anchor carries its own float
   (Stamped's default title/photo 2-col layout) and its link color (from
   data-style-color-link in the datafield HTML), neither of which the div
   override above reaches. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-title a {
    display: inline !important;
    float: none !important;
    width: auto !important;
    color: var(--color-ink) !important;
    text-decoration: none !important;
    pointer-events: none;
}

/* `.stamped-carousel-scroll` in these three selectors is load-bearing:
   Stamped's ≤690px stylesheet re-adds margin-left:100px !important on the
   message and author with an equal-specificity selector that loads after
   ours, so we need one more class to win. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .stamped-reviews-message,
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .stamped-reviews-message-block {
    display: block !important;
    float: none !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .stamped-reviews-message-block {
    font-style: normal !important;
    font-family: 'Inter',sans-serif !important;
    -webkit-font-smoothing: auto;
    line-height: 1.5;
    color: var(--color-body);
}

.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-carousel-scroll .stamped-reviews-author {
    display: block !important;
    float: none !important;
    width: auto !important;
    /* Stamped's own CSS reserves margin-left:100px for an avatar we don't
       render — that's what pushed the name off the card's left edge. auto
       top margin pins the line to the card bottom (wrapper is flex column). */
    margin: auto 0 0 !important;
    padding-top: 1rem;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 0.875rem;
    color: var(--color-ink) !important;
}
/* "Verifierad köpare" — Stamped exposes verification only as a data
   attribute on the card, no text node; render it via ::after, floated
   against the reviewer name on the same line. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .block[data-verified-type="2"] .stamped-reviews-author::after {
    content: "Verifierad köpare";
    float: right;
    font-family: 'Inter',sans-serif;
    font-weight: 400;
    font-size: 0.75rem;
    color: var(--color-ink-soft);
}
/* Nested inside .stamped-reviews-image, which is hidden above — dropped
   rather than restructured; the mockup doesn't surface it either. */
.nh-review-stack #stamped-reviews-widget[data-widget-type="carousel"] .stamped-reviews-product-title {
    display: none;
}

/* ==========================================================================
   CHIP SHAPE — "rak vänster, snedskuren höger"
   Every merchandising tag in the theme carries the logotype's cut: the left
   edge stays flat and the whole right edge runs on the symbol's backslash
   diagonal, so the tag points forward in the reading direction. The cut is
   expressed in `em` — 0.5em lands at roughly 30% of a tag's height at the
   padding these tags use — so one value holds from the 9px mobile ribbon up
   to the 12px discount badge.

   Two consequences of clip-path here are deliberate, not oversights:
   · a clipped box has no radius, so these tags are the one exception to the
     4px One Radius Rule — the diagonal IS the corner treatment;
   · clip-path cuts borders and box-shadows off along the diagonal, so a
     clipped tag carries its own fill instead of a hairline and uses
     `filter: drop-shadow()` where it needs depth.
   The extra right padding keeps the label clear of the cut; without it the
   last glyph sits on the diagonal. */
.nh-chip {
    --nh-cut: 0.5em;
    display: inline-flex;
    align-items: center;
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    border-radius: 0;
}

/* Auto discount badge and shoefinder feature tag — both flush top-left on
   the card now, both keep .nh-chip's default shape: flush square edge on
   the left (where they anchor to the corner), diagonal slope on the right,
   trailing into the photo. Horizontal padding lives here rather than as
   Tailwind utilities in the markup because the right side has to clear the
   diagonal. Also used inline on the product page (price row). */
.nh-chip--discount {
    padding-left: 8px;
    padding-right: calc(8px + var(--nh-cut));
}

/* Shoefinder feature tag — same shape/padding as the discount chip above,
   in brand color (see the badge markup in list.mustache). When a card also
   has the auto discount badge, JS adds .nh-shoefinder-badge--stacked so it
   drops below the discount chip instead of overlapping it. */
.nh-chip--feature {
    padding-left: 8px;
    padding-right: calc(8px + var(--nh-cut));
}
.nh-shoefinder-badge--stacked {
    top: 1.75rem;
}

/* Ribbon app → brand tag on product cards.
   The Ribbons app injects an absolutely-positioned stack (top-right by
   default) with inline styles. On cards we move it flush into the top-left
   corner — same shape/slope-right treatment as the two chips above — as a
   square tag. The stack is forced to a vertical column so multiple ribbons
   stack downward along the left edge.
   Heads up: with the discount badge and shoefinder tag now also flush
   top-left, a card carrying all three at once will stack three deep —
   revisit if that combination turns out to be common.
   Inline styles from the app force !important here. */
[data-qb-selector="product-item"] [data-qb-ribbon-stack] {
    top: 0 !important;
    left: 0 !important;
    right: auto !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
}
[data-qb-selector="product-item"] [data-qb-ribbon] {
    --nh-cut: 0.5em;
    padding: 0.25rem 0.5rem !important;
    padding-right: calc(0.5rem + var(--nh-cut)) !important;
    border-radius: 0 !important;
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
}
[data-qb-selector="product-item"] [data-qb-ribbon] span {
    font-size: 0.75rem !important;
    font-weight: 700 !important;
    letter-spacing: 0 !important;
}

/* Ribbon app on the PRODUCT PAGE → "version 3" split solid pills, overlaid on
   the image top-left (the container is absolutely placed there in
   product_images.mustache). The app's stack is pulled into normal flow as a
   left-aligned row; the marketing flag (.new-product-ribbon) fills teal, every
   other ribbon fills ink. */
[data-qb-selector="product-apps-ribbon"] [data-qb-ribbon-stack] {
    position: static !important;
    flex-direction: row !important;
    align-items: center !important;
    flex-wrap: wrap !important;
    justify-content: flex-start !important;
    gap: 6px !important;
}
[data-qb-selector="product-apps-ribbon"] [data-qb-ribbon] {
    --nh-cut: 0.5em;
    padding: 0.25rem 0.5625rem !important;
    padding-right: calc(0.5625rem + var(--nh-cut)) !important;
    border-radius: 0 !important;
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    /* tinted glass — see-through frosted fill; feature default = ink.
       The clip cuts a border off along the diagonal, so the rim highlight is
       gone and the fill carries the separation from the photo on its own —
       hence the darker alpha than the bordered version had. */
    background-color: rgba(14, 15, 16, 0.42) !important;
    border: 0 !important;
    backdrop-filter: blur(14px) saturate(1.4) !important;
    -webkit-backdrop-filter: blur(14px) saturate(1.4) !important;
    /* drop-shadow, not box-shadow: a filter follows the clipped silhouette,
       a box-shadow would trace the uncut rectangle. */
    box-shadow: none !important;
    filter: drop-shadow(0 4px 10px rgba(14, 15, 16, 0.3));
}
/* the marketing flag → teal-tinted glass */
[data-qb-selector="product-apps-ribbon"] .new-product-ribbon {
    background-color: rgba(10, 115, 150, 0.34) !important;
    border-color: rgba(79, 209, 197, 0.55) !important;
}
[data-qb-selector="product-apps-ribbon"] [data-qb-ribbon] span {
    font-size: 0.625rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.05em !important;
    text-transform: uppercase !important;
    color: #fff !important;
    /* keep white type legible where the see-through glass sits over light image areas */
    text-shadow: 0 1px 3px rgba(14, 15, 16, 0.4) !important;
}
@media (max-width: 767px) {
    [data-qb-selector="product-apps-ribbon"] [data-qb-ribbon] {
        padding: 0.1875rem 0.5rem !important;
    }
    [data-qb-selector="product-apps-ribbon"] [data-qb-ribbon] span {
        font-size: 0.5625rem !important;
    }
}

/* The "Nyhet" ribbon is a brand-positive signal → Signal Teal fill, wherever
   it appears (cards + product page). Other ribbons keep their admin-chosen
   colour, so apply the `new-product-ribbon` CSS class only to the Nyhet ribbon. */
.new-product-ribbon {
    background-color: var(--color-brand) !important;
}

/* Product gallery.
   MOBILE: main slider + a vertical thumbnail rail on the right whose height
   follows the main image (JS-set) so thumbnails scroll within it. */
.products-swiper-thumbs {
    height: 100%;
    overflow: hidden;
}

/* DESKTOP: editorial mosaic — two large images on top, three smaller below,
   the rest reachable via "Visa alla bilder". A 6-col grid lets row 1 span
   3 cols each and row 2 span 2 cols each; images past the fifth are hidden
   from the grid (still in the lightbox). */
.pdp-mosaic {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 8px;
}
.pdp-mosaic > .fullscreen-mosaic {
    display: block;
    overflow: hidden;
    background: var(--bg-mist);
    cursor: zoom-in;
}
.pdp-mosaic > .fullscreen-mosaic img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}
.pdp-mosaic > .fullscreen-mosaic:nth-child(1),
.pdp-mosaic > .fullscreen-mosaic:nth-child(2) {
    grid-column: span 3;
    aspect-ratio: 4 / 5;
}
.pdp-mosaic > .fullscreen-mosaic:nth-child(3),
.pdp-mosaic > .fullscreen-mosaic:nth-child(4),
.pdp-mosaic > .fullscreen-mosaic:nth-child(5) {
    grid-column: span 2;
    aspect-ratio: 3 / 4;
}
.pdp-mosaic > .fullscreen-mosaic:nth-child(n+6) {
    display: none;
}
/* Single-image product → full-width hero rather than a half-width tile */
.pdp-mosaic > .fullscreen-mosaic:only-child {
    grid-column: span 6;
    aspect-ratio: 4 / 5;
}
.visa-alla-bilder {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    margin-top: 20px;
    padding: 8px;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.02em;
    color: var(--color-ink);
    background: transparent;
    border: 0;
    cursor: pointer;
}
.visa-alla-bilder svg {
    width: 18px;
    height: 18px;
    transition: transform 200ms ease;
}
.visa-alla-bilder:hover svg {
    transform: translateX(3px);
}

/* Fullscreen lightbox thumbnail strip (desktop + tablet), pinned to the base
   of the PhotoSwipe viewport over its white background. */
.pswp-thumbstrip {
    position: absolute;
    left: 50%;
    bottom: 20px;
    transform: translateX(-50%);
    display: flex;
    gap: 6px;
    padding: 6px 10px;
    max-width: min(92vw, 900px);
    overflow-x: auto;
    z-index: 100;
    scrollbar-width: none;
}
.pswp-thumbstrip::-webkit-scrollbar { display: none; }
.pswp-thumb {
    flex: 0 0 auto;
    width: 52px;
    height: 66px;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
    cursor: pointer;
    background: var(--bg-mist);
    opacity: 0.5;
    transition: opacity 180ms ease;
}
.pswp-thumb img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}
.pswp-thumb:hover { opacity: 0.85; }
.pswp-thumb.is-active {
    opacity: 1;
    outline: 2px solid var(--color-ink);
    outline-offset: -2px;
}
/* No strip on phones — the fullscreen there is arrows + swipe only. */
@media (max-width: 767px) {
    .pswp-thumbstrip { display: none; }
}

@media (max-width: 767px) {
    /* No container padding on mobile, so no negative-margin break-out needed */
    .products-image-wrapper {
        width: 100%;
        margin-left: 0;
        overflow-x: clip;
    }
    /* Trim 14% off the frame height — 7% top, 7% bottom — so the gallery eats
       less of the first screen. Source photos are 1049×1479 with generous studio
       whitespace, so 1479 × 0.86 = 1272 crops air, not product. The definite
       slide height also lets the img's h-full resolve, hence object-cover here
       overriding the markup's object-contain. */
    .products-swiper-main .swiper-slide {
        aspect-ratio: 1049 / 1272;
        overflow: hidden;
    }
    .products-swiper-main .swiper-slide img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
    }
    /* Thumbnail slides: square tiles at the rail width, image centre-cropped */
    .products-swiper-thumbs .swiper-slide {
        width: 100% !important;
        height: auto !important;
        aspect-ratio: 1 / 1;
        background: var(--bg-mist);
    }
    .products-swiper-thumbs .swiper-slide img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        object-position: center;
    }
}
@media (min-width: 768px) and (max-width: 1279px) {
    .products-swiper-main .swiper-slide img {
        max-height: 700px;
    }
}
@media (min-width: 1280px) {
    .products-swiper-main .swiper-slide img {
        max-height: 800px;
    }
}

/**
 * Tailwind 
 */

.aspect-1\/1 {
    aspect-ratio: 1 / 1;
}

.aspect-4\/3 {
    aspect-ratio: 4 / 3;
}

.aspect-3\/2 {
    aspect-ratio: 3 / 2;
}

.aspect-5\/3 {
    aspect-ratio: 5 / 3;
}

.aspect-3\/4 {
    aspect-ratio: 3 / 4;
}

.cursor-zoom-in {
    cursor: zoom-in;
}

.scale-75 {
    transform: scaleX(0.75) scaleY(0.75);
}

@media (min-width: 768px) {
    .md\:scale-100 {
        transform: scaleX(1) scaleY(1);
    }
}

@media (min-width: 1280px) {
    .container {
        max-width: 1280px;
    }
}

@media (min-width: 1480px) {
    .container {
        max-width: 1480px;
    }
}

select:not([size]) {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");
    background-position: right 0.5rem center;
    background-repeat: no-repeat;
    background-size: 1.5em 1.5em;
    padding-right: 2.5rem;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
}

.focus\:outline-none:focus {
    --tw-ring-color: transparent;
}

/**
 * Fix for modal max-height in desktop
 */
@media (min-width: 640px) {
    div[modal='search'] {
        max-height: 80vh;
    }
}

.hidden-empty:empty {
    display: none;
}

/**
 * Browser scrollbar (Webkit)
 */
body::-webkit-scrollbar {
    width: 4px;
    height: 4px;
    background-color: transparent;
}
body::-webkit-scrollbar-thumb {
    width: 4px;
    height: 4px;
    background-color: var(--color-primary);
    border-radius: 0.5rem;
}

/**
 * Wishlist
 */
.wishlist-alert {
    background: rgba(var(--color-success), .2);
    font-size: 1rem !important;
    padding: 1rem;
    margin-bottom: 1rem;
}

.wishlist-alert i {
    display: none;
}

.wishlist-alert .wishlist-addok {
    background: #f00;
}

.product [data-qb-selector="product-item"] > a {
    height: inherit !important;
    width: inherit !important;
}

.wishlist-form-save {
    margin-top: 2rem;
}

.wishlist-form-save .btn-primary {
}

.wishlist-sharebox {
    max-width: 100% !important;
    background: rgba(0,0,0,0.1) !important;
    border: none !important;
}

.wishlist-sharebox hr {
    margin: 1rem 0 1.5rem 0;
}

.wishlist-sharebox label {
    display: block;
    margin: 1rem 0 0.2rem 0;
}

.wishlist-sharebox input {
    margin-bottom: 0.5rem;
}

.wishlist-sharebox .share-facebook {
    border-radius: var(--button-rounding);
}

/**
 * Form elements
 */
button.btn {
    background: transparen;
    color: var(--color-text);
    padding: var(--button-py) var(--button-px);
    border-radius: var(--button-rounding);
}

button.btn-primary {
    color: var(--button-text-primary);
    background: var(--color-primary);
}

input.form-control {
    display: block;
    width: 100%;

    padding: var(--input-py) var(--input-px);
    background: var(--input-bg);
    border: var(--input-border);
    border-radius: var(--input-rounding);
    color: var(--color-text);
}

label + input.form-control {
    margin-bottom: 1rem;
}


/**
 * Rating
 */
.reviews-total svg {
    width: 2rem;
    height: 2rem;
}


/**
 * Login
 */

.login,
.register {
    max-width: 24rem;
    margin: 0 auto;
    padding: 0 1rem;
}

.login div,
.register div {
    width: 100% !important;
}

.login form,
.register form {
    margin-top: 3rem;
    text-align: left;
}

.login label,
.register label {
    display: block;
    margin-bottom: 0.5rem;
    text-align: left;
    font-size: 0.875rem;
}

.login label.cursor,
.register label.cursor {
    padding: 1rem 0;
}

.login label.cursor + label.cursor,
.register label.cursor + label.cursor {
    margin-left: 1rem;
}

.login label.cursor,
.register label.cursor,
.login label.cursor > input[type="radio"],
.register label.cursor > input[type="radio"] {
    display: inline-block;
    width: auto;
    cursor: pointer;
}

.login label.cursor > input[type="radio"],
.register label.cursor > input[type="radio"] {
    margin-right: .5rem;
    width: 1.5rem;
    height: 1.5rem;
    color: var(--color-primary);
    --tw-ring-color: var(--color-primary);
}

.login input[type="text"],
.login input[type="email"],
.login input[type="password"],
.register input[type="text"],
.register input[type="email"],
.register input[type="password"] {
    margin-bottom: 1rem;
}

.login .btn-inverse,
.register .btn-inverse,
.register hr + div > a[href] {
    margin: 1rem 0 2rem 0;
    background-color: var(--color-primary);
    color: #ffffff;
    font-weight: 600;
    padding: var(--input-py) var(--input-px);
    border: none;
    cursor: pointer;
    border-radius: var(--button-rounding);
    width: 100%;
}

.register hr + div a[href] {
    padding: 0.75rem 2rem;
}

.login .btn-inverse :hover,
.register .btn-inverse :hover {
    background-color: var(--color-text);
}

.login br,
.register br {
    display: none;
}

.login .btn-inverse:hover,
.register .btn-inverse:hover {
    background-color: var(--color-text);
}

.login hr,
.register hr {
    margin-bottom: 2rem;
}

.login hr + div,
.register hr + div {
    display: block;
}

.login hr + div > a,
.register hr + div > a[href] {
    display: block;
    margin-bottom: 1rem;
    font-size: 1rem !important;
    color: var(--color-primary);
}

.login hr + div > a:hover,
.register hr + div > a:hover {
    color: var(--color-text);
}

.login hr + div a.btn,
.register hr + div a[href] {
    display: block;
    background: transparent;
    font-size: 1rem !important;
    color: var(--color-primary);
    border: 1px solid var(--color-primary);
    border-radius: var(--button-rounding);
}

.login hr + div a.btn:hover,
.register hr + div a:hover {
    background: transparent;
    color: var(--color-text);
    border-color: var(--color-text);
}

.customerarea_login_message {
    margin-bottom: 2rem !important;
}

/**
 * Bugfix for theme previewer events
 */
.selected-content .pointer-events-none {
    pointer-events: auto;
} 

/**
 * Hide number input spinners on qty selector
 */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
input[type=number] { -moz-appearance: textfield; }

/**
 * Nordhaus brand overrides — Lättare steg (see DESIGN.md)
 * Values from Nordhaus grafisk profil och typografi 2026.
 */
:root {
    --color-brand: #1B5159;        /* Primary Brand — acts: CTA, active states, links */
    --color-brand-hover: #144046;  /* flat darken of Primary Brand; house-defined */
    --color-brand-deep: #0E3B4D;   /* Deep Brand — holds: large dark B2B/storytelling surfaces */
    --color-ink: #111111;          /* Black — headings, primary text, footer, badges */
    --color-body: #3F3F3F;         /* Body Text */
    --color-ink-soft: #5F5F5F;     /* Secondary Text — metadata, microcopy */
    --bg-mist: #F6F6F6;            /* Light Grey — cards, secondary sections, fields */
    --line-hair: rgba(17, 17, 17, 0.12);
    --radius-base: 4px;            /* The One Radius Rule — 4px or square */
    --warm-accent: #A68C86;        /* sparing: highlights and details only */
    --restep-green: #5F7158;
    --restep-green-deep: #434C40;
}
.qs-cart-submit,
.btn-brand {
    background-color: var(--color-brand) !important;
    color: #ffffff !important;
}
.text-brand {
    color: var(--color-brand);
}
.qs-cart-submit:hover,
.btn-brand:hover {
    background-color: var(--color-brand-hover) !important;
}
.bg-mist {
    background-color: var(--bg-mist);
}
.text-ink-soft {
    color: var(--color-ink-soft);
}
.rounded-soft {
    border-radius: var(--radius-base);
}
.rounded-t-soft {
    border-top-left-radius: var(--radius-base);
    border-top-right-radius: var(--radius-base);
}

/* PDP variant swatches (sizes). A flex-wrap row leaves a ragged tail —
   13 sizes broke 6/6/1 with dead space on the right. An auto-filling grid
   packs each full row flush to the column edge instead.
   auto-fill, NOT auto-fit: auto-fit collapses the empty tracks, so a product
   with three sizes would stretch into three oversized circles. auto-fill keeps
   the tracks, so swatches hold their size no matter how many exist. */
.nh-size-grid {
    display: grid;
    /* Tracks span the full column width and divide it evenly, so the picker is
       as wide as the content around it instead of an arbitrary fixed block.
       The minimum sets the track count and so the swatch size: the narrower the
       minimum, the more tracks fit. Track counts are whole numbers, so at some
       widths a track jumps a long way (343px goes 36px at 8 tracks, 42px at 7);
       the max-width on the swatch below absorbs that jump and holds the range
       to 36–40px. */
    grid-template-columns: repeat(auto-fill, minmax(2.25rem, 1fr));
    gap: 0.5rem;
}
.nh-size-grid > * {
    min-width: 0;
}
.nh-size-swatch {
    width: 100%;
    /* Ceiling for the widths where a track overshoots; keeps the swatch from
       drifting back up toward its original 44px. */
    max-width: 2.5rem;
    margin-inline: auto;
    aspect-ratio: 1 / 1;
}

/* Header: translucent paper over content, hairline base — no shadow.
   The blur MUST live on the inner <nav>, not the section: backdrop-filter
   establishes a containing block for position:fixed descendants, and the
   mobile menu drawer + search modal are fixed elements inside this section —
   filtering the section cages them inside the header box (broken menu). */
[data-qb-area="header"] {
    background-color: transparent;
    border-bottom: 0;
}
[data-qb-area="header"] > nav {
    background-color: rgba(255, 255, 255, 0.86);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border-bottom: 1px solid var(--line-hair);
}

/* VAT switch in the header, where the search button used to sit. It is a link,
   not a checkbox: prices are re-rendered server-side (?tax-reverse), so the
   switch only has to show the current state and navigate to the other one.
   Teal for "on" keeps the accent on controls (see DESIGN.md). */
.nh-tax-toggle {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    padding: 4px 6px;
    line-height: 1;
    text-decoration: none;
    color: var(--color-ink);
}
.nh-tax-track {
    position: relative;
    display: block;
    width: 32px;
    height: 17px;
    border-radius: 999px;
    background-color: rgba(14, 15, 16, 0.14);
    transition: background-color .2s ease;
}
.nh-tax-knob {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 11px;
    height: 11px;
    border-radius: 50%;
    background-color: var(--color-ink-soft);
    transition: transform .2s ease, background-color .2s ease;
}
.nh-tax-toggle.is-on .nh-tax-track {
    background-color: var(--color-brand);
}
.nh-tax-toggle.is-on .nh-tax-knob {
    background-color: #ffffff;
    transform: translateX(15px);
}
.nh-tax-label {
    font-size: 9px;
    letter-spacing: 0.02em;
    white-space: nowrap;
    color: var(--color-ink-soft);
    transition: color .2s ease;
}
@media (min-width: 640px) {
    .nh-tax-toggle {
        gap: 4px;
        padding: 4px 8px;
    }
    .nh-tax-track {
        width: 38px;
        height: 20px;
    }
    .nh-tax-knob {
        width: 14px;
        height: 14px;
    }
    .nh-tax-toggle.is-on .nh-tax-knob {
        transform: translateX(18px);
    }
    .nh-tax-label {
        font-size: 10px;
    }
}
.nh-tax-toggle:hover .nh-tax-label {
    color: var(--color-ink);
}
.nh-tax-toggle:focus-visible {
    outline: 2px solid var(--color-ink);
    outline-offset: 2px;
    border-radius: 10px;
}

/* Search field in the mobile menu drawer: a quiet mist-filled pill, no border
   until focus — it should read as a place to type, not as a second CTA. */
.nh-menu-search {
    background-color: var(--bg-mist);
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--color-ink);
    -webkit-appearance: none;
    appearance: none;
    transition: border-color .2s ease, background-color .2s ease;
}
.nh-menu-search::placeholder {
    color: var(--color-ink-soft);
    opacity: .8;
}
.nh-menu-search:focus {
    outline: none;
    background-color: #ffffff;
    border-color: var(--color-brand);
}
.nh-menu-search::-webkit-search-cancel-button {
    -webkit-appearance: none;
}

/* Topbar: the store's standing promises, in the Label role on ink, directly
   above the paper nav. It carries data-qb-area="header" so the theme editor
   opens the right settings group, which also means the transparent-background
   rule above targets it — hence the doubled selector here.
   No teal: the accent stays on controls (see DESIGN.md), and a utility bar
   that shouts competes with the CTA it is supposed to be reassuring about. */
[data-qb-area="header"].nh-topbar {
    background-color: var(--color-ink);
    color: #ffffff;
}
.nh-topbar-list {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 34px;
    margin: 0;
    padding: 0;
    list-style: none;
    font-family: 'Montserrat',
sans-serif;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    line-height: 1.2;
}
.nh-topbar-list > li {
    padding-top: 7px;
    padding-bottom: 7px;
    text-align: center;
}
.nh-topbar-list > li + li {
    margin-left: 18px;
    padding-left: 18px;
    border-left: 1px solid rgba(255, 255, 255, 0.22);
}
/* Three promises do not fit across a 390px phone, so the third one rides in the
   second cell instead of being dropped: both strings stack in one grid cell and
   crossfade, 3.5s each. Grid stacking sizes the cell to the wider of the two, so
   the divider never shifts mid-cycle. */
.nh-topbar-wide {
    display: none;
}

/* Rating cell. Amber is the one non-brand hue the bar is allowed (DESIGN.md,
   Utility) — the star convention is worth more than tonal purity here. Four
   cells only fit from 1024px; below that the rating rides in slot one's
   crossfade (.nh-topbar-rotator-lg) rather than being dropped. */
.nh-topbar-widest {
    display: none;
}
.nh-topbar-rating > a,
.nh-topbar-rating > span,
.nh-topbar-rating-mini {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    color: inherit;
    white-space: nowrap;
}
.nh-topbar-rating > a:hover {
    text-decoration: underline;
    text-underline-offset: 2px;
    text-decoration-color: rgba(255, 255, 255, 0.45);
}
/* The glyph row rides high against an uppercase baseline — hence the nudge. */
.nh-topbar-stars {
    flex: none;
    color: #F2C41B;
    font-size: 13px;
    line-height: 1;
    letter-spacing: 0;
    transform: translateY(-0.5px);
}
/* A crossfading cell is as wide as its wider string, so the shorter one has to
   be centred in it — left-aligned, it would appear to jump sideways each swap. */
.nh-topbar-rotator {
    display: grid;
    justify-items: center;
}
.nh-topbar-rot {
    grid-area: 1 / 1;
    animation: nh-topbar-rot-a 8s ease-in-out infinite;
}
.nh-topbar-rot-b {
    animation-name: nh-topbar-rot-b;
}
@keyframes nh-topbar-rot-a {
    0%, 44% { opacity: 1; }
    50%, 94% { opacity: 0; }
    100% { opacity: 1; }
}
@keyframes nh-topbar-rot-b {
    0%, 44% { opacity: 0; }
    50%, 94% { opacity: 1; }
    100% { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .nh-topbar-rot { animation: none; }
    .nh-topbar-rot-b { display: none; }
}
@media (min-width: 640px) and (max-width: 1023.98px) {
    /* Three cells fit, four do not: slot one keeps crossfading with the rating
       while slot two goes static, so no cell is lost at tablet width. */
    /* Outranks the .nh-topbar-rotator collapse in the 640px block below. */
    .nh-topbar-list > .nh-topbar-rotator-lg { display: grid; }
    .nh-topbar-rotator-lg .nh-topbar-rot {
        animation: nh-topbar-rot-a 8s ease-in-out infinite;
    }
    .nh-topbar-rotator-lg .nh-topbar-rot-b {
        display: block;
        animation-name: nh-topbar-rot-b;
    }
}
@media (min-width: 1024px) {
    .nh-topbar-widest { display: block; }
}
@media (min-width: 640px) {
    /* Room for all three cells again — slot two goes back to one static line */
    .nh-topbar-rotator { display: block; }
    .nh-topbar-rot { animation: none; }
    .nh-topbar-rot-b { display: none; }
    .nh-topbar-list {
        min-height: 36px;
        font-size: 11px;
    }
    .nh-topbar-list > li + li {
        margin-left: 28px;
        padding-left: 28px;
    }
    .nh-topbar-wide {
        display: block;
    }
    .nh-topbar-stars {
        font-size: 14px;
    }
}

/* Nav links: teal underline grows in from the left; no opacity fade.
   Only :hover/is-open trigger it — .active (the current section) stays
   plain so Herr/Dam aren't permanently underlined just for being the
   section you're browsing. */
.nav-top-link {
    position: relative;
    font-family: 'Montserrat',
sans-serif;
}
.nav-top-link::after {
    content: '';
    position: absolute;
    left: 0.25rem;
    right: 0.25rem;
    bottom: 0.125rem;
    height: 2px;
    background-color: var(--color-brand);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 200ms ease-out;
}
.nav-top-link:hover::after,
.nav-top-link.is-open::after {
    transform: scaleX(1);
}

/* ---------- Desktop mega menu ---------- */

.mega-panel {
    background-color: var(--bg-header);
    border-top: 1px solid var(--line-hair);
    box-shadow: 0 28px 44px -28px rgba(14, 15, 16, 0.28);
    max-height: calc(100vh - 8rem);
    overflow-y: auto;
}

.mega-chevron {
    transform: rotate(90deg);
    transition: transform 200ms ease;
}
.mega-chevron.is-open {
    transform: rotate(-90deg);
}

.mega-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 3.5rem;
    row-gap: 0.5rem;
    padding-top: 1.75rem;
}
@media (min-width: 1024px) {
    .mega-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 1280px) {
    .mega-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.mega-link {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 0.875rem 0;
}
.mega-label {
    display: block;
    min-width: 0;
}
.mega-title {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 600;
    font-size: 0.9375rem;
    line-height: 1.3;
    letter-spacing: -0.005em;
    transition: color 200ms ease;
}
.mega-sub {
    display: block;
    margin-top: 3px;
    font-size: 0.8125rem;
    line-height: 1.4;
    color: var(--color-ink-soft);
}
.mega-arrow {
    width: 1rem;
    height: 1rem;
    flex: none;
    margin-left: auto;
    color: var(--color-brand);
    opacity: 0;
    transform: translateX(-6px);
    transition: opacity 200ms ease, transform 200ms ease;
}
.mega-link:hover .mega-title,
.mega-link:focus-visible .mega-title,
.mega-link.is-current .mega-title {
    color: var(--color-brand);
}
.mega-link:hover .mega-arrow,
.mega-link:focus-visible .mega-arrow {
    opacity: 1;
    transform: translateX(0);
}

.mega-sublist {
    padding-bottom: 0.75rem;
}
.mega-sublink {
    display: block;
    padding: 0.3125rem 0;
    font-size: 0.8125rem;
    color: var(--color-ink-soft);
    transition: color 200ms ease;
}
.mega-sublink--deep {
    padding-left: 0.75rem;
}
/* Sub-level links stay compact: title only, no subtitle line */
.mega-sublink .mega-title {
    font-size: 0.8125rem;
    font-weight: 500;
    color: inherit;
}
.mega-sublink .mega-sub {
    display: none;
}
.mega-sublink:hover,
.mega-sublink.is-current {
    color: var(--color-brand);
}

.mega-foot {
    margin-top: 1.5rem;
    padding: 1.125rem 0 1.75rem;
    border-top: 1px solid var(--line-hair);
}
.mega-all {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.6875rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--color-brand);
    transition: gap 200ms ease;
}
.mega-all:hover {
    gap: 0.875rem;
}
/* A menu group without a page (custom link "#") has nothing to "Visa allt" in */
.mega-foot:has(.mega-all[href="#"]),
.nh-sub .nh-sub-all[href="#"] {
    display: none;
}

@media (prefers-reduced-motion: reduce) {
    .mega-title,
    .mega-arrow,
    .mega-sublink,
    .mega-all {
        transition: none;
    }
    .mega-arrow { transform: none; }
}

/* Startpage heading element: the Display role (Montserrat 800, uppercase) */
[data-qb-element="heading"] h1 {
    font-size: clamp(40px, 6vw, 76px);
    font-weight: 800;
    line-height: 1.03;
    letter-spacing: -0.01em;
    text-transform: uppercase;
    max-width: 42rem;
    text-wrap: balance;
}

/* Section headers claim the Headline role (800, tight leading) */
[data-qb-element="productslider"] h2,
[data-qb-element="products"] h2,
[data-qb-element="categories"] h2 {
    font-size: clamp(24px, 2.8vw, 38px);
    font-weight: 800;
    line-height: 1.12;
    letter-spacing: -0.01em;
}
[data-qb-element="heading"] h1 + div[data-qb-setting="text"],
[data-qb-element="heading"] div[data-qb-setting="text"] {
    color: var(--color-ink-soft);
    line-height: 1.6;
    max-width: 52ch;
}

/* USP dividers read as hairlines, not full-strength ink */
[data-qb-element="usp"] .divide-foreground > :not([hidden]) ~ :not([hidden]) {
    border-color: var(--line-hair);
}
/* When USP items stack, the vertical dividers have nothing to divide */
@media (max-width: 767px) {
    [data-qb-element="usp"] .divide-foreground > :not([hidden]) ~ :not([hidden]) {
        border-left-width: 0;
    }
}

/**
 * Fix for image alignment
 */
img.fr-dib {
    margin: 5px auto
}

img.fr-dib.fr-fil {
    margin-left: 0;
}

img.fr-dib.fr-fir {
    margin-right: 0;
}

/**
 * Subcategory grid on a category page.
 *
 * The template can't tell whether the children loop will actually emit
 * anything — hasChildren is true, but every child can still be filtered out by
 * the inverted current / current_url guards around it. When that happens the
 * section renders pt-12 of padding around an empty grid. :empty won't catch it
 * (the grid is full of whitespace text nodes), so test for element children.
 * Note: no literal template tags in this comment — this file is itself parsed
 * as a template, and they would open sections that never close.
 */
.subcat-section:not(:has(> div > *)) {
    display: none;
}

/**
 * Category filter + sort row.
 *
 * The two controls come from two different Quickbutik apps and arrive speaking
 * different token languages: the filter button inherits --button-rounding
 * (9999rem, a full pill) while the sort <select> inherits input-rounding
 * (0.5rem) and a shorter py-2. Side by side that reads as two unrelated
 * widgets at two different heights. Unify both on the button language — one
 * pill, one height, one border — so the row reads as a single control group.
 *
 * Specificity note: the filter app injects its own <style> at runtime, after
 * this sheet. The attribute-scoped selectors below outrank its single-class
 * .pf-filter-button rules, so none of this needs !important.
 */
[data-qb-selector="filter-container"] .pf-filter-button,
[data-qb-selector="sort-container"] select {
    width: 100%;
    min-height: 2.375rem;
    padding: 0.5rem 1.125rem;
    border: var(--input-border);
    border-radius: var(--button-rounding);
    background-color: var(--input-bg);
    color: var(--color-foreground);
    font-size: 0.875rem;
    line-height: 1.25;
}

/* The button's own classes include justify-between, which flings the icon and
   the label to opposite edges once the control is full width. */
[data-qb-selector="filter-container"] .pf-filter-button {
    justify-content: center;
}

[data-qb-selector="filter-container"] .pf-filter-button-container {
    width: 100%;
}

/* Leave room for the theme's chevron (select:not([size]) background-image). */
[data-qb-selector="sort-container"] select {
    padding-right: 2.5rem;
    text-overflow: ellipsis;
}

@media (min-width: 640px) {
    [data-qb-selector="filter-container"] .pf-filter-button,
    [data-qb-selector="sort-container"] select {
        width: auto;
    }

    [data-qb-selector="filter-container"] .pf-filter-button-container {
        width: auto;
    }
}

/**
 * Product watch (notify me OOS) — match ATC row width and alignment
 */
[data-qb-selector="product-apps-productwatch"] a {
    flex: 1 !important;
    display: flex !important;
    width: 100% !important;
    justify-content: center;
    align-items: center;
    line-height: 1.2 !important;
    box-sizing: border-box !important;
    border: none !important;
}

/* Product watch modal ("Bevaka produkt"). The app renders title, text, input
   and submit into the shared modal; classes come from js/appsOverrides.js.
   Button colours: .btn-brand (beats the app's inline grey). */
[x-html="$store.modal.content"] form:has(#watchlistEmail) {
    color: var(--color-body) !important;
    font-size: 15px;
    line-height: 1.55;
}
.nh-watch-title {
    margin: 0 0 12px;
    font-size: 26px;
    line-height: 1.15;
    letter-spacing: -0.01em;
    color: var(--color-ink);
}
@media (min-width: 768px) {
    .nh-watch-title {
        font-size: 30px;
    }
}
.nh-watch-input {
    display: block;
    margin-top: 24px;
    padding: 14px 16px;
    font-size: 16px; /* 16px keeps iOS from zooming on focus */
    text-align: center;
    color: var(--color-ink);
    background: var(--bg-mist);
    border: 1px solid var(--line-hair);
    border-radius: var(--radius-base);
    outline: none;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.nh-watch-input::placeholder {
    color: var(--color-ink-soft);
    opacity: 1;
}
.nh-watch-input:focus {
    border-color: var(--color-brand);
    box-shadow: 0 0 0 3px rgba(27, 81, 89, 0.15);
    background: #fff;
}
.nh-watch-submit {
    margin-top: 12px;
    border: none !important;
}
/* Same type as the add-to-cart button. Qualified selectors, because Tailwind's
   preflight (button { font-family: inherit }) loads after this file and the
   app's <a> button never matches the global heading rule. */
[data-qb-selector="product-apps-productwatch"] a.nh-watch-btn,
form button.nh-watch-submit {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 1.2;
}

/**
 * A full-bleed band opening the long-form is its own separator.
 *
 * The buy section carries pb-16 — paper sized to hold a light section off
 * the buy area. When the long-form instead opens on an edge-to-edge dark
 * band, that paper reads as a gap the layout forgot to close, so it
 * collapses, but only in exactly that case:
 * :has() keys the rule to a band being the long-form's first section, so a
 * product whose rich content starts on paper keeps its spacing untouched.
 */
[data-qb-area="product"] > section:has(+ .applyTailwindClasses .nh2-band:first-of-type) {
    padding-bottom: 0;
}

/* Företagsslinga on the product page — markup and marquee styling are the
   homepage band's (.nhs-logos, .nhs-marquee; see start_nh_trust.mustache).
   Here it sits inside the buy column under the add-to-cart row, so it drops
   the band chrome: no fill, no hairlines, no side gutter, and the label
   always stacks above the marquee — the column is too narrow for the
   homepage's side-by-side row. "Läs mer" (to /foretag) shares the label's
   line, pushed to the right edge. */
.nhs.nh-pdp-logos {
    margin-bottom: 1.5rem;
}
.nhs.nh-pdp-logos .nhs-logos {
    padding-top: 0;
    padding-bottom: 0;
}
.nhs.nh-pdp-logos .nhs-wrap {
    padding-left: 0;
    padding-right: 0;
}
.nhs.nh-pdp-logos .nhs-logos__row {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--nhs-2);
}
.nh-pdp-logos__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
}
/* .nhs a resets links to inherit/no underline, so the Storleksguide link
   treatment is restated here at a specificity that beats it. */
.nhs.nh-pdp-logos .nh-pdp-logos__more {
    flex-shrink: 0;
    font-size: 12px;
    line-height: 18px;
    color: var(--color-brand);
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Product-page detail accordion (Beskrivning + content sections).
   These rows are navigation, not section headlines — they carry the Label
   role (small, tracked, uppercase) so the body copy underneath stays the
   loudest thing in the block, and so they match the "Rekommenderade
   tillbehör" label directly above them in the same column. */
.pdp-details .pdp-acc-row {
    padding-top: 16px;
    padding-bottom: 16px;
}
.pdp-details .pdp-acc-title {
    font-size: 13px;
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: 0.07em;
    text-transform: uppercase;
}
.pdp-details .pdp-acc-chevron {
    width: 18px;
    height: 18px;
    color: var(--color-ink-soft);
    transition: transform 130ms ease-out;
}
/* Opening a section should feel instant, not staged. The global
   .duration-default (200ms, a store setting shared with buttons and nav) is
   too slow for a row you tap to read what's underneath, so these panels get
   their own timing. Higher specificity than Tailwind's .transition, so no
   !important needed. */
.pdp-details .pdp-acc-anim {
    transition-duration: 130ms;
}
@media (prefers-reduced-motion: reduce) {
    .pdp-details .pdp-acc-chevron,
    .pdp-details .pdp-acc-anim {
        transition-duration: 1ms;
    }
}
.pdp-details .pdp-acc-body {
    padding-bottom: 18px;
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-ink-soft);
}
.pdp-details .pdp-acc-body > *:last-child {
    margin-bottom: 0;
}
/* Headings inside authored body copy: applyTailwindClasses gives an <h2> the
   text-3xl Headline role, which lands three steps above the section label that
   contains it — a subhead cannot outrank its own section. Cap them at the
   title role instead. */
.pdp-details .pdp-acc-body :is(h1, h2, h3, h4, h5, h6) {
    font-size: 15px;
    font-weight: 800;
    line-height: 1.3;
    letter-spacing: 0;
    color: var(--color-foreground);
    margin-top: 1.5rem;
    margin-bottom: 0.5rem;
}
/* Check-mark rows, authored for the live theme's Font Awesome as
   <div><i class="fa fa-check">&nbsp;</i><p>…</p></div>. This theme has no
   Font Awesome, so the <i> was an empty inline box that pushed the <p> onto
   a line of its own — a blank line above every row. Lay the row out as
   icon | text and draw the check with a mask; the inline Font Awesome
   colour is ignored in favour of the brand. */
.pdp-details .pdp-acc-body div:has(> i.fa-check) {
    display: grid;
    grid-template-columns: 16px 1fr;
    column-gap: 0.625rem;
    align-items: start;
    margin-bottom: 0.625rem;
}
.pdp-details .pdp-acc-body div:has(> i.fa-check) > p {
    margin-bottom: 0;
}
.pdp-details .pdp-acc-body i.fa-check {
    width: 16px;
    height: 16px;
    margin-top: 3px; /* centres on the 22.4px first line */
    font-size: 0;
    background-color: var(--color-brand);
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7'/%3E%3C/svg%3E") center / contain no-repeat;
}
/* The editor's spacer (<div><br></div>) after the last row doubles the gap
   the row margin already carries. */
.pdp-details .pdp-acc-body div:has(> i.fa-check) + div:has(> br:only-child) {
    display: none;
}

/* Teknisk info fold-down (custom datafield 405). Authored as label/value
   tables (some products: a plain list); rows become hairline-separated
   label | value pairs at the body scale. */
.pdp-details .pdp-tech > :first-child {
    margin-top: 0;
}
.pdp-details .pdp-tech table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 0.5rem;
}
.pdp-details .pdp-tech th,
.pdp-details .pdp-tech td {
    padding: 0.5rem 0;
    border-bottom: 1px solid var(--line-hair);
    text-align: left;
    vertical-align: top;
}
.pdp-details .pdp-tech th {
    width: 42%;
    padding-right: 1rem;
    font-weight: 600;
    color: var(--color-foreground);
}
.pdp-details .pdp-tech ul {
    list-style: disc;
    padding-left: 1.25rem;
}
.pdp-details .pdp-tech li + li {
    margin-top: 0.25rem;
}

/* Vanliga frågor fold-down (custom datafield 592). The authored HTML is a
   Bootstrap collapse accordion — card / card-header > h2 > button / .collapse
   (inline height:0) > card-body — and this theme has no Bootstrap JS, so it
   is flattened to an always-open Q&A list: the fold-down itself is the
   toggle. `.collapse` must be undone explicitly — Tailwind ships it as
   visibility:collapse — and the theme's own .btn styles neutralised. */
.pdp-details .pdp-faq .accordion {
    width: auto !important;
    margin: 0 !important;
}
.pdp-details .pdp-faq .card + .card {
    margin-top: 1.25rem;
}
.pdp-details .pdp-faq .card-header h2 {
    margin: 0 0 0.375rem;
}
.pdp-details .pdp-faq .card-header .fa,
.pdp-details .pdp-faq .card-header h2 > span {
    display: none;
}
.pdp-details .pdp-faq .card-header .btn {
    all: unset;
    display: block;
    font: inherit;
    color: inherit;
    cursor: text;
}
.pdp-details .pdp-faq .collapse {
    display: block !important;
    visibility: visible !important;
    height: auto !important;
    overflow: visible !important;
}
.pdp-details .pdp-faq ul {
    list-style: disc;
    padding-left: 1.25rem;
}
.pdp-details .pdp-faq ul {
    list-style: disc;
    padding-left: 1.25rem;
}
.pdp-details .pdp-faq .card-body a {
    color: var(--color-foreground) !important;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Benefit rows in the buy column (authored in datafield_1). On mobile they
   stack; from md up the column is wide enough that a 4-row stack pushes the
   buy button below the fold, so the rows pair off 2x2. The list wrapper is
   matched structurally because the markup lives in product content, not in
   this template.
   No hairlines anywhere: the icon chips already group each row, and in the 2x2
   a divider spanning half the width reads as a broken rule, not as structure. */
@media (min-width: 768px) {
    .pdp-highlights .nh-hl-list {
        display: grid;
        grid-template-columns: 1fr 1fr;
        column-gap: 1.25rem;
        row-gap: 0.25rem;
    }
}

/* The rows themselves. Everything below used to be Tailwind utilities written
   into the product's datafield_1 in the admin — which does not work: the
   storefront serves a *purged* tailwind.css whose content globs are only
   ./js/*.js and ./_files/**.mustache (see the leo config). Product HTML lives
   in the database, is never scanned, and so every class unique to it is
   compiled away. The dev server hides this completely — it injects the
   Tailwind Play CDN, which generates classes from the live DOM, so authored
   utilities always resolve there and never on the real storefront.
   Hence: authored product HTML carries semantic .nh-* / .nh2-* hooks only, and
   this file is the single place their styling lives.
   Two consequences shape every rule from here down.
   1. Specificity. tailwind.css is linked AFTER theme.css, so a bare .nh2-x
      (0,1,0) loses to any utility of equal weight. Every rule is scoped under
      its container to reach (0,2,0) and win outright.
   2. Type scale. The Play CDN applies leo's fontSize extend (base .9375rem,
      xl 1.5rem, 3xl 2rem, …); the published build was compiled with stock
      Tailwind defaults, so text-* renders a step off between the two. Sizes
      here are absolute px, which is the only way the two agree. */
.pdp-highlights .nh-hl {
    margin-bottom: 1.5rem;
}
/* 14px/1.625 — the same body scale as .pdp-details .pdp-acc-body, so the lede
   reads as the opening of the product description rather than a size of its own */
.pdp-highlights .nh-hl-lede {
    font-size: 14px;
    line-height: 1.625;
    margin-bottom: 1.25rem;
    color: var(--color-foreground);
}
/* Sized down a step on mobile — with no hairlines the rows need less air, and
   the smaller chip keeps all four above the buy button. The md block below
   puts the desktop scale back; it has to sit *after* these rules, since equal
   specificity means source order decides. */
.pdp-highlights .nh-hl-row {
    display: grid;
    grid-template-columns: 34px 1fr;
    gap: 0.75rem;
    align-items: center;
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
}
.pdp-highlights .nh-hl-icon {
    width: 34px;
    height: 34px;
    border-radius: 999px;
    background-color: var(--bg-mist);
    color: var(--color-foreground);
    display: grid;
    place-items: center;
    flex-shrink: 0;
}
.pdp-highlights .nh-hl-icon svg {
    width: 17px;
    height: 17px;
}
/* 10.5px is deliberate: at 11px this label competes with the value under it,
   at 10px the tracking makes it illegible. */
.pdp-highlights .nh-hl-label {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    line-height: 1.25;
    color: var(--color-foreground);
    opacity: 0.6;
}
.pdp-highlights .nh-hl-value {
    font-size: 14px;
    font-weight: 800;
    line-height: 1.25;
    margin-top: 0.125rem;
}
@media (min-width: 768px) {
    .pdp-highlights .nh-hl-row {
        grid-template-columns: 40px 1fr;
        gap: 0.875rem;
        padding-top: 0.75rem;
        padding-bottom: 0.75rem;
    }
    .pdp-highlights .nh-hl-icon { width: 40px; height: 40px; }
    .pdp-highlights .nh-hl-icon svg { width: 20px; height: 20px; }
    .pdp-highlights .nh-hl-label { font-size: 10.5px; }
    .pdp-highlights .nh-hl-value { font-size: 15px; }
}

/* Check variant of the same block: three benefits on one row, each a Signal
   Teal check, the claim, and the spec that earns it underneath. No chips and
   no panel — the row has to stay light enough that the size picker and the
   buy button keep the weight in this column.
   The claim wraps to two lines in the narrowest column rather than shrinking
   further; items align to the top so the checks stay on one optical line when
   that happens. Same authoring rules as .nh-hl above. */
.pdp-highlights .nh-hl-checks {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 0.625rem 0.75rem;
    margin-bottom: 0.25rem;
}
.pdp-highlights .nh-hl-check {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
}
.pdp-highlights .nh-hl-check > svg {
    width: 16px;
    height: 16px;
    color: var(--color-brand);
    flex-shrink: 0;
    margin-top: 1px;
}
/* The claim is a USP — Montserrat states it, bold ink, while the check that
   precedes it carries the Primary Brand teal. The spec beneath is
   explanatory, so it stays Inter in secondary grey (see DESIGN.md, The Two
   Families Rule). */
.pdp-highlights .nh-hl-claim {
    font-family: 'Montserrat',
sans-serif;
    font-size: 12.5px;
    font-weight: 700;
    line-height: 1.3;
    color: var(--color-foreground);
}
.pdp-highlights .nh-hl-spec {
    display: block;
    /* .nh-hl-spec is nested inside .nh-hl-claim, so the heading face inherits
       down unless it is put back explicitly. */
    font-family: 'Inter',sans-serif;
    font-size: 11px;
    font-weight: 400;
    line-height: 1.3;
    margin-top: 2px;
    color: var(--color-ink-soft);
}
@media (min-width: 768px) {
    .pdp-highlights .nh-hl-checks { gap: 0.75rem 1rem; }
    .pdp-highlights .nh-hl-check > svg { width: 17px; height: 17px; }
    .pdp-highlights .nh-hl-claim { font-size: 13px; }
    .pdp-highlights .nh-hl-spec { font-size: 11.5px; }
}


/* ==========================================================================
   NH2 — Nordin 2 long-form (authored in datafield_2)
   Three sections, one point each. See the note above .pdp-highlights .nh-hl
   for why none of this can live as utility classes in the product HTML.
   ========================================================================== */

.nh2 {
    color: var(--color-foreground);
}
/* applyTailwindClasses injects mb-4 / mt-8 / leading-relaxed into every <p>
   and <h2> it finds in authored HTML. Those utilities exist in the published
   build, so they land here whether or not they were asked for — the block is
   reset once and each element then states its own spacing. */
.nh2 p,
.nh2 h2,
.nh2 h4 {
    margin: 0;
}

/* Shared shell: the long-form runs full-bleed, its copy sits on a 72rem
   measure with the same 1.25rem gutter as the rail's scroll padding. */
.nh2 .nh2-wrap {
    max-width: 72rem;
    margin-left: auto;
    margin-right: auto;
    padding-left: 1.25rem;
    padding-right: 1.25rem;
}
/* The three margin/size values below are not the ones the block was authored
   with — they are what applyTailwindClasses actually produced, and therefore
   what the design was signed off against on the dev server. That script gives
   every <p> `mb-4 leading-relaxed` and every <h2> `text-3xl mt-8 mb-4`, and
   those land after the authored utility of equal specificity, so mb-1/mb-2/
   mb-3 and text-2xl never took effect. Reproduced deliberately; see the note
   in _datafields/413_datafield_2.html if you'd rather have the authored
   values back. */
.nh2 .nh2-eyebrow {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    line-height: 1.625;
    margin-bottom: 1rem;
}
.nh2 .nh2-headline {
    font-size: 32px;
    font-weight: 800;
    line-height: 1.12;
    text-wrap: balance;
    margin-top: 2rem;
    margin-bottom: 1rem;
}
/* 32px at every width: the authored text-2xl lost to the injected text-3xl. */
.nh2 .nh2-subhead {
    font-size: 32px;
    font-weight: 800;
    line-height: 1.25;
    margin-top: 2rem;
    margin-bottom: 1rem;
}
@media (min-width: 768px) {
    .nh2 .nh2-headline { font-size: 46px; }
}

/* Photo frame: CSS-cropped close-ups. The CDN only resizes, so the crop is
   done here — object-cover fills the frame, then scale() zooms about a focal
   point set per-image via --ox/--oy/--z. */
.nh2 .nh2-ph {
    position: relative;
    overflow: hidden;
    background: var(--bg-mist);
    border-radius: var(--radius-base);
}
.nh2 .nh2-ph img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transform-origin: var(--ox, 50%) var(--oy, 50%);
    transform: scale(var(--z, 1));
    transition: transform 0.6s cubic-bezier(0.2, 0.6, 0.2, 1);
}
.nh2 .nh2-ph--3x4 { aspect-ratio: 3 / 4; }
.nh2 .nh2-ph--4x5 { aspect-ratio: 4 / 5; }
.nh2 .nh2-card:hover .nh2-ph img {
    transform: scale(calc(var(--z, 1) * 1.05));
}
/* Ambient shadow — photography only, never a control (see DESIGN.md). */
.nh2 .nh2-lift {
    box-shadow: 0 30px 60px -30px rgba(14, 15, 16, 0.25);
}

/* ---- Ink band: the page's one dark beat -------------------------------
   The loop is near-black cinematic footage. Framed on paper it read as a
   pasted-in player, so the section carries ink instead and the film runs
   full-bleed with no radius and no lift — its black and the band's ink are the
   same value, and the mask dissolves the two horizontal edges, so the strip
   has no perceivable frame. Every color here is a DESIGN.md value; secondary
   copy is tinted white, never gray (it would die on ink). */
.nh2 .nh2-band {
    background: #111111;
    color: #FFFFFF;
    padding-top: 3rem;
}
.nh2 .nh2-band-accent { color: #7FB8C0; }  /* Primary Brand lightened for dark grounds — 8.6:1 on ink */
.nh2 .nh2-band-copy   { color: rgba(255, 255, 255, 0.72); }
.nh2 .nh2-band-mute   { color: rgba(255, 255, 255, 0.60); font-weight: 400; }
.nh2 .nh2-band-grid {
    padding-top: 3rem;
    padding-bottom: 3.5rem;
    display: grid;
    gap: 2rem;
    align-items: start;
}
.nh2 .nh2-lede {
    font-size: 18px;
    line-height: 1.625;
    margin-bottom: 1rem;
}
.nh2 .nh2-specs {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: 1.5rem;
    row-gap: 0.75rem;
    margin-top: 2rem;
    padding-top: 1.75rem;
    border-top: 1px solid rgba(255, 255, 255, 0.14);
    font-size: 15px;
    font-weight: 600;
}
.nh2 .nh2-film {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
}
.nh2 .nh2-film video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 4%, #000 96%, transparent 100%);
            mask-image: linear-gradient(to bottom, transparent 0, #000 4%, #000 96%, transparent 100%);
}
/* WCAG 2.2.2: a 10s loop needs a stop. The chip is DESIGN.md's glass
   component, the one place blur is sanctioned — over photography. */
.nh2 .nh2-filmbtn {
    position: absolute;
    right: 16px;
    bottom: 16px;
    width: 44px;
    height: 44px;
    display: grid;
    place-items: center;
    border-radius: 999px;
    color: #FFFFFF;
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.24);
    -webkit-backdrop-filter: blur(10px);
            backdrop-filter: blur(10px);
    transition: background-color 0.2s ease;
}
.nh2 .nh2-filmbtn:hover { background: rgba(255, 255, 255, 0.24); }
.nh2 .nh2-filmbtn:focus-visible { outline: 2px solid #7FB8C0; outline-offset: 3px; }
@media (min-width: 768px) {
    .nh2 .nh2-band { padding-top: 4rem; }
    .nh2 .nh2-band-grid {
        padding-top: 5rem;
        padding-bottom: 6rem;
        grid-template-columns: 1fr 1fr;
        gap: 4rem;
    }
    /* The band headline climbs 32 → 40 → 46; the trades headline jumps
       straight to 46 at md, so the step lives on the band only. */
    .nh2 .nh2-band .nh2-headline { font-size: 40px; }
    /* Source is 1364×450. Below md that is a 130px sliver, so mobile crops to
       16/9 (keeps 59% of the width — verified against all three shots); from md
       up the frame matches the footage exactly and nothing is cropped. */
    .nh2 .nh2-film { aspect-ratio: 1364 / 450; }
    .nh2 .nh2-filmbtn { right: 24px; bottom: 24px; }
}
@media (min-width: 1024px) {
    .nh2 .nh2-band-grid { gap: 5rem; }
    .nh2 .nh2-band .nh2-headline { font-size: 46px; }
}

/* ---- Detail rail ---------------------------------------------------- */
.nh2 .nh2-details {
    padding-top: 3.5rem;
    padding-bottom: 3.5rem;
}
.nh2 .nh2-railhead {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.75rem;
}
.nh2 .nh2-railhead .nh2-eyebrow {
    color: var(--color-brand);
}
.nh2 .nh2-railhint {
    display: none;
    font-size: 14px;
    color: var(--color-ink-soft);
}
.nh2 .nh2-rail {
    display: flex;
    gap: 1rem;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-left: 1.25rem;
    scroll-padding-right: 1.25rem;
    padding-left: 1.25rem;
    padding-right: 1.25rem;
    padding-bottom: 0.5rem;
    scrollbar-width: none;
    -ms-overflow-style: none;
}
.nh2 .nh2-rail::-webkit-scrollbar { display: none; }
.nh2 .nh2-rail .nh2-card {
    scroll-snap-align: start;
    flex-shrink: 0;
    width: 220px;
}
.nh2 .nh2-cap {
    margin-top: 0.75rem;
    padding-left: 0.25rem;
    padding-right: 0.25rem;
}
.nh2 .nh2-cap-t {
    display: block;
    font-size: 15px;
    font-weight: 700;
}
.nh2 .nh2-cap-d {
    display: block;
    font-size: 14px;
    line-height: 1.375;
    margin-top: 0.125rem;
    color: var(--color-ink-soft);
}
@media (min-width: 640px) {
    .nh2 .nh2-railhint { display: inline; }
}
@media (min-width: 768px) {
    .nh2 .nh2-details {
        padding-top: 5rem;
        padding-bottom: 5rem;
    }
    .nh2 .nh2-rail .nh2-card { width: 248px; }
}
/* Desktop: the "swipe for more" rail becomes a static grid — every card
   visible at once, no horizontal scroll/snap, hint hidden. */
@media (min-width: 1024px) {
    .nh2 .nh2-railhint { display: none; }
    .nh2 .nh2-rail {
        display: grid;
        grid-template-columns: repeat(6, 1fr);
        gap: 1.5rem;
        overflow-x: visible;
        scroll-snap-type: none;
        max-width: 72rem;
        margin-left: auto;
        margin-right: auto;
        padding-bottom: 0;
    }
    .nh2 .nh2-rail .nh2-card { width: auto; }
}

/* ---- Trades --------------------------------------------------------- */
.nh2 .nh2-trades {
    padding-top: 3.5rem;
    padding-bottom: 3.5rem;
    background-color: var(--bg-mist);
}
.nh2 .nh2-trades-head {
    max-width: 42rem;
    margin-bottom: 2.5rem;
}
.nh2 .nh2-trades-head .nh2-eyebrow { color: var(--color-brand); }
.nh2 .nh2-trades-grid {
    display: grid;
    gap: 1.5rem;
    margin-bottom: 2.5rem;
}
.nh2 .nh2-trade-cap { margin-top: 1.25rem; }
/* A <span>, so it gets neither the h1–h6 element rule nor an injected
   .font-heading — it has to name the heading family itself. */
.nh2 .nh2-trade-t {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-size: 24px;
    font-weight: 800;
    line-height: 1.25;
}
.nh2 .nh2-trade-d {
    display: block;
    font-size: 15px;
    line-height: 1.625;
    margin-top: 0.375rem;
    color: var(--color-ink-soft);
}
.nh2 .nh2-floors {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: 2rem;
    row-gap: 1.75rem;
    border-top: 1px solid var(--line-hair);
    padding-top: 2.25rem;
}
/* Same story as .nh2-subhead: the injected text-xl/mt-8/mb-4 beat the authored
   text-base/mb-1, so these render at 24px with a 2rem lead-in. */
.nh2 .nh2-floor-t {
    font-size: 24px;
    font-weight: 700;
    line-height: 1.75rem;
    margin-top: 2rem;
    margin-bottom: 1rem;
}
.nh2 .nh2-floor-d {
    font-size: 15px;
    line-height: 1.625;
    margin-bottom: 1rem;
    color: var(--color-ink-soft);
}
@media (min-width: 640px) {
    .nh2 .nh2-trades-grid { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 768px) {
    .nh2 .nh2-trades {
        padding-top: 6rem;
        padding-bottom: 6rem;
    }
    .nh2 .nh2-trades-head { margin-bottom: 3rem; }
    .nh2 .nh2-trades-grid {
        gap: 2rem;
        margin-bottom: 3rem;
    }
}
@media (min-width: 1024px) {
    .nh2 .nh2-floors { grid-template-columns: repeat(4, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
    .nh2 .nh2-ph img { transition: none; }
    .nh2 .nh2-card:hover .nh2-ph img { transform: scale(var(--z, 1)); }
}


/* B2B block (product_b2b.mustache): on phones the lead form sits collapsed
   behind its header row — a full-height form stacked under the pitch made the
   section read as endless. The collapsed state is a media query rather than
   Alpine's x-show so the desktop form is never hidden while Alpine boots;
   Alpine only toggles .is-open, which is inert from 1024px up. */
@media (max-width: 1023px) {
    .nh-b2b-form:not(.is-open) {
        display: none;
    }
    .nh-b2b-form.is-open {
        animation: nh-b2b-reveal 0.22s ease-out;
    }
}
@keyframes nh-b2b-reveal {
    from {
        opacity: 0;
        transform: translateY(-4px);
    }
    to {
        opacity: 1;
        transform: none;
    }
}
@media (prefers-reduced-motion: reduce) {
    .nh-b2b-form.is-open {
        animation: none;
    }
}


/* ==========================================================================
   Category page header (list.mustache)
   ========================================================================== */

/* The photo band. Shorter than the startpage hero on purpose — this is the
   argument for a category, not for the store — but that shortness is exactly
   what breaks a copied hero scrim: the content stack occupies a much larger
   fraction of a 620px band than of a 92vh hero, so it reaches high into the
   gradient where a bottom-anchored veil has already faded out. Measured white
   text at 2.8:1 there.
   Hence two layers: a soft oval anchored bottom-left that grounds the copy,
   over the familiar bottom-up veil. Darkening the linear layer alone would
   have fixed the text by putting the whole photograph in shadow. */
.nh-cat-band {
    height: min(66vh, 620px);
    min-height: 440px;
}
.nh-cat-band-img {
    object-position: center 66%;
}
.nh-cat-band-scrim {
    background:
        radial-gradient(125% 118% at 4% 114%,
            rgba(14, 15, 16, 0.80) 0%,
            rgba(14, 15, 16, 0.52) 42%,
            rgba(14, 15, 16, 0) 76%),
        linear-gradient(to top,
            rgba(14, 15, 16, 0.80) 0%,
            rgba(14, 15, 16, 0.48) 36%,
            rgba(14, 15, 16, 0.12) 70%,
            rgba(14, 15, 16, 0) 100%);
}
@media (max-width: 860px) {
    .nh-cat-band {
        height: auto;
        min-height: 0;
        padding-top: clamp(180px, 42vw, 260px);
    }
    .nh-cat-band-img {
        object-position: center 58%;
    }
}

/* Category descriptions are authored in the admin's rich-text field, which
   ships inline font-family and text-align on every span (the live Arbetsskor
   category is full of `font-family: Arial`). Left alone, the category lede is
   the one place on the site that is not Montserrat. The template cannot clean
   the stored HTML, so the container overrides it. */
.nh-cat-lede :is(p, span, div, li, strong, em) {
    font-family: inherit !important;
    color: inherit !important;
    background: none !important;
}
.nh-cat-lede :is(p, div) {
    text-align: inherit !important;
}
.nh-cat-lede > *:last-child {
    margin-bottom: 0;
}

/* Glass chip on the band. DESIGN.md specifies a translucent WHITE fill, which
   works on the startpage hero because it sits deep in the scrim. Up here the
   white veil lightens its own ground and the 11px label fell to 2.8:1, so the
   same veil and blur sit on a dark base instead — the chip now carries its own
   contrast regardless of what the merchant uploads behind it.

   Carries the house cut (see CHIP SHAPE). Its padding is roomier than the
   merchandising tags', so the cut is 0.75em rather than 0.5em to land on the
   same ~30%-of-height proportion. Horizontal padding lives here instead of as
   Tailwind utilities because the right side has to clear the diagonal, and the
   rim highlight is gone because clip-path cannot stroke a diagonal edge — the
   fill was darkened to carry the separation on its own. */
.nh-cat-chip {
    --nh-cut: 0.75em;
    padding-left: 16px;
    padding-right: calc(16px + var(--nh-cut));
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    background:
        linear-gradient(rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.14)),
        rgba(14, 15, 16, 0.52);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border: 0;
}

/* Shoe guide strip.
   Collapsed it is a slim bar; expanded it becomes the four-question layout.
   The four dimensions read as pills rather than bold words because a row of
   equally-weighted words reads as a sentence — the bar has to look like an
   instrument before it is read. */
.nh-catguide-head {
    position: relative;
}
/* The whole row is the hit area, without putting headings inside a <button>
   (invalid markup). The toggle stays the only focusable element. */
.nh-catguide-toggle::after {
    content: '';
    position: absolute;
    inset: 0;
}
.nh-catguide:has(.nh-catguide-toggle:hover) .nh-catguide-head {
    cursor: pointer;
}
.nh-catguide:has(.nh-catguide-toggle:hover) {
    background-color: #EFEFEC;
}

/* 0fr -> 1fr expands without a measured pixel height, so the panel stays
   smooth however the four columns happen to wrap. */
.nh-catguide-panel {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 420ms cubic-bezier(.16, 1, .3, 1);
}
.nh-catguide-panel > div {
    overflow: hidden;
    visibility: hidden;
    opacity: 0;
    transition: opacity 300ms ease, visibility 0s linear 420ms;
}
.nh-catguide.is-open .nh-catguide-panel {
    grid-template-rows: 1fr;
}
.nh-catguide.is-open .nh-catguide-panel > div {
    visibility: visible;
    opacity: 1;
    transition: opacity 380ms ease 100ms, visibility 0s;
}

/* The collapsed pills name the same four dimensions the expanded columns head
   up, so they fold away rather than stack a duplicate above the real thing. */
.nh-catguide-dims {
    display: grid;
    grid-template-rows: 1fr;
    transition: grid-template-rows 420ms cubic-bezier(.16, 1, .3, 1), opacity 280ms ease;
}
.nh-catguide-dims > div {
    overflow: hidden;
}
.nh-catguide.is-open .nh-catguide-dims {
    grid-template-rows: 0fr;
    opacity: 0;
}

.nh-catguide-opt {
    display: inline-flex;
    align-items: center;
    padding: 7px 15px;
    border: 1px solid var(--line-hair);
    border-radius: 9999px;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.3;
}

/* Vertical rules between the four questions. They divide nothing once the
   columns stack, so they come off with the grid. */
@media (min-width: 1041px) {
    .nh-catguide-facet + .nh-catguide-facet {
        border-left: 1px solid var(--line-hair);
    }
}

@media (prefers-reduced-motion: reduce) {
    .nh-catguide-panel,
    .nh-catguide-panel > div,
    .nh-catguide-dims {
        transition-duration: 1ms;
    }
}

/* Shoe finder — feature buttons above the category grid.
   Selected state mirrors .btn-brand rather than reusing the class directly,
   since the button also needs the neutral (unselected) look most of the
   time. The hint bar is a light tint of the brand color, not --bg-mist,
   so it reads as "answer" rather than another neutral card. */
/* Below lg the six buttons are a single horizontally-scrolling row (one
   row for all, per design) rather than wrapping to a second line; the
   scrollbar itself is hidden since the pill edges already imply "more". */
.nh-shoefinder-btnrow {
    scrollbar-width: none;
    -ms-overflow-style: none;
}
.nh-shoefinder-btnrow::-webkit-scrollbar {
    display: none;
}
.nh-shoefinder-btn.is-active {
    background-color: var(--color-brand);
    border-color: transparent;
    color: #ffffff;
}
.nh-shoefinder-hint {
    background-color: rgba(27, 81, 89, 0.08);
}
/* Highlights the top pick — applied to the image wrapper (.group), not the
   whole card, so only the photo gets the tinted frame; title/price stay on
   plain ground below it, matching the reference. */
.nh-shoefinder-pick {
    background-color: rgba(27, 81, 89, 0.08);
    border: 1.5px solid var(--color-brand);
    border-radius: 4px;
    padding: 8px;
}


/* ==========================================================================
   Cart drawer — "Ankaret"   (partial: _files/partials/cart.mustache)
   Reference build: cart-concepts/v4

   All commerce sits in one anchored block that never scrolls away; the item
   list is the only scrolling region. Square product tiles on mist, pill
   controls, hairline rules, one teal accent. Flat at every state.
   ========================================================================== */

.nh-cart {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    background: var(--bg-body);
    font-variant-numeric: tabular-nums;
}

/* ---- head ---------------------------------------------------------- */

.nh-cart__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 15px 20px 14px;
    border-bottom: 1px solid var(--line-hair);
}

/* The Label role, not the Display role: the drawer title names the surface,
   it does not need to compete with the total for attention. */
.nh-cart__title {
    margin: 0;
    display: flex;
    align-items: baseline;
    gap: 7px;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.08em;
    line-height: 1.2;
    text-transform: uppercase;
}

.nh-cart__count {
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.04em;
    color: var(--color-ink-soft);
}

.nh-cart__close {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    margin-right: -7px;
    cursor: pointer;
    background: none;
    border: 0;
    color: inherit;
    transition: color var(--transition-duration, 200ms) ease;
}

.nh-cart__close:hover { color: var(--color-ink-soft); }
.nh-cart__close:focus { outline: none; }

.nh-cart :focus-visible {
    outline: 2px solid var(--color-brand);
    outline-offset: 2px;
}

/* ---- scrolling region ---------------------------------------------- */

.nh-cart__scroll {
    flex: 1 1 auto;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
}

/* ---- shared controls ----------------------------------------------- */

.nh-cart__btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    border: 0;
    border-radius: 999px;
    padding: 13px 24px;
    font-size: 15px;
    font-weight: 700;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background-color var(--transition-duration, 200ms) ease,
                border-color var(--transition-duration, 200ms) ease,
                color var(--transition-duration, 200ms) ease;
}

.nh-cart__btn--brand {
    background: var(--color-brand);
    color: #fff;
}
.nh-cart__btn--brand:hover { background: var(--color-brand-hover); }

.nh-cart__btn--ghost {
    width: auto;
    background: var(--bg-body);
    border: 1.5px solid var(--line-hair);
    color: var(--color-ink);
    padding: 9px 16px;
    font-size: 13px;
    white-space: nowrap;
}
.nh-cart__btn--ghost:hover {
    border-color: var(--color-ink);
    background: var(--bg-mist);
}

.nh-cart__btn--text {
    background: none;
    color: var(--color-ink-soft);
    font-size: 13.5px;
    font-weight: 600;
    padding: 12px;
}
.nh-cart__btn--text:hover { color: var(--color-ink); }

.nh-cart__btn--inline { width: auto; }

.nh-price-now { color: var(--color-brand); }

.nh-price-was {
    color: var(--color-ink-soft);
    font-weight: 500;
    text-decoration: line-through;
}

/* ---- empty state ---------------------------------------------------- */

.nh-cart__empty {
    display: grid;
    place-items: center;
    text-align: center;
    gap: 5px;
    padding: 64px 20px 40px;
}

.nh-cart__empty svg {
    width: 40px;
    height: 40px;
    opacity: 0.25;
    margin-bottom: 10px;
}

.nh-cart__empty h3 {
    margin: 0;
    font-size: 15px;
    font-weight: 800;
    letter-spacing: -0.01em;
}

.nh-cart__empty p {
    margin: 0 0 18px;
    max-width: 26ch;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--color-ink-soft);
}

/* ---- item rows ------------------------------------------------------ */

.nh-cart__lines {
    list-style: none;
    margin: 0;
    padding: 0;
}

.nh-line {
    display: grid;
    grid-template-columns: 64px 1fr auto;
    gap: 13px;
    align-items: center;
    padding: 15px 20px;
}

.nh-line + .nh-line { border-top: 1px solid var(--line-hair); }

.nh-line__thumb {
    display: grid;
    place-items: center;
    width: 64px;
    height: 64px;
    padding: 4px;
    background: var(--bg-mist);
    overflow: hidden;
}

.nh-line__thumb img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    /* product photography ships on white; multiply drops it onto mist cleanly */
    mix-blend-mode: multiply;
}

.nh-line__body { min-width: 0; }

.nh-line__name {
    display: block;
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.3;
    color: inherit;
    text-decoration: none;
}
.nh-line__name:hover { color: var(--color-brand); }

.nh-line__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 4px 7px;
    margin: 3px 0 0;
    font-size: 12px;
    color: var(--color-ink-soft);
}

.nh-line__meta b {
    font-size: 13px;
    font-weight: 700;
    color: var(--color-ink);
}

.nh-line__meta .nh-price-now { color: var(--color-brand); }
.nh-line__meta .nh-price-was { font-size: 11.5px; }

.nh-line__prop {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    color: var(--color-ink-soft);
    word-break: break-word;
}

.nh-line__side {
    display: flex;
    align-items: center;
    gap: 4px;
}

.nh-line__del {
    padding: 7px 2px 7px 6px;
    background: none;
    border: 0;
    cursor: pointer;
    color: var(--color-ink-soft);
    transition: color var(--transition-duration, 200ms) ease;
}
.nh-line__del:hover { color: var(--color-ink); }
.nh-line__del svg { width: 16px; height: 16px; }

/* ---- quantity stepper ----------------------------------------------- */

.nh-stepper {
    display: inline-flex;
    align-items: center;
    height: 30px;
    border: 1px solid var(--line-hair);
    border-radius: 999px;
    overflow: hidden;
}

.nh-stepper button {
    display: grid;
    place-items: center;
    width: 27px;
    height: 100%;
    background: none;
    border: 0;
    cursor: pointer;
    color: var(--color-ink-soft);
    transition: color var(--transition-duration, 200ms) ease,
                background-color var(--transition-duration, 200ms) ease;
}
.nh-stepper button:hover {
    color: var(--color-ink);
    background: var(--bg-mist);
}
.nh-stepper button svg { width: 13px; height: 13px; }

.nh-stepper input {
    width: 30px;
    height: 100%;
    padding: 0;
    border: 0;
    background: none;
    text-align: center;
    font-size: 13.5px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: inherit;
}
.nh-stepper input:focus { outline: none; }

/* ---- upsell --------------------------------------------------------- */

.nh-boost {
    background: var(--bg-mist);
    border-top: 1px solid var(--line-hair);
    padding: 20px 20px 22px;
}

.nh-boost__head { margin-bottom: 14px; }

.nh-boost__head h3 {
    margin: 0;
    font-size: 15px;
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.25;
}

.nh-boost__head p {
    margin: 4px 0 0;
    font-size: 12px;
    line-height: 1.4;
    color: var(--color-ink-soft);
}

.nh-offers {
    list-style: none;
    margin: 0;
    padding: 0;
}

.nh-offer {
    display: grid;
    grid-template-columns: 60px 1fr auto;
    gap: 13px;
    align-items: center;
    padding: 13px 0;
}

.nh-offer + .nh-offer { border-top: 1px solid var(--line-hair); }

.nh-offer__thumb {
    display: grid;
    place-items: center;
    width: 60px;
    height: 60px;
    padding: 4px;
    background: var(--bg-body);
    overflow: hidden;
}

.nh-offer__thumb img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    mix-blend-mode: multiply;
}

.nh-offer__body { min-width: 0; }

.nh-offer__name {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.3;
    color: inherit;
    text-decoration: none;
}
.nh-offer__name:hover { color: var(--color-brand); }

.nh-offer__sub {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    margin: 2px 0 0;
    font-size: 11.5px;
    line-height: 1.35;
    color: var(--color-ink-soft);
}

.nh-offer__price {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 6px;
    margin: 5px 0 0;
    font-size: 12.5px;
    font-weight: 700;
}
.nh-offer__price .nh-price-was { font-size: 11px; }

.nh-offer__cta { white-space: nowrap; }

/* The gap tag only renders where the accessory really does reach the limit —
   see closesGap() in the partial. */
.nh-tag {
    --nh-cut: 0.5em;
    display: inline-block;
    margin-bottom: 5px;
    padding: 3px 7px;
    padding-right: calc(7px + var(--nh-cut));
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    background: var(--color-brand);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.06em;
    line-height: 1.2;
    text-transform: uppercase;
}

/* Sizes unfold inline under the row, spanning the text + button columns. */
.nh-offer__sizes {
    display: none;
    grid-column: 2 / -1;
    flex-wrap: wrap;
    gap: 6px;
    padding-top: 10px;
}

.nh-offer.is-open .nh-offer__sizes { display: flex; }
.nh-offer.is-open .nh-offer__cta { display: none; }

/* Size picker. These carry the house cut too, but they are OUTLINED, and a
   clipped box has no border along the diagonal — so the hairline is built as
   two stacked layers instead of a border:

     ::before  the hairline, filling the whole silhouette
     ::after   the surface, the same silhouette inset by 1px

   `isolation: isolate` keeps the negative z-indexes inside the button so both
   layers paint above its (transparent) background and below its label. The
   hover and sold-out states therefore move from `border-color` to the
   ::before fill — same visual result, one layer deeper. */
.nh-offer__sizes button {
    --nh-cut: 0.6em;
    --nh-line: var(--line-hair);
    --nh-fill: var(--bg-body);
    position: relative;
    isolation: isolate;
    padding: 6px 12px;
    padding-right: calc(12px + var(--nh-cut));
    background: transparent;
    border: 0;
    border-radius: 0;
    font-size: 11.5px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    color: inherit;
}
.nh-offer__sizes button::before,
.nh-offer__sizes button::after {
    content: '';
    position: absolute;
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    transition: background-color var(--transition-duration, 200ms) ease;
}
.nh-offer__sizes button::before {
    inset: 0;
    z-index: -2;
    background-color: var(--nh-line);
}
.nh-offer__sizes button::after {
    inset: 1px;
    z-index: -1;
    background-color: var(--nh-fill);
}
.nh-offer__sizes button:hover {
    --nh-line: var(--color-ink);
    --nh-fill: var(--bg-mist);
}
.nh-offer__sizes button.is-out {
    color: #d1d5db;
    cursor: not-allowed;
    text-decoration: line-through;
}
.nh-offer__sizes button.is-out:hover {
    --nh-line: var(--line-hair);
    --nh-fill: var(--bg-body);
}

/* Skeleton, shown while the ?out=json fetches resolve */
.nh-offer--skeleton { pointer-events: none; }

.nh-offer--skeleton .nh-offer__thumb,
.nh-offer--skeleton .nh-offer__ghost,
.nh-offer--skeleton i {
    display: block;
    background: rgba(14, 15, 16, 0.07);
}

.nh-offer--skeleton .nh-offer__ghost {
    width: 84px;
    height: 34px;
    border-radius: 999px;
}

.nh-offer__bars i { height: 9px; }
.nh-offer__bars i:nth-child(1) { width: 70%; }
.nh-offer__bars i:nth-child(2) { width: 45%; margin-top: 7px; }
.nh-offer__bars i:nth-child(3) { width: 28%; margin-top: 7px; }

@media (prefers-reduced-motion: no-preference) {
    .nh-offer--skeleton { animation: nh-cart-pulse 1.4s ease-in-out infinite; }
}

@keyframes nh-cart-pulse {
    50% { opacity: 0.5; }
}

/* ---- anchored checkout block ---------------------------------------- */

.nh-counter {
    flex: none;
    background: var(--bg-body);
    border-top: 1px solid var(--line-hair);
}

.nh-meter { padding: 11px 20px 0; }

.nh-meter__msg {
    margin: 0 0 8px;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--color-ink-soft);
}

.nh-meter__msg b {
    font-weight: 700;
    color: var(--color-ink);
}

.nh-meter__done {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: var(--color-brand);
}
.nh-meter__done svg { width: 16px; height: 16px; }

.nh-meter__track {
    position: relative;
    height: 3px;
    margin: 0 -20px;
    background: var(--line-hair);
    overflow: hidden;
}

/* Scaled, not width-animated: a width transition relayouts on every frame. */
.nh-meter__fill {
    position: absolute;
    inset: 0;
    background: var(--color-brand);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
}

/* The one authored moment in the drawer: crossing the free shipping limit. */
.nh-cart.is-free .nh-meter__done {
    animation: nh-cart-unlock 450ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

@keyframes nh-cart-unlock {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: none; }
}

.nh-counter__body { padding: 12px 20px 14px; }

.nh-counter__row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 2px 0;
    font-size: 12px;
    color: var(--color-ink-soft);
}

.nh-counter__row b {
    font-weight: 600;
    color: var(--color-ink);
}

.nh-counter__row--sale,
.nh-counter__row--sale b { color: var(--color-brand); }

.nh-counter__total {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin: 8px 0 0;
    padding-top: 9px;
    border-top: 1px solid var(--line-hair);
}

.nh-counter__total span:first-child {
    font-size: 15px;
    font-weight: 800;
    letter-spacing: -0.01em;
}

.nh-counter__total span:last-child {
    font-size: 22px;
    line-height: 1.15;
    font-weight: 800;
    letter-spacing: -0.02em;
}

.nh-counter__tax {
    margin: 1px 0 11px;
    text-align: right;
    font-size: 11px;
    color: var(--color-ink-soft);
}

.nh-counter__tax a {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.nh-counter__trust {
    display: flex;
    flex-direction: column;
    gap: 9px;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid var(--line-hair);
}

/* Reassurance, not a claim: small, unbolded, one weight below the sums. */
/* One wrapped row, not a stacked list: three reassurance lines cost three
   line-heights in a block that is already competing with the item list. */
.nh-trust {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 4px 12px;
}

.nh-trust li {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 11px;
    font-weight: 400;
    line-height: 1.35;
    color: var(--color-ink-soft);
}

.nh-trust li > svg {
    flex: none;
    width: 13px;
    height: 13px;
    color: var(--color-ink-soft);
}

/* One star as a leading icon, matching the other two rows — not a five-star
   rating graphic competing with them. */
.nh-trust__star { color: #F2C41B !important; }

/* Shared with the product page — see partials/payment_marks.mustache */
.nh-pay {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
    opacity: 0.55;
}

.nh-pay__mark {
    height: 16px;
    width: auto;
}

.nh-pay--pdp .nh-pay {
    gap: 16px;
    opacity: 0.6;
}

.nh-pay--pdp .nh-pay__mark { height: 20px; filter: grayscale(1); }

/* Mobile: the row has room to breathe under the box, so center it instead of
   letting it hug the left edge like the desktop layout does. */
@media (max-width: 767px) {
    .nh-pay--pdp .nh-pay { justify-content: center; }
}

/* The Quickbutik upsell app injects its own "Andra köpte också" block into the
   drawer. The theme now owns that surface (.nh-boost), so the app's block is
   suppressed here to avoid two competing upsells. Turn the app off in admin to
   drop its payload entirely. */
.nh-cart [class*="qb-upsell"],
.nh-cart [class*="qb-cart-upsell"],
.nh-cart [id*="qb-upsell"],
.nh-cart [data-qb-app="upsell"] {
    display: none !important;
}

/* Shorter phones: give the item list room by tightening the anchored block. */
@media (max-height: 720px) {
    .nh-cart__head { padding: 12px 20px 11px; }
    .nh-counter__body { padding: 10px 20px 12px; }
    .nh-counter__trust { gap: 7px; margin-top: 8px; padding-top: 8px; }
    .nh-trust { gap: 3px 10px; }
    .nh-pay__mark { height: 14px; }
}

@media (prefers-reduced-motion: reduce) {
    .nh-meter__fill { transition-duration: 1ms; }
    .nh-cart.is-free .nh-meter__done { animation-duration: 1ms; }
}

/* ==========================================================================
   Impregnation offer   (partials/product_impregnation.mustache + cart.mustache)

   One add-on, two surfaces. On the product page it is a mist panel under the
   guarantees; in the cart drawer it is a strip pinned above the item list, for
   the visitor who scrolled past it the first time. Same voice, same teal
   button, sized for the width each surface actually has.
   ========================================================================== */

/* ---- product page -----------------------------------------------------
   Markup now shares the accessories list's Tailwind utility classes
   directly (see partials/product_impregnation.mustache) instead of a
   parallel .nh-imp__* system, so the two offers stay identical by
   construction rather than by upkeep. Nothing left to style here. */

/* ---- cart drawer ---------------------------------------------------- */

.nh-imp-cart {
    display: grid;
    grid-template-columns: 52px 1fr;
    gap: 12px;
    align-items: center;
    padding: 16px 20px 18px;
    background: var(--bg-mist);
    border-bottom: 1px solid var(--line-hair);
}

.nh-imp-cart__thumb {
    display: block;
    width: 52px;
    height: 52px;
    background: var(--bg-body);
    border-radius: var(--radius-base);
    overflow: hidden;
}

.nh-imp-cart__thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
}

.nh-imp-cart__body { min-width: 0; }

.nh-imp-cart__title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.25;
}

.nh-imp-cart__sub {
    margin: 3px 0 0;
    font-size: 12.5px;
    line-height: 1.35;
    color: var(--color-ink-soft);
}

.nh-imp-cart__sub b {
    color: var(--color-ink);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

.nh-imp-cart__actions {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}

.nh-imp-cart__actions .nh-cart__btn {
    width: 100%;
    padding: 11px 12px;
    font-size: 13.5px;
}


/* ==========================================================================
   Sticky buy bar   (partial: _files/partials/product_sticky_buy.mustache)

   Slides up only after the real buy box has left the top of the viewport, so
   it never doubles the button that is already on screen. Sits under the cart
   drawer and the modals (z-40 against their z-50) and takes itself away while
   the drawer is open.
   ========================================================================== */

.nh-buybar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 40;
    visibility: hidden;
    background: var(--bg-body);
    border-top: 1px solid var(--line-hair);
    box-shadow: 0 -6px 24px rgba(17, 17, 17, 0.08);
    transform: translateY(101%);
    /* visibility flips only after the slide-out finishes, so the bar is not
       cut mid-animation; on the way in it flips first. */
    transition: transform 260ms cubic-bezier(0.22, 0.61, 0.36, 1),
                visibility 0s linear 260ms;
    padding-bottom: env(safe-area-inset-bottom, 0px);
}

.nh-buybar.is-on {
    visibility: visible;
    transform: translateY(0);
    transition: transform 260ms cubic-bezier(0.22, 0.61, 0.36, 1),
                visibility 0s linear 0s;
}

.nh-buybar__inner {
    display: grid;
    grid-template-columns: 44px minmax(0, 1fr) auto;
    gap: 12px;
    align-items: center;
    padding: 10px 16px;
}

.nh-buybar__thumb {
    width: 44px;
    height: 44px;
    object-fit: cover;
    object-position: center;
    border-radius: var(--radius-base);
    background: var(--bg-mist);
}

.nh-buybar__body {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.nh-buybar__name {
    overflow: hidden;
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.25;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.nh-buybar__meta {
    display: flex;
    align-items: baseline;
    gap: 8px;
    margin-top: 3px;
    font-size: 13px;
    font-variant-numeric: tabular-nums;
    color: var(--color-ink-soft);
}

.nh-buybar__meta b {
    font-weight: 800;
    color: var(--color-ink);
}

.nh-buybar__meta s {
    font-size: 11.5px;
    text-decoration-thickness: 1px;
}

.nh-buybar__variant {
    overflow: hidden;
    font-size: 12px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.nh-buybar__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 148px;
    border: 0;
    border-radius: var(--radius-base);
    padding: 13px 22px;
    font-size: 14px;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
}

.nh-buybar__cta.is-disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.nh-buybar__cta--muted {
    background: var(--bg-mist);
    color: var(--color-ink-soft);
    box-shadow: inset 0 0 0 1.5px var(--line-hair);
}

.nh-buybar :focus-visible {
    outline: 2px solid var(--color-brand);
    outline-offset: 2px;
}

/* Phones: the thumbnail is the first thing to go — the name and the price are
   what identify the product, and the button needs the room. */
@media (max-width: 480px) {
    .nh-buybar__inner {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 10px;
        padding: 9px 14px;
    }
    .nh-buybar__thumb { display: none; }
    .nh-buybar__cta {
        min-width: 0;
        padding: 13px 18px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .nh-buybar { transition-duration: 1ms; }
    .nh-buybar.is-on { transition-duration: 1ms; }
}


/* ============================================================================
   MOBILE MENU DRAWER — "Genvägen" (concept B, Menylådan 20 aug)
   ----------------------------------------------------------------------------
   The drawer navigates *and* sells: categories, then a divider, then the
   secondary links, then the ReStep plate and three products. Everything lives
   here rather than in Tailwind utilities because utilities inside content are
   purged on the real storefront — see the note above the .nh-menu-search block.
   ============================================================================ */

.nh-drawer {
    display: flex;
    flex-direction: column;
    height: 100%;
    background-color: #ffffff;
    color: var(--color-body);
}

/* ---- head: logo, search, close ------------------------------------------ */
.nh-d-head {
    flex: none;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 16px;
}
.nh-d-logo { display: block; width: auto; height: 17px; }
.nh-d-actions {
    display: flex;
    align-items: center;
    gap: 2px;
    /* Pull the 40px hit targets back to the 16px gutter so the icons line up
       with the rows below instead of sitting inset by their own padding. */
    margin: -8px -8px -8px 0;
}
.nh-d-x {
    width: 40px;
    height: 40px;
    display: grid;
    place-items: center;
    color: var(--color-ink);
    border-radius: var(--radius-base);
    transition: background-color .18s ease;
}
.nh-d-x:hover { background-color: var(--bg-mist); }
.nh-d-x svg { width: 20px; height: 20px; }

.nh-d-scroll {
    flex: 1 1 auto;
    /* Without min-height:0 a flex item refuses to shrink below its content, so
       the scroller grows past the drawer and pushes the foot off the screen. */
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding-top: 8px;
}
.nh-d-foot {
    flex: none;
    border-top: 1px solid var(--line-hair);
}

/* ---- category rows ------------------------------------------------------- */
.nh-cats { margin: 0; padding: 0; list-style: none; }
.nh-cat { position: relative; }
.nh-cat + .nh-cat { border-top: 1px solid var(--line-hair); }
.nh-cat-btn {
    width: 100%;
    display: flex;
    align-items: center;
    gap: 12px;
    /* 64px keeps every row a comfortable thumb target even when the subtitle
       wraps to one line only. */
    min-height: 64px;
    padding: 15px 16px;
    text-align: left;
    text-decoration: none;
}
.nh-cat-txt { min-width: 0; }
.nh-cat-txt .mega-title {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 24px;
    letter-spacing: -.01em;
    color: var(--color-ink);
    transition: color .2s ease;
}
.nh-cat-txt .mega-sub {
    display: block;
    margin-top: 2px;
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink-soft);
}
.nh-cat-chev {
    width: 18px;
    height: 18px;
    flex: none;
    margin-left: auto;
    color: var(--color-ink-soft);
    transition: transform .26s ease, color .2s ease;
}
/* A childless row links straight out, so its icon is an arrow, not a chevron. */
.nh-cat-chev.is-link { width: 16px; height: 16px; }
.nh-cat-btn:hover .mega-title { color: var(--color-brand); }
.nh-cat.is-open { background-color: var(--bg-mist); }
.nh-cat.is-open > .nh-cat-btn .mega-title { color: var(--color-brand); }
.nh-cat.is-open > .nh-cat-btn .nh-cat-chev { transform: rotate(90deg); color: var(--color-brand); }

/* Height-animated disclosure without measuring: a 0fr→1fr grid track. */
.nh-sub {
    display: grid;
    grid-template-rows: 0fr;
    overflow: hidden;
    transition: grid-template-rows .28s cubic-bezier(.22, .61, .36, 1);
}
.nh-cat.is-open > .nh-sub { grid-template-rows: 1fr; }
/* The grid item itself must carry no padding: a 0fr track zeroes the content
   box but leaves padding behind, which shows as a sliver on a closed row. */
.nh-sub > .nh-sub-inner { min-height: 0; padding: 0; overflow: hidden; }
.nh-sub-pad { padding: 2px 16px 16px; }
.nh-sub a {
    display: block;
    padding: 10px 12px;
    font-size: 16px;
    line-height: 22px;
    color: var(--color-body);
    text-decoration: none;
    border-radius: var(--radius-base);
}
.nh-sub a:hover,
.nh-sub a.is-current { background-color: rgba(17, 17, 17, .05); color: var(--color-brand); }
.nh-sub a .mega-title {
    font-weight: 400;
    font-size: 16px;
    line-height: 22px;
    letter-spacing: 0;
    color: var(--color-body);
}
.nh-sub a:hover .mega-title,
.nh-sub a.is-current .mega-title { color: var(--color-brand); }
.nh-sub a .mega-sub,
.nh-sub a .nh-sub-s {
    display: block;
    margin-top: 1px;
    font-size: 12px;
    line-height: 16px;
    color: var(--color-ink-soft);
}
.nh-sub .nh-sub-all {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-brand);
}
/* Third level and deeper: indent rather than nest another disclosure — the
   drawer is 390px wide and a third chevron column would crush the labels. */
.nh-sub .nh-sub-deep { padding-left: 24px; }

.nh-d-div {
    height: 1px;
    margin: 20px 16px 4px;
    background-color: var(--line-hair);
}

/* ---- secondary links ----------------------------------------------------- */
.nh-links { padding: 8px 0; }
.nh-links a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-height: 48px;
    padding: 13px 16px;
    font-size: 16px;
    color: var(--color-body);
    text-decoration: none;
}
.nh-links a:hover { color: var(--color-brand); }
.nh-links .mega-sub { display: none; }

/* ---- service plates ------------------------------------------------------ */
/* ReStep and the B2B invitation share one plate so they read as a pair, and
   differ only in colour: ReStep keeps its green because the service has its own
   identity in the profile, B2B takes Deep Brand — the token DESIGN.md reserves
   for large B2B surfaces. Neither uses the merchandising mist below. */
.nh-plate {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 20px 16px 0;
    padding: 16px;
    color: #ffffff;
    border-radius: var(--radius-base);
    text-decoration: none;
    transition: background-color .18s ease;
}
/* Stacked plates are a pair, not two sections: the 20px above the first one is
   the break from the link list, and 8px between them matches the product cards
   below so the whole tail of the drawer runs on one rhythm. */
.nh-plate + .nh-plate { margin-top: 8px; }
.nh-plate > span { flex: 1 1 auto; min-width: 0; }
.nh-plate-note {
    display: block;
    margin-bottom: 3px;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .62);
}
.nh-plate-t {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
}
.nh-plate-s {
    display: block;
    margin-top: 2px;
    font-size: 14px;
    line-height: 20px;
    color: rgba(255, 255, 255, .82);
}
.nh-plate svg { width: 18px; height: 18px; flex: none; margin-left: auto; }

.nh-plate--b2b { background-color: var(--color-brand-deep); }
.nh-plate--b2b:hover { background-color: #0A2E3C; }
.nh-plate--restep { background-color: var(--restep-green); }
.nh-plate--restep:hover { background-color: var(--restep-green-deep); }

/* ---- product picks ------------------------------------------------------- */
/* Hidden until the fetch fills it in, so a failed request leaves no skeleton. */
.nh-picks { padding: 16px 0 4px; }
.nh-picks[hidden] { display: none; }
.nh-picks-title {
    display: block;
    padding: 0 16px 12px;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--color-ink-soft);
}
.nh-pcard {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 0 16px 8px;
    padding: 12px;
    background-color: var(--bg-mist);
    border-radius: var(--radius-base);
    text-decoration: none;
}
.nh-pcard[hidden] { display: none; }
.nh-pcard-img {
    position: relative;
    flex: none;
    width: 76px;
    height: 76px;
    overflow: hidden;
    background-color: #ffffff;
    border-radius: var(--radius-base);
}
/* cover fills the tile the way the mock does; entropy picks the busiest region
   so the crop lands on the shoe rather than on the white around it. */
.nh-pcard-img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.nh-pc-new {
    --nh-cut: 0.5em;
    position: absolute;
    top: 5px;
    left: 5px;
    z-index: 1;
    padding: 1px 5px;
    padding-right: calc(5px + var(--nh-cut));
    clip-path: polygon(0 0, calc(100% - var(--nh-cut)) 0, 100% 100%, 0 100%);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    background-color: var(--color-ink);
    color: #ffffff;
    /* no radius — the diagonal is this tag's corner treatment */
    border-radius: 0;
}
.nh-pc-new[hidden] { display: none; }
.nh-pcard-txt { flex: 1 1 auto; min-width: 0; }
.nh-pc-cls {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    letter-spacing: .08em;
    color: var(--color-brand);
}
.nh-pc-cls:empty { display: none; }
.nh-pc-row {
    display: flex;
    align-items: baseline;
    gap: 10px;
    margin-top: 1px;
}
.nh-pc-name {
    min-width: 0;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
}
.nh-pc-price {
    margin-left: auto;
    flex: none;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}
.nh-pc-desc {
    display: block;
    margin-top: 1px;
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink-soft);
}
.nh-pc-desc:empty { display: none; }

/* ---- foot: contact + login ---------------------------------------------- */
.nh-contact {
    display: grid;
    gap: 10px;
    padding: 16px;
}
.nh-contact a {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 16px;
    color: var(--color-body);
    text-decoration: none;
}
.nh-contact a:hover { color: var(--color-brand); }
.nh-contact svg { width: 16px; height: 16px; flex: none; color: var(--color-brand); }
.nh-contact b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}
.nh-hours { font-size: 12px; color: var(--color-ink-soft); }

.nh-d-login {
    display: block;
    height: 48px;
    line-height: 48px;
    padding: 0 16px;
    text-align: center;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    text-decoration: none;
    border-radius: var(--radius-base);
    background-color: var(--color-brand);
    color: #ffffff;
    transition: background-color .18s ease;
}
.nh-d-login:hover { background-color: var(--color-brand-hover); }

@media (prefers-reduced-motion: reduce) {
    .nh-sub { transition: none; }
    .nh-cat-chev { transition: none; }
}

/* VAT switch in the drawer foot: a quiet segmented control, sized so the foot
   still ends on the login button rather than on a utility toggle. */
.nh-d-tax {
    display: flex;
    gap: 4px;
    margin: 14px 16px 0;
    padding: 3px;
    background-color: var(--bg-mist);
    border-radius: var(--radius-base);
}
.nh-d-tax a {
    flex: 1 1 0;
    padding: 7px 8px;
    text-align: center;
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink-soft);
    text-decoration: none;
    border-radius: 2px;
    transition: background-color .18s ease, color .18s ease;
}
.nh-d-tax a.is-on {
    background-color: #ffffff;
    color: var(--color-ink);
    font-weight: 600;
    box-shadow: 0 1px 2px rgba(17, 17, 17, .10);
}

/* ==========================================================================
   STARTSIDA — "Ritning"

   Sektionerna på startsidan (se _files/partials/start_nh_*.mustache och
   js/nhHome.js). Svart grundton, stor skala, och sidans egen grafik: tekniska
   skisser i SVG i stället för lånade bilder.

   Följer profilen 2026 bokstavligt: två typsnitt med delad arbetsuppgift
   (Montserrat kommunicerar, Inter förklarar), en radie på 4px, 8px-stegen,
   #1B5159 agerar och #0E3B4D håller. Kontroller är platta — ingen skugga,
   inget lyft, ingen skalning.

   Allt är rotat i .nhs. Tailwind länkas efter det här arket, så en naken
   enkelklass förlorar mot vilken utility som helst; två klasser vinner.
   ========================================================================== */

.nhs {
    /* stegen — 8px-ladder ur profilen */
    --nhs-1: 4px;
    --nhs-2: 8px;
    --nhs-3: 16px;
    --nhs-4: 24px;
    --nhs-5: 32px;
    --nhs-6: 48px;
    --nhs-7: 64px;
    --nhs-8: 80px;
    --nhs-9: 96px;
    --nhs-10: 120px;

    --nhs-star: #F2C41B;
    --nhs-ease: cubic-bezier(0.16, 1, 0.3, 1);

    /* Primary Brand ljusad för mörka ytor — 8.6:1 mot svart */
    --nhs-brand-light: #7FB8C0;

    display: block;
    position: relative;
    color: var(--color-body);
}

.nhs *,
.nhs *::before,
.nhs *::after {
    box-sizing: border-box;
}

.nhs img,
.nhs video,
.nhs svg {
    display: block;
    max-width: 100%;
}

.nhs a {
    color: inherit;
    text-decoration: none;
}

.nhs ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

.nhs p {
    margin: 0;
    max-width: 68ch;
}

.nhs h1,
.nhs h2,
.nhs h3 {
    margin: 0;
    color: var(--color-ink);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    letter-spacing: -0.01em;
}

.nhs :focus-visible {
    outline: 2px solid var(--color-brand);
    outline-offset: 3px;
}

.nhs .nhs-sr {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.nhs .nhs-sprite {
    position: absolute;
    width: 0;
    height: 0;
    overflow: hidden;
}

/* --------------------------------------------------------------------------
   Ytor. Mörkt eller ljust väljs per sektion i temat, inte av kategorivana:
   heron och om-oss bär filmen bäst på svart, försäljningen läser bäst på vitt.
   -------------------------------------------------------------------------- */

.nhs--paper { background: #ffffff; }
.nhs--mist  { background: var(--bg-mist); }
/* Varm off-white i stället för ännu en svart yta. Tonen kommer från
   profilens Warm Accent, nedtonad till en yta. */
.nhs--tint  { background: #FAF7F5; }
.nhs--ink   { background: #000000; }
.nhs--deep  { background: var(--color-brand-deep); }

.nhs--ink,
.nhs--deep {
    color: rgba(255, 255, 255, 0.76);
}

.nhs--ink h1, .nhs--ink h2, .nhs--ink h3,
.nhs--deep h1, .nhs--deep h2, .nhs--deep h3 {
    color: #ffffff;
}

/* Poster-kortens text är alltid vit oavsett sektionens egen bakgrund — ett
   kort kan sitta i en vit sektion (ReStep + Företag) lika gärna som en
   djupblå (Om oss), och ligger alltid mot ett tonat foto/video, inte mot
   sektionsytan. */
.nhs-poster__content {
    color: rgba(255, 255, 255, 0.76);
}

.nhs-poster__content h2, .nhs-poster__content h3 {
    color: #ffffff;
}

/* --------------------------------------------------------------------------
   Mått och sektionsrytm
   -------------------------------------------------------------------------- */

.nhs .nhs-wrap {
    width: 100%;
    max-width: 1280px;
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--nhs-3);
    padding-right: var(--nhs-3);
}

.nhs.nhs-sec { --nhs-pt: var(--nhs-6); --nhs-pb: var(--nhs-6); padding-top: var(--nhs-pt); padding-bottom: var(--nhs-pb); }
.nhs.nhs-sec--tight { --nhs-pt: var(--nhs-5); --nhs-pb: var(--nhs-5); }
.nhs.nhs-sec--lg { --nhs-pt: var(--nhs-7); --nhs-pb: var(--nhs-7); }

@media (min-width: 768px) {
    .nhs .nhs-wrap { padding-left: var(--nhs-4); padding-right: var(--nhs-4); }
    .nhs.nhs-sec { --nhs-pt: var(--nhs-8); --nhs-pb: var(--nhs-8); }
    .nhs.nhs-sec--tight { --nhs-pt: var(--nhs-7); --nhs-pb: var(--nhs-7); }
    .nhs.nhs-sec--lg { --nhs-pt: var(--nhs-10); --nhs-pb: var(--nhs-10); }
}

@media (min-width: 1024px) {
    .nhs .nhs-wrap { padding-left: var(--nhs-5); padding-right: var(--nhs-5); }
}

/* Two sections in a row with the same surface color never get a hard edge to
   cue "new section" — the color carries that job everywhere else. Without it,
   the full top+bottom rhythm reads as dead air, so collapse this section's own
   top padding into a negative margin: the gap becomes just the previous
   section's bottom padding, i.e. half the usual rhythm. --nhs-pt is set per
   section (sec/tight/lg, per breakpoint) so this stays correct for any pairing. */
.nhs--paper + .nhs--paper,
.nhs--mist + .nhs--mist,
.nhs--tint + .nhs--tint,
.nhs--deep + .nhs--deep,
.nhs--ink + .nhs--ink {
    margin-top: calc(-1 * var(--nhs-pt));
}

/* The trust/logos band (.nhs-trustzone) is hardcoded white and sits outside
   the --paper/--mist/etc background system, so it needs its own pairing with
   the sections it can butt up against at the same color. Its own trailing
   whitespace is just .nhs-logos's padding-bottom (--nhs-3) — there is no
   extra buffer above it, the logos row sits flush against that padding. A
   negative margin (as the same-background rule above uses) pulls the next
   section's box past that padding and over the logos row itself, hiding it.
   Shrink the next section's own top padding instead — that only eats its own
   empty space and can never cover the trustzone's content. */
.nhs-trustzone + .nhs--paper {
    padding-top: calc((var(--nhs-pt) - var(--nhs-3)) / 2);
}

/* --------------------------------------------------------------------------
   Typografi
   -------------------------------------------------------------------------- */

.nhs .nhs-display-xl {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 30px;
    line-height: 36px;
    letter-spacing: -0.03em;
    color: #ffffff;
    max-width: 15ch;
    text-wrap: balance;
}

@media (min-width: 700px) {
    .nhs .nhs-display-xl { font-size: 52px; line-height: 54px; }
}

@media (min-width: 1200px) {
    .nhs .nhs-display-xl { font-size: 60px; line-height: 60px; }
}

.nhs .nhs-display-lg {
    font-size: 22px;
    line-height: 26px;
    letter-spacing: -0.025em;
    text-wrap: balance;
}

@media (min-width: 700px) {
    .nhs .nhs-display-lg { font-size: 40px; line-height: 44px; }
}

.nhs .nhs-eyebrow {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-brand);
    margin-bottom: var(--nhs-2);
}

.nhs--ink .nhs-eyebrow,
.nhs--deep .nhs-eyebrow { color: var(--nhs-brand-light); }
.nhs-poster__content .nhs-eyebrow { color: #ffffff; }

.nhs .nhs-note {
    margin-top: var(--nhs-3);
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
    max-width: 44ch;
}

.nhs--ink .nhs-note,
.nhs--deep .nhs-note { color: rgba(255, 255, 255, 0.6); }

.nhs .nhs-note--center { text-align: center; max-width: none; }

/* Stjärnorna är dekor — betyget står som siffra intill, så skärmläsare
   får talet och inte en rad tecken. */
.nhs .nhs-stars {
    color: var(--nhs-star);
    font-size: 13px;
    letter-spacing: 1px;
    white-space: nowrap;
}

.nhs .nhs-stars::before { content: "\2605\2605\2605\2605\2605"; }
.nhs .nhs-stars[data-n="4"]::before { content: "\2605\2605\2605\2605\2606"; }
.nhs .nhs-stars[data-n="3"]::before { content: "\2605\2605\2605\2606\2606"; }

/* --------------------------------------------------------------------------
   Sektionshuvud
   -------------------------------------------------------------------------- */

.nhs .nhs-sechead {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--nhs-3);
    margin-bottom: var(--nhs-5);
}

@media (min-width: 700px) {
    .nhs .nhs-sechead {
        flex-direction: row;
        align-items: flex-end;
        justify-content: space-between;
        gap: var(--nhs-4);
    }
}

.nhs .nhs-sechead--stack {
    display: block;
    max-width: 42em;
}

.nhs .nhs-sechead__sub {
    margin-top: var(--nhs-3);
    color: var(--color-ink-soft);
}

.nhs--ink .nhs-sechead__sub,
.nhs--deep .nhs-sechead__sub { color: rgba(255, 255, 255, 0.66); }

.nhs .nhs-seclink {
    flex: none;
    font-size: 14px;
    line-height: 20px;
    font-weight: 500;
    color: var(--color-brand);
    border-bottom: 1px solid currentColor;
    padding-bottom: 2px;
    transition: color 0.15s ease;
}

.nhs .nhs-seclink:hover { color: var(--color-brand-hover); }

.nhs .nhs-seclink--foot { display: none; margin-top: var(--nhs-4); }

@media (max-width: 899px) {
    .nhs .nhs-seclink--head { display: none; }
    .nhs .nhs-seclink--foot { display: inline-flex; }
}

.nhs--ink .nhs-seclink,
.nhs--deep .nhs-seclink { color: #ffffff; }
.nhs--ink .nhs-seclink:hover,
.nhs--deep .nhs-seclink:hover { color: rgba(255, 255, 255, 0.7); }

/* --------------------------------------------------------------------------
   Knappar — platta. Ingen skugga, inget lyft, ingen skalning. Någonsin.
   -------------------------------------------------------------------------- */

.nhs .nhs-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--nhs-2);
    min-height: 48px;
    padding: var(--nhs-2) var(--nhs-4);
    border: 1px solid transparent;
    border-radius: var(--radius-base);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    text-align: center;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.nhs .nhs-btn__arr { width: 18px; height: 18px; flex: none; }

.nhs .nhs-btn--brand { background: var(--color-brand); color: #ffffff; }
.nhs .nhs-btn--brand:hover { background: var(--color-brand-hover); }

.nhs .nhs-btn--light { background: #ffffff; color: var(--color-ink); }
.nhs .nhs-btn--light:hover { background: var(--bg-mist); }

.nhs .nhs-btn--ghost {
    border-color: var(--line-hair);
    color: var(--color-ink);
}

.nhs .nhs-btn--ghost:hover { border-color: var(--color-ink); background: var(--bg-mist); }

.nhs--ink .nhs-btn--ghost,
.nhs--deep .nhs-btn--ghost {
    border-color: rgba(255, 255, 255, 0.4);
    color: #ffffff;
}

.nhs--ink .nhs-btn--ghost:hover,
.nhs--deep .nhs-btn--ghost:hover {
    border-color: #ffffff;
    background: rgba(255, 255, 255, 0.08);
}

.nhs .nhs-btn--wide { width: 100%; justify-content: space-between; }

.nhs .nhs-btnrow {
    display: flex;
    flex-wrap: wrap;
    gap: var(--nhs-2);
    margin-top: var(--nhs-5);
}

.nhs .nhs-btnrow--lg { margin-top: var(--nhs-6); }

/* --------------------------------------------------------------------------
   Hero — en film, ett budskap, en knapp
   -------------------------------------------------------------------------- */

.nhs.nhs-hero {
    background: #000000;
    min-height: clamp(440px, 62vh, 600px);
    display: flex;
    align-items: flex-end;
    overflow: hidden;
}

.nhs.nhs-hero--short { min-height: clamp(380px, 50vh, 480px); }
.nhs.nhs-hero--tall { min-height: clamp(500px, 76vh, 720px); }

/* Bredd och höjd måste sättas explicit: temat sätter img { height: auto },
   och ett absolutpositionerat ersatt element med auto-höjd faller tillbaka på
   mediats egen höjd i stället för att fylla sektionen. */
.nhs .nhs-hero__media {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 42%;
}

.nhs-hero--focus-top .nhs-hero__media { object-position: 50% 18%; }
.nhs-hero--focus-bottom .nhs-hero__media { object-position: 50% 78%; }

/* Egen mobilbild: huvudmedia göms under 700px, mobilbilden göms därifrån
   och uppåt — aldrig båda samtidigt. */
@media (max-width: 699px) {
    .nhs .nhs-hero__media--desktop-only { display: none; }
}
@media (min-width: 700px) {
    .nhs .nhs-hero__media--mobile-only { display: none; }
}

.nhs .nhs-hero__scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, rgba(0, 0, 0, 0.75) 0%, rgba(0, 0, 0, 0.45) 40%, rgba(0, 0, 0, 0) 75%);
}

@media (min-width: 900px) {
    .nhs.nhs-hero { min-height: clamp(520px, 68vh, 660px); }
    .nhs.nhs-hero--short { min-height: clamp(420px, 54vh, 520px); }
    .nhs.nhs-hero--tall { min-height: clamp(600px, 84vh, 800px); }
}

/* Mobilen: heron ska inte äta hela första skärmen. Höjden kommer från
   innehållet (golvet finns kvar så höjdvalet betyder något), luften krymper ett
   steg, och rubriken får hela spalten i stället för 15ch — då landar den på tre
   rader i stället för fyra. Vinsten är att trustraden syns utan att skrolla. */
@media (max-width: 699px) {
    /* Extra höjd så skon får stå fri ovanför texten i stället för att klämmas
       bakom den — bilden tonar ner i en heltäckande botten där texten ligger,
       i stället för att beskäras bort helt. */
    .nhs.nhs-hero { min-height: 560px; }
    .nhs.nhs-hero--short { min-height: 480px; }
    .nhs.nhs-hero--tall { min-height: 640px; }

    .nhs .nhs-hero__inner {
        padding-top: var(--nhs-5);
        padding-bottom: var(--nhs-4);
    }

    .nhs .nhs-display-xl { max-width: none; }
    .nhs .nhs-hero__sub { margin-top: var(--nhs-3); }
    .nhs .nhs-hero__act { margin-top: var(--nhs-4); }

    /* Knappen går över hela spalten med centrerad text — då ska betygsraden
       under den ligga på samma mittlinje, inte vänsterställd mot kanten.
       Raden är själv ett flexbarn och krymper till sitt innehåll, så den
       behöver hela bredden innan justify-content har något att centrera. */
    .nhs .nhs-hero__rate {
        width: 100%;
        justify-content: center;
    }

    /* Smalare ruta att beskära mot — skjut fokus längst ner i högra hörnet
       av källbilden, så skon hamnar högt i rutan med golvet som luft under. */
    .nhs-hero--focus-bottom .nhs-hero__media { object-position: 100% 100%; }

    /* object-position ensam räcker inte utan att ändra herons höjd — den
       väljer VILKEN del av bilden som visas, men fönstrets storlek är låst
       av cover. Zooma i stället in mot golvet: benet ovanför skon beskärs
       bort och skon hamnar högre i den oförändrade rutan. Värden justerade
       via hero-crop-verktyget (artifact) tillsammans med användaren. */
    .nhs .nhs-hero__media--mobile-only {
        transform-origin: 100% 100%;
        transform: scale(1.18);
    }

    /* Vertikal toning i stället för sidledes: texten tar hela bredden på
       mobilen, så det är botten — inte vänsterkanten — som ska mörkna. */
    .nhs .nhs-hero__scrim {
        background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.15) 45%, rgba(0, 0, 0, 0.75) 68%, rgba(0, 0, 0, 0.95) 100%);
    }
}

.nhs .nhs-hero__inner {
    position: relative;
    z-index: 2;
    padding-top: var(--nhs-8);
    padding-bottom: var(--nhs-6);
}

.nhs .nhs-hero__sub {
    margin-top: var(--nhs-4);
    max-width: 40ch;
    font-size: 14px;
    line-height: 22px;
    color: rgba(255, 255, 255, 0.82);
}

@media (min-width: 700px) {
    .nhs .nhs-hero__sub { font-size: 16px; line-height: 26px; }
}

.nhs .nhs-hero__act {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--nhs-3) var(--nhs-5);
    margin-top: var(--nhs-5);
}

.nhs .nhs-hero__act .nhs-btn { width: 100%; }

@media (min-width: 560px) {
    .nhs .nhs-hero__act .nhs-btn { width: auto; }
}

.nhs .nhs-hero__rate {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0 var(--nhs-2);
    font-size: 14px;
    line-height: 20px;
    color: rgba(255, 255, 255, 0.82);
}

.nhs .nhs-hero__rate b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    color: #ffffff;
    font-variant-numeric: tabular-nums;
}

.nhs .nhs-hero__rate-more { white-space: nowrap; }

/* Sidans enda regisserade rörelse: heron reser sig en gång, och bara den. */
@media (prefers-reduced-motion: no-preference) {
    .nhs .nhs-hero__inner > * {
        opacity: 0;
        animation: nhs-rise 0.9s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }
    .nhs .nhs-hero__inner > *:nth-child(1) { animation-delay: 0.10s; }
    .nhs .nhs-hero__inner > *:nth-child(2) { animation-delay: 0.20s; }
    .nhs .nhs-hero__inner > *:nth-child(3) { animation-delay: 0.30s; }
}

@keyframes nhs-rise {
    from { opacity: 0; transform: translate3d(0, 20px, 0); }
    to { opacity: 1; transform: none; }
}

/* --------------------------------------------------------------------------
   Trygghetsrad och logotypslinga

   Ett block med en hårlinje emellan — samma innehåll som två konkurrerande
   band, hälften så stökigt. Raden ska bekräfta, inte ta plats: inga
   underrubriker, ingen fetstil.
   -------------------------------------------------------------------------- */

.nhs.nhs-trustzone {
    background: #ffffff;
}

.nhs .nhs-trust { border-bottom: 1px solid var(--line-hair); }

.nhs .nhs-trust__row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--nhs-2) var(--nhs-3);
    padding-top: var(--nhs-3);
    padding-bottom: var(--nhs-3);
}

@media (min-width: 760px) {
    .nhs .nhs-trust__row {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: var(--nhs-4);
        min-height: 48px;
        align-items: center;
        padding-top: var(--nhs-2);
        padding-bottom: var(--nhs-2);
    }
}

.nhs .nhs-trust__item {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
    max-width: none;
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

@media (min-width: 760px) {
    .nhs .nhs-trust__item { font-size: 13px; justify-content: center; }
}

.nhs .nhs-trust__item svg {
    flex: none;
    width: 14px;
    height: 14px;
    color: var(--color-brand);
}

.nhs .nhs-trust__item span {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.nhs .nhs-logos { padding: var(--nhs-3) 0; overflow: hidden; }

.nhs .nhs-logos__row { display: grid; gap: var(--nhs-2); }

@media (min-width: 820px) {
    .nhs .nhs-logos__row {
        grid-template-columns: auto minmax(0, 1fr);
        align-items: center;
        gap: var(--nhs-5);
    }
}

.nhs .nhs-logos__label {
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
    max-width: none;
}

@media (min-width: 820px) {
    .nhs .nhs-logos__label { white-space: nowrap; }
}

.nhs .nhs-logos__label b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}

/* Prestanda: en enda transform-animation på ett spår (komponeras på GPU, ingen
   omritning per bildruta) och inga bilder alls — namnen är text. */
.nhs .nhs-marquee {
    position: relative;
    min-width: 0;
    overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
}

.nhs .nhs-marquee__track {
    display: flex;
    align-items: center;
    gap: var(--nhs-6);
    width: max-content;
    animation: nhs-marq 42s linear infinite;
    will-change: transform;
}

/* Startsidans slinga har 18 namn mot produktsidans 8 — längre varv så
   tempot inte blir stressigt. Produktsidan behåller 42s. */
.nhs .nh-marquee .nhs-marquee__track { animation-duration: 60s; }

.nhs .nhs-marquee:hover .nhs-marquee__track,
.nhs .nhs-marquee[data-paused="true"] .nhs-marquee__track {
    animation-play-state: paused;
}

.nhs .nhs-marquee li {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 20px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-ink-soft);
    white-space: nowrap;
}

@keyframes nhs-marq {
    from { transform: translate3d(0, 0, 0); }
    to { transform: translate3d(-50%, 0, 0); }
}

@media (prefers-reduced-motion: reduce) {
    .nhs .nhs-marquee {
        -webkit-mask-image: none;
        mask-image: none;
    }
    .nhs .nhs-marquee__track {
        animation: none;
        width: 100%;
        flex-wrap: wrap;
        gap: var(--nhs-2) var(--nhs-4);
    }
    .nhs .nhs-marquee__track li[aria-hidden="true"] { display: none; }
}

/* --------------------------------------------------------------------------
   Produktkort och rutnät — betyg över namnet, aldrig sidoskroll
   -------------------------------------------------------------------------- */

/* Under 900px produkterna svischas fram i en rad i stället för ett rutnät —
   nästa kort skymtar i kanten som en signal om att det går att svepa. */
.nhs .nhs-grid4 {
    display: flex;
    gap: var(--nhs-3);
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    margin-right: calc(var(--nhs-3) * -1);
    padding-right: var(--nhs-3);
}

.nhs .nhs-grid4::-webkit-scrollbar { display: none; }

.nhs .nhs-grid4 > * {
    flex: none;
    width: 74%;
    scroll-snap-align: start;
}

@media (min-width: 768px) {
    .nhs .nhs-grid4 {
        margin-right: calc(var(--nhs-4) * -1);
        padding-right: var(--nhs-4);
    }
    .nhs .nhs-grid4 > * { width: 42%; }
}

@media (min-width: 900px) {
    .nhs .nhs-grid4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: var(--nhs-6) var(--nhs-4);
        overflow-x: visible;
        scroll-snap-type: none;
        margin-right: 0;
        padding-right: 0;
    }
    .nhs .nhs-grid4 > * { width: auto; }
    .nhs .nhs-grid4:has(> :last-child:nth-child(3)) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .nhs .nhs-grid4:has(> :last-child:nth-child(2)) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.nhs .nhs-grid4[data-count="4"] > :nth-child(n+5),
.nhs .nhs-grid4[data-count="8"] > :nth-child(n+9) { display: none; }

.nhs .nhs-prod { display: flex; flex-direction: column; position: relative; }

.nhs .nhs-prod__media {
    position: relative;
    display: block;
    aspect-ratio: 4 / 5;
    background: var(--bg-mist);
    border-radius: var(--radius-base);
    overflow: hidden;
    margin-bottom: var(--nhs-3);
}

.nhs .nhs-prod__img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: opacity 0.3s var(--nhs-ease);
}

.nhs .nhs-prod__img--hover {
    position: absolute;
    inset: 0;
    opacity: 0;
}

.nhs .nhs-prod:hover .nhs-prod__img--hover,
.nhs .nhs-prod:focus-visible .nhs-prod__img--hover { opacity: 1; }

.nhs .nhs-prod__flag {
    position: absolute;
    top: var(--nhs-2);
    left: var(--nhs-2);
    z-index: 2;
    padding: var(--nhs-1) var(--nhs-2);
    border-radius: var(--radius-base);
    background: var(--color-ink);
    color: #ffffff;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 16px;
}

/* Betyget kommer från recensionsappen och kan vara tomt — då ska kortet inte
   få ett hål där raden skulle stått. */
.nhs .nhs-prod__rate {
    display: block;
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs .nhs-prod__rate:not(:empty) { margin-bottom: var(--nhs-1); }

.nhs .nhs-prod__name {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 500;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
}

.nhs--ink .nhs-prod__name,
.nhs--deep .nhs-prod__name { color: #ffffff; }

/* Den korta beskrivningen är skriven per produkt och kan vara längre än en
   rad. Kortet får inte växa av det — en rad, sedan ellips. */
.nhs .nhs-prod__meta {
    display: block;
    margin-top: var(--nhs-1);
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink-soft);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.nhs .nhs-prod__price {
    display: flex;
    align-items: baseline;
    gap: var(--nhs-2);
    margin-top: auto;
    padding-top: var(--nhs-2);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 600;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}

.nhs--ink .nhs-prod__price,
.nhs--deep .nhs-prod__price { color: #ffffff; }

.nhs .nhs-prod__now--sale { color: var(--color-discounted-price); }

.nhs .nhs-prod__was {
    font-family: 'Inter',sans-serif;
    font-weight: 400;
    font-size: 14px;
    color: var(--color-ink-soft);
    text-decoration: line-through;
}

/* --------------------------------------------------------------------------
   Kategorirutor — små fotorutor + två avdelningsblock, låst element
   Valt 2026-10-07 (shop-concepts/ D · "Fönster, låg"): rutorna är små och
   lugna med etiketten under bilden, så att skorutnätet ovanför får behålla
   tyngden. Herr och Dam ligger under som två halvhöga, liggande block.
   -------------------------------------------------------------------------- */

.nhs .nhs-cats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--nhs-3) 12px;
}

/* Antalet rutor är ett val i temat, 2–6 stycken. Rutnätet räknar dem själv i
   stället för att kräva en inställning för kolumner — och en avstängd ruta ska
   inte lämna ett hål till höger. Sex tracks är minsta gemensamma nämnare för
   2, 3, 4 och 6 rutor; fem läggs som 3 + 2 centrerat. */
@media (min-width: 700px) {
    .nhs .nhs-cats {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: var(--nhs-3);
    }
    .nhs .nhs-cats:has(> :last-child:nth-child(2)) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .nhs .nhs-cats:has(> :last-child:nth-child(3)) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .nhs .nhs-cats:has(> :last-child:nth-child(6)) { grid-template-columns: repeat(3, minmax(0, 1fr)); }

    .nhs .nhs-cats:has(> :last-child:nth-child(5)) { grid-template-columns: repeat(6, minmax(0, 1fr)); }
    .nhs .nhs-cats:has(> :last-child:nth-child(5)) > * { grid-column: span 2; }
    .nhs .nhs-cats:has(> :last-child:nth-child(5)) > :nth-child(4) { grid-column: 2 / span 2; }
}

.nhs .nhs-cat {
    display: flex;
    flex-direction: column;
    gap: 10px;
    text-decoration: none;
    color: var(--color-ink);
}

.nhs .nhs-cat__media {
    display: block;
    aspect-ratio: 3 / 2;
    border-radius: var(--radius-base);
    overflow: hidden;
    background: #ffffff;
}

.nhs .nhs-cat__img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.4s var(--nhs-ease);
}

.nhs .nhs-cat:hover .nhs-cat__img { transform: scale(1.04); }

.nhs .nhs-cat__label {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 15px;
    line-height: 20px;
    color: var(--color-ink);
    transition: color 0.15s ease;
}

.nhs .nhs-cat:hover .nhs-cat__label { color: var(--color-brand); }

/* Avdelningsblock — Herr och Dam. Liggande 2:1 och staplade i mobil, sida
   vid sida från 700px (3:2 där, 2:1 från 1000px). Rubrik och knapp centreras
   lodrätt till vänster över en mörk toning från vänsterkanten, så att de
   alltid står på den mörka sidan oavsett hur ljust fotot är till höger. */
.nhs .nhs-depts {
    display: grid;
    grid-template-columns: 1fr;
    gap: 12px;
    margin-top: var(--nhs-4);
}

@media (min-width: 700px) {
    .nhs .nhs-depts {
        grid-template-columns: 1fr 1fr;
        gap: var(--nhs-3);
        margin-top: var(--nhs-5);
    }
}

.nhs .nhs-dept {
    position: relative;
    display: block;
    aspect-ratio: 2 / 1;
    border-radius: var(--radius-base);
    overflow: hidden;
    background: #e9e9e9;
    isolation: isolate;
    text-decoration: none;
}

@media (min-width: 700px) and (max-width: 999px) {
    .nhs .nhs-dept { aspect-ratio: 3 / 2; }
}

.nhs .nhs-dept__img {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 22%;
    transition: transform 0.5s var(--nhs-ease);
}

.nhs .nhs-dept:hover .nhs-dept__img { transform: scale(1.03); }

.nhs .nhs-dept::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(90deg, rgba(17, 17, 17, 0.6) 0%, rgba(17, 17, 17, 0) 65%);
}

.nhs .nhs-dept__body {
    position: absolute;
    top: 0;
    bottom: 0;
    left: var(--nhs-3);
    right: var(--nhs-3);
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    gap: var(--nhs-3);
}

@media (min-width: 700px) {
    .nhs .nhs-dept__body { left: var(--nhs-5); right: var(--nhs-5); }
}

.nhs .nhs-dept__label {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 28px;
    line-height: 32px;
    letter-spacing: -0.02em;
    color: #ffffff;
}

@media (min-width: 700px) {
    .nhs .nhs-dept__label { font-size: 40px; line-height: 44px; }
}

/* Flat vit knapp — byter bara bakgrund vid hover (Flat Control Rule). Döljs
   i mobil, där hela blocket är länken och raden är för låg för en knapp. */
.nhs .nhs-dept__cta {
    display: none;
    align-items: center;
    gap: var(--nhs-2);
    min-height: 48px;
    padding: 12px var(--nhs-4);
    border-radius: var(--radius-base);
    background: #ffffff;
    color: var(--color-ink);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    transition: background-color 0.15s ease;
}

.nhs .nhs-dept__cta svg { width: 18px; height: 18px; }
.nhs .nhs-dept:hover .nhs-dept__cta { background: var(--bg-mist); }

@media (min-width: 700px) {
    .nhs .nhs-dept__cta { display: inline-flex; }
}

@media (prefers-reduced-motion: reduce) {
    .nhs .nhs-cat__img,
    .nhs .nhs-dept__img,
    .nhs .nhs-prod__img { transition: none; }
}

/* --------------------------------------------------------------------------
   Tekniska skisser

   Ritningarna ärver textfärgen, så samma SVG fungerar på vitt och på svart.
   .sk-live är den framhävda delen och får brand-teal; .sk-dim är dämpad.
   -------------------------------------------------------------------------- */

.nhs .sketch {
    display: block;
    width: 100%;
    height: auto;
    color: var(--color-ink);
    overflow: visible;
}

.nhs--ink .sketch,
.nhs--deep .sketch { color: #ffffff; }

.nhs .sketch .sk-live { color: var(--color-brand); }

.nhs--ink .sketch .sk-live,
.nhs--deep .sketch .sk-live { color: var(--nhs-brand-light); }

.nhs .sketch text {
    fill: currentColor;
    font-family: 'Inter',sans-serif;
    font-weight: 500;
}

.nhs .sketch .sk-t { font-size: 15px; }

.nhs .sketch .sk-l {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 15px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.nhs .sketch .sk-dim { opacity: 0.55; }

.nhs .sketch--loop { max-width: 420px; overflow: hidden; }

.nhs .nhs-loop { margin-top: var(--nhs-4); }

/* Skissen i ett eget fält, med hårlinjeram som en ritning */
.nhs .nhs-sheet {
    padding: var(--nhs-5) var(--nhs-4);
    border: 1px solid var(--line-hair);
    border-radius: var(--radius-base);
    background: #ffffff;
}

.nhs--ink .nhs-sheet,
.nhs--deep .nhs-sheet {
    border-color: rgba(255, 255, 255, 0.18);
    background: rgba(255, 255, 255, 0.03);
}

.nhs .nhs-sheet__cap {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: var(--nhs-2) var(--nhs-4);
    margin-top: var(--nhs-3);
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs--ink .nhs-sheet__cap,
.nhs--deep .nhs-sheet__cap { color: rgba(255, 255, 255, 0.6); }

/* --------------------------------------------------------------------------
   Poster-kort — ett foto eller en video bär hela kortet, text grundad i
   nederkanten som en affisch. Delad modul mellan Om oss (video, .nhs-poster
   ensamt i full bredd) och ReStep + Företag (foto, två .nhs-poster--duo
   sida vid sida via .nhs-poster-pair) — se start_nh_about.mustache och
   start_nh_restep.mustache. Kortets text är alltid vit (se
   .nhs-poster__content ovan i filen) oavsett vilken sektionsbakgrund kortet
   råkar stå i, eftersom det alltid ligger mot ett tonat foto, inte mot
   sektionsytan.
   -------------------------------------------------------------------------- */

.nhs .nhs-poster {
    position: relative;
    display: flex;
    align-items: flex-end;
    min-height: clamp(480px, 70vh, 600px);
    border-radius: var(--radius-base);
    overflow: hidden;
    isolation: isolate;
}

@media (min-width: 900px) {
    .nhs .nhs-poster { min-height: clamp(460px, 62vh, 640px); }
}

.nhs .nhs-poster__media {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 42%;
}

.nhs .nhs-poster__media--empty {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--nhs-4);
    border: 1px dashed rgba(255, 255, 255, 0.35);
    text-align: center;
    background: rgba(255, 255, 255, 0.06);
}

.nhs .nhs-poster__media--empty span {
    font-size: 12px;
    line-height: 18px;
    color: rgba(255, 255, 255, 0.78);
    max-width: 26ch;
}

.nhs .nhs-poster__veil {
    position: absolute;
    inset: 0;
    z-index: -1;
}

/* ReStep-kort: tonen går mot --restep-green-deep, inte svart, så ytan
   stannar inom ReStep-grönt även där fotot är som mörkast (Sub-Brand
   Dominance Rule, grafisk profil 2026). */
.nhs .nhs-poster__veil--restep {
    background: linear-gradient(
        180deg,
        rgba(32, 40, 29, 0) 0%,
        rgba(32, 40, 29, 0.46) 48%,
        rgba(32, 40, 29, 0.88) 78%,
        rgba(32, 40, 29, 0.96) 100%
    );
}

/* Om oss- och Företag-kort: Deep Brand, tonen DESIGN.md ger B2B- och
   berättande ytor — aldrig svart, aldrig ReStep-grönt. */
.nhs .nhs-poster__veil--brand {
    background: linear-gradient(
        180deg,
        rgba(10, 35, 45, 0) 0%,
        rgba(10, 35, 45, 0.5) 48%,
        rgba(10, 35, 45, 0.9) 78%,
        rgba(10, 35, 45, 0.97) 100%
    );
}

.nhs .nhs-poster__content {
    position: relative;
    z-index: 2;
    width: 100%;
    padding: var(--nhs-5) var(--nhs-4) var(--nhs-6);
}

.nhs .nhs-poster__content > p { color: rgba(255, 255, 255, 0.94); }

/* .nhs h2/h3 and .nhs p both reset margin to 0 (see "Mått och sektionsrytm"),
   so every <p> here — the first one right under the heading, and text_2
   after text_1 — ran straight into whatever came before it with no gap. */
.nhs .nhs-poster__content > p { margin-top: var(--nhs-3); }

@media (min-width: 700px) {
    .nhs .nhs-poster__content { max-width: 640px; padding: var(--nhs-6) var(--nhs-6) var(--nhs-7); }
}

.nhs .nhs-poster__note {
    position: relative;
    z-index: 2;
    margin: 0;
    padding: 0 var(--nhs-4) var(--nhs-3);
    font-size: 12px;
    line-height: 18px;
    color: rgba(255, 255, 255, 0.6);
}

@media (min-width: 700px) {
    .nhs .nhs-poster__note { padding: 0 var(--nhs-6) var(--nhs-4); }
}

/* Parad: ReStep + Företag sida vid sida på desktop, staplade på mobil. Egna
   mindre mått (aspect-ratio i stället för vh-baserad min-height) eftersom
   två kort delar bredden i stället för att äga den ensamma. */
.nhs .nhs-poster-pair {
    display: grid;
    gap: var(--nhs-3);
}

@media (min-width: 700px) {
    .nhs .nhs-poster-pair { gap: var(--nhs-4); }
}

@media (min-width: 900px) {
    .nhs .nhs-poster-pair { grid-template-columns: 1fr 1fr; gap: var(--nhs-5); }
}

.nhs .nhs-poster--duo {
    min-height: 0;
    aspect-ratio: 4 / 5;
}

@media (min-width: 900px) {
    .nhs .nhs-poster--duo { aspect-ratio: 4 / 3; }
}

.nhs .nhs-poster--duo .nhs-poster__content { max-width: none; padding: var(--nhs-4) var(--nhs-4) var(--nhs-5); }

/* Sektionens egen version av uppstigningen i heron — samma rörelse, kortare
   fördröjning eftersom sektionen oftast redan är i vy när den körs. */
@media (prefers-reduced-motion: no-preference) {
    .nhs .nhs-poster__content > * {
        opacity: 0;
        animation: nhs-rise 0.9s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }
    .nhs .nhs-poster__content > *:nth-child(1) { animation-delay: 0.05s; }
    .nhs .nhs-poster__content > *:nth-child(2) { animation-delay: 0.12s; }
    .nhs .nhs-poster__content > *:nth-child(3) { animation-delay: 0.19s; }
    .nhs .nhs-poster__content > *:nth-child(4) { animation-delay: 0.26s; }
    .nhs .nhs-poster__content > *:nth-child(5) { animation-delay: 0.33s; }
}

/* Om oss — fullbredd på mobil: kortet fyller hela skärmen i stället för att
   sitta i sidmarginalen, och sektionens egen färg (nhs--deep) döljs där så
   kortets egen toning är det enda färgade. Kommer tillbaka i sin ruta med
   4px radie och sektionsfärgen från 700px och upp. (David, 2026-10-07/08) */
@media (max-width: 699px) {
    [data-qb-element="nh_about"].nhs--deep { background: none; }
    [data-qb-element="nh_about"] .nhs-wrap { padding-left: 0; padding-right: 0; }
    [data-qb-element="nh_about"] .nhs-poster { border-radius: 0; }
}

/* Bildplats som får fyllas med ett riktigt foto senare. Ett tydligt fält
   säger "här ska något in" — ett hål säger ingenting. */
.nhs .nhs-slot {
    position: relative;
    aspect-ratio: 4 / 3;
    border-radius: var(--radius-base);
    overflow: hidden;
    background: rgba(255, 255, 255, 0.06);
}

.nhs .nhs-slot img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.nhs .nhs-slot--empty {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--nhs-4);
    border: 1px dashed rgba(255, 255, 255, 0.35);
    text-align: center;
}

.nhs .nhs-slot--empty span {
    font-size: 12px;
    line-height: 18px;
    color: rgba(255, 255, 255, 0.78);
    max-width: 26ch;
}

/* --------------------------------------------------------------------------
   Omdömen
   -------------------------------------------------------------------------- */

.nhs .nhs-revs { display: grid; gap: var(--nhs-3); }

@media (min-width: 700px) {
    .nhs .nhs-revs { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--nhs-4); }
}

@media (min-width: 1024px) {
    .nhs .nhs-revs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.nhs .nhs-rev {
    display: flex;
    gap: var(--nhs-3);
    padding: var(--nhs-3);
    border-radius: var(--radius-base);
    background: var(--bg-mist);
}

.nhs--mist .nhs-rev { background: #ffffff; }

.nhs--ink .nhs-rev,
.nhs--deep .nhs-rev { background: rgba(255, 255, 255, 0.05); }

.nhs .nhs-rev__thumb {
    flex: none;
    width: 64px;
    height: 84px;
    object-fit: cover;
    border-radius: var(--radius-base);
    background: rgba(17, 17, 17, 0.06);
}

.nhs .nhs-rev__body { min-width: 0; }

.nhs .nhs-rev__top {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--nhs-2);
}

.nhs .nhs-rev__score {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}

.nhs .nhs-rev__verified {
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs .nhs-rev__what {
    margin-top: 2px;
    font-size: 12px;
    line-height: 16px;
    color: var(--color-ink-soft);
}

.nhs .nhs-rev p {
    margin-top: var(--nhs-2);
    font-size: 14px;
    line-height: 20px;
    color: var(--color-body);
}

.nhs .nhs-rev__who {
    margin-top: var(--nhs-2);
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs--ink .nhs-rev__score,
.nhs--deep .nhs-rev__score { color: #ffffff; }

.nhs--ink .nhs-rev p,
.nhs--deep .nhs-rev p { color: rgba(255, 255, 255, 0.82); }

.nhs--ink .nhs-rev__what, .nhs--ink .nhs-rev__who, .nhs--ink .nhs-rev__verified,
.nhs--deep .nhs-rev__what, .nhs--deep .nhs-rev__who, .nhs--deep .nhs-rev__verified {
    color: rgba(255, 255, 255, 0.62);
}

/* --------------------------------------------------------------------------
   Företagskort med namngiven kontakt
   -------------------------------------------------------------------------- */

.nhs .nhs-b2b {
    padding: var(--nhs-5) var(--nhs-4);
    border-radius: var(--radius-base);
    background: #ffffff;
}

.nhs--paper .nhs-b2b { background: var(--bg-mist); }

.nhs--ink .nhs-b2b,
.nhs--deep .nhs-b2b { background: rgba(255, 255, 255, 0.05); }

@media (min-width: 768px) {
    .nhs .nhs-b2b { padding: var(--nhs-7) var(--nhs-6); }
}

.nhs .nhs-b2b__title {
    font-size: 24px;
    line-height: 32px;
    letter-spacing: -0.02em;
    max-width: 20ch;
}

@media (min-width: 768px) {
    .nhs .nhs-b2b__title { font-size: 32px; line-height: 40px; }
}

.nhs .nhs-b2b > p { margin-top: var(--nhs-3); }

.nhs .nhs-b2b__checks {
    display: grid;
    gap: var(--nhs-2);
    margin: var(--nhs-5) 0;
    padding: var(--nhs-4) 0;
    border-top: 1px solid var(--line-hair);
    border-bottom: 1px solid var(--line-hair);
}

.nhs--ink .nhs-b2b__checks,
.nhs--deep .nhs-b2b__checks { border-color: rgba(255, 255, 255, 0.18); }

.nhs .nhs-b2b__checks li {
    display: flex;
    align-items: flex-start;
    gap: var(--nhs-2);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 15px;
    line-height: 22px;
    color: var(--color-ink);
}

.nhs--ink .nhs-b2b__checks li,
.nhs--deep .nhs-b2b__checks li { color: #ffffff; }

.nhs .nhs-b2b__checks svg {
    flex: none;
    width: 18px;
    height: 18px;
    margin-top: 2px;
    color: var(--color-brand);
}

.nhs--ink .nhs-b2b__checks svg,
.nhs--deep .nhs-b2b__checks svg { color: var(--nhs-brand-light); }

.nhs .nhs-person {
    display: flex;
    align-items: center;
    gap: var(--nhs-3);
}

.nhs .nhs-person img {
    flex: none;
    width: 88px;
    height: 104px;
    object-fit: cover;
    object-position: 50% 20%;
    border-radius: var(--radius-base);
    background: rgba(17, 17, 17, 0.06);
}

.nhs .nhs-person__role {
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs .nhs-person__name {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
}

.nhs--ink .nhs-person__name,
.nhs--deep .nhs-person__name { color: #ffffff; }

.nhs .nhs-person a {
    display: block;
    font-size: 14px;
    line-height: 22px;
    color: var(--color-brand);
}

.nhs .nhs-person a:hover { color: var(--color-brand-hover); }

.nhs--ink .nhs-person a,
.nhs--deep .nhs-person a { color: var(--nhs-brand-light); }

.nhs .nhs-person__tel {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

/* formulär */
.nhs .nhs-form {
    display: grid;
    gap: var(--nhs-2);
    margin-top: var(--nhs-5);
}

@media (min-width: 640px) {
    .nhs .nhs-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .nhs .nhs-form .nhs-field--wide { grid-column: 1 / -1; }
}

.nhs .nhs-field { display: block; }

.nhs .nhs-field > span,
.nhs .nhs-field__label {
    display: block;
    margin-bottom: var(--nhs-1);
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink-soft);
}

.nhs .nhs-form input:not([type="radio"]):not([type="checkbox"]),
.nhs .nhs-form textarea {
    display: block;
    width: 100%;
    height: 48px;
    padding: 0 var(--nhs-3);
    border: 1px solid var(--line-hair);
    border-radius: var(--radius-base);
    background: #ffffff;
    font-family: 'Inter',sans-serif;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
}

.nhs .nhs-form textarea {
    height: auto;
    min-height: 88px;
    padding: var(--nhs-2) var(--nhs-3);
    resize: vertical;
}

.nhs .nhs-form input::placeholder,
.nhs .nhs-form textarea::placeholder { color: var(--color-ink-soft); }

.nhs .nhs-form input:not([type="radio"]):focus,
.nhs .nhs-form textarea:focus {
    outline: none;
    border-color: var(--color-brand);
}

/* :user-invalid, inte :invalid — ett tomt obligatoriskt fält är formellt
   ogiltigt från första bildrutan, och röda ramar innan någon rört formuläret
   är en tillsägelse för något besökaren inte gjort än. */
.nhs .nhs-form input:user-invalid,
.nhs .nhs-form textarea:user-invalid { border-color: rgb(var(--color-alert)); }

.nhs .nhs-choice {
    display: flex;
    flex-wrap: wrap;
    gap: var(--nhs-2);
}

.nhs .nhs-choice label { cursor: pointer; }

.nhs .nhs-choice span {
    display: inline-flex;
    align-items: center;
    gap: var(--nhs-2);
    height: 44px;
    padding: 0 var(--nhs-3);
    border: 1px solid var(--line-hair);
    border-radius: var(--radius-base);
    background: #ffffff;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 14px;
    color: var(--color-ink);
    transition: border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease;
}

.nhs .nhs-choice span svg { width: 16px; height: 16px; flex: none; }

.nhs .nhs-choice span.is-on {
    background: var(--color-brand);
    border-color: var(--color-brand);
    color: #ffffff;
}

.nhs .nhs-choice input:focus-visible + span {
    outline: 2px solid var(--color-brand);
    outline-offset: 3px;
}

/* --------------------------------------------------------------------------
   Servicekolumner — sidans sista lugna beat före sidfoten
   -------------------------------------------------------------------------- */

.nhs .nhs-service { display: grid; gap: var(--nhs-5); }

@media (min-width: 700px) {
    .nhs .nhs-service { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--nhs-6); }
}

@media (min-width: 1024px) {
    .nhs .nhs-service { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.nhs .nhs-service h3 {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
}

.nhs .nhs-service p {
    margin-top: var(--nhs-2);
    font-size: 14px;
    line-height: 22px;
    color: var(--color-ink-soft);
}

.nhs .nhs-service a { color: var(--color-brand); }
.nhs .nhs-service a:hover { color: var(--color-brand-hover); }

.nhs--ink .nhs-service a,
.nhs--deep .nhs-service a { color: var(--nhs-brand-light); }

.nhs--ink .nhs-service p,
.nhs--deep .nhs-service p { color: rgba(255, 255, 255, 0.66); }

/* ==========================================================================
   NH · ReStep — landing page (/restep, CMS page 45)

   The page rides on the theme's nhs system: surfaces, section rhythm, eyebrow,
   display-lg and the button body all come from there. Only what nhs lacked
   lives here — hero, numbered steps, gains list, photo bands, FAQ and the
   contact form.

   The markup is page content: it lives in _pages/45_restep.html and is pasted
   into admin → Pages → /restep. It used to live in the partial
   page_restep.mustache, rendered on every CMS page and hidden with nhr-off —
   that include has been removed from page.mustache (otherwise the page was
   drawn twice). nhr-off is kept below only so nothing else breaks.
   ========================================================================== */

.nhr-off { display: none !important; }

.nhr {
    --nhr-deep: #00293B;              /* kontaktytan ur designen */
    --nhr-green: var(--restep-green);
    /* Samma sage, ljusad tills den klarar 4.5:1 mot --nhr-deep. Designens
       #5F7058 landar på 2.8:1 och är för svag för versal 12px-text. */
    --nhr-green-light: #93A78A;
}

/* Sidan har egna helbreddsytor, så page.mustache lägger nhr-page på sin
   sektion och släpper behållaren där. Sidans egen h1 är dubblett av heron
   och tas bort — CMS-innehållet på sida 45 är tomt, sektionen krymper ihop. */
.nhr-page { padding-top: 0 !important; padding-bottom: 0 !important; }
.nhr-page .container { max-width: none; padding-left: 0; padding-right: 0; }
.nhr-page .max-w-4xl { max-width: none; }
.nhr-page-title { display: none; }

/* Sidmarginal. Designen har 36 px i sitt eget 562-rum, vilket är 24 px när
   ytan skalas till en 375-skärm — temats nhs-wrap ligger på 16 px. Bara
   mobilen sätts om; från 768 px och upp tar temats egna mått över igen. */
@media (max-width: 767px) {
    .nhr .nhs-wrap { padding-left: var(--nhs-4); padding-right: var(--nhs-4); }
}

/* --------------------------------------------------------------------------
   Hero
   -------------------------------------------------------------------------- */

.nhs.nhs-restep-hero {
    position: relative;
    display: flex;
    align-items: center;
    min-height: 60vh;
    padding-top: var(--nhs-7);
    padding-bottom: var(--nhs-6);
    overflow: hidden;
    isolation: isolate;
}

@media (min-width: 700px) {
    .nhs.nhs-restep-hero { min-height: 62vh; }
}

.nhr-hero__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Tealtoningen gör fotot till bakgrund i stället för motiv, och håller
   rubriken läsbar oavsett var i bilden den råkar hamna. */
.nhr-hero__veil {
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        linear-gradient(180deg, rgba(0, 25, 38, 0.35) 0%, rgba(0, 32, 48, 0.55) 55%, rgba(0, 25, 38, 0.78) 100%),
        rgba(27, 65, 80, 0.62);
}

.nhr-hero__inner { text-align: center; }

/* OBS specificitet: temat nollar marginalen på .nhs h1 och .nhs p (0,1,1).
   Som ren klassregel (0,1,0) förlorade `margin: 0 auto` mot den, så rubrik
   och ingress blev vänsterställda lådor med centrerad text — osynligt på
   mobil där de ändå fyller hela bredden, men tydligt från 700 px och upp,
   där varje block hamnade på sin egen mittlinje. Därför .nhr framför. */
.nhr .nhr-hero__title {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 34px;
    line-height: 42px;
    letter-spacing: -0.02em;
    color: #ffffff;
    max-width: 18ch;
    margin: 0 auto;
    text-wrap: balance;
}

/* Ingressen är satt i rubriktypsnittet, halvfet — så gör designen. */
.nhr .nhr-hero__lead {
    margin: var(--nhs-5) auto 0;
    max-width: 38ch;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 600;
    font-size: 18px;
    line-height: 27px;
    color: rgba(255, 255, 255, 0.88);
    text-wrap: balance;
}

.nhr-hero__cta { margin-top: var(--nhs-6); }

@media (min-width: 700px) {
    /* .nhr framför även här — basreglerna ovan är (0,2,0) och skulle annars
       vinna över de här på specificitet, oavsett ordning. */
    .nhr .nhr-hero__title { font-size: 44px; line-height: 52px; max-width: 24ch; }
    .nhr .nhr-hero__lead { font-size: 19px; line-height: 30px; max-width: 46ch; }
    .nhr-hero__cta { display: flex; justify-content: center; }
    .nhr-hero__cta .nhs-btn { width: auto; min-width: 320px; justify-content: center; gap: var(--nhs-4); }
}

@media (min-width: 1200px) {
    .nhr .nhr-hero__title { font-size: 52px; line-height: 60px; }
}

/* Bocklistan under knappen: löftena, inte en navigering. */
.nhr .nhr-hero__points {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--nhs-2) var(--nhs-4);
    margin-top: var(--nhs-5);
    padding: 0;
    list-style: none;
    font-size: 14px;
    line-height: 20px;
    color: rgba(255, 255, 255, 0.9);
}

.nhr .nhr-hero__points li { display: inline-flex; align-items: center; gap: var(--nhs-1); }

.nhr .nhr-hero__points li::before {
    content: "\2713";
    color: var(--nhr-green-light);
    font-weight: 700;
}

/* --------------------------------------------------------------------------
   Knapp — ReStep-grön. Egen variant eftersom nhs-btn--brand är teal.
   -------------------------------------------------------------------------- */

/* Etiketten står centrerad i knappen och pilen sitter i högerkanten — inte
   space-between, som skjuter etiketten till vänsterkanten. Pilen ligger
   absolut så att den aldrig påverkar var etiketten hamnar. */
.nhr .nhs-btn.nhr-btn--restep {
    position: relative;
    justify-content: center;
    padding-left: var(--nhs-6);
    padding-right: var(--nhs-6);
    min-height: 56px;
    font-size: 20px;
    background: var(--nhr-green);
    color: #ffffff;
}

.nhr .nhs-btn.nhr-btn--restep .nhs-btn__arr {
    position: absolute;
    right: var(--nhs-3);
    top: 50%;
    transform: translateY(-50%);
}

.nhr .nhs-btn.nhr-btn--restep:hover { background: var(--restep-green-deep); }

/* --------------------------------------------------------------------------
   Textblock. Samma mått i varje sektion så vänsterkanten aldrig hoppar.
   -------------------------------------------------------------------------- */

.nhr .nhr-prose { max-width: 60ch; }
.nhr .nhr-prose .nhs-display-lg { margin-top: var(--nhs-2); color: var(--color-ink); }
.nhr .nhr-prose p { margin-top: var(--nhs-4); font-size: 17px; line-height: 27px; }
.nhr .nhs-eyebrow { font-size: 14px; line-height: 20px; color: var(--nhr-green); }

/* Designens H2 är mindre än temats — 27 px mot 30 px — så rubriken sitter
   tätare på sitt stycke. Bara mobilen: designen finns bara i mobilformat,
   och från 700 px ska temats egna 46 px gälla igen. Utan medieregeln vann
   den här raden på alla bredder och plattade ut hierarkin på desktop. */
@media (max-width: 699px) {
    .nhr .nhs-display-lg { font-size: 26px; line-height: 34px; }
}

/* Problemraden — tre brister, inte en punktlista att bocka av. Den flödar som
   löptext med mittpunkt emellan; som flexrad bröt varje brist till egen rad
   och lämnade mittpunkterna hängande i vänsterkanten. */
.nhr .nhr-gaps {
    color: var(--color-ink-soft);
}

.nhr .nhr-gaps > span + span::before {
    content: "\00B7";
    margin: 0 0.45em;
    color: var(--color-ink-soft);
}

/* --------------------------------------------------------------------------
   Kundband
   -------------------------------------------------------------------------- */

/* max-width: 68ch från temats .nhs p gör lådan smalare än ytan, så centrerad
   text hamnar vänster om mitten. Lådan måste centreras, inte bara texten. */
.nhr .nhr-logos__label {
    max-width: none;
    text-align: center;
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink-soft);
}

/* Två rader om tre, som i designen. Som flexrad med wrap bröt namnen 2–2–2
   och raderna blev olika långa; ett rutnät håller kolumnerna på plats. */
.nhr .nhr-logos {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    align-items: center;
    justify-items: center;
    gap: var(--nhs-3) var(--nhs-2);
    margin: var(--nhs-4) 0 0;
    padding: 0;
    list-style: none;
}

.nhr .nhr-logos li {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 500;
    font-size: 13px;
    line-height: 18px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--color-ink);
    text-align: center;
    text-wrap: balance;
}

@media (min-width: 700px) {
    .nhr .nhr-logos { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--nhs-4) var(--nhs-3); }
    .nhr .nhr-logos li { font-size: 15px; line-height: 20px; }
}

/* --------------------------------------------------------------------------
   Stegen. Siffran bär ordningen, så namnet får bära betydelsen.
   -------------------------------------------------------------------------- */

.nhr-steps {
    margin: var(--nhs-6) 0 0;
    padding: 0;
    list-style: none;
}

.nhr-step { padding: var(--nhs-4) 0; border-top: 1px solid var(--line-hair); }
.nhr-step:first-child { border-top: 0; }

.nhr-step__head {
    display: flex;
    align-items: baseline;
    gap: var(--nhs-2);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 20px;
    line-height: 26px;
    color: var(--color-ink);
}

.nhr-step__num { color: var(--nhr-green); font-variant-numeric: tabular-nums; }
.nhr-step__dash { color: var(--nhr-green); }

/* Indraget är designens 52 enheter i 562-rummet — 35 px på en 375-skärm. */
.nhr .nhr-step__text {
    margin-top: var(--nhs-2);
    padding-left: 35px;
    max-width: 52ch;
    font-size: 15px;
    line-height: 24px;
    color: var(--color-body);
}

@media (min-width: 700px) {
    .nhr-step { display: grid; grid-template-columns: minmax(0, 20ch) minmax(0, 1fr); gap: var(--nhs-5); padding: var(--nhs-5) 0; }
    .nhr .nhr-step__text { margin-top: 0; padding-left: 0; }
}

/* --------------------------------------------------------------------------
   Fotoband i helbredd. Splitbanden har en diagonal skarv — samma vinkel som
   i originalet, klippt med clip-path så de två bilderna möts utan fog.
   -------------------------------------------------------------------------- */

.nhr-band { position: relative; margin: 0; }

/* Bandhöjderna är mätta ur designen: 0.67 av bredden för de tre smala, 0.85
   för mittenbandet, som är medvetet högre. Alla tre låg tidigare på 0.58. */
.nhr-band > img {
    display: block;
    width: 100%;
    height: 67vw;
    max-height: 520px;
    object-fit: cover;
}

.nhr-band--split { position: relative; height: 67vw; max-height: 520px; margin-bottom: var(--nhs-6); }
.nhr-band--split > img { position: absolute; inset: 0; height: 100%; max-height: none; }

.nhr-band--tall { height: 85vw; max-height: 660px; }

/* Skarven lutar åt olika håll i de två banden — samma vinklar som originalet. */
.nhr-band--split .nhr-band__b { clip-path: polygon(59% 0, 100% 0, 100% 100%, 42% 100%); }
.nhr-band--tall .nhr-band__b { clip-path: polygon(59% 0, 100% 0, 100% 100%, 42% 100%); }
.nhr-band--lean .nhr-band__b { clip-path: polygon(48.5% 0, 100% 0, 100% 100%, 41% 100%); }

.nhr-band figcaption {
    padding: var(--nhs-3) var(--nhs-4) 0;
    font-size: 15px;
    line-height: 23px;
    color: var(--color-ink-soft);
    text-align: center;
}

/* Bildtexten under ett splitband ligger absolut under bandet, som får en
   fast höjd av vw-måttet ovan. */
.nhr-band--split figcaption { position: absolute; left: 0; right: 0; top: 100%; }

@media (min-width: 700px) {
    .nhr-band > img { height: 44vw; max-height: 620px; }
    .nhr-band--split { height: 44vw; max-height: 620px; }
    .nhr-band--tall { height: 52vw; max-height: 700px; }
    .nhr-band figcaption { font-size: 16px; }
}

/* --------------------------------------------------------------------------
   Nyttorna — rubrik och en rad, avdelade med hårstreck
   -------------------------------------------------------------------------- */

.nhr .nhr-gains {
    margin: var(--nhs-6) 0 0;
    padding: 0;
    list-style: none;
}

.nhr-gains > li { padding: var(--nhs-4) 0; border-top: 1px solid var(--line-hair); }
.nhr-gains > li:first-child { border-top: 0; padding-top: 0; }

.nhr-gains h3 {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 26px;
    color: var(--color-ink);
}

.nhr .nhr-gains p {
    margin-top: var(--nhs-1);
    max-width: 52ch;
    font-size: 17px;
    line-height: 27px;
    color: var(--color-body);
}

@media (min-width: 700px) {
    .nhr-gains { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--nhs-7); }
    .nhr-gains > li:nth-child(2) { padding-top: 0; border-top: 0; }
}

/* Citatet bär ingen citattecken-grafik — texten står i typografiska
   citattecken, som i originalet. */
.nhr-quote { margin: var(--nhs-6) 0 0; }

.nhr-quote blockquote {
    margin: 0;
    max-width: 54ch;
    font-size: 17px;
    line-height: 27px;
    color: var(--color-ink);
}

.nhr-quote blockquote::before { content: "\201D"; }
.nhr-quote blockquote::after { content: "\201D"; }

.nhr-quote figcaption { margin-top: var(--nhs-3); font-size: 17px; line-height: 26px; }
.nhr-quote__name { display: block; font-weight: 700; color: var(--color-ink); }
.nhr-quote__role { display: block; font-style: italic; font-weight: 300; color: var(--color-ink-soft); }

/* --------------------------------------------------------------------------
   Trippelraden — tre påståenden med lodräta skiljelinjer
   -------------------------------------------------------------------------- */

.nhr-trust {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin: 0;
    padding: 0;
    list-style: none;
    text-align: center;
}

.nhr-trust > li {
    padding: var(--nhs-2);
    border-left: 1px solid var(--line-hair);
    font-family: 'Montserrat',
sans-serif;
    font-weight: 500;
    font-size: 15px;
    line-height: 22px;
    color: var(--color-ink);
    text-wrap: balance;
}

.nhr-trust > li:first-child { border-left: 0; }

.nhr .nhr-trust--deep { margin-top: var(--nhs-7); }
.nhr-trust--deep > li { border-left-color: rgba(255, 255, 255, 0.22); color: #ffffff; }

/* Raden går ut i helbredd i designen — de tre kolumnerna delar skärmen i
   tre lika delar. Innanför nhs-wrap blev ytterkolumnerna smalare än den
   mittersta, så vi drar ut raden ur sidmarginalen på mobil. */
@media (max-width: 767px) {
    .nhr .nhr-trust {
        margin-left: -24px;
        margin-right: -24px;
    }
}

@media (min-width: 700px) {
    .nhr-trust > li { font-size: 16px; line-height: 24px; padding: var(--nhs-3) var(--nhs-4); }
}

/* --------------------------------------------------------------------------
   FAQ. Öppna från start som i designen — chevronen finns för att kunna
   fälla ihop en fråga man redan läst, inte för att gömma svaren.
   -------------------------------------------------------------------------- */

.nhr-faq { margin-top: var(--nhs-6); }

.nhr-faq details { border-top: 1px solid var(--line-hair); padding: var(--nhs-4) 0; }
.nhr-faq details:first-child { border-top: 0; padding-top: 0; }

.nhr-faq summary {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--nhs-4);
    cursor: pointer;
    list-style: none;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 26px;
    color: var(--color-ink);
}

.nhr-faq summary::-webkit-details-marker { display: none; }

.nhr-faq summary::after {
    content: "";
    flex: none;
    width: 10px;
    height: 10px;
    margin-top: 7px;
    border-right: 2px solid var(--nhr-green);
    border-bottom: 2px solid var(--nhr-green);
    transform: rotate(45deg);
    transition: transform 0.18s var(--nhs-ease);
}

.nhr-faq details[open] summary::after { transform: rotate(-135deg); margin-top: 10px; }

.nhr-faq details > p {
    margin-top: var(--nhs-3);
    max-width: 58ch;
    font-size: 17px;
    line-height: 27px;
    color: var(--color-body);
}

/* --------------------------------------------------------------------------
   Kontaktytan
   -------------------------------------------------------------------------- */

.nhs.nhr-contact { background: var(--nhr-deep); color: rgba(255, 255, 255, 0.82); }
.nhr-contact .nhs-display-lg { color: #ffffff; }
.nhr-contact .nhs-eyebrow { color: var(--nhr-green-light); }
.nhr-contact .nhr-prose p { font-size: 18px; line-height: 28px; color: rgba(255, 255, 255, 0.9); }

.nhr-contact__head { position: relative; }

/* Ordmärket är dekor bakom rubriken, inte en logotyp att läsa. Måtten är
   designens: 31 × 34 px, med överkanten i linje med rubrikens överkant —
   inte med eyebrowen, som det låg mot förut.

   ATT BYTA: designen använder ReStep-märket (N:et med återvinningspilen),
   inte Nordhaus rena N som ritas här. Märket ligger urklippt och färdigt i
   _pages/assets-restep-placeholders/nh-restep-mark.png — ladda upp det i
   admin → Filer som restep-mark.png och byt svg:n mot en img med
   assets_load, så stämmer sidan med den grafiska profilens krav på att
   ReStep-identiteten dominerar sin egen yta. */
.nhr-contact__mark {
    position: absolute;
    right: 0;
    top: var(--nhs-5);
    width: 31px;
    height: auto;
    /* Märket är ReStep-grönt i filen; 0.55 mot den djupa ytan ger #34504B,
       vilket är designens #355250. (color: gällde svg:n som låg här förut
       och gör ingenting på en img.) */
    opacity: 0.55;
    pointer-events: none;
}

@media (min-width: 700px) {
    .nhr-contact__mark { width: 46px; top: var(--nhs-6); }
}

.nhr-form { margin-top: var(--nhs-6); max-width: 560px; }

.nhr-field + .nhr-field { margin-top: var(--nhs-4); }

.nhr-field > label {
    display: block;
    margin-bottom: var(--nhs-2);
    font-size: 14px;
    line-height: 20px;
    color: #ffffff;
}

.nhr-field > label abbr { text-decoration: none; border: 0; }
.nhr-field__opt { color: rgba(255, 255, 255, 0.6); }

.nhr-field__box {
    display: flex;
    align-items: center;
    gap: var(--nhs-3);
    padding: 0 var(--nhs-3);
    min-height: 56px;
    border: 1px solid rgba(255, 255, 255, 0.32);
    border-radius: var(--radius-base);
    background: transparent;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.nhr-field__box:focus-within {
    border-color: var(--nhr-green-light);
    box-shadow: 0 0 0 2px rgba(147, 167, 138, 0.35);
}

.nhr-field__box > svg { flex: none; width: 22px; height: 22px; color: var(--nhr-green-light); }

.nhr-field__box input {
    flex: 1 1 auto;
    min-width: 0;
    padding: var(--nhs-2) 0;
    border: 0;
    background: transparent;
    color: #ffffff;
    font-size: 16px;
    line-height: 24px;
}

.nhr-field__box input:focus { outline: none; }
.nhr-field__box input::placeholder { color: rgba(255, 255, 255, 0.5); }

.nhr-field__box:has(input[aria-invalid="true"]) { border-color: #E39A93; }

.nhr-form .nhs-btn { margin-top: var(--nhs-6); }

.nhr .nhr-form__note {
    margin-top: var(--nhs-4);
    padding: var(--nhs-3);
    border-radius: var(--radius-base);
    background: rgba(147, 167, 138, 0.16);
    font-size: 15px;
    line-height: 22px;
    color: #ffffff;
}

/* Personen. Fotot är friställt, så det får stå mot ytan utan ram. Designen
   ställer fotot i vänsterkanten och uppgifterna högerställda mot motsatt
   kant — inte klistrade intill fotot. */
.nhr-person {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--nhs-3);
    margin-top: var(--nhs-7);
}

.nhr-person__photo { width: 160px; height: auto; flex: none; }
.nhr-person__body { padding-bottom: var(--nhs-2); text-align: right; }

.nhr-person__name {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 17px;
    line-height: 24px;
    color: #ffffff;
}

.nhr-person__role {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 600;
    font-size: 15px;
    line-height: 22px;
    color: var(--nhr-green-light);
}

.nhr-person__link { font-size: 15px; line-height: 24px; }
.nhr-person__link a { color: rgba(255, 255, 255, 0.9); }
.nhr-person__link a:hover { color: #ffffff; text-decoration: underline; }

@media (min-width: 700px) {
    .nhr-person__photo { width: 168px; }
}

@media (prefers-reduced-motion: reduce) {
    .nhr-faq summary::after { transition: none; }
}


/* ==========================================================================
   B2B — Företag landing page (page 49, /foretag; markup in
   _files/partials/page_foretag.mustache)

   Specificity: applyTailwindClasses stamps single-class utilities (0,1,0) onto
   every p / h2 / h3 / h4 / ul / li / a in the block. Every rule below is
   `.b2b <type>` (0,1,1) or `.b2b .b2b-x` (0,2,0), so the theme wins without a
   single !important. Never write a bare-class rule for this block.

   Breakout: page.mustache renders page content inside
   section.py-16 > .container.px-4 > .max-w-4xl.mx-auto. This landing page is
   full-bleed, so the :has() rule neutralises those three wrappers instead of
   fighting them with a 100vw trick (which would collide with the scrollbar).
   ========================================================================== */

section:has(> .container .b2b) {
    padding-top: 0;
    padding-bottom: 0;
}
section:has(> .container .b2b) > .container {
    max-width: none;
    padding-left: 0;
    padding-right: 0;
}
section:has(> .container .b2b) .max-w-4xl {
    max-width: none;
}
/* page.mustache prints the page title above the content; this page carries its
   own H1 in the hero. */
section:has(> .container .b2b) > .container h1:not(.b2b-hero-h) {
    display: none;
}

.b2b {
    --b2b-deep: var(--color-brand-deep);       /* holds: large dark B2B surfaces */
    --b2b-act: var(--color-brand);             /* acts: the CTA colour */
    --b2b-on-deep: rgba(255, 255, 255, 0.76);  /* secondary copy on deep brand */
    --b2b-gutter: 20px;
    --b2b-measure: 68rem;
    --b2b-ease: cubic-bezier(0.16, 1, 0.3, 1);
    color: var(--color-body);
    font-size: 16px;
    line-height: 24px;
    text-align: left;
}
/* One reset, then every element states its own spacing. */
.b2b p,
.b2b h1,
.b2b h2,
.b2b h3,
.b2b h4,
.b2b ul,
.b2b li,
.b2b figure,
.b2b blockquote {
    margin: 0;
    padding: 0;
}
.b2b ul {
    list-style: none;
}
.b2b img {
    display: block;
    max-width: 100%;
}
.b2b a {
    color: inherit;
}

.b2b .b2b-wrap {
    max-width: var(--b2b-measure);
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--b2b-gutter);
    padding-right: var(--b2b-gutter);
}
.b2b .b2b-sec {
    --b2b-sec-pt: 64px;
    padding-top: var(--b2b-sec-pt);
    padding-bottom: 64px;
}

/* Same halving rule as .nhs (see theme.css.mustache, "Mått och sektionsrytm"):
   two b2b-sec in a row with the same surface color get no color edge to read
   as a section break, so collapse the shared gap to half by canceling this
   section's own top padding. */
.b2b-sec:not(.b2b-co):not(.b2b-faq):not(.b2b-close) + .b2b-sec:not(.b2b-co):not(.b2b-faq):not(.b2b-close),
.b2b-sec.b2b-co + .b2b-sec.b2b-co,
.b2b-sec.b2b-faq + .b2b-sec.b2b-faq,
.b2b-sec.b2b-close + .b2b-sec.b2b-close {
    margin-top: calc(-1 * var(--b2b-sec-pt));
}

/* ---- Shared type ramp (DESIGN.md; mobile first, desktop at 768) ---------- */
.b2b .b2b-h2 {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 32px;
    color: var(--color-ink);
    text-wrap: balance;
    margin-bottom: 16px;
}
.b2b .b2b-h2--on-deep { color: #FFFFFF; }

.b2b .b2b-h3 {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 24px;
    color: var(--color-ink);
}
.b2b .b2b-h3--on-deep { color: #FFFFFF; }

.b2b .b2b-lede {
    font-size: 18px;
    line-height: 28px;
    color: var(--color-body);
    max-width: 46rem;
    margin-bottom: 0;
}
.b2b .b2b-sec .b2b-h2 + .b2b-lede { margin-top: -8px; }
.b2b .b2b-p {
    font-size: 16px;
    line-height: 24px;
    color: var(--color-body);
    max-width: 42rem;
}
.b2b .b2b-p + .b2b-p { margin-top: 16px; }

/* Flat checkmark — matches the live PDP feature list (a bare glyph, no
   circle/chip behind it): brand teal on light grounds, white on dark. */
.b2b .b2b-chk { flex: none; width: 16px; height: 16px; color: var(--b2b-act); }
.b2b .b2b-chk svg { width: 100%; height: 100%; display: block; }
.b2b .b2b-chk--light { color: #FFFFFF; }

/* ---- The one control ----------------------------------------------------
   Flat fill, 4px radius, 48px tall, Montserrat Bold — the house button. No
   shadow: ambient shadow is reserved for photography (DESIGN.md). */
.b2b .b2b-cta {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    position: relative;
    width: 100%;
    min-height: 48px;
    padding: 12px 24px;
    border: 0;
    border-radius: var(--radius-base);
    background-color: var(--b2b-act);
    color: #FFFFFF;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background-color 0.2s ease;
}
.b2b .b2b-cta:hover { background-color: var(--color-brand-hover); }
.b2b .b2b-cta:focus-visible { outline: 2px solid var(--color-ink); outline-offset: 3px; }
.b2b .b2b-cta-arrow {
    flex: none;
    width: 16px;
    height: 10px;
    background: currentColor;
    clip-path: polygon(0 40%, 70% 40%, 70% 0, 100% 50%, 70% 100%, 70% 60%, 0 60%);
    opacity: 0.9;
    transition: transform 0.2s ease;
}
.b2b .b2b-cta:hover .b2b-cta-arrow { transform: translateX(3px); }
.b2b .b2b-cta--light { background-color: #FFFFFF; color: var(--color-ink); }
.b2b .b2b-cta--light:hover { background-color: var(--bg-mist); }

/* ---- 1 · Hero ------------------------------------------------------------
   Photo in the bed, deep-brand scrim over it; copy left, the ask (a white
   card) right. Stacks on phones — the ask comes second, after the checklist
   has made the case. */
.b2b .b2b-hero {
    position: relative;
    isolation: isolate;
    background-color: var(--b2b-deep);
    overflow: hidden;
}
.b2b .b2b-hero-bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0.22;
}
.b2b .b2b-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(180deg,
        rgba(14, 59, 77, 0.55) 0%,
        rgba(14, 59, 77, 0.7) 45%,
        rgba(14, 59, 77, 0.92) 100%);
}
.b2b .b2b-hero-grid {
    display: grid;
    gap: 32px;
    padding-top: 48px;
    padding-bottom: 48px;
}
.b2b .b2b-hero-h {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 32px;
    line-height: 40px;
    color: #FFFFFF;
    text-wrap: balance;
}
.b2b .b2b-hero-lede {
    margin-top: 16px;
    font-size: 18px;
    line-height: 28px;
    color: rgba(255, 255, 255, 0.88);
    max-width: 46ch;
}
.b2b .b2b-hero-checks { display: flex; flex-direction: column; gap: 12px; margin-top: 32px; }
.b2b .b2b-hero-checks li { display: flex; align-items: center; gap: 10px; color: #FFFFFF; font-size: 15px; line-height: 22px; font-weight: 500; }

.b2b .b2b-ask { background-color: #FFFFFF; border-radius: var(--radius-base); padding: 24px; }
.b2b .b2b-ask-h {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 24px;
    color: var(--color-ink);
}
.b2b .b2b-ask-sub { margin-top: 8px; font-size: 14px; line-height: 20px; color: var(--color-ink-soft); }
.b2b .b2b-ask-foot {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid var(--line-hair);
}
.b2b .b2b-ask-foot img { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex: none; }
.b2b .b2b-ask-foot p { font-size: 12px; line-height: 16px; color: var(--color-ink-soft); }
.b2b .b2b-ask-foot b {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink);
}

/* ---- The form -------------------------------------------------------- */
.b2b .b2b-form { display: grid; grid-template-columns: 1fr; gap: 16px; margin-top: 24px; }
.b2b .b2b-field { display: block; border: 0; padding: 0; margin: 0; min-width: 0; }
.b2b .b2b-label {
    display: block;
    margin-bottom: 6px;
    padding: 0;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 13px;
    line-height: 18px;
    color: var(--color-ink);
}
.b2b .b2b-req { color: var(--b2b-act); }
.b2b .b2b-input {
    display: block;
    width: 100%;
    min-height: 48px;
    padding: 12px 16px;
    border: 1px solid var(--line-hair);
    border-radius: var(--radius-base);
    background-color: #FFFFFF;
    color: var(--color-ink);
    font-family: inherit;
    font-size: 16px;
    line-height: 24px;
}
.b2b .b2b-input::placeholder { color: #9A9A9A; }
.b2b .b2b-input:focus {
    outline: none;
    border-color: var(--b2b-act);
    box-shadow: 0 0 0 3px rgba(27, 81, 89, 0.14);
}
.b2b .b2b-select {
    appearance: none;
    padding-right: 44px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' fill='none'%3E%3Cpath d='m1.5 1.5 5.5 5.5 5.5-5.5' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 16px center;
    background-size: 14px 9px;   /* the theme styles bare <select>; pin ours */
}
.b2b .b2b-form-note {
    margin-top: -4px;
    font-size: 14px;
    line-height: 20px;
    color: var(--color-ink-soft);
    text-align: center;
}
.b2b .b2b-form-legal {
    margin-top: -8px;
    font-size: 12px;
    line-height: 18px;
    color: var(--color-ink-soft);
    text-align: center;
}
.b2b .b2b-form-legal a { color: var(--b2b-act); text-decoration: underline; }

/* ---- 2 · Logo band — a real, seamless marquee (start_nh_trust's technique:
   the track is doubled and its copy hidden from screen readers so the loop
   has no seam; paused on hover and at prefers-reduced-motion below). ------ */
.b2b .b2b-logos { background-color: #FFFFFF; }
.b2b .b2b-logos-row { padding: 24px 0; overflow: hidden; display: grid; gap: 20px; }
.b2b .b2b-logos-label { font-size: 12px; line-height: 18px; color: var(--color-ink-soft); }
.b2b .b2b-logos-label b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}
.b2b .b2b-marq {
    position: relative;
    min-width: 0;
    overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
}
.b2b .b2b-marq-track {
    display: flex;
    align-items: center;
    gap: 48px;
    width: max-content;
    animation: b2b-marq 60s linear infinite;
    will-change: transform;
}
.b2b .b2b-marq:hover .b2b-marq-track { animation-play-state: paused; }
.b2b .b2b-marq-track li {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 12px;
    line-height: 20px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-ink-soft);
    white-space: nowrap;
}
@keyframes b2b-marq {
    from { transform: translate3d(0, 0, 0); }
    to { transform: translate3d(-50%, 0, 0); }
}

/* ---- 3 · Fördelar — flat checklist, no cards ----------------------------- */
.b2b .b2b-fordelar { margin-top: 32px; display: grid; gap: 0; }
.b2b .b2b-fordelar-row { display: flex; gap: 12px; align-items: flex-start; padding: 20px 0; border-top: 1px solid var(--line-hair); }
.b2b .b2b-fordelar li:last-child { border-bottom: 1px solid var(--line-hair); }
.b2b .b2b-fordelar-row .b2b-chk { margin-top: 4px; }
.b2b .b2b-fordelar-row p { font-size: 16px; line-height: 24px; color: var(--color-body); }
.b2b .b2b-fordelar-row p b { font-family: 'Montserrat',
sans-serif; font-weight: 700; color: var(--color-ink); }

/* ---- 4 · Så går ett samarbete till — numbered timeline beside a sticky
   photo. Mobile: flex column, photo pushed after the steps (order) so the
   steps read first. Desktop: grid, photo sticky beside the steps — explicit
   grid placement there ignores `order`, so no override is needed. --------- */
.b2b .b2b-flow { margin-top: 32px; display: flex; flex-direction: column; }
.b2b .b2b-flow-media { order: 1; margin-top: 24px; }
.b2b .b2b-flow-item { position: relative; padding: 0 0 32px 56px; }
.b2b .b2b-flow-item::before {
    content: attr(data-n);
    position: absolute;
    left: 0;
    top: -4px;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 32px;
    color: var(--b2b-act);
    font-variant-numeric: tabular-nums;
}
.b2b .b2b-flow-item::after { content: ""; position: absolute; left: 15px; top: 36px; bottom: 4px; width: 1px; background: var(--line-hair); }
.b2b .b2b-flow-item:last-child { padding-bottom: 0; }
.b2b .b2b-flow-item:last-child::after { display: none; }
.b2b .b2b-flow-item .b2b-p { margin-top: 8px; max-width: 58ch; }
.b2b .b2b-flow-media img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; border-radius: var(--radius-base); }
.b2b .b2b-flow-media figcaption { margin-top: 12px; font-size: 14px; line-height: 20px; color: var(--color-ink-soft); }

/* ---- 5 · Kundcase --------------------------------------------------------- */
.b2b .b2b-co { background-color: var(--b2b-deep); }
/* Tre förtroendepunkter under rubriken: staplade på mobil, en rad med
   mittpunkt mellan från 900 px (se media-blocket längre ner). */
.b2b .b2b-co-proof {
    margin-top: 24px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 400;
    font-size: 15px;
    line-height: 22px;
    color: rgba(255, 255, 255, 0.86);
}
.b2b .b2b-co-proof-star { color: #F5B301; }
.b2b .b2b-case-grid { margin-top: 48px; display: grid; gap: 48px; }
.b2b .b2b-case-media { aspect-ratio: 3 / 2; border-radius: var(--radius-base); overflow: hidden; background-color: rgba(255, 255, 255, 0.06); }
.b2b .b2b-case-media img { width: 100%; height: 100%; object-fit: cover; }
.b2b .b2b-case-card .b2b-h3 { margin-top: 24px; }
.b2b .b2b-case-sub { margin-top: 4px; font-size: 14px; line-height: 20px; color: rgba(255, 255, 255, 0.7); }
.b2b .b2b-case-p { margin-top: 12px; font-size: 16px; line-height: 24px; color: var(--b2b-on-deep); max-width: 58ch; }
.b2b .b2b-co-quote { margin-top: 64px; padding-top: 32px; border-top: 1px solid rgba(255, 255, 255, 0.18); max-width: 45rem; }
.b2b .b2b-co-quote q {
    display: block;
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 24px;
    color: #FFFFFF;
    quotes: '\201D' '\201D';
}
.b2b .b2b-co-quote cite { display: block; margin-top: 16px; font-style: normal; font-size: 14px; line-height: 20px; color: var(--b2b-on-deep); }
.b2b .b2b-co-quote cite b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    color: #FFFFFF;
    display: block;
}

/* ---- 6 · Vår filosofi ("Bättre utrustning. Rimligare pris.") ------------- */
.b2b .b2b-build-grid { display: grid; gap: 32px; }
.b2b .b2b-build-img { aspect-ratio: 4 / 5; border-radius: var(--radius-base); overflow: hidden; background-color: var(--bg-mist); }
.b2b .b2b-build-img img { width: 100%; height: 100%; object-fit: cover; object-position: 55% 50%; }
.b2b .b2b-three { margin-top: 32px; display: grid; gap: 0; }
.b2b .b2b-three li { display: grid; grid-template-columns: 1fr; gap: 4px; padding: 16px 0; border-top: 1px solid var(--line-hair); }
.b2b .b2b-three li:last-child { border-bottom: 1px solid var(--line-hair); }
.b2b .b2b-three li b {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    color: var(--color-ink);
}
.b2b .b2b-three li span { color: var(--color-body); }

/* ---- 7 · FAQ — matches .nhf-item on page_faq.mustache: edge-bleeding item
   with a hairline top border that disappears into a Light Grey fill on open,
   Inter (not Montserrat) for the question, a plus that turns into a minus
   instead of a rotating chevron. Two columns here (this page has no sidebar
   nav to fill that role, unlike /vanliga-fragor). --------------------------- */
.b2b .b2b-faq { background-color: var(--bg-mist); }
.b2b .b2b-acc { margin-top: 32px; display: grid; gap: 0; }
.b2b .b2b-acc-item { margin: 0 -20px; border-top: 1px solid var(--line-hair); border-radius: var(--radius-base); transition: background-color 0.3s var(--b2b-ease); }
.b2b .b2b-acc-item:last-child { border-bottom: 1px solid var(--line-hair); }
.b2b .b2b-acc-item[open] { background-color: #FFFFFF; border-color: transparent; }
.b2b .b2b-acc-item[open] + .b2b-acc-item { border-top-color: transparent; }
.b2b .b2b-acc-btn {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 24px;
    width: 100%;
    padding: 20px;
    background: none;
    border: 0;
    font-size: 16px;
    line-height: 24px;
    font-weight: 500;
    color: var(--color-ink);
    text-align: left;
    cursor: pointer;
    list-style: none;
}
.b2b .b2b-acc-btn::-webkit-details-marker { display: none; }
.b2b .b2b-acc-btn:focus-visible { outline: 2px solid var(--b2b-act); outline-offset: 2px; }
.b2b .b2b-acc-icon { position: relative; flex: none; width: 24px; height: 24px; }
.b2b .b2b-acc-icon::before,
.b2b .b2b-acc-icon::after {
    content: "";
    position: absolute;
    left: 5px;
    top: 11px;
    width: 14px;
    height: 2px;
    background: currentColor;
    color: var(--color-ink-soft);
    transition: transform 0.35s var(--b2b-ease);
}
.b2b .b2b-acc-icon::after { transform: rotate(90deg); }
.b2b .b2b-acc-item[open] .b2b-acc-icon::after { transform: rotate(0deg); }
.b2b .b2b-acc-body { padding: 0 20px 24px; font-size: 16px; line-height: 24px; color: var(--color-body); max-width: 58ch; }
.b2b .b2b-acc-body a { color: var(--b2b-act); text-decoration: underline; }

/* ---- 8 · Close ------------------------------------------------------------ */
.b2b .b2b-close { background-color: var(--b2b-deep); }
.b2b .b2b-close-card { display: grid; gap: 24px; align-items: center; }
.b2b .b2b-close-ph { width: 134px; height: 168px; border-radius: 8px; object-fit: cover; object-position: 50% 15%; background-color: var(--bg-mist); }
.b2b .b2b-close-kicker { margin-bottom: 4px; font-size: 16px; line-height: 24px; color: var(--b2b-on-deep); }
.b2b .b2b-close-contacts { display: flex; flex-direction: column; gap: 4px; margin-top: 16px; }
.b2b .b2b-close-contacts a {
    font-family: 'Montserrat',
sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 28px;
    color: #FFFFFF;
    text-decoration: none;
}
.b2b .b2b-close-contacts a:hover { text-decoration: underline; }
.b2b .b2b-close-role { margin-top: 8px; font-size: 14px; line-height: 20px; color: var(--b2b-on-deep); }

/* ---- Desktop -------------------------------------------------------------- */
@media (min-width: 768px) {
    .b2b { --b2b-gutter: 40px; }
    .b2b .b2b-sec { --b2b-sec-pt: 96px; padding-top: var(--b2b-sec-pt); padding-bottom: 96px; }

    .b2b .b2b-h2  { font-size: 32px; line-height: 40px; }
    .b2b .b2b-h3  { font-size: 24px; line-height: 32px; }
    .b2b .b2b-lede { font-size: 20px; line-height: 30px; }

    .b2b .b2b-ask { padding: 32px; }

    .b2b .b2b-form { grid-template-columns: 1fr 1fr; column-gap: 16px; }
    .b2b .b2b-field--wide { grid-column: 1 / -1; }

    .b2b .b2b-logos-row { grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 48px; }
    .b2b .b2b-logos-label { white-space: nowrap; }

    .b2b .b2b-fordelar { grid-template-columns: 1fr 1fr; column-gap: 64px; }
    .b2b .b2b-fordelar li:nth-last-child(2) { border-bottom: 1px solid var(--line-hair); }

    .b2b .b2b-flow { display: grid; grid-template-columns: 1fr 1fr; column-gap: 64px; }
    .b2b .b2b-flow-media { grid-column: 2; grid-row: 1 / span 4; align-self: start; margin-top: 0; }
    .b2b .b2b-flow-item { grid-column: 1; padding-left: 72px; padding-bottom: 32px; }
    .b2b .b2b-flow-item::before { font-size: 32px; line-height: 40px; }
    .b2b .b2b-flow-item::after { left: 19px; top: 44px; }

    .b2b .b2b-case-grid { grid-template-columns: 1fr 1fr; }
    .b2b .b2b-co-proof { flex-direction: row; flex-wrap: wrap; gap: 8px 0; }
    .b2b .b2b-co-proof li + li::before { content: "·"; margin: 0 20px; color: rgba(255, 255, 255, 0.5); }
    .b2b .b2b-co-quote q { font-size: 24px; line-height: 32px; }

    /* Bilden fyller hela textkolumnens höjd: överkant i linje med rubrikens
       versaler (10 px under radboxens topp), nederkant på sista punktens linje. */
    .b2b .b2b-build-grid { grid-template-columns: 5fr 7fr; gap: 64px; align-items: stretch; }
    .b2b .b2b-build-img { aspect-ratio: auto; margin-top: 10px; }
    .b2b .b2b-three li { grid-template-columns: 140px 1fr; gap: 16px; }

    .b2b .b2b-acc { grid-template-columns: 1fr 1fr; column-gap: 48px; }
    .b2b .b2b-acc-item { margin: 0 -24px; }
    .b2b .b2b-acc-btn { padding: 24px; font-size: 18px; line-height: 28px; }
    .b2b .b2b-acc-body { padding: 0 24px 24px; }

    /* Porträttet är stående och fyller textblockets höjd: kolumnen ger bredden,
       align-self: stretch ger höjden (rubrik till rollraden). */
    .b2b .b2b-close-card { grid-template-columns: 136px 1fr auto; gap: 32px; }
    .b2b .b2b-close-ph { align-self: stretch; width: 100%; height: 100%; min-height: 160px; }
    .b2b .b2b-close-kicker { font-size: 18px; line-height: 26px; }
    .b2b .b2b-close-card .b2b-cta { min-width: 280px; }
}

@media (min-width: 1000px) {
    .b2b .b2b-hero-grid { grid-template-columns: 1fr 448px; gap: 64px; align-items: center; padding-top: 80px; padding-bottom: 80px; }
    .b2b .b2b-hero-h { font-size: 48px; line-height: 56px; }
}

@media (min-width: 600px) {
    .b2b .b2b-three li { grid-template-columns: 120px 1fr; gap: 16px; }
}

@media (prefers-reduced-motion: reduce) {
    .b2b .b2b-cta,
    .b2b .b2b-cta-arrow,
    .b2b .b2b-acc-item,
    .b2b .b2b-acc-icon::before,
    .b2b .b2b-acc-icon::after { transition: none; }
    .b2b .b2b-marq { -webkit-mask-image: none; mask-image: none; }
    .b2b .b2b-marq-track {
        animation: none;
        width: 100%;
        flex-wrap: wrap;
        gap: 12px 32px;
    }
    .b2b .b2b-marq-track li[aria-hidden="true"] { display: none; }
}

/* =========================================================================
   NH · Sidikoner som CSS-masker  (sidorna 45 /restep och 46 /foretag)
   -------------------------------------------------------------------------
   Adminsparningen tar bort svg (och form och script) ur sidinnehållet —
   verifierat 2026-08-24 genom att diffa _pages/*.html mot det som kom
   tillbaka. Sidorna har därför tomma spans med ikonklassen, och formen
   ritas här. Måsken målas med currentColor, så färgreglerna ovan gäller
   fortfarande. Se AGENTS.md och js/nhPages.js.
   ========================================================================= */

.b2b .b2b-star,
.b2b .b2b-ic,
.b2b .b2b-cta-arrow,
.b2b .b2b-acc-chev,
.b2b .b2b-pill-ic,
.nhr span.nhs-btn__arr,
.nhr .nhr-field__ic {
    display: inline-block;
    background-color: currentColor;
    -webkit-mask-repeat: no-repeat;
            mask-repeat: no-repeat;
    -webkit-mask-position: center;
            mask-position: center;
    -webkit-mask-size: contain;
            mask-size: contain;
}

.b2b .b2b-star { width: 15px; height: 14px; -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2023%27%3E%3Cpath%20d%3D%27M12%200l3.09%207.26L23%208.09l-5.5%205.36L18.18%2021%2012%2017.27%205.82%2021%207.5%2013.45%202%208.09l7.91-.83z%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2023%27%3E%3Cpath%20d%3D%27M12%200l3.09%207.26L23%208.09l-5.5%205.36L18.18%2021%2012%2017.27%205.82%2021%207.5%2013.45%202%208.09l7.91-.83z%27%2F%3E%3C%2Fsvg%3E"); }

.b2b .b2b-ic { width: 16px; height: 16px; }
.b2b .b2b-ic--yes,
.b2b .b2b-ic--on-deep { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27m2.5%208.5%203.5%203.5%207.5-8%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27m2.5%208.5%203.5%203.5%207.5-8%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }
.b2b .b2b-ic--no { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27M3.5%203.5l9%209m0-9-9%209%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27M3.5%203.5l9%209m0-9-9%209%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }

.b2b .b2b-cta-arrow { width: 9px; height: 14px; -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%209%2014%27%3E%3Cpath%20d%3D%27M1.5%201.5%207%207l-5.5%205.5%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%209%2014%27%3E%3Cpath%20d%3D%27M1.5%201.5%207%207l-5.5%205.5%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }
.b2b .b2b-acc-chev { width: 14px; height: 9px; -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2014%209%27%3E%3Cpath%20d%3D%27m1.5%201.5%205.5%205.5%205.5-5.5%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2014%209%27%3E%3Cpath%20d%3D%27m1.5%201.5%205.5%205.5%205.5-5.5%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }

.b2b .b2b-pill-ic { width: 15px; height: 15px; }

/* Textarean byggs av js/nhPages.js (sidinnehåll får inte innehålla en textarea),
   så platsen reserveras här — annars hoppar formuläret 48 px när skriptet kör. */
.b2b [data-b2b-message] { min-height: 162px; }

.b2b .b2b-pill-ic--tel { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27M5.2%202.2%206.6%205%205.3%206.4a9%209%200%200%200%204.3%204.3L11%209.4l2.8%201.4v2.4c0%20.6-.5%201-1.1.9A12%2012%200%200%201%202.3%203.3c-.1-.6.3-1.1.9-1.1h2Z%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.4%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20d%3D%27M5.2%202.2%206.6%205%205.3%206.4a9%209%200%200%200%204.3%204.3L11%209.4l2.8%201.4v2.4c0%20.6-.5%201-1.1.9A12%2012%200%200%201%202.3%203.3c-.1-.6.3-1.1.9-1.1h2Z%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.4%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }
.b2b .b2b-pill-ic--mail { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.4%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%271.7%27%20y%3D%273.4%27%20width%3D%2712.6%27%20height%3D%279.2%27%20rx%3D%271.2%27%2F%3E%3Cpath%20d%3D%27m2.2%204.4%205.8%204%205.8-4%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.4%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%271.7%27%20y%3D%273.4%27%20width%3D%2712.6%27%20height%3D%279.2%27%20rx%3D%271.2%27%2F%3E%3Cpath%20d%3D%27m2.2%204.4%205.8%204%205.8-4%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }

.nhr span.nhs-btn__arr { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M9%206l6%206-6%206%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M9%206l6%206-6%206%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%272%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }

.nhr .nhr-field__ic { flex: none; width: 22px; height: 22px; color: var(--nhr-green-light); }
.nhr .nhr-field__ic--person { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%3E%3Ccircle%20cx%3D%2712%27%20cy%3D%278%27%20r%3D%273.6%27%2F%3E%3Cpath%20d%3D%27M5%2020c0-3.6%203.1-5.6%207-5.6s7%202%207%205.6%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%3E%3Ccircle%20cx%3D%2712%27%20cy%3D%278%27%20r%3D%273.6%27%2F%3E%3Cpath%20d%3D%27M5%2020c0-3.6%203.1-5.6%207-5.6s7%202%207%205.6%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
.nhr .nhr-field__ic--company { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%3E%3Crect%20x%3D%274.5%27%20y%3D%274.5%27%20width%3D%2715%27%20height%3D%2715%27%20rx%3D%271.5%27%2F%3E%3Cpath%20d%3D%27M8.5%2016V11M12%2016V8.5M15.5%2016v-3%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%3E%3Crect%20x%3D%274.5%27%20y%3D%274.5%27%20width%3D%2715%27%20height%3D%2715%27%20rx%3D%271.5%27%2F%3E%3Cpath%20d%3D%27M8.5%2016V11M12%2016V8.5M15.5%2016v-3%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
.nhr .nhr-field__ic--mail { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%273.5%27%20y%3D%275.5%27%20width%3D%2717%27%20height%3D%2713%27%20rx%3D%271.5%27%2F%3E%3Cpath%20d%3D%27M4%207l8%206%208-6%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%273.5%27%20y%3D%275.5%27%20width%3D%2717%27%20height%3D%2713%27%20rx%3D%271.5%27%2F%3E%3Cpath%20d%3D%27M4%207l8%206%208-6%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
.nhr .nhr-field__ic--tel { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M7.5%204.5h3l1.5%204-2%201.5a11%2011%200%200%200%204%204l1.5-2%204%201.5v3a1.5%201.5%200%200%201-1.6%201.5C11.4%2017.5%206.5%2012.6%206%205.9a1.5%201.5%200%200%201%201.5-1.4z%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M7.5%204.5h3l1.5%204-2%201.5a11%2011%200%200%200%204%204l1.5-2%204%201.5v3a1.5%201.5%200%200%201-1.6%201.5C11.4%2017.5%206.5%2012.6%206%205.9a1.5%201.5%200%200%201%201.5-1.4z%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.6%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E"); }

/* ==========================================================================
   FAQ — Vanliga frågor (CMS page 5, _files/partials/page_faq.mustache)

   Designed as faq-concepts/d.html. Hero: calm photo under an ink veil. All
   three categories stacked in one scroll; the nav is a tab row on phones and a
   sticky rail from 1024px, and initFaq (js/nhPages.js) keeps it on the
   category being read. Questions are details/summary in Inter Medium (a
   deliberate, user-approved exception to "FAQ question in Montserrat Bold");
   headings have no closing full stop on this page, by request.

   Rooted in .nhf, two classes per selector: Tailwind is linked after this
   sheet, so a bare single class loses to any utility.
   --nhf-top is the sticky theme header's height, set by initFaq.
   ========================================================================== */

.nhf {
    --nhf-top: 0px;
    --nhf-bar: 0px;
    --nhf-gutter: 16px;
    --nhf-ease: cubic-bezier(0.16, 1, 0.3, 1);
    --nhf-display: 'Montserrat', -apple-system, BlinkMacSystemFont, sans-serif;
    --nhf-text: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    color: var(--color-body);
    font: 400 16px/24px var(--nhf-text);
}
@media (min-width: 768px) { .nhf { --nhf-gutter: 24px; } }
@media (min-width: 1100px) { .nhf { --nhf-gutter: 48px; } }

.nhf .nhf-wrap { max-width: 1280px; margin: 0 auto; padding: 0 var(--nhf-gutter); }
.nhf .nhf-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.nhf p { margin: 0; }
.nhf a { color: var(--color-brand); text-underline-offset: 3px; }
.nhf a:hover { color: var(--color-brand-hover); }
.nhf .nhf-h1, .nhf .nhf-h2, .nhf .nhf-visit-q { margin: 0; font-family: var(--nhf-display); font-weight: 700; color: var(--color-ink); text-wrap: balance; }
.nhf .nhf-h2 { font-size: 24px; line-height: 32px; }
@media (min-width: 768px) { .nhf .nhf-h2 { font-size: 32px; line-height: 40px; } }

/* ---- hero ---- */
.nhf .nhf-hero { position: relative; isolation: isolate; overflow: hidden; color: #fff; }
.nhf .nhf-hero-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 78%; z-index: -2; }
.nhf .nhf-hero::after { content: ''; position: absolute; inset: 0; z-index: -1; background: rgba(17, 17, 17, 0.72); }
.nhf .nhf-hero .nhf-wrap { padding-top: 64px; padding-bottom: 48px; }
.nhf .nhf-h1 { color: #fff; font-size: 32px; line-height: 40px; }
.nhf .nhf-ingress { margin-top: 16px; max-width: 58ch; font-size: 18px; line-height: 28px; color: rgba(255, 255, 255, 0.88); }
.nhf .nhf-ingress a { color: #fff; font-weight: 500; text-decoration: underline; text-decoration-color: rgba(255, 255, 255, 0.5); white-space: nowrap; }
.nhf .nhf-ingress a:hover { color: #fff; text-decoration-color: #fff; }
@media (min-width: 768px) {
    .nhf .nhf-hero::after { background: linear-gradient(90deg, rgba(17, 17, 17, 0.82) 0%, rgba(17, 17, 17, 0.62) 45%, rgba(17, 17, 17, 0.28) 100%); }
    .nhf .nhf-hero .nhf-wrap { padding-top: 96px; padding-bottom: 64px; }
    .nhf .nhf-h1 { font-size: 48px; line-height: 56px; }
    .nhf .nhf-ingress { font-size: 20px; line-height: 30px; }
}

/* ---- search ---- */
.nhf .nhf-search { position: relative; margin-top: 32px; max-width: 560px; }
.nhf .nhf-search input { width: 100%; height: 56px; margin: 0; padding: 0 48px 0 52px; border: 1px solid transparent; border-radius: var(--radius-base); background: #fff; color: var(--color-ink); font: 400 16px/24px var(--nhf-text); box-shadow: none; -webkit-appearance: none; appearance: none; transition: border-color .2s; }
.nhf .nhf-search input::placeholder { color: var(--color-ink-soft); opacity: 1; }
.nhf .nhf-search input:focus { outline: none; border-color: var(--color-brand); box-shadow: none; }
.nhf .nhf-search input::-webkit-search-cancel-button { display: none; }
.nhf .nhf-glass { position: absolute; left: 18px; top: 50%; width: 18px; height: 18px; margin-top: -9px; border: 2px solid var(--color-ink); border-radius: 50%; pointer-events: none; }
.nhf .nhf-glass::after { content: ''; position: absolute; width: 2px; height: 7px; background: var(--color-ink); right: -4px; bottom: -6px; transform: rotate(-45deg); }
.nhf .nhf-clear { position: absolute; right: 8px; top: 50%; width: 40px; height: 40px; margin-top: -20px; padding: 0; border: 0; border-radius: var(--radius-base); background: none; cursor: pointer; }
.nhf .nhf-clear[hidden] { display: none; }
.nhf .nhf-clear::before, .nhf .nhf-clear::after { content: ''; position: absolute; left: 12px; top: 19px; width: 16px; height: 2px; background: var(--color-ink-soft); transform: rotate(45deg); }
.nhf .nhf-clear::after { transform: rotate(-45deg); }
.nhf .nhf-clear:focus-visible, .nhf .nhf-tab:focus-visible, .nhf .nhf-q:focus-visible { outline: 2px solid var(--color-brand); outline-offset: 2px; }
.nhf .nhf-hint { margin-top: 8px; min-height: 20px; font-size: 14px; line-height: 20px; color: rgba(255, 255, 255, 0.8); }

/* ---- layout: tab row on phones, sticky rail from 1024 ---- */
.nhf .nhf-grid { display: grid; grid-template-columns: minmax(0, 1fr); }
.nhf .nhf-rail { position: sticky; top: var(--nhf-top); z-index: 10; margin: 0 calc(var(--nhf-gutter) * -1); padding: 0 var(--nhf-gutter); background: #fff; }
/* no divider at rest; while stuck over content, a short white fade */
.nhf .nhf-rail::after { content: ''; position: absolute; left: 0; right: 0; top: 100%; height: 24px; background: linear-gradient(#fff, rgba(255, 255, 255, 0)); opacity: 0; transition: opacity .25s var(--nhf-ease); pointer-events: none; }
.nhf .nhf-rail.is-stuck::after { opacity: 1; }
.nhf .nhf-tabs { display: flex; gap: 32px; margin: 0; padding: 0; list-style: none; overflow-x: auto; scrollbar-width: none; }
.nhf .nhf-tabs::-webkit-scrollbar { display: none; }
.nhf .nhf-tabs li { flex: none; margin: 0; }
.nhf .nhf-tab { position: relative; display: inline-flex; align-items: center; gap: 8px; padding: 20px 0 18px; white-space: nowrap; font: 700 16px/24px var(--nhf-display); color: var(--color-ink-soft); text-decoration: none; transition: color .2s; }
.nhf .nhf-tab:hover, .nhf .nhf-tab[aria-current="true"] { color: var(--color-ink); }
.nhf .nhf-tab::after { content: ''; position: absolute; left: 0; right: 0; bottom: 8px; height: 2px; background: var(--color-brand); transform: scaleX(0); transform-origin: left; transition: transform .35s var(--nhf-ease); }
.nhf .nhf-tab[aria-current="true"]::after { transform: scaleX(1); }
.nhf .nhf-count { display: none; font: 500 12px/16px var(--nhf-text); color: var(--color-ink-soft); font-variant-numeric: tabular-nums; }
.nhf.is-searching .nhf-tab::after { transform: scaleX(0); }
.nhf.is-searching .nhf-tab { color: var(--color-ink-soft); }
.nhf .nhf-rail-help { display: none; }
.nhf .nhf-content { padding: 32px 0 80px; }

@media (min-width: 1024px) {
    .nhf .nhf-grid { grid-template-columns: 280px minmax(0, 1fr); gap: 64px; align-items: start; }
    /* bottom margin = the content's bottom padding, so the rail comes to rest
       level with the last question instead of on the showroom section */
    .nhf .nhf-rail { top: calc(var(--nhf-top) + 24px); margin: 80px 0 120px; padding: 0; background: none; }
    .nhf .nhf-rail::after { display: none; }
    .nhf .nhf-tabs { flex-direction: column; gap: 0; overflow: visible; border-left: 1px solid var(--line-hair); }
    .nhf .nhf-tab { display: flex; justify-content: space-between; padding: 12px 0 12px 24px; }
    .nhf .nhf-tab::after { left: -1px; right: auto; top: 8px; bottom: 8px; width: 2px; height: auto; transform: scaleY(0); transform-origin: top; }
    .nhf .nhf-tab[aria-current="true"]::after { transform: scaleY(1); }
    .nhf .nhf-count { display: inline; }
    .nhf .nhf-rail-help { display: block; margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--line-hair); font-size: 14px; line-height: 20px; }
    .nhf .nhf-rail-help-h { margin-bottom: 8px; font: 700 16px/24px var(--nhf-display); color: var(--color-ink); }
    .nhf .nhf-rail-help a { display: block; margin-top: 4px; font-weight: 500; text-decoration: none; }
    .nhf .nhf-content { padding: 80px 0 120px; }
}

/* ---- categories and questions ---- */
.nhf .nhf-cat { scroll-margin-top: calc(var(--nhf-top) + var(--nhf-bar) + 24px); }
.nhf .nhf-cat[hidden] { display: none; }
.nhf .nhf-cat + .nhf-cat { margin-top: 64px; }
.nhf .nhf-cat-lede { margin-top: 8px; max-width: 62ch; color: var(--color-ink-soft); }
.nhf .nhf-list { margin-top: 24px; }
.nhf .nhf-item { margin: 0 -16px; padding: 0; border-top: 1px solid var(--line-hair); border-radius: var(--radius-base); transition: background-color .3s var(--nhf-ease); }
.nhf .nhf-item[hidden] { display: none; }
.nhf .nhf-item:last-child { border-bottom: 1px solid var(--line-hair); }
.nhf .nhf-item[open] { background: var(--bg-mist); border-color: transparent; }
.nhf .nhf-item[open] + .nhf-item { border-top-color: transparent; }
.nhf .nhf-q { display: flex; gap: 24px; align-items: flex-start; justify-content: space-between; padding: 20px 16px; cursor: pointer; list-style: none; font: 500 16px/24px var(--nhf-text); color: var(--color-ink); }
.nhf .nhf-q::-webkit-details-marker { display: none; }
.nhf .nhf-q::marker { content: ''; }
.nhf .nhf-icon { position: relative; flex: none; width: 24px; height: 24px; }
.nhf .nhf-icon::before, .nhf .nhf-icon::after { content: ''; position: absolute; left: 5px; top: 11px; width: 14px; height: 2px; background: currentColor; transition: transform .35s var(--nhf-ease); }
.nhf .nhf-icon::after { transform: rotate(90deg); }
.nhf .nhf-item[open] .nhf-icon::after { transform: rotate(0deg); }
.nhf .nhf-a { max-width: 68ch; padding: 0 16px 24px; }
.nhf .nhf-a p + p { margin-top: 16px; }
.nhf .nhf-link { display: inline-flex; align-items: center; gap: 8px; font: 700 16px/24px var(--nhf-display); text-decoration: none; }
.nhf .nhf-link::after, .nhf .nhf-arr { content: ''; flex: none; width: 14px; height: 9px; background: currentColor; clip-path: polygon(0 40%, 70% 40%, 70% 0, 100% 50%, 70% 100%, 70% 60%, 0 60%); transition: transform .25s var(--nhf-ease); }
.nhf .nhf-link:hover::after { transform: translateX(3px); }
.nhf mark.nhf-hit { background: rgba(27, 81, 89, 0.14); color: inherit; padding: 0 1px; }
@media (min-width: 768px) {
    .nhf .nhf-item { margin: 0 -24px; }
    .nhf .nhf-q { padding: 24px; font-size: 18px; line-height: 28px; }
    .nhf .nhf-a { padding: 0 24px 24px; }
}
@media (min-width: 1024px) { .nhf .nhf-cat + .nhf-cat { margin-top: 96px; } }
/* smooth open where the browser can animate to auto height */
@supports (interpolate-size: allow-keywords) {
    .nhf .nhf-item { interpolate-size: allow-keywords; }
    .nhf .nhf-item::details-content { height: 0; overflow: clip; transition: height .4s var(--nhf-ease), content-visibility .4s allow-discrete; }
    .nhf .nhf-item[open]::details-content { height: auto; }
}
/* while searching, results read as one list */
.nhf.is-searching .nhf-cat-lede { display: none; }
.nhf.is-searching .nhf-h2 { font-size: 18px; line-height: 24px; color: var(--color-ink-soft); }
.nhf.is-searching .nhf-cat + .nhf-cat { margin-top: 48px; }
.nhf.is-searching .nhf-rep { display: none; }
.nhf .nhf-empty[hidden] { display: none; }
.nhf .nhf-empty-h { font: 700 24px/32px var(--nhf-display); color: var(--color-ink); }
.nhf .nhf-empty p + p { margin-top: 8px; }

/* ---- sales contact: compact row on phones, card from 640 ---- */
.nhf .nhf-rep { margin-top: 48px; display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 16px; align-items: center; }
.nhf .nhf-rep-photo { aspect-ratio: 3 / 4; border-radius: var(--radius-base); overflow: hidden; background: var(--bg-mist); }
.nhf .nhf-rep-photo img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 0; }
.nhf .nhf-rep-role, .nhf .nhf-rep-title { font-size: 14px; line-height: 20px; color: var(--color-ink-soft); }
.nhf .nhf-rep-name { font: 700 18px/24px var(--nhf-display); color: var(--color-ink); }
.nhf .nhf-rep-actions { margin-top: 4px; display: grid; }
.nhf .nhf-rep-tel { font: 700 16px/24px var(--nhf-display); text-decoration: none; }
.nhf .nhf-rep-mail { font-size: 14px; line-height: 20px; text-decoration: none; }
.nhf .nhf-rep-tel:hover, .nhf .nhf-rep-mail:hover { text-decoration: underline; }
@media (min-width: 640px) {
    .nhf .nhf-rep { grid-template-columns: 200px 1fr; gap: 0; align-items: stretch; border: 1px solid var(--line-hair); border-radius: var(--radius-base); overflow: hidden; }
    .nhf .nhf-rep-photo { aspect-ratio: auto; border-radius: 0; display: flex; align-items: flex-end; }
    .nhf .nhf-rep-photo img { height: auto; object-fit: contain; }
    .nhf .nhf-rep-body { padding: 32px; align-self: center; }
    .nhf .nhf-rep-name { margin-top: 4px; font-size: 24px; line-height: 32px; }
    .nhf .nhf-rep-actions { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 8px; }
    .nhf .nhf-rep-tel, .nhf .nhf-rep-mail { display: inline-flex; align-items: center; height: 48px; padding: 0 24px; border-radius: var(--radius-base); font: 700 16px/24px var(--nhf-display); transition: background-color .2s var(--nhf-ease); }
    .nhf .nhf-rep-tel { background: var(--color-brand); color: #fff; }
    .nhf .nhf-rep-tel:hover { background: var(--color-brand-hover); color: #fff; text-decoration: none; }
    .nhf .nhf-rep-mail { color: var(--color-ink); box-shadow: inset 0 0 0 1px var(--line-hair); }
    .nhf .nhf-rep-mail:hover { background: var(--bg-mist); color: var(--color-ink); text-decoration: none; }
}

/* ---- buttons (house button: flat, 4px, 48px, Montserrat Bold) ---- */
.nhf .nhf-btn { display: inline-flex; align-items: center; justify-content: center; gap: 12px; height: 48px; padding: 0 24px; border-radius: var(--radius-base); font: 700 16px/24px var(--nhf-display); text-decoration: none; transition: background-color .2s var(--nhf-ease); }
.nhf .nhf-btn--dark { background: var(--color-ink); color: #fff; }
.nhf .nhf-btn--dark:hover { background: #2A2A2A; color: #fff; }
.nhf .nhf-btn--light { background: #fff; color: var(--color-ink); }
.nhf .nhf-btn--light:hover { background: var(--bg-mist); color: var(--color-ink); }

/* ---- showroom ---- */
.nhf .nhf-visit { background: var(--bg-mist); }
.nhf .nhf-visit-grid { display: grid; gap: 32px; padding-top: 64px; padding-bottom: 64px; align-items: center; }
.nhf .nhf-visit-img { aspect-ratio: 3 / 2; border-radius: var(--radius-base); overflow: hidden; }
.nhf .nhf-visit-img img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; }
.nhf .nhf-visit-q { margin-top: 16px; font-size: 18px; line-height: 24px; }
.nhf .nhf-visit-copy > p { margin-top: 8px; max-width: 46ch; }
.nhf .nhf-addr { margin-top: 24px; font: 700 16px/24px var(--nhf-display); color: var(--color-ink); }
.nhf .nhf-addr span { display: block; font: 400 16px/24px var(--nhf-text); color: var(--color-body); }
.nhf .nhf-addr a { color: inherit; text-decoration: none; }
.nhf .nhf-addr a:hover { color: var(--color-brand); text-decoration: underline; }
.nhf .nhf-map { margin: 24px 0 0; height: 240px; border-radius: var(--radius-base); overflow: hidden; background: var(--bg-mist); }
.nhf .nhf-map iframe { display: block; width: 100%; height: 100%; border: 0; }
@media (min-width: 900px) {
    .nhf .nhf-visit-grid { grid-template-columns: 7fr 5fr; gap: 64px; padding-top: 96px; padding-bottom: 96px; align-items: stretch; }
    .nhf .nhf-visit-img { aspect-ratio: auto; min-height: 100%; }
    .nhf .nhf-visit-copy { align-self: center; }
}

/* ---- closing contact ---- */
.nhf .nhf-close { background: var(--color-brand-deep); color: #fff; }
.nhf .nhf-close-grid { display: grid; gap: 24px; padding-top: 64px; padding-bottom: 64px; }
.nhf .nhf-h2--on-deep { color: #fff; }
.nhf .nhf-close-lede { margin-top: 8px; color: rgba(255, 255, 255, 0.8); }
.nhf .nhf-close-lines { margin-top: 16px; font: 700 18px/24px var(--nhf-display); }
.nhf .nhf-close-lines a { color: #fff; text-decoration: none; }
.nhf .nhf-close-lines a:hover { color: #fff; text-decoration: underline; }
@media (min-width: 900px) { .nhf .nhf-close-grid { grid-template-columns: 1fr auto; align-items: center; padding-top: 80px; padding-bottom: 80px; } }

@media (prefers-reduced-motion: reduce) {
    .nhf *, .nhf *::before, .nhf *::after, .nhf .nhf-item::details-content { transition-duration: 0s; }
}

/* ==========================================================================
   Om oss (CMS page 4, _files/partials/page_about.mustache)

   Designed as about-concepts/e.html with the header "Mosaik" and the phone
   layout "mobil E". Copy is David's doc of 2026-09-25. Headings have no
   closing full stop, by request.

   Hero: on phones the five photos fill the first screen edge to edge (the
   theme header subtracted, --nha-top, set by initAbout), under a black
   gradient with the heading and paragraph in white at the bottom. From 900px
   it is a 4 x 2 grid with the text in a grey tile. The tiles rise into place
   once on load (clip-path); reduced motion shows them at once.

   Rooted in .nha, two classes per selector: Tailwind is linked after this
   sheet, so a bare single class loses to any utility.
   ========================================================================== */

.nha {
    --nha-top: 92px;
    --nha-gutter: 16px;
    --nha-ease: cubic-bezier(0.16, 1, 0.3, 1);
    --nha-display: 'Montserrat', -apple-system, BlinkMacSystemFont, sans-serif;
    --nha-text: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    color: var(--color-body);
    font: 400 16px/24px var(--nha-text);
}
@media (min-width: 768px) { .nha { --nha-gutter: 24px; } }
@media (min-width: 1100px) { .nha { --nha-gutter: 48px; } }

.nha .nha-wrap { max-width: 1280px; margin: 0 auto; padding: 0 var(--nha-gutter); }
.nha p, .nha blockquote, .nha figure, .nha dl, .nha dd, .nha ul { margin: 0; }
.nha ul { padding: 0; list-style: none; }
.nha a { color: var(--color-brand); text-underline-offset: 3px; }
.nha a:hover { color: var(--color-brand-hover); }
.nha .nha-h1, .nha .nha-h2, .nha .nha-h3 { margin: 0; font-family: var(--nha-display); font-weight: 700; color: var(--color-ink); text-wrap: balance; }
.nha .nha-h1 { font-size: 32px; line-height: 40px; }
.nha .nha-h2 { font-size: 24px; line-height: 32px; }
.nha .nha-h3 { font-size: 18px; line-height: 24px; }
@media (min-width: 768px) {
    .nha .nha-h1 { font-size: 48px; line-height: 56px; }
    .nha .nha-h2 { font-size: 32px; line-height: 40px; }
    .nha .nha-h3 { font-size: 24px; line-height: 32px; }
}
.nha .nha-num { font-variant-numeric: tabular-nums; white-space: nowrap; }
.nha .nha-p { margin-top: 16px; max-width: 62ch; }
.nha .nha-ingress { font-size: 18px; line-height: 28px; max-width: 62ch; }
@media (min-width: 768px) { .nha .nha-ingress { font-size: 20px; line-height: 30px; } }
.nha .nha-media { position: relative; border-radius: var(--radius-base); overflow: hidden; background: var(--bg-mist); }
.nha .nha-media img { display: block; width: 100%; height: 100%; object-fit: cover; }
.nha .nha-sec { padding: 64px 0; }
@media (min-width: 900px) { .nha .nha-sec { padding: 96px 0; } }

/* Links and buttons — flat, no lift. Text links get a 44px tap area. */
.nha .nha-arr { flex: none; width: 14px; height: 9px; background: currentColor; clip-path: polygon(0 40%, 70% 40%, 70% 0, 100% 50%, 70% 100%, 70% 60%, 0 60%); transition: transform .25s var(--nha-ease); }
.nha .nha-link { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; margin-block: -10px; font: 700 16px/24px var(--nha-display); text-decoration: none; }
.nha .nha-link:hover .nha-arr, .nha .nha-btn:hover .nha-arr { transform: translateX(3px); }
.nha .nha-btn { display: inline-flex; align-items: center; justify-content: center; gap: 12px; height: 48px; padding: 0 24px; border-radius: var(--radius-base); font: 700 16px/24px var(--nha-display); text-decoration: none; transition: background-color .2s var(--nha-ease); }
.nha .nha-btn--brand { background: var(--color-brand); color: #fff; }
.nha .nha-btn--brand:hover { background: var(--color-brand-hover); color: #fff; }
.nha .nha-btn--ghost { background: transparent; color: var(--color-ink); box-shadow: inset 0 0 0 1px var(--line-hair); }
.nha .nha-btn--ghost:hover { background: #fff; color: var(--color-ink); }

/* ---- 1 · hero: Mosaik ---- */
@keyframes nha-rise { from { clip-path: inset(100% 0 0 0); } to { clip-path: inset(0); } }
.nha .nha-mosaic { display: grid; }
.nha .nha-tile { overflow: hidden; }
.nha .nha-tile img { display: block; width: 100%; height: 100%; object-fit: cover; }
.nha .nha-tile:not(.nha-t-text) { background: var(--color-ink); animation: nha-rise .9s var(--nha-ease) both; }
.nha .nha-t-tall { animation-delay: .05s; }
.nha .nha-t-a { animation-delay: .15s; }
.nha .nha-t-b { animation-delay: .25s; }
.nha .nha-t-c { animation-delay: .35s; }
.nha .nha-t-d { animation-delay: .45s; }
.nha .nha-lede { margin-top: 16px; font-size: 18px; line-height: 28px; }

/* Phones and tablets: the collage is the backdrop, text on a black gradient */
@media (max-width: 899px) {
    .nha .nha-hero .nha-wrap { padding: 0; }
    .nha .nha-mosaic {
        position: relative; isolation: isolate;
        height: clamp(560px, calc(100svh - var(--nha-top)), 860px);
        grid-template-columns: 3fr 2fr; grid-template-rows: repeat(3, minmax(0, 1fr));
        gap: 2px; background: var(--color-ink);
    }
    .nha .nha-t-tall { grid-column: 1; grid-row: 1 / 3; }
    .nha .nha-t-a { grid-column: 2; grid-row: 1; }
    .nha .nha-t-b { grid-column: 2; grid-row: 2; }
    .nha .nha-t-c { grid-column: 1; grid-row: 3; }
    .nha .nha-t-d { grid-column: 2; grid-row: 3; }
    .nha .nha-mosaic::after { content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: linear-gradient(180deg, rgba(17, 17, 17, 0) 12%, rgba(17, 17, 17, 0.74) 44%, rgba(17, 17, 17, 0.95) 100%); }
    .nha .nha-t-text { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 0 var(--nha-gutter) 72px; }
    .nha .nha-t-text .nha-h1 { color: #fff; }
    .nha .nha-t-text .nha-lede { color: rgba(255, 255, 255, 0.9); max-width: 60ch; }
}

/* Desktop: a 4 x 2 grid, text in a grey tile */
@media (min-width: 900px) {
    .nha .nha-hero { padding: 32px 0 96px; }
    /* Översta raden växer om texten behöver mer plats än 320 px, i stället för
       att rubriken klipps av upptill (rutan har overflow: hidden). */
    .nha .nha-mosaic { grid-template-columns: repeat(4, 1fr); grid-template-rows: minmax(320px, auto) 320px; gap: 16px; }
    .nha .nha-tile { border-radius: var(--radius-base); }
    .nha .nha-t-text { grid-column: 1 / 3; grid-row: 1; background: var(--bg-mist); padding: 40px; display: flex; flex-direction: column; justify-content: flex-end; }
    .nha .nha-lede { font-size: 16px; line-height: 24px; color: var(--color-body); }
    .nha .nha-t-text .nha-h1 { font-size: 36px; line-height: 44px; }
    .nha .nha-t-tall { grid-column: 3; grid-row: 1 / 3; }
    .nha .nha-t-a { grid-column: 4; grid-row: 1; }
    .nha .nha-t-b { grid-column: 1; grid-row: 2; }
    .nha .nha-t-c { grid-column: 2; grid-row: 2; }
    .nha .nha-t-d { grid-column: 4; grid-row: 2; }
}

/* ---- 2 · från ax till limpa ---- */
.nha .nha-ax-grid { display: grid; gap: 16px; }
.nha .nha-ax-img { margin-top: 16px; aspect-ratio: 3 / 2; }
@media (min-width: 900px) {
    .nha .nha-ax { border-top: 1px solid var(--line-hair); }
    .nha .nha-ax-grid { grid-template-columns: 4fr 8fr; gap: 64px; }
    .nha .nha-ax-img { grid-column: 1 / -1; margin-top: 16px; aspect-ratio: 21 / 9; }
}

/* ---- 3 · social proof ---- */
.nha .nha-proof { padding-top: 0; }
.nha .nha-proof-grid { display: grid; gap: 32px; }
.nha .nha-proof-line { font: 700 24px/32px var(--nha-display); color: var(--color-ink); max-width: 28ch; }
.nha .nha-proof-line .nha-num { color: var(--color-brand); }
.nha .nha-review { background: var(--bg-mist); border-radius: var(--radius-base); padding: 24px; }
.nha .nha-review-meta { font-size: 14px; line-height: 20px; color: var(--color-ink-soft); }
.nha .nha-stars { color: #F2C41B; letter-spacing: 2px; }
.nha .nha-review-q { margin-top: 12px; font-size: 18px; line-height: 28px; color: var(--color-ink); }
.nha .nha-review-q p::before { content: '”'; }
.nha .nha-review-q p::after { content: '”'; }
.nha .nha-review-by { margin-top: 12px; font: 700 14px/20px var(--nha-display); color: var(--color-ink); }
@media (min-width: 900px) {
    .nha .nha-proof-grid { grid-template-columns: 7fr 5fr; gap: 64px; align-items: center; }
    .nha .nha-proof-line { font-size: 32px; line-height: 40px; }
    .nha .nha-review { padding: 32px; }
}

/* ---- 4 · så tänker vi ---- */
.nha .nha-build { border-top: 1px solid var(--line-hair); }
.nha .nha-build-grid { display: grid; gap: 32px; }
.nha .nha-build-img { aspect-ratio: 3 / 2; }
.nha .nha-rows { margin-top: 32px; }
.nha .nha-rows > div { display: grid; gap: 4px; padding: 16px 0; border-top: 1px solid var(--line-hair); }
.nha .nha-rows > div:last-child { border-bottom: 1px solid var(--line-hair); }
.nha .nha-rows dt { font: 700 16px/24px var(--nha-display); color: var(--color-ink); }
.nha .nha-together { margin-top: 24px; }
@media (min-width: 600px) {
    .nha .nha-rows > div { grid-template-columns: 170px 1fr; gap: 16px; }
    .nha .nha-build-img { aspect-ratio: 4 / 5; }
}
@media (min-width: 900px) {
    .nha .nha-build-grid { grid-template-columns: 1fr 1fr; gap: 64px; align-items: start; }
    .nha .nha-build-img { position: sticky; top: calc(var(--nha-top) + 16px); }
    .nha .nha-rows > div { grid-template-columns: 200px 1fr; }
}

/* ---- 5 · kunder (Deep Brand) ---- */
.nha .nha-co { background: var(--color-brand-deep); color: rgba(255, 255, 255, 0.82); }
.nha .nha-co .nha-h2, .nha .nha-co .nha-h3 { color: #fff; }
/* Tre förtroendepunkter under kundrubriken — samma som Företagssidan
   (.b2b-co-proof): staplade på mobil, en rad med mittpunkt från 900 px. */
.nha .nha-co-proof { margin: 24px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; font: 400 15px/22px var(--nha-display); color: rgba(255, 255, 255, 0.86); }
.nha .nha-co-proof-star { color: #F5B301; }
@media (min-width: 900px) {
    .nha .nha-co-proof { flex-direction: row; flex-wrap: wrap; gap: 8px 0; }
    .nha .nha-co-proof li + li::before { content: "·"; margin: 0 20px; color: rgba(255, 255, 255, 0.5); }
}
.nha .nha-cases { margin-top: 48px; display: grid; gap: 48px; }
.nha .nha-case-img { aspect-ratio: 3 / 2; background: rgba(255, 255, 255, 0.06); }
.nha .nha-case .nha-h3 { margin-top: 24px; }
.nha .nha-case-sub { margin-top: 4px; font-size: 14px; line-height: 20px; color: rgba(255, 255, 255, 0.7); }
.nha .nha-case-p { margin-top: 12px; max-width: 58ch; }
.nha .nha-co .nha-link { margin-top: 16px; color: #fff; }
.nha .nha-co .nha-link:hover { color: #fff; }
.nha .nha-quote { margin-top: 64px; padding-top: 32px; border-top: 1px solid rgba(255, 255, 255, 0.18); max-width: 720px; }
.nha .nha-quote blockquote p { font: 700 24px/32px var(--nha-display); color: #fff; }
.nha .nha-quote blockquote p::before { content: '”'; }
.nha .nha-quote blockquote p::after { content: '”'; }
.nha .nha-quote figcaption { margin-top: 16px; font-size: 14px; line-height: 20px; }
.nha .nha-quote figcaption b { margin-right: 8px; font: 700 14px/20px var(--nha-display); color: #fff; }
.nha .nha-co-cta { margin-top: 48px; }
.nha .nha-btn--light { background: #fff; color: var(--color-ink); }
.nha .nha-btn--light:hover { background: var(--bg-mist); color: var(--color-ink); }
@media (min-width: 900px) {
    .nha .nha-cases { grid-template-columns: 1fr 1fr; }
    .nha .nha-quote blockquote p { font-size: 32px; line-height: 40px; }
}

/* ---- 6 · besök oss ---- */
.nha .nha-visit { background: var(--bg-mist); }
.nha .nha-visit-grid { display: grid; gap: 32px; }
.nha .nha-visit-img { aspect-ratio: 3 / 2; }
.nha .nha-visit-img img { object-position: 45% 35%; }
.nha .nha-addr { margin-top: 24px; font: 700 16px/24px var(--nha-display); color: var(--color-ink); }
.nha .nha-addr span { display: block; font: 400 16px/24px var(--nha-text); color: var(--color-body); }
.nha .nha-addr-map { display: inline-flex; align-items: center; min-height: 44px; margin-block: -10px; color: inherit; text-decoration: underline; text-decoration-color: var(--line-hair); text-underline-offset: 4px; }
.nha .nha-addr-map:hover { color: var(--color-brand); text-decoration-color: currentColor; }
.nha .nha-actions { margin-top: 24px; display: grid; gap: 8px; }
@media (min-width: 600px) { .nha .nha-actions { display: flex; flex-wrap: wrap; } }
@media (min-width: 900px) {
    .nha .nha-visit-grid { grid-template-columns: 5fr 7fr; gap: 64px; align-items: center; }
    .nha .nha-visit-copy { order: -1; }
}

@media (prefers-reduced-motion: reduce) {
    .nha .nha-tile { animation: none; }
    .nha *, .nha *::before, .nha *::after { transition-duration: 0s; }
}

/* PDP fit note (datafield_325) — the field's text under the size picker,
   first sentence bold (markup in product.mustache). Desktop: one line.
   Phone: the bold sentence on its own line, the rest underneath. */
.nh-fit {
    display: flex;
    gap: 12px;
    align-items: center;
    margin-top: 14px;
    padding: 12px 14px;
    background: var(--bg-mist);
    border-radius: var(--radius-base);
    font-size: 13px;
    line-height: 1.5;
    color: var(--color-body);
}
.nh-fit-ico {
    flex: 0 0 auto;
    width: 18px;
    height: 18px;
    color: var(--color-brand);
}
.nh-fit-h {
    font-family: Montserrat, sans-serif;
    font-weight: 700;
    color: var(--color-ink);
}
@media (max-width: 767px) {
    .nh-fit-h {
        display: block;
    }
}

/* ==========================================================================
   Footer E (footer.mustache). Black, plain link lists after David's Hears
   reference, 2026-10-09. Three hardcoded link columns. Phone: two columns side by side,
   nothing folded away. Desktop: link columns + newsletter as the last column.
   ========================================================================== */
.nh-ft {
    --nh-ft-h: #ffffff;
    --nh-ft-link: rgba(255, 255, 255, 0.74);
    --nh-ft-mute: rgba(255, 255, 255, 0.56);
    --nh-ft-line: rgba(255, 255, 255, 0.14);
    background: var(--color-ink);
    color: var(--nh-ft-link);
    font-family: Inter, sans-serif;
    font-size: 16px;
    line-height: 24px;
}
.nh-ft-wrap {
    max-width: 1280px;
    margin: 0 auto;
    padding: 48px 16px 0;
}
.nh-ft a {
    color: inherit;
    text-decoration: none;
}
.nh-ft a:hover {
    color: var(--nh-ft-h);
    text-decoration: underline;
    text-underline-offset: 3px;
}
.nh-ft :focus-visible {
    outline: 2px solid #ffffff;
    outline-offset: 2px;
}
.nh-ft-h {
    margin: 0 0 16px;
    font-family: Montserrat, sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 24px;
    color: var(--nh-ft-h);
}
.nh-ft-map {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 48px 24px;
}
.nh-ft-map ul {
    margin: 0;
    padding: 0;
    list-style: none;
}
.nh-ft-map li + li {
    margin-top: 4px;
}
.nh-ft-map a {
    display: inline-block;
    padding: 6px 0;
}
.nh-ft-side {
    margin-top: 48px;
}
.nh-ft-social {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 24px 0 0 -12px;
    padding: 0;
    list-style: none;
}
.nh-ft-social a {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    color: var(--nh-ft-link);
}
.nh-ft-social a:hover {
    color: var(--nh-ft-h);
}
.nh-ft-social svg {
    width: 20px;
    height: 20px;
}
.nh-ft-form {
    display: flex;
    gap: 8px;
}
.nh-ft-form input {
    flex: 1;
    min-width: 0;
    width: 100%;
    height: 48px;
    padding: 0 16px;
    border: 1px solid transparent;
    border-radius: var(--radius-base);
    background: #ffffff;
    color: var(--color-ink);
    font: 400 16px/24px Inter, sans-serif;
}
.nh-ft-form input::placeholder {
    color: var(--color-ink-soft);
}
.nh-ft-form input:focus {
    outline: none;
    border-color: var(--color-brand);
    box-shadow: inset 0 0 0 1px var(--color-brand);
}
.nh-ft-form button {
    flex: none;
    height: 48px;
    padding: 0 24px;
    border: 0;
    border-radius: var(--radius-base);
    background: var(--color-brand);
    color: #ffffff;
    font: 700 16px/24px Montserrat, sans-serif;
    cursor: pointer;
    transition: background-color 0.2s ease;
}
.nh-ft-form button:hover {
    background: var(--color-brand-hover);
}
.nh-ft-fine {
    margin: 8px 0 0;
    font-size: 12px;
    line-height: 16px;
    color: var(--nh-ft-mute);
}
.nh-ft-sr {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
.nh-ft-bottom {
    display: grid;
    gap: 24px;
    margin-top: 48px;
    padding: 24px 0 32px;
    border-top: 1px solid var(--nh-ft-line);
}
.nh-ft-co {
    margin: 0;
    font-size: 14px;
    line-height: 24px;
    color: var(--nh-ft-mute);
}
.nh-ft-co span {
    display: block;
}
.nh-ft-num {
    font-variant-numeric: tabular-nums;
}
.nh-ft-pay {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}
.nh-ft-pay li {
    display: grid;
    place-items: center;
    width: 52px;
    height: 32px;
    padding: 6px 8px;
    border-radius: var(--radius-base);
    background: #ffffff;
}
.nh-ft-pay li.nh-ft-pay--tight {
    padding: 0 2px;
}
.nh-ft-pay img {
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
}
@media (min-width: 768px) {
    .nh-ft-wrap {
        padding-left: 24px;
        padding-right: 24px;
    }
}
@media (min-width: 900px) {
    .nh-ft-wrap {
        padding: 80px 48px 0;
    }
    .nh-ft-top {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.4fr);
        gap: 32px;
    }
    .nh-ft-map {
        display: contents;
    }
    .nh-ft-side {
        margin-top: 0;
        grid-column: -2;
    }
    .nh-ft-bottom {
        grid-template-columns: 1fr auto;
        align-items: end;
        margin-top: 64px;
        padding: 0 0 64px;
        border-top: 0;
    }
}