/* ==========================================================================
   Leiklist.is — design system extracted from the prototype
   Drop this into: wp-content/themes/hello-elementor-child/style.css
   (or enqueue as leiklist-design.css)

   Adapted for Elementor: every structural ">" selector from the prototype
   has been replaced with an explicit class, because Elementor injects
   wrapper divs that break direct-child combinators.
   ========================================================================== */

/* ---------- 1. Tokens ---------------------------------------------------- */

:root{
  --purple:#3b1264;
  --purple-deep:#18082f;
  --purple-soft:#ede9f7;
  --magenta:#f024bd;
  --lime:#c9ff25;
  --ink:#171220;
  --muted:#6f6879;
  --paper:#fff;
  --line:#1712201f;
  /* NOTE: "Leiklist Sans" is NOT Rubik. Measured at 60px/820 the same string
     renders 1488px in Leiklist Sans vs 1582px in Rubik — ~6% narrower.
     Substituting Rubik will visibly reflow every heading. Use the real woff2. */
  --font:"Leiklist Sans",Arial,sans-serif;
  --heading-weight:820;
  /* NAMESPACED ON PURPOSE. Elementor's flexbox container sets `--width:100%`
     on every `.e-con`, which shadows a `:root{--width:1200px}` for all
     descendants — so `max-width:var(--width)` silently became 100% and every
     .inner-section rendered edge-to-edge. Do not rename this back. */
  --lk-width:1200px;
}

/* Self-hosted variable font. RELATIVE path: this stylesheet now lives in the
   child theme, so url() resolves against the theme folder whatever it is
   named — which matters, because the folder is hello-theme-child-master on
   staging and may differ again on live. Keep the woff2 in ./fonts/. */
@font-face{
  font-family:"Leiklist Sans";
  src:url("fonts/leiklist-sans-latin.woff2") format("woff2");
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
}

/* ---------- 2. Base ------------------------------------------------------ */

/* `clip`, not `hidden`: hidden would turn the root into a scroll container and
   break position:sticky. This is a SAFETY NET for deliberate full-bleed art
   (.hero-featured-image is 376px wide on a 360px phone by design) — it is NOT a
   substitute for fixing real overflow, and it will hide genuine layout bugs from
   a casual look. When QA'ing widths, disable this rule first and measure with it
   off; every overflow found on 17 Sept would have been invisible with it on. */
html{scroll-behavior:smooth;overflow-x:clip}

/* ---------------------------------------------------------------------------
 * ACCESSIBILITY — added 17 Sept, phase 5.4
 * ------------------------------------------------------------------------ */

/* Hello Elementor prints its own page title above the Elementor template, so
   every page carried TWO <h1>s ("Fréttir" from the theme, "Fréttir af sviðinu"
   from ours) and a stray 48px title bar under the sticky header. On the
   homepage the theme title read "Heim"; on Um okkur it read the lowercase slug.
   display:none removes it from the accessibility tree as well as the page.
   If Hello ever gains a proper "Disable page title" setting, prefer that and
   drop this rule. */
.page-header{display:none}

/* Visible keyboard focus. Nothing in this stylesheet defined one, so focus fell
   back to the UA ring, which all but vanishes against the purple surfaces. This
   is :focus-visible only, so it appears for keyboard users and never on a mouse
   click — the design is unchanged for anyone using a pointer. */
a:focus-visible,button:focus-visible,input:focus-visible,
select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{
  outline:3px solid var(--magenta);outline-offset:3px;border-radius:2px}

/* On magenta or purple backgrounds a magenta ring would disappear — invert. */
.cart-link:focus-visible,.hero a:focus-visible,.button.purple:focus-visible,
.site-footer a:focus-visible{outline-color:#fff}

body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font);
  overflow-x:hidden;
}

/* The !important is copied verbatim from the prototype and is load-bearing:
   it is what forces every heading to 820 regardless of the wrapper's inherited
   weight. Note this also means .hero-title's font-weight:850 never applies —
   the live prototype computes 820 there too, so this matches it exactly. */
body h1,body h2,body h3,body h4{
  text-wrap:balance;
  font-weight:var(--heading-weight)!important;
}

/* Elementor resets — kill the default content width so our own --width rules
   drive the layout, and strip the theme's link styling. */
.elementor a{color:inherit;text-decoration:none}

/* The rule above is 0,1,1 and so out-specifies any single-class colour on a
   link — `.cart-link{color:#fff}` never applied. Repeating those selectors
   with the element attached lifts them to 0,1,1 too, and later-wins settles
   the tie. Only links that set their own colour need this; everything else
   is meant to inherit. */
a.cart-link{color:#fff}
a.login-link,a.more-link{color:var(--purple)}
a.text-link{color:var(--magenta)}
.leiklist-page img{max-width:100%;display:block}

/* --- Elementor widget normalisation -------------------------------------
   Elementor wraps every widget in .elementor-element > .elementor-widget-container.
   Our classes land on the OUTER wrapper, so the inner heading/paragraph
   inherits its typography.

   CRITICAL: `font:inherit` is not optional. The browser's own h1{font-size:2em}
   / h2{font-size:1.5em} / font-weight:bold BEAT an inherited value, so without
   this every heading renders at double size and weight 700 instead of 820.
   Measured in a clean document: h1 69px -> 138px, h2 68px -> 102px. */
.leiklist-page .elementor-heading-title{
  font:inherit;
  letter-spacing:inherit;
  color:inherit;
  text-shadow:inherit;
  text-transform:inherit;
  text-wrap:inherit;
  margin:0;
  max-width:none;
}
.leiklist-page .elementor-widget-text-editor p{margin:0;max-width:none}
/* Let a positioned/sized HTML widget pass its box straight to its children */
.about-visual > .elementor-widget-container,
.why-image    > .elementor-widget-container,
.video-shade  > .elementor-widget-container{display:contents}

/* CRITICAL — .passthrough dissolves the widget wrapper completely.
   Without it, an Elementor widget wrapper becomes the containing block for
   any absolutely positioned markup inside it. Measured consequence: the hero
   background image collapses to 0x0 and the quick-link bar renders 2px wide
   in the wrong corner. Apply to any HTML widget whose contents must position
   against the SECTION rather than the widget. */
.passthrough,
.passthrough > .elementor-widget-container,
.passthrough .elementor-shortcode{display:contents}

/* Elementor containers are width:100%, so one used as a shrink-to-fit flex
   item goes greedy and squeezes its siblings. Measured in the /leikstjorar
   CTA band: copy 503px -> 869px and the button 202px -> 164px.
   Add .fit to any container that should size to its content. */
.leiklist-page .fit{width:auto}

/* Shared section wrapper (was .section-pad) */
.section-pad{
  width:100%;
  max-width:var(--lk-width);
  margin:0 auto;
  padding:110px 24px;
}

/* Full-bleed sections that still align their inner content to --width */
.bleed-pad{
  max-width:none;
  padding-right:max(24px,calc((100vw - var(--lk-width))/2 + 24px));
  padding-left:max(24px,calc((100vw - var(--lk-width))/2 + 24px));
}

/* Eyebrow label */
.tag{
  color:var(--magenta);
  letter-spacing:.12em;
  text-transform:uppercase;
  align-items:center;
  gap:8px;
  font-size:12px;
  font-weight:820;
  display:inline-flex;
}
.tag::before{content:"";background:currentcolor;width:19px;height:2px}
.tag.light{color:var(--lime)}

/* Buttons */
.button{
  letter-spacing:.07em;
  text-transform:uppercase;
  border:1px solid transparent;
  justify-content:center;
  align-items:center;
  gap:10px;
  min-height:50px;
  padding:0 23px;
  font-size:12px;
  font-weight:820;
  transition:transform .22s,box-shadow .22s,background .22s;
  display:inline-flex;
}
.button:hover{transform:translateY(-3px)}
.button.lime{background:var(--lime);color:#21112e;box-shadow:0 12px 35px rgba(201,255,37,.2)}
.button.purple{background:var(--purple);color:#fff;box-shadow:0 11px 28px rgba(59,18,100,.2)}

/* Inline "read more" link used across several sections */
.more-link{
  color:var(--purple);
  letter-spacing:.08em;
  text-transform:uppercase;
  align-items:center;
  gap:7px;
  font-size:12px;
  font-weight:820;
  display:inline-flex;
}
.more-link.magenta{color:var(--magenta)}
.more-link.lime{color:var(--lime)}

/* Shared big section heading */
.section-h2{
  letter-spacing:-.055em;
  text-wrap:balance;
  margin:15px 0 22px;
  font-size:clamp(45px,5vw,68px);
  font-weight:820;
  line-height:.96;
}
.section-lead{color:var(--muted);font-size:15px;line-height:1.8}

.center-heading{text-align:center;max-width:670px;margin:0 auto 55px}
.center-heading .tag{justify-content:center}

/* ---------- 2b. Header (Theme Builder) ----------------------------------- */

.top-shell{z-index:30;padding:0 24px;position:absolute;top:16px;left:0;right:0}
.topbar{
  width:100%;max-width:var(--lk-width);background:rgba(255,255,255,.97);
  border-radius:3px;grid-template-columns:220px 1fr auto;align-items:center;
  min-height:70px;margin:0 auto;padding:0 12px 0 20px;display:grid;
  box-shadow:0 16px 60px rgba(18,8,42,.22);
}
.logo{background:var(--purple-deep);align-self:stretch;align-items:center;width:205px;margin-left:-20px;padding:0 18px;display:flex}
.logo img{object-fit:contain;object-position:left center;width:100%;height:58px}
.main-nav{justify-content:center;align-self:stretch;gap:clamp(18px,2vw,31px);display:flex}
.nav-group{align-items:stretch;display:flex;position:relative}
.nav-group>a{
  color:#47404f;letter-spacing:.065em;text-transform:uppercase;white-space:nowrap;
  align-items:center;gap:7px;padding:27px 0 24px;font-size:12px;font-weight:780;
  display:inline-flex;position:relative;
}
.nav-group>.shop-nav-link{color:var(--purple)}
.nav-group>.shop-nav-link svg{width:16px;height:16px;color:var(--magenta)}
.nav-group>a::after{
  content:"";background:var(--magenta);height:2px;transition:transform .22s;
  position:absolute;bottom:18px;left:0;right:0;transform:scaleX(0);
}
.nav-group:hover>a::after,.nav-group:focus-within>a::after{transform:scaleX(1)}
.mega-menu{
  z-index:80;visibility:hidden;opacity:0;border-top:3px solid var(--magenta);
  background:#1d1a24;grid-template-columns:310px;width:max-content;padding:12px;
  transition:opacity .18s,transform .18s,visibility .18s;display:grid;
  position:absolute;top:100%;left:-26px;transform:translateY(10px);
  box-shadow:0 25px 65px rgba(12,5,25,.32);
}
.nav-group.wide .mega-menu{grid-template-columns:310px 310px;left:auto;right:-80px}
.nav-group:hover .mega-menu,.nav-group:focus-within .mega-menu{visibility:visible;opacity:1;transform:translateY(0)}
.mega-menu>a{
  color:rgba(255,255,255,.72);letter-spacing:.06em;text-transform:uppercase;
  border-bottom:1px solid rgba(255,255,255,.11);grid-template-columns:1fr 18px;
  align-items:center;gap:18px;min-height:58px;padding:0 18px;font-size:12px;
  font-weight:720;transition:background .18s,color .18s,padding .18s;display:grid;
}
.mega-menu>a:hover{color:#fff;background:rgba(255,255,255,.06);padding-left:25px}
.mega-menu>a svg{width:14px;color:var(--lime)}
.top-actions{align-items:center;gap:8px;display:flex}
.search-link{width:40px;height:40px;color:var(--purple);cursor:pointer;background:0 0;border:0;place-items:center;display:grid}
.login-link{
  min-height:40px;color:var(--purple);letter-spacing:.06em;text-transform:uppercase;
  align-items:center;gap:6px;padding:0 9px;font-size:11px;font-weight:800;display:inline-flex;
}
.login-link svg{color:var(--magenta)}
.cart-link{
  background:var(--purple);color:#fff;cursor:pointer;border:0;justify-content:center;
  align-items:center;gap:5px;min-width:44px;height:40px;display:inline-flex;
}
.cart-link span{color:var(--lime);font-size:12px;font-weight:800}
.menu-toggle{background:var(--purple);color:#fff;border:0;place-items:center;width:42px;height:42px;display:none}
/* Mobile drawer. Hidden on desktop; the `hidden` attribute (set by the JS in
   leiklist-nav.php) must beat the media-query `display:flex`, hence the
   explicit [hidden] rule. */
.mobile-nav{display:none}
.mobile-nav[hidden]{display:none!important}
.mobile-nav a{border-bottom:1px solid var(--line);letter-spacing:.07em;text-transform:uppercase;padding:12px 5px;font-size:12px;font-weight:780}
.mobile-nav .shop-nav-link{color:var(--purple);align-items:center;gap:8px;display:flex}
.mobile-nav .shop-nav-link svg{color:var(--magenta)}
.mobile-menu-group{flex-direction:column;display:flex}
.mobile-menu-group>div{background:var(--purple-soft);grid-template-columns:1fr 1fr;padding:4px 10px 10px;display:grid}
.mobile-menu-group>div a{color:var(--muted);border-bottom:1px solid rgba(59,18,100,.1);padding:10px 7px;font-size:11px}

/* ---------- 3. Hero ------------------------------------------------------ */

.hero{
  color:#fff;
  background:var(--purple-deep);
  isolation:isolate;
  align-items:center;
  min-height:820px;
  padding:135px 24px 235px;
  display:flex;
  position:relative;
  overflow:hidden;
}
.hero::before{
  z-index:-1;content:"";
  mix-blend-mode:screen;
  background:linear-gradient(90deg,transparent,rgba(240,36,189,.13));
  width:50%;position:absolute;top:0;bottom:0;right:0;
}
/* The white diagonal sweep at the bottom of the hero */
.hero::after{
  z-index:5;content:"";
  clip-path:polygon(0 48%,44% 78%,100% 24%,100% 100%,0 100%);
  pointer-events:none;background:#fff;height:165px;
  position:absolute;bottom:-102px;left:-3vw;right:-3vw;
}
.hero-featured-image{
  z-index:-3;object-fit:cover;object-position:center 38%;
  width:100%;height:100%;
  animation:hero-focus 1.4s cubic-bezier(.2,.8,.2,1) both;
  position:absolute;inset:0;
}
.hero-featured-shade{
  z-index:-2;position:absolute;inset:0;
  background:
    linear-gradient(90deg,rgba(18,6,36,.94) 0%,rgba(26,8,49,.83) 38%,rgba(21,7,39,.28) 73%,rgba(13,5,26,.15) 100%),
    linear-gradient(rgba(12,4,24,.18) 0%,transparent 48%,rgba(15,5,30,.88) 100%);
}
.hero-noise{
  z-index:-1;opacity:.1;position:absolute;inset:0;
  background-image:radial-gradient(rgba(255,255,255,.35) .65px,transparent .65px);
  background-size:8px 8px;
  mask-image:linear-gradient(90deg,#000,transparent 85%);
}
.hero-inner{z-index:2;width:100%;max-width:var(--lk-width);margin:0 auto;position:relative}
.hero-copy{max-width:820px;animation:intro-left .9s cubic-bezier(.2,.8,.2,1) .12s both}

.hero-kicker{
  color:rgba(255,255,255,.78);
  letter-spacing:.14em;text-transform:uppercase;
  align-items:center;gap:12px;margin-bottom:22px;
  font-size:12px;font-weight:760;display:flex;
}
.hero-kicker i{
  background:var(--lime);width:5px;height:5px;
  box-shadow:0 0 18px var(--lime);border-radius:50%;
}
.hero-title{
  letter-spacing:-.052em;text-wrap:balance;
  text-shadow:0 3px 30px rgba(7,2,18,.28);
  max-width:790px;margin:0;
  font-size:clamp(50px,4.8vw,69px);font-weight:850;line-height:.97;
}
.hero-lead{
  color:rgba(255,255,255,.76);max-width:610px;
  margin:23px 0 27px;font-size:15px;line-height:1.72;
}
.hero-buttons{flex-wrap:wrap;gap:11px;display:flex}

/* ---- Hero slider -------------------------------------------------------
   Added beyond the prototype: the hero auto-advances through the latest
   posts. Copies are stacked in one grid cell so the hero never changes
   height between slides; only the active one is visible and it re-runs
   intro-left on the way in. Scoped with :has() so a single-post hero
   (count="1") still behaves exactly as the prototype does. */
/* The slides are stacked in one grid cell, so the single implicit column sizes
   itself to the WIDEST slide's max-content. On a phone that resolved to 430px
   inside a 332px hero, and the headline was clipped on both sides. minmax(0,1fr)
   makes the track follow the container instead of the content — the same fix,
   and the same cause, as the .topbar overflow. */
.hero-slides{display:grid;grid-template-columns:minmax(0,1fr)}
.hero-slides>.hero-copy{
  grid-area:1/1;animation:none;opacity:0;visibility:hidden;
  transition:opacity .45s ease,visibility .45s;
}
.hero-slides>.hero-copy.is-active{
  opacity:1;visibility:visible;
  animation:intro-left .9s cubic-bezier(.2,.8,.2,1) .12s both;
}
.hero:has(.hero-slides[data-interval]) .hero-featured-image{
  animation:none;opacity:0;transition:opacity .9s ease;
}
.hero:has(.hero-slides[data-interval]) .hero-featured-image.is-active{
  opacity:1;animation:hero-focus 1.4s cubic-bezier(.2,.8,.2,1) both;
}
/* Prev / next sit in the gutters either side of the 1200px column and only
   appear on hover, so the hero reads exactly as the prototype at rest. */
.hero-nav{
  z-index:7;opacity:0;cursor:pointer;color:#fff;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.26);
  backdrop-filter:blur(14px) saturate(1.1);
  place-items:center;width:52px;height:52px;padding:0;display:grid;
  position:absolute;top:50%;transform:translateY(-50%);
  transition:opacity .28s,background .2s,border-color .2s,color .2s;
}
.hero-nav.prev{left:max(16px,calc((100% - var(--lk-width))/2 - 68px))}
.hero-nav.next{right:max(16px,calc((100% - var(--lk-width))/2 - 68px))}
.hero:hover .hero-nav,.hero:focus-within .hero-nav{opacity:1}
.hero-nav:hover{background:var(--lime);border-color:var(--lime);color:var(--purple-deep)}
.hero-nav:focus-visible{opacity:1;outline:2px solid var(--lime);outline-offset:3px}
.hero-nav svg{width:20px;height:20px}

/* Glass quick-link bar overlapping the bottom of the hero */
.hero-quick-links{
  z-index:6;
  width:min(calc(100% - 48px),var(--lk-width));
  backdrop-filter:blur(18px) saturate(1.16);
  background:rgba(255,255,255,.09);
  border:1px solid rgba(255,255,255,.24);
  grid-template-columns:repeat(4,1fr);
  gap:1px;
  animation:intro-up .9s cubic-bezier(.2,.8,.2,1) .42s both;
  display:grid;position:absolute;bottom:82px;right:50%;
  overflow:hidden;transform:translate(50%);
  box-shadow:0 25px 70px rgba(7,2,18,.26);
}
.hero-quick-card{
  background:rgba(19,52,99,.48);
  grid-template-columns:35px 1fr 22px;
  align-items:center;min-width:0;min-height:132px;padding:21px 19px;
  transition:background .26s,transform .26s;
  display:grid;position:relative;overflow:hidden;
}
.hero-quick-card::after{
  content:"";background:var(--lime);transform-origin:0 center;
  height:2px;transition:transform .32s;
  position:absolute;bottom:0;left:0;right:0;transform:scaleX(0);
}
.hero-quick-card:hover{z-index:2;background:rgba(27,72,132,.7);transform:translateY(-4px)}
.hero-quick-card:hover::after{transform:scaleX(1)}
.hero-quick-card .quick-icon{width:21px;height:21px;color:var(--lime)}
.hero-card-number{
  color:rgba(255,255,255,.4);letter-spacing:.12em;
  font-size:11px;font-weight:800;position:absolute;top:13px;right:14px;
}
.hero-card-copy{flex-direction:column;min-width:0;display:flex}
.hero-card-copy strong{letter-spacing:-.015em;font-size:16px;line-height:1.15}
.hero-card-copy small{
  color:rgba(255,255,255,.58);letter-spacing:.07em;
  text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;
  margin-top:6px;font-size:11px;font-weight:650;overflow:hidden;
}
.hero-card-arrow{color:rgba(255,255,255,.65);width:17px;height:17px;transition:transform .25s,color .25s}
.hero-quick-card:hover .hero-card-arrow{color:var(--lime);transform:translate(3px)}

/* ---------- 4. Numbers --------------------------------------------------- */

.numbers{
  grid-template-columns:.75fr 2fr;align-items:end;gap:70px;
  padding-top:70px;padding-bottom:85px;display:grid;
}
.numbers-h2{letter-spacing:-.04em;max-width:300px;margin:12px 0 0;font-size:34px;line-height:1.03}
.number-grid{
  border-top:1px solid var(--line);border-left:1px solid var(--line);
  grid-template-columns:repeat(4,1fr);display:grid;
}
.number-cell{
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  min-height:130px;padding:25px 18px;
}
.number-cell strong{
  color:var(--purple);letter-spacing:-.06em;
  font-size:clamp(38px,4vw,57px);line-height:1;display:block;
}
.number-cell span{
  color:var(--muted);letter-spacing:.08em;text-transform:uppercase;
  margin-top:11px;font-size:12px;font-weight:730;display:block;
}

/* ---------- 5. About ----------------------------------------------------- */

.about{
  grid-template-columns:.93fr 1.07fr;align-items:center;
  gap:clamp(60px,8vw,115px);padding-top:75px;display:grid;
}
.about-copy .button{margin-top:22px}
.about-visual{min-height:520px;position:relative}
.image-frame{background:var(--purple-soft);width:88%;height:465px;padding:12px;position:absolute;top:0;right:0}
.image-frame::before{
  z-index:-1;content:"";
  background:repeating-linear-gradient(45deg,var(--lime),var(--lime) 2px,transparent 2px,transparent 8px);
  opacity:.72;width:150px;height:150px;position:absolute;top:-28px;right:-28px;
}
.image-frame img{object-fit:cover;width:100%;height:100%}
.about-badge{
  background:linear-gradient(135deg,var(--purple),#7d2ad0);color:#fff;
  flex-direction:column;justify-content:center;width:230px;min-height:120px;
  padding:20px;display:flex;position:absolute;bottom:22px;right:-8px;
  box-shadow:0 22px 48px rgba(59,18,100,.3);
}
.about-badge svg{color:var(--lime)}
.about-badge strong{margin:9px 0 2px}
.about-badge span{color:rgba(255,255,255,.68);font-size:12px}
.about-stat{
  text-align:center;background:var(--lime);width:150px;height:150px;
  color:var(--purple);border-radius:50%;
  flex-direction:column;justify-content:center;align-items:center;gap:12px;
  padding:24px 18px 20px;display:flex;position:absolute;bottom:10px;left:0;
}
.about-stat b{letter-spacing:-.06em;font-size:52px;font-weight:900;line-height:.72;display:block}
.about-stat span{
  letter-spacing:.055em;text-transform:uppercase;width:88px;
  font-size:11px;font-weight:900;line-height:1.25;display:block;
}

/* ---------- 6. Features -------------------------------------------------- */

.features{background:linear-gradient(180deg,#fff,var(--purple-soft))}
.feature-grid{max-width:var(--lk-width);grid-template-columns:repeat(3,1fr);gap:18px;margin:0 auto;display:grid}
.feature-card{
  background:#fff;min-height:450px;
  transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s;
  position:relative;overflow:hidden;box-shadow:0 18px 42px rgba(28,14,48,.08);
}
.feature-card:hover{transform:translateY(-9px);box-shadow:0 30px 65px rgba(28,14,48,.15)}
.feature-image{height:190px;position:relative;overflow:hidden}
.feature-image img{object-fit:cover;filter:saturate(.65);width:100%;height:100%;transition:transform .7s}
.feature-card:hover .feature-image img{transform:scale(1.06)}
/* Kvasir card uses a zoomed background crop instead of a plain image */
.feature-image.kvasir-card-art{
  background:url("/wp-content/uploads/leiklist/kvasir-reference.jpg") 68% 6%/278% auto no-repeat #fff;
  transition:background-size .5s;
}
.feature-image.kvasir-card-art img{opacity:0}
.feature-card:hover .feature-image.kvasir-card-art{background-size:286% auto}
.feature-image .feature-num{
  background:var(--lime);width:40px;height:40px;color:var(--purple);
  place-items:center;font-size:12px;font-weight:850;display:grid;
  position:absolute;top:14px;right:14px;
}
.feature-content{padding:30px}
.feature-content svg{color:var(--magenta)}
.feature-content h3{letter-spacing:-.035em;margin:20px 0 10px;font-size:27px}
.feature-content p{min-height:64px;color:var(--muted);margin:0 0 22px;font-size:13px;line-height:1.75}

/* ---------- 7. Network band ---------------------------------------------- */

.network-band{
  color:#fff;position:relative;overflow:hidden;
  background:radial-gradient(circle at 13% 40%,#f024bd61,transparent 34%),
             linear-gradient(130deg,var(--purple-deep),var(--purple));
}
.network-band::after{
  content:"";border:85px solid rgba(255,255,255,.035);border-radius:50%;
  width:420px;height:420px;position:absolute;bottom:-150px;right:-70px;
}
.network-inner{
  z-index:2;max-width:var(--lk-width);grid-template-columns:1.25fr .75fr;
  gap:90px;margin:0 auto;padding:92px 24px;display:grid;position:relative;
}
.wordmarks{grid-template-columns:repeat(3,1fr);align-content:center;gap:30px 24px;display:grid}
.wordmarks b{color:rgba(255,255,255,.72);letter-spacing:-.03em;font-size:16px}
.network-copy h2,.network-copy .elementor-widget-heading{letter-spacing:-.045em;margin:13px 0;font-size:42px;line-height:.95}
.network-copy p{color:rgba(255,255,255,.65);font-size:13px;line-height:1.8}
.network-copy .more-link{margin-top:14px}

/* ---------- 8. People ---------------------------------------------------- */

.people{grid-template-columns:.72fr 1.28fr;gap:65px;display:grid}
.people-intro{align-self:center}
.people-intro h2,.people-intro .elementor-widget-heading{font-size:52px}
.people-intro .more-link{margin-top:24px}
.people-grid{grid-template-columns:repeat(3,1fr);gap:13px;display:grid}
.person-card{background:var(--purple);min-height:420px;position:relative;overflow:hidden}
.person-card img{object-fit:cover;filter:saturate(.72);width:100%;height:100%;transition:transform .65s,filter .4s}
.person-card:hover img{filter:saturate(1);transform:scale(1.045)}
.person-card::after{content:"";background:linear-gradient(transparent,rgba(16,5,30,.94));position:absolute;inset:40% 0 0}
.person-caption{z-index:2;color:#fff;padding:25px 20px;position:absolute;bottom:0;left:0;right:0}
.person-caption span{color:var(--lime);font-size:12px}
.person-caption h3{margin:7px 0 5px;font-size:19px;line-height:1.05}
.person-caption p{color:rgba(255,255,255,.65);letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:11px}

/* ---------- 9. Video CTA ------------------------------------------------- */

.video-cta{
  min-height:470px;color:#fff;
  background:url("/wp-content/uploads/leiklist/production.jpg") 50% center/cover;
  grid-template-columns:1fr auto;align-items:center;display:grid;
  position:relative;overflow:hidden;padding-top:80px;padding-bottom:80px;
}
/* .leiklist-page prefix is required: this class sits on a widget wrapper, and
   Elementor's own .elementor-widget{position:relative} would otherwise win the
   specificity tie depending on stylesheet order. Measured failure: 512x0. */
.leiklist-page .video-shade{
  background:linear-gradient(90deg,rgba(20,6,39,.94),rgba(59,18,100,.78) 55%,rgba(26,8,47,.55));
  position:absolute;inset:0;
}
.video-copy{z-index:2;max-width:640px;position:relative}
.video-copy h2,.video-copy .elementor-widget-heading{letter-spacing:-.055em;margin:14px 0 18px;font-size:clamp(48px,5vw,70px);line-height:.94}
.video-copy p{color:rgba(255,255,255,.7);max-width:520px;font-size:14px;line-height:1.75}
.video-copy .button{margin-top:19px}
.play-button{
  z-index:2;width:96px;height:96px;color:var(--magenta);cursor:pointer;
  background:#fff;border:0;border-radius:50%;place-items:center;
  animation:pulse 2.4s ease-in-out infinite;display:grid;position:relative;
  box-shadow:0 0 0 15px rgba(255,255,255,.12),0 0 0 30px rgba(255,255,255,.05);
}

/* ---------- 10. Program -------------------------------------------------- */

.program{background:linear-gradient(#fff,#fbfaff)}
.program-columns{max-width:var(--lk-width);grid-template-columns:1fr 1fr;gap:28px;margin:0 auto;display:grid}
.program-day{
  background:var(--purple);color:#fff;grid-template-columns:56px 1fr;
  align-items:center;margin-bottom:13px;padding:19px;display:grid;
}
.program-day span{color:var(--lime);grid-row:span 2;font-size:34px;font-weight:850}
.program-day h3{margin:0;font-size:18px}
.program-day small{color:rgba(255,255,255,.6);letter-spacing:.08em;text-transform:uppercase;font-size:11px}
.program-card{
  border:1px solid var(--line);background:#fff;
  grid-template-columns:145px 1fr;min-height:190px;margin-bottom:13px;
  transition:border-color .22s,box-shadow .22s;display:grid;
}
.program-card:hover{border-color:rgba(240,36,189,.5);box-shadow:0 16px 35px rgba(31,15,48,.08)}
.program-card img{object-fit:cover;width:100%;height:100%}
.program-body{padding:23px}
.program-body span{color:var(--magenta);letter-spacing:.09em;text-transform:uppercase;font-size:11px;font-weight:800}
.program-body h4{letter-spacing:-.025em;margin:8px 0;font-size:19px}
.program-body p{color:var(--muted);margin:0 0 13px;font-size:12px;line-height:1.6}

/* ---------- 11. Why ------------------------------------------------------ */

.why{background:var(--purple-soft);grid-template-columns:.85fr 1.15fr;align-items:center;gap:85px;display:grid}
.why-image{height:570px;position:relative}
.why-image img{object-fit:cover;width:100%;height:100%}
.why-image::before{z-index:-1;content:"";background:var(--magenta);height:100%;position:absolute;bottom:22px;left:-22px;right:22px}
.why-image button{
  background:var(--lime);width:70px;height:70px;color:var(--purple);
  border:0;border-radius:50%;place-items:center;display:grid;
  position:absolute;bottom:28px;right:28px;
}
.why-lead{color:var(--muted);font-size:15px;line-height:1.8}
.benefit-grid{grid-template-columns:1fr 1fr;gap:28px 24px;margin-top:39px;display:grid}
.benefit-item{grid-template-columns:35px 1fr;align-items:start;column-gap:12px;display:grid}
.benefit-item svg{color:var(--magenta);grid-row:span 2}
.benefit-item h3{margin:0 0 7px;font-size:16px}
.benefit-item p{color:var(--muted);margin:0;font-size:12px;line-height:1.55}

/* ---------- 12. Transform ------------------------------------------------ */

.transform{
  min-height:440px;color:#fff;position:relative;
  padding-top:90px;padding-bottom:90px;
  background:linear-gradient(90deg,rgba(20,6,40,.96),rgba(59,18,100,.78),rgba(59,18,100,.42)),
             url("/wp-content/uploads/leiklist/hero.jpg") 50% center/cover;
}
.transform-inner{max-width:640px}
.transform h2,.transform .elementor-widget-heading{letter-spacing:-.055em;margin:14px 0 18px;font-size:clamp(48px,5vw,70px);line-height:.94}
.transform p{color:rgba(255,255,255,.68);max-width:520px;font-size:14px;line-height:1.75}
.transform .button{margin-top:20px}

/* ---------- 13. Latest news ---------------------------------------------- */

.latest-heading{justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:45px;display:flex}
/* the heading class sits on the widget wrapper, so zero it there too */
.latest-heading h2,
.latest-heading .section-h2{margin-bottom:0}
.latest-heading .more-link{color:var(--magenta);margin-bottom:8px}
.article-grid{grid-template-columns:repeat(4,1fr);gap:18px;display:grid}
.article-image{height:175px;display:block;position:relative;overflow:hidden}
.article-image img{object-fit:cover;width:100%;height:100%;transition:transform .65s}
.article-card:hover .article-image img{transform:scale(1.055)}
.article-image .article-arrow{
  background:var(--lime);width:38px;height:38px;color:var(--purple);
  place-items:center;transition:transform .26s;display:grid;
  position:absolute;bottom:12px;right:12px;transform:translateY(55px);
}
.article-card:hover .article-image .article-arrow{transform:translateY(0)}
.article-card small{
  color:var(--magenta);letter-spacing:.08em;text-transform:uppercase;
  margin:18px 0 9px;font-size:11px;font-weight:800;display:block;
}
.article-card h3{letter-spacing:-.03em;margin:0 0 10px;font-size:20px;line-height:1.12}
.article-card p{color:var(--muted);margin:0;font-size:12px;line-height:1.65}

/* ---------- 13b. Footer (Theme Builder) ---------------------------------- */

.site-footer{color:#fff;background:var(--purple-deep)}
.footer-main{
  max-width:var(--lk-width);grid-template-columns:1.3fr .7fr .8fr 1.2fr;
  gap:55px;margin:0 auto;padding:85px 24px 65px;display:grid;
}
.footer-brand a{display:inline-flex}
.footer-brand img{object-fit:contain;object-position:left center;width:205px;height:58px;padding:0}
.footer-brand p,.newsletter p{color:rgba(255,255,255,.55);font-size:12px;line-height:1.75}
.socials{gap:7px;margin-top:21px;display:flex}
.socials a{border:1px solid rgba(255,255,255,.25);border-radius:50%;place-items:center;width:31px;height:31px;font-size:12px;display:grid}
.footer-main h3{margin:0 0 20px;font-size:16px}
.footer-col{flex-direction:column;align-items:flex-start;gap:11px;display:flex}
.footer-col a{color:rgba(255,255,255,.58);font-size:12px}
.footer-col a:hover{color:var(--lime)}
.newsletter form{grid-template-columns:1fr 45px;margin-top:18px;display:grid}
.newsletter input{min-width:0;height:45px;color:var(--ink);background:#fff;border:0;outline:0;padding:0 13px;font-size:12px}
.newsletter button{background:linear-gradient(135deg,var(--magenta),#7b2cdb);color:#fff;border:0;place-items:center;display:grid}
.footer-bottom{
  max-width:var(--lk-width);color:rgba(255,255,255,.42);
  border-top:1px solid rgba(255,255,255,.12);justify-content:space-between;
  gap:20px;margin:0 auto;padding:25px 24px;font-size:11px;display:flex;
}

/* ==========================================================================
   INNER PAGES — shared primitives (subhero, inner-section, filters, news)
   Used by /frettir and reused by the remaining inner pages.
   ========================================================================== */

/* ---------- 13c. Subhero ------------------------------------------------- */

.subhero{
  color:#fff;background:var(--purple-deep);isolation:isolate;
  align-items:flex-end;min-height:560px;padding:160px 24px 100px;
  display:flex;position:relative;overflow:hidden;
}
.subhero::after{
  z-index:3;content:"";
  clip-path:polygon(0 48%,44% 78%,100% 24%,100% 100%,0 100%);
  background:#fff;height:165px;position:absolute;bottom:-122px;left:-3vw;right:-3vw;
}
/* was `.subhero > img` — renamed because display:contents does NOT change the
   DOM tree, so a child combinator still fails across an Elementor wrapper. */
.subhero-image{
  z-index:-2;object-fit:cover;object-position:center center;
  width:100%;height:100%;
  animation:hero-focus 1.2s cubic-bezier(.2,.8,.2,1) both;
  position:absolute;inset:0;
}
.subhero-shade{
  z-index:-1;position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(19,6,38,.95),rgba(38,11,67,.72) 52%,rgba(19,6,38,.2)),
             linear-gradient(transparent 35%,rgba(16,5,31,.78));
}
.subhero-inner{
  width:100%;max-width:var(--lk-width);margin:0 auto;
  animation:intro-left .8s cubic-bezier(.2,.8,.2,1) 80ms both;
}
/* class sits on the heading widget wrapper, same pattern as .hero-title */
.subhero-title{letter-spacing:-.055em;max-width:880px;margin:16px 0 18px;font-size:clamp(52px,6vw,82px);line-height:.95}
.subhero-lead{color:rgba(255,255,255,.75);max-width:660px;margin:0;font-size:15px;line-height:1.8}

/* ---------- 13d. Inner section shell ------------------------------------- */

.inner-section{width:100%;max-width:var(--lk-width);margin:0 auto;padding:100px 24px}
.inner-section h2{letter-spacing:-.04em}

/* ---------- 13d-bis. Single post ----------------------------------------
   Extracted from the prototype's /frettir/{slug} page. The body is rendered
   by the_content(), so these rules deliberately target the bare elements
   WordPress emits (p, blockquote, h2, ul, img) rather than classes. */
.article-page{
  max-width:var(--lk-width);grid-template-columns:minmax(0,720px) 220px;
  justify-content:center;gap:85px;margin:0 auto;padding:100px 24px 120px;display:grid;
}
.article-lead p{color:#4f4857;margin:0 0 25px;font-size:17px;line-height:1.9}
.article-lead>p:first-child{color:var(--ink);font-size:20px;line-height:1.65}
.article-lead blockquote{
  border-left:3px solid var(--lime);color:var(--purple);letter-spacing:-.035em;
  margin:48px 0;padding:28px 0 28px 30px;font-size:30px;font-weight:650;line-height:1.25;
}
.article-lead blockquote p{color:inherit;font:inherit;letter-spacing:inherit;margin:0}
.article-lead h2{letter-spacing:-.035em;margin:44px 0 16px;font-size:30px;line-height:1.15}
.article-lead h3{letter-spacing:-.03em;margin:34px 0 12px;font-size:22px;line-height:1.2}
.article-lead a{color:var(--purple);text-decoration:underline;text-underline-offset:3px}
.article-lead a:hover{color:var(--magenta)}
.article-lead img{height:auto;margin:34px 0;max-width:100%}
.article-lead figcaption{color:var(--muted);margin-top:-22px;margin-bottom:34px;font-size:12px}
.article-lead ul,.article-lead ol{color:#4f4857;margin:0 0 25px;padding-left:22px;font-size:17px;line-height:1.9}
.article-lead li{margin-bottom:8px}
.article-page aside{
  border-top:2px solid var(--purple);flex-direction:column;align-self:start;
  padding-top:8px;display:flex;position:sticky;top:96px;
}
.article-page aside span{
  color:var(--magenta);text-transform:uppercase;padding:15px 0;font-size:11px;font-weight:800;
}
.article-page aside a{
  border-bottom:1px solid var(--line);color:var(--muted);justify-content:space-between;
  align-items:center;padding:13px 0;font-size:12px;display:flex;transition:color .18s;
}
.article-page aside a:hover{color:var(--purple)}
.article-page aside svg{width:15px}

/* ---------- 13e. Filter row ---------------------------------------------- */

.filter-row{flex-wrap:wrap;gap:8px;margin-bottom:38px;display:flex}
.filter-row button{
  border:1px solid var(--line);min-height:39px;color:var(--muted);
  letter-spacing:.08em;text-transform:uppercase;cursor:pointer;background:#fff;
  padding:0 17px;font-size:11px;font-weight:760;
}
.filter-row button.active,.filter-row button:hover{border-color:var(--purple);background:var(--purple);color:#fff}

/* ---------- 13f. News grid ----------------------------------------------- */

.news-grid{grid-template-columns:repeat(3,1fr);gap:48px 20px;display:grid}
/* Filtering re-queries the database, so the grid is briefly replaced. */
.news-grid.is-loading{opacity:.35;transition:opacity .15s}
.news-empty{grid-column:1/-1;color:var(--muted);margin:0;padding:40px 0;font-size:14px}
.news-more{justify-content:center;margin-top:52px;display:flex}
.news-more button{cursor:pointer;border:0}
.news-more button:disabled{opacity:.55;cursor:default}
.news-card-image{background:var(--purple-soft);height:245px;display:block;position:relative;overflow:hidden}
.news-card-image img{object-fit:cover;width:100%;height:100%;transition:transform .65s,filter .35s}
.news-card-image span{
  background:var(--lime);width:43px;height:43px;color:var(--purple);
  place-items:center;transition:transform .26s;display:grid;
  position:absolute;bottom:14px;right:14px;transform:translateY(62px);
}
.news-card:hover .news-card-image img{filter:saturate(1.1);transform:scale(1.05)}
.news-card:hover .news-card-image span{transform:translateY(0)}
.news-card>div{padding-top:20px}
.news-card small{color:var(--magenta);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:780}
.news-card h2{margin:9px 0;font-size:23px;line-height:1.08}
.news-card p{color:var(--muted);margin:0;font-size:12px;line-height:1.65}

/* ---------- 13g. Service box grid (/thjonusta) --------------------------- */
/* The whole card lives inside a single HTML widget, so the prototype's child
   combinators are kept verbatim — no Elementor wrapper sits between them. */

.services-box-grid{grid-template-columns:repeat(3,1fr);gap:18px;display:grid}
.service-box-card{
  border:1px solid var(--line);background:#fff;min-height:390px;
  transition:transform .26s,box-shadow .26s;overflow:hidden;
  box-shadow:0 16px 40px rgba(28,14,48,.07);
}
.service-box-card:hover{transform:translateY(-7px);box-shadow:0 28px 65px rgba(28,14,48,.14)}
.service-box-image{background:var(--purple-soft);height:200px;position:relative;overflow:hidden}
.service-box-image img{object-fit:cover;width:100%;height:100%;transition:transform .6s}
.service-box-card:hover .service-box-image img{transform:scale(1.05)}
.service-box-image>span{
  background:var(--lime);width:42px;height:42px;color:var(--purple);
  place-items:center;font-size:12px;font-weight:850;display:grid;
  position:absolute;top:14px;right:14px;
}
.service-box-copy{grid-template-columns:34px 1fr 22px;align-items:start;gap:14px;padding:27px;display:grid}
.service-box-copy>svg:first-child{color:var(--magenta)}
.service-box-copy>svg:last-child{width:18px;color:var(--purple);align-self:end}
.service-box-copy h2{margin:0 0 10px;font-size:24px;line-height:1.05}
.service-box-copy p{color:var(--muted);margin:0;font-size:12px;line-height:1.65}

/* ---------- 13h. Inner-page heading pair --------------------------------- */
/* Prototype: `.split-story h2, .school-intro h2, .alliance-grid h2,
   .kvasir-search h2`. Note this is NOT .section-h2 — the effective
   letter-spacing is -.04em (inherited from `.inner-section h2`) rather than
   -.055em, and the lead line-height is 1.85 rather than 1.8.
   Both classes sit on the widget WRAPPER, so the values must live here:
   the normalisation rule's `letter-spacing:inherit` out-ranks any
   `.inner-section h2` descendant selector. */

.inner-h2{letter-spacing:-.04em;margin:15px 0 22px;font-size:clamp(45px,5vw,68px);line-height:.96}
.inner-lead{color:var(--muted);font-size:15px;line-height:1.85}

/* Client note, 23 Oct: more air between "Við höldum sviðinu opnu" and the
   paragraph under it, on /um-okkur. Scoped to .split-story rather than
   changed on .inner-h2 itself, because that class is shared with the school
   intro, the alliance grid and the Kvasir search heading — all three of which
   the client has already signed off at the current spacing.

   margin-block-end is repeated for the same reason as the sub-hero lockup:
   Elementor zeroes widget margins with the logical property, which out-ranks a
   plain margin-bottom no matter where it sits in the file. */
.split-story .split-copy > .inner-h2{margin-bottom:36px;margin-block-end:36px}

/* ---------- 13i. School intro (/leiklistarskoli-bil) --------------------- */

.school-intro{grid-template-columns:.9fr 1.1fr;align-items:center;gap:80px;display:grid}
/* was `.school-intro > img` — renamed; the class goes on the <img> itself
   inside the HTML widget, so the widget wrapper simply sizes to it. */
.school-image{object-fit:cover;width:100%;height:480px;box-shadow:-24px 24px 0 var(--lime)}
.school-meta{flex-wrap:wrap;gap:8px;margin-top:30px;display:flex}
.school-meta span{
  background:var(--purple-soft);color:var(--purple);text-transform:uppercase;
  align-items:center;gap:7px;padding:11px 13px;font-size:11px;font-weight:760;display:inline-flex;
}
.school-meta svg{width:16px}

/* ---------- 13j. Course band --------------------------------------------- */
/* Each cell is its own HTML widget so the wrappers become the grid items —
   hence `.course-cell` instead of the prototype's `.course-band > div`. */

.course-band{
  max-width:var(--lk-width);color:#fff;background:var(--purple);
  grid-template-columns:repeat(3,1fr);margin:0 auto 100px;display:grid;
}
.course-cell{border-right:1px solid rgba(255,255,255,.17);min-height:210px;padding:38px}
.course-band small{color:var(--lime);font-size:12px}
.course-band h2{margin:28px 0 10px;font-size:26px}
.course-band p{color:rgba(255,255,255,.62);margin:0;font-size:12px;line-height:1.65}

/* ---------- 13k. Director grid (/leikstjorar) ---------------------------- */
/* Whole grid lives in one HTML widget, so the prototype's descendant and
   child selectors are kept verbatim. */

.director-grid{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}
.director-grid article{background:var(--purple);min-height:430px;position:relative;overflow:hidden}
.director-grid img{object-fit:cover;filter:saturate(.72);width:100%;height:100%;transition:transform .65s,filter .35s}
.director-grid article:hover img{filter:saturate(1);transform:scale(1.045)}
.director-grid article::after{content:"";background:linear-gradient(transparent,rgba(15,5,29,.96));position:absolute;inset:42% 0 0}
.director-grid article>div{z-index:2;color:#fff;padding:27px 23px;position:absolute;bottom:0;left:0;right:0}
.director-grid small{color:var(--lime);font-size:11px}
.director-grid h2{margin:7px 0 5px;font-size:23px;line-height:1.04}
.director-grid p{color:rgba(255,255,255,.62);letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:11px}
/* The prototype's cards were inert. Real profiles link to the person's page;
   the stretched ::after makes the whole card clickable without changing the
   markup the grid's child selectors depend on. */
.director-grid h2 a,.people-grid h3 a{color:inherit;text-decoration:none}
.director-grid h2 a::after,.person-card h3 a::after{content:"";z-index:4;position:absolute;inset:0}
.director-grid h2 a:focus-visible::after,.person-card h3 a:focus-visible::after{outline:2px solid var(--lime);outline-offset:-3px}

/* ---------- 13l. Wide CTA band ------------------------------------------- */
/* flex-direction is declared explicitly: Elementor containers default to
   column via --flex-direction, which would otherwise win. */

.wide-cta{
  color:#fff;background:linear-gradient(115deg,var(--purple-deep),var(--purple));
  flex-direction:row;justify-content:space-between;align-items:center;
  gap:35px;margin-top:18px;padding:42px;display:flex;
}
/* class sits on the heading widget wrapper. letter-spacing is explicit because
   the prototype inherits it from `.inner-section h2` (-.04em = -1.36px at
   34px), which the normalisation rule's `letter-spacing:inherit` would drop. */
.wide-cta-h2{letter-spacing:-.04em;margin:10px 0 0;font-size:34px}

/* ---------- 13m. Directory grid (/leiklistarnam) ------------------------- */
/* One HTML widget holds the whole grid, so `article > svg` resolves natively. */

.directory-grid{grid-template-columns:repeat(2,1fr);gap:16px;display:grid}
.directory-grid article{background:var(--purple-soft);min-height:290px;padding:38px;position:relative;overflow:hidden}
.directory-grid article small{color:var(--magenta);font-size:12px;font-weight:800;position:absolute;top:20px;right:22px}
.directory-grid article>svg{color:var(--purple)}
.directory-grid h2{margin:32px 0 12px;font-size:28px}
.directory-grid p{max-width:460px;color:var(--muted);font-size:13px;line-height:1.7}
.directory-grid a{
  color:var(--magenta);text-transform:uppercase;align-items:center;
  gap:7px;margin-top:15px;font-size:12px;font-weight:800;display:inline-flex;
}

/* ---------- 13n. Resource layout (/leiknaman) ---------------------------- */
/* Prototype groups these as `.resource-layout h2, .signup-shell h2,
   .login-shell h2` — a THIRD heading scale, distinct from both .section-h2
   and .inner-h2: -.05em / clamp(43px,5vw,66px) / line-height .97.
   Reused by the Póstlisti and Innskráning pages. */

.resource-layout{grid-template-columns:1.1fr .9fr;align-items:center;gap:90px;display:grid}
.resource-h2{letter-spacing:-.05em;margin:15px 0 22px;font-size:clamp(43px,5vw,66px);line-height:.97}

/* The panel keeps its own markup inside one HTML widget, so the prototype's
   child combinators resolve natively. */
.resource-panel{
  background:var(--purple);color:#fff;flex-direction:column;gap:16px;
  min-height:400px;padding:42px;display:flex;
}
.resource-panel>strong{color:var(--lime);margin-bottom:10px;font-size:30px}
.resource-panel>span{
  border-bottom:1px solid rgba(255,255,255,.16);align-items:center;
  gap:11px;padding-bottom:14px;font-size:13px;display:flex;
}
/* width only — the height stays 24 from the SVG attribute, as in the prototype */
.resource-panel>span svg{width:17px;color:var(--lime)}
.resource-panel .button{align-self:flex-start;margin-top:auto}

/* ---------- 13o. Text link (shared) -------------------------------------- */

.text-link{
  color:var(--magenta);letter-spacing:.08em;text-transform:uppercase;
  align-items:center;gap:9px;margin-top:18px;font-size:12px;font-weight:800;display:inline-flex;
}
.text-link svg{width:16px}

/* ---------- 13p. Alliance grid (/bandalagid) ----------------------------- */
/* Headings reuse .inner-h2 / .inner-lead — the prototype groups
   `.alliance-grid h2` with `.school-intro h2`. */

.alliance-grid{grid-template-columns:1fr .8fr;align-items:center;gap:90px;display:grid}
.alliance-grid ul{gap:13px;margin:28px 0 0;padding:0;list-style:none;display:grid}
.alliance-grid li{align-items:center;gap:11px;font-size:13px;display:flex}
.alliance-grid li svg{width:18px;color:var(--magenta)}
.alliance-actions{align-items:center;gap:22px;margin-top:28px;display:flex}
.alliance-actions .text-link{margin-top:0}

.alliance-mark{
  text-align:center;color:#fff;place-items:center;min-height:430px;padding:45px;display:grid;
  background:radial-gradient(circle at 70% 25%,#f024bd8c,transparent 30%),
             linear-gradient(135deg,var(--purple-deep),var(--purple));
}
.alliance-mark strong{color:var(--lime);letter-spacing:-.1em;font-size:clamp(90px,13vw,160px);line-height:.8}
.alliance-mark span{
  color:rgba(255,255,255,.62);letter-spacing:.12em;text-transform:uppercase;
  max-width:230px;margin-top:25px;font-size:12px;
}

/* ---------- 13q. Member strip -------------------------------------------- */
/* The links sit in a .passthrough HTML widget so they become the flex items
   themselves — otherwise justify-content:space-between has one child to spread. */

.member-strip{
  max-width:var(--lk-width);border:1px solid var(--line);justify-content:space-between;
  align-items:center;gap:28px;margin:0 auto 100px;padding:38px;display:flex;
}
.member-strip a{color:var(--purple);font-size:15px;font-weight:780}
.member-strip span{color:var(--magenta);letter-spacing:.1em;text-transform:uppercase;font-size:11px;font-weight:800}
.member-strip b{color:var(--purple);font-size:17px}

/* ---------- 13r. Document list (/adalfundir) ----------------------------- */
/* One HTML widget holds the list, so `article > svg` resolves natively.
   Both icons are plain 24x24 lucide — no CSS sizing on either. */

.document-list{border-top:1px solid var(--line)}
.document-list article{
  border-bottom:1px solid var(--line);grid-template-columns:55px 1fr auto;
  align-items:center;gap:25px;min-height:145px;padding:24px 15px;display:grid;
}
.document-list article>svg{color:var(--magenta)}
.document-list small{color:var(--magenta);text-transform:uppercase;font-size:11px;font-weight:800}
.document-list h2{margin:6px 0;font-size:24px}
.document-list p{color:var(--muted);margin:0;font-size:12px}
.document-list a{
  color:var(--purple);text-transform:uppercase;align-items:center;
  gap:8px;font-size:12px;font-weight:800;display:inline-flex;
}

/* ---------- 13s. Split story (/um-okkur) --------------------------------- */
/* Headings reuse .inner-h2 / .inner-lead — the prototype groups
   `.split-story h2` with `.school-intro h2`. Note the image shadow differs
   from .school-image: 28px purple-soft here, -24px lime there. */

.split-story{grid-template-columns:.82fr 1.18fr;align-items:center;gap:clamp(60px,8vw,110px);display:grid}
.split-image{object-fit:cover;width:100%;height:520px;box-shadow:28px 28px 0 var(--purple-soft)}

/* ---------- 13t. Values band --------------------------------------------- */
/* Same pattern as .course-cell: one HTML widget per cell so the wrappers
   become the grid items. */

.values-band{
  max-width:var(--lk-width);background:var(--purple);color:#fff;
  grid-template-columns:repeat(3,1fr);margin:0 auto 100px;display:grid;
}
.values-cell{border-right:1px solid rgba(255,255,255,.17);min-height:160px;padding:36px}
.values-band strong{color:var(--lime);letter-spacing:-.06em;font-size:54px;line-height:1;display:block}
.values-band span{
  color:rgba(255,255,255,.62);letter-spacing:.1em;text-transform:uppercase;
  margin-top:12px;font-size:12px;display:block;
}

/* ---------- 13u. Link directory (/leikhus) ------------------------------- */
/* One HTML widget holds the list, so `> a` resolves natively. */

.link-directory{border-top:1px solid var(--line)}
.link-directory>a{
  border-bottom:1px solid var(--line);grid-template-columns:45px 1fr 25px;
  align-items:center;gap:25px;min-height:125px;padding:23px 18px;
  transition:padding .22s,background .22s;display:grid;
}
.link-directory>a:hover{background:var(--purple-soft);padding-left:28px}
.link-directory span{color:var(--magenta);font-size:11px}
.link-directory h2{margin:0 0 7px;font-size:28px}
.link-directory p{color:var(--muted);margin:0;font-size:13px;line-height:1.6}
.link-directory svg{color:var(--purple)}

/* ---------- 13v. Results head + mini search ------------------------------ */
/* Shared with the shop catalogue. .results-h2 sits on the heading widget
   wrapper; letter-spacing is explicit because the prototype inherits -.04em
   from `.inner-section h2` and the normalisation rule would drop it. */

.results-head{justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:30px;display:flex}
.results-h2{letter-spacing:-.04em;margin:10px 0 0;font-size:36px}
.results-head>span{color:var(--muted);text-transform:uppercase;font-size:12px}

.mini-search{
  border:1px solid var(--line);grid-template-columns:30px 1fr;align-items:center;
  width:min(100%,320px);min-height:48px;padding:0 14px;display:grid;
}
.mini-search svg{width:17px;color:var(--purple)}
.mini-search input{border:0;outline:0;min-width:0}
.club-empty{color:var(--muted);border-bottom:1px solid var(--line);margin:0;padding:34px 22px;font-size:14px}

/* ---------- 13w. Club grid (/adildarfelog) ------------------------------- */

.club-grid{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;display:grid}
.club-grid a{
  border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  grid-template-columns:35px 1fr 22px;align-items:center;gap:15px;
  min-height:82px;padding:15px 20px;transition:background .22s;display:grid;
}
/* `display:grid` above out-specifies the browser's [hidden] rule, so the
   search filter could mark rows hidden without them disappearing. */
.club-grid a[hidden]{display:none}
.club-grid a:hover{background:var(--purple-soft)}
.club-grid span{color:var(--magenta);font-size:11px}
.club-grid strong{font-size:17px}
.club-grid svg{width:17px;color:var(--purple)}

/* ---------- 13x. Board grid (/stjorn) ------------------------------------ */
/* .board-intro sits on the text-editor widget wrapper; the inner <p> inherits
   its typography and the normalisation rule zeroes the paragraph margin.
   The grid uses a 1px gap over a --line background to draw its hairlines. */

.board-intro{max-width:780px;color:var(--muted);margin-bottom:45px;font-size:16px;line-height:1.85}

.board-grid{background:var(--line);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}
.board-grid article{background:#fff;min-height:235px;padding:35px;position:relative}
.board-grid span{color:var(--magenta);font-size:11px;position:absolute;top:20px;right:22px}
.board-grid small{color:var(--purple);text-transform:uppercase;font-size:11px;font-weight:800}
.board-grid h2{margin:45px 0 10px;font-size:25px;line-height:1.1}
.board-grid p{color:var(--muted);font-size:12px}

/* ---------- 13y. Signup + login shells (/postlisti, /innskraning) -------- */
/* These share the .resource-h2 scale. The wrapper-class version is used for
   Elementor heading widgets; this element rule covers real <h2>s that live
   inside an HTML widget (the login form and its aside). */

.signup-shell h2,.login-shell h2{
  letter-spacing:-.05em;margin:15px 0 22px;
  font-size:clamp(43px,5vw,66px);line-height:.97;
}

.signup-shell{grid-template-columns:1fr .8fr;align-items:center;gap:90px;display:grid}
.login-shell{grid-template-columns:.85fr 1.15fr;align-items:center;gap:85px;display:grid}

.signup-shell form,.login-shell form{
  background:var(--purple-soft);flex-direction:column;gap:18px;padding:42px;display:flex;
}
.signup-shell label,.login-shell label{
  color:var(--purple);text-transform:uppercase;flex-direction:column;
  gap:8px;font-size:12px;font-weight:800;display:flex;
}
.signup-shell input,.login-shell input{
  border:1px solid var(--line);background:#fff;outline:0;min-height:52px;padding:0 15px;
}

/* login-specific — must follow the shared h2 rule to win */
.login-shell form h2{font-size:43px}
.login-shell form>a{color:var(--magenta);font-size:12px}
.login-shell .remember{text-transform:none;flex-direction:row;align-items:center;display:flex}
.login-shell .remember input{min-height:0}

/* ---- Profile Builder login, wearing the design ------------------------
   PB emits its own markup (p.wppb-form-field > label + input). These rules
   map it onto the .login-shell panel instead of restyling the panel. The
   shell below replaces the prototype's static <form>. */
.login-form-shell{
  background:var(--purple-soft);flex-direction:column;gap:18px;padding:42px;display:flex;
}
.login-form-shell h2{font-size:43px;letter-spacing:-.05em;margin:0;line-height:.97}
.login-form-shell>a{color:var(--magenta);font-size:12px}
/* Profile Builder's own stylesheet puts padding on the wrapper and a fixed
   width on labels — that inset the whole form and wrapped the longer label
   onto two lines. Reset both before applying the design. */
.login-form-shell .wppb-user-forms,
.login-form-shell #wppb-loginform{
  display:flex;flex-direction:column;gap:18px;
  width:100%;max-width:none;margin:0;padding:0;border:0;background:none;
}
.login-form-shell .wppb-form-field,
.login-form-shell .login-submit{width:100%;max-width:none;padding:0;float:none}
.login-form-shell .wppb-form-field{
  color:var(--purple);text-transform:uppercase;flex-direction:column;
  gap:8px;margin:0;font-size:12px;font-weight:800;display:flex;
}
.login-form-shell .wppb-form-field label{
  color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;
  width:auto;max-width:none;margin:0;padding:0;float:none;display:block;
}
.login-form-shell input[type=text],
.login-form-shell input[type=password],
.login-form-shell input[type=email]{
  border:1px solid var(--line);background:#fff;outline:0;width:100%;
  min-height:52px;padding:0 15px;font-size:15px;
}
.login-form-shell .wppb-password-field-container{display:block}
.login-form-shell .login-remember{
  text-transform:none;flex-direction:row;align-items:center;gap:9px;font-weight:600;
}
.login-form-shell .login-remember input{min-height:0;width:auto}
.login-form-shell .login-submit{margin:0}
.login-form-shell input[type=submit]{
  background:var(--purple);color:#fff;cursor:pointer;border:0;
  letter-spacing:.09em;text-transform:uppercase;
  min-height:52px;padding:0 26px;font-size:12px;font-weight:800;
  transition:background .2s;
}
.login-form-shell input[type=submit]:hover{background:var(--purple-deep)}
.login-form-shell .wppb-error,.login-form-shell .wppb-alert{
  border-left:3px solid var(--magenta);background:#fff;color:var(--ink);
  margin:0;padding:14px 16px;font-size:13px;
}
.login-missing{color:var(--muted);font-size:14px}

/* ---------- 13q. Cart drawer --------------------------------------------
   The prototype's drawer only ever showed the empty state. Everything from
   .cart-lines down is new, built from the same parts: magenta micro-label,
   hairline rules, purple button. */
.cart-overlay{
  z-index:210;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  background:rgba(18,6,36,.68);position:fixed;inset:0;
}
.cart-overlay[hidden]{display:none}
.cart-drawer{
  background:#fff;flex-direction:column;width:min(100%,460px);height:100%;
  padding:35px;display:flex;position:absolute;top:0;right:0;
  box-shadow:-30px 0 80px rgba(0,0,0,.25);
  animation:cart-in .32s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes cart-in{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}
.cart-drawer-head{
  border-bottom:1px solid var(--line);justify-content:space-between;
  align-items:flex-start;padding-bottom:25px;display:flex;flex:none;
}
.cart-drawer-head small{color:var(--magenta);letter-spacing:.12em;font-size:11px;font-weight:800}
.cart-drawer-head h2{letter-spacing:-.045em;margin:8px 0 0;font-size:36px}
.cart-drawer-head button{
  border:1px solid var(--line);width:42px;height:42px;color:var(--purple);
  cursor:pointer;background:#fff;place-items:center;display:grid;flex:none;
}
.cart-drawer-head button:hover{background:var(--purple-soft)}
.cart-drawer>[data-cart-body]{flex:1;min-height:0;display:flex;flex-direction:column}

.empty-cart{
  text-align:center;flex-direction:column;justify-content:center;align-items:center;
  min-height:65%;padding:45px 20px;display:flex;
}
.empty-cart>svg{width:50px;height:50px;color:var(--magenta)}
.empty-cart h3{margin:20px 0 8px;font-size:25px}
.empty-cart p{max-width:290px;color:var(--muted);font-size:13px;line-height:1.7}
.empty-cart .button{margin-top:20px}

.cart-lines{flex:1;min-height:0;overflow-y:auto;margin:0 -6px;padding:6px}
.cart-line{
  border-bottom:1px solid var(--line);grid-template-columns:64px 1fr auto 28px;
  align-items:start;gap:14px;padding:18px 0;display:grid;
}
.cart-line-image{background:var(--purple-soft);width:64px;height:64px;display:block;overflow:hidden}
.cart-line-image img{object-fit:cover;width:100%;height:100%}
.cart-line-copy{min-width:0}
.cart-line-copy h4{letter-spacing:-.02em;margin:0 0 5px;font-size:15px;line-height:1.25}
.cart-line-copy small{color:var(--muted);font-size:12px}
.cart-line-total{font-size:14px;font-weight:780;white-space:nowrap}
.cart-remove{
  color:var(--muted);cursor:pointer;background:0 0;border:0;width:28px;height:28px;
  padding:0;place-items:center;display:grid;transition:color .18s;
}
.cart-remove:hover{color:var(--magenta)}
.cart-remove:disabled{opacity:.4;cursor:default}
.cart-remove svg{width:15px;height:15px}

.cart-foot{border-top:2px solid var(--purple);flex:none;padding-top:20px}
.cart-sum{justify-content:space-between;align-items:baseline;margin-bottom:18px;display:flex}
.cart-sum span{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;font-size:12px;font-weight:800}
.cart-sum strong{letter-spacing:-.03em;font-size:26px}
.cart-foot .button{width:100%;justify-content:center}
.cart-view{color:var(--magenta);text-align:center;margin-top:14px;font-size:12px;
  letter-spacing:.08em;text-transform:uppercase;font-weight:800;display:block}

/* ---------- 13r. Leikhúsbúðin — catalogue --------------------------------
   Extracted from the prototype's shop page. The category rail is rendered as
   links rather than the prototype's <button>s so the real WooCommerce
   archives stay reachable and crawlable; the prototype's own stylesheet
   already carried `aside a` rules, so they render identically. */
.catalog-shell{max-width:1080px}
.catalog-tools{justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:38px;display:flex;flex-wrap:wrap}
.catalog-tools h2{margin:10px 0 0;font-size:36px;letter-spacing:-.045em}
.catalog-tools form{margin:0}
.catalog-tools label{
  background:var(--purple-soft);grid-template-columns:26px minmax(210px,300px);
  align-items:center;min-height:48px;padding:0 15px;display:grid;
}
.catalog-tools label svg{width:17px;color:var(--purple)}
.catalog-tools input{background:0 0;border:0;outline:0;min-width:0;font-size:12px}

.catalog-layout{grid-template-columns:190px 1fr;gap:35px;display:grid}
.catalog-layout aside{flex-direction:column;align-items:stretch;display:flex}
.catalog-layout aside>strong{margin-bottom:19px;font-size:15px}
.catalog-layout aside a{
  border-bottom:1px solid var(--line);color:var(--muted);justify-content:space-between;
  align-items:center;gap:10px;padding:14px 0;font-size:13px;line-height:1.35;display:flex;
  transition:color .18s;
}
.catalog-layout aside a span{color:#aaa2b1;margin-left:10px;font-size:12px;flex:none}
.catalog-layout aside a.active,.catalog-layout aside a:hover{color:var(--magenta)}
.catalog-cat-list{flex-direction:column;display:flex}
/* The select is the phone view of the same rail — hidden on desktop. */
.catalog-cat-select{display:none;margin:0}
.catalog-cat-select select{
  background:var(--purple-soft);color:var(--purple);border:0;outline:0;cursor:pointer;
  width:100%;min-height:48px;padding:0 14px;font-size:13px;font-weight:700;
  font-family:inherit;appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%233b1264' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;padding-right:38px;
}

.catalog-result-count{
  color:var(--muted);letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:22px;font-size:12px;
}
.product-grid{grid-template-columns:repeat(3,1fr);gap:34px 15px;display:grid}
.product-grid article>div{background:#f5f2f8;height:235px;position:relative;overflow:hidden}
.product-grid article img{
  object-fit:contain;mix-blend-mode:multiply;filter:saturate(.68);
  width:100%;height:100%;transition:transform .6s;
}
.product-grid article:hover img{transform:scale(1.05)}
.product-grid article>div a{
  background:var(--lime);width:40px;height:40px;color:var(--purple);
  place-items:center;display:grid;position:absolute;bottom:10px;right:10px;
}
.product-grid article small{
  color:var(--magenta);letter-spacing:.08em;text-transform:uppercase;
  margin:16px 0 7px;font-size:11px;font-weight:800;display:block;
}
.product-grid article h2{margin:0;font-size:18px;letter-spacing:-.02em;line-height:1.2}
.product-grid article p{color:var(--muted);margin:7px 0 0;font-size:12px}
.sale-badge{
  background:var(--magenta);color:#fff;letter-spacing:.08em;text-transform:uppercase;
  padding:7px 9px;font-size:10px;font-weight:800;position:absolute;top:10px;left:10px;z-index:2;
}
.catalog-price{font-weight:800;color:var(--purple)!important;font-size:14px!important}
/* WooCommerce emits <del>/<ins> for a sale price; the design shows one line. */
.catalog-price del{color:var(--muted);font-weight:600;margin-right:7px;text-decoration:line-through}
.catalog-price ins{text-decoration:none}
/* A wrapper centres it; `margin:auto` on the button alone loses to .button. */
.catalog-more{justify-content:center;margin-top:45px;display:flex}
.load-more{cursor:pointer;border:0}
.load-more:disabled{opacity:.55;cursor:default}

/* ---------- 13s. Single product ----------------------------------------
   Prototype layout, with WooCommerce's real add-to-cart form styled into it
   (the mockup only linked out to leiklist.is). */
.product-subhero{background:var(--purple-deep);height:118px}
.product-subhero span{display:none}
.product-detail{grid-template-columns:1fr 1fr;align-items:center;gap:80px;display:grid}
.product-detail-image{background:#f5f2f8;height:610px;padding:45px;position:relative}
.product-detail-image>img{object-fit:contain;mix-blend-mode:multiply;width:100%;height:100%}
.product-detail-image>span{
  background:var(--magenta);color:#fff;text-transform:uppercase;letter-spacing:.08em;
  padding:9px 12px;font-size:11px;font-weight:800;position:absolute;top:18px;left:18px;z-index:2;
}
.product-thumbs{gap:8px;position:absolute;bottom:18px;left:18px;right:18px;display:flex;flex-wrap:wrap}
.product-thumbs button{
  background:#fff;border:1px solid var(--line);cursor:pointer;width:56px;height:56px;
  padding:4px;transition:border-color .2s;
}
.product-thumbs button.is-active{border-color:var(--purple)}
.product-thumbs img{object-fit:contain;mix-blend-mode:multiply;width:100%;height:100%}

.product-detail-copy h1{letter-spacing:-.055em;margin:16px 0 18px;font-size:clamp(45px,5vw,70px);line-height:.96}
a.tag{text-decoration:none}
.detail-price{color:var(--purple);margin-bottom:25px;font-size:27px;display:block;font-weight:800}
.detail-price del{color:var(--muted);font-weight:600;margin-right:10px;font-size:20px}
.detail-price ins{text-decoration:none}
.product-detail-copy>p{color:var(--muted);font-size:15px;line-height:1.8}
.stock-note{color:var(--purple);align-items:center;gap:9px;margin:25px 0;font-size:12px;font-weight:750;display:flex}
.stock-note svg{width:18px;color:var(--magenta)}

/* WooCommerce's add-to-cart form, wearing the design. */
.product-detail-copy form.cart{flex-wrap:wrap;align-items:stretch;gap:12px;margin:0;display:flex}
.product-detail-copy .quantity{display:flex}
.product-detail-copy .quantity input{
  border:1px solid var(--line);background:#fff;outline:0;width:82px;
  min-height:52px;padding:0 12px;font-size:15px;text-align:center;
}
.product-detail-copy .single_add_to_cart_button{
  background:var(--purple);color:#fff;cursor:pointer;border:0;
  letter-spacing:.09em;text-transform:uppercase;
  min-height:52px;padding:0 30px;font-size:12px;font-weight:800;transition:background .2s;
}
.product-detail-copy .single_add_to_cart_button:hover{background:var(--purple-deep)}
.product-detail-copy .single_add_to_cart_button.disabled{opacity:.5;cursor:not-allowed}
.product-detail-copy table.variations{width:100%;margin:0 0 6px;border-collapse:collapse}
.product-detail-copy table.variations th,
.product-detail-copy table.variations td{display:block;padding:0;text-align:left}
.product-detail-copy table.variations th label{
  color:var(--purple);letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:7px;font-size:12px;font-weight:800;display:block;
}
.product-detail-copy table.variations td{margin-bottom:14px}
.product-detail-copy table.variations select{
  border:1px solid var(--line);background:#fff;outline:0;width:100%;
  min-height:52px;padding:0 14px;font-size:14px;font-family:inherit;
}
.product-detail-copy .reset_variations{color:var(--magenta);font-size:12px;text-transform:uppercase;font-weight:800}
.product-detail-copy .woocommerce-variation-price{margin-bottom:14px;font-size:20px;color:var(--purple);font-weight:800}
.product-detail-copy .stock{font-size:12px;color:var(--muted);margin:0 0 10px}

.product-description{background:var(--purple-soft);padding:85px 24px}
.product-description>div{max-width:850px;margin:0 auto}
.product-description h2{letter-spacing:-.045em;margin:14px 0 20px;font-size:46px}
.product-description p{color:var(--muted);font-size:16px;line-height:1.9;margin:0 0 18px}
.product-description ul,.product-description ol{color:var(--muted);font-size:16px;line-height:1.9;padding-left:22px}

.results-head{justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:30px;display:flex}
.results-head h2{margin:10px 0 0;font-size:36px;letter-spacing:-.045em}
.results-head>a{
  color:var(--magenta);text-transform:uppercase;align-items:center;gap:8px;
  font-size:12px;font-weight:800;display:inline-flex;white-space:nowrap;
}

/* ---------- 13t. Cart · checkout · account ------------------------------
   The prototype has no design for these, so they are built from the same
   parts as everything else: hairline rules, uppercase micro-labels, purple
   primary button, magenta accents. CSS only — WooCommerce's markup and
   behaviour are untouched, which matters on pages that take money. */
.woocommerce-cart .leiklist-page,
.woocommerce-checkout .leiklist-page,
.woocommerce-account .leiklist-page{padding:0}

.woocommerce table.shop_table{
  border:0;border-collapse:collapse;width:100%;margin:0;border-radius:0;
}
.woocommerce table.shop_table th{
  border:0;border-bottom:2px solid var(--purple);color:var(--purple);
  letter-spacing:.1em;text-transform:uppercase;text-align:left;
  padding:0 14px 14px 0;font-size:12px;font-weight:800;
}
.woocommerce table.shop_table td{
  border:0;border-bottom:1px solid var(--line);padding:18px 14px 18px 0;
  font-size:14px;vertical-align:middle;
}
.woocommerce table.shop_table img{width:64px;height:auto}
.woocommerce td.product-name a{color:var(--ink);font-weight:700}
.woocommerce td.product-name a:hover{color:var(--magenta)}
.woocommerce a.remove{
  color:var(--muted)!important;background:0 0;width:24px;height:24px;
  font-size:20px;line-height:1;text-align:center;
}
.woocommerce a.remove:hover{color:var(--magenta)!important;background:0 0}
.woocommerce .quantity input.qty{
  border:1px solid var(--line);background:#fff;outline:0;width:74px;
  min-height:46px;padding:0 10px;text-align:center;font-size:14px;
}

.woocommerce .cart .actions{padding-top:24px}
.woocommerce .cart .actions .coupon{gap:10px;display:flex;flex-wrap:wrap}
.woocommerce #coupon_code.input-text{
  border:1px solid var(--line);background:#fff;outline:0;
  min-height:48px;padding:0 14px;width:auto;min-width:190px;font-size:14px;
}

.woocommerce .cart_totals{margin-top:45px;max-width:420px;margin-left:auto}
.woocommerce .cart_totals h2{letter-spacing:-.04em;margin:0 0 18px;font-size:30px}
.woocommerce .cart_totals .order-total th,
.woocommerce .cart_totals .order-total td{font-size:17px;font-weight:800;color:var(--ink)}
.woocommerce .wc-proceed-to-checkout{padding-top:22px}

/* Every WooCommerce button, wearing the design's primary button. */
.woocommerce a.button,.woocommerce button.button,.woocommerce input.button,
.woocommerce a.button.alt,.woocommerce button.button.alt,
.woocommerce #place_order,.woocommerce .checkout-button{
  background:var(--purple);color:#fff;border:0;border-radius:0;cursor:pointer;
  letter-spacing:.09em;text-transform:uppercase;
  min-height:52px;padding:0 28px;font-size:12px;font-weight:800;line-height:52px;
  transition:background .2s;
}
.woocommerce a.button:hover,.woocommerce button.button:hover,
.woocommerce input.button:hover,.woocommerce #place_order:hover,
.woocommerce .checkout-button:hover{background:var(--purple-deep);color:#fff}
.woocommerce .button:disabled,.woocommerce .button.disabled{opacity:.5;cursor:not-allowed}

/* Checkout */
.woocommerce-checkout h3,
.woocommerce-checkout #order_review_heading{
  letter-spacing:-.04em;margin:0 0 20px;font-size:26px;
}
.woocommerce form .form-row{margin:0 0 16px;padding:0}
.woocommerce form .form-row label{
  color:var(--purple);letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:7px;font-size:12px;font-weight:800;display:block;
}
.woocommerce form .form-row .required{color:var(--magenta);text-decoration:none}
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.woocommerce .select2-container .select2-selection--single{
  border:1px solid var(--line)!important;background:#fff;outline:0;border-radius:0!important;
  width:100%;min-height:52px;padding:0 14px;font-size:15px;font-family:inherit;
}
.woocommerce form .form-row textarea{min-height:110px;padding:14px}
.woocommerce .select2-container .select2-selection__rendered{line-height:50px!important;padding:0!important}
.woocommerce .select2-container .select2-selection__arrow{height:50px!important}

.woocommerce-checkout #payment{background:var(--purple-soft);border-radius:0;padding:26px}
.woocommerce-checkout #payment ul.payment_methods{border-bottom:1px solid var(--line);padding:0 0 18px}
.woocommerce-checkout #payment ul.payment_methods li{margin-bottom:10px;list-style:none}
.woocommerce-checkout #payment ul.payment_methods label{font-size:14px;font-weight:700}
.woocommerce-checkout #payment div.payment_box{
  background:#fff;color:var(--muted);border-radius:0;font-size:13px;line-height:1.7;
}
.woocommerce-checkout #payment div.payment_box::before{display:none}
.woocommerce-checkout .place-order{padding-top:20px}

/* Notices */
.woocommerce-message,.woocommerce-info,.woocommerce-error,.woocommerce-noreviews{
  border-top:0;border-left:3px solid var(--magenta);background:var(--purple-soft);
  color:var(--ink);margin:0 0 26px;padding:18px 20px;font-size:14px;list-style:none;
}
.woocommerce-message::before,.woocommerce-info::before,.woocommerce-error::before{display:none}
.woocommerce-message{border-left-color:var(--lime)}

/* My account */
.woocommerce-account .woocommerce{grid-template-columns:230px 1fr;gap:50px;display:grid}
.woocommerce-MyAccount-navigation ul{margin:0;padding:0;list-style:none}
.woocommerce-MyAccount-navigation li a{
  border-bottom:1px solid var(--line);color:var(--muted);
  letter-spacing:.06em;text-transform:uppercase;
  padding:14px 0;font-size:12px;font-weight:800;display:block;transition:color .18s;
}
.woocommerce-MyAccount-navigation li a:hover,
.woocommerce-MyAccount-navigation li.is-active a{color:var(--magenta)}
.woocommerce-MyAccount-content p{font-size:15px;line-height:1.8;color:var(--muted)}

/* was `.login-shell > div` — renamed: inside an HTML widget the aside's DOM
   parent is .elementor-widget-container, so the child combinator would fail. */
.login-aside{color:#fff;background:linear-gradient(135deg,var(--purple-deep),var(--purple));padding:55px}
.login-aside>svg{color:var(--lime)}
.login-aside p{color:rgba(255,255,255,.68)}

/* ---------- 14. Keyframes ------------------------------------------------ */

@keyframes intro-left{from{opacity:0;transform:translate(-35px)}to{opacity:1;transform:translate(0)}}
@keyframes intro-right{from{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}
@keyframes intro-up{from{opacity:0;transform:translate(50%,28px)}to{opacity:1;transform:translate(50%)}}
@keyframes hero-focus{from{opacity:.2;transform:scale(1.045)}to{opacity:1;transform:scale(1)}}
@keyframes orbit{to{transform:rotate(360deg)}}
@keyframes morph{
  from{border-radius:46% 54% 43% 57%/58% 38% 62% 42%;transform:scale(1)}
  to{border-radius:58% 42% 56% 44%/43% 57%;transform:scale(1.025)}
}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes pulse{50%{opacity:.5}}
@keyframes reveal{from{opacity:0;transform:translateY(35px)}to{opacity:1;transform:translateY(0)}}

/* Scroll-linked reveal. Native in Chrome/Edge; the JS fallback below covers
   Safari and Firefox. */
@supports (animation-timeline:view()){
  .reveal{
    animation:reveal auto cubic-bezier(.2,.8,.2,1) both;
    animation-timeline:view();
    animation-range:entry 5% cover 35%;
  }
}
@supports not (animation-timeline:view()){
  .reveal{opacity:0;transform:translateY(35px);transition:opacity .7s cubic-bezier(.2,.8,.2,1),transform .7s cubic-bezier(.2,.8,.2,1)}
  .reveal.is-visible{opacity:1;transform:translateY(0)}
}

/* Never animate inside the Elementor editor — it makes elements unclickable */
.elementor-editor-active .reveal,
.elementor-editor-active .hero-copy,
.elementor-editor-active .hero-quick-links,
.elementor-editor-active .hero-featured-image{
  animation:none!important;opacity:1!important;transform:none!important;
}
.elementor-editor-active .hero-quick-links{transform:translate(50%)!important}

/* ---------- 15. Breakpoints ---------------------------------------------- */
/* Set these EXACT values in Elementor > Site Settings > Layout > Breakpoints:
   Tablet 1050 · Mobile Extra 820 · Mobile 560                               */

@media (max-width:1050px){
  .topbar{grid-template-columns:190px 1fr auto}
  .main-nav{gap:18px}
  .footer-main{grid-template-columns:1.2fr 1fr 1fr}
  .footer-main .newsletter{grid-column:1/-1;max-width:470px}
  .hero-title{max-width:750px;font-size:clamp(50px,6.7vw,68px)}
  .hero-copy{max-width:750px}
  .hero-quick-card{grid-template-columns:31px 1fr 18px;padding:18px 14px}
  .hero-card-copy strong{font-size:15px}
  .people{grid-template-columns:1fr}
  .people-intro{max-width:620px}
}

@media (max-width:820px){
  .subhero{min-height:510px;padding:130px 18px 85px}
  .subhero-title{font-size:clamp(45px,9vw,68px)}
  .news-grid,.services-box-grid,.director-grid,.board-grid{grid-template-columns:1fr 1fr}
  .catalog-layout{grid-template-columns:1fr;gap:32px}
  .product-detail{grid-template-columns:1fr;gap:50px}
  .woocommerce-account .woocommerce{grid-template-columns:1fr;gap:30px}
  .woocommerce .cart_totals{max-width:none;margin-left:0}
  .catalog-tools{align-items:flex-start}
  /* A 20-row category rail above the grid pushes the products off screen. */
  .catalog-cat-list{display:none}
  .catalog-cat-select{display:block}
  .catalog-layout aside>strong{margin-bottom:12px}
  .school-intro,.resource-layout,.alliance-grid,.split-story,
  .signup-shell,.login-shell{grid-template-columns:1fr;gap:55px}
  .school-image,.split-image{height:430px}
  .article-page{grid-template-columns:1fr;gap:45px}
  .article-page aside{max-width:360px;position:static}
  .top-shell{padding:0 12px;top:12px}
  .topbar{grid-template-columns:1fr auto;min-height:64px;padding:0 10px 0 14px}
  .logo{width:182px;margin-left:-14px;padding:0 14px}
  .logo img{height:51px}
  .main-nav,.nav-cta,.login-link span{display:none}
  .login-link{justify-content:center;width:40px;padding:0}
  .menu-toggle{display:grid}
  .mobile-nav{width:100%;max-width:var(--lk-width);background:#fff;flex-direction:column;
    margin:2px auto 0;padding:14px;display:flex;box-shadow:0 16px 40px rgba(18,8,42,.2)}
  .hero{align-items:flex-start;min-height:920px;padding:145px 18px 335px}
  .hero-copy{max-width:680px}
  /* Touch: no hover, and the gutters are gone — swipe drives the hero instead. */
  .hero-nav{display:none}
  .hero-title{max-width:650px;font-size:clamp(46px,8vw,62px)}
  .hero-featured-image{object-position:58% center}
  .hero-featured-shade{
    background:linear-gradient(90deg,rgba(18,6,36,.91),rgba(21,7,39,.5)),
               linear-gradient(rgba(12,4,24,.2) 0%,rgba(15,5,30,.32) 38%,rgba(15,5,30,.9) 100%);
  }
  .hero-quick-links{grid-template-columns:1fr 1fr;width:calc(100% - 36px);bottom:72px}
  .hero-quick-card{min-height:120px}
  .numbers,.about,.why{grid-template-columns:1fr}
  .number-grid{grid-template-columns:1fr 1fr}
  .feature-grid{grid-template-columns:1fr}
  .feature-card{grid-template-columns:.75fr 1.25fr;min-height:280px;display:grid}
  .feature-image{height:100%}
  .network-inner{grid-template-columns:1fr;gap:55px}
  .people-grid{grid-template-columns:repeat(3,1fr)}
  .person-card{min-height:360px}
  .program-columns{grid-template-columns:1fr}
  .why-image{height:470px}
  .article-grid{grid-template-columns:1fr 1fr;gap:35px 18px}
}

@media (max-width:560px){
  /* CATALOGUE OVERFLOW — measured fix, 17 Sept, at 320px.
     The shop archive made the document 347px wide inside a 320px viewport.
     Three separate causes, all of which had to go:

     1. Everything under .catalog-shell is a flex item of Elementor's
        .e-con-inner, which is NOT align-items:stretch — so each child sized
        itself to its max-content instead of to the container. `min-width:0`
        alone does NOT fix that (verified: computed min-width went to 0 and the
        width stayed 329px); the cross-axis size needs capping, hence
        `max-width:100%`.
     2. The cap has to reach every descendant, not just the top few. Fixing
        .catalog-tools and .catalog-layout simply moved the overflow down to
        <aside>, .product-grid and .catalog-cat-select in turn.
     3. A long product title ("Pensill með löngu skafti fyrir…") then still ran
        past the edge on its own: the offender is an inline <a>, and max-width
        does not apply to inline boxes. That one needs a wrap rule.

     Scoped to .catalog-shell deliberately — a global `* {max-width:100%}` would
     reach the hero and the Kvasir app, both of which bleed past the viewport on
     purpose. Verified after: document scrollWidth 320 on a 320 viewport, grid
     still two columns of 134.5px, all 24 cards intact. */
  /* ELEMENTOR CONTAINER MARGIN OVERFLOW — measured fix, 17 Sept, at 360px.
     Um okkur, Skóli and Bandalagið all made the document 378px wide inside 360.
     Cause: the inner `.e-con` carries `--width:100%` AND an 18px horizontal
     margin, so its 360px width and its 36px of margin add up to 396 and it
     starts 18px in — box ends at 378. Dropping the margin at phone widths is
     the right fix rather than clamping the width, because the container already
     has its own 18px padding: the gutter survives (text still starts at 18px,
     verified) and the box stops overflowing. Scoped to .page-content so the
     header, hero and Kvasir containers are untouched. */
  .page-content .e-con{margin-left:0;margin-right:0}

  .catalog-shell,.catalog-shell *{min-width:0;max-width:100%}
  .catalog-shell h2,.catalog-shell h2 a,.product-grid article{overflow-wrap:anywhere}

  /* HEADER OVERFLOW — measured fix, 16 Sept.
     .topbar was `grid-template-columns:1fr auto` with a FIXED 182px .logo, so
     neither column could give. At 360 the row needed 182 + 240 = 422px inside
     312px of space and .top-actions ran 74px past the right edge, making the
     document 434px wide on a 360px viewport. Every full-bleed section then
     looked narrow against it, with dead space down the right — on every page,
     not just Kvasir. Overflow starts around 470px and worsens as it narrows.

     Fixed by letting the logo column give instead of pinning it: minmax(0,1fr)
     lets the track shrink below its content, and width:auto + object-fit
     contain scales the wordmark down inside whatever is left after the icons.
     Deliberately not a set of smaller fixed widths — those merely move the
     breaking point, and 320px phones would still overflow. This cannot
     overflow at any width. */
  .topbar{grid-template-columns:minmax(0,1fr) auto}
  .logo{width:auto;min-width:0;overflow:hidden}
  .logo img{width:100%;height:44px}
  .top-actions{gap:4px}
  .search-link,.login-link,.menu-toggle{width:38px;height:38px}
  .cart-link{min-width:40px;height:38px}

  .mobile-menu-group>div{grid-template-columns:1fr}
  .subhero{min-height:470px;padding:115px 18px 75px}
  .subhero::after{bottom:-130px}
  .subhero-title{font-size:43px}
  .subhero-lead{font-size:13px}
  .inner-section{padding:75px 18px}
  .cart-drawer{padding:25px 18px}
  .product-grid{grid-template-columns:1fr 1fr}
  .product-subhero{height:90px}
  .product-detail-image{height:390px;padding:25px}
  .product-detail-copy h1{font-size:42px}
  .product-description{padding:65px 18px}
  .results-head{flex-direction:column;align-items:flex-start}
  .cart-drawer-head h2{font-size:30px}
  .article-page{padding:70px 18px 90px}
  .article-lead>p:first-child{font-size:17px}
  .article-lead blockquote{margin:35px 0;padding-left:22px;font-size:24px}
  .filter-row{flex-wrap:nowrap;padding-bottom:5px;overflow-x:auto}
  .filter-row button{flex:0 0 auto}
  .news-grid,.director-grid{grid-template-columns:1fr}
  .directory-grid,.club-grid,.board-grid{grid-template-columns:1fr}
  .results-head{flex-direction:column;align-items:flex-start}
  .document-list article{grid-template-columns:38px 1fr;gap:12px}
  .link-directory>a{grid-template-columns:28px 1fr 18px;gap:12px;padding:20px 8px}
  .link-directory h2{font-size:22px}
  .document-list article>a{grid-column:2}
  .resource-panel,.signup-shell form,.login-shell form,.login-aside{padding:30px 22px}
  .directory-grid article{min-height:250px;padding:30px 24px}
  .wide-cta{flex-direction:column;align-items:flex-start;padding:30px 22px}
  .wide-cta-h2{font-size:28px}
  .inner-h2{font-size:42px}
  .alliance-mark{min-height:330px}
  .member-strip{flex-direction:column;align-items:flex-start;margin-left:18px;margin-right:18px}
  .alliance-actions{flex-direction:column;align-items:flex-start}
  .school-image,.split-image{height:330px;box-shadow:12px 12px 0 var(--purple-soft)}
  .course-band,.values-band{grid-template-columns:1fr;margin-left:18px;margin-right:18px}
  .course-cell,.values-cell{border-bottom:1px solid rgba(255,255,255,.17);border-right:0;min-height:130px}
  .school-meta{flex-direction:column;align-items:stretch}
  .school-meta span{justify-content:center}
  .services-box-grid{grid-template-columns:1fr}
  .service-box-card{min-height:0}
  .news-card-image{height:225px}
  .section-pad{padding:82px 18px}
  .hero{min-height:840px;padding:120px 14px 285px}
  .hero::after{bottom:-116px}
  .hero-kicker{margin-bottom:16px}
  .hero-title{letter-spacing:-.05em;max-width:430px;font-size:clamp(36px,10.5vw,49px);line-height:.98}
  .hero-lead{display:none}
  .hero-buttons{margin-top:22px}
  .hero-buttons .button{width:auto;min-height:44px;padding:0 18px}
  .button{width:100%}
  .hero-featured-image{object-position:56% center}
  .hero-quick-links{gap:1px;width:calc(100% - 28px);bottom:66px}
  .hero-quick-card{grid-template-columns:27px 1fr 15px;min-height:104px;padding:16px 11px}
  .hero-quick-card .quick-icon{width:18px;height:18px}
  .hero-card-number{font-size:10px;top:9px;right:9px}
  .hero-card-copy strong{font-size:13px}
  .hero-card-copy small{margin-top:4px;font-size:10px}
  .hero-card-arrow{width:14px;height:14px}
  .numbers{gap:35px;padding-top:50px}
  .number-cell{min-height:110px}
  .section-h2,.people-intro h2,.people-intro .elementor-widget-heading{font-size:43px}
  .about-visual{min-height:430px}
  .image-frame{width:93%;height:370px}
  .about-stat{gap:8px;width:115px;height:115px;padding:18px 12px 15px}
  .about-stat b{font-size:40px}
  .about-stat span{width:72px;font-size:9.5px;line-height:1.2}
  .about-badge{width:205px;right:0}
  .feature-card{min-height:0;display:block}
  .feature-image{height:185px}
  .wordmarks{grid-template-columns:1fr 1fr}
  .people-grid{grid-template-columns:1fr}
  .person-card{min-height:460px}
  .video-cta{grid-template-columns:1fr;padding:75px 18px}
  .video-copy h2,.transform h2,.video-copy .elementor-widget-heading,.transform .elementor-widget-heading{font-size:47px}
  .play-button{width:72px;height:72px;margin:50px 0 0 15px}
  .program{padding-left:15px;padding-right:15px}
  .program-card{grid-template-columns:105px 1fr}
  .program-body{padding:18px}
  .why{gap:55px;padding-left:18px;padding-right:18px}
  .why-image{height:360px}
  .benefit-grid{grid-template-columns:1fr}
  .transform{min-height:520px;padding:80px 18px}
  .latest-heading{display:block}
  .latest-heading .more-link{margin-top:20px}
  .article-grid{grid-template-columns:1fr}
  .article-image{height:220px}
  .footer-main{grid-template-columns:1fr 1fr;gap:42px 25px;padding:65px 18px 45px}
  .footer-brand,.footer-main .newsletter{grid-column:1/-1}
  .footer-bottom{flex-direction:column;padding:22px 18px}
}

@media (prefers-reduced-motion:reduce){
  /* JS also stops the hero auto-advancing; this kills the cross-fade. */
  .hero-slides>.hero-copy,.hero-featured-image{transition:none}

  html{scroll-behavior:auto}
  *,::before,::after{
    transition-duration:.01ms!important;
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
  }
}

/* ---------------------------------------------------------------------------
 * HEADER SEARCH OVERLAY (task 3.1)
 *
 * Every value below was read off the prototype's computed styles, not eyeballed:
 * overlay rgba(18,6,36,.88) + blur(14px) at z-index 200 with 90px/24px padding;
 * a 900px white panel, 48px padding, 0 30px 90px rgba(0,0,0,.32); the magenta
 * 8px/800 micro-label at 1.2px tracking; the 62px/820 heading with 10px 0 28px
 * margins; a 64px input row on a 42px/1fr grid inside a 2px purple border;
 * result rows on 55px/1fr/24px with 18px gaps and a 1px hairline; chips at
 * 10px/13px on --purple-soft.
 * ------------------------------------------------------------------------ */

.site-search-overlay{
  position:fixed;inset:0;z-index:200;
  display:flex;justify-content:center;
  padding:90px 24px;overflow-y:auto;
  background:rgba(18,6,36,.88);backdrop-filter:blur(14px)}
/* The UA rule for [hidden] is display:none at 0,0,1 and loses to the flex
   above — the same trap as .club-grid a[hidden]. */
.site-search-overlay[hidden]{display:none}

.search-close{
  position:fixed;top:28px;right:30px;width:48px;height:48px;
  display:grid;place-items:center;
  color:#fff;background:none;border:1px solid rgba(255,255,255,.35);
  border-radius:50%;cursor:pointer}
.search-close:hover{background:rgba(255,255,255,.12)}

.site-search-panel{
  width:900px;max-width:100%;height:max-content;
  padding:48px;background:var(--paper);
  box-shadow:0 30px 90px rgba(0,0,0,.32)}
.site-search-panel > span{
  color:var(--magenta);font-size:11px;font-weight:800;letter-spacing:1.2px}
.site-search-panel h2{
  margin:10px 0 28px;font-size:clamp(36px,5vw,62px);
  font-weight:var(--heading-weight);color:var(--ink);line-height:1}
.site-search-panel label{
  display:grid;grid-template-columns:42px 1fr;align-items:center;
  height:64px;padding:0 18px;border:2px solid var(--purple)}
.site-search-panel label svg{color:var(--magenta)}
.site-search-panel input{
  font-size:16px;font-family:var(--font);color:var(--ink);
  background:none;border:0;outline:none;width:100%}
/* Chrome draws its own clear button on type=search and it collides with the
   2px border at this height. */
.site-search-panel input::-webkit-search-cancel-button{display:none}

.site-search-results{margin-top:25px}
.site-search-results a{
  display:grid;grid-template-columns:55px 1fr 24px;gap:18px;align-items:center;
  padding:12px 5px;color:var(--ink);text-decoration:none;
  border-bottom:1px solid var(--line)}
.site-search-results a:hover{background:var(--purple-soft)}
.site-search-results a small{
  color:var(--magenta);font-size:10px;font-weight:800;
  letter-spacing:.56px;text-transform:uppercase}
.site-search-results a strong{
  display:block;font-family:var(--font);font-size:17px;font-weight:700;color:var(--ink)}
.site-search-results a span{display:block;font-size:12px;color:var(--muted)}
.site-search-results a svg{color:var(--purple)}
.search-empty{margin:18px 5px;font-size:15px;color:var(--muted)}

.search-suggestions{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:25px}
.search-suggestions[hidden]{display:none}
.search-suggestions > span{font-size:11px;color:var(--muted);text-transform:uppercase}
.search-suggestions a{
  padding:10px 13px;font-size:12px;font-weight:750;
  color:var(--purple);background:var(--purple-soft);text-decoration:none}
.search-suggestions a:hover{background:#e0d8f3}

@media (max-width:560px){
  .site-search-overlay{padding:76px 14px 24px}
  .site-search-panel{padding:26px 18px}
  .search-close{top:16px;right:14px;width:42px;height:42px}
  /* The label column is 42px of icon on a 375px screen — the field needs it back. */
  .site-search-panel label{grid-template-columns:30px 1fr;padding:0 12px;height:56px}
  .site-search-results a{grid-template-columns:44px 1fr 18px;gap:12px}
}

/* ---------------------------------------------------------------------------
 * CLIENT REVIEW — round 1 (21 Sept feedback, applied 23 Sept)
 * ------------------------------------------------------------------------ */

/* LOGO — 20px wider on desktop only, aspect ratio preserved.
   The <img> is width:100% height:58px object-fit:contain, so widening the box
   alone would letterbox it. Height goes up by the same proportion (205→225 is
   +9.8%, so 58→64) and object-fit keeps the artwork undistorted.
   NOTE: logo.png is 400x152. At 225px CSS it is still above 1x but below the
   2x it had before, so it will look marginally softer on retina. If the client
   wants it larger again, ask for an SVG or a 2x PNG rather than scaling this
   file further. */
@media (min-width:1051px){
  .logo{width:225px}
  .logo img{height:64px}
}

/* Post share rail — icons before the label, per client. */
.article-page aside a svg{vertical-align:-2px;margin-right:7px}

/* CHECKOUT — the page heading sat behind the sticky header.
   The header is position:fixed, so the document does not reserve space for it
   and WooCommerce's first heading rendered underneath. Padding on the shell
   rather than a margin on the heading, so the gap survives WooCommerce
   reordering its own blocks. */
.woocommerce-checkout .page-content,
.woocommerce-cart .page-content{padding-top:118px}
@media (max-width:1050px){
  .woocommerce-checkout .page-content,
  .woocommerce-cart .page-content{padding-top:96px}
}
@media (max-width:560px){
  .woocommerce-checkout .page-content,
  .woocommerce-cart .page-content{padding-top:80px}
}

/* SUBHERO LOCKUP — the title had NO space under it on any page.
   Measured against the prototype: <span.tag> 17px <h1 margin:16px 0 18px> 18px <p>.
   Our markup puts each of those in an Elementor widget inside a flex
   .subhero-inner whose gap is 0, and Elementor zeroes the widget margins — so
   the three lines rendered touching, and the heading's descenders (ð, ö, ý)
   ran into the lead. Restoring the prototype's own margins on the title widget
   is enough; the tag and lead keep their zero margins as drawn.
   This affects every page with a subhero, not just the shop.

   The selector is .subhero .subhero-inner > .subhero-title, and it repeats the
   value as margin-block-end, on purpose: Elementor sets widget spacing with the
   logical property, which a plain `margin` shorthand at lower specificity does
   not beat — verified, the margin-bottom came back 0px until both were given. */
.subhero .subhero-inner > .subhero-title{margin:16px 0 18px;margin-block-end:18px}

/* WOOCOMMERCE NOTICES — "…hefur verið bætt í vörukörfuna þína".
   WooCommerce prints .woocommerce-notices-wrapper as a DIRECT CHILD OF <body>,
   before anything else, so it rendered at y=0 — underneath the fixed header,
   which occupies 16→86px. Measured: notice top 0, header bottom 86, so the
   whole 88px message sat behind the bar.
   Clearing it with padding on the wrapper (not a margin on the notice) keeps
   WooCommerce free to swap the notice class for error/info variants, and the
   :empty guard means the padding costs nothing on the vast majority of page
   loads that have no notice at all. Width matches the site container so the
   message lines up with the content beneath it. */
.woocommerce-notices-wrapper{
  width:100%;max-width:var(--lk-width);margin:0 auto;
  padding:110px 24px 0;box-sizing:border-box}
.woocommerce-notices-wrapper:empty{padding:0}
@media (max-width:1050px){
  .woocommerce-notices-wrapper{padding:100px 18px 0}
}
@media (max-width:560px){
  .woocommerce-notices-wrapper{padding:88px 14px 0}
}

/* CART CROSS-SELLS ("Þú gætir haft áhuga á…") — restyled to match the shop grid.
   WooCommerce renders these with its own loop markup, floats and 48% widths,
   so they looked nothing like our product cards. Every selector below is
   prefixed .woocommerce .cart-collaterals because WooCommerce's own rules are
   already that specific — a plain .cross-sells li.product{width:auto} loses to
   them and the cards collapsed to 83px (measured).

   Layout: .cart-collaterals becomes a column and the totals are ordered FIRST.
   Left as-is, making the cross-sells full width pushed the totals and the
   checkout button below the suggestions, which is the wrong thing to put in
   front of someone who is ready to pay. */
.woocommerce .cart-collaterals{display:flex;flex-direction:column}
.woocommerce .cart-collaterals .cart_totals{order:1;float:none}
.woocommerce .cart-collaterals .cross-sells{order:2;width:100%;float:none;margin:60px 0 0}
.woocommerce .cart-collaterals .cross-sells > h2{
  margin:0 0 22px;font-family:var(--font);font-size:26px;
  font-weight:var(--heading-weight);letter-spacing:-.02em;color:var(--ink)}
.woocommerce .cart-collaterals .cross-sells ul.products{
  display:grid;grid-template-columns:repeat(3,1fr);gap:34px 15px;
  margin:0;padding:0;list-style:none;float:none}
/* WooCommerce clears its float with pseudo-elements; in a grid they become
   phantom cells. */
.woocommerce .cart-collaterals .cross-sells ul.products::before,
.woocommerce .cart-collaterals .cross-sells ul.products::after{display:none}
.woocommerce .cart-collaterals .cross-sells ul.products li.product{
  width:auto;float:none;margin:0;padding:0;display:block;position:relative}
.woocommerce .cart-collaterals .cross-sells ul.products li.product a.woocommerce-loop-product__link{
  display:block;color:inherit;text-decoration:none}
.woocommerce .cart-collaterals .cross-sells ul.products li.product img{
  background:#f5f2f8;object-fit:contain;mix-blend-mode:multiply;filter:saturate(.68);
  width:100%;height:235px;margin:0;transition:transform .6s}
.woocommerce .cart-collaterals .cross-sells ul.products li.product:hover img{transform:scale(1.05)}
.woocommerce .cart-collaterals .cross-sells ul.products li.product .woocommerce-loop-product__title{
  margin:16px 0 0;padding:0;font-family:var(--font);font-size:18px;
  font-weight:var(--heading-weight);letter-spacing:-.02em;line-height:1.2;color:var(--ink)}
.woocommerce .cart-collaterals .cross-sells ul.products li.product .price{
  display:block;margin:7px 0 0;font-size:14px;font-weight:800;color:var(--purple)}
.woocommerce .cart-collaterals .cross-sells ul.products li.product .price del{
  color:var(--muted);font-weight:600;margin-right:7px}
.woocommerce .cart-collaterals .cross-sells ul.products li.product .price ins{text-decoration:none}
/* The lime corner button from .product-grid. The label is hidden rather than
   removed so screen readers still get "Veldu kosti" / "Setja í körfu". */
.woocommerce .cart-collaterals .cross-sells ul.products li.product a.button{
  position:absolute;top:195px;right:10px;width:40px;height:40px;min-height:0;
  padding:0;margin:0;background:var(--lime);color:var(--purple);
  font-size:0;display:grid;place-items:center}
.woocommerce .cart-collaterals .cross-sells ul.products li.product a.button::after{
  content:"\2192";font-size:18px;font-weight:800;line-height:1}

@media (max-width:820px){
  .woocommerce .cart-collaterals .cross-sells ul.products{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .woocommerce .cart-collaterals .cross-sells{margin-top:40px}
  .woocommerce .cart-collaterals .cross-sells ul.products li.product img{height:180px}
  .woocommerce .cart-collaterals .cross-sells ul.products li.product a.button{top:140px}
}

/* VARIATION TABLE — WooCommerce renders the attribute picker as a <table> and
   something in the stack paints its cells rgba(128,128,128,.07). That grey band
   sat behind "TEGUND" and ran on below the select as an empty strip, which is
   what the client circled. The table is flattened to blocks so the label and the
   field stack like every other field on the page. */
.woocommerce table.variations,
.woocommerce table.variations tbody,
.woocommerce table.variations tr,
.woocommerce table.variations th,
.woocommerce table.variations td{
  background:none;border:0;padding:0;display:block;width:100%}
.woocommerce table.variations td.value{margin:0 0 14px}
.woocommerce table.variations select{width:100%;margin:0}

/* DISABLED BUTTONS — "Setja í körfu" before a variant is chosen, and "Uppfæra
   körfu" until a quantity changes. WooCommerce dims them with opacity:.5, which
   fades the label along with the fill and left the text unreadable (client
   flagged "Uppfæra körfu").

   The fill is NOT overridable here: background-color at !important, and even an
   inline !important, both leave it rgb(59,18,100) — verified. So the muted look
   comes from a filter on the whole button instead, which needs no knowledge of
   where the colour is set, and the label keeps its own white at full opacity.
   opacity needs !important because WooCommerce's own .disabled rule is more
   specific than anything sensible to write here. */
button.disabled,button:disabled,.button:disabled,a.button.disabled{
  opacity:1!important;filter:grayscale(.5) brightness(1.45);cursor:not-allowed}
button.disabled:hover,button:disabled:hover,.button:disabled:hover{transform:none}

/* "Uppfæra körfu" — the cart's update button kept dark ink (#171220) on the
   purple fill, measured contrast 1.33:1, which is what the client saw as
   invisible text. The product page's button was fine because it already had
   white; this one only carries class="button" and picked up a generic colour.

   !important is needed, not laziness: a plugin stylesheet in the stack ships a
   universal `*,::after,::before{color:#000!important}` rule, and no amount of
   specificity beats an !important universal selector. With white restored the
   contrast is 12.6:1 after the disabled filter is applied. */
button[name="update_cart"],
button[name="update_cart"]:disabled{color:#fff!important}

/* ---------------------------------------------------------------------------
 * CLIENT REVIEW — round 2 (1 Oct feedback)
 * ------------------------------------------------------------------------ */

/* Hero: more air above the copy, and a slightly smaller headline.
   The client later confirmed this applies to EVERY page, so the sub-hero block
   below carries the same treatment. */
.hero{padding-top:175px}
.hero-title{font-size:clamp(40px,3.6vw,52px)}
@media (max-width:1050px){
  .hero-title{font-size:clamp(40px,5.2vw,50px)}
}

/* SHOP SUB-HERO SLIDER ([leiklist_shop_slider]).
   Slides are stacked .subhero-image elements; only .is-active is visible.
   The single-image case keeps the original rule untouched — when the shortcode
   renders one slide it emits no .is-active class at all, so a static sub-hero
   behaves exactly as before and none of this applies. */
/* SPECIFICITY, THE HARD WAY: the first version of this hid every slide,
   including the active one. `.subhero:has(.subhero-image.is-active)` scores
   0,3,0 on its own — :has() takes the specificity of its argument — so the
   hide rule landed at 0,4,0 and out-specified a plain
   `.subhero .subhero-image.is-active` at 0,3,0. Both rules now share the same
   :has() prefix, so the active one wins on the extra class alone. */
.subhero-image{transition:opacity .9s ease}
.subhero:has(.subhero-image.is-active) .subhero-image{
  opacity:0;
  /* The zoom-in belongs to the first paint only; re-running it on every slide
     change made the whole hero pulse. */
  animation:none}
.subhero:has(.subhero-image.is-active) .subhero-image.is-active{opacity:1}
.subhero-slides{display:none}

.subhero-nav{
  z-index:7;opacity:0;cursor:pointer;color:#fff;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.26);
  backdrop-filter:blur(14px) saturate(1.1);
  place-items:center;width:52px;height:52px;padding:0;display:grid;
  position:absolute;top:50%;transform:translateY(-50%);
  transition:opacity .28s,background .2s,border-color .2s,color .2s}
.subhero-nav.prev{left:24px}
.subhero-nav.next{right:24px}
.subhero:hover .subhero-nav{opacity:1}
.subhero-nav:hover{background:var(--lime);border-color:var(--lime);color:var(--purple-deep)}
.subhero-nav:focus-visible{opacity:1;outline:2px solid var(--lime);outline-offset:3px}

/* Touch: no hover to reveal arrows, and the gutters are gone — swipe drives it,
   the same decision as the homepage hero. */
@media (max-width:820px){
  .subhero-nav{display:none}
}

/* SUB-HERO on every inner page — content was pinned to the top, 2px under the
   header, with 236px of dead space beneath it.
   WHY GRID: .subhero is display:flex with align-items:flex-end, and that has no
   effect — measured, the content sat at padding-top regardless of the alignment
   value, so flex-end and center both rendered identically. Grid's align-content
   does what the flex rule was supposed to, on every page, without having to
   find whatever is defeating it.
   Result across Fréttir, Skóli, Aðildarfélög: 67px clear of the header and 185px
   below, instead of 2px and 236px. */
.subhero{display:grid;align-content:center;padding:150px 24px 110px}

/* One headline size for the whole site. Sub-heroes were 82px against the
   homepage hero's 62px, which is what made every inner page read as shouting.
   Same clamp as .hero-title so the two match at every width. */
.subhero-title,
.subhero-title h1{font-size:clamp(36px,3.6vw,52px);line-height:1.04}
