← alle entries

order-tracking

FC-0116Voortgang & tijdlijnorder-trackingprimitivev1.0.0

Status van een bestelling als verticale lijst: per stap een vinkje in een cirkel (gedaan) of een lege cirkel, naam en tijdstip, verbonden door een dunne lijn die tot de laatste voltooide stap in de merkkleur staat. Zonder stappen een korte melding. De kleinste vorm van een tijdlijn.

zelfde component — andere tokens
  1. Bestelling geplaatst20-03-2026 14:23
  2. Bestelling bevestigd20-03-2026 14:30
  3. Verzonden21-03-2026 09:45
  4. Onderweg naar je22-03-2026 08:15
  5. BezorgdNog niet
primitives/ui/order-tracking.tsx
/**
 * OrderTracking — de status van een bestelling als verticale lijst: per stap
 * een vinkje in een cirkel (gedaan) of een lege cirkel (nog niet), een naam
 * en een tijdstip, verbonden door een dunne lijn die tot de laatste
 * voltooide stap in de merkkleur staat. Zonder stappen een korte melding.
 * Zusje van timeline (FC-0032) — dit is de kleinste vorm.
 *
 * Geoogst uit 21st.dev Order tracking (javierdev0): lucide CheckCircle2/
 * Circle → inline paden, text-primary/70 → color-mix op --primary,
 * 'This order has no tracking information.' → label. Statisch.
 */

import type * as React from "react";

export interface OrderStep {
  name: string;
  timestamp?: string;
  completed: boolean;
}

export interface OrderTrackingProps extends React.HTMLAttributes<HTMLDivElement> {
  steps: readonly OrderStep[];
  emptyLabel?: string;
}

export function OrderTracking({ steps, emptyLabel = "Voor deze bestelling is nog geen tracking.", className, ...rest }: OrderTrackingProps) {
  return (
    <div {...rest} className={["fp-order", className].filter(Boolean).join(" ")}>
      {steps.length === 0 ? (
        <p className="fp-order__leeg">{emptyLabel}</p>
      ) : (
        <ol className="fp-order__lijst">
          {steps.map((s, i) => (
            <li key={`${s.name}-${i}`} className="fp-order__stap" data-done={s.completed ? "" : undefined} data-next-done={steps[i + 1]?.completed ? "" : undefined}>
              <span className="fp-order__spoor" aria-hidden="true">
                <svg className="fp-order__stip" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" strokeWidth={1.8} strokeLinecap="round" strokeLinejoin="round">
                  <circle cx="12" cy="12" r="9" />
                  {s.completed && <path d="M8.5 12.5l2.5 2.5 4.5-5" />}
                </svg>
                {i < steps.length - 1 && <span className="fp-order__lijn" />}
              </span>
              <span className="fp-order__tekst">
                <span className="fp-order__naam">{s.name}</span>
                {s.timestamp && <span className="fp-order__tijd">{s.timestamp}</span>}
              </span>
            </li>
          ))}
        </ol>
      )}
    </div>
  );
}
primitives/ui/primitives.css
/**
 * Laag-1 primitives — stylesheet.
 * Uitsluitend tokens uit tokens/CONTRACT.md (contract v1): geen letterlijke
 * kleuren, fonts of radii. Structurele geometrie (padding, greep, marges)
 * staat in rem en is gedocumenteerd als aanname in de manifests.
 * Vereist tokens/motion.css naast dit bestand.
 */

/* ── Button ─────────────────────────────────────────────────────────────── */

.fp-btn {
  appearance: none;
  cursor: pointer;
  border: 1px solid transparent;
  border-radius: var(--radius);
  font: inherit;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1;
  padding: 0.625rem 1rem;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  transition:
    transform var(--motion-instant-duration) var(--motion-instant),
    opacity var(--motion-instant-duration) var(--motion-instant),
    background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-btn:disabled { cursor: default; opacity: 0.5; }
.fp-btn:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
/* Touch-down zonder vertraging; usePress zet data-pressed, ook bij terugslepen. */
.fp-btn[data-pressed] { transform: scale(0.96); }

.fp-btn--primary { background: var(--primary); color: var(--primary-foreground); }
.fp-btn--primary:hover:not(:disabled) { opacity: 0.9; }

.fp-btn--ghost { background: transparent; color: var(--foreground); border-color: var(--border); }
.fp-btn--ghost:hover:not(:disabled) { background: var(--muted); }

/* ── Field / Input ──────────────────────────────────────────────────────── */

.fp-field { display: flex; flex-direction: column; gap: 0.375rem; }
.fp-field__label { font-size: 0.8125rem; font-weight: 500; color: var(--foreground); }

.fp-input {
  appearance: none;
  font: inherit;
  font-size: 0.875rem;
  color: var(--foreground);
  background: var(--muted);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 0.5625rem 0.75rem;
  transition:
    border-color var(--motion-instant-duration) var(--motion-instant),
    background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-input::placeholder { color: var(--muted-foreground); }
/* Rij met trailing-slot: het veld vult de rij, het slot hangt rechts erin. */
.fp-field__row { position: relative; display: flex; }
.fp-field__row .fp-input { width: 100%; }
.fp-input--met-trailing { padding-right: 2.75rem; }
.fp-field__trailing { position: absolute; inset: 0 0.5rem 0 auto; display: flex; align-items: center; color: var(--muted-foreground); }
.fp-input--met-leading { padding-left: 2.25rem; }
.fp-field__leading { position: absolute; inset: 0 auto 0 0.75rem; display: flex; align-items: center; color: var(--muted-foreground); pointer-events: none; }
/* type=search zonder browser-kruisje; type=file met de bestandsknop als deel van het veld. */
.fp-input[type="search"]::-webkit-search-cancel-button,
.fp-input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }
.fp-input[type="file"] { padding: 0 0.75rem 0 0; color: var(--muted-foreground); font-style: italic; }
.fp-input[type="file"]::file-selector-button {
  margin-right: 0.75rem; padding: 0.5625rem 0.75rem;
  border: 0; border-right: 1px solid var(--border);
  background: transparent; color: var(--foreground);
  font: inherit; font-size: 0.875rem; font-weight: 500; font-style: normal; cursor: pointer;
}
.fp-input:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-input[aria-invalid] { border-color: var(--danger); }

.fp-field__description { margin: 0; font-size: 0.75rem; color: var(--muted-foreground); }
.fp-field__error { margin: 0; font-size: 0.75rem; color: var(--danger); }

/* ── Popover ────────────────────────────────────────────────────────────── */

.fp-popover-anchor { position: relative; display: inline-block; }

.fp-popover {
  position: absolute;
  z-index: 30;
  min-width: 12rem;
  background: var(--card);
  color: var(--card-foreground);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-overlay);
  padding: 0.3125rem;
  opacity: 0;
  visibility: hidden;
  transition:
    transform var(--motion-pop-duration) var(--motion-pop),
    opacity var(--motion-pop-duration) var(--motion-pop),
    visibility 0s linear var(--motion-pop-duration);
}
.fp-popover[data-open] {
  opacity: 1;
  visibility: visible;
  transition:
    transform var(--motion-pop-duration) var(--motion-pop),
    opacity var(--motion-pop-duration) var(--motion-pop);
}

/* Plaatsing + groeirichting: altijd vanuit het anker (transform-origin). */
.fp-popover--bottom-start { top: calc(100% + 0.5rem); left: 0; transform-origin: top left; transform: scale(0.96) translateY(-0.25rem); }
.fp-popover--bottom-end { top: calc(100% + 0.5rem); right: 0; transform-origin: top right; transform: scale(0.96) translateY(-0.25rem); }
.fp-popover--top-start { bottom: calc(100% + 0.5rem); left: 0; transform-origin: bottom left; transform: scale(0.96) translateY(0.25rem); }
.fp-popover--top-end { bottom: calc(100% + 0.5rem); right: 0; transform-origin: bottom right; transform: scale(0.96) translateY(0.25rem); }
.fp-popover[data-open] { transform: scale(1) translateY(0); }

/* ── DateRangeCalendar ──────────────────────────────────────────────────── */

.fp-cal {
  background: var(--card);
  color: var(--card-foreground);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.25rem;
}
.fp-cal__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
.fp-cal__title { margin: 0; font-size: 0.9375rem; font-weight: 600; }
.fp-cal__nav { display: flex; gap: 0.25rem; }
.fp-cal__navbtn {
  appearance: none; cursor: pointer; font: inherit; line-height: 1;
  width: 1.75rem; height: 1.75rem;
  background: transparent; color: var(--foreground);
  border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px);
  transition: background-color var(--motion-instant-duration) var(--motion-instant),
              transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-cal__navbtn:hover:not(:disabled) { background: var(--muted); }
.fp-cal__navbtn:active:not(:disabled) { transform: scale(0.94); }
.fp-cal__navbtn:disabled { opacity: 0.3; cursor: default; }
.fp-cal__navbtn:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }

.fp-cal__hint {
  margin: 0 0 0.875rem; padding: 0.5rem 0.75rem;
  font-size: 0.75rem; color: var(--foreground);
  background: var(--muted); border-radius: calc(var(--radius) - 2px);
}

.fp-cal__months { display: grid; grid-template-columns: 1fr; gap: 2rem; }
@media (min-width: 640px) {
  .fp-cal__months[data-months="2"] { grid-template-columns: 1fr 1fr; }
}
.fp-cal__monthlabel {
  margin: 0 0 0.75rem; text-align: center; text-transform: capitalize;
  font-size: 0.8125rem; font-weight: 500;
}
.fp-cal__weekdays {
  display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 0.25rem;
  font-size: 0.6875rem; color: var(--muted-foreground); text-align: center;
}
.fp-cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); row-gap: 0.25rem; }

.fp-cal__day {
  appearance: none; font: inherit; font-size: 0.75rem; line-height: 1;
  width: 2.25rem; height: 2.25rem; margin: 0 auto;
  display: flex; align-items: center; justify-content: center;
  background: transparent; color: var(--foreground);
  border: 0; border-radius: 999px; cursor: pointer;
  transition: background-color var(--motion-instant-duration) var(--motion-instant),
              color var(--motion-instant-duration) var(--motion-instant),
              transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-cal__day:active:not(:disabled) { transform: scale(0.92); }
.fp-cal__day:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-cal__day:hover:not(:disabled) { background: var(--muted); }
.fp-cal__day[data-status="past"] { color: var(--muted-foreground); opacity: 0.4; cursor: default; }
.fp-cal__day[data-status="unavailable"] { color: var(--danger); text-decoration: line-through; cursor: not-allowed; }
.fp-cal__day[data-status="pending"] {
  background: color-mix(in srgb, var(--warning) 18%, transparent);
  color: var(--warning); cursor: not-allowed;
}
.fp-cal__day[data-status="selected-start"],
.fp-cal__day[data-status="selected-end"] {
  background: var(--primary); color: var(--primary-foreground); font-weight: 600;
}
.fp-cal__day[data-status="selected-middle"],
.fp-cal__day[data-status="selecting"] { background: var(--muted); }

.fp-cal__legend {
  display: flex; flex-wrap: wrap; gap: 0.5rem 1.25rem;
  margin-top: 1.125rem; padding-top: 0.875rem; border-top: 1px solid var(--border);
  font-size: 0.75rem; color: var(--muted-foreground);
}
.fp-cal__legend span { display: inline-flex; align-items: center; gap: 0.375rem; }
.fp-cal__dot { width: 0.75rem; height: 0.75rem; border-radius: 999px; }
.fp-cal__dot--selected { background: var(--primary); }
.fp-cal__dot--pending { background: color-mix(in srgb, var(--warning) 40%, transparent); }
.fp-cal__strike { color: var(--danger); font-size: 0.7rem; }
.fp-cal__footnote { margin-top: 0.75rem; font-size: 0.75rem; color: var(--muted-foreground); }

/* ── Sheet ──────────────────────────────────────────────────────────────── */

.fp-sheet-scrim {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: var(--overlay);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-sheet-scrim[data-open] { opacity: 1; pointer-events: auto; }

.fp-sheet {
  position: fixed;
  z-index: 51;
  left: 50%;
  bottom: 0;
  width: min(35rem, calc(100% - 1.5rem));
  translate: -50% 0; /* centrering los van de y-animatie (transform is van de spring) */
  background: var(--card);
  color: var(--card-foreground);
  border: 1px solid var(--border);
  border-bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0;
  box-shadow: var(--shadow-overlay);
  padding: 0.625rem 1.375rem 1.75rem;
  touch-action: none;
}
.fp-sheet:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

.fp-sheet__handle {
  width: 2.5rem;
  height: 0.25rem;
  border-radius: calc(var(--radius) / 4);
  background: var(--border);
  margin: 0.25rem auto 1rem;
}

/* ── Gedeeld: alleen voor schermlezers ──────────────────────────────────── */

.fp-sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* ── FolderStack ────────────────────────────────────────────────────────── */

.fp-folder {
  position: relative;
  display: block;
  width: 20rem;
  height: 13rem;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  touch-action: manipulation;
}
.fp-folder:focus-visible {
  outline: 2px solid var(--ring, var(--info));
  outline-offset: 6px;
  border-radius: var(--radius);
}

.fp-folder__back {
  position: relative;
  width: 87.5%;
  height: 100%;
  margin: 0 auto;
  display: flex;
  justify-content: center;
  background: var(--muted);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}

.fp-folder__sheet {
  position: absolute;
  top: 0.5rem;
  left: 50%;
  margin-left: -4rem; /* halve breedte: centreren los van de waaier-transform */
  width: 8rem;
  height: 9.5rem;
  padding: 0.75rem;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-overlay);
}

.fp-folder__lines { display: flex; flex-direction: column; gap: 0.5rem; }
.fp-folder__row { display: flex; gap: 0.5rem; }
.fp-folder__line {
  flex: 1;
  height: 0.375rem;
  border-radius: 999px;
  background: color-mix(in srgb, var(--muted-foreground) 22%, transparent);
}
.fp-folder__line--head { width: 100%; }

.fp-folder__flap {
  position: absolute;
  inset-inline: 0;
  bottom: -1px;
  z-index: 3;
  height: 11rem;
  transform-origin: bottom;
  display: flex;
  align-items: center;
  justify-content: center;
}
.fp-folder__shape { width: 100%; height: 100%; overflow: visible; }

/* Het labelvlak op de klep: twee ogen en een mond, meer heeft het niet nodig. */
.fp-folder__label {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding-top: 2rem;
  pointer-events: none;
}
.fp-folder__dots { display: flex; gap: 2.75rem; margin-bottom: 0.625rem; }
.fp-folder__dot {
  width: 0.625rem; height: 0.625rem; border-radius: 999px;
  background: color-mix(in srgb, var(--muted-foreground) 45%, transparent);
}
.fp-folder__bar {
  width: 2.25rem; height: 0.25rem; border-radius: 999px;
  background: color-mix(in srgb, var(--muted-foreground) 45%, transparent);
}

/* ── TextReveal ─────────────────────────────────────────────────────────── */

.fp-reveal { color: inherit; }
.fp-reveal__group { display: inline-block; white-space: nowrap; vertical-align: baseline; }
/* Bewust geen CSS-transition: de scrub is hier de enige motor (§2.6). */
.fp-reveal__unit { display: inline-block; vertical-align: baseline; }

/* ── TaskSteps ──────────────────────────────────────────────────────────── */

.fp-steps { width: 100%; }
.fp-steps ol {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column; gap: 0.125rem;
}
.fp-steps li {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  height: 1.75rem;
  padding: 0 0.25rem;
}

.fp-steps__mark {
  position: relative;
  display: grid;
  place-items: center;
  width: 1rem; height: 1rem;
  flex-shrink: 0;
}
.fp-steps__mark > * { grid-area: 1 / 1; }

.fp-steps__badge {
  display: grid;
  place-items: center;
  width: 1rem; height: 1rem;
  border-radius: calc(var(--radius) / 2);
}
.fp-steps__badge--klaar {
  color: var(--success);
  background: color-mix(in srgb, var(--success) 14%, transparent);
}
.fp-steps__badge--fout {
  color: var(--danger);
  background: color-mix(in srgb, var(--danger) 14%, transparent);
}
.fp-steps__spin { color: var(--muted-foreground); display: grid; place-items: center; }
.fp-steps__pip {
  width: 0.3125rem; height: 0.3125rem;
  border-radius: calc(var(--radius) / 4);
  background: var(--border);
}

.fp-steps__label {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.8125rem;
  color: var(--muted-foreground);
  transition: color var(--motion-instant-duration) var(--motion-instant);
}
.fp-steps li[data-status="klaar"] .fp-steps__label { color: color-mix(in srgb, var(--foreground) 70%, var(--muted-foreground)); }
.fp-steps li[data-status="bezig"] .fp-steps__label { color: var(--foreground); font-weight: 500; }
.fp-steps li[data-status="fout"] .fp-steps__label { color: var(--danger); font-weight: 500; }

/* De loopband op de actieve regel: licht dat over de tekst trekt. */
.fp-steps__label--loopt {
  font-weight: 500;
  color: transparent;
  background-image: linear-gradient(
    90deg,
    var(--muted-foreground) 38%,
    var(--foreground) 50%,
    var(--muted-foreground) 62%
  );
  background-size: 220% 100%;
  -webkit-background-clip: text;
  background-clip: text;
}

.fp-steps__meta {
  flex-shrink: 0;
  font-size: 0.6875rem;
  font-variant-numeric: tabular-nums;
  color: var(--muted-foreground);
  opacity: 0;
  transition: opacity var(--motion-instant-duration) var(--motion-instant);
}
.fp-steps li[data-status="klaar"] .fp-steps__meta { opacity: 1; }

/* ── PressDepth ─────────────────────────────────────────────────────────── */

.fp-depth {
  position: relative;
  display: inline-flex;
  vertical-align: middle;
  appearance: none;
  border: 0;
  background: none;
  padding: 0;
  cursor: pointer;
  border-radius: var(--radius);
  outline: none;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  touch-action: manipulation;
}
.fp-depth:disabled { cursor: default; opacity: 0.5; }

.fp-depth__base {
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: 100%;
  border-radius: var(--radius);
  background: color-mix(in srgb, var(--foreground) 18%, var(--muted));
}

.fp-depth__cap {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  height: 2.25rem;
  padding: 0 0.875rem;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--card);
  color: var(--card-foreground);
  font: inherit;
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1;
}
.fp-depth:focus-visible .fp-depth__cap {
  outline: 2px solid var(--ring, var(--info));
  outline-offset: 2px;
}

/* Bolling: licht van boven, schaduw van onder — weg zodra hij inzakt. */
.fp-depth__sheen {
  position: absolute;
  inset: 0;
  border-radius: var(--radius);
  pointer-events: none;
  box-shadow:
    inset 0 1.5px 0 color-mix(in srgb, var(--card) 70%, var(--background)),
    inset 0 -1px 0 color-mix(in srgb, var(--foreground) 8%, transparent);
}

/* ── ReorderList ────────────────────────────────────────────────────────── */

.fp-reorder { width: 100%; }
.fp-reorder ul {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column; gap: 0.375rem;
}
.fp-reorder li {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.625rem 0.75rem;
  background: var(--card);
  color: var(--card-foreground);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  cursor: grab;
  outline: none;
  touch-action: pan-x;
  transition:
    border-color var(--motion-instant-duration) var(--motion-instant),
    background-color var(--motion-instant-duration) var(--motion-instant),
    box-shadow var(--motion-instant-duration) var(--motion-instant);
}
.fp-reorder li[data-lifted] { z-index: 1; cursor: grabbing; box-shadow: var(--shadow-overlay); }
.fp-reorder li[data-held] {
  border-color: var(--primary);
  background: color-mix(in srgb, var(--primary) 6%, var(--card));
}
.fp-reorder li:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

.fp-reorder__grip {
  flex-shrink: 0;
  display: inline-flex;
  color: var(--border);
  transition: color var(--motion-instant-duration) var(--motion-instant);
}
.fp-reorder li[data-lifted] .fp-reorder__grip,
.fp-reorder li:hover .fp-reorder__grip { color: var(--muted-foreground); }

.fp-reorder__body { flex: 1; min-width: 0; }

/* ── ProgressBar ────────────────────────────────────────────────────────── */

.fp-progress { width: 100%; }
.fp-progress__head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; }

.fp-progress__label {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 0.8125rem; font-weight: 500; color: var(--foreground);
}

/* Beide waarden liggen in hetzelfde vak: de kop verspringt niet bij het wisselen. */
.fp-progress__value { display: grid; justify-items: end; flex-shrink: 0; }
.fp-progress__value-face {
  grid-area: 1 / 1;
  white-space: nowrap;
  font-size: 0.75rem; font-weight: 500; line-height: 1.25rem;
  color: var(--muted-foreground);
}
.fp-progress__value-face--num { font-variant-numeric: tabular-nums; }

.fp-progress__track {
  margin-top: 0.5rem;
  padding: 2px;
  border-radius: calc(var(--radius) / 2);
  background: var(--muted);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--foreground) 8%, transparent);
}
.fp-progress__rail {
  position: relative;
  height: 0.5rem;
  overflow: hidden;
  border-radius: calc(var(--radius) / 3);
}
.fp-progress__fill {
  position: absolute; inset: 0;
  display: block;
  transform-origin: left;
  border-radius: calc(var(--radius) / 3);
  background: var(--primary);
}
.fp-progress__shuttle {
  position: absolute; inset-block: 0; left: 0;
  display: block;
  width: 40%;
  border-radius: calc(var(--radius) / 3);
  background: var(--primary);
}

/* ── OtpInput ───────────────────────────────────────────────────────────── */

.fp-otp { display: inline-flex; flex-direction: column; }
.fp-otp__row { position: relative; display: flex; gap: 0.5rem; }

.fp-otp__cell { position: relative; width: 2.5rem; height: 3rem; }
.fp-otp__cell[data-gap] { margin-left: 0.75rem; }

/* De input is doorzichtig; het zichtbare teken is een eigen laag erboven. */
.fp-otp__input {
  width: 100%; height: 100%;
  border: 2px solid var(--border);
  border-radius: var(--radius);
  background: var(--muted);
  box-shadow: inset 0 1px 2px color-mix(in srgb, var(--foreground) 7%, transparent);
  color: transparent;
  caret-color: transparent;
  font: inherit;
  font-size: 0.9375rem;
  text-align: center;
  outline: none;
  transition:
    background-color var(--motion-instant-duration) var(--motion-instant),
    border-color var(--motion-instant-duration) var(--motion-instant),
    box-shadow var(--motion-instant-duration) var(--motion-instant);
}
.fp-otp__input::selection { background: transparent; }
.fp-otp__input:disabled { opacity: 0.5; }
.fp-otp__input[data-gevuld] { background: var(--card); border-color: color-mix(in srgb, var(--border) 60%, var(--foreground)); box-shadow: none; }
.fp-otp__input[data-actief] { background: var(--card); border-color: var(--ring, var(--info)); box-shadow: none; }
.fp-otp__input[data-status="fout"] { border-color: var(--danger); background: var(--card); box-shadow: none; }
.fp-otp__input[data-status="goed"] { border-color: var(--success); background: var(--card); box-shadow: none; }

.fp-otp__glass {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  pointer-events: none;
}
.fp-otp__char {
  grid-area: 1 / 1;
  font-size: 0.9375rem;
  font-variant-numeric: tabular-nums;
  color: var(--foreground);
}
.fp-otp__caret {
  grid-area: 1 / 1;
  display: block;
  width: 1.5px; height: 1.0625rem;
  border-radius: 999px;
  background: var(--foreground);
}

.fp-otp__status { display: grid; height: 1rem; margin-top: 0.5rem; }
.fp-otp__message {
  grid-area: 1 / 1;
  font-size: 0.71875rem; line-height: 1rem;
  color: var(--muted-foreground);
}
.fp-otp__message[data-status="fout"] { color: var(--danger); }
.fp-otp__message[data-status="goed"] { color: var(--success); }

/* ── PasswordStrength ───────────────────────────────────────────────────── */

.fp-pw { width: 100%; }
.fp-pw__meter { display: grid; gap: 0.375rem; }
.fp-pw__slot {
  position: relative;
  height: 0.375rem;
  overflow: hidden;
  border-radius: calc(var(--radius) / 4);
  background: var(--muted);
}
.fp-pw__bar {
  position: absolute; inset: 0;
  transform-origin: left;
  border-radius: calc(var(--radius) / 4);
  background: var(--border);
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-pw[data-tone="gevaar"] .fp-pw__bar { background: var(--danger); }
.fp-pw[data-tone="let-op"] .fp-pw__bar { background: var(--warning); }
.fp-pw[data-tone="veilig"] .fp-pw__bar { background: var(--success); }

.fp-pw__head {
  display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
  height: 1.25rem; margin-top: 0.5rem;
}
/* Alle woorden in één vak: "Zwak" → "Sterk" verschuift niets. */
.fp-pw__labels { display: inline-grid; }
.fp-pw__label {
  grid-area: 1 / 1;
  white-space: nowrap;
  font-size: 0.78125rem; font-weight: 500; line-height: 1.25rem;
  color: var(--muted-foreground);
  transition: color var(--motion-instant-duration) var(--motion-instant);
}
.fp-pw[data-tone="gevaar"] .fp-pw__label { color: var(--danger); }
.fp-pw[data-tone="let-op"] .fp-pw__label { color: var(--warning); }
.fp-pw[data-tone="veilig"] .fp-pw__label { color: var(--success); }

.fp-pw__warn {
  white-space: nowrap;
  font-size: 0.71875rem; line-height: 1.25rem;
  color: var(--warning);
}

.fp-pw__rules { list-style: none; margin: 0.75rem 0 0; padding: 0; display: grid; gap: 0.375rem; }
.fp-pw__rules li { display: flex; align-items: center; gap: 0.5rem; }

.fp-pw__box {
  position: relative;
  display: grid; place-items: center;
  width: 0.875rem; height: 0.875rem;
  flex-shrink: 0;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) / 3);
  color: var(--background);
}
.fp-pw__box-fill {
  position: absolute; inset: 0;
  border-radius: calc(var(--radius) / 4);
  background: var(--success);
}
.fp-pw__tick { position: relative; width: 0.5625rem; height: 0.5625rem; }

.fp-pw__rule-label {
  font-size: 0.78125rem; line-height: 1.25rem;
  color: var(--muted-foreground);
  transition: color var(--motion-instant-duration) var(--motion-instant);
}
.fp-pw__rules li[data-voldaan] .fp-pw__rule-label { color: var(--foreground); }

/* ── ExpandingNav ───────────────────────────────────────────────────────── */

.fp-nav ul { list-style: none; margin: 0; padding: 0; display: flex; gap: 1rem; }

.fp-nav__item {
  --fp-nav-from: var(--primary);
  --fp-nav-to: var(--primary);
  width: 3.75rem;
  height: 3.75rem;
}
/* De maat springt; Framer interpoleert hem met transforms (FLIP), niet per frame layout. */
.fp-nav__item[data-open] { width: 11.25rem; }

.fp-nav__button {
  position: relative;
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%;
  padding: 0;
  border: 0;
  border-radius: 999px;
  background: var(--card);
  color: var(--muted-foreground);
  font: inherit;
  cursor: pointer;
  outline: none;
  overflow: visible;
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
  box-shadow: var(--shadow-overlay);
  transition: box-shadow var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-nav__button:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 3px; }
.fp-nav__item[data-open] .fp-nav__button { box-shadow: none; }

.fp-nav__wash,
.fp-nav__glow {
  position: absolute;
  border-radius: 999px;
  background: linear-gradient(45deg, var(--fp-nav-from), var(--fp-nav-to));
  opacity: 0;
  transition: opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-nav__wash { inset: 0; }
.fp-nav__glow { inset-inline: 0; top: 0.625rem; height: 100%; filter: blur(15px); z-index: -1; }
.fp-nav__item[data-open] .fp-nav__wash { opacity: 1; }
.fp-nav__item[data-open] .fp-nav__glow { opacity: 0.5; }

.fp-nav__icon { position: relative; display: inline-flex; font-size: 1.5rem; line-height: 1; }
.fp-nav__label {
  position: absolute;
  white-space: nowrap;
  color: var(--primary-foreground);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* ── NeonButton ─────────────────────────────────────────────────────────── */

.fp-neon {
  --fp-neon: var(--primary);
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  appearance: none; cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-weight: 500; line-height: 1.2;
  color: var(--foreground);
  border: 1px solid transparent; border-radius: 999px;
  transition:
    background-color var(--motion-instant-duration) var(--motion-instant),
    border-color var(--motion-instant-duration) var(--motion-instant),
    color var(--motion-instant-duration) var(--motion-instant),
    transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-neon--sm { padding: 0.25rem 1rem; font-size: 0.8125rem; }
.fp-neon--md { padding: 0.5rem 1.75rem; font-size: 0.875rem; }
.fp-neon--lg { padding: 0.75rem 2.5rem; font-size: 1rem; }

.fp-neon--outline {
  background: color-mix(in srgb, var(--fp-neon) 6%, transparent);
  border-color: color-mix(in srgb, var(--fp-neon) 22%, transparent);
}
.fp-neon--outline:hover { background: transparent; }
.fp-neon--solid { background: var(--fp-neon); color: var(--primary-foreground); }
.fp-neon--solid:hover { border-color: color-mix(in srgb, var(--foreground) 50%, transparent); }
.fp-neon--ghost { background: transparent; }
.fp-neon--ghost:hover { border-color: var(--border); background: color-mix(in srgb, var(--foreground) 8%, transparent); }

.fp-neon[data-pressed] { transform: scale(0.97); }
.fp-neon:disabled { opacity: 0.5; cursor: default; }
.fp-neon:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* De lichtlijnen: 1px, driekwart breed, gecentreerd; alleen opacity beweegt. */
.fp-neon__line {
  position: absolute; left: 12.5%; right: 12.5%; height: 1px;
  pointer-events: none;
  background: linear-gradient(90deg, transparent, var(--fp-neon), transparent);
  opacity: 0;
  transition: opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-neon__line--top { top: -1px; }
.fp-neon__line--bottom { bottom: -1px; }
.fp-neon:hover .fp-neon__line--top,
.fp-neon:focus-visible .fp-neon__line--top,
.fp-neon[data-pressed] .fp-neon__line--top { opacity: 1; }
.fp-neon:hover .fp-neon__line--bottom,
.fp-neon:focus-visible .fp-neon__line--bottom,
.fp-neon[data-pressed] .fp-neon__line--bottom { opacity: 0.3; }

/* ── GradientButton ─────────────────────────────────────────────────────── */

/* Geregistreerde properties: alleen zo kan de browser een verloop-positie
   interpoleren. Dit is verf, geen layout. */
@property --fp-grad-x { syntax: "<percentage>"; inherits: false; initial-value: 11.14%; }
@property --fp-grad-y { syntax: "<percentage>"; inherits: false; initial-value: 140%; }
@property --fp-grad-sx { syntax: "<percentage>"; inherits: false; initial-value: 150%; }
@property --fp-grad-sy { syntax: "<percentage>"; inherits: false; initial-value: 180.06%; }
@property --fp-grad-s1 { syntax: "<percentage>"; inherits: false; initial-value: 37.35%; }
@property --fp-grad-s2 { syntax: "<percentage>"; inherits: false; initial-value: 61.36%; }
@property --fp-grad-s3 { syntax: "<percentage>"; inherits: false; initial-value: 78.42%; }
@property --fp-grad-s4 { syntax: "<percentage>"; inherits: false; initial-value: 89.52%; }
@property --fp-grad-s5 { syntax: "<percentage>"; inherits: false; initial-value: 100%; }
@property --fp-grad-hoek { syntax: "<angle>"; inherits: false; initial-value: 20deg; }

.fp-grad {
  --fp-grad-1: var(--primary);
  --fp-grad-2: color-mix(in srgb, var(--primary) 70%, var(--info));
  --fp-grad-3: color-mix(in srgb, var(--primary) 40%, var(--info));
  --fp-grad-4: color-mix(in srgb, var(--info) 80%, var(--background));
  --fp-grad-5: color-mix(in srgb, var(--info) 55%, var(--background));
  --fp-grad-rand-1: color-mix(in srgb, var(--primary) 70%, transparent);
  --fp-grad-rand-2: color-mix(in srgb, var(--info) 40%, transparent);
  --fp-grad-x: 11.14%; --fp-grad-y: 140%;
  --fp-grad-sx: 150%; --fp-grad-sy: 180.06%;
  --fp-grad-s1: 37.35%; --fp-grad-s2: 61.36%; --fp-grad-s3: 78.42%; --fp-grad-s4: 89.52%; --fp-grad-s5: 100%;
  --fp-grad-hoek: 20deg;

  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 8.25rem; padding: 1rem 2.25rem;
  appearance: none; cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-weight: 600; line-height: 1.2;
  color: var(--primary-foreground);
  border: 2px solid transparent; border-radius: var(--radius);
  background:
    radial-gradient(
      var(--fp-grad-sx) var(--fp-grad-sy) at var(--fp-grad-x) var(--fp-grad-y),
      var(--fp-grad-1) var(--fp-grad-s1),
      var(--fp-grad-2) var(--fp-grad-s2),
      var(--fp-grad-3) var(--fp-grad-s3),
      var(--fp-grad-4) var(--fp-grad-s4),
      var(--fp-grad-5) var(--fp-grad-s5)
    ) padding-box,
    linear-gradient(var(--fp-grad-hoek), var(--fp-grad-rand-1), var(--fp-grad-rand-2)) border-box;
  transition:
    --fp-grad-x var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-y var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-sx var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-sy var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-s1 var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-s2 var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-s3 var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-s4 var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-s5 var(--motion-smooth-duration) var(--motion-smooth),
    --fp-grad-hoek var(--motion-smooth-duration) var(--motion-smooth),
    transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-grad:hover, .fp-grad:focus-visible, .fp-grad[data-pressed] {
  --fp-grad-x: 0%; --fp-grad-y: 91.51%;
  --fp-grad-sx: 120.24%; --fp-grad-sy: 103.18%;
  --fp-grad-s1: 0%; --fp-grad-s2: 8.8%; --fp-grad-s3: 21.44%; --fp-grad-s4: 71.34%; --fp-grad-s5: 85.76%;
  --fp-grad-hoek: 190deg;
}
.fp-grad[data-pressed] { transform: scale(0.97); }
.fp-grad:disabled { opacity: 0.5; cursor: default; }
.fp-grad:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* Verloop op de tekstkleur — voor lichte vlakken waar de merkkleur te luid is. */
.fp-grad--contrast {
  --fp-grad-1: var(--foreground);
  --fp-grad-2: color-mix(in srgb, var(--foreground) 80%, var(--muted-foreground));
  --fp-grad-3: color-mix(in srgb, var(--foreground) 55%, var(--muted-foreground));
  --fp-grad-4: var(--muted-foreground);
  --fp-grad-5: color-mix(in srgb, var(--muted-foreground) 70%, var(--background));
  --fp-grad-rand-1: color-mix(in srgb, var(--foreground) 60%, transparent);
  --fp-grad-rand-2: color-mix(in srgb, var(--muted-foreground) 40%, transparent);
  color: var(--background);
}

/* ── HoverRevealButton ──────────────────────────────────────────────────── */

.fp-hreveal {
  position: relative;
  display: inline-grid; place-items: center; overflow: hidden;
  min-width: 8rem; padding: 0.5rem 1.25rem 0.5rem 2.125rem;
  appearance: none; cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-weight: 600; line-height: 1.4;
  color: var(--foreground);
  background: var(--card);
  border: 1px solid var(--border); border-radius: 999px;
  transition: transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-hreveal:disabled { opacity: 0.5; cursor: default; }
.fp-hreveal:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* De stip is een cirkel zo breed als de knop, links van het woord; groeien = schalen, niet meten. */
.fp-hreveal__dot {
  position: absolute; left: 1.25rem; top: 50%;
  width: 100%; aspect-ratio: 1;
  border-radius: 50%;
  background: var(--primary);
  transform: translate(-50%, -50%) scale(0.06);
  pointer-events: none;
  transition: transform var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-hreveal:hover .fp-hreveal__dot,
.fp-hreveal:focus-visible .fp-hreveal__dot,
.fp-hreveal[data-pressed] .fp-hreveal__dot { transform: translate(-50%, -50%) scale(2.2); }

.fp-hreveal__rust {
  position: relative; display: inline-block;
  transform: translateX(0.25rem);
  transition:
    transform var(--motion-smooth-duration) var(--motion-smooth),
    opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-hreveal:hover .fp-hreveal__rust,
.fp-hreveal:focus-visible .fp-hreveal__rust,
.fp-hreveal[data-pressed] .fp-hreveal__rust { transform: translateX(3rem); opacity: 0; }

.fp-hreveal__onthuld {
  position: absolute; inset: 0; padding-left: 0.875rem;
  display: flex; align-items: center; justify-content: center; gap: 0.5rem;
  color: var(--primary-foreground);
  transform: translateX(3rem); opacity: 0;
  transition:
    transform var(--motion-smooth-duration) var(--motion-smooth),
    opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-hreveal:hover .fp-hreveal__onthuld,
.fp-hreveal:focus-visible .fp-hreveal__onthuld,
.fp-hreveal[data-pressed] .fp-hreveal__onthuld { transform: translateX(-0.25rem); opacity: 1; }

/* ── LiquidMetalButton ──────────────────────────────────────────────────── */

.fp-metal {
  position: relative; isolation: isolate;
  display: inline-grid; place-items: center;
  height: 2.875rem; min-width: 2.875rem; padding: 0 1.5rem;
  appearance: none; border: 0; background: transparent;
  cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-size: 0.875rem; line-height: 1;
  color: var(--muted-foreground);
  border-radius: 999px; overflow: hidden;
}
.fp-metal--icon { width: 2.875rem; padding: 0; }
.fp-metal:disabled { opacity: 0.5; cursor: default; }
.fp-metal:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* De rand: een afgeknipt vlak met daarin een te groot draaiend vierkant. */
.fp-metal__ring {
  position: absolute; inset: 0; z-index: -2;
  border-radius: 999px; overflow: hidden;
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--foreground) 14%, transparent),
    var(--shadow-overlay);
  transition: box-shadow var(--motion-instant-duration) var(--motion-instant);
}
.fp-metal[data-pressed] .fp-metal__ring {
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--foreground) 24%, transparent);
}
.fp-metal__sheen {
  position: absolute; left: 50%; top: 50%;
  width: 200%; aspect-ratio: 1;
  translate: -50% -50%;
  background: conic-gradient(
    from 0deg,
    var(--muted-foreground),
    var(--foreground),
    var(--muted),
    color-mix(in srgb, var(--foreground) 70%, var(--muted-foreground)),
    var(--muted-foreground),
    var(--card),
    var(--foreground),
    var(--muted-foreground)
  );
}
/* Het gezicht: van paneel naar bodem, drukt 1px in. */
.fp-metal__face {
  position: absolute; inset: 2px; z-index: -1;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--card), var(--background));
  transition:
    transform var(--motion-instant-duration) var(--motion-instant),
    box-shadow var(--motion-instant-duration) var(--motion-instant);
}
.fp-metal[data-pressed] .fp-metal__face {
  transform: translateY(1px) scale(0.98);
  box-shadow: inset 0 2px 4px color-mix(in srgb, var(--foreground) 10%, transparent);
}
.fp-metal__label {
  position: relative; display: inline-flex; align-items: center; gap: 0.375rem;
  white-space: nowrap;
  text-shadow: 0 1px 2px color-mix(in srgb, var(--background) 60%, transparent);
}
.fp-metal__ripple-plek { position: absolute; width: 0; height: 0; pointer-events: none; }
.fp-metal__ripple {
  position: absolute; left: -0.625rem; top: -0.625rem;
  display: block; width: 1.25rem; height: 1.25rem;
  border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--foreground) 40%, transparent) 0%, transparent 70%);
}

/* ── LiquidGlassButton ──────────────────────────────────────────────────── */

.fp-glass {
  position: relative; isolation: isolate;
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
  appearance: none; border: 0; background: transparent;
  cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-weight: 500; line-height: 1;
  color: var(--foreground);
  border-radius: 999px;
  transition: transform var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-glass--md { height: 2.25rem; padding: 0 1rem; font-size: 0.875rem; }
.fp-glass--lg { height: 2.75rem; padding: 0 1.5rem; font-size: 0.9375rem; }
.fp-glass--xl { height: 3.5rem; padding: 0 2.5rem; font-size: 1rem; }
.fp-glass:hover { transform: scale(1.05); }
.fp-glass[data-pressed] { transform: scale(0.98); }
.fp-glass:disabled { opacity: 0.5; cursor: default; }
.fp-glass:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* Lichtval: binnenschaduwen op de tekstkleur — licht op donker, donker op licht. */
.fp-glass__rand {
  position: absolute; inset: 0; z-index: -1;
  border-radius: 999px;
  box-shadow:
    0 0 6px color-mix(in srgb, var(--foreground) 3%, transparent),
    0 2px 6px color-mix(in srgb, var(--foreground) 8%, transparent),
    inset 3px 3px 0.5px -3px color-mix(in srgb, var(--foreground) 90%, transparent),
    inset -3px -3px 0.5px -3px color-mix(in srgb, var(--foreground) 85%, transparent),
    inset 1px 1px 1px -0.5px color-mix(in srgb, var(--foreground) 60%, transparent),
    inset -1px -1px 1px -0.5px color-mix(in srgb, var(--foreground) 60%, transparent),
    inset 0 0 6px 6px color-mix(in srgb, var(--foreground) 12%, transparent),
    inset 0 0 2px 2px color-mix(in srgb, var(--foreground) 6%, transparent),
    0 0 12px color-mix(in srgb, var(--background) 15%, transparent);
}
/* De breking; zonder SVG-backdrop (Safari/Firefox) blijft deze blur staan. */
.fp-glass__laag {
  position: absolute; inset: 0; z-index: -2;
  border-radius: 999px; overflow: hidden;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}
.fp-glass__inhoud { position: relative; pointer-events: none; }
.fp-glass__filter { position: absolute; width: 0; height: 0; overflow: hidden; }

/* ── DancingLetters ─────────────────────────────────────────────────────── */

.fp-dance {
  display: inline-flex; flex-wrap: wrap; justify-content: center;
  perspective: 1000px;
  user-select: none;
  color: inherit; font: inherit; font-weight: 700;
}
.fp-dance__letter {
  position: relative; display: inline-block;
  transform-style: preserve-3d;
  cursor: pointer; white-space: pre;
}
.fp-dance__letter[data-bezig] { z-index: 1; }

/* ── ShiningText ────────────────────────────────────────────────────────── */

.fp-shine {
  display: inline-block;
  color: transparent;
  background-image: linear-gradient(110deg, var(--muted-foreground) 35%, var(--foreground) 50%, var(--muted-foreground) 75%);
  background-size: 200% 100%;
  -webkit-background-clip: text;
  background-clip: text;
}

/* ── Marquee ────────────────────────────────────────────────────────────── */

.fp-marquee {
  --fp-marquee-gap: 2rem;
  display: flex; width: 100%; overflow: hidden;
}
.fp-marquee--verticaal { flex-direction: column; }
.fp-marquee__band {
  display: flex; flex-shrink: 0;
  gap: var(--fp-marquee-gap);
  padding-right: var(--fp-marquee-gap); /* zodat de naad tussen kopie A en B dezelfde ruimte heeft */
  will-change: transform;
}
.fp-marquee--verticaal .fp-marquee__band { flex-direction: column; padding-right: 0; padding-bottom: var(--fp-marquee-gap); }
.fp-marquee__item { display: flex; flex-shrink: 0; align-items: center; }
.fp-marquee--verticaal .fp-marquee__item { width: 100%; }

/* ── ImagesBadge ────────────────────────────────────────────────────────── */

.fp-badge {
  display: inline-flex; align-items: center;
  border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
  background: color-mix(in srgb, var(--card) 90%, transparent);
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
  box-shadow: var(--shadow-overlay);
  color: var(--foreground);
  user-select: none; cursor: default;
}
.fp-badge--tapbaar { cursor: pointer; }
.fp-badge--tapbaar:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-badge--sm { height: 2.25rem; padding: 0 0.875rem 0 0.5rem; gap: 0.5rem; font-size: 0.6875rem; }
.fp-badge--md { height: 2.75rem; padding: 0 1rem 0 0.625rem; gap: 0.625rem; font-size: 0.75rem; }
.fp-badge--lg { height: 3.5rem; padding: 0 1.25rem 0 0.75rem; gap: 0.75rem; font-size: 0.875rem; }

.fp-badge__strook { position: relative; flex-shrink: 0; }
.fp-badge__kaart {
  position: absolute; top: 0.375rem; left: 0;
  width: var(--fp-badge-px); height: var(--fp-badge-px);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; overflow: hidden;
  border: 2px solid var(--card);
  box-shadow: 0 2px 8px color-mix(in srgb, var(--foreground) 18%, transparent);
  background: var(--muted);
}
.fp-badge__kaart img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fp-badge__kaart--circle, .fp-badge__kaart--teller { border-radius: 50%; }
.fp-badge__kaart--rounded { border-radius: var(--radius); }
.fp-badge__kaart--square { border-radius: calc(var(--radius) / 3); }
.fp-badge__rest { font-weight: 600; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
.fp-badge__label { white-space: nowrap; font-weight: 500; line-height: 1; color: color-mix(in srgb, var(--foreground) 80%, transparent); }

/* ── Timeline ───────────────────────────────────────────────────────────── */

.fp-timeline {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column;
  color: var(--foreground);
}
.fp-timeline--compact { gap: 0.5rem; }
.fp-timeline--default { gap: 1rem; }
.fp-timeline--spacious { gap: 2rem; }
.fp-timeline--horizontal { flex-direction: row; overflow-x: auto; padding-bottom: 1rem; scrollbar-width: thin; }

.fp-timeline__item { position: relative; display: flex; gap: 0.75rem; padding-bottom: 0.5rem; }
.fp-timeline--horizontal .fp-timeline__item { flex-direction: column; min-width: 16rem; flex-shrink: 0; }

/* De lijn naar de volgende stap draagt de status van deze stap. */
.fp-timeline__lijn { position: absolute; background: var(--border); }
.fp-timeline--vertical .fp-timeline__lijn { left: 0.75rem; top: 2.25rem; bottom: -1rem; width: 1px; }
.fp-timeline--horizontal .fp-timeline__lijn { top: 0.75rem; left: 2rem; right: -1rem; height: 1px; }
.fp-timeline__item[data-status="klaar"] .fp-timeline__lijn,
.fp-timeline__item[data-status="bezig"] .fp-timeline__lijn { background: var(--primary); }
.fp-timeline__item[data-status="wacht"] .fp-timeline__lijn { background: color-mix(in srgb, var(--muted-foreground) 30%, transparent); }
.fp-timeline__item[data-status="fout"] .fp-timeline__lijn { background: var(--danger); }

.fp-timeline__stip-vak { position: relative; z-index: 1; display: flex; flex-shrink: 0; }
.fp-timeline__stip {
  display: flex; align-items: center; justify-content: center;
  width: 1.5rem; height: 1.5rem; flex-shrink: 0;
  border-radius: 50%; border: 2px solid var(--border);
  background: var(--background); color: var(--muted-foreground);
  font-size: 0.75rem; font-weight: 500;
}
.fp-timeline__stipje { display: block; width: 0.5rem; height: 0.5rem; border-radius: 50%; background: currentColor; }
.fp-timeline__item[data-status="klaar"] .fp-timeline__stip { border-color: var(--primary); background: var(--primary); color: var(--primary-foreground); }
.fp-timeline__item[data-status="bezig"] .fp-timeline__stip { border-color: var(--primary); color: var(--primary); }
.fp-timeline__item[data-status="wacht"] .fp-timeline__stip { border-color: color-mix(in srgb, var(--muted-foreground) 30%, transparent); }
.fp-timeline__item[data-status="fout"] .fp-timeline__stip { border-color: var(--danger); background: var(--danger); color: var(--primary-foreground); }

.fp-timeline__inhoud { display: flex; flex-direction: column; gap: 0.375rem; min-width: 0; flex: 1; }
.fp-timeline__kop { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.5rem; }
.fp-timeline__titel { margin: 0; font: inherit; font-weight: 500; line-height: 1.25; }
.fp-timeline__tekst { margin: 0; font-size: 0.875rem; line-height: 1.55; color: var(--muted-foreground); }
.fp-timeline__tijd { flex-shrink: 0; font-size: 0.75rem; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
.fp-timeline__extra { margin-top: 0.375rem; }

/* ── Accordion ──────────────────────────────────────────────────────────── */

.fp-acc { width: 100%; color: var(--foreground); }
.fp-acc__item { border-bottom: 1px solid var(--border); }
.fp-acc__kop { margin: 0; font: inherit; }
.fp-acc__knop {
  display: flex; align-items: flex-start; gap: 1rem; width: 100%;
  padding: 1rem 0;
  appearance: none; background: transparent; border: 0;
  cursor: pointer; text-align: left;
  font: inherit; color: inherit;
  transition: color var(--motion-default-duration) var(--motion-default);
}
.fp-acc__knop:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-acc__titel { flex: 1; }
.fp-acc__vak { overflow: hidden; }
.fp-acc__inhoud { padding: 0 0 1.5rem; color: var(--muted-foreground); line-height: 1.6; }

/* display: de bron — genummerd, kapitalen, gedempt tot je hem opent. */
.fp-acc--display .fp-acc__knop { padding: 1.25rem 0 1.25rem 1.5rem; color: color-mix(in srgb, var(--foreground) 22%, transparent); }
.fp-acc--display .fp-acc__knop:hover { color: color-mix(in srgb, var(--foreground) 55%, transparent); }
.fp-acc--display .fp-acc__item[data-open] .fp-acc__knop { color: var(--primary); }
.fp-acc--display .fp-acc__nummer { font-size: 0.75rem; line-height: 1.6; font-variant-numeric: tabular-nums; }
.fp-acc--display .fp-acc__titel { text-transform: uppercase; font-size: clamp(1.75rem, 4.5vw, 3rem); line-height: 1.05; letter-spacing: -0.01em; }
.fp-acc--display .fp-acc__inhoud { padding: 0 0 1.5rem 3.5rem; }
@media (min-width: 768px) {
  .fp-acc--display .fp-acc__knop { padding-left: 3.5rem; }
  .fp-acc--display .fp-acc__inhoud { padding: 0 5rem 1.5rem; }
}

/* plain: lijstje met chevron. */
.fp-acc--plain .fp-acc__knop { align-items: center; font-weight: 500; }
.fp-acc--plain .fp-acc__knop:hover { color: var(--primary); }
.fp-acc__chevron { flex-shrink: 0; transition: transform var(--motion-default-duration) var(--motion-default); }
.fp-acc__item[data-open] .fp-acc__chevron { transform: rotate(180deg); }

/* ── LinkPreview ────────────────────────────────────────────────────────── */

.fp-lpreview { position: relative; display: inline-block; }
.fp-lpreview__link { color: inherit; font-weight: 600; text-decoration: underline; text-decoration-color: color-mix(in srgb, currentColor 35%, transparent); text-underline-offset: 0.15em; }
.fp-lpreview__link:hover { text-decoration-color: currentColor; }
.fp-lpreview__link:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; border-radius: calc(var(--radius) / 3); }
/* Het kaartje hangt boven de link, gecentreerd; transform-origin onderaan zodat het uit de link groeit. */
.fp-lpreview__kaart {
  position: absolute; bottom: calc(100% + 0.625rem); left: 50%;
  margin-left: calc(var(--fp-lpreview-w, 200px) / -2 - 0.25rem);
  z-index: 20;
  display: block; padding: 0.25rem;
  background: var(--card); border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-overlay);
  transform-origin: bottom center;
  pointer-events: none;
  font-size: 0;
}
.fp-lpreview__kaart img { display: block; border-radius: calc(var(--radius) - 0.25rem); object-fit: cover; }

/* ── RadioGlider ────────────────────────────────────────────────────────── */

.fp-glider { position: relative; display: flex; flex-direction: column; padding-left: 0.75rem; color: var(--foreground); }
.fp-glider__optie { position: relative; z-index: 2; padding: 0.25rem 0; }
.fp-glider__input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; z-index: 3; appearance: none; }
.fp-glider__input:disabled { cursor: default; }
.fp-glider__label {
  display: block; padding: 0.5rem 0.25rem; cursor: pointer;
  font-size: 1.25rem; color: var(--muted-foreground);
  transition: color var(--motion-default-duration) var(--motion-default);
}
.fp-glider__input:checked + .fp-glider__label { color: var(--primary); }
.fp-glider__input:disabled + .fp-glider__label { opacity: 0.5; cursor: default; }
.fp-glider__input:focus-visible + .fp-glider__label { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; border-radius: calc(var(--radius) / 2); }

/* De rail links: 1px, vervagend naar boven en onder; de streep is 1/n hoog. */
.fp-glider__rail {
  position: absolute; left: 0; top: 0; bottom: 0; width: 1px;
  background: linear-gradient(to bottom, transparent, var(--border), transparent);
}
.fp-glider__streep {
  position: relative; display: block; width: 100%;
  height: calc(100% / var(--fp-glider-n, 3));
  background: linear-gradient(to bottom, transparent, var(--primary), transparent);
  transition: transform var(--motion-playful-duration) var(--motion-playful);
}
.fp-glider__gloed {
  position: absolute; top: 50%; left: 0; width: 300%; height: 60%;
  transform: translateY(-50%);
  background: var(--primary); filter: blur(10px);
}
.fp-glider__waas {
  position: absolute; left: 0; top: 0; height: 100%; width: 9rem;
  background: linear-gradient(to right, color-mix(in srgb, var(--primary) 10%, transparent), transparent);
}

/* ── Toggle ─────────────────────────────────────────────────────────────── */

.fp-toggle {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
  appearance: none; cursor: pointer; user-select: none; touch-action: manipulation;
  font: inherit; font-size: 0.875rem; font-weight: 500;
  color: var(--foreground); background: transparent;
  border: 1px solid transparent; border-radius: var(--radius);
  transition:
    background-color var(--motion-instant-duration) var(--motion-instant),
    color var(--motion-instant-duration) var(--motion-instant),
    border-color var(--motion-instant-duration) var(--motion-instant),
    transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-toggle--sm { height: 2.25rem; padding: 0 0.625rem; }
.fp-toggle--md { height: 2.5rem; padding: 0 0.75rem; }
.fp-toggle--lg { height: 2.75rem; padding: 0 1.25rem; }
.fp-toggle--outline { border-color: var(--border); }
.fp-toggle:hover { background: var(--muted); color: var(--muted-foreground); }
.fp-toggle[data-on] { background: color-mix(in srgb, var(--primary) 14%, transparent); color: var(--foreground); }
.fp-toggle[data-pressed] { transform: scale(0.96); }
.fp-toggle:disabled { opacity: 0.5; cursor: default; pointer-events: none; }
.fp-toggle:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-toggle-groep { display: inline-flex; align-items: center; gap: 0.25rem; }
.fp-toggle-groep--vertical { flex-direction: column; align-items: stretch; }
.fp-toggle-groep--vertical .fp-toggle { width: 100%; }

/* ── FileDropzone ───────────────────────────────────────────────────────── */

.fp-drop { width: 100%; display: flex; flex-direction: column; gap: 0.75rem; color: var(--foreground); }
.fp-drop__vak {
  position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 2.5rem 1.5rem; cursor: pointer; text-align: center;
  border: 2px dashed color-mix(in srgb, var(--muted-foreground) 25%, transparent);
  border-radius: var(--radius);
  transition:
    border-color var(--motion-default-duration) var(--motion-default),
    background-color var(--motion-default-duration) var(--motion-default);
}
.fp-drop__vak:hover { border-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent); background: color-mix(in srgb, var(--muted) 30%, transparent); }
.fp-drop__vak[data-boven] { border-color: var(--primary); background: color-mix(in srgb, var(--primary) 5%, transparent); }
.fp-drop__vak[aria-disabled] { opacity: 0.5; pointer-events: none; }
.fp-drop__vak:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-drop__icoon { display: block; margin-bottom: 0.75rem; color: var(--muted-foreground); transition: color var(--motion-default-duration) var(--motion-default); }
.fp-drop__vak[data-boven] .fp-drop__icoon { color: var(--primary); }
/* De tekst wisselt in één vak: geen sprong bij "sleep" → "laat los". */
.fp-drop__tekst-vak { display: grid; }
.fp-drop__tekst { grid-area: 1 / 1; font-size: 0.875rem; font-weight: 500; }
.fp-drop__sub { margin-top: 0.25rem; font-size: 0.75rem; color: var(--muted-foreground); }
.fp-drop__fout { margin: 0; font-size: 0.875rem; color: var(--danger); }
.fp-drop__lijst { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.fp-drop__rij {
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--border); border-radius: calc(var(--radius) * 0.75);
  background: color-mix(in srgb, var(--muted) 50%, transparent);
}
.fp-drop__rij-icoon { display: flex; color: var(--muted-foreground); }
.fp-drop__rij-tekst { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.fp-drop__naam { font-size: 0.875rem; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-drop__maat { font-size: 0.75rem; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }
.fp-drop__verwijder {
  display: flex; flex-shrink: 0; padding: 0.25rem;
  appearance: none; border: 0; background: transparent; cursor: pointer;
  color: var(--muted-foreground); border-radius: calc(var(--radius) / 2);
  transition:
    background-color var(--motion-instant-duration) var(--motion-instant),
    color var(--motion-instant-duration) var(--motion-instant),
    transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-drop__verwijder:hover { background: var(--muted); color: var(--foreground); transform: scale(1.1); }
.fp-drop__verwijder[data-pressed] { transform: scale(0.9); }
.fp-drop__verwijder:focus-visible { outline: 2px solid var(--ring, var(--info)); }

/* ── ColorPicker ────────────────────────────────────────────────────────── */

.fp-picker { position: relative; display: grid; place-items: center; width: 16rem; height: 16rem; }
.fp-picker__ring { position: absolute; inset: 0; border-radius: 50%; }
.fp-picker__schijf { position: absolute; inset: 0; border-radius: 50%; background: var(--card); }
.fp-picker__vlak { position: relative; z-index: 1; display: grid; place-items: center; width: 100%; height: 100%; border-radius: 50%; }
.fp-picker__stip {
  position: absolute; left: 50%; top: 50%;
  width: 0.875rem; height: 0.875rem; margin: -0.4375rem 0 0 -0.4375rem;
  appearance: none; border: 0; padding: 0; cursor: pointer;
  border-radius: 50%;
  box-shadow: 0 1px 2px color-mix(in srgb, var(--foreground) 20%, transparent);
}
.fp-picker__stip:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-picker__stip[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--card), 0 0 0 3.5px var(--foreground); }
.fp-picker__stip-ring {
  position: absolute; inset: -0.25rem; border-radius: 50%;
  border: 2px solid currentColor; opacity: 0;
  transition: opacity var(--motion-instant-duration) var(--motion-instant);
}
.fp-picker__stip:hover .fp-picker__stip-ring { opacity: 0.4; }

/* ── Combobox ───────────────────────────────────────────────────────────── */

.fp-combo { display: flex; flex-direction: column; gap: 0.375rem; width: 100%; max-width: 20rem; }
.fp-combo .fp-popover-anchor { display: block; }
.fp-combo__knop { width: 100%; justify-content: space-between; gap: 0.5rem; font-weight: 400; }
.fp-combo__knop svg { flex-shrink: 0; color: var(--muted-foreground); }
.fp-combo__waarde { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-combo__waarde--leeg { color: var(--muted-foreground); }
.fp-combo .fp-popover { width: 100%; padding: 0; }
.fp-combo__paneel { display: flex; flex-direction: column; }
.fp-combo__zoekrij { display: flex; align-items: center; gap: 0.5rem; padding: 0 0.75rem; border-bottom: 1px solid var(--border); color: var(--muted-foreground); }
.fp-combo__zoek {
  flex: 1; min-width: 0; height: 2.5rem;
  appearance: none; border: 0; background: transparent; outline: none;
  font: inherit; font-size: 0.875rem; color: var(--foreground);
}
.fp-combo__zoek::placeholder { color: var(--muted-foreground); }
.fp-combo__lijst { list-style: none; margin: 0; padding: 0.25rem; max-height: 18rem; overflow-y: auto; }
.fp-combo__optie {
  display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
  padding: 0.375rem 0.5rem; cursor: pointer;
  font-size: 0.875rem; color: var(--foreground);
  border-radius: calc(var(--radius) / 2);
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-combo__optie[data-actief], .fp-combo__optie:hover { background: var(--muted); }
.fp-combo__optie[aria-disabled] { opacity: 0.5; pointer-events: none; }
.fp-combo__optie-tekst { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-combo__optie svg { flex-shrink: 0; color: var(--primary); }
.fp-combo__leeg { padding: 1.5rem 0; text-align: center; font-size: 0.875rem; color: var(--muted-foreground); }

/* ── Calendar (één datum) ───────────────────────────────────────────────── */

.fp-cal1 { display: inline-flex; flex-direction: column; gap: 0.5rem; padding: 0.75rem; color: var(--foreground); }
.fp-cal1__kop { display: flex; align-items: center; gap: 0.25rem; }
.fp-cal1__titel { flex: 1; display: flex; justify-content: center; align-items: center; gap: 0.375rem; font-size: 0.875rem; font-weight: 500; }
.fp-cal1__label { padding: 0 0.25rem; }
.fp-cal1__select {
  appearance: none; -webkit-appearance: none;
  font: inherit; font-size: 0.875rem; font-weight: 500; color: var(--foreground);
  background: var(--muted); border: 1px solid var(--border); border-radius: calc(var(--radius) / 2);
  padding: 0.25rem 1.5rem 0.25rem 0.5rem; cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: calc(100% - 0.8rem) 55%, calc(100% - 0.55rem) 55%;
  background-size: 0.25rem 0.25rem; background-repeat: no-repeat;
}
.fp-cal1__select:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-cal1__pijl {
  display: flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem;
  appearance: none; border: 0; background: transparent; cursor: pointer;
  color: var(--muted-foreground); border-radius: calc(var(--radius) / 2);
  transition: background-color var(--motion-instant-duration) var(--motion-instant), color var(--motion-instant-duration) var(--motion-instant), transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-cal1__pijl:hover { background: var(--muted); color: var(--foreground); }
.fp-cal1__pijl[data-pressed] { transform: scale(0.92); }
.fp-cal1__pijl:disabled { opacity: 0.3; cursor: default; }
.fp-cal1__pijl:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-cal1__raster { display: grid; grid-template-columns: repeat(7, 2.25rem); gap: 0.125rem; }
.fp-cal1__dagnaam { display: flex; align-items: center; justify-content: center; height: 2rem; font-size: 0.75rem; font-weight: 500; color: var(--muted-foreground); }
.fp-cal1__dag {
  position: relative; display: flex; align-items: center; justify-content: center;
  width: 2.25rem; height: 2.25rem;
  appearance: none; border: 1px solid transparent; background: transparent; cursor: pointer;
  font: inherit; font-size: 0.875rem; color: var(--foreground);
  border-radius: calc(var(--radius) / 2);
  font-variant-numeric: tabular-nums;
  transition: background-color var(--motion-instant-duration) var(--motion-instant), color var(--motion-instant-duration) var(--motion-instant), transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-cal1__dag:hover { background: var(--muted); }
.fp-cal1__dag[data-pressed] { transform: scale(0.94); }
.fp-cal1__dag[data-buiten] { color: var(--muted-foreground); opacity: 0.55; }
.fp-cal1__dag:disabled { opacity: 0.3; cursor: default; text-decoration: line-through; }
.fp-cal1__dag[data-gekozen] { background: var(--primary); color: var(--primary-foreground); }
/* Vandaag: een stip onder het cijfer; op de gekozen dag in de tegenkleur. */
.fp-cal1__dag[data-vandaag]::after { content: ""; position: absolute; bottom: 0.25rem; left: 50%; width: 3px; height: 3px; border-radius: 50%; background: var(--primary); transform: translateX(-50%); }
.fp-cal1__dag[data-vandaag][data-gekozen]::after { background: var(--primary-foreground); }
.fp-cal1__dag:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; z-index: 1; }

/* ── Kbd ────────────────────────────────────────────────────────────────── */

.fp-kbd {
  display: inline-flex; align-items: center; justify-content: center;
  height: 1.25rem; min-width: 1.25rem; padding: 0 0.25rem;
  font: inherit; font-size: 0.6875rem; font-weight: 500; line-height: 1;
  color: var(--muted-foreground); background: var(--muted);
  border: 1px solid var(--border); border-radius: calc(var(--radius) / 2);
  pointer-events: none; user-select: none;
}
.fp-kbd-groep { display: inline-flex; align-items: center; gap: 0.25rem; }

/* ── SearchField ────────────────────────────────────────────────────────── */

.fp-search { width: 100%; }
.fp-search--label-verborgen .fp-field__label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.fp-search .fp-input--met-trailing { padding-right: 4.25rem; }

/* ── TextRoll ───────────────────────────────────────────────────────────── */

.fp-roll { position: relative; display: inline-block; overflow: hidden; line-height: 0.85; padding-bottom: 0.08em; cursor: pointer; }
.fp-roll__laag { display: block; white-space: pre; }
.fp-roll__laag--onder { position: absolute; inset: 0; }
.fp-roll__letter { display: inline-block; will-change: transform; }

/* ── Menubar ────────────────────────────────────────────────────────────── */

.fp-mbar {
  display: inline-flex; align-items: center; gap: 0.25rem;
  height: 2.5rem; padding: 0.25rem;
  background: var(--background); color: var(--foreground);
  border: 1px solid var(--border); border-radius: var(--radius);
}
.fp-mbar__popover .fp-popover { min-width: 12rem; padding: 0.25rem; }
.fp-mbar__trigger {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.375rem 0.75rem;
  appearance: none; border: 0; background: transparent; cursor: default;
  font: inherit; font-size: 0.875rem; font-weight: 500; color: var(--foreground);
  border-radius: calc(var(--radius) / 2); user-select: none;
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-mbar__trigger:hover, .fp-mbar__trigger[data-open], .fp-mbar__trigger:focus-visible { background: var(--muted); outline: none; }
.fp-mbar__menu { list-style: none; margin: 0; padding: 0; }
.fp-mbar__item {
  position: relative; display: flex; align-items: center; gap: 0.5rem;
  padding: 0.375rem 0.5rem; cursor: default; user-select: none;
  font-size: 0.875rem; border-radius: calc(var(--radius) / 2);
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-mbar__item--vink { padding-left: 2rem; }
.fp-mbar__item:hover, .fp-mbar__item[data-actief] { background: var(--muted); }
.fp-mbar__item[aria-disabled] { opacity: 0.5; pointer-events: none; }
.fp-mbar__vink { position: absolute; left: 0.5rem; display: flex; width: 0.875rem; height: 0.875rem; align-items: center; justify-content: center; }
.fp-mbar__stip { width: 0.5rem; height: 0.5rem; border-radius: 50%; background: currentColor; }
.fp-mbar__icoon { display: flex; width: 1rem; height: 1rem; flex-shrink: 0; color: var(--muted-foreground); }
.fp-mbar__label { flex: 1; }
.fp-mbar__sneltoets { margin-left: auto; font-size: 0.75rem; letter-spacing: 0.1em; color: var(--muted-foreground); }
.fp-mbar__scheiding { height: 1px; margin: 0.25rem -0.25rem; background: var(--border); }
.fp-mbar__kopje { padding: 0.375rem 0.5rem; font-size: 0.75rem; font-weight: 600; color: var(--muted-foreground); }

/* ── ReadingProgress ────────────────────────────────────────────────────── */

.fp-lees { display: flex; align-items: center; gap: 0.75rem; width: 100%; color: var(--foreground); }
.fp-lees__rail {
  flex: 1; min-width: 0; padding: 2px;
  background: var(--muted); border-radius: calc(var(--radius) / 2);
  box-shadow: inset 0 1px 2px color-mix(in srgb, var(--foreground) 7%, transparent);
}
.fp-lees__vul { display: block; height: 3px; width: 100%; transform-origin: left; background: var(--primary); border-radius: calc(var(--radius) / 4); }
/* Drie teksten in één vak: "nog 4 min" → "Einde · 6 min" verspringt niets. */
.fp-lees__tekst { display: grid; justify-items: end; flex-shrink: 0; font-size: 0.6875rem; font-variant-numeric: tabular-nums; }
.fp-lees__tekst > * { grid-area: 1 / 1; white-space: nowrap; }
.fp-lees__meet { visibility: hidden; display: flex; align-items: center; gap: 0.25rem; }
.fp-lees__over { color: var(--muted-foreground); }
.fp-lees__klaar { display: flex; align-items: center; gap: 0.25rem; color: var(--foreground); }
.fp-lees__vinkvak { display: inline-block; width: 0.75rem; height: 0.75rem; flex-shrink: 0; }

/* ── PhoneMockup ────────────────────────────────────────────────────────── */

.fp-phone {
  --fp-phone-frame: var(--foreground);
  --fp-phone-screen: var(--background);
  display: inline-block; box-sizing: border-box;
  /* De schaal is een transform; de layout-maat schaalt mee zodat er geen leeg vlak overblijft. */
  width: calc(var(--fp-phone-w) * var(--fp-phone-scale, 1)); height: calc(var(--fp-phone-h) * var(--fp-phone-scale, 1));
}
.fp-phone__lijst { transform: scale(var(--fp-phone-scale, 1)); transform-origin: top left; }
.fp-phone__lijst {
  position: relative; box-sizing: border-box; overflow: hidden;
  width: var(--fp-phone-w); height: var(--fp-phone-h); padding: var(--fp-phone-bezel);
  border-radius: calc(var(--fp-phone-r) + var(--fp-phone-bezel));
  background: linear-gradient(135deg, color-mix(in srgb, var(--fp-phone-frame) 92%, var(--background)) 0%, var(--fp-phone-frame) 40%, color-mix(in srgb, var(--fp-phone-frame) 86%, var(--background)) 100%);
}
.fp-phone--schaduw .fp-phone__lijst { box-shadow: var(--shadow-overlay); }
.fp-phone__scherm {
  position: relative; overflow: hidden; width: 100%; height: 100%;
  border-radius: var(--fp-phone-r);
  background: var(--fp-phone-screen);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fp-phone-frame) 6%, transparent), inset 0 10px 20px color-mix(in srgb, var(--fp-phone-frame) 25%, transparent);
}
.fp-phone__wallpaper { position: absolute; inset: 0; background-position: center; background-repeat: no-repeat; }
.fp-phone__uitsnede {
  position: absolute; left: 50%; transform: translateX(-50%); z-index: 2;
  width: var(--fp-phone-cut-w); height: var(--fp-phone-cut-h); border-radius: var(--fp-phone-cut-r);
  background: var(--fp-phone-frame);
}
.fp-phone__uitsnede--island { top: 12px; }
.fp-phone__uitsnede--notch { top: 8px; border-top-left-radius: 0; border-top-right-radius: 0; }
.fp-phone__inhoud { position: absolute; inset: var(--fp-phone-top) 0 var(--fp-phone-bottom) 0; overflow: hidden; z-index: 1; display: flex; flex-direction: column; }
.fp-phone__thuis {
  position: absolute; bottom: 8px; left: 50%; transform: translateX(-50%); z-index: 3;
  width: 34%; max-width: 140px; height: 5px; border-radius: 999px;
  background: color-mix(in srgb, var(--foreground) 60%, transparent); pointer-events: none;
}

/* ── HoverExpandGallery ─────────────────────────────────────────────────── */

.fp-hgal { display: flex; align-items: stretch; justify-content: center; gap: 0.25rem; width: 100%; }
.fp-hgal__strook {
  position: relative; flex: 1 1 0; min-width: 2.5rem; overflow: hidden;
  appearance: none; border: 0; padding: 0; cursor: pointer;
  border-radius: calc(var(--radius) * 2); background: var(--muted);
}
.fp-hgal__strook[data-open] { flex: 6 1 0; }
.fp-hgal__strook:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-hgal__beeld { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.fp-hgal__waas {
  position: absolute; inset: 0; display: flex; align-items: flex-end; justify-content: flex-end; padding: 1rem;
  background: linear-gradient(to top, color-mix(in srgb, var(--background) 60%, transparent), transparent 50%);
}
.fp-hgal__onderschrift { font-size: 0.75rem; color: color-mix(in srgb, var(--foreground) 70%, transparent); }

/* ── HoverPreviewList ───────────────────────────────────────────────────── */

.fp-hpl { position: relative; width: 100%; overflow: hidden; color: var(--foreground); background: var(--card); }
.fp-hpl__lijst { position: relative; z-index: 3; list-style: none; margin: 0; padding: 0; }
.fp-hpl__rij {
  display: grid; grid-template-columns: 1fr 1fr 2fr; gap: 1rem;
  padding: 0.75rem 1.5rem; cursor: default;
  transition: color var(--motion-default-duration) var(--motion-default);
}
.fp-hpl__rij[data-actief] { color: var(--background); }
.fp-hpl__rij[role="button"] { cursor: pointer; }
.fp-hpl__rij:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: -2px; }
.fp-hpl__cel { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.1em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* De balk onder de tekst: tekstkleur, schuift met y; hoogte is de gemeten rijhoogte. */
.fp-hpl__balk { position: absolute; left: 0; right: 0; top: 0; z-index: 1; height: var(--fp-hpl-rij, 0px); background: var(--foreground); pointer-events: none; }
.fp-hpl__beelden { position: absolute; inset: 0; z-index: 2; pointer-events: none; mix-blend-mode: difference; }
.fp-hpl__beeld {
  position: absolute; left: 35%; top: 50%; transform: translateY(-50%);
  width: calc(19.5rem * var(--fp-hpl-schaal, 1)); height: calc(22.5rem * var(--fp-hpl-schaal, 1));
  will-change: clip-path, opacity;
}
.fp-hpl__beeld img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* Touch: gewone lijst met beeld ernaast. */
.fp-hpl--touch { list-style: none; margin: 0; padding: 0; }
.fp-hpl__kaart { display: flex; border-bottom: 1px solid var(--border); }
.fp-hpl__kaart-tekst { display: flex; flex-direction: column; gap: 0.25rem; width: 50%; padding: 1rem; }
.fp-hpl__kaart .fp-hpl__titel { margin: 0; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.875rem; }
.fp-hpl__kaart .fp-hpl__meta { margin: 0; text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.75rem; color: var(--muted-foreground); }
.fp-hpl__kaart .fp-hpl__tekst { margin: 0; font-size: 0.75rem; line-height: 1.6; color: var(--muted-foreground); }
.fp-hpl__kaart-beeld { width: 50%; aspect-ratio: 3 / 4; object-fit: cover; }

/* ── InfiniteSlider ─────────────────────────────────────────────────────── */

.fp-slider { position: relative; width: 100%; overflow: hidden; background: var(--background); color: var(--foreground); touch-action: none; }
.fp-slider__reeks { position: absolute; inset: 0; }
.fp-slider__kaart { position: absolute; inset: 0 auto auto 0; width: 100%; height: 100%; overflow: hidden; will-change: transform; }
.fp-slider__kaart img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.5); will-change: transform; }
.fp-slider__minimap { position: absolute; right: 1.5rem; top: 50%; transform: translateY(-50%); display: none; gap: 1rem; height: 250px; }
@media (min-width: 900px) { .fp-slider__minimap { display: flex; } }
.fp-slider__minimap-beelden { position: relative; width: 160px; height: 250px; overflow: hidden; border-radius: var(--radius); }
.fp-slider__minimap-beeld { position: absolute; inset: 0 auto auto 0; width: 100%; height: 250px; overflow: hidden; will-change: transform; }
.fp-slider__minimap-beeld img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.5); will-change: transform; }
.fp-slider__minimap-info { position: relative; width: 200px; height: 250px; overflow: hidden; }
.fp-slider__info { position: absolute; inset: 0 auto auto 0; width: 100%; height: 250px; display: flex; flex-direction: column; justify-content: center; gap: 0.5rem; will-change: transform; }
.fp-slider__info-rij { display: flex; justify-content: space-between; gap: 1rem; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.08em; color: color-mix(in srgb, var(--foreground) 80%, transparent); }
.fp-slider__info-rij:first-child { font-weight: 600; color: var(--foreground); }

/* ── TextConvergence ────────────────────────────────────────────────────── */

/* De hoge sectie; het podium plakt erin. De lengte komt van de component (vh). */
.fp-converge { position: relative; width: 100%; min-height: var(--fp-converge-lengte, 650vh); background: var(--background); color: var(--foreground); }
.fp-converge__podium { position: sticky; top: 0; display: flex; align-items: center; width: 100%; height: var(--fp-converge-podium, 100dvh); overflow: hidden; }
/* De regel: begint één podiumbreedte rechts (padding) en is zo breed als zijn tekst. */
.fp-converge__regel {
  position: relative; display: flex; width: max-content; margin: 0; padding-left: 100%;
  white-space: nowrap; font: inherit; font-weight: 700; letter-spacing: -0.03em; line-height: 1.1;
  font-size: clamp(2.25rem, 9vw, 8rem); will-change: transform;
}
.fp-converge__char { display: inline-block; will-change: transform; }
.fp-converge__spatie { display: inline-block; width: 0.35em; }

/* ── HoverStack ─────────────────────────────────────────────────────────── */

.fp-hstack { position: relative; width: var(--fp-hstack-w); height: var(--fp-hstack-h); margin: 0 auto; max-width: 100%; }
.fp-hstack__kaart {
  position: absolute; top: 0; left: 0; display: flex; flex-direction: column; justify-content: space-between;
  width: var(--fp-hstack-kaart-w); height: var(--fp-hstack-kaart-h); padding: 1.5rem; box-sizing: border-box;
  background: var(--card); color: var(--card-foreground, var(--foreground));
  border: 1px solid color-mix(in srgb, currentColor 12%, transparent); border-radius: calc(var(--radius) * 3);
  transform-origin: center; will-change: transform; cursor: default; user-select: none; outline: none;
  transition: transform var(--motion-smooth-duration) var(--motion-smooth), box-shadow var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-hstack__kaart[data-actief] { box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 18%, transparent), 0 24px 48px -24px var(--shadow-overlay); }
.fp-hstack__kaart:focus-visible { box-shadow: 0 0 0 3px var(--ring); }
.fp-hstack__citaat { margin: 0; flex: 1; display: flex; align-items: center; max-width: 95%; font-size: 1.5rem; line-height: 1.05; letter-spacing: -0.03em; }
.fp-hstack__voet { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding-top: 1rem; border-top: 1px solid color-mix(in srgb, currentColor 15%, transparent); font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.16em; }
.fp-hstack__nummer { font-variant-numeric: tabular-nums; opacity: 0.55; }
.fp-hstack__tag { opacity: 0.8; }
/* Touch: geen waaier maar een kolom kaarten. */
.fp-hstack--lijst { display: flex; flex-direction: column; gap: 1.5rem; width: 100%; height: auto; }
.fp-hstack__kaart--los { position: relative; width: 100%; min-height: 62vw; height: auto; transform: none; transition: none; }

/* ── ShaderBackground ───────────────────────────────────────────────────── */

.fp-shader { display: block; width: 100%; height: 100%; }

/* ── BlurReveal ─────────────────────────────────────────────────────────── */

.fp-blurreveal { position: relative; overflow: hidden; width: 100%; height: 100%; color: var(--foreground); }
.fp-blurreveal__beeld { display: block; width: 100%; height: 100%; object-fit: var(--fp-blurreveal-fit, cover); }
/* Met aanwijzer: de foto zelf wordt de matte laag (iets vergroot tegen de blur-rand), het canvas tekent het scherpe spoor. */
.fp-blurreveal--actief .fp-blurreveal__beeld { filter: blur(var(--fp-blurreveal-blur, 22px)) saturate(0.9); transform: scale(1.06); }
.fp-blurreveal__doek { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }

/* ── Select ─────────────────────────────────────────────────────────────── */

.fp-select { display: flex; flex-direction: column; gap: 0.375rem; width: 100%; max-width: 20rem; }
.fp-select .fp-popover-anchor { display: block; }
.fp-select__knop { width: 100%; justify-content: space-between; gap: 0.5rem; font-weight: 400; }
.fp-select__knop svg { flex-shrink: 0; color: var(--muted-foreground); }
.fp-select__waarde { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-select__waarde--leeg { color: var(--muted-foreground); }
.fp-select .fp-popover { width: 100%; padding: 0; }
.fp-select__lijst { list-style: none; margin: 0; padding: 0.25rem; max-height: 18rem; overflow-y: auto; outline: none; }
.fp-select__optie {
  display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.5rem; border-radius: calc(var(--radius) * 0.75);
  font-size: 0.875rem; cursor: pointer; user-select: none; color: var(--foreground);
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-select__optie[data-actief], .fp-select__optie:hover { background: var(--muted); }
.fp-select__optie[aria-disabled] { opacity: 0.5; pointer-events: none; }
.fp-select__vink { display: inline-flex; width: 1rem; justify-content: center; color: var(--primary); }
.fp-select__optie-tekst { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── Textarea ───────────────────────────────────────────────────────────── */

.fp-textarea__veld {
  display: block; width: 100%; resize: vertical; line-height: 1.5; padding-top: 0.5rem; padding-bottom: 0.5rem;
  min-height: var(--fp-textarea-min, 3lh); max-height: var(--fp-textarea-max, 10lh);
  field-sizing: content; overflow: auto;
}
.fp-textarea__onder { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; }
.fp-textarea__teller { flex-shrink: 0; font-size: 0.75rem; color: var(--muted-foreground); font-variant-numeric: tabular-nums; }

/* ── RadioFluid ─────────────────────────────────────────────────────────── */

.fp-fluid { position: relative; display: flex; flex-direction: column; width: 18rem; max-width: 100%; user-select: none; color: var(--foreground); }
.fp-fluid__rij { position: relative; z-index: 1; }
.fp-fluid__vlak { position: absolute; inset: 0; border-radius: calc(var(--radius) * 0.75); pointer-events: none; }
.fp-fluid__vlak--gekozen { background: var(--muted); z-index: 0; }
.fp-fluid__vlak--hover { background: color-mix(in srgb, var(--muted) 55%, transparent); z-index: 0; }
.fp-fluid__input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; z-index: 2; appearance: none; }
.fp-fluid__input:disabled { cursor: default; }
.fp-fluid__label { position: relative; z-index: 1; display: flex; align-items: center; gap: 0.625rem; min-height: 2.25rem; padding: 0 0.625rem; pointer-events: none; }
.fp-fluid--compact .fp-fluid__label { min-height: 1.75rem; padding: 0 0.5rem; gap: 0.5rem; }
.fp-fluid__rondje {
  position: relative; display: inline-flex; flex-shrink: 0; width: 1rem; height: 1rem; border-radius: 50%;
  border: 1.5px solid var(--border);
  transition: border-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-fluid--compact .fp-fluid__rondje { width: 0.875rem; height: 0.875rem; }
.fp-fluid__rij[data-actief] .fp-fluid__rondje { border-color: var(--muted-foreground); }
.fp-fluid__rij[data-gekozen] .fp-fluid__rondje { border-color: transparent; }
.fp-fluid__stip { position: absolute; inset: 0; margin: auto; width: 0.5rem; height: 0.5rem; border-radius: 50%; background: var(--foreground); }
.fp-fluid--compact .fp-fluid__stip { width: 0.4375rem; height: 0.4375rem; }
.fp-fluid__tekst { display: flex; flex-direction: column; min-width: 0; }
.fp-fluid__naam { font-size: 0.875rem; color: var(--muted-foreground); transition: color var(--motion-instant-duration) var(--motion-instant); }
.fp-fluid__rij[data-actief] .fp-fluid__naam, .fp-fluid__rij[data-gekozen] .fp-fluid__naam { color: var(--foreground); }
.fp-fluid__rij[data-gekozen] .fp-fluid__naam { font-weight: 600; }
.fp-fluid__uitleg { font-size: 0.75rem; color: var(--muted-foreground); }
.fp-fluid__input:focus-visible + .fp-fluid__label { box-shadow: 0 0 0 2px var(--ring); border-radius: calc(var(--radius) * 0.75); }
.fp-fluid__input:disabled + .fp-fluid__label { opacity: 0.5; }

/* ── CouponReveal ───────────────────────────────────────────────────────── */

.fp-coupon {
  position: relative; display: block; width: 100%; max-width: 17.5rem; height: 3rem; padding: 0; border: 0; background: none;
  font: inherit; font-size: 0.875rem; font-weight: 500; color: var(--foreground); cursor: pointer; outline: none; overflow: visible; user-select: none;
  transition: transform var(--motion-instant-duration) var(--motion-instant);
}
.fp-coupon[data-pressed] { transform: scale(0.98); }
.fp-coupon:focus-visible .fp-coupon__onder { box-shadow: 0 0 0 2px var(--ring); }
/* Onderlaag: gestippelde rand in de primaire kleur; na kopiëren in succes. */
.fp-coupon__onder {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; border-radius: var(--radius);
  border: 2px dashed var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent);
  transition: border-color var(--motion-default-duration) var(--motion-default), color var(--motion-default-duration) var(--motion-default), background-color var(--motion-default-duration) var(--motion-default);
}
.fp-coupon[data-gekopieerd] .fp-coupon__onder { border-color: var(--success); color: var(--success); background: color-mix(in srgb, var(--success) 10%, transparent); }
.fp-coupon__code-rij, .fp-coupon__achter {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: 0.375rem; padding: 0 0.75rem; font-weight: 600; opacity: 0;
  transition: opacity var(--motion-default-duration) var(--motion-default);
}
.fp-coupon__code-rij[data-zichtbaar], .fp-coupon__achter[data-zichtbaar] { opacity: 1; }
.fp-coupon__code { padding: 0.125rem 0.5rem; border-radius: calc(var(--radius) * 0.5); font: inherit; font-size: 0.75rem; letter-spacing: 0.08em; background: color-mix(in srgb, currentColor 12%, transparent); }
/* Stickerlaag: geknipt langs de vouw (clip-path is verf). */
.fp-coupon__sticker {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; border-radius: var(--radius); pointer-events: none;
  background: var(--primary); color: var(--primary-foreground); font-weight: 600; box-shadow: 0 2px 6px var(--shadow-overlay);
  transition: clip-path var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-coupon__voor { padding: 0 1.5rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Het omgekrulde hoekje schuift met een transform mee met de vouw en verdwijnt na de pel. */
.fp-coupon__flap {
  position: absolute; top: -0.25rem; left: 0; width: 48px; height: 56px; pointer-events: none; color: var(--primary); transform-origin: bottom left;
  transform: translateX(var(--fp-coupon-flap-x, 0px));
  filter: drop-shadow(-3px 4px 5px var(--shadow-overlay));
  transition: transform var(--motion-smooth-duration) var(--motion-smooth), opacity var(--motion-default-duration) var(--motion-default);
}
.fp-coupon[data-gepeld] .fp-coupon__flap { opacity: 0; }
@media (prefers-reduced-motion: reduce) { .fp-coupon__sticker, .fp-coupon__flap { transition: none; } }

/* ── LogoStrip ──────────────────────────────────────────────────────────── */

.fp-logos { width: 100%; padding: 3rem 1.5rem; box-sizing: border-box; background: var(--background); color: var(--foreground); }
.fp-logos__kicker { margin: 0 0 2rem; text-align: center; font-size: 0.75rem; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted-foreground); }
.fp-logos__rij { list-style: none; margin: 0 auto; padding: 0; max-width: 64rem; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 1.5rem 2.5rem; }
@media (min-width: 40rem) { .fp-logos__rij { column-gap: 3.5rem; } }
.fp-logos__item { display: inline-flex; --fp-logo-h: 1.5rem; }
@media (min-width: 40rem) { .fp-logos__item { --fp-logo-h: 1.75rem; } }
.fp-logos__beeld, .fp-logos__item > svg {
  display: block; height: var(--fp-logo-h); width: auto; opacity: 0.5;
  transition: opacity var(--motion-instant-duration) var(--motion-instant), filter var(--motion-instant-duration) var(--motion-instant);
}
.fp-logos--grijs .fp-logos__beeld, .fp-logos--grijs .fp-logos__item > svg { filter: grayscale(1); }
.fp-logos--invert .fp-logos__beeld { filter: grayscale(1) invert(1); }
.fp-logos__item:hover .fp-logos__beeld, .fp-logos__item:hover > svg { opacity: 0.9; }

/* ── TraceTimeline ──────────────────────────────────────────────────────── */

/* De tijdas: --t (0–1) op de wortel drijft de afspeelkop, --p per rij de vulling — alleen transforms. */
.fp-trace {
  --fp-trace-pad: 0.75rem; --fp-trace-gutter: 6rem; --fp-trace-meta: 3.75rem;
  width: 100%; overflow: hidden; container-type: inline-size;
  background: var(--card); color: var(--card-foreground, var(--foreground)); border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.5);
  box-shadow: 0 1px 2px var(--shadow-overlay); font-variant-numeric: tabular-nums;
}
@container (min-width: 20rem) { .fp-trace { --fp-trace-gutter: 8.25rem; --fp-trace-meta: 5rem; } }
@container (min-width: 28rem) { .fp-trace { --fp-trace-gutter: var(--fp-trace-label-w, 200px); --fp-trace-meta: 9rem; } }
.fp-trace__kop { display: flex; align-items: center; gap: 0.625rem; padding: 0.625rem 0.75rem; border-bottom: 1px solid var(--border); }
.fp-trace__stip { width: 0.375rem; height: 0.375rem; flex-shrink: 0; border-radius: 50%; background: color-mix(in srgb, var(--muted-foreground) 40%, transparent); transition: background-color var(--motion-default-duration) var(--motion-default); }
.fp-trace[data-run="running"] .fp-trace__stip { background: var(--primary); }
.fp-trace__run { font-size: 0.8125rem; font-weight: 500; line-height: 1; }
.fp-trace__sub { font-size: 0.75rem; line-height: 1; color: var(--muted-foreground); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-trace__status { margin-left: auto; flex-shrink: 0; padding: 0.125rem 0.5rem; border: 1px solid var(--border); border-radius: 999px; font-size: 0.6875rem; line-height: 1rem; color: var(--muted-foreground); }
.fp-trace__lichaam { position: relative; }
/* Eén baan voor liniaal, lijnen, kop en scrub: tussen de naamkolom en de resultaatkolom. */
.fp-trace__baan { position: absolute; left: calc(var(--fp-trace-gutter) + var(--fp-trace-pad)); right: calc(var(--fp-trace-meta) + var(--fp-trace-pad)); top: 0; bottom: 0; }
.fp-trace__liniaal { position: relative; height: 1.75rem; border-bottom: 1px solid var(--border); cursor: ew-resize; touch-action: none; user-select: none; }
@container (max-width: 24rem) { .fp-trace__liniaal, .fp-trace__baan--lijnen { display: none; } }
.fp-trace__tik { position: absolute; top: 0.5rem; left: var(--fp-trace-x); transform: translateX(-50%); font-size: 0.625rem; line-height: 1; color: var(--muted-foreground); }
.fp-trace__rijen { position: relative; padding: 0.25rem 0; }
.fp-trace__baan--lijnen { pointer-events: none; }
.fp-trace__lijn { position: absolute; top: 0; bottom: 0; left: var(--fp-trace-x); width: 1px; background: color-mix(in srgb, var(--border) 60%, transparent); }
.fp-trace__lijst { list-style: none; margin: 0; padding: 0; position: relative; }
.fp-trace__rij {
  position: relative; display: flex; align-items: center; height: var(--fp-trace-rij, 34px); padding: 0 var(--fp-trace-pad);
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-trace__rij[data-selected] { background: color-mix(in srgb, var(--muted) 40%, transparent); }
.fp-trace__rij[data-state="running"] { background: color-mix(in srgb, var(--muted) 60%, transparent); }
.fp-trace__gidsen { position: absolute; top: 0; bottom: 0; left: var(--fp-trace-pad); pointer-events: none; }
.fp-trace__gids { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--border); left: calc(var(--fp-trace-gids) * 12px + 11px); }
.fp-trace__naam {
  display: flex; align-items: center; gap: 0.375rem; width: var(--fp-trace-gutter); flex-shrink: 0; padding: 0.25rem 0.5rem 0.25rem calc(var(--fp-trace-diepte, 0) * 12px + 4px);
  border: 0; border-radius: calc(var(--radius) * 0.75); background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; outline: none;
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-trace__naam:hover, .fp-trace__naam[data-pressed] { background: var(--muted); }
.fp-trace__naam:focus-visible { box-shadow: 0 0 0 2px var(--ring); }
.fp-trace__icoon { display: inline-flex; width: 0.875rem; height: 0.875rem; flex-shrink: 0; color: var(--muted-foreground); transition: color var(--motion-default-duration) var(--motion-default); }
.fp-trace__icoon svg { width: 100%; height: 100%; }
.fp-trace__rij[data-accent][data-state="done"] .fp-trace__icoon, .fp-trace__rij[data-accent][data-state="running"] .fp-trace__icoon { color: var(--primary); }
.fp-trace__rij[data-state="queued"] .fp-trace__icoon { color: color-mix(in srgb, var(--muted-foreground) 60%, transparent); }
.fp-trace__label { font-size: 0.75rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transition: color var(--motion-default-duration) var(--motion-default); }
.fp-trace__rij[data-state="queued"] .fp-trace__label { color: var(--muted-foreground); }
.fp-trace__poging { flex-shrink: 0; padding: 0 0.25rem; border: 1px solid var(--border); border-radius: calc(var(--radius) * 0.5); font-size: 0.625rem; line-height: 1rem; color: var(--muted-foreground); }
.fp-trace__spoor { position: relative; flex: 1; height: 100%; }
.fp-trace__balk { position: absolute; top: 50%; height: 0.5rem; min-width: 3px; transform: translateY(-50%); overflow: hidden; border-radius: 999px; left: var(--fp-trace-links); width: var(--fp-trace-breedte); }
.fp-trace__spook { position: absolute; inset: 0; background: color-mix(in srgb, var(--foreground) 10%, transparent); }
.fp-trace__vulling { position: absolute; inset: 0; transform-origin: left; transform: scaleX(var(--p, 1)); background: color-mix(in srgb, var(--foreground) 50%, transparent); }
.fp-trace__rij[data-accent] .fp-trace__vulling { background: var(--primary); }
.fp-trace__rij[data-status="cached"] .fp-trace__vulling { background: color-mix(in srgb, var(--foreground) 25%, transparent); }
.fp-trace__rij[data-status="error"] .fp-trace__vulling { background: var(--danger); }
.fp-trace__resultaat { display: flex; align-items: center; justify-content: flex-end; gap: 0.375rem; width: var(--fp-trace-meta); flex-shrink: 0; padding-left: 0.5rem; transition: opacity var(--motion-default-duration) var(--motion-default); }
.fp-trace__rij[data-state="queued"] .fp-trace__resultaat { opacity: 0; }
.fp-trace__fout-icoon { display: inline-flex; align-items: center; justify-content: center; width: 0.875rem; height: 0.875rem; border-radius: 50%; border: 1.5px solid var(--danger); color: var(--danger); font-size: 0.625rem; font-weight: 700; line-height: 1; }
.fp-trace__cache-icoon { font-size: 0.6875rem; color: var(--muted-foreground); }
.fp-trace__meta { display: none; font-size: 0.6875rem; color: var(--muted-foreground); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@container (min-width: 28rem) { .fp-trace__meta { display: inline; } }
.fp-trace__duur { flex-shrink: 0; font-size: 0.6875rem; color: color-mix(in srgb, var(--foreground) 70%, transparent); }
.fp-trace__rij[data-status="error"] .fp-trace__duur { color: var(--danger); }
/* Afspeelkop: één transform met --t */
.fp-trace__baan--kop { pointer-events: none; }
.fp-trace__kop-lijn { position: relative; height: 100%; width: 100%; transform: translateX(calc(var(--t, 0) * 100%)); }
.fp-trace__kop-lijn::before { content: ""; position: absolute; top: 0; bottom: 0; width: 1px; background: color-mix(in srgb, var(--primary) 70%, transparent); }
.fp-trace__kop-lijn::after { content: ""; position: absolute; top: 0; width: 0.375rem; height: 0.375rem; transform: translateX(-2.5px) rotate(45deg); background: var(--primary); }
.fp-trace__scrub { cursor: ew-resize; touch-action: none; user-select: none; }
/* Transport */
.fp-trace__transport { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0.75rem; border-top: 1px solid var(--border); }
.fp-trace__play {
  position: relative; display: flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem; flex-shrink: 0; border: 0; border-radius: 50%;
  background: var(--primary); color: var(--primary-foreground); cursor: pointer; outline: none; box-shadow: 0 1px 2px var(--shadow-overlay);
  transition: transform var(--motion-instant-duration) var(--motion-instant), box-shadow var(--motion-instant-duration) var(--motion-instant);
}
.fp-trace__play::before { content: ""; position: absolute; inset: -0.25rem; }
.fp-trace__play[data-pressed] { transform: scale(0.96); }
.fp-trace__play:focus-visible { box-shadow: 0 0 0 3px var(--ring); }
.fp-trace__rail { position: relative; flex: 1; height: 2.25rem; border-radius: var(--radius); cursor: ew-resize; touch-action: none; user-select: none; outline: none; }
.fp-trace__rail:focus-visible { box-shadow: 0 0 0 2px var(--ring); }
.fp-trace__rail-spoor { position: absolute; left: 0.375rem; right: 0.375rem; top: 50%; height: 0.25rem; transform: translateY(-50%); overflow: hidden; border-radius: 999px; background: color-mix(in srgb, var(--foreground) 10%, transparent); }
.fp-trace__rail-vulling { height: 100%; width: 100%; transform-origin: left; transform: scaleX(var(--t, 0)); background: var(--primary); }
.fp-trace__rail-knop-baan { position: absolute; top: 0; bottom: 0; left: 0.375rem; right: 0.375rem; pointer-events: none; }
.fp-trace__rail-knop-lijn { position: relative; height: 100%; width: 100%; transform: translateX(calc(var(--t, 0) * 100%)); }
.fp-trace__rail-knop { position: absolute; top: 50%; width: 0.75rem; height: 0.75rem; transform: translate(-50%, -50%); border-radius: 50%; background: var(--primary); border: 2px solid var(--card); box-shadow: 0 1px 2px var(--shadow-overlay); }
.fp-trace__klok { width: 7rem; flex-shrink: 0; text-align: right; font-size: 0.6875rem; color: var(--muted-foreground); }

/* ── DotGlobe ───────────────────────────────────────────────────────────── */

.fp-globe {
  position: relative; width: 100%; aspect-ratio: 1 / 1; max-height: 100%; overflow: hidden; color: var(--foreground);
  --fp-globe-stip: var(--muted-foreground); --fp-globe-bol: color-mix(in srgb, var(--muted) 60%, transparent); --fp-globe-rand: var(--border);
}
.fp-globe__doek { display: block; width: 100%; height: 100%; cursor: grab; touch-action: none; }
.fp-globe__doek:active { cursor: grabbing; }
.fp-globe__markers { position: absolute; inset: 0; pointer-events: none; }
.fp-globe__marker {
  position: absolute; top: 0; left: 0; display: flex; flex-direction: column; align-items: center; gap: 0.25rem; padding: 0; border: 0; background: none; color: var(--foreground); cursor: pointer; outline: none;
  pointer-events: auto; will-change: transform, opacity; transition: opacity var(--motion-default-duration) var(--motion-default);
}
.fp-globe__stip { display: block; width: 0.625rem; height: 0.625rem; border-radius: 50%; background: var(--primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 30%, transparent); }
.fp-globe__marker img { width: 1.75rem; height: 1.75rem; border-radius: 50%; object-fit: cover; border: 2px solid var(--card); box-shadow: 0 2px 6px var(--shadow-overlay); }
.fp-globe__marker[data-pressed] .fp-globe__stip, .fp-globe__marker[data-pressed] img { box-shadow: 0 0 0 4px color-mix(in srgb, var(--primary) 45%, transparent); }
.fp-globe__marker:focus-visible .fp-globe__stip, .fp-globe__marker:focus-visible img { box-shadow: 0 0 0 3px var(--ring); }
.fp-globe__label { font-size: 0.6875rem; font-weight: 500; padding: 0.125rem 0.375rem; border-radius: 999px; background: var(--card); color: var(--card-foreground, var(--foreground)); border: 1px solid var(--border); white-space: nowrap; }

/* ── LaptopMockup ───────────────────────────────────────────────────────── */

.fp-laptop {
  --fp-laptop-frame: var(--foreground);
  --fp-laptop-screen: var(--background);
  display: inline-block; box-sizing: border-box;
  /* De schaal is een transform; de layout-maat schaalt mee zodat er geen leeg vlak overblijft. */
  width: calc(var(--fp-laptop-voet-w) * var(--fp-laptop-scale, 1));
  height: calc((var(--fp-laptop-h) + var(--fp-laptop-voet-h)) * var(--fp-laptop-scale, 1));
}
.fp-laptop__lijst {
  position: relative; box-sizing: border-box;
  width: var(--fp-laptop-voet-w); height: calc(var(--fp-laptop-h) + var(--fp-laptop-voet-h));
  transform: scale(var(--fp-laptop-scale, 1)); transform-origin: top left;
  perspective: 2400px;
}
/* De klep: scharniert onderaan; open 1 = recht, 0 = dichtgeklapt (het scherm valt naar achteren). */
.fp-laptop__deksel {
  position: absolute; left: 50%; top: 0; box-sizing: border-box; overflow: hidden;
  width: var(--fp-laptop-w); height: var(--fp-laptop-h); padding: var(--fp-laptop-bezel);
  border-radius: var(--fp-laptop-r) var(--fp-laptop-r) 0 0;
  background: linear-gradient(135deg, color-mix(in srgb, var(--fp-laptop-frame) 90%, var(--background)) 0%, var(--fp-laptop-frame) 45%, color-mix(in srgb, var(--fp-laptop-frame) 84%, var(--background)) 100%);
  transform-origin: 50% 100%;
  transform: translateX(-50%) rotateX(calc((1 - var(--fp-laptop-open, 1)) * -88deg));
  transition: transform var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-laptop--schaduw .fp-laptop__deksel { box-shadow: var(--shadow-overlay); }
.fp-laptop__scherm {
  position: relative; overflow: hidden; width: 100%; height: 100%;
  border-radius: calc(var(--fp-laptop-r) - var(--fp-laptop-bezel)) calc(var(--fp-laptop-r) - var(--fp-laptop-bezel)) 0 0;
  background: var(--fp-laptop-screen);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fp-laptop-frame) 8%, transparent);
}
.fp-laptop__wallpaper { position: absolute; inset: 0; background-position: center; background-repeat: no-repeat; }
.fp-laptop__uitsparing {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%); z-index: 2;
  width: var(--fp-laptop-cut-w); height: var(--fp-laptop-cut-h);
  border-radius: 0 0 var(--fp-laptop-cut-r) var(--fp-laptop-cut-r);
  background: var(--fp-laptop-frame);
}
.fp-laptop__uitsparing::after {
  content: ""; position: absolute; top: 50%; left: 50%; width: 6px; height: 6px; border-radius: 50%;
  transform: translate(-50%, -50%);
  background: color-mix(in srgb, var(--fp-laptop-frame) 60%, var(--background));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--background) 30%, transparent);
}
.fp-laptop__inhoud { position: absolute; inset: var(--fp-laptop-top) 0 0 0; overflow: hidden; z-index: 1; display: flex; flex-direction: column; }
/* De voet: breder dan de klep, dunne band met scharnier bovenaan en een lichte vingerinkeping in het midden. */
.fp-laptop__voet {
  position: absolute; left: 0; right: 0; bottom: 0; height: var(--fp-laptop-voet-h); overflow: hidden;
  border-radius: 0 0 calc(var(--fp-laptop-voet-h) * 0.7) calc(var(--fp-laptop-voet-h) * 0.7) / 0 0 100% 100%;
  background: linear-gradient(180deg, color-mix(in srgb, var(--fp-laptop-frame) 78%, var(--background)) 0%, color-mix(in srgb, var(--fp-laptop-frame) 92%, var(--background)) 55%, var(--fp-laptop-frame) 100%);
}
.fp-laptop--schaduw .fp-laptop__voet { box-shadow: var(--shadow-overlay); }
.fp-laptop__scharnier {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%);
  width: calc(var(--fp-laptop-w) + var(--fp-laptop-bezel) * 4); height: var(--fp-laptop-scharnier);
  background: color-mix(in srgb, var(--fp-laptop-frame) 70%, var(--background));
}
.fp-laptop__inkeping {
  position: absolute; top: var(--fp-laptop-scharnier); left: 50%; transform: translateX(-50%);
  width: 11%; height: 6px; border-radius: 0 0 6px 6px;
  background: color-mix(in srgb, var(--fp-laptop-frame) 55%, var(--background));
}

/* ── BrowserMockup ──────────────────────────────────────────────────────── */

.fp-browser {
  display: flex; flex-direction: column; width: 100%; overflow: hidden; box-sizing: border-box;
  border: 1px solid var(--border); border-radius: calc(var(--radius) * 2);
  background: var(--card); color: var(--card-foreground, var(--foreground));
}
.fp-browser--schaduw { box-shadow: var(--shadow-overlay); }
.fp-browser__balk {
  display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0.75rem;
  background: var(--muted); border-bottom: 1px solid var(--border);
}
.fp-browser__stippen { display: inline-flex; gap: 0.4rem; flex: 0 0 auto; }
.fp-browser__stip { display: block; width: 0.7rem; height: 0.7rem; border-radius: 50%; }
.fp-browser__stip--1 { background: var(--danger); }
.fp-browser__stip--2 { background: var(--warning); }
.fp-browser__stip--3 { background: var(--success); }
.fp-browser--neutraal .fp-browser__stip { background: color-mix(in srgb, var(--foreground) 22%, transparent); }
.fp-browser__knoppen { display: inline-flex; gap: 0.6rem; color: var(--muted-foreground); flex: 0 0 auto; }
.fp-browser__adres {
  position: relative; flex: 1 1 auto; display: flex; align-items: center; justify-content: center; gap: 0.35rem;
  height: 1.5rem; max-width: 28rem; margin: 0 auto; padding: 0 0.75rem; box-sizing: border-box;
  border-radius: calc(var(--radius) * 0.75); background: color-mix(in srgb, var(--foreground) 7%, transparent);
  font: inherit; font-size: 0.75rem; color: var(--muted-foreground); white-space: nowrap; overflow: hidden;
}
.fp-browser__url { overflow: hidden; text-overflow: ellipsis; }
.fp-browser__herlaad { position: absolute; right: 0.5rem; display: inline-flex; }
.fp-browser__rechts { width: 1rem; flex: 0 0 auto; }
.fp-browser__vlak { position: relative; aspect-ratio: var(--fp-browser-ratio, 16 / 10); overflow: hidden; background: var(--background); }
.fp-browser__beeld { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: top center; display: block; }
.fp-browser--minimal .fp-browser__adres { justify-content: flex-start; }
@media (max-width: 30rem) {
  .fp-browser__knoppen { display: none; }
}

/* ── VideoPlayer ────────────────────────────────────────────────────────── */

.fp-video {
  position: relative; width: 100%; overflow: hidden; box-sizing: border-box;
  border-radius: calc(var(--radius) * 2); background: var(--foreground); color: var(--card-foreground, var(--foreground));
  outline: none;
}
.fp-video:focus-visible { box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring, var(--info)); }
.fp-video__film { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; cursor: pointer; }
/* Grote knop in het midden: glas op de kaartkleur, verdwijnt met de balk. */
.fp-video__midden {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none;
  transition: opacity var(--motion-default-duration) var(--motion-default);
}
.fp-video__midden .fp-video__knop { pointer-events: auto; }
.fp-video__knop {
  display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; padding: 0;
  appearance: none; border: 0; border-radius: var(--radius); background: transparent; color: inherit; cursor: pointer;
  font-size: 1rem; transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-video__knop:hover { background: color-mix(in srgb, var(--card-foreground, var(--foreground)) 10%, transparent); }
.fp-video__knop[data-pressed] { background: color-mix(in srgb, var(--card-foreground, var(--foreground)) 18%, transparent); }
.fp-video__knop:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-video__knop--groot {
  width: 4rem; height: 4rem; border-radius: 50%; font-size: 1.5rem;
  background: color-mix(in srgb, var(--card) 70%, transparent); border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); box-shadow: var(--shadow-overlay);
}
.fp-video__knop--groot:hover { background: color-mix(in srgb, var(--card) 85%, transparent); }
/* De balk: glas op --card, onderin; vervaagt na drie seconden spelen. */
.fp-video__balk {
  position: absolute; left: 0.75rem; right: 0.75rem; bottom: 0.75rem; display: grid; gap: 0.35rem; padding: 0.6rem 0.75rem; box-sizing: border-box;
  border-radius: calc(var(--radius) * 1.5); background: color-mix(in srgb, var(--card) 80%, transparent); border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  transition: opacity var(--motion-default-duration) var(--motion-default), transform var(--motion-default-duration) var(--motion-default);
}
.fp-video--verborgen .fp-video__balk { opacity: 0; transform: translateY(0.5rem); pointer-events: none; }
.fp-video--verborgen .fp-video__midden { opacity: 0; }
.fp-video--verborgen { cursor: none; }
.fp-video__tijdlijn { display: flex; align-items: center; gap: 0.6rem; }
.fp-video__tijd { font: inherit; font-size: 0.75rem; font-variant-numeric: tabular-nums; color: var(--muted-foreground); min-width: 2.5rem; text-align: center; }
.fp-video__spoor { position: relative; flex: 1 1 auto; height: 0.25rem; border-radius: 999px; background: color-mix(in srgb, var(--card-foreground, var(--foreground)) 18%, transparent); }
.fp-video__vulling { position: absolute; inset: 0; border-radius: 999px; background: var(--primary); transform-origin: left center; transform: scaleX(var(--fp-video-p, 0)); }
.fp-video__vulling--volume { transform: scaleX(var(--fp-video-vol, 1)); }
/* De native range ligt onzichtbaar over het spoor: muis, vinger en toetsenbord werken gewoon. */
.fp-video__range { position: absolute; inset: -0.5rem 0; width: 100%; height: 1.25rem; margin: 0; appearance: none; background: transparent; cursor: pointer; }
.fp-video__range::-webkit-slider-thumb { appearance: none; width: 0.75rem; height: 0.75rem; border-radius: 50%; background: var(--primary); border: 2px solid var(--card); box-shadow: var(--shadow-overlay); }
.fp-video__range::-moz-range-thumb { width: 0.75rem; height: 0.75rem; border-radius: 50%; background: var(--primary); border: 2px solid var(--card); }
.fp-video__range:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; border-radius: 999px; }
.fp-video__knoppen { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.fp-video__groep { display: inline-flex; align-items: center; gap: 0.25rem; }
.fp-video__volume { display: inline-flex; align-items: center; gap: 0.35rem; margin-left: 0.25rem; }
.fp-video__spoor--volume { width: 4.5rem; flex: 0 0 auto; }
@media (max-width: 30rem) {
  .fp-video__spoor--volume { display: none; }
  .fp-video__balk { left: 0.5rem; right: 0.5rem; bottom: 0.5rem; }
}

/* ── VoiceBubble ────────────────────────────────────────────────────────── */

.fp-voice {
  --fp-voice-bel: var(--card);
  --fp-voice-inkt: var(--card-foreground, var(--foreground));
  display: inline-flex; align-items: center; gap: 0.75rem; max-width: 100%; box-sizing: border-box;
  padding: 0.6rem 0.9rem 0.6rem 0.6rem; border-radius: calc(var(--radius) * 2.5);
  background: var(--fp-voice-bel); color: var(--fp-voice-inkt);
  border: 1px solid color-mix(in srgb, var(--border) 70%, transparent); box-shadow: var(--shadow-overlay);
}
.fp-voice--eigen { --fp-voice-bel: var(--primary); --fp-voice-inkt: var(--primary-foreground); border-color: transparent; }
.fp-voice__knop {
  display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 2.25rem; height: 2.25rem; padding: 0;
  appearance: none; border: 1px solid color-mix(in srgb, var(--fp-voice-inkt) 20%, transparent); border-radius: 50%; cursor: pointer;
  background: color-mix(in srgb, var(--fp-voice-inkt) 8%, transparent); color: inherit; font-size: 0.9rem;
  transition: background-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-voice__knop:hover { background: color-mix(in srgb, var(--fp-voice-inkt) 14%, transparent); }
.fp-voice__knop[data-pressed] { background: color-mix(in srgb, var(--fp-voice-inkt) 22%, transparent); }
.fp-voice__knop:focus-visible, .fp-voice__golf:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
/* De golf: twee identieke lagen streepjes; de bovenste (vol) wordt met een clip op de voortgang gezet. */
.fp-voice__golf { position: relative; width: 9.5rem; height: 1.5rem; flex: 1 1 auto; cursor: pointer; touch-action: none; border-radius: var(--radius); }
.fp-voice__streepjes { position: absolute; inset: 0; display: flex; align-items: center; justify-content: space-between; gap: 2px; padding: 0 1px; }
.fp-voice__streepjes i { display: block; width: 2px; flex: 0 0 2px; height: calc(var(--h, 0.5) * 100%); border-radius: 999px; background: color-mix(in srgb, var(--fp-voice-inkt) 32%, transparent); }
.fp-voice__streepjes--vol { clip-path: inset(0 calc((1 - var(--fp-voice-p, 0)) * 100%) 0 0); }
.fp-voice__streepjes--vol i { background: var(--fp-voice-inkt); }
.fp-voice__duur { font: inherit; font-size: 0.8125rem; font-variant-numeric: tabular-nums; color: color-mix(in srgb, var(--fp-voice-inkt) 75%, transparent); flex: 0 0 auto; }

/* ── AvatarCircles ──────────────────────────────────────────────────────── */

.fp-avatars { display: inline-flex; align-items: center; }
.fp-avatars__portret, .fp-avatars__meer {
  display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; box-sizing: border-box;
  width: var(--fp-avatars-maat, 2.5rem); height: var(--fp-avatars-maat, 2.5rem); border-radius: 50%;
  border: 2px solid var(--background); object-fit: cover; background: var(--muted); color: var(--muted-foreground);
  font: inherit; font-size: calc(var(--fp-avatars-maat, 2.5rem) * 0.32); font-weight: 600; letter-spacing: 0.02em;
}
.fp-avatars > * + * { margin-left: calc(var(--fp-avatars-maat, 2.5rem) * var(--fp-avatars-overlap, 0.4) * -1); }
.fp-avatars--grijs .fp-avatars__portret { filter: grayscale(1); transition: filter var(--motion-instant-duration) var(--motion-instant); }
.fp-avatars--grijs:hover .fp-avatars__portret { filter: none; }
.fp-avatars__meer { position: relative; z-index: 1; background: var(--foreground); color: var(--background); text-decoration: none; }
.fp-avatars__meer--knop { appearance: none; padding: 0; cursor: pointer; transition: background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-avatars__meer--knop:hover { background: color-mix(in srgb, var(--foreground) 80%, var(--background)); }
.fp-avatars__meer--knop[data-pressed] { background: color-mix(in srgb, var(--foreground) 65%, var(--background)); }
.fp-avatars__meer--knop:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }

/* ── LogoGrid ───────────────────────────────────────────────────────────── */

/* Het raster zelf is de rand: --border als achtergrond, 1px naden tussen tegels op --background. */
.fp-logogrid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; width: 100%; max-width: 48rem; margin: 0 auto; box-sizing: border-box;
  padding: 1px; border-radius: calc(var(--radius) * 1.5); background: var(--border); box-shadow: var(--shadow-overlay); overflow: hidden;
}
@media (min-width: 48rem) { .fp-logogrid { grid-template-columns: repeat(var(--fp-logogrid-kolommen, 4), minmax(0, 1fr)); } }
.fp-logogrid__tegel { display: flex; align-items: center; justify-content: center; padding: 2rem; background: var(--background); color: var(--foreground); }
.fp-logogrid__tegel:first-child { border-top-left-radius: calc(var(--radius) * 1.5 - 1px); }
.fp-logogrid__tegel:last-child { border-bottom-right-radius: calc(var(--radius) * 1.5 - 1px); }
.fp-logogrid__logo { display: block; height: var(--fp-logogrid-h, 1.25rem); width: auto; max-width: 100%; user-select: none; pointer-events: none; }
@media (min-width: 48rem) { .fp-logogrid__logo { height: var(--fp-logogrid-h, 1.5rem); } }
.fp-logogrid--grijs .fp-logogrid__tegel { filter: grayscale(1); opacity: 0.7; transition: filter var(--motion-instant-duration) var(--motion-instant), opacity var(--motion-instant-duration) var(--motion-instant); }
.fp-logogrid--grijs .fp-logogrid__tegel:hover { filter: none; opacity: 1; }
.fp-logogrid--invert .fp-logogrid__logo { filter: brightness(0) invert(1); }

/* ── DotPattern ─────────────────────────────────────────────────────────── */

.fp-dots {
  position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none;
  fill: var(--fp-dots-kleur, currentColor); opacity: var(--fp-dots-dekking, 0.35);
}
.fp-dots--vervaagd {
  -webkit-mask-image: radial-gradient(ellipse at center, black 40%, transparent 78%);
  mask-image: radial-gradient(ellipse at center, black 40%, transparent 78%);
}

/* ── TextRotate ─────────────────────────────────────────────────────────── */

.fp-rotate { display: inline-flex; flex-wrap: wrap; white-space: pre-wrap; vertical-align: bottom; }
.fp-rotate__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.fp-rotate__tekst { display: inline-flex; flex-wrap: wrap; }
.fp-rotate--regels .fp-rotate__tekst { flex-direction: column; width: 100%; }
.fp-rotate__woord { display: inline-flex; overflow: hidden; padding-bottom: 0.08em; }
.fp-rotate__teken { display: inline-block; }
.fp-rotate__spatie { white-space: pre; }

/* ── ScrollConverge ─────────────────────────────────────────────────────── */

.fp-converge { position: relative; width: 100%; min-height: var(--fp-converge-lengte, 210vh); background: var(--background); color: var(--foreground); }
.fp-converge__podium {
  position: sticky; top: 0; height: var(--fp-converge-podium, 100dvh); overflow: hidden; box-sizing: border-box;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2vw; padding: 2vw;
}
.fp-converge__kop { margin: 0; font: inherit; font-size: 1.5rem; font-weight: 500; letter-spacing: -0.02em; text-align: center; }
.fp-converge__rij { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 2rem; max-width: 56rem; perspective: 500px; }
.fp-converge--text .fp-converge__rij { gap: 0; font: inherit; font-weight: 700; font-size: clamp(2rem, 6vw, 3.75rem); line-height: 1; letter-spacing: -0.04em; text-transform: uppercase; color: var(--primary); text-align: center; }
.fp-converge__teken { display: inline-block; white-space: pre; }
.fp-converge__icoon { display: inline-flex; width: 4rem; height: 4rem; flex: 0 0 auto; transform-origin: center; }
.fp-converge__icoon > * { width: 100%; height: 100%; object-fit: contain; }

/* ── HoverPreview ───────────────────────────────────────────────────────── */

.fp-hpreview { position: relative; }
.fp-hpreview__link { position: relative; display: inline-block; color: var(--foreground); font-weight: 700; cursor: pointer; text-decoration: none; }
.fp-hpreview__link::after {
  content: ""; position: absolute; left: 0; bottom: -2px; width: 100%; height: 2px; background: var(--primary);
  transform: scaleX(0); transform-origin: left center; transition: transform var(--motion-default-duration) var(--motion-default);
}
.fp-hpreview__link:hover::after, .fp-hpreview__link:focus-visible::after { transform: scaleX(1); }
.fp-hpreview__link:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 3px; border-radius: var(--radius); }
/* De kaart: vast aan het venster, positie via translate (per muisbeweging). */
.fp-hpreview__kaart {
  position: fixed; left: 0; top: 0; z-index: 1000; pointer-events: none; opacity: 0;
  transition: opacity var(--motion-pop-duration) var(--motion-pop);
}
.fp-hpreview__kaart--open { opacity: 1; }
.fp-hpreview__binnen {
  overflow: hidden; padding: 0.5rem; border-radius: calc(var(--radius) * 2);
  background: var(--card); color: var(--card-foreground, var(--foreground));
  border: 1px solid color-mix(in srgb, var(--border) 70%, transparent); box-shadow: var(--shadow-overlay);
  transform: translateY(10px) scale(0.95); transition: transform var(--motion-pop-duration) var(--motion-pop);
}
.fp-hpreview__kaart--open .fp-hpreview__binnen { transform: none; }
.fp-hpreview__binnen img { display: block; width: 100%; height: auto; border-radius: calc(var(--radius) * 1.25); }
.fp-hpreview__titel { padding: 0.75rem 0.5rem 0.25rem; font: inherit; font-size: 0.85rem; font-weight: 600; }
.fp-hpreview__sub { padding: 0 0.5rem 0.5rem; font: inherit; font-size: 0.75rem; color: var(--muted-foreground); }

/* ── TiltCard ───────────────────────────────────────────────────────────── */

.fp-tilt {
  --fp-tilt-x: 50%; --fp-tilt-y: 50%; --fp-tilt-rx: 0deg; --fp-tilt-ry: 0deg; --fp-tilt-s: 1;
  position: relative; overflow: hidden; touch-action: manipulation; -webkit-tap-highlight-color: transparent;
  transform: perspective(1000px) rotateX(var(--fp-tilt-rx)) rotateY(var(--fp-tilt-ry)) scale(var(--fp-tilt-s));
  transition: transform var(--motion-smooth-duration) var(--motion-smooth);
}
/* Twee lagen licht die de aanwijzer volgen: een brede in de merkkleur (overlay), een kleine felle. */
.fp-tilt__gloed, .fp-tilt__vlek { position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity var(--motion-default-duration) var(--motion-default); }
.fp-tilt__gloed { z-index: 20; mix-blend-mode: overlay; background: radial-gradient(circle at var(--fp-tilt-x) var(--fp-tilt-y), color-mix(in srgb, var(--primary) 35%, transparent) 0%, transparent 80%); }
.fp-tilt__vlek { z-index: 21; background: radial-gradient(circle 90px at var(--fp-tilt-x) var(--fp-tilt-y), color-mix(in srgb, var(--background) 12%, transparent), transparent 70%); }
.fp-tilt:hover .fp-tilt__gloed, .fp-tilt[data-touch] .fp-tilt__gloed, .fp-tilt:hover .fp-tilt__vlek, .fp-tilt[data-touch] .fp-tilt__vlek { opacity: 1; }

/* ── GlowCard ───────────────────────────────────────────────────────────── */

.fp-glow {
  --fp-glow-kleur: var(--primary);
  --fp-glow-x: -999px; --fp-glow-y: -999px;
  position: relative; box-sizing: border-box;
  border: var(--fp-glow-rand, 2px) solid color-mix(in srgb, var(--foreground) 12%, transparent); border-radius: calc(var(--radius) * 2);
  background: color-mix(in srgb, var(--card) 85%, transparent); color: var(--card-foreground, var(--foreground));
  box-shadow: var(--shadow-overlay); -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px);
  /* Zachte vlek in de merkkleur die de aanwijzer volgt, ook naast de kaart. */
  background-image: radial-gradient(var(--fp-glow-maat, 200px) var(--fp-glow-maat, 200px) at var(--fp-glow-x) var(--fp-glow-y), color-mix(in srgb, var(--fp-glow-kleur) 12%, transparent), transparent);
}
/* De rand: alleen de ring licht op (masker padding-box ⊕ border-box), met een blur-echo eromheen. */
.fp-glow__rand, .fp-glow__lijn {
  content: ""; position: absolute; inset: calc(var(--fp-glow-rand, 2px) * -1); pointer-events: none;
  border: var(--fp-glow-rand, 2px) solid transparent; border-radius: calc(var(--radius) * 2);
  -webkit-mask: linear-gradient(transparent, transparent), linear-gradient(black, black);
  mask: linear-gradient(transparent, transparent), linear-gradient(black, black);
  -webkit-mask-clip: padding-box, border-box; mask-clip: padding-box, border-box;
  -webkit-mask-composite: xor; mask-composite: intersect;
}
.fp-glow__rand { background-image: radial-gradient(calc(var(--fp-glow-maat, 200px) * 0.75) calc(var(--fp-glow-maat, 200px) * 0.75) at calc(var(--fp-glow-x) + var(--fp-glow-rand, 2px)) calc(var(--fp-glow-y) + var(--fp-glow-rand, 2px)), var(--fp-glow-kleur), transparent 100%); filter: brightness(1.6); }
.fp-glow__lijn { background-image: radial-gradient(calc(var(--fp-glow-maat, 200px) * 0.5) calc(var(--fp-glow-maat, 200px) * 0.5) at calc(var(--fp-glow-x) + var(--fp-glow-rand, 2px)) calc(var(--fp-glow-y) + var(--fp-glow-rand, 2px)), var(--background), transparent 100%); }
.fp-glow__inhoud { position: relative; height: 100%; }

/* ── MagneticButton ─────────────────────────────────────────────────────── */

.fp-magnet {
  --fp-magnet-gloed: linear-gradient(90deg, var(--primary), var(--info), var(--primary));
  --fp-magnet-x: 50%; --fp-magnet-y: 50%;
  position: relative; display: inline-flex; align-items: center; justify-content: center; overflow: hidden; isolation: isolate;
  appearance: none; cursor: pointer; user-select: none; box-sizing: border-box;
  font: inherit; font-weight: 600; letter-spacing: 0.02em;
  background: color-mix(in srgb, var(--foreground) 92%, var(--background)); color: var(--background);
  border: 1px solid color-mix(in srgb, var(--primary) 30%, transparent); border-radius: calc(var(--radius) * 2);
  box-shadow: 0 0 20px color-mix(in srgb, var(--primary) 25%, transparent);
  transition: box-shadow var(--motion-default-duration) var(--motion-default), opacity var(--motion-instant-duration) var(--motion-instant);
}
.fp-magnet[data-hover] { box-shadow: 0 0 35px color-mix(in srgb, var(--primary) 45%, transparent); }
.fp-magnet:disabled { opacity: 0.5; cursor: not-allowed; }
.fp-magnet:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-magnet--sm { height: 2.25rem; padding: 0 1rem; font-size: 0.75rem; gap: 0.375rem; border-radius: calc(var(--radius) * 1.5); }
.fp-magnet--md { height: 2.75rem; padding: 0 1.5rem; font-size: 0.875rem; gap: 0.5rem; }
.fp-magnet--lg { height: 3.25rem; padding: 0 2rem; font-size: 1rem; gap: 0.625rem; }
.fp-magnet--xl { height: 4rem; padding: 0 2.5rem; font-size: 1.125rem; gap: 0.75rem; border-radius: calc(var(--radius) * 3); }
/* Lagen: lichtvlek, draaiende lichtrand (ambient), donkere kern, spot, rimpels, inhoud. */
.fp-magnet__vlek { position: absolute; inset: -1px; z-index: 0; border-radius: inherit; pointer-events: none; opacity: 0; transition: opacity var(--motion-smooth-duration) var(--motion-smooth); background: radial-gradient(var(--fp-magnet-straal, 160px) circle at var(--fp-magnet-x) var(--fp-magnet-y), color-mix(in srgb, var(--background) 18%, transparent), transparent 80%); }
.fp-magnet__ring { position: absolute; inset: -150%; z-index: 0; pointer-events: none; opacity: 0; filter: blur(4px); transition: opacity var(--motion-smooth-duration) var(--motion-smooth); }
.fp-magnet__ring-kleur { display: block; width: 100%; height: 100%; background: var(--fp-magnet-gloed); animation: fp-magnet-draai calc(var(--motion-smooth-duration) * 8) linear infinite; }
@keyframes fp-magnet-draai { to { transform: rotate(360deg); } }
.fp-magnet__kern { position: absolute; inset: 1px; z-index: 1; border-radius: inherit; background: color-mix(in srgb, var(--foreground) 95%, var(--background)); pointer-events: none; }
.fp-magnet__spot { position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: 0; transition: opacity var(--motion-default-duration) var(--motion-default); background: radial-gradient(120px circle at var(--fp-magnet-x) var(--fp-magnet-y), color-mix(in srgb, var(--background) 40%, transparent), transparent 70%); }
.fp-magnet[data-hover] .fp-magnet__vlek { opacity: 1; }
.fp-magnet[data-hover] .fp-magnet__ring { opacity: 0.6; }
.fp-magnet[data-hover] .fp-magnet__spot { opacity: 0.3; }
.fp-magnet__rimpels { position: absolute; inset: 0; z-index: 3; overflow: hidden; pointer-events: none; }
.fp-magnet__rimpel { position: absolute; width: 30px; height: 30px; margin: -15px 0 0 -15px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--background) 80%, transparent) 0%, transparent 70%); }
.fp-magnet__inhoud { position: relative; z-index: 4; display: inline-flex; align-items: center; justify-content: center; gap: inherit; }
.fp-magnet__icoon { display: inline-flex; flex: 0 0 auto; }
.fp-magnet__spinner { animation: fp-magnet-draai calc(var(--motion-smooth-duration) * 2) linear infinite; }
@media (prefers-reduced-motion: reduce) { .fp-magnet__ring-kleur { animation: none; } }

/* ── StepTimeline ───────────────────────────────────────────────────────── */

.fp-steps { display: grid; list-style: none; margin: 0; padding: 0; color: var(--foreground); }
.fp-steps__item { display: grid; align-items: center; column-gap: 0.5rem; color: var(--muted-foreground); }
.fp-steps[data-positions="left"] .fp-steps__item { grid-template-columns: 0 min-content 1fr; }
.fp-steps[data-positions="right"] .fp-steps__item { grid-template-columns: 1fr min-content; }
.fp-steps[data-positions="center"] .fp-steps__item { grid-template-columns: 1fr min-content 1fr; }
.fp-steps__item[data-status="done"] { color: var(--primary); }
.fp-steps__stip { grid-column: 2 / 3; grid-row: 1 / 1; display: flex; align-items: center; justify-content: center; width: 1rem; height: 1rem; box-sizing: border-box; border: 1px solid currentColor; border-radius: 50%; color: inherit; }
.fp-steps__stip[data-status="current"] .fp-steps__kern { width: 0.625rem; height: 0.625rem; border-radius: 50%; background: currentColor; }
.fp-steps__stip[data-status="done"] { background: var(--primary); border-color: var(--primary); color: var(--primary-foreground); }
.fp-steps__stip[data-status="error"] { background: var(--danger); border-color: var(--danger); color: var(--background); }
.fp-steps__inhoud { grid-row: 2 / 2; padding-bottom: 2rem; font: inherit; font-size: 0.9375rem; line-height: 1.5; color: var(--muted-foreground); }
.fp-steps__inhoud[data-side="right"] { grid-column: 3 / 4; margin-right: auto; text-align: left; }
.fp-steps__inhoud[data-side="left"] { grid-column: 1 / 2; margin-left: auto; text-align: right; }
.fp-steps__kop { grid-row: 1 / 1; margin: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: inherit; }
.fp-steps__kop[data-side="right"] { grid-column: 3 / 4; margin-right: auto; text-align: left; }
.fp-steps__kop[data-side="left"] { grid-column: 1 / 2; margin-left: auto; text-align: right; }
.fp-steps__kop[data-variant="primary"] { font-size: 1rem; font-weight: 500; color: var(--primary); }
.fp-steps__kop[data-variant="secondary"] { font-size: 0.875rem; font-weight: 300; color: var(--muted-foreground); }
.fp-steps__kop[data-tone="danger"] { color: var(--danger); }
.fp-steps__lijn { grid-column: 2 / 3; grid-row: 2 / 2; width: 2px; min-height: 4rem; height: 100%; margin: 0 auto; border: 0; border-radius: 999px; background: var(--muted); }
.fp-steps__lijn[data-done] { background: var(--primary); }

/* ── OrderTracking ──────────────────────────────────────────────────────── */

.fp-order { width: 100%; max-width: 28rem; color: var(--foreground); }
.fp-order__lijst { list-style: none; margin: 0; padding: 0; }
.fp-order__stap { display: flex; gap: 0.75rem; }
.fp-order__spoor { display: flex; flex-direction: column; align-items: center; flex: 0 0 auto; }
.fp-order__stip { flex: 0 0 auto; color: var(--muted-foreground); }
.fp-order__stap[data-done] .fp-order__stip { color: color-mix(in srgb, var(--primary) 70%, transparent); }
.fp-order__lijn { flex: 1 1 auto; width: 1.5px; background: var(--muted-foreground); }
.fp-order__stap[data-next-done] .fp-order__lijn { background: color-mix(in srgb, var(--primary) 70%, transparent); }
.fp-order__tekst { display: flex; flex-direction: column; padding-bottom: 1.5rem; }
.fp-order__stap:last-child .fp-order__tekst { padding-bottom: 0; }
.fp-order__naam { font: inherit; font-size: 0.875rem; font-weight: 500; }
.fp-order__tijd { font: inherit; font-size: 0.875rem; color: var(--muted-foreground); }
.fp-order__leeg { margin: 0; font: inherit; font-size: 0.875rem; color: color-mix(in srgb, var(--foreground) 80%, transparent); }

/* ── FieldLayout ────────────────────────────────────────────────────────── */

.fp-fieldset { display: flex; flex-direction: column; gap: 1.5rem; margin: 0; padding: 0; border: 0; min-width: 0; color: var(--foreground); }
.fp-fieldlegend { margin: 0 0 0.75rem; padding: 0; font: inherit; font-weight: 500; }
.fp-fieldlegend[data-variant="legend"] { font-size: 1rem; }
.fp-fieldlegend[data-variant="label"] { font-size: 0.875rem; }
.fp-fieldgroup { display: flex; flex-direction: column; gap: 1.75rem; width: 100%; container-type: inline-size; }
.fp-fieldgroup .fp-fieldgroup { gap: 1rem; }
.fp-fieldgroup--dicht { gap: 0.75rem; }
.fp-fieldrow { display: flex; gap: 0.75rem; width: 100%; }
.fp-fieldrow[data-orientation="vertical"] { flex-direction: column; }
.fp-fieldrow[data-orientation="vertical"] > * { width: 100%; }
.fp-fieldrow[data-orientation="horizontal"] { flex-direction: row; align-items: center; }
.fp-fieldrow[data-orientation="horizontal"] > .fp-fieldlabel { flex: 1 1 auto; }
.fp-fieldrow[data-orientation="horizontal"]:has(> .fp-fieldcontent) { align-items: flex-start; }
.fp-fieldrow[data-orientation="responsive"] { flex-direction: column; }
.fp-fieldrow[data-orientation="responsive"] > * { width: 100%; }
@container (min-width: 28rem) {
  .fp-fieldrow[data-orientation="responsive"] { flex-direction: row; align-items: center; }
  .fp-fieldrow[data-orientation="responsive"] > * { width: auto; }
  .fp-fieldrow[data-orientation="responsive"] > .fp-fieldlabel { flex: 1 1 auto; }
}
.fp-fieldrow[data-invalid] { color: var(--danger); }
.fp-fieldrow[data-disabled] .fp-fieldlabel, .fp-fieldrow[data-disabled] .fp-fieldtitle { opacity: 0.5; }
.fp-fieldcontent { display: flex; flex: 1 1 auto; flex-direction: column; gap: 0.375rem; line-height: 1.4; }
.fp-fieldlabel { display: flex; gap: 0.5rem; width: fit-content; font: inherit; font-size: 0.875rem; font-weight: 500; line-height: 1.4; cursor: pointer; }
.fp-fieldlabel--kaart { width: 100%; flex-direction: column; padding: 1rem; box-sizing: border-box; border: 1px solid var(--border); border-radius: var(--radius); transition: background-color var(--motion-instant-duration) var(--motion-instant), border-color var(--motion-instant-duration) var(--motion-instant); }
.fp-fieldlabel--kaart:has(:checked) { background: color-mix(in srgb, var(--primary) 6%, transparent); border-color: var(--primary); }
.fp-fieldtitle { display: flex; align-items: center; gap: 0.5rem; width: fit-content; font: inherit; font-size: 0.875rem; font-weight: 500; line-height: 1.4; }
.fp-fielddescription { margin: 0; font: inherit; font-size: 0.875rem; font-weight: 400; line-height: 1.5; color: var(--muted-foreground); }
.fp-fielddescription a { color: inherit; text-decoration: underline; text-underline-offset: 4px; }
.fp-fielddescription a:hover { color: var(--primary); }
.fp-fieldseparator { position: relative; display: flex; align-items: center; justify-content: center; height: 1.25rem; margin: -0.5rem 0; font: inherit; font-size: 0.875rem; }
.fp-fieldseparator__lijn { position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: var(--border); }
.fp-fieldseparator__tekst { position: relative; padding: 0 0.5rem; background: var(--background); color: var(--muted-foreground); }
.fp-fielderror { font: inherit; font-size: 0.875rem; color: var(--danger); }
.fp-fielderror__lijst { margin: 0; padding-left: 1rem; display: flex; flex-direction: column; gap: 0.25rem; }
/* Vinkjes van het project (native) kleuren mee. */
.fp-fieldrow input[type="checkbox"], .fp-fieldrow input[type="radio"] { accent-color: var(--primary); width: 1rem; height: 1rem; margin: 0.125rem 0 0; flex: 0 0 auto; }

/* ── StepIndicator ──────────────────────────────────────────────────────── */

.fp-stepper { width: 100%; color: var(--foreground); }
.fp-stepper__lijst { list-style: none; margin: 0; padding: 0; display: flex; }
.fp-stepper--horizontal .fp-stepper__lijst { flex-direction: row; align-items: center; justify-content: space-between; }
.fp-stepper--vertical .fp-stepper__lijst { flex-direction: column; gap: 1rem; }
.fp-stepper__item { position: relative; display: flex; align-items: center; }
.fp-stepper--horizontal .fp-stepper__item:not(:last-child) { flex: 1 1 0; }
.fp-stepper--vertical .fp-stepper__item { align-items: flex-start; }
.fp-stepper__trigger { display: flex; align-items: flex-start; gap: 0.75rem; padding: 0; appearance: none; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; border-radius: var(--radius); font: inherit; }
.fp-stepper__trigger:disabled { cursor: default; }
.fp-stepper__trigger:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 3px; }
.fp-stepper__rondje {
  display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 2rem; height: 2rem; box-sizing: border-box; border-radius: 50%;
  border: 2px solid var(--border); background: var(--muted); color: var(--muted-foreground); font: inherit; font-size: 0.875rem; font-weight: 600;
  transition: background-color var(--motion-instant-duration) var(--motion-instant), border-color var(--motion-instant-duration) var(--motion-instant), color var(--motion-instant-duration) var(--motion-instant);
}
.fp-stepper__item[data-state="complete"] .fp-stepper__rondje, .fp-stepper__item[data-state="current"] .fp-stepper__rondje { background: var(--primary); border-color: var(--primary); color: var(--primary-foreground); }
.fp-stepper__trigger[data-pressed] .fp-stepper__rondje { transform: scale(0.94); }
.fp-stepper__tekst { display: flex; flex-direction: column; }
.fp-stepper__titel { font: inherit; font-size: 0.875rem; font-weight: 600; }
.fp-stepper__sub { font: inherit; font-size: 0.75rem; color: var(--muted-foreground); }
.fp-stepper__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.fp-stepper__lijn { background: var(--border); }
.fp-stepper--horizontal .fp-stepper__lijn { flex: 1 1 auto; height: 2px; margin: 0 0.75rem; }
.fp-stepper--horizontal.fp-stepper--labels .fp-stepper__lijn { align-self: flex-start; margin-top: calc(1rem - 1px); }
.fp-stepper--vertical .fp-stepper__lijn { position: absolute; left: calc(1rem - 1px); top: 2rem; width: 2px; height: calc(100% + 1rem - 2rem); }
.fp-stepper__item[data-state="complete"] .fp-stepper__lijn { background: var(--primary); }

/* ── ProgressRing ───────────────────────────────────────────────────────── */

.fp-ring { position: relative; display: inline-flex; align-items: center; justify-content: center; color: var(--foreground); }
.fp-ring__svg { position: absolute; inset: 0; transform: rotate(-90deg); }
.fp-ring__svg--boog { transform: none; }
.fp-ring__spoor { stroke: var(--muted); }
.fp-ring__vulling { stroke: var(--fp-ring-kleur, var(--primary)); transition: stroke-dashoffset var(--motion-default-duration) var(--motion-default); }
.fp-ring__inhoud { position: relative; z-index: 1; display: flex; align-items: center; justify-content: center; font: inherit; font-size: 0.875rem; font-weight: 500; text-align: center; }
.fp-ring__getal { font: inherit; font-size: 1.125rem; font-weight: 700; }

/* ── Tabs ───────────────────────────────────────────────────────────────── */

.fp-tabs { color: var(--foreground); }
.fp-tabs__lijst { display: flex; align-items: center; flex-shrink: 0; gap: 0.5rem; }
.fp-tabs__lijst[data-variant="default"] { padding: 0.25rem; background: var(--muted); border-radius: var(--radius); }
.fp-tabs__lijst[data-variant="default"][data-size="lg"] { padding: 0.375rem; gap: 0.625rem; }
.fp-tabs__lijst[data-variant="default"][data-size="sm"], .fp-tabs__lijst[data-variant="default"][data-size="xs"] { gap: 0.25rem; }
.fp-tabs__lijst[data-variant="line"] { border-bottom: 1px solid var(--border); gap: 2rem; }
.fp-tabs__lijst[data-variant="line"][data-size="sm"], .fp-tabs__lijst[data-variant="line"][data-size="xs"] { gap: 1rem; }
.fp-tabs__lijst[data-shape="pill"], .fp-tabs__lijst[data-shape="pill"] .fp-tabs__tab { border-radius: 999px; }
.fp-tabs__tab {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; flex-shrink: 0; white-space: nowrap; cursor: pointer;
  appearance: none; border: 0; background: transparent; font: inherit; font-size: 0.875rem; font-weight: 500; color: var(--muted-foreground);
  padding: 0.375rem 0.75rem; border-radius: calc(var(--radius) * 0.75);
  transition: color var(--motion-instant-duration) var(--motion-instant), background-color var(--motion-instant-duration) var(--motion-instant), box-shadow var(--motion-instant-duration) var(--motion-instant), border-color var(--motion-instant-duration) var(--motion-instant);
}
.fp-tabs__tab svg { flex-shrink: 0; width: 1em; height: 1em; color: var(--muted-foreground); }
.fp-tabs__tab:hover, .fp-tabs__tab:hover svg, .fp-tabs__tab[data-state="active"] svg { color: var(--primary); }
.fp-tabs__tab:disabled { opacity: 0.5; pointer-events: none; }
.fp-tabs__tab:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-tabs__lijst[data-size="lg"] .fp-tabs__tab { padding: 0.625rem 1rem; }
.fp-tabs__lijst[data-size="sm"] .fp-tabs__tab { padding: 0.375rem 0.625rem; font-size: 0.75rem; }
.fp-tabs__lijst[data-size="xs"] .fp-tabs__tab { padding: 0.25rem 0.5rem; font-size: 0.75rem; }
.fp-tabs__lijst[data-variant="default"] .fp-tabs__tab:hover { color: var(--foreground); }
.fp-tabs__lijst[data-variant="default"] .fp-tabs__tab[data-state="active"] { background: var(--background); color: var(--foreground); box-shadow: var(--shadow-overlay); }
.fp-tabs__lijst[data-variant="button"] .fp-tabs__tab { padding: 0.625rem 0.75rem; border-radius: var(--radius); color: var(--foreground); }
.fp-tabs__lijst[data-variant="button"] .fp-tabs__tab[data-state="active"] { background: var(--muted); }
.fp-tabs__lijst[data-variant="line"] .fp-tabs__tab { padding: 0.625rem 0; border-radius: 0; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.fp-tabs__lijst[data-variant="line"] .fp-tabs__tab[data-state="active"] { color: var(--primary); border-bottom-color: var(--primary); }
.fp-tabs__paneel { margin-top: 0.625rem; }
.fp-tabs__paneel:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; border-radius: var(--radius); }

/* ── SlideTabs ──────────────────────────────────────────────────────────── */

.fp-slidetabs { position: relative; display: inline-flex; width: fit-content; padding: 0.25rem; border: 2px solid var(--foreground); border-radius: 999px; background: var(--background); }
.fp-slidetabs__vak { position: relative; display: inline-flex; }
/* De schuif zit onder de tekst; de tekst keert om via difference-blend. */
.fp-slidetabs__schuif { position: absolute; inset: 0; border-radius: 999px; background: var(--foreground); }
.fp-slidetabs__tab {
  position: relative; z-index: 1; display: inline-flex; appearance: none; border: 0; background: transparent; cursor: pointer;
  padding: 0.375rem 0.75rem; font: inherit; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--background); mix-blend-mode: difference;
}
.fp-slidetabs--md .fp-slidetabs__tab { padding: 0.75rem 1.25rem; font-size: 1rem; }
.fp-slidetabs__tab:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; border-radius: 999px; }

/* ── Toast ──────────────────────────────────────────────────────────────── */

.fp-toaster { position: fixed; right: 1rem; bottom: 1rem; z-index: 9999; width: min(26.25rem, calc(100vw - 2rem)); pointer-events: none; }
.fp-toaster__stapel { position: relative; width: 100%; pointer-events: auto; }
.fp-toast {
  position: absolute; right: 0; bottom: 0; width: 100%; box-sizing: border-box; padding: 1rem; height: fit-content;
  border-radius: calc(var(--radius) * 1.5); border: 1px solid var(--border); background: var(--card); color: var(--card-foreground, var(--foreground)); box-shadow: var(--shadow-overlay);
  font: inherit; font-size: 0.875rem; line-height: 1.5;
  transition: transform var(--motion-smooth-duration) var(--motion-smooth), opacity var(--motion-smooth-duration) var(--motion-smooth);
}
.fp-toast[data-kind="success"] { background: var(--info); color: var(--background); border-color: transparent; }
.fp-toast[data-kind="warning"] { background: var(--warning); color: var(--foreground); border-color: transparent; }
.fp-toast[data-kind="error"] { background: var(--danger); color: var(--background); border-color: transparent; }
.fp-toast[data-verborgen] { opacity: 0; pointer-events: none; }
.fp-toast__rij { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.fp-toast__tekst { flex: 1 1 auto; }
.fp-toast__tekst a { color: inherit; text-decoration: underline; font-weight: 500; }
.fp-toast__knoppen { display: inline-flex; gap: 0.25rem; }
.fp-toast__icoonknop { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; appearance: none; border: 0; border-radius: var(--radius); background: transparent; color: inherit; cursor: pointer; transition: background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-toast__icoonknop:hover { background: color-mix(in srgb, currentColor 10%, transparent); }
.fp-toast__icoonknop[data-pressed] { background: color-mix(in srgb, currentColor 18%, transparent); }
.fp-toast__icoonknop:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-toast__acties { display: flex; justify-content: flex-end; gap: 0.5rem; margin-top: 0.75rem; }

/* ── ChannelList ────────────────────────────────────────────────────────── */

.fp-channels { width: 100%; max-width: 20rem; color: var(--foreground); }
.fp-channels__kop { margin: 0 0 0.75rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--border); font: inherit; font-size: 0.875rem; font-weight: 600; }
.fp-channels__lijst { list-style: none; margin: 0; padding: 0; }
.fp-channels__item { border-bottom: 1px solid var(--border); }
.fp-channels__item:last-child { border-bottom: 0; }
.fp-channels__label { display: flex; align-items: flex-start; gap: 0.75rem; padding: 0.75rem 0; cursor: pointer; }
.fp-channels__label[data-uit] { cursor: not-allowed; opacity: 0.5; }
.fp-channels__native { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
/* Het vinkje: leeg vakje in de merkkleurrand, gevuld zodra de native input aanstaat. */
.fp-channels__vinkje { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 1rem; height: 1rem; margin-top: 0.125rem; box-sizing: border-box; border: 1px solid var(--primary); border-radius: calc(var(--radius) * 0.4); color: var(--primary-foreground); background: transparent; transition: background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-channels__vinkje svg { opacity: 0; }
.fp-channels__label[data-aan] .fp-channels__vinkje { background: var(--primary); }
.fp-channels__label[data-aan] .fp-channels__vinkje svg { opacity: 1; }
.fp-channels__native:focus-visible + .fp-channels__vinkje { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-channels__tegel { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 2rem; height: 2rem; border-radius: var(--radius); border: 1px solid var(--border); background: color-mix(in srgb, var(--muted) 50%, transparent); color: var(--muted-foreground); font-size: 0.875rem; transition: background-color var(--motion-instant-duration) var(--motion-instant), border-color var(--motion-instant-duration) var(--motion-instant), color var(--motion-instant-duration) var(--motion-instant); }
.fp-channels__label[data-aan] .fp-channels__tegel { border-color: color-mix(in srgb, var(--primary) 20%, transparent); background: color-mix(in srgb, var(--primary) 10%, transparent); color: var(--primary); }
.fp-channels__tekst { display: flex; flex-direction: column; gap: 0.125rem; padding-top: 0.125rem; }
.fp-channels__naam { font: inherit; font-size: 0.875rem; font-weight: 500; line-height: 1.2; }
.fp-channels__sub { font: inherit; font-size: 0.75rem; color: var(--muted-foreground); }

/* ── FeedbackBar ────────────────────────────────────────────────────────── */

.fp-feedback { display: inline-flex; align-items: stretch; max-width: 100%; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.5); background: var(--background); color: var(--foreground); font: inherit; font-size: 0.875rem; }
.fp-feedback__vraag { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 0 0.75rem 1rem; }
.fp-feedback__icoon { display: inline-flex; color: var(--primary); }
.fp-feedback__titel { font-weight: 500; }
.fp-feedback__duimen { display: flex; align-items: center; gap: 0.125rem; padding: 0 0.75rem; }
.fp-feedback__duim, .fp-feedback__sluit { display: inline-flex; align-items: center; justify-content: center; appearance: none; border: 0; background: transparent; color: var(--muted-foreground); cursor: pointer; border-radius: var(--radius); transition: color var(--motion-instant-duration) var(--motion-instant), background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-feedback__duim { width: 2rem; height: 2rem; align-self: center; }
.fp-feedback__duim:hover, .fp-feedback__sluit:hover { color: var(--foreground); }
.fp-feedback__duim[aria-pressed="true"] { color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); }
.fp-feedback__duim[data-pressed], .fp-feedback__sluit[data-pressed] { background: var(--muted); }
.fp-feedback__duim:focus-visible, .fp-feedback__sluit:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 1px; }
.fp-feedback__sluitvak { display: flex; align-items: center; border-left: 1px solid var(--border); }
.fp-feedback__sluit { padding: 0.75rem; }

/* ── AreaChart ──────────────────────────────────────────────────────────── */

.fp-chart { position: relative; width: 100%; color: var(--foreground); }
.fp-chart__svg { display: block; overflow: visible; outline: none; }
.fp-chart__svg:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 4px; border-radius: var(--radius); }
.fp-chart__hulplijn { stroke: var(--border); stroke-dasharray: 3 3; }
.fp-chart__as { font: inherit; font-size: 0.6875rem; fill: var(--muted-foreground); }
.fp-chart__markering line { stroke: color-mix(in srgb, var(--foreground) 30%, transparent); stroke-dasharray: 3 3; }
.fp-chart__markering circle { stroke: var(--background); stroke-width: 2; }
.fp-chart__tooltip { position: absolute; top: 0.5rem; z-index: 1; display: grid; gap: 0.25rem; padding: 0.5rem 0.75rem; transform: translateX(var(--fp-chart-links, 0%)); border-radius: var(--radius); border: 1px solid var(--border); background: var(--card); color: var(--card-foreground, var(--foreground)); box-shadow: var(--shadow-overlay); font: inherit; font-size: 0.75rem; pointer-events: none; white-space: nowrap; }
.fp-chart__tooltip-kop { font-weight: 600; }
.fp-chart__tooltip-rij { display: flex; align-items: center; gap: 0.5rem; }
.fp-chart__tooltip-rij i, .fp-chart__legenda i { display: inline-block; width: 0.625rem; height: 0.625rem; border-radius: 50%; }
.fp-chart__tooltip-rij strong { margin-left: auto; font-variant-numeric: tabular-nums; }
.fp-chart__legenda { list-style: none; margin: 0.5rem 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; font: inherit; font-size: 0.75rem; color: var(--muted-foreground); }
.fp-chart__legenda li { display: inline-flex; align-items: center; gap: 0.375rem; }

/* ── data-table ────────────────────────────────────────────────────────── */
.fp-table { width: 100%; overflow-x: auto; border: 1px solid var(--border); border-radius: calc(var(--radius) * 1.5); background: var(--card); color: var(--card-foreground, var(--foreground)); }
.fp-table__tabel { width: 100%; border-collapse: separate; border-spacing: 0; font: inherit; font-size: 0.875rem; }
.fp-table__caption { padding: 0.75rem 1rem; text-align: left; font: inherit; font-size: 0.8125rem; color: var(--muted-foreground); caption-side: bottom; border-top: 1px solid var(--border); }
.fp-table__th { padding: 0.625rem 0.75rem; text-align: left; font: inherit; font-size: 0.75rem; font-weight: 500; color: var(--muted-foreground); background: color-mix(in srgb, var(--muted) 60%, transparent); border-bottom: 1px solid var(--border); white-space: nowrap; }
.fp-table__th[data-align="end"], .fp-table__cel[data-align="end"] { text-align: right; }
.fp-table__th[data-align="center"], .fp-table__cel[data-align="center"] { text-align: center; }
.fp-table__kopwoord { display: inline-block; }
.fp-table__sorteer { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0; appearance: none; border: 0; border-radius: calc(var(--radius) * 0.5); background: transparent; color: inherit; font: inherit; font-weight: inherit; cursor: pointer; transition: color var(--motion-instant-duration) var(--motion-instant); }
.fp-table__sorteer:hover, .fp-table__sorteer[data-actief] { color: var(--foreground); }
.fp-table__sorteer:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-table__pijl { opacity: 0; transform: rotate(0deg); transition: opacity var(--motion-instant-duration) var(--motion-instant), transform var(--motion-default-duration) var(--motion-default); }
.fp-table__sorteer:hover .fp-table__pijl { opacity: 0.5; }
.fp-table__sorteer[data-actief] .fp-table__pijl { opacity: 1; }
.fp-table__sorteer[data-actief="desc"] .fp-table__pijl { transform: rotate(180deg); }
.fp-table__rij { position: relative; background: var(--card); transition: background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-table__rij:hover { background: color-mix(in srgb, var(--muted) 50%, transparent); }
.fp-table__rij[data-gekozen] { background: color-mix(in srgb, var(--primary) 8%, transparent); }
.fp-table__rij[data-getild] { z-index: 1; cursor: grabbing; box-shadow: var(--shadow-overlay); }
.fp-table__cel { padding: 0.625rem 0.75rem; border-bottom: 1px solid var(--border); vertical-align: middle; }
.fp-table__body tr:last-child .fp-table__cel { border-bottom: 0; }
.fp-table__cel--greep, .fp-table__cel--vink { width: 2.5rem; padding-left: 0.5rem; padding-right: 0.25rem; text-align: center; }
.fp-table__greep { display: inline-flex; align-items: center; justify-content: center; width: 1.5rem; height: 1.5rem; appearance: none; border: 0; border-radius: calc(var(--radius) * 0.5); background: transparent; color: color-mix(in srgb, var(--muted-foreground) 60%, transparent); cursor: grab; touch-action: none; transition: color var(--motion-instant-duration) var(--motion-instant), background-color var(--motion-instant-duration) var(--motion-instant); }
.fp-table__greep:hover { color: var(--foreground); background: color-mix(in srgb, var(--foreground) 8%, transparent); }
.fp-table__greep:disabled { cursor: not-allowed; opacity: 0.4; }
.fp-table__greep:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-table__rij[data-getild] .fp-table__greep { cursor: grabbing; }
.fp-table__vink { width: 1rem; height: 1rem; margin: 0; accent-color: var(--primary); cursor: pointer; }
.fp-table__vink:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 2px; }
.fp-table__leeg { padding: 2rem 1rem; text-align: center; font: inherit; font-size: 0.875rem; color: var(--muted-foreground); }
@media (prefers-reduced-motion: reduce) { .fp-table__pijl { transition-duration: 0s; } }

/* ── image-cropper ─────────────────────────────────────────────────────── */
.fp-crop { display: flex; flex-direction: column; align-items: center; gap: 1rem; width: 100%; max-width: 24rem; color: var(--foreground); }
.fp-crop .fp-drop { width: 100%; }
.fp-crop__editor, .fp-crop__resultaat { display: flex; flex-direction: column; align-items: center; gap: 1rem; width: 100%; }
.fp-crop__kader { position: relative; width: var(--fp-crop-maat, 208px); height: var(--fp-crop-maat, 208px); overflow: hidden; border-radius: 50%; background: var(--muted); box-shadow: 0 0 0 1px var(--border), 0 0 0 0.5rem color-mix(in srgb, var(--primary) 10%, transparent); cursor: grab; touch-action: none; user-select: none; }
.fp-crop[data-vorm="square"] .fp-crop__kader { border-radius: calc(var(--radius) * 1.5); }
.fp-crop__kader:active { cursor: grabbing; }
.fp-crop__kader:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 4px; }
.fp-crop__beeld { position: absolute; top: 50%; left: 50%; max-width: none; transform-origin: center; pointer-events: none; }
.fp-crop__kader--klaar { cursor: default; overflow: visible; }
.fp-crop__uitvoer { display: block; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
.fp-crop__vink { position: absolute; right: 0.25rem; bottom: 0.25rem; display: inline-flex; align-items: center; justify-content: center; width: 1.75rem; height: 1.75rem; border-radius: 50%; background: var(--success); color: var(--background); box-shadow: 0 0 0 3px var(--background); }
.fp-crop__zoomrij { display: flex; align-items: center; gap: 0.75rem; width: 100%; max-width: 16rem; }
.fp-crop__zoomlabel { font: inherit; font-size: 0.75rem; font-weight: 500; color: var(--muted-foreground); }
.fp-crop__zoom { flex: 1 1 auto; margin: 0; accent-color: var(--primary); cursor: pointer; }
.fp-crop__zoom:focus-visible { outline: 2px solid var(--ring, var(--info)); outline-offset: 4px; }
.fp-crop__acties { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; }