*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

:root {
  /* PALETT — mockupene fra Torunn, 10. september 2026.
     Hvitt underlag, nesten svart blekk, og to grønne som gjør hver sin jobb:
     --gronn er aksent og hover, --gronn-dyp er en flate å legge hvit tekst på.
     Tallene i kommentarene er målt mot flata de faktisk står på. */
  --flate: #fff;          /* underlaget. Het --cream (#f7f4f0) til 10. sep.   */
  --ink: #0a0a0a;         /* 19.8:1 på hvitt                                  */
  --soft: #767676;        /* dempet tekst, 4.54:1 på hvitt                    */
  --hair: #e4e4e4;        /* hårstrek, 1.27:1 — kun linjer, aldri tekst       */
  /* Aksentgrønnen. Hvit tekst på den er 4.49:1, altså ett hundredels under
     AAs 4.5. Det er innenfor målestøyen på en hex-verdi, og fargen er valgt
     av merket — men står den under liten tekst, er den på streken. */
  --gronn: #0f8a24;
  /* Flategrønn. Bærer hvit tekst på 11.25:1. Merk at BÅDE --rod (2.19:1) og
     --gronn (2.51:1) forsvinner på den — pin og aksent kan ikke stå her. */
  --gronn-dyp: #14432a;
  --rod: #d81920;         /* pin og piler, 5.15:1 på hvitt                     */
  /* Blek blå. Ikke i mockupens palett, men beholdt fordi den brukes som BLEKK
     oppå foto tre steder — hero-eyebrow, lookbook-pris og produkthero.
     Kursiven i om-tittelen ble grønn 11. september. Mockupen løser de flatene annerledes (tekst på
     hvitt ved siden av bildet), så den forsvinner når de seksjonene bygges om.
     Til da er den fortsatt jobben sin verdt. */
  --ice: #b8d4e0;

  --footer-h: 340px;
  /* Hoeyden paa baandet over toppmenyen. 0 naar det er av — body.har-ticker
     setter den, saa ingen regel trenger aa vite om baandet finnes. */
  --ticker-h: 0px;
  --product-bg: #fff;   /* flate bak produktbilder */

  /* TYPOGRAFISK SKALA
     Stilarket hadde 41 ulike font-size-verdier — .6 og .62, .8 og .82, .85.
     Ingen ser forskjell på to nabotrinn der; det man ser er summen, og den
     leser som slurv og ikke som komposisjon. Åtte trinn dekker alt som ikke
     er display, og de ligger ~1.15-1.25 fra hverandre: nok til at to trinn
     er ulike roller, ikke en avrundingsfeil.
     Vokser noe her, skal det bli et trinn til — ikke en ny mellomverdi. */
  --t-micro: .625rem;   /* 10px — versaletiketter, eyebrow, badge, knapper */
  --t-fin:    .75rem;   /* 12px — finskrift, priser i kort, tabellhoder    */
  --t-liten: .875rem;   /* 14px — brødtekst i kort og statiske sider       */
  --t-brod:     1rem;   /* 16px — brødtekst og ALLE skjemafelt, se under   */
  --t-lead:  1.125rem;  /* 18px — produktnavn i kort, ingresser            */
  --t-h4:    1.375rem;  /* 22px                                            */
  --t-h3:     1.75rem;  /* 28px                                            */
  --t-h2:        2rem;  /* 32px                                            */
  /* Skjemafelt står med vilje på 16px og ikke lavere: iOS Safari zoomer
     inn på et felt med mindre tekst enn 16px når det får fokus, og zoomer
     ikke ut igjen. Kassen hoppet slik på hver eneste input. */

  /* DISPLAY
     Overskriftene hadde 18 egne verdier og elleve egne clamp() — i praksis
     én per overskrift. Fire trinn dekker alt.

     Hvert trinn er en ferdig clamp() og ikke en fast størrelse, og det er
     poenget: sju overskrifter hadde i tillegg sin egen regel under 768px,
     som fantes bare fordi den opprinnelige clamp-en var dårlig valgt. En
     riktig clamp gjør begge jobbene, så de reglene er slettet framfor
     skrevet om — sju færre steder to verdier kan gli fra hverandre.

     hero-aw26.css holdes utenfor med vilje. Den er kampanjespesifikk, satt
     i piksler, og topper på 108px mot skalaens 96. Et brudd på systemet
     skal være synlig som et valg, ikke gjemt som én av femten verdier. */
  --d-hero: clamp(2.75rem, 7vw, 6rem);      /* 44 → 96px  — hero, ett per side */
  --d-1:    clamp(2.25rem, 4.5vw, 3.5rem);  /* 36 → 56px  — sidetittel, utsagn */
  --d-2:    clamp(1.9rem, 3.2vw, 2.75rem);  /* 30 → 44px  — seksjonstittel     */
  --d-3:    clamp(1.6rem, 2.6vw, 2.25rem);  /* 26 → 36px  — uthevet lenke      */

}

/* 11px luft over og under 10px versaler = 34. Settes paa body og ikke i
   :root, fordi baandet bare finnes naar admin har skrudd det paa. */
body.har-ticker { --ticker-h: 34px; }

html {
  font-size: 16px;
  /* Uten denne tegner mobilnettleseren sin egen blå flate over alt som
     berøres — størrelsesknappene på produktsiden blinket blått ved trykk.
     Egenskapen arves, så den settes ett sted. */
  -webkit-tap-highlight-color: transparent;
}

/* iOS Safari gir <button> systemblå tekst når color ikke er satt eksplisitt
   — derfor sto størrelsestallene og karusellpilene blå på telefon mens de
   var svarte på desktop. Arv fra forelderen i stedet. Knapper som setter
   egen farge (.btn-add, .size-btn.active) vinner fortsatt på spesifisitet. */
button { color: inherit; }

/* Knappeetiketter er ikke tekst man vil markere; et trykk som ble holdt
   et halvsekund for lenge markerte «1»-en inni knappen blå. Tastaturfokus
   beholdes via :focus-visible, som berøring ikke utløser. */
button, .thumb, .size-btn, .carousel-btn {
  -webkit-user-select: none; user-select: none;
}
button:focus, .thumb:focus { outline: none; }
button:focus-visible, .thumb:focus-visible {
  outline: 2px solid var(--ink); outline-offset: 2px;
}
body { background: var(--flate); color: var(--ink); font-family: 'Montserrat', sans-serif; overflow-x: hidden; }

/* TICKER — båndet over toppmenyen
   Flategrønn med hvit tekst: 11.25:1. Merk at pinnen er RØD og på denne flata
   bare 2.19:1 — den er derfor ren dekor mellom leddene, aldri en bærer av
   mening, og har tom alt-tekst.

   Ett ledd om gangen, sentrert og stille; main.js bytter hvert 2. sekund.
   Det rullet som et nyhetsbånd til 14. september. Alle ledd står i samme
   rutenettcelle, så båndet er like høyt uansett hvilket som vises, og ingen
   tekst hopper sidelengs når et kort ledd tar over for et langt.

   Byttet er to halve toninger etter hverandre, ikke én krysstoning: to
   sentrerte ledd av ulik lengde oppå hverandre ble et tegnrot i 0,4 s. Det
   gamle toner ut på 0,25 s, det nye inn på de neste 0,25 — av 2 sekunder står
   leddet helt klart i 1,5. */
.ticker {
  position: fixed; top: 0; left: 0; right: 0; z-index: 101;
  background: var(--gronn-dyp); overflow: hidden; padding: 11px 16px;
  height: var(--ticker-h);
}
.ticker-ledd { display: grid; place-items: center; height: 100%; }
.ticker-ledd > span {
  grid-area: 1 / 1;
  display: flex; align-items: center; gap: 14px; max-width: 100%;
  font-size: var(--t-micro); font-weight: 400; letter-spacing: .42em;
  text-transform: uppercase; color: #fff; white-space: nowrap;
  opacity: 0; transition: opacity .25s ease;
}
.ticker-ledd > span.vises { opacity: 1; transition: opacity .25s ease .25s; }
/* Høyden styrer, ikke bredden: ikonfila er beskåret tett, så 11 px er selve
   pinnen. Den gamle fila hadde 65 % luft i bredden, og 11 px bredde ga en pin
   under 4 px bred. Båndet har 12 px innhold (34 minus 2 × 11 luft). */
.ticker .pin { height: 11px; width: auto; flex: none; }
/* Sperringen gjør 27 versaler («Gratis retur innen 30 dager») ca. 330 px
   brede. Det går på 390, ikke på en 360-telefon med 16 px luft i hver side. */
@media (max-width: 420px) {
  .ticker-ledd > span { letter-spacing: .28em; gap: 10px; }
}
/* Byttet er ikke bevegelse, så leddene skifter fortsatt — men uten toning. */
@media (prefers-reduced-motion: reduce) {
  .ticker-ledd > span, .ticker-ledd > span.vises { transition: none; }
}

/* NAV
   #mainNav og ikke `nav`: foten har tre <nav>-kolonner, og en bar
   elementselektor her ga dem `position: fixed; top: 0` — de forsvant opp bak
   toppmenyen, og foten sto igjen med bare merkeblokka. */
/* top foelger baandet: staar det paa, ligger toppmenyen under det.
   Verdien bor i --ticker-h saa hoeyden bare finnes ett sted — den brukes
   ogsaa av baandet selv og av heroene, som ellers ville startet bak det. */
#mainNav {
  position: fixed; top: var(--ticker-h, 0px); left: 0; right: 0; z-index: 100;
  display: flex; align-items: center; justify-content: space-between;
  padding: 28px 48px;
  background: transparent;
  /* Hårstreken står der hele tiden, bare gjennomsiktig — ellers vokser
     menyen én piksel i det den blir hvit, og alt under hopper. */
  border-bottom: 1px solid transparent;
  transition: background .4s, border-color .4s, padding .3s;
}
/* HVIT FLATE når menyen står over innhold: enten fordi du har scrollet forbi
   heroen (.scrolled), eller fordi siden ikke har noen hero (.light, satt av
   main.js). Før 10. september var det to ulike flater — en nesten svart
   glassplate ved scroll og en kremfarget på sider uten hero. Skissen har
   hvitt i begge tilfeller, med en hårstrek under, og det er det designerne
   har bedt om. Merket bærer grønnfargen i båndet rett over; en mørk plate
   under det ga to tunge striper på rad.
   Ugjennomsiktig og uten blur: skissen er #fff, og en halvgjennomsiktig hvit
   over produktbilder blir grå og skitten, ikke hvit. */
#mainNav.scrolled,
#mainNav.light {
  background: var(--flate);
  border-bottom-color: var(--hair);   /* 1.27:1 — en linje, ikke tekst */
}
#mainNav.scrolled { padding: 18px 48px; }
.nav-logo { display: block; line-height: 0; text-decoration: none; }
.nav-logo img { display: block; height: 26px; width: auto; }
/* Lys logo bare mens menyen er gjennomsiktig over en mørk hero; mørk
   variant så snart den står på hvitt. */
.nav-logo .logo-on-light { display: none; }
#mainNav.light .nav-logo .logo-on-dark,
#mainNav.scrolled .nav-logo .logo-on-dark { display: none; }
#mainNav.light .nav-logo .logo-on-light,
#mainNav.scrolled .nav-logo .logo-on-light { display: block; }
/* Toppmeny — samme stille typografi som eyebrow-en i heroen, ikke en
   tradisjonell navbar. Under 769px overtar skuffen (se @media lenger nede),
   så denne regelen er allerede bare desktop.
   12px, ikke 10: heroens eyebrow står på clamp(10px,.9vw,12px) og lander på
   12 på vanlige desktopbredder, så menyen var i praksis mindre enn det den
   skulle rime med. Sperringen holdes på .28em — den bærer roen her. */
.nav-links { display: flex; align-items: center; gap: 36px; }
.nav-links a {
  position: relative;
  font-size: var(--t-fin); letter-spacing: .28em; text-transform: uppercase; font-weight: 400;
  color: rgba(255,255,255,.82); text-decoration: none;
  padding-bottom: 3px; transition: color .3s;
}
/* Streken gror fram fra venstre, som i skissen, i stedet for å tone inn.
   Den ligger i ::after og ikke som border fordi en border ikke kan skaleres.
   Grønn på hvitt er 4.49:1, godt over 3:1 som gjelder for en markering. */
.nav-links a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1.5px;
  background: rgba(255,255,255,.5);
  transform: scaleX(0); transform-origin: left; transition: transform .24s;
}
.nav-links a:hover { color: #fff; }
.nav-links a:hover::after,
.nav-links a:focus-visible::after { transform: scaleX(1); }
/* Blekk på hvitt, 19.8:1. Sto på #6a625a, en varm grå fra kremflaten. */
#mainNav.light .nav-links a,
#mainNav.scrolled .nav-links a { color: var(--ink); }
#mainNav.light .nav-links a::after,
#mainNav.scrolled .nav-links a::after { background: var(--gronn); }
/* Ett navigasjonssystem om gangen: staar lenkene synlig, skal ikke
   hamburgeren staa ved siden av og love noe annet. */
@media (min-width: 769px) { .nav-burger { display: none; } }

.nav-icons { display: flex; align-items: center; gap: 24px; }
/* display:block og ikke inline, som er <svg> sin standard. Handlevogna og
   kontoikonet ligger inne i hver sin <a>; en inline <svg> setter seg paa
   tekstens grunnlinje, saa <a>-boksen ble ~4px hoeyere enn ikonet med
   nedlengdeluft under. align-items:center sentrerte da en for hoey boks, og
   de to ikonene sto et par piksler over soek og hamburger. */
.nav-icons svg { display: block; width: 22px; height: 22px; stroke: #fff; fill: none; stroke-width: 1.4; cursor: pointer; transition: stroke .3s; }
.nav-icons a { display: flex; }
.nav-icons a svg { stroke: #fff; }
/* Optisk, ikke geometrisk, like store. Alle fire er sentrert i (12,12) i sin
   viewBox, men blekket har ulik utstrekning: soek, bruker og hamburger maaler
   18 enheter paa den dominerende aksen, handlevogna 20 — den er 11 % stoerre
   og leser som det. 0.9 tar den ned paa linje med de andre. */
.nav-ikon-veske { transform: scale(.9); }
#mainNav.light .nav-icons svg,
#mainNav.light .nav-icons a svg,
#mainNav.scrolled .nav-icons svg,
#mainNav.scrolled .nav-icons a svg { stroke: var(--ink); }

/* MØRK MENY OVER LYS HERO. Produktheroene er studiobilder på hvitt (20 av 22
   har lyshet 234–255 i toppen), og der forsvant den hvite logoen: «people» var
   nesten borte på Mortens skjermbilde 15. september. Klassen settes av
   produkt.html via filteret er_lys_topp. Samme mørke logo, lenker og ikoner
   som .light, men uten den hvite flaten, som ville dekket toppen av bildet.
   Når du scroller, tar .scrolled over som før. */
#mainNav.lys-topp .nav-logo .logo-on-dark { display: none; }
#mainNav.lys-topp .nav-logo .logo-on-light { display: block; }
#mainNav.lys-topp .nav-links a { color: var(--ink); }
#mainNav.lys-topp .nav-links a::after { background: var(--gronn); }
#mainNav.lys-topp .nav-icons svg,
#mainNav.lys-topp .nav-icons a svg { stroke: var(--ink); }

/* HERO */
.hero {
  /* svh og ikke vh: 100vh er skjermen UTEN adresselinja, altsaa hoeyere enn
     det som faktisk vises. Heroen er bunnforankret, saa navn, pris og knapp
     havnet under folden — og gled opp i syne foerst naar iOS trakk inn
     linja ved foerste scroll. svh er den synlige hoeyden og staar stille.
     dvh ville fulgt linja opp og ned og gitt reflow midt i scrollet — det
     er riktig for et panel som ikke ruller, men galt for en hero du ruller
     forbi. vh staar igjen foerst som reserve for eldre nettlesere. */
  /* minus baandet: staar tickeren paa, er den synlige hoeyden mindre. */
  position: relative; width: 100vw; height: calc(100vh - var(--ticker-h, 0px)); height: calc(100svh - var(--ticker-h, 0px));
  overflow: hidden; display: flex; align-items: flex-end;
}
.hero-img {
  position: absolute; inset: 0;
  background-size: cover; background-position: center 20%;
  transform: scale(1.04);
  animation: zoomout 8s ease forwards;
}
@keyframes zoomout { to { transform: scale(1); } }
.hero-overlay {
  position: absolute; inset: 0;
  background:
    linear-gradient(to bottom, rgba(0,0,0,.08) 0%, rgba(0,0,0,0) 40%, rgba(0,0,0,.6) 100%),
    radial-gradient(ellipse at center, transparent 50%, rgba(0,0,0,.35) 100%);
}
.hero-content {
  position: relative; z-index: 2;
  padding: 0 56px 64px;
  animation: fadeup .9s .4s both ease;
}
@keyframes fadeup { from { opacity:0; transform:translateY(24px); } to { opacity:1; transform:none; } }
.hero-eyebrow {
  font-size: var(--t-micro); letter-spacing: .35em; text-transform: uppercase;
  color: var(--ice); margin-bottom: 14px;
}
.hero-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-hero);
  font-weight: 300; line-height: 1.0; color: #fff;
  margin-bottom: 28px;
}
.hero-title em { font-style: italic; }
.hero-cta {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 14px 36px;
  border: 1px solid rgba(255,255,255,.5);
  color: #fff; font-size: var(--t-fin); letter-spacing: .25em;
  text-transform: uppercase; cursor: pointer; text-decoration: none;
  transition: background .25s, border-color .25s;
}
.hero-cta:hover { background: rgba(255,255,255,.1); border-color: #fff; }
.hero-scroll {
  position: absolute; right: 48px; bottom: 60px; z-index: 2;
  writing-mode: vertical-rl; font-size: var(--t-micro); letter-spacing: .3em;
  text-transform: uppercase; color: rgba(255,255,255,.5);
  display: flex; align-items: center; gap: 12px;
}
.hero-scroll::after {
  content: ''; display: block; width: 1px; height: 50px;
  background: rgba(255,255,255,.35);
  animation: scrollline 2s ease-in-out infinite;
}
@keyframes scrollline { 0%,100%{opacity:.3} 50%{opacity:1} }

/* INTRO */
.intro { display: grid; grid-template-columns: 1fr 1fr; min-height: 70vh; }
/* Flategrønn med hvit tekst, 11.25:1, etter mockupen 11. september. Etiketten
   var rød tekst, men --rod er 2.19:1 her og ville forsvunnet som tekst — så
   den ble hvit. Nåla og pila blir derimot røde som i mockupen: de er pynt og
   bærer ingen informasjon, så det er ikke dem kontrastkravet gjelder.
   Brødteksten er hvitt på 78 %, 7.6:1: et trinn under overskriften, godt
   over AAs 4.5. */
.intro-text {
  display: flex; flex-direction: column; justify-content: center;
  padding: 80px 72px; background: var(--gronn-dyp);
}
.intro-label {
  display: flex; align-items: center; gap: 16px;
  font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase;
  color: #fff; margin-bottom: 20px;
}
.intro-label .pin { height: 11px; width: auto; flex: none; }
.intro-heading {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-2);
  font-weight: 300; line-height: 1.15;
  color: #fff; margin-bottom: 28px;
}
.intro-body {
  font-size: var(--t-liten); line-height: 1.9; color: rgba(255,255,255,.78);
  max-width: 380px; font-weight: 300;
}
/* Stille lenke, ikke knapp. Heroen rett over har allerede en tung CTA, og to
   tunge i samme rulling svekker hverandre — den nederste taper alltid. Samme
   språk som .lookbook-link lenger nede, med heroens røde pil som bindeledd.
   align-self holder lenka på ordbredde inne i flex-kolonnen. */
.intro-cta {
  align-self: start; margin-top: 32px;
  display: inline-flex; align-items: center; gap: 12px;
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase;
  color: #fff; text-decoration: none;
  border-bottom: 2px solid #fff; padding-bottom: 12px;
}
.intro-cta .arrow { color: var(--rod); transition: transform .4s ease; }
.intro-cta:hover .arrow { transform: translateX(6px); }

/* Et <img> med srcset og ikke en CSS-bakgrunn: en bakgrunn kan ikke velge
   størrelse etter skjermen. Bildet lastes opp som det er og beskjæres her —
   til 10. september ble det skåret til 16:9 først, og en nesten kvadratisk
   boks fikk da bare et smalt bånd av fotoet å fylle seg med. */
/* Minst like høy som bred (50vw er hele kolonnen og litt til, fordi
   rullefeltet står utenfor), så et kvadratisk bilde aldri beskjæres i
   høyden — bare i sidene, der studiobildene har tom bakgrunn. IKKE et
   stående: 3:4 i en kvadratisk boks mister 12,5 % øverst og nederst.
   Boksen går ned til ca. 0,78 bred/høy (800 px vindu, teksten holder
   høyden på 500), så modellen må stå innenfor midtre ~75 % av bredden.
   Med 500px/70vh var boksen bredere enn høy, og cover kuttet 6–11 % øverst
   og nederst: hårtoppen og støvlene på om_7c9d2214 (modellen går fra 4 til
   100 % av høyden). Prisen er en høyere seksjon på brede skjermer — 960 px
   på en 1920-skjerm, mot 756 før. */
.intro-img { position: relative; min-height: max(500px, 50vw); overflow: hidden; }
.intro-img img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; display: block;
}

/* KATEGORIFLISER — Dame og Unisex, etter skjermbildene 16. september.
   Erstatter lookbooken på forsiden: to flater som deler kolleksjonen, i
   stedet for tre enkeltplagg med pris. Lookbook-reglene under står igjen
   fordi blokka fortsatt kan skrus på i forsidebyggeren.

   Bredden er begrenset til 1560 som i mockupen. Flisene er 4:5, så uten
   taket ville de vokst med skjermen: på en 1920-skjerm blir en fullbredde
   flis 903 px bred og 1129 px høy — høyere enn vinduet, for et bilde som
   bare skal si «her er damekolleksjonen». Med taket er den 751x939. */
.kategorier { background: var(--flate); padding: 80px 56px; }
.kategorier-inner { max-width: 1560px; margin: 0 auto; }
.kategorier-hode {
  display: flex; align-items: baseline; justify-content: space-between; gap: 24px;
  margin-bottom: 38px;
}
.kategorier-tittel {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-1); font-weight: 300; color: var(--ink);
}
/* Grønn strek, som understreken i menyen og under heroens knapp. Mockupen
   setter den på 1.5px; 2px ville vært et tyngre element enn lenka selv. */
.kategorier-lenke {
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase;
  color: var(--ink); text-decoration: none; white-space: nowrap;
  border-bottom: 1.5px solid var(--gronn); padding-bottom: 4px;
}
/* Fugen viser seksjonsflata gjennom, som i lookbooken: to hvite studiobilder
   ved siden av hverandre flyter sammen uten den. */
.kategorier-rad {
  display: grid; grid-template-columns: 1fr 1fr; gap: 2px; background: var(--hair);
}
.kategori-flis {
  position: relative; display: block; overflow: hidden;
  aspect-ratio: 4 / 5; background: #fafafa;
}
/* 22% og ikke senter: motivet står høyt i alle studiobildene, og et 3:4-foto
   i en 4:5-boks har bare 6 % å gi. Beskjæringen tar da fra føttene. */
.kategori-flis img {
  width: 100%; height: 100%; object-fit: cover; object-position: 50% 22%;
  display: block; transition: transform .7s ease;
}
.kategori-flis:hover img { transform: scale(1.03); }

/* INSTAGRAM — samme hode og fuge som kategoriflisene, fire i bredden.
   4:5 fordi Instagram selv viser rutenettet i stående format siden 2025, og
   det er formatet innleggene blir laget for. Et kvadrat ville kappet toppen
   og bunnen av hvert eneste bilde. */
.instagram { background: var(--flate); padding: 80px 56px; }
.instagram-inner { max-width: 1560px; margin: 0 auto; }
.instagram-rad {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px; background: var(--hair);
}
.instagram-flis { display: block; overflow: hidden; aspect-ratio: 4 / 5; background: #fafafa; }
.instagram-flis img {
  width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .7s ease;
}
.instagram-flis:hover img { transform: scale(1.03); }
/* ETIKETTEN ER BLEKK, IKKE HVIT SOM I MOCKUPEN.
   Begge de leverte bildene har hvit studiobakgrunn nede til venstre, der
   etiketten står. Hvit tekst måler 1.0:1 der — bokstavene forsvinner helt,
   og i mockupens eget skjermbilde er det bare tekstskyggen som røper at det
   står noe. Blekk på den samme flata er 19.8:1.
   Sløret under er forsikringen mot et framtidig bilde med et mørkt hjørne:
   det ligger bare i hjørnet der etiketten er, ikke som en dis over hele
   bunnen, så støvletten i unisex-bildet blir stående som den er. Er hjørnet
   hvitt fra før, er sløret usynlig; er det svart, holder blekket 16:1. */
.kategori-flis::after {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(58% 32% at 0% 100%,
              rgba(255,255,255,.95), rgba(255,255,255,0) 72%);
}
/* Mockupen setter 34px på en flis som er 408 px bred i et smalt vindu — 8 %.
   Målt i piksler ville etiketten klistret seg til hjørnet når flisa blir
   751 px. Prosent med tak holder avstanden lik uansett bredde. */
.kategori-merke {
  position: absolute; z-index: 1; left: clamp(24px, 5%, 48px); bottom: clamp(24px, 4%, 48px);
  display: flex; align-items: center; gap: 12px;
  font-size: var(--t-fin); letter-spacing: .42em; text-transform: uppercase;
  color: var(--ink);
}
.kategori-merke .arrow { color: var(--rod); transition: transform .4s ease; }
.kategori-flis:hover .kategori-merke .arrow { transform: translateX(6px); }

/* LOOKBOOK */
/* Lys, ikke mørk: ingen svart bar mellom den grønne introen over og de
   hvite studiobildene. Bildene selv er den eneste mørke verdien i seksjonen. */
.lookbook { background: var(--flate); }
.lookbook-header {
  padding: 80px 56px 48px;
  display: flex; align-items: baseline; justify-content: space-between;
}
.lookbook-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-1); font-weight: 300; color: var(--ink);
}
.lookbook-link {
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase;
  color: var(--ink); text-decoration: none;
  border-bottom: 1px solid var(--ink); padding-bottom: 2px;
}
.lookbook-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  grid-template-rows: 520px 520px;
  gap: 3px;
  /* Fugene viste seksjonsbakgrunnen. Da den ble cream, forsvant de mot de
     hvite studiobildene og rutene fløt sammen. Egen flate holder skillet. */
  background: var(--hair);
}
.lookbook-item { position: relative; overflow: hidden; cursor: pointer; }
.lookbook-item:first-child { grid-row: span 2; }
.lookbook-item img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s ease; display: block; }
.lookbook-item:hover img { transform: scale(1.04); }
.lookbook-item-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(0,0,0,.55) 0%, transparent 50%);
  opacity: 0; transition: opacity .4s;
}
.lookbook-item:hover .lookbook-item-overlay { opacity: 1; }
.lookbook-item-info {
  position: absolute; bottom: 28px; left: 28px;
  transform: translateY(8px); transition: transform .4s, opacity .4s; opacity: 0;
}
.lookbook-item:hover .lookbook-item-info { transform: none; opacity: 1; }
.lookbook-item-name { font-family: 'Cormorant Garamond', serif; font-size: var(--t-h4); color: #fff; font-weight: 300; }
.lookbook-item-price { font-size: var(--t-fin); color: var(--ice); letter-spacing: .15em; margin-top: 4px; }

/* SLAGORD — kloden og merkets egne ord på flategrønt. Erstattet sitatblokka
   10. september etter skissen. Hvit på --gronn-dyp er 11.25:1. Skissen setter
   teksten i clamp(30px, 4vw, 60px); --d-1 (36 → 56) er nærmeste trinn i skalaen,
   og et eget trinn for én blokk er akkurat det skalaen skal hindre. */
.slogan { background: var(--gronn-dyp); padding: 120px 56px; text-align: center; }
.slogan-klode { display: block; width: 96px; height: auto; margin: 0 auto 40px; }
.slogan-tekst {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-1); font-weight: 300;
  line-height: 1.32; letter-spacing: -.01em; color: #fff;
}
.slogan-tekst em { font-style: italic; }

/* FOOTER */
/* FOOTER
   Tonene er hevet over hele foten. Lenkene sto på hvit .35 — 3.21:1 mot #111,
   under AAs 4.5 — og kolofonen på .20, altså 1.84:1. Det var ikke dempet, det
   var uleselig. Nå: lenker og adresse .6 (7.20:1), etiketter og kolofon .5
   (5.33:1). E-posten er merkegrønn, 6.87:1, og er den eneste fargen her. */
/* FOT — lys, ikke mørk. Snudde 10. september etter skissene: den mørke foten
   lukket sida med en vegg, og skissen lar den tone ut i det samme hvite som
   resten. Bare bunnbjelka er svart, og den er en signatur, ikke en seksjon. */
.footer-bar {
  background: var(--flate); border-top: 1px solid var(--hair);
  min-height: var(--footer-h);
  display: flex; flex-direction: column; justify-content: space-between;
}
.footer-inner {
  display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 48px;
  padding: 72px 56px 64px; max-width: 1560px; margin: 0 auto; width: 100%;
}
.footer-klode { display: block; width: 90px; height: auto; margin-bottom: 22px; }
.footer-brodtekst {
  font-size: var(--t-fin); line-height: 2; font-weight: 300;
  color: var(--soft); max-width: 60ch; text-wrap: balance;
}
/* Kolonneoverskriftene er RØDE. Det er merkets eneste røde flate utenom
   pinnen, og 5.15:1 mot hvitt — godt over kravet selv på 10px versaler. */
.footer-tittel {
  font-size: var(--t-micro); letter-spacing: .28em; text-transform: uppercase;
  color: var(--rod); font-weight: 500; margin-bottom: 20px;
}
.footer-kol ul { list-style: none; display: flex; flex-direction: column; gap: 11px; }
.footer-kol a,
.footer-lenkeknapp {
  font-size: var(--t-fin); color: var(--ink); text-decoration: none;
  font-weight: 300; transition: color .2s;
}
.footer-lenkeknapp {
  background: none; border: 0; padding: 0; font-family: inherit;
  cursor: pointer; text-align: left;
}
.footer-kol a:hover,
.footer-lenkeknapp:hover { color: var(--gronn); }
/* Svart bjelke. Hvit på .72 gir 12.1:1 — dempet uten å bli utydelig. */
.footer-bunn {
  background: var(--ink); color: rgba(255,255,255,.72);
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px;
  /* Bjelka er full bredde, men teksten skal stå i flukt med kolonnene over,
     som slutter ved 1560 px. Uten dette havnet copyright og «Designet i
     Norge» helt ute i hver sin skjermkant på brede skjermer: 2548 px bredt
     vindu ga 494 px avvik på hver side. */
  padding: 20px max(56px, calc((100% - 1560px) / 2 + 56px));
}
.footer-copy {
  font-size: var(--t-micro); letter-spacing: .22em; text-transform: uppercase;
}

/* PRESS */
.press {
  background: var(--ink); padding: 80px 56px; text-align: center;
}
.press-label {
  font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase;
  color: rgba(255,255,255,.3); margin-bottom: 32px;
}
.press-logos {
  display: flex; align-items: center; justify-content: center;
  gap: 16px; flex-wrap: wrap; margin-bottom: 60px;
}
.press-logo {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h4); font-weight: 300; font-style: italic;
  color: rgba(255,255,255,.4); letter-spacing: .05em;
}
.press-divider { color: rgba(255,255,255,.15); font-size: var(--t-brod); }
.press-quotes {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 40px; max-width: 1000px; margin: 0 auto;
}
.press-quote-item { border-top: 1px solid rgba(255,255,255,.1); padding-top: 24px; }
.press-quote-text {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-lead); font-style: italic; font-weight: 300;
  color: rgba(255,255,255,.7); line-height: 1.6; margin-bottom: 12px;
}
.press-quote-source {
  font-size: var(--t-micro); letter-spacing: .2em; text-transform: uppercase;
  color: rgba(255,255,255,.3);
}

/* NEWSLETTER
   Flata er --ice igjen. Merkegrønn ble prøvd 9. september og tatt ut: den
   trakk blikket til et påmeldingsskjema nederst på siden, foran plaggene.

   Blekket beholder derimot rettelsene fra den runden, for de var ikke et
   grønnproblem. Blokka ble tegnet mørk en gang og siden gjort lys uten at
   alt fulgte med, så de dempede tonene (.4/.5/.35 svart) lå under AA mot
   --ice fra før — 2.67, 3.61 og 2.32:1 — og feilmeldingen var lys korall,
   altså usynlig. Grønnfargen gjorde det bare synlig. Tallene under er regnet
   om mot --ice. */
.newsletter {
  background: var(--ice); padding: 100px 56px; text-align: center;
}
/* Med bakgrunnsbilde blir blokka en scene: bildet fyller seksjonen, og
   teksten faar sin egen lyse plate oppaa. Uten plata maa hver eneste tone
   fungere mot et bilde ingen har sett paa forhaand — og det gaar ikke, fordi
   bildet byttes i admin. Plata gjoer kontrasten forutsigbar uansett foto. */
.newsletter.har-bakgrunn {
  position: relative; background: none;
  padding: 120px 24px; overflow: hidden;
  /* Hvor øynene står i bildet (andel av høyden), og hvor de skal stå på
     skjermen (fra toppen av seksjonen). Målt i bg_2b13e27e: pupillene på
     43 %, hårfestet på 28 %. Byttes bildet, må --oyne-y måles på nytt. */
  --oyne-y: .43;
  --oyne-top: 66px;
  --bg-h: max(56.25vw, calc((100% - var(--oyne-top)) / (1 - var(--oyne-y))));
}
/* Torunns skisse 14. september: øynene titter fram over boksen, og
   overkanten skjærer gjennom pannen — issen skal aldri stikke opp over
   skjemaet, slik den gjorde før. En fast object-position klarer det ikke:
   74 % traff på skissens 2202 px brede skjerm, men la øynene bak boksen og
   issen over den på 1440. Bildets høyde og topp regnes derfor slik at
   øynene alltid står --oyne-top fra toppen:
     høyde = det største av «dekker bredden» (16:9, altså 56.25vw) og
             «rekker ned til bunnen» ((seksjon − oyne-top) / (1 − oyne-y))
     topp  = oyne-top − oyne-y × høyde
   Prosentene i --bg-h regnes mot seksjonens høyde, fordi den er bildets
   containing block. På smale PC-skjermer blir bildet dermed forstørret
   litt mer enn cover ville gjort. */
.newsletter-bg {
  position: absolute; z-index: 0;
  left: 50%; transform: translateX(-50%);
  height: var(--bg-h);
  top: calc(var(--oyne-top) - var(--oyne-y) * var(--bg-h));
  width: auto; min-width: 100%; max-width: none;
  /* Bare for et bilde som ikke er 16:9: da fyller det fortsatt bredden. */
  object-fit: cover;
}
.newsletter.har-bakgrunn .newsletter-inner {
  position: relative; z-index: 1;
  max-width: 600px;
  background: rgba(255,255,255,.86);
  backdrop-filter: blur(2px);
  padding: 52px 88px 44px;
}
.newsletter-inner { max-width: 560px; margin: 0 auto; }
.newsletter-label {
  font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase;
  color: rgba(0,0,0,.7); margin-bottom: 20px;   /* 6.87:1 */
}
.newsletter-heading {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-2);
  font-weight: 300; line-height: 1.2; color: var(--ink);
  margin-bottom: 16px;
}
.newsletter-heading em { font-style: italic; }
.newsletter-sub {
  font-size: var(--t-liten); color: rgba(0,0,0,.7); margin-bottom: 36px; font-weight: 300;   /* 4.91:1 */
}
.newsletter-form {
  display: flex; gap: 0; margin-bottom: 16px;
}
.newsletter-form input {
  /* Kanten, ikke flata, skiller feltet fra bakgrunnen. Hvitt mot --ice er
     bare 1.55:1, og et skjemafelt må kunne skilles fra bakgrunnen (1.4.11,
     3:1). Kanten gjør jobben på 3.61:1. Den gamle .2-kanten lå på 1.57:1. */
  flex: 1; padding: 16px 20px; border: 1px solid rgba(0,0,0,.5);
  background: #fff; font-family: 'Montserrat', sans-serif;
  font-size: var(--t-brod); outline: none; color: var(--ink);
}
.newsletter-form input:focus { background: #fff; border-color: var(--ink); }
.newsletter-form button {
  padding: 16px 32px; background: var(--ink); color: #fff;
  border: none; font-family: 'Montserrat', sans-serif;
  font-size: var(--t-micro); letter-spacing: .25em; text-transform: uppercase;
  cursor: pointer; transition: background .2s, color .2s;
  white-space: nowrap;
}
.newsletter-form button:hover { background: #333; }
.newsletter-disclaimer {
  font-size: var(--t-micro); color: rgba(0,0,0,.7); letter-spacing: .1em;   /* 4.91:1 */
}

/* Skissen 14. september: pin over overskriften, overskriften i versal
   Montserrat (ikke Cormorant med kursiv andrelinje), og et skjema som bare
   er en grønn strek, med knappen som tekst. Avgrenset til .newsletter —
   /trekning bruker .newsletter-form utenfor en slik seksjon og beholder den
   svarte knappen. */
.newsletter .newsletter-pin { display: block; height: 14px; width: auto; margin: 0 auto 22px; }
.newsletter .newsletter-heading {
  font-family: 'Montserrat', sans-serif; font-weight: 300;
  text-transform: uppercase; letter-spacing: .02em; line-height: 1.12;
}
.newsletter .newsletter-heading em { font-style: normal; }
.newsletter .newsletter-sub {
  font-size: var(--t-fin); line-height: 1.9; max-width: 36ch; margin: 0 auto 32px;
}
/* Streken er feltets kant: et skjemafelt må kunne skilles fra flata med
   3:1 (1.4.11), og --gronn er 4.49:1 mot hvitt. Fokus gjør den tykkere med
   en skygge i stedet for en tykkere kant, så ingenting under hopper. */
.newsletter .newsletter-form {
  max-width: 400px; margin: 0 auto 14px; align-items: center;
  border-bottom: 1px solid var(--gronn);
}
.newsletter .newsletter-form:focus-within { box-shadow: 0 1px 0 var(--gronn); }
/* Feltet beholder 16 px selv om skissen er mindre: iOS zoomer inn på felt
   med mindre skrift og blir stående zoomet — se --t-brod. */
.newsletter .newsletter-form input,
.newsletter .newsletter-form input:focus { border: 0; background: transparent; padding: 12px 0; }
/* Grønn tekst på plata er ~4.3:1 — litt under 4.5 for så liten skrift. Det
   er skissens farge; blir den mørkere, er --gronn-dyp 11:1. */
.newsletter .newsletter-form button,
.newsletter .newsletter-form button:hover {
  background: none; color: var(--gronn); padding: 12px 0 12px 16px; font-weight: 500;
}
.newsletter .newsletter-form button:hover { color: var(--gronn-dyp); }
.newsletter .newsletter-form button .arrow { display: inline-block; margin-left: 4px; transition: transform .3s ease; }
.newsletter .newsletter-form button:hover .arrow { transform: translateX(4px); }
/* Frist og vilkår står, selv om skissen ikke har dem: markedsføringsloven
   krever at vilkårene er lett tilgjengelige der man melder seg på. Uten
   skillestrek og med mindre luft, så linja leser som en fotnote. */
.newsletter .kampanje { margin-top: 10px; padding-top: 0; border-top: 0; }
.newsletter .kampanje-vilkar { font-size: var(--t-micro); letter-spacing: .04em; }

/* MOBIL: bildet som et bånd øverst, og skjemaet på en plate som griper inn
   i det. Skissen er tegnet for PC. Samme grep her ville krevd rundt 3,4×
   forstørrelse for å få øynene over boksen, og da er 1800-fila myk på en
   3x-skjerm. Båndet viser hele hodet, så ingenting stikker opp bak skjemaet.
   84vw høyt gir bildet 150vw bredt — derav sizes i malen. */
@media (max-width: 768px) {
  .newsletter.har-bakgrunn { padding: 0 0 48px; }
  .newsletter-bg {
    position: relative; display: block; left: auto; top: auto; transform: none;
    width: 100%; min-width: 0; height: 84vw; object-position: 46% 0;
  }
  .newsletter.har-bakgrunn .newsletter-inner { margin: -56px 16px 0; padding: 40px 24px 32px; }
  .newsletter .newsletter-form { flex-direction: row; }
  .newsletter .newsletter-form input { width: auto; min-width: 0; }
  .newsletter .newsletter-form button { width: auto; padding: 12px 0 12px 12px; }
}

/* CAROUSEL */
/* Sandflate bak kortene. */
.carousel-section { background: var(--flate); padding: 80px 56px; }
.carousel-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 40px; }
.carousel-title { font-family: 'Cormorant Garamond', serif; font-size: var(--t-h2); font-weight: 300; }
/* Pilene VISES nå. De sto skjult fordi sporet uansett kan dras, men et spor
   som kan dras uten at noe sier det, blir ikke dratt — halvkortet i kanten og
   pilene er to ulike hint om det samme, og de utelukker ikke hverandre. */
.carousel-nav { display: flex; gap: 10px; }
.carousel-btn {
  width: 38px; height: 38px; border: 1px solid var(--hair); background: #fff;
  display: grid; place-items: center; font-size: var(--t-fin); color: var(--ink);
  cursor: pointer; transition: border-color .2s, color .2s;
}
.carousel-btn:hover { border-color: var(--gronn); color: var(--gronn); }
/* Rullefeltet skjules, men rullingen beholdes: pilene og halvkortet sier
   allerede at raden fortsetter, og et synlig felt under kortene tegner en
   strek gjennom komposisjonen. */
.carousel-track-wrap {
  overflow-x: auto; scroll-behavior: smooth; scroll-snap-type: x mandatory;
  padding-bottom: 8px; scrollbar-width: none;
}
.carousel-track-wrap::-webkit-scrollbar { display: none; }
.carousel-track { display: flex; gap: 22px; }
/* 4,6 kort i bredden, ikke en fast pikselbredde. Det halve kortet i kanten
   ER hintet om at raden fortsetter — med et helt antall kort ser raden ferdig
   ut og ingen drar i den. clamp holder kortet lesbart på små skjermer og
   hindrer at det blir plakatstort på en 27-tommer. */
.carousel-item {
  flex: 0 0 clamp(170px, calc((100% - 4 * 22px) / 4.6), 320px);
  scroll-snap-align: start; min-width: 0;
  text-decoration: none; color: inherit;
}
/* «Kommer snart» under klodemerket, der et produkt ennå ikke har bilder.
   Ekte tekst og ikke brent inn i placeholder.jpg: serveren har ingen
   Montserrat — skriftene hentes fra Google i nettleseren — så en innbrent
   tekst ville kommet i DejaVu og skilt seg ut fra all annen tekst på siden.
   Den ligger dessuten samme sted som produktsiden sier det, og kan si en dato
   den dagen noen vil det.
   18 % opp fra bunnen: kloden er midtstilt og slutter 68 % ned, så det er
   klar luft mellom dem i alle tre kortstørrelsene. Ingen bakgrunn bak
   teksten — flata under er --product-bg, altså hvit, som teksten står på. */
/* «Tilgjengelig / 24. september» midt på kortbildet, se _tilgjengelig.html.
   Stort og midtstilt etter ønske (17. september): det skal leses som at
   plagget ikke er ute ennå, ikke som en liten merknad i hjørnet. Hvit flate
   med litt gjennomsiktighet, så plagget skimtes bak og teksten leses mot både
   hvite og svarte jakker. */
.kort-tilgjengelig {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  z-index: 2; pointer-events: none;
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  width: max-content; max-width: 82%;
  background: rgba(255,255,255,.9); color: var(--ink); padding: 16px 22px;
  text-align: center; box-shadow: 0 0 0 1px rgba(0,0,0,.06);
}
/* Sterkere velger enn nødvendig med vilje: `.produkt-kort-img img` og
   `.carousel-img img` gjør alle bilder i kortet til fullflate-bilder, og nåla
   ble strukket over hele merket. */
.kort-tilgjengelig img.kort-tilgjengelig-pin {
  position: static; display: block; width: auto; height: 14px;
  object-fit: initial; transform: none; opacity: 1; transition: none; margin-bottom: 4px;
}
.kort-tilgjengelig-etikett {
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase; color: var(--soft);
}
.kort-tilgjengelig-dato {
  font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 400;
  font-size: clamp(18px, 1.8vw, 24px); line-height: 1.1; white-space: nowrap;
}
.bilde-kommer {
  position: absolute; left: 0; right: 0; bottom: 18%;
  text-align: center; pointer-events: none;
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase;
  color: var(--soft); font-weight: 400;
}
/* position: relative for .bilde-kommer. Ruta hadde ingen egen
   posisjonering — uten denne ville etiketten festet seg til nærmeste
   posisjonerte forelder, altså et helt annet sted på siden. */
.carousel-img { position: relative; background: #fafafa; aspect-ratio: 3/4; overflow: hidden; margin-bottom: 14px; }
/* Ingen padding: luften bakes inn i bildefila (3:4, plagg ~88% av høyden),
   så rammen er eksakt 3:4 og masteren fyller den kant til kant. */
.carousel-img img { width: 100%; height: 100%; object-fit: contain; transition: transform .5s; }
.carousel-item:hover .carousel-img img { transform: scale(1.04); }
.carousel-name { font-family: 'Cormorant Garamond', serif; font-size: var(--t-lead); font-weight: 300; margin-bottom: 4px; }
.carousel-price { font-size: var(--t-fin); color: var(--soft); }

/* CART DRAWER */
.cart-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.4);
  z-index: 200; opacity: 0; pointer-events: none;
  transition: opacity .3s;
}
.cart-overlay.active { opacity: 1; pointer-events: all; }

.cart-drawer {
  position: fixed; top: 0; right: 0; bottom: 0;
  width: 420px; max-width: 100vw;
  background: var(--flate); z-index: 201;
  transform: translateX(100%); transition: transform .35s ease;
  display: flex; flex-direction: column;
}
.cart-drawer.active { transform: none; }

.cart-drawer-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 28px 28px 20px; border-bottom: 1px solid var(--hair);
}
.cart-drawer-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h4); font-weight: 300; letter-spacing: .05em;
}
.cart-drawer-close {
  background: none; border: none; font-size: var(--t-h3);
  cursor: pointer; color: var(--soft); line-height: 1; padding: 4px;
}
.cart-drawer-close:hover { color: var(--ink); }

.cart-drawer-items {
  flex: 1; overflow-y: auto; padding: 20px 28px;
}
.cart-drawer-loading { text-align: center; padding: 40px; color: var(--soft); font-size: var(--t-liten); }

.cart-drawer-item {
  display: grid; grid-template-columns: 70px 1fr auto;
  gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--hair);
  align-items: start;
}
.cart-drawer-item img { width: 70px; height: 90px; object-fit: cover; }
.cart-drawer-item-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-brod); font-weight: 300; margin-bottom: 4px;
}
.cart-drawer-item-variant { font-size: var(--t-micro); color: var(--soft); margin-bottom: 10px; }
.cart-drawer-item-qty {
  display: flex; align-items: center; gap: 10px;
}
.cart-drawer-item-qty button {
  width: 24px; height: 24px; border: 1px solid var(--hair);
  background: #fff; cursor: pointer; font-size: var(--t-brod);
}
.cart-drawer-item-qty span { font-size: var(--t-liten); min-width: 16px; text-align: center; }
.cart-drawer-item-price { font-size: var(--t-brod); white-space: nowrap; }
.cart-drawer-item-remove {
  font-size: var(--t-micro); letter-spacing: .15em; text-transform: uppercase;
  color: var(--soft); background: none; border: none;
  cursor: pointer; display: block; margin-top: 6px; text-decoration: underline;
}

.cart-drawer-empty {
  text-align: center; padding: 60px 20px; color: var(--soft); font-size: var(--t-liten);
}

.cart-drawer-footer {
  padding: 20px 28px 28px; border-top: 1px solid var(--hair);
}
.cart-drawer-sum {
  display: flex; justify-content: space-between;
  font-size: var(--t-liten); color: var(--soft); margin-bottom: 6px;
}
/* Brukes både i skuffen og på handlekurvsiden, derfor her og ikke i checkout.css. */
.cart-fra {
  font-size: var(--t-micro); letter-spacing: .12em; text-transform: uppercase;
  color: #888; margin-left: 4px;
}
.cart-drawer-item-qty button:disabled { opacity: .3; cursor: default; }
.cart-drawer-total {
  display: flex; justify-content: space-between;
  font-size: var(--t-brod); font-weight: 500; margin-bottom: 16px;
  padding-top: 10px; border-top: 1px solid var(--hair);
}
.cart-drawer-checkout {
  display: block; width: 100%; padding: 16px;
  background: var(--ink); color: #fff; border: none;
  font-family: 'Montserrat', sans-serif; font-size: var(--t-fin);
  letter-spacing: .3em; text-transform: uppercase;
  cursor: pointer; text-align: center; text-decoration: none;
  margin-bottom: 10px; transition: background .2s;
}
.cart-drawer-checkout:hover { background: #333; }
/* Bekreftelsen øverst i kurvskuffen etter et kjøp, se openCart() i main.js. Står her og ikke i
   produkt.css fordi skuffen hører til alle sider. */
.cart-drawer-bekreftet {
  font-size: var(--t-micro); letter-spacing: .15em; text-transform: uppercase;
  color: var(--ink); padding: 0 0 14px; border-bottom: 1px solid var(--hair);
}
.cart-drawer-view {
  display: block; text-align: center; font-size: var(--t-micro);
  letter-spacing: .2em; text-transform: uppercase;
  color: var(--soft); text-decoration: none;
}
.cart-drawer-view:hover { color: var(--ink); }

/* CART BADGE
   Rød og ikke grønn som i skissen — Morten avgjorde det 10. september. Hvitt
   på --rod er 5.15:1; på --gronn ville det vært 4.49:1, under kravet for de
   10 px tallet står i. */
/* Plasseringen maales mot BLEKKET i ikonet, ikke mot <svg>-boksen. Vesken
   tegner bare 18 av 24 enheter i bredden og krympes i tillegg med 0.9
   (.nav-ikon-veske), saa hoeyre kant av selve vesken ligger 3,3 px innenfor
   boksen. Med -8px havnet merket 3 px UTENFOR vesken, altsaa midt i lufta
   mellom veske og kontoikon — og med 16 px luft paa mobil leste det som at
   tallet hoerte til brukeren (Morten, 16. september). -5/-6 setter det paa
   veskas eget hjoerne. */
.cart-badge {
  position: absolute; top: -6px; right: -5px;
  background: var(--rod); color: #fff;
  font-size: var(--t-micro); width: 16px; height: 16px;
  border-radius: 50%; display: flex; align-items: center;
  justify-content: center; font-weight: 500;
}

/* MENU DRAWER — slide up */
.menu-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.3);
  z-index: 300; opacity: 0; pointer-events: none; transition: opacity .3s;
}
.menu-overlay.active { opacity: 1; pointer-events: all; }

.menu-drawer {
  position: fixed; bottom: 0; left: 0; right: 0;
  background: var(--flate); z-index: 301;
  transform: translateY(100%); transition: transform .4s cubic-bezier(.4,0,.2,1);
  border-radius: 20px 20px 0 0;
  box-shadow: 0 -8px 40px rgba(0,0,0,.12);
  overflow: hidden;
}
.menu-drawer.active { transform: translateY(0); }
.menu-handle { display: block; }
.menu-drawer-header { position: relative; z-index: 2; }
.menu-nav {
  position: relative; z-index: 1; overflow-y: auto; max-height: 50vh;
  -webkit-overflow-scrolling: touch;
}

.menu-handle {
  width: 40px; height: 4px; background: #ddd; border-radius: 2px;
  margin: 16px auto 0; cursor: pointer;
}

.menu-drawer-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 40px 16px;
  border-bottom: 1px solid var(--hair);
  position: sticky; top: 0; background: var(--flate); z-index: 1;
}
.menu-logo {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-liten); letter-spacing: .25em; text-transform: uppercase;
  color: var(--ink); text-decoration: none; font-weight: 300;
}
.menu-logo span { color: var(--rod); }
.menu-close {
  background: none; border: none; color: var(--soft);
  font-size: var(--t-h3); cursor: pointer; line-height: 1;
}
.menu-close:hover { color: var(--ink); }

/* Menyen er nederste element i skuffen etter at foten gikk ut, og arver
   dermed dens jobb: env(safe-area-inset-bottom) holder siste lenke klar av
   hjemindikatoren på iPhone. Uten den legger stripa seg oppå «Kontakt».
   Verdien står i kortformen og ikke som en egen padding-bottom lenger oppe:
   denne regelen kommer sist og ville uansett overskrevet den. */
.menu-nav {
  padding: 24px 40px calc(env(safe-area-inset-bottom, 0px) + 32px);
  display: flex; flex-direction: column; align-items: center;
}
.menu-link {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h2); font-weight: 300; color: var(--ink);
  text-decoration: none; padding: 12px 0;
  border-bottom: 1px solid var(--hair);
  width: 100%; text-align: center;
  transition: color .2s; display: block;
}
.menu-link:last-child { border-bottom: none; }
.menu-link:hover { color: var(--rod); }
.menu-link-arrow { display: none; }


/* SEARCH OVERLAY */
.search-overlay {
  position: fixed; inset: 0; background: var(--flate);
  z-index: 400; opacity: 0; pointer-events: none;
  transition: opacity .3s; display: flex; align-items: flex-start;
}
.search-overlay.active { opacity: 1; pointer-events: all; }

.search-inner {
  width: 100%; max-width: 800px; margin: 0 auto;
  padding: 120px 48px 48px; position: relative;
}
.search-close {
  position: absolute; top: 40px; right: 48px;
  background: none; border: none; font-size: var(--t-h2);
  cursor: pointer; color: var(--soft); line-height: 1;
}
.search-close:hover { color: var(--ink); }

.search-wrap {
  position: relative; margin-bottom: 40px;
  border-bottom: 2px solid var(--ink); padding-bottom: 12px;
  display: flex; align-items: center;
}
.search-wrap input {
  flex: 1; border: none; background: transparent;
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h2); font-weight: 300; color: var(--ink);
  outline: none;
}
.search-wrap input::placeholder { color: #ccc; }
.search-wrap svg {
  width: 24px; height: 24px; stroke: var(--soft);
  fill: none; stroke-width: 1.5; flex-shrink: 0;
}

.search-results { display: flex; flex-direction: column; gap: 16px; }
.search-result-item {
  display: flex; align-items: center; gap: 20px;
  text-decoration: none; color: inherit; padding: 12px 0;
  border-bottom: 1px solid var(--hair);
  transition: opacity .2s;
}
.search-result-item:hover { opacity: .7; }
.search-result-img { width: 60px; height: 75px; object-fit: cover; background: #fff; flex-shrink: 0; }
.search-result-name {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-lead); font-weight: 300; margin-bottom: 4px;
}
.search-result-price { font-size: var(--t-fin); color: var(--soft); }
.search-no-results { font-size: var(--t-liten); color: var(--soft); padding: 20px 0; }

/* ── MOBIL ── */
@media (max-width: 768px) {

  /* NAV */
  #mainNav { padding: 20px 24px; }
  #mainNav.scrolled { padding: 14px 24px; }
  .nav-logo img { height: 19px; }
  /* 20 og ikke 16: handlekurvmerket stikker 5 px ut i lufta mot kontoikonet,
     og 16 px gjorde den avstanden mindre enn merket selv. Det er plass —
     logoen er 121 px ved 19 px hoeyde, og raden bruker da 305 av 320 px paa
     den smaleste telefonen. */
  .nav-icons { gap: 20px; }
  .nav-icons svg { width: 20px; height: 20px; }
  /* Ikonene skal aldri klemmes sammen om noe vokser i raden; da ville merket
     glidd ut av veska si igjen. */
  .nav-icons, .nav-icons > * { flex: none; }
  .nav-links { display: none; }

  /* HERO */
  .hero-content { padding: 0 24px 48px; }
  .hero-title { margin-bottom: 20px; }
  .hero-eyebrow { font-size: var(--t-micro); }
  .hero-cta { padding: 12px 28px; font-size: var(--t-micro); }
  .hero-scroll { display: none; }

  /* INTRO */
  .intro { grid-template-columns: 1fr; }
  .intro-text { padding: 48px 24px; order: 2; }
  /* Kvadratisk, av samme grunn som på PC: 320 px høy og full bredde kuttet
     hodet til modellen. */
  .intro-img { min-height: 100vw; order: 1; }

  /* KATEGORIFLISER — under hverandre. To 4:5-flater ved siden av hverandre
     på en telefon blir 44 px brede plagg; da er det ikke et bilde lenger. */
  .kategorier { padding: 48px 24px; }
  .kategorier-hode { margin-bottom: 24px; }
  /* 4:5 står igjen også her. Et lavere utsnitt ville spart en halv skjerm
     rulling, men beskjæringen tar nedenfra: i unisex-bildet er det støvletten
     som er motivet, og den ligger nederst. */
  .kategorier-rad { grid-template-columns: 1fr; }
  /* 2x2 og ikke én under hverandre som kategoriflisene: dette er et glimt
     av kontoen, ikke noe å klikke seg videre på i butikken. Fire fulle
     skjermbredder ville vært den lengste seksjonen på forsiden. Lenka flyttes
     under tittelen, «@wearethepeople.official» får ikke plass ved siden av. */
  .instagram { padding: 48px 24px; }
  .instagram-rad { grid-template-columns: 1fr 1fr; }
  .instagram .kategorier-hode { flex-direction: column; align-items: flex-start; gap: 14px; }

  /* LOOKBOOK */
  .lookbook-header { padding: 48px 24px 28px; }
  .lookbook-grid {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
  }
  .lookbook-item { height: 70vw; }
  .lookbook-item:first-child { grid-row: span 1; height: 90vw; }
  .lookbook-item-info { opacity: 1; transform: none; }
  .lookbook-item-overlay { opacity: 1; }

  /* SLAGORD */
  .slogan { padding: 72px 24px; }
  .slogan-klode { width: 72px; margin-bottom: 28px; }

  /* CAROUSEL */
  .carousel-section { padding: 48px 24px; }
  .carousel-item { flex: 0 0 220px; }

  /* PRESS */
  .press { padding: 60px 24px; }
  .press-quotes { grid-template-columns: 1fr; gap: 24px; }

  /* NEWSLETTER */
  .newsletter { padding: 60px 24px; }
  .newsletter-form { flex-direction: column; }
  .newsletter-form input { width: 100%; }
  .newsletter-form button { width: 100%; padding: 14px; }

  /* FOOTER */
  /* To kolonner framfor fire: fire ville gitt lenker på én bokstavs bredde.
     Merkeblokka tar hele raden over. min-height slås av fordi foten uansett
     blir høyere enn --footer-h her, og .static-page over har allerede slått
     av regnestykket som brukte tallet. */
  .footer-bar { min-height: 0; }
  .footer-inner { grid-template-columns: 1fr 1fr; gap: 36px 24px; padding: 44px 24px 36px; }
  .footer-merke { grid-column: 1 / -1; }
  .footer-klode { width: 72px; }
  /* To linjer under hverandre framfor to i hver sin ende: paa en smal skjerm
     ville space-between presset dem mot hver sin kant med et hull imellom. */
  .footer-bunn { flex-direction: column; align-items: center; text-align: center; gap: 8px; padding: 18px 24px; }
  /* Stablet under copyrighten ble den en ekstra linje uten innhold (Morten). */
  .footer-copy--designet { display: none; }
  /* Foten stables og blir over dobbelt så høy her, og skjermen er kort. Å
     reservere en full skjermhøyde til innholdet ville bare gitt tom krem å
     rulle gjennom. */
  .static-page { min-height: 0; }

  /* MENU */
  .menu-nav { padding: 16px 24px calc(env(safe-area-inset-bottom, 0px) + 24px); }
  .menu-link { font-size: var(--t-h3); padding: 10px 0; }
  .menu-drawer-header { padding: 16px 24px; }

  /* SEARCH */
  .search-inner { padding: 80px 24px 32px; }
  .search-wrap input { font-size: var(--t-h4); }
  .search-close { top: 24px; right: 24px; }

  /* CART DRAWER */
  .cart-drawer { width: 100vw; }
  .cart-drawer-header { padding: 20px; }
  .cart-drawer-items { padding: 16px 20px; }
  /* Produktsida har viewport-fit=cover, og der ville knappen ellers havnet
     under hjemlinja. Andre steder er env() 0. */
  .cart-drawer-footer { padding: 16px 20px calc(32px + env(safe-area-inset-bottom, 0px)); }

  /* KOLLEKSJON */
  .kolleksjon-hero { padding: 100px 24px 40px; }
  .kolleksjon-wrap { grid-template-columns: 1fr; padding: 24px; gap: 24px; }
  .kolleksjon-grid { grid-template-columns: repeat(2, 1fr); gap: 16px 10px; }

  /* PRODUKTSIDE */
  .product-wrap { grid-template-columns: 1fr; padding: 100px 24px 48px; gap: 32px; }
  .gallery { position: static; }
  .gallery-thumbs { gap: 8px; }
  .thumb { width: 64px; height: 64px; }
  .size-grid { gap: 6px; }
  /* min-width, ikke width: knappen har to linjer, og «XXS/XS» under tallet
     trenger mer enn 46 px. Fast bredde klippet oversettelsen på telefon. */
  .size-btn { min-width: 46px; width: auto; height: 46px; padding: 0 8px; }
  .related-grid { grid-template-columns: repeat(2, 1fr); }

  /* CHECKOUT — mobilreglene står i checkout.css, ikke her.
     De sto her fram til 21. september og virket ikke: checkout.css lastes
     etter main.css og treffer `.checkout-wrap` med samme spesifisitet, og en
     @media-blokk veier ikke tyngre enn en uten. Kassen sto derfor i to
     kolonner på telefon, med skjemaet klippet bort av body{overflow-x:hidden}.
     Nye mobilregler for kassen hører hjemme nederst i checkout.css. */
}

@media (max-width: 768px) {
  .kolleksjon-wrap {
    grid-template-columns: 1fr;
    padding: 16px;
  }
  .kolleksjon-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
  }
  .kolleksjon-hero {
    padding: 80px 16px 24px;
  }
}

/* STATISKE SIDER */
/* Innholdssidene får en minstehøyde. Korte sider — innlogging, avmeldt,
   kvitteringene — fylte ellers bare toppen av skjermen, og den svarte fotlinja
   la seg midt oppe på siden med krem under. Da leser den som en strek i
   innholdet framfor som bunnen av siden.

   `dvh` og ikke `vh`: på mobil krymper viewporten når adresselinja glir inn,
   og `vh` regner med den utslåtte høyden — da blir minstehøyden litt for stor
   og siden får en rullefelt den ikke trenger.

   Bare fotens høyde trekkes fra. Toppmenyen er `position: fixed` og tar ingen
   plass i flyten — den er allerede dekket av sidens padding-top. */
.static-page {
  max-width: 800px; margin: 0 auto; padding: 120px 48px 80px;
  min-height: calc(100dvh - var(--footer-h));
}
.static-eyebrow { font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase; color: var(--rod); margin-bottom: 12px; }
.static-title { font-family: 'Cormorant Garamond', serif; font-size: var(--d-1); font-weight: 300; margin-bottom: 48px; }
.static-body h2 { font-family: 'Cormorant Garamond', serif; font-size: var(--t-h4); font-weight: 300; margin: 36px 0 12px; color: var(--ink); }
.static-body p { font-size: var(--t-liten); line-height: 1.9; color: var(--soft); margin-bottom: 16px; font-weight: 300; }
.static-body ul { padding-left: 20px; margin-bottom: 16px; }
.static-body li { font-size: var(--t-liten); line-height: 1.9; color: var(--soft); font-weight: 300; margin-bottom: 4px; }
.static-body a { color: var(--ink); }
/* «Endre valget ditt» i personvernerklæringen åpner banneret og går ingen
   steder, så det er en knapp. Den skal likevel se ut som lenkene rundt. */
.static-lenkeknapp {
  background: none; border: 0; padding: 0; font: inherit; color: var(--ink);
  text-decoration: underline; cursor: pointer;
}
/* Eneste handlingen på kontaktsida, så den får serifen og egen luft. */
.kontakt-epost { margin: 28px 0 8px; }
.kontakt-epost a {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-3); font-weight: 300;
  color: var(--ink); text-decoration: none;
  border-bottom: 1px solid var(--hair); padding-bottom: 4px;
  transition: border-color .3s;
}
.kontakt-epost a:hover { border-bottom-color: var(--ink); }

@media (max-width: 768px) {
  .static-page { padding: 100px 24px 60px; }
}

.carousel-track-wrap::-webkit-scrollbar { display: none; }
.carousel-track-wrap { cursor: grab; }
.carousel-track-wrap:active { cursor: grabbing; }

/* STØRRELSESGUIDE */
.size-guide-intro {
  max-width: 600px; margin-bottom: 48px;
}
.size-guide-intro p {
  font-size: var(--t-liten); line-height: 1.9; color: var(--soft); font-weight: 300;
}
.size-guide-table-wrap {
  overflow-x: auto; margin-bottom: 64px;
}
.size-guide-table {
  width: 100%; border-collapse: collapse;
  font-size: var(--t-liten);
}
.size-guide-table th {
  font-size: var(--t-micro); letter-spacing: .25em; text-transform: uppercase;
  color: var(--soft); padding: 12px 20px; text-align: left;
  border-bottom: 2px solid var(--ink);
}
.size-guide-table td {
  padding: 16px 20px; border-bottom: 1px solid var(--hair);
  color: var(--soft); font-weight: 300;
}
.size-guide-table tr:hover td { background: #f7f4f0; }
/* Overskrift over en familietabell (api/storrelse.py, FAMILIETABELLER). */
.size-guide-familie {
  font-family: 'Cormorant Garamond', serif; font-size: var(--t-lead); font-weight: 300;
  margin: 0 0 14px;
}
/* Samme par som størrelsesknappen på produktsiden: tallet er navnet, og
   bokstavene står under som oversettelse. Guiden og knappen må se like ut —
   det er nettopp oppslaget mellom dem kunden gjør. */
.size-label {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-lead) !important; color: var(--ink) !important;
  font-weight: 400 !important;
}
.size-label .str-tall { display: block; line-height: 1.1; }
.size-label .str-bokstaver {
  display: block; font-family: 'Montserrat', sans-serif;
  font-size: var(--t-micro); letter-spacing: .18em; color: var(--soft);
  margin-top: 2px;
}

/* Leverandørens eget målskjema, limt inn som HTML fra PIM. Markupen er ikke
   vår, så stilen treffer den generisk: en <table> derfra skal se ut som husets
   egen uten at noen må redigere det som ble limt inn. */
.size-guide-eget { margin-bottom: 24px; overflow-x: auto; }
/* auto, ikke 100%: husets tabell har fire kolonner, leverandørens har gjerne
   sju. Presset ned i skuffbredden blir «Ermelengde» til fire linjer à ett
   tegn. La den bli så bred den trenger og rulle sidelengs i stedet — men
   min-width holder en smal tabell fra å krympe til en stripe. */
.size-guide-eget table {
  min-width: 100%; border-collapse: collapse; font-size: var(--t-liten);
}
/* Størrelsen må stå igjen mens resten ruller. Uten dette ruller kunden til
   «Ermelengde» og vet ikke lenger hvilken rad hen leser — som er hele
   spørsmålet et målskjema skal svare på. */
.size-guide-eget td:first-child,
.size-guide-eget th:first-child {
  position: sticky; left: 0; z-index: 1;
  background: var(--flate);
}
.size-guide-eget thead th {
  font-size: var(--t-micro); letter-spacing: .25em; text-transform: uppercase;
  color: var(--soft); padding: 12px 20px; text-align: left;
  border-bottom: 2px solid var(--ink); font-weight: 400;
}
.size-guide-eget td {
  padding: 16px 20px; border-bottom: 1px solid var(--hair);
  color: var(--soft); font-weight: 300;
}
/* Leverandørens skjema er transponert: første kolonne er navnet på et mål
   («Armlengde fra skulder og ned»), ikke en størrelse. Den skal derfor ikke ha
   størrelseslabelens serif — versal .6rem med .25em sperring gjorde den
   setningen tre linjer høy og uleselig. Vanlig tekst, men mørk, så den skiller
   seg fra tallene den navngir. */
.size-guide-eget tbody th {
  padding: 16px 20px; border-bottom: 1px solid var(--hair);
  text-align: left; font-weight: 400; color: var(--ink);
  font-size: var(--t-fin); letter-spacing: .02em;
  max-width: 180px;
}
/* Tallene sentreres under sin egen størrelse. Venstrestilt under en kolonne
   som bare heter «2» henger de i løse lufta. */
.size-guide-eget thead th + th,
.size-guide-eget tbody td { text-align: center; }
/* Et skjema uten <th> i kroppen — en leverandør som limer inn noe annet enn
   dette verktøyet lager — beholder den gamle behandlingen. */
.size-guide-eget tbody tr > td:first-child {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-lead); color: var(--ink); text-align: left;
}
/* Kantfading som hint om at tabellen kan rulles — samme idiom som
   miniatyrstripa på produktsiden, satt av `kantfading()` i main.js. */
.size-guide-eget.fade-h {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent);
          mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent);
}
.size-guide-eget.fade-v {
  -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent);
          mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent);
}
.size-guide-eget.fade-vh {
  -webkit-mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent);
          mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent);
}
.size-guide-kilde {
  font-size: var(--t-fin); color: var(--soft); font-weight: 300;
  margin-bottom: 32px;
}

.size-guide-how { margin-bottom: 48px; }
.size-guide-how h2 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h3); font-weight: 300; margin-bottom: 32px;
}
.measure-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 32px;
}
.measure-icon {
  font-size: var(--t-h4); color: var(--rod); margin-bottom: 12px;
}
.measure-item h3 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-lead); font-weight: 300; margin-bottom: 8px;
}
.measure-item p {
  font-size: var(--t-liten); line-height: 1.8; color: var(--soft); font-weight: 300;
}

.size-guide-note {
  background: #f7f4f0; padding: 24px 32px;
  border-left: 3px solid var(--rod);
}
.size-guide-note p {
  font-size: var(--t-liten); color: var(--soft); font-weight: 300;
}
.size-guide-note a { color: var(--ink); }

@media (max-width: 768px) {
  .measure-grid { grid-template-columns: 1fr; gap: 24px; }
  .size-guide-table th, .size-guide-table td { padding: 12px; }
}

@media (max-width: 768px) {
  .size-guide-table th, .size-guide-table td { 
    padding: 10px 8px; font-size: var(--t-fin); 
  }
  .size-label { font-size: var(--t-brod) !important; }
  /* Skjul hofte på mobil */
  .size-guide-table th:last-child,
  .size-guide-table td:last-child { display: none; }
  /* Leverandørens tabell kan ikke få en kolonne skjult — vi vet ikke hvilken
     som er minst viktig i et ark vi ikke har skrevet. Den strammes inn og
     rulles i stedet. */
  .size-guide-eget th, .size-guide-eget td { padding: 10px 12px; font-size: var(--t-fin); }
  .size-guide-eget tbody tr > td:first-child { font-size: var(--t-brod); }
  /* Radetiketten er sticky og spiser bredde. 120 px holder «Armlengde (fra
     skulder og ned)» på tre linjer og lar tre størrelseskolonner få plass. */
  .size-guide-eget tbody th { max-width: 120px; font-size: var(--t-fin); padding: 10px 12px; }
}

/* OM OSS */
/* Helten fylte hele skjermen for én linje tekst, med et jevnt slør over
   fotografiet. Tre rettelser:

   Høyden er 64vh, ikke 100. En full skjerm til én setning leser som en
   plakat, ikke som en side man skal lese videre på — og bunnen av bildet
   skal så vidt være synlig, så man skjønner at det finnes mer under.

   Sløret er en gradient framfor en flate over alt. Et jevnt slør demper
   nøyaktig det som gjør bildet verdt å bruke; gradienten demper bare der
   teksten faktisk står.

   Og sløret er hvitt, ikke svart. Bildet er et studiobilde på hvit bakgrunn
   (ph_c6221559), og et mørkt slør over en hvit dress gjør den grå. Nå ligger
   det hvite til venstre der teksten står, og plagget til høyre står urørt.
   Det er også det tallene under ba om: den grønne kursiven målte 1.21:1 på
   bildet under det gamle sløret og måler 4.49:1 her. */
.om-hero {
  background: var(--flate); padding: 150px 56px 90px;
  display: flex; align-items: center;
  min-height: min(64vh, 620px);
  position: relative; background-size: cover !important; background-position: center !important;
}
/* Stoppene er regnet mot tekstbredden, ikke valgt på øyemål. Tittelen er
   maks 560 px og ingressen 460, begge fra 56 px inn: på 1440 px slutter
   teksten 43 % inn, og modellen i ph_c6221559 står fra 29 % til 64 %.
   Sløret er derfor tett ut til 26 % og ute av veien ved 56 % — plagget står
   nesten urørt, og de 29–43 % der teksten ligger over modellen, ligger den
   over en hvit erme. */
.om-hero-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to right, rgba(255,255,255,.96) 0%, rgba(255,255,255,.88) 26%, rgba(255,255,255,0) 56%);
}
/* Mellom mobil og 1200 px tar den samme tekstbredden en større del av
   skjermen — på 1024 px slutter tittelen 60 % inn, altså midt på modellen.
   Her må sløret nå lenger, og plagget tåle å bli litt lysere. */
@media (min-width: 769px) and (max-width: 1199px) {
  .om-hero-overlay {
    background: linear-gradient(to right, rgba(255,255,255,.95) 0%, rgba(255,255,255,.9) 45%, rgba(255,255,255,0) 82%);
  }
}
/* Samme tekstspalte som resten av siden. Heroen var fullbredde: teksten lå
   klistret til skjermkanten mens intro, verdier og løfte er begrenset til
   1280 og sentrert. På 1440 merkes det ikke, for da ligger spaltekanten
   nesten på skjermkanten uansett. På Mortens skjerm 16. september startet
   «Born in History.» på x=14 og «Historie som utgangspunkt.» rett under på
   x=505 — samme side, to forskjellige venstremarger.
   Bredden 1280 er den samme som .om-intro-inner, som er den bredeste
   spalta på siden; velger man 1100 som verdiene, faller heroen innenfor
   intro i stedet for å flukte med den. */
.om-hero-inner {
  width: 100%; max-width: 1280px; margin: 0 auto;
  position: relative; z-index: 1;
}
.om-title {
  font-family: 'Cormorant Garamond', serif;
  /* Var clamp(3rem, 6vw, 5.5rem) — 88 px på en laptop, altså plakatstørrelse
     for en setning som skal leses. */
  font-size: var(--d-1);
  font-weight: 300; color: var(--ink); line-height: 1.15; margin-bottom: 32px;
  max-width: 560px;
}
/* Grønn etter Mortens valg 11. september. Den står på hvitt nå og måler
   4.49:1 — over AA for denne størrelsen. Flyttes teksten tilbake oppå et
   bilde, faller den til 1.21:1; se sløret over. */
.om-title em { font-style: italic; color: var(--gronn); }
/* Ingressen var en etikettlinje på 14 px. Den bærer nå fire–fem linjer
   brødtekst, og får samme mål som brødteksten ellers på siden — men i blekk
   og ikke i --soft. Målt i mockupen: ingressen her ligger på 10 av 255, mens
   brødteksten i seksjonen under ligger på 118, altså --soft. Heroen er det
   første man leser, og skal være det mørkeste. */
.om-ingress {
  font-size: var(--t-liten); line-height: 1.9; color: var(--ink);
  font-weight: 300; max-width: 460px;
}

/* Vår historie, etter mockupen 11. september: overskriften i displaystørrelse
   og bredere enn brødteksten, sitatet toppjustert mot etiketten. Rammen er
   1280 og ikke 1100, ellers får ikke overskriften plass på én linje i en
   halv kolonne. */
.om-intro { padding: 100px 56px; background: var(--flate); }
.om-intro-inner {
  max-width: 1280px; margin: 0 auto;
  display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: start;
}
/* Etiketten var rød tekst. Nå er den blekk med den røde nåla foran, som
   ellers på siden — rødt er merket, ikke teksten. */
.om-label {
  display: flex; align-items: center; gap: 16px;
  font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase;
  color: var(--ink); margin-bottom: 20px;
}
.om-label .pin { height: 11px; width: auto; flex: none; }
.om-intro-text h2 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-2); font-weight: 300; line-height: 1.15;
  color: var(--ink); margin-bottom: 32px;
}
.om-intro-text p {
  font-size: var(--t-liten); line-height: 1.9; color: var(--soft);
  font-weight: 300; margin-bottom: 24px; max-width: 460px;
}
/* Streken står på figuren og ikke på sitatet, så den går ned forbi
   signaturen slik mockupen viser. */
.om-intro-quote { border-left: 3px solid var(--rod); padding-left: 40px; }
.om-intro-quote blockquote {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h2); font-weight: 300;
  line-height: 1.6; color: var(--ink); max-width: 14em;
}
.om-intro-quote figcaption {
  margin-top: 24px;
  font-size: var(--t-micro); letter-spacing: .4em; text-transform: uppercase;
  color: var(--soft);
}

/* Delt i to framfor tekst oppå foto. Bildet her er et lyst, lavkontrast
   detaljbilde; sløret som skulle gjøre teksten lesbar var nettopp det som
   ødela bildet. Nå får begge sin egen halvdel. */
.om-filosofi {
  display: grid; grid-template-columns: 1fr 1fr; align-items: stretch;
  background: var(--gronn-dyp); min-height: 520px;
}
.om-filosofi-bilde {
  position: relative; overflow: hidden;
  /* Minstehøyde for tilfellet der teksten er kort — uten den kollapser
     bildekolonnen til tekstens høyde og detaljen blir en stripe. */
  min-height: 340px;
}
.om-filosofi-bilde img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; display: block;
}
.om-filosofi-tekst { display: flex; align-items: center; padding: 80px 56px; }
.om-filosofi-inner { max-width: 460px; }
/* Flategrønn fra mockupen 11. september; var nesten svart. Etiketten på .6
   gir 5.15:1 mot grønt — over AA også for 10px versaler, og tydelig dempet
   mot overskriften.
   Nåla sto før bare på lys flate. Mockupen 15. september setter den på de
   grønne flatene også. Den måler 2.19:1 mot flategrønt og ville strøket som
   tekst, men den er ikke tekst: den er et 11 px merke ved siden av etiketten,
   og etiketten leses like godt uten den. */
.om-filosofi .om-label { color: rgba(255,255,255,.6); }
.om-filosofi h2 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-2);
  font-weight: 300; color: #fff; line-height: 1.25; margin-bottom: 24px;
}
/* .78 som brødteksten i forsidens intro på samme flate: 7.53:1. .68 som sto
   her ga 8.99:1 mot nesten svart, men bare 6.13:1 mot grønt. */
.om-filosofi p {
  font-size: var(--t-liten); line-height: 1.9; color: rgba(255,255,255,.78); font-weight: 300;
}

.om-verdier { padding: 100px 56px; background: var(--flate); }
.om-verdier-inner {
  max-width: 1100px; margin: 0 auto;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 48px;
}
/* Streken var blekk. Grønn er merkets aksentfarge, og tre svarte streker over
   tre svarte overskrifter ga seksjonen mer vekt enn den skal ha — den er en
   fotnote til filosofien over, ikke et kapittel. Målt i mockupen: 63,135,52,
   altså --gronn gjennom en 2 px kantutjevnet strek. */
.om-verdi { border-top: 2px solid var(--gronn); padding-top: 32px; }
.om-verdi h3 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--t-h4); font-weight: 300; margin-bottom: 16px;
}
.om-verdi p {
  font-size: var(--t-liten); line-height: 1.9; color: var(--soft); font-weight: 300;
}

/* Flategrønn, som filosofien over; var nesten svart. Dempingen var for hard
   allerede der: etiketten på .3 ga 2.59:1 og ville fått 2.41:1 mot grønt,
   brødteksten på .5 ville falt fra 5.33:1 til 4.07:1. Samme trinn som
   filosofien nå: .6 for etiketten (5.15:1) og .78 for brødteksten (7.53:1). */
.om-løfte {
  background: var(--gronn-dyp); padding: 120px 56px; text-align: center;
}
.om-løfte-inner { max-width: 600px; margin: 0 auto; }
/* Uten flex midtstilles ikke etiketten med resten — .om-label er flex nå. */
.om-løfte .om-label { color: rgba(255,255,255,.6); justify-content: center; }
.om-løfte h2 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-1);
  font-weight: 300; color: #fff; line-height: 1.2; margin-bottom: 24px;
}
.om-løfte p {
  font-size: var(--t-liten); line-height: 1.9; color: rgba(255,255,255,.78);
  font-weight: 300; margin-bottom: 40px;
}
/* De to slagordene som én sperret linje mellom brødteksten og knappen. Samme
   .78 som brødteksten over (7.53:1) — målt i mockupen til 208 av 255 mot en
   grønn flate på 34, altså nettopp .78 og ikke etikettenes .6. */
.om-løfte .om-slagord {
  font-size: var(--t-micro); letter-spacing: .3em; text-transform: uppercase;
  line-height: 2.2; margin-bottom: 48px;
}
/* Kanten er det som gjør lenka til en knapp, og må derfor ha 3:1. .3 ga
   2.41:1 mot grønt; .6 gir 5.15:1, og hover til rent hvitt skiller seg fortsatt. */
.om-cta {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 16px 40px; border: 1px solid rgba(255,255,255,.6);
  color: #fff; font-size: var(--t-fin); letter-spacing: .3em;
  text-transform: uppercase; text-decoration: none;
  transition: border-color .3s, background .3s;
}
.om-cta:hover { border-color: #fff; background: rgba(255,255,255,.1); }

/* Menneskene bak. Speilvendt av filosofien: teksten til venstre og bildet til
   høyre, så de to delte seksjonene ikke leses som samme grep to ganger.
   Teksten er høyrejustert mot midten slik at spalten møter bildet, som i
   filosofien der teksten starter ved midten. */
/* Høyden følger bredden i stedet for å stå fast på 560 px. Bildet er
   `contain`, så seksjonens høyde ER bildets høyde, og 560 px ga en modell på
   drøyt 400 px midt i en 720 px bred halvdel — hun ble en liten figur som
   fløt. Målt i mockupen: seksjonen er 882 px høy på en skjerm på 1686, altså
   52 % av bredden, og modellen fyller høyden nesten helt.
   Taket på 760 px er der for brede skjermer: uten det blir seksjonen 1000 px
   høy på en 1920-skjerm, og da er det lufta rundt henne som vokser. */
/* Begrenset til samme 1280 som intro og heroen, og ikke fullbredde som
   filosofien. Filosofien tåler fullbredde fordi bildet der er `cover` og
   fyller halvdelen sin helt ut. Her er bildet `contain`, og på en bred skjerm
   ble det et tomrom mellom teksten ytterst til venstre og modellen ytterst
   til høyre — to ting strandet i hver sin ende av en veldig bred flate.
   Taket faller fra 760 til 680 med bredden: halvdelen er nå maks 640 px, og
   en høyere seksjon ville bare lagt luft over og under modellen. */
.om-grunnleggere {
  display: grid; grid-template-columns: 1fr 1fr; align-items: stretch;
  background: var(--flate); min-height: min(52vw, 680px);
  max-width: 1280px; margin: 0 auto;
}
/* Tekstblokka er midtstilt i sin halvdel, slik bildet er midtstilt i sin.
   Mortens valg 16. september, etter at både høyrejustert (mot bildet) og
   flust venstre var prøvd og forkastet.

   IKKE utled dette fra mockupen på nytt. Skjermbildene fra 15. september er
   2x av et vindu på 843 px — brødtekstens linjeavstand måler 50–52 px der,
   mens vår er 14 x 1.9 = 26.6. Tekstspalta er altså 340 px i et vindu på
   843, og den står flust venstre der utelukkende fordi det ikke er plass til
   annet. Mockupen sier ingenting om hvor spalta hører hjemme på 1440.

   Teksten i blokka er fortsatt venstrestilt — det er blokka som sentreres,
   ikke linjene. */
.om-grunnleggere-tekst {
  display: flex; align-items: center; justify-content: center;
  padding: 80px 56px;
}
/* Samme mål som brødteksten ellers på siden. */
.om-grunnleggere-inner { max-width: 460px; }
.om-grunnleggere h2 {
  font-family: 'Cormorant Garamond', serif;
  font-size: var(--d-2); font-weight: 300; line-height: 1.25;
  color: var(--ink); margin-bottom: 24px;
}
.om-grunnleggere p {
  font-size: var(--t-liten); line-height: 1.9; color: var(--soft); font-weight: 300;
}
.om-grunnleggere p + p { margin-top: 24px; }
.om-grunnleggere-bilde { position: relative; overflow: hidden; min-height: 340px; }
/* `contain` og ikke `cover` som i filosofien. Motivet er et studiobilde av en
   modell på huk i full figur, og `cover` i en nesten kvadratisk halvdel skar
   hodet og beina av henne. Lufta contain legger igjen på sidene er usynlig:
   bakgrunnen i bildet og flata bak er den samme hvite. Bytter Morten til et
   liggende bilde, blir det luft over og under i stedet — fortsatt hvitt,
   fortsatt helt.
   Prisen for contain er at DØD LUFT I FILA blir død luft på siden. Originalen
   (PIM-fila 361a18965527a12c) har 22 % tomt over hodet, og de 22 prosentene
   ble 22 prosent mindre modell her. om_grunnleggere.webp er derfor beskåret
   til 1921x2097 (0.916), som er nær seksjonens eget sideforhold — laster
   Morten opp et nytt bilde, er det verdt å beskjære det likt. */
.om-grunnleggere-bilde img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: contain; display: block;
}

@media (max-width: 768px) {
  .om-hero { padding: 130px 24px 64px; min-height: min(56vh, 480px); }
  /* Sløret går fra venstre på bred skjerm fordi teksten bare tar venstre
     halvdel. Her tar den hele bredden, og et slør som slipper høyre side fri
     ville lagt de siste ordene i hver linje rett på plagget. Jevnt og litt
     tynnere i bunnen: bildet er fortsatt synlig som tekstur, teksten er
     fortsatt blekk på nesten hvitt. */
  .om-hero-overlay {
    background: linear-gradient(to bottom, rgba(255,255,255,.95) 0%, rgba(255,255,255,.92) 70%, rgba(255,255,255,.84) 100%);
  }
  .om-intro { padding: 60px 24px; }
  .om-intro-inner { grid-template-columns: 1fr; gap: 40px; }
  /* Stablet: bildet over, teksten under. Halv skjermbredde til hver ville
     gitt to spalter som begge er for smale til å lese eller se. */
  .om-filosofi { grid-template-columns: 1fr; min-height: 0; }
  .om-filosofi-bilde { min-height: 260px; }
  .om-filosofi-tekst { padding: 56px 24px; }
  .om-verdier { padding: 60px 24px; }
  .om-verdier-inner { grid-template-columns: 1fr; gap: 32px; }
  .om-løfte { padding: 80px 24px; }
  /* Stablet som filosofien. Teksten ligger først i malen og blir stående
     først her — `order: 2` på bildet sto her en stund og gjorde ingenting,
     for begge hadde order 0 fra før og rekkefølgen kom fra malen uansett.
     Minstehøyden på 420 er bildets, ikke seksjonens: `contain` gir den ingen
     egen høyde, og uten den kollapser den til null når teksten er kort. */
  .om-grunnleggere { grid-template-columns: 1fr; min-height: 0; }
  .om-grunnleggere-tekst { padding: 56px 24px; }
  .om-grunnleggere-bilde { min-height: 420px; }
}


/* Ordrekvittering. Ligger i .static-body, som ellers ikke har tabeller. */
.ordre-tabell { width: 100%; border-collapse: collapse; margin: 24px 0 8px; }
.ordre-tabell td {
  font-size: var(--t-liten); font-weight: 300; color: var(--soft);
  padding: 10px 0; border-bottom: 1px solid var(--hair);
}
.ordre-tabell tfoot td {
  border-bottom: none; border-top: 1px solid var(--ink);
  color: var(--ink); padding-top: 14px;
}
.ordre-tabell td.tall { text-align: right; white-space: nowrap; }
/* «Herav mva» er en opplysning, ikke en post som summeres. Dempet, og uten
   den øvre streken tfoot ellers gir alle celler — den streken hører til
   «Totalt» og skal bli stående der. */
.ordre-tabell tfoot tr.mva-linje td {
  border-top: none; padding-top: 4px;
  font-size: var(--t-fin); color: var(--soft); opacity: .8;
}
.ordre-hint { font-size: var(--t-fin) !important; color: var(--soft); opacity: .8; }
/* Varelinja: et lite bilde ved navnet, så kunden kjenner igjen plagget uten å
   lese. contain og ikke cover — produktbildene er frilagte plagg med luft. */
.ordre-vare { display: flex; align-items: center; gap: 14px; }
.ordre-vare img { width: 56px; height: 75px; object-fit: contain; flex: none; }
.ordre-kommer { display: block; font-size: var(--t-fin); color: var(--gronn-dyp); margin-top: 2px; }
.ordre-steg { padding-left: 20px; margin-bottom: 16px; }
/* Kontaktboksen skal skille seg ut fra resten av kvitteringen: det er den
   kunden leter etter når noe er uklart. */
.ordre-boks { border: 1px solid var(--hair); padding: 4px 24px 8px; margin: 36px 0 24px; }
.ordre-boks h2 { margin-top: 20px; }

/* Angrerettskjemaet. Feltene er streker og ikke input-elementer med vilje:
   skjemaet skal skrives ut eller gjengis i en e-post, ikke sendes fra
   nettsida. Et skjema som ser ut som det kan sendes inn, men ikke kan det,
   er verre enn ingen felter — kunden fyller det ut og trykker ingenting. */
.skjema-blokk {
  border: 1px solid var(--hair); padding: 28px 24px; margin: 24px 0;
  background: #fff;
}
.skjema-ledd { margin: 0 0 20px; }
.skjema-ledd:last-child { margin-bottom: 0; }
.skjema-strek {
  display: block; border-bottom: 1px solid var(--hair);
  height: 26px; margin-top: 6px;
}
/* Tekst bare for skjermlesere. Ikke `display: none` — det ville skjult den
   for dem ogsaa. Klippet ned til en piksel utenfor synsfeltet er den eneste
   maaten som holder den i tilgjengelighetstreet. */
.kun-skjermleser {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* Utskriftsknappen. Diskret med vilje — den er en hjelp, ikke sidas
   hovedhandling, og skal ikke konkurrere med selve skjemaet. */
.btn-skriv-ut {
  font-family: 'Montserrat', sans-serif; font-size: var(--t-micro);
  letter-spacing: .2em; text-transform: uppercase;
  background: none; color: var(--ink);
  border: 1px solid var(--hair); padding: 12px 20px;
  cursor: pointer; transition: border-color .2s;
}
.btn-skriv-ut:hover { border-color: var(--ink); }

.static-note {
  font-size: var(--t-fin) !important; color: var(--soft); opacity: .8;
  border-top: 1px solid var(--hair); padding-top: 16px; margin-top: 32px;
}

.checkout-feil {
  font-size: var(--t-liten); color: #b3261e; line-height: 1.6;
  background: #fdf0ee; border-left: 3px solid #b3261e;
  padding: 12px 14px; margin-bottom: 16px;
}

/* ---------- UTSKRIFT ----------
   Angrerettskjemaet er det eneste her som er ment aa forlate skjermen. Uten
   disse reglene tar en utskrift med meny, bunntekst, handlekurvskuffen og den
   egendefinerte musepekeren — og skjemaet havner klemt inn paa side to.

   Reglene er skrevet generelt og ikke bare for den ene sida, for enhver side
   kan bli skrevet ut av en kunde som vil ha kvitteringen sin paa papir. */
@media print {
  /* Alt som er navigasjon, handling eller pynt. Skuffene ligger utenfor
     synsfeltet paa skjerm, men `position: fixed` overlever ikke til papir —
     de ville dukket opp som tomme blokker. */
  nav, footer,
  .cart-overlay, .cart-drawer,
  .menu-overlay, .menu-drawer,
  .skriv-ut { display: none !important; }

  /* Body-en baerer farger vi ikke vil betale blekk for. */
  body {
    background: #fff !important; color: #000 !important;
  }

  .static-page, .static-page-inner {
    max-width: none !important; padding: 0 !important; margin: 0 !important;
  }

  /* Feltene er streker, og en strek er en `border` — ikke en bakgrunn.
     Nettlesere sloer av bakgrunnsgrafikk ved utskrift som standard, saa en
     bakgrunnsbasert strek ville forsvunnet fra papiret uten at noen merket
     det for skjemaet kom tomt tilbake. */
  .skjema-blokk { border: 1px solid #000 !important; break-inside: avoid; }
  .skjema-strek { border-bottom: 1px solid #000 !important; }

  /* Lenker mister meningen paa papir. Adressen skrives ut etter teksten, saa
     «send til hei@...» fortsatt er lesbart naar arket ligger paa et bord. */
  .static-body a::after { content: " (" attr(href) ")"; font-size: .85em; }
  .static-body a[href^="mailto:"]::after { content: ""; }
  .static-body a { text-decoration: underline; color: #000 !important; }

  h1, h2 { break-after: avoid; }
  @page { margin: 18mm; }
}

/* Svaret under påmeldingsskjemaet. Skjemaet bekrefter ingenting før serveren
   har svart — det sa før «Takk!» og kastet adressen. */
.newsletter-svar { font-size: var(--t-fin); margin-top: 12px; line-height: 1.7; opacity: .9; }
.newsletter-svar:empty { display: none; }
.newsletter-svar--feil { color: #4d0d06; }   /* 9.84:1 mot --ice */
/* Velkomstkoden på bekreftelsessiden. Vises stort nok til å leses av skjermen
   og skrives av for hånd. */
.rabattkode-vist {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--t-h4); letter-spacing: .1em; background: #f0ece6;
  padding: 16px 20px; text-align: center; margin: 18px 0;
}

/* Kundeinnlogging og ordrelista. Ingen konto å opprette — se api/kunde.py. */
.konto-skjema { margin-top: 24px; }
.konto-merkelapp {
  display: block; font-size: var(--t-micro); letter-spacing: .2em;
  text-transform: uppercase; color: var(--soft); margin-bottom: 8px;
}
.konto-skjema input {
  width: 100%; padding: 13px 15px; border: 1px solid #e5e0d8;
  background: #fff; font-family: inherit; font-size: var(--t-brod);
}
.konto-kode {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--t-h4); letter-spacing: .4em; text-align: center;
}
.konto-skjema button {
  margin-top: 14px; width: 100%; padding: 14px; background: #111; color: #fff;
  border: none; font-family: inherit; font-size: var(--t-micro); letter-spacing: .2em;
  text-transform: uppercase; cursor: pointer;
}
.konto-skjema button:hover { background: #333; }
.konto-feil { color: #c0392b; font-size: var(--t-liten); margin-top: 16px; }
.ordreliste { width: 100%; border-collapse: collapse; margin-top: 24px; }
.ordreliste th {
  font-size: var(--t-micro); letter-spacing: .2em; text-transform: uppercase;
  color: var(--soft); text-align: left; padding: 10px 8px;
  border-bottom: 1px solid #e5e0d8; font-weight: 400;
}
.ordreliste td {
  padding: 14px 8px; border-bottom: 1px solid #f0ece6; font-size: var(--t-liten);
}
.ordreliste .tall { text-align: right; font-variant-numeric: tabular-nums; }

.konto-hint { font-size: var(--t-fin); line-height: 1.8; color: var(--soft); margin-top: 20px; }

/* Trekningen i nyhetsbrevblokka. Står under skjemaet, ikke over: premien er
   grunnen til å melde seg på, men det er adressen som er handlingen. */
.kampanje {
  margin-top: 22px; padding-top: 20px;
  border-top: 1px solid rgba(0,0,0,.3);
}
.kampanje-premie {
  font-family: 'Cormorant Garamond', serif; font-size: var(--t-lead);
  font-weight: 300; margin-bottom: 8px;
}
.kampanje-vilkar { font-size: var(--t-fin); line-height: 1.8; opacity: .78; }   /* 7.23:1 */
.kampanje-vilkar a { color: inherit; text-decoration: underline; }

/* Landingssida for trekningen. Egen adresse fordi en blokk på forsiden ikke kan
   lenkes til — og en konkurranse man ikke kan lime inn i en bio kan ikke deles. */
.trekning-steg { padding-left: 20px; margin: 24px 0 32px; }
.trekning-steg li {
  font-size: var(--t-liten); line-height: 1.9; color: var(--soft);
  font-weight: 300; margin-bottom: 10px;
}
.trekning-skjema { display: flex; gap: 10px; margin-top: 8px; }
.trekning-skjema input {
  flex: 1; min-width: 0; padding: 14px 16px; border: 1px solid var(--hair);
  background: #fff; font-family: inherit; font-size: var(--t-brod);
}
.trekning-skjema button {
  padding: 14px 26px; background: var(--ink); color: #fff; border: none;
  font-family: inherit; font-size: var(--t-micro); letter-spacing: .2em;
  text-transform: uppercase; cursor: pointer; white-space: nowrap;
}
.trekning-skjema button:hover { background: #333; }
.trekning-finstilt {
  font-size: var(--t-fin); line-height: 1.9; color: var(--soft); margin-top: 18px;
}
#trekningSvar { color: #2e7d32; }
#trekningSvar.newsletter-svar--feil { color: var(--rod); }
@media (max-width: 560px) {
  .trekning-skjema { flex-direction: column; }
}

/* Enslige ord på siste linje.

   `balance` fordeler ordene jevnt over linjene i en overskrift, så «Kompromissløs
   kvalitet» ikke blir «Kompromissløs» med «kvalitet» alene under. Nettleseren
   begrenser den til noen få linjer, som er nettopp overskrifter.

   `pretty` gjør det motsatte for brødtekst: den lar linjene være som de er, men
   nekter å etterlate ett ord alene på siste linje. Riktig verktøy for lengre
   avsnitt, der `balance` ville gjort alle linjene kortere.

   Slagordet på forsiden er en overskrift i alt unntatt tagg: 36 px på en
   342 px bred mobil bryter hver halvdel over to linjer, og uten `balance` kan
   «world» eller «stronger» bli stående alene. `<br>` mellom halvdelene er et
   tvunget brudd, så hver halvdel balanseres for seg.

   Nettlesere uten støtte ignorerer begge og setter som før — ingen fallback
   trengs. */
h1, h2, h3, .om-title, .static-title, .kampanje-premie,
.slogan-tekst, .om-intro-quote figcaption { text-wrap: balance; }
.om-verdi p, .om-intro-text p, .om-filosofi p, .om-løfte p,
.static-body p, .trekning-steg li, .om-ingress, .om-grunnleggere p,
.om-intro-quote blockquote { text-wrap: pretty; }
