/* Kritisk geometri: samma kvadratiska bildyta före bilder och senare temastilar. */
.PT_Wrapper .PT_Bildruta .artcell-slider {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
}
.PT_Wrapper .PT_Bildruta .artcell-slider > .img-slider {
  display: flex;
  width: 100%;
  height: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
}
.PT_Wrapper .PT_Bildruta .artcell-slider > .img-slider > .img-wrapper {
  position: relative;
  flex: 0 0 100%;
  width: 100%;
  min-width: 100%;
  max-width: 100%;
  height: 100%;
  padding-bottom: 0 !important;
  scroll-snap-align: start;
}
.PT_Wrapper .PT_Bildruta .artcell-slider > .img-slider > .img-wrapper > img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

/* Clip only the scroll viewport: fractional iOS slide edges must not reveal the next photo.
   Decals and navigation remain outside this clipping layer. */
@media (max-width: 46.9rem) {
  .PT_Wrapper .PT_Bildruta .artcell-slider > .img-slider {
    clip-path: inset(0 1px 0 0 round 1em 0 1em 0);
  }
}

/* Kategorihuvudets läs-mer-yta (P1.3, 2026-09-24): samma höjd redan före main.css/artgrp.css.
   Utan dessa regler är kategoritexten fullt utfälld (~1 900 px på mobil, ~950 px på desktop) tills
   de sena stilmallarna kollapsar den, och hela produktlistan hoppar upp – uppmätt CLS ≈ 0,9 i
   replikan så snart .preloader inte längre täcker vyn. Värdena är kopierade från main.css och
   artgrp.css (samma selektorer, samma brytpunkter); de sena filerna vinner som förut i kaskaden. */
.readmoreWrap {
  position: relative;
  overflow: hidden;
}
.readmoreWrap[data-maxheight="250"] {
  max-height: 250px;
}
.readmoreWrap.open {
  max-height: 20000px;
}
@media (max-width: 46.9rem) {
  .ArtgrpMediaWrap.ArtgrpTextWrap .readmoreWrap[data-maxheight="250"] {
    max-height: 100vw;
  }
  .ArtgrpMediaWrap.ArtgrpTextWrap .readmoreWrap.open[data-maxheight="250"] {
    max-height: 20000px;
  }
}
@media (min-width: 46.91rem) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap[data-maxheight="250"] {
    max-height: 11.5vw;
  }
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap.open {
    max-height: 20000px !important;
  }
}
@media (min-width: 46.91rem) and (max-width: 75rem) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap[data-maxheight="250"] {
    max-height: 9vw !important;
  }
}
@media (min-width: 1360px) and (max-width: 1620px) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap[data-maxheight="250"] {
    max-height: 13vw;
  }
}
@media (min-width: 1620px) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap[data-maxheight="250"] {
    max-height: 250px;
  }
}

/* Runda 9: låg desktophöjd (Sebastian 2026-09-25, korr 2026-09-25, korr 2 2026-09-25). Önskemål:
   PDP:ns huvudbild ska krympa i höjd så att HELA bilden syns direkt under sticky-headern, utan att
   man behöver rulla – flytande i HELA desktopläget, aldrig mindre än en golvhöjd, rundade hörn kvar
   och videon anpassad på samma villkor, men HELT oförändrad så fort allt ryms (verifierat pixel för
   pixel vid 1440×900, se testutfall).

   Brytpunkt (bredd): samma nedre gräns som temats egen desktop-galleri (critical.css @media
   min-width:46.91rem – där .carousel .item byter till padding-bottom:100% i stället för mobilens
   0, miniatyrraden #thumbs blir synlig och object-fit blir cover). Under 46.91rem är det
   mobilgalleriet (annan höjdlogik, ej berört här).

   Ingen fast höjdbrytpunkt för SJÄLVA KRYMPNINGEN (korr 2): förra rundans platta max-height:760px
   är borttagen. I stället är "krymp bara vid behov" uttryckt som en formel: .item får en EXPLICIT
   höjd (aspect-ratio:1;height:auto – se motivering nedan) plus max-height:calc(100vh - avdrag)
   ovanpå. max-height är ett TAK, inte ett tvingat värde: är viewporten hög nog ryms hela kvadraten
   och taket gör ingenting; är viewporten låg klipper taket ner till min(kvadrat, 100vh-avdrag)
   automatiskt, oavsett bredd.

   Varför en explicit höjd behövs (mätt fram i denna korr): max-height klarar INTE av att klippa en
   höjd som kommer enbart från padding-bottom-tricket (height:auto + padding-bottom:%) – testat
   isolerat: ett block med padding-bottom:100% och max-height:200px renderas ändå på hela sin
   opåverkade höjd. Det räcker alltså inte att bara lägga max-height ovanpå temats orörda
   padding-bottom:100%. Vald lösning: aspect-ratio:1 + height:auto (elementets egen bredd, en
   deterministisk höjd som går att klippa). Ett försök med container query-enheter (för att i
   stället läsa exakt samma innehållande-block-bredd som padding-bottom-tricket, i jakt på
   bit-exakt paritet med temat) gav inkonsekventa mätvärden mellan körningar på i övrigt identisk
   uppställning – troligen webbteckensladdningens egen timing, inte en pålitlig teknik.

   VIKTIGT (hittat i denna korr, orsaken till att 1440×900 tidigare INTE var pixelidentisk): en
   aspect-ratio-driven höjd skiljer sig 0–2px från temats padding-bottom-tal (565 mot 565–567px) –
   i sig osynligt för ögat, men en bildomskalning till ett par pixlar annorlunda mål-storlek gör om
   HELA fotots pixlar (varje utdatapixel samplas om från en annan käll-position) och syns tydligt i
   en pixel-diff. Lösningen: aspect-ratio/height/min-height/padding-bottom LIGGER DÄRFÖR INNE I
   SAMMA per-bredd-tak-regler som max-height nedan, aldrig som ett eget, alltid aktivt block – är
   rutan inte hopklämd (utanför alla tre höjdgränserna) rör vi alltså padding-bottom:100% inte alls,
   och bilden renderas då med EXAKT samma tal som temat redan hade.

   Rundade hörn försvinner med object-fit:contain (korr 2, Sebastian upptäckte detta): critical.css
   rad 3349 lägger hörnradien (4 % uppe-vänster, 4 % nere-höger – temats snedställda form) direkt på
   <img>-taggen, och det är elementets EGEN ruta (inte den synliga bilden) som klipps. I normal
   cover-drift fyller bilden hela img-rutan så det syns inte, men ett tidigare försök i denna korr
   höll img-rutan tvingad till 100 % (min-width/min-height:100 % ärvt från critical.css rad 3554)
   och lät enbart object-fit:contain krympa den SYNLIGA bilden inuti – då hamnar den rundade
   klippningen på den nu osynliga, för stora rutans hörn i stället för på fotots egna, indragna
   hörn. Lösningen: släpp img-rutans tvingade minimum (min-width:0;min-height:0) och låt storleken
   i stället vara auto, begränsad av max-width/max-height:100 % (samma teknik som critical.css
   redan använder för .item img i sitt baslägesfall, rad 3337, fast utan det senare
   skrivbordstillägget) – då blir img-rutan lika stor som den faktiskt synliga bilden, och samma
   4 %-radie (skriven direkt här, inte ärvd) följer alltså fotots riktiga hörn oavsett storlek.
   Video (item.media) hade aldrig detta problem: dess rundade hörn sitter på .item.media-omslaget
   (overflow:hidden + samma 4 %-radie, critical.css rad 3349/3354), som redan krymper med
   .carousel .item – ingen särskild hörnregel behövs för video.

   Men (samma logik som för höjden ovan): object-fit:contain skulle ge FEL resultat – annan
   beskärning/zoom än temats cover – så fort rutan INTE faktiskt är hopklämd. CSS kan inte fråga
   "klipper max-height just nu?", så img/video/iframe-reglerna upprepas i VARJE bredd-taks egen
   media-regel, bakom SAMMA höjdgräns som klipper .item (se nästa stycke) – aldrig i ett delat,
   alltid aktivt block. Under gränsen är rutan redan hopklämd och cover skulle bara zooma in fel;
   över gränsen ska allt se ut precis som förut, cover och allt.

   Höjdavdraget OCH höjdgränsen skiljer sig mellan tre bredd-tak, eftersom .dummy-header (den fasta
   headerns platshållare) har tre olika höjder i critical.css. Höjdgränsen = rutans normala
   (okrympta) höjd, dvs elementets egen bredd (uppmätt ~565–580px i alla tre bredd-taken – ändras
   knappt med viewportbredden, sidans egen max-bredd begränsar bildkolumnen långt innan 1620px) plus
   samma avdrag som takets max-height, plus någon marginal, avrundat till ett städat tal:
    - 46.91rem–64rem (≈750–1024px): tablet-header (samma platshållare som mobilen, @media
      max-width:64rem → .dummy-header{height:124px}). Uppmätt i huvudbutiken (headless Chrome,
      live-sajten, 760/900/1024px bredd, hög viewport så inget klipps): bildrutans topp ligger vid
      y≈162px oavsett bredd i detta intervall → avdrag 175px (162 + marginal). Höjdgräns 680px
      (565+175=740 vid bredaste delen av taket, 1024px – 680 ligger under det, hellre missa några
      pixlar i överkant än byta utseende i onödan).
    - 64.01rem–1284px (≈1024–1284px): två menyraders header (critical.css @media min-width:64.01rem
      and max-width:1284px → .dummy-header{height:233px}). Uppmätt vid 1030/1280px bredd: bildrutans
      topp ligger vid y≈295px → avdrag 300px (1025–1279px har EXAKT samma headerhöjd som 1280px,
      inte högre – hela 1024–1284-remsan delar samma 233px-header). Höjdgräns 870px (565+300=865,
      +5 marginal).
    - ≥1285px: en menyrad (critical.css bas: min-width:64.01rem → .dummy-header{height:183px},
      vinner här eftersom 1284px-taket i tvårads-regeln inte längre matchar). Uppmätt vid
      1300/1440px bredd: bildrutans topp ligger vid y≈245px → avdrag 260px. Höjdgräns 850px
      (565+260=825, +25 marginal – bekräftar uttryckligen att 1440×800 (800<850) ska få hörn+contain
      och 1440×900 (900>850) ska vara helt opåverkad, precis det Sebastian bad om att verifiera).

   Golvhöjd: min-height:360px (Sebastians förslag). Vid 1024×600 (smalaste bredd-taket, tightaste
   verkliga fall som ändå inte är det snävaste avdraget) ger formeln 600−175=425px – golvet används
   inte där, det är en ren skyddsgräns. Den slår i stället in i det mellersta bredd-taket
   (1024–1284px, avdrag 300px) under ca 660px viewporthöjd (660−300=360), så att bilden aldrig blir
   mindre än en tydligt läsbar produktbild även vid ovanligt korta fönster – hellre några pixlars
   skroll än en frimärkesbild. CSS löser min-height > max-height-konflikten automatiskt: golvet
   vinner (spec: used min-height överskrider alltid max-height).

   Video (item.media): temats egen regel (critical.css .item iframe{width:90%;height:57.7%}) är en
   fast andel av rutan, inte ett golv/tak-baserat contain-fit, så när rutan blir lägre krymper
   videon proportionellt FÖR MYCKET. Askås-sidans egen Vimeo-anpassning (ett fristående skript
   utanför temat/repot, inte ss-fit.css – injicerat på produktsidan, se
   `.item.media.ss-fitted-vimeo`/`data-ss-video-ratio` i sidans källkod) sätter själv inline
   width/height med !important när den lyckas hämta videons proportioner (kan bli SMALARE än rutan
   för en stående video), och vinner då alltid över CSS här – men skriptet rör aldrig position/
   transform, så centreringen (top:50%;left:50%;translate(-50%,-50%), samma teknik som critical.css
   rad 3419) måste finnas kvar i vår regel, annars hamnar en smalare video i hörnet i stället för
   centrerad (rättat i denna korr – en tidigare version satte av misstag top:0;left:0;transform:none,
   vilket bara ser rätt ut när skriptet råkar fylla hela rutan). Regeln nedan är CSS-golvet för alla
   andra fall (innan skriptet hunnit köra, om det misslyckas, eller för en vanlig <video>-tagg):
   iframen fyller HELA rutan (100 %/100 %, ingen 90/57.7-andel) med object-fit:contain, precis som
   bilden. En stående (9:16) video i en bredare-än-hög ruta blir ändå smalare i pixlar än förut –
   det är korrekt contain-anpassning, inte ett fel (golvhöjden 360px begränsar hur extremt det blir).

   Pilar och miniatyrer: #thumbs, .thumbs-arrow och .hover-arrows ligger redan i normalt dokumentflöde
   direkt efter .carousel/.productzoom-inner-wrapper (eller är positionerade relativt samma ruta) –
   de flyttar upp automatiskt när rutan krymper, ingen egen regel behövs (verifierat med skärmdumpar).

   Ingen !important: den här filen laddas redan direkt efter critical.css både i bokmärket
   (build-preview.cjs, css-listan) och i publicerad drift (tt/shop/shop_header_includes.tt, samma
   "css"-array i den ordningen) — själva källan till konflikten (critical.css) ligger alltid före,
   så samma specificitet räcker. :not(.popped_img) speglar critical.css rad 3555 och håller
   förstoringsläget (zoom) helt oberört: dess egna regler (.popped_img .carousel, .popped_img
   .productzoom-wrapper, .popped_img .item iframe) matchar aldrig dessa selektorer. */
@media (min-width: 46.91rem) and (max-width: 64rem) and (max-height: 680px) {
  body:not(.popped_img) .carousel .item {
    aspect-ratio: 1;
    height: auto;
    min-height: 360px;
    padding-bottom: 0;
    max-height: calc(100vh - 175px);
  }
  body:not(.popped_img) .item img,
  body:not(.popped_img) .item video {
    width: auto;
    height: auto;
    min-width: 0;
    min-height: 0;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    object-position: center;
    border-top-left-radius: 4%;
    border-bottom-right-radius: 4%;
  }
  body:not(.popped_img) .item iframe {
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    object-fit: contain;
  }
}
@media (min-width: 64.01rem) and (max-width: 1284px) and (max-height: 870px) {
  body:not(.popped_img) .carousel .item {
    aspect-ratio: 1;
    height: auto;
    min-height: 360px;
    padding-bottom: 0;
    max-height: calc(100vh - 300px);
  }
  body:not(.popped_img) .item img,
  body:not(.popped_img) .item video {
    width: auto;
    height: auto;
    min-width: 0;
    min-height: 0;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    object-position: center;
    border-top-left-radius: 4%;
    border-bottom-right-radius: 4%;
  }
  body:not(.popped_img) .item iframe {
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    object-fit: contain;
  }
}
@media (min-width: 1285px) and (max-height: 850px) {
  body:not(.popped_img) .carousel .item {
    aspect-ratio: 1;
    height: auto;
    min-height: 360px;
    padding-bottom: 0;
    max-height: calc(100vh - 260px);
  }
  body:not(.popped_img) .item img,
  body:not(.popped_img) .item video {
    width: auto;
    height: auto;
    min-width: 0;
    min-height: 0;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    object-position: center;
    border-top-left-radius: 4%;
    border-bottom-right-radius: 4%;
  }
  body:not(.popped_img) .item iframe {
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    object-fit: contain;
  }
}

/* Kategorihuvudet (bild + text) på surfplatta och dator: Askås ger textytan en fast maxhöjd i vw (90 px vid 1000 px
   bredd), så att bara rubriken syns och toningen döljer resten. Här fyller texten i stället rutans höjd (bildens höjd)
   ned till Läs mer-raden, rubriken skalas med bredden och toningen täcker bara sista raden. Öppnat läge är oförändrat. */
@media (min-width: 46.91rem) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .ArtgrpText {
    display: flex;
    flex-direction: column;
    min-height: 0;
  }
  .ArtgrpTextWrap.ArtgrpMediaWrap
    .readmoreWrap[data-maxheight="250"]:not(.open) {
    flex: 1 1 0;
    min-height: 4.5em;
    max-height: none !important;
  }
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreWrap.fadeOut:not(.open)::after {
    height: 2.4em !important;
  }
  .ArtgrpTextWrap.ArtgrpMediaWrap .ArtgrpText h1 {
    font-size: clamp(20px, calc(4px + 2vw), 32px) !important;
    line-height: 1.2 !important;
  }
}
@media (min-width: 46.91rem) and (max-width: 64rem) {
  .ArtgrpTextWrap.ArtgrpMediaWrap .readmoreBtn {
    margin-top: 4px !important;
    margin-bottom: 4px !important;
  }
}
