/* ============================================
   VitroWorks — Shared components
   ============================================ */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: 0.25em 1.6em;
  border-radius: var(--radius-pill);
  font-size: var(--fs-sm);
  font-weight: var(--fw-bold);
  border: 2px solid transparent;
  transition: background var(--duration-fast) var(--ease-standard),
              color var(--duration-fast) var(--ease-standard),
              border-color var(--duration-fast) var(--ease-standard),
              transform var(--duration-fast) var(--ease-standard);
  white-space: nowrap;
}

.btn:active {
  transform: scale(0.98);
}

.btn--primary {
  background: var(--color-orange);
  color: var(--color-white);
}

.btn--primary:hover {
  background: var(--color-orange-hover);
}

.btn--ghost {
  background: transparent;
  border-color: var(--color-orange);
  color: var(--color-orange);
}

.btn--ghost:hover {
  background: var(--color-orange);
  color: var(--color-white);
}

.btn--block {
  width: 100%;
}

.btn--secondary {
  background: var(--color-navy);
  color: var(--color-white);
}

.btn--secondary:hover {
  background: #2c363c;
}

/* Toggle button pair (Voertuig / Gebouw style) */
.toggle-group {
  display: flex;
  gap: var(--space-3);
}

.toggle-btn {
  flex: 1;
  padding: var(--space-3) var(--space-5);
  border-radius: var(--radius-pill);
  border: none;
  background: var(--color-cyan-light);
  color: var(--color-navy);
  font-weight: var(--fw-bold);
  transition: background var(--duration-fast) var(--ease-standard),
              color var(--duration-fast) var(--ease-standard);
}

.toggle-btn[aria-pressed="true"] {
  background: var(--color-cyan);
  color: var(--color-white);
}

/* Info badge: white circle, orange "i". ≈0.58 × bar height per design. */
.info-badge {
  width: 1.5em;
  height: 1.5em;
  flex-shrink: 0;
}

/* Service/product pill (thumbnail + label + info badge).
   Ratios measured from the design reference:
   thumb ≈ 1.6 × bar height, badge ≈ 0.58 × bar height, both centered. */
.service-pill {
  display: flex;
  align-items: center;
  gap: 0.9em;
  background: var(--color-cyan-light);
  border-radius: var(--radius-pill);
  padding-block: 0.2em;
  padding-right: 0.9em;
  font-size: var(--fs-sm);
  overflow: visible;
}

.service-pill__thumb {
  width: 4em;
  height: 4em;
  margin-block: -0.95em;
  border-radius: 50%;
  overflow: hidden;
  flex-shrink: 0;
  margin-inline-start: 5vw;
}

.service-pill__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.service-pill__label {
  flex: 1;
  font-family: var(--font-display);
  font-weight: var(--fw-regular);
  font-size: 1.2em;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  color: var(--color-navy);
}

/* Product card */
.product-card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
}

.product-card__thumb {
  width: 88px;
  height: 88px;
  border-radius: 50%;
  overflow: hidden;
  flex-shrink: 0;
}

.product-card__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.product-card__title {
  color: var(--color-cyan);
  font-weight: var(--fw-extrabold);
  font-size: var(--fs-md);
  margin-bottom: var(--space-1);
}

.product-card__desc {
  color: var(--color-navy-soft);
  font-size: var(--fs-sm);
  margin-bottom: var(--space-3);
}

/* Form elements */
.form-field {
  margin-bottom: var(--space-5);
}

.form-field label {
  display: block;
  font-weight: var(--fw-bold);
  font-size: var(--fs-sm);
  margin-bottom: var(--space-2);
  color: var(--color-navy);
}

.form-field .required-tag {
  color: var(--color-required);
  font-weight: var(--fw-medium);
}

/* Marks a required label/legend; decorative (aria-hidden) — see
   vw_offerte_req() and the "velden met * zijn verplicht" note. */
.form-req {
  color: var(--color-required);
  font-weight: var(--fw-bold);
}

/* The other side of the same coin: says a field may stay empty. Quieter
   than the label it follows, and read out loud — unlike the asterisk it
   is the only place that says so. */
.form-optional {
  color: var(--color-navy-soft);
  font-weight: var(--fw-regular);
}

.form-field input[type="text"],
.form-field input[type="email"],
.form-field input[type="tel"],
.form-field textarea {
  width: 100%;
  padding: var(--space-3) var(--space-4);
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-sm);
  font-size: var(--fs-base);
  background: var(--color-white);
}

.form-field textarea {
  resize: vertical;
  line-height: 1.5;
}

/* Focus: no outline ring on top of the border (that reads as a double
   border) — instead the border itself turns cyan and visually thickens.
   The extra thickness comes from a box-shadow hugging the border, so the
   field doesn't shift layout when focused. */
.form-field input:focus,
.form-field textarea:focus {
  border-color: var(--color-cyan);
  box-shadow: 0 0 0 1px var(--color-cyan);
  outline: none;
}

.radio-group {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
}

/* Scoped through .radio-group so it outweighs `.form-field label` above —
   these labels are choices, not field labels: inline, regular weight and
   no bottom margin. */
.radio-group .radio-option {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--fs-sm);
  font-weight: var(--fw-regular);
  margin-bottom: 0;
}

/* Two-option questions: the choices sit side by side and share the row. */
.radio-group--pair .radio-option {
  flex: 1 1 0;
  min-width: 0;
}

.radio-option input[type="radio"] {
  flex: none; /* never squeezed by a long label in a --pair row */
  width: 18px;
  height: 18px;
  margin: 0;
  accent-color: var(--color-cyan);
}

/* Statistics opt-out confirmation — one-request bar after the ?nt=1 link
   in the privacy policy (see inc/header.php). */
.stats-optout-note {
  padding: var(--space-3) var(--container-pad);
  background: var(--color-navy);
  color: var(--color-white);
  font-size: var(--fs-sm);
  text-align: center;
}

/* Legal content (Privacy / Cookiebeleid) — shared typography for both the
   legal-overlay body and the standalone /privacy/ and /cookiebeleid/ pages. */
.legal-page {
  padding-block: var(--space-9);
  max-width: 70ch;
}

.legal-page h1 {
  font-family: var(--font-display);
  font-size: var(--fs-2xl);
  font-weight: var(--fw-regular);
  letter-spacing: 0.01em;
  text-transform: uppercase;
  color: var(--color-navy);
  margin-bottom: var(--space-5);
}

.legal-content__meta {
  color: var(--color-navy-soft);
  font-size: var(--fs-sm);
  margin-bottom: var(--space-5);
}

.legal-content h3 {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--color-navy);
  margin-top: var(--space-6);
  margin-bottom: var(--space-2);
}

.legal-content h3:first-child {
  margin-top: 0;
}

.legal-content p {
  color: var(--color-navy-soft);
  line-height: var(--lh-relaxed);
}

.legal-content p + p,
.legal-content ul + h3,
.legal-content p + h3 {
  margin-top: var(--space-3);
}

/* Same story as .article-content: base.css strips markers from every list,
   and the padding-left here was reserving room for bullets that never got
   drawn. The privacy and cookie texts list categories and rights — they
   have to read as lists. */
.legal-content ul {
  color: var(--color-navy-soft);
  line-height: var(--lh-relaxed);
  padding-left: 1.25em;
  margin-top: var(--space-2);
  list-style: disc;
}

.legal-content li + li {
  margin-top: var(--space-2);
}

.legal-content a {
  color: var(--color-cyan);
  text-decoration: underline;
}

.legal-content code {
  font-size: 0.9em;
  background: var(--color-off-white);
  padding: 0.1em 0.4em;
  border-radius: var(--radius-sm);
}

.legal-content__settings-btn {
  margin-bottom: var(--space-5);
}
