/* =========================================================================
   Ghost Installations · quote form dialog   (/assets/gi-form.css)

   Styles the markup gi-form.js enhances: section GI-19's <dialog
   id="gi-dialog"> and the step-1 plate and step-4 price card it draws
   through the gi-plate and gi-price partials. Section GI-19 declares this
   file css_lazy: the build preloads it in the head of every page that
   shows the form, so it never blocks the first paint, and gi-form.js
   applies it (a new <link> at the end of <head>, after the page's inline
   CSS: the same cascade as before, page CSS then form CSS) and waits for
   it, at most a second, before the dialog first opens. The no-JS block
   above the footer is GI-19's own inline section.css, because it must
   work without this file and without JavaScript.

   Where every value comes from, because the form must look like the page:
   - Colours, faces, radii and spacing: the compiled brand tokens
     (brand/ghost-installations.css, from DESIGN-ghost-installations.md).
     No colour is typed here except the fallbacks below, the backdrop's
     60% black, the select chevron's black and the opt-out tick's white
     (inline SVGs cannot read a custom property).
   - GI's own colours (brief §3.4): --gi-action-pressed, --gi-input-border,
     --gi-focus, --gi-progress-off, --gi-plate-border and --gi-tick are kit
     tokens (the kit's semantic: block), so every GI page has them. Each is
     still read with the brief's value as a fallback, so the form renders
     right in a test harness that loads this file alone.
   - Type sizes: the explicit scale in brief §3.3, by role, NOT the compiled
     --text-* steps (DESIGN-ghost-installations.md explains why: the
     compiled scale is not monotonic on phones). The role each size takes is
     named beside it. They are literal sizes, not the GI base's --gi-type-*
     tokens of the same value, because until the London page moves onto the
     section library it loads this file without the GI base.
   - Decluttered 19 Oct 2026 (Jonathan): one bold level per step (the
     question, 22-26px), labels 16px/600, hints 15px muted, a quiet header
     and small print in the muted ink; call times as 2x2 tiles.
   - Controls (brief §3.5, before the declutter): labels Nunito Sans 18px/700; inputs 18px (16px
     or more stops iOS zooming on focus), 52px tall, 1px input border,
     radius 5px, no inset shadow; the plate 28px text, 60px tall; option
     buttons at least 64px tall; primary actions are red pills with a 19px
     bold label (white on #ED392C is 4.02:1, AA only as large text, which
     19px bold is) [CONFIRM K-a11y].
   - Motion: none. The live page changes colour instantly (transition: all
     0s), and so does this.

   Classes are edge-gi-form__<element>--<modifier>: one block, the
   section's (GI-19, sections/GI-19-gi-form/), so nothing here can collide
   with another section. html.gi-dialog-open is the page-lock state the
   engine sets on <html>.

   The tokens, the fields and the plate live in gi-form-core.css, which
   loads first: the inline card (F8, concept v2: [data-gi-inline], section
   GI-20) shows step 1's plate on the page at first paint, so its page
   links that small file render-blocking while this one stays a preload.
   ========================================================================= */

/* ---- tokens and fields: gi-form-core.css ---------------------------------- */

/* ---- the dialog ----------------------------------------------------------
   Never set `display` on the closed dialog: the UA's display:none is what
   keeps it invisible without JavaScript. Desktop: a centred card, at most
   560px wide. Below 600px (the page's single-column switch): a full-screen
   sheet, so nothing on the page shows round it and no field sits behind
   the sticky bar (WCAG 2.4.11). */
.edge-gi-form {
  box-sizing: border-box;
  width: calc(100% - 32px);
  max-width: 560px;
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  margin: auto;
  padding: 0;
  border: 0;
  border-radius: var(--radius-md);
  background: var(--gif-surface);
  color: var(--gif-ink);
  font-family: var(--font-body);
  font-size: 16px;                              /* §3.3 Body */
  line-height: 1.625;
  overflow: auto;
  overscroll-behavior: contain;
  /* F3 (baseline U3): the dialog is its own scroll container, so the
     page's scroll-padding never reached in here and a focused field landed
     flush against the keyboard. Now it lands with room below for its hint
     and error, and clear of the keyboard's suggestion strip. */
  scroll-padding-block: 16px 168px;             /* 120px of room, plus the trust bar */
  box-shadow: none;
}
.edge-gi-form::backdrop { background: rgba(0, 0, 0, 0.6); }
.edge-gi-form *,
.edge-gi-form *::before,
.edge-gi-form *::after { box-sizing: border-box; }
.edge-gi-form [hidden] { display: none !important; }

/* Read by screen readers, not shown ("Error:" before a field's message). */
.edge-gi-form__sr {
  position: absolute !important;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

@media (max-width: 599.98px) {
  .edge-gi-form {
    --gif-pad: var(--space-4);                  /* the page's mobile gutter */
    width: 100%;
    max-width: none;
    height: 100%;
    max-height: none;
    border-radius: 0;
  }
}

/* From 600px the card sits at a fixed distance from the top rather than
   centred: centred, it changed height and jumped by up to 150px between
   steps, so Close, Back and the progress moved under the pointer. The
   height cap follows the new top margin, so the bottom is never cut off. */
@media (min-width: 600px) {
  .edge-gi-form {
    margin: max(16px, 6vh) auto auto;
    max-height: calc(100vh - max(16px, 6vh) - 16px);
    max-height: calc(100dvh - max(16px, 6dvh) - 16px);
  }
}

/* The page behind does not scroll while the dialog is open. */
html.gi-dialog-open { overflow: hidden; }

/* Element reset at ONE class of specificity (the elements sit in :where()).
   That beats the page's own element rules (a layout's "h2 { margin… }"
   must not reach into the form), and ties with every edge-gi-form__ class
   below, which win because they come later. A plain ".edge-gi-form p" (one
   class plus one element) outranked ".edge-gi-form__hint" and silently ate its
   margin. */
.edge-gi-form :where(p, h2, h3, ul, ol, fieldset, legend) { margin: 0; padding: 0; }
.edge-gi-form :where(fieldset) { border: 0; min-width: 0; }
.edge-gi-form :where(legend) { display: block; width: 100%; }
.edge-gi-form :where(a) { color: var(--gif-ink); text-underline-offset: 0.15em; }
/* A phone number never breaks across lines (the relay error wrapped it as
   "0800 / 246 1482" at 1280px). */
.edge-gi-form :where(a[href^="tel:"]) { white-space: nowrap; }
.edge-gi-form :where(img, svg) { display: inline-block; vertical-align: middle; }

/* ---- focus: 3px black ring with a 2px gap (§3.4 --gi-focus), >= 3:1 -------- */
.edge-gi-form :focus-visible { outline: 3px solid var(--gif-focus); outline-offset: 2px; }
.edge-gi-form .edge-gi-form__question:focus,
.edge-gi-form .edge-gi-form__summary:focus,
.edge-gi-form .edge-gi-form__fail:focus { outline: none; }   /* moved to for reading, not for typing */

/* ---- top bar: Back and Close, both 44px targets -------------------------- */
.edge-gi-form__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 52px;
  padding: var(--space-1) var(--space-2) 0 var(--gif-pad);
}
.edge-gi-form__back,
.edge-gi-form__close {
  min-width: 44px;
  min-height: 44px;
  border: 0;
  background: none;
  color: var(--gif-ink);
  cursor: pointer;
}
.edge-gi-form__back {
  margin-left: calc(-1 * var(--space-2));
  padding: 0 var(--space-2);
  font: 600 15px/1.2 var(--font-body);
  text-decoration: none;
}
.edge-gi-form__back:hover { text-decoration: underline; text-underline-offset: 0.15em; }
.edge-gi-form__close {
  margin-left: auto;
  font: 400 32px/1 var(--font-body);
}
.edge-gi-form__back:hover,
.edge-gi-form__close:hover { color: var(--gif-red-hover); }

/* ---- header: the progress bar straight under Back and Close, then, on
   step 1 only (and the exits and the leave check), the title and its one
   promise line, left-aligned with everything below, so every screen reads
   down one edge. "Step n of 5" is for screen readers only
   (edge-gi-form__sr): the bar says it. [CONFIRM K-form-header] */
.edge-gi-form__head {
  display: flex;
  flex-direction: column;
  padding: 0 var(--gif-pad) var(--space-4);
}
.edge-gi-form__head > .edge-gi-form__progress { order: -1; margin: 0 0 var(--space-4); }
.edge-gi-form:is([data-gi-step="2"], [data-gi-step="3"], [data-gi-step="4"], [data-gi-step="5"]) .edge-gi-form__title { display: none; }
.edge-gi-form:is([data-gi-step="2"], [data-gi-step="3"], [data-gi-step="4"], [data-gi-step="5"]) .edge-gi-form__progress { margin-bottom: var(--space-2); }
.edge-gi-form__title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 17px;
  line-height: 1.3;
  color: var(--gif-ink);
}
.edge-gi-form__sub {
  margin-top: 2px;
  font: 400 14px/1.5 var(--font-body);
  color: var(--gif-muted);
}
.edge-gi-form:not([data-gi-step="1"]) .edge-gi-form__sub { display: none; }
/* One bar, filled by share of the flow (the script sets the width): the
   quick route skips step 2, so the bar shows no count to break. */
.edge-gi-form__meter {
  height: 4px;
  border-radius: 2px;
  background: var(--gif-progress-off);
  overflow: hidden;
}
.edge-gi-form__meter-fill {
  display: block;
  height: 100%;
  border-radius: 2px;
  background: var(--gif-red);
}

/* ---- body --------------------------------------------------------------- */
.edge-gi-form__form,
.edge-gi-form__leave { padding: 0 var(--gif-pad) var(--gif-pad); }
.edge-gi-form__step,
.edge-gi-form__exit,
.edge-gi-form__leave { display: block; }

.edge-gi-form__question {
  margin-bottom: var(--space-4);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(22px, 2.2vw, 26px);          /* the step's one heading */
  line-height: 1.25;
  color: var(--gif-ink);
}
/* Step 1: "We don't share your registration." sits with the plate. */
.edge-gi-form__step[data-step="1"] .edge-gi-form__field { margin-bottom: 0; }
.edge-gi-form__step[data-step="1"] .edge-gi-form__field + .edge-gi-form__micro { margin-top: var(--space-2); }
/* The dialog's plate takes the column's width, so its edges line up with the
   button under it (the v2 card's does too). */
.edge-gi-form .edge-gi-form__plate,
.edge-gi-form .edge-gi-form__input--plate { max-width: none; }
/* Step 1: the question names the field, so the plate's own label (the
   same words) is read to screen readers only; on the v2 card, which has
   no question, it stays. The quick route's postcode, moved up under the
   plate, keeps its label: the question does not name it. */
.edge-gi-form__step[data-step="1"] .edge-gi-form__field:not(.edge-gi-form__field--postcode) .edge-gi-form__label {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.edge-gi-form__question label { cursor: default; }

/* Error summary (GOV.UK): red rule, links to each field. */
.edge-gi-form__summary {
  margin-bottom: var(--space-5);
  padding: var(--space-3) var(--space-4);
  border: 3px solid var(--gif-err);
  border-radius: 8px;
}
.edge-gi-form__summary-title {
  font: 700 18px/1.4 var(--font-body);
  color: var(--gif-ink);
}
.edge-gi-form__summary-list {
  margin-top: var(--space-2);
  padding-left: 0;
  list-style: none;
}
.edge-gi-form__summary-list a {
  font-weight: 700;
  color: var(--gif-err);
}

/* ---- actions ------------------------------------------------------------ */
.edge-gi-form__actions {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--space-3);
  margin-top: var(--space-5);
}

/* The pill CTA (§3.5): #ED392C, instant hover to #E12C21, pressed #D5251C. */
.edge-gi-form__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 56px;
  padding: 14px var(--space-6);
  border: 0;
  border-radius: var(--radius-full);
  background: var(--gif-red);
  color: var(--gif-on-red);
  font: 700 19px/1.2 var(--font-body);          /* §3.3 Button */
  text-align: center;
  text-decoration: none;
  cursor: pointer;
}
.edge-gi-form__btn:hover { background: var(--gif-red-hover); color: var(--gif-on-red); }
.edge-gi-form__btn:active { background: var(--gif-red-pressed); }
.edge-gi-form__btn[disabled] { cursor: progress; }

/* Secondary: white, black text and border, inverting on hover (the
   utility-bar button style). */
.edge-gi-form__btn--secondary {
  border: 2px solid var(--gif-ink);
  background: var(--gif-surface);
  color: var(--gif-ink);
}
.edge-gi-form__btn--secondary:hover,
.edge-gi-form__btn--secondary:active { background: var(--gif-ink); color: var(--gif-surface); }

/* Step 2's postcode: set apart from the car's fields above it. */
.edge-gi-form__field--postcode { margin-top: var(--space-6); }

/* Small print centred under a full-width button (the closed-hours line,
   the buy route's note). */
.edge-gi-form__micro--centre { margin-top: calc(-1 * var(--space-1)); text-align: center; }

/* F9: step 2's "filled in from your registration" line, set apart from
   the hint above it as a confirmation, in the ink. */
.edge-gi-form__hint--lookup { margin-top: var(--space-2); color: var(--gif-ink); font-weight: var(--weight-bold); }

/* A button that reads as a link ("I don't know the registration"). */
.edge-gi-form__link {
  min-height: 44px;
  padding: var(--space-2) 0;
  border: 0;
  background: none;
  color: var(--gif-ink);
  font: 600 15px/1.4 var(--font-body);
  text-decoration: underline;
  text-underline-offset: 0.15em;
  cursor: pointer;
}
.edge-gi-form__link:hover { color: var(--gif-red-hover); }
.edge-gi-form__link--inline { min-height: 0; padding: 0; font-weight: 700; }

.edge-gi-form__micro {
  margin-top: var(--space-3);
  font: 400 14px/1.571 var(--font-body);        /* §3.3 Legal */
  color: var(--gif-muted);
}
.edge-gi-form__micro a { color: var(--gif-ink); }
/* The trust bar: pinned to the foot of the sheet on every screen. The
   open dialog is a flex column, so on a short step the bar still sits at
   the bottom (margin-top: auto) and on a long one it stays in view as the
   step scrolls under it (sticky). The home-indicator inset is added below
   it on phones. */
.edge-gi-form[open] { display: flex; flex-direction: column; }   /* never on the closed dialog */
.edge-gi-form__foot {
  position: sticky;
  bottom: 0;
  z-index: 1;
  margin-top: auto;
  padding: 10px var(--gif-pad) calc(10px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid var(--color-rule);
  background: var(--gif-tint);
}
.edge-gi-form__trust {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  color: var(--gif-ink);
  font: 600 14px/1.5 var(--font-body);
}
.edge-gi-form__trust img { width: 96px; height: auto; }

/* ---- step 2: compatibility note ---------------------------------------- */
.edge-gi-form__note-line {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
  padding: var(--space-3) var(--space-4);
  border-radius: 12px;
  background: var(--gif-tint);
}
.edge-gi-form__tick {
  flex: 0 0 auto;
  width: 20px;
  height: 15px;
  margin-top: 5px;
  color: var(--gif-tick);
}
/* The "good news" line. Its tick is the page's own green one, drawn for a
   dark ground (the finance panel); bare on this light tint it was about
   1.4:1 and barely read. On a black disc it reads here as it does on
   /thanks/ (integration review). Content-box padding turns the 14 x 11
   tick into a 28px circle. */
.edge-gi-form__note-line--good { align-items: center; }
.edge-gi-form__note-line--good .edge-gi-form__tick {
  box-sizing: content-box;
  width: 14px;
  height: 11px;
  margin-top: 0;
  padding: 8.5px 7px;
  border-radius: 50%;
  background: var(--gif-ink);
}

/* ---- step 3: the price card (the old step 4's, compact) -----------------
   It sits under the question as the visitor's quote: the name and the
   figure on one line from 360px, the included lines small beneath. */
.edge-gi-form__price {
  margin-bottom: var(--space-4);
  padding: var(--space-5);
  border-radius: 12px;
  background: var(--gif-tint);
}
.edge-gi-form__price-name { font-weight: 700; }

/* ---- step 3: the vehicle back, as the confirmation (20 Oct 2026) --------
   Above the price: what we found, the plate as a small plate, where it is
   fitted, and "Change" to step 2. */
.edge-gi-form__vehicle {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  column-gap: var(--space-3);
  margin-bottom: var(--space-3);
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--gif-border);
  border-radius: 12px;
}
.edge-gi-form__vehicle[hidden] { display: none; }
.edge-gi-form__vehicle-label { grid-column: 1; font-size: 14px; color: var(--gif-muted); }
.edge-gi-form__vehicle-name { grid-column: 1; font-weight: 700; font-size: 17px; line-height: 1.3; }
.edge-gi-form__vehicle-year { font-weight: 400; color: var(--gif-muted); }
.edge-gi-form__vehicle-meta { grid-column: 1; margin-top: var(--space-1); font-size: 14px; color: var(--gif-muted); }
.edge-gi-form__vehicle-plate {
  display: inline-block;
  margin-right: var(--space-2);
  padding: 1px 6px;
  border: 1px solid var(--gif-plate);
  border-radius: 3px;
  background: var(--gif-plate-ground);
  color: var(--gif-plate);
  font-weight: 700;
  letter-spacing: 0.04em;
}
.edge-gi-form__vehicle-plate[hidden] { display: none; }
.edge-gi-form__vehicle-edit { grid-column: 2; grid-row: 1 / span 3; }
.edge-gi-form__step[data-step="3"] .edge-gi-form__price { margin-bottom: var(--space-5); padding: var(--space-3) var(--space-4); }
.edge-gi-form__step[data-step="3"] .edge-gi-form__price-figure { margin: 0 0 var(--space-1); font-size: 24px; }
.edge-gi-form__step[data-step="3"] .edge-gi-form__price-list,
.edge-gi-form__step[data-step="3"] .edge-gi-form__price-text { font-size: 15px; line-height: 1.5; }

.edge-gi-form__price-figure {
  margin: var(--space-1) 0 var(--space-3);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(22px, 2.5vw, 32px);          /* §3.3 Sub-heading */
  line-height: 1.188;
}
.edge-gi-form__price-list { padding-left: 1.25em; list-style: disc outside; }   /* the page's CSS zeroes list-style */
.edge-gi-form__price-text + .edge-gi-form__price-text { margin-top: var(--space-2); }

/* ---- step 3: email suggestion, call times, opt-out ---------------------- */
.edge-gi-form__suggest {
  margin-top: var(--space-2);
  padding: var(--space-3) var(--space-4);
  border-left: 4px solid var(--gif-ink);
  background: var(--gif-tint);
}
.edge-gi-form__suggest .edge-gi-form__link { margin-right: var(--space-4); }

/* The call times and the opt-out are 48px tap rows (F5, baseline U8: the
   24px controls with 26px labels passed WCAG's 24px but not a thumb).
   Each control keeps its 24px look, drawn inside a 48px box (a 12px
   transparent border round a 24px padding box), which hangs 12px into the
   gutter so the mark still lines up with the labels above; the label
   fills the rest of the row, its first line centred on the mark. The
   focus ring is pulled in to sit 3px round the mark. Forced colours
   (which drop the drawing) get the native control back. */
/* Call times: four tap tiles, two by two (decluttered, 19 Oct 2026), in
   place of four stacked rows. Each tile is the radio's row with a border;
   the chosen one takes the ink border and the tint. Slots outside the
   opening hours are hidden, and the grid closes up. */
.edge-gi-form__times {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-2);
  margin-bottom: var(--space-4);
}
.edge-gi-form__times > .edge-gi-form__label { grid-column: 1 / -1; margin-bottom: 0; }
.edge-gi-form__times .edge-gi-form__radio {
  align-items: stretch;
  min-height: 52px;
  padding-left: var(--space-2);
  border: 1px solid var(--gif-border);
  border-radius: 8px;
  background: var(--gif-surface);
}
.edge-gi-form__times .edge-gi-form__radio:has(input:checked) {
  border: 2px solid var(--gif-ink);
  padding-left: calc(var(--space-2) - 1px);
  background: var(--gif-tint);
}
.edge-gi-form__times .edge-gi-form__radio input { align-self: center; margin-left: -8px; }
/* The label fills the tile, so a tap anywhere on it picks it (F5's 48px rows). */
.edge-gi-form__times .edge-gi-form__radio label { display: flex; align-items: center; padding: 4px 8px 4px 0; font-size: 15px; line-height: 1.3; }
.edge-gi-form__radio,
.edge-gi-form__check {
  display: flex;
  align-items: flex-start;
  min-height: 48px;
}
.edge-gi-form__radio input,
.edge-gi-form__check input {
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  margin: 0 0 0 -12px;
  border: 12px solid transparent;
  border-radius: 50%;
  background: var(--gif-surface) padding-box;
  box-shadow: inset 0 0 0 2px var(--gif-ink);
  -webkit-appearance: none;
  appearance: none;
  cursor: pointer;
}
.edge-gi-form__check input { border-radius: 15px; }   /* a 3px corner on the 24px box */
.edge-gi-form__radio input:checked {
  background: radial-gradient(circle, var(--gif-ink) 6px, transparent 6.5px) padding-box var(--gif-surface);
}
.edge-gi-form__check input:checked {
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M3 8.5l3.2 3.2L13 5' fill='none' stroke='%23fff' stroke-width='2.4'/%3E%3C/svg%3E") center / 16px no-repeat padding-box, padding-box var(--gif-ink);
}
.edge-gi-form__radio input:focus-visible,
.edge-gi-form__check input:focus-visible { outline-offset: -9px; }
.edge-gi-form__radio label,
.edge-gi-form__check label {
  flex: 1 1 auto;
  padding: 11px 0;
  cursor: pointer;
}
.edge-gi-form__check { margin-bottom: var(--space-2); }
.edge-gi-form__check label { font-size: 14px; line-height: 1.5; color: var(--gif-muted); }
@media (forced-colors: active) {
  .edge-gi-form__radio input,
  .edge-gi-form__check input {
    width: 24px;
    height: 24px;
    margin: 12px 12px 12px 0;
    border: 0;
    -webkit-appearance: auto;
    appearance: auto;
  }
}

.edge-gi-form__fail {
  margin-top: var(--space-4);
  padding: var(--space-3) var(--space-4);
  border-left: 4px solid var(--gif-err);
  font-weight: 700;
  color: var(--gif-err);
}
.edge-gi-form__fail a { color: inherit; }

/* ---- exits and the leave check ----------------------------------------- */
.edge-gi-form__exit p + p,
.edge-gi-form__leave p { margin-top: var(--space-3); }
.edge-gi-form__leave { padding-top: var(--space-2); }

/* ---- wider screens: the actions sit side by side where they fit --------- */
/* Every width: the main action spans the column, so it lines up with the
   fields above it (centred at 280px it sat off the plate's left edge). */

/* ---- phones: a tighter rhythm, so step 4's options reach the first screen
   (with the slim header above: "Get a call back" ends inside 667px at 375
   wide). Spacing and line height only: no copy, no order, every target
   still 44px or more. Last in the file, so it wins over the rules above. */
@media (max-width: 599.98px) {
  .edge-gi-form__head { padding-bottom: var(--space-3); }
  .edge-gi-form__bar { min-height: 48px; padding-top: 2px; }
  .edge-gi-form__question { margin-bottom: var(--space-3); }
  .edge-gi-form__price { margin-bottom: var(--space-3); padding: var(--space-4); }
  .edge-gi-form__price-figure { margin: 2px 0 6px; }
  .edge-gi-form__price-list,
  .edge-gi-form__price-text { line-height: 1.5; }
}

/* No motion anywhere, and none sneaks in from a page-wide rule. */
@media (prefers-reduced-motion: reduce) {
  .edge-gi-form *,
  .edge-gi-form *::before,
  .edge-gi-form *::after { transition: none !important; animation: none !important; }
}
