/* ==========================================================================
   T38 — Advanced Search (/catalogsearch/advanced/)

   SCOPED ON `.hrv-page-t38`, A DECLARED CLASS, AND THE NATIVE `catalogsearch-advanced-index` IS
   ASSERTED SEPARATELY RATHER THAN USED AS THE HOOK.
   Both classes are really on <body> — MEASURED on the live page, not reasoned by analogy from
   another page, because a reskin scoped to a GUESSED body class is 100% dead CSS while passing
   every static review. `catalogsearch-advanced-index` comes from Magento's own layout for this
   route; `hrv-page-t38` is declared by this theme's handle
   (<attribute name="class" value="hrv-page-t38"/>), following the theme convention that the hook
   is DECLARED and never derived. The gate asserts BOTH: if the declared attribute ever fails to
   merge, `body-class-is-hrv-page-t38` goes red and names that cause directly, instead of six
   geometry rows going red and being read as a CSS bug.

   THIS IS A RESKIN OF CORE MARKUP, WHICH CHANGES WHAT THIS FILE HAS TO DO.
   Every other page sheet in this theme styles markup the theme itself authored. Here the fields
   are generated by Magento\CatalogSearch\Block\Advanced\Form and shaped by Blank/Luma's form
   layer, so most of what follows is UNDOING a cascade rather than declaring a look. Every rule
   below that overrides one of those is annotated with the WINNING rule it has to beat, its
   specificity and the stylesheet it came from — all read out of the live page's own
   document.styleSheets by a rule walker carrying a positive control (it also had to find the two
   rules that set the inputs' padding, and returned 2). None of it is inferred.

   COMPONENTS THAT ALREADY OWN ELEMENTS ON THIS PAGE — enumerated before a line was written, per
   the playbook's rule, because on T15 six of eight elements were already owned and skipping this
   produced a duplicated card shell and an AA-failing #fff:
     inputs / selects   `components/_forms.css` owns border, radius, padding (12px 14px),
                        background, placeholder colour and the focus treatment. This sheet adds
                        exactly two things to them: a 44px floor (register #106) and a focus ring
                        that can actually be seen.
     the submit         `components/_buttons.css` owns `.action.primary` — fill, border, radius,
                        padding, hover, disabled. MEASURED 44.8px tall and 5.44:1 already. This
                        sheet declares NOTHING about its appearance.
     h1                 `components/_base.css` (32px, 26px under 768). Not touched; the page title
                        is Magento's own block and sits outside `.hrv-t38`.
     tokens             `tokens/_derived.css` owns --hrv-surface / --hrv-border / --hrv-text-muted.
                        No literal colour appears below.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. The inner measure — 720, the comp's own

   REGISTER #98, AND WHY IT DOES NOT BITE HERE — stated because "it does not apply" is the kind of
   claim that is usually wrong. The artboard's wrapper is `padding: 14px 40px 0; max-width: 720px`
   on a content-box document: 720 of CONTENT, 800 of border box. Under Harvest's theme-wide
   `* { box-sizing: border-box }` a literal transcription of BOTH declarations would yield 640 of
   content — 80px short — while `rect.width` still read a reassuring 720. So the horizontal padding
   is NOT transcribed: `--hrv-page-pad` already supplies the comp's gutter on `.column.main`
   (MEASURED 16 / 24 / 32 / 32 at 375 / 768 / 1024 / 1440), and with no inline padding on the
   capped element content.width === rect.width and the trap has nothing to act on.

   NO `margin-inline: auto`, DELIBERATELY. The comp's wrapper has none — it is left-aligned against
   the page gutter, not centred — and T30/T37's centred wrappers are a different artboard shape.

   MEASURED `.column.main` content: 343 / 721 / 735 / 720 / 960 / 1376 at 375 / 753 / 767 / 768 /
   1024 / 1440, so this cap FIRST BINDS AT 753 and is satisfied EXACTLY (without binding) at 768.
   Both are gated, because below the binding edge a capped and an uncapped wrapper measure the same
   and a gate that only checked 375/768/1024 would be blind to this rule at most of its widths.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 {
  max-width: 720px;
}

/*
   AND THE FORM INSIDE IT HAS TO BE TOLD, BECAUSE BLANK PINS IT TO 600px REGARDLESS.
   Found in the S3 pass on the DEPLOYED page: `.hrv-t38` measured a correct 720, and the panel
   inside it measured 600 — a 120px gap on the only element the page has.

     styles-l.css  @media (min-width: 768px), print
       .form.password.reset, .form.send.confirmation, .form.password.forget,
       .form.create.account, .form.search.advanced, .form.form-orders-search {
           width: 50%; min-width: 600px }

   The `width: 50%` is not what bites — 50% of 720 is 360. It is the `min-width: 600px` sitting
   beside it, which clamps the result back up to 600 and makes the form look almost right. That
   pairing is why the number is 600 at 768, at 1024 AND at 1440: it is a floor, not a proportion,
   so it does not scale with the container and no single-width check would have made it obvious.

   THE GATE COULD NOT SEE THIS, AND THAT IS THE REAL LESSON. Six inner-measure rows assert
   `.hrv-t38` is 720; not one row measured the PANEL. The container was correct and the thing
   inside it was not, which is the exact shape a container-only assertion is blind to.
   `panel-fills-the-inner-measure-*` now measures the panel at every width.

   (0,5,0) against Blank at (0,3,0). `min-width: 0` is the load-bearing half; `width: 100%` alone
   would still be clamped by the floor.
*/
.hrv-page-t38 .hrv-t38 .form.search.advanced {
  width: 100%;
  min-width: 0;
}

/* --------------------------------------------------------------------------
   2. The lede

   The comp's sentence sits directly under the h1 at `font-size: 14px; margin: 8px 0 0`.
   `--hrv-text-muted`, NOT `--hrv-text-subtle`. MEASURED on this surface: muted 6.13:1, subtle
   3.86:1 — subtle is a live AA failure below 18.66px, which is register #39, and T21 had to revert
   to muted after subtle regressed an element that had been passing. The comp's own value is
   `color-mix(in oklab, var(--tx) 58%, var(--bg))`, which is not a token; re-deriving it here would
   put a raw colour mix in a page sheet for a 7% difference that fails no test either way.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38__lede {
  margin: 8px 0 0;
  font-size: 14px;
  line-height: 1.6;
  color: var(--hrv-text-muted);
}

/* --------------------------------------------------------------------------
   3. The panel

   The comp's card: `background: var(--sf); border: 1px solid color-mix(in oklab, var(--tx) 10%,
   var(--bg)); border-radius: 18px; padding: 28px; margin-top: 22px`. `--hrv-border` is defined as
   exactly that mix (`tokens/_derived.css`), so this is the token and not a re-derivation of it.

   MEASURED PRE-DEPLOY: the native <fieldset> computes `background-color: rgba(0, 0, 0, 0)` and
   `border-radius: 0px` — there is no card on this page at all today.

   NOT `display: flex` WITH A `gap`, AND THAT IS THE INTERESTING PART. The comp's panel is drawn as
   a flex column with `gap: 18px`, and transcribing that literally would be wrong for THIS markup:
   the core template emits `<legend>` and a bare `<br />` as the fieldset's first two children, and
   both would become flex items and each would consume a full 18px gap — roughly 36px of dead space
   above the first field, on a panel whose whole shape is its padding. The spacing is expressed as a
   margin between adjacent `.field` siblings instead, which is invariant to how many non-field
   children the core template happens to emit.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .fieldset.hrv-t38__panel {
  margin: 22px 0 0;
  padding: 28px;
  background: var(--hrv-surface);
  border: 1px solid var(--hrv-border);
  border-radius: 18px;
}

/* Beats Luma's `.fieldset > .field { margin: 0 0 20px }` at (0,2,0); this is (0,5,0)
   (.hrv-page-t38 .hrv-t38 .fieldset .hrv-t38__panel .field — the panel hook counts). The
   comment said (0,4,0); the conclusion is unaffected but the figure was wrong, and in this file
   the figures are supposed to be counted rather than estimated. S1 correctness review. */
.hrv-page-t38 .hrv-t38 .fieldset.hrv-t38__panel > .field {
  margin: 0;
}
.hrv-page-t38 .hrv-t38 .fieldset.hrv-t38__panel > .field + .field {
  margin-block-start: 18px;   /* the comp's `gap: 18px` between form rows */
}

/* --------------------------------------------------------------------------
   3b. The legend — HIDDEN, NOT REMOVED, and clipped rather than display:none

   <legend> is the ACCESSIBLE NAME of its <fieldset>: a screen reader announces "Search Settings,
   group" on entering it. The comp's card has no visible header, so it is clipped out of view and
   left in the accessibility tree. `display: none` would have looked identical and would have
   deleted the group's name — the same outcome as removing the element, while appearing to keep it.

   Beats `.fieldset .legend { margin-left: 25.8% }` (styles-l.css, (0,2,0), @media min-width 768) —
   which is why an un-reset legend is indented to the old label column even when invisible.

   The `<br />` the core template emits immediately after the legend is display:none'd on its own
   line: it is pure presentational filler for the default layout, it carries no text and no
   semantics, and left alone it opens a full line box at the top of the panel.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .hrv-t38__legend {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}
.hrv-page-t38 .hrv-t38 .hrv-t38__legend + br {
  display: none;
}

/* --------------------------------------------------------------------------
   4. Label above control — the change this task is actually about

   BLANK PUTS THE LABEL IN A LEFT COLUMN FROM 768 UP. Read out of the live page's own stylesheets:
     styles-l.css   @media (min-width: 768px), print
       .fieldset > .field:not(.choice) > .label   { width: 25.8%; float: left }   (0,4,0)
       .fieldset > .field:not(.choice) > .control { width: 74.2% }                (0,4,0)
   MEASURED at 1440: label.x = 32, control.x = 209.5, label text-align right, label padding
   `6px 15px 0 0`. Below 768 the fields are ALREADY stacked, which is why the gate's label rows are
   green at 375/753/767 and red at 768/1024/1440 before the deploy — an asymmetry that proves the
   gate's verb reads the page rather than restating this file.

   THE OVERRIDE IS (0,5,0), ONE CLASS ABOVE THE RULE IT BEATS. `text-align` and `padding` are reset
   too, not just the float: Blank right-aligns the label against the old column and pads it 6px/15px
   to line up with a control that is no longer beside it, so undoing only `float` and `width` leaves
   a right-aligned, oddly-inset label sitting above its input.
   -------------------------------------------------------------------------- */
/* `box-sizing: border-box` was declared here and has been REMOVED: components/_base.css already
   sets it on `*, *::before, *::after` theme-wide, so it restated a value nothing overrides.
   Found by the S1 performance review.

   THE OTHER THREE PROPERTIES STAY, AND THE SAME REVIEW GUESSED THEY WERE DEAD TOO — MEASURED,
   THEY ARE NOT. The review reasoned from this file's own comment, which quotes only the
   `width: 74.2%` half of Blank's rule. The live cascade read on `.field.name > .control` at
   1440 reported `float: left`, and on `> .label` `text-align: right` with `padding: 6px 15px 0
   0`. Undoing only `width` and `float` would leave a right-aligned, oddly-inset label sitting
   above its input. Keeping them is the measurement, not the habit. */
.hrv-page-t38 .hrv-t38 .fieldset > .field > .label,
.hrv-page-t38 .hrv-t38 .fieldset > .field > .control {
  width: 100%;
  float: none;
  padding: 0;
  text-align: start;
}

/*
   Label typography, from the comp: 12px / 700 / uppercase / `letter-spacing: 0.06em`, with a 7px
   gap to its control. Beats `components/_forms.css`'s `.fieldset > .field > .label` (0,3,0) with
   (0,5,0).

   `--hrv-text-muted` and NOT the comp's 58% mix — see the lede above for the measurement. At
   12px/700 this is SMALL TEXT under WCAG, so 4.5:1 is required, not 3:1. Muted measures 6.13:1
   here and subtle measures 3.86:1, so the choice is not cosmetic. `field-labels-meet-AA` gates all
   seven labels from painted colour, and it was already green at 15.34:1 before this rule existed —
   its job is to stop THIS restyle from taking a compliant label below the line, which is the exact
   regression shape a "make it look like the comp" change produces.
*/
.hrv-page-t38 .hrv-t38 .fieldset > .field > .label {
  display: block;
  margin: 0 0 7px;
  font-size: 12px;
  font-weight: 700;
  line-height: 1.3;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--hrv-text-muted);
}

/* --------------------------------------------------------------------------
   5. The 44px floor — a REAL pre-existing defect on this page, not a formality

   MEASURED on the live page: every text input is 32px tall at every one of the six gated widths.
   The cause was read out of the cascade rather than guessed:
     styles-m.css   input[type="text"], input[type="password"], … { height: 32px }   (0,1,1)
   and `components/_forms.css` sets `padding: 12px 14px` but NO height, so Blank's 32px stands
   unopposed and the theme's own padding is clipped. CLAUDE.md mandates >=44px tap targets
   (register #106), and a search form is almost entirely inputs, so this is the page where it bites
   hardest.

   `height: auto` PLUS `min-height`, not `height: 44px`. A fixed height would clip a control whose
   content is taller than 44 (a select at a large text size, a wrapped validation state); the floor
   is a floor. With padding 12+12 and a 14px/1.4 line box the natural height is ~43.6, so
   `min-height` is what supplies the last 0.4px today — and it keeps supplying it if the label,
   the font or the locale changes, which is precisely #106's lesson: three FAQ summaries reached
   48px only because their English copy happened to wrap, so the property was never DEFENDED.

   Selects are included. The multiselects (manufacturer, license) render with size="4" and already
   measure 98px, so this changes nothing for them today; it is declared so a future single-select
   attribute does not arrive below the floor unnoticed.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 input.input-text,
.hrv-page-t38 .hrv-t38 .fieldset > .field select {
  height: auto;
  min-height: 44px;
}

/* --------------------------------------------------------------------------
   5b. THE TWO MULTISELECTS WERE SLICING A ROW OF TEXT IN HALF, AND 57 GREEN CHECKS SAID NOTHING.

   FOUND AT S7 BY LOOKING AT A SCREENSHOT. Manufacturer showed "Moinho Velho" and License showed
   "Apache" cut through the middle by the bottom border. The note directly above this one had
   already MEASURED these controls at 98px and concluded "this changes nothing for them today" —
   it read the number and not the consequence, which is the shape this whole sprint keeps paying
   for. Every geometry row on this page stayed green because a sliced glyph is not a dimension.

   THE CAUSE, read out of the cascade rather than guessed. `components/_forms.css` styles `select`
   for the SINGLE-ROW case: `padding: 12px 36px 12px 14px` (36px right being the gutter for its
   chevron background-image) plus `appearance: none`. Core's `select[multiple]` then wins
   `background-image: none` at (0,1,1), so the chevron correctly disappears — but the padding it
   was reserving space for does not. MEASURED: border-box 98px, clientHeight 96px, option row
   18px. 96 / 18 = 5.33 rows. Chrome paints a listbox's options THROUGH its padding box, so rows
   five and six bleed into the 12px bottom padding and are chopped by the border.

   `padding-block: 0` AND NOT A HAND-COMPUTED HEIGHT. With `height: auto`, a listbox sizes itself
   to exactly `size` rows plus padding plus border, so zeroing the vertical padding makes the
   scrollport exactly `size` whole rows — at ANY font size, in any locale. Setting a pixel height
   that happens to be a multiple of 18 would be correct only for 14px/Karla and would silently
   start slicing again the day the type scale moves. Same reasoning as the `min-height` floor
   above: defend the property, do not hard-code today's number.

   The right padding drops to match the left for the same reason the chevron did: there is no
   longer an arrow to leave room for, and 36px of dead gutter on a list of farm names is just a
   narrower column of text.

   Pinned by `multiselects-show-whole-option-rows`, so it cannot come back unseen.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .fieldset > .field select[multiple] {
  padding-block: 0;
  padding-right: 14px;
}

/*
   FOCUS — the page stops shipping an indicator nobody can see.

   `components/_forms.css` sets `outline: none` on `:focus` and substitutes
   `box-shadow: 0 0 0 3px var(--hrv-focus-ring)`. That token resolves to
   `color-mix(in oklab, #C08A2D 60%, #FBF6EC)` and MEASURES 1.94:1 against the panel surface, where
   WCAG 2.2 SC 1.4.11 requires 3:1. It fails at all 27 sites that use it; that is a token decision
   with an open ticket (869ejk6zm) and NOT a thing to settle inside a page task, so the token is
   left alone and this page declares its own ring — exactly as T37 did for its CTAs. `--hrv-text`
   measures 16.52:1 on this surface. DECLARED DIVERGENCE: T38's ring is therefore a different
   colour from the theme's other focus sites until that ticket lands.

   `:focus` AND NOT `:focus-visible`, WHICH IS A DELIBERATE DIFFERENCE FROM T37. T37's controls are
   anchors, where `:focus-visible` correctly suppresses a ring on mouse click. These are TEXT
   INPUTS: a visible caret target is wanted on every focus regardless of modality, and browsers'
   own `:focus-visible` heuristics already treat text fields that way — so `:focus` states the
   intent directly instead of depending on a heuristic that differs between engines and that the
   gate's scripted focus would then be measuring rather than the user's.

   Beats `input:focus { outline: none }` at (0,1,1) with (0,4,1) — four classes
   (.hrv-page-t38 .hrv-t38 .input-text plus the :focus pseudo-class) and one type selector. The
   comment said (0,3,1); corrected in the S1 correctness review.

   THE READ IS SAFE AT t=0, AND THAT IS NOT LUCK. `components/_forms.css` transitions
   `border-color` and `box-shadow` over 0.15s, so a focus reading of EITHER of those returns an
   interpolation frame — the exact flake that made a T37 border row report two different colours at
   two widths. `outline` is not in that transition list, which is why the gate asserts the OUTLINE's
   contrast and this rule declares an outline rather than restyling the box-shadow.
*/
.hrv-page-t38 .hrv-t38 input.input-text:focus,
.hrv-page-t38 .hrv-t38 .fieldset > .field select:focus,
.hrv-page-t38 .hrv-t38 .actions-toolbar.hrv-t38__actions button.action.search:focus {
  outline: 2px solid var(--hrv-text);
  outline-offset: 2px;
}

/*
   THE SUBMIT WAS LEFT OUT OF THE RULE ABOVE, AND A NEW GATE ROW CAUGHT IT BEFORE THE BUILD.
   The first version listed only inputs and selects. MEASURED on the submit under a forced
   _keyfocus: a ring DOES paint — `outline: 2px solid oklab(0.792145 0.0177048 0.0779741)` — and it
   scores 1.57:1, well under SC 1.4.11's 3:1. That is the "paints but cannot be seen" failure T37's
   S3 review caught on its own CTA, reproduced here on the one control a keyboard user must be able
   to find on this page. `--hrv-text` measures 5.44:1 against the button's own accent fill and
   16.52:1 against the panel the offset ring actually sits on.

   Luma additionally paints `box-shadow: rgb(104, 168, 224) 0 0 3px 1px` under `._keyfocus` — a blue
   halo on a food storefront. That is theme-wide chrome, it is filed rather than fixed here, and it
   is why this rule adds an OUTLINE rather than trying to restyle the shadow.
*/

/* --------------------------------------------------------------------------
   6. The price row — the comp's two equal columns

   THE FIRST VERSION OF THIS SECTION WAS WRONG, AND ITS COMMENT ASSERTED A MECHANISM I HAD NOT
   MEASURED. It made the container `display: grid` and reset the children with `width: auto`,
   explaining at length that (0,8,0) beats Luma's (0,6,0). The specificity arithmetic was right and
   completely beside the point:

       styles-m.css   .fieldset > .field .fields.group.group-2 .field { width: 50% !important }

   `!important` beats any specificity, so `width: auto` never applied. MEASURED under simulation:
   the container really did compute `display: grid` with tracks `263px 263px`, and each child sat
   at 131.5px — exactly 50% of its own track — while the comment explained why that could not
   happen. The earlier cascade probe that produced the (0,6,0) figure did not report priority, so
   the mechanism was inferred from the half of the rule I had looked at. That is the same shape as
   T37's focus comment, which claimed a specificity contest that did not exist.

   TWO DEFECTS CAME OUT OF THAT ONE MISREADING, both caught by the simulated-green run rather than
   by a build:
     (a) the grid could not size its own items, so the columns stayed 50%-of-track.
     (b) Luma's clearfix `::before`/`::after` compute `content: ""; display: table`, and a generated
         box IS a grid item — so with four items in two tracks the two fields landed on DIFFERENT
         ROWS. `price-inputs-share-one-row` went from a passing spread of 0 to 61.593: the grid made
         a previously-correct property worse.

   SO THE GRID IS GONE. Luma's own two-column layout ALREADY puts these on one row at equal widths
   — measured pre-deploy: both `.field` children 255.23px, spread.top 0 — and fighting an
   `!important` with another `!important` would win the declaration and lose the argument, since
   CLAUDE.md's theme standard rules that out and the native layout is not actually wrong.

   WHAT WAS ACTUALLY WRONG IS NARROWER THAN IT LOOKED. The two FIELDS were always equal; the two
   INPUTS were not (230.23 vs 210.23 at 1440, spread 20), because the "to" input shares its box with
   `<label class="addafter">EUR</label>` inside `.addon`. So only two things are needed: the comp's
   16px gutter, and a currency suffix that stops stealing width.

   THE GUTTER GOES INSIDE THE 50%, WHICH IS WHY IT NEEDS NO WIDTH CHANGE AT ALL. styles-m.css
   already sets `box-sizing: border-box` on these children, so 8px of padding on the facing edge of
   each column subtracts from the 50% rather than adding to it — 16px of visual gap, no `width`
   declaration, and nothing to lose an `!important` fight with.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .fieldset > .field .fields.group.group-2 > .field:first-child {
  padding-inline-end: 8px;
}
.hrv-page-t38 .hrv-t38 .fieldset > .field .fields.group.group-2 > .field:last-child {
  padding-inline-start: 8px;
}

/*
   AND THE ACTUAL CAUSE OF THE UNEQUAL INPUTS, WHICH WAS NEITHER THE CONTAINER NOR THE ADDON.

   I blamed the addon twice and was wrong twice. MEASURED with the columns already equal (both
   `.field` children 271px) the two inputs were STILL 20px apart, and the reason is one step
   further in:

     styles-m.css  .form.search.advanced .fields.range .field:first-child .control   { padding-right: 25px }
     styles-m.css  .form.search.advanced .fields.range .field.with-addon .control    { padding-right: 45px }

   Two different paddings on the two `.control` boxes — 25 and 45 — reserving room for a validation
   message and for the currency addon respectively. 45 - 25 = 20, which is EXACTLY the spread the
   gate reported, unchanged, at every width and through three different container layouts. That
   constancy was the clue I kept walking past: a defect caused by the flex addon would have varied
   with the column width, and a defect caused by the grid would have changed when the grid did.

   Both rules are (0,5,0) and NEITHER carries `!important` — checked explicitly this time, having
   already documented one specificity mechanism that turned out to be an `!important` I had not
   looked at. This reset is (0,7,0).

   WHAT THIS COMMENT USED TO SAY ABOUT THE VALIDATION MESSAGE WAS WRONG. It claimed the message
   is placed by mage/validation into the `.range` parent rather than the control, "which is what the
   template's errorPlacement callback does". Read the callback: it tests `element.parent()`, and
   `element` is the INPUT, whose parent is `.control` (or `.addon` for price-to). `.range` is three
   levels up, so `parent.hasClass('range')` is NEVER true here and that branch is dead code on this
   page — every message goes through the plain `error.insertAfter(element)` path.

   The conclusion survived for a different reason than the one stated: the message is a BLOCK
   sibling of the input, so it needs no horizontal reserve at all. But the stated mechanism was
   load-bearing for the decision, and it was not what the code does. S1 correctness review.
*/
.hrv-page-t38 .hrv-t38 .form.search.advanced .fields.range .field .control {
  padding-inline-end: 0;
}

/* --------------------------------------------------------------------------
   6b. AND THE 25px WAS NOT SPARE — IT IS THE GUTTER THE FROM-TO EN DASH SITS IN.

   THIS IS THE MOST SERIOUS DEFECT THIS TASK SHIPPED, AND IT WAS MINE. The comment above used to
   say the 25px reserved room for a validation message. It does not. The third rule in the same
   core block — nested INSIDE the one I did read, which is why my cascade probe never returned it —
   is:

     _module.less  .form.search.advanced .fields.range .field:first-child { position: relative }
     _module.less  … .field:first-child .control::after {
                        content: ' \2013 '; position: absolute; right: 0; top: 6px; width: 25px }

   That is the en dash between the from and to boxes, absolutely positioned into the gutter the
   padding was holding open. `.control` is not positioned, so `right: 0` resolves against
   `.field:first-child`, which core DOES position — so removing the control's padding did not move
   the dash, it only let the input grow underneath it.

   MEASURED on the live page after my change, and this is what makes it a defect rather than an
   untidiness: `document.elementFromPoint()` at the from-input's trailing edge returned
   **DIV.control, not the INPUT**. The dash's 25px box is painted over the input's last 17px and,
   with default pointer-events, swallows clicks there — click the right end of the price-from field
   and the caret does not move. A stray hyphen also sits inside the box.

   IT IS RE-HOMED RATHER THAN DELETED. Deleting it (`content: none`) was the smaller change and I
   rejected it: this page keeps Magento's single "Price" label over two unlabelled inputs (see the
   declared divergence), so the dash is the ONLY thing on screen saying which box is from and which
   is to. Removing it would trade a click bug for an affordance bug. Instead it moves into the 16px
   gutter the columns already have: `right: -8px` puts its 16px box exactly between the two inputs
   (MEASURED: they end at 324 and begin at 340 at 1440), and `top: 50%` with a translate centres it
   on a 44px input — core's `top: 6px` was calibrated to Blank's 32px one.

   `pointer-events: none` regardless, because an ornament must never be a click target.

   Core's selector is (0,8,0)+::after; this is (0,10,0).
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .form.search.advanced .fields.range .field:first-child .control::after {
  inset-inline-end: -8px;
  width: 16px;
  top: 50%;
  transform: translateY(-50%);
  text-align: center;
  pointer-events: none;
}

/*
   THE CURRENCY SUFFIX IS OVERLAID, AND THIS IS THE ROW'S WHOLE DIFFICULTY.

   MEASURED PRE-DEPLOY: the two price inputs are 230.23 and 210.23 wide at 1440 (spread 20) and
   197.59 vs 183 at 768 (spread 14.594). They are not unequal by accident — the "to" input sits
   inside `.addon` (styles-m.css `.fieldset > .field .addon { display: inline-flex; width: 100% }`)
   beside an `<label class="addafter">EUR</label>`, and as a flex sibling it gives up exactly the
   label's width. Two equal COLUMNS therefore still produce two unequal INPUTS, and the comp draws
   them equal.

   So `.addon` becomes a positioned block, the input fills it, and the suffix is taken out of flow
   and placed over the input's trailing end, with `padding-inline-end` reserving room so typed text
   never runs under it. Under border-box that padding does not change the rect width, which is what
   `price-inputs-are-two-equal-columns` measures.

   `display: block` is load-bearing here and not tidying: while `.addon` is a flex container the
   input and the label SHARE the box, which is the entire defect. Taking the label out of flow is
   not sufficient on its own — a flex container with one in-flow item still shrink-wraps it.

   `pointer-events: none` on the suffix: it is a <label for="price_to">, so without this it would
   swallow clicks on the last 52px of the field. Its `for` association — the part that matters to
   assistive technology — is unaffected, and clicking anywhere in the input now places the caret.
*/
.hrv-page-t38 .hrv-t38 .fieldset > .field .addon {
  display: block;
  position: relative;
  width: 100%;
}
.hrv-page-t38 .hrv-t38 .fieldset > .field .addon > input.input-text {
  width: 100%;
  padding-inline-end: 52px;
}
/*
   THIS RULE WAS INERT IN ITS FIRST FORM, AND ITS OWN COMMENT DESCRIBED THE MECHANISM IT DID NOT
   HAVE. It was written at (0,6,0) and core declares, in the SAME block as everything else this
   section fights:

     _module.less  .form.search.advanced .group.price .addon .addafter {
                       background: none; border: 0; padding-top: 6px;
                       position: absolute; right: 0; top: 0 }          (0,7,0)

   MEASURED afterwards: `top` computed to 0px and `right` to 0px — NOT the 1px/1px this rule
   declared — and `padding-top` stayed at core's 6px, which with `align-items: center` pushed the
   suffix off the optical centre of a 44px field. Logical properties do not help: `inset-block-start`
   and `top` cascade as the same computed property, so the higher-specificity physical declaration
   simply wins.

   This is now (0,9,0), and `padding` is reset explicitly rather than assumed. Third time in this
   task that a cascade comment was more confident than the cascade; all three had the same cause —
   the probe returned the rules I asked it about, not the block they live in.
*/
.hrv-page-t38 .hrv-t38 .form.search.advanced .group.price .addon > .addafter {
  position: absolute;
  inset: 1px 1px 1px auto;
  display: flex;
  align-items: center;
  margin: 0;
  padding: 0 12px;
  border: 0;
  background: none;
  font-size: 13px;
  font-weight: 600;
  color: var(--hrv-text-muted);
  pointer-events: none;
}

/*
   AND THE VALIDATION MESSAGE HAD TO MOVE WITH IT — a regression this task introduced and the gate
   could not see, because no row ever puts the form in an invalid state.

     _module.less  .form.search.advanced .fields.range .field:last-child { position: relative }
     _module.less  … .field:last-child div.mage-error { position: absolute; left: 0; top: 32px }

   `top: 32px` was calibrated to Blank's 32px input: the message sat flush underneath. Two things
   here break it — the 44px floor makes the input taller, and `position: relative` on `.addon`
   (added for the currency overlay) makes the ADDON, not `.field:last-child`, the containing block.

   MEASURED by actually submitting an inverted range (from=100, to=1) and reading the real
   mage/validation output: the message box for the "to" field lands at y=637.9 while its input ends
   at y=645.5 — SEVEN AND A HALF PIXELS ON TOP OF THE INPUT, over its border and value. The "from"
   field's message, which is static, sits correctly 6px below.

   `top: 100%` re-anchors it to the bottom of whatever the containing block turns out to be, so it
   cannot drift again if the input height changes. Kept absolute so `.addon` does not grow and drag
   the currency suffix down with it. (0,10,1) against core's (0,8,1).
*/
.hrv-page-t38 .hrv-t38 .form.search.advanced .fields.range .field:last-child div.mage-error {
  top: 100%;
  margin-top: 4px;
}

/* --------------------------------------------------------------------------
   7. The submit row

   THE TOOLBAR IS INDENTED TO THE OLD LABEL COLUMN AND HAS TO BE PULLED BACK. Read out of the live
   page, and it is not an obvious rule to go looking for:
     styles-l.css  @media (min-width: 768px), print
       .abs-margin-for-forms-desktop, .fieldset .legend,
       .column:not(.sidebar-main) form .actions-toolbar, …   { margin-left: 25.8% }
   MEASURED at 1440: the toolbar's computed margin-left is 177.5px and the button starts at x=209.5,
   aligned with the control column that this sheet has just removed. Left alone, the page's only
   call to action would sit a quarter of the way across a panel whose fields are now full width.

   THE SPECIFICITY IS THE TRAP HERE. The matching part of that selector is
   `.column:not(.sidebar-main) form .actions-toolbar` = (0,3,1) — three classes AND a type selector.
   `.hrv-page-t38 .hrv-t38 .actions-toolbar` is (0,3,0) and LOSES on the tie-break. The extra class
   below is what makes this rule apply at all, and it is the reason the template puts
   `hrv-t38__actions` on that div rather than the sheet reaching for `.actions-toolbar` alone.

   `.actions-toolbar .primary { float: left }` (styles-l.css, (0,2,0), >=768) is reset as well: a
   floated child leaves the toolbar zero-height, so the 18px margin below would collapse against
   the panel and the button would overlap it.

   NOTHING HERE STYLES THE BUTTON. `components/_buttons.css` already owns `.action.primary` — fill,
   border, radius, padding, hover, disabled — and it MEASURES 44.8px tall and 5.44:1 today. The
   comp's `width: fit-content` is already what a shrink-to-fit button does.
   -------------------------------------------------------------------------- */
.hrv-page-t38 .hrv-t38 .actions-toolbar.hrv-t38__actions {
  margin: 18px 0 0;
  padding: 0;
}
.hrv-page-t38 .hrv-t38 .actions-toolbar.hrv-t38__actions > .primary {
  float: none;
  margin: 0;
  text-align: start;
}

/* --------------------------------------------------------------------------
   8. Mobile

   Below 768 Blank has already stacked the fields, so nothing here re-does that — this is only the
   panel's own rhythm at 375, where 28px of padding on a 343px column leaves too little measure. The
   comp is drawn at 1440 and cannot answer what happens below it, so these are the theme's values
   and not transcription; `no-horizontal-page-scroll` gates the one property that must hold at every
   width regardless, and the two-column price grid is the construct on this page most able to break
   it.

   The price grid deliberately STAYS two columns at 375. From/to is a pair a shopper reads as one
   control, and stacking it would also make `price-inputs-share-one-row` a width-conditional claim
   for no benefit. The suffix inset is reduced instead, so the "to" field keeps usable typing room
   in a ~145px track.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .hrv-page-t38 .hrv-t38 .fieldset.hrv-t38__panel {
    padding: 20px 18px;
  }
  .hrv-page-t38 .hrv-t38 .fieldset > .field .fields.group.group-2 > .field:first-child {
    padding-inline-end: 6px;
  }
  .hrv-page-t38 .hrv-t38 .fieldset > .field .fields.group.group-2 > .field:last-child {
    padding-inline-start: 6px;
  }
  .hrv-page-t38 .hrv-t38 .fieldset > .field .addon > input.input-text {
    padding-inline-end: 44px;
  }
  .hrv-page-t38 .hrv-t38 .form.search.advanced .group.price .addon > .addafter {
    padding: 0 8px;
    font-size: 12px;
  }
  /* The dash's gutter is 12px at this width (6px of padding each side), not 16px. */
  .hrv-page-t38 .hrv-t38 .form.search.advanced .fields.range .field:first-child .control::after {
    inset-inline-end: -6px;
    width: 12px;
  }
}
