/* Make/Model/Year/Engine option lists: plain text/link selection instead of a visible
   radio/checkbox control - shared by the standalone widget and the sidebar accordion
   (both render the exact same .ymm-plain-options markup, see
   ModelExtensionModuleYmmfilter::getMmyAccordionItems() for Make/Model/Year and
   ControllerJournal3Filter::index() for Engine). Roof keeps its own separate image-card
   styling below, unaffected.

   Default/hover text color is left alone (inherits the same .links-text color and hover
   color every other filter facet already uses - e.g. Categories) - only the native
   control and count-badge are hidden, and the selected option is picked out via
   font-weight instead of a checked radio circle. .count-badge is always present in the
   shared checkbox/radio markup (meant for a product count, e.g. Categories' "Kastirauad
   2"), but Make/Model/Year/Engine options never set `total`, so left alone it renders as
   an empty circular outline - the "invisible radio circle" a lot of debugging chased
   before finding this. */
.ymm-plain-options .filter-radio input[type="radio"],
.ymm-plain-options .filter-checkbox input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.ymm-plain-options .filter-radio .count-badge,
.ymm-plain-options .filter-checkbox .count-badge {
  display: none;
}

/* Row spacing between options, forced identical on both surfaces rather than left to the
   admin's per-module "Item Spacing" builder setting (.module-filter-36's own generated
   CSS sets a --item-spacing custom property that a base rule then reads via
   margin-top:var(--item-spacing, 0px) - the standalone widget never receives that
   per-instance CSS at all, so it already renders at the 0px fallback, which is the
   tighter, preferred look here). Overriding margin-top directly, same selector shape the
   base rule uses, sidesteps that variable indirection (and whatever kept the admin
   setting from visibly taking effect) entirely - both surfaces now get literally the same
   rule instead of one depending on module-builder plumbing the other doesn't have. */
.ymm-plain-options .panel-body > div > label + label {
  margin-top: 0 !important;
}

/* ⚠ 481 (the owner 10-18: „YMM nimekirja … shriftide suurused ja käitumisloogikad teeme samasuguseks nagu on
   avaneva menüü kategooriakirjed … teksti värv on sama, hoverid on samad, avatud plokk/esimene rida on tume,
   valikud on tuhmid"). THE PRECEDENT IS THE OPENING MENU'S CATEGORY ENTRIES, measured, never invented:
     size      var(--j-font_size-font-size--title-menu)   (module-catalog_blocks-1147's own block „B. ÜKS RIDA")
     resting   foreground-secondary at weight 400         (the same block)
     dim       opacity .6                                 (the tree's ymm-no-match rule below, 10-15)
     dark      foreground-primary at weight 400           (the ymm-match/ymm-plain rule below - „tume aga mitte bold", 423)
     hover     the theme's text-link colour               (the module's compiled .subitem:hover a)
   is-selected/is-unselected are rendered server-side (item.has_selection + subitem.checked). !important where the
   theme's later style.min.css declares the same property on .links-text at equal specificity (the file's old rule). */
/* ⚠ 482 (the owner's vocabulary, 10-18): TWO STATES ONLY - „normaalne" = the ordinary DARK entry text
   (foreground-primary, the menu entries' own; NOT 481's lighter secondary) · „tuhm" = the 60% opacity dim
   of that same dark. A list with NO selection is ALL normal (the markup already encodes it: is-unselected
   renders only when the list has a selection); once one exists, the selected value is normal and every
   other value dims (the is-unselected rule below). */
.ymm-plain-options .links-text {
  font-size: var(--j-font_size-font-size--title-menu) !important;
  font-weight: 400 !important;
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), calc(var(--j-color-scheme-foreground-primary-l) - 0%), calc(var(--j-color-scheme-foreground-primary-a) * 1));
}

/* the menu's hover (the 1147 module's own .subitem:hover a), replacing the old #F2B20D orange (481) */
.ymm-plain-options .filter-radio label:hover .links-text,
.ymm-plain-options .filter-checkbox label:hover .links-text {
  color: hsla(var(--j-color-scheme-text-link-h), var(--j-color-scheme-text-link-s), calc(var(--j-color-scheme-text-link-l) - 0%), calc(var(--j-color-scheme-text-link-a) * 1)) !important;
}

.ymm-plain-options .is-unselected .links-text {
  opacity: 0.6;
}

/* Roof: image cards, matching the reference JMI implementation
   (catalog/view/theme/journal3/stylesheet/jmi-custom.css there) - same layout,
   spacing and selected-state color. */
.ymm-cs-roof .filter-radio,
.ymm-cs-roof .filter-checkbox {
  display: flex;
  flex-direction: column;
}

.ymm-cs-roof .ymm-roof-card {
  /* !important + flex-direction:column, not the plain "display:block" this used to be:
     the theme's own base rule (.module-filter .panel-body>div>label{display:flex;
     align-items:center}) is one selector-specificity point higher (an element selector
     on top of the same two classes) and was winning over that, leaving the label as a
     flex ROW. With the image's own width:100% (below) eating almost the card's entire
     width in that row, the text label was squeezed into a ~4px sliver and wrapped
     character-by-character down the full remaining height - a tall, cramped card whose
     height scaled with how long each option's name happened to be (confirmed live: the
     two options here rendered at 473px vs 229px tall, roughly proportional to their text
     length). Column forces the intended picture-on-top/caption-below layout instead. */
  display: flex !important;
  flex-direction: column !important;
  width: 100%;
  padding: 0;
  margin: 0 0 10px 0;
  /* Transparent, not "none": reserves the same 2px box the selected/hover states
     border with, so picking or hovering an option doesn't shift the layout by the
     border's own width. */
  border: 2px solid transparent;
  border-radius: 4px;
  background: transparent;
  text-align: center;
  overflow: hidden;
  cursor: pointer;
}

.ymm-cs-roof .ymm-roof-card:last-child {
  margin-bottom: 0;
}

.ymm-cs-roof .ymm-roof-card input[type="radio"],
.ymm-cs-roof .ymm-roof-card input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.ymm-cs-roof .ymm-roof-card img {
  display: block;
  width: 100%;
  height: auto;
  /* Cancels this module's own admin-configured "image" styling (Filter module ->
     general settings -> imageBorder/imageBackground/imagePadding/imageBorderRadius),
     confirmed live: border, background, ~2px padding and a large border-radius, all
     generated against the generic ".module-filter-{id} label img" selector - meant
     for Make/Model brand logos, but Roof's own <img> matches that same selector too,
     since it's markup is otherwise identical (label > img). The roof illustrations
     already sit inside .ymm-roof-card's own purpose-built card (border, background,
     radius, padding - see below), so the image picking up a second, independent set
     of the same properties is what read as a literal frame nested inside a frame. */
  border: none !important;
  background: none !important;
  padding: 0 !important;
  border-radius: 0 !important;
}

.ymm-cs-roof .ymm-roof-card .links-text {
  display: block;
  padding: 7px 6px;
  font-size: 13px;
  line-height: 1.25;
}

.ymm-cs-roof .ymm-roof-card.is-selected {
  border-color: #3c763d;
}

/* Same reasoning and same color as the .ymm-plain-options hover rule above: the
   sidebar accordion's hover comes for free from Journal3's module-builder-generated
   per-instance CSS, the standalone widget never receives that, so without an explicit
   rule here the product page's Roof cards had no hover feedback at all (found via live
   testing) even though the sidebar's did. Text color, not the border (a first attempt
   at this used the border - wrong per the user's own correction: it must match the
   same .links-text-color convention every other hover in this file uses, not invent a
   different kind of feedback just for Roof). */
.ymm-cs-roof .ymm-roof-card:hover .links-text {
  color: #F2B20D;
}

/* CS product page's own vehicle-selection guidance text (see product.twig,
   next to product-ymm-widget) - shown only while the selection is incomplete
   (server-computed, see ModelJmiThuleFitment::getPurchaseGateState()).
   flash-a/-b alternate on each Add to Cart click attempted while still
   incomplete (filter.js), red/black per user's explicit color choice - not a
   gentle notice, meant to draw the eye since the click was just silently
   blocked. */
/* ⚠ THE SHAPE THE OWNER APPROVED IN "Hoiatuse koht", VARIANT A, IN RED - 2026-09-16, and it
   reverses this morning's frameless grey on his own reading of the page: "Minu viga,
   hoiatustekst oli olemas, aga hall ja märkamatu." At the page's own #8B9198 it disappeared
   into the description. The warning is the one thing on a blocked page that has to be seen
   before anything else, so it is allowed to be the one thing that is not the page's own colour.

   ⚠ THE RED IS THE ONE THIS MESSAGE ALREADY WORE, not a new one: #c0392b, which stood in this
   file from the day the message was written until P141 took it out this morning. The theme's
   own palette was checked first, as the command asked: its pastel family carries
   pastel-red / pastel-blue / pastel-green plus one shared pastel-foreground, and in the page's
   own scheme-1 that foreground is hsl(221.5 51% 20%) - a navy, not a red. So the palette has a
   registered red SURFACE and no registered red TEXT, and the surface is used below while the
   text keeps the hex it already had.

   ⚠ THE BACKGROUND IS THE THEME'S, not a tint invented here: --j-color-scheme-pastel-red-*,
   which resolves in scheme-1 to hsl(0 100% 96.08%) - the pale red the command names. A
   re-scheme in admin carries it.

   1px DASHED rather than the old 2px solid, semi-bold rather than 700, the page's own size
   rather than 15px, and left rather than centred: the old look was a stop sign in the middle
   of the column, and the owner rejected it explicitly. The 4px radius and the spacing are the
   ones it already had. */
.ymm-gate-message {
  margin: 10px 0;
  padding: 8px 12px;
  font-size: inherit;
  font-weight: 600;
  text-align: left;
  border: 1px dashed #c0392b;
  color: #c0392b;
  background-color: hsla(var(--j-color-scheme-pastel-red-h), var(--j-color-scheme-pastel-red-s), var(--j-color-scheme-pastel-red-l), var(--j-color-scheme-pastel-red-a));
  border-radius: 4px;
}

.ymm-gate-message.ymm-gate-flash-a {
  color: #c0392b;
  border-color: #c0392b;
}

.ymm-gate-message.ymm-gate-flash-b {
  color: #000;
  border-color: #000;
}

/* ⚠ P141'S `.product-price-group .ymm-gate-message` IS GONE - 2026-09-16. It dressed the
   message for the price slot, frameless and in the page's own grey; the message is back at the
   top of the column and wears the rule above, so that override has nothing left to match. */

/* ⚠ OSTA AND BUY NOW, SHOWN AND CLOSED - the owner, 2026-09-16. Only these two: the wrapper
   carries the state and this names .btn-cart and [data-quick-buy] inside it, so Järjehoidjaks
   and Võrdle are untouched - they promise nothing about fit.

   ⚠ NOT the theme's own .btn.disabled. That rule does give pointer-events:none, but inside
   .button-group-page it also paints `.btn.disabled > span` at opacity 0 - the label disappears,
   and a button whose word has vanished is not "shown but closed", it is gone. So the closed look
   is said here instead, and said in the theme's own colours: the button's background and
   foreground variables - the same eight the row's reset hands back in P135 - are pointed at the
   page's secondary surface and secondary text, so it greys out in whatever scheme the shop is
   wearing and no colour is written down.

   pointer-events:none is what closes it: no click reaches the handler in product.twig, and no
   hover state can paint. aria-disabled and tabindex=-1 are on the elements themselves (the
   template), so a keyboard or a screen reader is told the same thing the eye is. And none of
   this is what stops the sale - checkout/cart.php refuses the POST on its own. */
.button-group-page.ymm-gate-closed .btn-cart,
.button-group-page.ymm-gate-closed [data-quick-buy] {
  pointer-events: none;
  --j-color-scheme-button-background-h: var(--j-color-scheme-background-secondary-h);
  --j-color-scheme-button-background-s: var(--j-color-scheme-background-secondary-s);
  --j-color-scheme-button-background-l: var(--j-color-scheme-background-secondary-l);
  --j-color-scheme-button-background-a: var(--j-color-scheme-background-secondary-a);
  --j-color-scheme-button-foreground-h: var(--j-color-scheme-foreground-secondary-h);
  --j-color-scheme-button-foreground-s: var(--j-color-scheme-foreground-secondary-s);
  --j-color-scheme-button-foreground-l: var(--j-color-scheme-foreground-secondary-l);
  --j-color-scheme-button-foreground-a: var(--j-color-scheme-foreground-secondary-a);
}

/* "Klotsid" project: the filter sidebar and the product listing scroll as two
   genuinely independent blocks - mouse over one, only that one moves, the other
   stays completely still. Journal3's own native "Sticky columns" admin setting
   (positions.column_left...options.stickyCols, enabled per-layout in the database)
   only ever gives plain position:sticky with no height cap - useful on its own, but
   not this: a real independent-scroll block needs a bounded height AND its own
   overflow, and both of those have to sit on the exact same element as the sticky
   itself (see the max-height/overflow-y rule right below - if the cap were on a
   different element than the sticky one, the sticky element would just have nothing
   to visually stick against, and the capped element would become an ordinary,
   non-sticky scroll box that scrolls away with the rest of the page like anything
   else). So this is back to being a plain custom rule again, same shape as this
   project's very first version - the native admin feature is still switched on
   underneath (harmless - it just has no visible effect once this rule is also
   present, since this element already has its own position:sticky) rather than
   switched back off, on the chance a later, simpler need for column stickiness
   without a scroll cap comes up again.

   :has() (not a per-page id) is what makes this apply uniformly on every page that
   has this filter, without listing pages one by one. */
@media (min-width: 992px) {
  #column-left:has(.desktop-filter-wrapper) {
    position: sticky;
    top: var(--sticky-top-distance, 96px);
    max-height: calc(100vh - var(--sticky-top-distance, 96px) - 16px);
    overflow-y: auto;
    /* Deliberately no overscroll-behavior:contain here (an earlier version of this
       rule had it, to stop scrolling deep into a long list from also nudging the
       page itself). Per the user: once this block's own scroll has genuinely run
       out, further scrolling should carry on into the product column instead of
       just stopping - which is exactly plain CSS scroll chaining, the browser's own
       default once nothing here overrides it. */
    /* Confirmed live: this scrollbar was rendering as a thin overlay (offsetWidth
       equal to clientWidth - no space reserved for it at all), sitting on top of
       the filter titles/caret icons at the right edge instead of in a lane of its
       own. scrollbar-gutter reserves that lane on browsers that support it
       (Chrome/Edge/Firefox); the padding is the part that actually matters
       everywhere, including Safari/WebKit (no scrollbar-gutter support at all) -
       it moves the real content left, off of wherever the browser decides to draw
       an overlay scrollbar, regardless of whether space was ever formally reserved
       for it. */
    scrollbar-gutter: stable;
    padding-right: 7px;
  }

  /* Journal3's own grid-rows wrapper (#column-left's direct child) carries its own
     position:sticky in some configurations - left in normal flow here so it can't
     compete with the outer sticky rule above and produce two overlapping
     scrollbars. */
  #column-left:has(.desktop-filter-wrapper) > .grid-rows {
    position: static;
  }
}

/* This module's admin-configured "Section Height" field (general.json's
   sectionHeight / each item's own sectionCustomHeight) caps an individual expanded
   panel's own .panel-body at a fixed height with its own overflow-y:auto - a
   second, independent scrollbar nested inside the sidebar's own (#column-left
   already has one - see above), showing up the moment any panel's content runs
   taller than that cap (confirmed live: Make capped at 400px against 594px of
   actual content). Per the user: every panel must open to its full height with no
   scrollbar of its own - #column-left's own scrollbar is meant to be the only one,
   for every filter alike, not something that only some filters happen to need
   depending on an old admin setting nobody has revisited since. Overridden only
   inside #column-left (not the setting itself, and not sitewide) since the same
   Section Height field is a legitimate, unrelated choice anywhere else this module
   type might be used. */
#column-left .panel-body {
  max-height: none !important;
  overflow-y: visible !important;
}

/* Cart page vehicle-fit line confirmation (checkout/cart.twig) - see
   docs/db-changes/2026-07-31-cart-ymm-confirmation.migration. Needed-but-unconfirmed
   gets a warning color to draw the eye among the other cart-line details (options,
   reward points, recurring info) it sits alongside. */
.ymm-cart-confirm {
  margin-top: 6px;
  font-size: 13px;
}

.ymm-cart-confirm-needed {
  color: #c0392b;
  font-weight: 600;
}

/* Kit-assembly follow-up (2026-08-01): non-first lines of a grouped
   (kit_group_id) confirmation show this note instead of their own checkbox -
   see checkout/cart.php's index()/add(). Muted/italic so it doesn't compete
   visually with the one real checkbox rendered on the group's first line. */
.ymm-cart-confirm-grouped-note {
  color: #767676;
  font-style: italic;
}

.ymm-cart-confirm-warning {
  color: #c0392b;
  font-size: 13px;
  margin-bottom: 8px;
  text-align: right;
}

/* The "hõljuk" flyout (a separate floating box, position:fixed, tracking
   #column-left's own scroll to stay glued to its trigger) that used to live here
   was reverted - after seeing it live, the user preferred the standalone YMM
   widget's own plain accordion behavior instead (see catalog/view/theme/default/
   template/extension/module/ymmfilter.twig: inline expand/collapse, no separate
   box, active/hovered trigger just changes color). Simpler, and it sidesteps every
   fragility the flyout kept surfacing - an invisible identity transform on a
   Journal3 grid wrapper silently breaking position:fixed's own placement math, then
   a stacking-context issue letting other filters' text render on top of it during
   scroll. All filters now share the one plain accordion panel.twig already had
   before "Klotsid" started (see filter.twig, filter.php, filter.js - the
   flyoutList-driven branching in all three was removed alongside this). */

/* TYPE TO FILTER (2026-08-30) - the box, and the rule that does the hiding.
   Unobtrusive on purpose: on desktop the panel opens with the cursor already in it, so it
   should read as typing into the list rather than as a separate control. Both panel
   surfaces use these classes - the standalone widget and the sidebar accordion render the
   identical block. See docs/db-changes/2026-08-30-panel-type-to-filter.md. */
.ymm-panel-search {
  padding: 0 0 6px;
}

.ymm-panel-search input[type="search"] {
  width: 100%;
  box-sizing: border-box;
  padding: 4px 8px;
  font-size: 0.9em;
  line-height: 1.4;
  border: 0;
  border-bottom: 1px solid currentColor;
  border-radius: 0;
  background: transparent;
  color: inherit;
  opacity: 0.65;
}

.ymm-panel-search input[type="search"]:focus {
  opacity: 1;
  outline: none;
}

/* The hiding itself. !important because .filter-checkbox label / .filter-radio label are
   given display by Journal3's own per-module generated stylesheet, which loads after this
   file and would otherwise win - the same specificity fight pdp-gallery-grid.css already
   documents against .swiper.main-image. */
.ymm-panel-search-hidden {
  display: none !important;
}

/* THE TWO VEHICLE MARKS (owner, 2026-09-09, put back in code 2026-09-11).
   P109 decided that a chosen vehicle never moves the structure - it only marks it: bold
   when the category holds something that fits, dimmed when the vehicle is what emptied it.
   The classes are written by ModelJournal3Category::markVehicle() and rendered by the
   filter facet (.links-text), the categories modules (.category-layout) and the section
   headings a category page and All Products share (.category-blocks h3).

   ⚠ THEY LIVE HERE, NOT IN A SETTING. P109 put these two rules in the Filter module's
   admin "Custom CSS" field and by 2026-09-11 they were gone from every module, setting and
   Journal Custom Code - the marks were still emitted and rendered as plain text, which
   reads as "the feature is broken" rather than "a field was cleared". A repo file cannot be
   lost by an admin edit. Weight 700, no colour and no font-family, so a theme recolour never
   has to know.

   ⚠ THE EXTRA CLASS IN EACH SELECTOR IS NOT DECORATION. Journal3 generates a stylesheet per
   module instance and ships it inline, AFTER this file. The sidebar list's own rule is
   .module-categories-1145 .category-thumb .name a - three classes and an element, exactly what
   .category-layout.ymm-match .name a was, and it sets font-weight:400. Equal specificity, later
   in the cascade, so the mark lost and the name stayed regular while the dim kept working (that
   rule sets no opacity). Naming .category-thumb / .category-block puts these rules one class
   above the module's, which is a fact of the markup rather than an !important. */
/* ⚠ AND A DARKER COLOUR, NOT WEIGHT ALONE (owner, 2026-09-17): "Lisaks on, kitsendatud
   valiku, tume (bold) tekst vähe eralduv. Lisaks Bold kasutamisele, peame ka teksti värvi
   tumedamaks tegema." A bold row was still wearing the ordinary grey (foreground-secondary)
   and had to carry the whole distinction on weight, against 25 grey rows around it.

   THE VALUE IS THE THEME'S OWN, not a new colour: foreground-primary written exactly as
   Journal3 writes it in its generated CSS, so a scheme change still moves it. It goes on the
   MATCH rule only - a no-match row keeps opacity .6 and the ordinary colour, because dim is
   what says "your car emptied this", and darkening it would fight that.

   ⚠ HOVER STILL WINS, and by the cascade rather than by omission. Every :hover rule for
   these rows is at least as specific as the mark and ships later (the module's inline CSS
   comes after this file), so the mouse still turns the row the link colour - and weight and
   opacity are untouched by any :hover rule in the served CSS, so bold stays bold and dim
   stays dim underneath it. */
/* ⚠ 419 (the owner 10-15): NORMAL IS THE DARK STYLE. `ymm-plain` (no vehicle, or a row the vehicle does not exclude) wears
   exactly the `ymm-match` look - the theme's dark colour at the NORMAL weight (423: „tume aga mitte bold"); only `ymm-no-match` dims. */
.ymm-match .links-text,
.category-layout.ymm-match .category-thumb .name a,
.category-blocks .category-block h3.ymm-match,
.category-blocks h3.ymm-match,
.ymm-plain .links-text,
.category-layout.ymm-plain .category-thumb .name a,
.category-blocks .category-block h3.ymm-plain,
.category-blocks h3.ymm-plain {
  font-weight: 400;   /* 423 (the owner 10-15): „normaalne shrift tuleb tume aga mitte bold" */
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), calc(var(--j-color-scheme-foreground-primary-l) - 0%), calc(var(--j-color-scheme-foreground-primary-a) * 1));
}

.ymm-no-match .links-text,
.category-layout.ymm-no-match .category-thumb .name a,
.category-layout.ymm-no-match .category-thumb .product-count,
.category-blocks h3.ymm-no-match {
  opacity: .6;
}

/* THE SAME TWO MARKS ON THE OFF-CANVAS CATEGORY TREE (owner, 2026-09-16):
   "kategooriate valiku selliseks nagu oli eelmine moodul, arvestab valitud sõidukit".
   The panel's tree is a Kataloogiplokid (catalog_blocks) record, whose rows are the parent
   .catalog-title and the child .subitems .subitem a - neither of which any selector above
   reaches. The classes come from the same place as everywhere else: getCategories() runs
   markVehicle(), catalog_blocks.php copies ymm_class onto the block wrapper and onto each
   child row, and nothing here decides anything.

   ⚠ THE SELECTORS ARE ONE CLASS ABOVE THE RECORD'S OWN CUSTOM CSS, for exactly the reason
   the block above documents. That record carries the owner's five rules that made parent and
   child identical so these marks would have weight and colour to spend, and rule 1 of them is
   `.module-catalog_blocks-1147 .module-item .catalog-title {font-weight:400}` (0,3,0) and
   `… .module-item .subitem a {font-weight:400}` (0,3,1), shipped inline AFTER this file.
   Naming .module-catalog_blocks plus the mark class makes these (0,4,0) and (0,4,1), so the
   mark wins on specificity rather than on !important, and his rules keep doing their job on
   every unmarked row. The record id is deliberately NOT in these selectors - the marks are
   the shop's convention, not one record's.

   ⚠ HOVER IS NOT MENTIONED ON PURPOSE. The theme's hover rules for these two rows set colour
   and text-decoration only - no weight, no opacity - so a bold row stays bold and a dim row
   stays dim with the mouse on it, and the orange keeps coming from the theme. Adding :hover
   copies here would only restate what the cascade already does. */
.module-catalog_blocks .module-item .ymm-match .catalog-title,
.module-catalog_blocks .module-item .subitem.ymm-match a,
.module-catalog_blocks .module-item .ymm-plain .catalog-title,
.module-catalog_blocks .module-item .subitem.ymm-plain a {
  font-weight: 400;   /* 423 (the owner 10-15): „normaalne shrift tuleb tume aga mitte bold" */
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), calc(var(--j-color-scheme-foreground-primary-l) - 0%), calc(var(--j-color-scheme-foreground-primary-a) * 1));
}

.module-catalog_blocks .module-item .ymm-no-match .catalog-title,
.module-catalog_blocks .module-item .subitem.ymm-no-match a {
  opacity: .6;
}


/* THE GROUP BOUNDARY (owner, 2026-09-11): "tekst 'sobivus' oleks keskel, kahe divider vahel,
   ülemine divider paksem, alumine õhem". The row P118 puts above the first section of each
   group - Sobivad / Universaalsed / Sõidukist sõltumatud.

   It lives here rather than in product/category.twig's own inline block, beside the two marks
   and for the same reason: the template is rebuilt and an admin can edit around it, a repo
   stylesheet is neither. The border colour is the theme's own variable - the very one the
   sections' dividers use - so a recolour in admin carries it along and there is no new hex
   here, and no icon.

   ⚠ THE THIN LINE IS THE SECTION'S BOUNDARY. The label owns both rules, so the first block
   under it drops the divider it would otherwise draw itself, or the reader sees two lines a
   few pixels apart. That is what the third rule is for; it beats .category-block's own
   border on three classes to one and does not depend on which stylesheet loads first. */
.category-blocks .category-group-label {
  text-align: center;
  padding: .6em 0;
  margin-top: 28px;
  border-top: 2px solid hsla(var(--j-color-scheme-background-border-h), var(--j-color-scheme-background-border-s), var(--j-color-scheme-background-border-l), var(--j-color-scheme-background-border-a));
  border-bottom: 1px solid hsla(var(--j-color-scheme-background-border-h), var(--j-color-scheme-background-border-s), var(--j-color-scheme-background-border-l), var(--j-color-scheme-background-border-a));
  font-size: var(--j-font_size-font-size--title-menu);
  font-weight: 600;
  opacity: .7;
}

/* The first group opens the list, so it keeps the two lines but not the gap above them. */
.category-blocks .category-group-label:first-child {
  margin-top: 0;
}

.category-blocks .category-group-label + .category-block {
  margin-top: 6px;
  padding-top: 0;
  border-top: none;
}

/* THE ONE RESULTS LINE (349; the owner 2026-10-11: „ma soovin lisada rea … samasse plokki kus on juba Toodete võrdlus
   ja Sorteerimine"). product/category_results.twig, inside the sort bar's block (.products-filter, Journal's flex row
   with wrap): a full-width row under the compare / sort controls, in the label row's look - centred, the same size and
   weight, the same grey. The gap to the controls is T/4, T being the space above the controls today: the page title's
   bottom spacing, Journal's Title style `valueBottomSpacing` 1.25em of the title size (20px desktop, 18px phone - so
   T = 25px / 22.5px). That and the bar's bottom margin (`sortBarBox`, 32px) are Journal's own fields, left to the
   owner; this file sets only the line's own gap. */
.category-results-line {
  text-align: center;
  /* ⚠ 481/482: the opening menu's category-entry look - the size was already the menu's; 482's
     vocabulary makes the resting colour the ordinary DARK (foreground-primary), and only the
     selection-driven rules below dim anything. */
  font-size: var(--j-font_size-font-size--title-menu);
  font-weight: 400;
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), calc(var(--j-color-scheme-foreground-primary-l) - 0%), calc(var(--j-color-scheme-foreground-primary-a) * 1));
}

.products-filter > .category-results-line {
  flex: 0 0 100%;
  margin-top: calc(var(--j-font_size-font-size--title-module) * 1.25 / 4);
}

/* Without a sort bar (the category page's subsections, or the bar switched off) the line stands alone above the blocks. */
.main-products-wrapper > .category-results-line {
  margin-bottom: var(--j-gap-spacing-vertical-l);
}

/* The parts the line links to land below the sticky header - the same offset the sticky filter column uses above. */
.category-blocks .category-group-label,
.category-blocks .category-group-anchor {
  scroll-margin-top: var(--sticky-top-distance, 96px);
}
/* ===========================================================================
   THE HEADER'S VEHICLE ROW (owner, 2026-09-15): "Rida jaguneb 5 sektoriks."

   Five sectors on the desktop - Mark | Aasta | Mudel | CS slot | ☑ - and two columns on
   the phone, with the checkbox always in the right cell of the last row. The markup is
   extension/module/ymmfilter_row.twig; the behaviour is the module's own, unchanged.

   ⚠ NO HEX, NO FONT NAME, NO HAND-TYPED WIDTH IN HERE, and that is the point. Every colour
   is a scheme variable, every gap and size is one of the theme's own spacing/size
   variables, the field's border and radius come from the header record's own search style
   by carrying its .header-search class, and the row's background comes from the header
   record's own background setting by carrying .mid-bar. A recolour or a resize in admin
   therefore carries the row along, and nothing here has to be found and edited twice.

   ⚠ AND NO MEDIA QUERY. Desktop and phone are told apart by the theme's own
   .desktop-header-active / .mobile-header-active classes, which Journal sets from the
   header record's mobileHeaderAt setting (bound to the Laptop breakpoint, 1024, by P100).
   A width written here could drift from that setting; a class cannot.
   =========================================================================== */

/* ⚠ THE FIELD'S WHITE, RESOLVED AT THE ROOT - 2026-09-15, Cowork's 375px measurement.
   The field reads the scheme's background-primary, and on the phone the row sits inside
   .mobile-search-group, which carries color-scheme-scheme-3: the same variable resolves
   there to hsl(33.6 100% 95.1%), the header cream, so the field came out cream while the
   search box beside it stayed white (the base sheet paints a real <input> #fff !important,
   which is a paint the field cannot inherit).

   A custom property is substituted on the element that DECLARES it, so resolving it here,
   on :root, pins the page's own scheme - scheme-1, hsl(0 0% 100%) - and every descendant
   inherits that one colour whatever bar it sits in. Still a variable, so a re-scheme of the
   site carries the field along, and the desktop is unchanged because it was already reading
   the page's scheme. */
:root {
  --ymm-hr-field-bg: hsla(var(--j-color-scheme-background-primary-h), var(--j-color-scheme-background-primary-s), var(--j-color-scheme-background-primary-l), var(--j-color-scheme-background-primary-a));
  /* The open list's edge, resolved here for exactly the same reason as the white above: read
     inside .mobile-search-group it would be scheme-3's border, and the field and its list
     have to read as one object on both headers. */
  --ymm-hr-field-border: hsla(var(--j-color-scheme-background-border-h), var(--j-color-scheme-background-border-s), var(--j-color-scheme-background-border-l), var(--j-color-scheme-background-border-a));
  /* ⚠ AND THE RESET BUTTON'S OWN TWO COLOURS, for the third time and the same reason - the
     owner, 2026-09-15: "Mobiilis on nupu välimus teistsugune." It is the right button: the
     theme paints every .btn from `button-background` and `button-foreground`, and those are
     SCHEME variables, so inside the phone's search bar (scheme-3) the same button came out
     hsl(221.5 51% 20%) on hsl(33.6 100% 95%) instead of the desktop's hsl(225.2 42.3% 39.4%)
     on white. Captured here as numbers, handed back to the button below: no colour is written
     down, the style and the class are untouched, and an admin re-scheme carries both headers. */
  --ymm-hr-btn-bg-h: var(--j-color-scheme-button-background-h);
  --ymm-hr-btn-bg-s: var(--j-color-scheme-button-background-s);
  --ymm-hr-btn-bg-l: var(--j-color-scheme-button-background-l);
  --ymm-hr-btn-bg-a: var(--j-color-scheme-button-background-a);
  --ymm-hr-btn-fg-h: var(--j-color-scheme-button-foreground-h);
  --ymm-hr-btn-fg-s: var(--j-color-scheme-button-foreground-s);
  --ymm-hr-btn-fg-l: var(--j-color-scheme-button-foreground-l);
  --ymm-hr-btn-fg-a: var(--j-color-scheme-button-foreground-a);
}

/* One element, moved between the two headers by head.js's own wrappers list - the same
   mechanism #search, #cart and #logo use. The mobile wrapper is rendered empty on a
   desktop-served page purely as that move's target, so it must take no space until it has
   something in it. */
.mobile-header-top-wrapper:empty {
  display: none;
}

.mobile-header-active .mobile-search-group {
  flex-wrap: wrap;
}

.mobile-header-active .mobile-header-top-wrapper {
  flex: 0 0 100%;
}

.mobile-header-active .mobile-header-top-wrapper > .ymm-header-row {
  width: 100%;
}

/* THE ROW ITSELF. .mid-bar (carried in the markup) gives it the header record's background
   and the full-viewport-width ::before that paints it. */
.ymm-header-row {
  display: block;
  padding-top: var(--j-gap-spacing---2);
  padding-bottom: var(--j-gap-spacing---2);
  /* ⚠ 1.3 SINCE 2026-09-15, and it is the whole of this change - the owner: "Proovime 4/4 ja
     25 px kast … Otsing on peamine, YMM filter on selline abimaterjal, võib väiksem olla."
     It was the theme's body 1.7, which made a 30 px field. At 1.3 the label's line box is
     13 × 1.3 = 16.9px, the field is that plus a spacing step above and below = 24.9px, and
     the glyph box Cowork measured at 17.0px lands 4.0px from the top and 4.0px from the
     bottom. One constant, read by the cell, by the row's height and by the label's own
     line-height, so none of them can drift from the others. */
  --ymm-hr-line: 1.3;
  /* THE FIELD IS THE TEXT PLUS A LITTLE - the owner, 2026-09-15. One line box of the field's
     own font size, plus the smallest spacing step above and below. Not the header's bar
     height, which is what made the row as tall as the mid bar, and since the line constant
     above went to 1.3, not the search box's height either: 24.9px against its 40px, because
     the search is the main thing on this bar and the vehicle row is the help beside it. */
  --ymm-hr-cell: calc(var(--j-font_size-font-size-300) * var(--ymm-hr-line) + var(--j-gap-spacing---2) * 2);
  /* The row's own height, named once: the cell plus the padding above and below it. Read by
     the list cap below, so the two cannot drift apart. */
  --ymm-hr-row-height: calc(var(--ymm-hr-cell) + var(--j-gap-spacing---2) * 2);
  /* ⚠ THE LIST OPENS TO ITS FULL LENGTH - the owner, 2026-09-15: "Nimekirjad ei avane
     täispikkuses, nad peaksid avanema täis pikkuses." It used to be capped at five rows
     (130px), so a customer saw five of thirty-four makes.
     ⚠ THIS DOES NOT UNDO P93. His 2026-09-08 requirement was that the list scroll INSIDE ITS
     OWN BOX and never scroll the page, and it still does: the list is position:absolute, so
     the document's height does not change, and the cap is still there - it has simply stopped
     being a row count and become the space that is actually on the screen. A short list draws
     at its own height; a long one stops at the bottom of the viewport and scrolls inside
     itself.
     The subtraction is the sticky header's own parts, in the theme's own variables, so a
     resize in admin carries the cap along: the top bar, the mid bar, this row, and one
     spacing step left below the list. */
  --ymm-hr-list-max: calc(100vh - var(--desktop-top-bar, 0px) - var(--desktop-header, 0px) - var(--ymm-hr-row-height) - var(--j-gap-spacing---6));
}

/* ⚠ THREE CLASSES, DELIBERATELY. .header .mid-bar is what style.min.css sizes and lays the
   mid bar out with, and this file loads BEFORE it - so the height and the flex layout have
   to be beaten on specificity, not on order. These are the only part of that bar's look the
   row does not want: a bar of fields is as tall as its fields, and it can grow to a second
   line.

   ⚠ NO min-height SINCE 2026-09-15 (the owner: "kasti suurus ainult veidi suurem kui tekst …
   kogu header osa väiksemaks"). The row used to be forced to the mid bar's own 50px; now the
   field's height decides, and the row is that plus its padding.

   ⚠ AND !important ON THE HEIGHT SINCE 2026-09-16 - the owner: "Soovin, et päise ülariba
   peitumisel, päis ei suureneks." He read it as the top bar hiding; it was this row growing.
   Carrying .mid-bar for the header's background (P125) also puts the row inside
   `.desktop-header-active.header-sticky:not(.sticky-menu) header .mid-bar{height:
   var(--desktop-sticky)}`, so the moment head.js sets header-sticky the row was forced from
   its own 33px to the sticky bar's 50 - and the header went UP by 17 while the top bar went
   down by 20. Nothing else grew: both bars kept their own heights.

   WHY !important AND NOT MORE CLASSES. That rule is four classes and one type (0,4,1) against
   this one's three (0,3,0), and it carries no !important of its own - so this is specificity,
   not weight. But a tie does not help either: this file is delivered BEFORE style.min.css, so
   an equal selector still loses on order, and the only way to outweigh it without naming the
   sticky state would be to stack classes the element merely happens to also carry - which
   would break again the first time the theme adds another header state. !important says the
   thing that is actually true and says it once: THIS ROW IS AS TALL AS ITS OWN CONTENT, in
   every state - sticky, not sticky, and .sticky-menu too, which today sets no height on the
   mid bar at all. It is scoped to .ymm-header-row, so the mid bar beside it still takes
   --desktop-sticky and the top bar still hides exactly as the owner set them in admin.
   ⚠ The phone needs nothing: there `.header` never matches (the row sits in .mobile-header >
   .mobile-search-group, and <header> is a tag, not that class), so neither rule reaches it -
   checked, and no .mobile-sticky-* or .sticky-bar rule sets a height on it either. */
.header .mid-bar.ymm-header-row {
  display: block;
  height: auto !important;
}

.mobile-header-active .ymm-header-row {
  /* ⚠ THE PHONE TAKES THE DESKTOP'S PROPORTION - the owner, 2026-09-15: "Kui mobiilivaates on
     teised suhted, siis vii vastavusse." It used to size its cells from --mobile-search-bar
     (36px) and pad the row with --mobile-search-padding (8px), so the field and the label sat
     in a different relation to each other than on the desktop. --ymm-hr-cell is no longer
     overridden here, so the formula above serves both, and the row's padding is the same
     spacing step. The phone's own gap between cells stays the phone's, below. */
  padding-top: var(--j-gap-spacing---2);
  padding-bottom: var(--j-gap-spacing---2);
  /* The same rule against the phone's own header: its top bar, its logo bar, the search bar
     with its padding, this row, and one spacing step below. --sticky-top-distance is not
     declared on this side, which is why the parts are summed rather than that one variable
     read. */
  --ymm-hr-row-height: calc(var(--ymm-hr-cell) + var(--j-gap-spacing---2) * 2);
  --ymm-hr-list-max: calc(100vh - var(--mobile-top-bar, 0px) - var(--mobile-bar, 0px) - var(--mobile-search-bar, 0px) - var(--mobile-search-padding, 0px) * 2 - var(--ymm-hr-row-height) - var(--j-gap-spacing---6));
}

.ymm-header-row .ymm-hr-grid {
  align-items: stretch;
  /* ⚠ ONE GUTTER DOWN - the owner, 2026-09-15: "veergude kastid võivad olla teineteisele
     lähemal". It was the header's own gutter-4 (28px), the gap between the header's big
     blocks; gutter-3 is the next one down in the theme's own scale at 8px, which is the gap
     the header uses between things that belong together. The row reads as one control, and
     the 20px each join gives back is 100px of width the fields can use. */
  gap: var(--j-gap-spacing---2) var(--j-gap-spacing-gutter-3);
}

/* ⚠ THE DESKTOP ROW IS NO LONGER FIVE EQUAL FIFTHS - the owner, 2026-09-15: "aasta ei võta
   palju ruumi ja nimetused samuti. Siis ei pea seda kaherealiseks tegema kui lisandub
   veerge."
   Each field is as wide as its OWN longest value needs (the tracks below, measured from the
   database in all four languages), the checkbox is pushed to the right edge, and the free
   space sits between them - which is where a newly revealed field comes from, so the fields
   already on the row never move. A second line is the browser's decision now: flex-wrap
   takes one only when the content genuinely cannot fit, which at the shop's own widths means
   1025px, not 1400px. */
.desktop-header-active .ymm-header-row .ymm-hr-grid {
  display: flex;
  flex-wrap: wrap;
  /* Not stretch: a field is exactly one cell tall in every language, and the checkbox cell
     is as tall as its own label needs - the Russian one takes two lines - so the two are
     centred against each other rather than forced to one height. */
  align-items: center;
}

/* ⚠ A FIELD MAY GIVE WAY BEFORE THE ROW BREAKS - 2026-09-15. The tracks below are what a
   field WANTS: its longest value plus the clear space. At 1400px they all fit with room to
   spare and nothing shrinks. At 1025px the widest state wants about 96px more than the header
   has, and a row that breaks in two is worse than five fields each a few per cent narrower -
   so they are allowed to shrink, down to a floor of six characters plus the clear space, and
   the label ellipsises rather than the row wrapping. A wrap is left for what genuinely cannot
   fit, and the tail below is what makes that case land correctly. */
.desktop-header-active .ymm-header-row .ymm-hr-sector {
  flex: 0 1 auto;
  min-width: calc(6 * var(--ymm-hr-char) + var(--ymm-hr-chrome));
  height: var(--ymm-hr-cell);
}

/* One line means one cell height again - the fields' own. */
.desktop-header-active .ymm-header-row .ymm-hr-check {
  height: var(--ymm-hr-cell);
}

/* Variant B on the phone: two columns and a 25px cell, as P130 built it. ⚠ NOTHING IS
   COLUMN-PINNED ANY MORE - 2026-09-16. The checkbox used to be nailed to column 2 and the
   reset to column 1 so the pair landed together at the end; with the checkbox first and the
   reset last, plain auto-placement says the whole order by itself: the checkbox opens row 1,
   the fields follow two to a row, and the reset takes the next free cell after the last one.
   Its cell is therefore column 1 with an odd field count (3 fields -> row 3 left, 5 -> row 4
   left) and column 2 with an even one (4 fields -> row 3 right). */
.mobile-header-active .ymm-header-row .ymm-hr-grid {
  display: grid;
  grid-auto-rows: var(--ymm-hr-cell);
  grid-template-columns: repeat(2, 1fr);
  gap: var(--mobile-search-padding);
}

/* On the phone the cell is half the row, so a long label wraps rather than pushing the grid
   wider - and it wraps only when it cannot fit, with nothing clipping it. It needs no
   grid-column: being first in the markup puts it in row 1, column 1. */
.mobile-header-active .ymm-header-row .ymm-hr-check {
  white-space: normal;
  /* ⚠ MARK AND AASTA SIDE BY SIDE - 370, PLAAN 0.8 (the owner 10-12, two phone screenshots:
     „Mark …" on the right, „Aasta …" on the next line, half cut; P93 09-08: „lahtrid …
     üksteise kõrval"). Being first in the markup, the checkbox took row 1 column 1, so Mark
     sat beside it and Aasta started row 2. The phone now places it after the fields: Mark |
     Aasta is row 1, each a half of the row, the fields after them pair on as before, and the
     checkbox closes the grid. The desktop row (one flex line, the checkbox its first word)
     is untouched - this rule is the phone's only. */
  order: 1;
}

/* ⚠ THE TRACKS, MEASURED FROM THE DATABASE IN ALL FOUR LANGUAGES - 2026-09-15. Each number
   is a character count, not a width: the longest thing that field can ever show, whichever
   is longer of its own label and its longest option. `ch` is the font's own digit width, so
   the track follows the type size rather than a pixel guess, and --ymm-hr-chrome is the box
   around the text - the two paddings, the gap before the caret and the caret itself at 1em.

       make             13   Mercedes-Benz                                (label: 10, fi)
       year              9   "Aasta ..."                                  (values are 4)
       model            29   Transporter Chassi Double Cab                (label: 10, ru)
       roof             43   Sisäänrakennetut taittuvat poikittaistangot  (fi; et is 39)
       doors             8   the label, fi/ru                             (values are 3)
       vansize length   14   "Kaubiku pikkus"                             (values are 8)
       vansize height   14   "Kaubiku kõrgus"                             (values are 2)
       engine           10   2,5 hybrid                                   (label: 9, ru)

   ⚠ THE CAP IS THE 30%, and it is what stops one freak value eating the row: nothing is
   capped at 1400px (the widest track, roof, is 320px against 365px), and at 1025px the roof
   gives way first. A track never changes with what is revealed - only with the window - so
   the fields already on the row cannot move when the next one appears. */
.desktop-header-active .ymm-header-row {
  --ymm-hr-chrome: calc(var(--j-gap-spacing---5) * 2 + var(--j-gap-spacing---2) + 1em);
  /* ⚠ A CHARACTER, NOT A DIGIT - 2026-09-15, and this is what was inflating every field.
     The tracks were written in `ch`, which is the advance of "0", and in this face at this
     size that is about 8.5px - while the text these fields actually show runs 6.0 to 6.9px a
     character (Cowork, 1400px: "Mercedes-Benz" 90px over 13, "Transporter Chassi Double Cab"
     183 over 29, "Kinnituspunktid" 90 over 15). Every track was therefore a quarter to a
     third too wide, which is what pushed the full row onto a second line. 0.5em is the
     measured average and the classic figure for a humanist sans; it is named once here so
     every track reads the same measure. */
  --ymm-hr-char: 0.5em;
}

.desktop-header-active .ymm-header-row .ymm-hr-sector {
  width: min(calc(14 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

.desktop-header-active .ymm-header-row .ymm-hr-ymm_make {
  width: min(calc(13 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

.desktop-header-active .ymm-header-row .ymm-hr-ymm_year {
  width: min(calc(9 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

.desktop-header-active .ymm-header-row .ymm-hr-ymm_model {
  width: min(calc(29 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

/* ⚠ THE ONE TRACK THAT IS CAPPED RATHER THAN MEASURED. Roof names run to 43 characters in
   Finnish and 39 in Estonian, and a track that long pushes the six-cell row past the shop's
   own 1216px content width. 32 is what the budget allows beside the other four and the
   checkbox; because `ch` is the digit advance and digits are wider than lowercase letters, a
   32ch track still holds roughly 35-38 characters of real text, so only the two longest
   names are shown cut - and the full text is in the open list, one click away.
   30 is what the budget allows: at the font's own digit width, measured at 7.5px from
   Cowork's "2026 -> 30px", the six cells and their gaps come to 1198px against the shop's
   1216px content width. */
.desktop-header-active .ymm-header-row .ymm-hr-ymm_roof {
  width: min(calc(30 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

.desktop-header-active .ymm-header-row .ymm-hr-ymm_doors {
  width: min(calc(8 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

.desktop-header-active .ymm-header-row .ymm-hr-ymm_engine {
  width: min(calc(10 * var(--ymm-hr-char) + var(--ymm-hr-chrome)), 30%);
}

/* The checkbox cell is not a field: no caret, no padding of its own, and its label may take
   two lines at the smaller type (P124), so it is sized for half of the longest label - the
   Russian one, 32 characters - plus the box itself and the gap beside it. */
/* Its width is the box plus the gap plus its own label on ONE line - taken from the content
   rather than from a character count, so each language gets exactly what it needs and the
   Russian string, the longest of the four at 32 characters, is not cut either. */
.desktop-header-active .ymm-header-row .ymm-hr-check {
  width: auto;
  white-space: nowrap;
  /* ⚠ IT DOES NOT GIVE WAY - 2026-09-16. Inside .ymm-hr-tail this was already true, because
     the wrapper itself was flex:0 0 auto; standing in the row's own flex line it has to say
     so, or the sector rule's flex:0 1 auto would shrink the label at 1025px. Its label is
     already at its smallest, and it is the row's first word. */
  flex: 0 0 auto;
}

/* ⚠ THE RESET WEARS THE FILTER MODULE'S OWN BUTTON, and nothing here repaints it. Its look
   comes from Filter module 36's `resetButtonStyle` = the Journal button style **SMALL**, its
   icon from that module's `resetIcon` (cancel, e5c9) and its word from its `resetText` - all
   emitted as the generic `.reset-filter.btn` rules the markup's own class picks up. Edit that
   button in admin and this one changes with it.

   ⚠ ONLY THE PROPORTIONS ARE THE ROW'S - the owner: "Vaid proportsioonid peavad õiged olema."
   A pill built for a 40px sidebar arrives with .7em/.8em padding, which is a 29px button; the
   height here is the row's own cell and the padding is one spacing step, so it matches the
   fields beside it. The module's typography rules carry !important and are deliberately left
   alone: the size of the type is the owner's to set on that button. */
.ymm-header-row .ymm-hr-reset {
  display: flex;
  align-items: center;
  /* The page's own scheme, put back for the button that stands here - see the :root block.
     The theme's .btn rules resolve these on the button itself, so re-declaring them on the
     cell is enough and nothing about the button's own rules changes. */
  --j-color-scheme-button-background-h: var(--ymm-hr-btn-bg-h);
  --j-color-scheme-button-background-s: var(--ymm-hr-btn-bg-s);
  --j-color-scheme-button-background-l: var(--ymm-hr-btn-bg-l);
  --j-color-scheme-button-background-a: var(--ymm-hr-btn-bg-a);
  --j-color-scheme-button-foreground-h: var(--ymm-hr-btn-fg-h);
  --j-color-scheme-button-foreground-s: var(--ymm-hr-btn-fg-s);
  --j-color-scheme-button-foreground-l: var(--ymm-hr-btn-fg-l);
  --j-color-scheme-button-foreground-a: var(--ymm-hr-btn-fg-a);
}

.ymm-header-row .ymm-hr-reset .reset-filter {
  height: var(--ymm-hr-cell);
  display: inline-flex;
  align-items: center;
  padding-top: 0;
  padding-bottom: 0;
  padding-left: var(--j-gap-spacing---4);
  padding-right: var(--j-gap-spacing---4);
  /* ⚠ THE TYPE IS SAID HERE, BECAUSE THE BUTTON'S OWN STYLESHEET IS NOT ALWAYS IN THE PAGE
     - the owner, 2026-09-16: "võrreldes ülejäänud päisega, proportsioonist väljas."

     WHAT WAS HAPPENING. The Filter module's compiled CSS - the thing that paints this button,
     `.reset-filter.btn{font-size:var(--j-font_size-font-size-200)!important}` among it - is
     inlined by the row's template, and only when a vehicle is already chosen AT PAGE LOAD
     (`{% if ymm_selected and ymm_filter_module_css %}`). Load a page with no vehicle, then
     pick a make in the row, and the button appears through ymmRefreshWidget(), which swaps
     `.ymmfilter-widget` ELEMENTS - the <style> is the row's preceding sibling, so it never
     comes with them. The button then meets only the theme's own `.btn{font-size:
     var(--j-font_size-font-size-500)!important}`, the page's 15px, and its label and its ✕
     came out larger than every label around them. Loaded with a vehicle it was 12px all
     along, which is why P133 measured 12 and Cowork measured 15 on the same button.

     ⚠ WHY 200 AND NOT 300. Step 200 is the step the button's own style already uses, and it
     is the step the row's OTHER secondary control - the checkbox's label - is set in, so the
     two agree and the row gains no new size. The fields' 300 is for the things a customer
     reads and clicks through; the reset is the smaller word beside them, exactly as it is in
     the sidebar. The ✕ needs nothing of its own: `.btn::before` declares no size, so it is
     1em of whatever this line says.

     ⚠ !important IS THE ONLY THING THAT BEATS !important. `.btn`'s own rule carries it, so a
     plain declaration here - at three classes against its one - would still lose. The cost is
     stated rather than hidden: the SIZE of this button is the row's from here on, and a
     change to the Filter reset button's font size in admin no longer reaches it. Its word,
     its icon, its colours, its border and its radius still do, and the sidebar's own reset is
     untouched in every respect.

     Weight needs no line: `.btn` and the module's own rule both say 400 !important, so it
     never inherited and nothing here has to defend it. */
  font-size: var(--j-font_size-font-size-200) !important;
}

/* ⚠ THE RESET IS THE LAST ITEM, AND IT CARRIES THE FREE SPACE - 2026-09-16. P135 had wrapped
   it together with the checkbox in .ymm-hr-tail, because a row that wrapped used to leave the
   checkbox behind on the next line. With the checkbox moved to the FRONT of the row there is
   only one thing at the end, so the wrapper is gone and the auto margin sits on the reset
   itself: all the free space collapses in front of it, it stays at the right edge of
   whichever line it lands on, and the fields already on the row never move when a new one
   appears between them and it.
   ⚠ AND IT DOES NOT GIVE WAY EITHER: the sector rule's flex:0 1 auto would shrink the word
   at 1025px, where the fields are the ones meant to give. */
.desktop-header-active .ymm-header-row .ymm-hr-reset {
  width: auto;
  margin-inline-start: auto;
  flex: 0 0 auto;
}

/* On the phone it is simply the cell after the last field - auto-placement, no column pinned
   (see the grid rule above). The button keeps the left of its own cell, as it always has. */
.mobile-header-active .ymm-header-row .ymm-hr-reset {
  justify-content: flex-start;
}

/* ⚠ 428 „OTSI" - the button that applies the vehicle (the owner, 10-15: the picks only narrow the lists).
   The reset's look is the precedent: the same cell scheme re-declaration, the same height, paddings and
   type step on the button; the theme's own .btn paints the dark pill from these variables. It travels with
   the fields (it is the sector after the question being asked) and neither shrinks nor takes the free
   space - the reset keeps that. */
.ymm-header-row .ymm-hr-otsi {
  display: flex;
  align-items: center;
  --j-color-scheme-button-background-h: var(--ymm-hr-btn-bg-h);
  --j-color-scheme-button-background-s: var(--ymm-hr-btn-bg-s);
  --j-color-scheme-button-background-l: var(--ymm-hr-btn-bg-l);
  --j-color-scheme-button-background-a: var(--ymm-hr-btn-bg-a);
  --j-color-scheme-button-foreground-h: var(--ymm-hr-btn-fg-h);
  --j-color-scheme-button-foreground-s: var(--ymm-hr-btn-fg-s);
  --j-color-scheme-button-foreground-l: var(--ymm-hr-btn-fg-l);
  --j-color-scheme-button-foreground-a: var(--ymm-hr-btn-fg-a);
}

.ymm-header-row .ymm-hr-otsi .ymm-otsi-btn {
  height: var(--ymm-hr-cell);
  display: inline-flex;
  align-items: center;
  padding-top: 0;
  padding-bottom: 0;
  padding-left: var(--j-gap-spacing---4);
  padding-right: var(--j-gap-spacing---4);
  /* the reset's own step - see its block above for why the !important and why 200 */
  font-size: var(--j-font_size-font-size-200) !important;
}

.desktop-header-active .ymm-header-row .ymm-hr-otsi {
  width: auto;
  flex: 0 0 auto;
}

/* The phone (the owner, agreed 8): full-width UNDER the fields, not floating. The cell spans both grid
   columns; auto-placement keeps it under the fields because the markup puts it right after them (and so
   before the CS fields, as on the desktop). */
.mobile-header-active .ymm-header-row .ymm-hr-otsi {
  grid-column: 1 / -1;
}

.mobile-header-active .ymm-header-row .ymm-hr-otsi .ymm-otsi-btn {
  width: 100%;
  justify-content: center;
}

/* A SECTOR THAT HOLDS A FIELD. .header-search, carried by the field itself, is the header
   record's own search-box style - border, radius, shadow - so the fields cannot look like
   anything but the search box beside them. The empty CS slot and the checkbox cell
   deliberately do not carry it. */
.ymm-header-row .ymm-hr-sector {
  position: relative;
  min-width: 0;
}

.ymm-header-row .ymm-hr-field {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--j-gap-spacing---2);
  width: 100%;
  height: 100%;
  font-size: var(--j-font_size-font-size-300);
  line-height: var(--ymm-hr-line);
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), var(--j-color-scheme-foreground-primary-l), var(--j-color-scheme-foreground-primary-a));
  /* ⚠ THE SAME WHITE AS THE SEARCH BOX, and the same on both headers - see the :root
     declaration at the top of this block for why it is resolved there and not here.
     The owner, 2026-09-15: "Aktiivne kast ja otsing seest sama värvi nagu arvuti vaates." */
  background-color: var(--ymm-hr-field-bg);
  white-space: nowrap;
  overflow: hidden;
  text-decoration: none;
}

.ymm-header-row .ymm-hr-field .links-text {
  overflow: hidden;
  text-overflow: ellipsis;
  /* ⚠ THE TEXT CANNOT RUN UNDER THE CARET - the owner, 2026-09-15: "tekst kastis sees ei
     läheks liiga serva vastu". A flex item's automatic minimum size is its content, so a
     label longer than its track would rather push the caret out of the box than shrink; with
     0 it shrinks and ellipsises instead, which is what leaves the caret its own space and the
     right-hand clearance equal to the left. */
  min-width: 0;
  /* ⚠ CENTRED, BY TAKING THE CAUSE AWAY - the owner, 2026-09-15: "Silt peab olema keskel
     4 px ülal ja 4 all".
     The theme's base sheet carries ".header-search>span{height:100%}", and the field wears
     .header-search, so this label was a full-height box with its text sitting at the top of
     its own line box - 4.5px above the glyph and 8.6px below it in a 30px field. One
     declaration undoes it: the label becomes as tall as its line box, and the field's own
     align-items:center then centres it. 13px x 1.7 = 22.1px inside 30.1px leaves exactly 4px
     above and 4px below, which is the figure he asked for, and 7px each on the phone's 36px
     field.
     Specificity alone is enough here - that base rule carries no !important on height - and
     P127's one-pixel nudge is gone with it, because a centred label needs no nudge. */
  height: auto;
}

/* ⚠ THE INNER PADDING NEEDS THE THIRD CLASS, and this is the P113 cascade again. The
   header record's own search style emits ".desktop-header-active .header-search{padding:0}"
   (and the same on the phone) against the very element this row's field is - two classes,
   inlined AFTER this file - so the field's own two-class rule lost and the label sat 1px
   from the border, against the search box's 13px (Cowork, 1400px). Naming .header-search
   here puts the rule one class above the record's, which is a fact of the markup rather
   than an !important. The value is the search input's own padding, as a variable.
   The caret sits inside the right padding - the field is a flex row with space-between. */
.ymm-header-row .ymm-hr-field.header-search {
  padding-left: var(--j-gap-spacing---5);
  padding-right: var(--j-gap-spacing---5);
}

/* ⚠ HALF THE PHONE'S CORNER - the owner, 2026-09-15: "Mobiili vaates nurkade raadius poole
   väiksemaks." The mobile search style is a pill: border-radius 99px, which on a box this
   tall can only draw as half its height. Half of that drawn corner is a quarter of the
   height, so the box's own height variable states it exactly - and it keeps following the
   height rather than becoming a number that has to be re-chosen when the row resizes. The
   desktop keeps the record's own 4px. */
.mobile-header-active .ymm-header-row .ymm-hr-field.header-search {
  border-radius: calc(var(--ymm-hr-cell) / 4);
}

/* ⚠ THE CARET IS EXACTLY ONE em WIDE, which is what --ymm-hr-chrome reserves for it, so the
   clear space works out the same on both sides of a full-length value: the text starts one
   left padding in from the border, and the caret ends one right padding in from it, with the
   flex gap between them keeping the two apart. An icon font's own advance width varies with
   the glyph; naming the box makes the arithmetic true rather than approximately true. */
.ymm-header-row .ymm-hr-field .fa-caret-down {
  flex: 0 0 auto;
  width: 1em;
  text-align: center;
}

/* Aasta/Mudel before the key above them is chosen - the same dimming the accordion's own
   inert heading uses, and the same reason: the question is visible, it just cannot be
   answered yet. It keeps the ROW's background rather than the search box's white: white is
   what says "this one can be used". */
.ymm-header-row .ymm-hr-field.is-disabled {
  background-color: transparent;
  opacity: .5;
  cursor: default;
}

/* THE LIST OPENS UNDER ITS OWN FIELD AND SCROLLS INSIDE ITSELF - the third of P93's four
   rejections, inverted. Absolute, so opening it does not change the document's height and
   nothing below the header moves. */
.ymm-header-row .ymm-hr-list {
  position: absolute;
  top: 100%;
  inset-inline-start: 0;
  width: 100%;
  z-index: 5;
  margin-top: var(--j-gap-spacing---1);
  /* ⚠ THE SAME TWO COLOURS AS THE FIELD, and resolved in the same place - the owner,
     2026-09-15: "Mobiilis on rippmenüüd valet värvi jäänud. Teeme aktiivsed kastid ja
     rippmenüüd arvutiga ühte värvi." Read here they would be scheme-3's inside the phone's
     search bar, which is what left the list cream while the desktop's was white. */
  background-color: var(--ymm-hr-field-bg);
  border: 1px solid var(--ymm-hr-field-border);
  /* The radius the header record gave the field, published by its own .header-search rule
     and inherited here from the sector that carries it. */
  border-radius: var(--element-border-radius);
}

.ymm-header-row .ymm-hr-list .panel-body {
  max-height: var(--ymm-hr-list-max);
  overflow-y: auto;
  padding: var(--j-gap-spacing---4);
  font-size: var(--j-font_size-font-size-300);
  /* ⚠ HALF THE SPACE ABOVE "Otsi ..." - the owner, 2026-09-15. It was two parts and Cowork
     measured both: the theme's own global .panel-body{margin-top:var(--j-gap-spacing---5)
     !important} = 12px, plus this box's own 8px padding = 20px. Each half is the SAME
     variable divided by two, so the total is exactly halved to 10px and nothing here is a
     typed number. The !important is not decoration: the theme's rule carries one, and an
     important declaration cannot be beaten by specificity alone. The list's other three
     sides keep the padding set above. */
  padding-top: calc(var(--j-gap-spacing---4) / 2);
  margin-top: calc(var(--j-gap-spacing---5) / 2) !important;
}

/* ⚠ ONE OPTION PER LINE - the owner, 2026-09-15: "Otsingu nimekirjas ei ole nimetused
   üksteise all." The sidebar's own labels are laid out by the Filter module's generated
   per-instance stylesheet, which this row never receives (the standing fact of this file),
   so without a rule here the labels ran inline like words in a sentence. Block, so each
   option owns its line exactly as it does in the sidebar. */
.ymm-header-row .ymm-hr-list .filter-checkbox label,
.ymm-header-row .ymm-hr-list .filter-radio label {
  display: block;
}

/* THE CHECKBOX CELL. Its height is the grid row's, so it is the fields' height in every
   language; a label that does not fit one line wraps to two at a smaller size inside that
   same height rather than making the row taller. */
/* ⚠ THE BOX MUST BE INSIDE THE CELL - fixed 2026-09-15. The cell was given a width counted
   from the LABEL alone, while it holds the checkbox and the gap beside it too; with
   justify-content:flex-end the extra content overflowed to the LEFT, so the box sat outside
   the cell - and overflow:hidden then cut it off. The owner saw the square gone and a sliver
   of blue. The cell is sized by its content now, and nothing here clips.
   ⚠ flex-start SINCE 2026-09-16: the cell opens the row instead of closing it, so the box is
   against the row's left edge and the label runs away from it. On the desktop the cell is its
   own content wide and this only names the direction; on the phone, where the cell is half
   the row, it is what puts the box at the start of that half. */
.ymm-header-row .ymm-hr-check {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}

.ymm-header-row .ymm-hr-check label {
  display: flex;
  align-items: center;
  gap: var(--j-gap-spacing---2);
  margin: 0;
  cursor: pointer;
}

.ymm-header-row .ymm-hr-check .links-text {
  font-size: var(--j-font_size-font-size-200);
  line-height: 1.15;
  color: hsla(var(--j-color-scheme-foreground-primary-h), var(--j-color-scheme-foreground-primary-s), var(--j-color-scheme-foreground-primary-l), var(--j-color-scheme-foreground-primary-a));
}

/* ⚠ THE CATALOG TREE IS NOT A CAROUSEL, SO IT GETS NO EDGE FADERS (owner, 2026-09-17):
   "Liigub kõrvale, seda ma ei taha." The sidebar column had 481px of horizontal scroll room
   (clientWidth 200, scrollWidth 681) with nothing inside it wider than 193px - because the two
   things making the width are PSEUDO-ELEMENTS, which no querySelectorAll walk can see. That is
   why two earlier searches came back empty.

   WHAT SIZES THEM, read from the theme's own stylesheet (stylesheet/style.min.css, minified onto
   one line; byte offsets given because line numbers say nothing there):
     offset 24552  .auto-grid-items::before,.auto-grid-items::after
                   { content:""; position:absolute; display:none; --fader-status:1; height:calc(...) }
     offset 25003  .auto-grid-items::before { left:0;  width:min(var(--fader-width-left, 120px), 40%); … }
     offset 25193  .auto-grid-items::after  { right:0; width:min(var(--fader-width-right,120px), 40%); … }
   They are Journal's CAROUSEL EDGE FADERS - the gradient that fades a scrolling row's two ends
   into the background so the row looks like it continues. The theme ties them to scrollability
   itself: offset 25468 .no-scroll>.auto-grid-items::before/::after{--fader-status:0!important;
   display:none!important}, and 25597/25667 drop one end when that end has nothing left to scroll.

   ⚠ WHY THE RECORD CANNOT FIX IT, and why no record-level fix is proposed. The owner tried
   `content: none` from record 1147's Custom CSS twice and the computed width stayed
   min(120px, 40%) - but `content` is not what gives them their box, `display` is; and
   getComputedStyle(el, '::after').width reports the specified width even for a display:none
   pseudo, so that reading could never confirm or deny his rule. He then removed ALL of his
   record CSS and the column still measured 200 / 681, which settles it: the faders come with the
   module, not with his rules.

   WHY THIS RULE LIVES IN A FILE AND NOT IN A SETTING. The setting exists and is ALREADY OFF:
   catalog_blocks' own FaderStatus defaults to "off" (data/settings/module/catalog_blocks/
   general.json) and record 1147 stores "off", which is why the module emits
   `.module-catalog_blocks-1147 .block-content>.catalog-blocks.auto-grid>.auto-grid-items:before
   {--fader-status:0;display:none}`. There is no click left for the owner to make. But a module's
   generated CSS ships INSIDE its cached HTML blob, so a stale cache entry keeps serving whatever
   that blob said; this file is versioned (?v=mtime) and reaches the browser either way.

   THE SCOPE IS PROVEN SAFE, not assumed: across all 445 module records, 175 carry a Fader setting
   and 68 have one that is not "off" - blog_posts, catalog menus, categories (1145 and 825 among
   them), gallery, info_blocks, manufacturers, products, side_products, testimonials. NOT ONE of
   them is a catalog_blocks record; every catalog_blocks record is "off". So naming
   .module-catalog_blocks here cannot reach a single carousel that wants its faders.

   !important is deliberate: a module's own rules are emitted inline AFTER this file, so ordinary
   specificity would lose to any future record that turns a fader back on by accident. */
.module-catalog_blocks .auto-grid-items::before,
.module-catalog_blocks .auto-grid-items::after {
  display: none !important;
}

/* ⚠ A FULL-BLEED BACKGROUND HELPER, CONTAINED — NOT DELETED (owner, 2026-09-17):
   "Liigub kõrvale, seda ma ei taha." Measured in his browser at 1168px, on the sidebar's
   .module-item.module-item-1.block-item::after:
       content:"" · display:block · position:absolute · background: transparent
       left: 96.5px  (= 50% of the module's 193px)      width: 1168px (= 100vw)
       transform: translateX(-584px)                    (= -50%)
       inset: 0px -1071.5px 0px 96.5px
   Left edge -487.5, right edge 680.5 -> the column's scroll area is 681 against a clientWidth
   of 200. THE ARITHMETIC CLOSES EXACTLY, which is what makes this the cause and the faders not.
   It is the shape Journal uses to let a block's background bleed to the window edges - right in a
   full-width row, nonsense in a 200px column, and here it paints nothing at all (transparent).

   ⚠ WHY IT IS CONSTRAINED AND NOT SWITCHED OFF: a catalog_blocks record that sets a block
   background must keep it, just inside its own box. width/left/transform are reset; nothing is
   hidden.

   THE SCOPE IS PROVEN, not assumed. Across the four catalog_blocks records (615, 681, 682, 1147)
   all four set itemBackground - but NO catalog_blocks setting targets .module-item::after at all:
   itemBackground paints `.block-body > .block-wrapper`, its overlay paints that element's own
   ::before, and the item-level image helpers paint `.block-item.module-item-N .block-body::after`.
   The only ::after under `.module-item` that any setting touches is `.subitem::after`, the
   incremental counter. So this rule cannot remove a single configurable background.
   It is scoped tighter still, to the two places the owner actually has the problem - the side
   column and the off-canvas panel (Koostur 821) - so the demo records 615/681/682 on full-width
   layouts are not reached at all. ⚠ 682 is live on information page 9; it is deliberately outside
   this selector.

   ⚠ AND SAID PLAINLY: this rule is NOT in anything this server serves. The theme stylesheet, every
   <style> block on the served page, the record's own Custom CSS, catalog_blocks' settings
   definitions and Journal's global settings were all searched for
   `left:50% / width:100vw / translateX(-50%)` on that pseudo, and none of them carries it - the
   literal `block-item::after` does not appear in the served page even once. The rule below is
   therefore a CONTAINMENT that is correct wherever the box comes from, not a counter to a rule
   whose source is known. See the report for what that disagreement probably means.

   ⚠ AND THAT IS EXACTLY WHY THESE FOUR CARRY !important, in a file that otherwise avoids it:
   there is no selector to out-specify. The declarations above this one are beaten by naming one
   more class; a box whose source is in nothing the server serves cannot be, because the cascade
   that has to be won is not visible from here. Measured, not assumed: without !important the
   owner's 1168px browser read #column-left 200 / 670 - 11px off the 681, so the plain rule does
   apply and still loses the box; with !important on all four it read 200 / 200.

   ⚠ DO NOT VERIFY THIS WITH getComputedStyle(el, '::after').width - it keeps reporting 1168px
   either way, because it returns the SPECIFIED width and not the used box. The honest measure is
   the column's own scrollWidth against its clientWidth. */
.side-column .module-catalog_blocks .module-item::after,
[class*="grid-module-grid-821-"] .module-catalog_blocks .module-item::after {
  width: 100% !important;
  left: 0 !important;
  right: auto !important;
  transform: none !important;
}

/* 465 (§6.11) - THE TIER COUNT ROW; ⚠ 482 (the owner's two-state vocabulary): the row inherits the
   ordinary DARK from .category-results-line above. A row WITH an own segment (.ymm-tier-here present -
   the template marks the opposite case ymm-tier-top) dims every OTHER segment to the 60% „tuhm";
   the top line has no own segment, so all its segments stay normal dark. Hover stays 481's - the
   menu's text-link colour (the 1147 module's .subitem:hover a). */
.ymm-tier-row .ymm-tier-link {
  color: inherit;
  opacity: .6;
}
.ymm-tier-row.ymm-tier-top .ymm-tier-link {
  opacity: 1;
}
.ymm-tier-row .ymm-tier-link:hover {
  color: hsla(var(--j-color-scheme-text-link-h), var(--j-color-scheme-text-link-s), calc(var(--j-color-scheme-text-link-l) - 0%), calc(var(--j-color-scheme-text-link-a) * 1));
  opacity: 1;
}
.ymm-tier-head {
  margin: 25px 0 10px;
}
.ymm-tier-head:first-child {
  margin-top: 0;
}

/* the honest make-tier mark - „tootjakood: FORD" - on the card and the product page */
.jmi-oem-make {
  opacity: .6;
  font-size: 0.9em;
}

/* ===========================================================================
   485 (the owner, 10-18): THE MENU'S PARENT CATEGORIES AS AN ACCORDION OF PILL
   BUTTONS - „menüü avades on näha vaid vanemkategooriad … Vanemkategooriate
   nupud/lingid vormistame sellise nupuna, nagu on 'Vaata kõiki tooteid' nupp".
   Scoped to the off-canvas menu's tree only (.module-grid-821 holds the panel;
   the same module in a side column renders as before). The sublists' inner
   markup and the P157 signals inside are untouched - only the parent row's
   look and the open/close state live here.

   THE PILL IS COPIED, NOT INVENTED. ⚠ 486: the owner named the precedent more
   exactly - the home slide's OWN RENDERED „Vaata kõiki tooteid" button (the
   orange, fully rounded one), values read and listed at the rule below. 485 B's
   first copy (the module's shared dark base) stays on record as the variant -
   commit 614e046f. !important where the 1147 module's own generated CSS
   (shipped after this file) sets the same property on .catalog-title. */
.module-grid-821 .module-catalog_blocks-1147 .auto-grid-items > div > .item-content > .item-assets {
  display: none;
}
.module-grid-821 .module-catalog_blocks-1147 .auto-grid-items > div > .item-content.ymm-cat-open > .item-assets {
  display: block;
}
.module-grid-821 .module-catalog_blocks-1147 .item-content > a.catalog-title {
  /* 487 (the owner compared both and chose: „Sinised nupud olid paremad”): the DARK variant restored
     exactly as 614e046f recorded it - the slider module's shared button rule (button-background/
     button-foreground tokens, radius 3px, padding .5em 1em, Hanken Grotesk 400 at size-500); the
     orange slide look (486) stays only on the bottom „Vaata kõiki tooteid” button below.
     489 (the owner, 10-18): „Kirjed siniste nupude sees joondame vasakusse serva" - the content
     inside the pill (the dot + the name) starts at the pill's left padding edge; nothing else moves. */
  display: inline-flex !important;
  align-items: center;
  justify-content: flex-start;
  font-family: 'Hanken Grotesk', sans-serif !important;
  font-weight: 400 !important;
  font-size: var(--j-font_size-font-size-500) !important;
  line-height: 1 !important;
  color: hsla(var(--j-color-scheme-button-foreground-h), var(--j-color-scheme-button-foreground-s), calc(var(--j-color-scheme-button-foreground-l) - 0%), calc(var(--j-color-scheme-button-foreground-a) * 1)) !important;
  background-color: hsla(var(--j-color-scheme-button-background-h), var(--j-color-scheme-button-background-s), calc(var(--j-color-scheme-button-background-l) - 0%), calc(var(--j-color-scheme-button-background-a) * 1));
  border: 1px solid rgba(0, 0, 0, 0);
  border-radius: 3px;
  padding: .5em 1em !important;
  margin: 2px 0;
}
.module-grid-821 .module-catalog_blocks-1147 .item-content > a.catalog-title:hover {
  color: hsla(var(--j-color-scheme-brand-primary-foreground-h), var(--j-color-scheme-brand-primary-foreground-s), calc(var(--j-color-scheme-brand-primary-foreground-l) - 0%), calc(var(--j-color-scheme-brand-primary-foreground-a) * 1)) !important;
  background-color: hsla(var(--j-color-scheme-brand-primary-h), var(--j-color-scheme-brand-primary-s), calc(var(--j-color-scheme-brand-primary-l) - -5%), calc(var(--j-color-scheme-brand-primary-a) * 1));
}
/* 486: the menu panel's bottom button - the same slide look; hidden anywhere else the module renders */
.ymm-menu-bottom { display: none; }
.module-grid-821 .ymm-menu-bottom {
  display: block;
  margin-top: 12px;
  /* 489 (the owner, 10-18): „Oranži nupu joondame rea keskele" - the inline-flex button centers
     in the panel's row; its own look and href stay. */
  text-align: center;
}
.module-grid-821 .ymm-menu-bottom .btn.ymm-view-all-products {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: 'Hanken Grotesk', sans-serif !important;
  font-weight: 400 !important;
  font-size: var(--j-font_size-font-size-600) !important;
  line-height: 1 !important;
  color: hsla(221.53846153846, 50.980392156863%, 20%, 1) !important;
  background-color: hsla(31.25, 90%, 68.627450980392%, 1);
  border: 1px solid rgba(0, 0, 0, 0);
  border-radius: 99px;
  padding: 1.1em 2em !important;
}
.module-grid-821 .ymm-menu-bottom .btn.ymm-view-all-products:hover {
  color: hsla(221.53846153846, 50.980392156863%, 20%, 1) !important;
  background-color: hsla(31.25, 90%, 73.627450980392%, 1);
}
/* P157 onto the button (the owner: „autole sobiv normaalne nupp / mittesobiv 60% tuhm nupp") -
   the fit mark sits on the item's wrapper div, exactly where the tree already carries it. */
.module-grid-821 .module-catalog_blocks-1147 .ymm-no-match > .item-content > a.catalog-title {
  opacity: .6;
}
