/* EditionCreatife — listningssida (browse) med verk-kort.
   Endast statisk CSS. Typsnitten är självhostade woff2-filer i assets/fonts/
   (OFL-licens, se assets/fonts/OFL.txt) — inga externa nätverksberoenden.
   Typografiska och layoutmässiga värden enligt Designer-specerna
   design/typografi-spec.md och design/layout-spec.md (mätta 2026-10-14).
   Rutnätet följer kundens krav: fyra spalter på skrivbord. */

/* Typsnitt: Playfair Display och Poppins, självhostade woff2 (OFL-licens).
   Hämtade från Google Fonts och lagda i assets/fonts/ — inga externa anrop. */

@font-face {
  font-family: "Playfair Display";
  src: url("fonts/playfair-display-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Playfair Display";
  src: url("fonts/playfair-display-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Playfair Display";
  src: url("fonts/playfair-display-latin-ext-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Playfair Display";
  src: url("fonts/playfair-display-latin-ext-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-300-italic.woff2") format("woff2");
  font-weight: 300;
  font-style: italic;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-300-normal.woff2") format("woff2");
  font-weight: 300;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-500-normal.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-300-italic.woff2") format("woff2");
  font-weight: 300;
  font-style: italic;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-300-normal.woff2") format("woff2");
  font-weight: 300;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-500-normal.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Poppins";
  src: url("fonts/poppins-latin-ext-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  --bakgrund: #ffffff;      /* hela sidans bakgrund — vit på hela sajten sedan
                               kundens order 2026-10-18 ("Ta bort den grå
                               bakgrunden, gäller allt") */
  --vit: #ffffff;           /* sidhuvud och kortyta */
  --text: #1a1a1a;          /* läsbar mot vitt */
  --platshallare-yta: #ffffff;  /* yta bakom bilder — vit även den (samma
                               order 2026-10-18: ingen grå platshållaryta) */
  /* Mätt referensvärde för statusraden är #248a3d (4,40:1 mot vitt — under
     AA-kravet 4,5:1 för 12px text). Mörknat för kundens kontrastkrav:
     5,8:1 mot vitt. */
  --status-gron: #207436;
  /* Länkröd (tokenens namn --titel-rod är historiskt): 6,54:1 mot vitt
     (#ffffff), över AA-kravet 4,5:1 för text. Användes tidigare av
     länkarna (länkraden och köpraden) — sedan kundens order 2026-10-20
     "Länktextens färg: 40% svart, aktiv länk svart" är länktexten 40%
     svart och tokenet används inte längre (ligger kvar som historik).
     Verkstitlarna är svarta (--text)
     sedan kundens order 2026-10-16. */
  --titel-rod: #b3261e;
  --fokusring: #0b57d0;     /* tydlig kontrast mot vitt */
  --skugga-huvud: 0 2px 6px rgba(0, 0, 0, 0.14), 0 6px 14px rgba(0, 0, 0, 0.06);
  --skugga-kort: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
}

* {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background-color: var(--bakgrund);
  color: var(--text);
  font-family: "Poppins", sans-serif;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
}

/* Synlig fokusring, ca 3 px, för alla fokuserbara element */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 3px solid var(--fokusring);
  outline-offset: 2px;
}

/* Reserv för webbläsare som saknar :focus-visible */
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus,
[tabindex]:focus {
  outline: 3px solid var(--fokusring);
  outline-offset: 2px;
}

/* Sidhuvud: vitt med mjuk skugga direkt under (kundens fasta val).
   Paddingen nedjusterad 2026-11-03 (kundens order: liten, vänsterställd
   rubrik — ytan ska inte vara onödigt luftig). */
.sidhuvud {
  background-color: var(--vit);
  box-shadow: var(--skugga-huvud);
  padding: 1.25rem;
}

/* Sidhuvudsrubriken: liten och vänsterställd (kundens order 2026-11-03:
   sajtnamnet i sidhuvudet ska vara litet och vänsterställt). Tydlig
   storlekssänkning från 4rem ner mot länkarnas/brödtextens nivå. */
.sidhuvud__rubrik {
  margin: 0;
  text-align: left;
  font-family: "Playfair Display", serif;
  font-size: 1.25rem;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: normal;
  text-transform: none;
  color: var(--text);
}

/* Länkraden med tekniker ligger nu inne i den vita sidhuvudrutan, direkt
   under rubriken (kundens order 2026-10-19). Samma typografi som förut:
   Poppins 1rem/300, textfärg --text (#1a1a1a). Endast luften runt
   raden är anpassad för den nya placeringen: 0,6rem luft upp mot rubriken,
   ingen onödig bottenluft (huvudets undre padding bär avståndet till
   innehållet). Vänsterställd rad och minskad luft är kundens order
   2026-11-03 (liten, vänsterställd rubrik i sidhuvudet). */
.lankrad {
  margin: 0.6rem 0 0;
  text-align: left;
  font-family: "Poppins", sans-serif;
  font-size: 1rem;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

/* Länkarna i länkraden har 40% svart textfärg (kundens order 2026-10-20:
   "Länktextens färg: 40% svart, aktiv länk svart" — ersätter den röda
   färgen --titel-rod som gällde tidigare). Inga
   understrykningar (kundens order
   2026-10-15: "Ta bort linjerna under länkarna") — varken i normalt läge eller
   vid hover. Textvikten ändras ALDRIG på länkar (kundens order 2026-10-15:
   "Länkar ska aldrig vara feta"). Nödvändig följdändring av färgvalet:
   hover går till HEL SVART (color: var(--text)) i stället för opacitet —
   opacitet 0,7 på redan 40% svart text skulle göra länken nästan osynlig.
   Fokusringen (3 px) kommer från den globala
   :focus-visible-regeln. */
.lankrad a {
  color: rgba(0, 0, 0, 0.4);
  text-decoration: none;
}

.lankrad a:hover {
  color: var(--text);
}

/* Aktiv sida i länkraden: länk som pekar på den egna sidan (t.ex. "Måleri" på
   maleri.html) är svart (--text, #1a1a1a) — kundens order 2026-10-20
   "aktiv länk svart" — i stället för 40% svart. Högre
   specificitet än .lankrad a, så övriga länkar förblir 40% svarta. Sätter enbart
   färg — aldrig textvikt: den aktiva sidan markeras med svart, inte fetstil. */
.lankrad a.lankrad__aktiv {
  color: var(--text);
}

/* Butik-länken i länkraden har fetare typsnitt (kundens order 2026-10-19:
   "Gör Butik fetare typsnitt"). Sätter endast textvikt 700 — resten av
   raden ligger kvar på vikt 300. */
.lankrad__fet {
  font-weight: 700;
}

/* Rubriken är en länk till startsidan på undersidorna och understryks vid
   hover. Länktexten får aldrig vara fet (kundens order 2026-10-15), så länken
   sätter normal textvikt 400 — annars skulle rubrikens egen vikt (700) ärvas
   in i länktexten. */
.sidhuvud__rubrik a {
  color: inherit;
  text-decoration: none;
  font-weight: 400;
}

.sidhuvud__rubrik a:hover {
  text-decoration: underline;
}

/* Ny huvudnavigering under titeln i sidhuvudet (kundens order 2026-10-15:
   "Alla verk - Konstnärer - Kontakt"). Liten text 0,8rem — mindre än
   teknikradens 1rem — centrerad och kompakt. Länkarna är SVARTA (--text)
   och i FET stil: kundens order 2026-10-15 "översta länkraden, svart" och
   "de översta länkarna kan vara fet stil" — därför vikt 700 här. Den äldre
   regeln att länkar aldrig får vara feta gäller nu bara utanför .topplank
   (.lankrad och .sidhuvud__rubrik a behåller oförändrad vikt och färg).
   Ingen understrykning; hover markerar klickbarheten med opacitet — vikten
   ändras inte. Fokusringen (3 px) kommer från den globala
   :focus-visible-regeln. */
.topplank {
  margin: 0.5rem 0 0;
  text-align: center;
  font-family: "Poppins", sans-serif;
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1.6;
  color: var(--text);
}

.topplank a {
  color: var(--text);
  font-weight: 700;
  text-decoration: none;
}

.topplank a:hover {
  opacity: 0.7;
}

/* Aktiv sida i huvudnavigeringen: regeln behålls för strukturen (samma svarta
   färg som övriga topplänkar), men eftersom alla topplänkar nu är svarta
   markeras den aktiva sidan inte särskilt. Inget nytt tillägg (ingen
   understrykning) — kunden har bara bett om svart + fet stil. */
.topplank a.topplank__aktiv {
  color: var(--text);
}

/* Konstnärer (konstnarer.html): namn och deras verk (titel + ID) enligt
   verk-korten — ingen påhittad biografi. Namnen är tydlig text i Playfair
   Display 24px/400, samma typografiska värden som de borttagna sidrubrikerna
   (sajtens mönster: inga rubriker). Verkstitlarna följer kortens
   titelstil sedan 2026-10-16 (kundens order gäller överallt): 16px/300 i
   --text, samma typografi som priset, ej kursiv. ID följer kortens ID-rad
   (12px/400). */
.konstnarer {
  display: flex;
  flex-direction: column;
  gap: 30px;
}

.konstnar__namn {
  margin: 0 0 12px;
  font-family: "Playfair Display", serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.4;
  color: var(--text);
}

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

.konstnar__verk li {
  margin: 0 0 8px;
  line-height: 1.6;
}

/* Verkstitlarna på konstnarer.html: samma typografi som priset och som
   kortens verkstitel (kundens order 2026-10-16: gäller överallt):
   16px/300, svart (--text), ej kursiv. */
.konstnar__verktitel {
  font-size: 16px;
  font-weight: 300;
  font-style: normal;
  color: var(--text);
}

.konstnar__verktitel em {
  font-style: normal;
}

.konstnar__verkid {
  font-size: 12px;
  font-weight: 400;
  color: var(--text);
}

/* Kontakt (kontakt.html): etiketter med tydliga platshållare. Inga
   kontaktuppgifter fanns i projektet — kunden fyller i värdena. Ingen
   kontaktformulär (sajten är statisk utan JS/backend). Etiketterna har egen
   stil 16px/700 (oförändrad), värden som kortens prisrad (16px/300). */
.kontakt__lista {
  margin: 0;
}

.kontakt__etikett {
  margin: 16px 0 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.6;
  color: var(--text);
}

.kontakt__etikett:first-child {
  margin-top: 0;
}

.kontakt__varde {
  margin: 0;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

/* Innehållsyta: 1200px max, 30px sidopadding (layout-spec) */
.innehall {
  max-width: 1200px;
  margin: 0 auto;
  padding: 30px 30px 60px;
}

.galleri__rubrik {
  margin: 0 0 30px;
  font-family: "Playfair Display", serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.4;
  color: var(--text);
}

/* Utsmyckningsbild på illustration.html: centrerad, maxbredd 850px (30 cm vid
   72 dpi: 30/2,54*72 ≈ 850) så bilden inte blir större än vid 72 dpi, med
   naturlig proportion (height: auto, ingen beskärning). Är en utsmyckning,
   inte ett verk-kort — ingen kortyta, inga kortfält och ingen länk runt
   bilden. ~24px luft under bilden. */
.utsmyckning {
  display: block;
  width: 100%;
  max-width: 850px;
  height: auto;
  margin: 0 auto 24px;
}

/* Klänningen ska ligga så högt som möjligt (kundens order 2026-10-17:
   "går det att flytta upp klänningen ytterligare"), men klänningbilden
   får inte skymma skuggan under sidhuvudet (kundens order 2026-10-19:
   "Illustration: bilden klänning ska inte skymma skuggan under sidhuvudet").
   Sidhuvudets skugga (--skugga-huvud) når ungefär 13px under sidhuvudets
   ruta, så bilden får en minsta topplucka på 16px — precis tillräckligt
   för att skuggan ska synas klart, och annars så högt upp som möjligt
   enligt order 2026-10-17 ovan. Luftet under bilden till första kortraden
   är fortfarande 30px — sajtens fasta rytm (kundens order 2026-10-17:
   "Glöm inte 30 px space på sidan med illustrationer"). Bilden
   ligger utanför rutnätet och påverkar inte murverket.
   Layoutreglerna för illustrationssidan scoppas med body:has(.utsmyckning)
   sedan klassen vit-bakgrund togs bort (kundens order 2026-10-18: vit
   bakgrund överallt) — beteendet är oförändrat. */
body:has(.utsmyckning) .utsmyckning {
  margin-top: 16px;
  margin-bottom: 30px;
}

/* Klänningbilden ska ligga så högt som möjligt, direkt under länkraden
   (kundens order 2026-10-15: flytta upp klänningbilden). Luft mellan
   länkraden och sidans innehåll tas bort enbart på illustrationssidan —
   övriga sidor behåller sin luft oförändrad. */
body:has(.utsmyckning) .lankrad {
  margin-bottom: 0;
}

body:has(.utsmyckning) .innehall {
  padding-top: 0;
}

/* Verkstitel under utsmyckningsbilden på keramik.html (kundens order
   2026-10-18: "Keramik: lägg inte den översta bilden på ett kort, flytta
   upp bilden"). Verkstiteln följer med bilden som lös centrerad text —
   samma typografi som .verkkort__titel (16px/300, svart, ej kursiv —
   identisk rendering med titlarna i korten), men centrerad och utan
   kortyta. Luften bild→titel är 16px som i korten och luften titel→första
   kortrad är sajtens fasta 30px (bildblocket = bild + titel). Bildens
   undre marginal sätts till 16px när en titelrad följer, så att den
   befintliga 30px-regeln ovan (avsedd för bilden som avslutar blocket)
   inte hamnar mellan bild och titel. Regeln träffar bara sidor som har en
   .utsmyckning__titel — illustration.html är oförändrad. */
body:has(.utsmyckning__titel) .utsmyckning {
  margin-bottom: 16px;
}

.utsmyckning__titel {
  margin: 0 0 30px;
  text-align: center;
  font-size: 16px;
  font-weight: 300;
  font-style: normal;
  line-height: 1.6;
  color: var(--text);
}

.utsmyckning__titel em {
  font-style: normal;
}

/* Exakt 30px mellan sidhuvudet (.sidhuvud) och kortgalleriet (kundens order
   2026-10-19: "lägg 30 px mellan sidhuvud och korten") — samma fasta
   30px-rytm som kolumn-gap och kortblocken. Ordern gäller avståndet mellan
   sidhuvudet och korten på sidor som har både sidhuvud och galleri
   (index.html och avdelningssidorna) och viker där den nya luften in mot
   sidhuvudet framför 2026-10-16-ordern ("Lägg inte 30px ovanför de kort som
   ligger överst på sidan", "ta bort 30px i överkant"): den ordern gällde
   luften överst mot sidkanten och står kvar för all annan luft i överkant
   (ingen extra luft läggs till utöver de 30px mot sidhuvudet). Sidor utan
   galleri (konstnarer.html, kontakt.html) behåller sin innehållsluft
   oförändrad. Sidor med utsmyckningsbild överst (illustration.html,
   keramik.html) är också oförändrade: bilden ligger direkt under länkraden
   (kundens order 2026-10-15/2026-10-17) och regeln body:has(.utsmyckning)
   ovan håller topp-luften 0 där — 30px mellan bildblocket och första
   kortraden finns redan. shop.html har SHOP-rubriken som galleriets första
   innehåll: här blir det 30px mellan sidhuvud och gallerisektionen;
   rubrikens egna 30px mot korten är oförändrade. */
.innehall:has(.galleri) {
  padding-top: 30px;
}

/* Tre spalter med verk-kort (kundens order 2026-10-15: "illustrationerna i
   tre spalter, gäller även målerisidan, gäller inte klänningsbilden").
   Rutnätet är CSS-masonry (murverk) i flera spalter — kundens order
   2026-10-16: "Använd murverk på kortplaceringen!" och "Placera korten med
   samma space mellan spalterna och över och under korten", löst som
   referensen https://www.editioncopenhagen.com/1029/browse: korten behåller
   sin naturliga höjd och flödar nedåt i varje spalt (ingen radjustering mot
   grannkorten). Exakt 30px överallt: mellan spalterna (column-gap), mellan
   kortblocken (padding-bottom) och mellan flera kort i samma block. Tre
   spalter på skrivbord, 2 spalter vid ≤1024px (64rem) och 1 spalt vid
   ≤768px (48rem) — se media queries längre ned. Gäller inte
   utsmyckningsbilden på illustration.html — den ligger utanför rutnätet.
   Obs: i masonry läses DOM-ordningen nedåt i varje spalt. */
.galleri__rutnat {
  list-style: none;
  margin: 0;
  padding: 0;
  column-count: 3;
  column-gap: 30px;
}

/* Kortblocket hålls ihop i masonry-flödet (break-inside: avoid) och följer
   sitt eget innehåll i höjdled. 30px under varje block som padding-bottom
   (inte margin — en slutmarginal kapas i spaltkanten och skulle annars ge
   0px mellan en spaltgrupp och nästa helbreddsrad); flera .verk i samma
   block har 30px mellan sig. */
.galleri__kolumn {
  min-width: 0;
  break-inside: avoid;
  margin: 0;
  padding: 0 0 30px;
}

.galleri__kolumn > .verk + .verk {
  margin-top: 30px;
}

/* Kort över flera spalter. galleri__kolumn--span-2 (Quizbok — kundens order
   2026-10-16) spänner alla spalter med kortet begränsat till exakt två
   spalter + ett mellanrum (width: calc((100% - 60px)/3*2 + 30px);
   galleri__kolumn--span-3 (Istanbul_1, kundens order 2026-10-16: "Lägg
   fotot från Istanbul över tre spalter") spänner
   alla spalter, hela bredden. (Lila karaff och koppar använde span-3 på
   keramik.html fram till kundens order 2026-10-18 — bilden ligger nu som
   utsmyckning överst i stället.) Bilden beskärs inte — den skalar med
   kortets bredd. Vid ≤1024px blir båda hela bredden och vid ≤768px återställs allt
   till 1 spalt (se media queries längre ned). */
.galleri__kolumn--span-2 {
  column-span: all;
}

.galleri__kolumn--span-2 > .verk {
  width: calc((100% - 60px)/3*2 + 30px);
}

.galleri__kolumn--span-3 {
  column-span: all;
}

/* Måleri-sidans rutnät (kundens order 2026-11-03: "ändra till fyra spalter
   och lägg bilderna över två spalter" = två kort per rad). Sidlokal
   modifierare galleri__rutnat--fyra — används bara på maleri.html, övriga
   sidors multicol-rutnät är oförändrat. Grid i stället för multicol så att
   två kort kan ligga på samma rad. */
.galleri__rutnat--fyra {
  display: grid;
  column-count: auto;
  grid-template-columns: repeat(4, 1fr);
  column-gap: 30px;
}

/* Varje kort spänner två av de fyra spalterna. Kortet fyller hela sin
   spännbredd — härmed nullställs multicol-bredden från
   .galleri__kolumn--span-2 och column-span slås av (grid styr i stället). */
.galleri__rutnat--fyra .galleri__kolumn--span-2 {
  column-span: none;
  grid-column: span 2;
}

.galleri__rutnat--fyra .galleri__kolumn--span-2 > .verk {
  width: 100%;
}

/* Smala skärmar: färre spalter (samma brytpunkter som övriga sidor) så att
   korten inte krymper under läsbar bredd. */
@media (max-width: 64rem) {
  .galleri__rutnat--fyra {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 48rem) {
  .galleri__rutnat--fyra {
    grid-template-columns: 1fr;
  }

  .galleri__rutnat--fyra .galleri__kolumn--span-2 {
    grid-column: auto;
  }
}

.verk {
  margin: 0;
  min-width: 0;
}

/* Kort: vit yta, 2px radie, mjuk skugga (mätt på browse-referensen) */
.verkkort {
  background-color: var(--vit);
  border-radius: 2px;
  box-shadow: var(--skugga-kort);
}

/* Kortets textfält: lika luft uppe och nere (kundens order 2026-10-16:
   "Använd samma space ovan och under korten, gäller alla kort"): 20px
   över och under, 30px i sidled. */
.verkkort__innehall {
  padding: 20px 30px;
}

/* Bildyta 5:4 (mätt: 460x368), vit yta bakom bilden (kundens order 2026-10-18:
   den grå platshållarytan ska bort) */
.verkkort__bildyta {
  display: block;
  width: 100%;
  aspect-ratio: 5 / 4;
  background-color: var(--platshallare-yta);
}

/* Används när bildytan ersätts av en riktig <img class="verkkort__bild">.
   Bilden fyller alltid kortets bredd och får sin naturliga höjd
   (width: 100%; height: auto) — ingen fast proportion, ingen beskärning. */
.verkkort__bild {
  display: block;
  width: 100%;
  height: auto;
}

/* Verkstiteln: samma typografi som priset (kundens order 2026-10-16: "ändra
   typografin till samma som priset, gäller överallt" och "Använd svart text
   på titlarna"): 16px/300 i --text, ej kursiv. Titeln ligger överst i
   kortets textfält, direkt under bilden, och tar 16px luft efter bilden
   (kundens order: titel före konstnärsnamn). Samma titelstil gäller
   verkstitlarna på konstnarer.html. font-style: normal slår även om ett ev.
   em-element (annars ger webbläsarens standard kursiv). */
.verkkort__titel {
  margin: 16px 0 0;
  font-size: 16px;
  font-weight: 300;
  font-style: normal;
  line-height: 1.6;
  color: var(--text);
}

.verkkort__titel em {
  font-style: normal;
}

/* Konstnärsnamnet på korten: något mindre och tunnare än förut (kundens
   order 2026-10-16): 15px/600, svart (--text). Ligger direkt under
   verkstiteln utan extra luft. */
.verkkort__konstnar {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.6;
  color: var(--text);
}

/* ID och pris på två rader (kundens val): ID-etikett 12px/400 på egen rad
   ovanför, prisetikett 16px/300 på egen blockrad under, vänsterställd
   som i browse-referensen. */
.verkkort__idpris {
  margin: 12px 0 0;
}

.verkkort__id {
  display: block;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--text);
}

.verkkort__pris {
  display: block;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

/* Formatrad: verkets mått, på egen rad under verkstitel/konstnärsnamn
   (före ID/pris) */
.verkkort__format {
  margin: 4px 0 0;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--text);
}

/* Statusrad: 12px/400, grön enligt --status-gron */
.verkkort__status {
  margin: 8px 0 0;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--status-gron);
}

/* Köprad på illustrationskorten (illustration.html och index.html).
   Raden skrevs enligt kundens order 2026-10-16 och visade därefter både
   köp och nedladdning; sedan kundens order 2026-10-19 ("nedladdning ska
   bort, behåll endast Köp") visar raden BARA köplänken "Köp", som länkar
   till produktens köpsida (kopsida-<nyckel>.html) eftersom storleken
   måste väljas och priset visas där innan köpet. Kort utan pris och
   erbjudande har ingen rad alls. Samma typografi som priset (kundens
   order 2026-10-16: "Öka texten om nedladdning till samma som målningarnas
   pris"): 16px/300 i kortets färgfamilj (--text) — ingen ny layout, ingen
   förändring av rutnätet. Länken följer sajtens länkstil: 40% svart
   (kundens order 2026-10-20: "Länktextens färg: 40% svart, aktiv länk
   svart" — ersätter den röda färgen --titel-rod), ingen understrykning,
   aldrig fet (kundens order) — vikt
   300 så den matchar raden. Hover går till HEL SVART (color: var(--text))
   i stället för opacitet — opacitet 0,7 på redan 40% svart text skulle
   göra länken nästan osynlig (samma nödvändig följdändring som i
   länkraden). Fokusringen (3 px) kommer
   från den globala :focus-visible-regeln. */
.verkkort__kop {
  margin: 4px 0 0;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

.verkkort__kop a {
  color: rgba(0, 0, 0, 0.4);
  text-decoration: none;
  font-weight: 300;
}

.verkkort__kop a:hover {
  color: var(--text);
}

/* Storleksväljaren (kundens order 2026-10-18: "Man måste ju kunna välja
   en av storlekarna"). Från 2026-10-19 ligger väljaren på köpsidorna
   (kopsida-<nyckel>.html) — sid 1 (shop.html) visar bara bilden +
   köpknappen. En radiogrupp per sida: tre tryckbara
   storleksknappar, vald storlek fylls svart. Ingen JavaScript (sajtens
   regel) — själva radioknappen är osynlig men fokuserbar, etiketten är den
   tryckbara ytan (minst 48px hög, pekdonstryckbar på mobil) och fokusringen
   läggs på etiketten. Typografin följer kortets textfält: namnet som
   konstnärsnamnet (15px/600), måttet som formatraden (12px/400). */
.storleksval {
  margin: 12px 0 0;
  padding: 0;
  border: 0;
  min-width: 0;
}

.storleksval__rubrik {
  padding: 0;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--text);
}

.storleksval__alternativ {
  position: relative;
  display: flex;
  gap: 8px;
  margin: 8px 0 0;
}

/* Den verkliga radioknappen: osynlig men kvar i tabbordningen och
   fokuserbar (skärmläsare läser gruppnamn och val). */
.storleksval__knapp {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Knappen kunden trycker på: lika bred i raden, minst 48px hög. */
.storleksval__etikett {
  flex: 1 1 0;
  min-width: 0;
  min-height: 48px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 6px 4px;
  border: 1px solid var(--text);
  border-radius: 2px;
  background-color: var(--vit);
  color: var(--text);
  text-align: center;
  cursor: pointer;
  user-select: none;
}

.storleksval__namn {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.2;
}

.storleksval__matt {
  font-size: 12px;
  font-weight: 400;
  line-height: 1.2;
}

.storleksval__forklaring {
  margin: 8px 0 0;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.6;
  color: var(--text);
}

.storleksval__etikett:hover {
  opacity: 0.8;
}

/* Vald storlek: svart fyllning med vit text — syns direkt på mobil. */
.storleksval__knapp:checked + .storleksval__etikett {
  background-color: var(--text);
  color: var(--vit);
}

.storleksval__knapp:checked + .storleksval__etikett:hover {
  opacity: 1;
}

/* Fokusringen på etiketten eftersom själva radioknappen är osynlig
   (samma ring som sajten: 3px --fokusring, :focus som reserv). */
.storleksval__knapp:focus-visible + .storleksval__etikett,
.storleksval__knapp:focus + .storleksval__etikett {
  outline: 3px solid var(--fokusring);
  outline-offset: 2px;
}

/* Raden under storleksväljaren följer den valda storleken (kundens order
   2026-10-18: "Man måste ju kunna välja en av storlekarna"). DENNA
   REGELGRUPP ÄR INTE LÄNGRE I ANVÄNDNING sedan 2026-10-19: shop.html visar
   bara bilden + köpknappen och köpsidorna använder sina egna regler
   (.kopsida__pris och .kopsida__kop-alternativ längre ned). Reglerna är
   kvar oförändrade i stället för att tas bort (kundens regel: rör inte
   onödigt). Mönstret är detsamma som köpsidorna använder: grundläget visar
   stora storleken och med :has() visas raden för den valda storleken. */
.verkkort__kop-valj {
  display: none;
}

.verkkort__kop-alternativ {
  display: none;
}

.verkkort__kop-alternativ[data-storlek="large"] {
  display: inline;
}

@supports selector(:has(*)) {
  .verkkort__kop-valj {
    display: inline;
  }

  .verkkort__kop-alternativ[data-storlek="large"] {
    display: none;
  }

  .verkkort:has(.storleksval__knapp:checked) .verkkort__kop-valj {
    display: none;
  }

  .verkkort:has(.storleksval__knapp[value="small"]:checked) .verkkort__kop-alternativ[data-storlek="small"] {
    display: inline;
  }

  .verkkort:has(.storleksval__knapp[value="medium"]:checked) .verkkort__kop-alternativ[data-storlek="medium"] {
    display: inline;
  }

  .verkkort:has(.storleksval__knapp[value="large"]:checked) .verkkort__kop-alternativ[data-storlek="large"] {
    display: inline;
  }
}

/* Bildspel på grafisk-form.html (kundens order 2026-10-16: "Gör ett bildspel,
   ingen text, två spalter", "Nytt bildspel, ingen text, två spalter"). Helt
   utan JavaScript: bilderna ligger ovanpå varandra i en ruta med bildernas
   egen proportion (alla 648x500) och tonas in och ut i sin tur med
   @keyframes — ingen synlig text, bara bilder (alt-texterna finns för
   skärmläsare). Blocket ligger i kortrutnätet som ett
   galleri__kolumn--span-2, alltså två spalter brett enligt samma regler som
   Quizbok och Pressjärn. Cykeln är 28s (7 bilder × 4s) och varje bild får
   4s mer animation-delay än föregående via nth-child-reglerna. Byt eller
   lägg till bilder i <div class="bildspel"> på grafisk-form.html och lägg
   till motsvarande nth-child-regel här (samt ändra 28s till antal bilder ×
   4s) — se README.md. */
.bildspel {
  position: relative;
  width: 100%;
  aspect-ratio: 648 / 500;
}

.bildspel img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  opacity: 0;
  animation: bildspel-cykel 28s infinite;
}

.bildspel img:nth-child(2) { animation-delay: 4s; }
.bildspel img:nth-child(3) { animation-delay: 8s; }
.bildspel img:nth-child(4) { animation-delay: 12s; }
.bildspel img:nth-child(5) { animation-delay: 16s; }
.bildspel img:nth-child(6) { animation-delay: 20s; }
.bildspel img:nth-child(7) { animation-delay: 24s; }

/* Rättelse 2026-10-20 kväll (kundens rapport samma dag, ordagrant: "det blev
   fel" och "bildspelen"): vid varje bildbyte tonade den utgående bilden ner
   till opacity 0 PRECIS när den inkommande började tona in från 0 —
   övergångarna överlappade inte och kortets vita bakgrund lyste igenom i
   ca 1–1,6 s vid varje byte. Nu är varje byte en riktig övertoning
   (crossfade): uttoningen slutar F sekunder IN i nästa bilds lucka, vid
   (S+F)/T i stället för S/T, medan nästa bild tonar 0→1 under exakt samma
   F sekunder (här F = 0,8 s) — summan av bildernas opacity är 1 genom
   hela bytet och kortbakgrunden syns aldrig. Här: T = 28 s, S = 4 s,
   F = 0,8 s → in 0–2,9 %, hel 2,9–14,3 %, ut 14,3–17,2 % (17,2 % = 4,8 s).
   Endast uttoningens slutstopp (14,3 % → 17,2 %) och hålfasens slutstopp,
   som flyttas till uttoningens start (11,4 % → 14,3 % = S/T), ändras —
   intoningens stopp, 100 %-stoppet, tempo och fasförskjutningar är
   oförändrade. */
@keyframes bildspel-cykel {
  0% { opacity: 0; }
  2.9% { opacity: 1; }
  14.3% { opacity: 1; }
  17.2% { opacity: 0; }
  100% { opacity: 0; }
}

/* Tillgänglighet (prefers-reduced-motion): reglerna ligger samlade i EN
   media query längre ner i filen, efter samtliga modifierarblock — se
   kommentaren "Tillgänglighet: visa första bilden stilla" där. De låg
   tidigare här men skrevs över av modifierarnas egna regler, som kommer
   senare med samma specificitet (fel upptäckt 2026-10-20: .bildspel--uppslag
   animerade ändå vid reduce; åtgärdat på Heads order samma dag). */

/* Bildspel med uppslag ur boken Fulltank på grafisk-form.html (kundens order
   2026-10-19: "gör uppslagen från Fulltank till ett självspelande bildspel
   utan texter eller pilar"). Rättelse 2026-10-19: "Bildspelet Fulltank
   ligger fel. Ska ligga under Grafisk form" — blocket är flyttat från
   fotografi.html till grafisk-form.html. Samma sorts bildspel som
   Mästarna-bildspelet på samma sida — helt utan JavaScript, utan synlig
   text och utan knappar eller pilar: bilderna byts av sig själva. Två
   saker skiljer: uppslagen är 1024x723, så rutan får deras egen proportion,
   och varje uppslag visas i 5 s (30 s per varv = 6 bilder × 5 s, samma
   tempo som kundens tidigare uppslagsbildspel). Egna nyckelbilder, eftersom
   andelarna i bildspel-cykel är räknade för 4 s per bild. Reglerna ovan
   för .bildspel gäller alltjämt — detta block ändrar bara proportion,
   tempo och fasförskjutningar. */
.bildspel.bildspel--uppslag {
  aspect-ratio: 1024 / 723;
}

.bildspel.bildspel--uppslag img {
  animation-name: bildspel-uppslag-cykel;
  animation-duration: 30s;
}

.bildspel.bildspel--uppslag img:nth-child(2) { animation-delay: 5s; }
.bildspel.bildspel--uppslag img:nth-child(3) { animation-delay: 10s; }
.bildspel.bildspel--uppslag img:nth-child(4) { animation-delay: 15s; }
.bildspel.bildspel--uppslag img:nth-child(5) { animation-delay: 20s; }
.bildspel.bildspel--uppslag img:nth-child(6) { animation-delay: 25s; }

/* Samma övertoning som bildspel-cykel (se rättelsen 2026-10-20 kväll där:
   kundens rapport "det blev fel" och "bildspelen" — bytena blinkade vita),
   omräknad för 5 s per uppslag (16,7 % av varvet = 5 s av 30 s) och toning
   F = 1 s: in 0–3,4 %, hel 3,4–16,7 %, ut 16,7–20 % (20 % = 6 s = S+F).
   uttoningen slutar 1 s in i nästa uppslags lucka, samtidigt som nästa
   tonar 0→1 under samma 1 s — summan av opacity är 1 genom bytet. */
@keyframes bildspel-uppslag-cykel {
  0% { opacity: 0; }
  3.4% { opacity: 1; }
  16.7% { opacity: 1; }
  20% { opacity: 0; }
  100% { opacity: 0; }
}

/* Bildspel med tre färjebilder på fotografi.html (kundens order 2026-10-19:
   "gör ett bildspel med dessa tre bilder ingen text två spalter, under
   Fotografi, publiceras under översta bilden Istanbul"). Samma sorts
   bildspel som Fulltank-uppslagen ovan — helt utan JavaScript, utan synlig
   text och utan knappar eller pilar: bilderna byts av sig själva. Blocket
   ligger direkt under Istanbul-bilden på fotografi.html, per "publiceras
   under översta bilden Istanbul", i en galleri__kolumn--span-2 (två spalter
   enligt samma regler som Quizbok och Fulltank). Bilderna är kundens filer
   färja.jpg, färja1.jpg och färja2.jpg, kopierade till farja-1.jpg,
   farja-2.jpg och farja-3.jpg (1000x640; sha256-verifierade kopior, uploads
   orörda), så rutan får deras egen proportion. Varje bild visas i 5 s
   (15 s per varv = 3 bilder × 5 s, samma tempo som Fulltank-uppslagen).
   Egna nyckelbilder, eftersom andelarna i bildspel-cykel är räknade för 4 s
   per bild. Reglerna ovan för .bildspel gäller alltjämt — detta block
   ändrar bara proportion, tempo och fasförskjutningar. */
.bildspel.bildspel--farja {
  aspect-ratio: 1000 / 640;
}

.bildspel.bildspel--farja img {
  animation-name: bildspel-farja-cykel;
  animation-duration: 15s;
}

.bildspel.bildspel--farja img:nth-child(2) { animation-delay: 5s; }
.bildspel.bildspel--farja img:nth-child(3) { animation-delay: 10s; }

/* Samma övertoning som bildspel-cykel (se rättelsen 2026-10-20 kväll där),
   omräknad för 5 s per bild (33,3 % av varvet = 5 s av 15 s) och toning
   F = 1 s: in 0–6,7 %, hel 6,7–33,3 %, ut 33,3–40 % (40 % = 6 s = S+F).
   uttoningen slutar 1 s in i nästa bilds lucka, samtidigt som nästa tonar
   0→1 under samma 1 s — summan av opacity är 1 genom bytet. */
@keyframes bildspel-farja-cykel {
  0% { opacity: 0; }
  6.7% { opacity: 1; }
  33.3% { opacity: 1; }
  40% { opacity: 0; }
  100% { opacity: 0; }
}



/* Bildspel med två textilbilder i en spalt på fotografi.html (kundens order
   2026-10-20: "Fotografi, bildspel en spalt" + 2 bilder (tygknapp, vit
   klänning)). Kunden svarade 2026-10-20 i Heads frågeformulär att det ska
   vara TVÅ SEPARATA bildspel — ett smalt (en spalt) med knapp/klänning och
   ett brett (två spalter) med naturbilderna (se .bildspel--natur nedan).
   Samma sorts bildspel som färjabildspelet ovan — helt utan JavaScript,
   utan synlig text och utan knappar eller pilar: bilderna byts av sig själva.
   Bilderna är kundens filer _DSC6563.jpg och _DSC6556_1000.jpg, kopierade
   till dsc-6563.jpg och dsc-6556.jpg (1424x938 och 1000x667; sha256-
   verifierade kopior, uploads orörda), så rutan får deras gemensamma
   proportion ca 3/2. Varje bild visas i 5 s (10 s per varv = 2 bilder × 5 s,
   samma tempo som färjan och Fulltank-uppslagen). Egna nyckelbilder, eftersom
   andelarna i bildspel-cykel är räknade för 4 s per bild. Reglerna ovan för
   .bildspel gäller alltjämt — detta block ändrar bara proportion, tempo och
   fasförskjutningar. */
.bildspel.bildspel--tyg {
  aspect-ratio: 3 / 2;
}

.bildspel.bildspel--tyg img {
  animation-name: bildspel-tyg-cykel;
  animation-duration: 10s;
}

/* Fasförskjutning (kundens order 2026-10-20, ordagrant: "lat bildspelen
   bladdra i otakt"): bildspelen på fotografi.html får INTE byta bild
   samtidigt. Lösningen är olika FAS, inte olika tempo — alla behåller 5 s
   per bild. Färjabildspelet är oförändrat (fas 0: byten vid 0/5/10/15 … s
   efter laddning) och fasförskjutningen är bakad i animation-delay-talen
   för de två nya spelen:
   - .bildspel--tyg: bild 1 = -3,7 s, bild 2 = 1,3 s → byten vid
     1,3/6,3/11,3/16,3 … s (fas 1,3 s mod 5). Negativ delay startar cykeln
     mitt i första bildens slot (3,7 s av 10 s = 37 %, mitt i "opacity 1"),
     så första bilden syns direkt vid laddning — ingen tom ruta.
   - .bildspel--natur: -2,5/2,5/7,5/12,5 s → byten vid
     2,5/7,5/12,5/17,5 … s (fas 2,5 s mod 5). Bild 1 startar 2,5 s in i sin
     20 s-cykel (12,5 %, mitt i "opacity 1") och syns också direkt.
   Bytena sammanfaller aldrig: faserna 0 / 1,3 / 2,5 är distinkta mod 5
   (0, 5, 10 … mot 1,3, 6,3, 11,3 … mot 2,5, 7,5, 12,5 …). prefers-reduced-
   motion-läget är oförändrat — första bilden stilla (se samlad media query
   sist i bildspelssektionen). */
.bildspel.bildspel--tyg img:nth-child(1) { animation-delay: -3.7s; }
.bildspel.bildspel--tyg img:nth-child(2) { animation-delay: 1.3s; }

/* Nyckelbilder för 50 % av varvet = 5 s av 10 s (in 0–10 %, hel 10–50 %,
   ut 50–60 %) — övertoning enligt rättelsen 2026-10-20 kväll (kundens
   rapport "det blev fel" och "bildspelen"): uttoningen slutar 1 s in i
   nästa bilds lucka (60 % = 6 s = S+F), samtidigt som nästa tonar 0→1
   under samma 1 s, så summan av opacity är 1 genom bytet och kortets vita
   bakgrund syns aldrig. */
@keyframes bildspel-tyg-cykel {
  0% { opacity: 0; }
  10% { opacity: 1; }
  50% { opacity: 1; }
  60% { opacity: 0; }
  100% { opacity: 0; }
}

/* Bildspel med fyra naturbilder i två spalter på fotografi.html (kundens
   order 2026-10-20: "Fotografi, bildspel tvåspalt, lägg ovanför färja" +
   4 bilder (Stammar, mossa, Svamp_6, Svamp_10)). Kunden svarade 2026-10-20
   i Heads frågeformulär att naturbildspelet ska ligga "direkt ovanför
   farjabildspelet i hogra kolumnen (potatis kvar till vanster)" — kundens
   egna ord, citerade utan svenska tecken. Samma sorts bildspel som
   färjabildspelet ovan — helt utan JavaScript, utan synlig text och utan
   knappar eller pilar: bilderna byts av sig själva. Bilderna är kundens
   filer Stammar_1_2_1000.jpg, mossa.jpg, Svamp_6.jpg och Svamp_10.jpg,
   kopierade till stammar-1-2.jpg, mossa.jpg, svamp-6.jpg och svamp-10.jpg
   (1000x665, 664x441, 1000x667 och 1000x664; sha256-verifierade kopior,
   uploads orörda), så rutan får deras gemensamma proportion ca 3/2. Varje
   bild visas i 5 s (20 s per varv = 4 bilder × 5 s, samma tempo som färjan
   och Fulltank-uppslagen). Egna nyckelbilder, eftersom andelarna i
   bildspel-cykel är räknade för 4 s per bild. Reglerna ovan för .bildspel
   gäller alltjämt — detta block ändrar bara proportion, tempo och
   fasförskjutningar. */
.bildspel.bildspel--natur {
  aspect-ratio: 3 / 2;
}

.bildspel.bildspel--natur img {
  animation-name: bildspel-natur-cykel;
  animation-duration: 20s;
}

/* Fasförskjutning enligt kundens order "lat bildspelen bladdra i otakt" —
   se kommentaren vid .bildspel--tyg ovan för hela uträkningen. */
.bildspel.bildspel--natur img:nth-child(1) { animation-delay: -2.5s; }
.bildspel.bildspel--natur img:nth-child(2) { animation-delay: 2.5s; }
.bildspel.bildspel--natur img:nth-child(3) { animation-delay: 7.5s; }
.bildspel.bildspel--natur img:nth-child(4) { animation-delay: 12.5s; }

/* Nyckelbilder för 25 % av varvet = 5 s av 20 s (in 0–5 %, hel 5–25 %,
   ut 25–30 %) — övertoning enligt rättelsen 2026-10-20 kväll (kundens
   rapport "det blev fel" och "bildspelen"): uttoningen slutar 1 s in i
   nästa bilds lucka (30 % = 6 s = S+F), samtidigt som nästa tonar 0→1
   under samma 1 s, så summan av opacity är 1 genom bytet och kortets vita
   bakgrund syns aldrig. */
@keyframes bildspel-natur-cykel {
  0% { opacity: 0; }
  5% { opacity: 1; }
  25% { opacity: 1; }
  30% { opacity: 0; }
  100% { opacity: 0; }
}

/* Bildspel med uppslag ur kokboken Första Kökshandboken på grafisk-form.html
   (kundens order 2026-10-20, ordagrant: "Bildspel til grafisk form"). Samma
   sorts bildspel som Fulltank-uppslagen ovan — helt utan JavaScript, utan
   synlig text och utan knappar eller pilar: uppslagen byts av sig själva.
   Sju uppslag ur boken (2802x2102), så rutan får deras egen proportion, och
   varje uppslag visas i 5 s (35 s per varv = 7 bilder × 5 s). Egna
   nyckelbilder, eftersom andelarna i bildspel-cykel är räknade för 4 s per
   bild — här omräknade för 5 s per uppslag (14,3 % av varvet = 5 s av 35 s;
   samma in- och uttoning som bildspel-cykel, och procentandelarna blir
   identiska eftersom båda cyklerna har sju bilder). Reglerna ovan för
   .bildspel gäller alltjämt — detta block ändrar bara proportion, tempo och
   fasförskjutningar. */
.bildspel.bildspel--koksbok {
  aspect-ratio: 2802 / 2102;
}

.bildspel.bildspel--koksbok img {
  animation-name: bildspel-koksbok-cykel;
  animation-duration: 35s;
}

.bildspel.bildspel--koksbok img:nth-child(2) { animation-delay: 5s; }
.bildspel.bildspel--koksbok img:nth-child(3) { animation-delay: 10s; }
.bildspel.bildspel--koksbok img:nth-child(4) { animation-delay: 15s; }
.bildspel.bildspel--koksbok img:nth-child(5) { animation-delay: 20s; }
.bildspel.bildspel--koksbok img:nth-child(6) { animation-delay: 25s; }
.bildspel.bildspel--koksbok img:nth-child(7) { animation-delay: 30s; }

/* Samma övertoning som bildspel-cykel (se rättelsen 2026-10-20 kväll där),
   omräknad för 5 s per uppslag (14,3 % av varvet = 5 s av 35 s) och toning
   F = 1 s: in 0–2,9 %, hel 2,9–14,3 %, ut 14,3–17,2 % (17,2 % = 6 s = S+F).
   uttoningen slutar 1 s in i nästa uppslags lucka, samtidigt som nästa
   tonar 0→1 under samma 1 s — summan av opacity är 1 genom bytet. */
@keyframes bildspel-koksbok-cykel {
  0% { opacity: 0; }
  2.9% { opacity: 1; }
  14.3% { opacity: 1; }
  17.2% { opacity: 0; }
  100% { opacity: 0; }
}

/* Bildspel med uppslag ur projektet "Gård och torp i stan" på grafisk-form.html
   (kundens orderer 2026-10-21, ordagrant: "gör ett bildspel av dessa" med fem
   bilagor, "under grafisk design" och "Istan, bildspel, två bilder" med två nya
   uppslag). Samma sorts bildspel som Fulltank- och kokboksuppslagen ovan —
   helt utan JavaScript, utan synlig text och utan knappar eller pilar:
   uppslagen byts av sig själva. UPDATERAT 2026-10-21: spelet hade sju bilder
   och 35 s-cykel; kunden drog ut istan-franzen-92-95-1.jpg ("Nio råd", eget
   kort) och de två porten-uppslagen (eget bildspel .bildspel--porten) — nu
   FYRA bilder och 20 s-cykel. Rutan har bildernas ungefärliga proportion
   3/2 (samma val som .bildspel--tyg och .bildspel--natur — bilderna varierar
   några pixlar i höjd och object-fit: contain i grundregeln gör att ingen
   beskärs), och varje uppslag visas i 5 s (20 s per varv = 4 bilder × 5 s).
   Nyckelbilderna enligt rättelsen 2026-10-20 kväll (verklig övertoning):
   in 0–5 %, hel 5–25 %, ut 25–30 % (F = 1 s). FAS: bild 1 har -2,5 s
   animation-delay och övriga är förskjutna lika mycket — kundens order
   2026-10-20 "lat bildspelen bladdra i otakt". Första bilden syns direkt
   vid laddning. Reglerna ovan för .bildspel gäller alltjämt — detta block
   ändrar bara proportion, tempo och fasförskjutningar. */
.bildspel.bildspel--istan {
  aspect-ratio: 3 / 2;
}

.bildspel.bildspel--istan img {
  animation-name: bildspel-istan-cykel;
  animation-duration: 20s;
}

.bildspel.bildspel--istan img:nth-child(1) { animation-delay: -2.5s; }
.bildspel.bildspel--istan img:nth-child(2) { animation-delay: 2.5s; }
.bildspel.bildspel--istan img:nth-child(3) { animation-delay: 7.5s; }
.bildspel.bildspel--istan img:nth-child(4) { animation-delay: 12.5s; }

/* Övertoning enligt rättelsen 2026-10-20 kväll (F = 1 s av 20 s = 5 %,
   hålfasen slutar vid S/T = 25 %, uttoningen vid (S+F)/T = 30 %). */
@keyframes bildspel-istan-cykel {
  0% { opacity: 0; }
  5% { opacity: 1; }
  25% { opacity: 1; }
  30% { opacity: 0; }
  100% { opacity: 0; }
}

/* Bildspel med portens två uppslag på grafisk-form.html (kundens order
   2026-10-21, ordagrant: "ta ur portens två uppslag och publicera i ett
   separat bildspel"). Uppslagen togs ur Istan-bildspelet ovan:
   istan-uppslag.jpg ("Porten är husets ansikte") och
   ny-istan-portar-64-72-3.jpg ("portar", 1910–1950-tal). Samma sorts
   bildspel som övriga på sidan — helt utan JavaScript, utan synlig text
   och utan knappar eller pilar. Två uppslag, 5 s var (10 s per varv),
   proportion 3/2 som i Istan-spelet. Nyckelbilder enligt rättelsen
   2026-10-20 kväll: in 0–10 %, hel 10–50 %, ut 50–60 % (F = 1 s av 10 s).
   FAS: bild 1 har -1,2 s animation-delay — tredje fasläget på sidan
   (koksbok/uppslag/mastarna 0 s, Istan -2,5 s, porten -1,2 s), så inga
   spel byter bild samtidigt (kundens order 2026-10-20 "lat bildspelen
   bladdra i otakt"). Reglerna ovan för .bildspel gäller alltjämt. */
.bildspel.bildspel--porten {
  aspect-ratio: 3 / 2;
}

.bildspel.bildspel--porten img {
  animation-name: bildspel-porten-cykel;
  animation-duration: 10s;
}

.bildspel.bildspel--porten img:nth-child(1) { animation-delay: -1.2s; }
.bildspel.bildspel--porten img:nth-child(2) { animation-delay: 3.8s; }

@keyframes bildspel-porten-cykel {
  0% { opacity: 0; }
  10% { opacity: 1; }
  50% { opacity: 1; }
  60% { opacity: 0; }
  100% { opacity: 0; }
}

/* Tillgänglighet: visa första bilden stilla om webbläsaren avvisar automatisk
   rörelse (prefers-reduced-motion) — gäller ALLA bildspel: grundregeln och
   varje modifierare (.bildspel--uppslag, .bildspel--farja, .bildspel--tyg,
   .bildspel--natur, .bildspel--koksbok, .bildspel--istan,
   .bildspel--porten). Ett enda block, lagt sist efter samtliga
   modifierarblock, så att animation: none vinner över deras animation-name
   och animation-duration (samma specificitet, men senare i källan). Detta
   ersätter de tre tidigare spridda media queries — den vid rad 935 skrevs
   över av modifierarnas egna regler, vilket gjorde att .bildspel--uppslag
   animerade ändå (fel upptäckt 2026-10-20, åtgärdat på Heads order).
   Ingen förändring i normalt läge — bara när webbläsaren avvisar rörelse. */
@media (prefers-reduced-motion: reduce) {
  .bildspel img,
  .bildspel.bildspel--uppslag img,
  .bildspel.bildspel--farja img,
  .bildspel.bildspel--tyg img,
  .bildspel.bildspel--natur img,
  .bildspel.bildspel--istan img,
  .bildspel.bildspel--porten img,
  .bildspel.bildspel--koksbok img {
    animation: none;
    opacity: 0;
  }

  .bildspel img:first-child,
  .bildspel.bildspel--uppslag img:first-child,
  .bildspel.bildspel--farja img:first-child,
  .bildspel.bildspel--tyg img:first-child,
  .bildspel.bildspel--natur img:first-child,
  .bildspel.bildspel--koksbok img:first-child {
    opacity: 1;
  }
}

/* Smala skärmar: två spalter vid ≤1024px, en spalt vid ≤768px */
@media (max-width: 64rem) {
  /* Hävandet av rubrikstorleken (2,8rem) togs bort 2026-11-03 — rubriken är
     nu liten (1,25rem) på alla skärmar (kundens order). */

  .galleri__rutnat {
    column-count: 2;
  }

  /* 2-spaltersläget: span-2- och span-3-korten (Quizbok, Istanbul_1)
     blir hela bredden */
  .galleri__kolumn--span-2 > .verk {
    width: 100%;
  }
}


/* Par-rad: två verk-kort sida vid sida på samma rad med 30px mellanrum
   (kundens order 2026-10-17: "Lägg streetsmart_2 till höger om streetsmart_1"
   och "Glöm inte 30 px space på sidan med illustrationer"). Raden bryter ut
   ur murverket (column-span: all) och tar hela bredden. Kolumnbredderna
   styrs av kundens order 2026-10-17 "Streetsmart_2, lägg på en spalt"
   (se reglerna nedan): vänster 2 spalter (750px), höger 1 spalt (360px). */
.galleri__par {
  column-span: all;
  display: flex;
  gap: 30px;
  margin: 0 0 30px;
}

.galleri__par > .galleri__kolumn {
  flex: 0 0 auto;
  min-width: 0;
  padding-bottom: 0;
}

/* Par-radens kolumner (kundens order 2026-10-17: "Streetsmart_2, lägg på
   en spalt" = 1 spalt/360px till höger, Streetsmart 2 spalter/750px till
   vänster). Samma formel som rutnätets spaltbredder ovan
   ((100% - 60px)/3 per spalt med 30px mellanrum), så raden blir
   750px + 30px + 360px = 1140px (hela behållarbredden) och förhållandet
   2:1 följer spaltbredderna även på mellanbredder utan att krocka. */
.galleri__par > .galleri__kolumn:first-child {
  width: calc((100% - 60px)/3*2 + 30px); /* 2 spalter + mellanrum = 750px */
}

.galleri__par > .galleri__kolumn:last-child {
  width: calc((100% - 60px)/3);          /* 1 spalt = 360px */
}

/* Omvänd par-rad på fotografi.html: potatis-kortet till vänster om
   färjabildspelet (kundens order 2026-10-19: "Potatisarna placeras till
   vänster om färjan"). Denna order ersätter kundens order 2026-10-19
   "lägg potatisarna till höger om färja" (äldre order, står kvar som
   historik). Modifikatorn galleri__par--smal-forst speglar standardraden:
   första kolumnen 1 spalt/360px, sista 2 spalter/750px, 30px mellanrum.
   Reglerna har samma selektorspecificitet som grundreglerna ovan men ligger
   efter dem, så de vinner på breda skärmar; mediafrågan för <=48rem längre
   ned ligger ännu senare med samma specificitet och vinner på smala skärmar,
   så staplingen (30px mellanrum) blir oförändrad. Illustrationssidans
   par-rad (Streetsmart/Kaffesump) använder inte modifikatorn och är
   oförändrad: vänster 2 spalter/750px, höger 1 spalt/360px. */
.galleri__par--smal-forst > .galleri__kolumn:first-child {
  width: calc((100% - 60px)/3);          /* 1 spalt = 360px */
}

.galleri__par--smal-forst > .galleri__kolumn:last-child {
  width: calc((100% - 60px)/3*2 + 30px); /* 2 spalter + mellanrum = 750px */
}

/* Smala skärmar: raden staplas med 30px mellanrum och korten får samma
   maxbredd som övriga kort (360px centrerat vid <=768px). */
@media (max-width: 48rem) {
  .galleri__par {
    flex-direction: column;
    align-items: center;
    gap: 30px;
  }

  .galleri__par > .galleri__kolumn,
  .galleri__par > .galleri__kolumn:first-child,
  .galleri__par > .galleri__kolumn:last-child {
    width: 100%;
    flex: 0 0 auto;
  }

  .galleri__par > .galleri__kolumn > .verk {
    max-width: 360px;
    margin-inline: auto;
    width: 100%;
  }
}

@media (max-width: 48rem) {
  .galleri__rutnat {
    column-count: 1;
  }

  /* Enspaltsläget: alla kort, även span-2 och span-3, tillbaka till 1 spalt
     med kortet max 360px centrerat */
  .galleri__kolumn > .verk,
  .galleri__kolumn--span-2 > .verk {
    max-width: 360px;
    margin-inline: auto;
    width: 100%;
  }

  /* Mindre sidhuvudspadding även på smala skärmar (kundens order 2026-11-03:
     liten, vänsterställd rubrik — inte onödigt luftig yta). */
  .sidhuvud {
    padding: 1rem;
  }

  .innehall {
    padding: 30px 30px 45px;
  }
}

/* ------------------------------------------------------------------
   Butiken 2026-10-19: köpknappen och köpsidan (sid 2,
   kopsida-<nyckel>.html) enligt kundens order 2026-10-19. Sid 1
   (shop.html) visar per produkt bara bilden + köpknappen; knappen
   länkar till köpsidan där kunden väljer storlek, ser priset för den
   storleken och går vidare till kassan. Allt är ren CSS —
   radioknapparna styr pris och köpknapp via :has() (samma mönster som
   .verkkort__kop använder på shop.html). Ingen JavaScript. */

/* Köpknappen: 10 % svart yta med svart text, rektangulär (kundens order
   2026-10-19 "Köpknappen 10% svart med svart text" — ersätter den svarta
   ytan med vit text från mockupen). Typografin är oförändrad: Poppins
   15px/300 — se design/typografi-spec.md, tabellen för browse-korten.
   Används både på shop.html (sid 1) och på köpsidorna (sid 2). Länk
   aldrig fet (kundens order 2026-10-15 "Länkar ska aldrig vara feta") —
   vikten 300 följer referensens knapp. Ingen understrykning; hover
   markerar klickbarheten med lätt opacitet. Fokusringen (3 px) kommer
   från den globala :focus-visible-regeln. */
.kopknapp {
  display: block;
  width: 100%;
  padding: 13px 24px;
  border-radius: 2px;
  background-color: rgba(0, 0, 0, 0.1);
  color: var(--text);
  font-family: "Poppins", sans-serif;
  font-size: 15px;
  font-weight: 300;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
}

.kopknapp:hover {
  opacity: 0.85;
}

/* Mallknappen på shop.html (imageholderns kort) är en span med samma
   utseende — ingen länk, produkten finns inte ännu. Pekaren blir
   standard (ingen klickbar yta). */
span.kopknapp {
  cursor: default;
}

/* Raden med köpknappen på shop.html-korten (sid 1). Egen klass i
   stället för .verkkort__kop, så länkstilen där (40% svart textfärg
   sedan kundens order 2026-10-20) inte smittar
   av sig på den svarta knappen. */
.verkkort__koprad {
  margin: 16px 0 0;
}

/* Köpsidan: två kolumner — bilden till vänster (2 delar) och
   köppanelen till höger (1 del), 30px mellanrum (sajtens fasta rytm).
   Staplas på smala skärmar (≤1024px, samma brytpunkt som
   layout-specens rutnät): då kommer bilden först. */
.kopsida__layout {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
  gap: 30px;
  align-items: start;
}

/* Produktbilden: originalfilen, obruten (ingen beskärning),
   object-fit: contain så bilden aldrig sträcks. */
.kopsida__bild {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
  background-color: var(--platshallare-yta);
}

/* Verkstiteln: sidans h1, serif enligt sajtens typografi (Playfair
   Display 3rem/700/1.4, 2.2rem ≤1024px — samma värden som
   sidhuvudstiteln och typografi-specens mätta verkstitel h1). */
.kopsida__verkstitel {
  margin: 0 0 24px;
  font-family: "Playfair Display", serif;
  font-size: 3rem;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: normal;
  text-transform: none;
  color: var(--text);
}

.kopsida__koppanel {
  min-width: 0;
}

/* Priset i mockupens prisplats: Poppins 18px/600 (typografi-specens
   prisetikett .textprice). Innan en storlek är vald visas
   .kopsida__pris-valj ("Välj en storlek.") i sajtens brödtextstil
   (Poppins 16px/300) och inget pris. */
.kopsida__prisblock {
  margin: 16px 0 0;
}

.kopsida__pris-valj {
  margin: 0;
  font-family: "Poppins", sans-serif;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

.kopsida__pris {
  margin: 0;
  font-family: "Poppins", sans-serif;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.6;
  color: var(--text);
}

/* Köpknappens rad på köpsidan (en knapp per storlek — href måste peka
   på rätt storlek utan JavaScript). */
.kopsida__kop {
  margin: 16px 0 0;
}

/* Horisontell avdelare mellan köpknappen och specblocket (mockupens
   ordning). */
.kopsida__avdelare {
  margin: 24px 0;
  border: 0;
  border-top: 1px solid #d9d9d9;
}

/* Specblocket: etiketter och värden i Poppins 16px/300 (typografi-
   specen: referensens specetiketter och specvärden har identiska
   typografivärden). dd har webbläsarens vänstermarginal som default —
   nollställd här. */
.kopsida__spec {
  margin: 0;
}

.kopsida__spec-etikett,
.kopsida__spec-varde {
  margin: 0;
  font-family: "Poppins", sans-serif;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.6;
  color: var(--text);
}

.kopsida__spec-varde {
  margin: 0 0 12px;
}

.kopsida__spec-varde:last-child {
  margin-bottom: 0;
}

/* Priset och köpknappen följer den valda storleken (kundens order
   2026-10-19: "Pris måste anges när en storlek är vald"). Grundläget
   (även webbläsare utan :has()) visar stora storleken, liksom
   köp-/nedladdningsraden gjorde på shop.html före :has()-stödet — då
   går köpet alltid att göra. Med :has() (alla aktuella webbläsare)
   visas "Välj en storlek." tills något är valt, och därefter priset
   och köpknappen för just den valda storleken (spannens data-storlek
   matchar radioknapparnas value). */
.kopsida__pris-valj {
  display: none;
}

.kopsida__pris,
.kopsida__kop-alternativ {
  display: none;
}

.kopsida__pris[data-storlek="large"],
.kopsida__kop-alternativ[data-storlek="large"] {
  display: block;
}

@supports selector(:has(*)) {
  .kopsida__pris-valj {
    display: block;
  }

  .kopsida__pris[data-storlek="large"],
  .kopsida__kop-alternativ[data-storlek="large"] {
    display: none;
  }

  .kopsida__koppanel:has(.storleksval__knapp:checked) .kopsida__pris-valj {
    display: none;
  }

  .kopsida__koppanel:has(.storleksval__knapp[value="small"]:checked) .kopsida__pris[data-storlek="small"],
  .kopsida__koppanel:has(.storleksval__knapp[value="small"]:checked) .kopsida__kop-alternativ[data-storlek="small"] {
    display: block;
  }

  .kopsida__koppanel:has(.storleksval__knapp[value="medium"]:checked) .kopsida__pris[data-storlek="medium"],
  .kopsida__koppanel:has(.storleksval__knapp[value="medium"]:checked) .kopsida__kop-alternativ[data-storlek="medium"] {
    display: block;
  }

  .kopsida__koppanel:has(.storleksval__knapp[value="large"]:checked) .kopsida__pris[data-storlek="large"],
  .kopsida__koppanel:has(.storleksval__knapp[value="large"]:checked) .kopsida__kop-alternativ[data-storlek="large"] {
    display: block;
  }
}

/* Köpsidan: smala skärmar (≤1024px) staplar kolumnerna — bilden överst
   och köppanelen under (kundens order 2026-10-19: "Staplas på smala
   skärmar"). Rubriken följer typografi-specens brytpunkt (2.2rem). */
@media (max-width: 64rem) {
  .kopsida__layout {
    grid-template-columns: 1fr;
  }

  .kopsida__verkstitel {
    font-size: 2.2rem;
  }
}
