/* Grafische Kwekerij — site styles
 * Brand: mint #C9E6E9 / yellow #F9D500 / white. Faustina · Lexend · Fira Sans.
 *
 * One global stylesheet. Block templates in templates/blocks/ reference these
 * classes by name. Override tokens on :root to retheme without touching
 * component CSS.
 */

/* ── Tokens ──────────────────────────────────────────────────────────────── */
:root{
  --gk-yellow:      #F9D500;
  --gk-yellow-deep: #DAB62C;
  --gk-mint:        #C9E6E9;
  --gk-mint-deep:   #A7CFD3;
  --gk-paper:       #ffffff;
  --gk-cream:       #fafaf7;
  --gk-ink:         #14181a;
  --gk-dim:         #6c7174;
  --gk-faint:       #dfe3e5;
  --gk-radius:      14px;

  --gk-font-display: "Faustina", Georgia, serif;
  --gk-font-ui:      "Lexend", system-ui, sans-serif;
  --gk-font-body:    "Fira Sans", system-ui, sans-serif;
}

/* ── Reset ───────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body{
  font-family: var(--gk-font-body);
  font-size: 18px;
  line-height: 1.55;
  color: var(--gk-ink);
  background: var(--gk-paper);
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }

/* ── Type ────────────────────────────────────────────────────────────────── */
.gk-disp{
  font-family: var(--gk-font-display);
  font-weight: 600;
  letter-spacing: -.01em;
  line-height: 1.02;
}
.gk-ui   { font-family: var(--gk-font-ui);   font-weight: 500; }
.gk-mono { font-family: var(--gk-font-body); font-weight: 500;
           letter-spacing: .04em; text-transform: uppercase; font-size: 12px; }

h1, h2, h3, h4 { margin: 0; }
h1 { font-family: var(--gk-font-display); }
h2 { font-family: var(--gk-font-ui); font-weight: 500; font-size: 32px; }

/* ── Layout ──────────────────────────────────────────────────────────────── */
.gk-container { width: 100%; max-width: 1280px; margin: 0 auto; padding: 0 36px; }

.gk-band         { padding: 64px 0; }
.gk-band--tight  { padding: 40px 0; }
.gk-band--mint        { background: var(--gk-mint); }
.gk-band--mint-deep   { background: var(--gk-mint-deep); }
.gk-band--yellow      { background: var(--gk-yellow); }
.gk-band--yellow-deep { background: var(--gk-yellow-deep); }
.gk-band--paper       { background: var(--gk-paper); }

/* ── Site header / nav ───────────────────────────────────────────────────── */
.gk-header{
  background: var(--gk-paper);
}
.gk-header__bar{
  display: flex;
  align-items: center;
  gap: 32px;
  padding: 10px 0;
}
.gk-header__logo img { height: 72px; width: auto; }
.gk-header__spacer { flex: 1; }

.gk-nav{ display: flex; }
.gk-nav__list{
  list-style: none; margin: 0; padding: 0;
  display: flex; gap: 28px;
  font-size: 18px;
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 16px;
}
.gk-nav__link{ text-decoration: none; cursor: pointer; }
.gk-nav__link.is-active{ font-weight: 600; }

/* Hamburger (mobile) */
.gk-burger{
  display: none;
  width: 44px; height: 44px;
  border: 0; background: transparent; cursor: pointer; padding: 0;
  flex-direction: column; align-items: center; justify-content: center; gap: 5px;
}
.gk-burger span{
  display: block; width: 22px; height: 2px;
  background: var(--gk-ink); border-radius: 2px;
}

/* Mobile menu drawer */
.gk-nav-mobile{
  display: none;
  border-top: 1px solid var(--gk-faint);
  background: var(--gk-paper);
}
.gk-nav-mobile__list{
  list-style: none; margin: 0; padding: 8px 0;
  font-family: var(--gk-font-ui); font-weight: 500;
}
.gk-nav-mobile__list a{
  display: block; padding: 12px 28px; text-decoration: none; font-size: 18px;
}
.gk-nav-mobile__list a.is-active{ font-weight: 600; }

/* Open state — JS toggles `.gk-nav-open` on <html> via assets/js/site.js.
   (We used to key off `.gk-nav[aria-expanded="true"] + .gk-nav-mobile`, but
   those two elements aren't adjacent siblings — .gk-nav is nested inside
   .gk-header__bar while .gk-nav-mobile is its uncle — so the rule never
   matched and the drawer stayed hidden.) */
.gk-nav-open .gk-nav-mobile{ display: block; }

@media (max-width: 800px){
  .gk-nav .gk-nav__list { display: none; }
  .gk-burger            { display: inline-flex; }
}

/* ── Buttons / pills ─────────────────────────────────────────────────────── */
.gk-pill{
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 16px;
  border-radius: 999px;
  background: var(--gk-mint-deep);
  color: var(--gk-ink);
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 14px;
  border: 0;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  transition: transform .12s ease, background .15s ease;
}
.gk-pill:hover { transform: translateY(-1px); }
.gk-pill--yellow      { background: var(--gk-yellow); }
.gk-pill--yellow-deep { background: var(--gk-yellow-deep); }
.gk-pill--mint        { background: var(--gk-mint); }
.gk-pill--mint-deep   { background: var(--gk-mint-deep); }
.gk-pill--ink         { background: var(--gk-ink); color: var(--gk-paper); }
.gk-pill--paper       { background: var(--gk-paper); }
.gk-pill--ghost       { background: transparent; border: 1px solid var(--gk-ink); }

.gk-btn{
  padding: 10px 20px;
  font-weight: 600;
}

/* ── Image placeholder (replace with real <img>) ─────────────────────────── */
.gk-img{
  position: relative;
  background: #d6d6d6;
  border-radius: var(--gk-radius);
  overflow: hidden;
  color: #555;
}
.gk-img::before, .gk-img::after{
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(to top right, transparent calc(50% - .6px), #bfbfbf 50%, transparent calc(50% + .6px));
}
.gk-img::after{
  background: linear-gradient(to top left, transparent calc(50% - .6px), #bfbfbf 50%, transparent calc(50% + .6px));
}
.gk-img__label{
  position: absolute; left: 10px; bottom: 10px;
  background: rgba(255,255,255,.9); color: #444;
  font-family: var(--gk-font-body); font-size: 10px;
  padding: 2px 7px; border-radius: 4px;
  letter-spacing: .04em; text-transform: uppercase;
}
.gk-img--4x3 { aspect-ratio: 4 / 3; }
.gk-img--4x5 { aspect-ratio: 4 / 5; }
.gk-img--1x1 { aspect-ratio: 1 / 1; }

/* Real <img> tags don't show the crossed-diagonals — kill the pseudo-elements
   and make the image fill its (aspect-ratio'd) box. */
img.gk-img::before, img.gk-img::after { content: none; }
img.gk-img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* ── Cards ───────────────────────────────────────────────────────────────── */
.gk-card{
  background: var(--gk-paper);
  border-radius: var(--gk-radius);
  overflow: hidden;
}
.gk-card--yellow      { background: var(--gk-yellow); }
.gk-card--yellow-deep { background: var(--gk-yellow-deep); }
.gk-card--mint        { background: var(--gk-mint); }
.gk-card--mint-deep   { background: var(--gk-mint-deep); }
.gk-card--paper       { background: var(--gk-paper); }
.gk-card--shadow { box-shadow: 0 6px 24px rgba(0,0,0,.06); }

/* Colour variants shared by the bespoke card blocks. Every card-style block
   (info_card, construction_card, quote_card, workshop_card, plus the generic
   .gk-card used by praktisch/booking) accepts mint | yellow | paper so a card
   can be recoloured to sit on any band. */
.gk-info-card.gk-info-card--mint,
.gk-construction-card.gk-construction-card--mint        { background: var(--gk-mint); }
.gk-info-card.gk-info-card--mint-deep,
.gk-construction-card.gk-construction-card--mint-deep   { background: var(--gk-mint-deep); }
.gk-info-card.gk-info-card--yellow,
.gk-construction-card.gk-construction-card--yellow      { background: var(--gk-yellow); }
.gk-info-card.gk-info-card--yellow-deep,
.gk-construction-card.gk-construction-card--yellow-deep { background: var(--gk-yellow-deep); }
.gk-info-card.gk-info-card--paper,
.gk-construction-card.gk-construction-card--paper       { background: var(--gk-paper); }
/* Quote card sits on a deep-mint by default; an explicit colour wins via the
   compound selector (higher specificity than the .gk-workshop--quote base). */
.gk-workshop--quote.gk-workshop--mint        { background: var(--gk-mint); }
.gk-workshop--quote.gk-workshop--mint-deep   { background: var(--gk-mint-deep); }
.gk-workshop--quote.gk-workshop--yellow      { background: var(--gk-yellow); }
.gk-workshop--quote.gk-workshop--yellow-deep { background: var(--gk-yellow-deep); }
.gk-workshop--quote.gk-workshop--paper       { background: var(--gk-paper); }

/* ── Hero (homepage) ─────────────────────────────────────────────────────── */
.gk-hero{
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: 36px;
  align-items: start;
}
.gk-hero__title{
  font-family: var(--gk-font-display);
  font-weight: 600;
  font-size: 40px;
  line-height: 1.02;
  margin: 0 0 26px;
}
.gk-hero__kicker{
  font-family: var(--gk-font-ui);
  font-size: 32px;
  font-weight: 300;
  margin: 0 0 -5px;
}
.gk-hero__lead{
  font-family: var(--gk-font-ui);
  font-size: 17px;
  line-height: 1.65;
  margin: 0 0 22px;
  max-width: 480px;
}
.gk-hero__cta { display: flex; gap: 10px; flex-wrap: wrap; }
.gk-hero__media { position: relative; }
.gk-hero__media img,
.gk-hero__media .gk-img{
  border-radius: var(--gk-radius);
  aspect-ratio: 4 / 4;
}

/* When a construction card is present: stack image + card as a column.
   Image gets top-only radius; card gets bottom-only radius, sits flush. */
.gk-hero__media:has(.gk-construction-card){
  display: flex;
  flex-direction: column;
}
.gk-hero__media:has(.gk-construction-card) img,
.gk-hero__media:has(.gk-construction-card) .gk-img{
  border-radius: var(--gk-radius) var(--gk-radius) 0 0;
  aspect-ratio: auto;
  flex: 1;
}
.gk-hero__media .gk-construction-card{
  position: static;
  border-radius: 0 0 var(--gk-radius) var(--gk-radius);
  box-shadow: none;
}
.gk-construction-card{
  position: absolute;
  left: 0; right: 0; bottom: -44px;
  background: var(--gk-paper);
  border-radius: var(--gk-radius);
  padding: 22px;
  box-shadow: 0 6px 24px rgba(0,0,0,.06);
}
.gk-construction-card--standalone{
  position: static; box-shadow: none;
}
.gk-construction-card h3 { font-family: var(--gk-font-ui); font-weight: 600; font-size: 22px; margin-bottom: 6px; }
.gk-construction-card p  { font-size: 15px; line-height: 1.55; margin: 0; }

/* ── Info trio (Voor wie / Wat / Bereikbaarheid) ─────────────────────────── */
.gk-info-grid{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  /* Explicit even though it's the grid default — guards against future
     refactors that might switch this to `align-items: start` for some
     reason and silently introduce ragged-bottom cards again. */
  align-items: stretch;
}
.gk-info-card{
  background: var(--gk-yellow);
  border-radius: var(--gk-radius);
  padding: 26px;
  /* Equal-height cards regardless of body length.
     `height: 100%` makes the card fill its grid cell — works even outside
     a stretching grid (e.g. inside a flexbox row, a CSS-columns layout, or
     a containing block that's been reset to `align-items: start`).
     `display: flex; flex-direction: column` lets the body push the
     fixed-height title to the top and absorb extra space itself. */
  height: 100%;
  display: flex;
  flex-direction: column;
}
.gk-info-card__title{
  font-family: var(--gk-font-ui);
  font-weight: 600;
  font-size: 22px;
  margin: 0 0 8px;
}
.gk-info-card p { margin: 0; font-size: 15px; line-height: 1.55; }

/* ── Feature (title + image + text, image left or right) ──────────────────── */
.gk-feature{
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
}
/* image_align: right → push the media after the text */
.gk-feature--right .gk-feature__media{ order: 2; }
.gk-feature__img{
  aspect-ratio: 1 / 1;
  width: 100%;
  border-radius: var(--gk-radius);
}
.gk-feature__title{
  font-family: var(--gk-font-ui);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  font-size: clamp(20px, 2vw, 24px);
  margin: 0 0 14px;
}
.gk-feature__body{ font-size: 17px; line-height: 1.5; }
.gk-feature__body p{ margin: 0 0 1em; }
.gk-feature__body p:last-child{ margin-bottom: 0; }

@media (max-width: 700px){
  .gk-feature{ grid-template-columns: 1fr; gap: 24px; }
  .gk-feature--right .gk-feature__media{ order: 0; }
}

/* ── Section heading ─────────────────────────────────────────────────────── */
.gk-section-head{ margin-bottom: 28px; }
.gk-section-head__kicker{
  display: block;
  font-family: var(--gk-font-body); font-weight: 500;
  letter-spacing: .04em; text-transform: uppercase; font-size: 12px;
  color: var(--gk-dim); margin-bottom: 4px;
}
.gk-section-head__title{
  font-family: var(--gk-font-display);
  font-weight: 600;
  font-size: clamp(32px, 4vw, 48px);
  line-height: 1.02;
  margin: 0 0 10px;
}
.gk-section-head__lead{
  font-family: var(--gk-font-body);
  font-size: clamp(16px, 1.4vw, 19px); line-height: 1.45; margin: 0; max-width: 580px;
}

/* ── Workshop grid + card ────────────────────────────────────────────────── */
.gk-workshop-grid{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  align-items: stretch;
}
.gk-workshop{
  background: var(--gk-mint);
  border-radius: 20px;
  overflow: hidden;
  /* height:100% makes every card fill its grid cell so cards in a row match
     the tallest. The image and body each take half (flex 1 1 50%), and the
     body's foot is pinned to the bottom via margin-top:auto. */
  height: 100%;
  min-height: 440px;
  display: flex;
  flex-direction: column;
}
.gk-workshop--mint        { background: var(--gk-mint); }
.gk-workshop--mint-deep   { background: var(--gk-mint-deep); }
.gk-workshop--yellow      { background: var(--gk-yellow); }
.gk-workshop--yellow-deep { background: var(--gk-yellow-deep); }
.gk-workshop--paper       { background: var(--gk-paper); }
.gk-workshop--quote  { background: var(--gk-mint-deep); padding: 24px; min-height: 380px;
                       display: flex; flex-direction: column; justify-content: space-between; }

/* Top half: the image, full-bleed, with the tags overlaid top-left.
   A fixed aspect-ratio keeps every card's image the same height regardless
   of how much body copy sits below it. */
.gk-workshop__media{
  position: relative;
  flex: 0 0 auto;
  aspect-ratio: 3 / 2;
  overflow: hidden;
}
.gk-workshop__media .gk-img,
.gk-workshop__media img{
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  border-radius: 0;
  object-fit: cover;
}
.gk-workshop__meta{
  position: absolute; top: 14px; left: 14px; right: 14px;
  display: flex; gap: 8px; flex-wrap: wrap;
}

/* Bottom half: title, description, button. */
.gk-workshop__body{
  flex: 1 1 auto;
  padding: 24px;
  display: flex;
  flex-direction: column;
}
.gk-workshop__title{
  font-family: var(--gk-font-display);
  font-weight: 600;
  font-size: 24px;
  line-height: 1.05;
  margin: 0 0 10px;
}
.gk-workshop__lead{ font-size: 15px; line-height: 1.5; margin: 0; }
.gk-workshop__foot{ margin-top: auto; padding-top: 18px; display: flex; align-items: center; gap: 12px; }
.gk-workshop__quote{
  font-family: var(--gk-font-ui);
  font-weight: 300; font-size: 22px; line-height: 1.3; margin: 0;
}
.gk-workshop__circle{
  width: 38px; height: 38px; border-radius: 999px; background: var(--gk-paper);
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--gk-font-ui); font-weight: 600; font-size: 18px;
  transition: transform .15s ease, background .15s ease;
}

/* Quote card as a link — strip the default anchor look, keep the card layout,
   and let the whole surface react on hover (the › circle is the affordance). */
.gk-workshop--quote-link{
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease;
}
.gk-workshop--quote-link:hover{
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(0,0,0,.10);
}
.gk-workshop--quote-link:hover .gk-workshop__circle{
  transform: translateX(3px);
  background: var(--gk-yellow);
}
.gk-workshop--quote-link:focus-visible{
  outline: 2px solid var(--gk-ink);
  outline-offset: 2px;
}

/* ── Eigen groep band ────────────────────────────────────────────────────── */
.gk-group{ text-align: center; }
.gk-band:has(.gk-group),
.gk-band:has(.gk-newsletter) { padding-top: 34px; padding-bottom: 34px; }
.gk-group h2 {
  max-width: 700px; margin: 0 auto 12px;
}
.gk-group p { font-family: var(--gk-font-display); font-style: italic; font-size: 22px; max-width: 800px; margin: 0 auto 22px; line-height: 1.6; }
.gk-group:not(:has(h2)) p { margin-top: 22px; }

/* ── Footer ──────────────────────────────────────────────────────────────── */
.gk-footer{
  background: var(--gk-yellow);
  padding: 48px 0;
}
.gk-footer__grid{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.gk-footer__col h5{
  font-family: var(--gk-font-body); font-weight: 500;
  letter-spacing: .04em; text-transform: uppercase; font-size: 12px;
  margin: 0 0 10px;
}
.gk-footer__col p, .gk-footer__col a { margin: 0; font-size: 14px; line-height: 1.55; }
.gk-footer__link { display: block; }
.gk-footer__legal a:not(:last-child)::after { content: ' · '; }
.gk-footer__col--end { text-align: right; font-size: 12px; }

/* ── Workshops list page ─────────────────────────────────────────────────── */
.gk-filter-bar{
  margin-top: 26px;
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
}
.gk-filter-bar__spacer { flex: 1; }

.gk-list-grid{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  align-items: stretch;
}

/* ── Workshop detail ─────────────────────────────────────────────────────── */
.gk-breadcrumb{
  font-family: var(--gk-font-body); font-size: 13px; color: var(--gk-dim);
  padding: 14px 0;
}
.gk-breadcrumb a { text-decoration: none; }
.gk-breadcrumb a:hover { text-decoration: underline; }
.gk-breadcrumb__sep { margin: 0 8px; }
/* Separator between consecutive crumbs (children render <a>/<span> directly). */
.gk-breadcrumb > :not(:last-child)::after { content: '·'; margin: 0 8px; color: var(--gk-dim); }
.gk-breadcrumb__current { color: var(--gk-ink); }

.gk-detail-hero{
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 36px;
  align-items: end;
}
.gk-detail-hero__media{
  display: grid;
  grid-template-columns: 2fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 10px;
  height: 360px;
}
.gk-detail-hero__media > :nth-child(1) { grid-row: span 2; }
.gk-detail-hero__media .gk-img { height: 100%; aspect-ratio: auto; }
.gk-detail-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.gk-detail-title{
  font-family: var(--gk-font-display);
  font-weight: 600;
  font-size: 40px;
  margin: 0 0 26px; line-height: 1.02;
}
.gk-detail-lead { font-family: var(--gk-font-ui); font-size: 17px; line-height: 1.65; margin: 0 0 22px; max-width: 480px; }

.gk-detail-body{
  display: grid;
  grid-template-columns: 1.6fr 1fr;
  gap: 32px;
}
.gk-detail-body h2{
  margin: 0 0 10px;
}
.gk-detail-body h3{
  font-family: var(--gk-font-display);
  font-weight: 600; font-size: 22px;
  margin: 0 0 8px;
}
.gk-detail-body p, .gk-detail-body ul { line-height: 1.65; }
.gk-detail-body ul { padding-left: 18px; margin: 0; }

.gk-booking{ padding: 24px; }
.gk-booking h3{
  font-family: var(--gk-font-display); font-weight: 600; font-size: 24px; margin: 0 0 10px;
}
.gk-booking__row{
  display: grid;
  grid-template-columns: 1fr 1fr 100px;
  gap: 8px;
  padding: 14px 0;
  align-items: center;
  border-top: 1px dashed rgba(20,24,26,.2);
}
.gk-booking__row:first-of-type { border-top: 1px solid rgba(20,24,26,.18); }
.gk-booking__date{ font-family: var(--gk-font-display); font-weight: 600; font-size: 18px; }
.gk-booking__time, .gk-booking__spots{
  font-family: var(--gk-font-body); font-weight: 500;
  letter-spacing: .04em; text-transform: uppercase; font-size: 12px; color: var(--gk-dim);
}
.gk-booking__spots--full { color: #c3552e; }

.gk-praktisch { padding: 22px; }
.gk-praktisch h4 { font-family: var(--gk-font-ui); font-weight: 600; font-size: 17px; margin: 0 0 6px; }
.gk-praktisch ul { padding-left: 18px; margin: 0; font-size: 14px; line-height: 1.7; }

/* ── Related grid ────────────────────────────────────────────────────────── */
.gk-related{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  align-items: stretch;
}
.gk-related__card { padding: 16px; height: 100%; display: flex; flex-direction: column; }
.gk-related__card .gk-img { aspect-ratio: 4 / 3; border-radius: 10px; margin-bottom: 10px; }
.gk-related__card .meta { display: flex; gap: 6px; margin-bottom: 8px; }
.gk-related__card .title { font-family: var(--gk-font-display); font-weight: 600; font-size: 22px; margin: 0; }

/* ── "Onder constructie" badge ───────────────────────────────────────────── */
.gk-bouw-badge{
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 12px;
  background: var(--gk-paper);
  border-radius: 999px;
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 13px;
}
.gk-bouw-badge::before{
  content: ""; width: 8px; height: 8px;
  background: var(--gk-yellow); border-radius: 999px;
}
.gk-bouw-badge--mint{ background: var(--gk-mint); }

/* ── Forms ───────────────────────────────────────────────────────────────── */
/* All form-control classes live here. The Twig block `blocks/form.html.twig`
   composes them from a `fields` array; you can also write the markup by hand —
   classes are the source of truth, not the block. Inputs sit on white inside
   any band (mint/yellow/paper) so contrast stays predictable.            */

.gk-form{
  display: grid;
  gap: 18px;
  font-family: var(--gk-font-body);
  color: var(--gk-ink);
}
.gk-form--card{
  background: var(--gk-paper);
  border-radius: var(--gk-radius);
  padding: 28px;
  box-shadow: 0 6px 24px rgba(0,0,0,.06);
}

/* Row: label + control + help/error. */
.gk-field{ display: grid; gap: 6px; min-width: 0; }
.gk-field--inline{
  grid-template-columns: minmax(140px, max-content) 1fr;
  align-items: center;
  gap: 14px;
}
.gk-field--inline > .gk-help,
.gk-field--inline > .gk-error{ grid-column: 2; }

/* Grid of rows — drop two/three fields side by side. */
.gk-form__grid{
  display: grid; gap: 18px; grid-template-columns: repeat(12, 1fr);
  /* Top-align fields so a field WITHOUT help text in one column doesn't get
     vertically stretched to match a neighbour WITH help text in the other —
     which used to puff the inner input-group from 44 → 55.5 px. */
  align-items: start;
}
.gk-form__grid > .gk-field{ grid-column: span 12; }
.gk-form__grid > .gk-field--col6{ grid-column: span 6; }
.gk-form__grid > .gk-field--col4{ grid-column: span 4; }
.gk-form__grid > .gk-field--col3{ grid-column: span 3; }

/* Label / help / error */
.gk-label{
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 14px;
  line-height: 1.3;
  color: var(--gk-ink);
}
.gk-label__req{ color: #c3552e; margin-left: 2px; }
.gk-label__hint{
  font-family: var(--gk-font-body);
  font-weight: 400;
  font-size: 12px;
  color: var(--gk-dim);
  margin-left: 6px;
}
.gk-help{
  font-size: 12px;
  line-height: 1.45;
  color: var(--gk-dim);
}
.gk-error{
  font-size: 12px;
  line-height: 1.45;
  color: #c3552e;
}

/* Base control — shared by text inputs, textarea, native select. */
.gk-input{
  appearance: none;
  -webkit-appearance: none;
  width: 100%;
  min-height: 44px;
  padding: 10px 14px;
  background: var(--gk-paper);
  border: 1px solid var(--gk-faint);
  border-radius: 10px;
  font-family: var(--gk-font-body);
  font-size: 15px;
  line-height: 1.4;
  color: var(--gk-ink);
  transition: border-color .12s ease, box-shadow .12s ease, background .12s ease;
}
.gk-input::placeholder{ color: #a4a8aa; }
.gk-input:hover{ border-color: #c6cbce; }
.gk-input:focus,
.gk-input:focus-visible{
  outline: none;
  border-color: var(--gk-ink);
  box-shadow: 0 0 0 3px var(--gk-mint);
}
.gk-input:disabled,
.gk-input[aria-disabled="true"]{
  background: #f3f3f0;
  color: var(--gk-dim);
  cursor: not-allowed;
}
.gk-input[aria-invalid="true"],
.gk-field--invalid .gk-input{
  border-color: #c3552e;
  box-shadow: 0 0 0 3px rgba(195,85,46,.15);
}

textarea.gk-input{ min-height: 120px; resize: vertical; padding-top: 12px; }

/* Native select with custom chevron — uses the .gk-input base + a wrapper for the icon. */
.gk-select{ position: relative; }
.gk-select select.gk-input{
  padding-right: 40px;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--gk-ink) 50%),
    linear-gradient(135deg, var(--gk-ink) 50%, transparent 50%);
  background-position:
    right 18px top 50%,
    right 13px top 50%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.gk-select select.gk-input::-ms-expand{ display: none; }

/* Native <select multiple> — Chrome ships unchecked <option>s at the default
   line-height (~17px) but pads checked ones to fit the selection highlight
   (~24px), so rows visibly jump height. Force a fixed line-height +
   padding so every row matches. */
.gk-select select.gk-input[multiple]{
  padding: 6px;
  background-image: none;
  min-height: auto;
  line-height: 1.3;
}
.gk-select select.gk-input[multiple] option{
  padding: 8px 10px;
  border-radius: 6px;
  font-size: 15px;
  line-height: 1.3;
}
.gk-select select.gk-input[multiple] option:checked{
  background: var(--gk-yellow) linear-gradient(0deg, var(--gk-yellow) 0%, var(--gk-yellow) 100%);
  color: var(--gk-ink);
}

/* Input-with-affix: prefix (€, @, https://) or suffix (uur, .pdf). */
.gk-input-group{ display: flex; align-items: stretch; }
.gk-input-group > .gk-input{ border-radius: 0; flex: 1; min-width: 0; }
.gk-input-group > .gk-input:first-child,
.gk-input-group > .gk-affix:first-child{ border-top-left-radius: 10px; border-bottom-left-radius: 10px; }
.gk-input-group > .gk-input:last-child,
.gk-input-group > .gk-affix:last-child{ border-top-right-radius: 10px; border-bottom-right-radius: 10px; }
.gk-input-group > .gk-input + .gk-input,
.gk-input-group > .gk-affix + .gk-input,
.gk-input-group > .gk-input + .gk-affix{ border-left: 0; }
.gk-affix{
  display: inline-flex; align-items: center;
  padding: 0 14px;
  background: #f3f3f0;
  border: 1px solid var(--gk-faint);
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 14px;
  color: var(--gk-dim);
  white-space: nowrap;
}

/* Checkbox / radio — visually custom, semantically native.
   Checked state is brand-yellow with an ink check / dot; unchecked is paper
   with an ink border. Yellow signals "active" the same way it does on the
   .gk-pill--yellow buttons elsewhere on the site. */
.gk-check{
  display: inline-flex; align-items: flex-start; gap: 10px;
  font-size: 15px;
  line-height: 1.45;
  cursor: pointer;
  user-select: none;
}
.gk-check input{
  appearance: none;
  -webkit-appearance: none;
  flex: 0 0 auto;
  width: 20px; height: 20px;
  margin: 1px 0 0;
  background: var(--gk-paper);
  border: 1.5px solid var(--gk-ink);
  border-radius: 5px;
  cursor: pointer;
  position: relative;
  transition: background .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.gk-check input[type="radio"]{ border-radius: 999px; }
.gk-check input:focus-visible{ outline: none; box-shadow: 0 0 0 3px var(--gk-mint); }
.gk-check input:checked{ background: var(--gk-ink); border-color: var(--gk-ink); }
.gk-check input[type="checkbox"]:checked::after{
  content: "";
  position: absolute; left: 5px; top: 1px;
  width: 6px; height: 11px;
  border: solid var(--gk-paper);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.gk-check input[type="radio"]:checked::after{
  content: "";
  position: absolute; inset: 4px;
  background: var(--gk-paper);
  border-radius: 999px;
}
.gk-check input:disabled{ opacity: .4; cursor: not-allowed; }
.gk-check input:disabled + span{ color: var(--gk-dim); cursor: not-allowed; }
.gk-check__hint{ display: block; color: var(--gk-dim); font-size: 12px; margin-top: 2px; }

/* A group of checks/radios (the "multi-select via checkboxes" pattern). */
.gk-choices{
  display: grid;
  gap: 10px;
}
.gk-choices--inline{ grid-auto-flow: column; grid-auto-columns: max-content; gap: 18px; }
.gk-choices--cards{
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 10px;
}
.gk-choices--cards .gk-check{
  padding: 12px 14px;
  background: var(--gk-paper);
  border: 1px solid var(--gk-faint);
  border-radius: 10px;
  align-items: center;
  transition: border-color .12s ease, background .12s ease;
}
.gk-choices--cards .gk-check:hover{ border-color: var(--gk-ink); }
.gk-choices--cards .gk-check:has(input:checked){
  background: var(--gk-mint);
  border-color: var(--gk-ink);
}

/* Toggle switch (a checkbox with a different skin) */
.gk-switch{
  display: inline-flex; align-items: center; gap: 12px;
  cursor: pointer; user-select: none;
  font-size: 15px;
}
.gk-switch input{
  appearance: none; -webkit-appearance: none;
  position: relative;
  width: 44px; height: 26px;
  background: #cfd3d5;
  border-radius: 999px;
  cursor: pointer;
  transition: background .15s ease;
}
.gk-switch input::after{
  content: "";
  position: absolute; top: 3px; left: 3px;
  width: 20px; height: 20px;
  background: var(--gk-paper);
  border-radius: 999px;
  box-shadow: 0 1px 3px rgba(0,0,0,.2);
  transition: transform .15s ease;
}
.gk-switch input:checked{ background: var(--gk-ink); }
.gk-switch input:checked::after{ transform: translateX(18px); }
.gk-switch input:focus-visible{ outline: none; box-shadow: 0 0 0 3px var(--gk-mint); }

/* File input */
.gk-file{
  display: flex; align-items: center; gap: 14px;
  padding: 12px 14px;
  background: var(--gk-paper);
  border: 1px dashed var(--gk-faint);
  border-radius: 10px;
}
.gk-file input[type="file"]{
  font-family: var(--gk-font-body);
  font-size: 14px;
  color: var(--gk-dim);
  flex: 1; min-width: 0;
}
.gk-file input[type="file"]::file-selector-button{
  margin-right: 12px;
  padding: 8px 14px;
  background: var(--gk-mint-deep);
  color: var(--gk-ink);
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 14px;
  border: 0;
  border-radius: 999px;
  cursor: pointer;
}
.gk-file input[type="file"]::-webkit-file-upload-button{
  margin-right: 12px;
  padding: 8px 14px;
  background: var(--gk-mint-deep);
  color: var(--gk-ink);
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 14px;
  border: 0;
  border-radius: 999px;
  cursor: pointer;
}

/* Range slider — explicit border:0 to defang Firefox's default 1px inset
   border on <input type=range>; outline:none to suppress the focus ring on
   the element itself (we paint a ring on the thumb via box-shadow instead). */
.gk-range{
  width: 100%;
  appearance: none; -webkit-appearance: none;
  background: transparent;
  border: 0;
  outline: none;
  padding: 10px 0;
  margin: 0;
}
.gk-range::-webkit-slider-runnable-track{
  height: 6px; background: var(--gk-faint); border-radius: 999px;
}
.gk-range::-moz-range-track{ height: 6px; background: var(--gk-faint); border-radius: 999px; }
.gk-range::-webkit-slider-thumb{
  -webkit-appearance: none; appearance: none;
  width: 20px; height: 20px; margin-top: -7px;
  background: var(--gk-ink);
  border: 0;
  border-radius: 999px; cursor: pointer;
}
.gk-range::-moz-range-thumb{
  width: 20px; height: 20px;
  background: var(--gk-ink);
  border: 0;
  border-radius: 999px; cursor: pointer;
}
.gk-range:focus-visible{ outline: none; }
.gk-range:focus-visible::-webkit-slider-thumb{ box-shadow: 0 0 0 4px var(--gk-mint); }
.gk-range:focus-visible::-moz-range-thumb     { box-shadow: 0 0 0 4px var(--gk-mint); }
.gk-range-row{
  display: grid; grid-template-columns: 1fr 56px; align-items: center; gap: 14px;
}
.gk-range-row__val{
  font-family: var(--gk-font-ui); font-weight: 600; font-size: 14px;
  text-align: center; padding: 6px 8px;
  background: var(--gk-cream); border-radius: 8px;
}

/* Color swatch input */
.gk-color{
  display: inline-flex; align-items: center; gap: 10px;
}
.gk-color input[type="color"]{
  appearance: none; -webkit-appearance: none;
  width: 44px; height: 44px;
  padding: 0;
  background: transparent;
  border: 1px solid var(--gk-faint);
  border-radius: 10px;
  cursor: pointer;
}
.gk-color input[type="color"]::-webkit-color-swatch-wrapper{ padding: 4px; }
.gk-color input[type="color"]::-webkit-color-swatch{ border: 0; border-radius: 6px; }
.gk-color input[type="color"]::-moz-color-swatch{ border: 0; border-radius: 6px; }

/* Fieldset + legend */
.gk-fieldset{
  border: 1px solid var(--gk-faint);
  border-radius: var(--gk-radius);
  padding: 18px 20px 20px;
  margin: 0;
  display: grid; gap: 14px;
}
.gk-fieldset > legend{
  padding: 0 8px;
  font-family: var(--gk-font-ui);
  font-weight: 600;
  font-size: 15px;
  color: var(--gk-ink);
}

/* Action row */
.gk-form__actions{
  display: flex; flex-wrap: wrap; gap: 10px;
  align-items: center;
  margin-top: 6px;
}
.gk-form__actions--end{ justify-content: flex-end; }
.gk-form__actions > .gk-form__spacer{ flex: 1; }

/* Submit-style pill (extends .gk-pill) */
.gk-pill[type="submit"],
.gk-pill--primary{
  background: var(--gk-ink); color: var(--gk-paper);
  padding: 12px 22px; font-weight: 600;
}
.gk-pill[type="reset"]{ background: transparent; border: 1px solid var(--gk-ink); }

/* ── Newsletter form ─────────────────────────────────────────────────────
   Inline subscribe form: title + body stacked on top, a single row of pill
   inputs and a yellow submit pill below. Lives in any band (designed for
   mint). Markup composes existing primitives — `.gk-input` for the fields,
   `.gk-pill--yellow` for the button — and only the pill-shaped variant and
   row layout are newsletter-specific.                                       */

/* Visually-hidden helper — used by the newsletter form for the screen-reader
   labels above its placeholder-driven inputs. Standard "sr-only" recipe. */
.gk-visually-hidden{
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

.gk-newsletter{
  display: grid;
  gap: 20px;
  max-width: 1100px;
  margin: 0;
}
.gk-newsletter__title{
  font-family: var(--gk-font-ui);
  font-weight: 500;
  font-size: 22px;
  line-height: 1.1;
  margin: 0;
  color: var(--gk-ink);
}
.gk-newsletter__body{
  font-family: var(--gk-font-body);
  font-size: 15px;
  line-height: 1.45;
  margin: 0;
  max-width: 56ch;
  color: var(--gk-ink);
}
.gk-newsletter__row{
  display: flex;
  gap: 12px;
  align-items: stretch;
  flex-wrap: wrap;
  margin-top: 4px;
}
/* The two text inputs share the available row width 1:1; the submit pill
   takes its natural width. flex-wrap kicks in on narrow viewports — see
   the @media block at the bottom of this file. */
.gk-newsletter__row > .gk-input,
.gk-newsletter__row > .gk-newsletter__field{
  flex: 1 1 220px;
  min-width: 0;
}
.gk-newsletter__row > .gk-pill{
  flex: 0 0 auto;
}

/* Pill-shaped variant of `.gk-input` — keeps every other input property
   (focus ring, disabled state, invalid state) but matches the rounded
   "lozenge" shape from the newsletter design. Use directly on any text
   input to opt into the pill look:  <input class="gk-input gk-input--pill"> */
.gk-input--pill{
  border-radius: 999px;
  padding-left: 22px;
  padding-right: 22px;
  min-height: 52px;
}
.gk-input--pill:focus,
.gk-input--pill:focus-visible{
  /* Slightly tighter focus ring than the default 3px to match the pill
     proportions visually. */
  box-shadow: 0 0 0 2px var(--gk-mint-deep, var(--gk-mint));
}

/* Submit-style pill specifically inside a newsletter row: match the input
   height (52px) so the row reads as one coherent unit, and force yellow
   regardless of any `[type=submit]` inheritance from `.gk-form` context. */
.gk-newsletter__row > .gk-pill[type="submit"]{
  min-height: 52px;
  padding: 0 28px;
  background: var(--gk-yellow);
  color: var(--gk-ink);
  font-size: 17px;
}

/* ── Prose / rich-text ───────────────────────────────────────────────────
   Typography wrapper for "just an HTML blob" content — terms & conditions,
   privacy policy, FAQs, blog posts, anything from a WYSIWYG. Apply
   `.gk-prose` to a container and every common element styles itself:
   headings, paragraphs, lists (with sensible nested indentation), links,
   blockquotes, code, tables, hr.

   Width is capped at ~70ch (~720px) so long-form copy stays readable;
   `--narrow` (56ch) and `--wide` (uncapped) variants are available.       */

.gk-prose{
  font-family: var(--gk-font-body);
  font-size: 17px;
  line-height: 1.65;
  color: var(--gk-ink);
  max-width: 70ch;
}
.gk-prose--wide  { max-width: none; }
.gk-prose--narrow{ max-width: 56ch; }

/* Vertical rhythm — first/last children sit flush with the wrapper. */
.gk-prose > * + *      { margin-top: 1em; }
.gk-prose > *          { margin-bottom: 0; }
.gk-prose > :first-child{ margin-top: 0; }
.gk-prose > :last-child { margin-bottom: 0; }

/* Headings */
.gk-prose h1{
  font-family: var(--gk-font-display);
  font-weight: 700;
  font-size: 3.5vw;
  line-height: 1.1;
  letter-spacing: -.01em;
  margin-top: 0;
}
.gk-prose h2{
  line-height: 1.2;
  margin-top: 1.8em;
}
.gk-prose h3{
  font-family: var(--gk-font-ui);
  font-weight: 600;
  font-size: 20px;
  line-height: 1.3;
  margin-top: 1.6em;
}
.gk-prose h4{
  font-family: var(--gk-font-ui);
  font-weight: 600;
  font-size: 17px;
  line-height: 1.3;
  margin-top: 1.4em;
}
/* Adjacent headings (kicker + title pattern) tighten up so they don't
   read as two separate sections. */
.gk-prose h1 + h2,
.gk-prose h2 + h3,
.gk-prose h3 + h4,
.gk-prose h1 + .gk-prose__meta,
.gk-prose h2 + .gk-prose__meta{ margin-top: .4em; }

/* "Versie 1.0 — 2026-01-01" line under a document title. */
.gk-prose__meta{
  font-family: var(--gk-font-body);
  font-size: 14px;
  color: var(--gk-dim);
  letter-spacing: .02em;
}

/* Body copy */
.gk-prose p     { margin: 0; }
.gk-prose strong{ font-weight: 600; }
.gk-prose em    { font-style: italic; }
.gk-prose small { font-size: 0.85em; color: var(--gk-dim); }
.gk-prose a{
  color: var(--gk-ink);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  transition: color .12s ease;
}
.gk-prose a:hover{ color: var(--gk-yellow-deep); }

/* Lists — ordered uses decimal then lower-alpha then lower-roman for the
   typical legal-document depth pattern; unordered uses disc → circle →
   square. ::marker is dimmed so numbers don't outshout body copy. */
.gk-prose ul,
.gk-prose ol{
  margin: 0;
  padding-left: 1.5em;
}
.gk-prose li             { margin-top: .35em; }
.gk-prose li:first-child { margin-top: 0; }
.gk-prose li > p         { margin-top: .35em; }

.gk-prose ol         { list-style: decimal; }
.gk-prose ol ol      { list-style: lower-alpha; margin-top: .35em; }
.gk-prose ol ol ol   { list-style: lower-roman; }
.gk-prose ul         { list-style: disc; }
.gk-prose ul ul      { list-style: circle; margin-top: .35em; }
.gk-prose ul ul ul   { list-style: square; }
.gk-prose ol > li::marker,
.gk-prose ul > li::marker{ color: var(--gk-dim); }

/* Blockquote — yellow brand bar instead of the default grey. */
.gk-prose blockquote{
  margin: 0;
  padding: 4px 0 4px 18px;
  border-left: 3px solid var(--gk-yellow);
  font-style: italic;
}
.gk-prose blockquote p + p{ margin-top: .8em; }

/* Horizontal rule */
.gk-prose hr{
  border: 0;
  border-top: 1px solid var(--gk-faint);
  margin: 2em 0;
}

/* Code + pre */
.gk-prose code{
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: .9em;
  background: var(--gk-cream);
  padding: .15em .4em;
  border-radius: 4px;
  border: 1px solid var(--gk-faint);
}
.gk-prose pre{
  background: var(--gk-cream);
  border: 1px solid var(--gk-faint);
  border-radius: var(--gk-radius);
  padding: 16px 18px;
  overflow: auto;
  font-size: 14px;
  line-height: 1.55;
}
.gk-prose pre code{ background: transparent; border: 0; padding: 0; font-size: inherit; }

/* Table */
.gk-prose table{ width: 100%; border-collapse: collapse; font-size: 15px; }
.gk-prose th,
.gk-prose td{
  text-align: left;
  padding: 10px 12px;
  border-bottom: 1px solid var(--gk-faint);
  vertical-align: top;
}
.gk-prose th{
  font-family: var(--gk-font-ui);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--gk-dim);
}

/* Figure + image */
.gk-prose figure{ margin: 0; }
.gk-prose figure img{ border-radius: var(--gk-radius); }
.gk-prose figcaption{
  font-size: 13px;
  color: var(--gk-dim);
  margin-top: 8px;
  text-align: center;
}

/* ── Responsive ──────────────────────────────────────────────────────────── */
@media (max-width: 1000px){
  .gk-workshop-grid,
  .gk-list-grid,
  .gk-related        { grid-template-columns: repeat(2, 1fr); }
  .gk-info-grid      { grid-template-columns: repeat(2, 1fr); }
  .gk-detail-body    { grid-template-columns: 1fr; }
}
@media (max-width: 700px){
  .gk-newsletter__row              { flex-direction: column; }
  /* In column direction, `flex-basis` becomes the HEIGHT — so the desktop
     rule `flex: 1 1 220px` was making each input 220 px tall on mobile.
     Reset to natural height (and let inputs span the row width). */
  .gk-newsletter__row > .gk-input,
  .gk-newsletter__row > .gk-newsletter__field { flex: 0 0 auto; width: 100%; }
  .gk-newsletter__row > .gk-pill[type="submit"] { width: 100%; }
  .gk-form__grid > .gk-field--col6,
  .gk-form__grid > .gk-field--col4,
  .gk-form__grid > .gk-field--col3 { grid-column: span 12; }
  .gk-field--inline                { grid-template-columns: 1fr; align-items: stretch; }
  .gk-field--inline > .gk-help,
  .gk-field--inline > .gk-error    { grid-column: 1; }
  .gk-form--card                   { padding: 20px; }
  .gk-container      { padding: 0 18px; }
  .gk-band           { padding: 36px 0; }
  .gk-header__logo img { height: 48px; }
  .gk-hero           { grid-template-columns: 1fr; }
  .gk-detail-hero    { grid-template-columns: 1fr; }
  .gk-info-grid      { grid-template-columns: 1fr; }
  .gk-workshop-grid,
  .gk-list-grid,
  .gk-related        { grid-template-columns: 1fr; }
  .gk-footer__grid   { grid-template-columns: 1fr; }
  .gk-footer__col--end { text-align: left; }
  .gk-hero__kicker   { font-size: 20px; line-height: 0.8; margin-bottom: 5px; }
  .gk-hero__title    { font-size: 30px; }
}

/* ── Scroll animations ──────────────────────────────────────────────────────
   Fade-up: individual element entrance.
   Stagger: grid children cascade in one by one.
   Wrapped in prefers-reduced-motion so users who opt out see everything
   at full opacity with no transitions. */
@media (prefers-reduced-motion: no-preference) {
  [data-anim="fade-up"] {
    opacity: 0;
    transform: translateY(28px);
    transition: opacity .65s cubic-bezier(.22,1,.36,1),
                transform .65s cubic-bezier(.22,1,.36,1);
    will-change: transform, opacity;
  }
  [data-anim="stagger"] > * {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity .55s cubic-bezier(.22,1,.36,1),
                transform .55s cubic-bezier(.22,1,.36,1);
    will-change: transform, opacity;
  }
  [data-anim="stagger"] > *:nth-child(1) { transition-delay:   0ms; }
  [data-anim="stagger"] > *:nth-child(2) { transition-delay: 100ms; }
  [data-anim="stagger"] > *:nth-child(3) { transition-delay: 200ms; }
  [data-anim="stagger"] > *:nth-child(4) { transition-delay: 300ms; }
  [data-anim="stagger"] > *:nth-child(5) { transition-delay: 400ms; }
  [data-anim="stagger"] > *:nth-child(6) { transition-delay: 500ms; }

  .is-visible[data-anim="fade-up"],
  .is-visible[data-anim="stagger"] > * {
    opacity: 1;
    transform: none;
  }
}
