/*
Theme Name: Connect Bus (Astra Child)
Template: astra
Version: 1.0.0
Description: Connect Bus LMS Pro portal child theme. Tokens fra design/tokens.css er kanonisk.
*/

:root {
  /* Color — 5 av 5 mulige (disiplin > kvote) */
  --color-ink: #002730;      /* = offisiell Dusk. Tekst, headinger, footer-bg, logo */
  --color-surface: #FFFFFF;  /* = offisiell White. Sidebakgrunn + kort */
  --color-mist: #D1D7DF;     /* = offisiell Breeze. Alt-seksjoner + borders */
  --color-accent: #F6FF7D;   /* = offisiell Reflex. KUN knapper/CTA — aldri tekst på hvit */
  --color-sand: #CDC6B9;     /* = offisiell Sand. Sekundær varm bakgrunn. Aldri stablet på mist. */

  /* Type — offisiell to-font-system (Frontify-manualen) */
  --font-display: 'Klarheit Kurrent', Arial, sans-serif;  /* offisiell fallback er Arial per manualen */
  --font-body: 'Matter', Arial, sans-serif;                /* offisiell fallback er Arial per manualen */
  --font: var(--font-body); /* kompat-alias — design-reference.html/index.html refererer var(--font) direkte, se DESIGN.md ## Endringer */

  /* Space */
  --sp-sm: 0.5rem;
  --sp-md: 1rem;
  --sp-lg: 1.5rem;
  --sp-xl: 3rem;

  /* Radius — pill på interaktivt, skarpt på flater (som connectbus.no) */
  --r-card: 0;
  --r-pill: 9999px;

  /* Shadow — brandet bruker ingen; 1px mist-border gjør jobben */
  --shadow: none;
}

@font-face {
  font-family: 'Klarheit Kurrent';
  src: url('fonts/ESKlarheitKurrent-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Matter';
  src: url('fonts/Matter-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

body { font-family: var(--font-body); color: var(--color-ink); }
h1, h2 { font-family: var(--font-display); font-weight: 500; }
h1 { line-height: 1.08; }
h2 { line-height: 1.15; }
h3, h4, h5, h6 { font-family: var(--font-body); font-weight: 500; }

/* ==========================================================================
   Component CSS — Connect Bus front page + header/footer/user-menu
   Source: design/design-reference.html §6 (build-spec.md), values kept
   verbatim. @font-face is already declared above (fonts/*.woff2, not
   assets/fonts/* as the parfil comment implies — path adjusted here since
   the woff2 files were already converted + placed by the base-setup agent).
   ========================================================================== */

/* ---------- Base additions (font-family/color already set above) ---------- */
body { font-weight: 400; background: var(--color-surface); -webkit-font-smoothing: antialiased; }
/* NB: h3,h4,h5,h6 keep the existing font-weight:500 base rule above (basis-
   agent decision, site-wide). The parfil's "h3 { font-weight: 400 }" intent
   is still honored on the front page because .course-title sets
   font-weight:400 with higher specificity (class+element beats element). */

/* Type scale — fluid clamp(), 4 levels: H1 / H2 / body / small */
.h1      { font-size: clamp(2.5rem, 4.2vw + 1rem, 4.25rem); line-height: 1.08; }
.h2      { font-size: clamp(1.75rem, 1.4vw + 1.25rem, 2.25rem); line-height: 1.15; }
.body-lg { font-size: clamp(1.1875rem, 0.4vw + 1.1rem, 1.3125rem); line-height: 1.5; }
.small   { font-size: 0.9375rem; line-height: 1.5; font-variant-numeric: tabular-nums; }

.visually-hidden {
  position: absolute; width: 1px; height: 1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}

/* ---------- Scoped reset ----------
   The parfil's global reset (ul list-style, img display:block, a color:
   inherit, h1/h2/h3/p margin:0) would collide with Astra/plugin markup
   elsewhere (course archive lists, admin-rendered content, etc.), so it is
   scoped to the header, footer and front-page sections only — the only
   places this markup is used. box-sizing/margin/padding resets below are
   left global since they only normalize UA defaults and are safe site-wide. */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }

.site-header a,
.site-footer a,
.hero a,
.bg-mist a,
.bg-surface a { color: inherit; }

.site-header ul,
.site-footer ul,
.hero ul,
.bg-mist ul,
.bg-surface ul { margin: 0; padding: 0; list-style: none; }

.site-header h1, .site-header h2, .site-header h3, .site-header p,
.site-footer h1, .site-footer h2, .site-footer h3, .site-footer p,
.hero h1, .hero h2, .hero h3, .hero p,
.bg-mist h1, .bg-mist h2, .bg-mist h3, .bg-mist p,
.bg-surface h1, .bg-surface h2, .bg-surface h3, .bg-surface p { margin: 0; }

.site-header img,
.site-footer img,
.hero img,
.bg-mist img,
.bg-surface img { max-width: 100%; display: block; }

/* ---------- Skip link ----------
   Astra already renders its own skip-link (header.php: <a class="skip-link
   screen-reader-text" href="#content">), so it is styled in place here
   instead of adding a second one (see functions.php for the Norwegian
   string override). It also carries the "screen-reader-text" class, whose
   clip/width/height hiding must be reset here so the accent-pill focus
   style is actually visible. */
.skip-link {
  position: absolute;
  top: -100px;
  left: var(--sp-md);
  z-index: 100;
  background: var(--color-accent);
  color: var(--color-ink);
  padding: var(--sp-sm) var(--sp-lg);
  border-radius: var(--r-pill);
  font-weight: 500;
  text-decoration: none;
  transition: top 0.15s ease;
  clip: auto;
  width: auto;
  height: auto;
  overflow: visible;
  white-space: nowrap;
}
.skip-link:focus { top: var(--sp-md); }

/* ---------- Focus ---------- */
a:focus-visible,
button:focus-visible {
  outline: 2px solid var(--color-ink);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}

/* ---------- Layout helpers ---------- */
.wrap {
  max-width: 1200px;
  margin: 0 auto;
  padding-left: var(--sp-lg);
  padding-right: var(--sp-lg);
}
section { padding: var(--sp-xl) 0; }
.bg-mist { background: var(--color-mist); }
.bg-surface { background: var(--color-surface); }
.bg-ink { background: var(--color-ink); color: var(--color-surface); }

/* ---------- Pills (CTA buttons — reserved for real actions) ---------- */
.pill {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-sm);
  border-radius: var(--r-pill);
  background: var(--color-accent);
  color: var(--color-ink);
  font-weight: 500;
  font-size: 0.9375rem;
  text-decoration: none;
  white-space: nowrap;
  border: none;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.pill:hover { background: var(--color-ink); color: var(--color-accent); }
.pill--cta,
.mk-user-menu__login { padding: var(--sp-sm) var(--sp-lg); }
.pill--sm { padding: 0.4rem var(--sp-md); font-size: 0.875rem; }
/* NB: 0.4rem er utenfor spacing-skalaen (sm/md/lg/xl) — arvet bevisst fra
   godkjent prototype, ikke en feil. Se DESIGN.md ## Endringer. */

/* ---------- Nav links (plain text, pill only on hover/active) ---------- */
.nav-link {
  display: inline-flex;
  align-items: center;
  padding: var(--sp-sm) var(--sp-lg);
  border-radius: var(--r-pill);
  background: transparent;
  color: var(--color-ink);
  font-weight: 500;
  font-size: 0.9375rem;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.15s ease;
}
.nav-link:hover,
.nav-link[aria-current="page"] { background: var(--color-accent); }
/* Kurskatalog active-state — the header HTML element is static, so
   aria-current can't be set server-side per build-decisions.md §3; the
   accepted realization is a body-class rule on the courses archive
   (verified body class: post-type-archive-scorm_package). */
body.post-type-archive-scorm_package .nav-link--kurskatalog { background: var(--color-accent); }

/* ---------- Header ---------- */
.site-header {
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-mist);
}
/* Astra's own dynamic CSS sets .ast-primary-header-bar background to
   var(--ast-global-color-primary) (= mist token, wrong per spec) and its
   border-bottom-color to var(--ast-global-color-subtle-background) (= ink
   token) — inspected in the rendered <head> inline stylesheet. Both are
   single-class selectors; overriding them with a 2-class selector here wins
   on specificity without !important. Covers desktop + mobile header rows
   (both use the same .ast-primary-header-bar class). */
.site-header .ast-primary-header-bar {
  background-color: var(--color-surface);
  border-bottom-color: var(--color-mist);
}
/* The parfil's ".site-header .wrap { display:flex; justify-content:
   space-between; ... }" has no real match in Astra's builder DOM — there is
   no element with class="wrap" inside the header. Astra's own row wrapper
   (.ast-builder-grid-row, inside .site-primary-header-wrap) already renders
   at max-width:1200px with the logo/nav split handled by its own grid-area
   system (verified in the rendered inline CSS + DOM), so that part needs no
   override. What DID differ from spec: Astra defaults the row to a fixed
   min-height:80px instead of sizing to content + var(--sp-md) padding —
   overridden below on the real wrapper class, covering desktop + mobile
   (both rows share .site-primary-header-wrap). */
.site-header .site-primary-header-wrap {
  min-height: 0;
  padding-top: var(--sp-md);
  padding-bottom: var(--sp-md);
}
.logo-link { display: inline-flex; }
.logo-link img { height: 26px; width: auto; }
.site-nav { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-sm); }

/* ---------- User menu (mirrors [mentorkit_user_menu] shortcode DOM) ---------- */
/* DOM-klassene mk-user-menu* kommer FRA PLUGINEN, ikke fra oss — verifisert
   mot faktisk rendret markup (do_shortcode via Astra HTML-element) før disse
   reglene ble tatt i bruk. Avvik fra parfilens antatte markup, dokumentert:
   - Guest-lenken <a class="mk-user-menu__login"> mangler "pill"-klassen som
     parfilen antok den ville arve — pill-stilen er derfor lagt direkte på
     .mk-user-menu__login her (ikke bare padding, som var alt spec hadde).
   - Pluginen kan også rendre en <a class="mk-user-menu__register"> når
     "Anyone can register" er på (av på denne siten i dag) — gitt et
     tilsvarende, udokumentert utseende for robusthet.
   - Logget-inn-teksten ("Log In", "Welcome back", "Hi, %s!", "My courses"
     osv.) kommer fra plugin-i18n-strenger, ikke fra parfilen — norsk
     oversettelse av dem er utenfor denne buildens scope (plugin-nivå). */
.mk-user-menu { display: flex; align-items: center; gap: var(--sp-md); position: relative; }
.mk-user-menu--guest { display: flex; align-items: center; gap: var(--sp-md); }
.mk-user-menu__login {
  display: inline-flex;
  align-items: center;
  border-radius: var(--r-pill);
  background: var(--color-accent);
  color: var(--color-ink);
  font-weight: 500;
  font-size: 0.9375rem;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.mk-user-menu__login:hover { background: var(--color-ink); color: var(--color-accent); }
.mk-user-menu__register {
  display: inline-flex;
  align-items: center;
  padding: var(--sp-sm) var(--sp-lg);
  border-radius: var(--r-pill);
  background: transparent;
  color: var(--color-ink);
  font-weight: 500;
  font-size: 0.9375rem;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.15s ease;
}
.mk-user-menu__register:hover { background: var(--color-accent); }
.mk-user-menu--logged-in { display: none; }
body.is-logged-in .mk-user-menu--guest,
body.logged-in .mk-user-menu--guest { display: none; }
body.is-logged-in .mk-user-menu--logged-in,
body.logged-in .mk-user-menu--logged-in { display: flex; }

.mk-user-menu__greeting {
  display: flex; flex-direction: column; align-items: flex-end;
  line-height: 1.3; color: var(--color-ink);
}
.mk-user-menu__welcome { font-size: 0.8125rem; font-weight: 400; }
.mk-user-menu__name { font-size: 1rem; font-weight: 500; }

.mk-user-menu__trigger {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-sm);
  border: 1px solid var(--color-ink);
  border-radius: var(--r-pill);
  background: transparent;
  color: var(--color-ink);
  padding: var(--sp-sm) var(--sp-lg);
  font-family: var(--font);
  font-size: 0.9375rem;
  font-weight: 500;
  cursor: pointer;
  transition: background-color 0.15s ease;
}
.mk-user-menu__trigger:hover,
.mk-user-menu__trigger[aria-expanded="true"] { background: var(--color-accent); }
.mk-user-menu__icon { flex-shrink: 0; }
.mk-user-menu__chevron { flex-shrink: 0; transition: transform 0.15s ease; }
.mk-user-menu__trigger[aria-expanded="true"] .mk-user-menu__chevron { transform: rotate(180deg); }

.mk-user-menu__dropdown {
  position: absolute;
  top: calc(100% + var(--sp-sm));
  right: 0;
  width: 15rem;
  background: var(--color-surface);
  border: 1px solid var(--color-mist);
  border-radius: var(--r-card);
  z-index: 20;
}
.mk-user-menu__dropdown[hidden] { display: none; }
.mk-user-menu__dropdown-header {
  padding: var(--sp-md) var(--sp-lg);
  display: flex; flex-direction: column; gap: 0.125rem;
}
/* NB: 0.125rem er utenfor spacing-skalaen — arvet bevisst, se DESIGN.md ## Endringer */
.mk-user-menu__dropdown-name { font-size: 1rem; font-weight: 500; color: var(--color-ink); }
.mk-user-menu__dropdown-email { font-size: 0.8125rem; color: var(--color-ink); }
.mk-user-menu__dropdown-divider { height: 1px; background: var(--color-mist); }
.mk-user-menu__dropdown-item {
  display: flex; align-items: center; gap: var(--sp-sm);
  padding: var(--sp-sm) var(--sp-lg);
  font-size: 0.9375rem;
  color: var(--color-ink);
  text-decoration: none;
  transition: background-color 0.1s ease;
}
.mk-user-menu__dropdown-item:hover { background: var(--color-mist); }
.mk-user-menu__dropdown-item svg { flex-shrink: 0; }

/* ---------- Hero ---------- */
.hero .wrap { display: grid; grid-template-columns: 1.6fr 1fr; gap: var(--sp-xl); align-items: center; }
.hero-copy p { margin-top: var(--sp-md); max-width: 42ch; }
.hero-copy .pill { margin-top: var(--sp-lg); }
.cta-text--logged-in { display: none; }
body.is-logged-in .cta-text--guest,
body.logged-in .cta-text--guest { display: none; }
body.is-logged-in .cta-text--logged-in,
body.logged-in .cta-text--logged-in { display: inline; }

/* Certificate stamp visual */
.cert-card {
  position: relative;
  border: 1px solid var(--color-ink);
  border-radius: var(--r-card);
  background: var(--color-surface);
  padding: var(--sp-lg);
  aspect-ratio: 4 / 5;
  display: flex; flex-direction: column; justify-content: space-between;
  overflow: hidden;
}
.cert-anchor { position: absolute; width: 14px; height: 14px; pointer-events: none; }
.cert-anchor--tl { top: var(--sp-sm); left: var(--sp-sm); border-top: 2px solid var(--color-ink); border-left: 2px solid var(--color-ink); }
.cert-anchor--tr { top: var(--sp-sm); right: var(--sp-sm); border-top: 2px solid var(--color-ink); border-right: 2px solid var(--color-ink); }
.cert-anchor--bl { bottom: var(--sp-sm); left: var(--sp-sm); border-bottom: 2px solid var(--color-ink); border-left: 2px solid var(--color-ink); }
.cert-anchor--br { bottom: var(--sp-sm); right: var(--sp-sm); border-bottom: 2px solid var(--color-ink); border-right: 2px solid var(--color-ink); }
.cert-watermark {
  position: absolute; top: 50%; left: 50%; width: 68%; height: auto;
  transform: translate(-50%, -50%); opacity: 0.06; pointer-events: none;
}
.cert-kicker { position: relative; font-size: 0.8125rem; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; }
.cert-body { position: relative; }
.cert-course { font-size: 1.375rem; font-weight: 400; line-height: 1.3; }
.cert-date { margin-top: var(--sp-sm); font-size: 0.9375rem; }
.cert-meta {
  position: relative; font-size: 0.875rem; color: var(--color-ink);
  font-variant-numeric: tabular-nums;
  border-top: 1px solid var(--color-mist); padding-top: var(--sp-sm);
}

/* ---------- Section headings ---------- */
.section-head { margin-bottom: var(--sp-xl); }

/* ---------- Course cards ---------- */
.course-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-lg); }
.course-card {
  background: var(--color-surface);
  border: 1px solid var(--color-mist);
  border-left: 3px solid var(--color-ink);
  border-radius: var(--r-card);
  padding: var(--sp-lg);
  display: flex; flex-direction: column; gap: var(--sp-md);
}
.course-title { font-size: 1.5rem; font-weight: 400; line-height: 1.3; }
.course-meta { color: var(--color-ink); }
.course-card .pill { margin-top: auto; align-self: flex-start; }

/* ---------- Steps ---------- */
.step-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-xl); }
.step-num { font-size: 3.25rem; font-weight: 400; line-height: 1; font-variant-numeric: tabular-nums; }
.step-text { margin-top: var(--sp-md); }

/* ---------- Footer ---------- */
.site-footer { padding: var(--sp-xl) 0; }
.footer-top { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--sp-lg); }
.footer-logo img { height: 22px; width: auto; }
.footer-links { display: flex; gap: var(--sp-lg); flex-wrap: wrap; }
.footer-links a { text-decoration: none; color: var(--color-mist); }
.footer-links a:hover { color: var(--color-surface); }
.footer-line {
  margin-top: var(--sp-lg); padding-top: var(--sp-lg);
  border-top: 1px solid var(--color-mist); color: var(--color-mist);
}

/* ---------- Front page <main> — kill Astra container padding/box so
   sections go edge-to-edge and center via their own .wrap (see task D) ---------- */
body.page-id-14 #primary,
body.page-id-14 .site-content .ast-container {
  padding: 0;
  max-width: none;
}
body.page-id-14 .entry-content { margin: 0; }

/* ---------- Responsive (max-width: 720px) ---------- */
@media (max-width: 720px) {
  section { padding: var(--sp-xl) 0; }
  .hero .wrap { grid-template-columns: 1fr; }
  .hero-copy { order: 1; }
  .cert-card { order: 2; max-width: 340px; }
  .course-grid { grid-template-columns: 1fr; }
  .step-grid { grid-template-columns: 1fr; gap: var(--sp-lg); }
  .site-header .wrap { flex-direction: column; align-items: flex-start; }
  .site-nav { width: 100%; }
  .mk-user-menu__greeting { display: none; }
  .footer-top { flex-direction: column; align-items: flex-start; }
}

/* ---------- Root font-size fix (parfil-paritet) ----------
   Astra setter html font-size som % av body-font-size-settingen (21px),
   som blåser opp alle rem-baserte tokens/clamps med 31 %. Parfilen
   (design-reference.html) forutsetter 16px rot. Body-teksten beholder
   21px via Astras egen px-baserte body-regel. */
html { font-size: 100% !important; }

/* ---------- Pixel-audit-fikser (Fable, 2026-08-04) ---------- */

/* 1. Forside-seksjoner skal være full-bleed: Gutenberg/Astra setter
      max-width:1200px på direkte barn av entry-content. Seksjonene har
      egen .wrap-sentrering (1200px) internt. */
.home .entry-content > section,
.home .entry-content > .wp-block-html > section { max-width: none; }
.home .entry-content > * { margin-top: 0; margin-bottom: 0; }
.home .site-content { padding-top: 0; }
.home .site-main, .home .ast-article-single { margin: 0; padding: 0; }

/* 2. Footer: parfil-markupen ligger INNI Astras footer-element — ink-bakgrunn
      og venstre-justering må settes på Astras wrappere. */
footer.site-footer { background: var(--color-ink); color: var(--color-surface); }
footer.site-footer .ast-builder-grid-row { padding: 0; }
footer.site-footer .ast-footer-html,
footer.site-footer .footer-widget-area { text-align: left; }

/* 3. Astras underline på innholds-/builder-lenker overstyres på
      komponentene våre (parfil: text-decoration none). */
a.pill, .entry-content a.pill, a.nav-link,
.footer-links a, .mk-user-menu__login,
.mk-user-menu__dropdown-item { text-decoration: none !important; }

/* Footer-fiks 2: Astras primary-footer-row maler egen lys bakgrunn over
   ink-en, og footer-line arver center-justering. */
footer.site-footer .site-primary-footer-wrap { background: transparent; }
footer.site-footer .footer-line { text-align: left; }

/* Spacing-paritet: Astra legger 64px margin på content-area og 45px padding
   på footer-row-wrap — parfilen har kun seksjonenes egne 48px. */
.home .content-area { margin-top: 0; margin-bottom: 0; }
footer.site-footer .site-primary-footer-wrap { padding-top: 0; padding-bottom: 0; }
.home #primary { margin: 0; }

/* Pill-høyde-paritet: parfilen arver line-height normal (~1.2) på piller;
   Astra setter body 1.5 som blåser pillene fra 33 til 39px. */
.pill, .nav-link, .mk-user-menu__login, .mk-user-menu__trigger { line-height: normal; }
/* Astras builder-element-CSS nuller p-marginer i footer — gjenopprett parfilens. */
footer.site-footer .footer-line { margin-top: var(--sp-lg); padding-top: var(--sp-lg); }

/* Mobil-header-paritet: parfilen stabler logo over nav-raden, venstrestilt,
   med Kurskatalog + Logg inn inline. Astras mobilgrid sentrerer/deler kolonner. */
@media (max-width: 720px) {
  header.site-header .ast-builder-grid-row {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--sp-sm);
  }
  header.site-header .site-header-primary-section-right {
    width: 100%;
    justify-content: flex-start;
  }
  header.site-header .site-nav { width: 100%; }
}

/* ---------- Plugin-output-overrides (DESIGN.md WordPress integration notes §3) ----------
   MentorKit-kortene får brand-disiplin: radius 0, ingen skygge, maks vekt 500.
   Farger/border kommer allerede riktig fra plugin-Theming-options. */
.scorm-course-card { border-radius: var(--r-card); box-shadow: var(--shadow); }
.scorm-btn { font-weight: 500; }
