@charset "UTF-8";
.ww-filters {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 16px;
  margin-bottom: 24px;
  background: #fff;
  border: 1px solid #000;
}
.ww-filters__search {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  background: #fff;
  border: 1px solid #000;
}
.ww-filters__search-icon {
  display: inline-flex;
  color: #000;
  font-size: 16px;
  line-height: 1;
}
.ww-filters__search-input {
  flex: 1 1 auto;
  width: 100%;
  border: 0;
  background: transparent;
  color: #000;
  font-weight: 700;
  font-size: 16px;
  line-height: 24px;
  letter-spacing: 0.025em;
}
.ww-filters__search-input::placeholder {
  color: #71717a;
  font-weight: 700;
}
.ww-filters__search-input:focus {
  outline: none;
}
.ww-filters__group {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ww-filters__label {
  margin: 0;
  font-size: 13px;
  line-height: 1.2;
  letter-spacing: 0.01em;
  color: #71717a;
}
.ww-filters__row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.ww-filters__pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  padding: 10px 16px;
  background: #fff;
  border: 1px solid #000;
  border-radius: 0;
  font-weight: 800;
  font-size: 14px;
  line-height: 20px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  color: #000;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.ww-filters__pill:hover {
  background: rgba(0, 0, 0, 0.06);
}
.ww-filters__pill.is-active {
  background: #000;
  color: #fff;
}
.ww-filters__pill-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  font-size: 12px;
  line-height: 1.2;
  color: #ff3d3d;
}

.agenda--overview .agenda__filters,
.agenda--overview .agenda__locations {
  padding: 0;
  margin: 0;
  border: 0;
}

.buurt-directory .buurt-directory__panel {
  flex-direction: column;
  align-items: stretch;
  gap: 20px;
  padding: 16px;
  margin-bottom: 24px;
  background: #fff;
  border: 1px solid #000;
}
.buurt-directory .buurt-directory__search-wrap {
  max-width: 100%;
}
.buurt-directory .buurt-directory__search {
  gap: 12px;
  padding: 14px 16px;
  background: #fff;
  border: 1px solid #000;
}
.buurt-directory .buurt-directory__search-icon {
  color: #000;
}
.buurt-directory .buurt-directory__search-input {
  color: #000;
  font-weight: 700;
}
.buurt-directory .buurt-directory__search-input::placeholder {
  color: #71717a;
}
.buurt-directory .buurt-directory__filters {
  gap: 8px;
}
.buurt-directory .buurt-directory__filter {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  padding: 10px 16px;
  background: #fff;
  border: 1px solid #000;
  border-radius: 0;
  font-weight: 800;
  font-size: 14px;
  line-height: 20px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  color: #000;
}
.buurt-directory .buurt-directory__filter.is-active, .buurt-directory .buurt-directory__filter.woensel-btn--black {
  background: #000;
  color: #fff;
}
.buurt-directory .buurt-directory__filter-count {
  margin-left: 6px;
  color: #ff3d3d;
}

.gform_wrapper .gform_button,
.gform_wrapper .gform_footer input[type=submit],
.gform_wrapper .gform_footer button {
  font-family: inherit !important;
  font-weight: 800 !important;
}

.single-buurtgroep__hero,
.single-fonds__hero,
.single-meldpunt__hero {
  padding-bottom: 0;
}
.single-buurtgroep__hero > .container,
.single-fonds__hero > .container,
.single-meldpunt__hero > .container {
  position: relative;
  z-index: 3;
  padding-bottom: 2.5rem;
}
.single-buurtgroep__hero-grid,
.single-fonds__hero-grid,
.single-meldpunt__hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  align-items: center;
}
@media (min-width: 992px) {
  .single-buurtgroep__hero-grid:has(> :nth-child(2)),
  .single-fonds__hero-grid:has(> :nth-child(2)),
  .single-meldpunt__hero-grid:has(> :nth-child(2)) {
    grid-template-columns: minmax(0, 1fr) minmax(0, 400px);
    gap: clamp(2rem, 5vw, 4rem);
  }
}
.single-buurtgroep__hero-text,
.single-fonds__hero-text,
.single-meldpunt__hero-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1rem;
}
.single-buurtgroep__labels,
.single-fonds__labels,
.single-meldpunt__labels {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}
.single-buurtgroep__intro,
.single-fonds__intro,
.single-meldpunt__intro {
  margin: 0;
  max-width: 46rem;
  font-size: 18px;
  line-height: 28px;
  letter-spacing: 0.025em;
  color: #18181b;
}
.single-buurtgroep__hero-buttons,
.single-fonds__hero-buttons,
.single-meldpunt__hero-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}
.single-buurtgroep__hero-img img,
.single-fonds__hero-img img,
.single-meldpunt__hero-img img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1/1;
  object-fit: cover;
  border: 3px solid #000;
}
.single-buurtgroep__hero-logo,
.single-fonds__hero-logo,
.single-meldpunt__hero-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(1.5rem, 4vw, 2.5rem);
  background: var(--ww-white);
  border: 3px solid #000;
}
.single-buurtgroep__hero-logo img,
.single-fonds__hero-logo img,
.single-meldpunt__hero-logo img {
  display: block;
  width: 100%;
  max-width: 260px;
  height: auto;
  object-fit: contain;
}
.single-buurtgroep__body,
.single-fonds__body,
.single-meldpunt__body {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(2rem, 4vw, 3.5rem);
  align-items: start;
}
@media (min-width: 992px) {
  .single-buurtgroep__body,
  .single-fonds__body,
  .single-meldpunt__body {
    grid-template-columns: minmax(0, 1fr) minmax(0, 380px);
  }
}
.single-buurtgroep__main > * + *,
.single-fonds__main > * + *,
.single-meldpunt__main > * + * {
  margin-top: 2.5rem;
}
.single-buurtgroep__main h2,
.single-fonds__main h2,
.single-meldpunt__main h2 {
  margin: 2.5rem 0 1.25rem;
  font-weight: 800;
  font-size: 30px;
  line-height: 32px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  color: #000;
}
.single-buurtgroep__main h2:first-child,
.single-fonds__main h2:first-child,
.single-meldpunt__main h2:first-child {
  margin-top: 0;
}
@media (min-width: 992px) {
  .single-buurtgroep__sidebar,
  .single-fonds__sidebar,
  .single-meldpunt__sidebar {
    position: sticky;
    top: 120px;
  }
}
.single-buurtgroep__notice,
.single-fonds__notice,
.single-meldpunt__notice {
  padding: 1.25rem 1.5rem;
  border: 1px solid #000;
  background: var(--defaults-gray-100);
}
.single-buurtgroep__notice p,
.single-fonds__notice p,
.single-meldpunt__notice p {
  margin: 0;
}
.single-buurtgroep__gallery-grid,
.single-fonds__gallery-grid,
.single-meldpunt__gallery-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1rem;
  margin-top: 1rem;
}
@media (min-width: 620px) {
  .single-buurtgroep__gallery-grid,
  .single-fonds__gallery-grid,
  .single-meldpunt__gallery-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
.single-buurtgroep__gallery-grid img,
.single-fonds__gallery-grid img,
.single-meldpunt__gallery-grid img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4/3;
  object-fit: cover;
  border: 1px solid #000;
}

.single-buurtgroep__meedoen,
.single-fonds__cta,
.single-meldpunt__contact {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
.single-buurtgroep__meedoen h2,
.single-fonds__cta h2,
.single-meldpunt__contact h2 {
  margin: 0;
}
.single-buurtgroep__meedoen p,
.single-fonds__cta p,
.single-meldpunt__contact p {
  margin: 0;
}

.single-fonds__cta-help,
.single-buurtgroep__contact-name {
  margin-top: 0.5rem !important;
  font-size: 14px;
  color: #27272a;
}

.woensel-checklist {
  margin: 1rem 0 0;
  padding: 0;
  list-style: none;
}
.woensel-checklist li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 0.6rem 0;
  border-bottom: 1px solid rgba(0, 0, 0, 0.12);
  line-height: 26px;
}
.woensel-checklist li:last-child {
  border-bottom: 0;
}
.woensel-checklist li i {
  flex: 0 0 auto;
  margin-top: 6px;
  font-size: 14px;
}

.single-meldpunt__row {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 0.75rem 0;
  border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
.single-meldpunt__row:last-of-type {
  border-bottom: 0;
}
.single-meldpunt__row i {
  flex: 0 0 auto;
  width: 24px;
  text-align: center;
  margin-top: 4px;
  font-size: 18px;
}
.single-meldpunt__row strong {
  display: block;
  font-weight: 800;
  font-size: 16px;
  line-height: 24px;
  letter-spacing: 0.025em;
}
.single-meldpunt__row span {
  display: block;
  margin-top: 2px;
  font-size: 14px;
  line-height: 20px;
  color: #27272a;
}
.single-meldpunt__row a {
  color: inherit;
  text-decoration: none;
}
.single-meldpunt__row a:hover {
  text-decoration: underline;
}

.single-meldpunt__disclaimer {
  margin-top: 1rem;
  font-size: 13px;
  line-height: 20px;
  color: #27272a;
}

.single-buurtgroep__hero:has(> .woensel-separator--black) + .buurt-meta,
.single-fonds__hero:has(> .woensel-separator--black) + .buurt-meta,
.single-meldpunt__hero:has(> .woensel-separator--black) + .buurt-meta {
  padding-top: 88px;
}

.info-card__text p {
  margin: 0;
}
.info-card__text p + p {
  margin-top: 0.75rem;
}

.gform_wrapper .gform_button,
.gform_wrapper .gform_footer button,
.gform_wrapper .gform_footer input[type=submit],
.gform_wrapper button[type=submit],
.gform_wrapper input[type=submit] {
  text-transform: uppercase !important;
}

button.agenda__link {
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
  appearance: none;
}

.woensel-nav:not(.woensel-nav--mobile) {
  gap: 1rem;
}
.woensel-nav:not(.woensel-nav--mobile) > li {
  white-space: nowrap;
}

.buurt-map-pin--ruimte .buurt-map-pin__dot {
  background: var(--ww-blue);
}

.buurt-map-pin--organisatie .buurt-map-pin__dot,
.buurt-map-pin--featured .buurt-map-pin__dot {
  background: var(--ww-pink);
}

.buurt-map-pin--aed .buurt-map-pin__dot {
  background: var(--ww-green);
}

.page-hero__crumbs .breadcrumb-sep {
  color: inherit;
  opacity: 0.5;
}

.agenda__item:hover .agenda__action .fa-arrow-up-right {
  transform: rotate(45deg);
}

.agenda.bg-color-black .agenda__item {
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.agenda.bg-color-black .agenda__item:hover {
  background: #fff;
  border-color: #fff;
}
.agenda.bg-color-black .agenda__item:hover .agenda__event-title,
.agenda.bg-color-black .agenda__item:hover .agenda__day,
.agenda.bg-color-black .agenda__item:hover .agenda__time,
.agenda.bg-color-black .agenda__item:hover .agenda__meta,
.agenda.bg-color-black .agenda__item:hover .agenda__location,
.agenda.bg-color-black .agenda__item:hover .agenda__price,
.agenda.bg-color-black .agenda__item:hover .agenda__meta-sep {
  color: #000;
}
.agenda.bg-color-black .agenda__item:hover .agenda__action {
  background: #000;
  border-color: #000;
  color: #fff;
}

.agenda.bg-color-white .agenda__item,
.agenda.bg-color-grey .agenda__item,
.agenda.bg-color-yellow .agenda__item {
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.agenda.bg-color-white .agenda__item:hover,
.agenda.bg-color-grey .agenda__item:hover,
.agenda.bg-color-yellow .agenda__item:hover {
  background: #000;
  border-color: #000;
}
.agenda.bg-color-white .agenda__item:hover .agenda__event-title,
.agenda.bg-color-white .agenda__item:hover .agenda__day,
.agenda.bg-color-white .agenda__item:hover .agenda__time,
.agenda.bg-color-white .agenda__item:hover .agenda__meta,
.agenda.bg-color-white .agenda__item:hover .agenda__location,
.agenda.bg-color-white .agenda__item:hover .agenda__price,
.agenda.bg-color-white .agenda__item:hover .agenda__meta-sep,
.agenda.bg-color-grey .agenda__item:hover .agenda__event-title,
.agenda.bg-color-grey .agenda__item:hover .agenda__day,
.agenda.bg-color-grey .agenda__item:hover .agenda__time,
.agenda.bg-color-grey .agenda__item:hover .agenda__meta,
.agenda.bg-color-grey .agenda__item:hover .agenda__location,
.agenda.bg-color-grey .agenda__item:hover .agenda__price,
.agenda.bg-color-grey .agenda__item:hover .agenda__meta-sep,
.agenda.bg-color-yellow .agenda__item:hover .agenda__event-title,
.agenda.bg-color-yellow .agenda__item:hover .agenda__day,
.agenda.bg-color-yellow .agenda__item:hover .agenda__time,
.agenda.bg-color-yellow .agenda__item:hover .agenda__meta,
.agenda.bg-color-yellow .agenda__item:hover .agenda__location,
.agenda.bg-color-yellow .agenda__item:hover .agenda__price,
.agenda.bg-color-yellow .agenda__item:hover .agenda__meta-sep {
  color: #fff;
}
.agenda.bg-color-white .agenda__item:hover .agenda__action,
.agenda.bg-color-grey .agenda__item:hover .agenda__action,
.agenda.bg-color-yellow .agenda__item:hover .agenda__action {
  background: #fff;
  border-color: #fff;
  color: #000;
}

.woensel-nav:not(.woensel-nav--mobile) a {
  position: relative;
}
.woensel-nav:not(.woensel-nav--mobile) a::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 40px;
  max-width: 100%;
  margin-left: -20px;
  height: 3px;
  background: #ff3d3d;
  transform: scaleX(0);
  transform-origin: center;
  transition: transform 0.18s ease;
  pointer-events: none;
}
.woensel-nav:not(.woensel-nav--mobile) a:hover::after,
.woensel-nav:not(.woensel-nav--mobile) .current-menu-item > a::after,
.woensel-nav:not(.woensel-nav--mobile) .current_page_item > a::after,
.woensel-nav:not(.woensel-nav--mobile) .current-menu-ancestor > a::after {
  transform: scaleX(1);
}

.single-evenement__hero.single-evenement__hero {
  padding-bottom: calc(38px + 2.75rem);
}

.page-hero.bg-color-yellow .page-hero__crumbs,
.page-hero.bg-color-yellow .page-hero__crumbs a,
.page-hero.bg-color-yellow .page-hero__crumbs a:hover {
  color: #000;
}

.page-hero.bg-color-yellow .page-hero__crumb-sep {
  color: #ff3d3d;
  opacity: 1;
}

.timeline__viewport.is-dragging {
  cursor: grabbing;
  user-select: none;
}

.agenda-hoverimg {
  position: fixed;
  top: 0;
  left: 0;
  width: 280px;
  height: 340px;
  z-index: 60;
  pointer-events: none;
  overflow: hidden;
  border: 1px solid #000;
  opacity: 0;
  clip-path: inset(100% 0 0 0);
  transition: opacity 0.3s ease, clip-path 0.5s cubic-bezier(0.22, 0.61, 0.36, 1);
  will-change: transform;
}

.agenda-hoverimg.is-visible {
  opacity: 1;
  clip-path: inset(0 0 0 0);
}

.agenda-hoverimg img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ww-addcal-trigger {
  cursor: pointer;
}

.ww-calmodal {
  padding: 0;
  border: 1px solid #000;
  background: #fff;
  max-width: 380px;
  width: calc(100% - 32px);
  color: #000;
}

.ww-calmodal::backdrop {
  background: rgba(0, 0, 0, 0.5);
}

.ww-calmodal__box {
  position: relative;
  padding: 28px;
}

.ww-calmodal__close {
  position: absolute;
  top: 8px;
  right: 12px;
  border: 0;
  background: transparent;
  font-size: 28px;
  line-height: 1;
  cursor: pointer;
  color: #000;
}

.ww-calmodal__eyebrow {
  margin: 0 0 4px;
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #ff3d3d;
}

.ww-calmodal__title {
  margin: 0 0 18px;
  font-weight: 800;
  font-size: 20px;
  line-height: 1.15;
  text-transform: uppercase;
}

.ww-calmodal__opts {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.ww-calmodal__opt {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid #000;
  color: #000;
  text-decoration: none;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  transition: background-color 0.12s ease, color 0.12s ease;
}

.ww-calmodal__opt i {
  width: 20px;
  text-align: center;
  font-size: 18px;
}

.ww-calmodal__opt:hover {
  background: #ff3d3d;
  color: #fff;
}

/* ---------------------------------------------------------------
   Footer compacter, review Justin 30-07-2026
   --------------------------------------------------------------- */
.woensel-footer {
  /* Was calc(3.5rem + 50px) = 106px. De 50px is ruimte voor de zigzag-crest
     die er half overheen valt, die blijft staan; de rest mag eraf. */
  padding-top: calc(2rem + 50px);
  /* Het logo stond op 370px breed, dat is 164px hoog. Daardoor liep de hele
     footer onnodig hoog uit: de merkkolom was hoger dan de linkkolommen. */
}
.woensel-footer__brand-link, .woensel-footer__logo {
  width: 200px;
}
.woensel-footer__heading {
  font-size: 17px;
  margin-bottom: 0.75rem;
}
.woensel-footer__list li {
  margin-bottom: 0.35rem;
}
.woensel-footer__socials {
  margin-top: 1rem;
}
.woensel-footer__socials a {
  width: 34px;
  height: 34px;
}
.woensel-footer__bar {
  margin-top: 2rem;
  padding: 1.1rem 0;
}

@media (min-width: 992px) {
  /* De vier linkkolommen zijn samen smaller dan de merkkolom van 4/12.
     Het logo heeft die ruimte niet meer nodig, dus de kolommen mogen breder
     ademen en de rijen sluiten netter op elkaar aan. */
  .woensel-footer .row {
    --bs-gutter-y: 2rem;
  }
}
/* ---------------------------------------------------------------
   Gravity Forms op de huisstijl, review Justin 30-07-2026

   Justin zag drie dingen: de select is niet even hoog als het veld
   ernaast, op de een zit wel een border radius en op de ander niet, en
   de asterisk is waarschijnlijk niet het rood van de website.

   Alle drie hebben dezelfde oorzaak. Het thema stylet select en textarea
   wel, maar die regels zijn geschreven voor de oude "gravity-theme".
   De site draait op de nieuwe orbital-theme, en die wint op
   specificiteit. In plaats van daar met !important tegenin te gaan
   zetten we de design tokens van Gravity Forms zelf op onze waarden.
   Dan volgt elk veld mee, ook de velden die er later bij komen.
   --------------------------------------------------------------- */
.gform_wrapper.gform-theme,
.gform_wrapper.gform-theme--framework {
  /* Maatvoering: alles even hoog als de tekstvelden van het thema. */
  --gf-ctrl-size: 44px;
  --gf-ctrl-size-md: 44px;
  --gf-ctrl-line-height: 44px;
  --gf-ctrl-btn-size: 44px;
  --gf-ctrl-btn-size-md: 44px;
  /* Rechte hoeken, zoals de rest van de site. Was 3px op select,
     textarea en knop, en 0 op de tekstvelden. */
  --gf-ctrl-radius: 0;
  --gf-ctrl-radius-max-sm: 0;
  --gf-ctrl-radius-max-md: 0;
  --gf-ctrl-radius-max-lg: 0;
  --gf-ctrl-textarea-radius: 0;
  --gf-ctrl-btn-radius: 0;
  --gf-ctrl-file-zone-radius: 0;
  --gf-ctrl-select-dropdown-radius: 0;
  /* Zwarte rand en zwarte tekst; was het grijs #686e77 van Gravity Forms. */
  --gf-ctrl-border-color: #000;
  --gf-ctrl-border-color-hover: #000;
  --gf-ctrl-color: #000;
  --gf-ctrl-color-hover: #000;
  --gf-ctrl-color-focus: #000;
  --gf-ctrl-font-size: 16px;
  --gf-ctrl-placeholder-color: #71717a;
  --gf-ctrl-placeholder-font-size: 16px;
  --gf-ctrl-shadow: none;
  --gf-ctrl-btn-shadow: none;
  --gf-ctrl-btn-shadow-hover: none;
  --gf-ctrl-btn-shadow-focus: none;
  /* Het accent stond op het blauw van Gravity Forms, #204ce5. Dat kwam
     terug in de vinkjes en de focusrand. */
  --gf-ctrl-accent-color: #ff3d3d;
  --gf-ctrl-choice-check-color: #ff3d3d;
  --gf-ctrl-border-color-focus: #ff3d3d;
  --gf-ctrl-outline-color-focus: #ff3d3d;
  --gf-ctrl-outline-width-focus: 2px;
  /* De asterisk en de foutkleur stonden op het standaardrood #c02b0a. */
  --gf-color-danger: #ff3d3d;
  --gf-color-danger-rgb: 255, 61, 61;
  --gf-ctrl-label-color-req: #ff3d3d;
  --gf-ctrl-border-color-error: #ff3d3d;
  --gf-ctrl-desc-color-error: #ff3d3d;
  --gf-ctrl-textarea-height: 148px;
}

/* De randkleur zet Gravity Forms op een specifiekere plek dan de rest van
   de tokens, dus die had de bovenstaande blok niet te pakken. Hier met de
   orbital-klasse erbij, plus rechtstreeks op de velden zodat select en
   textarea gelijklopen met de tekstvelden. */
.gform_wrapper.gform-theme--orbital {
  --gf-ctrl-border-color: #000;
  --gf-ctrl-border-color-hover: #000;
}

.gform_wrapper.gform-theme .gfield select,
.gform_wrapper.gform-theme .gfield textarea,
.gform_wrapper.gform-theme .ginput_container select,
.gform_wrapper.gform-theme .ginput_container textarea {
  border-color: #000;
}

/* Het adres is nu een route-link naar Google Maps. Onderstreept zodat het
   als link te herkennen is, met dezelfde overgang als de rest. */
.single-buurtplek__adres-link,
.single-side__org-list a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.15s ease;
}
.single-buurtplek__adres-link:hover, .single-buurtplek__adres-link:focus-visible,
.single-side__org-list a:hover,
.single-side__org-list a:focus-visible {
  color: #ff3d3d;
}

/* ---------------------------------------------------------------
   Witruimteschaal: correctie op mijn eigen analyse

   Ik had hier eerder lg en xxl "hersteld" omdat een scan over de platte
   CSS liet zien dat de schaal twee keer stond met botsende waarden. Die
   analyse was fout: de tweede set staat in een media query voor
   schermen tot 992px. Het waren dus geen dubbele definities maar de
   mobiele waarden.

   Zoals het werkelijk is, uitgelezen in de browser:

     stap   alle breedtes   tot 992px
     xxs    16              -
     xs     32              -
     sm     48              -
     md     64              -
     lg     80              64
     xl     112             -
     xxl    128             -

   De schaal op desktop loopt dus gewoon op en was nooit kapot. Alleen
   lg wordt op kleine schermen ingedikt, en dat is precies de bedoeling.

   Mijn regel zonder media query overschreef die 64 en zette lg overal
   op 80. Daarmee was lg op mobiel even groot als xl. Die regel is hier
   weg; er valt niets te herstellen.
   --------------------------------------------------------------- */
/* Losse blokken die hun eigen maat meebrachten in plaats van de schaal.
   Nagelopen op alle padding-waarden in woensel.css; buiten de schaal
   stonden 67px (4,2rem) op info-cards en numbers, 56px op
   buurt-directory, en afwijkende waarden op choice-cards en agenda.
   Die 67px komt nergens anders voor en leest als een typefout.

   Alle inhoudsblokken staan nu op het ritme van 112px, zodat secties
   onder elkaar dezelfde adem hebben. De :not() zorgt dat een redacteur
   die in de beheerder bewust een andere maat kiest, gewoon voorrang
   houdt.

   De heroes blijven met opzet buiten deze correctie: die hebben een
   eigen opbouw met de zigzag-crest eroverheen. */
.block.info-cards:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.info-cards:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

.block.numbers:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.numbers:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

.block.choice-cards:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.choice-cards:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

.block.agenda:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.agenda:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

.block.buurt-directory:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.buurt-directory:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

.block.post-overview:not([class*=row-padding-top]) {
  padding-top: 80px;
}
.block.post-overview:not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

@media (min-width: 992px) {
  .block.info-cards:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.info-cards:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
  .block.numbers:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.numbers:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
  .block.choice-cards:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.choice-cards:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
  .block.agenda:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.agenda:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
  .block.buurt-directory:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.buurt-directory:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
  .block.post-overview:not([class*=row-padding-top]) {
    padding-top: 112px;
  }
  .block.post-overview:not([class*=row-padding-bottom]) {
    padding-bottom: 112px;
  }
}
/* ---------------------------------------------------------------
   Hover op zwarte blokken, feedback 30-07-2026

   De kaders krijgen op hover een hard offset-blok achter zich:
   box-shadow: 10px 10px 0 #000. Bij een kader dat zelf al zwart is,
   zoals het herinneringsblok in de zijkolom, staat er dan een zwart
   blok achter een zwart blok. Dat leest als een dubbel patroon in
   plaats van als een hover.

   Elders in de stylesheet is dit al opgelost, alleen niet overal:
   choice-card en de cta-box van de directory nemen wit op zwart,
   contact-form__side-box en steps__box nemen rood. Rood dus, zoals
   gevraagd.

   Alleen de kaders die zelf zwart zijn. Een fancy-box binnenin een
   zwart blok is wit (.bg-color-black .fancy-box) en houdt zijn zwarte
   offset-blok.
   --------------------------------------------------------------- */
.fancy-box.bg-color-black:hover,
.ww-search__card.bg-color-black:hover {
  box-shadow: 10px 10px 0 #ff3d3d;
}

/* Outline-knoppen hoveren naar zwart. Op een zwarte ondergrond zie je
   daar niets van. De gekleurde knoppen laten we met rust, die hebben
   hun eigen hover. */
.bg-color-black .woensel-btn--outline:hover,
.bg-color-black .woensel-btn--outline:focus-visible {
  background: #ffbf3d;
  border-color: #ffbf3d;
  color: #000;
}
.bg-color-black .woensel-btn--outline:hover i,
.bg-color-black .woensel-btn--outline:focus-visible i {
  color: #000;
}

/* ---------------------------------------------------------------
   Kaart op de detailpagina
   --------------------------------------------------------------- */
.single-buurtplek__leaflet {
  width: 100%;
  height: 100%;
  min-height: 260px;
  z-index: 0;
}
.single-buurtplek__leaflet .leaflet-control-attribution {
  font-size: 10px;
}

/* ---------------------------------------------------------------
   Dubbel vinkje op de checkboxen

   Er stonden er twee: een rode box met een wit vinkje, plus een los
   rood vinkje ernaast.

   Twee dingen tekenen tegelijk. Het thema forceert
   appearance: auto, dus de browser tekent de native checkbox (rood
   vlak uit accent-color, met het witte vinkje van het systeem). En de
   orbital-theme van Gravity Forms zet daar zijn eigen vinkje-glyph
   overheen via ::before, in --gf-ctrl-choice-check-color. Zolang die
   variabele op het blauw van Gravity Forms stond viel dat niet op;
   sinds die op merkrood staat wel.

   De native checkbox is degene die we gebruiken, dus het glyph van
   Gravity Forms gaat eruit. font-family staat daar op !important, dus
   hier ook.
   --------------------------------------------------------------- */
.gform_wrapper.gform-theme input[type=checkbox]::before,
.gform_wrapper.gform-theme input[type=radio]::before,
.gform_wrapper.gform-theme .gfield-choice-input::before {
  content: none !important;
  display: none !important;
}

/* ---------------------------------------------------------------
   Overgangen op links en pijlen, feedback 30-07-2026
   --------------------------------------------------------------- */
/* Elke link een zachte overgang. Bewust een opsomming en geen "all":
   met "all" gaan ook transform en opacity mee, en die worden door GSAP
   geanimeerd. Twee easings over dezelfde eigenschap geeft schokkerige
   animaties. */
a {
  transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, text-decoration-color 0.15s ease, box-shadow 0.15s ease;
}

/* Pijlen draaien in plaats van schuiven.

   Een rechte pijl schuift naar rechts, dat was er al. Een schuine pijl
   schoof mee, waardoor hij schuin bleef wijzen. Die draait nu naar de
   horizontaal: omhoog-rechts staat 45 graden linksom van rechts, dus
   die draait 45 graden mee; omlaag-rechts staat er 45 graden rechtsom
   van, dus die draait terug.

   De bestaande regels zetten transform op elke i in een knop, vandaar
   !important: anders wint translateX van de draaiing. */
.fa-arrow-up-right,
.fa-arrow-down-right,
.fa-arrow-left,
.fa-arrow-down {
  transition: transform 0.2s ease;
}

:is(a, button, .woensel-btn, [class*=__link], [class*=__cta], [class*=card], .agenda__item):hover .fa-arrow-up-right {
  transform: rotate(45deg) !important;
}
:is(a, button, .woensel-btn, [class*=__link], [class*=__cta], [class*=card], .agenda__item):hover .fa-arrow-down-right {
  transform: rotate(-45deg) !important;
}

/* De keuzekaarten op /ik-heb-een-leuk-idee/ vullen de dropdown in het
   formulier alvast in. Ze moeten er dus ook uitzien alsof je erop kunt
   klikken. */
.info-card.is-form-trigger {
  cursor: pointer;
  transition: box-shadow 0.15s ease;
  /* Zwart, net als choice-card en ww-search__card. Rood hoort bij de kaders
     die zelf zwart zijn, niet bij witte kaarten op een witte achtergrond. */
}
.info-card.is-form-trigger:hover {
  box-shadow: 10px 10px 0 #000;
}
.info-card.is-form-trigger:focus-visible {
  box-shadow: 10px 10px 0 #000;
  outline: 2px solid #ff3d3d;
  outline-offset: 2px;
}

/* ---------------------------------------------------------------
   Filters ingeklapt op telefoon, review Justin 30-07-2026

   De filters stonden op elk formaat open. Op een telefoon duwt dat de
   inhoud waar je voor komt ver naar beneden. Het zoekveld blijft
   staan, de groepen eronder gaan achter een knop.

   De knop bestaat alleen op telefoon. Op breder scherm verdwijnt hij
   en staat alles gewoon open, zoals nu.
   --------------------------------------------------------------- */
.ww-filters__toggle {
  display: none;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
  margin-top: 0.75rem;
  padding: 12px 16px;
  border: 1px solid #000;
  background: #fff;
  color: #000;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.ww-filters__toggle i {
  margin-left: auto;
}
.ww-filters__toggle:hover, .ww-filters__toggle[aria-expanded=true] {
  background: #000;
  color: #fff;
}
.ww-filters__toggle:focus-visible {
  outline: 2px solid #ff3d3d;
  outline-offset: 2px;
}

/* Het aantal actieve filters, zodat je ziet dat er iets aan staat
   terwijl het paneel dicht is. */
.ww-filters__toggle-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 22px;
  height: 22px;
  padding: 0 6px;
  background: #ff3d3d;
  color: #000;
  font-size: 13px;
  line-height: 1;
}
.ww-filters__toggle-count[hidden] {
  display: none;
}

@media (max-width: 991.98px) {
  .ww-filters__toggle {
    display: flex;
  }
  /* Alles behalve het zoekveld en de knop zelf gaat dicht.

     De uitzonderingen staan in :where(), want dat telt niet mee voor de
     specificiteit. Met drie losse :not()'s woog de dichtregel (0,4,0)
     zwaarder dan de openregel (0,2,0), en dan klapte het paneel wel dicht
     maar niet meer open. */
  .ww-filters > *:not(:where([class*=__search], .ww-filters__toggle)),
  .buurt-directory__panel > *:not(:where([class*=__search], .ww-filters__toggle)) {
    display: none;
  }
  .ww-filters.is-filters-open > *,
  .buurt-directory__panel.is-filters-open > * {
    display: revert;
  }
}
/* ---------------------------------------------------------------
   Dode hovers op de gele knoppen

   .woensel-btn--idea en .woensel-btn--primary hadden allebei een :hover
   met exact dezelfde waarden als in rust, geel op zwart. Er gebeurde
   dus niets.

   Nu een donkerder geel. Werkt op elke ondergrond, dus ook op de zwarte
   header waar een zwarte hover zou verdwijnen. Zwarte tekst op dat
   donkerder geel haalt 9,8:1, ruim binnen WCAG.

   :active krijgt dezelfde waarden. Zonder die regel valt de ingedrukte
   staat terug op de standaard van Bootstrap, en dat past nergens bij.
   --------------------------------------------------------------- */
.woensel-btn--idea,
.woensel-btn--primary {
  transition: background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}
.woensel-btn--idea:hover, .woensel-btn--idea:focus-visible, .woensel-btn--idea:active,
.woensel-btn--primary:hover,
.woensel-btn--primary:focus-visible,
.woensel-btn--primary:active {
  background: #e0a836;
  border-color: #e0a836;
  color: #000;
}
.woensel-btn--idea:hover i, .woensel-btn--idea:focus-visible i, .woensel-btn--idea:active i,
.woensel-btn--primary:hover i,
.woensel-btn--primary:focus-visible i,
.woensel-btn--primary:active i {
  color: #000;
}

/* ---------------------------------------------------------------
   Zoekresultaten

   De lege staat was één regel tekst op een groot wit vlak. Nu een echt
   blok met een reden waarom er niets is, en vier doorkliskaarten zodat
   een bezoeker niet doodloopt. Bij treffers staat er boven de lijst in
   welke onderdelen ze zitten.
   --------------------------------------------------------------- */
.ww-search {
  /* Verdeling over de contenttypes. */
  /* Lege staat. */
  /* Doorkliskaarten onder de lege staat. */
}
.ww-search__breakdown {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 1.25rem;
  margin: 0 0 2rem;
  padding-bottom: 1.25rem;
  border-bottom: 1px solid #e4e4e7;
  font-size: 0.9rem;
  color: #71717a;
}
.ww-search__breakdown-item {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: #000;
}
.ww-search__breakdown-item i {
  color: #ff3d3d;
  font-size: 0.85em;
}
.ww-search__breakdown-item strong {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  background: #000;
  color: #fff;
  font-size: 12px;
  line-height: 1;
}
.ww-search__empty {
  max-width: 46ch;
  margin: 0 0 3rem;
}
.ww-search__empty-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  margin-bottom: 1.25rem;
  border: 2px solid #000;
  background: #ffbf3d;
  font-size: 22px;
  color: #000;
}
.ww-search__empty-title {
  margin: 0 0 0.75rem;
  font-size: 32px;
  line-height: 1.1;
}
.ww-search__empty-text {
  margin: 0;
  color: #52525b;
}
.ww-search__suggestions {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 1.5rem;
}
.ww-search__suggestion {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 24px;
  border: 1px solid #000;
  background: #fff;
  color: #000;
  text-decoration: none;
  transition: box-shadow 0.15s ease;
}
.ww-search__suggestion:hover, .ww-search__suggestion:focus-visible {
  box-shadow: 10px 10px 0 #000;
  color: #000;
}
.ww-search__suggestion:focus-visible {
  outline: 2px solid #ff3d3d;
  outline-offset: 2px;
}
.ww-search__suggestion-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  margin-bottom: 0.5rem;
  background: #ff3d3d;
  color: #000;
  font-size: 18px;
}
.ww-search__suggestion-title {
  font-weight: 800;
  font-size: 20px;
  line-height: 1.15;
  text-transform: uppercase;
}
.ww-search__suggestion-text {
  font-size: 0.95rem;
  line-height: 1.5;
  color: #52525b;
}
.ww-search__suggestion-arrow {
  margin-top: auto;
  padding-top: 0.75rem;
  color: #ff3d3d;
}
.ww-search__suggestion:hover .ww-search__suggestion-arrow i {
  transform: translateX(3px);
}

/* ---------------------------------------------------------------
   Links die geen hover hadden

   De site kleurt links rood bij hover (.single-contact a, .woensel-footer a
   en zo). Twee plekken waren vergeten: het contactblok in de meta-balk van
   een plek, en de privacylink in de labels van een formulier.
   --------------------------------------------------------------- */
.buurt-meta__item a,
.gform_wrapper .gform-field-label a,
.gform_wrapper .gfield_label a,
.gform_wrapper .gfield_consent_description a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.15s ease;
}
.buurt-meta__item a:hover, .buurt-meta__item a:focus-visible,
.gform_wrapper .gform-field-label a:hover,
.gform_wrapper .gform-field-label a:focus-visible,
.gform_wrapper .gfield_label a:hover,
.gform_wrapper .gfield_label a:focus-visible,
.gform_wrapper .gfield_consent_description a:hover,
.gform_wrapper .gfield_consent_description a:focus-visible {
  color: #ff3d3d;
}

/* ---------------------------------------------------------------
   Iconen op hover

   Een pijl wijst ergens heen, dus die schuift of draait die kant op.
   Elk ander icoon zegt niets over richting; dat groeit alleen een
   beetje. Dat leest rustiger dan een hartje of een telefoon die opzij
   schiet.

   De regel kijkt naar de klasse van het icoon zelf, niet naar de knop.
   Wisselt iemand het icoon in de beheerder van een pijl naar iets
   anders, dan verandert het gedrag vanzelf mee.

   !important omdat de bestaande regels transform op elke i in een knop
   zetten, en die zijn specifieker dan deze.
   --------------------------------------------------------------- */
a i, button i, summary i, .woensel-btn i, [class*=__link] i, [class*=__cta] i, [class*=card] i, .agenda__item i {
  transition: transform 0.18s ease;
  transform-origin: center;
}

/* Alles wat geen richting aangeeft: groeien. */
a:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), a:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), button:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), button:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), summary:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), summary:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), .woensel-btn:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), .woensel-btn:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=__link]:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=__link]:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=__cta]:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=__cta]:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=card]:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), [class*=card]:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), .agenda__item:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]), .agenda__item:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]) {
  transform: scale(1.2) !important;
}

@media (prefers-reduced-motion: reduce) {
  a i, button i, summary i, .woensel-btn i, [class*=__link] i, [class*=__cta] i, [class*=card] i, .agenda__item i {
    transition: none;
  }
  a:hover i, a:focus-visible i, button:hover i, button:focus-visible i, summary:hover i, summary:focus-visible i, .woensel-btn:hover i, .woensel-btn:focus-visible i, [class*=__link]:hover i, [class*=__link]:focus-visible i, [class*=__cta]:hover i, [class*=__cta]:focus-visible i, [class*=card]:hover i, [class*=card]:focus-visible i, .agenda__item:hover i, .agenda__item:focus-visible i {
    transform: none !important;
  }
}
/* ---------------------------------------------------------------
   Tijdlijn

   Drie dingen:
   - de diamanten stonden náást de lijn in plaats van erop. Ze waren een
     tekstteken (◆) op een vaste top-waarde, en zo'n glyph zit niet
     netjes gecentreerd in zijn regel. Nu een gedraaid vierkantje dat
     precies op de lijn gezet wordt
   - een afbeelding per moment
   - hij liep binnen de container en zag er daardoor uit als een gewoon
     blok. Nu over de volle breedte, met een voortgangsbalk eronder,
     zodat je ziet dat er meer naast staat
   --------------------------------------------------------------- */
.timeline {
  /* De carousel loopt door tot de rand; de uitlijning van het eerste
     item komt van padding op de track, net als bij het verhalen-blok. */
  /* De lijn loopt van rand tot rand, dus ook onder de padding door. */
  /* Het oude teken uit. */
  /* Gedraaid vierkantje, met zijn hart precies op de lijn. */
  /* De marker hangt aan het item, en dat begint pas ná de padding van de
     track. De lijn zit hoger, dus die padding gaat er weer af. Anders staat
     de diamant precies een padding te laag. */
  /* Afbeelding bovenin de kaart, buiten de tekstpadding. */
  /* De verhouding staat op de afbeelding zelf, niet op de figure. Met
     height:100% op een img zonder vaste hoogte eromheen valt die terug op
     auto, en dan duwt de eigen verhouding van de foto de figure toch weer
     scheef: een 4:3-foto werd 432x324 in plaats van 432x243. */
  /* Voortgangsbalk. */
}
.timeline__carousel {
  position: relative;
}
.timeline__track {
  padding-inline: max(24px, (100% - 1320px) / 2);
  padding-top: 1.75rem;
}
.timeline__track::before {
  top: 8px;
  left: 0;
  right: 0;
}
.timeline__item::before {
  content: none;
}
.timeline__item {
  position: relative;
}
.timeline__marker {
  position: absolute;
  top: calc(8px - 1.75rem);
  left: 0;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  background: #ff3d3d;
  transform: rotate(45deg);
}
.timeline__card--has-image {
  padding: 0;
  overflow: hidden;
}
.timeline__figure {
  margin: 0;
  overflow: hidden;
}
.timeline__figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  object-fit: cover;
}
.timeline__card--has-image .timeline__card-body {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 20px;
}
.timeline__progress {
  position: relative;
  height: 3px;
  margin-top: 1.5rem;
  background: rgba(255, 255, 255, 0.2);
  overflow: hidden;
}
.timeline__progress-bar {
  position: absolute;
  inset: 0 auto 0 0;
  width: 20%;
  background: #ff3d3d;
  transition: width 0.15s ease, transform 0.15s ease;
}

/* Op lichte achtergronden een donkere baan. */
.timeline.bg-color-white .timeline__progress,
.timeline.bg-color-grey .timeline__progress,
.timeline.bg-color-yellow .timeline__progress {
  background: rgba(0, 0, 0, 0.12);
}

/* ---------------------------------------------------------------
   Kop zonder foto

   De dubbele W is overal weggehaald. Zonder foto klapt de aside in en
   verspringt de hele kop: de indeling gaat van twee kolommen naar één,
   de intro schuift naar rechts en de padding onder verandert.

   Met "Ruimte voor een foto vrijhouden" aan blijft de aside staan, leeg
   maar op maat, zodat de kop dezelfde hoogte houdt. Zodra er een nieuwe
   foto in komt vult die precies deze plek.

   244px is wat de oude foto innam op 560px breed, gemeten op /agenda/.
   --------------------------------------------------------------- */
.page-hero__aside--leeg {
  min-height: 244px;
}

@media (max-width: 991.98px) {
  /* Op telefoon staat de aside onder de tekst. Een leeg vlak van 244px
     is daar alleen maar een gat waar je doorheen moet scrollen. */
  .page-hero__aside--leeg {
    min-height: 0;
    display: none;
  }
}
/* ---------------------------------------------------------------
   Twee blokken met dezelfde achtergrond

   Elk blok brengt 112px boven en onder mee. Tussen twee blokken van
   verschillende kleur levert dat 224px op, maar daar zie je de
   kleurwissel als grens, dus dat leest als twee secties.

   Staan er twee blokken van dezelfde kleur naast elkaar, dan is die
   grens er niet en krijg je 224px leeg vlak waar de pagina lijkt op te
   houden. Gemeten voorbeelden: agenda naar info-cards op /agenda/,
   info-cards naar numbers op /over-de-wijk/, contact-form naar faq op
   /contact/ (240px).

   Bij gelijke kleur valt de bovenpadding van het tweede blok weg, zodat
   er één ritme-eenheid van 112px overblijft.

   Drie uitzonderingen:
   - heroes. Die hebben hun eigen opbouw en soms bewust padding 0 onder,
     zoals op /contact/. Zou het volgende blok daar ook inklappen, dan
     plakt de titel tegen de hero aan
   - een blok waar de redactie zelf een bovenpadding heeft gekozen. Die
     keuze hoort voorrang te houden
   - een vorig blok met een bewust kleine onderpadding (xxs tot en met
     md). Daar is de ruimte al krap; nog verder inklappen wordt te dicht
   --------------------------------------------------------------- */
.block.bg-color-white:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-white:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-grey:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-grey:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-black:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-black:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-yellow:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-yellow:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-pink:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-pink:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-blue:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-blue:not([class*=row-padding-top]) {
  padding-top: 0;
}

.block.bg-color-green:not(.page-hero):not(.home-header):not([class*=row-padding-bottom-xxs]):not([class*=row-padding-bottom-xs]):not([class*=row-padding-bottom-sm]):not([class*=row-padding-bottom-md]) + .block.bg-color-green:not([class*=row-padding-top]) {
  padding-top: 0;
}

/* Niet elke waarde buiten de schaal is een fout.
   .single-werkzaamheid__related staat op calc(50px + 32px). Die 50px
   compenseert de zwarte zigzag die er half overheen valt, de 32px is de
   werkelijke ruimte eronder. Datzelfde patroon staat elders in de
   stylesheet, bijvoorbeeld calc(88px - 50px) op een hero met een crest.
   Optellen tot 112 zou de zigzag negeren, dus die blijft zoals hij is. */
/* ---------------------------------------------------------------
   Witruimte op kleine schermen

   De schaal dikt op mobiel in: xl en xxl worden allebei 80px, lg wordt
   64. Maar veel blokken brengen hun eigen standaard mee zonder media
   query, en die bleven op 112 staan terwijl alles eromheen naar 80
   zakte. Op een scherm van 375px is 112px boven én onder bijna een
   derde van het beeld aan lege ruimte.

   Deze regel pakt elk blok dat geen eigen keuze uit de beheerder heeft.
   Wie in de beheerder wel een maat kiest houdt voorrang, want die
   klassen gebruiken !important.

   Buiten schot blijven de heroes en de blokken die direct onder een
   crest of zigzag staan: die compenseren de overlap en zouden anders
   onder het zigzagpatroon schuiven.
   --------------------------------------------------------------- */
@media (max-width: 991.98px) {
  .block:not(.page-hero):not(.home-header):not([class*=row-padding-top]) {
    padding-top: 80px;
  }
  .block:not(.page-hero):not(.home-header):not([class*=row-padding-bottom]) {
    padding-bottom: 80px;
  }
  /* De detailpagina's bouwen hun secties niet op met .block, dus die vielen
     buiten de regel hierboven en hielden 112px. Nagelopen welke secties
     buiten .block om verticale padding van 90px of meer meebrengen; dit zijn
     ze allemaal. */
  .single-body,
  .single-buurtplek__faq,
  .single-buurtplek__related,
  .single-verhaal__main,
  .single-werkzaamheid__related {
    padding-top: 80px;
    padding-bottom: 80px;
  }
  /* Nagemeten of blokken onder een crest of zigzag niet te krap komen te
     staan: de ruimte tussen de onderkant van de zigzag en de eerste inhoud
     is 30 tot 48px, en nergens schuift er iets onder. Dat hoeft dus geen
     uitzondering. */
}
/* ---------------------------------------------------------------
   Koppen op kleine schermen

   Justin: "het lijkt hier wel alsof dit bijna groter is dan de titel."
   Klopt, en het was letterlijk zo. De paginatitel schaalt mee met
   clamp(2.5rem, 6vw, 56px), dus 40px op een telefoon. Drie koppen
   stonden op een vaste maat en bleven daar dus overheen:

     .steps__title                              48px
     .contact-form--idea .contact-form__intro-title  48px
     .ww-search__title                          56px

   Op 375px was de sectiekop dus 48px tegen 40px voor de paginatitel.
   Ze volgen nu dezelfde clamp als .section-title, die het wel goed doet:
   28px op mobiel, 48px op breed.

   De zoekpagina-titel is een h1, die krijgt de clamp van de paginatitel.
   --------------------------------------------------------------- */
.steps__title,
.contact-form--idea .contact-form__intro-title {
  font-size: clamp(1.75rem, 5vw, 48px);
}

.ww-search__title {
  font-size: clamp(2.5rem, 6vw, 56px);
}

/* De regelhoogte stond als vaste 54px op de sectiekoppen. Bij 48px is dat
   precies goed, maar bij 28px op een telefoon wordt het bijna dubbele
   regelafstand. Zonder eenheid schaalt hij mee: 48 x 1,125 is nog steeds
   54, en 28 x 1,125 is 31,5. */
.section-title,
.choice-cards__title,
.steps__title,
.contact-form--idea .contact-form__intro-title {
  line-height: 1.125;
}

/* Golf 2, punt 1c: rood met zwarte tekst.

   Gemeten met de WCAG-formule:
     zwart op #ff3d3d    5,99:1  haalt AA wel, maar meerdere aanwezigen lazen
                                 het slecht: volverzadigd rood geeft weinig
                                 kleurscheiding met zwarte letters.
     wit   op #ff3d3d    3,51:1  haalt AA niet (stond in het stapformulier).
     zwart op #ffbf3d   12,77:1  ruim goed.
     wit   op #8f1d1a    8,90:1  ruim goed.
     zwart op #8f1d1a    2,36:1  nooit gebruiken.

   De rode knop houdt zijn rol, maar wordt leesbaar per ondergrond:
   op een lichte sectie donkerrood met witte tekst, dus rood blijft rood.
   Op een zwarte sectie huisstijlgeel met zwarte tekst, omdat #8f1d1a tegen
   zwart maar 2,36:1 vlakscheiding geeft en de knop dan nauwelijks opvalt.

   De homepage-knop staat op .bg-color-yellow. Rood op geel gaf 2,13:1
   vlakscheiding, donkerrood op geel geeft 5,42:1. */
.woensel-btn--pink {
  background: #8f1d1a;
  color: #ffffff;
  border-color: #8f1d1a;
}

.woensel-btn--pink i {
  color: #ffffff;
}

.bg-color-black .woensel-btn--pink {
  background: #ffbf3d;
  color: #000000;
  border-color: #000000;
}

.bg-color-black .woensel-btn--pink i {
  color: #000000;
}

/* Golf 2, punt 1b: dezelfde vaste-regelhoogte-fout zat ook op de koppen die
   geen .section-title meedragen en dus buiten de fix hierboven vielen.
   Gemeten op 500px breed voor de ingreep:
     .home-header__title      40px tekst op 60px regel  = 1,50
     .page-hero__title        40px tekst op 60px regel  = 1,50
     .content-section__title  28px tekst op 54px regel  = 1,93
     .ww-search__title        40px tekst op 60px regel  = 1,50
   Op desktop is de verhouding 60/56 = 1,0714 en 54/48 = 1,125. Zonder eenheid
   blijft desktop dus exact gelijk en schaalt mobiel wel mee. */
.content-section__title {
  line-height: 1.125;
}

.home-header__title,
.page-hero__title,
.ww-search__title {
  line-height: 1.0714;
}

/* ---------------------------------------------------------------
   Uitlijning van de twee kolommen in content-section

   De rechterkolom begon op dezelfde hoogte als de eyebrow, en die is
   klein. Daardoor hing de tekst met de knop hoog boven de titel, die
   pas 35px lager begint.

   Centreren zou hier fout zijn: dit blok wordt breed gebruikt en de
   kolommen verschillen soms 250px in hoogte. De titel zou dan midden in
   een lange tekst zakken.

   In plaats daarvan begint de rechterkolom op dezelfde regel als de
   titel. De verschuiving is precies de hoogte van de eyebrow plus zijn
   ondermarge; daarvoor staat de regelhoogte van de eyebrow nu expliciet,
   anders erft hij een waarde die we niet kunnen narekenen.

   Alleen op brede schermen: daaronder staan de kolommen onder elkaar en
   zou de verschuiving alleen een gat maken.
   --------------------------------------------------------------- */
.content-section__eyebrow {
  line-height: 1.5;
}

@media (min-width: 992px) {
  .content-section__grid:has(.content-section__eyebrow) .content-section__body {
    /* 0,8rem x 1,5 regelhoogte = 19,2px, plus 1rem ondermarge = 35,2px */
    padding-top: 2.2rem;
  }
}
/* ---------------------------------------------------------------
   Kaart op de contactpagina in kleur

   Die stond op filter: grayscale(1), dus bewust ontkleurd. Dat paste bij
   de oude Leaflet-kaarten, die ook een grijze basemap gebruikten. Nu die
   op Voyager staan en wel kleur hebben, was de contactkaart de enige
   grijze op de site.
   --------------------------------------------------------------- */
.contact-form__map iframe {
  filter: none;
}

/* -----------------------------------------------------------------
 * Bedankpagina: wat gebeurt er nu
 *
 * De vraag na het versturen is niet "is het gelukt" maar "en nu?".
 * Daarom staan de stappen er genummerd onder, in dezelfde vorm als
 * het formulier zelf.
 * ----------------------------------------------------------------- */
.utility-hero__intro {
  margin: 0 0 24px;
  max-width: 48ch;
  font-size: 1.05rem;
  line-height: 1.6;
}

.bedankt-stappen {
  padding: clamp(2.5rem, 6vw, 4.5rem) 0;
}
.bedankt-stappen__kop {
  margin: 0 0 28px;
  font-size: clamp(1.4rem, 3vw, 2rem);
  text-transform: uppercase;
}
.bedankt-stappen__lijst {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 16px;
  max-width: 780px;
}
.bedankt-stappen__slot {
  margin: 28px 0 0;
  max-width: 70ch;
  font-size: 0.95rem;
  line-height: 1.6;
  color: #55504a;
}

.bedankt-stap {
  display: flex;
  gap: 18px;
  align-items: flex-start;
  background: #fff;
  border: 1px solid #e3e0d8;
  padding: 22px 24px;
}
.bedankt-stap__nummer {
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: #000;
  color: #fff;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
}
.bedankt-stap__kop {
  margin: 3px 0 6px;
  font-size: 1.15rem;
  line-height: 1.25;
}
.bedankt-stap__tekst {
  margin: 0;
  font-size: 0.98rem;
  line-height: 1.6;
  color: #4a453f;
}

@media (max-width: 575.98px) {
  .bedankt-stap {
    padding: 18px 16px;
    gap: 14px;
  }
}
/* ---------------------------------------------------------------
   Formulieren en agendarijen, feedback 12-08-2026
   --------------------------------------------------------------- */
/* Achter een verplicht veld stonden drie sterretjes. Gravity Forms zet er
   zelf één neer, in een span met de klasse gfield_required, en die span zit
   ín een tweede span met dezelfde klasse. Onze eigen ::before-regel vuurde
   daardoor twee keer, bovenop het sterretje dat er al stond. De echte laten
   we staan, de twee bedachte gaan eruit. */
.gform_wrapper .gfield_label .gfield_required::before,
.gform_wrapper .gform-field-label .gfield_required::before {
  content: none;
}

/* Losse vinkjes stonden elk op een eigen rasterregel, met veertig pixels
   ertussen. Voor drie regels tekst die bij elkaar horen is dat te veel lucht;
   nu staan ze als groep onder elkaar. De regel geldt alleen tussen twee
   vinkvelden, dus de afstand tot het veld erboven blijft zoals hij was. */
.gform_wrapper .gfield--type-checkbox + .gfield--type-checkbox:not(.gfield_contains_required) {
  margin-top: -28px;
}

/* De privacyvraag is geen extra regel van dezelfde vraag maar een eigen
   vraag waar de bezoeker akkoord geeft, en hoort dus niet tegen het
   vinkje erboven aan te plakken. Ze is te herkennen aan
   gfield_contains_required: het nieuwsbriefvinkje is nooit verplicht, de
   privacyvraag altijd. Geen selector op een veld-ID, zodat de regel
   blijft werken als een formulier opnieuw wordt aangemaakt.
   De consent-regels verderop in dit bestand raken deze velden niet: het
   zijn gewone checkboxes en geen GF Consent-velden. */
.gform_wrapper .gfield--type-checkbox + .gfield--type-checkbox.gfield_contains_required {
  margin-top: 28px;
}

/* In de agendarijen groeiden de datum- en tijdkolom mee met hun inhoud, dus
   begon de titel op elke regel een paar pixels anders. Vaste breedtes, ruim
   genoeg voor "19:30 - 21:00", houden de kolommen recht onder elkaar. */
@media (min-width: 768px) {
  .agenda__day {
    flex: 0 0 4.5rem;
  }
  .agenda__time {
    flex: 0 0 8.5rem;
  }
  .agenda__item-link {
    gap: 2rem;
  }
}
/* Boven "Ook deze week" stond ruim driehonderd pixels leeg: 112 onderaan de
   pagina, dan de zigzagrand van 140, en daarbovenop nog eens 112 in het zwarte
   blok. De rand hoort bij de huisstijl en blijft; de lucht eromheen is
   gehalveerd. De :not() staat erbij omdat de blokregel die we overschrijven
   die ook heeft, en anders wint hij op gewicht. */
.single-evenement .single-body {
  padding-bottom: 56px;
}

.block.agenda.single-evenement__related:not([class*=row-padding-top]) {
  padding-top: 56px;
}

/* ---------------------------------------------------------------
   Buurtkaart, hersteld 12-08-2026
   --------------------------------------------------------------- */
/* De kaart op In de buurt was tot een streepje van twee pixels ingezakt.
   Leaflet zet zelf geen hoogte op zijn container; die moet uit de opmaak
   komen, en in de huidige gecompileerde stylesheets stond hij nergens meer.
   De hoogtes hieronder zijn dezelfde als in de laatste build waarin de kaart
   het wel deed. Dit hoort eigenlijk bij .buurt-directory__map in
   _bootscore-custom.scss, maar main.css en woensel.css worden buiten dit
   project om gebouwd; vandaar hier, in het bestand dat als laatste laadt. */
.buurt-directory__map {
  height: 420px;
}

@media (max-width: 767px) {
  .buurt-directory__map {
    height: 360px;
  }
}
/* ---------------------------------------------------------------
   Lettertypes, hersteld 12-08-2026
   --------------------------------------------------------------- */
/* De site laadt Archivo Black en Open Sans bij Google, maar in geen enkele
   gecompileerde stylesheet stond een font-family die ze gebruikt. Alles viel
   dus terug op de systeemletter van Bootstrap: de merkletters werden wel
   opgehaald en nooit getoond. Dit zet ze alsnog aan.

   Archivo Black bestaat maar in één gewicht. Zonder de regel hieronder maakt
   de browser er zelf een vettere versie van, en dat wordt een smeerboel; de
   koppen staan in de opmaak namelijk op 800. */
body,
.content-section__text,
input, select, textarea, button {
  font-family: "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

h1, h2, h3, h4, h5, h6,
.section-title,
.page-hero__title,
.woensel-footer__heading {
  font-family: "Archivo Black", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-weight: 400;
}

/* ---------------------------------------------------------------
   Projectkop, feedback 12-08-2026
   --------------------------------------------------------------- */
/* De kop van een projectpagina houdt onderaan 38 pixels vrij voor de zwarte
   zigzagrand die eroverheen valt. Dat is precies genoeg zolang de kop bijna
   leeg is, maar zodra er een inleiding, een knop en een voortgangsbalk in
   staan, loopt de inhoud tot in de tanden van die rand. Bovenaan staat dan
   ruim tachtig pixels lucht en onderaan niets. Daarom hier ruimte voor de
   rand plus dezelfde marge als boven. */
.single-werkzaamheid__hero:has(+ .woensel-hero-crest) {
  padding-bottom: calc(38px + 3rem);
}

/* ---------------------------------------------------------------
   Tekstsectie: lucht tussen de tekst en de knop, feedback 13-08-2026
   --------------------------------------------------------------- */
/* De knop stond op 32px onder de alinea. In een blok dat verder met 112px
   werkt, boven, onder en tussen de twee kolommen, plakt de knop daardoor aan
   de laatste regel tekst en leest hij als onderdeel van de zin in plaats van
   als de handeling die erop volgt.

   48px is de eerstvolgende maat uit de witruimteschaal van de site. Groter kan
   niet: dan valt de knop buiten de tekstkolom waar hij bij hoort. */
.content-section .content-section__buttons {
  margin-top: 48px;
}

/* ---------------------------------------------------------------
   Aanmeldformulier, feedback 13-08-2026
   --------------------------------------------------------------- */
/* Een formulier met stappen stond naast een halve kolom uitleg. Daar past per
   regel precies een veld, dus werd elke stap twee keer zo lang als nodig en
   bleef de halve pagina ernaast leeg. De uitleg gaat erboven, het formulier
   krijgt de volle breedte. De klasse zet het blok zelf, alleen bij een
   formulier met paginering. */
.contact-form--idea.contact-form--wide .contact-form__grid {
  grid-template-columns: 1fr;
  gap: 2.5rem;
}

.contact-form--idea.contact-form--wide .contact-form__intro-text {
  max-width: 62ch;
}

/* Binnen een stap stonden alle velden onder elkaar: het script dat de stappen
   bouwt tilt ze uit de kolomindeling van Gravity Forms, en die was daarna weg.
   Hier krijgen ze dezelfde twaalf kolommen terug, zodat de breedte die in het
   formulier is ingesteld ook op de site klopt. Een veld zonder ingestelde
   breedte staat van Gravity Forms al op 1 / -1 en vult dus gewoon de regel. */
.gform_wrapper.ww-stapform .ww-fstap__velden {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: 24px;
  row-gap: 18px;
  align-items: start;
}

.gform_wrapper.ww-stapform .ww-fstap .ww-fstap__velden > .gfield {
  margin-top: 0;
}

/* Op een telefoon is er geen ruimte voor twee velden naast elkaar. De
   ingestelde breedte moet daar hard overschreven worden, anders houdt een half
   veld zes van de twaalf kolommen vast die er niet meer zijn. */
@media (max-width: 767.98px) {
  .gform_wrapper.ww-stapform .ww-fstap__velden {
    grid-template-columns: 1fr;
  }
  .gform_wrapper.ww-stapform .ww-fstap .ww-fstap__velden > .gfield {
    grid-column: 1/-1 !important;
  }
}
/* De labels stonden op het donkerblauw van Gravity Forms en in gewone kleine
   letters, terwijl elk ander formulier op de site zwarte kapitalen gebruikt.
   Het uploadveld deed het al goed; nu de rest ook. De kleur staat er twee keer:
   als token, want daar stuurt het thema van Gravity Forms de labels mee aan, en
   als gewone regel voor de plekken waar dat token niet gebruikt wordt. */
.gform_wrapper.ww-stapform {
  --gf-ctrl-label-color-primary: #000;
  --gf-ctrl-label-color-secondary: #000;
}

.gform_wrapper.ww-stapform .ww-fstap .gfield_label,
.gform_wrapper.ww-stapform .ww-fstap .gform-field-label {
  font-size: 12px;
  line-height: 18px;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  color: #000;
}

/* Rechte hoeken en een zwarte rand, zoals de kaders elders op de site. De
   afgeronde hoeken en de beige rand komen uit de beheeromgeving, waar ze tussen
   de panelen van WordPress thuishoren. */
.gform_wrapper.ww-stapform .ww-fstap {
  border-radius: 0;
  border-color: #000;
}

.gform_wrapper.ww-stapform .ww-fstap__nummer {
  border-radius: 0;
}

.gform_wrapper.ww-stapform .ww-fstap__titel {
  text-transform: uppercase;
  letter-spacing: 0.025em;
}

/* ---------------------------------------------------------------
   Vinkjes en keuzerondjes zichtbaar maken, feedback 13-08-2026

   Ze waren nauwelijks te zien: een vakje van dertien pixels met de
   lichtgrijze rand die de browser er standaard omheen tekent. Op een
   telefoon is dat nauwelijks te raken en op een lichte achtergrond
   nauwelijks te vinden.

   Dat kwam doordat we appearance op auto forceerden (zie het blok
   "Dubbel vinkje op de checkboxen" hierboven). Dan tekent de browser
   het vakje, en over de maat en de rand daarvan hebben we niets te
   zeggen: alleen accent-color pakt.

   Nu andersom. appearance staat uit, dus Gravity Forms tekent het
   vakje zelf, en dat volgt onze eigen tokens. Het glyph dat we destijds
   hadden uitgezet mag daardoor terug: er staat nu geen tweede,
   systeemeigen vinkje meer onder, dus dubbel kan het niet meer.

   Aangevinkt wordt het vakje helemaal roze met een wit vinkje. Een dun
   gekleurd vinkje op wit leest van een afstand als leeg.
   --------------------------------------------------------------- */
.gform_wrapper.gform-theme,
.gform_wrapper.gform-theme--framework {
  --gf-ctrl-choice-size: 24px;
  --gf-ctrl-choice-size-sm: 24px;
  --gf-ctrl-choice-size-md: 24px;
  --gf-ctrl-choice-size-lg: 24px;
  --gf-ctrl-checkbox-check-size: 15px;
  --gf-ctrl-checkbox-check-size-md: 15px;
  --gf-ctrl-radio-check-size: 11px;
  --gf-ctrl-radio-check-size-md: 11px;
}

.gform_wrapper input[type=checkbox],
.gform_wrapper input[type=radio],
.gform_wrapper .gfield-choice-input {
  -webkit-appearance: none !important;
  appearance: none !important;
  inline-size: 24px !important;
  block-size: 24px !important;
  width: 24px !important;
  height: 24px !important;
  min-width: 24px;
  min-height: 24px !important;
  flex: 0 0 auto;
  margin: 0;
  padding: 0;
  background-color: #fff;
  border: 2px solid #000 !important;
  box-shadow: none;
  cursor: pointer;
  transition: background-color 0.12s ease, border-color 0.12s ease;
}

.gform_wrapper input[type=checkbox],
.gform_wrapper .gfield-choice-input[type=checkbox] {
  border-radius: 0 !important;
}

.gform_wrapper input[type=radio],
.gform_wrapper .gfield-choice-input[type=radio] {
  border-radius: 50% !important;
}

/* Het vinkje van Gravity Forms mag weer meedoen, zie de toelichting boven. */
.gform_wrapper.gform-theme input[type=checkbox]::before,
.gform_wrapper.gform-theme input[type=radio]::before,
.gform_wrapper.gform-theme .gfield-choice-input::before {
  content: "" !important;
  display: block !important;
}

.gform_wrapper.gform-theme input[type=checkbox]::before,
.gform_wrapper.gform-theme .gfield-choice-input[type=checkbox]::before {
  content: var(--gf-icon-ctrl-checkbox) !important;
}

.gform_wrapper input[type=checkbox]:checked,
.gform_wrapper .gfield-choice-input[type=checkbox]:checked {
  background-color: #ff3d3d;
}

.gform_wrapper input[type=checkbox]:checked::before,
.gform_wrapper .gfield-choice-input[type=checkbox]:checked::before {
  color: #fff !important;
}

.gform_wrapper input[type=checkbox]:focus-visible,
.gform_wrapper input[type=radio]:focus-visible,
.gform_wrapper .gfield-choice-input:focus-visible {
  outline: 3px solid #ff3d3d;
  outline-offset: 2px;
}

/* De keuze zelf mag ook aanklikbaar zijn, niet alleen het vakje. Op een
   telefoon is een label van twintig pixels hoog een te klein doel. */
.gform_wrapper .gfield_checkbox .gchoice label,
.gform_wrapper .gfield_radio .gchoice label,
.gform_wrapper .gfield--type-choice .gchoice label {
  cursor: pointer;
  align-self: center;
  font-size: 16px;
  line-height: 24px;
  color: #000;
}

/* ---------------------------------------------------------------
   Keuzes staan nu als knopjes onder elkaar, feedback 13-08-2026

   "Soort activiteit" en "Wat voor soort organisatie" waren uitklap-
   lijsten. Nu alle antwoorden zichtbaar zijn hebben ze ook lucht
   nodig: negen regels die tegen elkaar aan plakken lezen als een
   muur. Bewust allemaal onder elkaar en niet in twee kolommen: bij een
   kolommenrij weet je niet of je van links naar rechts of van boven naar
   beneden moet lezen, en de langere antwoorden breken dan af.
   --------------------------------------------------------------- */
.gform_wrapper .gfield_radio,
.gform_wrapper .gfield_checkbox {
  display: grid;
  gap: 10px;
}

.gform_wrapper .gfield_radio .gchoice,
.gform_wrapper .gfield_checkbox .gchoice {
  margin-bottom: 0;
  align-items: center;
}

/* ---------------------------------------------------------------
   De uitleg boven het vakje, feedback 13-08-2026

   De hulpteksten stonden onder het invulvak. Daar lees je ze pas als je
   al iets hebt ingevuld, en op een telefoon vallen ze onder de vouw.
   Ze staan nu direct naast de vraag, boven het vak waar het over gaat.
   --------------------------------------------------------------- */
.gform_wrapper.ww-stapform .gfield_description {
  margin: 0 0 8px;
  padding: 0 0 0 12px;
  border-left: 3px solid #ffbf3d;
  font-size: 14px;
  line-height: 1.5;
  color: #4a443c;
}

.gform_wrapper.ww-stapform .gfield_description.validation_message {
  border-left-color: #ff3d3d;
  color: #b3241f;
  font-weight: 700;
}

/* ---------------------------------------------------------------
   Buurtagenda: knop vlak onder zijn eigen tekst, feedback 13-08-2026

   De twee actiekaarten boven het meedoen-blok kregen hun knop met
   margin-top: auto, dus die werd naar de onderrand van de kaart
   geduwd. Omdat de kaarten in een grid even hoog zijn en de ene
   tekst veel korter is dan de andere, ontstond daar een gat van
   soms meer dan honderd pixels tussen tekst en knop. Een vaste,
   kleinere marge zet de knop weer bij de tekst waar hij bij hoort,
   net als bij de andere blokken op de site.
   --------------------------------------------------------------- */
.info-card__btn {
  margin-top: 1.5rem;
}

/* De call-to-action in het meedoen-blok ("Zet jouw activiteit op de
   buurtagenda") volgt dezelfde afstand als de kaarten hierboven. */
.steps__btn {
  margin-top: 1.75rem;
  align-self: flex-start;
}

/* ===============================================================
   Gravity Forms, sitebreed — feedback 13-08-2026

   Deze regels gelden voor elk formulier op de site (contact, idee
   insturen, activiteit aanmelden, organisatie aanmelden en wat er
   later bij komt). Bewust niet per formulier-ID: een regel op een ID
   breekt zodra iemand een formulier opnieuw aanmaakt.
   =============================================================== */
/* ---------------------------------------------------------------
   1. Precies één sterretje achter een verplicht veld

   Er stonden er drie. Gravity Forms zet zijn eigen sterretje neer in
   deze opbouw:

     <span class="gfield_required">
       <span class="gfield_required gfield_required_asterisk">*</span>
     </span>

   De klasse staat dus twee keer, op de buitenste en de binnenste
   span. Onze eigen ::before-regel met content:'*' matchte ze allebei
   en zette er twee bij, bovenop het echte sterretje in de tekst van
   de binnenste span. Drie.

   De vorige poging zette content:none, maar alleen onder
   .gfield_label en .gform-field-label. Bij een radiogroep of een
   vinkveld staat het label in een <legend>, en daar bleven de drie
   dus staan. Nu geldt het voor het hele formulier: wij tekenen geen
   sterretje meer, we laten dat aan Gravity Forms en geven het alleen
   de goede kleur.
   --------------------------------------------------------------- */
.gform_wrapper .gfield_required::before,
.gform_wrapper .gfield_required::after {
  content: none !important;
}

/* De kleur stond op #b3241f met twee klassen in de selector, terwijl
   main.css en woensel.css hetzelfde sterretje met drie klassen
   (.gfield_label .gfield_required) op #ff3d3d zetten. Specificiteit gaat
   voor laadvolgorde, dus #ff3d3d won, en dat haalt op wit maar 3,51:1.
   Met !important wint deze regel wel, en #8f1d1a haalt de norm. */
.gform_wrapper .gfield_required,
.gform_wrapper .gfield_required_asterisk {
  color: #8f1d1a !important;
  font-weight: 700;
}

/* De binnenste span draagt het echte sterretje; die moet zichtbaar
   blijven. De regel die alle *_text-varianten verbergt (dat is de
   letterlijke tekst "(Required)") mag hem niet meenemen. */
.gform_wrapper .gfield_required_asterisk {
  display: inline !important;
}

/* ---------------------------------------------------------------
   2. De verzendknop in de huisstijl

   De knop erfde de vormgeving van het thema-basisformulier: grijs,
   afgeronde hoeken, dunne rand. Overal elders op de site is een
   actieknop geel met een zwarte rand. Nu hier ook, inclusief een
   focusrand die je met het toetsenbord kunt zien.
   --------------------------------------------------------------- */
.gform_wrapper .gform_footer input[type=submit],
.gform_wrapper .gform_footer button,
.gform_wrapper .gform_page_footer input[type=submit],
.gform_wrapper .gform_page_footer button,
.gform_wrapper .gform_button {
  display: inline-block;
  background: #ffbf3d;
  color: #000;
  border: 2px solid #000;
  border-radius: 0;
  padding: 13px 26px;
  font-family: inherit !important;
  font-weight: 800 !important;
  font-size: 16px;
  line-height: 1.3;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 0.15s ease, transform 0.15s ease;
  /* Een knop die net zo breed is als het scherm leest als een balk.
     Op mobiel mag dat wel, daar is het de enige actie. */
  min-height: 48px;
}

.gform_wrapper .gform_footer input[type=submit]:hover,
.gform_wrapper .gform_footer button:hover,
.gform_wrapper .gform_page_footer input[type=submit]:hover,
.gform_wrapper .gform_page_footer button:hover,
.gform_wrapper .gform_button:hover {
  background: #ffd177;
}

.gform_wrapper .gform_footer input[type=submit]:focus-visible,
.gform_wrapper .gform_footer button:focus-visible,
.gform_wrapper .gform_page_footer input[type=submit]:focus-visible,
.gform_wrapper .gform_page_footer button:focus-visible,
.gform_wrapper .gform_button:focus-visible {
  outline: 3px solid #000;
  outline-offset: 3px;
}

/* De vorige/volgende-knoppen van een stapformulier zijn secundair:
   dezelfde vorm, maar wit, zodat de hoofdactie de gele blijft. */
.gform_wrapper .gform_page_footer .gform_previous_button {
  background: #fff;
}

.gform_wrapper .gform_page_footer .gform_previous_button:hover {
  background: #f1f1f1;
}

/* ---------------------------------------------------------------
   3. Lucht rond de privacyverklaring

   Het vinkje met de link naar de privacyverklaring plakte tegen het
   veld erboven en tegen de verzendknop eronder. Het is een aparte
   afweging die je maakt, geen zoveelste invulveld, dus het krijgt
   ruimte om zich heen en een rustige lijn erboven.
   --------------------------------------------------------------- */
.gform_wrapper .gfield--type-consent,
.gform_wrapper .gfield_consent,
.gform_wrapper .ginput_container_consent {
  margin-top: 28px;
  margin-bottom: 12px;
}

.gform_wrapper .gfield--type-consent .gfield_consent_description,
.gform_wrapper .ginput_container_consent label {
  margin-top: 6px;
  line-height: 1.6;
}

/* De link zelf: genoeg tikruimte op een telefoon en onderstreept,
   zodat hij ook zonder kleurverschil als link te herkennen is. */
.gform_wrapper .gfield_consent_description a,
.gform_wrapper .ginput_container_consent a {
  padding: 2px 1px;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* En lucht tussen het laatste veld en de verzendknop. */
.gform_wrapper .gform_footer {
  margin-top: 28px;
  padding-top: 4px;
}

/* ---------------------------------------------------------------
   4. Foutmeldingen leesbaar op het roze vlak

   Het merkroze is #ff3d3d. Op wit haalt dat een contrast van 3.5:1,
   en dat is te weinig: WCAG AA vraagt 4.5:1 voor gewone tekst. Een
   foutmelding is precies de tekst die je wél moet kunnen lezen.

   De tekst gaat daarom naar #8f1d1a. Dat haalt 8.9:1 op wit en
   6.4:1 op het roze meldingsvlak (#ffcfcf), dus in beide gevallen
   ruim AA. Het blijft herkenbaar dezelfde rode familie.

   De melding leunt bovendien niet alleen op kleur: er staat een
   dikkere linkerrand naast en de tekst is vet.
   --------------------------------------------------------------- */
.gform_wrapper .gform_validation_errors,
.gform_wrapper .gform_submission_error {
  background: #ffe8e8;
  border: 2px solid #8f1d1a;
  border-radius: 0;
  color: #8f1d1a;
  padding: 16px 18px;
}

/* main.css en woensel.css zetten deze kop met dezelfde specificiteit op
   color:#000 !important. Zonder !important hier bleef de kop zwart. */
.gform_wrapper .gform_validation_errors h2,
.gform_wrapper .gform_validation_errors .gform_submission_error,
.gform_wrapper .gform_submission_error {
  color: #8f1d1a !important;
  font-weight: 800;
}

.gform_wrapper .gform_validation_errors a {
  color: #8f1d1a;
  text-decoration: underline;
}

/* De melding onder een afzonderlijk veld. */
.gform_wrapper .gfield_validation_message,
.gform_wrapper .gfield_description.validation_message,
.gform_wrapper .validation_message {
  background: #ffe8e8 !important;
  border-left: 4px solid #8f1d1a !important;
  color: #8f1d1a !important;
  font-weight: 700;
  font-size: 14px;
  line-height: 1.5;
  margin-top: 6px;
  padding: 8px 12px;
}

/* Het veld zelf krijgt een rand in dezelfde kleur, niet in het
   lichte merkroze: die was op wit nauwelijks te zien. */
.gform_wrapper .gfield_error input:not([type=submit]),
.gform_wrapper .gfield_error textarea,
.gform_wrapper .gfield_error select {
  border-color: #8f1d1a;
}

/* De stapformulieren hadden hun eigen, lichtere variant. Die volgt nu
   dezelfde kleur, anders verschilt dezelfde melding per formulier. */
.gform_wrapper.ww-stapform .gfield_description.validation_message {
  border-left-color: #8f1d1a;
  color: #8f1d1a;
  font-weight: 700;
}

/* ---------------------------------------------------------------
   5. Telefoonveld

   Het formaat staat op internationaal (zie inc/formulieren-generiek.php).
   Een nummer met spaties en een landcode is langer dan een veld van
   standaardbreedte; hier krijgt het de ruimte en een toetsenbord dat
   op een telefoon meteen cijfers laat zien.
   --------------------------------------------------------------- */
.gform_wrapper .ginput_container_phone input {
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
}

/* ---------------------------------------------------------------
   Filters op telefoon en tablet: zwevende knop + off-canvas paneel.

   Het paneel verhuist met JavaScript naar de sheet onderaan de pagina,
   zodat de volle schermhoogte naar de lijst gaat. Vanaf 992px staat
   alles weer gewoon in de pagina en bestaan knop en sheet niet.
   --------------------------------------------------------------- */
.ww-filterknop {
  position: fixed;
  left: 50%;
  bottom: calc(16px + env(safe-area-inset-bottom, 0px));
  z-index: 1020;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 14px 22px;
  transform: translateX(-50%);
  border: 2px solid #000;
  border-radius: 999px;
  background: #000;
  color: #fff;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.28);
  cursor: pointer;
}

.ww-filterknop[hidden] {
  display: none;
}

.ww-filterknop:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 3px;
}

.ww-filterknop__count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 22px;
  height: 22px;
  padding: 0 6px;
  border-radius: 999px;
  background: #ff3d3d;
  color: #000;
  font-size: 13px;
  line-height: 1;
}

.ww-filterknop__count[hidden] {
  display: none;
}

.ww-filtersheet__overlay {
  position: fixed;
  inset: 0;
  z-index: 1040;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  transition: opacity 0.2s ease;
}

.ww-filtersheet__overlay.is-open {
  opacity: 1;
}

.ww-filtersheet__overlay[hidden] {
  display: none;
}

.ww-filtersheet {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1041;
  display: flex;
  flex-direction: column;
  max-height: 85vh;
  transform: translateY(100%);
  border-radius: 20px 20px 0 0;
  background: #fff;
  box-shadow: 0 -8px 30px rgba(0, 0, 0, 0.25);
  transition: transform 0.22s ease;
}

.ww-filtersheet.is-open {
  transform: translateY(0);
}

.ww-filtersheet[hidden] {
  display: none;
}

.ww-filtersheet__kop {
  position: relative;
  flex: 0 0 auto;
  padding: 18px 56px 14px 20px;
  border-bottom: 1px solid #e5e5e5;
}

.ww-filtersheet__handvat {
  position: absolute;
  top: 8px;
  left: 50%;
  width: 44px;
  height: 4px;
  transform: translateX(-50%);
  border-radius: 999px;
  background: #d5d5d5;
}

.ww-filtersheet__titel {
  margin: 0;
  font-size: 20px;
  font-weight: 800;
  letter-spacing: 0.01em;
  text-transform: uppercase;
}

.ww-filtersheet__wis {
  position: absolute;
  right: 56px;
  bottom: 14px;
  padding: 6px 4px;
  border: 0;
  background: none;
  color: #000;
  font-size: 14px;
  text-decoration: underline;
  cursor: pointer;
}

.ww-filtersheet__sluit {
  position: absolute;
  top: 14px;
  right: 12px;
  width: 40px;
  height: 40px;
  border: 0;
  border-radius: 999px;
  background: #f2f2f2;
  color: #000;
  font-size: 26px;
  line-height: 1;
  cursor: pointer;
}

.ww-filtersheet__wis:focus-visible,
.ww-filtersheet__sluit:focus-visible,
.ww-filtersheet__actie:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

.ww-filtersheet__body {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 16px 20px;
}

/* Het verhuisde paneel mag geen eigen kader of ingeklapte staat meer
   hebben: binnen de sheet staat alles open. De oude inklap-regel voor
   mobiel wordt hier opgeheven. */
.ww-filtersheet__body .ww-filters,
.ww-filtersheet__body .buurt-directory__panel {
  margin: 0;
  padding: 0;
  border: 0;
  box-shadow: none;
}

.ww-filtersheet__body .ww-filters > *,
.ww-filtersheet__body .buurt-directory__panel > * {
  display: revert;
}

.ww-filtersheet__voet {
  flex: 0 0 auto;
  padding: 14px 20px calc(14px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid #e5e5e5;
  background: #fff;
}

.ww-filtersheet__actie {
  display: block;
  width: 100%;
  padding: 16px 20px;
  border: 2px solid #000;
  border-radius: 999px;
  background: #000;
  color: #fff;
  font-weight: 800;
  font-size: 16px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  cursor: pointer;
}

/* Ruimte onderaan de pagina zolang de knop zweeft, zodat hij nooit de
   laatste rij of de nieuwsbrief bedekt. */
body.ww-heeft-filterknop {
  padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px));
}

/* Achtergrond niet meescrollen terwijl de sheet open staat. */
body.ww-filtersheet-open {
  position: fixed;
  left: 0;
  right: 0;
  width: 100%;
  overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
  .ww-filtersheet,
  .ww-filtersheet__overlay {
    transition: none;
  }
}
@media (min-width: 992px) {
  .ww-filterknop,
  .ww-filtersheet,
  .ww-filtersheet__overlay {
    display: none !important;
  }
  body.ww-heeft-filterknop {
    padding-bottom: 0;
  }
}
/* De filterknoppen zijn getekend voor de donkere balk waar het paneel
   eerst stond: de outline-variant heeft witte tekst en een witte rand.
   Op het witte paneel viel het label daardoor weg en zag je alleen het
   aantal. Binnen de sheet krijgen ze dus de donkere variant op wit. */
.ww-filtersheet__body .woensel-btn--outline {
  border-color: #000 !important;
  background: #fff !important;
  color: #000 !important;
}

.ww-filtersheet__body .woensel-btn--outline:hover,
.ww-filtersheet__body .woensel-btn--outline.is-active {
  background: #000 !important;
  color: #fff !important;
}

/* Filterrijen als volle, goed aantikbare regels onder elkaar, met het
   aantal rechts uitgelijnd. Naast elkaar werd het op 375px te smal. */
.ww-filtersheet__body .buurt-directory__filters,
.ww-filtersheet__body .ww-filters__groep,
.ww-filtersheet__body .post-overview__filters,
.ww-filtersheet__body .agenda__filters {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 12px 0 0;
}

.ww-filtersheet__body [data-filter],
.ww-filtersheet__body [data-type] {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  min-height: 52px;
  text-align: left;
}

.ww-filtersheet__body .buurt-directory__filter-count,
.ww-filtersheet__body [class$=__filter-count] {
  margin-left: auto;
}

/* De overlay mag nooit tikken opvangen zolang het paneel dicht is: hij
   staat op inset:0 en zou anders de hele pagina blokkeren. Het hidden-
   attribuut regelt dit al, dit is de tweede beveiliging. */
.ww-filtersheet__overlay {
  pointer-events: none;
}

.ww-filtersheet__overlay.is-open {
  pointer-events: auto;
}

/* De knop staat linksonder in plaats van gecentreerd. */
.ww-filterknop {
  left: 16px;
  transform: none;
}

/* Het echte paneel van de agenda en verhalen blijft in de pagina staan
   (de blok-container moet de kliks kunnen opvangen), maar is op mobiel
   onzichtbaar: de sheet toont doorgeefknoppen. */
body.ww-heeft-filterknop .ww-filters--in-sheet {
  display: none !important;
}

.ww-filtersheet__doorgeef {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.ww-filtersheet__zoek {
  width: 100%;
  min-height: 52px;
  margin-bottom: 4px;
  padding: 12px 16px;
  border: 2px solid #000;
  background: #fff;
  color: #000;
  font-size: 16px;
}

.ww-filtersheet__doorgeefknop {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  min-height: 52px;
  text-align: left;
}

/* --- Begrijpelijk filterpaneel: vragen, vinkjes en een samenvatting --- */
.ww-filtersheet__samenvatting {
  margin: 0 0 14px;
  padding: 12px 14px;
  background: #f5f5f5;
  border-left: 4px solid #ff3d3d;
  font-size: 15px;
  line-height: 1.35;
}

.ww-filtersheet__groepskop {
  margin: 18px 0 8px;
  font-size: 16px;
  font-weight: 800;
  line-height: 1.25;
}

.ww-filtersheet__groepskop:first-child {
  margin-top: 0;
}

.ww-filtersheet__rij {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* Eén keuze per regel, met het vinkje rechts. Naast elkaar in pillen was
   op een telefoon niet te lezen en je zag niet wat aan stond. */
.ww-filtersheet__keuze {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  min-height: 52px;
  padding: 10px 14px;
  border: 2px solid #000;
  background: #fff;
  color: #000;
  font-size: 16px;
  font-weight: 600;
  text-align: left;
  cursor: pointer;
}

.ww-filtersheet__keuze.is-active {
  background: #000;
  color: #fff;
}

.ww-filtersheet__keuze:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

.ww-filtersheet__keuze-vink {
  flex: 0 0 auto;
  font-size: 18px;
  line-height: 1;
  opacity: 0;
}

.ww-filtersheet__keuze.is-active .ww-filtersheet__keuze-vink {
  opacity: 1;
}

/* De knop mag breder worden nu er een filternaam in staat. */
.ww-filterknop {
  max-width: calc(100vw - 32px);
}

.ww-filterknop__label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- FB12: datumkiezer bruikbaar maken ------------------------------- */
/* Gravity Forms gebruikt de jQuery UI datepicker. De dagen waren 34x35px,
   er was geen jaarnavigatie en de picker viel onder de onderrand van het
   scherm. Grotere raakvlakken, maand- en jaarkeuze in de kop, en een vaste
   paneelstand (ww-datepicker-sheet) als hij nergens binnen het beeld past.
   Zie assets/js/ww-datepicker.js. */
#ui-datepicker-div.ww-datepicker {
  z-index: 100000 !important;
  width: 348px;
  min-width: 0;
  max-width: calc(100vw - 24px);
  padding: 12px;
  border: 2px solid #000;
  border-radius: 0;
  background: #fff;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.22);
  font-family: "Open Sans", system-ui, sans-serif;
  font-size: 16px;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 0 0 10px;
  border: 0;
  border-radius: 0;
  background: #fff;
  color: #000;
}

/* Vorige- en volgende-maand als echte knoppen van 44px. */
#ui-datepicker-div.ww-datepicker .ui-datepicker-prev,
#ui-datepicker-div.ww-datepicker .ui-datepicker-next {
  position: static;
  top: auto;
  left: auto;
  right: auto;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  margin: 0;
  border: 2px solid #000;
  border-radius: 0;
  background: #fff;
  cursor: pointer;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-prev:hover,
#ui-datepicker-div.ww-datepicker .ui-datepicker-next:hover {
  background: #ffbf3d;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-prev.ui-state-disabled,
#ui-datepicker-div.ww-datepicker .ui-datepicker-next.ui-state-disabled {
  opacity: 0.35;
  cursor: default;
}

/* De pijltjes zijn achtergrondplaatjes van het jQuery UI thema. Netter is
   een eigen teken, dat altijd contrast heeft. */
#ui-datepicker-div.ww-datepicker .ui-datepicker-prev .ui-icon,
#ui-datepicker-div.ww-datepicker .ui-datepicker-next .ui-icon {
  position: static;
  display: block;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  text-indent: 0;
  background: none;
  /* jQuery UI zet "Vorige"/"Volgende" als tekst in dit element en verbergt
     die met text-indent. Die truc hebben wij hierboven uitgezet, dus de
     tekst brak zichtbaar af in het vakje. Lettergrootte 0 verbergt de
     tekst; het pijlteken hieronder krijgt zijn eigen maat terug. */
  font-size: 0;
  line-height: 1;
  color: #000;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-prev .ui-icon::before,
#ui-datepicker-div.ww-datepicker .ui-datepicker-next .ui-icon::before {
  font-size: 24px;
  line-height: 1;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-prev .ui-icon::before {
  content: "‹";
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-next .ui-icon::before {
  content: "›";
}

/* Maand- en jaarkeuze naast elkaar, groot genoeg om te raken. */
#ui-datepicker-div.ww-datepicker .ui-datepicker-title {
  display: flex;
  flex: 1 1 auto;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 0;
  line-height: 1.2;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-title select {
  min-height: 44px;
  padding: 6px 8px;
  border: 2px solid #000;
  border-radius: 0;
  background: #fff;
  color: #000;
  font-size: 16px;
  font-weight: 700;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-title select.ui-datepicker-month {
  flex: 1 1 60%;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-title select.ui-datepicker-year {
  flex: 1 1 40%;
}

#ui-datepicker-div.ww-datepicker .ui-datepicker-title select:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar {
  width: 100%;
  margin: 0;
  border-collapse: collapse;
  font-size: 16px;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar th {
  padding: 6px 0;
  border: 0;
  background: none;
  color: #000;
  font-size: 13px;
  font-weight: 700;
  text-transform: uppercase;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td {
  padding: 2px;
  border: 0;
  background: none;
}

/* Het raakvlak per dag: minimaal 44px in beide richtingen. */
#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td a,
#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td span {
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: 100%;
  min-width: 44px;
  min-height: 44px;
  padding: 0;
  border: 2px solid transparent;
  border-radius: 0;
  background: #f4f4f5;
  color: #000;
  font-size: 16px;
  font-weight: 600;
  line-height: 1;
  text-align: center;
  text-decoration: none;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td a:hover {
  border-color: #000;
  background: #ffbf3d;
  color: #000;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td a:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td a.ui-state-active,
#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td a.ui-state-highlight {
  border-color: #000;
  background: #000;
  color: #fff;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td.ui-datepicker-unselectable span {
  background: #fff;
  color: #9a9a9a;
}

#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td.ui-datepicker-other-month a,
#ui-datepicker-div.ww-datepicker table.ui-datepicker-calendar td.ui-datepicker-other-month span {
  background: #fff;
  color: #9a9a9a;
}

/* Paneelstand: de picker paste niet boven en niet onder het veld. Dan
   midden in het beeld tonen, met een scherm erachter. Zelfde gevoel als
   het mobiele filterpaneel. */
#ui-datepicker-div.ww-datepicker.ww-datepicker-sheet {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%);
  max-height: calc(100vh - 24px);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

.ww-datepicker-backdrop {
  position: fixed;
  inset: 0;
  z-index: 99998;
  display: none;
  background: rgba(0, 0, 0, 0.45);
}

.ww-datepicker-backdrop.is-open {
  display: block;
}

/* Op een telefoon is de vaste paneelstand bijna altijd aan de orde. */
@media (max-width: 575.98px) {
  #ui-datepicker-div.ww-datepicker {
    min-width: 0;
    width: calc(100vw - 24px);
  }
}
/* --- FB12: agenda-overzicht, knoppen en mobiele stapeling ------------ */
/* De uitgelichte afbeelding volgt de cursor (assets/js/agenda-hover-image.js)
   en is 280x340 groot met z-index 60. Zodra je naar de knoppen rechts ging,
   lag de foto er precies bovenop: gemeten overlap 78x35px, dus de knoppen
   waren volledig bedekt. Ze bleven technisch aanklikbaar (de foto staat op
   pointer-events: none) maar je zag ze niet meer. De knoppen krijgen daarom
   een eigen laag boven de foto, en het script verbergt de foto zolang je op
   de knoppen staat. */
.agenda .agenda__item .agenda__actions {
  position: relative;
  z-index: 70;
}

/* Raakvlak van 44px. De knoppen waren 35x35px. */
.agenda .agenda__item .agenda__action {
  box-sizing: border-box;
  min-width: 44px;
  min-height: 44px;
  align-items: center;
  justify-content: center;
}

.agenda .agenda__item .agenda__action:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

/* Op een telefoon stond datum en tijd naast de titel zolang die kort was, en
   sprong de titel naar een eigen regel zodra hij langer werd. Daardoor lag de
   uitlijning per regel anders en oogde de lijst rommelig. Nu is de stapeling
   voor elke regel gelijk: datum en tijd op één regel, dan de titel, dan de
   plaats en prijs, dan de knoppen. */
@media (max-width: 575.98px) {
  .agenda .agenda__list .agenda__item {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
    padding: 16px 20px;
  }
  .agenda .agenda__list .agenda__item-link {
    flex-wrap: wrap;
    align-items: baseline;
    gap: 2px 12px;
    width: 100%;
  }
  /* De titel en meta altijd op een eigen regel onder datum en tijd. */
  .agenda .agenda__list .agenda__info {
    flex: 1 0 100%;
    margin-top: 2px;
  }
  .agenda .agenda__list .agenda__meta {
    margin-top: 4px;
  }
  .agenda .agenda__list .agenda__actions {
    justify-content: flex-start;
    gap: 10px;
    margin-top: 2px;
  }
}
/* --- FB12: formulieropmaak en knopstanden ---------------------------- */
/* 1. De knop "ik heb een leuk idee" werd zwart bij indrukken.
      Oorzaak: Bootstrap heeft de regel .btn:first-child:active met
      background-color: var(--bs-btn-active-bg). Die variabele is op deze knop
      leeg (gemeten: --bs-btn-active-bg = ""), dus de achtergrond viel weg en je
      keek door de knop heen naar de zwarte header. De eigen regel
      .woensel-btn--idea:active verloor het omdat die minder zwaar weegt
      (0,2,0 tegen 0,3,0). Twee classes plus een pseudo weegt gelijk op, en dit
      bestand laadt later, dus hiermee wint hij wel. */
.woensel-btn.woensel-btn--idea:active,
.woensel-btn.woensel-btn--idea:focus,
.woensel-btn.woensel-btn--idea:focus-visible,
.woensel-header .woensel-btn--idea:active,
.woensel-header .woensel-btn--idea:focus-visible {
  background-color: #e0a836 !important;
  border-color: #e0a836 !important;
  color: #000 !important;
}

/* De focusring zoals de rest van de site: geel, met ruimte ertussen zodat
   hij ook op de gele knop in de zwarte header te zien is. */
.woensel-btn.woensel-btn--idea:focus-visible,
.woensel-header .woensel-btn--idea:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 3px;
  box-shadow: none;
}

/* 2. Het uploadveld had een rare kleurcombinatie: het sleepvak
      (.gform_drop_area) had een roze streepjesrand (#ff3d3d) met daarin de
      standaard blauwgrijze tekstkleur van Gravity Forms
      (rgba(17,35,55,.725)) op een doorzichtige achtergrond. Nu rustig in de
      huisstijl: zwarte streepjesrand op een lichtgrijs vlak, zwarte tekst.
      input[type=file] zelf blijft ongemoeid: dat is bij Gravity Forms een
      onzichtbare laag voor slepen en neerzegen (opacity: 0, aria-hidden). */
.gform_wrapper .gfield--type-fileupload .gform_drop_area {
  padding: 24px 20px;
  border: 2px dashed #000;
  border-radius: 0;
  background: #f4f4f5;
  color: #000;
  font-size: 15px;
  line-height: 1.5;
  text-align: center;
}

.gform_wrapper .gfield--type-fileupload .gform_drop_area .gform_button_select_files,
.gform_wrapper .gfield--type-fileupload .gform_button_select_files {
  display: inline-block;
  margin: 6px 0 0;
  padding: 10px 18px;
  border: 2px solid #000;
  border-radius: 0;
  background: #ffbf3d;
  color: #000;
  font-family: inherit;
  font-size: 15px;
  font-weight: 700;
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
}

.gform_wrapper .gfield--type-fileupload .gform_button_select_files:hover {
  background: #e0a836;
}

.gform_wrapper .gfield--type-fileupload .gform_button_select_files:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

/* De regel met toegestane bestandstypen hoort bij de rustige toelichtingen. */
.gform_wrapper .gfield--type-fileupload .gform_fileupload_rules {
  display: block;
  margin-top: 8px;
  color: #6f6a63;
  font-size: 13.5px;
}

/* 3. De privacy-vinkjes waren 24px naast een label van 12px. Dat oogde als een
      veel te groot vakje. Het vakje iets kleiner, het label leesbaar, en de
      twee op dezelfde regel uitgelijnd. */
.gform_wrapper .gfield--type-consent input[type=checkbox],
.gform_wrapper .gfield_consent input[type=checkbox],
.gform_wrapper .gfield--type-checkbox .gfield_checkbox input[type=checkbox] {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  min-width: 20px;
  min-height: 20px;
  margin-top: 1px;
}

/* Het label naast een vinkje heet bij Gravity Forms
   .gform-field-label--type-inline en stond op 12px in kapitalen naast een vakje
   van 24px. Daardoor leek het vakje veel te groot. */
.gform_wrapper .gchoice label.gform-field-label--type-inline,
.gform_wrapper .gfield--type-consent label.gform-field-label--type-inline,
.gform_wrapper .gfield--type-checkbox .gchoice label {
  font-size: 15px;
  font-weight: 400;
  line-height: 1.45;
  text-transform: none;
  letter-spacing: 0;
}

/* Vakje en tekst op één regel netjes naast elkaar. */
.gform_wrapper .gfield--type-checkbox .gchoice,
.gform_wrapper .gfield--type-consent .gchoice {
  display: flex;
  align-items: flex-start;
  gap: 10px;
}

/* 4. De toelichtingen bij de velden hadden een gele streep aan de linkerkant en
      een vrij donkere bruine tekstkleur (#4a443c). Joep wil ze rustig grijs en
      met duidelijke afstand van het veld. Nu: geen streep meer, een kalm grijs,
      en vaste ruimte tussen de toelichting en het invoervak eronder. */
.gform_wrapper .gfield_description,
.gform_wrapper .gform-field-label--type-sub,
.gform_wrapper.ww-stapform .gfield_description {
  margin: 2px 0 10px;
  padding: 0;
  border-left: 0;
  background: none;
  color: #6f6a63;
  font-size: 14px;
  font-weight: 400;
  line-height: 1.5;
}

/* De toelichting hoort bij het veld eronder, dus de ruimte eronder is kleiner
   dan de ruimte boven het volgende label. */
.gform_wrapper .gfield--has-description .ginput_container {
  margin-top: 0;
}

/* --- FB12: maat van de vinkjes --------------------------------------- */
/* Gravity Forms zet de maat via inline-size/block-size in het orbital-thema,
   niet via width/height, en de omhullende laag heet .gchoice en niet
   .gfield_checkbox. Daardoor greep de eerdere regel niet aan. Gemeten: 24x24px
   naast een label van 12px, wat als een veel te groot vakje overkwam. Nu 20px
   naast een label van 15px. */
.gform_wrapper .gchoice input[type=checkbox],
.gform_wrapper .gchoice input[type=radio],
.gform_wrapper .gchoice .gfield-choice-input {
  width: 20px !important;
  height: 20px !important;
  inline-size: 20px;
  block-size: 20px;
  min-width: 20px !important;
  min-height: 20px !important;
  flex: 0 0 auto;
}

/* --- Uploadveld formulier 7: rustiger --- */
/* Het GF-icoon boven de sleeptekst rendert als een rood vlak met een
   blauw wolkje (kleuren uit het GF-framework, niet van ons). Weg ermee:
   de tekst en de knop zeggen al wat je hier kunt doen. */
.gform_wrapper .gform_drop_area::before {
  display: none !important;
}

/* De standaardregel "Toegestane bestandstypen ... Max. bestandsgrootte"
   verdwijnt; de validatie zelf blijft gewoon werken en meldt het als
   iemand toch een verkeerd bestand kiest. */
.gform_wrapper .gform_fileupload_rules {
  display: none !important;
}

/* De subtitel onder het fotolabel mag weg; het label zegt genoeg. */
#field_7_12 > .gfield_description:not(.gform_fileupload_rules) {
  display: none !important;
}

/* "Selecteer bestanden" was rode losse tekst; nu een herkenbare knop. */
.gform_wrapper .gform_drop_area .gform_button_select_files {
  border: 2px solid #000 !important;
  background: #fff !important;
  color: #000 !important;
  padding: 10px 18px !important;
  font-weight: 700;
}

.gform_wrapper .gform_drop_area .gform_button_select_files:hover,
.gform_wrapper .gform_drop_area .gform_button_select_files:focus-visible {
  background: #000 !important;
  color: #fff !important;
}

.gform_wrapper .gform_drop_area .gform_button_select_files:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

/* ---------------------------------------------------------------------------
   Feedbackpunt 13: rustige placeholder voor items zonder foto.
   De oude placeholder was een grijs diagonaal streepjespatroon en oogde als
   een ontbrekend bestand. Nu een egaal huisstijlvlak met het zigzagmotief.
   --------------------------------------------------------------------------- */
.buurt-card__img--placeholder,
.verhaal-card__img--placeholder,
.werkzaamheid-card__img--placeholder,
.highlight-story-card__img--placeholder,
.single-verhaal__hero-img--placeholder {
  background-color: #68b0d4 !important;
  background-image: url("../img/agenda-placeholder.svg") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: cover !important;
}

/* ---------------------------------------------------------------------------
   Feedbackpunt 11b: witruimte onder de pagina-hero zonder zigzag-crest.
   .page-hero heeft padding-bottom: 0 omdat er normaal een .woensel-hero-crest
   achter komt die de sectie visueel afsluit. Staat show_wiggle op 0 (op
   /contact/), dan is er geen crest en plakt de introtekst met 0px tegen de
   onderrand van de hero en dus tegen het volgende blok aan. Op de pagina's
   waar het klopt (/melden/, /ik-zoek-geld/) is dat 80px op desktop en 64px
   onder 992px, via row-padding-bottom-lg. Diezelfde maten hier, maar alleen
   als er geen crest volgt en de redactie zelf geen padding heeft gekozen.
   --------------------------------------------------------------------------- */
.page-hero:not(:has(+ .woensel-hero-crest)):not([class*=row-padding-bottom]) {
  padding-bottom: 80px;
}

@media (max-width: 991.98px) {
  .page-hero:not(:has(+ .woensel-hero-crest)):not([class*=row-padding-bottom]) {
    padding-bottom: 64px;
  }
}
/* ---------------------------------------------------------------------------
   Feedbackpunt 11d: eigen kaart met beide bezoeklocaties in de zijkolom van
   het contactblok, in plaats van een Google Maps-iframe met een los label.
   Zelfde Leaflet/CARTO-opzet en pin-opmaak als de overige kaarten.
   --------------------------------------------------------------------------- */
.contact-form__map--leaflet {
  min-height: 240px;
  background-color: #e8e4dc;
}

.contact-form__map--leaflet.leaflet-container {
  font: inherit;
  background-color: #e8e4dc;
}

/* Permanent label naast elke pin: je moet zonder aanwijzen kunnen zien welke
   pin welke plek is. Zwart vlak met witte rand, net als het oude maplabel. */
.leaflet-tooltip.buurt-map-tip {
  padding: 4px 8px;
  background: #000000;
  border: 2px solid #ffffff;
  border-radius: 0;
  box-shadow: none;
  color: #ffffff;
  font-weight: 800;
  font-size: 13px;
  line-height: 1.2;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 1;
}

/* Geen pijltje: het label zit al direct op de pin. */
.leaflet-tooltip.buurt-map-tip::before,
.leaflet-tooltip.buurt-map-tip::after {
  display: none;
}

/* Terugval zonder JavaScript of zonder Leaflet: de adressen leesbaar in beeld
   in plaats van een lege bak. De kaart-JS haalt deze lijst weg zodra de kaart
   er daadwerkelijk staat. */
.contact-form__map-fallback {
  list-style: none;
  margin: 0;
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.contact-form__map-fallback li {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 16px;
  line-height: 22px;
  letter-spacing: 0.025em;
  color: #000000;
}

.contact-form__map-fallback strong {
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.025em;
}

/* Feedbackpunt 13: een info-kaartje met een link is in zijn geheel
   aanklikbaar. De link over de titel wordt met Bootstrap's stretched-link
   over de kaart uitgerekt; de kaart is daarvoor het positiepunt. De
   focusring komt om de kaart heen, niet om de paar woorden van de titel. */
.info-card--klikbaar {
  position: relative;
}

.info-card--klikbaar .info-card__link.stretched-link:focus-visible {
  outline: none;
}

.info-card--klikbaar .info-card__link.stretched-link:focus-visible::after {
  outline: 2px solid #ff3d3d;
  outline-offset: 3px;
}

/* ---------------------------------------------------------------
   Golf 2, punt 2a: dezelfde filterknop ook bovenaan de lijst.

   De zwevende knop onderin bleef onopgemerkt. Die blijft staan, maar
   dezelfde knop komt er ook boven de lijst bij, waar je hem ziet
   zonder te scrollen. Zelfde paneel, zelfde teller, zelfde open().

   JavaScript maakt deze knop alleen onder 992px en haalt hem bij het
   breder worden weer weg, dus een media query is hier niet nodig.
   --------------------------------------------------------------- */
.ww-filterknop--boven {
  position: static;
  left: auto;
  bottom: auto;
  z-index: auto;
  display: flex;
  width: 100%;
  justify-content: center;
  margin: 0 0 1rem;
  transform: none;
  box-shadow: none;
}

/* ---------------------------------------------------------------
   Golf 2, punt 2c: foto en type-icoon in de agendalijst.

   De foto stond alleen in de cursor-volgfoto (agenda-hover-image.js) en was
   daarmee onzichtbaar op een telefoon en voor iedereen die niet met een muis
   werkt. Hij staat nu op de rij zelf; het script houdt zich stil zolang de rij
   zijn eigen beeld toont, zodat er geen twee foto's tegelijk zijn.

   Mobile-first: op een telefoon een klein vierkantje naast datum en tijd,
   vanaf tablet ruimer. De verhouding staat vast (4/3) en het beeld is
   object-fit: cover, dus verspringen kan niet en de rij valt op 500px niet om.
   --------------------------------------------------------------- */
.agenda__thumb {
  display: block;
  flex: 0 0 auto;
  align-self: center;
  width: 56px;
  aspect-ratio: 4/3;
  overflow: hidden;
  border: 1px solid currentColor;
  background: rgba(0, 0, 0, 0.08);
}

.agenda__thumb img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Vanaf tablet is er ruimte voor een groter beeld. */
@media (min-width: 768px) {
  .agenda__thumb {
    width: 88px;
  }
}
/* Het type met zijn icoon in de metaregel: icoon en woord horen bij elkaar en
   mogen nooit los van elkaar afbreken. */
.agenda__type {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  white-space: nowrap;
}

.ww-type-icoon {
  font-size: 0.95em;
  line-height: 1;
}

/* Zelfde icoon op de type-filterknop, met lucht tussen icoon en opschrift. */
.ww-filters__pill .ww-type-icoon {
  margin-right: 0.4em;
}

/* ---------------------------------------------------------------
   6. Meerdere datums kiezen (formulier 7, herhaalactiviteiten)

   Klantbijeenkomst 17-08-2026, notulen paragraaf 5: wekelijks aanbod moet in
   één keer ingevoerd kunnen worden. Het veld is een tekstveld met de datums
   erin; assets/js/ww-datums.js zet er een kalender bij waarop je de dagen
   aantikt. Gaat die JavaScript niet op, dan blijft een gewoon tekstveld over
   en doen deze regels niets kwaads.

   Mobile-first, en de raakvlakken zijn minstens 44px: dit formulier wordt
   vooral op een telefoon ingevuld en de doelgroep is niet fijnmotorisch.
   --------------------------------------------------------------- */
.ww-datums__veld[readonly] {
  background: #f4f4f5;
  cursor: default;
}

/* Werkt de kalender, dan zijn de chips de invulling en zegt het tekstveld
   ("01-09-2026, 08-09-2026, ...") precies hetzelfde nog een keer. Het veld
   blijft in de pagina staan en blijft dus meeverstuurd worden; het is alleen
   niet meer te zien. Gaat de JavaScript niet op, dan zet ww-datums.js deze
   klasse niet en blijft het gewone tekstveld gewoon staan om in te typen. */
/* !important omdat gravity-forms-theme-framework.min.css het veld
   "display: var(--gf-local-display)" meegeeft met hetzelfde gewicht en later in
   de bronvolgorde. Zonder !important bleef het veld staan. */
.gform_wrapper .ww-datums__veld--verborgen {
  display: none !important;
}

/* WAAROM STAAT .ww-datums__widget VOOR ELKE SELECTOR HIERONDER?

   Gravity Forms laadt gravity-forms-theme-reset.min.css met deze regel:

     .gform-theme--framework :where(:not(html, iframe, ...)) { all: revert; display: revert; }

   Die :where() weegt nul, dus de regel weegt net zoveel als één klasse. Staat
   hier dus ".ww-datums__chip", dan weegt dat hetzelfde, en bij gelijk gewicht
   wint wie later staat: de reset. En "all: revert" zet niet één ding terug maar
   ALLES: rand, hoek, achtergrond, min-height, display, overflow. De chips
   kwamen daardoor als kale volle regels terug, precies zoals op het screenshot
   van Joep.

   Met ".ww-datums__widget" ervoor weegt elke regel twee klassen en wint hij wel.
   Geen !important nodig, behalve bij de knop: die vecht met de eigen knopstijl
   van Gravity Forms en die weegt zwaarder dan twee klassen.
   --------------------------------------------------------------- */
.gform_wrapper .ww-datums__widget {
  margin-top: 12px;
}

/* De knop die de kalender openzet. Hij had alleen een min-height, waardoor de
   blauwe standaardknop van Gravity Forms bleef staan: dat is de enige blauwe
   plek op de hele site. Nu dezelfde vorm als "Selecteer bestanden" bij het
   uploadveld hierboven, zodat de twee knoppen in dit formulier op elkaar
   lijken. */
.ww-datums__widget .ww-datums__toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px 18px !important;
  border: 2px solid #000 !important;
  border-radius: 999px !important;
  background: #fff !important;
  color: #000 !important;
  font-weight: 700;
  line-height: 1.2;
  cursor: pointer;
}

.ww-datums__widget .ww-datums__toggle:hover,
.ww-datums__widget .ww-datums__toggle:focus-visible {
  background: #000 !important;
  color: #fff !important;
}

/* De focusring is geel, zoals de rest van de huisstijl en zoals de knop
   "Selecteer bestanden" hierboven. !important omdat Gravity Forms elke
   [type="button"] een eigen ring geeft via var(--gf-local-outline-color); die
   kwam hier roze door en roze is in dit formulier de kleur van invulvelden. */
.ww-datums__widget .ww-datums__toggle:focus-visible {
  outline: 3px solid #ffbf3d !important;
  outline-offset: 2px !important;
}

.ww-datums__widget .ww-datums__kalender {
  margin-top: 12px;
}

.ww-datums__kalender .ui-datepicker {
  width: 100%;
  max-width: 22rem;
  border: 2px solid #000;
  border-radius: 8px;
  padding: 8px;
  background: #fff;
}

.ww-datums__kalender .ui-datepicker table {
  width: 100%;
  border-collapse: collapse;
}

.ww-datums__kalender .ui-datepicker td {
  padding: 2px;
}

/* Elke dag is een knop, niet een letterkleine link. */
.ww-datums__kalender .ui-datepicker td a,
.ww-datums__kalender .ui-datepicker td span {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  min-height: 40px;
  border-radius: 6px;
  text-align: center;
  text-decoration: none;
  color: #000;
}

.ww-datums__kalender .ui-datepicker td a:hover {
  background: #ffe8e8;
}

/* Aangetikt: dezelfde roze merkkleur als de rest van de site. */
.ww-datums__kalender .ui-datepicker td.ww-datums__dag--aan a {
  background: var(--ww-pink, #ff3d3d);
  color: #fff;
  font-weight: 700;
}

/* De eerste dag komt uit de vraag hierboven en kan hier niet weg. */
.ww-datums__kalender .ui-datepicker td.ww-datums__dag--eerste a,
.ww-datums__kalender .ui-datepicker td.ww-datums__dag--eerste span {
  background: var(--ww-yellow, #ffbf3d);
  color: #000;
  font-weight: 700;
  cursor: not-allowed;
}

/* De gekozen dagen staan als chips naast elkaar en lopen door op de volgende
   regel. Eerder was elke dag een volle regel met het kruisje uiterst rechts;
   bij zes dagen gaf dat zes brede regels met kruisjes die los van de tekst
   zweefden en per regel verspringden. */
.ww-datums__widget .ww-datums__lijst {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
}

.ww-datums__widget .ww-datums__chip {
  display: inline-flex;
  align-items: stretch;
  min-height: 44px;
  border: 2px solid #000;
  border-radius: 999px;
  background: #fff;
  color: #000;
  /* Zodat het kruisje als eindkapje netjes binnen de ronde hoek blijft. */
  overflow: hidden;
}

.ww-datums__widget .ww-datums__chip-dag {
  display: inline-flex;
  align-items: center;
  padding: 0 6px 0 16px;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
}

/* De eerste dag is geel en heeft geen kruisje: die staat in de vraag hierboven
   en kan hier niet weg. Het opschrift zegt dat er ook bij. */
.ww-datums__widget .ww-datums__chip--eerste {
  background: var(--ww-yellow, #ffbf3d);
}

.ww-datums__widget .ww-datums__chip--eerste .ww-datums__chip-dag {
  padding-right: 0;
}

.ww-datums__widget .ww-datums__chip-merk {
  display: inline-flex;
  align-items: center;
  padding: 0 16px 0 6px;
  font-size: 0.85rem;
  font-weight: 400;
  line-height: 1.2;
  white-space: nowrap;
}

/* Het kruisje zit ín de chip, als eindkapje over de volle hoogte. Zo is het
   raakvlak 44px breed en 44px hoog zonder dat de chip een blok wordt.

   De !important-regels zijn nodig omdat Gravity Forms zijn eigen knopstijl
   meegeeft aan elke <button> in het formulier. Die stijl weegt zwaarder dan
   twee klassen, waardoor het kruisje een blauw blokje werd: de enige blauwe
   plek op de site, precies zoals op het screenshot van Joep. */
.ww-datums__widget .ww-datums__weg {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 44px;
  min-width: 44px;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  background-color: transparent !important;
  color: #8f1d1a !important;
  /* Het maal-teken staat klein in zijn regel; op 1.375rem werd het een spikkel.
     Deze doelgroep moet het kruisje kunnen zien, niet zoeken. */
  /* !important, net als de kleuren hierboven: Gravity Forms zet op elk veld
     in het formulier "font-size: var(--gf-local-font-size)" met hetzelfde
     gewicht en later in de bronvolgorde. Zonder !important bleef het kruisje
     op 14px staan en was het een spikkel. */
  font-size: 1.75rem !important;
  font-weight: 700 !important;
  line-height: 1;
  cursor: pointer;
  /* Een dun streepje scheidt het kruisje van de datum, zodat te zien is dat
     alleen het kruisje aantikbaar is en niet de hele chip. */
  box-shadow: inset 1px 0 0 #e4e4e7;
}

.ww-datums__widget .ww-datums__chip--eerste .ww-datums__weg {
  box-shadow: none;
}

.ww-datums__widget .ww-datums__weg:hover,
.ww-datums__widget .ww-datums__weg:focus-visible {
  background: #ffe8e8 !important;
  background-color: #ffe8e8 !important;
  color: #8f1d1a !important;
}

/* De rand van de chip snijdt een gewone focusring af (overflow: hidden), dus
   valt de ring hier naar binnen. */
.ww-datums__widget .ww-datums__weg:focus-visible {
  outline: 3px solid #ffbf3d !important;
  outline-offset: -3px !important;
}

.ww-datums__widget .ww-datums__teller {
  display: block;
  margin: 10px 0 0;
  font-size: 0.9rem;
  color: #52525b;
}

/* Vanaf tablet is er ruimte om de kalender en de gekozen dagen naast elkaar
   te zetten, zodat je ziet wat je aantikt zonder te scrollen. */
@media (min-width: 768px) {
  .gform_wrapper .ww-datums__widget {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-areas: "knop knop" "kalender lijst" "teller teller";
    gap: 0 24px;
    align-items: start;
  }
  .ww-datums__widget .ww-datums__toggle {
    grid-area: knop;
    justify-self: start;
  }
  .ww-datums__widget .ww-datums__kalender {
    grid-area: kalender;
  }
  .ww-datums__widget .ww-datums__lijst {
    grid-area: lijst;
    align-content: flex-start;
  }
  .ww-datums__widget .ww-datums__teller {
    grid-area: teller;
  }
}
/* ---------------------------------------------------------------
   7. Gekoppelde plekken in de zijkolom

   Notulen 17-08-2026 paragraaf 7: een organisatie kan bij meerdere ruimtes
   horen (Tante Netty in The Kingdom én de Studio's) en in één ruimte zitten
   meerdere organisaties. De pagina van een organisatie toont zijn ruimtes, de
   pagina van een ruimte zijn organisaties. Zie single-buurtplek.php.
   --------------------------------------------------------------- */
.single-side__verwant {
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid #e4e4e7;
}

.single-side__verwant-lijst {
  margin-top: 8px;
}

/* De straat onder de naam, zodat je ziet dat het om twee panden gaat en niet
   twee keer om hetzelfde. */
.single-side__verwant-lijst small {
  display: block;
  margin-left: 1.6em;
  color: #52525b;
}

/* Het kruisje om een datum weg te halen: het thema zet min-width op alle
   knoppen terug op 0, waardoor dit raakvlak 42px breed werd in plaats van 44.
   Met de klasse van de chip erbij wint deze regel. */
.ww-datums__chip .ww-datums__weg {
  min-width: 44px;
}

/* Gravity Forms zet in zijn eigen reset (gravity-forms-theme-reset.css)
   min-width: unset op vrijwel elk element binnen het formulier, via een
   :where()-selector met dezelfde gewichtsklasse als deze regel. Die reset staat
   later in de bronvolgorde en won daardoor, waardoor het raakvlak 42px breed
   bleef in plaats van 44. Vandaar hier wel een !important: het gaat om het
   overschrijven van een framework-reset, niet om het winnen van eigen CSS. */
.ww-datums__chip .ww-datums__weg {
  min-width: 44px !important;
}

/* ---------------------------------------------------------------
   Golf 4, punt A2: de keuzekaarten weer in hun geheel aanklikbaar.

   Gemeten met elementFromPoint: van de negen punten per kaart kwam er nul op
   de link uit. Alleen "Meer lezen" was aanklikbaar, 8% van het kaartvlak.
   Er zat geen mechanisme voor; dit is hetzelfde patroon als bij de
   info-kaartjes (feedbackpunt 13), zodat er één manier is die werkt.

   De focusring komt om de kaart heen in plaats van om de twee woorden van de
   link. Hij is roze en niet geel, net als bij de info-kaartjes: deze kaarten
   staan op wit en geel op wit haalt de eis van 3:1 contrast niet. Geel blijft
   de focuskleur op zwarte en omrande knoppen, waar het contrast wel klopt.
   --------------------------------------------------------------- */
.choice-card--klikbaar {
  position: relative;
}

.choice-card--klikbaar .choice-card__link.stretched-link:focus-visible {
  outline: none;
}

.choice-card--klikbaar .choice-card__link.stretched-link:focus-visible::after {
  outline: 2px solid #ff3d3d;
  outline-offset: 3px;
}

/* Golf 4, extra bevinding tijdens A2: de kop "Projecten" brak middenin het
   woord af als "PROJECTE" / "N". Het woord is 210px breed en de kolom 189px,
   en op de kop stond word-break: break-word, dat een woord op de laatste
   passende letter afknipt zonder streepje.

   Nu breekt hij met een afbreekstreepje ("PROJEC-TEN"). De pagina staat op
   lang="nl-NL", dus de browser gebruikt de Nederlandse afbreekregels.
   overflow-wrap blijft als laatste redmiddel staan voor een woord dat zelfs
   met afbreken niet past, zodat het nooit buiten de kaart valt. */
.choice-card__heading {
  word-break: normal;
  overflow-wrap: break-word;
  -webkit-hyphens: auto;
  hyphens: auto;
}

/* ---------------------------------------------------------------
   Golf 4, punt A3: witruimte tussen de zwarte zigzag en de fotostrip.

   Gemeten op de homepage: de zigzag onder het agendablok liep 50px over de
   fotostrip van de tekstsectie heen, waardoor de bovenkant van elke foto werd
   afgehapt door de zwarte tanden.

   Hoe het zo kwam: .content-section zet zijn bovenruimte op 0 zodra het blok
   met een fotostrip begint ("Figma: geen extra wit erboven"). Dat was goed
   zolang er een gewoon blok bovenop stond. Sinds het agendablok in golf 2 naar
   boven is verplaatst, staat er een zigzag boven, en die zigzag hoort 50px over
   het volgende blok heen te vallen ($ww-crest-overlap). Die twee samen knippen
   de foto's af.

   Daarom: staat de fotostrip direct ná een zigzag, dan komt de gewone
   sectieruimte terug. Alleen in dat geval; een fotostrip zonder zigzag erboven
   blijft strak aansluiten zoals in het ontwerp. De tweede selector is er omdat
   er een leeg scheidingsblok tussen kan staan (dat blok staat op display: none,
   maar telt in CSS nog wel mee als tussenliggend element).
   --------------------------------------------------------------- */
.woensel-crest--agenda-bottom + .content-section:has(> .content-section__strip),
.woensel-crest--agenda-bottom + .woensel-separator + .content-section:has(> .content-section__strip) {
  /* 112px is $ww-section-padding-y uit _bootscore-custom.scss, de standaard
     sectieruimte. Hier staat het getal en niet de variabele: dit bestand wordt
     los gecompileerd (zie de kop) en kent die variabele niet. */
  padding-top: 112px;
}

/* -----------------------------------------------------------------
   G4C4: maandkoppen en samengevouwen reeksen in de agenda
   ----------------------------------------------------------------- */
/* De maandkop is een broertje van de agendarijen in dezelfde flex-kolom: een
   kort woord links en een gekleurde streep die de rest van de breedte vult. Dat
   leest als een tab boven de groep en scheidt de maanden zonder er een tweede
   kaartrand bij te zetten. */
.agenda__month {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin: 2.25rem 0 0;
  padding: 0 24px 0.75rem;
  font-weight: 800;
  font-size: 20px;
  line-height: 26px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #14100f;
}

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

.agenda__month-label {
  flex: 0 0 auto;
}

.agenda__month::after {
  content: "";
  flex: 1 1 auto;
  height: 6px;
  background: #ff3d3d;
}

/* Een maandkop zonder zichtbare activiteiten eronder gaat weg. Het bepalen
   daarvan doet assets/js/agenda-filter.js na elke filterronde. */
.agenda--overview .agenda__month.is-hidden {
  display: none;
}

.agenda.bg-color-black .agenda__month {
  color: #fff;
}

.agenda.bg-color-black .agenda__month::after {
  background: #ffbf3d;
}

@media (max-width: 575.98px) {
  .agenda .agenda__list .agenda__month {
    margin-top: 1.75rem;
    padding: 0 20px 0.6rem;
    font-size: 17px;
    line-height: 22px;
  }
}
/* Eén regel voor een hele reeks: hieronder staat wanneer het nog meer is.
   Donkerrood op licht, geel op zwart. De agendarij wisselt bij hover van zwart
   naar wit en omgekeerd, dus deze kleur wisselt mee. */
.agenda__reeks {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  margin: 0.35rem 0 0;
  font-size: 15px;
  line-height: 22px;
  letter-spacing: 0.025em;
  font-weight: 700;
  color: #8f1d1a;
}

.agenda__reeks i {
  flex: 0 0 auto;
  font-size: 13px;
}

.agenda.bg-color-black .agenda__reeks {
  color: #ffbf3d;
}

.agenda.bg-color-black .agenda__item:hover .agenda__reeks {
  color: #8f1d1a;
}

.agenda.bg-color-white .agenda__item:hover .agenda__reeks,
.agenda.bg-color-grey .agenda__item:hover .agenda__reeks,
.agenda.bg-color-yellow .agenda__item:hover .agenda__reeks {
  color: #ffbf3d;
}

/* Zijkolom op de activiteitpagina: de andere datums van de reeks. Hoekige
   knoppen met een zwarte rand, in de lijn van .info-card--klikbaar. De
   focusring is roze en niet geel: de knop staat op een wit vlak en geel haalt
   daar de 3:1 contrasteis niet. */
.single-side__reeks-title {
  margin: 0.35rem 0 0;
  font-weight: 800;
  font-size: 20px;
  line-height: 24px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
}

.single-side__reeks-text {
  margin: 0.5rem 0 0;
  font-size: 16px;
  line-height: 24px;
}

.single-side__reeks-list {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin: 1rem 0 0;
  padding: 0;
  list-style: none;
}

.single-side__reeks-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 10px 14px;
  border: 2px solid #14100f;
  background: #fff;
  color: #14100f;
  font-weight: 700;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.single-side__reeks-link:hover,
.single-side__reeks-link:focus-visible {
  background: #14100f;
  color: #fff;
}

.single-side__reeks-link:focus-visible {
  outline: 3px solid #ff3d3d;
  outline-offset: 2px;
}

/* =================================================================
   Golf 5, punt 3: de agenda per maand
   =================================================================

   De agenda is nu opgebouwd per maand: een maandbalk bovenaan, koppen met een
   aantal erachter en per maand één knop om de rest erbij te halen. De vorm
   volgt de bestaande filterpills, zodat het overzicht één geheel blijft.

   Kleuren komen uit de huisstijl die de rest van dit bestand ook gebruikt:
   #14100f zwart, #ff3d3d rood, #ffbf3d geel, #fff wit.
   ----------------------------------------------------------------- */
/* De maandbalk: "Ga naar: Augustus 2026 | September 2026 | ..." */
.agenda__monthnav {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem 0.75rem;
  margin: 0 0 1.75rem;
  padding: 0 24px;
}

.agenda__monthnav-label {
  margin: 0;
  font-weight: 800;
  font-size: 16px;
  line-height: 24px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  color: #14100f;
}

.agenda__monthnav-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.agenda__monthnav-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 8px 14px;
  border: 2px solid #14100f;
  background: #fff;
  color: #14100f;
  font-weight: 700;
  font-size: 16px;
  line-height: 20px;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.agenda__monthnav-btn:hover,
.agenda__monthnav-btn:focus-visible {
  background: #14100f;
  color: #fff;
}

.agenda__monthnav-btn:focus-visible {
  outline: 3px solid #ff3d3d;
  outline-offset: 2px;
}

/* Het aantal activiteiten in die maand, als klein blokje achter de naam.
   flex-shrink en nowrap zijn geen franje: zonder die twee knijpt een smalle
   knop het blokje samen en breekt "20" af tot een 2 met een 0 eronder. */
.agenda__monthnav-count {
  flex: 0 0 auto;
  white-space: nowrap;
  min-width: 1.6em;
  padding: 1px 6px;
  background: #ffbf3d;
  color: #14100f;
  font-weight: 800;
  font-size: 14px;
  line-height: 18px;
  text-align: center;
}

.agenda__monthnav-btn:hover .agenda__monthnav-count,
.agenda__monthnav-btn:focus-visible .agenda__monthnav-count {
  background: #fff;
}

/* De maand waar je nu in zit. Een dikke onderrand in plaats van een vulling:
   de knop mag oplichten zonder te lijken alsof hij aanstaat als filter. */
.agenda__monthnav-btn.is-huidig {
  border-color: #ff3d3d;
  box-shadow: inset 0 -6px 0 0 #ff3d3d;
}

/* Een maand zonder treffers na het filteren. Niet verbergen maar doven: dat
   het er niet is, is ook een antwoord. */
.agenda__monthnav-btn.is-leeg {
  opacity: 0.4;
  cursor: default;
}

.agenda__monthnav-btn.is-leeg:hover {
  background: #fff;
  color: #14100f;
}

/* De maandkop plakt bewust NIET bovenaan. De vaste sitekop staat op z-index
   1030 en is 92px hoog; een sticky maandkop schuift daar onzichtbaar onder en
   levert dus niets op. De maandbalk bovenaan met de oplichtende knop doet dat
   werk al. Wat wel moet: springen naar een maand mag de kop niet onder die
   sitekop parkeren. Vandaar scroll-margin-top. */
.agenda--overview .agenda__month {
  scroll-margin-top: 108px;
}

.agenda--overview .agenda__month:focus {
  outline: none;
}

.agenda--overview .agenda__month:focus-visible {
  outline: 3px solid #ff3d3d;
  outline-offset: 2px;
}

/* Het aantal achter de maandnaam. Staat vóór de rode streep, dus de streep
   vult wat er overblijft. */
.agenda__month-count {
  flex: 0 0 auto;
  order: 1;
  font-weight: 700;
  font-size: 15px;
  line-height: 20px;
  letter-spacing: 0;
  text-transform: none;
  opacity: 0.7;
}

.agenda__month::after {
  order: 2;
}

/* De knop per maand: "Toon oktober 2026 (23 activiteiten)". */
.agenda__month-more {
  margin: 1rem 0 0;
  padding: 0 24px;
}

.agenda__month-more.is-hidden {
  display: none;
}

.agenda__month-toggle {
  width: 100%;
  justify-content: center;
}

/* Melding als er na het filteren helemaal niets overblijft. */
.agenda__geenresultaat {
  margin: 2rem 0 0;
  padding: 0 24px;
  font-weight: 700;
  font-size: 18px;
  line-height: 26px;
  color: #14100f;
}

/* Wat er voorbij de horizon van twaalf maanden staat. */
.agenda__horizon {
  margin: 1.75rem 0 0;
  padding: 0 24px;
  font-size: 16px;
  line-height: 24px;
  opacity: 0.75;
}

/* De zwarte variant van het blok. */
.agenda.bg-color-black .agenda__monthnav-label,
.agenda.bg-color-black .agenda__geenresultaat,
.agenda.bg-color-black .agenda__horizon {
  color: #fff;
}

.agenda.bg-color-black .agenda__monthnav-btn {
  border-color: #fff;
  background: transparent;
  color: #fff;
}

.agenda.bg-color-black .agenda__monthnav-btn:hover,
.agenda.bg-color-black .agenda__monthnav-btn:focus-visible {
  background: #fff;
  color: #14100f;
}

.agenda.bg-color-black .agenda__monthnav-btn.is-huidig {
  border-color: #ffbf3d;
  box-shadow: inset 0 -6px 0 0 #ffbf3d;
}

.agenda.bg-color-black .agenda__monthnav-btn.is-leeg:hover {
  background: transparent;
  color: #fff;
}

@media (max-width: 767.98px) {
  .agenda__monthnav {
    margin-bottom: 1.25rem;
    padding: 0 20px;
  }
  /* Op een telefoon stapelden deze knoppen zich tot een balk van ruim 250px
     hoog: je moest langs vijf maandknoppen scrollen voordat je één activiteit
     zag. Net wat compacter en ze passen per twee op een regel, wat de balk
     halveert zonder dat je horizontaal hoeft te vegen. Ze blijven ruim boven de
     44px die een vingertop nodig heeft. */
  .agenda__monthnav-btn {
    /* Twee per regel, en de laatste rekt niet over de volle breedte uit:
       een losse knop die twee keer zo breed is als de rest leest als een
       andere soort knop. */
    flex: 1 1 45%;
    max-width: calc(50% - 0.2rem);
    justify-content: space-between;
    min-height: 44px;
    padding: 6px 10px;
    font-size: 13px;
  }
  /* De maandnaam mag afbreken als het echt niet past, maar met 13px past
     "September 2026" op één regel. */
  .agenda__monthnav-name {
    text-align: left;
  }
  .agenda__monthnav-row {
    gap: 0.4rem;
  }
  .agenda__month-more,
  .agenda__geenresultaat,
  .agenda__horizon {
    padding: 0 20px;
  }
  .agenda__month-count {
    font-size: 14px;
  }
}
/* Wie liever geen beweging ziet, springt hard naar de maand. */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
}
/* ==========================================================================
   Tablet (768px - 1199.98px)
   Op tablet valt de site tussen de mobiele en de desktop layout in: de
   desktop-indeling schakelt al op 768px in, terwijl daar nog niet genoeg
   breedte voor is. De blokken hieronder repareren wat daar misging.
   Bewust met specifieke selectors in plaats van !important, omdat dit
   bestand toch als laatste laadt.
   ========================================================================== */
/* Op body staat word-break: break-word. Daardoor knipte een kop midden in
   een woord zodra de kolom smal werd, ook als het woord op de volgende
   regel prima had gepast ("BUURTGARAG / E"). Voor koppen en labels zetten
   we dat terug naar normal. Overflow-wrap blijft als vangnet staan en
   breekt alleen nog een woord dat op geen enkele regel past. */
h1,
h2,
h3,
h4,
h5,
h6,
[class*=__title],
[class*=__heading],
[class*=__label] {
  word-break: normal;
  overflow-wrap: break-word;
}

/* --- Tablet portrait ---------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991.98px) {
  /* De statistieken stonden met vier kolommen van 168px naast elkaar,
     waardoor labels afbraken ("Buurtinitiatieve / n"). Twee kolommen geeft
     de tekst genoeg ruimte; op mobiel en desktop verandert er niets. */
  .numbers__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* Drie infokaarten naast elkaar liet 211px per kaart over. Twee kolommen
     geeft 266px tekstbreedte. */
  .info-cards__grid.info-cards__grid--cols-3 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* De display-kop van 30px is ook in twee kolommen nog te breed:
     "Ondernemersvereniging" meet 359px en het e-mailadres 334px. Op 20px
     past het langste woord binnen de smalste kaart. */
  .info-card__title {
    font-size: 20px;
  }
  /* De directory-kaart zet de thumbnail naast de tekst. In twee kolommen
     bleef er 171px tekstbreedte over, te weinig voor Nederlandse
     samenstellingen ("Bewonersvereniging" meet 279px), waardoor vrijwel
     elke kaarttitel midden in het woord brak. Een kolom geeft de kaart de
     ruimte die hij op mobiel ook heeft. Vanaf 992px passen twee kolommen
     weer. */
  .buurt-directory__grid {
    grid-template-columns: minmax(0, 1fr);
  }
  /* De agendaregel schakelt op 768px naar flex-wrap: nowrap. Datum, tijd,
     thumbnail en knoppen hielden dan zoveel breedte vast dat er 114px
     overbleef voor de titel ("BUURTFI / LMAVOND"). We laten de regel hier
     nog wrappen, net als onder 768px, zodat de titel een eigen regel over
     de volle breedte krijgt. */
  .agenda .agenda__list .agenda__item-link {
    flex-wrap: wrap;
  }
  .agenda .agenda__list .agenda__info {
    flex: 1 0 100%;
    margin-top: 4px;
  }
  /* De stapnummers zweefden op halve hoogte zodra een kop over meerdere
     regels liep. Boven uitlijnen houdt de rij netjes. */
  .steps--columns .steps__list > li {
    align-items: start;
  }
}
/* --- Tablet landscape --------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1199.98px) {
  /* Vier keuzekaarten naast elkaar liet 140px tekstbreedte over, waardoor
     zelfs een kort woord als "Projecten" (210px) afbrak. Twee kolommen
     sluit aan bij hoe de kaarten in portrait staan; vanaf 1200px is er
     weer ruimte voor vier. */
  .choice-cards__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* Het e-mailadres in de infokaart meet 455px op 30px en paste niet in de
     278px brede kaart. Op 26px breekt het netjes op het koppelteken. */
  .info-card__title {
    font-size: 26px;
  }
  /* "Leefbaarheidsbudget" meet 289px naast een 275px brede tekstkolom. */
  .buurt-card__title {
    font-size: 18px;
  }
}
/* =======================================================================
   Dev & Design Sync 26-08-2026 — feedback Dylan (#12 t/m #28)
   Dit bestand laadt ná woensel.css, dus het wint van _bootscore-custom.scss.
   ======================================================================= */
/* --- #12 Navigatie: zoekveld op mobiel --------------------------------- */
/* Een <input> breekt zijn placeholder nooit over twee regels, ongeacht CSS.
   De placeholder is daarom ingekort tot "Zoek..." (searchform.php) en de
   letter wordt op smalle telefoons kleiner, zodat zowel de placeholder als
   de ingetypte tekst binnen het frame blijft. */
.woensel-mobile-search__input {
  font-size: clamp(1.5rem, 7vw, 2.25rem);
}

@media (max-width: 400px) {
  .woensel-mobile-search__input {
    font-size: 1.375rem;
  }
}
/* --- #13 Footer: hover op het JKC-logo --------------------------------- */
/* Het logo is een wit gefilterde PNG; een opacity- plus lift-hover leest
   duidelijk op de zwarte footer zonder een tweede asset nodig te hebben.
   De link had helemaal geen hover- of focusstijl. */
.woensel-footer__credit-link {
  transition: opacity 0.2s ease, transform 0.2s ease;
}

.woensel-footer__credit-logo {
  transition: opacity 0.2s ease;
}

@media (hover: hover) {
  .woensel-footer__credit-link:hover .woensel-footer__credit-logo {
    opacity: 0.65;
  }
  .woensel-footer__credit-link:hover {
    transform: translateY(-1px);
  }
}
.woensel-footer__credit-link:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  .woensel-footer__credit-link,
  .woensel-footer__credit-logo {
    transition: none;
  }
  .woensel-footer__credit-link:hover {
    transform: none;
  }
}
/* --- #26/#28 Zigzag "tanden": altijd een heel aantal tegels ------------ */
/* De zigzag is een repeat-x tegel van vaste breedte (479.913px) op een
   100vw-element. Viewport / 479.913 is vrijwel nooit een heel getal, dus de
   laatste tand werd altijd halverwege afgekapt. Dat gebeurde op alle
   pagina's en alle breedtes, niet alleen waar er weinig events zijn.
   De tegel schaalt nu mee naar het dichtstbijzijnde hele aantal tanden.
   De eerste declaratie is de fallback voor browsers zonder round(). */
.woensel-separator {
  background-size: 479.913px 140px;
  background-size: calc(100vw / max(1, round(nearest, 100vw / 479.913px))) 140px;
  background-position: center;
}

@media (max-width: 991.98px) {
  .woensel-separator {
    background-size: 479.913px 60px;
    background-size: calc(100vw / max(1, round(nearest, 100vw / 479.913px))) 60px;
  }
}
/* Mask-varianten. Let op: de mask-POSITION van .woensel-crest blijft staan,
   want --into-pink/--into-black zetten daar bewust top/bottom. */
.woensel-crest,
.woensel-separator--black,
.woensel-hero-crest {
  -webkit-mask-size: 479.913px 100%;
  mask-size: 479.913px 100%;
  -webkit-mask-size: calc(100vw / max(1, round(nearest, 100vw / 479.913px))) 100%;
  mask-size: calc(100vw / max(1, round(nearest, 100vw / 479.913px))) 100%;
}

.woensel-separator--black,
.woensel-hero-crest {
  -webkit-mask-position: center bottom;
  mask-position: center bottom;
}

/* --- Gedeelde root cause: 1fr krimpt niet onder min-content -------------- */
/* `grid-template-columns: 1fr` is `minmax(auto, 1fr)`; de ondergrens is dus
   min-content. Een lange kop als "INFO@WOENSEL-WEST.COM" of een breed
   formulierveld duwde de kolom daardoor breder dan de viewport: op 390px
   werd de kolom 415px (info-cards), 530px (contactformulier) en 433px
   (evenement-hero). Met minmax(0, 1fr) mag de kolom wél krimpen. Dit is de
   oorzaak achter #15 (kaarten en formulier), #26 (hero) en #27 (kaarten). */
/* #15 Contact: kaarten en formulier ------------------------------------- */
.info-cards__grid {
  grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 768px) {
  .info-cards__grid--cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .info-cards__grid--cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .info-cards__grid--cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  .info-cards__grid.info-cards__grid--cols-3,
  .info-cards__grid.info-cards__grid--cols-4 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.contact-form__grid {
  grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 992px) {
  .contact-form__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
/* Vangnet: geen enkel formulierveld mag zijn kolom oprekken. */
.gform_wrapper .gform_fields,
.gform_wrapper .gfield,
.gform_wrapper .ginput_container {
  min-width: 0;
}

.gform_wrapper input:not([type=checkbox]):not([type=radio]),
.gform_wrapper textarea,
.gform_wrapper select {
  max-width: 100%;
}

/* #26 Evenement-hero: zelfde oorzaak ------------------------------------ */
.single-evenement__hero-grid {
  grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 992px) {
  .single-evenement__hero-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 400px);
  }
}
/* De datumbadge hangt met right:-12px buiten de foto. Op smalle schermen
   valt hij daarmee buiten beeld; daar hangt hij binnen de foto. */
@media (max-width: 575.98px) {
  .single-evenement__date-badge {
    right: 8px;
    top: -12px;
  }
}
/* iPad: de foto vulde de hele kolom als vierkant en werd daarmee groter dan
   de tekst ernaast. Vanaf tablet krijgt hij een plafond en staat hij naast
   de titel in plaats van eronder. */
@media (min-width: 768px) and (max-width: 991.98px) {
  .single-evenement__hero-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
    align-items: start;
    gap: 2rem;
  }
  .single-evenement__hero-img img {
    aspect-ratio: 4/3;
  }
}
/* --- #26 Labels en badges volgen de tekstbreedte ------------------------ */
/* De labels stáán op inline-flex, maar hun ouder is een flex-kolom met de
   standaard align-items: stretch. Een flex-item wordt dan geblokkeerd tot de
   volle breedte, ongeacht display. align-self lost dat op zonder de
   bestaande opmaak aan te raken. */
.single-side__label,
.single-buurtplek__hero-badge,
.single-buurtplek__map-badge,
.woensel-label {
  align-self: flex-start;
  width: auto;
  max-width: 100%;
}

/* --- #26 Programma: minder ruimte tussen tijd en tekst ------------------ */
@media (min-width: 620px) {
  .wz-timeline--program .wz-timeline__item {
    gap: 4px 12px;
  }
}
/* --- #27 Woordafbreking sitebreed -------------------------------------- */
/* <html lang="nl-NL"> stond al goed, maar hyphens: auto stond op precies één
   plek. Koppen en kaarttitels breken nu met een koppelteken volgens de
   Nederlandse afbreekregels; overflow-wrap is het vangnet voor woorden die
   ook met afbreking niet passen (URL's, e-mailadressen). */
h1, h2, h3, h4, h5, h6,
[class*=__title],
[class*=__heading],
[class*=__name],
.section-title,
.page-hero__title {
  -webkit-hyphens: auto;
  hyphens: auto;
  /* Alleen woorden vanaf tien letters afbreken, met minimaal vier letters aan
     weerszijden van het koppelteken. Zonder die drempel brak de browser ook
     korte woorden af zodra dat de regel iets voller maakte ("HONDERD JAAR
     WOEN-SEL WEST"), terwijl "WOENSEL" gewoon op de volgende regel past. De
     lange samenstellingen waar het Dylan om ging (BUURTFILMAVOND,
     EXPOSITIERUIMTE, BEWONERSVERENIGING) vallen er wel onder. */
  -webkit-hyphenate-limit-before: 4;
  -webkit-hyphenate-limit-after: 4;
  -webkit-hyphenate-limit-chars: 10 4 4;
  hyphenate-limit-chars: 10 4 4;
  overflow-wrap: anywhere;
}

/* Korte, in kapitalen gezette labels en badges nooit afbreken. */
[class*=__label],
[class*=__badge],
.woensel-label {
  -webkit-hyphens: manual;
  hyphens: manual;
  overflow-wrap: break-word;
}

/* --- #14 Home: "toevoegen aan agenda" alleen op eigen hover ------------- */
/* De generieke hover-regel schaalt elk icoon binnen een hoverbaar element,
   en .agenda__item staat in die lijst. Daardoor groeide het agenda-knopje
   mee zodra je ergens op de kaart hoverde. Het knopje reageert nu alleen
   nog op zijn eigen hover of focus. */
.agenda .agenda__item:hover .agenda__action.ww-addcal-trigger i,
.agenda .agenda__item:focus-within .agenda__action.ww-addcal-trigger i {
  transform: none !important;
}

.agenda .agenda__item .agenda__action.ww-addcal-trigger:hover i,
.agenda .agenda__item .agenda__action.ww-addcal-trigger:focus-visible i {
  transform: scale(1.2) !important;
}

/* --- #14 Home: verhalen-carousel, kleinere foto's op mobiel ------------- */
/* .verhaal-card stond op een vaste 432px met een foto van 300px hoog, zonder
   enige media query. Op een telefoon vulde één kaart daarmee het scherm. */
@media (max-width: 767.98px) {
  .verhaal-card {
    flex: 0 0 min(300px, 78vw);
  }
  .verhaal-card__img {
    height: 190px;
  }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  .verhaal-card {
    flex: 0 0 360px;
  }
  .verhaal-card__img {
    height: 250px;
  }
}
/* --- #16 Over de wijk: tijdlijn ---------------------------------------- */
/* De browser-scrollbar van de tijdlijn is nu onzichtbaar; het rode lijntje
   van het theme (.timeline__track::before) blijft staan. Slepen en met het
   toetsenbord scrollen werken gewoon door. */
.timeline__viewport {
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.timeline__viewport::-webkit-scrollbar {
  width: 0;
  height: 0;
  display: none;
}

/* Witruimte tussen de tekst en de kaartenrij een stuk kleiner, op alle
   schermen (was 2.5rem). */
.timeline__title {
  margin-bottom: 1.125rem;
}

.timeline__intro,
.timeline__text {
  margin-bottom: 1.125rem;
}

/* --- #25/#27 Filter-UI in de branding ---------------------------------- */
/* Afgeronde hoeken komen in de huisstijl nergens voor; de sheet, de
   filterknop, de teller en de sluitknop staan nu op harde hoeken met de
   vertrouwde zwarte rand van 2px. De sluitknop is vierkant. */
.ww-filterknop {
  border-radius: 0;
  box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.28);
}

.ww-filterknop__count {
  border-radius: 0;
  min-width: 24px;
  height: 24px;
  border: 1px solid #000;
}

.ww-filtersheet {
  border-radius: 0;
  border-top: 2px solid #000;
  box-shadow: 0 -8px 0 rgba(0, 0, 0, 0.12);
}

.ww-filtersheet__handvat {
  border-radius: 0;
  background: #000;
}

.ww-filtersheet__sluit {
  width: 44px;
  height: 44px;
  border: 2px solid #000;
  border-radius: 0;
  background: #fff;
  color: #000;
  font-weight: 800;
}

@media (hover: hover) {
  .ww-filtersheet__sluit:hover {
    background: #000;
    color: #fff;
  }
}
.ww-filtersheet__sluit:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 2px;
}

.ww-filtersheet__actie {
  border-radius: 0;
}

/* --- #25 Agenda: teller bij de maandkop --------------------------------- */
/* Het rode lijntje was een ::after die de resterende breedte vulde en dus
   per maand een andere lengte kreeg. Die is weg; de teller staat nu rechts
   uitgelijnd en dunner dan de maandkop. */
.agenda__month::after {
  display: none;
}

.agenda__month-count {
  margin-left: auto;
  order: 0;
  font-weight: 400;
  font-size: 14px;
  opacity: 0.7;
  text-align: right;
}

/* --- #25 Agenda: foto altijd links van de event-titel ------------------- */
/* De rij is een flexbox met datum, tijd, foto en titel. Onder 576px en op
   tablet-portrait kreeg de titel flex: 1 0 100% en viel hij op een eigen
   regel, terwijl de foto bij datum en tijd bleef staan. Door de tijd de rest
   van de eerste regel te laten vullen, wrappen foto en titel samen naar de
   tweede regel en staat de foto weer links van de titel. */
/* Met flex-wrap vallen de regels vóór het groeien, dus datum, tijd en foto
   bleven samen op regel 1 passen. Op deze twee breakpunten is de rij daarom
   een grid van twee kolommen met expliciete plaatsing: datum en tijd boven,
   foto en titel eronder. De rij heeft precies vier kinderen (datum, tijd,
   foto, titel), dus de indeling is volledig gedekt. */
@media (max-width: 575.98px) {
  .agenda .agenda__list .agenda__item-link {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-areas: "datum tijd" "foto titel";
    align-items: center;
    column-gap: 12px;
    row-gap: 6px;
    width: 100%;
  }
  .agenda .agenda__list .agenda__day {
    grid-area: datum;
  }
  .agenda .agenda__list .agenda__time {
    grid-area: tijd;
    justify-self: start;
  }
  .agenda .agenda__list .agenda__thumb {
    grid-area: foto;
    width: 56px;
  }
  .agenda .agenda__list .agenda__info {
    grid-area: titel;
    min-width: 0;
    margin-top: 0;
  }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  .agenda .agenda__list .agenda__item-link {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-areas: "datum tijd" "foto titel";
    align-items: center;
    column-gap: 1.25rem;
    row-gap: 8px;
    width: 100%;
  }
  .agenda .agenda__list .agenda__day {
    grid-area: datum;
  }
  .agenda .agenda__list .agenda__time {
    grid-area: tijd;
    justify-self: start;
  }
  .agenda .agenda__list .agenda__thumb {
    grid-area: foto;
    width: 88px;
  }
  .agenda .agenda__list .agenda__info {
    grid-area: titel;
    min-width: 0;
    margin-top: 0;
  }
}
/* --- #25 Hover-schaduw op kaarten: zwart, rood alleen op zwarte blokken --- */
/* 27-08 (Joep): rood alleen waar het blok zelf zwart is, elders blijft de
   hover-schaduw zwart. */
/* De harde offset-schaduw is het merkgebaar; de kleur was zwart en wordt
   het Woensel-rood. Tegelijk staat hij nu achter @media (hover: hover),
   zodat hij niet blijft hangen na een tik op een touchscreen. */
.buurt-card__link:hover,
.choice-card:hover,
.fancy-box:hover,
.verhaal-card:hover,
.highlight-story-card:hover,
.werkzaamheid-card:hover,
.info-card.is-form-trigger:hover,
.info-card.is-form-trigger:focus-visible {
  filter: none;
  box-shadow: none;
}

@media (hover: hover) {
  .buurt-card__link:hover {
    filter: drop-shadow(10px 10px 0 #000);
  }
  .choice-card:hover,
  .fancy-box:hover,
  .verhaal-card:hover,
  .highlight-story-card:hover,
  .werkzaamheid-card:hover,
  .info-card.is-form-trigger:hover {
    box-shadow: 10px 10px 0 #000;
  }
}
.info-card.is-form-trigger:focus-visible {
  box-shadow: 10px 10px 0 #000;
}

/* De CTA-box in "In de buurt" houdt bewust zijn witte schaduw. */
@media (hover: hover) {
  .buurt-directory__cta-box:hover {
    box-shadow: 10px 10px 0 #fff;
  }
}
/* Op zwarte blokken is een zwarte schaduw onzichtbaar: daar wordt hij rood. */
@media (hover: hover) {
  .bg-color-black .buurt-card__link:hover {
    filter: drop-shadow(10px 10px 0 #ff3d3d);
  }
  .bg-color-black .choice-card:hover,
  .bg-color-black .fancy-box:hover,
  .bg-color-black .verhaal-card:hover,
  .bg-color-black .highlight-story-card:hover,
  .bg-color-black .werkzaamheid-card:hover,
  .bg-color-black .info-card.is-form-trigger:hover {
    box-shadow: 10px 10px 0 #ff3d3d;
  }
}
.bg-color-black .info-card.is-form-trigger:focus-visible {
  box-shadow: 10px 10px 0 #ff3d3d;
}

/* Kaders die ZELF zwart zijn (ongeacht de sectie) krijgen rood, anders staat
   er een zwart blok achter een zwart blok. 27-08 (Joep). */
@media (hover: hover) {
  .fancy-box.steps__box:hover,
  .fancy-box.bg-color-black:hover,
  .info-card--black:hover,
  .info-card--black.is-form-trigger:hover,
  .contact-form__side-box:hover,
  .ww-search__card.bg-color-black:hover {
    box-shadow: 10px 10px 0 #ff3d3d;
  }
}
.info-card--black.is-form-trigger:focus-visible {
  box-shadow: 10px 10px 0 #ff3d3d;
}

/* --- #27 In de buurt: kaarten op smalle telefoons ----------------------- */
/* De thumbnail stond vast op 110px naast 2x16px padding en 16px gap. Onder
   400px bleef er te weinig over voor de tekstkolom. */
.buurt-card__inner {
  min-width: 0;
}

@media (max-width: 399.98px) {
  .buurt-card__inner {
    gap: 0.75rem;
    padding: 0.75rem;
  }
  .buurt-card__thumb {
    flex: 0 0 84px;
    width: 84px;
    height: 84px;
  }
}
/* --- #28 In de buurt (single): ruimte tussen label en naam --------------- */
.single-side__org .single-side__label {
  margin-bottom: 0.375rem;
}

/* --- #28 Hover-lijntjes niet laten blijven staan op touch ---------------- */
/* Op een tablet houdt de browser de hover-status vast na een tik, waardoor
   het rode streepje onder een menu-item en de onderstreping in de metabalk
   bleven staan. Beide zitten nu achter een hover-capable-check. */
@media (hover: none) {
  .woensel-nav:not(.woensel-nav--mobile) a:hover::after {
    transform: scaleX(0);
  }
  .buurt-meta__item strong a:hover,
  .single-buurtplek__adres-link:hover {
    text-decoration: none;
  }
}
/* --- #15 Formulieren: ruimte rond de checkboxes ------------------------- */
/* Het verplichte privacy-vinkje kreeg 28px extra bovenmarge, bovenop de
   row-gap van het formulier. Samen met de verborgen veldlabels gaf dat een
   duidelijk gat tussen de velden en de vinkjes. De groep vinkjes staat nu
   op een rustige, gelijkmatige afstand. */
.gform_wrapper .gfield--type-checkbox {
  margin-top: 0.5rem;
}

.gform_wrapper .gfield--type-checkbox + .gfield--type-checkbox:not(.gfield_contains_required) {
  margin-top: -8px;
}

.gform_wrapper .gfield--type-checkbox + .gfield--type-checkbox.gfield_contains_required {
  margin-top: 0.5rem;
}

.gform_wrapper .gfield_checkbox .gchoice,
.gform_wrapper .gfield_radio .gchoice {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
}

/* --- #15 Asterisk op het verplichte privacy-vinkje ---------------------- */
/* Het veldlabel van een checkbox-veld staat sitebreed op display:none, en de
   asterisk van Gravity Forms zit ín dat label. Bij een verplicht vinkje
   verdween het sterretje daarmee mee. In plaats van het hele label terug te
   zetten (dat zou een extra kop boven het vinkje geven) hangt het sterretje
   nu achter de tekst van de keuze zelf. Robuust: het werkt ongeacht de
   veldinstellingen in Gravity Forms, zolang het veld verplicht is.
   Toegankelijkheid loopt via aria-required op de input, die GF zelf zet. */
.gform_wrapper .gfield--type-checkbox.gfield_contains_required .gchoice label::after {
  content: "*";
  margin-left: 2px;
  color: #b3231f;
  font-weight: 800;
}

/* --- #15 Foutmeldingen in de Woensel-West huisstijl --------------------- */
/* Het rood van het merk (#ff3d3d) haalt op wit maar 3,5:1 en is daarmee te
   licht voor lopende tekst (WCAG AA vraagt 4,5:1). De randen, balken en
   veldomlijningen zijn daarom het merkrood, de tekst staat in een donkerder
   rood uit dezelfde familie. Verder: harde hoeken en een blokrand, zoals de
   rest van de site. */
/* Gravity Forms laadt zijn eigen thema-CSS ná die van het theme, met dezelfde
   specificiteit. Zonder !important wint het framework en blijft het blok in
   GF-grijsroze staan; de rest van de GF-styling in dit bestand doet het om
   dezelfde reden. */
.gform_wrapper .gform_validation_errors,
.gform_wrapper .gform_submission_error {
  border: 2px solid #ff3d3d !important;
  border-left-width: 8px !important;
  border-radius: 0 !important;
  background: #fff2f2 !important;
  box-shadow: none !important;
  color: #b3231f !important;
}

.gform_wrapper .gform_validation_errors h2,
.gform_wrapper .gform_validation_errors .gform_submission_error,
.gform_wrapper .gform_submission_error {
  color: #b3231f !important;
}

.gform_wrapper .gform_validation_errors a {
  color: #b3231f;
}

.gform_wrapper .gfield_validation_message,
.gform_wrapper .gfield_description.validation_message,
.gform_wrapper .validation_message {
  border-left: 4px solid #ff3d3d !important;
  border-radius: 0;
  background: #fff2f2 !important;
  color: #b3231f !important;
}

.gform_wrapper .gfield_error input:not([type=submit]),
.gform_wrapper .gfield_error textarea,
.gform_wrapper .gfield_error select {
  border-color: #ff3d3d !important;
  border-width: 2px !important;
}

.gform_wrapper .gfield_required,
.gform_wrapper .gfield_required_asterisk {
  color: #b3231f;
}

/* =======================================================================
   Dev & Design Sync 26-08-2026 — RONDE 2
   Restpunten van Joep (#14, #15, #25, #26, #28) en nieuwe comments van
   Dylan (#11, #19, #23, #30, #32, #108).
   ======================================================================= */
/* --- #14 (A1) Fotostrip: smooth pauzeren ------------------------------- */
/* De strip liep op een CSS-keyframe en pauzeerde met animation-play-state.
   Dat stopt hard. assets/js/photo-strip.js neemt de beweging over met GSAP
   en tweent de timeScale, net als de page-hero-carousel. Zodra dat script
   draait zet het de klasse photo-strip--js; vanaf dat moment mag de
   keyframe-animatie niet meer meelopen. Zonder JS blijft alles bij het
   oude, inclusief de harde pauze: dat is de fallback, geen regressie. */
.photo-strip--js .photo-strip__track {
  animation: none;
}

.photo-strip--js .photo-strip__viewport:hover .photo-strip__track {
  animation-play-state: running;
}

/* --- #14 (A2) + #108 Iconen schalen alleen op hun eigen control -------- */
/* De generieke regel (zie "Iconen op hover") laat elk niet-richtinggevend
   icoon binnen een hoverbaar element groeien. In die lijst staan ook twee
   CONTAINERS: [class*='card'] en .agenda__item. Bovendien is de agendarij
   zelf een <a> (.agenda__item-link), dus a:hover pakt ook het type-icoon in
   .agenda__meta. Daardoor groeide bij hover op de hele rij of kaart alles
   mee: het type-icoon in de agenda, en de datum- en leestijd-iconen op de
   verhaalkaarten.
   Ronde 1 ving alleen het losse "toevoegen aan agenda"-knopje af; dat was
   één symptoom van dezelfde regel. Hieronder de sitebrede oplossing.

   1. Informatieve iconen (metadata, labels, badges) zijn geen affordance en
      schalen nooit. In deze contexten staan geen pijlen, dus de :not()-lijst
      van de bronregel is hier niet nodig.
   2. Hoveren op een kaart of rij schaalt de iconen in de knoppen erbinnen
      niet meer; alleen de knop waar de muis daadwerkelijk op staat reageert.
      De pijl-rotatie blijft wél op containerhover staan (dat is bewust
      gedrag), dus die iconen worden hier uitgezonderd. */
/* 1. Metadata-, label- en badge-iconen: nooit schalen. */
[class*=__meta] i,
[class*=__type] i,
[class*=__date] i,
[class*=__time] i,
[class*=__location] i,
[class*=__price] i,
[class*=__badge] i,
[class*=__label] i,
[class*=__tag] i,
.agenda__meta i,
.verhaal-card__meta i,
.highlight-story-card__meta i {
  transform: none !important;
  transition: none;
}

/* 2. Containerhover schaalt de iconen in onderliggende knoppen niet. */
[class*=card]:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
[class*=card]:focus-within i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
.agenda__item:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
.agenda__item:focus-within i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
.agenda__item-link:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
.agenda__item-link:focus-within i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]) {
  transform: none !important;
}

/* De knop of link zelf mag wel groeien. */
@media (hover: hover) {
  [class*=__action]:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
  [class*=__action]:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
  .woensel-btn:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
  .woensel-btn:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
  .woensel-icon-btn:hover i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]),
  .woensel-icon-btn:focus-visible i:not([class*=fa-arrow]):not([class*=fa-chevron]):not([class*=fa-angle]):not([class*=fa-caret]) {
    transform: scale(1.2) !important;
  }
}
/* --- #19 + #108 Hover op kaarten smooth maken -------------------------- */
/* De kaarten hadden alleen `transition: filter .15s ease`. De rode
   offset-schaduw uit ronde 1 zit op box-shadow (en bij .buurt-card__link op
   een drop-shadow-filter), en die had geen transitie: de schaduw klapte er
   in één frame in en uit. De transitie hoort op de RUSTSTAND te staan, niet
   op :hover, anders is alleen het aangaan zacht en het weggaan hard.

   GEEN transform in deze lijst (27-08). Er is geen enkele hover-stand op
   deze kaarten die transform gebruikt, dus de regel deed niets nuttigs, maar
   hij vocht wel met GSAP:
   - verhalen-carousel.js verplaatst elke .verhaal-card los via xPercent. Met
     een transitie op transform loopt het gerenderde beeld 0,22s achter op de
     waarde die GSAP zet: tijdens het slepen knippert de rij, en op het moment
     dat een kaart naar rechts wordt teruggezet (een sprong van de volle
     trackbreedte) animeert de browser die sprong uit: de kaart schiet dwars
     door beeld en lijkt links te verdwijnen terwijl ze nog zichtbaar is.
   - woensel-reveal.js tweent .choice-card / .info-card in met y en scale;
     dezelfde transitie remt ook die reveal af. Dat script zette de transitie
     tijdens de schaduw-stempel al met de hand op none (regel 61), precies om
     dit conflict te ontwijken.
   Alleen box-shadow en filter horen hier; die raakt GSAP niet aan. */
.choice-card,
.fancy-box,
.verhaal-card,
.highlight-story-card,
.werkzaamheid-card,
.buurt-card__link,
.info-card,
.info-card.is-form-trigger,
.buurt-directory__cta-box {
  transition: box-shadow 0.22s ease, filter 0.22s ease;
}

@media (prefers-reduced-motion: reduce) {
  .choice-card,
  .fancy-box,
  .verhaal-card,
  .highlight-story-card,
  .werkzaamheid-card,
  .buurt-card__link,
  .info-card,
  .info-card.is-form-trigger,
  .buurt-directory__cta-box {
    transition: none;
  }
}
/* --- #11 Knoppen onder de sectietitel op mobiel en iPad ---------------- */
/* De sectiekop is een flexrij met de titel links en de knop rechts. Onder
   992px is daar geen ruimte voor: "Lees meer" brak af tot "LEES MEE R".
   De kop stapelt daar nu, met de knop onder de titel. */
@media (max-width: 991.98px) {
  .agenda__top,
  .verhalen__top,
  .single-werkzaamheid__related .agenda__top,
  [class$=__top]:has(> .woensel-btn),
  [class$=__head]:has(> .woensel-btn) {
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 1rem;
  }
  .agenda__top > .woensel-btn,
  .verhalen__top > .woensel-btn {
    align-self: flex-start;
  }
}
/* --- #15 (A3) Gelijkmatige veldafstanden in Gravity Forms -------------- */
/* Ronde 1 raakte alleen het privacy-vinkje. De rest van het formulier had
   nog losse marges bovenop de row-gap van het veldenraster: 28px boven het
   consent-veld, 28px boven de footer en negatieve marges tussen de vinkjes
   onderling. Daardoor zat er te veel lucht boven "Je bericht", boven de
   nieuwsbrief-checkbox en boven de verzendknop, en te weinig tussen de twee
   vinkjes.
   Eén row-gap regeert nu alle afstanden; losse marges op velden zijn nul.
   De stapformulieren (.ww-stapform) houden hun eigen raster, dus die zijn
   uitgezonderd. */
.gform_wrapper:not(.ww-stapform) .gform_fields {
  row-gap: 20px;
}

.gform_wrapper:not(.ww-stapform) .gform_fields > .gfield {
  margin-top: 0;
  margin-bottom: 0;
}

.gform_wrapper:not(.ww-stapform) .gfield--type-checkbox,
.gform_wrapper:not(.ww-stapform) .gfield--type-checkbox + .gfield--type-checkbox,
.gform_wrapper:not(.ww-stapform) .gfield--type-checkbox + .gfield--type-checkbox:not(.gfield_contains_required),
.gform_wrapper:not(.ww-stapform) .gfield--type-checkbox + .gfield--type-checkbox.gfield_contains_required,
.gform_wrapper:not(.ww-stapform) .gfield--type-consent,
.gform_wrapper:not(.ww-stapform) .gfield_consent,
.gform_wrapper:not(.ww-stapform) .ginput_container_consent {
  margin-top: 0;
  margin-bottom: 0;
}

/* De verzendknop hoort op dezelfde afstand te staan als de velden onderling. */
.gform_wrapper:not(.ww-stapform) .gform_footer {
  margin-top: 20px;
  padding-top: 0;
}

/* --- #25 (A4) Agenda: foto altijd direct links van de titel ------------ */
/* Ronde 1 zette de rij op twee breakpunten om naar een grid (< 576px en
   768-991.98px). Daartussen en daarboven bleef het een flexrij met
   flex-wrap, en dan gaat het mis zodra .agenda__info niet meer naast datum,
   tijd en foto past: die wrapt in zijn geheel naar regel 2 en laat de foto
   bij de tijd achter. Dat is precies wat op ~820px en op ~1000px te zien is.
   De twee losse breakpunten zijn daarom vervangen door één bereik tot 1280px,
   zodat foto en titel op elke breedte samen op de tweede regel staan.
   Boven 1280px past de rij wél in één regel en staat de foto sowieso direct
   links van de titel. */
@media (max-width: 1279.98px) {
  .agenda .agenda__list .agenda__item-link {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-areas: "datum tijd" "foto titel";
    align-items: center;
    column-gap: clamp(12px, 2vw, 1.25rem);
    row-gap: 8px;
    width: 100%;
  }
  .agenda .agenda__list .agenda__day {
    grid-area: datum;
  }
  .agenda .agenda__list .agenda__time {
    grid-area: tijd;
    justify-self: start;
  }
  .agenda .agenda__list .agenda__thumb {
    grid-area: foto;
    width: clamp(56px, 9vw, 88px);
  }
  .agenda .agenda__list .agenda__info {
    grid-area: titel;
    min-width: 0;
    margin-top: 0;
  }
  /* Rijen zonder foto (o.a. het agenda-blok op de homepage) laten de titel
     de volle breedte pakken; anders staat hij ingesprongen in kolom 2. */
  .agenda .agenda__list .agenda__item-link:not(:has(.agenda__thumb)) {
    grid-template-areas: "datum tijd" "titel titel";
  }
}
/* --- #26 (A5) Programma: smallere tijdkolom op desktop ----------------- */
/* De kolom stond op 96px terwijl "14:00" er maar ~40px van gebruikt. Samen
   met de gap gaf dat een gat van ruim 60px tussen tijd en titel. De kolom
   volgt nu de inhoud. */
@media (min-width: 620px) {
  .wz-timeline--program .wz-timeline__item {
    grid-template-columns: max-content minmax(0, 1fr);
    gap: 4px 16px;
  }
}
/* --- #23 Thank you / 404: regelafstand op mobiel ----------------------- */
/* De titel schaalt met clamp() mee naar beneden, maar de line-height stond
   vast op 60px. Op een telefoon van 390px wordt de letter 32px en blijft de
   regelafstand 60px: bijna dubbel. Op mobiel volgt de regelafstand nu de
   lettergrootte. */
@media (max-width: 767.98px) {
  .utility-hero__title {
    line-height: 1.06;
  }
  .utility-hero__content {
    gap: 1.25rem;
  }
}
/* --- #30 Bullets uit de kaartmeta ------------------------------------- */
/* .buurt-card__meta is een <ul> zonder enige styling en kreeg dus de
   standaard opsommingstekens en inspringing van de browser. Het is een
   opsomming van kenmerken met een eigen icoon; de bullet is dubbelop. */
.buurt-card__meta {
  list-style: none;
  margin: 0;
  padding: 0;
}

.buurt-card__meta li {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  list-style: none;
}

.buurt-card__meta li::marker {
  content: none;
}

/* --- #32 Werkzaamheden (single): foto op iPad ------------------------- */
/* Onder 992px valt de hero terug op één kolom en vult de foto de volle
   breedte als vierkant: op een iPad van 820px is dat een blok van 820x820.
   Zelfde aanpak als bij de evenement-hero in ronde 1: vanaf tablet staat de
   foto naast de tekst met een plafond, en wordt hij liggend in plaats van
   vierkant. */
@media (min-width: 768px) and (max-width: 991.98px) {
  .single-werkzaamheid__hero-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
    align-items: start;
    gap: 2rem;
  }
  .single-werkzaamheid__hero-img img {
    aspect-ratio: 4/3;
  }
}
/* Op de telefoon blijft de foto onder de tekst, maar niet als vierkant van
   de volle breedte. */
@media (max-width: 767.98px) {
  .single-werkzaamheid__hero-img img {
    aspect-ratio: 4/3;
  }
}
/* =======================================================================
   Dev & Design Sync 26-08-2026 — RONDE 3
   Restpunten van Joep op #30 (pagina "Leuk idee?", /ik-heb-een-leuk-idee/).
   Mobile-first, BEM, geen wijzigingen buiten deze drie punten.
   ======================================================================= */
/* --- #30/R3-1 Breadcrumb: één scheidingsteken -------------------------- */
/* In de markup staat al een echt scheidingsteken:
   <span class="page-hero__crumb-sep" aria-hidden="true">|</span>.
   Een oudere regel maakte van diezelfde span óók nog een staafje van 2px
   (width: 2px; background: currentColor; font-size: 0). Die font-size: 0
   verloor het van de basisregel .page-hero__crumbs span[aria-hidden="true"]
   (0,2,1 tegen 0,1,0), dus het | bleef zichtbaar én er kwam een staafje
   achter: twee scheidingstekens naast elkaar. Die staafjes-regel en de
   ronde-2-override erop zijn verwijderd; hieronder alleen nog de garantie
   dat de span zich als gewone tekst gedraagt, precies zoals op de andere
   pagina's (evenement-single, buurtplek-single, /in-de-buurt/). */
.page-hero .page-hero__crumbs .page-hero__crumb-sep,
.page-hero__crumbs .page-hero__crumb-sep {
  display: inline;
  width: auto;
  height: auto;
  background: none;
  border-radius: 0;
  font-size: 12px;
  line-height: inherit;
  vertical-align: baseline;
  opacity: 1;
}

/* --- #30/R3-2 Hero: even veel lucht boven als onder -------------------- */
/* Ronde 2 zette padding-bottom op 84px, gelijk aan de padding-top van
   .page-hero. Visueel bleef er toch 38px verschil, want een hero met een
   zigzag erachter krijgt van .page-hero:has(+ .woensel-hero-crest) ook
   margin-bottom: calc(-1 * (88px - 50px)) = -38px. Van die 84px onderruimte
   wordt dus 38px weer opgegeten en blijft er 46px over.
   Gemeten vóór (header-onderkant tot kruimel-bovenkant / intro-onderkant tot
   zigzag-bovenkant): 390px 84/46, 820px 84/46, 1280px 119/81. Steeds 38px
   verschil. De kleinste van de twee is het uitgangspunt, dus de bovenruimte
   gaat met 38px omlaag; de onderpadding compenseert de negatieve marge. */
.page-hero:has(.page-hero__head--split) {
  --ww-hero-lucht: 46px;
  padding-top: var(--ww-hero-lucht);
  padding-bottom: var(--ww-hero-lucht);
}

/* Staat er een zigzag achter de hero, dan telt de -38px marge mee. */
.page-hero:has(.page-hero__head--split):has(+ .woensel-hero-crest) {
  padding-bottom: calc(var(--ww-hero-lucht) + 38px);
}

/* --- #30/R3-3 Kaartmeta: icoon uitlijnen op de tekst erboven ----------- */
/* Font Awesome 7 geeft elk icoon width: 1.25em met text-align: center. Het
   gebouw-icoon is zelf 0.75em breed, dus het glyph kwam 0.25em (4px bij
   16px) naar rechts te staan ten opzichte van de titel en de tekst erboven,
   die wél op de linkerrand van de kaart beginnen. Het vakje om het icoon
   krimpt nu naar de breedte van het icoon zelf, waardoor de linkerrand
   klopt. De gap regelt de ruimte tot het label. */
.buurt-card__meta li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  list-style: none;
}

.buurt-card__meta li > i {
  flex: 0 0 auto;
  width: auto;
  text-align: left;
}

/* =========================================================================
   KLANTFEEDBACK 27-08-2026 (Imco + woco, via Joep)
   Vier punten: kartellijn in de herokleur, rode opener, rode header-CTA,
   geen kapitalen. Alles hier, want dit bestand laadt als laatste.
   ========================================================================= */
/* --- KF1 Kartellijn onder de hero loopt door in de herokleur ------------
   .woensel-hero-crest stond op background-color: #000. De hero-achtergrond
   liep er via ww-hero-crest-extend wel achter door, maar de tanden zelf
   waren zwart: visueel een losse zwarte zigzag-band tussen hero en de
   volgende sectie. De crest krijgt nu de kleur van de hero ervoor, zodat
   de herokleur zelf uitloopt in de kartels — zoals de rode crest al deed.

   De vorm blijft ongemoeid: mask, mask-size (round()-fix uit ronde 1),
   mask-position, hoogte, en de negatieve marge van -38px met de bijbehorende
   padding-bottom op de hero blijven exact staan. De hero-padding verandert
   dus niet, alleen de kleur van de tanden.

   Uitzondering: een witte of grijze hero houdt de zwarte zigzag, anders is
   de scheiding op een wit volgend blok onzichtbaar.

   Niet geraakt: .woensel-separator--black (staat drie keer in de templates,
   alle drie TUSSEN secties, niet na een hero) en .info-cards--wiggle +
   .woensel-hero-crest (sectiescheiding op /ik-heb-een-leuk-idee/). Die
   blijven zwart. */
.home-header.bg-color-yellow + .woensel-hero-crest,
.page-hero.bg-color-yellow + .woensel-hero-crest {
  background-color: #ffbf3d;
}

.home-header.bg-color-pink + .woensel-hero-crest,
.page-hero.bg-color-pink + .woensel-hero-crest,
.page-hero--pink + .woensel-hero-crest {
  background-color: #ff3d3d;
}

.home-header.bg-color-blue + .woensel-hero-crest,
.page-hero.bg-color-blue + .woensel-hero-crest {
  background-color: #68b0d4;
}

.home-header.bg-color-green + .woensel-hero-crest,
.page-hero.bg-color-green + .woensel-hero-crest {
  background-color: #96c676;
}

.home-header.bg-color-black + .woensel-hero-crest,
.page-hero.bg-color-black + .woensel-hero-crest {
  background-color: #000;
}

/* Wit en grijs: zwarte zigzag blijft, anders valt de scheiding weg. */
.home-header.bg-color-white + .woensel-hero-crest,
.page-hero.bg-color-white + .woensel-hero-crest,
.home-header.bg-color-grey + .woensel-hero-crest,
.page-hero.bg-color-grey + .woensel-hero-crest {
  background-color: #000;
}

/* --- KF2 Opener homepage: geel wordt merkrood --------------------------
   De achtergrondkeuze zelf is redactioneel (ACF-veld bg_color op het blok
   home-header). Die staat nu op "pink", en .bg-color-pink is het merkrood
   #ff3d3d. Hieronder alleen de kleuren die op rood niet meer klopten.

   Gemeten (WCAG-formule, uit de hexwaarden):
     zwart  op #ff3d3d   5,99:1   haalt AA
     wit    op #ff3d3d   3,51:1   haalt AA NIET
     #27272a op #ff3d3d  4,25:1   haalt AA NIET (de intro stond hierop)
     #8f1d1a op #ff3d3d  2,54:1   vlakscheiding te laag (de rode knop)
     wit    vlak op #ff3d3d 3,51:1 genoeg voor een vlak (eis 3:1)
     zwart  vlak op #ff3d3d 5,99:1 ruim genoeg voor een vlak
   Het beeld-in-tekst "WOENSEL WEST" is een foto in de logovorm met zwart
   als achtergrond tot de foto laadt; zwart op rood is 5,99:1, dus die
   houdt zijn vlakscheiding.

   Alternatief voor Dylan/de klant: huisstijlblauw #68b0d4 met zwarte tekst
   geeft 8,75:1 in plaats van 5,99:1 en is dus rustiger te lezen; groen
   #96c676 met zwart geeft 11,6:1. Beide vragen wel dezelfde ingrepen op
   eyebrow en knoppen als hieronder. */
.bg-color-pink .home-header__eyebrow {
  color: #000;
}

.bg-color-pink .home-header__intro,
.bg-color-pink .page-hero__intro {
  color: #000;
}

/* De rode knop uit golf 2 (#8f1d1a met witte tekst) is bedoeld voor lichte
   secties. Op een rood vlak verdwijnt hij. Op rood wordt hij zwart met
   witte tekst: vlak 5,99:1, tekst 21:1. */
.bg-color-pink .woensel-btn--pink {
  background: #000;
  color: #fff;
  border-color: #000;
}
.bg-color-pink .woensel-btn--pink i {
  color: #fff;
}
.bg-color-pink .woensel-btn--pink:hover, .bg-color-pink .woensel-btn--pink:focus-visible, .bg-color-pink .woensel-btn--pink:active {
  background: #fff;
  color: #000;
  border-color: #000;
}
.bg-color-pink .woensel-btn--pink:hover i, .bg-color-pink .woensel-btn--pink:focus-visible i, .bg-color-pink .woensel-btn--pink:active i {
  color: #000;
}

/* --- KF3 Header-CTA "Ik heb een leuk idee" wordt knalrood ---------------
   De knop stond op huisstijlgeel #ffbf3d met zwarte tekst, met een
   donkerder geel #e0a836 voor hover/active (golf 2). Er stond géén
   donkerrode WCAG-override op DEZE knop: het donkerrood #8f1d1a hoort bij
   .woensel-btn--pink, de gelijknamige knop in de homepage-hero. Die blijft
   staan voor lichte secties en wordt hierboven alleen op rood aangepast.

   Gemeten op de zwarte header (.woensel-header heeft background: #000):
     #ff3d3d vlak op zwart   5,99:1   ruim boven de 3:1 voor vlakken
     zwart op #ff3d3d        5,99:1   haalt AA, dus zwarte tekst
     wit   op #ff3d3d        3,51:1   haalt AA niet, dus geen witte tekst
     #e03636 vlak op zwart   4,75:1   hover, duidelijk donkerder (1,26:1
                                      verschil met de ruststand)
     zwart op #e03636        4,75:1   haalt AA
   De rand loopt mee met het vlak: een zwarte rand op een zwarte header
   maakt de knop optisch 2px kleiner zonder dat je de rand ziet. */
.woensel-btn.woensel-btn--idea,
.woensel-header .woensel-btn--idea {
  background: #ff3d3d;
  border-color: #ff3d3d;
  color: #000;
}
.woensel-btn.woensel-btn--idea i,
.woensel-header .woensel-btn--idea i {
  color: #000;
}

.woensel-btn.woensel-btn--idea:hover,
.woensel-header .woensel-btn--idea:hover {
  background: #e03636;
  border-color: #e03636;
  color: #000;
}
.woensel-btn.woensel-btn--idea:hover i,
.woensel-header .woensel-btn--idea:hover i {
  color: #000;
}

/* Deze staat moet de !important-regels uit FB12 overschrijven, die de knop
   bij indrukken op #e0a836 (geel) zetten. */
.woensel-btn.woensel-btn--idea:active,
.woensel-btn.woensel-btn--idea:focus,
.woensel-btn.woensel-btn--idea:focus-visible,
.woensel-header .woensel-btn--idea:active,
.woensel-header .woensel-btn--idea:focus-visible {
  background-color: #e03636 !important;
  border-color: #e03636 !important;
  color: #000 !important;
}

/* --- KF4 Geen kapitalen ------------------------------------------------
   Alle hoofdletters op de site komen uit CSS: op de dev-database staat geen
   enkele post-titel, ACF-waarde of alinea letterlijk in kapitalen (gemeten
   over wp_posts, wp_postmeta en de ACF-optiesvelden). Er hoeft dus niets
   aan de content te veranderen.

   Koppen blijven vet, maar in kleine letters. Uppercase blijft staan op:
   logo (.woensel-wordmark), navigatie, taalwissel, kruimelpad, knoppen,
   formulierlabels, labels/badges/tags, datum- en tijdvelden en filters.
   Motivatie: dat zijn korte, herkenbare tekens en bedieningselementen
   waar de kapitalen de vorm dragen, geen leestekst. */
h1, h2, h3, h4, h5, h6,
[class*=__title],
[class*=__heading],
[class*=__name],
.section-title,
.faq__q,
.bedankt-stappen__kop,
.ww-filtersheet__titel,
.buurt-directory__results-count,
.buurt-directory__map-caption,
.woensel-mobile-search__input,
.woensel-offcanvas__input {
  text-transform: none;
}

/* Koppen en tekst die hoger wegen dan de regel hierboven. */
.single-verhaal__content h2,
.single-verhaal__content h3,
.single-verhaal__content h4,
.single-verhaal__content h5,
.single-main > h2,
.single-buurtgroep__main h2,
.single-fonds__main h2,
.single-meldpunt__main h2,
.contact-form--idea .contact-form__intro-title,
.contact-form--idea .contact-form__direct-title,
.gform_wrapper.ww-stapform .ww-fstap__titel,
.gform_wrapper .gform_drop_instructions,
.contact-form__map-fallback strong,
.org-aanbod__item strong,
.wz-timeline__body strong {
  text-transform: none;
}

/* De tracking van 0,025em zat op de koppen om kapitalen luchtiger te zetten.
   In kleine letters maakt diezelfde tracking de kop juist rommelig en breed;
   op de displaymaten (56px, 48px) gaat hij naar normaal. De regelhoogtes uit
   golf 2 (1,0714 op de herotitels, 1,125 op de sectiekoppen) blijven staan:
   met een stijghoogte plus staartlengte van circa 0,96em past kleine letters
   daar zonder botsende staarten in, en zo blijft de hero-hoogte gelijk aan
   de metingen van ronde 3. */
.home-header__title,
.page-hero__title,
.ww-search__title,
.utility-hero__title,
.content-section__title,
.choice-cards__title,
.section-title,
.steps__title,
.single-verhaal__title {
  letter-spacing: normal;
}

/* --- Klantfeedback 27-08 (Joep): iets minder lucht tussen hero-content en
   de kartelrand. Home-header was 5rem/7rem + kartelhoogte, split-hero 46px.
   Alleen de onderkant; padding-top blijft. 88px - 50px = kartel min overlap. */
.home-header:has(+ .woensel-hero-crest),
.page-hero--pink:has(+ .woensel-hero-crest),
.page-hero.bg-color-pink:has(+ .woensel-hero-crest):not(.page-hero--pink) {
  padding-bottom: calc(2.75rem + 38px);
}
@media (min-width: 992px) {
  .home-header:has(+ .woensel-hero-crest),
  .page-hero--pink:has(+ .woensel-hero-crest),
  .page-hero.bg-color-pink:has(+ .woensel-hero-crest):not(.page-hero--pink) {
    padding-bottom: calc(4.25rem + 38px);
  }
}

.page-hero:has(.page-hero__head--split) {
  padding-bottom: 28px;
}

.page-hero:has(.page-hero__head--split):has(+ .woensel-hero-crest) {
  padding-bottom: 66px;
}

/* ===============================================================
   COMPLIANZ — cookiebanner en voorkeurenpaneel in huisstijl
   Sessie 27-08-2026
   ===============================================================

   Complianz 7.5.3.1 levert de banner met een eigen stylesheet die
   pas tijdens het laden door JavaScript wordt ingevoegd. Die komt
   dus NA woensel-filters.css in de cascade. Daarom hangt alles
   hieronder aan de container-id (#cmplz-cookiebanner-container,
   #cmplz-manage-consent) in plaats van aan losse klassen: dat weegt
   zwaarder zonder dat er ergens !important aan te pas komt.

   De kleuren, de vierkante hoeken en de zwarte rand staan ook in de
   banner-instellingen zelf. Die zijn leidend; dit blok doet wat de
   instellingen niet kunnen: de knopvorm van .woensel-btn, de twee
   merkletters, de focusringen, de vierkante schakelaars, de harde
   zwarte slagschaduw en de kartelrand.

   Contrast (berekend): tekst #18181b op wit 17,7:1, knoptekst zwart
   op geel #ffbf3d 12,8:1 en zwart op wit 21:1, omgekeerde hover wit
   op zwart 21:1. Focusring zwart op wit 21:1. Schakelaar aan
   #ff3d3d op wit 3,5:1 en uit #71717a op wit 4,8:1 (beide grafisch,
   drempel 3:1). Allemaal ruim boven AA. */
/* --- Container ------------------------------------------------ */
#cmplz-cookiebanner-container .cmplz-cookiebanner {
  font-family: "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  border-radius: 0;
  border: 2px solid #000;
  background: #fff;
  color: #18181b;
  /* De site zet geen zachte schaduw maar een harde zwarte blokschaduw.
     use_box_shadow staat daarom in de instellingen uit. */
  box-shadow: 8px 8px 0 #000;
  /* Complianz zet deze variabelen zelf op de banner. De twee hieronder
     komen niet uit het instellingenscherm en worden hier gecorrigeerd:
     "Altijd actief" stond op de letterlijke waarde `green`. */
  --cmplz_category_header_always_active_color: #18181b;
  --cmplz_banner_border_radius: 0 0 0 0;
  --cmplz_button_border_radius: 0 0 0 0;
}

/* Kartelrand als merkteken op de bovenkant van de banner. Puur
   decoratief, dus buiten de toegankelijkheidsboom en niet klikbaar. */
#cmplz-cookiebanner-container .cmplz-cookiebanner::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 10px;
  background: #ff3d3d;
  -webkit-mask-image: url("../img/woensel-zigzag-pink.svg");
  mask-image: url("../img/woensel-zigzag-pink.svg");
  -webkit-mask-repeat: repeat-x;
  mask-repeat: repeat-x;
  -webkit-mask-size: auto 100%;
  mask-size: auto 100%;
  -webkit-mask-position: center bottom;
  mask-position: center bottom;
  pointer-events: none;
}

/* Op smalle schermen staat de banner vrijwel randloos tegen de
   viewport; een blokschaduw van 8px valt daar buiten beeld. */
@media (max-width: 767.98px) {
  #cmplz-cookiebanner-container .cmplz-cookiebanner {
    box-shadow: 0 -4px 0 #000;
  }
}
/* --- Koppen en tekst ------------------------------------------ */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-title {
  font-family: "Archivo Black", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-weight: 400;
  font-size: 20px;
  line-height: 24px;
  letter-spacing: normal;
  text-transform: none;
  color: #000;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-message,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-description {
  font-size: 14px;
  line-height: 22px;
  color: #18181b;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-divider {
  border-color: #000;
  opacity: 1;
}

/* --- Links ---------------------------------------------------- */
/* Onderstreept, niet alleen een kleurverschil: kleur mag nooit de
   enige drager van betekenis zijn. Merkrood haalt op wit 3,5:1 en
   is dus geen tekstkleur; de link blijft zwart en wordt op hover
   en focus dikker onderstreept. */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-links a,
#cmplz-cookiebanner-container .cmplz-cookiebanner a.cmplz-link {
  color: #000;
  font-size: 13px;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-links a:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner a.cmplz-link:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-links a:focus-visible,
#cmplz-cookiebanner-container .cmplz-cookiebanner a.cmplz-link:focus-visible {
  color: #000;
  text-decoration-thickness: 3px;
}

/* --- Knoppen: gelijk aan .woensel-btn ------------------------- */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn,
#cmplz-manage-consent .cmplz-btn,
#cmplz-manage-consent-container .cmplz-btn {
  /* Geen display hier: Complianz toont en verbergt de knoppen zelf via
     display (Voorkeuren opslaan, tcf-link). Met een id-selector wonnen wij
     daarvan en stonden alle vijf knoppen tegelijk in beeld (03-09). */
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 16px;
  border: 1px solid #000;
  border-radius: 0;
  font-family: "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  font-weight: 800;
  font-size: 14px;
  line-height: 24px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease, filter 0.15s ease, box-shadow 0.15s ease;
}

/* Accepteren = de gele hoofdknop van de site (.woensel-btn--primary). */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-accept {
  background: #ffbf3d;
  color: #000;
  border-color: #000;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-accept:hover {
  filter: brightness(0.94);
}

/* De overige knoppen zijn de outline-variant op een lichte
   achtergrond: zwart op wit, en op hover omgekeerd. */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-deny,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-view-preferences,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-save-preferences,
#cmplz-cookiebanner-container .cmplz-cookiebanner a.cmplz-btn.cmplz-manage-options {
  background: #fff;
  color: #000;
  border-color: #000;
  text-decoration: none;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-deny:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-view-preferences:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-save-preferences:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner a.cmplz-btn.cmplz-manage-options:hover {
  background: #000;
  color: #fff;
  border-color: #000;
}

/* Focus op de knoppen: zwarte ring, 21:1 tegen zowel het witte vlak
   als het gele. Merkrood zou op geel maar 2,1:1 halen en valt af. */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn:focus-visible,
#cmplz-manage-consent .cmplz-btn:focus-visible,
#cmplz-manage-consent-container .cmplz-btn:focus-visible {
  outline: 3px solid #000;
  outline-offset: 3px;
}

/* --- Sluitknop en categorie-uitklap --------------------------- */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-category-toggle {
  border-radius: 0;
  color: #000;
}

/* Complianz zet op hover `line-height: initial` en font-size 18px, waardoor
   het kruisje een paar pixels naar beneden springt. Maten vastzetten en
   alleen de kleur laten reageren (feedback Joep 03-09). */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close:hover {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  font-size: 20px;
  transition: color 0.15s ease;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close:hover {
  color: #ff3d3d;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close:focus-visible,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-category-toggle:focus-visible {
  outline: 3px solid #ff3d3d;
  outline-offset: 2px;
}

/* --- Categorieen ---------------------------------------------- */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-category {
  border-radius: 0;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-category-title {
  font-weight: 800;
  font-size: 14px;
  text-transform: none;
  color: #000;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-always-active {
  font-weight: 700;
  font-size: 12px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
  color: #18181b;
}

/* --- Schakelaars ---------------------------------------------- */
/* Complianz tekent de schakelaar met twee pseudo-elementen op het
   label: ::before is het spoor (28x15) en ::after het bolletje
   (11x11). Het label zelf is leeg, dus daar hoort geen rand op.
   De site kent geen ronde vormen, dus beide worden vierkant met
   een zwarte omlijning om het spoor. Aan is merkrood, gelijk aan
   het aangevinkte vakje in de formulieren; uit is grijs. De stand
   is ook zonder kleur af te lezen aan de positie van het bolletje,
   dus kleur is niet de enige drager. */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label::before,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label::after,
#cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label,
#cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label::before,
#cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label::after {
  border-radius: 0;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label::before,
#cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label::before {
  border: 1px solid #000;
}

/* Complianz zet op :focus een blauwe box-shadow van 2px. Die kleur
   staat los van het instellingenscherm en hoort niet bij de site.
   Hij gaat uit; de zichtbare ring komt terug op :focus-visible, in
   merkrood, dat op wit 3,5:1 haalt en daarmee boven de drempel van
   3:1 voor niet-tekstuele elementen ligt. */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-consent-checkbox:focus + .cmplz-label::before,
#cmplz-manage-consent-container .cmplz-consent-checkbox:focus + .cmplz-label::before {
  box-shadow: none;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-consent-checkbox:focus-visible + .cmplz-label::before,
#cmplz-manage-consent-container .cmplz-consent-checkbox:focus-visible + .cmplz-label::before {
  box-shadow: 0 0 0 3px #ff3d3d;
}

/* --- Zwevende knop "Beheer toestemming" ----------------------- */
/* Zwart vlak met witte letters, zoals .woensel-btn--black. */
#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent {
  background: #000;
  color: #fff;
  border-color: #000;
  border-radius: 0;
  box-shadow: none;
}

/* Hover als de outline-knoppen: omgekeerd, niet geel (feedback Joep 03-09). */
#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent:hover {
  background: #fff;
  color: #000;
  border-color: #000;
}

#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent:focus-visible {
  outline: 3px solid #000;
  outline-offset: 3px;
  box-shadow: none;
}

/* --- Voorkeurenpaneel op de cookiebeleid-pagina --------------- */
#cmplz-manage-consent-container .cmplz-category {
  border-radius: 0;
}

/* --- Beweging ------------------------------------------------- */
/* De banner-animatie staat in de instellingen op "geen". Wat er hier
   nog aan overgangen ligt (kleur op hover, de schaduw) gaat uit
   zodra de bezoeker minder beweging vraagt. */
@media (prefers-reduced-motion: reduce) {
  #cmplz-cookiebanner-container .cmplz-cookiebanner,
  #cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn,
  #cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label::before,
  #cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-banner-checkbox .cmplz-label::after,
  #cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label::before,
  #cmplz-manage-consent .cmplz-btn.cmplz-manage-consent,
  #cmplz-manage-consent-container .cmplz-banner-checkbox .cmplz-label::after {
    transition: none !important;
    animation: none !important;
  }
}
/* ============================================================
   VERHALEN UNDER CONSTRUCTION 27-08
   ============================================================
   Bij de livegang staan er vijf verhalen op de site, allemaal zonder foto.
   De drempel WW_VERHALEN_MIN (functions.php) houdt de carousels leeg en zet
   op /verhalen/ een "we zijn hier nog mee bezig"-sectie neer. Dit blok regelt
   twee dingen: het markeerelement dat de verborgen carousel achterlaat, en de
   opmaak van die sectie.

   Dit bestand staat los van _bootscore-custom.scss en kent de $ww-variabelen
   niet; daarom hexwaarden en px-maten die één op één met het palet meelopen
   (#000000, #ffffff, #ff3d3d, kaartpadding 32px, schaduw 10px). ------------ */
/* --- Sectieritme waar de carousel wegvalt ----------------------------- */
/* Het verhalen-blok rendert niets, dus alle +-selectors tussen zigzags,
   kartels en blokken sluiten vanzelf weer op elkaar aan. Eén geval blijft
   over: op Over de wijk stond de volgorde agenda → kartel → zigzag →
   verhalen → kartel naar de nieuwsbrief. Zonder verhalen botst die zigzag
   direct op het volgende kartel: twee sierbanden op elkaar, met niets
   ertussen om in te leiden. Die zigzag gaat weg.

   De regel hangt aan de body-class ww-verhalen-uit (inc/verhalen-drempel.php)
   en verdwijnt dus zodra de drempel gehaald is en het blok weer rendert.
   Op Welkom in de buurt volgt de zwarte tijdlijn direct op de zigzag; daar
   pakt de bestaande regel .woensel-separator:has(+ .block.bg-color-black)
   het over en hoeft hier niets te gebeuren. */
.ww-verhalen-uit .woensel-separator:has(+ .woensel-crest--into-pink) {
  display: none;
}

/* Met die zigzag weg staan er twee kartels op elkaar: het zwarte kartel
   onder de agenda (tanden omlaag, margin-bottom -50px) en het roze kartel
   boven de nieuwsbrief (tanden omhoog, margin-bottom -50px). Zonder lucht
   ertussen schuiven de zwarte en de roze tanden over elkaar heen. Een witte
   strook eronder herstelt het ritme: agenda → zwart kartel → wit → roze
   kartel → nieuwsbrief. 38px is de zichtbare tandhoogte (88 - 50). */
.ww-verhalen-uit .woensel-crest--agenda-bottom + .woensel-separator + .woensel-crest--into-pink {
  margin-top: calc(38px + 1.5rem);
}
@media (min-width: 992px) {
  .ww-verhalen-uit .woensel-crest--agenda-bottom + .woensel-separator + .woensel-crest--into-pink {
    margin-top: calc(38px + 3rem);
  }
}

/* --- Sectie: verhalen komen eraan ------------------------------------- */
.verhalen-uc {
  padding-top: 112px;
  padding-bottom: 112px;
  /* De stappen-box "Heb jij ook een verhaal?" staat er direct onder en is
     zwart. Deze box blijft daarom wit: twee zwarte vlakken op elkaar maakt
     de pagina zwaar. */
  /* Rood chip-label, dezelfde vorm als .steps__label. */
  /* Kop in kleine letters, zoals de rest van de site sinds 27-08. De clamp
     volgt .section-title zodat de kop op mobiel niet over de rand valt. */
  /* Mobile-first: onder 576px staan de knoppen onder elkaar over de volle
     breedte, zodat de tekst niet afbreekt. */
}
.verhalen-uc__box {
  align-items: flex-start;
  justify-content: flex-start;
  gap: 0;
  max-width: 720px;
  min-height: 0;
  padding: 32px;
}
.verhalen-uc__label {
  display: inline-flex;
  align-items: center;
  align-self: flex-start;
  margin-bottom: 1.25rem;
  padding: 4px 8px;
  background: #ff3d3d;
  border: 1px solid #000000;
  color: #000000;
  font-weight: 800;
  font-size: 12px;
  line-height: 18px;
  letter-spacing: 0.025em;
  text-transform: uppercase;
}
.verhalen-uc__title {
  margin: 0 0 1rem;
  font-weight: 800;
  font-size: clamp(1.75rem, 1.25rem + 2.2vw, 3rem);
  line-height: 1.125;
  letter-spacing: normal;
  text-transform: none;
}
.verhalen-uc__text {
  margin: 0;
  max-width: 52ch;
  font-size: 1rem;
  line-height: 1.5;
}
.verhalen-uc__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: 2rem;
}
.verhalen-uc__btn {
  width: 100%;
}
@media (min-width: 576px) {
  .verhalen-uc__btn {
    width: auto;
  }
}
@media (min-width: 992px) {
  .verhalen-uc__box {
    padding: 48px;
  }
}

/* --- Editor-melding bij het uitgezette carousel-blok ------------------ */
/* Alleen zichtbaar in het bewerkscherm (ACF-preview), niet op de website.
   Zonder deze melding lijkt het blok in de editor stuk. */
.verhalen-drempel-notice {
  padding: 1rem 1.25rem;
  background: #f4f4f5;
  border: 1px dashed #000000;
  color: #18181b;
  font-size: 14px;
  line-height: 1.5;
}

/* =========================================================================
   HERO'S 28-08-2026 (Joep)
   Twee punten: (1) de contact-hero gelijktrekken met de rest, (2) de
   herokleuren rouleren over de hoofdnavigatie. Alles hier, want dit bestand
   laadt als laatste. Losstaand van _bootscore-custom.scss, dus hexwaarden
   in plaats van de $ww-variabelen.
   ========================================================================= */
/* --- H1 Contact-hero: dezelfde onderruimte als de andere hero's ---------
   Root cause, drie lagen over elkaar:

   a) Op pagina 25 stond in het ACF-blok `show_wiggle: 0`. Dat is de enige
      page-hero op de site zonder kartelrand. Zonder kartel greep de
      terugvalregel uit feedbackpunt 11b
      (.page-hero:not(:has(+ .woensel-hero-crest))) en zette de hero op
      80px onderpadding (64px onder 992px).
   b) De hero heeft geen hero_image en geen carousel, dus `has_aside` is
      false en er komt geen .page-hero__head--split in de markup. Het hele
      28px-ritme uit ronde 3 en de klantfeedback van 27-08 hangt aan
      :has(.page-hero__head--split) en greep hier dus niet.
   c) Het kaartenblok eronder is óók geel en heeft `show_wiggle: 1`. Zonder
      kartel tussen hero en kaarten telde de sectiepadding van het
      kaartenblok (80px mobiel, 112px desktop) er bovenop, en de enige
      zigzag in beeld was de zwarte onder de kaarten.

   Gemeten vóór (tekst-onderkant → eerste kaartje): 390px 144, 820px 144,
   1280px 192. Header-onderkant → kruimel: 84px op alle drie.

   Punt (a) is een contentwijziging (show_wiggle op 1, apart gedocumenteerd);
   daarmee komt de kartelrand terug en pakt de bestaande regel
   `.woensel-hero-crest + .info-cards { padding-top: 88px; padding-bottom:
   28px; }` het ritme onder de kartel over. Punt (b) staat hieronder: een
   hero zonder split-kop krijgt dezelfde 28px lucht als een split-hero.

   Uitgezonderd: roze hero's en de home-header (eigen maat, 2,75rem/4,25rem
   uit 27-08) en hero's waar de redactie zelf een row-padding-bottom-* heeft
   gekozen. 88px - 50px = 38px, de zichtbare tandhoogte. */
.page-hero:not(:has(.page-hero__head--split)):not(.page-hero--pink):not(.bg-color-pink):not([class*=row-padding-bottom]):has(+ .woensel-hero-crest) {
  padding-bottom: 66px;
}

/* --- H2 Kartel onder een kaartenblok volgt de kleur van dat blok --------
   Op 27-08 kreeg .woensel-hero-crest de kleur van de hero ervoor, maar
   .info-cards--wiggle + .woensel-hero-crest bleef bewust zwart: op
   /ik-heb-een-leuk-idee/ is dat een sectiescheiding onder een wit
   kaartenblok. Op /contact/ pakt hetzelfde kartel anders uit: hero en
   kaarten zijn daar allebei geel en lezen als één blok, dus de zwarte
   zigzag eronder oogt als een losse zwarte band terwijl de home hem in de
   herokleur heeft.

   Dezelfde regel als bij de hero's dus, met dezelfde uitzondering: een wit
   of grijs kaartenblok houdt de zwarte zigzag, anders valt de scheiding
   op een licht volgend blok weg. /ik-heb-een-leuk-idee/ (wit) verandert
   daardoor niet. */
.info-cards--wiggle.bg-color-yellow + .woensel-hero-crest {
  background-color: #ffbf3d;
}

.info-cards--wiggle.bg-color-pink + .woensel-hero-crest {
  background-color: #ff3d3d;
}

.info-cards--wiggle.bg-color-blue + .woensel-hero-crest {
  background-color: #68b0d4;
}

.info-cards--wiggle.bg-color-green + .woensel-hero-crest {
  background-color: #96c676;
}

.info-cards--wiggle.bg-color-black + .woensel-hero-crest {
  background-color: #000;
}

/* --- H3 Zwarte hero: tekstkleuren -------------------------------------
   Nieuw sinds de kleurroulatie: /verhalen/ krijgt een zwarte hero. De
   basisregels van .page-hero gaan uit van een lichte achtergrond en zetten
   harde donkere kleuren, die op zwart wegvallen. .bg-color-black zet zelf
   al color: #fff, dus de titel klopt; deze drie niet.

   Gemeten (WCAG-formule, uit de hexwaarden):
     .page-hero__intro          color: #000            op zwart  1,00:1  valt weg
     .page-hero__intro--below   color: #27272a         op zwart  1,41:1  valt weg
     .page-hero__crumbs a       rgba(0,0,0,.8) = #000  op zwart  1,00:1  valt weg
     wit op zwart                                                21,00:1 ruim AA
     #ffbf3d op zwart                                            12,77:1 ruim AA
   De overige herokleuren zijn licht en houden hun bestaande donkere tekst:
   zwart op geel 12,77:1, op blauw 8,75:1, op groen 10,64:1, op rood 5,99:1;
   #27272a op geel 9,06:1, blauw 6,21:1, groen 7,54:1. Allemaal boven AA,
   dus daar is niets nodig. */
.page-hero.bg-color-black .page-hero__intro,
.page-hero.bg-color-black .page-hero__intro--below {
  color: #fff;
}

.page-hero.bg-color-black .page-hero__crumbs,
.page-hero.bg-color-black .page-hero__crumbs a {
  color: #fff;
}

.page-hero.bg-color-black .page-hero__crumbs a:hover,
.page-hero.bg-color-black .page-hero__crumbs a:focus-visible {
  color: #ffbf3d;
}

/* Het kruimelstreepje staat sitebreed op huisstijlgeel; op zwart is dat
   12,77:1 en dus prima. Alleen de dekking van 0,5 uit de basisregel gaat
   eraf, anders zakt hij naar circa 6,4:1. */
.page-hero.bg-color-black .page-hero__crumb-sep {
  color: #ffbf3d;
  opacity: 1;
}

/* De focusring op de site is zwart. Op een zwarte hero is die onzichtbaar,
   dus daar wordt hij geel (12,77:1, ruim boven de 3:1 voor niet-tekst). */
.page-hero.bg-color-black a:focus-visible {
  outline: 3px solid #ffbf3d;
  outline-offset: 3px;
}

/* --- Klantfeedback 01-09 (Joep) --- */
/* Lange activiteitstitels wikkelden naar een tweede regel in het
   kruimelpad; de actieve kruimel kapt nu af met een ellipsis. */
.page-hero__crumbs {
  min-width: 0;
  align-items: center;
}

.page-hero__crumb-current {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* De 6px-afsluitlijn van de agendalijst kwam direct onder de laatste
   "Toon maand"-knop uit en oogde daar als een losse balk. */
.agenda__list:has(> .agenda__month-more:last-child) {
  border-bottom: 0;
}

/* Titel van nieuws en verhalen in zuiver zwart, gelijk aan de heronamen
   elders (stond op het Bootstrap-grijs #212529). */
.single-verhaal__title {
  color: var(--ww-black, #000);
}

/* De kruimellinks zijn 36px hoog (tikdoel) met de tekst bovenin; nu de
   actieve kruimel één regel van 18px is, viel de tekst 9px lager. De
   linktekst centreert nu in zijn eigen hoogte zodat alles op één
   basislijn staat. */
.page-hero__crumbs a {
  display: inline-flex;
  align-items: center;
}

/* Zelfde kruimel-afkapping voor de andere twee varianten: het nieuws/
   verhalen-kruimelpad (eigen classes, inline flow: de nav zelf kapt af)
   en het page-hero-blok waar de actieve kruimel een naamloze span is. */
.single-verhaal__crumbs {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.page-hero__crumbs > span:last-child {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* De links en scheidingstekens kregen flex-shrink en werden platgedrukt
   ("HOM E"); alleen de actieve kruimel mag krimpen. */
.page-hero__crumbs a,
.page-hero__crumb-sep {
  flex: 0 0 auto;
  white-space: nowrap;
}

/* ------------------------------------------------------------------
 * fb17: meerdaagse activiteiten (optionele einddatum event_end_date)
 * ------------------------------------------------------------------ */
/* De periode-regel op een agenda-rij ("t/m zo 25 oktober") leent bewust de
   opmaak van de reeksregel (.agenda__reeks, zie hierboven); alleen het
   kalender-icoon staat een tikje kleiner, zodat het optisch even zwaar is
   als het herhaal-icoon van de reeks. */
.agenda__reeks--periode i {
  font-size: 12px;
}

/* De gele datumsticker op de activiteitpagina toont bij een meerdaagse
   activiteit een langere tekst ("17 t/m 25 oktober 2026"). Die mag netjes
   afbreken in plaats van uit de sticker te lopen; bij een eendaagse datum
   verandert er niets. */
.single-evenement__date-badge .single-evenement__date-full {
  white-space: normal;
  overflow-wrap: break-word;
}

/* --- fb19: agenda-rij, meerdaagse activiteit --------------------------- */
/* De datumkolom toont bij een meerdaagse activiteit de hele periode:
   "5 t/m 9 SEP" binnen een maand, "30 SEP t/m 2 OKT" over een maandgrens.
   Kleiner corps dan de losse datum en met wrap, anders barst de kolom uit
   zijn voegen; het "t/m" is klein en gedempt zodat de twee datums het woord
   doen. Kleur en uppercase erft hij van .agenda__day, dus de hoverwissel
   (zwart/wit) blijft gewoon werken. */
.agenda__day--periode {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: baseline;
  column-gap: 0.3em;
  row-gap: 0;
  font-size: 18px;
  line-height: 22px;
  white-space: normal;
}

.agenda__day--periode .agenda__day-tm {
  font-size: 12px;
  line-height: 1;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: none;
  opacity: 0.75;
}

/* De vaste datumkolom van 4.5rem (zie de kolomregels hierboven) is te smal
   voor twee datums; de periode-variant krijgt ruimte en de rest van de rij
   schuift mee. Alleen relevant waar de rij een flexbox is (breed scherm);
   in de grid-varianten eronder is de datumkolom toch al auto. */
@media (min-width: 768px) {
  .agenda__day.agenda__day--periode {
    flex-basis: 9rem;
  }
}
/* --- Klantfeedback 02-09 (Joep): meta-balk onder de hero --- */
/* De witte meta-balk (Waar / Contact / Contributie) was een grid van drie
   gelijke kolommen. Met twee ingevulde velden hing "Contact" daardoor op
   een derde van de breedte in de leegte. De items staan nu als flex-rij
   naast elkaar met een vaste tussenruimte; op smalle schermen wikkelen ze
   gewoon onder elkaar. */
.buurt-meta__grid {
  display: flex;
  flex-wrap: wrap;
  gap: 20px 72px;
}

/* Het 40px-icoon stond gecentreerd tussen het kleine label en de dikke
   regel eronder en oogde daardoor zwevend. Het icoon heeft nu de hoogte van
   de dikke regel (24px) en schuift onder het label (18px + 4px), zodat het
   precies naast de vetgedrukte naam staat. */
.buurt-meta__item i {
  height: 24px;
  margin-top: 22px;
}

/* ---------------------------------------------------------------------------
   Complianz: verborgen knoppen echt verbergen (03-09).
   De knopregel hierboven zet display: inline-flex met een id-selector en
   won daarmee van Complianz' eigen `.cmplz-hidden { display: none }`. Gevolg:
   "Voorkeuren opslaan" en de tweede "Bekijk voorkeuren" stonden er altijd.
   --------------------------------------------------------------------------- */
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-hidden,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-hidden,
#cmplz-manage-consent .cmplz-btn.cmplz-hidden,
#cmplz-manage-consent-container .cmplz-hidden {
  display: none !important;
}

/* ---------------------------------------------------------------------------
   Hero en kaartenblok in dezelfde kleur (03-09, /contact/).
   De kartel tussen beide krijgt de herokleur en is dus onzichtbaar; wat
   overblijft is hero-onderpadding (66px) + kartel (50px) + kaarten-
   bovenpadding (88px), ruim 200px leeg geel. Bij gelijke kleur terug naar
   het gewone sectieritme. Een eigen keuze van de redactie (row-padding-*)
   houdt voorrang.
   --------------------------------------------------------------------------- */
.page-hero.bg-color-white:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-white) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-white + .woensel-hero-crest:has(+ .info-cards.bg-color-white) {
  display: none;
}

.page-hero.bg-color-white + .woensel-hero-crest + .info-cards.bg-color-white:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-grey:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-grey) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-grey + .woensel-hero-crest:has(+ .info-cards.bg-color-grey) {
  display: none;
}

.page-hero.bg-color-grey + .woensel-hero-crest + .info-cards.bg-color-grey:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-black:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-black) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-black + .woensel-hero-crest:has(+ .info-cards.bg-color-black) {
  display: none;
}

.page-hero.bg-color-black + .woensel-hero-crest + .info-cards.bg-color-black:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-yellow:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-yellow) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-yellow + .woensel-hero-crest:has(+ .info-cards.bg-color-yellow) {
  display: none;
}

.page-hero.bg-color-yellow + .woensel-hero-crest + .info-cards.bg-color-yellow:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-pink:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-pink) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-pink + .woensel-hero-crest:has(+ .info-cards.bg-color-pink) {
  display: none;
}

.page-hero.bg-color-pink + .woensel-hero-crest + .info-cards.bg-color-pink:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-blue:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-blue) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-blue + .woensel-hero-crest:has(+ .info-cards.bg-color-blue) {
  display: none;
}

.page-hero.bg-color-blue + .woensel-hero-crest + .info-cards.bg-color-blue:not([class*=row-padding-top]) {
  padding-top: 72px;
}

.page-hero.bg-color-green:not([class*=row-padding-bottom]):has(+ .woensel-hero-crest + .info-cards.bg-color-green) {
  padding-bottom: 40px;
}

/* De kartel zelf is in dezelfde kleur onzichtbaar, maar hangt 50px over het
   kaartenblok (margin-bottom -50px). Met minder bovenpadding kwamen de
   tandjes over de bovenrand van de witte kaartjes. Dus helemaal weg. */
.page-hero.bg-color-green + .woensel-hero-crest:has(+ .info-cards.bg-color-green) {
  display: none;
}

.page-hero.bg-color-green + .woensel-hero-crest + .info-cards.bg-color-green:not([class*=row-padding-top]) {
  padding-top: 72px;
}

/* 15-09-2026: reeksdatums in de zijkolom per maand ingeklapt + weekpatroon */
.single-side__reeks-patroon {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  margin: 0.75rem 0 0;
  font-size: 16px;
  line-height: 24px;
  font-weight: 700;
}

.single-side__reeks-patroon i {
  margin-top: 5px;
  flex: 0 0 auto;
}

.single-side__reeks-maand {
  margin: 0.75rem 0 0;
  border-top: 2px solid #14100f;
}

.single-side__reeks-maandkop {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 10px 0;
  cursor: pointer;
  list-style: none;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.025em;
  font-size: 15px;
}

.single-side__reeks-maandkop::-webkit-details-marker {
  display: none;
}

.single-side__reeks-maandkop::after {
  content: "+";
  font-size: 20px;
  line-height: 1;
}

.single-side__reeks-maand[open] > .single-side__reeks-maandkop::after {
  content: "\2013";
}

.single-side__reeks-aantal {
  margin-left: auto;
  font-weight: 600;
  font-size: 13px;
  opacity: 0.7;
}

.single-side__reeks-list--compact {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.4rem;
  margin: 0 0 0.75rem;
}

.single-side__reeks-link--compact {
  padding: 7px 10px;
  font-size: 14px;
  line-height: 20px;
}

.single-side__reeks-link--compact small {
  font-weight: 500;
  font-size: 12px;
  opacity: 0.8;
}

.single-side__reeks-link--compact i {
  font-size: 12px;
}
