/* GP559 – Truncation is visual ONLY; no product data shortened.
 * Card descriptions remain naturally word-wrapped and unhyphenated.
 * Earlier GP549/GP554 force !important so override at the end. */
.gp-product-archive .gp-product-list .gp-product-loop-description{
  white-space:normal!important;
  word-break:normal!important;
  overflow-wrap:normal!important;
  word-wrap:normal!important;
  hyphens:none!important;
  -webkit-hyphens:none!important;
}
/* Exactly the four-column product layout: at most 3 lines, native ellipsis. */
.gp-product-archive .gp-product-list.is-grid-view[data-gp-columns="4"] .gp-product-loop-description{
  display:-webkit-box!important;
  -webkit-box-orient:vertical!important;
  -webkit-line-clamp:3!important;
  line-clamp:3!important;
  min-height:0!important;
  max-height:calc(3 * 1.48em)!important;
  height:auto!important;
  overflow:hidden!important;
  text-overflow:ellipsis;
}
/* 2, 3 columns and list: show the full stored text with no clamp. */
.gp-product-archive .gp-product-list.is-grid-view:is([data-gp-columns="2"],[data-gp-columns="3"]) .gp-product-loop-description,
.gp-product-archive .gp-product-list.is-list-view .gp-product-loop-description{
  display:block!important;
  -webkit-line-clamp:unset!important;
  line-clamp:unset!important;
  min-height:0!important;
  max-height:none!important;
  height:auto!important;
  overflow:visible!important;
}

/* GP559 word-safe progressive enhancement: native clamp stays as JS-off fallback.
 * Once complete-word teaser is calculated, show it without browser chopping. */
.gp-product-archive .gp-product-list.is-grid-view[data-gp-columns="4"] .gp-product-loop-description.gp-card-word-clamped{
  display:block!important;
  -webkit-line-clamp:unset!important;
  line-clamp:unset!important;
  max-height:none!important;
  height:auto!important;
  overflow:visible!important;
}
