/** Shopify CDN: Minification failed

Line 1194:2 Unexpected "{"
Line 1194:3 Expected identifier but found "%"
Line 1195:31 Expected identifier but found whitespace
Line 1195:41 Expected identifier but found whitespace
Line 1205:3 Expected identifier but found "%"

**/
/* SHOPIFY_STYLESHEETS_VERSION: 1.0 */


/* CSS from section stylesheet tags */
/* START_SECTION:anmeld (INDEX:1) */
.anmeld { --anmeld-accent: #C03527; background: var(--color-paper); padding-bottom: clamp(64px, 9vw, 120px); }
  .anmeld__head { padding: clamp(16px, 2vw, 28px) var(--tile-inset) 0; }
  .anmeld__crumbs {
    display: flex; align-items: center; gap: 8px;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 11px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-mute);
  }
  .anmeld__crumbs a { color: inherit; background-image: none; }
  .anmeld__crumbs a:hover { color: var(--color-ink); }

  .anmeld__card {
    box-sizing: border-box;
    width: min(560px, calc(100% - 2 * var(--tile-inset) - 10px));
    margin: clamp(40px, 7vw, 96px) auto 0;
    padding: clamp(36px, 5vw, 56px) clamp(24px, 3.5vw, 48px);
    background: var(--color-paper);
    border: 2px solid var(--color-ink);
    box-shadow: 10px 10px 0 var(--anmeld-accent);
  }
  .anmeld__title {
    margin: 0;
    font-family: var(--font-display--family); font-weight: var(--font-display--weight);
    font-size: clamp(1.75rem, 4vw, 2.75rem); line-height: 0.95;
    letter-spacing: var(--tracking-display); text-transform: uppercase; color: var(--color-ink);
  }
  .anmeld__text { margin: 14px 0 0; max-width: 46ch; font-size: 15px; line-height: 1.55; color: var(--color-ink-soft); }
  .anmeld__label {
    display: block; padding: 0; margin: 0 0 6px;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 11px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink);
  }
  .anmeld__label span { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--color-ink-mute); }
  .anmeld__navn { margin-top: 24px; }
  .anmeld__input {
    box-sizing: border-box; width: 100%; min-height: 46px; padding: 12px 14px;
    border: 1px solid var(--color-line); border-radius: var(--corner-radius-default);
    background: var(--color-paper); color: var(--color-ink);
    font-family: var(--font-primary--family); font-size: 15px;
  }
  .anmeld__input::placeholder { color: var(--color-ink-mute); opacity: 0.6; }
  .anmeld__input:focus { outline: 2px solid var(--color-ink); outline-offset: -1px; }
  .anmeld__input--code { letter-spacing: 0.3em; font-variant-numeric: tabular-nums; }
  .anmeld__textarea { resize: vertical; line-height: 1.5; }

  .anmeld__liste { margin-top: 28px; display: grid; gap: 20px; }
  .anmeld__vare { padding-top: 20px; border-top: 1px solid var(--color-line-soft); }
  .anmeld__vare-top { display: flex; align-items: center; gap: 12px; }
  .anmeld__thumb {
    flex: 0 0 auto; width: 56px; height: 56px; overflow: hidden;
    border: 1px solid var(--color-line); background: var(--color-paper);
  }
  .anmeld__thumb img { width: 100%; height: 100%; object-fit: contain; display: block; }
  .anmeld__vare-title { margin: 0; font-family: var(--font-primary--family); font-weight: 600; font-size: 15px; line-height: 1.3; color: var(--color-ink); }
  .anmeld__form { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
  .anmeld__form--login { margin-top: 22px; }

  /* Login-trin og ordreliste (indgang 2). Samme kort, samme knap. */
  .anmeld__ordrer { margin-top: 24px; display: grid; gap: 18px; }
  .anmeld__ordre { padding-top: 18px; border-top: 1px solid var(--color-line-soft); }
  .anmeld__ordre-top { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: var(--color-ink); }
  .anmeld__ordre-dato { font-size: 12px; color: var(--color-ink-mute); white-space: nowrap; }
  .anmeld__ordre-varer { margin: 6px 0 12px; font-size: 13px; line-height: 1.5; color: var(--color-ink-soft); }
  .anmeld__small a { color: inherit; }

  /* Stjernerne: radio-knapperne er visuelt skjulte men fokuserbare; labels er
     tegnene. Valgt = alle stjerner op til og med den valgte er gule; hover
     forhåndsviser på samme måde. */
  .anmeld__stars { margin: 0; padding: 0; border: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 2px; }
  .anmeld__stars legend { width: 100%; }
  .anmeld__stars input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .anmeld__stars label { cursor: pointer; font-size: 30px; line-height: 1; color: var(--color-line); transition: color 120ms ease; user-select: none; }
  .anmeld__stars:has(input:checked) label { color: #E0A431; }
  .anmeld__stars input:checked ~ label { color: var(--color-line); }
  .anmeld__stars input:checked + label { color: #E0A431; }
  .anmeld__stars:hover label { color: #E0A431; }
  .anmeld__stars label:hover ~ label { color: var(--color-line); }
  .anmeld__stars input:focus-visible + label { outline: 2px solid var(--color-ink); outline-offset: 2px; }

  .anmeld__btn {
    display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
    align-self: flex-start; min-height: 46px; padding: 0 24px; border: 0; cursor: pointer;
    border-radius: var(--corner-radius-default);
    background: var(--color-ink); color: var(--color-paper);
    font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase; text-decoration: none; background-image: none;
    transition: background-color var(--transition-base);
  }
  .anmeld__btn:hover { background: var(--anmeld-accent); color: var(--color-paper); }
  .anmeld__btn[disabled] { opacity: 0.5; cursor: default; }
  .anmeld__hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }
  .anmeld__done { margin: 12px 0 0; font-size: 14px; color: var(--color-green); }
  .anmeld__error { margin: 8px 0 0; font-size: 13px; color: var(--anmeld-accent); }
  .anmeld__small { margin: 28px 0 0; font-size: 12px; line-height: 1.6; color: var(--color-ink-mute); }
/* END_SECTION:anmeld */

/* START_SECTION:article (INDEX:2) */
/* ============ Artiklens ramme ============ */
  /* HVID (Mikkel 2026-09-03: "goer baggrunden bag alt det her med guides hvid");
     overtrumfer cream=laesestof-husreglen for guide-fladerne. */
  .hd-artikel { background-color: var(--color-paper); }
  .hd-artikel__inner {
    max-width: 820px;
    margin: 0 auto;
    padding: clamp(24px, 3vw, 48px) clamp(20px, 3vw, 40px) 0;
  }

  .hd-artikel__sti {
    display: flex;
    gap: 8px;
    font-family: var(--font-primary--family);
    font-size: 13px;
    color: var(--color-ink-mute);
  }
  .hd-artikel__sti a { color: inherit; background-image: none; }
  .hd-artikel__sti a:hover { color: var(--color-ink); }

  .hd-artikel__hoved { margin-top: 22px; }
  .hd-artikel__titel {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy, 900);
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    font-size: clamp(23px, 3.4vw, 40px);
    line-height: 1.04;
    color: var(--color-ink);
    margin: 0;
  }
  .hd-artikel__meta {
    margin: 14px 0 0;
    font-family: var(--font-primary--family);
    font-size: 13px;
    color: var(--color-ink-mute);
  }

  .hd-artikel__topbillede {
    margin: 26px 0 0;
  }
  .hd-artikel__topbillede img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 16 / 10;
    object-fit: cover;
  }

  /* ============ Broedteksten (hd-art) ============ */
  .hd-art {
    margin-top: clamp(28px, 4vw, 44px);
    font-family: var(--font-primary--family);
    font-size: 16.5px;
    line-height: 1.65;
    color: var(--color-ink);
  }
  .hd-art p { margin: 0 0 18px; }
  .hd-art a {
    color: var(--color-ink);
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-color: var(--color-olive);
    background-image: none;
  }
  .hd-art a:hover { text-decoration-color: var(--color-ink); }

  .hd-art h2 {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy, 900);
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    font-size: clamp(17px, 2vw, 22px);
    line-height: 1.15;
    margin: 44px 0 14px;
    scroll-margin-top: calc(var(--sticky-stack-pinned) + 24px);
  }
  .hd-art h3 {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 17px;
    margin: 26px 0 8px;
  }

  .hd-art ul { margin: 0 0 18px; padding-left: 22px; }
  .hd-art li { margin-bottom: 9px; }

  /* Ingen uppercase/mono mikro-labels i laesestof (husregel fra artikel-laget):
     etiketten er en lille graa udgave af broedtekstfonten, normal case. */
  .hd-art__label {
    font-size: 13px;
    font-weight: 600;
    color: var(--color-ink-mute);
    margin: 0 0 6px;
  }

  .hd-art__short {
    background-color: var(--color-paper);
    border: 1px solid var(--color-line);
    padding: 20px 22px;
    margin-bottom: 26px;
  }
  .hd-art__short p:last-child { margin-bottom: 0; }

  .hd-art__toc {
    margin-bottom: 30px;
  }
  .hd-art__toc ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  .hd-art__toc a {
    display: inline-block;
    padding: 7px 12px;
    border: 1px solid var(--color-line);
    background-color: var(--color-paper);
    font-size: 13.5px;
    color: var(--color-ink-soft);
    text-decoration: none;
    transition: border-color var(--transition-base), color var(--transition-base);
  }
  .hd-art__toc a:hover { border-color: var(--color-ink); color: var(--color-ink); }

  .hd-art__fig {
    margin: 26px 0;
    background-color: var(--color-paper);
    border: 1px solid var(--color-line);
    padding: 18px;
  }
  .hd-art__fig svg { display: block; width: 100%; height: auto; }
  .hd-art__fig svg text { font-family: var(--font-primary--family); }
  .hd-art__fig--photo { padding: 0; overflow: hidden; }
  .hd-art__fig--photo img { display: block; width: 100%; height: auto; }
  .hd-art__fig figcaption {
    padding: 12px 18px 2px;
    font-size: 13px;
    color: var(--color-ink-mute);
  }
  .hd-art__fig--photo figcaption { padding: 12px 18px 14px; }

  .hd-art__tablewrap {
    margin: 26px 0;
    overflow-x: auto;
    border: 1px solid var(--color-line);
    background-color: var(--color-paper);
  }
  .hd-art__tablewrap table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14.5px;
    line-height: 1.5;
  }
  .hd-art__tablewrap th,
  .hd-art__tablewrap td {
    text-align: left;
    vertical-align: top;
    padding: 12px 16px;
    border-bottom: 1px solid var(--color-line-soft);
    min-width: 130px;
  }
  .hd-art__tablewrap th:first-child,
  .hd-art__tablewrap td:first-child { min-width: 110px; }
  .hd-art__tablewrap thead th {
    font-weight: 600;
    border-bottom: 1px solid var(--color-line);
  }
  .hd-art__tablewrap tbody td:first-child { font-weight: 600; }
  .hd-art__tablewrap tbody tr:last-child td { border-bottom: 0; }

  .hd-art__tip {
    background-color: var(--color-blush);
    padding: 18px 22px;
    margin: 26px 0;
  }
  .hd-art__tip .hd-art__label { color: var(--color-ink-soft); }
  .hd-art__tip p:last-child { margin-bottom: 0; }

  .hd-art__cta {
    background-color: var(--color-bg-soft);
    padding: 18px 22px;
    margin: 30px 0 0;
  }
  .hd-art__cta p { margin: 0; }

  /* ============ Fra guiden ============ */
  /* Varer paa hvidt (husreglen), som en stille to-korts udgave af gitteret. */
  .hd-artikel__produkter {
    margin-top: clamp(36px, 5vw, 56px);
    background-color: var(--color-paper);
    border-top: 1px solid var(--color-line);
    border-bottom: 1px solid var(--color-line);
  }
  .hd-artikel__produkter-inner {
    max-width: 820px;
    margin: 0 auto;
    padding: clamp(28px, 4vw, 44px) clamp(20px, 3vw, 40px);
  }
  .hd-artikel__produkter-titel {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy, 900);
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    font-size: clamp(17px, 2vw, 22px);
    margin: 0 0 20px;
    color: var(--color-ink);
  }
  .hd-artikel__produktraekke {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
    gap: 20px;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .hd-artikel__produkt {
    display: block;
    background-image: none;
    color: var(--color-ink);
  }
  .hd-artikel__produkt-billede {
    display: block;
    aspect-ratio: 4 / 5;
    background-color: var(--color-paper);
    border: 1px solid var(--color-line-soft);
    overflow: hidden;
  }
  .hd-artikel__produkt-billede img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 10%;
  }
  .hd-artikel__produkt-navn {
    display: block;
    margin-top: 10px;
    font-family: var(--font-primary--family);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.35;
  }
  .hd-artikel__produkt:hover .hd-artikel__produkt-navn { text-decoration: underline; text-underline-offset: 3px; }
  .hd-artikel__produkt-pris {
    display: block;
    margin-top: 4px;
    font-family: var(--font-primary--family);
    font-size: 14px;
    color: var(--color-ink-soft);
  }
  .hd-artikel__produkt-pris s { margin-left: 8px; color: var(--color-ink-mute); }

  @media (max-width: 549px) {
    .hd-artikel__produktraekke { grid-template-columns: 1fr 1fr; gap: 12px; }
  }
/* END_SECTION:article */

/* START_SECTION:blog (INDEX:3) */
/* Hvid som resten af guide-fladerne (Mikkel 2026-09-03). */
  .hd-blogindex { background-color: var(--color-paper); }
  .hd-blogindex__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(32px, 4vw, 56px) clamp(24px, 3vw, 40px) clamp(48px, 5vw, 72px);
  }
  .hd-blogindex__hoved { margin-bottom: clamp(28px, 4vw, 44px); }
  .hd-blogindex__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .hd-blogindex__titel {
    margin-top: 10px;
    font-size: clamp(30px, 4.5vw, 56px);
    color: var(--color-ink);
  }
  .hd-blogindex__brev { margin-top: 8px; }
  .hd-blogindex__brev a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 3px; }
  .hd-blogindex__lede {
    margin-top: 12px;
    max-width: 52ch;
    font-family: var(--font-primary--family);
    font-size: 15.5px;
    line-height: 1.55;
    color: var(--color-ink-soft);
  }
  /* Gitteret laaner hd-guides__row (3 kolonner fra 768px); paa store skaerme
     har indekset plads til fire. */
  @media (min-width: 1200px) {
    .hd-blogindex__gitter { grid-template-columns: repeat(4, 1fr); }
  }
  .hd-blogindex__tom {
    font-family: var(--font-primary--family);
    font-size: 15px;
    color: var(--color-ink-soft);
  }
/* END_SECTION:blog */

/* START_SECTION:brands (INDEX:4) */
/* Samme regel som kategorisiden: cream er headerens, alt herunder er hvidt. */
  .brands { background: var(--color-paper); padding-bottom: clamp(56px, 8vw, 96px); }

  /* Toppen uden bånd: brødkrumme + introlinje, samme kant som alt andet. */
  .brands__head { padding: clamp(16px, 2vw, 28px) var(--tile-inset) 0; }
  .brands__crumbs {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .brands__crumbs a { color: inherit; background-image: none; }
  .brands__crumbs a:hover { color: var(--color-ink); }
  .brands__intro {
    margin: 14px 0 0;
    font-size: 15px;
    line-height: 1.5;
    color: var(--color-ink-soft);
  }

  /* A-Å-indekset. Bogstavgrupperne flyder i spalter; break-inside holder et
     bogstav og dets mærker samlet, så "B" aldrig står alene i bunden af en
     spalte. Venstrekanten er --tile-inset som alt andet på sitet. */
  .brands__index {
    padding-inline: var(--tile-inset);
    margin-top: clamp(28px, 3.6vw, 52px);
    columns: 2;
    column-gap: clamp(32px, 4vw, 64px);
  }
  @media (min-width: 900px) { .brands__index { columns: 3; } }
  @media (min-width: 1280px) { .brands__index { columns: 4; } }

  .brands__group {
    break-inside: avoid;
    margin: 0 0 clamp(28px, 3vw, 44px);
  }
  .brands__letter {
    margin: 0 0 10px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--color-line-soft);
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: clamp(1.3rem, 2vw, 1.8rem);
    line-height: 1;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .brands__list { list-style: none; margin: 0; padding: 0; }
  .brands__item { margin: 0; }
  .brands__link {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 6px 0;
    background-image: none;
    transition: opacity var(--transition-base);
  }
  .brands__link:hover { opacity: 0.55; }
  .brands__name {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy);
    font-size: clamp(14px, 1.15vw, 16px);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  /* Tallet er under 13px og skal derfor stå i tekstsnittet, ikke i Univers
     (HEY-DARLING.md: alt <= 13px kører Instrument Sans). */
  .brands__count {
    font-family: var(--font-primary--family);
    font-weight: 500;
    font-size: 12px;
    color: var(--color-ink-mute);
    white-space: nowrap;
  }
/* END_SECTION:brands */

/* START_SECTION:brevkasse (INDEX:5) */
/* Spoergsmaalet staar oeverst og er det stoerste felt; resten er som kontaktsiden. */
  .brevkasse .kontakt__felt textarea { min-height: 160px; }
/* END_SECTION:brevkasse */

/* START_SECTION:cart (INDEX:6) */
/* HVID som resten af sitet (2026-09-02). Kurven var den sidste sidetype der
     malede sin egen cream-flade, efter at body gik hvid i critical.css. Samme
     valg som .plp og .pdp. */
  .cart { background: var(--color-paper); }
  .cart__inner { max-width: 1280px; margin: 0 auto; padding: clamp(32px, 4vw, 56px) clamp(20px, 3vw, 40px) clamp(64px, 7vw, 104px); }

  .cart__head { border-bottom: 1px solid var(--color-line); padding-bottom: clamp(20px, 2.5vw, 28px); }
  .cart__eyebrow { font-size: 11px; font-weight: 500; letter-spacing: 0.22em; text-transform: uppercase; color: var(--color-ink-mute); }
  .cart__title { margin-top: 10px; font-size: clamp(25px, 3.72vw, 47px); font-weight: 700; color: var(--color-ink); }
  .cart__count { margin-top: 10px; font-size: 14px; color: var(--color-ink-soft); }

  /* ---------- tom kurv ---------- */
  .cart__empty { padding-block: clamp(40px, 6vw, 72px); max-width: 34rem; }
  .cart__empty-text { font-size: 16px; line-height: 1.6; color: var(--color-ink-soft); }
  .cart__empty-links { margin-top: 28px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
  .cart__cta {
    display: inline-flex; align-items: center; background: var(--color-ink); color: var(--color-paper);
    border: 0; border-radius: var(--corner-radius-default); padding: 13px 26px;
    font-size: 12px; font-weight: 500; background-image: none;
    font-family: var(--font-primary--family);
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
  }
  .cart__cta:hover { background: var(--color-plum); }
  .cart__ghost {
    display: inline-flex; align-items: center; border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-full); padding: 10px 18px; font-size: 13px;
    color: var(--color-ink-soft); background: var(--color-paper); background-image: none;
  }
  .cart__ghost:hover { border-color: var(--color-ink-soft); color: var(--color-ink); }

  /* ---------- layout ---------- */
  .cart__layout { display: grid; gap: clamp(28px, 4vw, 56px); align-items: start; padding-top: clamp(24px, 3vw, 40px); }
  @media (min-width: 1024px) { .cart__layout { grid-template-columns: minmax(0, 1fr) 380px; } }

  /* ---------- linjer ---------- */
  .cart__lines { list-style: none; margin: 0; padding: 0; }

  /* Mobil: billedet spænder over begge rækker i sin egen smalle kolonne, så
     mængdevælgeren får den fleksible midterkolonne og ikke klemmes ned i 96px. */
  .cart-line {
    display: grid;
    grid-template-columns: 96px minmax(0, 1fr) auto;
    grid-template-areas:
      "media info  info"
      "media qty   price";
    column-gap: 20px;
    row-gap: 16px;
    padding: 22px 0;
    border-bottom: 1px solid var(--color-line-soft);
  }
  .cart-line:first-child { padding-top: 4px; }
  /* Smalle telefoner: 96px billede + 2x20px luft levner 152px til maengdevaelger
     OG linjepris paa samme raekke, og de to stod klods op ad hinanden ved 320px.
     Billedkolonnen og luften giver 40px tilbage, saa de kan staa fri. */
  @media (max-width: 479px) {
    .cart-line {
      grid-template-columns: 72px minmax(0, 1fr) auto;
      column-gap: 14px;
    }
  }
  @media (min-width: 640px) {
    .cart-line {
      grid-template-columns: 120px minmax(0, 1fr) auto auto;
      grid-template-areas: "media info qty price";
      column-gap: 24px;
      align-items: center;
    }
  }

  .cart-line__media {
    grid-area: media;
    align-self: start;
    display: block;
    background: var(--color-paper);
    border: 1px solid var(--color-line-soft);
    border-radius: var(--corner-radius-default);
    overflow: hidden;
    aspect-ratio: 4 / 5;
    background-image: none;
  }
  .cart-line__media img { width: 100%; height: 100%; object-fit: contain; }

  .cart-line__info { grid-area: info; min-width: 0; }
  .cart-line__vendor { font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-ink-mute); }
  .cart-line__title { margin-top: 4px; font-family: var(--font-primary--family); font-size: 15px; font-weight: 500; line-height: 1.35; color: var(--color-ink); }
  .cart-line__title a { background-image: none; }
  .cart-line__title a:hover { color: var(--color-rose); }
  .cart-line__meta { margin-top: 4px; font-size: 13px; color: var(--color-ink-mute); }
  .cart-line__sep { margin: 0 6px; color: var(--color-line); }
  /* Bundlens dele. Daempet og indrykket med en streg, saa de laeses som INDHOLD
     i linjen ovenover og ikke som selvstaendige varer man kan fjerne hver for sig
     (det kan man ikke: en bundle er én linje). */
  .cart-line__parts {
    margin: 6px 0 0;
    padding: 0 0 0 10px;
    list-style: none;
    border-left: 1px solid var(--color-line);
    font-family: var(--font-primary--family);
    font-size: 12px;
    line-height: 1.45;
    color: var(--color-ink-mute);
  }
  .cart-line__discount { margin-top: 6px; font-size: 12px; font-weight: 500; color: var(--color-green); }
  .cart-line__remove {
    display: inline-block; margin-top: 10px; font-size: 12px; color: var(--color-ink-mute);
    background-image: linear-gradient(currentColor, currentColor); background-size: 0 1px;
  }
  .cart-line__remove:hover { color: var(--color-sale); background-size: 100% 1px; }

  .cart-line__qty { grid-area: qty; }
  .cart-line__unit { margin-top: 8px; font-size: 12px; color: var(--color-ink-mute); text-align: center; }

  .cart-qty {
    display: inline-flex; align-items: center;
    border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-default);
    background: var(--color-paper);
  }
  .cart-qty__btn { width: 40px; height: 42px; font-size: 17px; line-height: 1; color: var(--color-ink-soft); background: none; border: 0; cursor: pointer; }
  .cart-qty__btn:hover { color: var(--color-ink); }
  .cart-qty__val {
    width: 40px; height: 42px; text-align: center; border: 0; background: transparent;
    font-size: 14px; font-weight: 500; font-variant-numeric: tabular-nums; outline: none;
  }

  .cart-line__price { grid-area: price; text-align: right; align-self: center; }
  .cart-line__now { font-size: 15px; font-weight: 600; color: var(--color-ink); font-variant-numeric: tabular-nums; }
  .cart-line__now.is-sale { color: var(--color-sale); }
  .cart-line__was { font-size: 12px; color: var(--color-ink-mute); text-decoration: line-through; }

  .cart__lines-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding-top: 22px; }
  .cart__back { font-size: 13px; color: var(--color-ink-soft); background-image: none; }
  .cart__back:hover { color: var(--color-ink); }
  .cart__update {
    display: none; align-items: center; border: 1px solid var(--color-line);
    background: var(--color-paper); color: var(--color-ink); border-radius: var(--corner-radius-default);
    padding: 10px 18px; font-size: 13px; cursor: pointer;
  }

  .cart__note { margin-top: 28px; }
  .cart__note-label { display: block; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-ink-mute); }
  .cart__note textarea {
    margin-top: 10px; width: 100%; resize: vertical;
    border: 1px solid var(--color-line); border-radius: var(--corner-radius-default);
    background: var(--color-paper); color: var(--color-ink);
    padding: 12px 14px; font-size: 14px; line-height: 1.5; outline: none;
  }
  .cart__note textarea:focus { border-color: var(--color-ink-soft); }

  /* ---------- opsummering ---------- */
  .cart__summary-col { position: relative; }
  @media (min-width: 1024px) {
    /* --pinned, ikke --total: servicebåndet ruller væk, så det er kun hovedbjælken
       og kategoribåndet der stadig dækker toppen når man er nået herned. */
    .cart__summary { position: sticky; top: calc(var(--sticky-stack-pinned) + 24px); }
  }
  .cart__summary {
    background: var(--color-paper);
    border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-default);
    padding: clamp(20px, 2.2vw, 28px);
  }

  .cart__ship { padding-bottom: 20px; margin-bottom: 20px; border-bottom: 1px solid var(--color-line-soft); }
  .cart__ship-text { font-size: 13px; color: var(--color-ink-soft); }
  .cart__ship-text strong { font-weight: 600; color: var(--color-ink); }
  .cart__ship-text--done { color: var(--color-green); font-weight: 500; }
  .cart__ship-track { margin-top: 10px; height: 4px; border-radius: var(--corner-radius-full); background: var(--color-bg-soft); overflow: hidden; }
  .cart__ship-fill { display: block; height: 100%; background: var(--color-ink); transition: width 400ms cubic-bezier(0.22, 0.61, 0.36, 1); }

  .cart__summary-title { font-size: 22px; color: var(--color-ink); }

  .cart__rows { margin: 18px 0 0; }
  .cart__row { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 7px 0; font-size: 14px; color: var(--color-ink-soft); }
  .cart__row dd { margin: 0; color: var(--color-ink); }
  .cart__row--muted dd { color: var(--color-ink-mute); font-size: 13px; }
  .cart__row--discount dd { color: var(--color-green); }
  .cart__row--total {
    margin-top: 8px; padding-top: 16px; border-top: 1px solid var(--color-line-soft);
    font-size: 15px; color: var(--color-ink);
  }
  .cart__row--total dt { font-weight: 500; }
  .cart__row--total dd { font-size: 20px; font-weight: 600; }

  .cart__vat { margin-top: 6px; font-size: 12px; color: var(--color-ink-mute); }

  .cart__error {
    margin-top: 14px; padding: 10px 12px; border-radius: var(--corner-radius-default);
    background: var(--color-sale-soft); color: var(--color-sale); font-size: 13px;
  }

  .cart__checkout {
    margin-top: 18px; width: 100%; background: var(--color-ink); color: var(--color-paper);
    border: 0; border-radius: var(--corner-radius-default); padding: 15px 24px;
    font-size: 12px; font-weight: 500; cursor: pointer; transition: background-color var(--transition-base);
    font-family: var(--font-primary--family);
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
  }
  .cart__checkout:hover { background: var(--color-plum); }

  .cart__delivery { margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--color-line-soft); }
  .cart__delivery-head { display: flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-ink); }
  .cart__delivery-head svg { color: var(--color-ink-soft); }
  .cart__delivery-text { margin-top: 8px; font-size: 13px; line-height: 1.55; color: var(--color-ink-soft); }

  .cart__trust { list-style: none; margin: 18px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
  .cart__trust li {
    font-size: 11px; letter-spacing: 0.06em; color: var(--color-ink-soft);
    background: var(--color-bg); border: 1px solid var(--color-line-soft);
    border-radius: var(--corner-radius-full); padding: 6px 12px;
  }

  /* Mens en opdatering er undervejs */
  [data-cart-root][data-busy] .cart__lines { opacity: 0.55; pointer-events: none; }
  [data-cart-root] .cart__lines { transition: opacity 150ms ease-out; }
/* END_SECTION:cart */

/* START_SECTION:collection (INDEX:7) */
/* clip (not hidden) — hidden would turn this into a scroll container and break the
     sticky header. Needed because the full-bleed grid uses 100vw, which on Windows
     includes the scrollbar and would otherwise cause a horizontal scroll. */
  /* SIDENS BUND ER HVID. Cream (--color-background) er reserveret til de to
     baand i toppen: headeren og filterbaren. Alt derunder — luften omkring
     gitteret, de tomme celler i sidste raekke og kortene selv — er samme hvide
     flade, fordi produktbillederne har hvid baggrund og de faerreste er PNG.
     Mikkel, 2026-08-25: "ikke kategorisiden altsaa reel baggrund, den skal
     stadig vaere hvid." */
  .plp { background: var(--color-paper); overflow-x: clip; }

  /* /collections/all: intet baand — kun en broedkrumme over filterbaren. */
  .plp__plain-head { padding: clamp(14px, 1.8vw, 26px) var(--tile-inset) 2px; }
  .plp__plain-crumbs { display: flex; align-items: center; gap: 8px;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 11px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-mute); }
  .plp__plain-crumbs a { color: inherit; background-image: none; }
  .plp__plain-crumbs a:hover { color: var(--color-ink); }

  /* === Hero === */
  /* FLADEN ER VAEK (Mikkel, 2026-08-31). Baandet havde en gul bund (--hd-sand
     #FEE8B6) med et korn ovenpaa, og ordet og billedteksten stod i hvid paa den
     (--hd-ivory). Nu svaever ord, idol og billedtekst frit paa sidens egen cream,
     og de to tekster er sat i ink.

     Kun FARVER er aendret. Hoejde, scene, koordinatsystem, ordets y og
     billedtekstens 9 % staar praecis hvor de stod, saa kompositionen er den
     samme — det er kun bunden der er taget ud under den.

     Historik, hvis fladen skal tilbage: --hd-sand var samplet ud af Nickis eget
     baand (rgb(224,204,171)) og senere gjort lysere til #FEE8B6 efter tre runder
     2026-08-27; --hd-ivory var hans off-white rgb(237,233,230), sat til ren hvid
     samme dag. Kornet var en indlejret feTurbulence-SVG paa .hd-hero__media. */
  /* Baandet er ikke laengere fuld skaermbredde (Mikkel, 2026-08-27): det staar i
     gitterets kolonne, altsaa samme venstre- og hoejrekant som broedkrumme,
     hyldecirkler og produktgitter, og har luft op til headeren saa det svaever i
     stedet for at haenge fast i den.

     Scenen BESKAERES i siderne — den skaleres ikke ned. Graden paa ordet og
     idolets stoerrelse er dermed uaendrede; det er kun sandet ude i kanterne der
     forsvinder. Ordet fylder hoejst 2100 af scenens 2800 enheder (se Graden), saa
     der er 12,5 % sand i hver side at tage af, og beskaeringen er 4-14 % pr. side
     hen over hele desktop-omraadet. */
  .hd-hero {
    /* Ingen baggrund. Idolerne er PNG med aegte alfa (un-premultiplied), saa de
       staar lige saa rent paa cream som de gjorde paa den gule flade. */
    margin-inline: var(--tile-inset);
    margin-top: clamp(12px, 1.6vw, 24px);
    /* Baandet er sit EGET lag i sideskiftet, saa det toner fra den gamle kategori
       til den nye i stedet for at blinke. Se @view-transition i critical.css.
       Navnet skal vaere unikt paa siden — der er ét baand. */
    view-transition-name: hd-hero;
  }
  .hd-hero__media {
    /* Bundgraensen var 200px. Den er saenket til 150, fordi baandet nu er smallere
       end skaermen: med 200px som gulv blev scenen paa en 800px skaerm 1141px bred
       i en 752px kasse, altsaa 34 % beskaering, og saa ville ORDET blive skaaret
       over. Med 150 holder beskaeringen sig under 18 % ved enhver bredde. */
    /* 20 % lavere end foer (17,5vw / 150-310px), fordi Mikkel bad om at vinde
       hoejde i toppen af siden. ALT i baandet skalerer med hoejden, saa ordet og
       idolet blev 20 % mindre med den — og ordet er derfor traukket tilsvarende
       bredere i squashen nedenfor, saa det stadig spaender lige saa bredt paa
       skaermen som foer. */
    /* Endnu 20 % lavere 2026-08-31 (var 14vw / 120-248px). Det er den aendring
       der flyttede billedteksterne ud i siderne: med teksterne UNDER ordet skulle
       baandet baere to vandrette baelter, og under ~200px hoejde er der ikke
       hoejde nok til begge. Nu staar tekst, ord, tekst paa ÉN linje, og hoejden
       er kun ordets. */
    height: clamp(96px, 11.2vw, 198px);
    /* overflow: hidden BLIVER. Idolet er 585 hoejt mod scenens 491 og skal
       skaeres af i bunden praecis som foer; uden den ville figuren haenge ned
       over hyldecirklerne. Kornet er vaek sammen med fladen: det var et lag paa
       den gule bund, og paa cream ville det tegne et graat rektangel netop dér
       hvor der ikke laengere skal vaere en kasse. */
    overflow: hidden;
  }
  /* Hele Nickis bånd skal være synligt på enhver skærmbredde. Hans format har med
     vilje meget tom sandflade ude i siderne omkring ordet og modellen, og den luft
     ER designet — den tidligere `cover`-beskæring spiste præcis den luft og viste
     kun 71 % af bredden ved 1440px.

     Båndet centrerer derfor scenen og lader den stå på bunden, så modellen bløder
     ud i underkanten som tegnet. Overskydende bredde bliver til sand i begge
     sider, og fordi sandet er den samme flade som scenens bund er sømmen der
     ikke. 17,5vw er valgt så scenens bredde (højde x 5,703) lander på 99,8vw:
     den fylder båndet ud uden at skulle beskæres. */
  .hd-hero__media {
    display: flex;
    justify-content: center;
    align-items: flex-end;
  }
  .hd-hero__art {
    position: relative;
    height: 100%;
    aspect-ratio: 2800 / 491;
    /* max-width: 100% er vaek. Med den blev scenen KLEMT ned i den smallere kasse,
       og SVG'ens preserveAspectRatio lagde sand under figuren i stedet for at lade
       den blive skaaret af baandets bund. Uden den beholder scenen sin hoejde-
       bestemte bredde og loeber ud over kassen, som klipper den. */
    flex: 0 0 auto;
  }
  .hd-hero__stage {
    display: block;
    width: 100%;
    height: 100%;
  }

  /* === Ordet ===
     Snittet er Shantell Sans SemiBold kursiv — samme skrift som SilicaBox' store
     ordmaerke, som Mikkel bad om at faa herind i stedet for det braendte SUMMER.
     Farven er sidens ink (Mikkel, 2026-08-31): ordet stod hvidt saa laenge der
     var en gul flade at staa paa, og hvidt paa cream ville forsvinde.

     Grad og filter staar som ATTRIBUTTER i markuppen, ikke her: de regnes ud af
     ordets laengde i liquid-blokken oeverst, og de to skal folge hinanden. */
  .hd-hero__word {
    font-family: 'Shantell Sans', cursive;
    font-style: italic;
    font-weight: 600;
    /* Knibningen. Snittet er sat ret luftigt fra fabrikken, og ved denne grad
       laeser mellemrummene som huller i stedet for som ét ord. Ved -0,07 roerer
       bogstaverne hinanden flere steder i ordet, hvilket er meningen: det skal
       laese som ét stykke og ikke som otte bogstaver.
       -0,09 og opefter blev proevet og forkastet: R og F i "PARFUM" smeltede
       sammen til én form, og E'ernes taellere lukkede sig.

       Stregen er tykkere med en stroke i SAMME farve som fyldet. Snittet findes
       kun i SemiBold i vores fil, saa vaegten kan ikke skrues op ad den vej;
       0,02 em stroke lægger 0,01 em paa hver side af hver kontur og giver den
       ekstra tyngde uden at aendre bogstavformen.

       Begge er i em, saa de foelger graden. Aendres de, skal breddebudgettet i
       liquid-blokken oeverst regnes om. */
    letter-spacing: -0.07em;
    fill: var(--color-ink);
    stroke: var(--color-ink);
    /* 0,0325em: praecis midt mellem de gamle 0,02 og de 0,045 der blev proevet
       (Mikkel, 2026-09-03: "goer den sjove vilde font lidt federe", derefter
       "den blev for tyk denne her, saa midt i mellem"). Snittet findes kun i
       SemiBold i vores woff2, saa vaegten kan ikke skrues op ad skriftens egen
       vej — stroken er den eneste. Halvdelen lander uden for konturen, altsaa
       0,01625em paa hver side af hver streg: ved fuld grad paa 1440px gaar
       stammerne fra ca. 12 til ca. 13,3px (0,045 gav ca. 14,5).
       Stroken goer ogsaa hvert bogstav BREDERE, saa breddebudgettet i
       liquid-blokken oeverst er regnet om med den (3685 -> 3613, 1195 -> 1176).
       Over 0,05em lukker E'ernes taellere og R'ets oeje sig, praecis som ved
       knibning under -0,09. */
    stroke-width: 0.0325em;
  }
  .hd-hero__word--sm { display: none; }

  /* === Billedteksterne ===
     Nicki har dem braendt ind i billedet paa engelsk, hvor de hverken kan
     oversaettes, laeses af en soegemaskine eller rettes. De er derfor retoucheret
     ud af filen og sat som rigtig tekst her i stedet.

     Placeringen er maalt paa hans eget baand (3966x696): venstre blok x 1170-1742,
     hoejre blok x 2192-2654, begge med bundlinje ved y 558. Omregnet til procent af
     scenen, saa de sidder samme sted i kompositionen paa enhver bredde. Venstre
     blok er venstrestillet, hoejre er hoejrestillet, praecis som han har sat dem.
     De flankerede oprindeligt modellen; hun er ude, men afstanden ud til siderne
     er hans, saa de er blevet staaende vandret og kun rykket ned.

     Graden foelger IKKE billedet. Nicki har tegnet i et ~2000px vindue, og skaleret
     med billedet ville teksten lande paa 7px paa en 1440px skaerm. */
  .hd-hero__cap {
    position: absolute;
    /* Nicki havde dem paa 19 % (y 357-398), derefter 13 % og 5 % efterhaanden som
       ordet rykkede ind i midten og baandet blev lavere. De staar ikke laengere
       UNDER ordet: 2026-08-31 blev baandet 20 % lavere igen, og hoejden raekker
       ikke til to vandrette baelter. De er derfor flyttet ud i hver sin side AF
       ordet. Der er kun ÉN tilbage, og den staar UNDER ordet, midtstillet om
       baandets midte — samme akse som ordet staar paa. Klassen hedder stadig
       --right, fordi den navngiver Nickis hoejre TEKST og ikke en position, og
       fordi cap_right er sat paa 40 kategorier og hylder i liquid-blokken.

       Kassen er BAANDET og ikke scenen, se kommentaren i markuppen. */
    left: 50%;
    transform: translateX(-50%);
    /* max-content: teksten er praecis saa bred som saetningen. max-width var
       min(60%, 720px) - Nickis linjebudget for to flankerende blokke - og det
       braekkede den laengste tekst ("FRA GENTLE TIL POWERFUL EKSFOLIATERS VI
       SVAERGER PAA", 508px ved 14px) over to linjer under 950px, hvor anden
       linje gik OP i ordet (maalt 2026-09-04 ved 900: 60 % af 846 = 508 minus).
       Teksten er bundforankret, saa et linjeskift er altid en kollision; den
       maa derfor bruge hele baandet. Den laengste tekst er 590px ved 1440 og
       508px paa gulvet, baandet er 705px ved 750 - alle 40 tekster holder én
       linje hele vejen ned til mobilgraensen. */
    width: max-content;
    max-width: 100%;
    /* Blush-fladen er VAEK (Nickis hey-darling-05.pdf side 2, 2026-09-04). Den kom
       til 2026-08-31 som vaern mod idolets produktfoto, som teksten forsvandt i,
       og idolerne er ude siden 2026-09-03. Nu staar teksten naken paa sidens
       bund, lige under ordet. Skal fladen tilbage: var(--color-blush),
       padding 7px 14px, border-radius 0 (firkantet som .product-card__badge),
       og bottom skal have kassens bundpolstring trukket fra igen. */
    background: none;
    padding: 0;
    text-align: center;
    margin: 0;
    /* DISPLAY-snittet, ikke tekstsnittet (samme PDF). Billedteksten stod i
       Instrument Sans 700 fordi den ved 9-16px var for lille til den extended
       tegning - samme regel som alle husets smaa labels (css-variables.liquid).
       Mockuppen saetter den i Univers Next Pro Extended ved ca. 17,5px paa 1680,
       og dér holder snittet; det er den samme stemme som menuen lige over.
       Vaegten er --weight-black som headeren (kittet har kun 900, se
       css-variables.liquid om Nickis vaegte). */
    font-family: var(--font-display--family);
    font-weight: var(--weight-black);
    /* Graden er MAALT paa mockuppen (et 1680px-skud af live): versalhoejde
       12,6px og blaekbredde 447,8px for "ALT DIN HUD CRAVER SAMLET ÉT STED".
       Menuens versaler maaler 11,5px ved 16px i samme snit, saa versalhoejden
       giver 17,5px og bredden 17,3px; 1,03vw rammer imellem (17,3 ved 1680).
       Skalerer med vw som baandet (11,2vw), saa tekst/baand er fast 9,2 % i
       hele det omraade hvor begge skalerer. Gulvet paa 14px holder snittet over
       de 13px hvor huset skifter til tekstfonten; loftet er 1,03 x 1768, dér
       hvor baandet selv rammer sit loft paa 198px. */
    font-size: clamp(14px, 1.03vw, 18.2px);
    line-height: 1;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    /* Ink af samme grund som ordet: hvid var en farve til den gule flade. */
    color: var(--color-ink);
  }
  /* De to blokke er SPEJLET om baandets midte: venstre 33,1-44,5 %, hoejre
     55,5-66,9 %. Nickis egne maal gav 29,5 % i venstre side og 33,1 % i hoejre,
     fordi de sad om modellen, som ikke stod midt i baandet. Da hun forsvandt og
     ordet rykkede ind i midten, laa venstre blok 3,6 % laengere ude end hoejre
     og skaevheden blev tydelig. Hoejre blok er beholdt og venstre er spejlet ind
     efter den. Yderkanterne er det oejet maaler paa, saa teksten er stadig
     venstre- og hoejrestillet. */
  /* Højdebudgettet i båndet, målt ved 1440 hvor båndet er 161 px. Ordet står
     centreret om y 180 af 491 (36,7 %). Teksten stod her på 9 % oppe fra bunden
     med et probe-krav på over 25 enheders luft; BEGGE dele er afløst 2026-09-04.
     Teksten sidder nu tæt under ordet (se .hd-hero__cap--right herunder), luften
     er Nickis 24 enheder under hvert ord, og `_pw-verify-hero.mjs` kræver 15-33.
     Luften måles på PIXELS med teksten skjult — em-kassen i markuppen melder altid
     alt vel, fordi den er det tal ankeret selv bruger, og accenterne É og Å står
     over versalerne og forurener en måling med teksten synlig. */
  /* Teksten er RYKKET OP under ordet (Nickis hey-darling-05.pdf side 2,
     2026-09-04; stod paa calc(9% - 7px) med blush-fladen). Placeringen regnes
     fra ORDET og ikke fra bunden, og i em, saa luften holder ogsaa naar graden
     rammer sit gulv paa smalle skaerme:
       ordets blaekbund ligger 34,0 % oppe fra baandets bund (maalt 1680:
       y 124,3 af 188), mockuppens luft ned til versalernes top er 8,7px =
       4,6 % af baandet, versalhoejden er 0,72em, og en line-height:1-kasse
       har 0,15em under grundlinjen (maalt: grundlinjen sidder 85 % nede).
       34,0 - 4,6 = 29,3 %; 0,72 + 0,15 = 0,87em.
     Versalernes bund lander dermed 22,8 % oppe; mockuppen maaler 22,9 %
     (y 323,1). Ordets y er IKKE regnet om: mockuppen lader ordet staa (blaek
     y 203,7-302,3 paa begge sider) og rykker kun teksten op, saa den gamle
     regel om at ordet staar midt i sin egen halvdel er afloest af tegningen.
     Kun kassens TOP maales af _pw-verify-hero.mjs; den ligger 0,12em over
     versalerne (grundlinje 0,85 minus versalhoejde 0,73).

     ORDETS BLAEKBUND ER IKKE DEN SAMME FOR ALLE ORD. Boelgen (feDisplacementMap)
     og goo'en lader nogle ord ende langt lavere end andre: maalt paa alle hylder
     2026-09-04 fra EAU DE TOILETTE 292 til ANSIGTSOLIE/KOLLAGEN/FUGTCREME 353
     enheder, HUDPLEJE 323. Med ét fast tal ramte teksten ordet paa fem hylder
     og laa under 1px fra paa syv mere. Tallet kan ikke regnes i Liquid
     (displacementet er per pixel), saa det er MAALT og ligger pr. ord i
     snippets/hero-ord-bund.liquid; sektionen saetter det som --hd-ord-bund.
     Teksten rykker (bund - 323) enheder ned, 1 enhed = 1/4,91 % af baandet,
     saa luften er Nickis 24 enheder under ALLE ord. 323 er HUDPLEJEs tal og
     SKAL foelge tabellen hvis den maales om (sweepet skriver nulpunktet ud).
     Ukendt ord = 355 = mest luft, aldrig kollision. */
  .hd-hero__cap--right { bottom: calc(29.3% - 0.87em - (var(--hd-ord-bund, 355) - 323) * 1% / 4.91); }

  /* Paa telefon er baandet for lavt til at teksten kan staa uden at ramme
     modellen, og mobil-udsnittet er et andet billede med andre proportioner. */
  @media (max-width: 749px) {
    .hd-hero__cap { display: none; }
  }
  /* Paa telefon bliver et 8:1-baand til en meget haard beskaering: en fast hoejde
     med cover skar SUMMER-ordet midt over og efterlod tilfaeldige bogstavstumper.
     Mobil-udsnittet er derfor klippet til PRAECIS den aspekt det vises i, og
     baandet faar sin hoejde af billedet i stedet for omvendt. Ingen CSS-beskaering,
     hele kompositionen er med. */
  /* Paa telefon bliver et bredt baand til en meget haard beskaering: en fast hoejde
     med cover skar SUMMER-ordet midt over og efterlod tilfaeldige bogstavstumper.
     Mobil-udsnittet er klippet om ordet og modellen, og baandet faar sin hoejde af
     billedet i stedet for omvendt. Ingen CSS-beskaering, hele kompositionen er med. */
  /* Scenen beholder sit eget forhold og faar hoejden af baandet; overskuddet i
     bredden loeber ud over kanten og klippes af .hd-hero__media. Det er praecis
     den beskaering det gamle mobilbillede var klippet til, bare regnet i stedet
     for skaaret. Det synlige udsnit er altid 1.255 enheder bredt — baandhoejden
     skalerer med skaermbredden, saa zoomen er den samme paa enhver telefon.
     Derfor kan mobilgraden staa som ét tal og ikke som en clamp. */
  .hd-hero__idol--sm { display: none; }
  @media (max-width: 749px) {
    /* `max-height` og ikke en ny hoejde: telefonen skal vaere BYTE-identisk, for
       ordets grad og udsnittet er tunet mod netop den geometri. Uden loftet vokser
       baandet lineaert med bredden helt op til graensen — maalt paa live: 113px
       ved 320, 140 ved 390 (begge under loftet, altsaa uroerte), men 221 ved 600
       og 275 ved 749, hvor desktop-reglen ét pixel senere giver 96. Et baand paa
       275px er 37 % af skaermen paa en telefon paa tvaers, og springet paa 179px
       ved 750 var ikke tilsigtet: forholdet 1240/485 stammer fra det gamle
       mobil-UDSNIT med modellen i, og modellen har ikke vaeret i baandet siden
       rev 251. Loftet bider foerst over ~430px, saa scenen beskaeres bare mere i
       siderne — praecis den mekanik baandet allerede bruger. */
    /* `aspect-ratio` + `max-height` duer IKKE: naar loftet bider, regner
       browseren BREDDEN tilbage af forholdet, saa baandet ogsaa blev smallere
       (maalt: 409px paa en 749px skaerm). Hoejden regnes derfor direkte af
       baandets egen bredde med det samme forhold — 1240/485 = 2,5567 — og
       loftet laegges paa DEN. Baandet er stadig fuld bredde; kun scenen inde i
       det beskaeres mere i siderne. */
    /* HERO-ORDET ER VAEK PAA TELEFON (Mikkel, 2026-09-07: "fjern også hero text på de
       her telefon sider, teksten ser mærkelig ud, og cirklerne er nok branding i sig
       selv på telefon"). Hele scenen (SVG med ordet + goo) er display: none under 750px;
       det eneste der bliver af baandet er broedkrummen, som gaar fra absolut placeret
       oven paa sandet til almindeligt flow, saa sektionen falder sammen til én linje
       (maalt: .hd-hero 16px, header-bund 106 -> cirkler 134 ved 390). Reglerne for
       --sm-ordet og loftet paa 160px herunder er dermed doede paa telefon, men bliver
       staaende som dokumentation af den geometri der gaelder, hvis ordet kommer
       tilbage. Font-preloaden af Shantell Sans har media="(min-width: 750px)" af
       samme grund. Broedkrummens position: static staar ved .hd-hero__crumbs
       laengere nede — den SKAL staa efter grundreglen, ellers vinder absolute
       paa samme specificitet (rev 290 gik live med krummen oven i cirklerne). */
    .hd-hero__media {
      display: none;
      aspect-ratio: auto;
      height: min(calc((100vw - 2 * var(--tile-inset)) / 2.5567), 160px);
    }
    .hd-hero__art { max-width: none; }
    .hd-hero__word--lg { display: none; }
    .hd-hero__word--sm { display: block; }
    .hd-hero__idol--lg { display: none; }
    .hd-hero__idol--sm { display: block; }
  }

  /* Broedkrummen ligger nu OVENPAA sandet, oeverst til venstre i baandet. Den
     hvide stribe under baandet (.hd-hero__head) er vaek, saa hyldecirklerne
     starter direkte under baandkanten.

     Farven er ink og ikke ivory: den skal kunne laeses, og ivory er heroens
     dekorative farve. Sand og ink har rigelig kontrast ved 10px.

     Placeringen hoerer paa .hd-hero og ikke paa scenen, saa den flugter med
     sidens venstremargen ogsaa naar scenen er smallere end baandet. */
  .hd-hero { position: relative; }
  .hd-hero__crumbs {
    position: absolute;
    top: clamp(12px, 1.3vw, 20px);
    /* Var var(--tile-inset), derefter 0. Nul lagde den KLODS op ad baandets
       venstrekant, og med rammen omkring skar den kanten. Den staar nu samme
       stykke inde fra kanten som den staar nede fra toppen. */
    left: clamp(12px, 1.3vw, 20px);
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-primary--family);
    font-weight: 600;
    /* Graden er Mikkels fra 2026-08-27. Farven var den dybe roede #C03527 (og foer
       den den daempede oliven) og er GRAA fra 2026-08-31: de tre roede
       handlingscirkler staar lige under broedkrummen, og med den ogsaa i roedt
       blev toppen af siden for roed.

       #6E6B68 er en varm neutral graa — den hoerer til paa cream uden at trakke
       mod oliven — og maaler 4,81:1 mod sidens bund, altsaa over AA ved 13px.
       Hele broedkrummen, ogsaa det aktive led, saa den laeses som ét element. */
    font-size: 13px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: #6E6B68;
  }
  /* Samme greb som PDP'ens broedkrumme: linket er 16px hoejt, og en usynlig
     `::before` goer trykfladen 28px uden at flytte noget. */
  .hd-hero__crumbs a { color: inherit; background-image: none; position: relative; }
  .hd-hero__crumbs a::before { content: ""; position: absolute; inset: -6px -2px; }
  .hd-hero__crumbs a:hover { color: var(--color-ink); }
  .hd-hero__crumbs-current { color: #6E6B68; }
  /* TELEFON: scenen er display: none (se mobil-blokken ved .hd-hero__media), saa
     broedkrummen er det eneste i baandet og gaar i almindeligt flow — sektionen
     falder sammen til krummens 16px, og cirklerne starter lige under. Reglen staar
     HER og ikke i mobil-blokken ovenfor, fordi grundreglen (position: absolute)
     kommer senere i filen end den blok og vinder paa samme specificitet. Maalt paa
     rev 290, hvor den stod for tidligt: hero 0px hoej, krummen oven i cirklerne. */
  @media (max-width: 749px) {
    .hd-hero__crumbs { position: static; }
  }
  /* h1'en er .visually-hidden i markuppen. Reglen staar i footer-sektionens
     stylesheet, som Shopify sammensaetter til den samme fil, men den gentages
     her saa kategorisiden ikke afhaenger af at footeren render'es. */
  .hd-hero__title.visually-hidden {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
  /* Ingen egen max-width længere: bredden ER gitterets, og polstringen er kanten.
     Dermed flugter discs, filterbar, gitter, tom-tilstand og paginering alle med
     den første kolonnes venstrekant. */
  .plp__body { max-width: none; margin: 0 auto; padding-inline: var(--tile-inset); }

  /* Discs */
  /* scroll-margin-top holder cirklerne fri af den klæbende header når man lander
     her fra et pager-link. Uden den ville browseren stille cirklernes overkant på
     skærmkant 0 og lægge dem bag hovedbjælken. */
  .plp__discs { margin-inline: calc(-1 * var(--tile-inset)); padding: 18px var(--tile-inset) 4px; overflow-x: auto; scroll-margin-top: var(--sticky-stack-pinned); }
  /* Mærket har ingen højde og må ikke lave luft; det findes kun som mål for et
     fragment. Marginen er den samme som cirklernes, ellers lander baren bag headeren. */
  .plp__anchor { height: 0; scroll-margin-top: var(--sticky-stack-pinned); }
  /* position: relative er markoerens koordinatsystem. Den er absolut placeret og
     dermed UDE af flex-floedet, saa den hverken faar en plads eller et gap. */
  /* Raekken er CENTRERET (Mikkel, 2026-09-03). Den stod venstrestillet under et
     baand hvor ordet staar i midten, og paa de hylder der kun har fire-fem
     cirkler laeste den som skaev.

     width: max-content + margin auto og IKKE justify-content: center. Raekken
     ligger i en scroller (.plp__discs har overflow-x: auto), og en centreret
     flex-raekke der er bredere end sin kasse loeber ud over BEGGE kanter — det
     venstre overloeb kan man ikke scrolle hen til. Med max-content er raekken
     praecis saa bred som cirklerne: passer de, centrerer auto-marginerne dem;
     passer de ikke, bliver auto til 0, og alt overloeb ligger til hoejre hvor
     scrolleren kan naa det.

     position: relative BLIVER — det er markoerens koordinatsystem, og JS'ens
     knap.offsetLeft maales i det. Centreringen flytter raekken, ikke knappernes
     plads inde i den, saa skiven lander samme sted som foer. */
  .plp__discs-row { --disc-ring: 4px; position: relative; display: flex; gap: 24px; list-style: none; margin: 0 auto; padding: 0; width: max-content; }
  /* Markoeren er en UDFYLDT SORT cirkel bag den aktive hyldecirkel (Mikkel
     2026-09-03, afloeser den roede gloed der foerst blev nedtonet og saa
     fjernet). Cirklen selv er uigennemsigtig og daekker midten, saa det man
     ser er en 4 px sort RING hele vejen rundt. Ingen blur: kanten skal staa
     skarpt. Flytte-adfaerden er uaendret (fade ud, hop, oejeblikkeligt ind);
     Udhaenget er --disc-ring (4 px paa desktop, 3 paa telefon), og JS'ens saet()
     laeser den SAMME variabel og traekker den fra i translate(), saa de to
     ikke kan komme fra hinanden. top/left er 0: hele placeringen ligger i
     translate, ogsaa lodret, fordi raekken paa telefon er et gitter med flere
     raekker (se mobil-blokken nederst). */
  .plp__disc-marker {
    position: absolute;
    top: 0;
    left: 0;
    width: calc(100px + 2 * var(--disc-ring));
    height: calc(100px + 2 * var(--disc-ring));
    border-radius: 9999px;
    background: var(--color-ink);
    /* KUN opacity. Skiven skal IKKE glide (Mikkel, 2026-08-31): den fader ud
       dér hvor den staar, flytter usynligt, og fader ind det nye sted. */
    opacity: 1;
    /* 80ms, ikke --transition-base (200): hover-til-svar skal foeles instant
       (Mikkel, 2026-08-31). */
    transition: opacity 80ms ease-out;
    pointer-events: none;
  }
  /* IND er oejeblikkeligt: udfadet er farvel til en plads man har set, indfadet
     er svaret paa den hover man LIGE har lavet, og et fade dér er forsinkelse. */
  .plp__disc-marker.er-paa-vej-ind { transition-duration: 0s; }
  .plp__disc-marker[hidden] { display: none; }
  /* UDEN JS er ringen den eneste markering af den aktive hylde (2026-09-04).
     Labelen bar den foer: den stod i 500, og `.is-active` gav den 600 + ink. Fra
     hey-darling-05 staar ALLE labels i 700 + ink, saa den forskel findes ikke mere,
     og markoeren er et JS-element — uden script var der ingen markering tilbage.
     Serveren saetter selv `is-active`, saa den samme ring kan tegnes i ren CSS.
     Scopet til raekker UDEN `data-markoer-bundet` (attributten JS'en saetter naar den
     overtager), saa de to aldrig tegner oven paa hinanden. Spread er praecis
     markoerens udhaeng (--disc-ring). */
  .plp__discs-row:not([data-markoer-bundet]) .plp__disc-btn.is-active .plp__disc {
    box-shadow: 0 0 0 var(--disc-ring) var(--color-ink);
  }
  /* Uden bevaegelse er varigheden 0, og JS'ens ventetid bliver dermed ogsaa 0. */
  @media (prefers-reduced-motion: reduce) { .plp__disc-marker { transition: none; } }
  .plp__disc-btn { position: relative; display: flex; flex-direction: column; align-items: center; width: 100px; background: none; border: 0; cursor: pointer; background-image: none; }
  {%- comment -%}
    Cirklerne er selv position: relative. Det er ikke pynt: markoeren er absolut
    placeret og males derfor i det POSITIONEREDE lag, altsaa efter alt almindeligt
    indhold, uanset at den staar foerst i traeet. Maalt live paa et tidligere
    forsoeg: uden position paa cirklen laa den roede skive OVEN PAA fotoet, og
    hele hylden blev en roed plade. Naar cirklen selv er positioneret, males de to
    i traeraekkefoelge, og markoeren ligger bagved.

    Derfor position: relative og ikke z-index: -1 paa markoeren: et negativt
    z-index ville sende den bag raekkens egen baggrund og dermed afhaenge af at
    ALT ovenover er gennemsigtigt.
  {%- endcomment -%}
  /* --disc saettes inline pr. hylde. Fallback til den gamle bloede flade, saa en
     hylde uden farve stadig tegner en cirkel og ikke et hul.
     Ingen ramme paa farvecirklerne: en 1px linje i --color-line-soft laa som en
     lys kant oven i en maettet farve og saa ud som en fejl. "Alle" beholder sin,
     for den er hvid indeni og ville ellers forsvinde. */
  .plp__disc { position: relative; display: flex; align-items: center; justify-content: center; height: 100px; width: 100px; overflow: hidden; border-radius: 9999px; background: var(--disc, var(--color-bg-soft)); transition: box-shadow var(--transition-base), transform var(--transition-base); }
  .plp__disc img { height: 100%; width: 100%; object-fit: cover; display: block; }
  /* FARVEFILTER over fotoet (Nickis hey-darling-05.pdf side 2, 2026-09-04):
     hyldens egen farve lagt oven paa billedet med halv daekning, saa alle ti
     cirkler traekker mod deres bund og raekken laeser som én palet i stedet for
     ti loese produktfotos. Alfa er MAALT paa mockuppen mod et live-skud i samme
     bredde, pixel for pixel i alle ti cirkler: median 0,516, kvartiler
     0,50-0,54, altsaa 50 %, normal blanding (samme alfa paa lyse og moerke
     pixels, saa det er ikke multiply). Bundpixels aendrer sig ikke (delta under
     1), fordi fotoets bund ER farven - derfor er det ogsaa ligegyldigt om laget
     ligger over fotoet eller fotoet faar opacity .5; matematikken er ens.
     ::after alligevel, fordi det er det Nicki har gjort, og fordi <img>'ets
     egen indlaesning og lazy-fade saa ikke roeres.
     KUN fotocirkler: tekst- og handlingscirklerne (--tekst) baerer navnet inde
     i cirklen, og et halvgennemsigtigt lag ville vaske det ud. Cirklen er
     position: relative og overflow: hidden, saa laget klippes rundt og maler
     over det ikke-positionerede <img>; markoeren ligger stadig bag cirklen. */
  .plp__disc:not(.plp__disc--tekst)::after { content: ""; position: absolute; inset: 0; background: var(--disc, var(--color-bg-soft)); opacity: 0.5; pointer-events: none; }
  /* Handlingscirklerne: Alle, Bundles, Tilbud. Farven staar paa cirklen som
     --disc/--disc-ink, saa de arver tekst-discens typografi uendret nedenfor.

     HVID cirkel med SORT tekst og en tynd sort kant (Mikkel, 2026-08-31).

     Proevede varianter, saa de ikke skal proeves om — alle samme dag:
       fyldt roed #C03527   for meget roedt oeverst paa siden; det var ogsaa dét
                            der flyttede broedkrummen til graa og BRANDS til sort
       hvid + roed tekst    5,56:1, men stadig roedt
       sort + roed tekst    kun 3,03:1, og teksten ER linkets navn
       lime / orange        kun proevet paa den ene bundles-cirkel, se historikken
     Nu: hvid med ink, 16,83:1. Cirklen baerer ingen farve laengere — den er ren
     typografi, som resten af headeren og filterbaren.

     Kanten er ikke pynt: hvid paa cream er 1,04:1, saa uden den ville cirklen
     ikke findes. Den er 1px ink — samme greb som den gamle "Alle" havde, bare i
     sort i stedet for --color-line-soft, saa den holder mod produktcirklerne.

     Padding 6px og ikke tekst-discens 8: box-sizing er border-box, saa kanten
     spiser 2px af de 100. Ved 8px var der 82px tilbage til "BUNDLES", som maaler
     81,6 — det braekker paa en subpixel. 6px giver 86 og dermed 4,4px luft. */
  .plp__disc--util {
    --disc: var(--color-paper);
    --disc-ink: var(--color-ink);
    border: 1px solid var(--color-ink);
  }
  .plp__disc--util .font-grotesk { padding-inline: 6px; }
  /* Tekst-disc: hylde uden foto. Samme skrift som "Alle", men paa hyldens egen
     farve, med den ink der maaler hoejest kontrast paa netop den (--disc-ink-N).
     12px/0,04em og ikke "Alle"s 13px/0,08em: maalt i univers-next-pro-extended
     er "BUNDLES" 92,0 px ved 13/0,08 og der er 100 px cirkel. Det braekkede ordet
     over to linjer ("BUNDLE" + "S"). Ved 12/0,04 maaler det 81,6 px og staar paa
     én linje inden for de 84 px som luften levner. overflow-wrap: normal, saa et
     ord ALDRIG brydes; flerordede navne bryder mellem ordene. */
  .plp__disc--tekst .font-grotesk { padding: 0 8px; font-size: 12px; font-weight: 600; line-height: 1.15; text-align: center; text-transform: uppercase; letter-spacing: 0.04em; overflow-wrap: normal; color: var(--disc-ink, var(--color-ink)); }
  /* Navnet under cirklen er FEDT og i ink (Nickis hey-darling-05.pdf side 2,
     2026-09-04; stod i 500 og --color-ink-soft). 700 er et RIGTIGT snit:
     Instrument Sans laa self-hostet i 400/500/600, og font-weight: 700 faldt
     tilbage paa 600-filen (maalt: noejagtig samme bredder for 600/700/800), saa
     _selfhost-fonts.mjs henter nu ogsaa 700, og theme.liquid preloader det.
     Graden er stadig 13px: mockuppens labels maaler 16 % bredere, men med lavere
     versaler, saa det er et andet snit (Nickis egen Univers Bold, som kittet
     ikke har) og ikke en stoerre grad. Mikkels ord var "federe".
     Den aktive hylde har ikke laengere sin egen label-regel: alle staar ens, og
     den aktive kendes paa den sorte ring (.plp__disc-marker). */
  .plp__disc-label { margin-top: 12px; font-size: 13px; font-weight: 700; color: var(--color-ink); }

  /* TELEFON: 6 CIRKLER PR. RAEKKE, INGEN SCROLLER (Mikkel, 2026-09-07: "cirklerne
     under hver collection er for store, de skal vaere meget mindre, 2 raekker af
     5 cirkler skal der vaere plads til" — og samme dag: "6 per række i stedet").
     Foer stod de 100 px i én vandret scroller: paa 390 px saa man 3,5 cirkler af
     hudplejes 12, og resten laa ude til hoejre hvor ingen vidste de var. Nu er
     raekken et gitter med seks kolonner (--disc-cols), og hylderne fylder det op:
     hudpleje 6+6, haar 6+4, krop 6+3, makeup 6+2, duft 6. Fem gav hudpleje 5+5+2.

     Cirklen er kolonnens bredde (aspect-ratio 1) og altsaa flydende:
     41 px ved 320, 48 ved 360, 53 ved 390, 60 ved 430. Ingen fast stoerrelse,
     for seks faste cirkler + fem gaps kan ikke passe paa alle telefoner.

     Labelen er 700 som paa desktop men i clamp(8, 2.5vw, 10): 13 px "Ansigtscreme"
     er 90 px bred og kolonnen 53. De laengste ord (Ansigtscreme 66 px ved 390,
     Deodoranter 60) stikker ud i gap'et paa hver side — maalt: ingen label roerer
     sin nabo paa 360/390/430, fordi de lange ord aldrig staar ved siden af hinanden.
     Ved 320 roerte Eksfoliering og Ansigtsolie hinanden med 9 px-labels; 8 px
     loeser det (spild 3 px i et gap paa 8). Teksten er centreret under sin cirkel
     (flex-item i en align-items: center-kolonne overloeber symmetrisk).

     Teksten INDE i cirklerne (Alle/Bundles/Tilbud + hylder uden foto) staar paa
     telefon i TEKSTSNITTET (Instrument Sans via --font-primary--family, 700) og
     ikke i det extended display-snit: "BUNDLES" maaler 46 px ved 7 px extended, og
     en 41-48 px cirkel med kant og padding har 35-42 px. Husreglen er i forvejen at
     alt under 13 px koerer paa tekstsnittet; cirklerne var undtagelsen paa desktop,
     hvor der er 100 px at goere godt med. Graden er container-units, 15cqw klemt
     til 8-10 px. Maalt paa alle fire bredder: alt staar paa én linje inde i cirklen.

     Markoeren regnes af de samme tal som kolonnerne (100 % af raekken minus
     (cols-1) gaps, delt i cols) plus ringen, saa den er altid praecis cirklen + 3 px.
     Ringen er 3 og ikke 4: 4 px om en 41 px cirkel laeste som en tyk ramme.

     overflow-x: visible paa .plp__discs: ellers klipper scrolleren markoerens
     ring og labelen paa de yderste kolonner. Der er ikke laengere noget at rulle.
     Prototype uden push: _resp-discs-proto.mjs/.css (addStyleTag paa live). Probe
     efter push: _resp-discs.mjs --rev N --w 320|390 [--klik 6] (antal pr. raekke,
     labels, tekst-i-cirkel, kollisioner, markoerens ring). */
  @media (max-width: 749px) {
    .plp__discs { overflow-x: visible; padding-top: 14px; }
    .plp__discs-row { --disc-cols: 6; --disc-gap: 8px; --disc-ring: 3px; display: grid; grid-template-columns: repeat(var(--disc-cols), minmax(0, 1fr)); gap: 14px var(--disc-gap); width: auto; margin: 0; }
    .plp__disc-btn { width: auto; container-type: inline-size; }
    .plp__disc { width: 100%; height: auto; aspect-ratio: 1; }
    .plp__disc-label { margin-top: 6px; font-size: clamp(8px, 2.5vw, 10px); line-height: 1.2; text-align: center; }
    .plp__disc--tekst .font-grotesk { font-family: var(--font-primary--family); font-weight: 700; font-size: clamp(8px, 15cqw, 10px); padding: 0 3px; letter-spacing: 0.02em; }
    .plp__disc--util .font-grotesk { padding-inline: 2px; }
    .plp__disc-marker { width: calc((100% - (var(--disc-cols) - 1) * var(--disc-gap)) / var(--disc-cols) + 2 * var(--disc-ring)); height: auto; aspect-ratio: 1; }
  }

  /* Filter/sort bar CSS moved to snippets/filter-bar.liquid (shared with search). */

  /* Grid — tile system.
     minmax(0, 1fr) forces every column to EXACTLY equal width (1fr alone = minmax(auto,1fr),
     which lets columns grow to content -> unequal widths -> unequal box SIZES).
     gap:0 — the cards carry right+bottom hairlines, the grid paints top+left, so
     neighbours share ONE line instead of stacking two.
     margin-inline: calc(50% - 50vw) breaks ONLY the product grid out of .plp__body's
     1600px column; the hero, discs, filter bar and pagination keep their width.

     5 kolonner på desktop. Sidestørrelsen var 25 fra 2026-08-06, fordi 25 går op i
     5 og gav fem fulde rækker.

     26 FRA 2026-08-17, og det er kampagnefelterne der flytter den. Felterne lægger
     celler til gitteret, og med 25 produkter gik regnestykket ikke op på nogen
     bredde undtagen 3: der stod én tom celle tilbage i sidste række, også på
     desktop hvor der før var nul. Feltstørrelserne er 2x2, 2x1 og 1x2, altså kun
     LIGE arealer, og et gitter kan kun lukkes af et ULIGE areal når produktantal og
     kolonneantal har forskellig paritet.

     Med 26 lukker alle fire bredder: 2 kolonner + areal 2 = 28, 3 kolonner + 4 = 30,
     4 kolonner + 2 = 28, 5 kolonner + 4 = 30. Mikkels formulering var at rykke et
     produkt frem fra næste side frem for at leve med hullet, og det er præcis hvad
     det her er — side 1 tager én med, side 2 starter ved 27. Intet produkt tabes,
     ingen dubletter, og der skulle ikke opfindes nye feltformater.

     Ændrer du sidestørrelsen, så husk PER_PAGE i plp-filter.js. */
  .plp__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0;
    margin-block: 40px;
    /* Gitteret fylder .plp__body's indholdsboks, som er præcis --tile-grid-width
       bred. Højdeloftet (2,25 synlige rækker) sidder på variablen i
       css-variables.liquid, ikke her. Kolonnerne er 1fr af den bredde, så kortene
       beholder deres 4:5 — de bliver mindre, rækkerne bliver ikke højere. */
    width: 100%;
    border-top: 1px solid var(--color-line-soft);
    border-left: 1px solid var(--color-line-soft);
  }
  @media (min-width: 768px) { .plp__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
  @media (min-width: 1024px) { .plp__grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
  @media (min-width: 1280px) { .plp__grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } }


  /* .plp__empty er væk (2026-09-01): en tom kategori viser ingenting i stedet for
     en fejlside. Se kommentaren over paginate-blokken i gitteret.
     SKRIV IKKE et Liquid-tag i klartekst her. Liquid parser HELE filen, også inde
     i en CSS-kommentar, så en henvisning til grenen skrevet ud som tag blev læst
     som en rigtig, foraeldreloes else — theme check: "Attempting to end parsing
     before LiquidBranch 'else' was closed". */

  /* Pagination */
  /* Bundpolstringen var 72px OVEN PAA at det der foelger efter selv har luft:
     paa en kategoriside har `.plp__about` 48px margen plus 40px polstring, saa
     der stod 160px hvidt mellem knapperne og "OM <HYLDE>". Den kan ikke bare
     fjernes — paa soegesiden er pagerens egen polstring det ENESTE der skiller
     den fra footeren (maalt: 72px, og intet andet) — men den kan halveres. */
  .plp__pagination { display: flex; justify-content: center; align-items: center; gap: 6px; padding: 8px 0 40px; }
  .plp__page, .plp__page-arrow { display: inline-flex; align-items: center; justify-content: center; min-width: 40px; height: 40px; padding: 0 12px; border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); background: var(--color-paper); color: var(--color-ink-soft); font-size: 14px; background-image: none; }
  a.plp__page:hover, a.plp__page-arrow:hover { border-color: var(--color-ink-soft); color: var(--color-ink); }
  .plp__page.is-current { background: var(--color-ink); color: var(--color-paper); border-color: var(--color-ink); font-weight: 600; }
  .plp__page-gap { min-width: 20px; text-align: center; color: var(--color-ink-mute); }
  /* Paa telefon fyldte pageren 120px lodret for én raekke knapper paa 40px, og
     gitterets 40px margen laa oveni i begge ender. Knapperne bliver 36px (stadig
     over WCAG 2.2 AAs 24), luften omkring dem skaeres, og gitterets margen
     halveres — det sidste lukker samtidig det tomrum der stod mellem filterbaren
     og foerste kort. Maalt fra sidste vare til "OM <HYLDE>": 248px foer, 174px nu. */
  @media (max-width: 749px) {
    .plp__grid { margin-block: 24px; }
    .plp__pagination { gap: 4px; padding: 4px 0 24px; }
    .plp__page, .plp__page-arrow { min-width: 36px; height: 36px; padding: 0 9px; font-size: 13px; }
    .plp__page-gap { min-width: 14px; }
  }

  /* Kategori-tekst + FAQ. Renderes kun når der ER indhold, så en tom kategori ser
     præcis ud som før. Læsebredden holdes på 68ch: gitteret er fuld bredde, men en
     tekstlinje på 1600px kan ikke læses. Ingen nye farver eller fonte, kun de tokens
     resten af siden allerede bruger. */
  /* Introduktion under cirklerne, ikke bundtekst.
     Typen ligger tæt på heroens tagline (17px) men en tak større, så teksten
     læses som en indledning uden at skrige højere end overskriften den hører under.
     Bredden er sat i px og ikke som fuld bredde: ved fuld bredde blev linjerne
     omkring 150 tegn, og det kan man ikke læse i ét greb.
     To spalter blev afprøvet og forkastet. Teksterne er fra to til fire linjer,
     og en tre-linjers tekst balancerer 2+1, så anden spalte stod med to ord. */
  /* Tonet fuldbredde-bånd nederst, efter Matas-mønstret. Båndet går kant til kant,
     mens selve læselinjen holdes på 900px.
     Baggrunden er HVID (Mikkel 2026-09-03, afløser cream-valget fra 2026-08-26):
     SEO-teksten skal stå på hvid, ikke på sidens cream-ramme. */
  .plp__about { margin-inline: calc(50% - 50vw); padding-inline: var(--tile-inset);
    margin-top: clamp(48px, 6vw, 88px); padding-block: clamp(40px, 5vw, 76px);
    background: #fff; }
  /* Centreret spalte, som Matas gør det. Både tekst og FAQ ligger i den, så hele
     bundblokken har én venstrekant og hviler på samme creme. */
  .plp__about-inner { max-width: 900px; margin-inline: auto; }
  .plp__about-title { font-size: clamp(21px, 2vw, 26px); font-weight: 600; letter-spacing: -0.015em;
    color: var(--color-ink); margin: 0 0 14px; }
  /* Lysere end brødtekst-inken, men ikke helt nede på --color-ink-mute (#8C8378),
     som er tænkt til 11px labels og kun giver 3,6:1 mod papir. Blandingen lander
     omkring #574E47, altså stadig over AAA for brødtekst. */
  .plp__copy { max-width: none; font-size: 16px; line-height: 1.7;
    color: color-mix(in srgb, var(--color-ink-soft) 65%, var(--color-ink-mute)); }
  /* :where() saa reglen vejer (0,1,0) og ikke (0,1,1): ellers slaar den
     `> * + *` nedenfor, og afsnit efter afsnit fik 0 i stedet for 1.25em.
     Maalt paa om-siden 2026-09-11 (P mt=0px), hvor Annes tekst er lange
     afsnit i traek. Browserens egne p-marginer nulstilles stadig. */
  .plp__copy > :where(p) { margin: 0; }
  /* 1.25em, ikke 0.9: ved line-height 1.7 er et mindre spring smallere end en
     linje, og så læses flere afsnit i træk som én klump tekst. */
  .plp__copy > * + * { margin-top: 1.25em; }
  .plp__copy h2, .plp__copy h3 { color: var(--color-ink); font-weight: 600; letter-spacing: -0.01em; }
  /* 20px holder sig under .plp__about-title (op til 26px), så overskrifterne
     inde i teksten ikke konkurrerer med sektionens egen titel. */
  .plp__copy h2 { font-size: 20px; margin-top: 2.3em; }
  .plp__copy h3 { font-size: 18px; margin-top: 1.9em; }
  /* En overskrift skal sidde tættere på sin egen tekst end på afsnittet før. */
  .plp__copy h2 + *, .plp__copy h3 + * { margin-top: 0.7em; }
  .plp__copy a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 2px; }
  .plp__copy ul, .plp__copy ol { padding-left: 1.15em; }
  .plp__copy li + li { margin-top: 0.55em; }
  .plp__copy li::marker { color: var(--color-ink-mute); }
  .plp__copy strong { color: var(--color-ink); font-weight: 600; }

  /* ── Kategoritekst-moduler ──────────────────────────────────────────────
     PRÆCIS FIRE former for tekst, og det tal skal holdes:
       (ingen klasse)  almindelig brødtekst
       .cmod--split    tekst til venstre, illustration til højre
       .cmod--bullets  punktform
       .cmod--table    sammenligningstabel
     Dertil ét stort billede øverst, .cmod-hero, altid som første element.

     Tabellen kom til 2026-08-14 som den fjerde form. Begrundelsen er at
     AI-oversigter løfter tabeller direkte ind i svaret, hvilket ingen af de
     tre andre former gør. Prisen er at siderne kan komme til at se uens ud,
     så den har én regel: den bruges KUN når indholdet reelt er to eller flere
     ting stillet op mod hinanden på de samme akser (EDT mod EDP, deodorant mod
     antiperspirant). Er der kun én ting at beskrive, er det punktform. */

  .plp__copy > .cmod-hero { margin: 0 0 clamp(30px, 3.4vw, 52px);
    /* Bryder ud af tekstspalten og helt ud til samme inset som produktgitteret. */
    margin-inline: calc(50% - 50vw + var(--tile-inset)); }
  .plp__copy > .cmod-hero img { display: block; width: 100%;
    height: clamp(230px, 27vw, 430px); object-fit: cover;
    border-radius: var(--corner-radius-default); }

  /* Delt på midten, lige store spalter. Ikke en bred tekst med en smal billedstribe. */
  .plp__copy .cmod--split { display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(26px, 3.2vw, 48px); align-items: start; margin-top: 1.7em; }
  .plp__copy .cmod--split > figure { margin: 0; }
  /* Detaljebilledet i split-modulet er et FOTO (2026-09-03, Mikkel: stregtegning
     i brun blæk er forkastet). Derfor ingen mix-blend-mode her, det ville gøre
     fotoet mørkt. Samme hjørneradius som heroen, så de to billeder hører sammen. */
  .plp__copy .cmod--split img { display: block; width: 100%; height: auto;
    border-radius: var(--corner-radius-default); }
  .plp__copy .cmod--split > div > * { margin: 0; }
  .plp__copy .cmod--split > div > * + * { margin-top: 0.95em; }

  .plp__copy .cmod--bullets { list-style: none; padding: 0; margin-top: 1.4em; }
  .plp__copy .cmod--bullets > li { position: relative; padding-left: 24px; margin: 0; }
  .plp__copy .cmod--bullets > li + li { margin-top: 0.9em; }
  /* Streg frem for prik: rolige, vandrette markeringer klæder den serif-tunge sats. */
  .plp__copy .cmod--bullets > li::before { content: ""; position: absolute; left: 2px;
    top: 0.66em; width: 9px; height: 1px; background: var(--color-brand); }
  .plp__copy .cmod--bullets > li > strong:first-child { display: block; }

  /* Tabellen. Wrapperen scroller, tabellen selv gør ikke, så en bred
     sammenligning kan læses på telefon uden at kolonnerne mases sammen. */
  .plp__copy .cmod--table { margin-top: 1.6em; overflow-x: auto;
    -webkit-overflow-scrolling: touch; }
  .plp__copy .cmod--table table { width: 100%; min-width: 460px;
    border-collapse: collapse; font-size: 15px; }
  .plp__copy .cmod--table th, .plp__copy .cmod--table td {
    text-align: left; vertical-align: top; padding: 11px 16px 11px 0;
    border-bottom: 1px solid var(--color-line); }
  .plp__copy .cmod--table thead th { padding-top: 0; font-weight: 600;
    font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--color-ink-mute); border-bottom-color: var(--color-ink); }
  /* Første kolonne er raden's navn og skal kunne skimmes lodret. */
  .plp__copy .cmod--table tbody th, .plp__copy .cmod--table td:first-child {
    font-weight: 600; color: var(--color-ink); white-space: nowrap; }
  .plp__copy .cmod--table tbody tr:last-child th,
  .plp__copy .cmod--table tbody tr:last-child td { border-bottom: 0; }

  /* Skal stå EFTER grundreglen, ellers vinder den på mobil pga. samme specificitet. */
  @media (max-width: 760px) {
    .plp__copy { font-size: 15px; }
    .plp__about-inner { max-width: none; }
    .plp__copy .cmod--split { grid-template-columns: minmax(0, 1fr); gap: 20px; }
    .plp__copy > .cmod-hero img { height: clamp(190px, 46vw, 260px); }
    .plp__copy .cmod--table table { font-size: 14px; }
    .plp__copy .cmod--table th, .plp__copy .cmod--table td { padding-right: 12px; }
  }

  /* Ligger inde i .plp__about-inner, så bredden og centreringen kommer derfra.
     Ingen egen bundpolstring: båndets padding-block afslutter blokken. */
  .plp__faq { max-width: none; margin-top: clamp(32px, 4vw, 56px); }
  .plp__faq-title { font-size: 22px; font-weight: 700; letter-spacing: -0.02em; color: var(--color-ink); }
  .plp__faq-list { margin-top: 16px; border-top: 1px solid var(--color-line); }
  .plp__faq-item { border-bottom: 1px solid var(--color-line); }
  .plp__faq-q { cursor: pointer; list-style: none; padding: 16px 32px 16px 0; position: relative; font-size: 16px; font-weight: 500; color: var(--color-ink); }
  .plp__faq-q::-webkit-details-marker { display: none; }
  .plp__faq-q::after { content: "+"; position: absolute; right: 4px; top: 50%; transform: translateY(-50%); font-size: 20px; line-height: 1; color: var(--color-ink-mute); }
  .plp__faq-item[open] .plp__faq-q::after { content: "−"; }
  .plp__faq-a { padding: 0 32px 20px 0; font-size: 15px; line-height: 1.65; color: var(--color-ink-soft); }
  .plp__faq-a > * + * { margin-top: 0.8em; }
/* END_SECTION:collection */

/* START_SECTION:collections (INDEX:8) */
/* Samme sidekant som gitteret, heroen og filterbaren overalt ellers. Uden den
     lå indholdet klods op ad vinduets kant og flugtede ikke med noget. */
  .cats { padding-inline: var(--tile-inset); padding-bottom: clamp(56px, 8vw, 96px); background: var(--color-paper); }

  .cats__head { padding-block: clamp(28px, 4vw, 48px) clamp(24px, 3vw, 40px); }
  .cats__crumbs { font-family: var(--font-primary--family); font-weight: 600;
    font-size: 10px; letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-mute); }
  .cats__crumbs a { color: inherit; background-image: none; }
  .cats__crumbs a:hover { color: var(--color-ink); }
  .cats__crumbs span { margin: 0 8px; }
  .cats__crumbs span:last-child { margin-right: 0; color: var(--color-ink-soft); }
  .cats__title {
    margin: 14px 0 0;
    font-size: clamp(1.375rem, 3.1vw, 2.356rem);
    line-height: 0.95;
    color: var(--color-ink);
  }
  .cats__intro { margin: 14px 0 0; max-width: 52ch; font-size: 15px; line-height: 1.5; color: var(--color-ink-soft); }

  .cats__grid { display: grid; grid-template-columns: 1fr; gap: clamp(28px, 3vw, 40px); }
  @media (min-width: 700px) { .cats__grid { grid-template-columns: repeat(2, 1fr); } }
  @media (min-width: 1180px) { .cats__grid { grid-template-columns: repeat(3, 1fr); } }

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

  .cats__media {
    position: relative;
    display: block;
    aspect-ratio: 3 / 2;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    background: var(--color-bg-soft);
    background-image: none;
    isolation: isolate;
  }
  .cats__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2;
    transition: transform 600ms cubic-bezier(0.2, 0, 0.2, 1); }
  .cats__media:hover img { transform: scale(1.04); }
  .cats__tint { position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(0deg, rgba(6,4,3,0.78) 0%, rgba(6,4,3,0.3) 45%, rgba(6,4,3,0.05) 100%); }
  .cats__label { position: absolute; inset-inline: 0; bottom: 0; display: flex; align-items: baseline;
    gap: 12px; padding: 18px 20px; }
  .cats__name {
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: clamp(1.3rem, 2vw, 1.8rem);
    line-height: 1;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    color: var(--color-background);
  }
  .cats__count { font-size: 12px; color: rgba(244,234,217,0.7); white-space: nowrap; }

  /* Kategori uden bannerfil: en ren flade i stedet for et laant foto.
     Navnet staar paa fuld daekning, saa det skal ikke bruge den lyse tekstfarve
     der hoerer til et moerkt billede. */
  .cats__media--ink { background: var(--color-black); }
  .cats__media--ink .cats__name { color: var(--color-background); }
  .cats__media--ink .cats__count { color: rgba(249,243,239,0.72); }
  .cats__media--sand  { background: var(--color-sand); }
  .cats__media--blush { background: var(--color-blush); }
  .cats__media--lime  { background: var(--color-lime); }
  .cats__media--soft  { background: var(--color-bg-soft); }
  .cats__media--sand .cats__name,
  .cats__media--blush .cats__name,
  .cats__media--lime .cats__name,
  .cats__media--soft .cats__name { color: var(--color-ink); }
  .cats__media--sand .cats__count,
  .cats__media--blush .cats__count,
  .cats__media--lime .cats__count,
  .cats__media--soft .cats__count { color: var(--color-ink-mute); }

  .cats__body { padding-top: 14px; }
  .cats__tagline { margin: 0; font-size: 14px; line-height: 1.5; color: var(--color-ink-soft); }

  /* Hylderne som en tæt, læsbar liste. Prikkerne står MELLEM navnene og ikke foran,
     så rækken læses som én linje tekst i stedet for som otte punkter under hinanden. */
  .cats__shelves { display: flex; flex-wrap: wrap; list-style: none; margin: 12px 0 0; padding: 0; }
  .cats__shelves li { display: flex; align-items: center; }
  .cats__shelves li:not(:last-child)::after {
    content: "·";
    margin: 0 8px;
    color: var(--color-ink-mute);
    opacity: 0.6;
  }
  .cats__shelves a {
    font-size: 13px;
    line-height: 1.9;
    color: var(--color-ink-soft);
    background-image: none;
    text-underline-offset: 3px;
  }
  .cats__shelves a:hover { color: var(--color-ink); text-decoration: underline; }

  .cats__all {
    display: inline-block;
    margin-top: 14px;
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink);
    background-image: none;
    text-decoration: underline;
    text-underline-offset: 4px;
  }
  .cats__all:hover { color: var(--color-plum); }
/* END_SECTION:collections */

/* START_SECTION:contact (INDEX:9) */
/* Samme regel som brands/profil: cream er headerens, siden selv er hvid. */
  .kontakt { background: var(--color-paper); padding-bottom: clamp(64px, 9vw, 120px); }

  .kontakt__head { padding: clamp(16px, 2vw, 28px) var(--tile-inset) 0; }
  .kontakt__crumbs {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .kontakt__crumbs a { color: inherit; background-image: none; }
  .kontakt__crumbs a:hover { color: var(--color-ink); }

  .kontakt__title {
    margin: clamp(20px, 2.4vw, 36px) 0 0;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: clamp(2rem, 4vw, 3.4rem);
    line-height: 1;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .kontakt__intro {
    margin: 14px 0 0;
    font-size: 15px;
    line-height: 1.5;
    max-width: 52ch;
    color: var(--color-ink-soft);
  }

  .kontakt__grid {
    padding-inline: var(--tile-inset);
    margin-top: clamp(28px, 3.6vw, 52px);
    display: grid;
    grid-template-columns: minmax(0, 560px) minmax(0, 1fr);
    gap: clamp(32px, 6vw, 96px);
    align-items: start;
  }

  .kontakt__form { position: relative; display: flex; flex-direction: column; gap: 18px; max-width: 560px; }
  .kontakt__felt { display: flex; flex-direction: column; gap: 8px; }
  .kontakt__felt label {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .kontakt__felt input,
  .kontakt__felt textarea {
    border: 1px solid var(--color-line);
    background: var(--color-paper);
    padding: 12px 14px;
    border-radius: var(--corner-radius-default);
    font-family: var(--font-primary--family);
    font-size: 14px;
    color: var(--color-ink);
    outline: 0;
    transition: border-color var(--transition-base);
  }
  .kontakt__felt textarea { resize: vertical; min-height: 140px; }
  .kontakt__felt input:focus,
  .kontakt__felt textarea:focus { border-color: var(--color-ink); }

  .kontakt__send {
    align-self: flex-start;
    background: var(--color-ink);
    color: var(--color-paper);
    border: 0;
    padding: 13px 26px;
    border-radius: 0;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    cursor: pointer;
    transition: background-color var(--transition-base);
  }
  /* UI-accent er husets røde, ikke lime (HEY-DARLING.md). */
  .kontakt__send:hover { background: #C03527; }
  .kontakt__send:disabled { opacity: 0.6; cursor: default; }

  .kontakt__svar {
    margin: 0;
    padding: 12px 14px;
    font-family: var(--font-primary--family);
    font-size: 14px;
    line-height: 1.5;
    color: var(--color-ink);
  }
  .kontakt__svar:empty { display: none; }
  .kontakt__svar.is-ok { background: var(--color-blush); }
  .kontakt__svar.is-fejl { border: 1px solid #C03527; color: #C03527; }

  /* Honeypot. IKKE display:none — flere bots springer skjulte felter over. Feltet
     er i flowet, men flyttet ud af skærmen og ude af tabrunde og a11y-træ. */
  .kontakt__faelde { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

  .kontakt__info { display: flex; flex-direction: column; gap: clamp(24px, 3vw, 40px); max-width: 380px; }
  .kontakt__info-blok h2 {
    margin: 0 0 8px;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 15px;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .kontakt__info-blok p {
    margin: 0;
    font-family: var(--font-primary--family);
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-ink-soft);
  }
  .kontakt__info-blok a { color: inherit; background-image: none; }
  .kontakt__info-blok a:hover { color: var(--color-ink); text-decoration: underline; text-underline-offset: 4px; }

  @media (max-width: 899px) {
    .kontakt__grid { grid-template-columns: 1fr; }
    .kontakt__info { max-width: 560px; }
  }
/* END_SECTION:contact */

/* START_SECTION:custom-section (INDEX:10) */
.custom-section {
    position: relative;
    overflow: hidden;
    width: 100%;
  }
  .custom-section__background {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: -1;
    overflow: hidden;
  }
  .custom-section__background img {
    position: absolute;
    width: 100%;
    height: auto;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
  .custom-section__content {
    display: grid;
    grid-template-columns: var(--content-grid);
  }
  .custom-section__content > * {
    grid-column: 2;
  }
/* END_SECTION:custom-section */

/* START_SECTION:faktaside (INDEX:11) */
/* Sidens egne tre elementer. Alt andet arves af .plp__copy. */
  .faktaside { background-color: var(--color-paper); }

  .faktaside__sti {
    display: flex;
    gap: 8px;
    align-items: center;
    font-size: 12px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--color-ink-mute);
    margin-bottom: 18px;
  }
  .faktaside__sti a { color: inherit; text-decoration: none; }
  .faktaside__sti a:hover { color: var(--color-ink); text-decoration: underline; text-underline-offset: 2px; }

  .faktaside__titel { margin-top: 0; }

  .faktaside__lede {
    font-size: 17px;
    line-height: 1.6;
    color: var(--color-ink-mute);
    max-width: 62ch;
    margin: 0.6em 0 0;
  }

  /* Adskilt fra brødteksten, men ikke som en fodnote: linjen er et tillidssignal og
     bliver citeret, så den skal kunne læses. */
  .faktaside__opdateret {
    margin-top: clamp(36px, 4vw, 56px);
    padding-top: 18px;
    border-top: 1px solid var(--color-line, rgba(30, 29, 28, 0.14));
    font-size: 13px;
    color: var(--color-ink-mute);
  }
/* END_SECTION:faktaside */

/* START_SECTION:footer (INDEX:12) */
/* Svar fra nyhedsbrevs-formularen (snippets/nyhedsbrev-form.liquid). */
  .site-footer .nyhedsbrev-status { margin: 8px 0 0; font-size: 13px; line-height: 1.4; }
  .site-footer .nyhedsbrev-status.is-fejl { color: #C03527; }

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

  .site-footer {
    margin-top: 96px;
    border-top: 1px solid var(--color-line);
    background-color: var(--color-paper);
    color: var(--color-ink);
  }

  .site-footer a {
    color: inherit;
    background-image: none;
  }

  .site-footer__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(48px, 6vw, 80px) clamp(16px, 3vw, 40px) 48px;
    display: grid;
    grid-template-columns: 1.5fr 1fr 1fr 1fr;
    gap: clamp(32px, 5vw, 64px);
  }

  /* Brand column */
  .site-footer__brand-col { display: flex; flex-direction: column; gap: 18px; }
  .site-footer__brand {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    background-image: none;
  }
  .site-footer__brand-wordmark {
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 26px;
    line-height: 1;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .site-footer__brand-dot {
    display: inline-block;
    width: 0.17em;
    height: 0.17em;
    margin-inline: 0.1em;
    border-radius: var(--corner-radius-full);
    background: currentColor;
    vertical-align: 0.28em;
  }

  .site-footer__tagline {
    font-family: var(--font-primary--family);
    font-size: 14px;
    line-height: 1.6;
    max-width: 38ch;
    color: var(--color-ink-soft);
    margin: 0;
  }

  /* Newsletter */
  .site-footer__newsletter-wrap { margin-top: 8px; }
  /* Kvitteringen (ring/hak fra snippets/nyhedsbrev-form.liquid) centreres over
     formularens bredde, ikke hele kolonnens. Farven er ink, ikke kolonnens graa. */
  .site-footer .nyhedsbrev { max-width: 380px; }
  .site-footer .nyhedsbrev__kvit { color: var(--color-ink); }
  .site-footer__newsletter-eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
    margin-bottom: 10px;
  }
  /* flex-wrap + min-width:0 er ikke pynt. Et <input type=email> har en intrinsisk
     minimumsbredde (size=20 ~ 180px) og skrumper derfor ikke af sig selv, saa paa
     390px skubbede knappen 46px ud over skaermkanten og gav HELE sitet vandret
     scroll. Maalt paa live 2026-08-25. */
  .site-footer__newsletter {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    max-width: 380px;
  }
  .site-footer__newsletter input[type="email"] {
    flex: 1 1 190px;
    min-width: 0;
    border: 1px solid var(--color-line);
    background-color: var(--color-bg);
    padding: 10px 14px;
    border-radius: var(--corner-radius-default);
    font-family: var(--font-primary--family);
    font-size: 14px;
    color: var(--color-ink);
    outline: 0;
    transition: border-color var(--transition-base);
  }
  .site-footer__newsletter input[type="email"]:focus { border-color: var(--color-ink); }
  .site-footer__newsletter input::placeholder { color: var(--color-ink-mute); }
  .site-footer__newsletter button {
    flex: 0 0 auto;
    background: var(--color-ink);
    color: var(--color-background);
    border: 0;
    padding: 11px 20px;
    border-radius: 0;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    cursor: pointer;
    transition: background-color var(--transition-base);
  }
  .site-footer__newsletter button:hover { background: var(--color-plum-soft); }

  /* Link columns */
  .site-footer__col h4 {
    font-family: var(--font-primary--family);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink);
    margin: 0 0 16px;
  }
  .site-footer__col ul {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .site-footer__col a {
    font-family: var(--font-primary--family);
    font-size: 14px;
    color: var(--color-ink-soft);
    transition: color var(--transition-base);
  }
  .site-footer__col a:hover { color: var(--color-ink); }
  /* Trykfladen, ikke tegningen. Linkene staar 18px hoeje med 10px imellem, og
     paa en telefon er 18px en lille ting at ramme. `::before` laegger en usynlig
     flade 5px op og ned, saa fladen bliver 28px = raekkens fulde skridt: intet
     flytter sig, og to naboer kan ikke overlappe hinanden.
     `.link-underline` er allerede `position: relative`, saa ankeret er der. */
  .site-footer__col a::before {
    content: "";
    position: absolute;
    inset: -5px 0;
  }

  /* Bottom row */
  .site-footer__bottom { border-top: 1px solid var(--color-line-soft); }
  .site-footer__bottom-inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: 24px clamp(16px, 3vw, 40px);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 24px;
    flex-wrap: wrap;
    font-family: var(--font-primary--family);
    font-size: 12px;
    color: var(--color-ink-mute);
  }
  .site-footer__contact a { color: inherit; }
  .site-footer__contact a:hover { color: var(--color-ink); text-decoration: underline; text-underline-offset: 4px; }
  .site-footer__payments { display: flex; gap: 8px; align-items: center; }
  .site-footer__payments svg { height: 20px; width: auto; }

  @media (max-width: 989px) {
    .site-footer__inner { grid-template-columns: 1fr 1fr; }
    .site-footer__brand-col { grid-column: 1 / -1; }
  }
  @media (max-width: 549px) {
    .site-footer__inner { grid-template-columns: 1fr; }
  }
/* END_SECTION:footer */

/* START_SECTION:header (INDEX:15) */
/* ================== Site header ================== */
  /* Make the whole header section-group sticky (the wrapper's containing block is
     <body>, so it pins across the entire page). Putting sticky on .site-header alone
     fails because its parent wrapper is only header-height tall, so it scrolls away.

     Det NEGATIVE top er hele tricket bag "servicebåndet bliver i toppen": gruppen
     klæber først når dens overkant er nået 36px op over skærmkanten, altså præcis når
     båndet med fri fragt er rullet ud af syne. Så står hovedbjælken og kategorierne
     limet til kant 0 resten af vejen ned, og båndet kommer først til syne igen når man
     er helt oppe. Det koster ingen JS og kan ikke komme ud af trit med rulningen. */
  .shopify-section-group-header-group {
    position: sticky;
    top: calc(-1 * var(--sticky-utility-height));
    z-index: 50;
  }
  .site-header {
    position: relative;
    z-index: 50;
    /* Cream, ikke hvid. Headeren staar paa samme flade som resten af siden, saa
       der ikke er en kant mellem header og indhold. Kun produktkortene er hvide,
       fordi produktbillederne har hvid baggrund. Mikkel 2026-08-25. */
    background-color: var(--color-background);
    color: var(--color-ink);
  }

  /* ---- Forsiden: headeren flyder sammen med canvasset ---- */
  /* Paa forsiden staar hovedbjaelken og kategorimenuen paa INGENTING, saa den
     hvide flade loeber uafbrudt fra toppen af siden og ned, og forside-figuren
     kan stige op igennem menuen. Delelinjen under menuen er vaek af samme grund:
     en streg dér ville netop tegne den kant vi forsoeger at fjerne.

     Kampagnebaandet i toppen beholder sin lime — det er ikke en flade der skal
     forsvinde, det er et element.

     Stakken passer sig selv: header-gruppen er sticky med z-index 50, og
     canvas-sektionen har z-index auto, saa figuren tegnes UNDER headeren. Naar
     baggrunden er gennemsigtig, ses hun alligevel — men menuteksten ligger
     ovenpaa hende og bliver derfor ved med at vaere laesbar dér hvor kasketten
     skyder op mellem DUFT og KROP. Det er hele grunden til at hun ligger under
     og ikke over.

     Paa scroll fader fladen ind igen (klassen saettes af scriptet nederst i
     sektionen), og den lukker sig hen over kasketten. */
  .site-header--flyder,
  .site-header--flyder .site-header__main,
  .site-header--flyder .site-header__cat-nav {
    background-color: transparent;
  }
  .site-header--flyder .site-header__cat-nav {
    border-bottom-color: transparent;
  }
  .site-header--flyder,
  .site-header--flyder .site-header__main,
  .site-header--flyder .site-header__cat-nav {
    transition: background-color 260ms ease, border-color 260ms ease;
  }
  .site-header--flyder.er-rullet .site-header__main,
  .site-header--flyder.er-rullet .site-header__cat-nav {
    background-color: var(--color-background);
  }
  .site-header--flyder.er-rullet .site-header__cat-nav {
    border-bottom-color: var(--color-line);
  }
  @media (prefers-reduced-motion: reduce) {
    .site-header--flyder,
    .site-header--flyder .site-header__main,
    .site-header--flyder .site-header__cat-nav { transition: none; }
  }

  /* --- Kampagnebaand (lime) --- */
  /* Baandet er limen med en UDTONING i hver ende mod #e2e19c, og et
     lag korn ovenpaa (Mikkel, 2026-08-27). Overgangen er med vilje rodet: stoejen
     varierer naesten kun lodret, forvridningen flytter hver raekke til siden efter
     den, og saa er hele kanten sloeret ud. Det er tre lag paa ÉN flade — ingen
     ekstra markup, ingen filer at hente, og teksten ligger i et barn og bliver
     derfor liggende ovenpaa det hele. Raekkefoelgen er korn foerst (oeverst),
     saa venstre og hoejre vask, og til sidst farven. */
  .site-header__utility {
    /* Midterfarven er tilbage paa --color-accent, butikkens egen lime #E1FFAE.
       Den var kortvarigt #9CCE73 og derefter #CCF09C (30 % af vejen derhen);
       Mikkel kasserede begge 2026-08-27. Skal den proeves igen, saa lad
       token'et vaere og skriv en ren hex HER: --color-accent bruges ogsaa af
       forsidens hero, editorial-feltet, why-feltet og concierge, saa en
       aendring af token'et maler halvdelen af forsiden om. */
    background-color: var(--color-accent);
    background-image:
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.26'/%3E%3C/svg%3E"),
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='40' viewBox='0 0 400 40' preserveAspectRatio='none'%3E%3Cdefs%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='0' y1='0' x2='400' y2='0'%3E%3Cstop offset='0' stop-color='%23e2e19c' stop-opacity='1'/%3E%3Cstop offset='0.16' stop-color='%23e2e19c' stop-opacity='0.9'/%3E%3Cstop offset='0.48' stop-color='%23e2e19c' stop-opacity='0.32'/%3E%3Cstop offset='1' stop-color='%23e2e19c' stop-opacity='0'/%3E%3C/linearGradient%3E%3Cfilter id='f' x='-30%25' y='-30%25' width='160%25' height='160%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.007 0.16' numOctaves='3' seed='11' result='t'/%3E%3CfeDisplacementMap in='SourceGraphic' in2='t' scale='110' xChannelSelector='R' yChannelSelector='G'/%3E%3CfeGaussianBlur stdDeviation='6'/%3E%3C/filter%3E%3C/defs%3E%3Crect x='-80' y='-25' width='560' height='90' fill='url(%23g)' filter='url(%23f)'/%3E%3C/svg%3E"),
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='40' viewBox='0 0 400 40' preserveAspectRatio='none'%3E%3Cdefs%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='400' y1='0' x2='0' y2='0'%3E%3Cstop offset='0' stop-color='%23e2e19c' stop-opacity='1'/%3E%3Cstop offset='0.16' stop-color='%23e2e19c' stop-opacity='0.9'/%3E%3Cstop offset='0.48' stop-color='%23e2e19c' stop-opacity='0.32'/%3E%3Cstop offset='1' stop-color='%23e2e19c' stop-opacity='0'/%3E%3C/linearGradient%3E%3Cfilter id='f' x='-30%25' y='-30%25' width='160%25' height='160%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.007 0.16' numOctaves='3' seed='11' result='t'/%3E%3CfeDisplacementMap in='SourceGraphic' in2='t' scale='110' xChannelSelector='R' yChannelSelector='G'/%3E%3CfeGaussianBlur stdDeviation='6'/%3E%3C/filter%3E%3C/defs%3E%3Crect x='-80' y='-25' width='560' height='90' fill='url(%23g)' filter='url(%23f)'/%3E%3C/svg%3E");
    background-repeat: repeat, no-repeat, no-repeat;
    background-position: 0 0, left center, right center;
    background-size: 200px 200px, 14% 100%, 14% 100%;
    color: var(--color-ink);
    height: var(--sticky-utility-height);
    display: flex;
    align-items: center;
  }
  .site-header__utility-inner {
    width: 100%;
    max-width: var(--page-max);
    margin: 0 auto;
    padding-inline: var(--page-gutter);
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .site-header__promo {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy);
    font-size: 11px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: inherit;
    background-image: none;
    text-align: center;
  }
  a.site-header__promo:hover { text-decoration: underline; text-underline-offset: 3px; }
  @media (max-width: 549px) {
    .site-header__promo { font-size: 10px; }
  }

  /* --- Hovedbjaelke --- */
  /* Tre spor med grid: 1fr auto 1fr. Ordmaerket staar i den geometriske midte
     uanset hvor bredt soegefeltet og ikonrækken bliver. Med flex + margin-auto
     ville midten vandre saa snart kurven fik et badge. */
  .site-header__main {
    --header-control-height: 40px;
    height: var(--sticky-main-height);
    display: flex;
    align-items: center;
    background-color: var(--color-background);
  }
  .site-header__main-inner {
    width: 100%;
    max-width: var(--page-max);
    margin: 0 auto;
    padding-inline: var(--page-gutter);
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 16px;
  }

  .site-header__mobile-btn {
    display: none;
    width: 40px;
    height: 40px;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 0;
    color: var(--color-ink);
    cursor: pointer;
    grid-column: 1;
    justify-self: start;
  }
  @media (max-width: 989px) {
    .site-header__mobile-btn { display: inline-flex; }
  }

  /* --- Ordmaerke --- */
  .site-header__brand {
    grid-column: 2;
    justify-self: center;
    display: inline-flex;
    align-items: center;
    color: var(--color-ink);
    background-image: none;
    text-decoration: none;
  }
  .site-header__brand-wordmark {
    font-family: var(--font-display--family);
    font-weight: var(--weight-logo);
    font-size: clamp(20px, 2.2vw, 30px);
    line-height: 1;
    letter-spacing: var(--tracking-display);
    text-transform: uppercase;
    white-space: nowrap;
  }
  /* Prikken er et element og ikke tegnet ".". Et punktum sidder paa grundlinjen;
     Nickis prik staar midt i versalhoejden. vertical-align loefter underkanten
     saa centrum lander paa 0.365em, altsaa halv versalhoejde — tallet er derfor
     0.365 minus den halve prik og skal regnes om hver gang stoerrelsen aendres.
     Var 0.17em; Mikkel bad 2026-08-31 om en stoerre prik. */
  .site-header__brand-dot {
    display: inline-block;
    width: 0.26em;
    height: 0.26em;
    margin-inline: 0.1em;
    border-radius: var(--corner-radius-full);
    background: currentColor;
    vertical-align: 0.235em;
  }

  /* --- Soegning --- */
  /* Kun en underlinje. Ingen ramme, ingen fyld, intet forstoerrelsesglas. */
  .site-header__search {
    position: relative;
    grid-column: 1;
    justify-self: start;
    width: 100%;
    max-width: 360px;
    min-width: 0;
  }
  @media (max-width: 989px) { .site-header__search { display: none; } }

  .site-header__search-form {
    display: flex;
    align-items: center;
    height: var(--header-control-height);
    border-bottom: 1px solid var(--color-ink);
    transition: border-color var(--transition-base);
  }
  .site-header__search-form:focus-within { border-color: var(--color-ink); }
  .site-header__search input {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: 0;
    outline: 0;
    padding: 0;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 12px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .site-header__search input::placeholder { color: var(--color-ink); opacity: 1; }
  /* Aktiv soegning ekkoes tilbage: vist daempet, ryddes ved fokus. */
  .site-header__search input.is-prefilled { color: var(--color-ink-mute); }
  .site-header__search-clear {
    background: transparent;
    border: 0;
    color: var(--color-ink-mute);
    cursor: pointer;
    padding: 6px;
  }
  .site-header__search-clear:hover { color: var(--color-ink); }

  .site-header__search-dropdown {
    position: absolute;
    inset-inline: 0;
    top: calc(100% + 8px);
    display: none;
    background: var(--color-paper);
    border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-default);
    padding: 12px;
    box-shadow: 0 24px 60px -20px rgba(15,11,9,0.18);
    max-height: 480px;
    overflow-y: auto;
    z-index: 60;
  }
  /* Attributten og IKKE klassen: `data-open` saettes af theme.js paa det
     `[data-header-search]`-element motoren koerer paa, og det er nu to
     forskellige elementer — desktop-feltet (.site-header__search) og skuffens
     (.site-header__mobile-soeg). Bandt reglen sig til desktop-klassen, stod
     skuffens forslag i DOM'en med `display: none` og kom aldrig frem. */
  [data-header-search][data-open="true"] .site-header__search-dropdown { display: block; animation: fadeIn 0.18s ease-out both; }
  .site-header__search-dropdown-inner p { margin: 0; }
  .site-header__search-empty {
    padding: 12px 16px;
    color: var(--color-ink-mute);
    font-size: 14px;
  }

  /* Predictive search suggestions */
  .site-header__search-results { list-style: none; margin: 0; padding: 0; }
  .site-header__search-result {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 10px;
    border-radius: var(--corner-radius-default);
    color: var(--color-ink);
    background-image: none;
  }
  .site-header__search-result:hover,
  .site-header__search-result.is-active { background-color: var(--color-bg-soft); }
  .site-header__search-result-thumb {
    width: 48px;
    height: 48px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    border: 1px solid var(--color-line-soft);
    background: var(--color-paper);
  }
  .site-header__search-result-thumb img { width: 100%; height: 100%; object-fit: contain; padding: 4px; box-sizing: border-box; }
  .site-header__search-result-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 1px; }
  .site-header__search-result-vendor {
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .site-header__search-result-title {
    font-size: 13px;
    color: var(--color-ink);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .site-header__search-result-price { font-size: 13px; font-weight: 600; color: var(--color-ink); flex-shrink: 0; }
  .site-header__search-all {
    display: block;
    margin-top: 6px;
    padding: 10px;
    text-align: center;
    font-size: 12px;
    font-weight: 500;
    color: var(--color-ink);
    background-color: var(--color-bg-soft);
    border-radius: var(--corner-radius-default);
    background-image: none;
  }
  .site-header__search-all:hover { background-color: var(--color-line-soft); }

  /* Shortcuts: "tør hud" or a brand name is answered with the filtered page, not with
     six products the shopper then has to narrow down by hand. */
  .site-header__search-shortcuts { display: flex; flex-direction: column; gap: 4px; padding-bottom: 8px; margin-bottom: 6px; border-bottom: 1px solid var(--color-line-soft); }
  .site-header__search-shortcut {
    display: flex; align-items: center; gap: 6px; padding: 8px 10px;
    border-radius: var(--corner-radius-default); font-size: 13px; font-weight: 500;
    color: var(--color-ink); background-color: var(--color-bg-soft); background-image: none;
  }
  .site-header__search-shortcut::after { content: "→"; margin-left: auto; color: var(--color-ink-mute); }
  .site-header__search-shortcut:hover { background-color: var(--color-line-soft); }
  .site-header__search-shortcut span { color: var(--color-ink-mute); font-weight: 400; }

  /* --- Ikonraekken (valuta, konto, kurv) --- */
  .site-header__icons {
    grid-column: 3;
    justify-self: end;
    display: flex;
    align-items: center;
    gap: 22px;
  }
  .site-header__action,
  .site-header__cart {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    height: var(--header-control-height);
    color: var(--color-ink-mute);
    background-image: none;
    transition: color var(--transition-base), background-color var(--transition-base);
    position: relative;
  }
  .site-header__action--static { cursor: default; }
  a.site-header__action:hover { color: var(--color-ink); }
  /* Logget ind: fyldt person-hoved + fuld ink, og labelen er e-mail-prefixet
     (sat af theme.js' syncHeaderState) — man skal kunne SE at man er inde. */
  .site-header__action.is-ind { color: var(--color-ink); }
  .site-header__action.is-ind svg circle { fill: currentColor; }
  [data-likes-badge][hidden] { display: none; }
  .site-header__action-label {
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy);
    font-size: 12px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
  }
  /* Soegeknappen er mobilens eneste; paa desktop staar feltet fremme i headeren. */
  /* `background: none` er ikke pynt: et <button> arver browserens graa
     `buttonface`, og knappen stod som en graa kasse mellem to bare ikoner. */
  .site-header__action--soeg { display: none; border: 0; background: none; cursor: pointer; padding: 0; color: inherit; }
  @media (max-width: 989px) {
    .site-header__action--soeg { display: inline-flex; }
    .site-header__icons { gap: 4px; }
    .site-header__action-label { display: none; }
    .site-header__action--static { display: none; }
    /* Uden label er handlingen kun sin egen 18px-svg, og maalt paa live var
       trykfladen 16px bred — under WCAG 2.2 AAs 24x24. Paa 320px var den
       vaerre: ikonkolonnen er en `1fr` der taber til ordmaerkets faste bredde,
       og flex-items skrumper som standard, saa de tre ikoner stod paa 3px
       hver og var reelt ikke til at ramme. `flex: none` stopper skrumpningen,
       `min-width` giver fladen, og `justify-content: center` holder tegningen
       midt i den. */
    .site-header__action,
    .site-header__cart {
      flex: none;
      /* 24px er WCAG 2.2 AAs gulv. Raekken bar tre ikoner paa 26px; med
         soegningen er der fire, og de fire skal kunne vaere der uden at
         ordmaerket bliver skubbet skaevt. Maalt: 4x24 + 3x4 = 108px. */
      min-width: 24px;
      justify-content: center;
    }
  }
  /* Ordmaerket er `auto`-kolonnen i `1fr auto 1fr` og skrumper ikke af sig selv:
     paa 390px laa det paa 188px = 48 % af skaermen, og de to 1fr-kolonner delte
     resten — derfor blev der ikke plads til trykfladerne. Under 500px skalerer
     det med skaermen i stedet for at staa paa gulvet 20px, og gitterets luft er
     8px i stedet for 16. Ved 500px og op rammer det praecis de 20px det stod paa
     foer, saa desktop er uroert. */
  @media (max-width: 599px) {
    .site-header__main-inner { gap: 8px; }
    /* 3,7vw og ikke 4: ikonraekken er vokset med ét ikon, og ordmaerket er den
       eneste kolonne der kan give plads. Ved 540px rammer den stadig loftet paa
       20px, saa alt fra 540 og op er uroert. */
    .site-header__brand-wordmark { font-size: min(3.7vw, 20px); }
  }
  /* ── Hjertet viger for soegningen paa smalle telefoner ──────────────────
     Gitteret er `1fr auto 1fr`: ordmaerket staar i midten kun saa laenge de to
     sidekolonner kan vaere lige brede. Med FIRE ikoner (108px) kraever det en
     skaerm paa mindst 405px — under den skubbes ordmaerket til venstre, maalt
     til 52px skaevt ved 320. Med tre (80px) holder midten helt ned til 320.

     Favoritter er den der viger, fordi den er den eneste af de fire der findes
     et andet sted med sit tal paa: konto-blokken nederst i skuffen. Soegning,
     profil og kurv har ingen genvej ud over headeren. */
  @media (max-width: 419px) {
    .site-header__action[data-header-likes] { display: none; }
  }
  /* Kurven er den eneste FYLDTE ting i headeren. Den stod som en ramme der blev
     fyldt paa hover; Mikkel 2026-08-31: den skal se saadan ud hele tiden, og der
     skal ikke ske noget paa hover. Det er den handling siden vil have fat i, og
     nu er den ogsaa den eneste der ser ud som en knap.
     Rammen bliver staaende i samme farve som fyldet: uden den ville knappen vaere
     2 px lavere og smallere end foer og rykke de andre ikoner. */
  @media (min-width: 990px) {
    .site-header__cart {
      border: 1px solid var(--color-ink);
      background-color: var(--color-ink);
      color: var(--color-background);
      padding-inline: 22px;
    }
  }

  .site-header__cart-badge {
    background: var(--color-ink);
    color: var(--color-background);
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 10px;
    line-height: 1;
    padding: 4px 6px;
    min-width: 18px;
    text-align: center;
  }
  /* Taelleren vendes om paa desktop, hvor knappen er sort: ink paa ink ville vaere
     et hul. Paa mobil er kurven stadig et bart ikon, saa taelleren bliver der som
     den var — sort med cream tal. */
  @media (min-width: 990px) {
    .site-header__cart-badge {
      background: var(--color-background);
      color: var(--color-ink);
    }
  }
  @media (max-width: 989px) {
    .site-header__cart-badge {
      position: absolute;
      top: 2px;
      right: -6px;
    }
  }

  /* --- Cat nav strip --- */
  /* Menuen ligger DIREKTE paa den hvide bund. Ingen indrammet baand bag
     punkterne: Anne valgte den version 2026-08-25. Punkterne er fordelt ud over
     hele containerbredden, saa foerste og sidste punkt flugter med gitterets
     kanter praecis som i mockuppen. */
  .site-header__cat-nav {
    height: var(--sticky-cat-nav-height);
    background-color: var(--color-background);
    display: flex;
    align-items: center;
    border-bottom: 1px solid var(--color-line);
  }
  .site-header__cat-nav-inner {
    width: 100%;
    max-width: var(--page-max);
    margin: 0 auto;
    padding-inline: var(--page-gutter);
  }
  .site-header__cat-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 4px;
    overflow: visible; /* must stay visible so the mega-menu dropdown isn't clipped */
  }

  .site-header__cat-item {
    position: relative;
    display: flex;
    align-items: center;
    height: var(--sticky-cat-nav-height);
  }
  .site-header__cat-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 100%;
    padding-inline: 2px;
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy);
    font-size: clamp(12px, 1.15vw, 16px);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
    background-image: none;
    transition: opacity var(--transition-base);
    white-space: nowrap;
  }
  .site-header__cat-link:hover { opacity: 0.55; }
  .site-header__cat-item--sale .site-header__cat-link,
  .site-header__cat-item--sale .site-header__cat-link:hover { color: var(--color-ink); }
  /* Brands stod i den dybe roede #C03527 fra 2026-08-27 og er SORT igen samme dag:
     med de tre roede handlingscirkler paa kategorisiden blev der for meget roedt
     i toppen. Punktet har derfor ingen egen farveregel laengere — det arver ink og
     opacity-hoveren fra .site-header__cat-link som alle de andre. Klassen bliver,
     den bruges til at kende punktet i markuppen. */

  .site-header__cat-dropdown {
    display: none;
    position: absolute;
    left: 50%;
    top: 100%;
    transform: translateX(-50%);
    z-index: 60;
    /* Width hugs its content so categories with few subs don't leave a sparse gap
       (the feature card only renders once a category hero image is set). */
    width: max-content;
    min-width: 360px;
    max-width: min(720px, calc(100vw - 32px));
    padding-top: 0;
  }

  /* Menuen er fordelt ud over hele containerbredden (space-between), saa foerste
     og sidste punkt staar helt ude ved kanten. En dropdown centreret under dem
     falder derfor ud over skaermkanten: maalt paa live laa Hudplejes dropdown med
     venstre halvdel uden for viewporten, og hylderne var klippet af.
     De to yderste i hver ende ankres derfor til deres egen kant i stedet.
     (Med den gamle center-stillede menu opstod problemet ikke.) */
  .site-header__cat-item:nth-child(-n+2) .site-header__cat-dropdown {
    left: 0;
    right: auto;
    transform: none;
  }
  /* -n+3, ikke -n+2: Brands kom ind mellem Velvære og Tilbud 2026-08-31, og de to
     sidste punkter har ingen dropdown. Med -n+2 ville Velvære (nu tredjesidst)
     falde tilbage til centreret dropdown og kunne rage ud over skærmkanten igen. */
  .site-header__cat-item:nth-last-child(-n+3) .site-header__cat-dropdown {
    left: auto;
    right: 0;
    transform: none;
  }
  .site-header__cat-item[data-open="true"] .site-header__cat-dropdown {
    display: block;
    animation: fadeIn 0.16s ease-out both;
  }
  .site-header__cat-dropdown-inner {
    display: flex;
    gap: 12px;
    background: var(--color-paper);
    border: 1px solid var(--color-line);
    border-top: 0;
    border-radius: 0 0 var(--corner-radius-default) var(--corner-radius-default);
    box-shadow: 0 24px 60px -20px rgba(15,11,9,0.18);
    padding: 24px;
  }
  .site-header__cat-dropdown-grid {
    flex: 1;
    display: grid;
    grid-template-columns: repeat(2, minmax(150px, max-content));
    column-gap: 24px;
    row-gap: 8px;
    align-content: start;
  }
  .site-header__cat-sub {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 6px 8px;
    border-radius: 4px;
    font-size: 14px;
    color: var(--color-ink-soft);
    background-image: none;
    transition: background-color var(--transition-base), color var(--transition-base);
  }
  .site-header__cat-sub:hover {
    background-color: var(--color-bg-soft);
    color: var(--color-ink);
  }
  .site-header__cat-sub-thumb {
    width: 36px;
    height: 36px;
    flex-shrink: 0;
    overflow: hidden;
    border-radius: var(--corner-radius-full);
    border: 1px solid var(--color-line-soft);
    background: var(--color-bg-soft);
  }
  .site-header__cat-sub-thumb img { width: 100%; height: 100%; object-fit: cover; }

  /* Featured card */
  .site-header__cat-feature {
    position: relative;
    width: 208px;
    flex-shrink: 0;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    color: var(--color-paper);
    background-image: none;
    isolation: isolate;
  }
  .site-header__cat-feature > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; }
  .site-header__cat-feature-tint { position: absolute; inset: 0; z-index: -1; background: linear-gradient(to top, color-mix(in srgb, var(--color-ink) 70%, transparent), color-mix(in srgb, var(--color-ink) 30%, transparent) 50%, transparent); }
  .site-header__cat-feature-body { display: flex; flex-direction: column; height: 100%; justify-content: flex-end; padding: 16px; gap: 2px; }
  .site-header__cat-feature-eyebrow { font-size: 10px; text-transform: uppercase; letter-spacing: 0.18em; opacity: 0.8; }
  .site-header__cat-feature-name { font-size: 22px; font-weight: 700; line-height: 1.1; }
  .site-header__cat-feature-tagline { margin-top: 6px; font-size: 12px; line-height: 1.35; opacity: 0.9; }
  .site-header__cat-feature-link { margin-top: 10px; font-size: 12px; font-weight: 500; text-decoration: underline; text-underline-offset: 4px; }

  @media (max-width: 989px) {
    .site-header__cat-nav { display: none; }
  }

  /* --- Mobile menu --- */
  .site-header__mobile {
    position: fixed;
    inset: 0;
    z-index: 80;
  }
  .site-header__mobile[hidden] { display: none; }
  .site-header__mobile-scrim {
    position: absolute;
    inset: 0;
    background-color: rgba(26, 24, 22, 0.4);
    backdrop-filter: blur(2px);
    animation: fadeIn 0.18s ease-out both;
  }
  .site-header__mobile-panel {
    /* `position: relative` er ikke noedvendig — den er allerede `absolute` — men
       den ER ankeret for underpanelerne, der ligger `inset: 0` i den. */
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
    width: 88%;
    max-width: 400px;
    background: var(--color-paper);
    overflow-y: auto;
    display: flex;
    flex-direction: column;
  }
  .site-header__mobile-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-bottom: 1px solid var(--color-line);
    padding: 16px 20px;
  }
  .site-header__mobile-close {
    background: transparent;
    border: 0;
    color: var(--color-ink);
    cursor: pointer;
    padding: 8px;
  }
  /* Forslagene i skuffen er ikke en svaevende dropdown som paa desktop: der er
     ingen side at svaeve over, og en absolut placeret liste ville enten blive
     klippet af skuffen eller laegge sig oven paa menuen. Den staar i floedet, og
     skuffen ruller. */
  .site-header__mobile-soeg { position: relative; }
  /* Browserens egen ryd-knap i `type=search` staar oven i vores. Paa desktop
     skjules den af feltets egen regel; skuffens felt skal have den samme. */
  .site-header__mobile-search input::-webkit-search-cancel-button,
  .site-header__mobile-search input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }
  .site-header__mobile-soeg .site-header__search-dropdown {
    position: static;
    margin: 0 20px;
    box-shadow: none;
    border-left: 0;
    border-right: 0;
    border-radius: 0;
    max-height: 46vh;
    overflow-y: auto;
  }
  .site-header__mobile-search {
    margin: 12px 20px;
    height: 44px;
    display: flex;
    align-items: center;
    border-bottom: 1px solid var(--color-ink);
    color: var(--color-ink);
  }
  .site-header__mobile-search input {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: 0;
    outline: 0;
    padding: 0;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 13px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .site-header__mobile-search input::placeholder { color: var(--color-ink); opacity: 1; }
  .site-header__mobile-list {
    list-style: none;
    padding: 8px 20px;
    margin: 0;
  }
  .site-header__mobile-list > li {
    border-bottom: 1px solid var(--color-line-soft);
  }
  .site-header__mobile-list > li:last-child { border-bottom: 0; }
  /* `> li > a` og IKKE `a`: underpanelet ligger inde i sit eget <li>, saa en
     efterkommer-selektor ramte ogsaa hyldelinkene og gav dem menuens
     `space-between` + versaler. Maalt paa rev 277: hyldernes navne stod
     hoejrestillet i display-snittet i stedet for ved siden af deres billede. */
  .site-header__mobile-list > li > a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-block: 16px;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 16px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
    background-image: none;
  }
  /* Knappen der borer ned tegner PRAECIS som listens links. Det er den samme
     raekke; det eneste der adskiller dem er hvad chevronen betyder. */
  .site-header__mobile-drill {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding-block: 16px;
    border: 0;
    background: none;
    text-align: left;
    cursor: pointer;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 16px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  .site-header__mobile-list > li.is-sale > a { color: var(--color-ink); }

  /* ── Underpanelet: hylderne under en kategori ──────────────────────────
     Det ligger OVENPAA hele skuffen og glider ind fra hoejre, saa listen bagved
     bliver staaende praecis hvor den var. Uden `hidden` som styring ville en
     skaermlaeser kunne tabbe ned i et panel der ikke er paa skaermen. */
  .site-header__mobile-sub {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    background: var(--color-paper);
    animation: mobilSubInd 220ms cubic-bezier(0.32, 0.72, 0, 1) both;
  }
  .site-header__mobile-sub[hidden] { display: none; }
  @media (prefers-reduced-motion: reduce) { .site-header__mobile-sub { animation: none; } }
  @keyframes mobilSubInd { from { transform: translateX(14%); opacity: 0.5; } to { transform: none; opacity: 1; } }
  .site-header__mobile-subtop {
    display: flex;
    align-items: center;
    gap: 12px;
    border-bottom: 1px solid var(--color-line);
    padding: 16px 20px;
  }
  .site-header__mobile-back {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 0;
    background: none;
    padding: 4px 0;
    cursor: pointer;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .site-header__mobile-subtitle {
    margin-left: auto;
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    font-size: 14px;
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--color-ink);
  }
  /* ── Hylderne i panelet er CIRKLER: det samme gitter som paa kategorisiden ──
     (Mikkel, 2026-09-07: "Se alt i ..." lignede ikke et link; "lav istedet bare
     cirklen med alle, tilbud og bundles skal ogsaa vaere i denne menu"). Foer: en
     "Se alt"-tekstlinje + liste med 34 px-miniaturer (.site-header__mobile-sublist,
     -subal, -subthumb — alle vaek). Markuppen staar i snippets/mobil-menupunkt.liquid
     og bruger kategorisidens .plp__disc*-klasser; Shopify samler alle sektioners
     {% stylesheet %} i ét ark for hele temaet, saa de findes ogsaa paa forsiden.

     Reglerne her er MENUENS variant af mobil-gitteret i sections/collection.liquid.
     Det gitter gaelder kun under 750 px, mens skuffen findes op til 989 — og
     panelet er ~300 px bredt uanset skaerm (88 %, max 400, minus 2x20 padding).
     4 pr. raekke giver 68 px cirkler ved 390 (53 ved 320); hudpleje er 3x4, haar
     4+4+2. Labels clamp(9, 3.2vw, 11): "Ansigtscreme" er 74 px ved 11 og maa
     spilde et par px i gap'et paa 10, aldrig roere naboen (samme argument som paa
     siden: de lange ord staar ikke ved siden af hinanden). Teksten inde i
     Alle/Bundles/Tilbud er tekstsnittet i container-units, praecis som paa
     telefon-kategorisiden. Alt scopet til .site-header__mobile-sub, saa det vinder
     over grundreglerne uanset hvilken raekkefoelge Shopify samler arkene i. */
  .site-header__mobile-sub .plp__discs {
    margin: 0;
    padding: 18px 20px 24px;
    overflow: visible auto;
    flex: 1;
  }
  .site-header__mobile-sub .plp__discs-row {
    --disc-cols: 4;
    --disc-gap: 10px;
    --disc-ring: 3px;
    display: grid;
    grid-template-columns: repeat(var(--disc-cols), minmax(0, 1fr));
    gap: 18px var(--disc-gap);
    width: auto;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .site-header__mobile-sub .plp__disc-btn { width: auto; container-type: inline-size; background-image: none; }
  .site-header__mobile-sub .plp__disc { width: 100%; height: auto; aspect-ratio: 1; }
  .site-header__mobile-sub .plp__disc-label { margin-top: 8px; font-size: clamp(9px, 3.2vw, 11px); line-height: 1.2; text-align: center; }
  .site-header__mobile-sub .plp__disc--tekst .font-grotesk { font-family: var(--font-primary--family); font-weight: 700; font-size: clamp(8px, 15cqw, 10px); padding: 0 3px; letter-spacing: 0.02em; }
  /* is-brands har ingen egen farve: punktet er sort som resten, se desktop-reglen. */
  /* `gap: 0` + polstring paa hvert link i stedet for luft MELLEM dem: raekkens
     skridt er det samme 26px som foer, men trykfladen er hele skridtet i stedet
     for de 14px teksten fylder. Intet flytter sig. */
  .site-header__mobile-foot {
    margin-top: auto;
    border-top: 1px solid var(--color-line);
    padding: 6px 20px 14px;
    display: flex;
    flex-direction: column;
  }
  /* Samme raekkehoejde som kategorierne. Blokken stod foer som fire smaa
     versal-linjer paa 12px uden ikoner, altsaa som en efterskrift til menuen —
     og "Log ind" er en af de tre ting man overhovedet gaar i menuen efter. */
  .site-header__mobile-konto {
    display: flex;
    align-items: center;
    gap: 12px;
    padding-block: 13px;
    border-bottom: 1px solid var(--color-line-soft);
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 14px;
    color: var(--color-ink);
    background-image: none;
  }
  .site-header__mobile-konto:last-of-type { border-bottom: 0; }
  .site-header__mobile-konto svg:first-child { flex-shrink: 0; color: var(--color-ink-soft); }
  .site-header__mobile-kontochev { margin-left: auto; color: var(--color-ink-mute); }
  .site-header__mobile-tal {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: var(--corner-radius-full);
    background: var(--color-ink);
    color: var(--color-paper);
    font-size: 11px;
    font-weight: 600;
  }
  .site-header__mobile-tal[hidden] { display: none; }
  /* Valutaen er ren tekst: butikken koerer én valuta, og en raekke der ligner de
     andre men ikke kan klikkes er vaerre end en linje. */
  .site-header__mobile-cur {
    padding-top: 12px;
    font-family: var(--font-primary--family);
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
  }
/* END_SECTION:header */

/* START_SECTION:hello-world (INDEX:16) */
.welcome {
    display: grid;
    grid-template-columns: var(--content-grid);
    background-color: #f6f6f7;
    padding: 72px 0;
  }

  .welcome-content {
    grid-column: 2;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    width: 100%;
    padding: 0 24px;
  }

  .welcome-description {
    max-width: 80ch;
    line-height: 1.4;
    margin-top: 1.5rem;
  }

  .icon {
    width: 300px;
  }

  .highlights {
    display: grid;
    gap: 2rem;
    grid-template-columns: repeat(3, 1fr);
    margin-top: 50px;
  }

  @media (max-width: 1100px) {
    .highlights {
      grid-template-columns: 1fr;
    }
  }

  .highlight {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 24px;
    border-radius: 8px;
    background-color: #eef3ff;
    color: rgb(92, 95, 98);
    line-height: 1.4;
  }

  .highlight > * + * {
    margin-top: 1rem;
  }

  .highlight h3 {
    font-size: 1rem;
    color: rgb(32, 34, 35);
  }

  .highlight-description {
    flex: 1 1;
  }

  .highlight a {
    display: flex;
    width: fit-content;
    background-color: rgb(250, 251, 251);
    box-shadow: rgba(0, 0, 0, 0.2) 0px -3px 0px 0px inset, rgba(255, 255, 255, 0.9) 0px 2px 0px 0px inset;
    border: 1px solid rgb(140, 145, 150);
    border-radius: 4px;
    color: rgb(92, 95, 98);
    padding: 3px 10px 5px;
    text-decoration: none;
  }
/* END_SECTION:hello-world */

/* START_SECTION:hero (INDEX:17) */
.hd-canvas {
    position: relative;
    width: 100%;
    height: var(--canvas-h);
    background-color: var(--canvas-bg, #fff);
    /* overflow-y: visible — figuren er HOEJERE end canvasset og stiger op i
       headeren. Var den klippet lodret, kunne kasketten ikke naa menuen.
       `isolation: isolate` BLIVER: den holder ordet og figuren i canvassets
       egen stak, mens header-gruppen (z-index 50) stadig tegnes ovenpaa,
       og det er praecis den raekkefoelge menuteksten skal have for at
       forblive laesbar hen over kasketten. */
    /* Vandret klippes der, lodret ikke. `clip` (og ikke `hidden`) er hele
       pointen: `hidden` paa én akse tvinger den anden til `auto`, mens `clip`
       lader `overflow-y: visible` staa — saa kasketten kan stadig stige op i
       headeren, men det bevidst overstore slorede ord kan ikke laengere give
       hele siden vandret scroll (maalt: dokument 442px paa en 390px skaerm). */
    overflow-x: clip;
    overflow-y: visible;
    isolation: isolate;
  }

  /* Canvassets flade loeber OP bag headeren.
     At goere headeren gennemsigtig er ikke nok: bag den ligger sidens egen creme
     (#F9F3EF), og mod canvassets hvide gav det praecis den vandrette soem vi var
     ude paa at fjerne — maalt 249,243,239 i menuraekken mod 255,255,255 lige
     under den. Strimlen her maler fladens egen farve hele header-stakken op, saa
     hvidt loeber ubrudt fra sidens top og ned.

     `bottom: 100%` lader den starte i canvassets overkant og vokse opad, og
     hoejden er header-stakkens eget token — paa mobil er --sticky-cat-nav-height
     0px, og saa foelger strimlen med af sig selv.

     z-index -1: over canvassets egen baggrund, men under baade ordet og figuren,
     saa hun staar PAA det hvide og ikke bagved det. Hele canvasset ligger stadig
     under header-gruppen (z-index 50), saa menuteksten bliver liggende oeverst.

     Kampagnebaandet i toppen er uigennemsigtigt lime og daekker sin egen del af
     strimlen — det skal det. */
  .hd-canvas::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 100%;
    height: var(--sticky-stack-total);
    background-color: var(--canvas-bg, #fff);
    z-index: -1;
    pointer-events: none;
  }

  /* Det sloerede roede ord. Ligger nederst i stakken, bag figuren. */
  .hd-canvas__ord {
    position: absolute;
    left: 50%;
    top: var(--ord-y, 50%);
    transform: translate(-50%, -50%);
    z-index: 0;
    font-family: var(--font-display--family);
    font-weight: var(--weight-logo, 900);
    letter-spacing: var(--tracking-display);
    font-size: var(--ord-grad);
    line-height: 0.78;
    color: var(--ord-farve, #C03527);
    filter: blur(var(--ord-sloer, 18px));
    white-space: nowrap;
    pointer-events: none;
    user-select: none;
  }

  /* Figuren staar paa canvassets bundkant og bliver skaaret af den, ligesom
     hero-idolerne. height frem for width, saa hun skalerer med FLADENS hoejde
     og ikke med skaermens bredde — ellers vokser hun ud af canvasset paa store
     skaerme og forsvinder i det paa smaa. */
  .hd-canvas__figure {
    position: absolute;
    bottom: 0;
    left: var(--fig-x, 50%);
    transform: translateX(-50%);
    height: var(--fig-h, 100%);
    /* `width: max-content` er IKKE pynt — den holder hendes forhold paa telefon.
       Kassen er absolut placeret med `left: 50%`, saa dens raadige bredde er kun
       den HALVE skaerm. Uden en eksplicit bredde skrumpede den til shrink-to-fit,
       og `img { max-width: 100% }` fra critical.css klippede saa bredden ned til
       kassens — mens `height: 100%` holdt hoejden fast. Resultatet var en maalt
       squash paa 0,77 under 506px skaermbredde (195x407 px hvor forholdet
       696:1120 kraever 253x407). Maalt paa live 2026-09-04.
       `max-width: none` paa billedet er samme spaerre en etage laengere ned. */
    width: max-content;
    /* Stakken i canvasset: 0 det sloerede ord, 1 hende, 2 det tomme lag. */
    z-index: 1;
  }
  .hd-canvas__figure img {
    display: block;
    height: 100%;
    width: auto;
    max-width: none;
  }


  /* Baandet ligger over figuren og flugter canvassets underkant paa pixelen.
     Det er ikke pynt: det er den kant der skjuler figurens beskaeringssnit.
     Foerste udgave af raekken havde 35px luft under sig, og saa stak en stribe
     af hende ud nedenunder. */
  .hd-canvas__baand {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
    padding-block: clamp(10px, 1.2vw, 18px);
    /* Egen flade. Uden den ville figuren vaere synlig i mellemrummene MELLEM
       logoerne og i luften over og under dem — altsaa smalle strimler af en
       person mellem maerker. Fladen goer snittet ét rent vandret skaar. */
    background-color: var(--baand-bund, #fff);
  }
/* END_SECTION:hero */

/* START_SECTION:home-bento (INDEX:18) */
.home-bento { background-color: var(--color-bg); }
  .home-bento__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(48px, 6vw, 64px) clamp(24px, 3vw, 40px);
  }
  .home-bento__grid {
    display: grid;
    gap: 12px;
  }
  @media (min-width: 768px) {
    .home-bento__grid {
      grid-template-columns: repeat(12, 1fr);
      grid-auto-rows: minmax(316px, auto);
      gap: 16px;
    }
  }
  .home-bento__tile {
    position: relative;
    overflow: hidden;
    border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-default);
    background-image: none;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    min-height: 280px;
  }
  /* Flise uden foto: ren farveflade. Farven kommer fra blokken, saa de tre fliser
     kan staa i hver sin tone uden en ny klasse pr. farve. */
  .home-bento__tile--tom { background-color: var(--flade, var(--color-sand)); }
  .home-bento__tile--xl { min-height: 480px; }
  @media (min-width: 768px) {
    .home-bento__tile--xl { min-height: 640px; grid-row: span 2; }
    .home-bento__tile--span-5 { grid-column: span 5; }
    .home-bento__tile--span-7 { grid-column: span 7; }
  }
  .home-bento__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  .home-bento__overlay {
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
  }
  .home-bento__tile--light .home-bento__overlay {
    background: linear-gradient(to top right,
      color-mix(in srgb, var(--color-paper) 90%, transparent) 0%,
      color-mix(in srgb, var(--color-paper) 50%, transparent) 50%,
      transparent 100%);
  }
  .home-bento__tile--dark .home-bento__overlay {
    background: linear-gradient(to top right,
      color-mix(in srgb, var(--color-ink) 85%, transparent) 0%,
      color-mix(in srgb, var(--color-ink) 55%, transparent) 50%,
      color-mix(in srgb, var(--color-ink) 15%, transparent) 100%);
  }
  .home-bento__copy {
    position: relative;
    padding: clamp(28px, 4vw, 40px);
  }
  .home-bento__kicker {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
  }
  .home-bento__tile--light .home-bento__kicker { color: var(--color-ink-soft); }
  .home-bento__tile--dark  .home-bento__kicker { color: color-mix(in srgb, var(--color-paper) 80%, transparent); }
  .home-bento__title {
    margin-top: 12px;
    font-family: var(--font-scream--family);
    font-weight: 700;
    letter-spacing: -0.035em;
    line-height: 0.95;
  }
  .home-bento__tile--xl .home-bento__title { font-size: clamp(22px, 2.79vw, 40px); }
  .home-bento__tile--md .home-bento__title { font-size: clamp(24px, 2.8vw, 38px); }
  .home-bento__tile--light .home-bento__title { color: var(--color-ink); }
  .home-bento__tile--dark  .home-bento__title { color: var(--color-paper); }
  .home-bento__sub {
    margin-top: 12px;
    font-family: var(--font-primary--family);
    font-size: 14px;
  }
  .home-bento__tile--light .home-bento__sub { color: var(--color-ink-soft); }
  .home-bento__tile--dark  .home-bento__sub { color: color-mix(in srgb, var(--color-paper) 80%, transparent); }
  .home-bento__cta {
    margin-top: 20px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 20px;
    border-radius: var(--corner-radius-default);
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 600;
    transition: background-color var(--transition-base);
  }
  .home-bento__tile--light .home-bento__cta { background: var(--color-ink); color: var(--color-paper); }
  .home-bento__tile--light .home-bento__cta:hover { background: var(--color-plum-soft); }
  .home-bento__tile--dark  .home-bento__cta { background: var(--color-paper); color: var(--color-ink); }
  .home-bento__tile--dark  .home-bento__cta:hover { background: var(--color-bg); }
  .home-bento__tile:hover .home-bento__cta span { transform: translateX(2px); transition: transform var(--transition-base); }
/* END_SECTION:home-bento */

/* START_SECTION:home-brands (INDEX:19) */
/* Kun sektionens ramme og overskrift. Selve baandet styles i critical.css,
     fordi snippet'en ogsaa bruges nederst i forsidens canvas. */
  .hd-maerker {
    background-color: var(--color-paper);
    padding-block: clamp(36px, 4vw, 56px);
    border-top: 1px solid var(--color-line);
  }
  .hd-maerker__head {
    max-width: 1600px;
    margin: 0 auto 24px;
    padding: 0 clamp(24px, 3vw, 40px);
  }
  .hd-maerker__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .hd-maerker__headline { margin-top: 8px; font-size: clamp(20px, 2.2vw, 30px); color: var(--color-ink); }
/* END_SECTION:home-brands */

/* START_SECTION:home-carousel (INDEX:20) */
/* Varer staar paa HVID. Husreglen er cream = kontroller, hvid = varer, og
     produktbillederne har hvid baggrund (se HEY-DARLING.md → Paletten). */
  .hd-kar { background-color: var(--color-paper); }
  .hd-kar__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(40px, 5vw, 64px) 0 clamp(40px, 5vw, 64px);
  }

  /* Overskrift og pile foelger sidens margen, men RAEKKEN goer ikke: den skal
     loebe ud til skaermkanten, saa det sidste kort er skaaret over og raekken
     dermed selv fortaeller at der er mere. Derfor sidder polstringen paa
     boernene og ikke paa `.hd-kar__inner`. */
  .hd-kar__head,
  .hd-kar__row { padding-inline: clamp(24px, 3vw, 40px); }

  .hd-kar__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    margin-bottom: 24px;
  }
  .hd-kar__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .hd-kar__headline {
    margin-top: 8px;
    font-size: clamp(20px, 2.2vw, 30px);
    color: var(--color-ink);
  }
  .hd-kar__styr { display: flex; align-items: center; gap: 20px; flex: none; }
  .hd-kar__alle {
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink-soft);
  }

  .hd-kar__pile { display: none; gap: 8px; }
  @media (min-width: 990px) { .hd-kar__pile { display: flex; } }
  .hd-kar__pil {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 38px;
    width: 38px;
    border: 1px solid var(--color-line);
    border-radius: 9999px;
    background: none;
    color: var(--color-ink);
    cursor: pointer;
    transition: border-color var(--transition-base), background-color var(--transition-base), color var(--transition-base);
  }
  .hd-kar__pil:hover { border-color: var(--color-ink); background-color: var(--color-ink); color: var(--color-cream); }

  .hd-kar__row {
    display: flex;
    gap: 16px;
    margin: 0;
    list-style: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-inline-start: clamp(24px, 3vw, 40px);
    /* Vandret rulning i raekken maa ikke forplante sig til siden bagved naar man
       rammer enden. Uden den her ruller HELE forsiden vandret paa touchpad. */
    overscroll-behavior-x: contain;
  }
  .hd-kar__row:focus-visible { outline: 2px solid var(--color-ink); outline-offset: 4px; }
  .hd-kar__celle {
    flex: 0 0 var(--kort-b);
    width: var(--kort-b);
    scroll-snap-align: start;
  }

  /* Sidste celle: en indgang til hele kollektionen, saa raekken ender i noget
     og ikke bare slipper op. Tallet er kollektionens faktiske antal varer. */
  .hd-kar__celle--mere { display: flex; }
  .hd-kar__mere {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    aspect-ratio: 3 / 4;
    border: 1px solid var(--color-line);
    border-radius: var(--corner-radius-default);
    background-image: none;
    color: var(--color-ink);
    text-align: center;
    transition: border-color var(--transition-base), background-color var(--transition-base);
  }
  .hd-kar__mere:hover { border-color: var(--color-ink); background-color: var(--color-bg-soft); }
  .hd-kar__mere .font-grotesk { font-size: 14px; }
  .hd-kar__mere-tal {
    font-family: var(--font-primary--family);
    font-size: 12px;
    color: var(--color-ink-mute);
    font-variant-numeric: tabular-nums;
  }
/* END_SECTION:home-carousel */

/* START_SECTION:home-categories (INDEX:21) */
.home-categories {
    border-bottom: 1px solid var(--color-line);
    background-color: var(--color-paper);
  }
  .home-categories__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(56px, 8vw, 80px) clamp(24px, 3vw, 40px);
  }
  .home-categories__header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    margin-bottom: 40px;
    gap: 16px;
  }
  .home-categories__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .home-categories__headline {
    margin-top: 8px;
    font-size: clamp(25px, 3.72vw, 52px);
    color: var(--color-ink);
  }
  .home-categories__see-all {
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink);
    background-image: none;
  }
  @media (max-width: 749px) { .home-categories__see-all { display: none; } }

  .home-categories__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    column-gap: 12px;
    row-gap: 32px;
  }
  @media (min-width: 750px) {
    .home-categories__grid {
      grid-template-columns: repeat(7, 1fr);
      column-gap: 16px;
    }
  }

  .home-categories__item {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    background-image: none;
    color: var(--color-ink);
  }
  .home-categories__disc {
    aspect-ratio: 1 / 1;
    width: 100%;
    overflow: hidden;
    border: 1px solid var(--color-line-soft);
    background-color: var(--color-bg-soft);
    border-radius: var(--corner-radius-full);
    transition: box-shadow var(--transition-base);
  }
  .home-categories__disc img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  .home-categories__item:hover .home-categories__disc {
    box-shadow: 0 18px 40px -18px rgba(15,11,9,0.3);
  }
  .home-categories__name {
    margin-top: 12px;
    font-family: var(--font-primary--family);
    font-size: 14px;
    font-weight: 500;
    color: var(--color-ink);
    transition: color var(--transition-base);
  }
  .home-categories__item:hover .home-categories__name { color: var(--color-rose); }
/* END_SECTION:home-categories */

/* START_SECTION:home-editorial (INDEX:22) */
.home-editorial { background-color: var(--color-paper); }
  .home-editorial__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(56px, 8vw, 96px) clamp(24px, 3vw, 40px);
    display: grid;
    gap: 48px;
  }
  @media (min-width: 768px) {
    .home-editorial__inner { grid-template-columns: 1fr 1fr; align-items: center; gap: 64px; }
  }
  .home-editorial__image {
    position: relative;
  }
  .home-editorial__image-frame {
    position: relative;
    aspect-ratio: 4 / 5;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    background-color: var(--color-bg-soft);
  }
  .home-editorial__image-frame img {
    width: 100%; height: 100%; object-fit: cover;
  }
  .home-editorial__image-label {
    position: absolute;
    left: 24px;
    bottom: 24px;
    padding: 8px 16px;
    background-color: var(--color-paper);
    border-radius: var(--corner-radius-default);
    box-shadow: 0 12px 30px -10px rgba(15,11,9,0.3);
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink);
  }
  .home-editorial__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .home-editorial__headline {
    margin-top: 16px;
    font-size: clamp(27px, 3.41vw, 50px);
    color: var(--color-ink);
  }
  /* Fremhaevningen var Fraunces kursiv. Der ER ingen kursiv i Univers Next Pro,
     og en syntetisk skraatstilling af et extended black-snit ser billigt ud.
     Ordet faar i stedet limebaandets farve som markering: den eneste kraftige
     accent i paletten, og den samme man moeder i toppen af hver side. */
  .home-editorial__headline-em {
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    letter-spacing: var(--tracking-display);
    background: var(--color-accent);
    color: var(--color-ink);
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
    padding: 0 0.1em;
  }
  .home-editorial__lede {
    margin-top: 24px;
    max-width: 28rem;
    font-family: var(--font-primary--family);
    font-size: 17px;
    line-height: 1.55;
    color: var(--color-ink-soft);
  }
  .home-editorial__cta {
    margin-top: 32px;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 16px 28px;
    background-color: var(--color-ink);
    color: var(--color-paper);
    border-radius: var(--corner-radius-default);
    font-family: var(--font-primary--family);
    font-size: 14px;
    font-weight: 600;
    background-image: none;
    transition: background-color var(--transition-base);
  }
  .home-editorial__cta:hover { background-color: var(--color-plum-soft); }
/* END_SECTION:home-editorial */

/* START_SECTION:home-guides (INDEX:23) */
/* HVID, ikke cream (Mikkel 2026-09-03: "goer baggrunden bag alt det her med
     guides hvid"). Overtrumfer cream=laesestof-husreglen for guide-fladerne, og
     matcher i oevrigt forsidens naboer (karruseller, split, nyhedsbrev), der alle
     staar paa paper. */
  .hd-guides { background-color: var(--color-paper); }
  .hd-guides__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(48px, 5vw, 72px) clamp(24px, 3vw, 40px);
  }
  .hd-guides__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    margin-bottom: 28px;
  }
  .hd-guides__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .hd-guides__headline { margin-top: 8px; font-size: clamp(20px, 2.2vw, 30px); color: var(--color-ink); }
  .hd-guides__alle {
    flex: none;
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink-soft);
  }

  .hd-guides__row {
    display: grid;
    gap: 16px;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  @media (min-width: 768px) { .hd-guides__row { grid-template-columns: repeat(3, 1fr); } }

  .hd-guide { display: block; background-image: none; }
  .hd-guide__flade {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    background-color: var(--kort, var(--color-bg-soft));
    padding: 24px;
  }
  /* Polstringen er til TEKST-kortet (titlen paa den farvede flade). Et kort MED
     billede skal fylde hele fladen, ellers staar der en 24px disc-farvet ramme
     om fotoet - maalt paa live 2026-09-02 da de foerste tre guides fik billeder. */
  .hd-guide:not(.hd-guide--tekst) .hd-guide__flade { padding: 0; }
  .hd-guide__flade img { height: 100%; width: 100%; object-fit: cover; padding: 0; }
  .hd-guide__stor {
    font-size: clamp(18px, 1.7vw, 24px);
    line-height: 0.95;
    color: var(--kort-ink, var(--color-ink));
  }
  .hd-guide__titel {
    display: block;
    margin-top: 14px;
    font-family: var(--font-primary--family);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.35;
    color: var(--color-ink);
  }
  .hd-guide:hover .hd-guide__titel { text-decoration: underline; text-underline-offset: 3px; }
/* END_SECTION:home-guides */

/* START_SECTION:home-klub (INDEX:24) */
.home-klub__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(56px, 8vw, 96px) clamp(24px, 3vw, 40px);
  }
  .home-klub__card {
    position: relative;
    overflow: hidden;
    border-radius: var(--corner-radius-default);
    background-color: var(--color-plum);
    color: var(--color-paper);
    isolation: isolate;
  }
  .home-klub__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
  }
  .home-klub__bg img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0.25;
  }
  .home-klub__tint {
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(120deg, rgba(26,24,22,0.95) 0%, rgba(44,44,44,0.85) 100%);
  }
  .home-klub__grid {
    display: grid;
    gap: 40px;
    padding: clamp(32px, 5vw, 80px);
  }
  @media (min-width: 768px) {
    .home-klub__grid {
      grid-template-columns: 1.4fr 1fr;
      align-items: center;
    }
  }

  .home-klub__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: color-mix(in srgb, var(--color-paper) 60%, transparent);
  }
  .home-klub__headline {
    margin-top: 16px;
    font-size: clamp(30px, 4.03vw, 62px);
    color: var(--color-paper);
  }
  .home-klub__lede {
    margin-top: 24px;
    max-width: 28rem;
    font-size: 17px;
    line-height: 1.5;
    color: color-mix(in srgb, var(--color-paper) 85%, transparent);
  }
  .home-klub__ctas { margin-top: 32px; display: flex; flex-wrap: wrap; gap: 12px; }
  .home-klub__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 16px 28px;
    border-radius: var(--corner-radius-default);
    font-family: var(--font-primary--family);
    font-size: 14px;
    background-image: none;
    transition: background-color var(--transition-base);
  }
  .home-klub__cta--primary {
    background-color: var(--color-paper);
    color: var(--color-ink);
    font-weight: 600;
  }
  .home-klub__cta--primary:hover { background-color: var(--color-bg); }
  .home-klub__cta--secondary {
    background: transparent;
    color: var(--color-paper);
    border: 1px solid color-mix(in srgb, var(--color-paper) 30%, transparent);
    font-weight: 500;
  }
  .home-klub__cta--secondary:hover { background-color: color-mix(in srgb, var(--color-paper) 10%, transparent); }

  .home-klub__stats {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
    align-self: center;
  }
  .home-klub__stat {
    padding: 20px;
    border-radius: var(--corner-radius-default);
    border: 1px solid color-mix(in srgb, var(--color-paper) 15%, transparent);
    background-color: color-mix(in srgb, var(--color-paper) 5%, transparent);
    backdrop-filter: blur(8px);
  }
  .home-klub__stat-num {
    font-family: var(--font-scream--family);
    font-size: 2.25rem;
    font-weight: 700;
    letter-spacing: -0.02em;
  }
  .home-klub__stat-label {
    margin-top: 4px;
    font-family: var(--font-primary--family);
    font-size: 12px;
    color: color-mix(in srgb, var(--color-paper) 70%, transparent);
  }
/* END_SECTION:home-klub */

/* START_SECTION:home-newsletter (INDEX:25) */
.hd-nyhed { background-color: var(--color-paper); }
  .hd-nyhed__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(32px, 4vw, 56px) clamp(24px, 3vw, 40px);
  }
  .hd-nyhed__kort {
    display: grid;
    gap: 28px;
    align-items: center;
    padding: clamp(32px, 4vw, 64px);
    border-radius: var(--corner-radius-default);
    background-color: var(--nyhed-bund, var(--color-accent));
    color: var(--nyhed-ink, var(--color-ink));
  }
  @media (min-width: 900px) {
    .hd-nyhed__kort { grid-template-columns: 1.2fr 1fr; gap: 48px; }
  }
  .hd-nyhed__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    opacity: 0.7;
  }
  .hd-nyhed__headline { margin-top: 10px; font-size: clamp(26px, 3.4vw, 46px); }
  .hd-nyhed__lede {
    margin-top: 14px;
    max-width: 46ch;
    font-family: var(--font-primary--family);
    font-size: 15px;
    line-height: 1.5;
    opacity: 0.85;
  }

  /* flex-wrap + min-width: 0 er ikke pynt. Et <input type="email"> har en
     intrinsisk mindstebredde der er stoerre end de fleste kolonner, og uden
     min-width: 0 skyder feltet ud over kortets kant. Samme fix som i footeren. */
  .hd-nyhed__felt { display: flex; flex-wrap: wrap; gap: 10px; }
  .hd-nyhed__felt input[type="email"] {
    flex: 1 1 200px;
    min-width: 0;
    padding: 14px 16px;
    border: 1px solid currentColor;
    background-color: transparent;
    color: inherit;
    font-size: 15px;
  }
  .hd-nyhed__felt input::placeholder { color: currentColor; opacity: 0.55; }
  .hd-nyhed__felt button {
    flex: none;
    padding: 14px 28px;
    border: 1px solid var(--color-ink);
    background-color: var(--color-ink);
    color: var(--color-cream);
    font-family: var(--font-display--family);
    font-weight: var(--weight-heavy, 900);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    font-size: 13px;
    cursor: pointer;
  }
  .hd-nyhed .nyhedsbrev-status { margin: 10px 0 0; font-size: 14px; line-height: 1.4; }
  .hd-nyhed .nyhedsbrev-status.is-fejl { color: #C03527; }
  .hd-nyhed__finetryk {
    margin-top: 12px;
    font-family: var(--font-primary--family);
    font-size: 12px;
    line-height: 1.45;
    opacity: 0.7;
  }
/* END_SECTION:home-newsletter */

/* START_SECTION:home-products-grid (INDEX:26) */
.home-grid__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(56px, 8vw, 80px) clamp(24px, 3vw, 40px);
  }
  .home-grid__header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    margin-bottom: 40px;
    gap: 16px;
  }
  .home-grid__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .home-grid__headline {
    margin-top: 8px;
    font-size: clamp(25px, 3.72vw, 52px);
    color: var(--color-ink);
  }
  .home-grid__headline--grotesk {
    font-size: clamp(22px, 2.11vw, 27px);
    font-weight: 700;
    letter-spacing: -0.025em;
  }
  .home-grid__see-all {
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink);
    background-image: none;
  }
  @media (max-width: 749px) { .home-grid__see-all { display: none; } }

  .home-grid__cards {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    column-gap: 16px;
    row-gap: 48px;
  }
  @media (min-width: 750px) {
    .home-grid__cards { grid-template-columns: repeat(4, 1fr); }
  }
/* END_SECTION:home-products-grid */

/* START_SECTION:home-split (INDEX:27) */
.home-split {
    border-block: 1px solid var(--color-line);
    background-color: var(--color-paper);
  }
  .home-split__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(56px, 8vw, 80px) clamp(24px, 3vw, 40px);
  }
  .home-split__grid { display: grid; gap: 64px; }
  @media (min-width: 1024px) {
    .home-split__grid { grid-template-columns: 1fr 1fr; gap: 64px; }
  }
  .home-split__header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    margin-bottom: 32px;
    gap: 16px;
  }
  .home-split__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .home-split__eyebrow--sale { color: var(--color-sale); }
  .home-split__headline {
    margin-top: 8px;
    font-size: clamp(22px, 2.11vw, 27px);
    font-weight: 700;
    letter-spacing: -0.025em;
    color: var(--color-ink);
  }
  .home-split__see-all {
    font-family: var(--font-primary--family);
    font-size: 13px;
    font-weight: 500;
    color: var(--color-ink);
    background-image: none;
  }
  .home-split__see-all--sale { color: var(--color-sale); }
  @media (max-width: 749px) { .home-split__see-all { display: none; } }

  .home-split__cards {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    column-gap: 16px;
    row-gap: 40px;
  }
/* END_SECTION:home-split */

/* START_SECTION:home-why (INDEX:28) */
.home-why {
    background-color: var(--color-ink);
    color: var(--color-paper);
  }
  .home-why__inner {
    max-width: 1600px;
    margin: 0 auto;
    padding: clamp(64px, 8vw, 96px) clamp(24px, 3vw, 40px);
  }
  .home-why__intro {
    max-width: 36rem;
    margin-bottom: 48px;
  }
  .home-why__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: color-mix(in srgb, var(--color-paper) 60%, transparent);
  }
  .home-why__headline {
    margin-top: 12px;
    font-size: clamp(25px, 3.41vw, 45px);
    color: var(--color-paper);
  }
  /* Fremhaevningen var Fraunces kursiv. Der ER ingen kursiv i Univers Next Pro,
     og en syntetisk skraatstilling af et extended black-snit ser billigt ud.
     Ordet faar i stedet limebaandets farve som markering: den eneste kraftige
     accent i paletten, og den samme man moeder i toppen af hver side. */
  .home-why__headline-em {
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    letter-spacing: var(--tracking-display);
    background: var(--color-accent);
    color: var(--color-ink);
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
    padding: 0 0.1em;
  }
  .home-why__lede {
    margin-top: 20px;
    font-family: var(--font-primary--family);
    font-size: 16px;
    line-height: 1.6;
    color: color-mix(in srgb, var(--color-paper) 80%, transparent);
  }

  .home-why__stats { display: grid; gap: 32px; }
  @media (min-width: 768px) {
    .home-why__stats { grid-template-columns: repeat(3, 1fr); }
  }
  .home-why__stat {
    border-top: 1px solid color-mix(in srgb, var(--color-paper) 20%, transparent);
    padding-top: 24px;
  }
  .home-why__stat-num {
    font-family: var(--font-scream--family);
    font-size: clamp(35px, 4.34vw, 60px);
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--color-paper);
  }
  .home-why__stat-label {
    margin-top: 12px;
    font-family: var(--font-primary--family);
    font-size: 14px;
    color: color-mix(in srgb, var(--color-paper) 70%, transparent);
  }
/* END_SECTION:home-why */

/* START_SECTION:product (INDEX:31) */
/* HVID, ikke cream (2026-09-02). Produktsiden er den ene side hvor billedet
     ER siden: hovedbilledet, seks miniaturer og otte produktkort staar alle paa
     hvid bund, fordi de faerreste produktfotos er PNG'er. Med cream under dem
     laa der en synlig graa ramme rundt om hver eneste hvid firkant. Samme valg
     som kategorisiden traf i .plp. */
  .pdp { background-color: var(--color-paper); }
  .pdp__crumbs-wrap, .pdp__brand, .pdp__hero, .pdp__pairs, .pdp__tabs-wrap, .pdp__reviews, .pdp__more {
    max-width: 1440px; margin: 0 auto; padding-inline: clamp(24px, 3vw, 40px);
  }
  .pdp__reviews { padding-bottom: 80px; }
  .pdp__reviews-sum { display: flex; align-items: center; gap: 10px; margin: 6px 0 0; font-size: 13px; color: var(--color-ink-mute); }
  .pdp__reviews-tom { max-width: 52ch; }
  .pdp__reviews-tom p { margin: 0; font-size: 15px; line-height: 1.6; color: var(--color-ink-soft); }
  .pdp__reviews-cta {
    display: inline-flex; align-items: center; box-sizing: border-box; margin-top: 16px;
    min-height: 44px; padding: 0 22px; border: 1px solid var(--color-ink); border-radius: var(--corner-radius-default);
    background: transparent; color: var(--color-ink); background-image: none; text-decoration: none;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase;
    transition: background-color var(--transition-base), color var(--transition-base);
  }
  .pdp__reviews-cta:hover { background: var(--color-ink); color: var(--color-paper); }
  .pdp__reviews-tom .pdp__reviews-note { margin-top: 12px; font-size: 12px; color: var(--color-ink-mute); }
  .pdp__reviews-mere { margin: 20px 0 0; font-size: 14px; color: var(--color-ink-soft); }
  .pdp__reviews-mere a { color: var(--color-ink); background-image: none; text-decoration: underline; text-underline-offset: 3px; }
  .pdp__reviews-list { margin: 20px 0 0; padding: 0; list-style: none; display: grid; gap: 0; border-top: 1px solid var(--color-line); }
  .pdp__review { padding: 20px 0; border-bottom: 1px solid var(--color-line-soft); max-width: 72ch; }
  .pdp__review-top { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; font-size: 13px; color: var(--color-ink-mute); }
  .pdp__review-name { color: var(--color-ink); font-weight: 600; }
  .pdp__review-verified { font-size: 11px; font-weight: 600; letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-green); }
  .pdp__review-title { margin: 8px 0 0; font-weight: 600; font-size: 15px; color: var(--color-ink); }
  .pdp__review-body { margin: 6px 0 0; font-size: 15px; line-height: 1.55; color: var(--color-ink-soft); }
  .pdp__crumbs-wrap { padding-top: 24px; }
  .pdp__crumbs { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--color-ink-mute); }
  .pdp__crumbs a { color: inherit; background-image: none; }
  .pdp__crumbs a:hover { color: var(--color-ink); }
  /* Samme greb som i footeren: broedkrummens links er 15px hoeje. Fladen vokser
     til 27px uden at noget flytter sig. */
  .pdp__crumbs a { position: relative; }
  .pdp__crumbs a::before {
    content: "";
    position: absolute;
    inset: -6px -2px;
  }
  .pdp__crumbs-current { color: var(--color-ink); }

  /* Hero */
  .pdp__hero { display: grid; gap: 48px; padding-block: 40px; }
  /* Gitterceller har `min-width: auto` og kan derfor ikke blive smallere end
     deres eget indhold. Paa 320px pressede koeb-formen kolonnen ud paa 305px i
     et 272px bredt indhold, og HELE siden fik vandret scroll. */
  .pdp__hero > * { min-width: 0; }
  @media (min-width: 768px) { .pdp__hero { grid-template-columns: 1fr 1fr; } }
  .pdp__gallery { display: grid; grid-template-columns: 68px 1fr; gap: 16px; align-self: start; }
  .pdp__gallery--single { grid-template-columns: 1fr; }   /* single image → no empty thumb gutter */
  /* --pdp-gallery-top is set by JS from the REAL measured header height (robust vs cat-nav wrapping); the calc() is a no-JS fallback. */
  @media (min-width: 768px) { .pdp__gallery { position: sticky; top: var(--pdp-gallery-top, calc(var(--sticky-stack-pinned) + 40px)); } }
  .pdp__thumbs { display: flex; flex-direction: column; gap: 12px; }
  .pdp__thumb { aspect-ratio: 1/1; width: 100%; overflow: hidden; border: 1px solid var(--color-line-soft); border-radius: 4px; background: var(--color-paper); cursor: pointer; padding: 0; transition: border-color var(--transition-base); }
  .pdp__thumb.is-active { border-color: var(--color-ink); }
  .pdp__thumb img { width: 100%; height: 100%; object-fit: contain; padding: 6px; box-sizing: border-box; }
  /* INGEN RAMME (2026-09-02). Produktet skal flyde frit paa siden. Rammen gav
     mening da siden var cream og den hvide billedflade skulle afgraenses; med
     hvid bund hele vejen indrammede den ingenting og efterlod bare en firkant. */
  .pdp__main-image { position: relative; aspect-ratio: 4/5; overflow: hidden; border-radius: var(--corner-radius-default); background: var(--color-paper); }
  .pdp__main-image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; padding: clamp(20px, 7%, 48px); box-sizing: border-box; }

  /* === OVERSKRIFTERNE PAA PRODUKTSIDEN (2026-09-02) ===
     Univers Next Pro Extended ExtraBlack baar OTTE ting paa én PDP: logo, menu,
     kampagnebaand, h1, pris, "Alt du skal vide", accordion-titlerne og
     sektionsoverskrifterne. Kittet har kun ÉN vaegt og ÉT snit, saa titel, pris
     og "ALT DU SKAL VIDE" stod som tre skrig lige efter hinanden, og siden havde
     ingen anden stemme at give noget af det til. Mikkel: "bliver lidt irriterende".

     Ni kandidater blev skudt paa den her side (`_hd-font-kandidater.mjs`, ark i
     hd-shots/font-sammenligning.png). Valget faldt paa den der IKKE tilfoejede
     en font: tekstsnittet vi allerede self-hoster, rykket op i vaegt og grad.
     Ingen ny fil, ingen ny licens, ingen tredje stemme at holde styr paa.
     Kontrasten er nu bredde og vaegt — extended 900 i headeren mod normalbredt
     600 i indholdet — og ikke to konkurrerende display-snit.

     HEADEREN ER IKKE ROERT. Logo, menu og kampagnebaand er Nickis tegning og
     Annes godkendelse og bliver i Univers.

     TO TING AT VIDE, HVIS DET SKAL RETTES:

     1. Dobbelt klassevaelger (`.pdp .pdp__title`) er med vilje. `.font-display`
        staar paa elementerne i markup'en og saetter baade `text-transform:
        uppercase` og display-familien fra critical.css. Med ét klassenavn ville
        de to regler have samme specificitet, og hvem der vandt ville afhaenge af
        hvilken fil Shopify samler sidst. Den ekstra `.pdp` afgoer det uden
        `!important`.

     2. `--font-primary--family` er `"univers-next-pro", "Instrument Sans", ...`.
        Den dag Nicki lever Univers Next Pro Regular til kittet, overtager den
        ogsaa DE HER overskrifter, fordi den staar foerst i stakken. Det er den
        oenskede slutstilstand — normalbredt Univers mod extended i headeren — men
        den kommer af sig selv og uden varsel. Kittet skal i saa fald ogsaa
        indeholde en 600-vaegt; ellers syntetiserer browseren fedmen, og saa skal
        `--pdp-vaegt-overskrift` herunder saettes ned til det kittet faktisk har. */
  .pdp { --pdp-vaegt-overskrift: 600; }
  .pdp .pdp__title,
  .pdp .pdp__price-now,
  .pdp .pdp__rich-title,
  .pdp .pdp__section-title,
  .pdp .pdp__tip-title,
  .pdp .pdp__acc-sum,
  .pdp .pdp__step-num,
  .pdp .pdp__howto-num {
    font-family: var(--font-primary--family);
    font-weight: var(--pdp-vaegt-overskrift);
    text-transform: none;
    /* -0.02em, ikke display-snittets -0.025em: et normalbredt snit har mindre
       luft mellem bogstaverne at give af. */
    letter-spacing: -0.02em;
  }
  /* Graderne er skruet OP i forhold til foer. Instrument Sans 600 vejer mindre
     pr. px end extended 900, saa uaendrede tal ville have gjort siden svag i
     stedet for rolig. Tallene er dem fra kandidat 9 paa sammenligningsarket. */
  .pdp .pdp__title { font-size: clamp(26px, 2.7vw, 36px); line-height: 1.1; }
  .pdp .pdp__price-now { font-size: 38px; }
  .pdp .pdp__rich-title,
  .pdp .pdp__section-title,
  .pdp .pdp__tip-title { font-size: clamp(24px, 2.4vw, 31px); }
  .pdp .pdp__acc-sum { font-size: clamp(17px, 1.9vw, 20px); }

  /* `--logo-h` laeses af `.hd-baand__navn` (critical.css), som saetter graden til
     0,45 x hoejden — de to maerker uden logofil lander altsaa paa 29px og vejer
     dermed omtrent det samme som logoerne omkring dem. Tallet SKAL foelge
     `hoejde:` i render-kaldet ovenfor; ellers staar de to navne i en anden
     stoerrelse end alle logoerne.
     Flex og ikke `text-align: center`: baade `.hd-baand__logo` og
     `.hd-baand__navn` er `display: block`, og en blok centreres ikke af
     text-align. */
  .pdp__brand { --logo-h: 64px; display: flex; justify-content: center; padding-top: 32px; }
  .pdp__title { margin: 8px 0 0; color: var(--color-ink); }
  .pdp__rating { margin-top: 16px; display: flex; align-items: center; gap: 12px; font-size: 14px; }
  .pdp__stars { color: var(--color-gold); letter-spacing: 1px; }
  .pdp__rating-num { color: var(--color-ink); }
  .pdp__rating-link { color: var(--color-ink-mute); text-underline-offset: 2px; text-decoration: underline; background-image: none; }
  .pdp__rating-link:hover { color: var(--color-ink); }
  .pdp__rating--tom { margin-top: 12px; font-size: 13px; }
  .pdp__rating-link--anmeld { text-decoration-style: dotted; }
  .pdp__lede { margin-top: 20px; font-size: 16px; line-height: 1.6; color: var(--color-ink-soft); }
  .pdp__lede p { margin: 0; }

  .pdp__price { margin-top: 28px; display: flex; align-items: flex-end; gap: 12px; }
  .pdp__price-now { line-height: 1; color: var(--color-ink); }
  .pdp__price.is-sale .pdp__price-now { color: var(--color-sale); }
  .pdp__price-soon { font-size: 18px; color: var(--color-ink-mute); }
  .pdp__price-was { font-size: 18px; color: var(--color-ink-mute); text-decoration: line-through; }
  .pdp__price-save { background: var(--color-sale-soft); color: var(--color-sale); border-radius: var(--corner-radius-default); padding: 4px 10px; font-size: 11px; font-weight: 600; }
  .pdp__size { margin-top: 4px; font-size: 12px; color: var(--color-ink-mute); }

  .pdp__fit { margin-top: 24px; }
  .pdp__fit-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-ink-mute); }
  .pdp__fit-chips { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; }
  .pdp__chip { border: 1px solid var(--color-line); background: var(--color-paper); border-radius: var(--corner-radius-default); padding: 4px 12px; font-size: 12px; color: var(--color-ink-soft); }

  .pdp__buy { margin-top: 32px; display: flex; gap: 12px; }
  /* Bjaelken ligger under kurveskuffen (z 120) og over resten. Den findes kun
     paa telefon: paa desktop er koebeknappen aldrig langt vaek, fordi galleriet
     og koebeblokken staar side om side og kolonnen er klaebende. */
  .pdp__stickybuy { display: none; }
  @media (max-width: 767px) {
    .pdp__stickybuy {
      display: block;
      position: fixed;
      left: 0; right: 0; bottom: 0;
      z-index: 60;
      background: var(--color-paper);
      border-top: 1px solid var(--color-line);
      box-shadow: 0 -10px 30px -18px rgba(15, 11, 9, 0.4);
      animation: koebIndFra 200ms ease-out both;
    }
    .pdp__stickybuy[hidden] { display: none; }
    @media (prefers-reduced-motion: reduce) { .pdp__stickybuy { animation: none; } }
    .pdp__stickybuy-inner {
      display: flex; align-items: center; gap: 12px;
      padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
    }
    .pdp__stickybuy-foto {
      width: 40px; height: 50px; flex-shrink: 0;
      background: var(--color-bg-soft); border-radius: 4px; overflow: hidden;
    }
    .pdp__stickybuy-foto img { width: 100%; height: 100%; object-fit: contain; padding: 3px; box-sizing: border-box; }
    .pdp__stickybuy-tekst { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
    .pdp__stickybuy-navn {
      font-family: var(--font-primary--family); font-size: 12px; color: var(--color-ink-soft);
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .pdp__stickybuy-pris { font-family: var(--font-primary--family); font-weight: 600; font-size: 14px; color: var(--color-ink); }
    .pdp__stickybuy-knap {
      flex-shrink: 0; border: 0; border-radius: var(--corner-radius-default);
      background: var(--color-ink); color: var(--color-paper);
      padding: 14px 18px; cursor: pointer;
      font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
      letter-spacing: var(--tracking-ui); text-transform: uppercase;
    }
  }
  @keyframes koebIndFra { from { transform: translateY(100%); } to { transform: none; } }
  /* Plads til bjaelken i bunden af siden. Uden den laa den oven paa footerens
     sidste raekke — maalt: 71px af betalingsikonerne og CVR-linjen var daekket. */
  @media (max-width: 767px) {
    body.har-koebebjaelke { padding-bottom: calc(78px + env(safe-area-inset-bottom)); }
  }

  .pdp__fragt { margin: 10px 0 0; font-size: 13px; line-height: 1.4; color: var(--color-ink-mute); }
  .pdp__fragt--levering { margin-top: 2px; }
  .pdp__qty { display: flex; align-items: center; border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); background: var(--color-paper); }
  .pdp__qty-btn { width: 48px; height: 48px; font-size: 18px; color: var(--color-ink-soft); background: none; border: 0; cursor: pointer; }
  .pdp__qty-btn:hover { color: var(--color-ink); }
  /* `min-width: 0`: et `<input type=text>` uden `size` har en indbygget
     mindstebredde paa ~186px, og som flex-item slaar den igennem uanset
     `width: 36px`. Det var den der satte hele PDP'ens mindstebredde paa 320px. */
  .pdp__qty-val { min-width: 0; width: 36px; text-align: center; font-size: 14px; font-weight: 500; border: 0; background: transparent; font-variant-numeric: tabular-nums; outline: none; }
  .pdp__add { flex: 1; background: var(--color-ink); color: var(--color-paper); border: 0; border-radius: var(--corner-radius-default); padding: 14px 28px; font-size: 12px; font-weight: 500; cursor: pointer; transition: opacity var(--transition-base);
    font-family: var(--font-primary--family);
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
}
  .pdp__add:hover { opacity: 0.9; }
  .pdp__add:disabled { opacity: 0.5; cursor: not-allowed; }
  .pdp__wish { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); background: var(--color-paper); color: var(--color-ink-soft); cursor: pointer; }
  .pdp__wish:hover { border-color: var(--color-ink-soft); color: var(--color-rose); }

  /* Endorse tip */
  .pdp__tip { background: var(--color-bg); margin-top: 32px; padding-block: 80px; }
  .pdp__tip-inner { max-width: 1440px; margin: 0 auto; padding-inline: clamp(24px, 3vw, 40px); display: grid; gap: 40px; }
  @media (min-width: 1024px) { .pdp__tip-inner { grid-template-columns: 1fr 1.4fr; } }
  .pdp__eyebrow { font-size: 11px; text-transform: uppercase; letter-spacing: 0.22em; color: var(--color-ink-mute); }
  .pdp__tip-title { margin-top: 12px; line-height: 1.05; color: var(--color-ink); }
  .pdp__tip-em { font-style: italic; color: var(--color-rose); }
  .pdp__tip-lede { margin-top: 20px; max-width: 28rem; font-size: 16px; line-height: 1.6; color: var(--color-ink-soft); }
  .pdp__steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 16px; }
  .pdp__step { display: flex; gap: 20px; background: var(--color-paper); border-radius: var(--corner-radius-default); padding: 20px; }
  .pdp__step-num { font-size: 30px; line-height: 1; color: var(--color-rose); }
  .pdp__step-text { font-size: 15px; line-height: 1.6; color: var(--color-ink); }
  .pdp__bonus { margin-top: 24px; border: 1px solid color-mix(in srgb, var(--color-rose) 20%, transparent); background: color-mix(in srgb, var(--color-rose-soft) 30%, transparent); border-radius: var(--corner-radius-default); padding: 24px; }
  .pdp__bonus-head { display: flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--color-plum); }
  .pdp__bonus-text { margin-top: 8px; font-size: 15px; line-height: 1.6; color: var(--color-ink); }

  /* === BAANDET ===
     SAMME GEOMETRI SOM HYLDESIDENS HERO. Tallene er ikke valgt her, de er
     kopieret fra `.hd-hero` / `.hd-hero__media` i sections/collection.liquid, og
     de skal foelge med hvis den aendrer sig.

     Foerste forsoeg satte `aspect-ratio: 2800/491` og fuld bredde, fordi det er
     tallene der staar oeverst i heroens CSS. Begge dele var forkert, og maalt
     paa live gav det et baand der var 92px for hoejt og 80px for bredt:
       · 2800/491 sidder paa `.hd-hero__art` — SCENEN inde i baandet, ikke
         baandet. Baandet selv har ingen aspect-ratio; det har en HOEJDE.
       · heroen er ikke kant til kant. Den er rykket ind med `--tile-inset`, som
         er den samme indrykning som produktgitteret staar i.
     Maalt paa hyldesiden: 1360x161 ved 1440px viewport, altsaa 8,43:1 og ikke
     5,70:1. */
  .pdp__banner {
    position: relative;
    margin-inline: var(--tile-inset);
    height: clamp(96px, 11.2vw, 198px);
    overflow: hidden;
    /* Husets roede; se kommentaren i markuppen for hvorfor literal. */
    background: #C03527;
  }
  /* Paa telefon skifter heroen fra en hoejde til et forhold, fordi mobil-
     udsnittet er et andet billede med andre proportioner. Baandet foelger med,
     saa de to bliver ved med at maale ens: uden den her regel ville clamp'ens
     gulv paa 96px goere baandet 44px lavere end heroen ved 390px. */
  @media (max-width: 749px) {
    .pdp__banner { height: auto; aspect-ratio: 1240 / 485; }
  }

  /* Stoejen er gaatone med VARIERENDE alpha — den er allerede et overlay og
     ikke en flade. Derfor ingen blend-mode og ingen opacity: den roede skinner
     igennem hullerne af sig selv, praecis som filerne er tegnet til.
     Den ligger OVER idolerne (z-index), saa den binder dem til baandet i stedet
     for at ligge bag dem som en baggrund. */
  .pdp__banner__stoej {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 2;
    /* critical.css saetter `img { height: auto }` paa alle billeder i temaet, og
       den regel slaar height:100% hvis den kommer efter. Samme faelde som
       braendte maerkebaandet — se snippets/brand-logo.liquid. */
    max-width: none;
  }
  /* Idolerne stikker op fra bunden eller ned fra toppen og bliver skaaret af
     baandets `overflow: hidden`. Hoejden er STOERRE end baandet (JS saetter
     --idol-h i procent), for det er dét der goer at de bliver klippet i stedet
     for at staa paent inde i kassen.
     Ingen CSS-filtre: filerne ER to farver. Se _hd-idol-bw.mjs for hvorfor det
     ikke kan goeres med `grayscale(1) contrast(...)`. */
  .pdp__banner__idol {
    position: absolute;
    z-index: 1;
    height: var(--idol-h);
    width: auto;
    max-width: none;
    transform: translateX(-50%);
  }
  .pdp__banner__idol--op { bottom: 0; }
  .pdp__banner__idol--ned { top: 0; }

  /* === PRISVARSEL ===
     z-index 3 loefter den over baade idoler (1) og stoej (2). */
  .pdp__varsel {
    /* Gitter, ikke block: .pdp__varsel__felter og .pdp__varsel__kvit ligger i
       SAMME celle, saa kassen er lige stor med formular, ring og hak. Ingen hop
       i baandet naar der skiftes (samme greb som snippets/nyhedsbrev-form.liquid). */
    display: grid;
    position: absolute;
    z-index: 3;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    /* INVERTERET 2026-09-02 (Mikkel: "ville se federe ud hvis farverne var
       inverted"). Sort kasse med hvid skrift i stedet for omvendt. Den staar
       ovenpaa to meget forskellige baggrunde — dyb roed og neongul raster — og
       sort er dét der holder mod begge; en hvid kasse forsvandt naesten i
       raster-baandenes lyse flader. */
    background: var(--color-ink);
    /* Firkantet som alt andet i huset; se .product-card__badge. */
    border-radius: var(--corner-radius-default);
    padding: clamp(10px, 1.4vw, 18px) clamp(14px, 1.8vw, 22px);
    /* Kassen maa ikke vokse ud af baandet paa smalle skaerme. */
    max-width: min(92%, 460px);
    box-sizing: border-box;
    text-align: center;
  }
  .pdp__varsel__tekst {
    display: block;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: clamp(13px, 1.15vw, 16px);
    letter-spacing: -0.01em;
    color: var(--color-paper);
    margin-bottom: 8px;
  }
  .pdp__varsel__raekke { display: flex; gap: 6px; }
  .pdp__varsel__felt {
    flex: 1;
    min-width: 0;   /* ellers skrumper input ikke og skubber knappen ud — samme faelde som footerens nyhedsbrev */
    /* Kanten er en lysning af kassen selv og ikke --color-line: den er tegnet
       til moerkt paa lyst og forsvinder paa sort. */
    border: 1px solid rgba(255, 255, 255, 0.35);
    border-radius: var(--corner-radius-default);
    background: transparent;
    padding: 9px 12px;
    font-family: var(--font-primary--family);
    font-size: 13px;
    color: var(--color-paper);
  }
  .pdp__varsel__felt::placeholder { color: rgba(255, 255, 255, 0.55); }
  .pdp__varsel__felt:focus-visible { outline: 2px solid var(--color-paper); outline-offset: -1px; }
  /* Autofyld tvinger sin egen lyse bund og moerke tekst, og saa stod feltet som
     sort skrift paa lysegul midt i en sort kasse. box-shadow-inset er den eneste
     vej til at overskrive bunden i WebKit; farven skal saettes for sig, fordi
     `color` ignoreres i autofyldt tilstand. */
  .pdp__varsel__felt:-webkit-autofill,
  .pdp__varsel__felt:-webkit-autofill:hover,
  .pdp__varsel__felt:-webkit-autofill:focus {
    -webkit-text-fill-color: var(--color-paper);
    -webkit-box-shadow: 0 0 0 100px var(--color-ink) inset;
    caret-color: var(--color-paper);
  }
  .pdp__varsel__knap {
    flex: 0 0 auto;
    border: 0;
    border-radius: var(--corner-radius-default);
    background: var(--color-paper);
    color: var(--color-ink);
    padding: 9px 16px;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    cursor: pointer;
  }
  /* Hover skal vaere en DAEMPNING af den hvide, ikke husets --color-plum: den
     er hover-bunden under SORTE knapper og ville her vende knappen paa hovedet. */
  .pdp__varsel__knap:hover { background: #DED8CE; }
  .pdp__varsel__knap:disabled { opacity: 0.6; cursor: default; }
  /* Honeypot. IKKE display:none — flere bots springer skjulte felter over, og
     nogle browsere udelader dem fra formularen. Feltet er i flowet, men flyttet
     ud af skaermen og taget ud af baade tabrunde og tilgaengelighedstraeet. */
  .pdp__varsel__faelde {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
  }
  .pdp__varsel__svar {
    margin: 8px 0 0;
    font-size: 12px;
    line-height: 1.4;
    color: rgba(255, 255, 255, 0.7);
  }
  .pdp__varsel__svar:empty { display: none; }
  /* Paa telefon er baandet 140px hoejt, og en kasse med tekst, felt og knap
     under hinanden ville sprænge det. Der er kun plads til ét bælte. */
  @media (max-width: 749px) {
    .pdp__varsel { padding: 8px 10px; max-width: 94%; }
    .pdp__varsel__tekst { font-size: 12px; margin-bottom: 6px; }
    .pdp__varsel__felt, .pdp__varsel__knap { padding: 7px 10px; font-size: 12px; }
  }

  /* === PRISVARSEL: kvitteringen (Mikkel, 2026-09-07: "samme setup" som nyhedsbrevet) ===
     Tilstande paa .pdp__varsel[data-tilstand]: (ingen) = formular, "sender" = ring,
     "tilmeldt" = hak der tegner sig, "husket" = hak uden animation (tidligere
     tilmelding paa denne vare i denne browser). Hvidt paa den sorte kasse. */
  .pdp__varsel > * { grid-area: 1 / 1; min-width: 0; }
  .pdp__varsel__kvit { display: none; align-items: center; justify-content: center; color: var(--color-paper); }
  .pdp__varsel[data-tilstand] .pdp__varsel__felter { visibility: hidden; }
  .pdp__varsel[data-tilstand] .pdp__varsel__kvit { display: flex; }
  .pdp__varsel__ring {
    display: none;
    width: 26px;
    height: 26px;
    box-sizing: border-box;
    border: 2.5px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: pdp-varsel-drej 0.9s linear infinite;
  }
  .pdp__varsel[data-tilstand="sender"] .pdp__varsel__ring { display: block; }
  .pdp__varsel__hak {
    display: none;
    width: 36px;
    height: 36px;
    stroke-dasharray: 24;
    stroke-dashoffset: 24;
    animation: pdp-varsel-hak 0.4s cubic-bezier(0.22, 0.61, 0.36, 1) 0.05s forwards;
  }
  .pdp__varsel[data-tilstand="tilmeldt"] .pdp__varsel__hak { display: block; }
  .pdp__varsel[data-tilstand="husket"] .pdp__varsel__hak { display: block; animation: none; stroke-dashoffset: 0; }
  @keyframes pdp-varsel-drej { to { transform: rotate(360deg); } }
  @keyframes pdp-varsel-hak { to { stroke-dashoffset: 0; } }
  @media (max-width: 749px) {
    .pdp__varsel__ring { width: 22px; height: 22px; }
    .pdp__varsel__hak { width: 28px; height: 28px; }
  }

  /* Section heads */
  .pdp__pairs, .pdp__more { padding-block: 80px; }
  .pdp__section-head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 32px; gap: 16px; }
  .pdp__section-title { color: var(--color-ink); }
  .pdp__more-all { font-size: 14px; color: var(--color-ink-soft); background-image: none; }
  .pdp__pairs-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 20px; align-items: start; }
  @media (min-width: 768px) { .pdp__pairs-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
  .pdp__more-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 40px 20px; align-items: start; }
  @media (min-width: 768px) { .pdp__more-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

  /* Tabs */
  .pdp__tabs-wrap { padding-bottom: 80px; }
  .pdp__tabs { border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); background: var(--color-paper); }
  .pdp__tab-bar { display: flex; align-items: center; gap: 4px; border-bottom: 1px solid var(--color-line); padding: 8px; flex-wrap: wrap; }
  .pdp__tab { border: 0; background: none; border-radius: var(--corner-radius-default); padding: 10px 20px; font-size: 13px; font-weight: 500; color: var(--color-ink-soft); cursor: pointer; transition: background-color var(--transition-base), color var(--transition-base); }
  .pdp__tab:hover { background: var(--color-bg); color: var(--color-ink); }
  .pdp__tab.is-active { background: var(--color-ink); color: var(--color-paper); }
  .pdp__tab-panels { padding: clamp(28px, 4vw, 48px); }
  .pdp__panel { display: none; }
  .pdp__panel.is-active { display: block; }
  .pdp__highlights { list-style: none; margin: 0; padding: 0; display: grid; gap: 16px; }
  @media (min-width: 768px) { .pdp__highlights { grid-template-columns: repeat(2, 1fr); } }
  .pdp__highlight { display: flex; gap: 12px; font-size: 15px; color: var(--color-ink); }
  /* Hakkene under Hoejdepunkter staar i blush med sort hak — samme par som
     sub-headeren i hylde-heroen (`.hd-hero__cap--right` i collection.liquid).
     De stod foer i lime paa moerkegroen, og groen er ikke en farve designet
     bruger til andet end en tilstand: den laeste som "godkendt/paa lager" og
     ikke som et hus-element. Blush + ink er husets egen kombination og staar
     allerede paa hver eneste hylde-hero.
     Bruges BEGGE steder der hedder Hoejdepunkter: de gamle faner og den
     berigede accordion (snippets/pdp-rich-body.liquid). */
  .pdp__check { margin-top: 4px; flex-shrink: 0; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--corner-radius-default); background: var(--color-blush); color: var(--color-ink); }
  .pdp__inci-head { font-weight: 500; color: var(--color-ink); margin: 0; }
  .pdp__inci { margin-top: 12px; font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); }
  .pdp__inci-badges { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 8px; }
  .pdp__inci-badge { background: var(--color-green-soft); color: var(--color-green); border-radius: var(--corner-radius-default); padding: 4px 12px; font-size: 12px; font-weight: 500; }
  .pdp__rev-summary { display: grid; gap: 24px; }
  @media (min-width: 768px) { .pdp__rev-summary { grid-template-columns: auto 1fr; } }
  .pdp__rev-score { text-align: center; }
  .pdp__rev-big { font-size: 60px; color: var(--color-ink); line-height: 1; }
  .pdp__rev-stars { margin-top: 4px; color: var(--color-gold); font-size: 18px; }
  .pdp__rev-count { margin-top: 4px; font-size: 12px; color: var(--color-ink-mute); }
  .pdp__rev-bars { display: flex; flex-direction: column; gap: 8px; }
  .pdp__rev-row { display: flex; align-items: center; gap: 12px; font-size: 12px; }
  .pdp__rev-rowlabel { width: 24px; color: var(--color-ink-mute); }
  .pdp__rev-track { height: 8px; flex: 1; overflow: hidden; border-radius: 9999px; background: var(--color-bg); }
  .pdp__rev-fill { height: 100%; border-radius: var(--corner-radius-default); background: var(--color-ink); }
  .pdp__rev-pct { width: 40px; text-align: right; color: var(--color-ink-mute); font-variant-numeric: tabular-nums; }
  .pdp__rev-cards { margin-top: 32px; display: grid; gap: 16px; }
  @media (min-width: 768px) { .pdp__rev-cards { grid-template-columns: repeat(2, 1fr); } }
  .pdp__rev-card { border: 1px solid var(--color-line); background: var(--color-bg); border-radius: var(--corner-radius-default); padding: 20px; }
  .pdp__rev-cardstars { color: var(--color-gold); }
  .pdp__rev-cardtitle { margin-top: 8px; font-size: 18px; color: var(--color-ink); }
  .pdp__rev-cardbody { margin-top: 8px; font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); }
  .pdp__rev-cardmeta { margin-top: 12px; font-size: 12px; color: var(--color-ink-mute); }
  .pdp__rev-verified { color: var(--color-green); }

  /* === PAKKEFOTOETS TEKSTLAG ===
     Laget ligger oven paa hovedbilledet og bruger DE SAMME tal som
     _bundle-billede.mjs tegner fotoet med, saa navnene staar under deres egen
     vare og ikke ved siden af den:
       sidekant 170/1600  = 10,625 %  (varernes baelte er 10,625-89,375 %)
       bundbaand 470/2000 = 23,5 %    (den tomme plads fotoet reserverer)
     Graden skalerer med billedkassen via cqw og ikke med skaermen: teksten skal
     have samme stoerrelsesforhold til varerne uanset hvor bred soejlen er. */
  .pdp__main-image { container-type: inline-size; }
  .packshot {
    position: absolute;
    inset: 0;
    box-sizing: border-box;
    /* samme padding som billedet, ellers falder procenterne ved siden af */
    padding: clamp(20px, 7%, 48px);
    display: grid;
    grid-template-rows: 78% max-content 1fr;
    pointer-events: none;
  }
  .packshot__navne {
    grid-row: 2;
    margin: 0 10.625%;
    padding: 0;
    list-style: none;
    display: grid;
    grid-template-columns: repeat(var(--pladser, 2), minmax(0, 1fr));
  }
  .packshot__navne li { grid-column: span var(--span, 1); min-width: 0; padding: 0 2%; }
  .packshot__navne a {
    display: block;
    text-align: center;
    text-wrap: balance;
    font-size: clamp(10px, 2.6cqw, 21px);
    line-height: 1.3;
    color: var(--color-ink);
    text-decoration: none;
    pointer-events: auto;
  }
  .packshot__navne a:hover { text-decoration: underline; text-underline-offset: 2px; }
  .packshot__pris {
    grid-row: 3;
    align-self: center;
    margin: 0;
    text-align: center;
    font-weight: 600;
    font-size: clamp(18px, 5.4cqw, 44px);
    letter-spacing: -0.01em;
    color: var(--color-ink);
  }

  /* === FANER PAA EN BUNDLE-SIDE ===
     Én fane pr. del, foerst i informationsblokken. Fanerne genbruger .pdp__tab
     fra de gamle legacy-faner (sort aktiv-tilstand), men rullebaandet er nyt:
     delnavne er lange, og en fanerraekke der ombryder til tre linjer laeser som
     rod. Derfor vandret scroll paa smalle skaerme i stedet. */
  .pdp__parts-tabs { margin-top: 4px; }
  .pdp__parts-tabbar {
    display: flex;
    gap: 6px;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 2px;
  }
  .pdp__parts-tabbar::-webkit-scrollbar { display: none; }
  .pdp__parts-tabbar .pdp__tab {
    flex: 0 0 auto;
    max-width: 62%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .pdp__tab-qty { font-weight: 700; }
  .pdp__parts-tabs .pdp__tab-panels { margin-top: 14px; }
  .pdp__parts-tom { color: var(--color-ink-soft); }
  .pdp__parts-tom a { color: var(--color-ink); }

  /* Enriched accordions — live in the right info column; gallery stays sticky on the left */
  .pdp__rich { margin-top: 40px; }
  .pdp__rich-head { margin-bottom: 8px; }
  .pdp__rich-title { line-height: 1.1; color: var(--color-ink); margin: 6px 0 0; }
  .pdp__acc-list { border-top: 1px solid var(--color-line); }
  .pdp__acc { border-bottom: 1px solid var(--color-line); }
  .pdp__acc-sum { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 22px 2px; color: var(--color-ink); }
  .pdp__acc-sum::-webkit-details-marker { display: none; }
  .pdp__acc-sum:hover { color: var(--color-gold); }
  .pdp__acc-ico { position: relative; width: 16px; height: 16px; flex-shrink: 0; }
  .pdp__acc-ico::before, .pdp__acc-ico::after { content: ''; position: absolute; background: var(--color-ink-mute); transition: opacity var(--transition-base), transform var(--transition-base); }
  .pdp__acc-ico::before { top: 50%; left: 0; width: 100%; height: 1.5px; transform: translateY(-50%); }
  .pdp__acc-ico::after { left: 50%; top: 0; width: 1.5px; height: 100%; transform: translateX(-50%); }
  .pdp__acc[open] .pdp__acc-ico::after { opacity: 0; transform: translateX(-50%) rotate(90deg); }
  .pdp__acc-body { padding: 2px 2px 28px; }
  .pdp__acc-p { margin: 0 0 14px; font-size: 15px; line-height: 1.7; color: var(--color-ink-soft); }
  .pdp__acc-p:last-child { margin-bottom: 0; }

  .pdp__hl { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
  .pdp__hl-item { display: flex; gap: 12px; font-size: 15px; line-height: 1.5; color: var(--color-ink); }

  .pdp__deflist { margin: 0; display: flex; flex-direction: column; gap: 16px; }
  .pdp__def-term { font-weight: 600; font-size: 14px; color: var(--color-ink); }
  .pdp__def-desc { margin: 2px 0 0; font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); }

  .pdp__specs { margin: 0; }
  .pdp__spec-row { display: grid; grid-template-columns: 42% 1fr; gap: 16px; padding: 11px 0; border-bottom: 1px solid var(--color-line-soft); font-size: 14px; }
  .pdp__spec-row:last-child { border-bottom: 0; }
  .pdp__spec-label { margin: 0; color: var(--color-ink-mute); }
  .pdp__spec-value { margin: 0; color: var(--color-ink); }

  .pdp__howto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 16px; }
  .pdp__howto-step { display: flex; gap: 16px; align-items: baseline; }
  .pdp__howto-num { font-size: 22px; line-height: 1; color: var(--color-rose); flex-shrink: 0; }
  .pdp__howto-text { font-size: 15px; line-height: 1.6; color: var(--color-ink); }

  .pdp__gtk { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 10px; }
  .pdp__gtk-item { font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); }

  .pdp__ingrp { margin-bottom: 24px; }
  .pdp__ingrp-title { font-size: 11px; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-gold); margin: 0 0 12px; }
  .pdp__ing-other { font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); margin: 16px 0 0; }
  .pdp__acc-nested { margin-top: 16px; border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); padding: 12px 16px; background: var(--color-bg); }
  .pdp__acc-nested-sum { cursor: pointer; font-size: 13px; font-weight: 500; color: var(--color-ink-soft); list-style: none; }
  .pdp__acc-nested-sum::-webkit-details-marker { display: none; }
  .pdp__acc-nested[open] .pdp__acc-nested-sum { color: var(--color-ink); }
  .pdp__ing-full { margin: 12px 0 0; font-size: 12px; line-height: 1.7; color: var(--color-ink-mute); word-break: break-word; }
  .pdp__ing-note { margin: 20px 0 0; font-size: 12px; font-style: italic; color: var(--color-ink-mute); }

  @media (max-width: 767px) {
    /* Miniaturerne laa i en lodret 56px-soejle VED SIDEN AF hovedbilledet. Paa en
       390px telefon aad soejlen plus luften 72 af de 342 tilgaengelige px, saa
       hovedbilledet stod paa 270px i en 4:5-kasse med `contain` — varen blev
       lille og fladen tom. Paa telefon ligger de derfor UNDER billedet som en
       vandret raekke man kan trille i, og hovedbilledet faar hele bredden.
       `order` bytter dem om; markup-raekkefoelgen (miniaturer foerst) er beholdt,
       fordi den er den rigtige for skaermlaesere og tastatur. */
    .pdp__gallery,
    .pdp__gallery--single { grid-template-columns: 1fr; gap: 12px; }
    .pdp__thumbs {
      order: 2;
      flex-direction: row;
      gap: 8px;
      overflow-x: auto;
      scrollbar-width: none;
      /* trilles ud til gitterets kant, saa raekken ikke ser afskaaret ud */
      scroll-snap-type: x proximity;
    }
    .pdp__thumbs::-webkit-scrollbar { display: none; }
    .pdp__thumb { flex: 0 0 64px; width: 64px; scroll-snap-align: start; }
    .pdp__spec-row { grid-template-columns: 1fr; gap: 2px; }
  }
/* END_SECTION:product */

/* START_SECTION:profil (INDEX:32) */
/* Centreret login-kort (Mikkel, 2026-08-31). Runde 2 samme dag: HELT hvid
     side (cream-toppen røg ud), kortet bærer i stedet sort kant + hård
     offset-skygge, ønskeliste-hjerte og større rubrik.
     Runde 3: skyggen og knap-hover var lime — men lime er KAMPAGNEBÅNDETS
     farve, ikke husets signatur (Mikkel, 2026-08-31). Begge dele kører nu på
     den dybe røde #C03527, som allerede bærer brødkrummen, BRANDS-punktet og
     de likede hjerter. Motoren er stadig urørt. */
  .profil { --profil-accent: #C03527; background: var(--color-paper); padding-bottom: clamp(64px, 9vw, 120px); }
  .profil__head { padding: clamp(16px, 2vw, 28px) var(--tile-inset) 0; }
  .profil__crumbs {
    display: flex; align-items: center; gap: 8px;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 11px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-mute);
  }
  .profil__crumbs a { color: inherit; background-image: none; }
  .profil__crumbs a:hover { color: var(--color-ink); }

  .profil__step {
    box-sizing: border-box;
    width: min(480px, calc(100% - 2 * var(--tile-inset) - 10px));
    margin: clamp(40px, 7vw, 96px) auto 0;
    padding: clamp(36px, 5vw, 56px) clamp(24px, 3.5vw, 48px);
    background: var(--color-paper);
    border: 2px solid var(--color-ink);
    box-shadow: 10px 10px 0 var(--profil-accent);
    text-align: center;
  }
  .profil__step:not([hidden]) { animation: profil-ind 0.35s ease-out both; }
  .profil__heart { display: inline-flex; color: var(--profil-accent); margin-bottom: 14px; }
  .profil__heart svg { transform-origin: center; animation: profil-beat 0.9s ease-in-out 0.35s 1; }
  @keyframes profil-ind {
    from { opacity: 0; transform: translateY(12px); }
    to { opacity: 1; transform: none; }
  }
  @keyframes profil-beat {
    0%, 60%, 100% { transform: scale(1); }
    30% { transform: scale(1.28); }
    80% { transform: scale(1.12); }
  }
  @media (prefers-reduced-motion: reduce) {
    .profil__step:not([hidden]), .profil__heart svg { animation: none; }
  }
  .profil__title {
    margin: 0;
    font-family: var(--font-display--family); font-weight: var(--font-display--weight);
    font-size: clamp(1.75rem, 4vw, 2.75rem); line-height: 0.95;
    letter-spacing: var(--tracking-display); text-transform: uppercase; color: var(--color-ink);
  }
  .profil__text { margin: 14px auto 0; max-width: 38ch; font-size: 15px; line-height: 1.55; color: var(--color-ink-soft); }
  .profil__form { display: flex; flex-direction: column; gap: 10px; margin-top: 24px; }
  .profil__input {
    width: 100%; height: 50px; padding: 0 14px;
    border: 1px solid var(--color-line); border-radius: var(--corner-radius-default);
    background: var(--color-paper); color: var(--color-ink);
    font-family: var(--font-primary--family); font-size: 15px;
    text-align: center;
  }
  .profil__input::placeholder { color: var(--color-ink-mute); opacity: 0.6; }
  .profil__input:focus { outline: 2px solid var(--color-ink); outline-offset: -1px; }
  .profil__input--code { font-size: 24px; letter-spacing: 10px; }
  .profil__btn {
    width: 100%; height: 50px; padding: 0 24px; border: 0; cursor: pointer;
    border-radius: var(--corner-radius-default);
    background: var(--color-ink); color: var(--color-paper);
    font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase;
    transition: background-color var(--transition-base);
  }
  .profil__btn:hover { background: var(--profil-accent); color: var(--color-paper); }
  .profil__btn[disabled] { opacity: 0.5; cursor: default; }
  .profil__btn--link { display: inline-flex; align-items: center; justify-content: center; background-image: none; }
  /* Lang ordreliste scroller i stedet for at strække kortet ned gennem siden.
     max-height rammer først ved ~4 ordrer; kortere lister fylder bare det de er. */
  .profil__orders {
    margin-top: 24px; border-top: 1px solid var(--color-line-soft);
    text-align: left; font-size: 14px; color: var(--color-ink-soft);
    max-height: min(420px, 55vh); overflow-y: auto; overscroll-behavior: contain;
    scrollbar-width: thin; scrollbar-color: var(--color-line) transparent;
  }
  .profil__orders.is-scroll:not(.is-bund) {
    -webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 44px), transparent 100%);
    mask-image: linear-gradient(to bottom, #000 calc(100% - 44px), transparent 100%);
  }
  .profil__orders::-webkit-scrollbar { width: 6px; }
  .profil__orders::-webkit-scrollbar-thumb { background: var(--color-line); }
  .profil__orders::-webkit-scrollbar-track { background: transparent; }
  .profil__orders > div:first-child { padding-top: 14px; }
  .profil__order { padding: 14px 0; border-bottom: 1px solid var(--color-line-soft); }
  .profil__order:first-child { padding-top: 0; }
  .profil__order-top { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: var(--color-ink); }
  .profil__order-meta { margin-top: 2px; font-size: 12px; color: var(--color-ink-mute); }
  .profil__order-send {
    padding: 0; border: 0; background: none; cursor: pointer;
    font-family: inherit; font-size: 12px; color: var(--color-ink-mute);
    text-decoration: underline; text-underline-offset: 3px;
  }
  .profil__order-send:hover:not([disabled]) { color: var(--profil-accent); }
  .profil__order-send[disabled] { cursor: default; text-decoration: none; }
  .profil__order-send.is-sendt { color: var(--color-green); }
  .profil__order-send.is-fejl { color: var(--profil-accent); }
  .profil__btn--anmeld {
    display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
    width: auto; height: 40px; margin-top: 12px; padding: 0 18px;
    background-image: none; text-decoration: none;
  }
  .profil__order-anmeldt { margin: 10px 0 0; font-size: 12px; color: var(--color-green); }
  .profil__anmeld-note {
    margin: 18px 0 0; padding: 12px 14px;
    border: 1px solid var(--color-ink); border-radius: var(--corner-radius-default);
    font-size: 13px; line-height: 1.5; color: var(--color-ink);
  }
  .profil__order-items { margin: 10px 0 0; padding: 0; list-style: none; display: grid; gap: 8px; }
  .profil__order-item { display: flex; align-items: center; gap: 10px; font-size: 13px; line-height: 1.4; }
  .profil__order-thumb {
    flex: 0 0 auto; width: 44px; height: 44px;
    border: 1px solid var(--color-line); background: var(--color-paper);
    display: block; overflow: hidden;
  }
  .profil__order-thumb img { width: 100%; height: 100%; object-fit: contain; display: block; }
  .profil__order-title { min-width: 0; }
  .profil__error { margin: 12px 0 0; font-size: 13px; color: var(--profil-accent); }
  .profil__small { margin: 22px 0 0; font-size: 13px; line-height: 1.7; color: var(--color-ink-mute); }
  .profil__small a { color: inherit; text-decoration: underline; text-underline-offset: 3px; background-image: none; }
  .profil__small a:hover { color: var(--color-ink); }
/* END_SECTION:profil */

/* START_SECTION:search (INDEX:33) */
/* clip, not hidden — hidden would make this a scroll container and break the sticky header */
  /* Samme kant som kategorisiden: indholdsboksen ER gitterets bredde. */
  /* INGEN `margin: 0 auto` her. Roden er et grid-item i `.shopify-section`
     (`.full-width` → grid-column: 1 / -1), og auto-margins på et grid-item slår
     stretch fra og gør det shrink-to-fit. Da gitteret indeni er `width: 100%`,
     bliver bredden cirkulær og falder sammen til indholdets min-bredde: målt på
     live 204px af 1440 på desktop, og 714px i et 390px-vindue på mobil, hvor
     siden i stedet løb ud over kanten. Kortene blev derfor 40px brede med et
     fladt billedfelt — søgesiden så i stykker ved hver eneste søgning, mens
     kategorisiderne var i orden, fordi `.plp` ikke har auto-margins.
     Kategorisiderne er facit: rod uden margin, indrykning via --tile-inset. */
  /* Hvid bund som .plp — cream er reserveret til headeren og filterbaren. */
  .search-page { max-width: none; padding-inline: var(--tile-inset); overflow-x: clip; background: var(--color-paper); }

  .search-page__head { padding-block: clamp(24px, 4vw, 48px) 8px; }
  .search-page__crumbs { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--color-ink-mute); }
  .search-page__crumbs a { color: var(--color-ink-soft); background-image: none; }
  .search-page__crumbs a:hover { color: var(--color-ink); }
  .search-page__crumbs-current { color: var(--color-ink); }
  /* Kept for SEO/screen readers, hidden visually — the header field shows the term. */
  .search-page__sr-title { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
  .search-page__count { margin-top: 12px; font-size: 14px; color: var(--color-ink-soft); }
  .search-page__count strong { color: var(--color-ink); }

  /* Mirrors .plp__grid so search and browsing line up identically — tile system,
     gap 0, full-bleed out of .search-page's 1600px column. */
  .search-page__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0;
    margin-block: 32px 48px;
    width: 100%;
    border-top: 1px solid var(--color-line-soft);
    border-left: 1px solid var(--color-line-soft);
  }
  @media (min-width: 768px) { .search-page__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
  @media (min-width: 1024px) { .search-page__grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
  @media (min-width: 1280px) { .search-page__grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } }

  .search-page__empty { padding-block: 80px; text-align: center; }
  .search-page__empty-title { font-size: 30px; font-weight: 700; letter-spacing: -0.02em; color: var(--color-ink); }
  .search-page__empty-sub { margin: 8px auto 0; max-width: 30rem; font-size: 14px; color: var(--color-ink-soft); }
  .search-page__empty-clear {
    display: inline-block; margin-top: 20px; background: var(--color-ink); color: var(--color-paper);
    border: 0; border-radius: var(--corner-radius-default); padding: 12px 24px; font-size: 14px;
    font-weight: 500; cursor: pointer; background-image: none; text-decoration: none;
  }
/* END_SECTION:search */

/* START_SECTION:skin-concierge (INDEX:34) */
.cc {
    background-color: var(--color-bg);
    color: var(--color-ink);
  }
  .cc__inner {
    max-width: 1100px;
    margin: 0 auto;
    padding: clamp(48px, 7vw, 88px) clamp(20px, 3vw, 40px);
  }
  .cc__eyebrow {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .cc__headline {
    margin-top: 12px;
    font-size: clamp(22px, 3.41vw, 42px);
    line-height: 1.02;
    letter-spacing: -0.03em;
  }
  /* Fremhaevningen var Fraunces kursiv. Der ER ingen kursiv i Univers Next Pro,
     og en syntetisk skraatstilling af et extended black-snit ser billigt ud.
     Ordet faar i stedet limebaandets farve som markering: den eneste kraftige
     accent i paletten, og den samme man moeder i toppen af hver side. */
  .cc__headline-em {
    font-family: var(--font-display--family);
    font-weight: var(--font-display--weight);
    letter-spacing: var(--tracking-display);
    background: var(--color-accent);
    color: var(--color-ink);
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
    padding: 0 0.1em;
  }
  .cc__lede {
    margin-top: 20px;
    max-width: 34rem;
    font-size: clamp(16px, 1.6vw, 19px);
    line-height: 1.6;
    color: var(--color-ink-soft);
  }
  .cc__h2 {
    font-family: var(--font-display--family);
    font-size: clamp(22px, 2.11vw, 26px);
    letter-spacing: -0.02em;
  }
  .cc__sub {
    margin-top: 10px;
    max-width: 40rem;
    line-height: 1.6;
    color: var(--color-ink-soft);
  }

  .cc__how {
    list-style: none;
    margin: 36px 0 0;
    padding: 0;
    display: grid;
    gap: 14px;
    max-width: 34rem;
  }
  .cc__how li { display: flex; align-items: baseline; gap: 14px; }
  .cc__how-n {
    flex: 0 0 auto;
    width: 26px; height: 26px;
    display: grid; place-items: center;
    border: 1px solid var(--color-line);
    border-radius: 50%;
    font-size: 12px;
    color: var(--color-ink-mute);
  }
  .cc__how-t { line-height: 1.5; }

  .cc__cta {
    margin-top: 32px;
    padding: 15px 30px;
    border: 0;
    border-radius: 2px;
    background: var(--color-ink);
    color: var(--color-paper);
    font-family: var(--font-primary--family);
    font-size: 12px;
    letter-spacing: 0.04em;
    cursor: pointer;
    transition: background-color 0.18s ease;
    font-family: var(--font-primary--family);
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
  }
  .cc__cta:hover { background: var(--color-gold); }
  .cc__cta:disabled { background: var(--color-line); color: var(--color-ink-mute); cursor: not-allowed; }
  .cc__cta--sm { margin-top: 0; padding: 12px 22px; }
  .cc__ghost {
    padding: 12px 22px;
    border: 1px solid var(--color-ink);
    border-radius: 2px;
    font-size: 14px;
    cursor: pointer;
  }
  .cc__ghost:hover { background: var(--color-surface); }
  .cc__link {
    display: inline-block;
    margin-top: 20px;
    padding: 0;
    border: 0;
    background: none;
    color: var(--color-ink-mute);
    font-size: 14px;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
  }
  .cc__link:hover { color: var(--color-ink); }

  .cc__privacy {
    margin-top: 28px;
    max-width: 36rem;
    padding: 16px 18px;
    background: var(--color-surface);
    border-radius: 3px;
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-ink-soft);
  }

  /* photo */
  .cc-photo { margin-top: 28px; }
  .cc-photo__stage {
    position: relative;
    width: 100%;
    max-width: 420px;
    aspect-ratio: 3 / 4;
    background: var(--color-surface);
    border-radius: 4px;
    overflow: hidden;
  }
  .cc-photo__live, .cc-photo__live video {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
  }
  .cc-photo__live video { transform: scaleX(-1); }
  .cc-photo__guide {
    position: absolute;
    left: 50%; top: 46%;
    width: 62%; aspect-ratio: 3 / 4;
    transform: translate(-50%, -50%);
    border: 1px dashed rgba(255, 255, 255, 0.75);
    border-radius: 50%;
  }
  .cc-photo__placeholder {
    position: absolute; inset: 0;
    background:
      radial-gradient(circle at 50% 42%, color-mix(in srgb, var(--color-rose-soft) 60%, transparent) 0%, transparent 62%);
  }
  .cc-photo__actions {
    margin-top: 18px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
  }

  .cc-status { margin-top: 14px; font-size: 14px; color: var(--color-ink-soft); }
  .cc-status--warn { color: var(--color-sale); }

  /* quiz */
  .cc-q { margin-top: 40px; padding: 0; border: 0; }
  .cc-q__legend {
    font-family: var(--font-display--family);
    font-size: clamp(19px, 2vw, 24px);
    letter-spacing: -0.01em;
  }
  .cc-q__hint { margin-top: 6px; font-size: 14px; color: var(--color-ink-mute); }
  .cc-q__options {
    margin-top: 16px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 10px;
  }
  .cc-opt {
    position: relative;
    padding: 14px 16px;
    text-align: left;
    background: var(--color-paper);
    border: 1px solid var(--color-line);
    border-radius: 3px;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease;
  }
  .cc-opt:hover { border-color: var(--color-ink-mute); }
  .cc-opt[aria-pressed="true"] {
    border-color: var(--color-ink);
    background: var(--color-surface);
  }
  .cc-opt__label { display: block; font-size: 15px; }
  .cc-opt__desc { display: block; margin-top: 3px; font-size: 13px; color: var(--color-ink-mute); }
  .cc-opt__order:not(:empty) {
    position: absolute;
    top: 10px; right: 12px;
    width: 20px; height: 20px;
    display: grid; place-items: center;
    background: var(--color-ink);
    color: var(--color-paper);
    border-radius: 50%;
    font-size: 11px;
  }
  .cc__submit { margin-top: 44px; }
  .cc__need { margin-top: 10px; font-size: 14px; color: var(--color-ink-mute); }

  /* scores */
  .cc-scores {
    margin-top: 28px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 22px 32px;
  }
  .cc-score__head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
  .cc-score__label { font-size: 15px; }
  .cc-score__val { font-size: 13px; color: var(--color-ink-mute); }
  .cc-score__track {
    margin-top: 8px;
    height: 3px;
    background: var(--color-line-soft);
    border-radius: 2px;
    overflow: hidden;
  }
  .cc-score__fill { height: 100%; background: var(--color-gold); }
  .cc-score__note { margin-top: 8px; font-size: 13px; line-height: 1.5; color: var(--color-ink-mute); }
  .cc__measure-note {
    margin-top: 22px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--color-ink-mute);
    max-width: 44rem;
  }

  /* routine */
  .cc-routine { margin-top: 48px; }
  .cc-routine__title {
    font-family: var(--font-display--family);
    font-size: clamp(21px, 2.2vw, 27px);
    padding-bottom: 10px;
    border-bottom: 1px solid var(--color-line);
  }
  .cc-routine__list { margin-top: 20px; display: grid; gap: 14px; }

  .cc-card {
    position: relative;
    display: grid;
    grid-template-columns: 92px 1fr;
    gap: 18px;
    padding: 16px;
    background: var(--color-paper);
    border: 1px solid var(--color-line-soft);
    border-radius: 3px;
  }
  .cc-card--sold { opacity: 0.72; }
  .cc-card__media { display: block; }
  .cc-card__media img { width: 100%; height: auto; aspect-ratio: 1; object-fit: contain; }
  .cc-card__step {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
  }
  .cc-card__brand { margin-top: 8px; font-size: 13px; color: var(--color-ink-mute); }
  .cc-card__title {
    display: block;
    margin-top: 2px;
    font-size: 16px;
    line-height: 1.35;
    color: var(--color-ink);
    text-decoration: none;
  }
  .cc-card__title:hover { text-decoration: underline; text-underline-offset: 3px; }
  .cc-card__why { margin-top: 8px; font-size: 14px; line-height: 1.5; color: var(--color-ink-soft); }
  .cc-card__foot {
    margin-top: 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
  }
  .cc-card__price { font-size: 15px; }
  .cc-card__swap {
    padding: 7px 14px;
    background: none;
    border: 1px solid var(--color-line);
    border-radius: 2px;
    font-size: 13px;
    cursor: pointer;
  }
  .cc-card__swap:hover { border-color: var(--color-ink); }

  .cc-swap {
    grid-column: 1 / -1;
    margin-top: 6px;
    padding-top: 14px;
    border-top: 1px solid var(--color-line-soft);
    display: grid;
    gap: 6px;
  }
  .cc-swap__item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px;
    background: none;
    border: 1px solid transparent;
    border-radius: 2px;
    text-align: left;
    cursor: pointer;
  }
  .cc-swap__item:hover { border-color: var(--color-line); background: var(--color-bg); }
  .cc-swap__item img { width: 48px; height: 48px; object-fit: contain; }
  .cc-swap__name { display: block; font-size: 14px; line-height: 1.35; }
  .cc-swap__meta { display: block; margin-top: 2px; font-size: 13px; color: var(--color-ink-mute); }
  .cc-swap__empty { font-size: 14px; color: var(--color-ink-mute); }

  .cc-notes {
    margin: 40px 0 0;
    padding: 20px 22px;
    list-style: none;
    background: var(--color-surface);
    border-radius: 3px;
    display: grid;
    gap: 12px;
  }
  .cc-notes li { font-size: 14px; line-height: 1.6; color: var(--color-ink-soft); }

  .cc-checkout {
    margin-top: 44px;
    padding-top: 28px;
    border-top: 1px solid var(--color-line);
  }
  .cc-checkout__sum { display: flex; align-items: baseline; gap: 12px; }
  .cc-checkout__total { font-family: var(--font-display--family); font-size: clamp(26px, 3vw, 34px); }
  .cc-checkout__count { font-size: 14px; color: var(--color-ink-mute); }
  .cc-checkout .cc__cta { display: block; }

  @media (max-width: 560px) {
    .cc-card { grid-template-columns: 68px 1fr; gap: 14px; }
    .cc-photo__actions { gap: 10px; }
  }
/* END_SECTION:skin-concierge */

/* CSS from block stylesheet tags */
/* START_BLOCK:group (INDEX:35) */
.group {
    display: flex;
    flex-wrap: nowrap;
    overflow: hidden;
    width: 100%;
  }

  .group--horizontal {
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    padding: 0 var(--padding);
  }

  .group--vertical {
    flex-direction: column;
    align-items: var(--alignment);
    padding: var(--padding) 0;
  }
/* END_BLOCK:group */

/* START_BLOCK:text (INDEX:36) */
.text {
    text-align: var(--text-align);
  }
  .text--title {
    font-size: 2rem;
    font-weight: 700;
  }
  .text--subtitle {
    font-size: 1.5rem;
  }
/* END_BLOCK:text */

/* CSS from snippet stylesheet tags */
/* START_SNIPPET:filter-bar (INDEX:40) */
/* ===== Delt filter- og sorteringsbar (kategorisider + søgning) ===== */
  /* Fuld skærmbredde. margin-inline: calc(50% - 50vw) bryder baren ud af forældrenes
     1600px-kolonne (.plp__body / .search-page), præcis som produktgitteret, så
     stregerne løber helt ud i begge sider. Begge forældre har overflow-x: clip, som
     100vw kræver på Windows, hvor vw tæller scrollbaren med. */
  /* INTET BAAND (Mikkel, 2026-08-27: "filter baandet skal bare fuldstaendig vaek").
     Baren var cream med en streg over og under — altsaa en graa bjaelke tvaers over
     en ellers hvid side. Nu er den sidens egen hvide, og stregerne er vaek, saa
     filtrene staar som fritsvaevende tekst. Baggrunden fjernes IKKE helt: baren er
     klaebende, og en gennemsigtig bar ville lade varerne rulle op igennem teksten.
     Hvid = samme farve som siden, saa masken er usynlig staaende og virker rullende.
     Fuld skaermbredde er beholdt af samme grund. */
  .plp__filterbar { position: sticky; top: var(--sticky-stack-pinned, 108px); z-index: 20; margin-inline: calc(50% - 50vw); padding-inline: var(--tile-inset); background: var(--color-paper); margin-top: 10px; }

  /* ── Baren viger for varerne ───────────────────────────────────────────
     Filtre bruges i ryk: man sætter dem, og så kigger man. Under kiggeriet er
     baren 56px skærm der ikke viser noget. Den ruller derfor væk på vej ned og
     kommer igen ved den mindste bevægelse opad — samme øjeblik man er på vej
     tilbage for at filtrere om.

     translateY(-100%) er nok til at gemme den helt, netop fordi den er klæbende:
     dens underkant lander præcis på headerens underkant, og headeren er uigennem-
     sigtig og ligger højere (z-index 50 mod 20). Så glider den ind UNDER headeren
     i stedet for at skulle animeres ud af skærmen, og det virker uanset om anden
     filterrække er foldet ud og baren dermed dobbelt så høj.
     Klassen sættes af theme.js (initStickyFilterBar). */
  .plp__filterbar { transition: transform 240ms cubic-bezier(0.4, 0, 0.2, 1); }
  .plp__filterbar.is-tucked { transform: translateY(calc(-100% - 2px)); }
  @media (prefers-reduced-motion: reduce) { .plp__filterbar { transition: none; } }
  .plp__filterbar-row { display: flex; align-items: center; gap: 14px; height: 56px; overflow: visible;
    min-width: 0; max-width: 100%; }

  /* ── Baren må ALDRIG stikke ud over sidens kant ────────────────────────
     Knapperne har nowrap-tekst, så de kunne ikke krympe, og rækken løb over:
     målt stak sorteringsknappen 15px ud ved 1366px og 307px ud ved 1024px,
     altså helt uden for skærmen. Rulning kunne ikke bruges, fordi et
     scroll-område ville klippe de dropdowns der åbner nedad.
     Løsningen er at lade knappernes TEKST krympe med ellipse, mens ikoner,
     chevron og hele højresiden holdes i fuld størrelse. Så flugter kanten ved
     enhver bredde, og intet filter bliver utilgængeligt. */
  .plp__filterbar-row > .plp__fgroup, .plp__filterbar-row > .plp__fbtn { min-width: 0; }
  .plp__fbtn, .plp__sortbtn, .plp__toggle { min-width: 0; }
  .plp__fbtn > span:not(.plp__fcount), .plp__morebtn [data-more-label] {
    min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .plp__fbtn svg, .plp__sortbtn svg, .plp__toggle-box, .plp__fcount { flex-shrink: 0; }

  /* Mellem mobilrulningen (≤749px) og den bredde hvor alt kan stå på én linje
     (~1400px) er der stadig flere knapper end der er plads til. Dér ombryder
     rækken i stedet. Det er det eneste svar der hverken lader baren stikke ud
     over sidens kant eller gør et filter utilgængeligt: at skjule en knap med
     CSS ville efterlade dens tvilling i "Flere filtre"-rækken skjult af JS. */
  @media (min-width: 750px) and (max-width: 1400px) {
    .plp__filterbar-row { flex-wrap: wrap; height: auto; min-height: 56px; padding-block: 9px; row-gap: 8px; }
    .plp__bar-right { margin-left: auto; }
  }
  /* Baren staar paa cream, samme flade som header og side. Den var dyb roed
     #6B0A0E i v3, kortvarigt sand, og kortvarigt #776B4F. Fladen er lys, saa
     fritstaaende tekst i baren er ink. */
  /* Ordet "Filtrer" er vaek (Mikkel, 2026-08-27). Raekken begynder nu med det
     foerste filter, og dets ikon skal staa PAA gitterets venstrekant som alt
     andet paa siden — broedkrumme, cirkler, gitter. Knapperne har 2px sidepolstring
     for klikfladens skyld; den nulstilles kun paa raekkens foerste element. */
  .plp__filterbar-row > :first-child .plp__fbtn,
  .plp__filterbar-row > .plp__fbtn:first-child { padding-left: 0; }


  /* Anden række med resten af filtrene. Wrapper, så den aldrig får vandret scroll. */
  /* Egen linje til lagerfilteret, sidst i baren og dermed lige over gitteret.
     padding-left: 0 saetter afkrydsningsfeltet paa gitterets venstrekant. */
  .plp__stockrow { display: flex; align-items: center; gap: 22px; padding-bottom: 10px; margin-top: -4px; }
  /* Kun rækkens FØRSTE toggle står på gitterets venstrekant; nr. 2 lever af gap'et. */
  .plp__stockrow .plp__toggle:first-child { padding-left: 0; }
  /* Profil-indgangen bor i HEADEREN (person-ikonet), ikke her — det gemte
     tekst-link i baren blev kasseret 2026-08-31 (Mikkel: usædvanlig navigation;
     standardmønstret er header-ikoner som Matas/Lyko). */

  .plp__filterbar-extra { display: flex; flex-wrap: wrap; gap: 14px; padding-bottom: 14px; margin-top: -2px; }
  .plp__filterbar-extra[hidden] { display: none; }

  .plp__fgroup { position: relative; flex-shrink: 0; }
  /* En dimension uden værdier på siden fjerner sig selv. Det er sådan et hårfilter
     aldrig kan dukke op på en serum-side — dét fejler Lyko på i dag. */
  .plp__fgroup[hidden] { display: none; }
  /* ── Ingen rammer i baren (Mikkel, 2026-08-26) ─────────────────────────
     Knapperne stod hver i en hvid kasse med en hairline om. Ni kasser paa
     stribe laeste som et vaerktoejsbaelte og ikke som en linje man skimmer.
     Nu er de ren tekst paa cream, og TILSTAND baeres af farve i stedet for af
     rammen: daempet ink naar filteret er urOert, fuld ink naar det er sat, plus
     talpillen (.plp__fcount) der i forvejen kun vises naar noget ER valgt.

     Polstringen bliver staaende, saa klikfladen er den samme som foer. Uden
     ramme ser 13px sidepolstring bare ud som luft, saa raekkens gap er
     hoejnet fra 6 til 14 for at holde ordene fra hinanden. */
  .plp__fbtn, .plp__sortbtn { display: inline-flex; align-items: center; gap: 7px; border: 0; background: none; border-radius: 0; padding: 9px 2px; font-family: var(--font-primary--family); font-weight: 600; font-size: 10px; letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-soft); cursor: pointer; white-space: nowrap; transition: color var(--transition-base); }
  .plp__fbtn:hover, .plp__sortbtn:hover { color: var(--color-ink); }
  .plp__fgroup.is-active .plp__fbtn { color: var(--color-ink); }
  .plp__morebtn[hidden] { display: none; }
  .plp__morebtn.is-open { color: var(--color-ink); }
  .plp__morebtn.is-open .plp__fchev { transform: rotate(180deg); }
  .plp__fcount { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; border-radius: var(--corner-radius-default); background: var(--color-ink); color: var(--color-paper); font-size: 10px; font-weight: 600; }
  .plp__fcount[hidden] { display: none; }
  /* Ikonet arver knappens farve, så det bliver sort sammen med teksten når filteret er aktivt. */
  .plp__ficon { flex-shrink: 0; opacity: 0.75; }
  .plp__fgroup.is-active .plp__ficon { opacity: 1; }
  .plp__fchev { transition: transform var(--transition-base); }
  .plp__fgroup.is-open .plp__fchev, .plp__sortgroup.is-open .plp__fchev { transform: rotate(180deg); }
  .plp__bar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
  .plp__resultcount { font-family: var(--font-primary--family); font-weight: 600;
    font-size: 10px; letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink); white-space: nowrap; }
  .plp__resultcount strong { color: var(--color-ink); font-weight: inherit; }
  @media (max-width: 749px) { .plp__resultcount { display: none; } }
    /* .plp__sort-pre staar INDE i den hvide sorteringsknap, ikke fritstaaende paa
     baren. Den skal derfor blive ved med at vaere daempet ink; croppet cream gjorde
     den usynlig da baren blev moerk. */
  .plp__sort-pre { color: var(--color-ink-mute); }
  @media (max-width: 549px) { .plp__sort-pre { display: none; } }

  .plp__toggle { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; border: 0; background: none; border-radius: 0; padding: 9px 2px; font-family: var(--font-primary--family); font-weight: 600; font-size: 10px; letter-spacing: var(--tracking-ui); text-transform: uppercase; color: var(--color-ink-soft); white-space: nowrap; background-image: none; transition: color var(--transition-base); }
  .plp__toggle:hover { color: var(--color-ink); }
  /* Afkrydsningsfeltet BLIVER. Det er ikke en ramme om tekst, det er den
     eneste kontrol i baren hvis tilstand ikke kan aflaeses af noget andet:
     de oevrige filtre viser deres valg i talpillen, men "Kun paa lager" har
     ingen vaerdier at taelle. Uden feltet ville til og fra kun vaere forskellen
     paa to nuancer af ink. */
  .plp__toggle.is-on { color: var(--color-ink); }
  .plp__toggle-box { display: inline-flex; align-items: center; justify-content: center; height: 16px; width: 16px; flex-shrink: 0; border: 1px solid var(--color-line); border-radius: 4px; background: var(--color-paper); color: transparent; }
  .plp__toggle.is-on .plp__toggle-box { background: var(--color-ink); border-color: var(--color-ink); color: var(--color-paper); }

  .plp__fdrop { position: absolute; top: calc(100% + 6px); left: 0; z-index: 50; min-width: 250px; background: var(--color-paper); border: 1px solid var(--color-line); border-radius: var(--corner-radius-default); box-shadow: 0 24px 60px -20px rgba(15,11,9,0.18); overflow: hidden; animation: fadeIn 0.16s ease-out both; }
  /* Dropdowns i anden række må ikke løbe ud over højre kant. */
  .plp__filterbar-extra .plp__fgroup:nth-child(n+4) .plp__fdrop { left: auto; right: 0; }
  .plp__sortdrop { left: auto; right: 0; min-width: 220px; }
  .plp__fdrop[hidden] { display: none; }
  .plp__fdrop-head { border-bottom: 1px solid var(--color-line-soft); padding: 12px 16px 8px; font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.18em; color: var(--color-ink-mute); }
  .plp__fdrop-opts { max-height: 320px; overflow-y: auto; padding: 6px; }
  .plp__fopt { display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-radius: 4px; font-size: 14px; color: var(--color-ink-soft); cursor: pointer; background-image: none; }
  .plp__fopt:hover { background: var(--color-bg-soft); color: var(--color-ink); }
  .plp__fopt.is-disabled { opacity: 0.4; pointer-events: none; }
  .plp__fopt[hidden] { display: none; }
  .plp__fopt-count { color: var(--color-ink-mute); font-size: 12px; }
  .plp__fbox { display: inline-flex; align-items: center; justify-content: center; height: 18px; width: 18px; flex-shrink: 0; border: 1px solid var(--color-line); border-radius: 4px; background: var(--color-paper); color: transparent; transition: background-color var(--transition-base), border-color var(--transition-base); }
  .plp__fopt:hover .plp__fbox { border-color: var(--color-ink-soft); }
  /* Valgt tilstand. Fluebenet tegnes i currentColor, så uden denne regel er det
     usynligt (boksen sætter color: transparent). Samme udtryk som "Kun på lager". */
  .plp__fopt.is-checked { color: var(--color-ink); font-weight: 500; }
  .plp__fopt.is-checked .plp__fbox { background: var(--color-ink); border-color: var(--color-ink); color: var(--color-paper); }
  .plp__fopt.is-checked .plp__fopt-count { color: var(--color-ink-soft); }
  .plp__sortopt { display: block; width: 100%; text-align: left; padding: 8px 12px; border: 0; background: none; border-radius: 4px; font-size: 14px; color: var(--color-ink-soft); cursor: pointer; background-image: none; }
  .plp__sortopt:hover { background: var(--color-bg-soft); color: var(--color-ink); }
  .plp__sortopt.is-active { background: var(--color-bg-soft); color: var(--color-ink); font-weight: 600; }
  .plp__fempty { padding: 10px 12px; font-size: 13px; color: var(--color-ink-mute); }

  .plp__price-range { display: flex; flex-direction: column; gap: 8px; padding: 16px 14px 14px; min-width: 240px; }
  .plp__slider { position: relative; height: 30px; }
  .plp__slider-track { position: absolute; top: 50%; left: 0; right: 0; height: 4px; transform: translateY(-50%); background: var(--color-line); border-radius: 2px; }
  .plp__slider-fill { position: absolute; top: 0; bottom: 0; background: var(--color-ink); border-radius: 2px; }
  .plp__slider-input { position: absolute; top: 0; left: 0; width: 100%; height: 30px; margin: 0; padding: 0; border: 0; background: none; pointer-events: none; -webkit-appearance: none; appearance: none; }
  .plp__slider-max { z-index: 4; }
  .plp__slider-min { z-index: 3; }
  .plp__slider-input::-webkit-slider-runnable-track { background: none; border: 0; }
  .plp__slider-input::-moz-range-track { background: none; border: 0; }
  .plp__slider-input::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; pointer-events: auto; height: 16px; width: 16px; border-radius: 50%; background: var(--color-paper); border: 2px solid var(--color-ink); cursor: grab; box-shadow: 0 1px 4px rgba(15,11,9,0.25); margin-top: -6px; }
  .plp__slider-input::-moz-range-thumb { pointer-events: auto; height: 16px; width: 16px; border-radius: 50%; background: var(--color-paper); border: 2px solid var(--color-ink); cursor: grab; box-shadow: 0 1px 4px rgba(15,11,9,0.25); }
  .plp__slider-input:active::-webkit-slider-thumb { cursor: grabbing; }
  .plp__slider-vals { display: flex; justify-content: space-between; font-size: 13px; font-weight: 500; color: var(--color-ink); padding: 2px 1px 0; }
  .plp__price-apply { margin-top: 6px; background: var(--color-ink); color: var(--color-paper); border: 0; border-radius: var(--corner-radius-default); padding: 8px 14px; font-size: 12px; cursor: pointer;
    font-family: var(--font-primary--family);
    font-weight: 600;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
}
  .plp__price-apply:hover { background: var(--color-plum); }

  .plp__chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding-bottom: 12px; }
  .plp__chip-btn { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--color-line); background: var(--color-paper); border-radius: var(--corner-radius-default); padding: 6px 12px; font-size: 12px; color: var(--color-ink); cursor: pointer; background-image: none; }
  .plp__chip-clear { border: 0; background: none; font-size: 12px; font-weight: 500; color: var(--color-ink-mute); cursor: pointer; text-decoration: underline; text-underline-offset: 3px; background-image: none; }
  .plp__chip-clear:hover { color: var(--color-ink); }

  /* Et gitter der kun bærer beskeden om ingen træffere tegner ikke sin egen
     ramme. Sat af renderGrid() i plp-filter.js. Se kommentaren dér. */
  .plp__grid--tom { border: 0; }
  .plp__noresults { grid-column: 1 / -1; padding-block: 56px; text-align: center; font-size: 14px; color: var(--color-ink-soft); }
  .plp__noresults a { color: var(--color-ink); text-decoration: underline; text-underline-offset: 3px; }
  /* "Vis flere" er afskaffet (2026-08-06): kataloget bruger sider, både med og uden
     filtre. Den filtrerede pager tegnes af plp-filter.js i .plp__pagination-markup.

     VIGTIGT: uden reglen herunder virker plp-filter.js' `serverPager.hidden = true`
     ikke. `hidden` kommer fra browserens egen stylesheet, og enhver author-regel
     slår den — her .plp__pagination { display: flex }. Resultatet var to pagere på
     skærmen samtidig, og den ene var serverens, hvis links kun bærer ?page=N og
     derfor smider filtrene. Attribut-selektoren vejer tungere end klassen alene,
     så der skal ikke !important til. */
  .plp__pagination[hidden],
  .search-page__pagination[hidden] { display: none; }
  /* ARKETS REGLER STAAR SIDST I FILEN MED VILJE.
     De skal slaa base-reglerne laengere oppe — `.plp__fdrop { position: absolute }`,
     `.plp__fbtn { display: inline-flex }` og `.plp__filterbar-extra[hidden] { display: none }`
     har alle samme vaegt som overskrivningerne herunder, saa den sidste vinder.
     Laa blokken hvor den gamle mobil-rulleregel laa, tabte den alle tre: maalt paa
     rev 272 stod dropdownen stadig `absolute`, "Flere filtre" var stadig synlig, og
     anden filterraekke var `display: none` inde i arket. Flyt den ikke op igen. */

  /* ══════════════════════════════════════════════════════════════════════
     FILTERARKET (kun telefon)

     Raekken RULLEDE vandret paa telefon indtil 2026-09-04. Det virkede, men man
     skulle vide at der var mere ude i hoejre side for at finde det — Mikkel:
     "suboptimal". Nu er der én knap, og alt ligger i et ark.

     Skallerne er `display: contents` paa desktop. Det er hele grunden til at
     der ikke er to saet markup: kassen forsvinder fra layoutet, og raekken,
     anden raekke og toggle-linjen tegner som foer.
     ══════════════════════════════════════════════════════════════════════ */
  /* Mens arket er aabent: ingen transform paa den klaebende bar (den ville goere
     baren til containing block for arkets `position: fixed`), og baren loeftes
     over headerens z-index 50. Reglen staar EFTER `.is-tucked` med vilje —
     samme vaegt, og den sidste vinder. */
  .plp__filterbar.is-sheet-open { transform: none; z-index: 100; }
  body.har-filterark { overflow: hidden; }

  .plp__sheet-bar { display: none; }
  .plp__sheet,
  .plp__sheet-panel,
  .plp__sheet-scroll { display: contents; }
  .plp__sheet-scrim,
  .plp__sheet-head,
  .plp__sheet-foot { display: none; }

  @media (max-width: 749px) {
    .plp__sheet-bar {
      display: flex; align-items: center; justify-content: space-between;
      gap: 12px; min-height: 52px;
    }
    .plp__sheet-trigger {
      display: inline-flex; align-items: center; gap: 8px;
      border: 1px solid var(--color-line); border-radius: var(--corner-radius-default);
      background: var(--color-paper); padding: 9px 14px; cursor: pointer;
      font-family: var(--font-primary--family); font-weight: 600; font-size: 11px;
      letter-spacing: var(--tracking-ui); text-transform: uppercase;
      color: var(--color-ink);
    }
    /* To klasser, saa den slaar den generelle `.plp__resultcount { display: none }`
       laengere nede i filen. Tallet staar kun paa soegesiden (hide_count). */
    /* `gap` og ikke bare inline-flex: en flex-container kaster mellemrums-
       tekstnoder vaek, saa tallet og ordet stod klistret sammen ("261RESULTATER"). */
    .plp__sheet-bar .plp__resultcount { display: inline-flex; gap: 4px; }

    /* Selve arket. `position: fixed` + z-index 100: headeren ligger paa 50, og
       et filterark der glider ind UNDER menuen er ikke et ark. */
    .plp__sheet { display: none; position: fixed; inset: 0; z-index: 100; }
    .plp__sheet.is-open { display: block; }
    .plp__sheet-scrim { display: block; position: absolute; inset: 0; background: rgba(15, 11, 9, 0.42); }
    .plp__sheet-panel {
      position: absolute; left: 0; right: 0; bottom: 0; top: 8vh;
      display: flex; flex-direction: column;
      background: var(--color-paper);
      border-radius: 16px 16px 0 0;
      box-shadow: 0 -20px 60px -20px rgba(15, 11, 9, 0.35);
      animation: arkOp 220ms cubic-bezier(0.32, 0.72, 0, 1) both;
    }
    @media (prefers-reduced-motion: reduce) { .plp__sheet-panel { animation: none; } }
    .plp__sheet-head {
      display: flex; align-items: center; justify-content: space-between;
      padding: 16px 20px 12px; border-bottom: 1px solid var(--color-line-soft);
    }
    .plp__sheet-title {
      font-family: var(--font-display--family); font-weight: var(--font-display--weight);
      font-size: 15px; letter-spacing: var(--tracking-label); text-transform: uppercase;
      color: var(--color-ink);
    }
    .plp__sheet-x {
      display: inline-flex; align-items: center; justify-content: center;
      width: 36px; height: 36px; margin-right: -8px;
      border: 0; background: none; color: var(--color-ink); cursor: pointer;
    }
    .plp__sheet-scroll {
      display: flex; flex-direction: column;
      flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
      padding: 0 20px 8px;
    }
    /* De tre raekker foldes ud, saa deres boern bliver arkets egne linjer og kan
       ordnes frit: toggles oeverst, saa sortering, saa alle filtergrupper. */
    .plp__filterbar-row,
    .plp__filterbar-extra,
    .plp__filterbar-extra[hidden],
    .plp__stockrow { display: contents; }
    .plp__toggle { order: -2; }
    /* `display: block` og ikke flex: sorteringsknappen skal fylde linjen som de
       andre, med chevronen ude i hoejre kant. `margin-left: auto` fra desktop
       ville desuden goere kassen skrump-til-indhold i en lodret flex. */
    .plp__bar-right { order: -1; margin-left: 0; display: block; }
    /* Sorteringen ligger i .plp__bar-right OG er selv en .plp__fgroup, saa uden
       den her fik linjen to streger: én i fuld bredde fra wrapperen og én kort
       under selve knappen. */
    .plp__bar-right .plp__fgroup { border-bottom: 0; }
    .plp__fgroup { order: 0; }

    /* Inde i arket er der ingen "Flere filtre" — alt staar der. */
    .plp__morebtn { display: none; }

    /* Hver gruppe er en linje man folder ud. Den samme dropdown som paa desktop,
       bare i floedet i stedet for svaevende. */
    .plp__fgroup, .plp__bar-right { position: static; border-bottom: 1px solid var(--color-line-soft); }
    .plp__fbtn, .plp__sortbtn, .plp__toggle {
      width: 100%; justify-content: flex-start; gap: 10px;
      padding: 15px 0; font-size: 12px; color: var(--color-ink);
    }
    .plp__fbtn > span:not(.plp__fcount),
    .plp__morebtn [data-more-label] { overflow: visible; text-overflow: clip; }
    .plp__fchev { margin-left: auto; }
    .plp__sort-pre { display: inline; color: var(--color-ink-mute); }
    .plp__toggle { border-bottom: 1px solid var(--color-line-soft); }
    .plp__toggle-box { margin-left: auto; order: 2; }

    .plp__fdrop, .plp__sortdrop {
      position: static; min-width: 0; border: 0; border-radius: 0;
      box-shadow: none; animation: none; padding-bottom: 6px; background: none;
    }
    .plp__fdrop-head { display: none; }
    /* ÉN rulning i arket, ikke to. Desktop-dropdownen har sin egen
       `max-height: 320px` med scrollbar; inde i arket gav det et rullefelt inde
       i et rullefelt, og paa touch er det ikke til at ramme rigtigt. Listen
       floeder i stedet, og arket ruller. */
    .plp__fdrop-opts { max-height: none; overflow: visible; padding: 0 0 4px; }
    .plp__fopt, .plp__sortopt { padding: 11px 2px; font-size: 14px; }
    .plp__price-range { padding: 6px 2px 12px; min-width: 0; }

    .plp__sheet-foot {
      display: flex; align-items: center; gap: 14px;
      padding: 12px 20px calc(12px + env(safe-area-inset-bottom));
      border-top: 1px solid var(--color-line-soft);
      background: var(--color-paper);
    }
    .plp__sheet-clear {
      font-family: var(--font-primary--family); font-size: 12px; font-weight: 600;
      letter-spacing: var(--tracking-ui); text-transform: uppercase;
      color: var(--color-ink-mute); background-image: none; white-space: nowrap;
    }
    .plp__sheet-apply {
      flex: 1; border: 0; border-radius: var(--corner-radius-default);
      background: var(--color-ink); color: var(--color-paper);
      padding: 14px 16px; cursor: pointer;
      font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
      letter-spacing: var(--tracking-ui); text-transform: uppercase;
    }
  }
  @keyframes arkOp { from { transform: translateY(6%); opacity: 0.4; } to { transform: none; opacity: 1; } }
/* END_SNIPPET:filter-bar */

/* START_SNIPPET:image (INDEX:48) */
.image {
    display: block;
    position: relative;
    overflow: hidden;
    width: 100%;
    height: auto;
  }

  .image > img {
    width: 100%;
    height: auto;
  }
/* END_SNIPPET:image */

/* START_SNIPPET:kurv-skuffe (INDEX:49) */
.kurv-skuffe { position: fixed; inset: 0; z-index: 120; }
  .kurv-skuffe[hidden] { display: none; }
  .kurv-skuffe__scrim { position: absolute; inset: 0; background: rgba(15, 11, 9, 0.42); }
  .kurv-skuffe__panel {
    position: absolute; top: 0; right: 0; height: 100%;
    width: min(92%, 420px);
    display: flex; flex-direction: column;
    background: var(--color-paper);
    box-shadow: -20px 0 60px -20px rgba(15, 11, 9, 0.35);
    animation: kurvInd 240ms cubic-bezier(0.32, 0.72, 0, 1) both;
  }
  @media (prefers-reduced-motion: reduce) { .kurv-skuffe__panel { animation: none; } }
  @keyframes kurvInd { from { transform: translateX(8%); opacity: 0.4; } to { transform: none; opacity: 1; } }

  .kurv-skuffe__top {
    display: flex; align-items: center; justify-content: space-between;
    padding: 16px 20px; border-bottom: 1px solid var(--color-line);
  }
  .kurv-skuffe__titel {
    font-family: var(--font-display--family); font-weight: var(--font-display--weight);
    font-size: 15px; letter-spacing: var(--tracking-label); text-transform: uppercase;
    color: var(--color-ink);
  }
  .kurv-skuffe__antal { color: var(--color-ink-mute); }
  .kurv-skuffe__x {
    display: inline-flex; align-items: center; justify-content: center;
    width: 36px; height: 36px; margin-right: -8px;
    border: 0; background: none; color: var(--color-ink); cursor: pointer;
  }

  .kurv-skuffe__kvit {
    margin: 0; padding: 11px 20px;
    background: var(--color-bg-soft);
    font-family: var(--font-primary--family); font-size: 13px; color: var(--color-ink);
  }
  .kurv-skuffe__kvit[hidden] { display: none; }

  .kurv-skuffe__krop { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 20px 12px; }
  .kurv-skuffe__tom { padding: 40px 0; text-align: center; font-size: 14px; color: var(--color-ink-soft); }

  .kurv-linje {
    display: grid;
    grid-template-columns: 68px minmax(0, 1fr) auto;
    grid-template-areas: "foto info pris" "foto antal pris";
    column-gap: 14px; row-gap: 8px;
    padding: 16px 0; border-bottom: 1px solid var(--color-line-soft);
  }
  .kurv-linje:last-child { border-bottom: 0; }
  .kurv-linje__foto { grid-area: foto; align-self: start; background: var(--color-bg-soft); border-radius: 4px; overflow: hidden; aspect-ratio: 4/5; }
  .kurv-linje__foto img { width: 100%; height: 100%; object-fit: contain; padding: 6px; box-sizing: border-box; }
  .kurv-linje__info { grid-area: info; min-width: 0; }
  .kurv-linje__maerke {
    margin: 0 0 3px; font-family: var(--font-primary--family); font-weight: 600;
    font-size: 10px; letter-spacing: var(--tracking-ui); text-transform: uppercase;
    color: var(--color-ink-mute);
  }
  .kurv-linje__navn {
    margin: 0; font-family: var(--font-primary--family); font-weight: 600;
    font-size: 13px; line-height: 1.35; color: var(--color-ink);
    display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
    background-image: none;
  }
  .kurv-linje__str { margin: 3px 0 0; font-size: 12px; color: var(--color-ink-mute); }
  .kurv-linje__pris { grid-area: pris; text-align: right; font-weight: 600; font-size: 13px; color: var(--color-ink); white-space: nowrap; }
  .kurv-linje__antal { grid-area: antal; display: flex; align-items: center; gap: 14px; }
  .kurv-linje__stepper {
    display: inline-flex; align-items: center;
    border: 1px solid var(--color-line); border-radius: var(--corner-radius-default);
    background: var(--color-paper);
  }
  .kurv-linje__stepper button {
    width: 32px; height: 32px; border: 0; background: none; cursor: pointer;
    color: var(--color-ink); font-size: 15px; line-height: 1;
  }
  .kurv-linje__stepper button[disabled] { opacity: 0.35; cursor: default; }
  .kurv-linje__tal { min-width: 24px; text-align: center; font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; }
  .kurv-linje__fjern {
    border: 0; background: none; padding: 0; cursor: pointer;
    font-family: var(--font-primary--family); font-size: 12px; color: var(--color-ink-mute);
    text-decoration: underline; text-underline-offset: 3px;
  }
  .kurv-linje__fjern:hover { color: var(--color-ink); }

  .kurv-skuffe__bund {
    border-top: 1px solid var(--color-line);
    padding: 14px 20px calc(14px + env(safe-area-inset-bottom));
    background: var(--color-paper);
  }
  .kurv-skuffe__bund[hidden] { display: none; }
  .kurv-skuffe__fragt { margin-bottom: 12px; }
  .kurv-skuffe__fragt-tekst { margin: 0 0 6px; font-size: 12px; color: var(--color-ink-soft); }
  .kurv-skuffe__fragt-bar { height: 4px; border-radius: 2px; background: var(--color-line-soft); overflow: hidden; }
  .kurv-skuffe__fragt-bar span { display: block; height: 100%; width: 0; background: var(--color-ink); transition: width 240ms ease-out; }
  .kurv-skuffe__sum { display: flex; align-items: baseline; justify-content: space-between; font-size: 14px; color: var(--color-ink); }
  .kurv-skuffe__sum strong { font-size: 17px; }
  .kurv-skuffe__note { margin: 2px 0 12px; font-size: 12px; color: var(--color-ink-mute); }
  .kurv-skuffe__betal {
    display: block; text-align: center;
    background: var(--color-ink); color: var(--color-paper);
    border-radius: var(--corner-radius-default); padding: 15px 16px;
    font-family: var(--font-primary--family); font-weight: 600; font-size: 12px;
    letter-spacing: var(--tracking-ui); text-transform: uppercase;
    background-image: none;
  }
  .kurv-skuffe__se {
    display: block; text-align: center; padding: 12px 0 0;
    font-family: var(--font-primary--family); font-size: 12px; font-weight: 600;
    letter-spacing: var(--tracking-ui); text-transform: uppercase;
    color: var(--color-ink-mute); background-image: none;
  }
  body.har-kurv-skuffe { overflow: hidden; }
/* END_SNIPPET:kurv-skuffe */

/* START_SNIPPET:nyhedsbrev-form (INDEX:53) */
/* Felter og kvittering i samme gittercelle: cellen er saa hoej som felterne,
     og skiftet mellem dem flytter ikke en pixel i kortet omkring. */
  .nyhedsbrev { display: grid; }
  .nyhedsbrev > * { grid-area: 1 / 1; min-width: 0; }
  .nyhedsbrev__kvit { display: none; align-items: center; justify-content: center; }
  .nyhedsbrev[data-tilstand] .nyhedsbrev__felter { visibility: hidden; }
  .nyhedsbrev[data-tilstand] .nyhedsbrev__kvit { display: flex; }

  .nyhedsbrev__ring {
    display: none;
    width: 28px;
    height: 28px;
    box-sizing: border-box;
    border: 2.5px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: nyhedsbrev-drej 0.9s linear infinite;
  }
  .nyhedsbrev[data-tilstand="sender"] .nyhedsbrev__ring { display: block; }

  .nyhedsbrev__hak {
    display: none;
    width: 40px;
    height: 40px;
    stroke-dasharray: 24;
    stroke-dashoffset: 24;
    animation: nyhedsbrev-hak 0.4s cubic-bezier(0.22, 0.61, 0.36, 1) 0.05s forwards;
  }
  .nyhedsbrev[data-tilstand="tilmeldt"] .nyhedsbrev__hak { display: block; }
  /* Husket fra en tidligere tilmelding i samme browser: hakket staar, men tegner sig ikke igen. */
  .nyhedsbrev[data-tilstand="husket"] .nyhedsbrev__hak { display: block; animation: none; stroke-dashoffset: 0; }

  @keyframes nyhedsbrev-drej { to { transform: rotate(360deg); } }
  @keyframes nyhedsbrev-hak { to { stroke-dashoffset: 0; } }
/* END_SNIPPET:nyhedsbrev-form */

/* START_SNIPPET:product-card (INDEX:56) */
/* TILE. The card IS the tile: one 4:5 box, no outer gap, info sits inside it.
     Only right+bottom borders so that with grid gap:0 neighbouring tiles share a
     single hairline instead of doubling up; the grid paints the top+left edge. */
  .product-card {
    position: relative;
    display: block;
    color: var(--color-ink);
    background-color: var(--color-paper);
    border-right: 1px solid var(--color-line-soft);
    border-bottom: 1px solid var(--color-line-soft);
    /* Kortet er sin egen container. Reglerne nedenfor skal svare paa hvor bredt
       KORTET er, ikke hvor bred skaermen er: det samme kort staar i gitteret, i
       forsidens karruseller og i "spiller godt sammen med", og de tre giver vidt
       forskellige bredder ved samme skaermbredde. */
    container-type: inline-size;
    container-name: kort;
  }

  /* FILLER. Cellerne i sidste række hvor der ikke er flere produkter: sidste side
     i en kategori, et filtreret resultatsæt, eller et breakpoint hvor sidetallet
     ikke går op i kolonneantallet. theme.js indsætter præcis så mange som der
     mangler.

     DE SKAL IKKE HAVE RAMME. Fillerne arvede før kortets højre- og bundlinje, så
     en tom celle stod som et indrammet felt uden indhold, altså et kort der så
     ud til at mangle sit produkt. Gitteret skal slutte hvor produkterne slutter.
     Linjen til venstre for den første filler er det sidste KORTS højrekant, og
     den bliver stående; det er kortets egen afgrænsning, ikke den tomme celles.
     Elementerne bliver stående frem for at blive fjernet, fordi
     `EndorseCampaigns.fillersNeeded` og gentegningen i plp-filter.js regner på
     dem. De er nu rent gennemsigtige. */
  /* --venter er inline-scriptets pladsholder i den flydende model: en celle der
     BLIVER en vare når plp-filter.js har hentet den fra næste side. Samme udseende
     som en filler, men tæller som et kort i placeringsregnestykket. */
  .product-card--filler,
  .product-card--venter {
    background-color: transparent;
    border-right-color: transparent;
    border-bottom-color: transparent;
    pointer-events: none;
  }

  .product-card__media-link {
    display: block;
    background-image: none;
    text-decoration: none;
    color: inherit;
  }

  .product-card__media {
    position: relative;
    overflow: hidden;
    border: 0;
    border-radius: 0;
    background-color: var(--color-paper);
    aspect-ratio: 4 / 5;
    isolation: isolate;
  }

  .product-card__image {
    position: absolute;          /* out of flow → image can NEVER resize the box */
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: contain;         /* image fits inside the fixed box, centered, never cropped */
    object-position: center;
    /* Polstringen reserverer plads til de to tekstlag der ligger oven på billedet:
       mærket øverst til venstre, og info-striben nederst. Bunden er 32% og ikke
       26%, fordi titlen nu må ombryde til flere linjer. */
    padding: clamp(26px, 12%, 40px) clamp(14px, 8%, 30px) 32%;
    box-sizing: border-box;
    /* INGEN hover-zoom (Mikkel, 2026-08-31). Billedet stod paa scale(1.05) med en
       700ms transition og transform-origin i bunden, saa det voksede opad fra
       hyldelinjen. Kortet bevæger sig ikke laengere naar man koerer hen over det. */
  }
  /* === BUNDLE-KORTETS TEKSTLAG ===
     Pakkefotoet baerer selv sine marginer (170/1600 = 10,625 % i siden, 470/2000
     = 23,5 % tomt i bunden), saa bundle-kortets billede faar INGEN polstring:
     billedkassen og kortkassen bliver den samme 4:5-firkant, og procenterne
     herunder rammer praecis varernes egne kolonner. De samme tal staar i
     _bundle-billede.mjs og i sections/product.liquid — aendrer det ene sig, skal
     alle tre med. */
  .product-card--bundle .product-card__image { padding: 0; }
  /* Titel- og prisstriben er FLYTTET ind i laget, ikke duplikeret: uden det her
     stod bundlens navn og pris to gange paa det samme kort. */
  .product-card--bundle .product-card__content { display: none; }
  .product-card__media { container-type: inline-size; }
  .product-card__packshot {
    position: absolute;
    inset: 0;
    display: grid;
    /* 78 % og ikke 76,5 %: varernes baelte slutter praecis paa 76,5 %, saa navnet
       ville roere den nederste kant af varen. Halvanden procent er luft nok til at
       de to laeses som to ting. */
    /* `minmax(0, max-content)` og ikke `max-content`: en ren max-content-raekke
       kan vokse ud over gitterets egen hoejde, og saa blev PRISEN skubbet uden
       for kortet. Maalt paa live foer rettelsen laa prisen 56px under kortets
       bund ved 320px og 35px ved 390px paa ALLE seks bundle-kort — og nul paa
       desktop, som er derfor det ikke blev set. Med et gulv paa 0 kan raekken
       ikke vokse forbi den plads der er, og klippet sker i navnene i stedet. */
    grid-template-rows: 78% minmax(0, max-content) 1fr;
    pointer-events: none;
    z-index: 1;
  }
  .product-card__packshot-navne {
    grid-row: 2;
    min-height: 0;
    overflow: hidden;
    margin: 0 10.625%;
    padding: 0;
    list-style: none;
    display: grid;
    grid-template-columns: repeat(var(--pladser, 2), minmax(0, 1fr));
  }
  .product-card__packshot-navne li {
    grid-column: span var(--span, 1);
    min-width: 0;
    padding: 0 3%;
    text-align: center;
    text-wrap: balance;
    /* Graden foelger KORTETS bredde og ikke skaermens: forholdet mellem tekst og
       vare skal vaere det samme i et 272 px kort og i et 400 px kort. */
    font-size: clamp(9px, 3.3cqw, 16px);
    line-height: 1.25;
    color: var(--color-ink);
  }
  .product-card__packshot-pris {
    grid-row: 3;
    align-self: center;
    margin: 0;
    text-align: center;
    font-weight: 600;
    font-size: clamp(13px, 6cqw, 28px);
    letter-spacing: -0.01em;
    color: var(--color-ink);
  }

  .product-card__image--placeholder {
    color: var(--color-ink);
    opacity: 0.15;
    padding: 20%;
  }
  /* Øverste venstre hjørne: mærke + badges i en kolonne. right holder afstand til
     hjertet, så et langt mærkenavn aldrig lægger sig ind under det. */
  .product-card__top {
    position: absolute;
    top: 12px;
    left: clamp(12px, 6%, 20px);
    right: 44px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    z-index: 2;
  }
  .product-card__brand {
    margin: 0;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 9px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink-mute);
    line-height: 1.2;
  }

  /* Badges */
  .product-card__badges {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
  }
  .product-card__badges:empty { display: none; }
  .product-card__campaign,
  .product-card__badge {
    padding: 5px 11px;
    border-radius: 0;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 10px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    backdrop-filter: blur(8px);
  }
  .product-card__campaign--sale { background: var(--color-sale); color: var(--color-paper); }
  .product-card__campaign--ink  { background: var(--color-ink);  color: var(--color-paper); }
  .product-card__campaign--soft { background: var(--color-bg-soft); color: var(--color-plum); }

  .product-card__badge--ink {
    background: var(--color-ink);
    color: var(--color-background);
    border: 0;
    backdrop-filter: none;
  }
  .product-card__badge--paper {
    background: color-mix(in srgb, var(--color-paper) 90%, transparent);
    color: var(--color-ink);
    border: 1px solid var(--color-line);
  }
  .product-card__badge--gold {
    background: color-mix(in srgb, var(--color-paper) 90%, transparent);
    color: var(--color-gold);
    border: 1px solid var(--color-gold);
  }
  .product-card__badge--green {
    background: var(--color-green-soft);
    color: var(--color-green);
    border: 1px solid color-mix(in srgb, var(--color-green) 30%, transparent);
  }
  .product-card__badge--rose {
    background: color-mix(in srgb, var(--color-rose-soft) 60%, transparent);
    color: var(--color-plum);
    border: 1px solid color-mix(in srgb, var(--color-rose) 40%, transparent);
  }
  /* Udsolgt er ikke en kampagne og maa ikke laese som en. Den staar derfor paa
     den bloede bund med daempet skrift, altsaa den stilleste af alle tonerne —
     Tilbud er sort paa blush, Nyhed er sort, og de raaber begge. */
  /* Bundle er en OPLYSNING om hvad varen er, ikke en kampagne. Den staar derfor
     i den bloede bund som udsolgt gør, men med almindelig blaektekst og en fuld
     linje, saa den laeses som en etiket og ikke som en daempet advarsel. */
  /* Sort med hvid skrift (Mikkel, 2026-09-01). Badget stod paa den bloede sand
     med sort tekst og en sort ramme, altsaa sort paa graat — det laeste som en
     deaktiveret knap frem for et maerkat. Kanten er vaek: en sort flade behoever
     ikke en sort streg omkring sig. */
  .product-card__badge--bundle {
    background: var(--color-ink);
    color: var(--color-paper);
    border: 0;
  }
  .product-card__badge--sold {
    background: color-mix(in srgb, var(--color-bg-soft) 92%, transparent);
    color: var(--color-ink-mute);
    border: 1px solid var(--color-line);
  }
  .product-card__badge--default {
    background: color-mix(in srgb, var(--color-paper) 90%, transparent);
    color: var(--color-ink-soft);
    border: 1px solid var(--color-line);
  }

  /* Heart — frit flydende ikon, ingen boks; hverken baggrund, blur eller radius.
     Klikfladen er 52x52 (Mikkel, 2026-08-31: "gør hitboxen en del større") — op
     fra 36 og over touch-minimummet på 44. Ikonet står PRÆCIS hvor det stod:
     centrum var top 12+18=30 / højre 8+18=26, og med 52px-kassen giver top 4 /
     højre 0 samme centrum (4+26=30, 0+26=26). Ændres størrelsen, regn offsetten
     om, ellers flytter ikonet sig. */
  .product-card__heart {
    position: absolute;
    top: 4px;
    right: 0;
    z-index: 3;
    width: 52px;
    height: 52px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    backdrop-filter: none;
    color: var(--color-ink-mute);
    cursor: pointer;
    transition: color var(--transition-base);
  }
  .product-card__heart:hover { color: var(--color-blush); }
  /* Liket: fyldt hjerte i broedkrummens dybe roede — samme #C03527 som
     BRANDS-menupunktet. Blush blev fravalgt som fyld: den er for lys til at
     baere tilstanden alene paa et hvidt kort. */
  .product-card__heart.is-liked { color: #C03527; }
  .product-card__heart.is-liked:hover { color: #C03527; }
  .product-card__heart.is-liked svg { fill: currentColor; }

  /* Content row — INSIDE the tile, sitting in the strip the image padding reserved.
     No hairline and no own background: the media box is already pure white and the
     product is scaled to stand clear of this strip, so the text reads as free
     floating on the tile instead of as a separate labelled band. */
  .product-card__content {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    margin: 0;
    padding: 12px clamp(12px, 6%, 20px) clamp(12px, 6%, 18px);
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    gap: 10px;
    background-color: transparent;
    border-top: 0;
    z-index: 2;
  }
  .product-card__content-left { min-width: 0; flex: 1; }
  .product-card__content-right { text-align: right; flex-shrink: 0; }

  /* Titlen må fylde de linjer den skal — hele produktnavnet skal kunne læses, så
     ingen nowrap og ingen ellipsis. Mindre grad end før, dels for at gøre plads
     til ombrydningen, dels fordi mærket ikke længere står lige over den. */
  .product-card__title {
    margin: 0;
    font-family: var(--font-primary--family);
    font-weight: 600;
    /* Nickis THUMBNAIL-spec er 5 pt i et 2x-mockup = 10px paa skaerm. Graden er
       bevidst lille: navnet skal stadig kunne ombryde til flere linjer uden at
       vokse ud af informationsstriben, og kortets HOEJDE er laast. */
    font-size: 10px;
    line-height: 1.3;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-ink);
    text-wrap: pretty;
  }
  /* Titlen skifter ikke farve paa hover laengere (Mikkel, 2026-08-31): kortet er
     ét link, og hele fladen skiftede farve paa ét ord naar man roerte den. */
  .product-card__title a {
    color: inherit;
    background-image: none;
  }

  .product-card__meta {
    margin-top: 2px;
    display: flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-primary--family);
    font-size: 11px;
    color: var(--color-ink-mute);
  }
  .product-card__star { color: var(--color-gold); }
  .product-card__meta-sep { color: var(--color-line); }

  .product-card__price {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 11px;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink);
  }
  .product-card__price.is-sale { color: var(--color-sale); }
  .product-card__price-compare {
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 10px;
    letter-spacing: var(--tracking-ui);
    color: var(--color-ink-mute);
    text-decoration: line-through;
  }
  .product-card__discount {
    margin-top: 2px;
    font-family: var(--font-primary--family);
    font-weight: 600;
    font-size: 9px;
    letter-spacing: var(--tracking-ui);
    text-transform: uppercase;
    color: var(--color-sale);
  }

  /* Stoerrelsen: skjult paa prisraekken som udgangspunkt, fordi den paa brede
     kort staar inde i titlen hvor den altid har staaet. Container-queryen
     nedenfor bytter om paa de to. */
  .product-card__size { display: none; }
  .product-card__prisrow { display: block; }

  /* === SMALLE KORT ===
     Titel og pris staar side om side i én flex-raekke. Paa et 271px desktop-kort
     har titlen ~180px og ombryder til 3 linjer; paa et 178px telefon-kort har den
     94px og ombrød til 6 — og paa 320px til NI. Info-striben er absolut
     placeret i bunden og vokser opad, mens billedets reserverede flade er faste
     32 % af kortets hoejde, saa teksten laa oven i varen. Maalt paa live foer
     rettelsen: 26 af 26 kort kolliderede ved 320px, 22 af 26 ved 390px, 15 af 26
     ved 414px — og nul paa desktop. Derfor: under 210px faar titlen HELE kortets
     bredde og prisen staar under den. Det halverer linjeantallet, og de fleste
     navne ender paa 2-3 linjer.

     Klippet paa 3 linjer er en sikkerhedsventil, ikke designet: med fuld bredde
     rammer de laengste navne i katalogket 3 linjer, saa det er kun de virkelig
     lange der bliver klippet — mod foer, hvor navnet daekkede varen. */
  @container kort (max-width: 210px) {
    .product-card__content {
      flex-direction: column;
      align-items: stretch;
      gap: 3px;
      padding: 7px clamp(10px, 5%, 16px) 9px;
    }
    .product-card__title { line-height: 1.25; }
    .product-card__content-right { text-align: left; }
    .product-card__title {
      display: -webkit-box;
      -webkit-line-clamp: 3;
      line-clamp: 3;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }
    /* Bundle-kortets delenavne: to linjer paa telefon. Fotoet fylder de oeverste
       78 % (varernes baelte slutter dér), saa der er kun ~22 % tilbage til navn
       OG pris, og et navn paa seks linjer aad hele prisens raekke. */
    /* Det delene har til faelles skjules: der er kun to linjer, og de skal
       bruges paa det der ADSKILLER de to varer. */
    .product-card__pk-faelles { display: none; }
    .product-card__packshot-navne li {
      display: -webkit-box;
      -webkit-line-clamp: 2;
      line-clamp: 2;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }

    /* Stoerrelsen flytter fra titlen ned paa prisraekken. Den koster nul ekstra
       linjer dér, og den bliver et felt man kan skimme i stedet for haletekst. */
    .product-card__title-size { display: none; }
    .product-card__prisrow { display: flex; align-items: baseline; gap: 6px; }
    /* Tilbudskort bar tre raekker under titlen: pris, foer-pris, procent. Maalt
       paa live laa de vaerste PRAECIS paa billedets kant (0px til overs) mod
       -8px for et almindeligt kort. Foer-prisen og procenten deler nu raekke,
       saa der er én raekke faerre. Ingen markup-aendring: kolonnen ombryder, og
       prisraekken tvinges til at fylde sin egen. */
    .product-card__content-right {
      display: flex;
      flex-wrap: wrap;
      align-items: baseline;
      gap: 0 6px;
    }
    .product-card__prisrow { flex: 1 0 100%; }
    .product-card__price-compare,
    .product-card__discount { margin-top: 0; }
    .product-card__size {
      display: inline;
      font-family: var(--font-primary--family);
      font-weight: 500;
      font-size: 10px;
      letter-spacing: var(--tracking-ui);
      text-transform: uppercase;
      color: var(--color-ink-mute);
      white-space: nowrap;
    }

    /* Reservationen foelger med op, saa der er luft mellem vare og tekst.
       NB: procent-polstring regnes af elementets BREDDE, ikke hoejden — 44 % af
       et 178px kort er 78px, og info-striben maaler 70px ved tre linjer. */
    .product-card__image { padding-bottom: 44%; }
  }
  /* 320px-telefonen: kortet er 143px bredt og 178px hoejt. Der er ikke plads til
     tre linjer plus pris uden at spise varen, saa dér er det to. */
  @container kort (max-width: 160px) {
    .product-card__title { -webkit-line-clamp: 2; line-clamp: 2; }
  }

  /* Ingen @media (prefers-reduced-motion) mere: kortet har ingen bevægelse at
     slaa fra. Blokken slog billedzoomen fra og tvang quick-add frem, og begge
     dele er væk. */
/* END_SNIPPET:product-card */

/* START_SNIPPET:turnstile (INDEX:58) */
/* Boksen fylder intet foer Cloudflare selv saetter noget i den. Naar den
     goer (afkrydsningsfeltet), faar den luft til feltet ovenfor. */
  [data-turnstile]:empty { display: none; }
  [data-turnstile] { margin-top: 10px; min-height: 0; }
/* END_SNIPPET:turnstile */