/* =============================================================================
   Advanced diamond search — DESKTOP (>= 992px)

   BOARD: Figma Ex10uQ9OY3OuzSPi4g2hPb, frame 14468:42834
          "2.1 Advanced Search" 1728 x 1100.

   THIS BOARD SUPERSEDES 14465:39929 ("STONE-B"), which the previous version of
   this file was written from, and it supersedes the 14463:35552 family that
   _advanced-search.css names in its own header. Where they disagree, 14468
   wins. The conflicts that changed output here:

     | thing                    | OLD (14465:39929 / 14463) | NEW (14468:42834) |
     | filter rail width        | 491                       | 345               |
     | rail -> grid gutter      | 24                        | 89                |
     | page gutter              | 0 / none                  | 80 both sides     |
     | results grid gap         | 23.200000762939453        | 24                |
     | card                     | 266 x 381.8               | 265 x 382         |
     | toolbar band             | 60 tall, no Filters pill  | 68 tall, pill at  |
     |                          |                           | x80, 116 x 44     |
     | sort / view / segmented  | 38 tall                   | 44 tall           |
     | segmented radius         | 10                        | 8 (mobile stays 10)|
     | header titles gap        | 26                        | 21                |
     | header result count      | 16px                      | 18px              |
     | footer                   | none                      | 120 tall band     |

   WHAT WAS ACTUALLY WRONG ("no spacing, nothing")
   -----------------------------------------------
   Measured at 1728 in the mirror before this pass:
     * NO page gutter at all — the filter rail started at x 0, not x 80.
     * The rail was the raw bootstrap col-lg-3 at 491 wide with the legacy
       filter styling: sections 20px apart instead of 36, shape tiles 114 x 85
       in a 5px grid instead of 80 x 96 at 8 / 9.
     * Every result card measured **88.6px wide**. `.result_grid_item_container`
       carries bootstrap's `col-6 col-lg-4`, whose `width: 33.333%` resolved
       against the CSS grid TRACK (265.85) rather than against the row — so the
       four tracks were right and the cards inside them were a third of a track,
       with the title, spec and price overlapping each other.
     * The toolbar was 60 tall, the Filters pill was `display:none`, and the
       controls were positioned with a hard-coded `padding-left: 514px` — the
       1728 artboard's grid x, which is wrong at every other width.
     * The sticky footer never painted on desktop.

   SCOPING: every rule here MUST stay under #ssq_diamond_search. This component
   is mounted three times — the live /lab-grown-diamonds page, the standalone
   diamond templates, and the quiz — and only the quiz wraps it in that id.
   Anything unscoped ships straight to the landing pages.

   NEVER display:none a node the JS reads. `.results_count`, `.result_counter`,
   `.search_view_options`, `.diamond_sort_by`, `#search_filters_mobile` and
   `.result_item_row` are parked with a zero box + `visibility:hidden` wherever
   the design has no slot for them; each one is commented where it happens.

   RESPONSIVE MODEL — FLUID, the same way _stone-desktop.css does it
   ----------------------------------------------------------------
   The board draws 1728 only. The layout is expressed as percentages anchored on
   the exact artboard numbers so it holds all the way down to 992, where the
   mobile sheet (max-width: 991px) takes over:

       page gutter  80 / 1728 = 4.6296296296%   -> 80.00 at 1728
       content     1568 = 1728 - 2 x 80
       rail         345 / 1568 = 22.0025510204%
       rail gutter   89 / 1568 =  5.6760204082%   (rail ends 425, grid starts 514)
       results     1134 / 1568 = 72.3214285714%   (= the 1fr remainder)

   Two deliberate departures from pure proportion, both because the board's own
   auto-layout is intrinsic rather than proportional in that axis:

     1. The rail gets a 280px FLOOR (`minmax(280px, 22.0025510204%)`). The rail
        is a FIXED 345 in Figma and its content is intrinsic — four 80px shape
        tiles plus three 8px gaps is exactly 344. Scaled purely, 992 would give
        a 198px rail and 43px tiles, which cannot hold a 32px icon and the word
        "Marquise". Below ~1330 the floor engages and the results column gives
        up the difference.
     2. The results grid is `repeat(auto-fill, minmax(220px, 1fr))` with the
        board's fixed 24px gap — i.e. the board's own wrapping auto-layout
        (HORIZONTAL + WRAP, itemSpacing 24, fixed 265-wide children). At 1728
        that resolves to exactly 4 columns x 265.5. Narrower, the CARD stays
        near its designed width and the column count drops (3 at 1280, 2 at
        992) instead of the cards collapsing.

   Type sizes stay fixed; the board gives one ramp.
   ============================================================================= */

@media (min-width: 992px) {

  /* ===========================================================================
     0. TOKENS
     The --rb-* tokens are re-declared by _advanced-search.css inside its own
     `min-width: 992px` block, so they exist here. The --dsq-d-* grid tokens are
     new and local to this file: they are the fluid expression of the 14468
     artboard and nothing outside this sheet should depend on them.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search {
    /* colour tokens the rail needs that the header block did not declare */
    --rb-brand-sage-strong: #C2CEB2;          /* selected chip / tile fill     */
    --rb-brand-sage:        #D8DDCA;          /* badge ground                  */
    --rb-gold-info:         #C69858;          /* the info dot in section heads */
    --rb-surface-card:      #FFFFFF;

    /* fluid grid, anchored on 14468:42834 */
    --dsq-d-gutter:     4.6296296296%;        /*   80 / 1728                   */
    --dsq-d-rail:      22.0025510204%;        /*  345 / 1568                   */
    --dsq-d-rail-min:  280px;                 /* see RESPONSIVE MODEL note 1   */
    --dsq-d-rail-gap:   5.6760204082%;        /*   89 / 1568                   */
    --dsq-d-band1:     128px;                 /* `TOp Stuff`                   */
    --dsq-d-band2:      68px;                 /* `Frame 1171276644` toolbar    */
    --dsq-d-body-top:    4px;                 /* 200 content top - (128 + 68)  */
    --dsq-d-footer:    100px;                 /* `Footer` -- was 120, see THE BAND */
    --dsq-d-rhythm:     36px;                 /* rail counterAxisSpacing       */
  }

  /* ===========================================================================
     1. SHELL
     _advanced-search.css already pins the root (position:fixed, inset 0,
     overflow-y:auto) — that is the panel behaviour the board implies (a
     1728x1240 `black mask` scrim sized to the ring builder, not to this 1100
     frame; see SEARCH.md §4). What is added here is only the CHROME behaviour:
     the two header bands stay put while the rail and the grid scroll under
     them, which is what the board's independent rail scrollbar requires.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search .dsq_screen_header {
    position: sticky;
    top: 0;
    z-index: 5;
  }

  /* ===========================================================================
     2. BAND 1 + BAND 2 — the header, 128 + 68
     `TOp Stuff` 1728x128 (VERTICAL, pad 44/80/44/80, bottom hairline 0.75
     #E4DED8) sits above `Frame 1171276644` 1728x68 (HORIZONTAL SPACE_BETWEEN,
     pad 12/80/12/80). Both bands share the #FAF3ED ground.

     The 80px page gutter is declared ONCE, on `.dsq_screen_header`, so that
     `.dsq_header_controls` can keep `padding-left: 0` (CHECKLIST 49 — the old
     build hard-coded 514px here, which is the 1728 grid x and wrong at every
     other width). The band-1 hairline has to span the full 1728 including that
     gutter, so it is drawn as an absolutely positioned pseudo-element on the
     header: an abs-positioned child resolves against the PADDING box, so
     left:0/right:0 is full-bleed while every real child stays inset.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search .dsq_screen_header {
    display: grid !important;   /* beats the reboot's [hidden]{display:none} */
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: var(--dsq-d-band1) var(--dsq-d-band2);
    gap: 0;
    height: auto;
    padding: 0 var(--dsq-d-gutter);
    background: var(--rb-surface-page);
  }
  #ssq_diamond_search .dsq_screen_header::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: var(--dsq-d-band1);
    height: 0.75px;
    background: var(--rb-border-subtle);
    pointer-events: none;
  }

  /* --- band 1 -------------------------------------------------------------- */
  /* `Top Stuff` is FIXED at 128 while its own auto-layout asks for 44+60+44 =
     148, i.e. the design clips its bottom padding. Reproduced as a fixed 128
     with the padding on the top only; the side gutter is the parent's. */
  #ssq_diamond_search .dsq_header_titlerow {
    grid-column: 1;
    grid-row: 1;
    height: var(--dsq-d-band1);
    box-sizing: border-box;
    padding: 44px 0 0;
    border-bottom: 0;           /* the full-bleed ::before draws it instead */
  }
  /* `Frame 1171276727` 1568 x 60, HORIZONTAL SPACE_BETWEEN gap 26, counter MIN */
  #ssq_diamond_search .dsq_header_bar {
    height: 60px;
    gap: 26px;
    justify-content: space-between;
    align-items: flex-start;
  }
  /* `Frame 1171276728` 518 x 60, VERTICAL gap 21.
     The 14465 board said 26 and the build shipped 26, which put the result
     count at y 93 instead of the 88 this board records. The -6.1px negative
     margins on the title (declared in _advanced-search.css) pull the 32/35.2
     line box back to the 23px tight box Figma measures, so a plain 21 here
     lands the count box at exactly 88. */
  #ssq_diamond_search .dsq_header_titles {
    gap: 21px;
    /* THE CLIP MOVES ONTO THE TITLE. Owner, again: *"title chopped off"*, on
       the desktop advanced search.
       `line-height: 1.3` (_advanced-search.css:2832) answered the first report
       by giving the glyphs room inside their own line box. It cannot answer
       this one, because the shave is not inside the line box -- it is this
       ancestor's `overflow: hidden` cutting across it. MEASURED at 1440: this
       box starts at y44 while the title's line box starts at y38, the 6.1px
       negative margin that reproduces Figma's tight text box deliberately
       hanging it above the clip; the caps' ink begins at 42.8 and the top
       1.2px of every capital was being taken.
       The clip is not removed, it is moved to the element that actually needs
       it -- a long title still cannot escape the band, it ellipsises instead,
       and the title's own box starts above its ink so it clips nothing. */
    overflow: visible;
  }
  #ssq_diamond_search .dsq_header_title {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
  /* `12,900 Results` — FG 400 18/16 ls -0.21 #3E3C39. The 14465 board said 16. */
  #ssq_diamond_search .dsq_header_count.results_count {
    font-size: 18px;
    /* 18, NOT THE BOARD'S 16 -- AND THE CLIP IS WHY. Owner, second report:
       *"title chopped off"*, on the desktop advanced search. The title's own
       shave was answered with `line-height: 1.3` (_advanced-search.css:2832);
       this line is the other half of the same block and was still short.
       MEASURED at 1440: `.dsq_header_titles` clips (`overflow: hidden`) with
       scrollHeight 68 against clientHeight 66, and the 2px is exactly an 18px
       glyph box sitting in a 16px line box -- the descenders of
       "99,507 Results" shaved off by the ancestor.
       The line box is given the room rather than the clip removed (the clip is
       what keeps a long title inside the band), and the 2px it adds is pulled
       straight back off both ends so the count's box still starts at the 88 the
       board records and the row height does not move. */
    line-height: 18px;
    margin: -1px 0;
  }
  /* `exit button` 36 x 36 r4, fill #E4DED8 at FULL opacity — already correct
     in the base sheet; only the glyph size changes (10 x 10, stroke #0F0E0D). */

  /* --- band 2, the toolbar ------------------------------------------------- */
  /* CONSTRAINT: the board's toolbar is one node, `Frame 1171276644`, holding
     [ Filters | view toggle | sort ] on the left and the segmented control on
     the right. The markup has no such wrapper — `.dsq_header_controls` and
     `.dsq_segmented` are siblings — so the band is composed by placing both in
     grid row 2 and letting the segmented end-align. Both are 44 tall in a 68
     band: 12 + 44 + 12. See the report: a `.dsq_toolbar` wrapper is the one
     piece of additive markup this screen still wants. */
  #ssq_diamond_search .dsq_header_controls {
    grid-column: 1;
    grid-row: 2;
    flex: none;
    height: var(--dsq-d-band2);
    box-sizing: border-box;
    padding: 12px 0;           /* CHECKLIST 49: no horizontal padding */
    gap: 24px;                 /* `Frame 1171276625` itemSpacing */
    align-items: center;
    justify-content: flex-start;
  }
  #ssq_diamond_search .dsq_segmented {
    grid-column: 1;
    grid-row: 2;
    justify-self: end;
    align-self: center;
    flex: 0 0 auto;
    /* 2 x 132 plus the track's two 0.75px strokes, so each half is exactly the
       132 the Filters pill below is -- see the note on `.dsq_seg` in
       _advanced-search.css for why all three controls are now one width. The
       0.75px strokes are each used as 1 device pixel at DPR 1, so 266 is what
       leaves an inner 264 and two exact 132s -- 265.5 measured 131.75. */
    width: 266px;
    height: 44px;
    margin: 0;
    /* the NEW board is radius 8 on desktop; mobile keeps 10 */
    border-radius: var(--rb-radius-md);
  }
  /* `BG` halves 134.2 / 130.2 x 42.5, labels FG 400 18/18 ls -0.5 */
  #ssq_diamond_search .dsq_seg_label {
    font-size: 18px;
    line-height: 18px;
  }
  #ssq_diamond_search .dsq_seg_icon svg {
    width: 13px;
    height: 12px;
  }

  /* The Filters pill is IN the desktop board (116 x 44 at x 80) — the previous
     build display:none'd it. It leads the toolbar, then the view toggle has to
     line up with the first grid column at x 514. That offset is the rail plus
     the rail gutter minus the pill and the flex gap, expressed in the same
     fluid units as the body grid so it tracks at every width:
        345 + 89 - 116 - 24 = 294  at 1728. */
  #ssq_diamond_search .dsq_header_controls .dsq_filters {
    display: flex;
    /* DOM order in the header is [ view toggle | sort | pill ] — the pill is
       authored last and simple-select-redesign.js splices the sort in between.
       The board puts Filters first. `order` moves the paint position only; the
       DOM, the tab order and every handler are untouched. */
    order: -1;
    /* 132, THE SAME AS ONE SEGMENTED HALF. The board draws this pill at 116
       beside a 266-wide two-up control, i.e. 116 / 134 / 130 across the row.
       Owner: *"different widths, all need to be uniform."* */
    flex: 0 0 132px;
    width: 132px;
    height: 44px;
    padding: 0 12px;           /* board pad T0 R12 B0 L12 */
    /* max() so the offset tracks the rail's 280px FLOOR too — without it the
       toggle fell 24px short of the grid column at 1280 and 47px at 992 */
    margin-right: calc(max(var(--dsq-d-rail-min), var(--dsq-d-rail)) + var(--dsq-d-rail-gap) - 156px);
    border-radius: var(--rb-radius-md);
  }
  /* `Frame 1171276655` itemSpacing 2 (mobile is 1); icon 18, label 18/19 */
  #ssq_diamond_search .dsq_header_controls .dsq_filters .dsq_filters_group {
    gap: 2px;
  }
  #ssq_diamond_search .dsq_header_controls .dsq_filters_icon {
    flex: 0 0 18px;
    width: 18px;
    height: 18px;
  }
  #ssq_diamond_search .dsq_header_controls .dsq_filters_icon svg {
    width: 18px;
    height: 18px;
  }
  #ssq_diamond_search .dsq_header_controls .dsq_filters_label {
    font-size: 18px;
    line-height: 19px;
  }
  /* badge `3` is 14/19 on desktop, 12/19 on mobile. The badge itself keeps the
     base sheet's 24px circle and its `.is-empty` zero-box + visibility:hidden
     park — never display:none, the count is written into it at runtime. */
  #ssq_diamond_search .dsq_header_controls .dsq_filters_badge_count {
    font-size: 14px;
  }

  /* `Frame 38323` 120 x 44, halves 60.5 x 44, itemSpacing -1 kept by the base */
  #ssq_diamond_search .dsq_viewtoggle {
    flex: 0 0 120px;
    width: 120px;
    height: 44px;
  }
  #ssq_diamond_search .dsq_viewtoggle .result_view {
    flex: 0 0 60.5px;
    width: 60.5px;
    height: 44px;
  }

  /* `Sorting` 265 x 44, pad 12 on ALL FOUR sides (mobile is 12/8), radius 8,
     1px #E4DED8, label FG 400 18/19. FIXED width here, not FILL. */
  #ssq_diamond_search .dsq_header_controls .diamond_sort_by {
    flex: 0 0 265px;
    width: 265px;
    height: 44px;
    padding: 12px;
  }
  #ssq_diamond_search .dsq_header_controls .diamond_sort_by > p {
    font-size: 18px;
    line-height: 19px;
  }
  #ssq_diamond_search .dsq_header_controls .diamond_sort_by .diamond_sort_by_options {
    top: 46px;
  }

  /* ===========================================================================
     3. THE CONTENT BAND — rail + grid, y 200
     `Filters` 345 x 1157 at (80, 200) and `products grid` 1134 x 900 at
     (514, 200). The bootstrap container/row carry their own max-width, negative
     margins and gutter variable, so they are neutralised first and the page
     gutter is put on the CONTAINER — that way the ROW's width is the 1568
     content box and the rail/gap percentages below resolve against it.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search #diamond_search > .container {
    max-width: none;
    width: 100%;
    margin: 0;
    box-sizing: border-box;
    /* 200 - (128 + 68) = 4 */
    padding: var(--dsq-d-body-top) var(--dsq-d-gutter) 0;
    --bs-gutter-x: 0;
  }
  #ssq_diamond_search #diamond_search > .container > .row {
    display: grid;
    grid-template-columns: minmax(var(--dsq-d-rail-min), var(--dsq-d-rail)) minmax(0, 1fr);
    column-gap: var(--dsq-d-rail-gap);
    align-items: start;
    max-width: none;
    width: 100%;
    margin: 0;
    padding: 0;
    --bs-gutter-x: 0;
  }

  /* The mobile-only count strip is a grid child of that row. Bootstrap's
     `d-lg-none` display:none's it at desktop, but it holds a
     `span.result_counter` that diamond-search.js:967 writes and the
     `.search_view_options` the redesign script reads, so it is restored to the
     layout and collapsed instead. Never display:none. */
  #ssq_diamond_search #diamond_search > .container > .row > .results_count.mobile_count {
    display: flex !important;
    grid-column: 1 / -1;
    grid-row: 3;
    height: 0;
    min-height: 0;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
    visibility: hidden;
  }
  /* the legacy desktop rule <hr> — no equivalent on the board */
  #ssq_diamond_search #diamond_search > .container > .row > hr {
    grid-column: 1 / -1;
    grid-row: 4;
    height: 0;
    margin: 0;
    border: 0;
    visibility: hidden;
  }

  /* ===========================================================================
     4. THE FILTER RAIL — `Filters` 345 x 1157, counterAxisSpacing 36
     36 IS the rail's rhythm: every one of the seven sections is 36 from the
     next. The legacy sheet gave `.d_filter` a 20px top padding and nothing
     else, which is the single biggest reason the rail read as "no spacing".

     The rail scrolls independently of the grid (the board draws its own 6px
     scrollbar at x 457, thumb 371 / 734). Reproduced with a sticky, self-
     scrolling column plus a 6px styled scrollbar in the board's colours.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search .col-lg-3.search_filters_container {
    grid-column: 1;
    grid-row: 1;
    width: auto;
    max-width: none;
    flex: none;
    padding: 0;
    margin: 0;
    position: sticky;
    top: calc(var(--dsq-d-band1) + var(--dsq-d-band2));
    align-self: start;
    /* Less a 24px gap, so the scrollbar stops clear of the window's bottom
       edge rather than running into it -- the owner's "maintain some gap",
       and the same figure the archive mount uses. */
    max-height: calc(100vh - var(--dsq-d-band1) - var(--dsq-d-band2) - var(--dsq-d-body-top) - 24px);
    overflow-y: auto;
    overflow-x: hidden;
    /* The board draws the rail scrollbar at x 457 — 32px clear of the rail's
       right edge (425) and 51 clear of the grid (514), i.e. IN the 89px gutter,
       not inside the rail. So the scroll box is widened by 32 + 6 and given the
       same amount back as padding: the content box stays the rail's full width
       and the scrollbar lands in the empty gutter. */
    width: calc(100% + 38px);
    padding-right: 38px;
  /* SCROLLBAR PER 14381:40360 (Do-Amore-Redesign-2025-26). The board draws a
     6px lane, both parts fully rounded at r20: track SOLID #E4DED8, thumb SOLID
     #3E3C39. The build had both translucent -- thumb at 20% and track at 60% or
     transparent -- so the lane read as a faint smear rather than a track with a
     handle in it. Stated at full opacity to match.

     `::-webkit-scrollbar-button` is what draws the stepper triangles at each
     end. The desktop rail had no rule for it at all, so the arrows rendered
     wherever the platform draws them; `display: none` is the reliable removal --
     zero width/height alone still leaves a hit area on some builds. */
    /* REVERSED, on the owner's reference. The note above records an earlier
       decision to state both at FULL opacity because the translucent pair "read
       as a faint smear". The owner has since linked 14526:48933 as how this
       should look, and that node is explicit: track #E4DED8 at 0.6, thumb
       #3D3B39 at 0.2. Their board, their call -- and it puts this mount and the
       archive on the same bar, which they are not when one is subtle and the
       other near-black. The earlier reasoning is left above rather than deleted,
       so if it does read faint on a real display the way back is one line. */
  }
  /* Firefox only -- see the note in diamond-search.css. In Blink these two
     properties switch off every ::-webkit-scrollbar rule, which is what put
     the stepper arrows back. */
  @supports not selector(::-webkit-scrollbar) {
    #ssq_diamond_search .col-lg-3.search_filters_container {
      scrollbar-width: thin;
      scrollbar-color: rgba(61, 59, 57, 0.2) rgba(228, 222, 216, 0.6);
    }
  }
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar {
    width: 6px;
  }
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar-track {
    background: rgba(228, 222, 216, 0.6);   /* 14526:48933 -- #E4DED8 @ 0.6 */
    border-radius: 20px;
  }
  /* ...AND IT FADES WHEN NOTHING IS MOVING. Owner: *"on inactivity the scroll
     is not disappearing on advanced search in BYR flow."* diamond-search.js
     puts `.sf-scrolling` on the scroller and takes it off 1.2s later -- VERIFIED
     here, the class goes on and comes off -- but this rule loads AFTER the fade
     in diamond-search.css and was painting the thumb solid regardless. The
     colour moves onto the scrolling state; the resting thumb is transparent, so
     the bar's width never changes and the rail cannot reflow under the
     shopper. */
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar-thumb {
    background: transparent;
    border-radius: 20px;
    transition: background-color 400ms linear;
  }
  #ssq_diamond_search .col-lg-3.search_filters_container.sf-scrolling::-webkit-scrollbar-thumb {
    background: rgba(61, 59, 57, 0.2);      /* 14526:48933 -- #3D3B39 @ 0.2 */
  }
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar-button,
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar-corner {
    display: none;
    width: 0;
    height: 0;
  }

  #ssq_diamond_search .search_filters {
    width: 100%;
    padding: 0;
    margin: 0;
    background: transparent;
  }

  /* The rail on the board opens on SHAPE. `.filters_headers` (the legacy
     "Filters / Reset" row) has no slot. `.diamond_filters_reset` inside it is
     click-bound in diamond-search.js, so the row is collapsed, not removed.
     DECISION FLAGGED IN THE REPORT: this leaves desktop with no visible reset. */
  #ssq_diamond_search .search_filters > .filters_headers {
    height: 0;
    min-height: 0;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
    visibility: hidden;
  }

  /* RESET, LIFTED ONTO THE FILTERS LINE -- see dsqLiftReset() in
     simple-select-redesign.js for why it moves instead of being un-hidden in
     place (the row's other half is a second "Filters" word under the pill that
     already says it). The wrapper exists only to give the pill and Reset ONE
     width, which is the rail's: `--dsq-rail-w` is measured and published by
     that same function, because the rail is a bootstrap column and its share
     of the row changes with the breakpoint. */
  #ssq_diamond_search .dsq_header_controls > .dsq_filtergroup {
    /* THE ORDER AND THE OFFSET COME WITH THE PILL. `.dsq_filters` carried
       `order: -1` (the board puts Filters first, the markup authors it last)
       and a right margin that lands the view toggle on the body grid's first
       column. Wrapping the pill took both out of the row's hands -- MEASURED,
       the group paints at x500 instead of x67, i.e. in DOM order with the
       toggle and sort ahead of it. They move up to the wrapper, which is now
       the row's item; the pill keeps them inside it only in the sense that it
       no longer needs them. The offset is restated against the GROUP's width
       (the rail) rather than the pill's 132: next item at rail + rail gap,
       minus the row's own 24px flex gap. */
    order: -1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex: 0 0 var(--dsq-rail-w, 288px);
    width: var(--dsq-rail-w, 288px);
    margin-right: calc(var(--dsq-d-rail-gap) - 24px);
    box-sizing: border-box;
  }
  #ssq_diamond_search .dsq_header_controls > .dsq_filtergroup > .dsq_filters {
    order: 0;
    margin-right: 0;
  }
  #ssq_diamond_search .dsq_header_controls .diamond_filters_reset {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    padding: 0;
    visibility: visible;
    cursor: pointer;
    font-family: 'FoundersGrotesk', sans-serif;
    font-size: 14px;
    line-height: 19px;
    letter-spacing: -0.21px;
    color: var(--rb-text-primary, #0F0E0D);
    white-space: nowrap;
  }
  #ssq_diamond_search .dsq_header_controls .diamond_filters_reset svg {
    width: 15px;
    height: 16px;
    flex: 0 0 15px;
  }
  #ssq_diamond_search .dsq_header_controls .diamond_filters_reset svg path {
    stroke: currentColor;
  }

  /* the 36px rhythm, applied at both levels of the filter markup */
  #ssq_diamond_search .diamond_filters,
  #ssq_diamond_search .diamond_filters .standard_filters .row > [class*="col-"],
  #ssq_diamond_search .diamond_filters #advanced_filters .row > [class*="col-"] {
    display: flex;
    flex-direction: column;
    row-gap: var(--dsq-d-rhythm);
  }
  /* the base sheet gives section.diamond_filters `padding: 0 19px 50px 0`,
     which was eating 19 of the rail's 344 content width */
  #ssq_diamond_search .diamond_filters {
    padding: 0;
    margin: 0;
  }
  #ssq_diamond_search .diamond_filters .container,
  #ssq_diamond_search .diamond_filters .row {
    max-width: none;
    width: 100%;
    margin: 0;
    padding: 0;
    --bs-gutter-x: 0;
  }
  #ssq_diamond_search .diamond_filters .d_filter {
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
  }
  /* `Carat` / `Cut` / `Clarity` / `price` are VERTICAL gap 4 between their head
     and their body; `shape` and `Color` have no gap (the head's own 12px bottom
     padding does the work). Declared as the section default. */
  #ssq_diamond_search .diamond_filters .d_filter {
    display: flex;
    flex-direction: column;
    row-gap: 4px;
  }
  #ssq_diamond_search .diamond_filters .d_filter:has(.shape_filter),
  #ssq_diamond_search .diamond_filters .d_filter:has(.color_filter) {
    row-gap: 0;
  }

  /* --- section head `Frame 1171276645` ------------------------------------- */
  /* HORIZONTAL, SPACE_BETWEEN, pad T0 R0 B12 L0, counter CENTER.
     31 tall normally; 60 when it carries a 40-tall tab pair (shape, Color). */
  #ssq_diamond_search .diamond_filters .filter_title {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-height: 31px;
    margin: 0;
    padding: 0 0 12px;
    border: 0;
  }
  #ssq_diamond_search .diamond_filters .filter_title:has(.fancy_shapes_toggle),
  #ssq_diamond_search .diamond_filters .filter_title:has(.fancy_colors_toggle) {
    min-height: 60px;
  }
  /* label FG 400 16/19 ls -0.21, #3E3C39 at 0.80 paint opacity, UPPER */
  #ssq_diamond_search .diamond_filters .filter_title > p {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 4px;
    margin: 0;
    padding: 0;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: uppercase;
    color: rgba(62, 60, 57, 0.80);
  }
  /* `Info circle` — 14 x 14 of #C69858. The markup ships a raster info icon; it
     is sized to the board's box and tinted to the board's gold. */
  #ssq_diamond_search .diamond_filters .filter_title > p span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    margin: 0;
  }
  #ssq_diamond_search .diamond_filters .filter_title > p span img {
    width: 14px;
    height: 14px;
    display: block;
  }

  /* Standard / Antique and White / Fancy pairs — 187 x 40 and 186 x 40,
     radius 10, stroke 0.75 #27423B; active half filled #27423B radius 8. */
  #ssq_diamond_search .diamond_filters .fancy_shapes_toggle,
  #ssq_diamond_search .diamond_filters .fancy_colors_toggle {
    flex: 0 0 auto;
    display: flex;
    flex-direction: row;
    align-items: center;
    height: 40px;
    box-sizing: border-box;
    padding: 0;
    border: 0.75px solid var(--rb-brand-green);
    border-radius: var(--rb-radius-lg);
    background: transparent;
    overflow: hidden;
  }
  #ssq_diamond_search .diamond_filters .filter_toggle_button {
    flex: 0 0 auto;
    min-width: 90.8px;
    height: 100%;
    box-sizing: border-box;
    margin: 0;
    padding: 0 17px;
    border: 0;
    border-radius: var(--rb-radius-md);
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 18px;
    letter-spacing: var(--rb-ls-wide);
    color: var(--rb-brand-green);
    cursor: pointer;
  }
  #ssq_diamond_search .diamond_filters .filter_toggle_button.active {
    background: var(--rb-brand-green);
    color: var(--rb-surface-page);
  }

  /* --- shape tiles --------------------------------------------------------- */
  /* `Frame 1171276735` VERTICAL gap 9, rows of four HORIZONTAL gap 8, tiles
     80 x 96. Flattened to one grid: four columns, column-gap 8, row-gap 9 —
     (344 - 24) / 4 = 80 exactly at the artboard, and the tiles flex with the
     rail below it. The board's row pitch is 105 = 96 + 9. */
  #ssq_diamond_search .diamond_filters .filter_options.shape_filter {
    display: grid;
    /* auto-fill on the tile's own 80px so the tiles never shrink below the
       board's size: 4 across at the artboard's 345 rail, 3 across once the
       rail is on its 280 floor. The Figma rows are FILL-width, so wrapping is
       the same behaviour, not a departure. */
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 80px), 1fr));
    column-gap: 8px;
    row-gap: 9px;
    margin: 0;
    padding: 0;
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button {
    width: auto;
    height: 96px;
    box-sizing: border-box;
    margin: 0;
    padding: 12px 8px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    border: 0.75px solid var(--rb-border-subtle);
    border-radius: 12px;
    background: transparent;
    cursor: pointer;
  }
  /* icon box 32 x 40 (Round is 36 x 45 on the board; the shipped SVGs are
     uniform, so the box is) */
  #ssq_diamond_search .diamond_filters .shape_filter > button svg {
    width: 32px;
    height: 40px;
    display: block;
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button svg path,
  #ssq_diamond_search .diamond_filters .shape_filter > button svg g {
    fill: var(--rb-text-secondary);
  }
  /* label FG 400 16/16 ls -0.5, align CENTER/BOTTOM */
  #ssq_diamond_search .diamond_filters .shape_filter > button p {
    margin: 0;
    padding: 0;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 16px;
    letter-spacing: var(--rb-ls-wide);
    color: var(--rb-text-secondary);
    white-space: nowrap;
  }
  /* selected — radius 20 (not 12), stroke 1.5 #27423B OUTSIDE, fill
     #C2CEB2 @0.30, icon #0F0E0D. OUTSIDE means an outline, which does not
     change the box and so cannot shift the three-row grid. */
  #ssq_diamond_search .diamond_filters .shape_filter > button.active {
    border-color: transparent;
    border-radius: 20px;
    outline: 1.5px solid var(--rb-brand-green);
    outline-offset: 0;
    background: rgba(194, 206, 178, 0.30);
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button.active svg path,
  #ssq_diamond_search .diamond_filters .shape_filter > button.active svg g {
    fill: var(--rb-text-primary);
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button.active p {
    color: var(--rb-text-primary);
  }
  /* the legacy horizontal-scroll arrows belong to the mobile carousel; the
     desktop rail wraps instead. They are click-bound, so they are collapsed
     rather than display:none'd. */
  #ssq_diamond_search .diamond_filters .shape_arrows {
    width: 0;
    height: 0;
    overflow: hidden;
    visibility: hidden;
  }

  /* --- chip rows: CUT, COLOR, CLARITY and every advanced filter ------------ */
  /* chips are h 42, pad T12 R8 B12 L8, radius 8, stroke 0.75 #E4DED8;
     selected = stroke 1.5 #27423B OUTSIDE + fill #C2CEB2 @0.30. */
  #ssq_diamond_search .diamond_filters .filter_options.filter_buttons {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 8px;
    /* PACKED LEFT, not `space-between`. These chips are sized to their own text
       (`flex: 0 0 auto` below), so space-between hands every leftover pixel to
       the gaps -- and the fewer and shorter the chips, the worse it gets.
       MEASURED on dev-0 at 1728, rail 345 wide:
         SYMMETRY   Excellent@0w73  Very Good@143w81  Good@294w51   gaps 70
         POLISH     same                                            gaps 70
         CERT LAB   GIA@0w41        IGI@148w34        GCAL@289w56   gaps 107
         CUT        4 chips, 311px of button in 345 -> gaps ~11, and at
                    narrower rails it wraps 2+2 and each row splays to the edges
       The declared gap is 8. This rule was the only thing overriding it.

       Nothing here depended on space-between: COLOR fills the row with
       `flex: 1 1 0` (measured gaps of exactly 8 already) and CLARITY is a
       4-column grid, so both are untouched by the change. That is also why
       editing `display` on this rule broke the other groups -- the selector is
       shared by every chip block in the rail; `justify-content` is the one
       declaration that only the content-sized ones actually consume. */
    justify-content: flex-start;
    margin: 0;
    padding: 0;
  }
  #ssq_diamond_search .diamond_filters .filter_options.filter_buttons > button {
    /* UNIFORM FILL, NOT TEXT WIDTH. Owner: *"in advanced filters and standard
    filters, both in BYR and non-BYR flow, the buttons are compacted -- they
    just fill as much as the text goes. Get the old behaviour of filling the
    space back; they used to uniformly spread to fill the row."*

    This is a deliberate reversal of the pass recorded above, which sized
    each chip to its own label to match the board. dev-0's base rule is
    `.filter_buttons button { min-width: 0; flex: 1 1 0 }`
    (diamond-search.css:176) -- an equal share of the row for every chip --
    and THIS rule was the only thing overriding it, in both mounts.

    MEASURED before, CUT in a 337px rail: 106 / 73 / 81 / 51, i.e. four
    different widths and a ragged right edge, while every neighbouring group
    filled (SHAPE and CLARITY are grids, COLOR already carries `flex: 1 1 0`).
    That inconsistency inside one rail is what was reported.

    `min-width: 0` is load-bearing and comes from dev-0 too: a flex item will
    not shrink below its min-content width without it, and "Signature Ideal"
    is wider than a quarter of the rail -- so `flex: 1 1 0` alone would leave
    the row ragged exactly as before. With it the chips divide the row evenly
    and long labels wrap inside their own chip.

    `justify-content` above is now inert: there is no leftover space for it to
    distribute. Left in place so reverting is this block alone. */
    flex: 1 1 0;
    min-width: 0;
    width: auto;
    /* GROWS FOR A LABEL THAT WRAPS. With the chips now dividing the row
       evenly (see above), a long label no longer gets a chip sized to it:
       MEASURED at 1728 in a 337px rail, CUT's four chips come out 78 wide
       each and "Signature Ideal" wrapped to two lines inside a box locked
       at 42 -- scrollHeight past clientHeight, i.e. clipped text.
       dev-0 sets no height on these at all; 42 is simply what one line of
       12 + 16 + 12 padding plus the 0.75 borders comes to. Stated as a
       MINIMUM so a single-line chip is unchanged at 42 and a wrapping one
       takes the ~58 it needs. */
    min-height: 42px;
    box-sizing: border-box;
    margin: 0;
    padding: 12px 8px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0.75px solid var(--rb-border-subtle);
    border-left: 0.75px solid var(--rb-border-subtle);
    border-radius: var(--rb-radius-md);
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 16px;
    letter-spacing: var(--rb-ls-wide);
    color: var(--rb-text-secondary);
    cursor: pointer;
  }
  /* diamond-search.css:1166 carries `padding: 15px 5px !important` on the CUT
     and FLUORESCENCE chips specifically, so the board's 12/8 can only be
     restored with the same weapon. Scoped to #ssq_diamond_search, so the
     landing page keeps its own padding. */
  #ssq_diamond_search .diamond_filters .cut_filter > button,
  #ssq_diamond_search .diamond_filters .fluorescence_filter > button {
    padding: 12px 8px !important;
  }
  #ssq_diamond_search .diamond_filters .filter_options.filter_buttons > button.active {
    border-color: transparent;
    outline: 1.5px solid var(--rb-brand-green);
    outline-offset: 0;
    background: rgba(194, 206, 178, 0.30);
    color: var(--rb-text-primary);
  }
  /* COLOR — seven equal chips in one row, gap 8: (344 - 48) / 7 = 42.3 */
  #ssq_diamond_search .diamond_filters .filter_options.color_filter > button {
    flex: 1 1 0;
    min-width: 0;
    padding: 12px 0;
  }
  /* CLARITY — `Frame 1171276742` VERTICAL gap 8 over two rows of four 80 x 42.
     Row pitch 50 = 42 + 8. */
  #ssq_diamond_search .diamond_filters .filter_options.clarity_filter {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
  }
  #ssq_diamond_search .diamond_filters .filter_options.clarity_filter > button {
    width: auto;
    padding: 12px 0;
  }

  /* ===========================================================================
     -2px ON EVERY GAP INSIDE THE FILTERS
     Owner, on the desktop advanced search: *"reduce space in filter by 2 px."*

     Applied to the GAPS between controls rather than to the chips' own padding:
     the chip box is 42 tall with 12/8 padding straight off the board, and
     shaving its padding changes the control's size and its hit target. The gaps
     are pure air, and they are the only thing in this panel that reads as
     "space in the filter".

     Every group moves together so the rail keeps one rhythm -- shapes 8/9,
     chips 8, clarity 8 were all authored separately from the same board value,
     so they are reduced by the same 2 rather than one of them drifting. The
     auto-fill and auto-fit tracks absorb it by widening their tiles, which is
     what those grids are for.
     =========================================================================== */
  /* SPECIFICITY, MEASURED RATHER THAN ASSUMED. The first cut of this block was
     written at (1,2,0) and only CLARITY moved: the shape grid is authored as
     `#ssq_diamond_search .diamond_filters .filter_options.shape_filter` (1,3,0)
     and the cut/fluorescence grids were re-scoped to the archive's own weight
     in diamond-search.css at (1,4,0) when their labels were made to fit one
     line. Each selector here is written to match or beat the rule it is
     correcting -- no !important, just the same weight, later. */
  /* The cut and fluorescence grids live in diamond-search.css, which loads
     AFTER this sheet, so an equal-weight selector here cannot reach them. They
     read `--dsq-chip-gap` instead -- declared once, here, where the -2px is
     scoped to the desktop advanced search and nothing else inherits it. */
  #ssq_diamond_search {
    --dsq-chip-gap: 6px;
  }
  #ssq_diamond_search .diamond_filters .filter_options.shape_filter {
    column-gap: 6px;
    row-gap: 7px;
  }
  #ssq_diamond_search .diamond_filters .filter_options.filter_buttons,
  #ssq_diamond_search .diamond_filters .filter_options.clarity_filter,
  #ssq_diamond_search .diamond_filters .filter_options.cut_filter.filter_buttons,
  #ssq_diamond_search .diamond_filters .filter_options.fluorescence_filter.filter_buttons {
    gap: 6px;
  }

  /* --- sliders: CARAT and PRICE -------------------------------------------- */
  /* `Frame 1171276738` VERTICAL gap 16: the slider group, then a 40-tall input
     row. Carat thumbs are 26 x 17, price thumbs 32 x 21; the track is 344 x 8
     radius 15 #E4DED8 with a #C2CEB2 fill. */
  /* `Frame 1171276738` is VERTICAL gap 16 over two children: the slider group
     and a SPACE_BETWEEN input row. The markup has no row wrapper — the two
     inputs are flat siblings of the bar — so the group is a 2-column grid with
     the bar spanning both: 17 + 16 + 40 = 73, the board's own height. */
  #ssq_diamond_search .diamond_filters .nuslider {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    row-gap: 16px;
    width: 100%;
    margin: 0;
    padding: 0;
  }
  #ssq_diamond_search .diamond_filters .nuslider .slider__bar {
    grid-column: 1 / -1;
  }
  #ssq_diamond_search .diamond_filters .nuslider .slider__range {
    display: none;             /* designer scale legend, not drawn on the board */
  }
  #ssq_diamond_search .diamond_filters .nuslider .slider__bar {
    width: 100%;
    height: 8px;
    margin: 4.5px 0;           /* centres the 17-tall thumb on the 8-tall track */
    border: 0;
    border-radius: 15px;
    background: var(--rb-border-subtle);
    box-shadow: none;
  }
  #ssq_diamond_search .diamond_filters .nuslider .noUi-connect {
    background: var(--rb-brand-sage-strong);
    border-radius: 8px;
  }
  #ssq_diamond_search .diamond_filters .nuslider .noUi-handle {
    width: 26px;
    height: 17px;
    top: -4.5px;
    right: -13px;
    border: 0;
    border-radius: 16px;
    background: var(--rb-brand-green);
    box-shadow: none;
    cursor: pointer;
  }
  #ssq_diamond_search .diamond_filters .nuslider .noUi-handle::before,
  #ssq_diamond_search .diamond_filters .nuslider .noUi-handle::after {
    display: none;             /* noUiSlider's default grip lines */
  }
  #ssq_diamond_search .diamond_filters .d_filter.price .nuslider .noUi-handle {
    width: 32px;
    height: 21px;
    top: -6.5px;
    right: -16px;
  }
  /* the price group is 21 tall against carat's 17 — the taller thumb is what
     puts `Advanced` at 1308 instead of 1304 */
  #ssq_diamond_search .diamond_filters .d_filter.price .nuslider .slider__bar {
    margin: 6.5px 0;
  }
  /* `Frame 1171276739` 344 x 40, SPACE_BETWEEN: two boxes, 80 wide on carat and
     110 on price, white, 1px #E4DED8, radius 8, text FG 400 16/16 ls +0.75 —
     the only positive letter-spacing on the screen. */
  #ssq_diamond_search .diamond_filters .nuslider .slider__input-min,
  #ssq_diamond_search .diamond_filters .nuslider .slider__input-max {
    position: static;
    width: 80px;
    height: 40px;
    box-sizing: border-box;
    margin: 0;
    padding: 0 8px;
    border: var(--rb-stroke) solid var(--rb-border-subtle);
    border-radius: var(--rb-radius-md);
    background: var(--rb-surface-card);
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 16px;
    letter-spacing: 0.75px;
    text-align: center;
    color: var(--rb-text-primary);
  }
  #ssq_diamond_search .diamond_filters .d_filter.price .nuslider .slider__input-min,
  #ssq_diamond_search .diamond_filters .d_filter.price .nuslider .slider__input-max {
    width: 110px;
  }
  #ssq_diamond_search .diamond_filters .nuslider .slider__input-min {
    grid-column: 1;
    justify-self: start;
  }
  #ssq_diamond_search .diamond_filters .nuslider .slider__input-max {
    grid-column: 2;
    justify-self: end;
  }

  /* --- `Advanced` — the ADVANCED FILTERS bar ------------------------------- */
  /* 344 x 60, radius 8, 1px #E4DED8, no fill, pad T22 R13 B22 L13,
     label FG 400 18/18 ls -0.5 with textCase ORIGINAL (it is authored
     uppercase, so it must NOT be text-transform:uppercase'd), and a 52 x 52
     plus glyph whose 24px #E4DED8 disc carries a 12px #0F0E0D cross. */
  /* PINNED TO THE BOTTOM OF THE RAIL. Design: "cannot see the advanced option
     (on mac air screen size) -- seems to be a responsive design issue."
     MEASURED at 1440x900: the rail is capped at 700px of a 1325px content
     column and the cta sits at y=1463, so it is only reachable by scrolling the
     rail -- and on macOS the overlay scrollbar is invisible until you scroll,
     so there is nothing on screen saying the rail scrolls at all. It IS
     reachable (scrollTop 625 brings it to y=898); it is simply undiscoverable.

     Sticky rather than moved: the node keeps its place in the filter column, so
     the open/close state machine, the +/- glyph and diamond-search.js's handler
     are all untouched -- only where it PAINTS changes. The rail is the scroll
     container (overflow-y:auto above), so `bottom: 0` pins it to the bottom of
     that scrollport at every viewport height, and at a height tall enough to
     show the whole rail it simply sits where it always did.

     The background is opaque because the filters scroll UNDER it. */
  /* The sticky goes on the WRAPPER, not the button. A sticky element can only
     travel within its own containing block, and `.advanced_filters_button` is
     wrapped tightly around the cta -- there is no room for it to move, so
     `bottom: 0` did nothing (MEASURED: cta still at y=1463 of a 900 viewport).
     `.container.g-lg-0` is the last flex child of `.diamond_filters`, which is
     the full 1300+ of the rail, so a sticky there has the whole column to
     travel in and pins to the bottom of the rail's scrollport. */
  #ssq_diamond_search .diamond_filters > .container.g-lg-0 {
    position: sticky;
    bottom: 0;
    z-index: 2;
    padding-top: 12px;
    background: var(--rb-surface-page, #FAF3ED);
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button {
    width: 100%;
    margin: 0;
    padding: 0;
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button {
    position: relative;
    width: 100%;
    height: 60px;
    box-sizing: border-box;
    margin: 0;
    padding: 22px 13px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: var(--rb-stroke) solid var(--rb-border-subtle);
    border-radius: var(--rb-radius-md);
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 18px;
    line-height: 18px;
    letter-spacing: var(--rb-ls-wide);
    text-transform: none;
    color: var(--rb-text-primary);
    cursor: pointer;
  }
  /* GEOMETRY ONLY -- `display` belongs to the base sheet's state machine and is
     restated below.  This rule used to carry `display: flex`, and at (1,2,2) it
     outranked diamond-search.css:725 `#advanced_minus { display: none }` at
     (1,0,0), so BOTH glyphs painted superimposed at x387 w24 h24 and the opaque
     minus circle covered the plus -- a collapsed bar drawn with a MINUS. */
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button > span {
    position: absolute;
    top: 50%;
    right: 13px;
    transform: translateY(-50%);
    width: 24px;
    height: 24px;
    align-items: center;
    justify-content: center;
  }

  /* The toggle itself, mirroring diamond-search.css:725-733 (which is driven by
     the `.opened` class on the button, not by JS-written inline styles) at the
     specificity the geometry rule above needs. `flex` rather than the base
     sheet's `inline-block` because the 24px ellipse centres its vector. */
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button > #advanced_plus {
    display: flex;
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button > #advanced_minus {
    display: none;
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button.opened > #advanced_plus {
    display: none;
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button.opened > #advanced_minus {
    display: flex;
  }
  #ssq_diamond_search .diamond_filters .advanced_filters_button > button > span svg {
    width: 24px;
    height: 24px;
  }

  /* ===========================================================================
     5. THE RESULTS GRID — `products grid` 1134 x 900, gap 24 / 24
     The board is a wrapping auto-layout of fixed 265-wide cards with a 24px
     itemSpacing AND counterAxisSpacing, i.e. `auto-fill` + a fixed gap, not a
     fixed column count. At 1728 the 1134 track resolves to exactly 4 columns
     of 265.5. The old sheet's 23.200000762939453px gap came from the 14465
     board and is superseded by a clean 24.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search .col-lg-9.search_container {
    grid-column: 2;
    grid-row: 1;
    width: auto;
    max-width: none;
    flex: none;
    padding: 0;
    margin: 0;
    /* diamond-search.css:61 hangs the LEGACY desktop divider off this column
       (border-left 1px + border-bottom 1px). The board has no divider between
       the rail and the products column -- the only thing in that 89px gutter is
       the rail's own 6px scrollbar at x 457 -- and because the column is
       border-box, that 1px was eating into the 1134 track: every child landed at
       x 515 / w 1133 instead of 514 / 1134. Scoped, so the legacy
       /lab-grown-diamonds page keeps its divider. Mobile does the same at
       _advanced-search.css:685. */
    border: 0;
  }
  /* .diamond_search_results > .search_content.row > .search_results_grid_container
     — the results column nests two more bootstrap rows, and `.search_content`'s
     `margin: 0 -12px` was pushing the whole grid 12px out of its column on both
     sides (measured x 503 / w 1157 against the column's 514 / 1134). */
  #ssq_diamond_search .diamond_search_results,
  #ssq_diamond_search .diamond_search_results .search_content,
  #ssq_diamond_search .search_results_grid_container {
    padding: 0;
    margin: 0;
    --bs-gutter-x: 0;
  }
  /* LIST VIEW -- the same bootstrap bleed on the other branch of `.search_content`.
     `.search_results` and `.search_header` are `.col-12`s whose gutter padding is
     zeroed by the `--bs-gutter-x: 0` above, but each of them CONTAINS a bootstrap
     `.row` -- `.result_item_row` (diamond-search.js:2152) and the heading strip's
     own `.row` -- and `.row` re-declares `--bs-gutter-x: 1.5rem` for its own
     subtree, so those keep `margin: 0 -12px`. With the parent padding gone there
     was nothing left to cancel them and every list row painted 12px outside the
     column on BOTH sides (measured x 503 / w 1157 against the column's 514 /
     1134) -- the grid-side defect fixed above, on the list branch.
     The 12px is restored as PADDING rather than killed as margin because both
     boxes have to move together: the heading strip's cells and the rows' cells
     ride the same 12px bootstrap column rhythm, and zeroing one row's margin
     alone would slide its cells 12px off the headings above them. With the
     padding back, both inner rows resolve to exactly the column and the visible
     row box -- the bottom hairline, and the selected row's outline -- sits on
     514 / 1134. Never `display`: diamond-search.js toggles both with an inline
     display when the view switches (js:2467). */
  #ssq_diamond_search .search_results,
  #ssq_diamond_search .search_header {
    padding-left: 12px;
    padding-right: 12px;
  }
  #ssq_diamond_search .search_results_grid {
    /* it also carries bootstrap's .row, whose negative side margins made the
       grid escape its column and pulled every track narrow */
    margin: 0 !important;
    /* AIR, TOP AND BOTTOM ONLY -- and the sides are load-bearing.
       MEASURED at 1728: the segmented control above ends at 183 and the first
       card starts at 200, so the run had 17px of air against its OWN 24px row
       gap; and `gridBottom` and the last card's bottom were the same number,
       i.e. NO air at all under the final row. 10 + 17 puts the top on the
       grid's own rhythm and the 24 gives the last row one full gutter.

       Horizontal stays 0. The grid is the column band (514 / 1134 at 1728) and
       the chrome above is aligned to it -- the view toggle sits on 514 and the
       `Shortlist` segment's right edge on 1648, exactly the grid's own edges.
       MEASURED with the 10px on all four sides: cards ran 524..1638, i.e. 10px
       inside both, which reads as a mistake against controls that did not move.
       Mobile's own 12px side padding IS the board's (the 390 row is pad 0/12)
       and is kept there. */
    /* Sides match the archive's -- see the note on
       `#diamond_search.sf_archive .search_results_grid` in stone-first.css.
       Kept in step deliberately: the owner has already reported the two mounts
       disagreeing on this once. */
    padding: 10px 10px 24px;
    --bs-gutter-x: 0;
    /* diamond-search.css:960 pins `height: 1180px; overflow-y: scroll` on the
       grid at >= 992 — a legacy inner scroll region with its own scrollbar
       inside the results column. The board scrolls the whole panel under fixed
       chrome (header bands sticky, rail sticky + self-scrolling), so the inner
       scroller is released here. Never display:none — only its box is reset. */
    height: auto;
    max-height: none;
    overflow: visible;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
    gap: 24px;
    align-content: start;
  }

  /* THE 88px CARD BUG. `.result_grid_item_container` carries `col-6 col-lg-4`,
     and bootstrap's `.col-lg-4 { width: 33.333% }` resolved against the GRID
     TRACK, not against the row — so each card rendered at a third of its track
     (88.6px at 1728) with all three text lines overlapping. The column classes
     are shared markup and cannot be removed, so their box is neutralised here.
     `g-3` puts its gutter on the item's own padding, so that goes too. */
  #ssq_diamond_search .search_results_grid > .result_grid_item_container {
    width: auto;
    max-width: none;
    flex: none;
    margin: 0;
    padding: 0;
  }

  /* card `Frame 1171276640` — 265 x 382, #FFFFFF, radius 4, clipsContent.
     Height is left to the grid row so a three-line title cannot clip; every
     card in a row equalises because the items stretch. */
  #ssq_diamond_search .result_grid_item_container .result_grid_item {
    box-sizing: border-box;
    height: 100%;
    display: flex;
    flex-direction: column;
    background: var(--rb-surface-card);
    border-radius: var(--rb-radius-sm);
    overflow: hidden;
    padding: 0;
  }
  /* selected — the board's card stroke is 2px OUTSIDE, so an outline (which
     does not affect layout) rather than a border (which would shrink the
     content box and shift every sibling in the grid). */
  /* THE RING IS DRAWN ABOVE THE CARD'S CONTENT, NOT BEHIND IT.
     Owner: *"the outline is fucked up on cards -- the outline does not run over
     the image too."* Both of my previous attempts were wrong in opposite
     directions, and this records why so the next person does not retry either.

       `outline-offset: 0`   the ring sits OUTSIDE the border box. The grid is
                             aligned flush to its container, which carries
                             `overflow: hidden`, so the left column's stroke was
                             clipped away -- MEASURED, card left 428.3 against a
                             clipper at 428.3.
       `outline-offset: -2px` the ring moves inside, where nothing clips it --
                             and an inset outline paints BENEATH the element's
                             children. The photo fills the card's top half edge
                             to edge, so it covered the ring exactly there.
                             MEASURED down the card's left edge: no green at the
                             image rows, 2px of green at the text rows.

     A positioned pseudo-element is both: inside the card so no ancestor can
     clip it, and painted after the content so the photo cannot cover it.
     `inset: 0` + a 2px border puts it on exactly the pixels `-2px` chose, so
     the geometry is unchanged. It takes no layout space and
     `pointer-events: none` keeps it out of hit-testing, so the whole card stays
     clickable through it. */
  #ssq_diamond_search .result_grid_item_container .result_grid_item {
    position: relative;
  }
  #ssq_diamond_search .result_grid_item_container.active .result_grid_item {
    outline: 0;
  }
  #ssq_diamond_search .result_grid_item_container.active .result_grid_item::after {
    content: "";
    position: absolute;
    inset: 0;
    border: 2px solid var(--rb-brand-green);
    border-radius: var(--rb-radius-sm);
    pointer-events: none;
    z-index: 3;
  }

  /* photo `Frame 1171276635` — 266 x 241.8, IMAGE FILL, pad 12 (mobile is 10) */
  #ssq_diamond_search .result_grid_item_container .result_grid_img {
    flex: 0 0 auto;
    position: relative;
    box-sizing: border-box;
    width: 100%;
    /* FIXED HEIGHT, NOT AN ASPECT-RATIO. On a ratio the photo box grows with the
       column, and since the text block under it is a constant 140 the whole CARD
       grew with it -- MEASURED, 100 cards at each width, uniform within a width
       and wildly different between:
           1728  card 381.4  image 241.4
           1440  card 411.8  image 271.8
           1280  card 372.6  image 232.6
           1100  card 429.8  image 289.8
       Design: the card must not resize for the image; the image adjusts to the
       card. So the box is pinned at the board's 241.8 and the photo fills it --
       it is already `position: absolute; inset: 0; object-fit: cover` below, so a
       wider column crops wider rather than making the card taller. 1728 stays
       pixel-identical to the board; every other width now matches it. */
    height: 241.8px;
    padding: 12px;
    overflow: hidden;
  }
  #ssq_diamond_search .result_grid_item_container .result_grid_img > a {
    display: contents;
  }
  #ssq_diamond_search .result_grid_item_container .result_grid_img img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  /* `Heart` 20 x 18 (mobile 16 x 15), top-right of the photo inside its 12px
     pad. Drawn on the photo box only while the runtime has not injected its own
     `.dsq_heart` button, exactly as the mobile sheet does. */
  #ssq_diamond_search .result_grid_img:not(:has(.dsq_heart))::after {
    content: "";
    position: absolute;
    top: 12px;
    right: 12px;
    width: 20px;
    height: 18px;
    z-index: 1;
    pointer-events: none;
    background: url("../../../assets/media/ringbuilder/icon-heart-outline-dark.svg") no-repeat center / 20px 18px;
  }
  #ssq_diamond_search .result_grid_item_container.active .result_grid_img:not(:has(.dsq_heart))::after {
    background-image: url("../../../assets/media/ringbuilder/icon-heart-filled-red.svg");
  }

  /* `Frame 1171276652` — the 21px band across the top of the photo,
     SPACE_BETWEEN, inside the photo's own 12px pad. simple-select-redesign.js
     injects it (`.dsq_card_photo_top` > `.dsq_card_tagslot` + `.dsq_heart`);
     _advanced-search.css styles it only inside max-width:991, so at desktop it
     was rendering unstyled and the heart sat wherever the flex flow left it. */
  #ssq_diamond_search .dsq_card_photo_top {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    flex: 1 1 100%;
    width: 100%;
    height: 21px;
  }
  /* Reserved, never labelled: Figma's four `Tags for Stones` variants are
     per-stone claims with no backing field anywhere in this codebase, and the
     component's own DEFAULT variant is a transparent spacer. Desktop's pill is
     111 x 21 ("Hearts & Arrows" at FG 400 14/15.4). */
  #ssq_diamond_search .dsq_card_tagslot {
    display: block;
    width: 111px;
    height: 21px;
    border-radius: var(--rb-radius-sm);
  }
  /* `Heart` — 20 x 18 on desktop (16 x 15 on mobile).
     default: outline #3E3C39 · loved: fill + stroke #C65858 */
  #ssq_diamond_search .dsq_heart {
    width: 20px;
    height: 18px;
    flex: 0 0 20px;
    padding: 0;
    border: 0;
    background: url("../../../assets/media/ringbuilder/icon-heart-outline-dark.svg") no-repeat center / 20px 18px;
    cursor: pointer;
  }
  #ssq_diamond_search .dsq_heart[aria-pressed="true"] {
    background-image: url("../../../assets/media/ringbuilder/icon-heart-filled-red.svg");
  }

  /* text block `Frame 1171276640` — 265 x 140, VERTICAL gap 8, pad T21 R8 B21 L8,
     CENTER/CENTER. result_to_html_grid() emits the three text nodes as flat
     siblings with no wrapper, so the block is composed from their margins:
     21 + 48 (two-line title) + 8 + 18 + 8 + 16 + 21 = 140, and the card totals
     241.8 + 140 = 381.8 against the board's 382. See the report: a
     `.dsq_card_text` wrapper is the additive markup this wants. */
  #ssq_diamond_search .result_grid_item_container .grid_result_title {
    /* the base sheet pins height:60px and diamond-search.js then writes an
       INLINE height on every title from the tallest in the batch; both exist
       only to align columns, which the CSS grid already does */
    height: auto !important;
    margin: 21px 8px 0;
    padding: 0;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    font-family: var(--rb-font-display);
    font-weight: 300;
    font-size: 21px;
    line-height: 24px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: uppercase;
    color: var(--rb-text-primary);
  }
  #ssq_diamond_search .result_grid_item_container .grid_result_title p,
  #ssq_diamond_search .result_grid_item_container .grid_result_title p a {
    margin: 0;
    padding: 0;
    font-family: var(--rb-font-display);
    font-weight: 300;
    font-size: 21px;
    line-height: 24px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: uppercase;
    color: var(--rb-text-primary);
    text-align: center;
    text-decoration: none;
  }
  /* spec line — FG 400 16/16 ls -0.21. HUG with the board height as the floor:
     a "Signature Ideal" cut wraps to two lines on live data. */
  #ssq_diamond_search .result_grid_item_container .grid_result_info {
    margin: 8px 8px 0;
    height: auto;
    min-height: 18px;
  }
  #ssq_diamond_search .result_grid_item_container .grid_result_price {
    margin: 8px 8px 21px;
    height: auto;
    min-height: 16px;
  }
  #ssq_diamond_search .result_grid_item_container .grid_result_info p,
  #ssq_diamond_search .result_grid_item_container .grid_result_price p {
    margin: 0;
    padding: 0;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 16px;
    letter-spacing: var(--rb-ls-tight);
    text-align: center;
    color: var(--rb-text-primary);
  }

  /* The board's card has NO button. "Purchase Loose" is already display:none'd
     inside #ssq_diamond_search by diamond-search.css:1208. "Add to Ring" is the
     stone-selection handler, so it is NOT hidden: its wrapper is collapsed and
     the button itself is parked off-canvas until the card is .active, when
     section 6 promotes it into the footer. display:none would take the control
     out of the accessibility tree and make that promotion a two-step. */
  #ssq_diamond_search .result_grid_item .grid_result_button {
    height: 0;
    margin: 0;
    padding: 0;
    overflow: visible;
  }
  #ssq_diamond_search .result_grid_item_container:not(.active) .grid_add_to_ring {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
  }

  /* ===========================================================================
     6. BAND 4 — `Footer` 1728 x 120
     HORIZONTAL, pad T28 R80 B10 L80, top hairline 1px #E4DED8. Its `CTAs` row
     is 1568 x 53, SPACE_BETWEEN: [ Current Est. / $1,660 ] on the left and
     [ Talk to gemologist · VIEW MORE DETAILS · ADD TO RING ] gap 36 on the
     right.

     Shown only once a stone is selected, which is the same condition the mobile
     sheet uses — the board's `2.1 Stone Selection` sibling frame is where the
     footer is populated.

     ROUND 2 — the left `Current Est. / $1,660` column is now built. It was
     omitted last round for want of a live figure; there IS one. The estimate is
     the same running total the quiz's own `.rb_details_price` bar prints
     (rbSettingPrice() + the selected card's `data-price`), so no price is
     invented and the two never disagree. simple-select-redesign.js
     `dsqRenderFooterEstimate()` injects the node at >=992 only and removes it
     again below, because 14468:39018's `ctas` block carries no estimate.
     ------------------------------------------------------------------------ */
  #ssq_diamond_search:has(.result_grid_item_container.active) .dsq_sticky_ctas,
  #ssq_diamond_search:has(.result_item_row.active) .dsq_sticky_ctas,
  #ssq_diamond_search.dsq-has-selection .dsq_sticky_ctas {
    display: flex !important;  /* the node ships [hidden] on every mount */
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    height: var(--dsq-d-footer);
    box-sizing: border-box;
    /* 28 is the band's own padTop and it is what the `CTAs` ROW starts at
       (board y 1128 in a band that starts at 1100, less the 1px inside stroke
       = 27). The row is 53 tall; the 48-tall right-hand group is counter-
       CENTRED inside it, so the three CTAs — and only they — take the extra
       2.5 as a margin below. The `Current Est.` column is the full 53 and sits
       flush at the row top. */
    /* 100, down from 120. Owner, with the band boxed again after the first pass:
       *"the bottom bar still looks wide -- I guess there's more space in the
       bottom below the CTA."* The first pass moved the three bands that are
       built from the BYR footer shape; these two are the advanced search's and
       the stone archive's own copies of the same 120/27/10 and were missed.
       MEASURED: a 48 CTA at `align-items: flex-start` under 27 of top padding
       leaves 45 below it in a 120 box -- the space he is pointing at. 100 with
       24/24 leaves 52 of content box for a 48 CTA: 4 under, even top and
       bottom. The gutter is untouched, for the reason recorded on the first
       pass -- it is what holds the CTA on the grid's right edge. */
    padding: 24px var(--dsq-d-gutter);
    flex-direction: row;
    align-items: flex-start;
    justify-content: flex-end;
    gap: 36px;
    z-index: 6;
    background: var(--rb-surface-page);
    border-top: var(--rb-stroke) solid var(--rb-border-subtle);
  }
  /* the scroll area has to clear the band while it is up */
  #ssq_diamond_search:has(.result_grid_item_container.active) #diamond_search > .container,
  #ssq_diamond_search:has(.result_item_row.active) #diamond_search > .container,
  #ssq_diamond_search.dsq-has-selection #diamond_search > .container {
    padding-bottom: var(--dsq-d-footer);
  }
  #ssq_diamond_search:has(.result_grid_item_container.active) .col-lg-3.search_filters_container,
  #ssq_diamond_search:has(.result_item_row.active) .col-lg-3.search_filters_container,
  #ssq_diamond_search.dsq-has-selection .col-lg-3.search_filters_container {
    max-height: calc(100vh - var(--dsq-d-band1) - var(--dsq-d-band2) - var(--dsq-d-body-top) - var(--dsq-d-footer));
  }

  /* --- left column `Frame 1171276719` — VERTICAL, row-gap 8 ----------------
     `Current Est.` (FG 400 16/19, h 19) over `$1,660` (Canela 300 28/19, h 26):
     19 + 8 + 26 = the 53-tall `CTAs` row exactly. `margin-right: auto` is what
     makes the row SPACE_BETWEEN without disturbing the 36px gap inside the
     right-hand group — a real `justify-content: space-between` would also have
     spread the three CTAs apart from each other.
     The node is injected by simple-select-redesign.js, so it is the bar's first
     child and needs no `order`. */
  #ssq_diamond_search .dsq_sticky_ctas .dsq_est {
    order: 0;
    flex: 0 0 auto;
    margin: 0 auto 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
    row-gap: 8px;
  }
  #ssq_diamond_search .dsq_sticky_ctas .dsq_est_label {
    display: block;
    height: 19px;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    /* textCase TITLE on a string already in that case — COPY.md §5 is explicit
       that this must NOT become `capitalize`, which would rewrite any
       lowercase runtime value. */
    text-transform: none;
    color: var(--rb-text-muted);
  }
  /* Canela 300 28/19 as authored. The board's own text box is 26 tall — Figma
     lets a 28px glyph overflow a 19px line box — so the height is pinned to 26
     and the line-height left at the authored 19 rather than silently rounding
     one of the two up. */
  #ssq_diamond_search .dsq_sticky_ctas .dsq_est_value {
    display: block;
    height: 26px;
    font-family: var(--rb-font-display);
    font-weight: 300;
    font-size: 28px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: none;
    color: var(--rb-text-primary);
  }

  /* `Talk to gemologist` — FG 400 18/19 ls -0.21 #27423B, UNDERLINE, no box */
  #ssq_diamond_search .dsq_sticky_ctas .dsq_cta_link {
    position: static;
    order: 1;
    flex: 0 0 auto;
    width: auto;
    height: 48px;
    margin: 2.5px 0 0;   /* 48 counter-centred in the 53-tall CTAs row */
    padding: 0;
    display: flex;
    align-items: center;
    border: 0;
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 18px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: none;
    text-decoration: underline;
    color: var(--rb-brand-green);
    cursor: pointer;
  }
  /* `VIEW MORE DETAILS` — 282 x 48, radius 4, 1px #27423B, no fill */
  #ssq_diamond_search .dsq_sticky_ctas .dsq_cta_secondary {
    position: static;
    order: 2;
    flex: 0 0 282px;
    width: 282px;
    height: 48px;
    box-sizing: border-box;
    margin: 2.5px 0 0;   /* 48 counter-centred in the 53-tall CTAs row */
    padding: 14px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    border: var(--rb-stroke) solid var(--rb-brand-green);
    border-radius: var(--rb-radius-sm);
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 18px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: uppercase;
    color: var(--rb-brand-green);
    cursor: pointer;
  }
  /* `ADD TO RING` — 282 x 48, radius 4, fill #27423B, trailing 12px arrow.
     This is the selected card's OWN, already-wired button, promoted into the
     band. No new handler, no duplicate control. The rule that does it is the
     shared one below, which covers the list row's primary as well. */
  #ssq_diamond_search .result_grid_item_container.active .grid_add_to_ring::after {
    content: "";
    width: 12px;
    height: 12px;
    background: url("../../../assets/media/ringbuilder/icon-arrow-right-on-cta.svg") no-repeat center / 12px 12px;
  }
  /* --- the LIST row's primary, promoted into the same slot -----------------
     ROUND 2 BLOCKER. Everything above promotes `.grid_add_to_ring`, which is a
     child of `.search_results_grid_container` — and diamond-search.js:2416
     display:none's that whole container in list view. So in list view the
     promoted button measured 0x0, the footer had no primary at all, and the
     282-wide secondary slid into the primary's x1366 slot. The list row owns
     its own already-wired primary (`.search_selectors button.primary_jade`,
     bound at diamond-search.js:1650, the same handler the grid button uses), so
     it is lifted exactly the way the grid one is rather than duplicated — a
     second, handler-less `ADD TO RING` would look identical and do nothing.

     THE ANCESTOR HAS TO BE UN-HIDDEN FIRST, for the same reason the mobile
     sheet does it: result_to_html() writes an inline `display: none` on
     `.result_item_details` (diamond-search.js:2183) and a descendant of a
     display:none box cannot paint however it is positioned. The panel is
     switched to `display: block` and collapsed to a 0-height clipped box, so
     nothing inside it renders and the row's own height is unchanged; the fixed
     button escapes the clip because no ancestor here establishes a containing
     block for `fixed` (nothing in this subtree sets transform / filter /
     will-change / contain). `:not(.opened)` keeps out of the way of the
     accordion the row's own click handler slides open. */
  #ssq_diamond_search .search_results .result_item_row.active > .result_item_details:not(.opened) {
    display: block !important;
    height: 0;
    min-height: 0;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
  }
  #ssq_diamond_search .result_grid_item_container.active .grid_add_to_ring,
  #ssq_diamond_search .search_results .result_item_row.active .search_selectors button.primary_jade {
    position: fixed;
    left: auto;
    right: var(--dsq-d-gutter);
    /* DERIVED FROM THE BAND, AND THE BAND JUST CHANGED. This button is fixed
       OUTSIDE `.dsq_sticky_ctas`, so its offset has to be computed by hand to
       land on the same line as the CTAs inside it. The band was 120 tall with
       a 30.5 top inset, which put it at 41.5; it is now 100 with 24, so
       the inset to use is 28, NOT the 24 of padding: MEASURED, the in-band CTAs
       land at y928 in a band whose top is 900, because the 48-tall right-hand
       group is counter-centred in the 53px row -- with 24 the lifted button sat
       4px high. Left as the arithmetic rather than the answer so the
       next person who moves the band can see what to re-derive. */
    bottom: calc(var(--dsq-d-footer) - 28px - 48px);   /* 100 - 28 inset - 48 button */
    width: 282px;
    height: 48px;
    box-sizing: border-box;
    margin: 0;
    padding: 14px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    z-index: 7;
    border: 0;
    border-radius: var(--rb-radius-sm);
    background: var(--rb-brand-green);
    color: var(--rb-surface-page);
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 18px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    text-transform: uppercase;
    text-align: center;
    overflow: visible;
  }
  #ssq_diamond_search .search_results .result_item_row.active .search_selectors button.primary_jade::after {
    content: "";
    width: 12px;
    height: 12px;
    background: url("../../../assets/media/ringbuilder/icon-arrow-right-on-cta.svg") no-repeat center / 12px 12px;
  }
  /* the row's OWN secondary stays inside the collapsed panel — the band already
     carries `VIEW MORE DETAILS` as a real child, and a second one would be a
     duplicate control rather than a promoted one. */

  /* the promoted button occupies the third slot, so the two real children of
     the band stop short of it — in BOTH views */
  #ssq_diamond_search:has(.result_grid_item_container.active) .dsq_sticky_ctas,
  #ssq_diamond_search:has(.result_item_row.active) .dsq_sticky_ctas {
    padding-right: calc(var(--dsq-d-gutter) + 282px + 36px);
  }


  /* ===========================================================================
     D1 / D2 / D3 -- DEFECTS.md, resolved against DEFECTSPEC.md and
     FILTERS-RAIL.md (14468:43530, 14468:43528, 14468:44330, 14468:42962).
     Appended, additive: nothing above is deleted, moved or reordered. Every
     number below was measured on dev-0 at 1728 before it was written.
     ------------------------------------------------------------------------ */

  /* --- D1 (a) ONE SCROLL CONTAINER ----------------------------------------
     Measured before: TWO nested scrollers.
       .search_filters_container  overflow-y auto, client 900 / scroll 1235
       section.diamond_filters    overflow auto BOTH axes, client 345 / scroll 377
     The inner one is diamond-search.css:967, which pins
     `height: 1235px; overflow-y: auto` on section.diamond_filters at >= 992.
     Nothing there asks for a HORIZONTAL bar -- but CSS overflow-3 says a
     `visible` value on one axis computes to `auto` when the other axis is not
     visible, so overflow-x resolved to `auto` on its own and drew the second
     bar the customer is looking at. Both axes go back to `visible`.

     The pinned height goes with it. Once the section stops clipping, anything
     taller than 1235 (the ADVANCED FILTERS panel when it opens) would paint
     outside a box the outer rail cannot measure, and would be unreachable --
     the outer scroller sizes itself on the child's HEIGHT, not on what escapes
     it. `height: auto` makes the section hug its content, so the single
     remaining scroller reaches everything.
     FILTERS-RAIL.md: "Exactly ONE of them may scroll." */
  #ssq_diamond_search section.diamond_filters {
    height: auto;
    max-height: none;
    overflow: visible;
  }
  /* `.search_filters` is the second half of the same legacy pair:
     diamond-search.css:858 gives it `height: 100vh; overflow-y: auto` for the
     mobile filter sheet, and the >= 992 block at :963 releases `position` and
     `height` but NOT the overflow. While `section.diamond_filters` clipped it
     never showed; the moment that stopped, THIS box inherited the two bars
     (measured `.search_filters` overflow auto/auto, client 345 / scroll 377).
     Released here so the rail really does have exactly one scroll container. */
  #ssq_diamond_search .search_filters {
    overflow: visible;
  }

  /* --- D1 (b) NOTHING LEFT TO SCROLL HORIZONTALLY -------------------------
     The 32px of escaping content, measured: on both sliders the upper handle's
     touch area ran to x 451 (CARAT) and x 457 (PRICE) against a rail that ends
     at 425, and the lower one started at 54 / 48 against a rail that starts at
     80. Two causes, fixed separately rather than hidden with overflow:hidden --
     FILTERS-RAIL.md: "Hiding a horizontal bar while the content still overflows
     is not a fix -- the slider's upper handle would be unreachable."

     Cause 1: simple-select.css:150 blows the noUiSlider hit box up with
     `transform: scale(2.0)`, so a 26x17 handle carries a 52x34 touch area
     centred on it and 13 / 16px of pure dead box hangs past each track end on
     top of the handle's own half-width. On a pointer device the 26x17 handle is
     already a comfortable target. */
  #ssq_diamond_search .diamond_filters .nuslider .noUi-touch-area {
    transform: none;
  }
  /* Cause 2: the board centres the handle ON the track end, so half of it is
     outside a 344 box by construction. FILTERS-RAIL.md: "Inset the track by
     half a handle on each side (or give the rail that much padding) -- do NOT
     let it overflow and scroll." The track is inset rather than the rail,
     because padding the rail would pull every other row in off 344 as well.
     13 = 26/2 (CARAT handle), 16 = 32/2 (PRICE handle). These are px, not
     percentages, because the handles are fixed-size in the design: the track
     stays fluid and only its two ends move in by a constant. */
  #ssq_diamond_search .diamond_filters .nuslider .slider__bar {
    /* the rule above declares `width: 100%`, which a margin cannot shrink --
       with it in place the inset moved the whole 345 track right instead of
       pulling its two ends in, and the upper handle ended up FURTHER out
       (measured x 425..451). `auto` lets the margins do the work. */
    width: auto;
    margin-left: 13px;
    margin-right: 13px;
  }
  #ssq_diamond_search .diamond_filters .d_filter.price .nuslider .slider__bar {
    width: auto;
    margin-left: 16px;
    margin-right: 16px;
  }

  /* --- D1 (c) THE TRACK IS BACK ------------------------------------------
     This block was built to 14468:43528, which draws the thumb and NO track
     fill. 14526:48933 -- the node the owner linked as "this is how it should be
     looking like" -- draws BOTH: a 6 x 734 lane at #E4DED8 @ 0.60 with the
     thumb on it at #3D3B39 @ 0.20, same r20 pill on each. Two board nodes
     disagreeing about the same bar; the owner's reference wins, and the other
     node's id is kept here so the disagreement is findable rather than lost.

     Which also settles the third value that was in play: with this rule holding
     `transparent`, the quiz read `rgba(62,60,57,0.2) transparent` while the
     archive read the board's pair -- the two mounts were never going to look
     the same until one of them gave way. Found by asking the engine which rule
     won on the live node, not by reading the file top to bottom: THREE rules
     set `scrollbar-color` on this same selector. */
  #ssq_diamond_search .col-lg-3.search_filters_container::-webkit-scrollbar-track {
    background: rgba(228, 222, 216, 0.6);
    border-radius: 20px;
  }

  /* --- D2 "on click of a swatch it's doublish" ----------------------------
     Measured before, on the selected shape tile AND on the selected CUT,
     COLOR and CLARITY chips -- all four carried the same three rings:
       border      1px solid rgba(0,0,0,0)
       outline     1px solid rgb(39,66,59)         <- the redesign ring
       box-shadow  inset 0 0 0 2px rgb(15,14,13)   <- the doubled black ring
     The black one is diamond-search.css:133 (`.d_filter .shape_filter
     button.active`) and :185 (`.filter_buttons button.active,
     .filter_options.color_filter button.active`), `var(--onyx)` = #0F0E0D. It
     has no counterpart on ANY board (14468:44331 / 14468:44335 / 14468:44340 /
     14468:44342 each carry exactly one stroke and no effect), and the redesign
     sheet was painting its own green ring on top of it without ever cancelling
     it. Cancelled here for all four families at once.

     The green ring also moves off `outline` and onto a spread box-shadow. The
     board's selected stroke is 1.5px with strokeAlign OUTSIDE; Blink rounds
     outline-width to whole device pixels, so the 1.5px outline above was
     actually painting at 1px (measured: `outline: rgb(39,66,59) solid 1px`).
     A spread shadow is not rounded, is drawn outside the border box exactly as
     strokeAlign OUTSIDE specifies, and -- like the outline -- takes no layout
     space, so the three-row tile grid and the CUT row cannot shift.

     KEPT deliberately: the 12 -> 20 radius morph (drawn on every composed
     board and live today -- DEFECTS.md is explicit that it is not the bug) and
     the #C2CEB2 @ 0.30 fill (already correct). */
  #ssq_diamond_search .diamond_filters .shape_filter > button.active,
  #ssq_diamond_search .diamond_filters .filter_options.filter_buttons > button.active {
    outline: none;
    box-shadow: 0 0 0 1.5px var(--rb-brand-green);
  }
  /* The other half of the drawn selected state, and the reason one thin ring
     is enough: the glyph grows and darkens. Frame 32x40 -> 36x45 with the
     vector 32x32 -> 34x34 (14468:44331 vs 14468:44335), i.e. x1.0625 on the
     ink. The shipped SVGs are one uniform 32x40 box, so the box carries it:
     32 x 1.0625 = 34, 40 x 1.0625 = 42.5. 42.5 + 8 gap + 16 label = 66.5 in
     the tile's 72px content box, so nothing reflows. */
  #ssq_diamond_search .diamond_filters .shape_filter > button.active svg {
    width: 34px;
    height: 42.5px;
  }

  /* --- D3 "images between diamond cards are weird" -------------------------
     Measured before, at 1728: the results grid is a 4-track grid
     (`repeat(auto-fill, minmax(min(100%, 220px), 1fr))`, gap 24), and the
     neutralising rule at the top of this section only reaches
     `.result_grid_item_container`. So the two interleaved promo tiles kept
     their raw bootstrap widths resolved against a SINGLE 265.5px track:

       `.col-12.col-lg-8.g-3`  (`.grid_promo.insert_photo`)
            measured 177 x 381.34 at x=1093 -- col-lg-8's 66.66% of one track,
            narrower than a single card, with an 8px `g-3` pad leaving the photo
            at 161 wide. Board 14468:42962 is 547 x 382 = TWO columns plus one
            gutter, exactly a card's height, at the END of a row.
       `.col-12.g-3`           (`.grid_promo.insert_banner`, the
            "WE KNOW CHOOSING ISN'T EASY" panel with its subhead and CTA)
            measured 265.5 x 365.36 -- col-12's 100% of one track, i.e. squeezed
            into a single card slot.

     Both get the same treatment `.col-lg-4` already got: the bootstrap box is
     neutralised and the span is expressed in GRID tracks, so it stays right at
     every width instead of at 1728 only. `span 2` is 2 x card + 1 gutter
     (555 at 1728 against the board's 547 -- the board resolves its
     SPACE_BETWEEN gutter to 28.5 on that row where our grid holds 24); at 992
     the grid is 2 tracks wide and `span 2` is the whole row, which is the same
     relationship.

     NOT changed, deliberately: `object-fit: cover` on the card photos and the
     266 x 241.82 box (DEFECTSPEC: both already correct -- do not change to
     `contain`), and the card `<a>`'s `display: contents`. */
  #ssq_diamond_search .search_results_grid > .col-lg-8 {
    width: auto;
    max-width: none;
    flex: none;
    margin: 0;
    padding: 0;
    grid-column: span 2;
  }
  #ssq_diamond_search .search_results_grid > .col-12:not([class*="col-lg-"]) {
    width: auto;
    max-width: none;
    flex: none;
    margin: 0;
    padding: 0;
    grid-column: 1 / -1;
  }
  /* the photo tile's own box is sized by diamond-search.js (an inline
     `height` copied off the neighbouring card), so only the photo inside it is
     addressed: fill the cell the way the board's IMAGE fill does, radius 4 to
     match the card. */
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo {
    width: 100%;
    overflow: hidden;
    border-radius: var(--rb-radius-sm);
  }
  /* ABSOLUTE, and this is load-bearing now that the promo is a flex column: as a
     flex ITEM the ground photo contributed its own 381px to the stack and drove
     the band to 445 tall against a 381 card row (scrollHeight 600 against the
     ~348 the composite actually needs). Taken out of flow it is the ground
     again and the composite alone sets the height. */
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo > img {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  /* ---- THE BAND'S COMPOSITE -- 14468:42834 `gems` ------------------------
     547x382, radius 4, padding 40/52, itemSpacing 31, fill #27423B @80% over
     the photo ground. Every character and colour below is the board's; the
     strip is composed by simple-select-redesign.js from the grid's own first
     five results. Reported as "banner is missing": the box and the photo were
     both there, the composite over them was never built. */
  #ssq_diamond_search .search_results_grid .grid_promo {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    /* The board's 40/52 padding and 31 gap sum to 388.7 of content in a frame it
       declares as 382 -- its own children do not fit it, a residual this file
       has hit before. Left as the board's, the composite measured 461 tall here
       and the band stopped matching the 382 card row it spans. Trimmed to
       32/52 and 24 so the content is 349 and the band sits in the row at the
       height the grid gives it. */
    gap: 24px;
    box-sizing: border-box;
    padding: 32px 52px;
    border-radius: var(--rb-radius-sm);
    overflow: hidden;
    /* !important, against an INLINE height, and it is answering a real one:
       diamond-search.js:1462 sizes this node with jQuery `.height(cardHeight)`,
       which sets the CONTENT height -- so on a border-box element it writes
       `height: 445.359px` for a 381.359 card the moment this rule adds 64px of
       padding, and the band stood 64 taller than the row it spans. Pinning to
       the grid cell takes the height off that call altogether: the row is sized
       by the 381 cards beside it and the band simply fills it. */
    height: 100% !important;
  }
  #ssq_diamond_search .rb_adv_merch_scrim {
    position: absolute;
    inset: 0;
    background: rgba(39, 66, 59, 0.80);
    pointer-events: none;
  }
  #ssq_diamond_search .rb_adv_merch {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 6px;
    width: 100%;
    max-width: 321px;
    text-align: left;
  }
  #ssq_diamond_search .rb_adv_merch_head {
    margin: 0;
    font-family: var(--rb-font-display);
    font-weight: 300;
    font-size: 28px;
    line-height: 33.6px;
    text-transform: uppercase;
    color: var(--rb-brand-sage, #D8DDCA);
  }
  #ssq_diamond_search .rb_adv_merch_sub {
    margin: 0;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 17px;
    line-height: 20.23px;
    color: var(--rb-surface-page, #FAF3ED);
  }
  /* 429 wide, gap 26, vertically centred -- the board's tiles are different
     sizes because they are different stones, so height is what is shared. */
  #ssq_diamond_search .rb_adv_merch_strip {
    position: relative;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    gap: 26px;
    width: 100%;
  }
  #ssq_diamond_search .rb_adv_merch_strip img {
    display: block;
    width: auto;
    height: 76px;
    max-width: 76px;
    object-fit: contain;
  }
  #ssq_diamond_search .rb_adv_merch_cta {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    max-width: 443px;
    height: 47px;
    margin: 0;
    padding: 14px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    /* appearance reset -- a bare <button> renders as UA chrome here, which this
       build has now been bitten by three times */
    -webkit-appearance: none;
    appearance: none;
    border: var(--rb-stroke) solid var(--rb-border-subtle);
    border-radius: var(--rb-radius-sm);
    background: transparent;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 18px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    color: var(--rb-border-subtle, #E4DED8);
    cursor: pointer;
  }

}

/* =============================================================================
   ROUND 2 — two corrections, both 992-only regressions of rules written above,
   both measured on dev-0 before being written.
   ========================================================================== */
@media (min-width: 992px) {

  /* ---- (1) the toolbar's two controls overlapped at 992 --------------------
     `.dsq_header_controls` and `.dsq_segmented` are siblings placed in the SAME
     grid cell (row 2, column 1), the left group start-aligned and the segmented
     end-aligned, because the markup has no toolbar wrapper. That composition is
     only safe while the two actually fit side by side, and the spacer that
     lines the view toggle up with the first grid column is sized off the RAIL,
     which does not shrink as fast as the viewport:

       measured, left group = 118.53 (Filters, min-content, not the declared
       116) + spacer + 24 + 120 (toggle) + 24 + 265 (sort) = 551.53 + spacer

       1728  band 1568  spacer 293.98  sort ends 925.52, segmented starts 1382
       1280  band 1161  spacer 208.45  sort ends 816.70, segmented starts 954.75
        992  band 900.16 spacer 191.08 sort ends 788.53, segmented starts 680.08
                                       -> 108.45px of OVERLAP, the dark
                                          "All Stones" pill painting over the
                                          "Price (Low to high)" label.

     So the spacer is capped at what the band has left after everything that has
     a fixed width, keeping the board's 24px flex gap between the sort control
     and the segmented one:

       118.53 + 24 + 120 + 24 + 265 + 24 (the gap to the segmented) + 266
       = 841.53, rounded up to 842.

     992: min(191.08, 900.16 - 842 = 58.16) -> 58.16, sort ends 655.61, the
          segmented still starts at 680.08, gap 24.47, overlap gone.
     1280: min(208.45, 319.50) -> 208.45 unchanged.
     1728: min(293.98, 726.00) -> 293.98 unchanged.
     max(0px, ...) so the spacer can never go negative and re-create the overlap
     from the other side if the band is ever narrower still. */
  #ssq_diamond_search .dsq_header_controls .dsq_filters {
    margin-right: min(
      calc(max(var(--dsq-d-rail-min), var(--dsq-d-rail)) + var(--dsq-d-rail-gap) - 156px),
      max(0px, calc(100% - 842px))
    );
    /* Eased, so the row travels with the rail rather than jumping when it
       closes -- same 340ms and curve the track itself uses. */
    transition: margin-right 340ms cubic-bezier(0.2, 0.7, 0.3, 1);
  }
  /* ...AND THE SPACER GOES WITH THE RAIL. Owner: *"when the filter goes in, the
     grid/list buttons and sort by buttons need to move to left as well."*
     This margin exists to hold the view/sort/segmented run clear of the filter
     rail beside it -- it is literally the rail's width plus its gutter. With
     the rail collapsed there is nothing to clear, so it was reserving 358px of
     empty space and the toolbar stayed put while the results slid left.
     MEASURED at 1416, rail open then shut: the grid columns went 282.7/929.3 ->
     0/1284.9 while `.dsq_viewtoggle` sat at x424 in BOTH states. */
  #ssq_diamond_search.dsq-rail-collapsed .dsq_header_controls .dsq_filters {
    margin-right: 0;
  }

  /* ---- (2) the editorial tile was a full screen tall at 992 ----------------
     `14468:42962` is 547 x 382 — two card columns plus one gutter, and EXACTLY
     a card's height (CHECKLIST 162). The `span 2` rule above gets the width
     right at every width; the HEIGHT was coming from diamond-search.js, which
     copies the neighbouring card's height into an inline style on
     `.grid_promo.insert_photo`. Measured: at 1728 and 1280 the inline
     `height: 381.359px` is present and the tile matches the 381.36 card exactly;
     at 992 the inline height is ABSENT and the box fell back to the intrinsic
     aspect of the 1541 x 2055 source photo — 569.08 x 758.89 against a 387.77
     card, 371.12px too tall, a whole screen of image between two card rows
     (same at the 2nd and 3rd tiles: 758.77 and 758.61).

     The board's own ratio is the fix, and it is the fluid form of "a card's
     height" on this grid: 547 / 382 is two tracks + a gutter over one card, so
     as long as the tile spans two tracks the ratio reproduces the card height
     at any width.

     WHERE IT APPLIES, AND WHY IT IS SCOPED. diamond-search.js:1367-1368 is the
     other half of this:

       $('.grid_promo.insert_photo:visible')
         .height($('.grid_promo.insert_photo:visible')
                   .parent().eq(0).prev().find('.result_grid_item').height())

     i.e. the tile copies the height of the card BEFORE it. That works while a
     card shares the tile's grid row, and the tile's two tracks leave room for
     one only from three tracks up. The grid is
     `repeat(auto-fill, minmax(min(100%, 220px), 1fr))` with a 24px gap inside a
     track width of

       G = W x 0.907407407 (the 4.6296296296% gutter, twice)
           - 280 (the rail floor)
           - G x 5.6760204082% (the rail gap)
         = W x 0.855902 - 280                       (verified: 569.06 at 992,
                                                     815.56 at 1280, 1134 at 1728
                                                     against 569.08 / 815.58 /
                                                     1134 measured)

     and a third track needs 3 x 220 + 2 x 24 = 708, i.e. W >= 1154.34. Below
     that the tile is the whole row, there is no card beside it, and the script
     leaves it alone -- which is exactly what was measured: an inline
     `height: 381.359px` present at 1728 and 1280, absent at 992.

     So the ratio is scoped to the two-track zone. Applied unconditionally it
     fights the script instead of filling in for it: the tile sets its own grid
     row's height, the cards in that row stretch to match, and the script then
     copies the STRETCHED card back onto the tile -- measured at 1728, the tile
     and its row went from the 381.36 of every other row to 387.56, a 6.2px
     rhythm break that was not there before. The guard keeps 1728 and 1280
     byte-identical to the state that already passes.

       992 after: 569.08 / (547/382) = 397.40 against a 387.77 card, +9.63.
     The residue is the grid's 24px gutter against the board's resolved 28.5 on
     that row; the tile cannot be closer without hard-coding a card height that
     is set by the card's own text. */

}

@media (min-width: 992px) and (max-width: 1154px) {
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo {
    aspect-ratio: 547 / 382;
    min-height: 0;
  }
}

/* =============================================================================
   ROUND 3 — three corrections to the results grid, every number below read off
   dev-0 at 1728 / 1280 / 1154 / 1100 / 992 before anything here was written.
   ========================================================================== */
@media (min-width: 992px) {

  /* ---- (1) the full-bleed banner cell is on no board ----------------------
     `14468:42835` has 19 children: eighteen 265 x 382 cards and ONE 547 x 382
     editorial tile (CHECKLIST2 #166). There is no full-width panel anywhere in
     the 14468 family.

     MEASURED before this rule — a third promo shape the grid never asked for,
     `<div class="col-12 g-3"><div class="grid_promo insert_banner">`, written
     by diamond-search.js:1146-1160 from the ACF `banner_*` fields:

       1728  1134 x 237.48 at (514, 2632.16)   child index 20
       1280  815.58 x 170.80                   child index 20
       1154  707.73 x 148.20                   child index 20
       1100  661.52 x 138.53                   child index 20
        992  569.08 x 119.17                   child index 15

     i.e. a row of its own, 119-237 tall, wedged between two rows of 381.36 /
     372.59 / 387.77 cards — the card rhythm breaks wherever it lands, and at
     1728 it also strands card 19 alone in the row above it (row y=2226.8 holds
     ONE card and three empty tracks) because a `grid-column: 1 / -1` item can
     never share a row.

     The cell is removed from flow rather than emptied: nothing in
     diamond-search.js reads it back. The `:visible` test at js:1367 is scoped
     to `.grid_promo.insert_photo` — the PHOTO tile — so hiding the banner
     cannot disturb the height copy that sizes the photo tile.

     NOTE FOR THE ORCHESTRATOR, and the reason this is a suppression and not a
     deletion: the banner's COPY is not junk. Its headline / subheadline / CTA
     ("WE KNOW ... CHOOSING ISN'T EASY", 325 characters of textContent) is
     exactly the copy the board's 547 x 382 `gems` tile 14468:42962 carries
     over its photo. The board has ONE tile that is photo + scrim + copy; the
     build has TWO cells, a bare photo and a bare copy panel, and they can only
     be merged in diamond-search.js. See the report. Until that merge lands the
     copy is hidden, because a full-width panel between two card rows is a
     worse error than the copy being absent.

     Both view containers are covered: `.search_results_grid` (grid view) and
     `.search_results` (list view) — js:1157-1164 appends the same string to
     whichever is active. The photo tile is `col-12 col-lg-8` and is excluded
     by the `:not([class*="col-lg-"])`. */
  #ssq_diamond_search .search_results_grid > .col-12.g-3:not([class*="col-lg-"]),
  #ssq_diamond_search .search_results > .col-12.g-3:not([class*="col-lg-"]) {
    display: none;
  }

  /* ---- (2) the tile has to END a row, never sit between two cards ---------
     `14468:42962` sits at x = 587, w = 547 in a 1134-wide band — its right
     edge IS the band's right edge, i.e. the LAST two columns of its row, with
     cards filling the columns before it.

     MEASURED before this rule, at 1728, with `grid-column: span 2` and the
     default sparse auto-flow — the tile lands wherever two consecutive tracks
     happen to be free, which is only the end of the row when the cards before
     it happen to leave exactly two:

       row y=1010.72   card(514) card(803.5) TILE(1093, w 555)      ends the row
       row y=3704.36   card(514) TILE(803.5, w 555) card(1382.5)    MID-ROW
       row y=4920.44   card(514) card(803.5) TILE(1093, w 555)      ends the row

     A tile between two cards appears on no board. The span is replaced by a
     DEFINITE placement on the last two column lines, which is the board's
     relationship expressed in tracks and therefore holds at every width:

       1728  4 tracks  ->  lines 3..5  = columns 3-4, x 1093, w 555
       1280  3 tracks  ->  lines 2..4  = columns 2-3, x 685.03, w 535.72
        992  2 tracks  ->  lines 1..3  = the whole row, x 377, w 569.08

     `-3 / -1` rather than literal line numbers because `repeat(auto-fill, ...)`
     makes the track count a function of the width; counting back from the end
     is the only form that means "the last two columns" at all three.

     `grid-auto-flow: row dense` is the other half and is REQUIRED, not a
     flourish: a definite-column item that cannot fit in the current row is
     pushed to the next one, and in sparse flow the cursor goes with it, so the
     tile leaves a HOLE behind it and two more in front of it. Measured with
     `-3 / -1` alone at 1728, the third tile stranded three empty tracks
     (row 11 column 4, row 12 columns 1-2). Dense lets the cards that FOLLOW
     the tile in the DOM fall back into those cells.

     Dense does not disturb the sort order. Every card is a single track, so
     the only item dense can ever relocate is the tile itself; the cards fill
     back in DOM order, which is the order `Price (Low to high)` put them in.
     Verified after: the visual run at 1728 stays strictly ascending.

     This does NOT put the tile at child index 14, which is where the board has
     it (after 14 cards, row 4). The insert index is computed in
     diamond-search.js:1107-1115 from the ACF `position` field against a THREE
     column assumption (`position * 3 + item_count === count`) while the
     desktop grid runs four tracks, which is why the live tile arrives after 10
     cards. That is a JS + ACF change, not a CSS one — see the report. What is
     fixed here is the shape the customer sees: the tile always closes a row. */
  #ssq_diamond_search .search_results_grid {
    grid-auto-flow: row dense;
  }
  #ssq_diamond_search .search_results_grid > .col-lg-8 {
    grid-column: -3 / -1;
  }

}

/* ---- (3) the tile was 9.64px taller than its cards at 992 ------------------
   `14468:42962` is 547 x 382 — EXACTLY the 382 height of the 265 x 382 cards
   beside it. Live, the tile matches the card at every width but one:

     1728  tile 381.36  card 381.36   inline style `height: 381.359px` present
     1280  tile 372.59  card 372.59   inline style `height: 372.594px` present
     1154  tile 426.77  card 426.78   inline style `height: 426.781px` present
     1100  tile 429.77  card 429.78   inline style `height: 429.781px` present
      992  tile 397.41  card 387.77   NO inline style          -> +9.64

   WHY 992 IS THE ONLY ONE. diamond-search.js:1324-1327 guards the height copy
   with `if ($(window).width() > 992)`, so at EXACTLY 992 — the first width
   this desktop sheet applies at — `set_grid_photo_height()` never runs and
   nothing writes the neighbouring card's height onto the tile. Everything from
   993 up gets the inline height and never reaches the rule below. The ROUND 2
   fallback was `aspect-ratio: 547 / 382`, the board's own ratio, and the board
   ratio is not the card's height law: 569.08 / 1.4319 = 397.41 against a
   387.77 card.

   THE CARD'S OWN LAW, which is what "as tall as the card" actually means. A
   card is a cover photo plus a fixed text block, so its height is affine in
   the track width, and the tile spans two tracks plus one 24px gutter. Solved
   from the two measured points inside the two-track zone:

       992   tile w 569.08   card h 387.77
      1100   tile w 661.52   card h 429.78
       slope     = 42.01 / 92.44 = 0.45445
       intercept = 387.77 - 0.45445 x 569.08 = 129.15

     -> h = 0.45445 x w + 129.15, which reproduces BOTH points exactly
        (992: 258.62 + 129.15 = 387.77;  1100: 300.63 + 129.15 = 429.78)

   Expressed with a percentage `padding-top` on a spacer, because percentage
   padding resolves against the containing block's WIDTH — so the tile derives
   its height from its own width, with no viewport unit, no hard-coded card
   height, and no 992 anchor. It is fluid across the whole two-track zone.

   The photo is taken out of flow so the spacer alone drives the box. Kept
   scoped to the two-track zone: from 1154.34 up there are three tracks, the
   tile shares its row with a card, and diamond-search.js owns the height —
   ROUND 2 measured what happens if this fights the script (the tile sets its
   own row height, the cards stretch, the script copies the STRETCHED card
   back, and every row in the grid gains 6.2px). Inside the zone the inline
   `height` the script writes at 993+ is an inline style and still wins over
   the `auto` below, with the spacer simply overflowing the `overflow: hidden`
   box and the absolutely-positioned photo filling whatever height wins. */
@media (min-width: 992px) and (max-width: 1154px) {
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo {
    aspect-ratio: auto;
    height: auto;
    position: relative;
  }
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo::before {
    content: "";
    display: block;
    padding-top: calc(45.445% + 129.15px);
  }
  #ssq_diamond_search .search_results_grid > [class*="col-"] > .grid_promo.insert_photo > img {
    position: absolute;
    inset: 0;
  }
}

/* =============================================================================
   SELECTED-CHIP RING: stop the rail clipping two of its four sides
   -----------------------------------------------------------------------------
   Board 14468:44335 gives the selected state a 1.5px #27423B stroke with
   strokeAlign OUTSIDE, and the rail 14468:43013 is clipsContent:false -- the
   ring is MEANT to paint outside the chip's box.

   Built as `box-shadow: 0 0 0 1.5px`, which paints outside the border box, it
   was then clipped by two ancestors that both start at the same x as the chip:
     .filter_options       overflow:auto    x=80 w=345
     .search_filters_container overflow-x:hidden x=80 w=383
   So every chip flush to the rail's left or top edge -- the selected Round
   tile, and the first chip of Cut / Color / Clarity, all at x=80 -- painted its
   ring on the right and bottom only. Pixel-scanned at 1728: 6px of #FAF3ED then
   straight into the tile fill on the left, #27423B on the right.

   This did not show before this session because the old selected state used an
   INSET shadow, which cannot be clipped by an ancestor. Removing the inset ring
   (it was the "doublish" second ring) exposed the clip.

   Two fixes, both needed:
   1. `.filter_options` has no reason to scroll now that the rail is a single
      scroller and its content fits 344 -- it was the inner half of the
      double-scrollbar. `visible` also stops it clipping.
   2. The container keeps its clip (overflow-x:visible would compute to auto
      next to overflow-y:auto and reintroduce a horizontal scrollbar), so it is
      given 2px of room on the two clipped edges and pulled back by the same
      2px, leaving every content x/y exactly where it was.
   ============================================================================= */
@media (min-width: 992px) {
  #ssq_diamond_search .diamond_filters .filter_options {
    overflow: visible;
  }
  /* `.col-lg-3.search_filters_container` (1,2,0) to match the rule at :378 --
     a plain `.search_filters_container` (1,1,0) loses to it and silently did
     nothing. NOTE there are TWO nodes with this class; the other is the
     `.d-lg-none` mobile rail, which measures 0x0 here.

     :378 runs the scroll box 38px wider than the rail and gives the 38 back as
     padding-right, so the 6px thumb lands in the 89px gutter. box-sizing is
     border-box, so a bare `padding-left: 2px` would have taken those 2px out of
     the 345 content box and narrowed the rail. The width grows by the same 2. */
  #ssq_diamond_search .col-lg-3.search_filters_container {
    width: calc(100% + 40px);
    padding-left: 2px;
    margin-left: -2px;
    padding-top: 2px;
    margin-top: -2px;
  }
}


/* =============================================================================
   RESULTS IN FLIGHT. diamond-search.js stamps `ds-loading` on the results
   containers from the moment a filter fetch leaves until the response for THAT
   request renders. Measured on dev-0, a single shape change took ~8s to come
   back, and for all of it the grid showed the previous query's diamonds with
   nothing to say they were stale.

   Dimmed and made inert rather than emptied or covered: the customer keeps their
   scroll position and the grid does not collapse and re-expand, but they cannot
   click a diamond that is about to be replaced.
   ============================================================================= */
#ssq_diamond_search .search_results_grid.ds-loading,
#ssq_diamond_search .search_results.ds-loading {
    opacity: 0.45;
    pointer-events: none;
    transition: opacity 160ms linear;
}
@media (prefers-reduced-motion: reduce) {
    #ssq_diamond_search .search_results_grid.ds-loading,
    #ssq_diamond_search .search_results.ds-loading { transition: none; }
}

/* =============================================================================
   THE FILTERS PILL COLLAPSES THE RAIL -- 
   -----------------------------------------------------------------------------
   Owner: *"the filters button on BYR flow must not reset. It must close the
   filters bar on the side, with a smooth animation of the search results taking
   the whole space, maintaining padding etc. Fix the same on non-BYR -- there
   filters does what it's intended to, but the animation looks messy when the
   search takes up the space."*

   Same shape as the archive's `sf-rail-collapsed` (stone-first.css 8b): the
   rail stays in the DOM -- no filter control is torn down, so nothing loses its
   state or its handlers -- and only the GRID TRACK it sits in closes.

   MEASURED on the drawer at 1728: `#ssq_diamond_search > .container > .row` is
   `display: grid` with `grid-template-columns: 345px 1134px` and
   `column-gap: 5.67602%` (= 89px of 1568). Collapsed, the first track and the
   gap go to zero and the second takes `1fr`, so the results column grows to the
   full 1568 and keeps its own padding untouched -- the track is what moves, not
   the container's box model.

   THE TRANSITION IS THE POINT, and it goes on the ROW, not on the rail. The
   archive's collapse was a bare rule swap with nothing to ease it, so the grid
   snapped from two columns to one in a single frame -- the "messy" part. Both
   the track list and the gap are animated; the track counts match (two before,
   two after), which is what `grid-template-columns` needs to interpolate.

   The rail's own fade is shorter than the track close and its `visibility`
   change is delayed to the end, so the panel is gone before the gap finishes
   shutting rather than being clipped mid-fade. */
@media (min-width: 992px) {
  /* NOTE THE DEPTH. `.container` is a child of the INNER `#diamond_search`
     section, not of the `#ssq_diamond_search` wrapper the class sits on --
     MEASURED ancestry: .row < .container < SECTION#diamond_search.lab <
     SECTION.diamond-search-block < #ssq_diamond_search. A `>` straight off the
     wrapper matches nothing. */
  #ssq_diamond_search #diamond_search > .container > .row {
    transition: grid-template-columns 340ms cubic-bezier(0.2, 0.7, 0.3, 1),
                column-gap 340ms cubic-bezier(0.2, 0.7, 0.3, 1);
  }
  #ssq_diamond_search.dsq-rail-collapsed #diamond_search > .container > .row {
    grid-template-columns: 0 1fr;
    column-gap: 0;
  }
  #ssq_diamond_search .col-lg-3.search_filters_container {
    transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);
  }
  #ssq_diamond_search.dsq-rail-collapsed .col-lg-3.search_filters_container {
    width: 0;
    min-width: 0;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1),
                visibility 0s linear 340ms;
  }
  /* The pill reads as "off" while the rail is shut, the same two-tone swap the
     archive's own collapsed state uses. */
  #ssq_diamond_search.dsq-rail-collapsed .dsq_filters {
    background: var(--rb-surface-page);
    color: var(--rb-brand-green);
  }
  /* EVERY PART OF THE PILL CARRIES ITS OWN COLOUR, so flipping the button's
     `color` above reaches none of them. MEASURED with only that rule: the pill
     went cream while `.dsq_filters_label` stayed at its own cream, and the word
     "Filters" vanished leaving a bare icon and badge.

     The owner is `#ssq_diamond_search .dsq_header_controls .dsq_filters_label`
     (1 id, 2 classes), asked for by name via CDP matched-styles rather than
     guessed -- and note the classes are `dsq_filters_*`, the drawer's prefix,
     not the archive's `sf_filters_*`. The selectors below carry one class more
     than the rules they have to beat, so no !important is needed. */
  #ssq_diamond_search.dsq-rail-collapsed .dsq_header_controls .dsq_filters_label {
    color: var(--rb-brand-green);
  }
  #ssq_diamond_search.dsq-rail-collapsed .dsq_header_controls .dsq_filters_badge {
    background: var(--rb-brand-green);
  }
  #ssq_diamond_search.dsq-rail-collapsed .dsq_header_controls .dsq_filters_badge_count {
    color: var(--rb-surface-page);
  }
  #ssq_diamond_search.dsq-rail-collapsed .dsq_filters .dsq_filters_icon svg path {
    stroke: var(--rb-brand-green);
  }
  @media (prefers-reduced-motion: reduce) {
    #ssq_diamond_search #diamond_search > .container > .row,
    #ssq_diamond_search .col-lg-3.search_filters_container { transition: none; }
  }
}

/* ===========================================================================
   [Flow 3] THE ANTIQUE SHAPE TILES, AND THE FILTER RAIL'S TYPE
   ---------------------------------------------------------------------------
   Owner: *"the assets in antique shapes is weird... buttons are overflowing,
   text is overflowing in buttons especially colour parts... mandatory padding
   might help on either side and tight flexing"* and *"I'd make filters font
   size 14 for filters, for desktop breakpoint 1440px or below."*
   =========================================================================== */
@media (min-width: 992px) {
  /* --- 1. THE ANTIQUE ICONS ARE STROKE ART, NOT FILL ART -------------------
     MEASURED on dev-1 at 1440, `Old Mine Cushion`: `<svg fill="none">` with 13
     `<path stroke="black">` and NO fill attribute of their own -- and the block
     above paints `fill: var(--rb-text-secondary)` on every path under
     `.shape_filter`, which turns an outline drawing into a solid blob. That is
     the whole of "the assets in antique shapes is weird": the artwork is fine,
     it was being filled.

     The BASE sheet already draws this distinction correctly and always has --
     diamond-search.css:107 fills `.standard_shapes` and :114 only strokes
     `.fancy_shapes` -- which is why the phone rail was never wrong. This block
     restores it at desktop specificity rather than weakening the fill rule,
     because the standard set IS fill art and depends on it. */
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button svg path,
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button svg g {
    fill: none;
    stroke: var(--rb-text-secondary);
  }
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button.active svg path,
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button.active svg g {
    fill: none;
    stroke: var(--rb-text-primary);
  }

  /* --- 2. THE ANTIQUE LABELS ARE TWO WORDS, NOT ONE -----------------------
     The standard roster is Round / Oval / Pear -- one short word each, so the
     `white-space: nowrap` above never showed. The antique roster is `Old Mine
     Cushion`, `Old Mine Marquise`, `Dutch Marquise`, `Criss Cross`: MEASURED at
     1440, an 88px tile holding a 118px label, spilling over both its own
     borders and its neighbours'. They wrap instead, and the tile takes the
     height that needs -- 96 stays the FLOOR so a one-line tile is unchanged and
     the grid rows stay even. */
  /* SAME ICON BOX AND SAME TYPE AS THE STANDARD SET. Owner: *"antique images
     and text look off from the normal standard filters -- icon size and text,
     fix this."*

     The mismatch was mine. To stop "Old Mine Marquise" overflowing I had stepped
     this set down to 13/15 (12/14 under 1440) on a 4px side pad, against the
     standard set's 14/15 on 8 -- MEASURED at 1440, standard 14px/8px vs antique
     12px/4px in tiles of the identical 87.8 x 96. Two type scales in one rail,
     which is what reads as off.

     The overflow is solved by the tile instead: the label wraps and the tile
     takes the height it needs, with the board's 96 as the FLOOR so a one-line
     antique tile is identical to a standard one and the grid rows stay even.
     Nothing here sets a size any more -- the set inherits the standard rules. */
  /* ONE SHAPE FOR EVERY ANTIQUE TILE. Owner: *"all buttons must be shaped
     equally in the antique shape filter -- if you want you can slightly extend
     the button size, but do it uniformly."*

     `min-height` let each tile take only what its own label needed, so a
     one-word tile stayed 96 beside a two-word tile at 104 and the grid came out
     ragged. A FIXED height instead -- 112, the two-line tile's own height plus
     the 8px gap the one-line tiles give back -- so every tile in the set is
     identical whether its label wraps or not. The icon box and the type are the
     standard set's, untouched. */
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button {
    height: 112px;
    min-height: 0;
  }
  #ssq_diamond_search .diamond_filters .shape_filter.fancy_shapes > button p {
    white-space: normal;
    overflow-wrap: anywhere;
    text-align: center;
  }

  /* --- 3. FANCY COLOURS ARE WORDS, WHITE COLOURS ARE LETTERS --------------
     `.standard_colors` is D E F G H I J -- seven single characters, which is
     what `flex: 1 1 0` with `padding: 12px 0` was written for and why it looks
     right. `.fancy_colors` is Pink / Blue / Yellow / Orange / Green / Brown in
     the SAME row rule: MEASURED at 1440, six 40px chips holding 38-41px of text
     with ZERO horizontal padding, so every label either touched or crossed its
     own border. Three per row with real padding on both sides instead. */
  #ssq_diamond_search .diamond_filters .filter_options.fancy_colors {
    flex-wrap: wrap;
  }
  #ssq_diamond_search .diamond_filters .filter_options.fancy_colors > button {
    flex: 1 1 calc((100% - 16px) / 3);
    min-width: calc((100% - 16px) / 3);
    padding: 12px 8px;
  }

  /* --- 4. THE RAIL'S TYPE AT 1440 AND BELOW -------------------------------
     Owner: 14px for the filters from the 1440 breakpoint down. The rail is a
     fixed share of the row, so every pixel the viewport loses comes off it --
     MEASURED, 337 wide at 1728 and 288 at 1440 -- while the chips' labels do
     not shrink. 14 is what keeps `Signature Ideal` and `Very Good` off their
     own borders without changing the chip geometry. */
  @media (max-width: 1440px) {
    #ssq_diamond_search .diamond_filters .filter_options.filter_buttons > button,
    #ssq_diamond_search .diamond_filters .shape_filter > button p {
      font-size: 14px;
      line-height: 15px;
    }
    #ssq_diamond_search .diamond_filters .filter_options.filter_buttons > button {
      padding-left: 6px;
      padding-right: 6px;
    }
  }
}

/* ===========================================================================
   [Flow 3] THE PLACEHOLDER IS SMALL AND CENTRED -- desktop's copy
   ---------------------------------------------------------------------------
   The reasoning is in diamond-search.css. Restated a third time because the
   photo is sized THREE times for this mount and the last one wins: section 8's
   `#ssq_diamond_search .result_grid_item_container .result_grid_img img`
   (1,2,1) is in this sheet, which loads after both of the others, and it also
   takes the img out of flow with `position: absolute; inset: 0` -- so a width
   alone would have been ignored. Both are undone here.
   =========================================================================== */
@media (min-width: 992px) {
  #ssq_diamond_search .result_grid_item_container .result_grid_img.sf-img-missing img {
    /* CENTRED BY POSITION, NOT BY FLEX. `margin: auto` centres a flex item in
       the free space of its LINE -- and the card's heart button is a flex item
       on that same line, so the mark was pushed off-centre and sat beside it
       (MEASURED: 67px, but hard against the heart). Absolute centring is
       independent of what else the holder contains. The holder is already a
       positioned ancestor -- section 8 pins the photo to `inset: 0` inside it. */
    position: absolute;
    /* `inset` is the shorthand for all four offsets, so it has to clear
       section 8's `inset: 0` BEFORE the two that do the centring -- written
       after them it silently reset both back to auto and the mark sat at its
       static position (MEASURED: computed top 72.17 / left 97.45, i.e. the
       width percentage, not 50%). */
    inset: auto;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 48.12%;
    max-width: none;
    min-width: 32px;
    height: auto;
    object-fit: contain;
  }
  #ssq_diamond_search .result_grid_item_container .result_grid_img.sf-img-none img {
    display: none;
  }
}

/* ===========================================================================
   [Flow 3] THE DESKTOP LIST VIEW IS THE PHONE LIST VIEW
   ---------------------------------------------------------------------------
   Owner: *"in advanced diamond search, list view is still not fixed"* ->
   *"just to confirm, it's the same as the phone one with images in the first
   column, right?"* -> *"yeap."* And: *"text sometimes touches the table lines
   and borders."*

   Desktop was still on the BASE sheet's table: a `.search_header` strip of
   column headings over rows of bordered cells. MEASURED at 1440: no thumbnail
   anywhere (result_to_html() puts the only <img> inside `.result_item_details`,
   which carries an inline display:none), and `Signature Ideal` / `5.09 x 5.11 x
   3.13` running edge-to-edge into their cell borders -- the touching text.

   Both answers are the same answer: adopt the row `_advanced-search.css` already
   builds for <=991. That row is a flex line -- 44x40 thumbnail, then the values
   -- with a bottom hairline and NO vertical rules, so there are no lines left
   for text to touch. The thumbnail comes from `--dsq-thumb`, which
   simple-select-redesign.js has always copied out of the row's `data-img` at
   every width; only the CSS that draws it was behind a max-width query.

   Two things are deliberately NOT copied from the phone block:
     - the fixed column widths (45/30/51/30/40/58). They are the 390 board's, and
       `space-between` would strand them across a 945px row. The cells divide the
       line evenly here instead.
     - the 12px type. 14 at this width, matching the rest of the desktop chrome.
   The ratio and measurements columns are `d-none` under 992 and stay visible
   here, so the desktop line simply carries two more cells.
   =========================================================================== */
@media (min-width: 992px) {
  /* the column-heading strip has no counterpart in the design -- sorting lives
     in the Sort control. Collapsed, not display:none'd: diamond-search.js
     .show()/.hide()s this node, and a display written by .show() would beat any
     author rule that is not !important. */
  /* THE COLUMN HEADINGS STAY. Owner, after the first pass: *"the list view on
     desktop is weird, there's not a table there exactly."* Collapsing this strip
     came from carrying the phone row over whole -- on a 390 screen six values
     read fine unlabelled, on a 945-wide row they are eight bare columns with
     nothing saying what they are. The phone structure that WAS asked for -- the
     photo in the first column, no vertical rules -- is kept; the headings come
     back so it reads as the table it is. */
  /* THE HEADING BAND IS THE ARCHIVE'S. Owner: *"in byr flow list view of
     diamonds, the table must be like how it is in current non byr flow -- like
     styling, the heading being coloured and etc."* The archive mount gets this
     from the base sheet (`.search_header { background: rgb(0 0 0 / 10%) }`); the
     drawer's own block had overridden it to transparent, which is what left the
     eight labels floating on the page ground with nothing reading as a table.
     Same literal, not an approximation, so the two mounts are the same table. */
  #ssq_diamond_search .search_header {
    visibility: visible;
    background: rgb(0 0 0 / 10%);
  }
  #ssq_diamond_search .search_header .header_item {
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 13px;
    line-height: 16px;
    letter-spacing: var(--rb-ls-wide);
    text-transform: uppercase;
    color: var(--rb-text-secondary);
  }
  /* THE ROWS CLOSE UP INTO A TABLE. 14463:32916 draws a single bottom stroke
     per row, which is what the 4px-gapped box-shadow hairline was -- correct as
     a list, and the owner has since asked for this mount to read as the archive's
     table instead. So: the archive's own 1px rule, no gap between rows, and the
     cell rules below. */
  #ssq_diamond_search .search_results .result_item_row {
    outline: 0;
    box-shadow: none;
    border-bottom: 1px solid rgb(0 0 0 / 10%);
    border-radius: 0;
    margin-bottom: 0;
  }
  #ssq_diamond_search .search_results .result_item_row > .results_header {
    display: flex;
    flex-direction: row;
    /* `stretch` so the value cells inherit the row's full height and their
       dividers run the whole way down; the photo keeps its own box and centres
       itself in the line. */
    align-items: stretch;
    gap: 16px;
    width: 100%;
    padding: 8px 12px;
    /* the table's outer left edge. The archive closes it with the first cell's
       own `border-left`; here the first column is the photo, which has none, so
       the edge is drawn on the row. */
    border: 0;
    border-left: 1px solid rgb(0 0 0 / 10%);
    border-right: 1px solid rgb(0 0 0 / 10%);
    cursor: pointer;
  }
  /* THE STONE PHOTO, FIRST COLUMN -- the whole point of the ask. Falls back to
     the shape glyph for rows whose data-img is empty, exactly as on phone. */
  /* 64 x 58, not the phone's 44 x 40. Same reason as the headings: the phone
     numbers were carried over unscaled onto a row more than twice as wide, and
     the photo -- the thing the owner asked to have in the first column -- came
     out the smallest element in it. Same 44:40 proportion. */
  #ssq_diamond_search .search_results .result_item_row > .results_header::before {
    content: "";
    flex: 0 0 64px;
    width: 64px;
    height: 58px;
    align-self: center;
    border-radius: var(--rb-radius-sm);
    background: var(--rb-surface-card) no-repeat center / 34px 34px;
  }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Round"]    > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-round.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Oval"]     > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-oval.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Pear"]     > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-pear.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Emerald"]  > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-emerald.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Cushion"]  > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-cushion.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Princess"] > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-princess.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Marquise"] > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-marquise.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Asscher"]  > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-asscher.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Radiant"]  > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-radiant.svg"); }
  #ssq_diamond_search .search_results .result_item_row[data-shape="Heart"]    > .results_header::before { background-image: url("../../../assets/media/ringbuilder/shape-glyph-heart.svg"); }
  /* AFTER the glyph rules on purpose: equal specificity, so source order decides
     and the real photo has to be able to win. */
  #ssq_diamond_search .search_results .result_item_row[style*="--dsq-thumb"] > .results_header::before {
    background-image: var(--dsq-thumb);
    background-size: cover;
    background-position: center;
  }
  /* `stretch`, not `center`: the cell rules are drawn by the cells themselves,
     so a cell only as tall as its text draws a rule only as tall as its text --
     which is what left the dividers as short ticks floating in the row. The
     cells each centre their own content, so nothing moves but the rules. */
  #ssq_diamond_search .search_results .result_item_head_info {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    padding: 0;
  }
  /* EVEN SHARES, NOT THE BOARD'S FIXED WIDTHS, and no vertical rule anywhere --
     which is what removes the "text touches the table lines" entirely rather
     than nudging it. `min-width: 0` lets a long value wrap inside its own cell
     instead of refusing to shrink; the 10px sides are the clearance. */
  /* CONTENT-SIZED, THEN SHARING THE REMAINDER. `flex: 1 1 0` divided the row
     into eight equal 109px cells, which is narrower than "Signature Ideal" and
     narrower than "5.09 x 5.11 x 3.13" -- so two columns wrapped to two lines
     and the rows came out uneven. `auto` lets each cell start from what it
     actually holds and share the slack evenly on top, and `nowrap` on the value
     keeps a cell honest about the width it needs. There is room: the eight
     values measure ~383 of the 865 the row has after the photo. */
  #ssq_diamond_search .search_results .result_item_head_info > .result_item {
    flex: 1 1 auto;
    width: auto;
    padding: 0 10px;
    /* the archive's cell rule, restored on this mount. The 10px sides are what
       keep the values off it -- the "text touches the table lines" the owner
       raised about the first version of this block. */
    border: 0;
    border-left: 1px solid rgb(0 0 0 / 10%);
    display: flex;
    align-items: center;
    justify-content: center;
  }
  /* 16/19, and in the ARCHIVE'S ink. The previous pass held this at
     `--rb-text-secondary` because 14px primary read as "too bold or black" -- it
     did, on a row with no table around it. With the band and the cell rules back
     the dark value reads as a table cell, which is what the owner is asking this
     mount to be, and #0F0E0D is what the archive sets its cells in. */
  #ssq_diamond_search .search_results .result_item_head_info > .result_item p {
    margin: 0;
    font-family: var(--rb-font-body);
    font-weight: 400;
    font-size: 16px;
    line-height: 19px;
    letter-spacing: var(--rb-ls-tight);
    color: var(--rb-text-primary);
    text-align: center;
    white-space: nowrap;
  }
  /* 14463:32921 -- the shape cell alone is LEFT aligned. Written in the weights
     block at the end of this file, not here: the shared `.result_item` rule
     there is later and equally specific, so an override written at this point
     loses. The PADDING is deliberately not touched -- dropping the shape cell's
     10px made that one column 10px narrower than its heading and pushed the
     missing 10 out across the other seven, which is where a 9px label drift
     came from. */
}

/* ===========================================================================
   [Flow 3] THE SHAPE GLYPH IS 50 x 50 AT DESKTOP
   ---------------------------------------------------------------------------
   Owner, having tried it on their own 18" monitor: *"50 by 50 for icon sizes in
   shape filters, for both standard and antique."*

   The box was 32 x 40 (the board's icon frame). Taken alone, 50 does not fit
   what the tile reserves: 12 pad + 50 + 8 gap + 15 label + 12 pad = 97 against
   the standard tile's 96, and the label would have been pushed out of its box.
   So the tile's own vertical rhythm gives the glyph the room instead of the
   tile growing -- 10 + 50 + 6 + 15 + 10 = 91 inside the board's 96, and
   10 + 50 + 6 + 30 + 10 = 106 inside the antique set's 112 for a two-line
   label. Both heights are unchanged, so the grid rows and the rail's length are
   exactly as they were; only the glyph is bigger.

   The selected tile keeps its proportional bump (the board grows the icon by
   34/32 on select, so 50 -> 53).
   =========================================================================== */
@media (min-width: 992px) {
  #ssq_diamond_search .diamond_filters .shape_filter > button svg {
    width: 50px;
    height: 50px;
    display: block;
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button.active svg {
    width: 53px;
    height: 53px;
  }
  #ssq_diamond_search .diamond_filters .shape_filter > button {
    padding-top: 10px;
    padding-bottom: 10px;
    gap: 6px;
  }
}

/* ===========================================================================
   [Flow 3] THE HEADINGS SIT OVER THE COLUMNS THEY NAME
   ---------------------------------------------------------------------------
   Restoring the heading strip put the labels back but not above anything: the
   strip lays its eight items out as equal bootstrap columns (MEASURED, centres
   487 / 606 / 724 ... 118 apart) while the row below sizes its cells to their
   content (561 / 647 / 739 ... uneven). Two different layouts cannot line up by
   accident.

   So both are put on the SAME explicit weights, with `flex-basis: 0` so the
   weight alone decides the width -- content-sizing either side would drift
   again the moment a value or a label changed. The weights are chosen so each
   column clears its widest occupant: `Signature Ideal` under CUT and
   `5.09 x 5.11 x 3.13` under MEASUREMENTS are the two that need the room.

   The strip is also given the row's own left offset -- 12 padding + 64 photo +
   16 gap = 92 -- because the row reserves that for the stone and the strip has
   no photo of its own.
   =========================================================================== */
@media (min-width: 992px) {
  #ssq_diamond_search .search_header > .row {
    display: flex;
    flex-direction: row;
    align-items: center;
    flex-wrap: nowrap;
    /* `margin: 0 -12px` is bootstrap's own row cancellation, which
       `.result_item_row` carries and this strip must match -- with `margin: 0`
       the strip's content box came out 24px narrower than the row's, so the
       two agreed in the middle and drifted +/-11px at the ends. */
    /* THE STRIP IS THE ROW, MINUS THE PHOTO. Reserving the photo column as
       `padding-left: 92px` got the left edges right and the WIDTHS wrong: the
       row also spends 2px on its outer rules, so the eight weights divided a
       different remainder on each side and the labels drifted up to 9px off the
       values they name (MEASURED at 1728). Mirroring the row's box exactly --
       same margins, same padding, the same 1px edges as transparent, and a 64px
       spacer where the stone sits -- makes the two remainders the same number by
       construction rather than by arithmetic that has to be redone whenever the
       row changes. */
    margin: 0 -12px;
    padding: 0 12px;
    border-left: 1px solid transparent;
    border-right: 1px solid transparent;
    min-height: 36px;
  }
  /* the 16px is a MARGIN, not the strip's `gap`: `gap` would also open 16px
     between every pair of the eight labels, where the row spends it once --
     between the stone and the values, which are one flex child there. */
  #ssq_diamond_search .search_header > .row::before {
    content: "";
    flex: 0 0 64px;
    width: 64px;
    margin-right: 16px;
  }
  #ssq_diamond_search .search_header > .row > .header_item,
  #ssq_diamond_search .search_results .result_item_head_info > .result_item {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0;
    width: auto;
    max-width: none;
    min-width: 0;
    padding: 0 10px;
    /* `!important` only because bootstrap's own `.d-lg-block` is: the L/W Ratio
       and Measurements cells carry `d-none d-lg-block`, so without it those two
       stayed block and their text sat a line higher than the other six. */
    display: flex !important;
    align-items: center;
    justify-content: center;
  }
  #ssq_diamond_search .search_header > .row > .header_item p { margin: 0; white-space: nowrap; }
  /* shape · carat · cut · color · clarity · ratio · measurements · price */
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(1),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(1) { flex-grow: 1; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(2),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(2) { flex-grow: 1; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(3),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(3) { flex-grow: 1.6; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(4),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(4) { flex-grow: 0.8; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(5),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(5) { flex-grow: 1; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(6),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(6) { flex-grow: 1.1; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(7),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(7) { flex-grow: 1.9; }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(8),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(8) { flex-grow: 1; }
  /* 14463:32921 -- shape alone reads from the left, strip and row together. */
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(1),
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(1) {
    justify-content: flex-start;
  }
  #ssq_diamond_search .search_header > .row > .header_item:nth-child(1) p,
  #ssq_diamond_search .search_results .result_item_head_info > .result_item:nth-child(1) p {
    text-align: left;
    letter-spacing: var(--rb-ls-wide);
  }
}

/* ===========================================================================
   [Flow 3] THE DESKTOP CTA BAND RISES TOO
   ---------------------------------------------------------------------------
   Same ask, same device as the phone block in _advanced-search.css -- only the
   distance changes, because the desktop band is the --dsq-d-footer band rather than
   the phone's 178. The band's own contents are IN FLOW here (`display: flex`
   with padding), so they move with it for free; the promoted `Add to Ring` is
   `position: fixed` outside the band at `bottom: 41.5px` and takes the same
   animation so the two arrive together.
   =========================================================================== */
/* DERIVED FROM THE BAND, so the travel cannot outlive the band's height. 132
   was 120 + 12 of clearance; the band is 100 now and this follows it. */
@keyframes dsq_ctas_rise_d {
  from { transform: translateY(calc(var(--dsq-d-footer) + 12px)); }
  to   { transform: none; }
}
/* ...AND THE WAY BACK OUT, which this width never had either. */
@keyframes dsq_ctas_fall_d {
  from { transform: none; }
  to   { transform: translateY(calc(var(--dsq-d-footer) + 12px)); }
}
@media (min-width: 992px) {
  /* THE BAND RISES. THE LIFTED BUTTON DOES NOT. Owner: *"on clicking multiple
     diamond cards the Add to Ring CTA still pops up every time, like it
     moves."*

     The same two card selectors were taken off the MOBILE rise last pass and
     left on this one, which is why it kept happening on a laptop. MEASURED at
     1440 across a card switch: the band held at y830 with no transform, while
     the button ran y861 -> 917 -> 881 -> 865 -> 861 on `dsq_ctas_rise_d` --
     translateY 56 -> 20 -> 4 -> 0. The band's class does not change when the
     selection moves; the ELEMENT these two selectors match does, so a fresh
     element restarted the 320ms on every card. */
  #ssq_diamond_search:has(.result_grid_item_container.active) .dsq_sticky_ctas,
  #ssq_diamond_search:has(.result_item_row.active) .dsq_sticky_ctas,
  #ssq_diamond_search.dsq-has-selection .dsq_sticky_ctas {
    animation: dsq_ctas_rise_d 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
  }

  /* ...AND THE LIFTED BUTTON RIDES WITH IT HERE TOO. Owner, with a screen
     recording: *"on clicking a product card the bottom bar swipes up -- the ADD
     TO RING does not animate with the rest of the bottom drawer. It's as if when
     I click, ADD TO RING is already there, and the rest of the bar slides up."*

     TRACED in his recording at 43fps, and then again in the browser at rAF:

       Talk to a gemologist   top 939 -> 925 -> 917 -> 915 -> 912 -> 911
       ADD TO RING            top 911 in every frame, from nothing in ONE frame

     The button is not the band's: it is the selected CARD's own
     `.grid_add_to_ring`, lifted into the corner with `position: fixed` by the
     rule above, so it sits OUTSIDE `.dsq_sticky_ctas` and the band's animation
     cannot reach it.

     The mobile sheet already solves exactly this -- `_advanced-search.css`
     section "...AND THE LIFTED BUTTON RIDES WITH IT" -- and the whole mechanism
     is already built: `.dsq-ctas-rising` is stamped on the root by
     simple-select-redesign.js's rbCtasRiseTogether() only when
     `.dsq-has-selection` goes absent -> present, NOT when the selection moves
     between cards. That distinction is the point: the card selectors match a
     FRESH ELEMENT on every tap, so animating them unconditionally restarts the
     320ms each time and reads as a flash -- which is why the rise was taken off
     them in the first place.

     Only the desktop half was never written. Same one-shot hook, same duration
     and curve as the band beside it, so the two cannot drift. */
  #ssq_diamond_search.dsq-ctas-rising .result_grid_item_container.active .grid_add_to_ring,
  #ssq_diamond_search.dsq-ctas-rising .search_results .result_item_row.active .search_selectors button.primary_jade {
    animation: dsq_ctas_rise_d 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
  }
  #ssq_diamond_search.dsq-ctas-closing .dsq_sticky_ctas {
    animation: dsq_ctas_fall_d 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
  }
}

/* ===========================================================================
   THE DESKTOP LIST: NO RULES BETWEEN CELLS, A HEART THAT IS A CELL, AND A
   SELECTED ROW YOU CAN SEE
   ---------------------------------------------------------------------------
   The drawer's twin of the block in stone-first.css -- same report, same three
   omissions, same cause: every list rule written for this flow lives in a
   `max-width: 991px` block, so above 992 the rows fell back to the plugin's
   table. Owner: *"on desktop in advanced BYR and on BYR, both in list view,
   there's no outline for the selected diamond row -- keep that"* / *"Shortlist
   is misaligned with the row, and no vertical lines in desktop either."*

   The hairline UNDER each row stays -- it is the divider the design keeps. What
   goes is the ones BETWEEN cells, which 14634:47676 draws at no width.
   =========================================================================== */
@media (min-width: 992px) {
  #ssq_diamond_search .search_results .result_item_head_info > .result_item,
  #ssq_diamond_search .search_header > .row > .header_item,
  #ssq_diamond_search .search_results .result_item_row > .results_header {
    border-left: 0;
    border-right: 0;
  }
  #ssq_diamond_search .search_results .result_item_head_info > .dsq_row_heart {
    position: relative;
    /* main.css gives `.productFavorite` offsets for the PDP gallery corner it
       was written for, and a `top` on a RELATIVELY positioned box shifts it
       after layout -- which is why centring moved the heart the wrong way:
       MEASURED, `align-self: center` put its box at 396.5 and it painted at
       409.5, exactly main.css's 13. The phone rule already zeroes these. */
    inset: auto;
    flex: 0 0 14px;
    width: 14px;
    height: 13px;
    margin: 0 0 0 16px;
    /* CENTRED ON THE ROW, NOT HUNG FROM ITS TOP. Owner: *"the shortlist icon is
       still up -- it does not align with the text in that row."* The desktop
       line is `align-items: stretch` so the value cells fill the row's height
       and their text centres inside each one; the heart has a fixed 13 and no
       text to centre, so stretch left it at the top of a 58-tall line.
       MEASURED at 1440: text cells centred on 403, heart on 393.5 -- 9.5px high.
       The phone line is already `center` and measured dead on at 335. */
    align-self: center;
    padding: 0;
    border: 0;
    cursor: pointer;
    background: url("../../../assets/media/ringbuilder/icon-heart-row-13.svg") no-repeat center / 14px 13px;
  }
  #ssq_diamond_search .search_results .result_item_head_info > .dsq_row_heart[aria-pressed="true"] {
    background-image: url("../../../assets/media/ringbuilder/icon-heart-filled-red.svg");
    background-size: 13px 12px;
  }
  #ssq_diamond_search .search_results .result_item_head_info > .dsq_row_heart::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 48px;
    height: 48px;
    transform: translate(-50%, -50%);
  }
  /* The strip has no heart, so it spends the heart's 14 plus its 16 of lead on
     nothing -- otherwise the labels drift from their columns by exactly that. */
  #ssq_diamond_search .search_header > .row::after {
    content: "";
    flex: 0 0 14px;
    width: 14px;
    margin-left: 16px;
  }
  /* 14463:33203 -- stroke #27423B, w 1.5, align OUTSIDE, r 4. `outline` is the
     only thing that reproduces OUTSIDE exactly: it does not reflow the row. */
  #ssq_diamond_search .search_results .result_item_row.active {
    outline: 1.5px solid var(--rb-brand-green);
    outline-offset: -1.5px;
    border-radius: var(--rb-radius-sm);
  }
}

/* The desktop heading band takes the phone band's box -- see the archive twin
   in stone-first.css. */
@media (min-width: 992px) {
  #ssq_diamond_search .search_header > .row {
    background: #EDE6E0;
    border-radius: var(--rb-radius-md);
    box-shadow: 0 1px 0 0 rgba(228, 222, 216, 0.40);
  }
}

/* The row's line must not wrap -- see the archive twin in stone-first.css. */
@media (min-width: 992px) {
  #ssq_diamond_search .search_results .result_item_head_info {
    flex-wrap: nowrap;
  }
}

/* ===========================================================================
   THE CARDS LINE UP WITH THE TOOLBAR, NOT 10px INSIDE IT
   ---------------------------------------------------------------------------
   Owner: *"in the BYR flow I opened advanced lab diamond search -- the list and
   grid view buttons are there on the left; the product cards must align with
   those vertically, and then end at the shortlist and align with the end of the
   shortlist button."*

   MEASURED at 1440: the view toggle starts at 428 and the segmented ends at
   1373, and the grid's CONTAINER is already exactly 428-1373. What is not is
   the cards inside it -- first card 438, last card 1363, inset 10 on each side.
   That 10 is bootstrap's half-gutter: `.row > *` carries it as padding, and the
   matching negative margin bootstrap puts on `.row` to cancel it at the edges
   is not in play here, so every column is padded inward and nothing pays it
   back.

   The negative margin is restored on the row itself, which is bootstrap's own
   mechanism and leaves the gutter BETWEEN the cards untouched -- only the two
   outer edges move out to meet the container they already sit in.
   =========================================================================== */
@media (min-width: 992px) {
  /* `!important` because the rule that holds this at 0 could not be named: the
     page's stylesheets are not all readable from the test rig (2 of them are
     cross-origin to it), and the plain form measured no change. Only the two
     outer edges move; the gutter BETWEEN cards is untouched. */
  #ssq_diamond_search .search_results_grid_container > .search_results_grid {
    margin-left: -10px !important;
    margin-right: -10px !important;
  }
}
