/* ==========================================================================
   Italiaferie.com - hovedstilark
   Palett: terrakotta fra taktegel og de italienske jordfargene, sypressgrønt
   som motfarge, og et safrangult aksentinnslag - alt mot en travertinvasket
   bakgrunn. Terrakotta som primærfarge er bevisst: det er fargen som går
   igjen over hele landet, fra takene i Toscana til Amalfikystens fasader.

   KONTRASTREGNET (WCAG 2.1, formel fra kontrast.py sin lum()/kontrast()):
   --brand (#B5432A) brukes to steder som krever kontroll - som lenkefarge på
   hvit bunn (`a{color:var(--brand)}`) og som bakgrunn under hvit tekst i
   knapper/bannere (`.btn-brand`, `.velger-head`, cookie-knappene). Begge er
   samme tallpar (kontrast er symmetrisk): #B5432A mot #FFFFFF = 5,53:1.
   Det er over kravet på 4,5:1 for brødtekst OG 3:1 for stor tekst, så
   fargen som er gitt i oppgaven holdt mål uten justering - regnet ut med
   Python, ikke antatt. --brand-d (#8E3418) mot hvitt = 7,91:1, enda tryggere
   der den brukes (footer-bakgrunn, hover-tilstander).
   ========================================================================== */

:root {
  --brand:        #B5432A;   /* terrakotta / taktegel */
  --brand-d:      #8E3418;
  --brand-l:      #D06A4B;
  --accent:       #2E5140;   /* sypressgrønn */
  --accent-h:     #24402F;
  --accent-soft:  #E4EBE3;
  --blue:         #2E6E7E;   /* Middelhavet */
  --gold:         #E0A02B;   /* safran */
  --bg:           #F6F1E7;   /* travertin */
  --bg-2:         #EBE3D4;
  --white:        #FFFFFF;
  --text:         #22262B;
  --text-light:   #66707A;
  --border:       #E2D8C6;
  --good:         #3F9D77;
  --warn:         #E0A33B;
  --star:         #B5432A;

  --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;

  --r-sm: 8px;
  --r:    12px;
  --r-lg: 18px;
  --shadow: 0 2px 8px rgba(18,35,55,0.06), 0 8px 24px rgba(18,35,55,0.05);
  --shadow-lg: 0 10px 40px rgba(18,35,55,0.13);
  --maxw: 1180px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body { font-family: var(--sans); color: var(--text); background: var(--white); line-height: 1.65; overflow-x: hidden; }
img { max-width: 100%; display: block; }
a { color: var(--brand); text-decoration: none; transition: color .15s; }
a:hover { color: var(--accent); }

h1,h2,h3,h4 { font-weight: 700; line-height: 1.2; color: var(--text); letter-spacing: -0.01em; }
h1 { font-size: clamp(1.8rem, 4vw, 2.7rem); }
h2 { font-size: clamp(1.4rem, 3vw, 2rem); }
h3 { font-size: 1.2rem; }
p  { margin-bottom: 1rem; }

.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 1.2rem; }
.narrow { max-width: 760px; }

.section { padding: 3.2rem 0; }
.section.alt { background: var(--bg); }
.section-head { text-align: center; max-width: 640px; margin: 0 auto 2.2rem; }
.section-head .eyebrow { color: var(--accent); font-weight: 700; font-size: .82rem; letter-spacing: .12em; text-transform: uppercase; }
.section-head h2 { margin: .4rem 0 .6rem; }
.section-head p { color: var(--text-light); font-size: 1.05rem; }

/* ---------- Topp-nav ---------- */
.site-nav { position: sticky; top: 0; z-index: 100; background: rgba(255,255,255,.96); backdrop-filter: blur(10px); border-bottom: 1px solid var(--border); }
.nav-inner { max-width: var(--maxw); margin: 0 auto; padding: .55rem 1.2rem; display: flex; align-items: center; gap: 1.2rem; }
.nav-logo { display: flex; align-items: center; gap: .55rem; font-weight: 800; font-size: 1.18rem; color: var(--brand); letter-spacing: -.02em; }
.nav-logo:hover { color: var(--brand); }
.nav-logo-icon { width: 36px; height: 36px; border-radius: 10px; overflow: hidden; display: block; box-shadow: 0 1px 3px rgba(20,40,50,.18); }
.nav-logo-icon svg { width: 100%; height: 100%; display: block; }
.nav-logo-text span { color: var(--accent); }
.nav-menu { display: flex; align-items: center; gap: .05rem; margin-left: auto; }
/* MEGAMENYEN ER FORANKRET TIL HELE TOPPLINJA, IKKE TIL DET ENKELTE PUNKTET.
   Ti menypunkter er for mange til at et nedtrekk som henger under sin egen
   lenke kan holde seg innenfor skjermkanten på de siste postene - de ville
   rent geometrisk rive med seg sidelengs rulling for alle brukere, uansett
   skjermbredde. Løsningen (matcher docstringen i bygg.py sin nav_html()):
   .nav-dropdown er `position: static`, så den ikke lenger er et positionert
   anker. Panelet spenner i stedet `left: 0; right: 0` mot `.site-nav`, som
   allerede er `position: sticky` og dermed den nærmeste positionerte
   forelderen. Ytterpunktene kan da aldri renne utenfor - panelet er alltid
   like bredt som selve navigasjonslinja, uansett hvilket punkt som åpner det.
   .nav-dd-right-reglene fra den gamle per-punkt-forankringen er fjernet:
   de løste akkurat det problemet denne modellen gjør overflødig. */
.nav-link { padding: .5rem .38rem; border-radius: var(--r-sm); font-size: .82rem; font-weight: 600; color: var(--text); cursor: pointer; white-space: nowrap; }
.nav-link:hover { background: var(--bg); color: var(--brand); }

.nav-dropdown { position: static; }
.dropdown-menu { position: absolute; top: 100%; left: 0; right: 0; background: var(--white); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(6px); transition: .18s; }
.nav-dropdown:hover .dropdown-menu, .nav-dropdown:focus-within .dropdown-menu { opacity: 1; visibility: visible; transform: translateY(0); }
/* .dropdown-inner sentrerer og bryter kolonnene INNI det fullbrede panelet -
   samme --maxw-ramme som resten av siden, så innholdet linjer opp med
   toppmenyen over. auto-fit (ikke auto-fill) er bevisst: Reisemål har fem
   kolonner og Planlegg har sju seksjoner, og de skal få bryte til flere
   rader i stedet for å presses sammen til uleselig smale striper. */
.dropdown-inner { max-width: var(--maxw); margin: 0 auto; padding: 0 1.2rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: .2rem 1.6rem; }
/* .dropdown-inner sin egen padding er bevisst kun horisontal (matcher
   --maxw-rammen rundt resten av siden). Luft over/under kommer fra barna i
   stedet, slik at den ogsaa gjelder utittede kolonner (Verktoy-panelet har
   ingen .dropdown-kol-tittel, bare lenker rett i .dropdown-col). */
.dropdown-col { padding-top: 1.1rem; }
.dropdown-alle { grid-column: 1 / -1; border-top: 1px solid var(--border); margin-top: .3rem; padding: .7rem 0 1.1rem; }
.dropdown-alle a.more { color: var(--accent); font-weight: 700; }
.dropdown-kol-tittel { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; color: var(--text-light); margin-bottom: .45rem; }
.dropdown-col a { display: block; padding: .3rem .2rem; border-radius: 6px; font-size: .9rem; color: var(--text); font-weight: 500; }
.dropdown-col a:hover { color: var(--accent); background: var(--bg); }

.btn-search-icon { background: none; border: none; padding: .45rem; cursor: pointer; color: var(--text-light); font-size: 1.15rem; border-radius: var(--r-sm); }
.btn-search-icon:hover { background: var(--bg); color: var(--brand); }
.nav-toggle { display: none; background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--text); padding: .2rem .4rem; }

/* ---------- Knapper ---------- */
.btn { display: inline-flex; align-items: center; gap: .5rem; padding: .8rem 1.5rem; border-radius: var(--r-sm); font-weight: 700; font-size: .98rem; cursor: pointer; border: 2px solid transparent; transition: .15s; }
.btn-primary { background: var(--accent); color: #fff !important; }
.btn-primary:hover { background: var(--accent-h); transform: translateY(-1px); box-shadow: 0 6px 18px rgba(46,81,64,.4); }
.btn-brand { background: var(--brand); color: #fff !important; }
.btn-brand:hover { background: var(--brand-d); transform: translateY(-1px); }
.btn-ghost { background: var(--white); color: var(--brand) !important; border-color: var(--border); }
.btn-ghost:hover { border-color: var(--brand); background: var(--bg); }
.btn-lg { padding: 1rem 1.9rem; font-size: 1.05rem; }

/* ---------- Hero ---------- */
/* Rent bilde uten fargefilter - bare en nøytral mørk toning for lesbarhet. */
.hero { position: relative; background-color: var(--brand-d); background-image: var(--hero-img); background-size: cover; background-position: center; color: #fff; overflow: hidden; }
.hero::after { content:""; position:absolute; inset:0; background: rgba(10,14,20,.34); }
.hero-inner { position: relative; z-index: 2; max-width: var(--maxw); margin: 0 auto; padding: 4.8rem 1.2rem 4.2rem; display: grid; grid-template-columns: 1.1fr .9fr; gap: 2.5rem; align-items: center; }
.hero-inner.hero-solo { grid-template-columns: 1fr; justify-items: center; text-align: center; }
.hero-inner.hero-solo > div { max-width: 700px; }
.hero-inner.hero-solo .hero-actions { justify-content: center; }
.hero-inner.hero-solo p.lead { margin-left: auto; margin-right: auto; }
.hero h1 { color: #fff; margin-bottom: 1rem; text-shadow: 0 1px 3px rgba(0,0,0,.6), 0 3px 22px rgba(0,0,0,.5); }
.hero p.lead { font-size: 1.18rem; color: #fff; margin-bottom: 1.6rem; max-width: 32rem; text-shadow: 0 1px 3px rgba(0,0,0,.65), 0 2px 14px rgba(0,0,0,.55); }
.hero-actions { display: flex; gap: .8rem; flex-wrap: wrap; }
.hero-card { background: rgba(255,255,255,.97); color: var(--text); border-radius: var(--r-lg); padding: 1.6rem; box-shadow: var(--shadow-lg); }
.hero-card h3 { display: flex; align-items: center; gap: .5rem; margin-bottom: .3rem; }
.hero-card p { font-size: .92rem; color: var(--text-light); margin-bottom: 1rem; }
.hero-mini { display: flex; gap: .6rem; flex-wrap: wrap; }
.hero-mini a { font-size: .82rem; background: var(--bg); padding: .35rem .7rem; border-radius: 999px; font-weight: 600; color: var(--brand); }
.hero-mini a:hover { background: var(--accent-soft); color: var(--accent-h); }
.hero-credit { position: absolute; right: .7rem; bottom: .5rem; z-index: 3; font-size: .68rem; color: rgba(255,255,255,.7); text-shadow: 0 1px 4px rgba(0,0,0,.6); }

/* Sidehode med bilde for artikler/reisemål */
.page-hero { position: relative; min-height: 340px; display: flex; align-items: flex-end; color: #fff; background-color: var(--brand-d); background-size: cover; background-position: center; }
/* Helt rent bilde - ingen toning over bildet. Lesbarheten løses med tekstskygge. */
.page-hero .inner { position: relative; z-index: 2; max-width: var(--maxw); margin: 0 auto; width: 100%; padding: 2.2rem 1.2rem; }
.page-hero h1 { text-shadow: 0 1px 2px rgba(0,0,0,.85), 0 2px 6px rgba(0,0,0,.7), 0 4px 26px rgba(0,0,0,.6); }
.page-hero p { text-shadow: 0 1px 2px rgba(0,0,0,.85), 0 2px 8px rgba(0,0,0,.7), 0 4px 20px rgba(0,0,0,.6); }
.page-hero .kicker { box-shadow: 0 2px 10px rgba(0,0,0,.3); }
.page-hero .kicker { display:inline-block; background: var(--accent); color:#fff; font-weight: 700; font-size: .76rem; letter-spacing: .08em; text-transform: uppercase; padding: .28rem .8rem; border-radius: 999px; margin-bottom: .8rem; }
.page-hero h1 { color: #fff; margin: 0 0 .5rem; max-width: 22ch; }
.page-hero p { color: rgba(255,255,255,.92); font-size: 1.1rem; max-width: 44ch; margin: 0; }

/* ---------- Breadcrumb ---------- */
.breadcrumb { background: var(--bg); border-bottom: 1px solid var(--border); font-size: .85rem; }
.breadcrumb ol { list-style: none; display: flex; flex-wrap: wrap; gap: .4rem; padding: .7rem 0; align-items: center; }
.breadcrumb li { color: var(--text-light); }
.breadcrumb li a { color: var(--text-light); }
.breadcrumb li a:hover { color: var(--accent); }
.breadcrumb li::after { content: "/"; margin-left: .4rem; color: var(--border); }
.breadcrumb li:last-child::after { content: ""; }
.breadcrumb li:last-child { color: var(--text); font-weight: 600; }

/* ---------- Seksjonskort (meny på forsiden) ---------- */
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(250px, 100%), 1fr)); gap: 1.2rem; }
.scard { background: var(--white); border: 1px solid var(--border); border-radius: var(--r); padding: 1.5rem; box-shadow: var(--shadow); transition: .18s; display: block; }
.scard:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); border-color: var(--accent); }
.scard .ico { font-size: 1.7rem; margin-bottom: .6rem; }
.scard h3 { margin-bottom: .35rem; color: var(--text); }
.scard p { font-size: .9rem; color: var(--text-light); margin: 0; }

/* ---------- Reisemål-/bildekort (grid) ---------- */
.dest-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(250px, 100%), 1fr)); gap: 1.3rem; }
.dest-card { background: var(--white); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden; box-shadow: var(--shadow); transition: .18s; display: flex; flex-direction: column; }
.dest-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
.dest-card .ph { aspect-ratio: 3/2; background: var(--bg-2); background-size: cover; background-position: center; }
.dest-card .body { padding: 1rem 1.1rem 1.2rem; display: flex; flex-direction: column; flex: 1; }
.dest-card h3 { font-size: 1.1rem; margin-bottom: .15rem; }
.dest-card .grp { font-size: .76rem; color: var(--accent); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; margin-bottom: .5rem; }
.dest-card .desc { font-size: .88rem; color: var(--text-light); flex: 1; }
.dest-card .tags { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .8rem; }
.tag { font-size: .72rem; background: var(--bg); color: var(--text-light); padding: .2rem .55rem; border-radius: 999px; font-weight: 600; }

/* ---------- Artikkelinnhold ---------- */
.article { max-width: 760px; margin: 0 auto; padding: 2.4rem 1.2rem 3.5rem; }
.article p, .article ul, .article ol { font-size: 1.05rem; color: #313b3f; }
.article ul, .article ol { margin: 0 0 1.2rem 1.3rem; }
.article li { margin-bottom: .4rem; }
.article h2 { margin: 2rem 0 .8rem; }
.article h3 { margin: 1.5rem 0 .5rem; }
.article figure { margin: 1.5rem 0; }
.article figure img { border-radius: var(--r); width: 100%; }
.article figcaption { font-size: .8rem; color: var(--text-light); margin-top: .5rem; text-align: center; }
.lead-img { width: 100%; aspect-ratio: 16/8; object-fit: cover; border-radius: var(--r-lg); margin-bottom: 1.6rem; }
.lead { font-size: 1.18rem; color: #313b3f; }
.toc { background: var(--bg); border: 1px solid var(--border); border-radius: var(--r); padding: 1.1rem 1.4rem; margin: 1.6rem 0; }
.toc h2 { font-size: .78rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-light); margin-bottom: .6rem; }
.toc ul { list-style: none; margin: 0; display: grid; gap: .3rem; }
.toc a { font-size: .95rem; font-weight: 600; }

.article-figure { margin: .5rem 0 1.6rem; }
.article-figure img { width: 100%; max-height: 440px; object-fit: cover; border-radius: var(--r-lg); display: block; }
.article-figure figcaption { font-size: .85rem; color: var(--text-light); margin-top: .5rem; text-align: center; }
.img-credit { font-size: .74rem; color: var(--text-light); margin: .25rem 0 0; }
.img-credit a { color: var(--text-light); text-decoration: underline; }
.img-credit a:hover { color: var(--accent); }

.callout { background: var(--accent-soft); border-left: 4px solid var(--accent); border-radius: var(--r-sm); padding: 1.1rem 1.3rem; margin: 1.5rem 0; }
.callout.green { background: #e9f4ef; border-color: var(--good); }
.callout.blue { background: #e9f1f7; border-color: var(--blue); }
.callout.warn { background: #fbf3e2; border-color: var(--warn); }
.callout p:last-child { margin: 0; }
.callout strong { color: var(--text); }

.factbox { background: var(--bg); border: 1px solid var(--border); border-radius: var(--r); padding: 1.3rem 1.5rem; margin: 1.5rem 0; }
.factbox h3 { margin-bottom: .8rem; font-size: 1.05rem; }
.factbox dl { display: grid; grid-template-columns: auto 1fr; gap: .4rem 1rem; font-size: .92rem; }
.factbox dt { color: var(--text-light); font-weight: 600; }
.factbox dd { font-weight: 600; }

.pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0; }
.pros-cons > div { border-radius: var(--r); padding: 1.1rem 1.3rem; }
.pros { background: #e9f4ef; }
.cons { background: #fbeeea; }
.pros h4, .cons h4 { margin-bottom: .6rem; }
.pros-cons ul { list-style: none; margin: 0; }
.pros-cons li { font-size: .9rem; padding-left: 1.4rem; position: relative; margin-bottom: .45rem; }
.pros li::before { content: "✓"; position: absolute; left: 0; color: var(--good); font-weight: 800; }
.cons li::before { content: "✕"; position: absolute; left: 0; color: #c4553b; font-weight: 800; }

/* ---------- Intern lenking ---------- */
.related { background: var(--bg); border-top: 1px solid var(--border); }
.related h2 { text-align: center; margin-bottom: 1.5rem; }
.chips { display: flex; flex-wrap: wrap; gap: .6rem; justify-content: center; }
.chip { background: var(--white); border: 1px solid var(--border); border-radius: 999px; padding: .45rem 1rem; font-size: .88rem; font-weight: 600; color: var(--brand); }
.chip:hover { border-color: var(--accent); color: var(--accent); }

/* ---------- Footer ---------- */
.site-footer { background: var(--brand-d); color: rgba(255,255,255,.8); padding: 3rem 0 1.5rem; margin-top: 2rem; }
.footer-grid { display: grid; grid-template-columns: 1.4fr repeat(4, 1fr); gap: 2rem; }
.footer-brand .nav-logo { color: #fff; margin-bottom: .8rem; }
.footer-brand p { font-size: .88rem; color: rgba(255,255,255,.7); max-width: 22rem; }
.footer-col h2 { color: #fff; font-size: .82rem; text-transform: uppercase; letter-spacing: .1em; margin-bottom: .8rem; }
.footer-col a { display: block; color: rgba(255,255,255,.75); font-size: .9rem; padding: .22rem 0; }
.footer-col a:hover { color: var(--accent); }
.footer-bottom { border-top: 1px solid rgba(255,255,255,.15); margin-top: 2.2rem; padding-top: 1.3rem; display: flex; justify-content: space-between; flex-wrap: wrap; gap: .6rem; font-size: .82rem; color: rgba(255,255,255,.6); }

/* ---------- Søkemodal ---------- */
.search-modal { position: fixed; inset: 0; background: rgba(20,40,50,.55); backdrop-filter: blur(3px); z-index: 200; display: none; padding: 8vh 1rem 0; }
.search-modal.open { display: block; }
.search-box { max-width: 600px; margin: 0 auto; background: var(--white); border-radius: var(--r-lg); box-shadow: var(--shadow-lg); overflow: hidden; }
.search-box-head { display: flex; align-items: center; padding: .5rem .5rem .5rem 1.2rem; border-bottom: 1px solid var(--border); }
.search-box input { flex: 1; border: none; outline: none; font-size: 1.05rem; padding: .8rem .5rem; }
.search-box .close { background: none; border: none; font-size: 1.3rem; cursor: pointer; color: var(--text-light); padding: .5rem .8rem; }
.search-res { max-height: 50vh; overflow-y: auto; padding: .6rem; }
.search-res a { display: block; padding: .6rem .8rem; border-radius: var(--r-sm); }
.search-res a:hover, .search-res a.sel { background: var(--bg); }
.search-res .t { font-weight: 600; color: var(--text); }
.search-res .s { font-size: .8rem; color: var(--text-light); }
.search-res .empty { padding: 1rem; color: var(--text-light); font-size: .9rem; }

/* ---------- Hjelpere ---------- */
.center { text-align: center; }
.mt2 { margin-top: 2rem; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1.4rem; }
.muted { color: var(--text-light); }
.pill { display:inline-block; background: var(--accent-soft); color: var(--accent-h); font-weight: 700; font-size: .78rem; padding: .25rem .7rem; border-radius: 999px; }

/* ---------- Reisemålvelgeren ---------- */
.velger { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-lg); box-shadow: var(--shadow); overflow: hidden; }
.velger-head { background: var(--brand); color: #fff; padding: 1.4rem 1.6rem; }
.velger-head h2 { color: #fff; margin: 0; }
.velger-head p { color: rgba(255,255,255,.88); font-size: .92rem; margin: .3rem 0 0; }
.velger-body { padding: 1.6rem; display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem 2rem; }
.q .qhead { display: flex; justify-content: space-between; align-items: baseline; gap: .6rem; margin-bottom: .5rem; }
.q .qhead label { font-weight: 700; font-size: .96rem; }
.q .qhead .hint { font-size: .76rem; color: var(--text-light); text-align: right; }
.q .opts { display: flex; gap: .4rem; flex-wrap: wrap; }
.q .opts .opt { flex: 1; min-width: 0; padding: .55rem .5rem; border: 1.5px solid var(--border); background: var(--white); border-radius: var(--r-sm); font-size: .82rem; font-weight: 600; color: var(--text-light); cursor: pointer; transition: .12s; }
.q .opts .opt:hover { border-color: var(--brand-l); color: var(--brand); }
.q .opts .opt.on { background: var(--brand); border-color: var(--brand); color: #fff; }
.q .weight { display: flex; align-items: center; gap: .5rem; margin-top: .55rem; font-size: .74rem; color: var(--text-light); }
.q .weight input { flex: 1; accent-color: var(--accent); }
.q .weight .wv { min-width: 3.2em; text-align: right; font-weight: 700; }
.velger-foot { padding: 1.1rem 1.6rem; border-top: 1px solid var(--border); display: flex; gap: .8rem; flex-wrap: wrap; align-items: center; background: var(--bg); }
.velger-foot .spacer { flex: 1; }

.results { margin-top: 1.8rem; display: grid; gap: 1rem; }
.result-card { display: grid; grid-template-columns: 110px 1fr auto; gap: 1.1rem; align-items: center; background: var(--white); border: 1px solid var(--border); border-radius: var(--r); padding: .9rem 1.1rem; box-shadow: var(--shadow); transition: .15s; }
.result-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); border-color: var(--accent); }
.result-card .ph { width: 110px; height: 80px; border-radius: var(--r-sm); background: var(--bg-2); background-size: cover; background-position: center; }
.result-card h3 { font-size: 1.08rem; margin-bottom: .15rem; }
.result-card .meta { font-size: .82rem; color: var(--text-light); margin-bottom: .5rem; }
.match { text-align: center; min-width: 86px; }
.match .pct { font-size: 1.7rem; font-weight: 800; color: var(--brand); line-height: 1; }
.match .ring { font-size: .68rem; color: var(--text-light); text-transform: uppercase; letter-spacing: .06em; }
.match-bar { height: 6px; background: var(--bg-2); border-radius: 999px; margin-top: .35rem; overflow: hidden; }
.match-bar span { display: block; height: 100%; background: linear-gradient(90deg, var(--accent), var(--good)); }

/* Egenskapsbarer (profil + resultat) */
.traits { display: grid; gap: .55rem; }
.traits.mini { gap: .3rem; }
.trait { display: grid; grid-template-columns: 150px 1fr 34px; align-items: center; gap: .7rem; font-size: .86rem; }
.traits.mini .trait { grid-template-columns: 110px 1fr 30px; font-size: .78rem; }
.trait .lbl { color: var(--text); font-weight: 600; }
.trait .bar { height: 9px; background: var(--bg-2); border-radius: 999px; overflow: hidden; }
.traits.mini .trait .bar { height: 7px; }
.trait .bar span { display: block; height: 100%; background: linear-gradient(90deg, var(--brand-l), var(--accent)); border-radius: 999px; }
.trait .val { font-size: .78rem; color: var(--text-light); text-align: right; font-weight: 700; }

/* Reisemålprofil-kort på reisemålsider */
.dest-profil { background: var(--bg); border: 1px solid var(--border); border-radius: var(--r); padding: 1.4rem 1.5rem; margin: 1.8rem 0 2rem; }
.dest-profil h2 { margin: 0 0 .5rem; font-size: 1.25rem; }
.dest-profil .muted { font-size: .9rem; }
.dest-profil .traits { margin: 1rem 0 1.2rem; }

/* ---------- Responsivt / mobil ---------- */
@media (max-width: 980px) {
  .hero-inner { grid-template-columns: 1fr; gap: 1.8rem; }
  .footer-grid { grid-template-columns: 1fr 1fr; gap: 1.5rem; }
}
/* TI MENYPUNKTER, MAALT I EKTE NETTLESER (getBoundingClientRect), ikke
   gjettet ut fra tegnantall. .nav-inner er kappet til --maxw 1180 px, altsaa
   er innholdsbudsjettet KONSTANT 1141,6 px (1180 - 2 x 1,2rem polstring) for
   enhver skjermbredde fra 1180 px og oppover - en 1920 px-skjerm har ikke
   mer plass aa gi menyen enn en 1181 px-skjerm, fordi rammen uansett stopper
   ved 1180. Logoen matte 175,0 px og soekeikonet 32,8 px, med 1,2rem gap paa
   hver side - det legger 246,2 px i bunnen foer en eneste lenke er talt.

   Original .nav-link (.89rem/.5rem polstring) summerte lenkene til 965,8 px:
   246,2 + 965,8 = 1 212 px mot et budsjett paa 1 141,6 - class overrant
   SELV PAA DEN BREDESTE SKJERMEN. Basisregelen under (.82rem/.38rem) summerer
   871,7 px og holder seg med 23,7 px margin.

   Men budsjettet krymper videre naar .nav-inner selv blir smalere enn 1180:
   ved 1150,02 px (rett over hamburger-bruddpunktet paa 1150) er det bare
   1 111,6 px igjen, og lenkebudsjettet er dermed 865,4 px - for stramt for
   basisregelen alene. Derfor TO MELLOMLIGGENDE MEDIA-SPØRRINGER som strammer
   ytterligere paa vei mot bruddpunktet:
     @1320: .81rem/.34rem -> 851,2 px (23,7 -> 44,2 px margin, ogsaa ved 1180)
     @1220: .78rem/.3rem  -> 805,4 px (60,0 px margin selv ved 1150,02-pinsjen)
   Marginene er bevisst rikelige: maalingen bruker den fonten som faktisk er
   installert i maaleverktoyet, og en besokendes system-font (Segoe UI,
   San Francisco, Roboto ...) kan gi noen fa piksler annerledes bredde.

   ETT ENSIDIG BRUDDPUNKT per spørring, aldri et par (max-width:1199)/
   (min-width:1200): ved devicePixelRatio 1,5 treffer et slikt par ingen av
   delene. Alle tre spørringene under er derfor rene max-width.

   LEGGER DU TIL ET MENYPUNKT maa hele dette regnestykket gjores paa nytt. */
@media (max-width: 1320px) {
  .nav-link { padding: .46rem .34rem; font-size: .81rem; }
}
@media (max-width: 1220px) {
  .nav-link { padding: .4rem .3rem; font-size: .78rem; }
}
/* Hamburger-bruddpunktet ligger paa 1150 - rett under pinsjepunktet
   regnestykket over er verifisert mot (1150,02 px). Under dette blir
   megamenyen en full-bredde liste i stedet for et flytende panel: se
   nav_html() sin docstring i bygg.py for hvorfor panelet er forankret til
   HELE .site-nav (position: static paa .nav-dropdown, left/right: 0 paa
   .dropdown-menu) - den samme modellen gjelder ogsaa her, den blir bare
   usynlig fordi .dropdown-menu tvinges til position: static. */
@media (max-width: 1150px) {
  .nav-menu { position: fixed; inset: 56px 0 auto 0; background: var(--white); flex-direction: column; align-items: stretch; padding: 1rem; gap: .2rem; border-bottom: 1px solid var(--border); box-shadow: var(--shadow-lg); display: none; max-height: calc(100vh - 56px); overflow-y: auto; }
  .nav-menu.open { display: flex; }
  .nav-link { padding: .8rem; font-size: 1rem; border-radius: var(--r-sm); }
  .dropdown-menu { position: static; transform: none; opacity: 1; visibility: visible; box-shadow: none; border-top: none; border-bottom: none; display: block; }
  .dropdown-inner { max-width: none; margin: 0; padding: .3rem 0 .6rem 1rem; display: block; }
  /* nowrap trengs BARE i den absolutt posisjonerte desktop-dropdownen, der
     boksen kan vokse fritt. I mobilpanelet er bredden gitt av skjermen, og
     en lang etikett ville skjøve siden i sidled i stedet for å brytes.
     Ved 280 px er margen i dag bare 13 px. */
  .dropdown-col a { white-space: normal; }
  .dropdown-col { padding-top: 0; margin-bottom: .6rem; }
  .dropdown-kol-tittel { margin-top: .3rem; }
  .dropdown-alle { border-top: none; margin-top: 0; padding-top: 0; }
  .nav-toggle { display: block; margin-left: auto; }
  .grid-2, .pros-cons { grid-template-columns: 1fr; }
  .page-hero { min-height: 280px; }
  .velger-body { grid-template-columns: 1fr; }
  .result-card { grid-template-columns: 84px 1fr; }
  .result-card .match { grid-column: 2; text-align: left; display: flex; align-items: center; gap: .6rem; }
  .result-card .match-bar { flex: 1; margin-top: 0; }
  .trait { grid-template-columns: 120px 1fr 30px; }
}
/* Under 400 px får ikke logoteksten, søkeikonet og hamburgeren plass ved
   siden av hverandre: ved 320 px (iPhone SE) lå hamburgeren 36 px utenfor
   skjermkanten. Logoen krymper, og både polstring og mellomrom strammes.
   Målt: 341 px innhold i en 305 px ramme før, 270 px etter. */
@media (max-width: 400px) {
  .nav-inner { padding: .55rem .8rem; gap: .5rem; }
  .nav-logo { font-size: .95rem; gap: .4rem; }
  .nav-logo-icon { width: 28px; height: 28px; border-radius: 8px; }
}
/* Under 340 px (Galaxy Fold sammenslatt er 280) maa ogsaa .wrap slippe litt
   polstring, ellers stikker kortene 4 px utenfor. Maalt paa 280 px. */
@media (max-width: 340px) {
  .wrap { padding: 0 .8rem; }
  .nav-logo { font-size: .85rem; }
  .btn-search-icon { padding: .3rem; font-size: 1rem; }
}
@media (max-width: 480px) {
  .footer-grid { grid-template-columns: 1fr; }
  .section { padding: 2.4rem 0; }
  .hero-inner { padding: 3rem 1.2rem; }
}

/* --- Byline (sist oppdatert) --- */
.byline {
  font-size: .85rem;
  color: #6b7280;
  margin: 0 0 1.4rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid #e5e7eb;
}
.byline span { color: #374151; font-weight: 600; }

/* --- Stedskart (Finn hit) --- */
.place-map { margin: 2.6rem 0 1rem; }
.place-map h2 { margin-bottom: .8rem; }
.place-map iframe {
  width: 100%;
  height: 340px;
  border: 0;
  border-radius: 14px;
  box-shadow: 0 2px 10px rgba(0,0,0,.08);
  display: block;
}
.place-map .map-link { margin: .7rem 0 0; font-size: .92rem; }
.place-map .map-note { color: #9ca3af; font-size: .82rem; margin-left: .4rem; }
@media (max-width: 480px) { .place-map iframe { height: 260px; } }

/* --- Hopp-lenke (tilgjengelighet) --- */
.skip-link {
  position: absolute; left: 8px; top: -48px; z-index: 1000;
  background: var(--accent, #0e7c86); color: #fff; padding: .6rem 1rem;
  border-radius: 8px; text-decoration: none; transition: top .15s;
}
.skip-link:focus { top: 8px; }
#innehall { scroll-margin-top: 80px; }

/* --- Severdig i nærheten --- */
.nearby { margin: 2.4rem 0 1rem; }
.nearby h2 { margin-bottom: .8rem; }
.nearby-list { list-style: none; padding: 0; margin: 0; display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr)); gap: .5rem .9rem; }
.nearby-list li { padding: .5rem .8rem; border: 1px solid #e5e7eb; border-radius: 10px;
  display: flex; justify-content: space-between; align-items: center; gap: .6rem; }
.nearby-list a { font-weight: 600; text-decoration: none; }
.nearby-list a:hover { text-decoration: underline; }
.nearby-list .km { color: #9ca3af; font-size: .82rem; white-space: nowrap; }

/* ---- Cookie-samtykkebanner (GDPR / Consent Mode v2) ---- */
.cookie-consent{position:fixed;left:0;right:0;bottom:0;z-index:9999;background:#fff;
  border-top:3px solid var(--brand);box-shadow:0 -4px 24px rgba(14,80,102,.18);}
.cookie-consent[hidden]{display:none;}
.cookie-consent-inner{max-width:1100px;margin:0 auto;padding:.9rem 1.2rem;
  display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;justify-content:space-between;}
.cookie-consent-text{margin:0;font-size:.92rem;color:var(--text);line-height:1.45;flex:1 1 360px;}
.cookie-consent-text a{color:var(--brand);}
.cookie-consent-btns{display:flex;gap:.6rem;flex:0 0 auto;}
.btn-consent{cursor:pointer;border-radius:8px;padding:.55rem 1.3rem;font-size:.92rem;
  font-weight:600;border:2px solid var(--brand);transition:background .15s,color .15s;}
.btn-consent-accept{background:var(--brand);color:#fff;}
.btn-consent-accept:hover{background:var(--brand-d);border-color:var(--brand-d);}
.btn-consent-deny{background:#fff;color:var(--brand);}
.btn-consent-deny:hover{background:var(--bg);}
@media(max-width:560px){
  .cookie-consent-inner{flex-direction:column;align-items:stretch;gap:.7rem;padding:.9rem 1rem;}
  .cookie-consent-btns{justify-content:flex-end;}
}


/* ==========================================================================
   Italiaferie.com - tillegg til den arvede malen
   ========================================================================== */

/* ---------- Hero: helt rene bilder, ingen filter eller toninger ----------
   Malen vi forket fra (via Portugal, opprinnelig Kreta) la et mørkt lag over
   forsidens hero. Her vises bildet som det er; lesbarheten på undersidene
   løses utelukkende med tekstskygge og en tekstplate (under). Forsidens
   karusell har i tillegg en egen boks bak selve tekstblokken, se lenger
   ned - bildene der er ikke valgt ennå, så skygge alene kan ikke garanteres
   nok mot et lyst motiv. */
.hero::after { content: none !important; display: none !important; }
.hero { background-blend-mode: normal; filter: none; }
.page-hero { filter: none; }
.page-hero::before, .page-hero::after { content: none !important; }
/* ---------- Tekstplate i hero (undersider) ------------------------------
   Bildene er helt ufiltrerte. For at hvit rubrikktekst likevel skal la seg
   lese mot lyse foto, ligger teksten på en egen halvgjennomsiktig plate. Den
   dekker bare tekstblokken - fotoet rundt er urørt. */
.page-hero .hero-text {
  display: inline-block; max-width: 46rem;
  background: linear-gradient(180deg, rgba(8,40,38,.62), rgba(8,40,38,.74));
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  border-radius: var(--r); padding: 1.1rem 1.5rem 1.2rem;
  box-shadow: 0 6px 30px rgba(0,0,0,.25);
}
.page-hero .hero-text h1 { margin-bottom: .35rem; }
.page-hero .hero-text p { margin: 0; }
.page-hero .hero-text .kicker { margin-bottom: .55rem; }
@media (max-width: 640px) {
  .page-hero .hero-text { padding: .9rem 1.1rem 1rem; }
}

/* ---------- Tekstboks i forsidens karusell -------------------------------
   Karusellbildene er IKKE valgt ennå. Skygge og kontur (under) er nok mot
   bilder som faktisk er valgt for å ha mørke nok partier bak teksten - men
   det er et løfte vi ikke kan gi på forhånd her. Boksen pakker derfor selve
   tekstblokken (.hero-inner.hero-solo > div, som allerede finnes som
   omslag rundt kicker+h1+lead+knapper) i en halvgjennomsiktig, avrundet
   flate. Det er en boks bak TEKSTEN, ikke et filter over hele bildet - selve
   fotoet utenfor boksen er fortsatt urørt.

   ALFAVERDIEN ER REGNET UT, ikke gjettet, for det absolutte verste tilfellet:
   et helt HVITT bilde rett bak boksen (lum = 1,0). Med svart som overlegg er
   effektiv bakgrunn en gråtone g = 255 x (1 - alfa). WCAG krever >= 4,5:1 for
   hvit brødtekst (h1/lead er visuelt store, men vi målte mot det strengeste
   kravet uansett). Kontrast(hvit, gråtone) >= 4,5 løses ved alfa >= 0,5353 -
   under det tipper det over selv mot et fullstendig hvitt bilde. Vi bruker
   0,6 (rgba(0,0,0,.6)) som gir 5,74:1 i nøyaktig det samme verste tilfellet,
   med litt margin mot antialiasing i skriften. Regnet med samme lum()/
   kontrast()-formel som kontrast.py og karusellkontrast.py bruker. */
.hero-inner.hero-solo > div {
  background: rgba(0,0,0,.6);
  border-radius: var(--r-lg);
  padding: 1.6rem 2rem 1.8rem;
  -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px);
  box-shadow: 0 6px 30px rgba(0,0,0,.25);
}

/* Kraftig tekstskygge er BEHOLDT som ekstra lesbarhetshjelp oppå boksen -
   den ligger på selve bokstavene, ikke over fotoet, og mørker altså ikke
   ned bildet utenfor boksen. På undersidene (.page-hero, med sin egen
   tekstplate) er skyggen fortsatt eneste hjelpen ut over platen selv. */
.hero h1, .page-hero h1 {
  text-shadow: 0 0 6px rgba(0,0,0,.75), 0 1px 2px rgba(0,0,0,.95),
               0 2px 10px rgba(0,0,0,.85), 0 4px 30px rgba(0,0,0,.7); }
.hero p.lead, .page-hero p {
  text-shadow: 0 0 5px rgba(0,0,0,.7), 0 1px 2px rgba(0,0,0,.95),
               0 2px 10px rgba(0,0,0,.8), 0 4px 22px rgba(0,0,0,.65); }
.hero .pill { text-shadow: 0 1px 3px rgba(0,0,0,.8); }

/* Konturen under er en ekstra sikring for forsiden spesifikt: selv med
   boksen bak kan lyse KANTER av bildet skinne gjennom bak store bokstaver
   nær boksens rand. En tett mørk kontur rundt selve bokstavene syns ikke
   som en ramme, men løfter teksten ekstra mot lyse motiv. paint-order gjør
   at konturen havner bak glyfen, ikke oppå den. */
.hero-inner.hero-solo h1 {
  paint-order: stroke fill;
  -webkit-text-stroke: .5px rgba(8,20,32,.55);
  text-shadow: 0 0 2px rgba(8,20,32,.9), 0 0 8px rgba(8,20,32,.8),
               0 1px 2px rgba(0,0,0,.95), 0 2px 14px rgba(0,0,0,.85),
               0 6px 34px rgba(0,0,0,.7);
}
.hero-inner.hero-solo p.lead {
  text-shadow: 0 0 2px rgba(8,20,32,.85), 0 0 7px rgba(8,20,32,.8),
               0 1px 2px rgba(0,0,0,.95), 0 2px 12px rgba(0,0,0,.8),
               0 5px 26px rgba(0,0,0,.7);
}
.hero-inner.hero-solo .pill {
  text-shadow: 0 1px 2px rgba(0,0,0,.9), 0 0 6px rgba(0,0,0,.7); }

/* ---------- Footeren fikk en femte kolonne (Verktøy) --------------------
   Grunnmalen har "1.4fr repeat(4, 1fr)". Overstyringen ligger inne i en
   min-width-spørring, så den ikke rører de smale bruddpunktene der
   grunnmalen kollapser til to og én kolonne. */
@media not all and (max-width: 980px) {
  .footer-grid { grid-template-columns: 1.3fr repeat(5, 1fr); gap: 1.6rem; }
}

/* ---------- Verktøykort på forsiden ---------- */
.verktyg-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.3rem; }
.verktyg-kort { background: var(--white); border: 1px solid var(--border);
  border-radius: var(--r); padding: 1.5rem 1.5rem 1.6rem; box-shadow: var(--shadow);
  transition: .18s; display: block; }
.verktyg-kort:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg);
  border-color: var(--accent); }
.verktyg-kort .ikon { font-size: 1.8rem; line-height: 1; margin-bottom: .7rem;
  display: block; }
.verktyg-kort h3 { font-size: 1.12rem; margin-bottom: .3rem; }
.verktyg-kort p { font-size: .9rem; color: var(--text-light); margin: 0; }
@media (max-width: 820px) { .verktyg-grid { grid-template-columns: 1fr; } }

/* ---------- Karusellen som <img> i stedet for background-image --------
   Bakgrunnsbilder kan ikke ha srcset. Som <img> med object-fit ser det
   likt ut, men mobilen laster 480/800 px i stedet for 1800. */
.hero .serie img.bilde { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; opacity: 0; transition: opacity 1.5s ease; }
.hero .serie img.bilde.aktiv { opacity: 1; }

/* ---------- Responsive bilder ------------------------------------------
   Hero og kort bruker <img> i stedet for background-image. Det er eneste
   måten å få både srcset (riktig størrelse per skjerm) og lazy-lasting.
   Hubbene lastet før dette fullstore 1800 px-bilder til hvert kort - kostet
   mange MB per side i den arvede malen. */
.page-hero { overflow: hidden; }
.page-hero .hero-bild { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; z-index: 0; }
.dest-card img.ph { display: block; width: 100%; aspect-ratio: 3/2; height: auto;
  object-fit: cover; background: var(--bg-2); }

/* ---------- Reisemålvelgeren ---------------------------------------
   .velger-klassene arves fra malen; her ligger bare radene og
   treffkortene. Reglene er 0-3: null betyr "spiller ingen rolle". */
.vj-rad { display: flex; flex-direction: column; gap: .35rem; }
.vj-rad label { font-weight: 700; font-size: .95rem; display: flex;
  flex-direction: column; gap: .15rem; }
.vj-hjalp { font-weight: 400; font-size: .82rem; color: var(--text-light); }
.vj-rad input[type=range] { width: 100%; accent-color: var(--accent); cursor: pointer; }
.vj-rad output { font-size: .82rem; color: var(--accent); font-weight: 700;
  letter-spacing: .02em; }
.vj-traffar { margin-top: 1.8rem; }
.vj-rad select { padding: .55rem .7rem; border: 1px solid var(--border);
  border-radius: var(--r-sm); background: var(--white); font: inherit;
  font-size: .95rem; color: var(--text); width: 100%; cursor: pointer; }
.sv-kryssrad { padding: 0 1.6rem 1.4rem; display: flex; flex-wrap: wrap;
  gap: .7rem 1.6rem; }
.sv-kryss { display: flex; align-items: center; gap: .45rem; font-size: .93rem;
  font-weight: 600; cursor: pointer; }
.sv-kryss input { accent-color: var(--accent); width: 1.05rem; height: 1.05rem; }
.sv-taggar { font-size: .78rem; color: var(--accent); font-weight: 700;
  margin: .5rem 0 0; text-transform: lowercase; }
.pk-lista { margin-top: 1.8rem; }
.pk-lista ul { list-style: none; padding: 0; margin: 0; display: grid;
  grid-template-columns: 1fr 1fr; gap: .55rem 1.6rem; }
.pk-lista li { position: relative; padding-left: 1.6rem; font-size: .95rem;
  line-height: 1.45; }
.pk-lista li::before { content: "☐"; position: absolute; left: 0; top: -.05rem;
  color: var(--accent); font-size: 1.05rem; }
@media (max-width: 700px) { .pk-lista ul { grid-template-columns: 1fr; } }
.vj-kort .body { padding: 1rem 1.1rem 1.1rem; }
.vj-poang { display: inline-block; float: right; font-size: .78rem;
  font-weight: 700; color: var(--accent); }
@media (max-width: 700px) {
  .velger-body { grid-template-columns: 1fr; }
}

/* ---------- Tabeller (innholdet vårt bruker dem mye) ---------- */
.tabell-svep { overflow-x: auto; margin: 1.5rem 0; -webkit-overflow-scrolling: touch; }
.article table { border-collapse: collapse; width: 100%; font-size: .94rem;
  background: var(--white); }
.article th, .article td { border: 1px solid var(--border); padding: .6rem .8rem;
  text-align: left; vertical-align: top; }
.article th { background: var(--bg); font-weight: 700; color: var(--text);
  font-size: .88rem; }
.article tbody tr:nth-child(even) { background: #FBF9F4; }
.tabell-svep table { margin: 0; }

/* ---------- Regionene som underoverskrift på seksjonshuben ----------
   Menyen viser bare kategorien ("Severdigheter"). Regionene/øyene dukker
   først opp her. */
.hub-underrubrik { margin: 2rem 0 .9rem; font-size: 1.05rem; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--text-light);
  border-bottom: 1px solid var(--border); padding-bottom: .45rem; }
.hub-underrubrik:first-of-type { margin-top: .4rem; }

/* ---------- Notis / faktaruta (erstatter .callout i innholdet vårt) ---------- */
.article p.notis { background: var(--accent-soft); border-left: 4px solid var(--accent);
  border-radius: var(--r-sm); padding: 1rem 1.2rem; margin: 1.5rem 0; font-size: .96rem; }

/* OBS: rør ikke .footer-grid her. Grunnmalens media queries kollapser den til
   to og én kolonne, og en omdeklarering etter dem slår ut responsiviteten. */

/* ---------- Søkeresultatside (/sok) utover modalen ---------- */
.sok-sida { max-width: 820px; margin: 0 auto; padding: 2.4rem 1.2rem 3.5rem; }
.sok-falt { display: flex; gap: .6rem; margin-bottom: 1.6rem; }
.sok-falt input { flex: 1; border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: .8rem 1rem; font-size: 1.02rem; font-family: inherit; }
.sok-falt button { border: none; }
.sok-traffar { display: grid; gap: .6rem; margin-top: 1.2rem; }
.sok-traff { display: block; background: var(--white); border: 1px solid var(--border);
  border-radius: var(--r); padding: .9rem 1.1rem; box-shadow: var(--shadow); }
.sok-traff:hover { border-color: var(--accent); transform: translateY(-2px); }
.sok-traff .t { font-weight: 700; color: var(--text); display: block; }
.sok-traff .s { font-size: .82rem; color: var(--accent); font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; }
.sok-traff .d { font-size: .9rem; color: var(--text-light); margin-top: .2rem; }

/* ---------- Forsidens bildekarusell (samme mønster som prisniva.com) ------
   Fem bilder som krysser over hverandre med langsom overtoning. Ingen
   filter eller gradient ligger over dem - se tekstboksen lenger oppe i
   fila for hvorfor: bildene her er ikke endelig valgt, så det er boksen
   bak teksten, ikke et bildefilter, som garanterer lesbarheten. */
.hero .serie { position: absolute; inset: 0; z-index: 0; }
.hero .serie .bilde { position: absolute; inset: 0; background-size: cover;
  background-position: center; opacity: 0; transition: opacity 1.5s ease; }
.hero .serie .bilde.aktiv { opacity: 1; }
.hero { background-image: none; }
.hero .hero-inner { z-index: 2; }
@media (prefers-reduced-motion: reduce) {
  .hero .serie .bilde { transition: none; }
}

/* ---------- Cookie-innstillinger i footeren ---------- */
.footer-col button.lankknapp { display: block; background: none; border: none;
  padding: .22rem 0; font: inherit; font-size: .9rem; color: rgba(255,255,255,.75);
  cursor: pointer; text-align: left; }
.footer-col button.lankknapp:hover { color: var(--accent); }

/* ---------- Innholdsfortegnelse: kolonner når den er lang ---------- */
/* ÉN kolonne, alltid. To kolonner sparte høyde, men gjorde listen rotete:
   øyet måtte hoppe tilbake oppover midt i innholdsfortegnelsen, og
   rekkefølgen ble utydelig når antallet overskrifter var oddetall. En
   høyere liste som leses ovenfra og ned er bedre enn en kort en som må
   tolkes. */
.toc ul { grid-template-columns: 1fr; }

/* ---------- A-Å-listen på /alle-artikler ---------- */
.artikellista { columns: 2; column-gap: 2.4rem; list-style: none; margin: 0 0 1.6rem; }
.artikellista li { break-inside: avoid; margin-bottom: .35rem; }
@media (max-width: 640px) { .artikellista { columns: 1; } }

/* ---------- Vandringsvelgerens faktarad ------------------------------------
   Lengde, tid, stigning og nivå på ett kort. Den skal kunne leses i ett
   sveip, derfor egen rad i halvfet og i sterkere farge enn brødteksten. */
.vd-fakta { font-weight: 700; font-size: .88rem; color: var(--brand);
  margin: .1rem 0 .45rem; letter-spacing: .01em; }
.vj-kort .vd-fakta + .desc { margin-top: 0; }
.vd-kalla { font-size: .78rem; color: var(--text-light); font-style: italic;
  margin: -.25rem 0 .45rem; }
.vd-stangd { display: inline-block; background: #8a1c1c; color: #fff;
  font-size: .72rem; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; padding: .12rem .5rem; border-radius: 3px;
  margin-bottom: .35rem; }

/* ---------- Månedsvelgerens tabell ----------------------------------------
   Fire målte verdier per måned pluss én redaksjonell. Tabellen er fasiten,
   rangeringen ovenfor er bare én måte å lese den på. Bred tabell får egen
   rulling - siden selv får aldri rulle sidelengs. */
.mv-svep { overflow-x: auto; margin-top: 1.8rem;
  -webkit-overflow-scrolling: touch; }
.mv-tabell { border-collapse: collapse; width: 100%; min-width: 640px;
  font-size: .88rem; }
.mv-tabell th, .mv-tabell td { padding: .45rem .6rem; text-align: right;
  border-bottom: 1px solid var(--border); white-space: nowrap; }
.mv-tabell th:first-child, .mv-tabell td:first-child { text-align: left;
  font-weight: 700; }
.mv-tabell thead th { background: var(--bg); font-size: .8rem;
  text-transform: uppercase; letter-spacing: .04em; color: var(--text-light); }
.mv-tabell tbody tr.mv-topp { background: rgba(0,0,0,.035); }
.mv-tabell tbody tr.mv-topp td:first-child::after { content: " °5";
  color: var(--accent); }
.mv-rank { list-style: none; padding: 0; margin: 1.4rem 0 0; display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(190px, 100%), 1fr)); gap: .7rem; }
.mv-rank li { border: 1px solid var(--border); border-radius: var(--r);
  padding: .7rem .85rem; background: var(--white); }
.mv-rank .mv-namn { font-weight: 700; text-transform: capitalize; }
.mv-rank .mv-varde { font-size: .82rem; color: var(--text-light);
  margin-top: .2rem; }
.mv-rank li.mv-basta { border-color: var(--accent); border-width: 2px; }
.mv-matt { font-size: .72rem; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--accent); }
.mv-red { font-size: .72rem; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--text-light); }

/* ---------- Paraplyhubbenes seksjonsoverskrifter -------------------------
   /planlegg-reisen og /verktoy samler andre hubber. Overskriften er en
   lenke dit, og den skal se ut som en overskrift - ikke som
   brødtekstens lenker. */
.section-head h2 a { color: inherit; border-bottom: 2px solid transparent; }
.section-head h2 a:hover { color: var(--brand); border-bottom-color: var(--accent); }

/* ---------- Verktøyenes datatabeller -------------------------------------
   Datasettene bak verktøyene står som ekte tabeller i sidene, ikke bare i
   JavaScript. JavaScript filtrerer ved å sette hidden på radene; siden er
   fullt lesbar uten. Tabellene er brede, og ruller derfor i sin egen
   beholder - selve siden skal aldri rulle sidelengs. */
.vt-svep { overflow-x: auto; margin: 1.8rem 0; -webkit-overflow-scrolling: touch; }
.vt-tabell { border-collapse: collapse; width: 100%; font-size: .88rem;
  background: var(--white); }
.vt-tabell.vt-bred { min-width: 1080px; }
.vt-tabell.vt-smal { min-width: 560px; }
.vt-tabell caption { caption-side: top; text-align: left; font-size: .82rem;
  color: var(--text-light); padding: 0 0 .7rem; }
.vt-tabell th, .vt-tabell td { padding: .5rem .7rem; text-align: left;
  vertical-align: top; border-bottom: 1px solid var(--border); }
.vt-tabell thead th { background: var(--bg); font-size: .76rem;
  text-transform: uppercase; letter-spacing: .04em; color: var(--text-light);
  white-space: nowrap; }
.vt-tabell tbody th { font-weight: 700; }
.vt-tabell tbody tr:nth-child(even) { background: rgba(0,0,0,.02); }
/* Skjulte rader: nettleserens egen [hidden]-regel taper mot enhver senere
   display-regel på tr, så den slås fast her. */
.vt-tabell tr[hidden], .vt-svep[hidden], .vt-tabell[hidden] { display: none; }
.vt-num { text-align: right; white-space: nowrap; }
/* Prosakolonnene. Uten en minstebredde klemmer tabellalgoritmen en
   beskrivelse på to hundre tegn ned i en spalte på hundre piksler, og
   raden blir tre ganger høyere enn den trenger å være. */
.vt-tabell th.vt-tekst, .vt-tabell td.vt-tekst { min-width: 15rem; }
/* Løypenummeret under turnavnet: forvalterens egen merking, og den
   skal kunne leses av som den står på skiltet. */
.vt-kod { font-size: .74rem; font-weight: 400; letter-spacing: .03em;
  color: var(--text-light); text-transform: none; }
.vt-tabell td.vt-num, .vt-tabell th.vt-num { text-align: right; }

/* Reisemålstabellen har ní kriteriekolonner med lange overskrifter. De må
   få bryte, ellers blir tabellen dobbelt så bred som den trenger. */
.vt-tabell.vt-vid { min-width: 1200px; }
.vt-tabell.vt-vid thead th { white-space: normal; min-width: 5.5rem; }
/* Treffprosenten er et regnestykke, ikke data. Den er derfor tom uten
   JavaScript, og skal ikke ligne på en målt verdi når den fylles. */
.vt-tabell .vj-poang { float: none; display: table-cell; }

/* ---------- Ordlisten som definisjonsliste --------------------------------
   Ett oppslagsord med én forklaring er ikke en tabellrad, og <dl> sier det.
   <div>-en rundt hvert dt/dd-par er det HTML gir oss til å gruppere dem, og
   det er den JavaScript viser og skjuler. Merk at både .ol-post og .ol-bolk
   må få en egen display:none: en grid- eller blokkregel her slår nettleserens
   egen [hidden]-regel, og oppslagene ville da aldri bli borte. */
.ol-caption { font-size: .82rem; margin: 1.6rem 0 .6rem; }
.ol-liste { margin-bottom: 2rem; }
.ol-bolk h2 { margin: 2rem 0 .6rem; }
.ol-antall { font-size: .78rem; font-weight: 400; letter-spacing: .03em;
  color: var(--text-light); text-transform: none; }
.ol-dl { margin: 0; }
.ol-post { display: grid; grid-template-columns: minmax(9rem, 16rem) 1fr;
  gap: .2rem 1.4rem; padding: .5rem 0; align-items: baseline;
  border-bottom: 1px solid var(--border); }
.ol-post dt, .ol-post dd { margin: 0; }
.ol-it { font-weight: 700; }
.ol-ut { font-style: italic; font-size: .84rem; color: var(--text-light); }
.ol-merk { display: block; font-size: .86rem; color: var(--text-light);
  margin-top: .2rem; }
.ol-post[hidden], .ol-bolk[hidden] { display: none; }
@media (max-width: 560px) {
  .ol-post { grid-template-columns: 1fr; gap: .1rem; }
}

/* ---------- Månedsvelgerens fem soner ------------------------------------
   Alle fem står i dokumentet; JavaScript viser den ene leseren har valgt.
   .mv-bolk må få sin egen display:none - en section er blokk, og en senere
   blokkregel ville ellers slå nettleserens [hidden]. */
.mv-bolk[hidden] { display: none; }
.mv-bolk h3 { margin: 2rem 0 .35rem; }
.mv-kilde { font-size: .8rem; color: var(--text-light); margin: 0 0 .5rem;
  font-style: italic; }
.mv-om { margin: 0 0 .4rem; }
/* De tre best rangerte månedene merkes i den tabellen som vises. */
.vt-tabell tbody tr.mv-topp { background: rgba(0,0,0,.05); }
.vt-tabell tbody tr.mv-topp th:first-child::after { content: " ★";
  color: var(--accent); }

/* ---------- Fergestrekningene under avstandstabellen ---------------------
   Fergekolonnen navngir overfarten og lenker hit; forklaringen står én gang,
   som ekte tekst. Den lå før i hver eneste rad - den samme prosaen 447
   ganger - og et title-attributt ville bare flyttet stumheten. */
.fg-liste { margin: .8rem 0 1.6rem; }
.fg-post { padding: .6rem 0; border-bottom: 1px solid var(--border); }
.fg-post dt { font-weight: 700; margin: 0 0 .2rem; }
.fg-post dd { margin: 0; }
.fg-antall { color: var(--text-light); font-size: .86rem; }
.fg-post:target dt { color: var(--brand); }

/* ---------- Fullverdig fotokreditt VED bildet -----------------------------
   CC BY(-SA) 2, 3 og 4. Se bildkredit() i bygg.py.

   Den staar UNDER bildet, ikke oppaa: heroen har med vilje ikke noe moerkt
   overlegg (linje 493-496 slaar det av), og hvit tekst paa et lyst motiv er
   ikke lesbar. Under bildet er den alltid lesbar, uansett motiv.

   Fargen er IKKE var(--muted): denne sajten har ingen --muted, og en
   udefinert variabel faar hele regelen droppet uten feil - teksten ville
   arvet broedtekstfargen. Se css-udefinert-variabel-feiler-stille.

   Den er heller ikke var(--text-light) (#66707A). Maalt: 5,04:1 mot hvit,
   men bare 4,48:1 mot travertin (--bg) og 3,96:1 mot --bg-2. Karusellinja og
   seksjoner med vekslende bakgrunn ligger ikke paa hvit, saa den ville falt
   under AA nettopp der. #5A6572 gir 5,93 / 5,27 / 4,65 - over 4,5:1 paa alle
   tre bakgrunnene sajten bruker.

   Stoerrelsen er .78rem - stor nok til aa leses, liten nok til ikke aa
   konkurrere med ingressen. Ikke mindre: en kreditt som ikke kan leses er
   ingen kreditt. */
.bildekreditt-inline {
  margin: .45rem 0 0; font-size: .78rem; line-height: 1.5;
  color: #5A6572;
}
.bildekreditt-inline a {
  color: inherit; text-decoration: underline;
  text-decoration-thickness: 1px; text-underline-offset: 2px;
  text-decoration-color: rgba(90, 101, 114, .5);
}
.bildekreditt-inline a:hover,
.bildekreditt-inline a:focus-visible { text-decoration-color: currentColor; }

/* Etter heroen: samme tekstkolonne som resten av sida, hoeyrestilt saa den
   ikke konkurrerer med broedteksten. Venstrestilt paa smal skjerm, der den
   ellers brytes til flere linjer med ujevn hoeyrekant. */
.page-hero + .bildekreditt-inline,
.hero + .bildekreditt-inline {
  max-width: var(--maxw); margin: .5rem auto 0; padding: 0 1.2rem;
  text-align: right;
}
.bildekreditt-karusell { padding-bottom: .6rem; }
.article-figure figcaption .bildekreditt-inline { margin-top: .35rem; }
@media (max-width: 640px) {
  .page-hero + .bildekreditt-inline,
  .hero + .bildekreditt-inline { text-align: left; }
}

/* ---------- Kredittabellens fire filter ---------------------------------- */
.kredfilter {
  display: grid; gap: .8rem; margin: 1.6rem 0 .6rem;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}
.kredfilter label { display: block; font-size: .82rem; color: var(--text-light); }
.kredfilter label > span { display: block; margin-bottom: .25rem; font-weight: 600; }
.kredfilter input, .kredfilter select {
  width: 100%; padding: .5rem .6rem; font: inherit; font-size: .92rem;
  border: 1px solid var(--border); border-radius: var(--r-sm);
  background: var(--white); color: var(--text);
}
.kredfilter input:focus-visible, .kredfilter select:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 1px;
}
.kredtall { margin: .2rem 0 1rem; font-size: .88rem; color: var(--text-light); }
.kredtom { margin: 1rem 0; font-style: italic; color: var(--text-light); }
