/* Card alignment on the shop grid.
   ==========================================================================
   The price and its button sit on the last row of each card, and the site's
   stylesheet already pins that row to the bottom with `margin-top: auto` so
   the rule and the price line up across a row of cards whatever length the
   title and description happen to be.

   That rule loses here. The row's class is `row`, which is also Bootstrap's
   grid class, and Bootstrap ships in Odoo's frontend bundle on every page —
   so `.sw-card .row` is competing with a framework rule the static site
   never had to share a page with. Measured on the rendered page, margin-top
   resolved to 0 on all three cards in a row, leaving one of them 72px of
   dead space under its button and the rules at three different heights.

   Two selectors, both stronger than what they answer: the card is given an
   explicit full height rather than relying on the grid stretching it, and
   the row reclaims its auto margin.

   The same collision is worth knowing about generally — any prototype markup
   using `row` as a plain class is sharing a name with Bootstrap here. */

body .sw-list > .sw-card {
  height: 100%;
}

body .sw-card > .row {
  margin-top: auto !important;
}

/* With the row pinned, the descriptions are what differ, and a card whose
   description runs to four lines pushes its neighbours' text apart. Two
   lines, then an ellipsis: enough to say what the thing is, and the same
   height on every card so the block reads as a grid rather than a ragged
   set of paragraphs. The full description is on the product page. */
body .sw-card > p {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  /* Two lines at this size and leading, so a one-line description holds the
     same space as a two-line one and the cards stay even. */
  min-height: calc(2 * 1.6 * 14.8px);
}

/* The shop's opening band.
   ==========================================================================
   Heading only. The paragraph that sat here was removed at the client's
   request, and with it the assurance column that had been added to balance
   the empty right-hand third — with no copy to balance, a lone column of
   claims floating beside a heading reads as an afterthought.

   Both are in the history if they are wanted back. */

.shop-intro h2 { margin: 0; }
