/* ==========================================================================
   Forms — WPForms output and the custom dropdown.

   WPForms ships its own stylesheet and its selectors are unlayered, so these
   rules use !important where they compete directly. Everything else is plain
   specificity.
   ========================================================================== */

/* Shared with app.css — see the note in dropdown.css. */
/* ==========================================================================
   Custom dropdown — the accessible listbox that replaces every native <select>.

   Shared by BOTH bundles on purpose:

   - app.css, because the control is also used outside any form (the sort
     control on Food concepten), and that page never loads forms.css.
   - forms.css, because inside a WPForms form these rules have to land AFTER
     wpforms-full.min.css, which is printed in the footer. Same !important,
     later in the document, so they win.

   Duplicated bytes are the price of that; the alternative is loading the whole
   form stylesheet on a page with no form on it.
   ========================================================================== */
/* ==========================================================================
   Custom dropdown (replaces every native <select>)
   ========================================================================== */

/*
 * The native select stays in the DOM as the source of truth — WPForms
 * validates and submits it. It is only hidden once JS has upgraded it, so a
 * failed script leaves a working native control rather than nothing.
 */
/*
 * !important throughout: WPForms styles its selects with a more specific
 * unlayered selector (div.wpforms-container-full .wpforms-form select), which
 * otherwise keeps position:static and width:100%. The clip-path alone hid it
 * visually but it still occupied 380x43 of layout, pushing the custom control
 * down and leaving a gap.
 */
select.ck-select-native {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  min-height: 0 !important;
  padding: 0 !important;
  margin: -1px !important;
  border: 0 !important;
  overflow: hidden !important;
  clip-path: inset(50%);
  white-space: nowrap;
  /* Keep it focusable and in the a11y tree — it is still the real control. */
  opacity: 0;
  pointer-events: none;
}

/*
 * !important, and the child rules below are scoped through .ck-select to raise
 * them to two classes, because WPForms resets `div.wpforms-container-full *`
 * (position, width, background, border, border-radius, padding, box-shadow,
 * font-size) at a specificity of (0,1,2). A single-class rule loses all of it:
 * this wrapper fell back to position:static, which left the panel below
 * positioned against the page rather than the field, and stripped the panel of
 * its background, border, radius, shadow and padding entirely.
 *
 * Scoping through .ck-select rather than .wpforms-container keeps these working
 * for the dropdowns outside a form, which get no reset at all.
 */
.ck-select {
  position: relative !important;
  width: 100% !important;
}

/*
 * Raise the whole control while its list is open.
 *
 * THE MOBILE BUG this fixes: on the quote form the Foodconcept dropdown is
 * immediately followed by the Menu dropdown. Both wrappers are position:relative
 * with auto z-index, so the later one (Menu) painted over the lower half of the
 * open Foodconcept list — you saw the first option, then the Menu field cut
 * across the rest. Giving the open wrapper its own stacking context above its
 * siblings puts the full list on top of everything after it.
 *
 * !important to match the position rule above, which is itself !important to
 * beat WPForms.
 */
.ck-select.is-open {
  z-index: 60 !important;
}

/*
 * THE ACTUAL MOBILE BUG (the z-index above was a red herring — it was already
 * applying). WPForms puts `overflow: hidden` on the select field's container
 * (.wpforms-field-select), which CLIPS the absolutely-positioned listbox to the
 * ~85px field box — so only a sliver of the first option showed and the rest
 * was cut off, not covered. Letting the field overflow lets the popup escape.
 *
 * Any WPForms field that hosts a custom dropdown needs this, so it is scoped to
 * the field that wraps a .ck-select rather than to -select alone (the "Soort
 * evenement" select renders as tiles, not a dropdown, and does not need it —
 * but :has keeps this correct whatever a field turns into).
 */
.wpforms-container .wpforms-field:has(.ck-select) {
  overflow: visible !important;
}

/*
 * !important on the visual properties: WPForms' modern stylesheet resets every
 * <button> inside .wpforms-container with !important, which stripped the
 * background, border and padding off this control entirely.
 */
.ck-select__button {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100% !important;
  min-height: 52px !important;
  padding: 14px 16px !important;
  font-family: var(--font-sans) !important;
  font-size: 16px !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
  text-align: left !important;
  text-transform: none !important;
  color: var(--color-ink) !important;
  background: #fff !important;
  border: 1.5px solid var(--color-line) !important;
  border-radius: var(--radius-sm, 10px) !important;
  box-shadow: none !important;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    box-shadow 0.15s ease;
}

.ck-select__button:hover {
  border-color: rgb(226 106 15 / 0.5);
}

.ck-select__button[aria-expanded='true'],
.ck-select__button:focus-visible {
  border-color: var(--color-brand) !important;
  box-shadow: 0 0 0 4px rgb(226 106 15 / 0.15) !important;
  outline: none;
}

.ck-select.is-placeholder .ck-select__value {
  color: rgb(58 48 42 / 0.45);
}

.ck-select__caret {
  flex: 0 0 auto;
  line-height: 0;
  color: var(--color-brand);
  transition: transform 0.2s ease;
}

.ck-select .ck-select__caret svg {
  width: 18px;
  height: 18px;
}

.ck-select__button[aria-expanded='true'] .ck-select__caret {
  transform: rotate(180deg);
}

.ck-select .ck-select__list {
  position: absolute;
  z-index: 40;
  top: calc(100% + 8px);
  left: 0;
  right: 0;
  max-height: 300px;
  margin: 0;
  /*
   * Roomier on the left than the right, so the options sit off the edge.
   * !important because the blanket `.wpforms-container ul` rule above zeroes
   * padding on every list in the form, and it uses !important.
   */
  padding: 8px 8px 8px 10px !important;
  overflow-y: auto;
  overscroll-behavior: contain;
  list-style: none;
  /* Tinted rather than plain white, so the panel separates from the field and
     the card behind it. */
  background: var(--color-cream);
  border: 1.5px solid rgb(226 106 15 / 0.25);
  border-radius: 14px;
  box-shadow:
    0 2px 6px rgb(20 16 13 / 0.05),
    0 20px 44px -14px rgb(20 16 13 / 0.32);
  scrollbar-width: thin;
  scrollbar-color: rgb(226 106 15 / 0.4) transparent;
}

.ck-select .ck-select__list[hidden] {
  display: none;
}

.ck-select .ck-select__option {
  position: relative;
  display: flex;
  align-items: center;
  min-height: 46px;
  /* Room on the right for the tick on the selected option. */
  padding: 12px 40px 12px 16px;
  border-radius: 10px;
  font-size: 15px;
  color: var(--color-ink);
  cursor: pointer;
  transition:
    background-color 0.13s ease,
    color 0.13s ease;
}

/*
 * Pointer hover and keyboard "active" are the same state to the eye — one is
 * driven by the mouse, the other by the arrow keys, and only one can apply at a
 * time in practice.
 */
.ck-select .ck-select__option:hover,
.ck-select .ck-select__option.is-active {
  background: var(--color-brand-soft);
  color: var(--color-brand);
}

.ck-select .ck-select__option[aria-selected='true'] {
  color: var(--color-brand);
  font-weight: 700;
}

/* Tick on the chosen option, so it stays readable under a hover highlight. */
.ck-select .ck-select__option[aria-selected='true']::after {
  content: '';
  position: absolute;
  right: 14px;
  width: 16px;
  height: 16px;
  background: var(--color-brand);
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E")
    center / contain no-repeat;
}

.ck-select .ck-select__option[aria-disabled='true'] {
  opacity: 0.45;
  cursor: not-allowed;
}

.wpforms-container {
  font-family: var(--font-sans) !important;
  margin: 0 !important;
}

.wpforms-container .wpforms-field {
  padding: 0 0 18px !important;
}

/*
 * WPForms sizes inputs with .wpforms-field-small/medium/large, where "medium"
 * is 60% of the field width. That leaves a ragged right edge against the
 * full-width radio rows and the submit button. The design uses one column, so
 * normalise all three to full width.
 *
 * Also drives the shared size variables so anything not covered below inherits
 * the right dimensions rather than WPForms' 43px default.
 */
.wpforms-container {
  --wpforms-field-size-input-height: 52px;
  --wpforms-field-size-font-size: 16px;
  --wpforms-field-border-size: 1.5px;
  --wpforms-button-size-height: 56px;
}

.wpforms-container .wpforms-field-small,
.wpforms-container .wpforms-field-medium,
.wpforms-container .wpforms-field-large {
  max-width: 100% !important;
  width: 100% !important;
}

.wpforms-container .wpforms-field-label {
  font-family: var(--font-sans) !important;
  font-weight: 700 !important;
  font-size: 15px !important;
  color: var(--color-ink) !important;
  margin-bottom: 8px !important;
}

.wpforms-container .wpforms-field-sublabel {
  font-size: 13px !important;
  color: var(--color-ink-soft) !important;
  opacity: 0.75;
}

/*
 * Red asterisk on every required label, so required and optional fields are
 * told apart at a glance. WPForms prints it aria-hidden, and the inputs carry
 * the real `required` attribute, so this is purely the visual marker.
 */
.wpforms-container .wpforms-required-label {
  display: inline !important;
  margin-left: 3px;
  color: #d2321f !important;
  /* Larger than the 15px label — an asterisk sits high and reads small at the
     label's own size. line-height keeps it out of the label's line box. */
  font-size: 20px !important;
  font-weight: 700 !important;
  line-height: 1 !important;
  vertical-align: -3px;
  text-decoration: none !important;
}

/* --- Text inputs --------------------------------------------------------- */

.wpforms-container input[type='text'],
.wpforms-container input[type='email'],
.wpforms-container input[type='tel'],
.wpforms-container input[type='url'],
.wpforms-container input[type='number'],
.wpforms-container input[type='date'],
.wpforms-container textarea {
  width: 100% !important;
  min-height: 52px !important;
  padding: 14px 16px !important;
  /* 16px minimum, else iOS zooms the page when the field takes focus. */
  font-size: 16px !important;
  font-family: var(--font-sans) !important;
  color: var(--color-ink) !important;
  background: #fff !important;
  border: 1.5px solid var(--color-line) !important;
  border-radius: var(--radius-sm, 10px) !important;
  box-shadow: none !important;
  transition:
    border-color 0.15s ease,
    box-shadow 0.15s ease;
}

.wpforms-container textarea {
  min-height: 140px !important;
  resize: vertical;
}

.wpforms-container input:focus,
.wpforms-container textarea:focus {
  border-color: var(--color-brand) !important;
  box-shadow: 0 0 0 4px rgb(226 106 15 / 0.15) !important;
  outline: none !important;
}

.wpforms-container ::placeholder {
  color: rgb(58 48 42 / 0.45);
}

/* --- Radio / checkbox ---------------------------------------------------- */

/*
 * WPForms renders <input> as a SIBLING of <label> inside each <li>, so the
 * tappable box has to be the <li> — styling the label leaves the control
 * outside the hit area. The originals are 16px targets.
 */
.wpforms-container ul {
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
}

.wpforms-container .wpforms-field-radio ul li,
.wpforms-container .wpforms-field-checkbox ul li {
  display: flex !important;
  align-items: center;
  gap: 0;
  min-height: 52px;
  margin: 0 0 8px !important;
  /* The label carries the padding so it can fill the row edge to edge — see
     the label rule below. */
  padding: 0 !important;
  overflow: hidden;
  background: #fff;
  border: 1.5px solid var(--color-line);
  border-radius: var(--radius-sm, 10px);
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    background-color 0.15s ease;
}

/*
 * Hover and checked must NOT look the same. They used to share this rule, so
 * the orange fill followed the mouse and an unpicked option looked picked —
 * which reads as "selecting does nothing", especially on the Ja/Nee pills where
 * the only remaining difference was the small check badge.
 *
 * Hover tints the border only; the fill means chosen. Checked comes second so
 * it wins while the pointer is over the selected option.
 */
.wpforms-container .wpforms-field-radio ul li:hover,
.wpforms-container .wpforms-field-checkbox ul li:hover {
  border-color: rgb(226 106 15 / 0.55);
}

.wpforms-container .wpforms-field-radio ul li:has(input:checked),
.wpforms-container .wpforms-field-checkbox ul li:has(input:checked) {
  border-color: var(--color-brand);
  background: var(--color-brand-soft);
}

.wpforms-container .wpforms-field-radio ul li:has(input:focus-visible),
.wpforms-container .wpforms-field-checkbox ul li:has(input:focus-visible) {
  outline: 3px solid var(--color-brand);
  outline-offset: 2px;
}

/*
 * The label fills the whole row, so every pixel of it is a native label click
 * that toggles the input it is bound to by `for` — the padding included. The
 * <li> is only the frame.
 */
.wpforms-container .wpforms-field-radio ul li label,
.wpforms-container .wpforms-field-checkbox ul li label {
  display: flex !important;
  flex: 1 !important;
  /* Overrides the row's align-items:center so the label fills the height too. */
  align-self: stretch;
  align-items: center;
  gap: 12px;
  margin: 0 !important;
  padding: 10px 16px !important;
  font-weight: 500 !important;
  font-size: 15px !important;
  color: var(--color-ink) !important;
  cursor: pointer;
}

/*
 * The tick is drawn by the label, so it is part of the same hit area rather
 * than a control sitting in front of it. Replaces the browser's own radio,
 * which ignored accent-color under WPForms' styling and rendered its default
 * blue.
 */
.wpforms-container .wpforms-field-radio ul li label::before,
.wpforms-container .wpforms-field-checkbox ul li label::before {
  content: '';
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  border: 1.5px solid var(--color-line);
  border-radius: 50%;
  background: #fff;
  transition:
    background-color 0.15s ease,
    border-color 0.15s ease;
}

/* A checkbox is a rounded square; only radios are round. */
.wpforms-container .wpforms-field-checkbox ul li label::before {
  border-radius: 6px;
}

.wpforms-container .wpforms-field-radio ul li:has(input:checked) label::before,
.wpforms-container .wpforms-field-checkbox ul li:has(input:checked) label::before {
  border-color: var(--color-brand);
  background:
    var(--color-brand)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E")
    center / 13px no-repeat;
}

/*
 * Hidden outright. It stays in the DOM as the value WPForms validates and
 * submits, and stays focusable so the group is reachable by keyboard — the
 * focus ring is drawn on the row by the :has(input:focus-visible) rule above.
 */
.wpforms-container input[type='radio'],
.wpforms-container input[type='checkbox'] {
  position: absolute !important;
  width: 1px !important;
  min-width: 0 !important;
  height: 1px !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  /*
   * !important, because WPForms styles these with a more specific selector
   * (div.wpforms-container-full input[type=radio]) which otherwise keeps the
   * input fully opaque.
   */
  opacity: 0 !important;
  pointer-events: none !important;
}

/*
 * WPForms draws its own radio and checkbox as ::before / ::after on the input.
 * Those are sized in their own right, so they render outside the 1px box the
 * rule above shrinks it to — which is where the stray blue circle came from.
 * The label draws the real indicator now.
 */
.wpforms-container input[type='radio']::before,
.wpforms-container input[type='radio']::after,
.wpforms-container input[type='checkbox']::before,
.wpforms-container input[type='checkbox']::after {
  display: none !important;
}

/* --- Submit -------------------------------------------------------------- */

.wpforms-container .wpforms-submit-container {
  padding-top: 8px !important;
}

.wpforms-container button.wpforms-submit {
  width: 100%;
  max-width: 420px;
  min-height: 56px !important;
  padding: 16px 32px !important;
  font-family: var(--font-sans) !important;
  font-weight: 700 !important;
  font-size: 17px !important;
  color: #fff !important;
  background: var(--color-brand) !important;
  border: 0 !important;
  border-radius: var(--radius-pill) !important;
  box-shadow: var(--shadow-brand);
  cursor: pointer;
  transition:
    background-color 0.18s ease,
    transform 0.18s ease;
}

.wpforms-container button.wpforms-submit:hover {
  background: var(--color-brand-dark) !important;
  transform: translateY(-2px);
}

/* --- Validation ---------------------------------------------------------- */

/*
 * WPForms renders field errors as <em class="wpforms-error">, and only uses a
 * <label> for a few field types. Styling the label alone left the common case
 * unstyled.
 */
.wpforms-container em.wpforms-error,
.wpforms-container label.wpforms-error {
  display: block !important;
  margin-top: 6px !important;
  font-size: 13px !important;
  font-style: normal !important;
  color: #c62828 !important;
}

.wpforms-container input.wpforms-error,
.wpforms-container textarea.wpforms-error {
  border-color: #c62828 !important;
}

.wpforms-confirmation-container-full {
  padding: 20px !important;
  background: var(--color-brand-soft) !important;
  border: 1px solid var(--color-brand) !important;
  border-radius: var(--radius-card) !important;
  color: var(--color-ink) !important;
}

/* ==========================================================================
   Quote wizard

   The three-step wizard src/ts/wizard.ts builds out of the fields WPForms
   renders, plus the three controls the design draws in place of a radio list,
   a number input and a dropdown.

   Field ids referenced below (0/1/4/5) are the ones scripts/seed-form.php
   assigns. They are stable per field — WPForms keeps a field's id when the form
   is reordered — so pairing by id survives editing in a way nth-child does not.
   ========================================================================== */

/* --- Step indicator ------------------------------------------------------ */

/*
 * Sits between the page header and the cream section, and takes its background
 * from whichever it continues: the dark hero on mobile, the cream section on
 * desktop. Printed hidden by the page template and revealed by the wizard —
 * without JavaScript there are no steps to indicate.
 */
.ck-steps-bar {
  background: var(--color-ink);
  padding: 2px 0 20px;
}

.ck-steps-bar[hidden] {
  display: none;
}

/*
 * Line the indicator up with the form card rather than the 1200px page
 * container — in the design the two share an edge.
 */
.ck-steps-bar .ck-container {
  max-width: var(--ck-quote-width, 880px);
}

/*
 * The indicator supplies the whole gap down to the card. Without this the
 * section below adds its own full padding-block on top and the two stack.
 */
.ck-steps-bar + .ck-section {
  padding-top: 12px;
}

.ck-steps {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  margin: 0;
  padding: 0;
  list-style: none;
}

.ck-steps__item {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 8px;
}

.ck-steps__num {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #fff;
  border: 2px solid #fff;
  color: var(--color-ink);
  font-family: var(--font-sans);
  font-size: 17px;
  font-weight: 700;
  line-height: 1;
}

.ck-steps__item.is-active .ck-steps__num {
  background: var(--color-brand);
  border-color: var(--color-brand);
  color: #fff;
}

.ck-steps__label {
  font-family: var(--font-sans);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.2;
  color: #fff;
  text-align: center;
}

.ck-steps__ord {
  display: none;
}

/* Connector, drawn from this circle's edge to the next one's. */
.ck-steps__item:not(:last-child)::after {
  content: '';
  position: absolute;
  top: 19px;
  left: calc(50% + 26px);
  right: calc(-50% + 26px);
  height: 2px;
  background: var(--color-brand);
}

/* --- Steps and navigation ------------------------------------------------ */

/*
 * Two columns so Voornaam/Achternaam and Postcode/Plaats can sit two-up, as
 * they do in the design at every width. Everything else spans both.
 */
.ck-wizard__step {
  display: grid;
  grid-template-columns: 1fr 1fr;
  column-gap: clamp(14px, 2vw, 20px);
  align-content: start;
}

.ck-wizard__step > .wpforms-field {
  grid-column: 1 / -1;
}

.ck-wizard__step > [data-field-id='0'],
.ck-wizard__step > [data-field-id='1'],
.ck-wizard__step > [data-field-id='4'],
.ck-wizard__step > [data-field-id='5'] {
  grid-column: span 1;
}

.ck-wizard__step[hidden],
.ck-wizard__nav [hidden] {
  display: none !important;
}

/*
 * Everything below that lives inside the form is prefixed with
 * .wpforms-container, and not for tidiness: WPForms resets
 * `div.wpforms-container-full *` — background, border, border-radius,
 * font-size, width, height, margin, padding, box-shadow and more — at a
 * specificity of (0,1,2). A bare single-class selector loses every one of those
 * properties to it. The prefix takes the class count to two, which wins
 * outright and is cheaper than marking each declaration !important.
 */
.wpforms-container .ck-wizard__nav {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 12px;
}

.wpforms-container .ck-wizard__nav .wpforms-submit-container {
  margin: 0 !important;
  padding: 0 !important;
}

.ck-wizard__btn {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 54px;
  padding: 15px 30px !important;
  font-family: var(--font-sans) !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  line-height: 1.2 !important;
  text-transform: none !important;
  border-radius: var(--radius-pill) !important;
  cursor: pointer;
  transition:
    background-color 0.18s ease,
    transform 0.18s ease;
}

.ck-wizard__btn--back {
  color: var(--color-brand) !important;
  background: #fff !important;
  border: 1.5px solid var(--color-brand) !important;
}

.ck-wizard__btn--back:hover {
  background: var(--color-brand-soft) !important;
}

.wpforms-container .ck-wizard__btn--next {
  color: #fff !important;
  background: var(--color-brand) !important;
  border: 0 !important;
  box-shadow: var(--shadow-brand);
}

.ck-wizard__btn--next:hover {
  background: var(--color-brand-dark) !important;
  transform: translateY(-2px);
}

.ck-wizard__btn:focus-visible {
  outline: 3px solid var(--color-brand);
  outline-offset: 2px;
}

.wpforms-container .ck-wizard__arrow {
  width: 18px;
  height: 18px;
  flex: 0 0 auto;
}

.wpforms-container .ck-wizard__nav button.wpforms-submit {
  width: 100%;
  max-width: none;
}

/* --- "Ja / Nee" pills ----------------------------------------------------- */

/*
 * A radio field with exactly two choices becomes two large pills. Matching on
 * the shape of the field rather than its id means the three-choice "Dranken"
 * field keeps the stacked rows it is designed as, and this needs no JavaScript.
 *
 * Scoped to .wpforms-field-radio on purpose: an unscoped `ul:has(...)` would
 * also catch the custom dropdown's two-option listbox.
 */
.wpforms-container .wpforms-field-radio ul:has(li:nth-child(2):last-child) {
  display: grid !important;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

/*
 * THE WHOLE PILL IS THE CONTROL.
 *
 * The <label> is stretched to fill the <li>, so every pixel of the pill is a
 * real label click that toggles the radio it is bound to by `for`. No overlay,
 * no JavaScript, and nothing to miss: the padding, the text and the badge are
 * all the same element.
 *
 * The earlier version left the padding on the <li> and covered it with an
 * absolutely positioned label::after. That worked in principle but made the
 * clickable area a pseudo-element sitting over a zero-width input, which is
 * exactly the kind of thing that silently stops working.
 */
.wpforms-container .wpforms-field-radio ul:has(li:nth-child(2):last-child) li {
  position: relative;
  gap: 0;
  min-height: 56px;
  /* The label carries the padding now, so it can fill the pill edge to edge. */
  padding: 0 !important;
  margin: 0 !important;
  overflow: hidden;
}

.wpforms-container .wpforms-field-radio ul:has(li:nth-child(2):last-child) li label {
  display: flex !important;
  flex: 1 !important;
  /* Overrides the row's align-items:center so the label fills the height too. */
  align-self: stretch;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 10px 16px !important;
  font-weight: 700 !important;
  cursor: pointer;
}

/*
 * A pill shows its tick only once chosen — an unpicked pill is a plain centred
 * word, as in the design. The empty ring the stacked rows use would throw the
 * centring off. The checked appearance itself comes from the base rule.
 */
.wpforms-container .wpforms-field-radio ul:has(li:nth-child(2):last-child) li label::before {
  display: none;
}

.wpforms-container
  .wpforms-field-radio
  ul:has(li:nth-child(2):last-child)
  li:has(input:checked)
  label::before {
  display: block;
}

/* --- "Aantal personen" stepper -------------------------------------------- */

.wpforms-container .ck-stepper {
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: 340px;
  padding: 5px;
  background: #fff;
  border: 1.5px solid var(--color-line);
  border-radius: var(--radius-sm, 10px);
}

.wpforms-container .ck-stepper input[type='number'] {
  flex: 1;
  min-height: 42px !important;
  padding: 8px !important;
  text-align: center;
  font-size: 17px !important;
  font-weight: 700 !important;
  border: 0 !important;
  border-radius: 0 !important;
  /* The buttons are the spinner; the native one would be a second set. */
  appearance: textfield;
}

.wpforms-container .ck-stepper input[type='number']::-webkit-inner-spin-button,
.wpforms-container .ck-stepper input[type='number']::-webkit-outer-spin-button {
  appearance: none;
  margin: 0;
}

.wpforms-container .ck-stepper input[type='number']:focus {
  box-shadow: none !important;
}

.ck-stepper:focus-within {
  border-color: var(--color-brand);
  box-shadow: 0 0 0 4px rgb(226 106 15 / 0.15);
}

.ck-stepper__btn {
  display: grid !important;
  place-items: center;
  flex: 0 0 auto;
  width: 42px !important;
  height: 42px !important;
  padding: 0 !important;
  color: var(--color-ink) !important;
  background: #fff !important;
  border: 1.5px solid var(--color-line) !important;
  border-radius: 50% !important;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    color 0.15s ease;
}

.ck-stepper__btn:hover:not(:disabled) {
  color: var(--color-brand) !important;
  border-color: var(--color-brand) !important;
}

.ck-stepper__btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.ck-stepper__btn:focus-visible {
  outline: 3px solid var(--color-brand);
  outline-offset: 2px;
}

.wpforms-container .ck-stepper__icon {
  width: 18px;
  height: 18px;
}

/* --- "Soort evenement" tiles ---------------------------------------------- */

.ck-tiles {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

/*
 * An odd number of tiles leaves the last one alone on its row. Rather than sit
 * it awkwardly in the left cell, span it full width — which also reads as
 * intended for "Anders", the catch-all option, sitting apart from the concrete
 * event types above it. A shorter bar with the icon beside the label (not
 * stacked) keeps it from looking like a heavy fifth tile.
 */
.ck-tiles > .ck-tile:last-child:nth-child(odd) {
  grid-column: 1 / -1;
  grid-auto-flow: column;
  grid-auto-columns: auto;
  justify-content: center;
  align-items: center;
  min-height: 64px;
  gap: 12px;
}

.ck-tile {
  display: grid !important;
  justify-items: center;
  align-content: center;
  gap: 10px;
  min-height: 116px;
  padding: 18px 10px !important;
  font-family: var(--font-sans) !important;
  background: #fff !important;
  border: 1.5px solid var(--color-line) !important;
  border-radius: var(--radius-sm, 10px) !important;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    background-color 0.15s ease;
}

.ck-tile:hover {
  border-color: rgb(226 106 15 / 0.5) !important;
}

.ck-tile[aria-checked='true'] {
  background: var(--color-brand-soft) !important;
  border-color: var(--color-brand) !important;
}

.ck-tile:focus-visible {
  outline: 3px solid var(--color-brand);
  outline-offset: 2px;
}

.wpforms-container .ck-tile__icon {
  width: 34px;
  height: 34px;
  color: var(--color-brand);
  stroke-width: 1.5;
}

.wpforms-container .ck-tile__label {
  /* "Bedrijfsfeest" is ~90px at 15px and the tile's text box is 88px on a
     320px phone, so it split mid-word. Scale with the viewport below ~385px
     and it stays one word on one line. */
  font-size: clamp(13px, 3.9vw, 15px);
  font-weight: 700;
  line-height: 1.2;
  color: var(--color-ink);
  text-align: center;
}

/* ==========================================================================
   Desktop
   ========================================================================== */

@media (min-width: 768px) {
  .ck-steps-bar {
    background: var(--color-cream);
    padding: clamp(28px, 4vw, 46px) 0 0;
  }

  .ck-steps {
    display: flex;
    align-items: center;
  }

  .ck-steps__item {
    display: flex;
    align-items: center;
    gap: 14px;
  }

  .ck-steps__item:not(:last-child) {
    flex: 1;
  }

  .ck-steps__item:not(:last-child)::after {
    position: static;
    flex: 1;
    min-width: 36px;
    margin-left: 6px;
  }

  .ck-steps__num {
    width: 44px;
    height: 44px;
    border-color: var(--color-line);
  }

  .ck-steps__label {
    font-size: 16px;
    color: var(--color-ink);
    text-align: left;
    white-space: nowrap;
  }

  .ck-steps__item.is-active .ck-steps__label {
    color: var(--color-brand);
  }

  .ck-steps__ord {
    display: inline;
  }

  /* One row of four, rather than the 2x2 the narrow layout falls back to. */
  .ck-tiles {
    grid-template-columns: repeat(4, 1fr);
  }

  .wpforms-container .ck-wizard__nav {
    flex-direction: row;
    align-items: center;
    margin-top: 20px;
  }

  .wpforms-container .ck-wizard__btn,
  .wpforms-container .ck-wizard__nav button.wpforms-submit {
    width: auto;
    min-width: 210px;
  }

  /* Back sits left, forward sits right, whichever forward button is showing. */
  .wpforms-container .ck-wizard__btn--next,
  .wpforms-container .ck-wizard__nav .wpforms-submit-container {
    margin-left: auto !important;
  }
}
