/* Plugins overview table — Template Plugins Overview v2. Products: head (H2 32 + subline, baseline gap 18) with the
   filter pill right; rows min-height 76, columns 1fr / 124 / 64 / 104 / 72 / 60×n / 132 / 20, gap 14; header 11.5
   uppercase .68 with Sunshade group titles; whole row links to the plugin; "Coming soon" badge, note line, "?" for
   unconfirmed values; footer count + legend. Add-ons (76px below, same section): head space-between, rows 68 (not
   links, no hover), columns 1fr / 172 / 60×4 / 124, "Details ↓" pill; foot with catalog link + legend; then two quiet
   notes (radius 24, padding 28/30). */
/* Column widths (reference at 1440); tightened between 1024 and 1279px so the plugin column keeps its room. */
.bd-ptable { --pt-gap: 14px; --pt-type: 124px; --pt-lms: 64px; --pt-wp: 104px; --pt-tot: 72px; --pt-ver: 60px; --pt-rel: 132px; --pt-arr: 20px; --pt-addon-type: 172px; --pt-details: 124px; }
@media (max-width: 1279px) {
	.bd-ptable { --pt-gap: 10px; --pt-type: 100px; --pt-lms: 40px; --pt-wp: 92px; --pt-tot: 52px; --pt-ver: 46px; --pt-rel: 100px; --pt-arr: 14px; --pt-addon-type: 150px; --pt-details: 112px; }
	.bd-ptable__name-line { flex-wrap: wrap; row-gap: 4px; }
}
.bd-ptable__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; margin-bottom: 22px; }
.bd-ptable__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 18px; min-width: 0; }
.bd-ptable__title { margin: 0; font: 700 32px/1.15 var(--wp--preset--font-family--montserrat); letter-spacing: -.02em; color: var(--bd-haze); }
.bd-ptable__sub { margin: 0; font: 600 13.5px/1.4 var(--wp--preset--font-family--montserrat); color: var(--bd-meta); }
.bd-ptable__filters { display: flex; flex: none; margin-left: auto; border: 1px solid rgba(247,248,249,.24); border-radius: var(--bd-r-pill); padding: 3px; }
.bd-ptable__filters button { min-height: 44px; padding: 0 18px; border: 0; border-radius: var(--bd-r-pill); background: none; cursor: pointer; font: 600 13px/1.2 var(--wp--preset--font-family--montserrat); color: var(--bd-body); transition: background-color 180ms ease-out, color 180ms ease-out; }
.bd-ptable__filters button[aria-pressed="true"] { background: var(--bd-haze); color: var(--bd-ink); }
html:not(.js) .bd-ptable__filters { display: none; }

.bd-ptable__table { border-top: 1px solid rgba(247,248,249,.14); }
.bd-ptable__row { position: relative; display: grid; grid-template-columns: var(--bd-ptable-cols); column-gap: var(--pt-gap); align-items: center; padding: 16px 14px; margin: 0 -14px; min-height: 76px; box-sizing: border-box; border-bottom: 1px solid rgba(247,248,249,.12); color: var(--bd-haze); background: linear-gradient(90deg, rgba(163,0,190,0), rgba(163,0,190,0)); transition: background 220ms ease-out; }
.bd-ptable__row:not(.is-head):hover { background: linear-gradient(90deg, rgba(163,0,190,.22), rgba(245,52,119,.08) 60%, rgba(250,154,66,0)); }
.bd-ptable__row[hidden] { display: none; }
.bd-ptable__row.is-head { align-items: end; min-height: 0; padding: 16px 14px 12px; border-bottom-color: rgba(247,248,249,.14); font: 600 11.5px/1.3 var(--wp--preset--font-family--montserrat); letter-spacing: .07em; text-transform: uppercase; color: var(--bd-meta); }
.bd-ptable__group { display: grid; column-gap: var(--pt-gap); }
.bd-ptable__group-title { grid-column: 1 / -1; color: var(--bd-sun); padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px solid rgba(247,248,249,.14); }
.bd-ptable__plugin { min-width: 0; }
.bd-ptable__name-line { display: flex; align-items: center; gap: 10px; }
.bd-ptable__name { font: 700 16.5px/1.3 var(--wp--preset--font-family--montserrat); color: var(--bd-haze); }
.bd-ptable__name { overflow-wrap: anywhere; }
a.bd-ptable__name::after { content: ""; position: absolute; inset: 0; } /* product rows: the whole row is the link */
.bd-ptable__soon { flex: none; border: 1px dashed rgba(250,154,66,.8); color: var(--bd-sun); border-radius: var(--bd-r-sm); padding: 2px 7px; font: 700 10.5px/1.3 var(--wp--preset--font-family--montserrat); letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.bd-ptable__row:hover .bd-ptable__name { color: var(--bd-haze); }
.bd-ptable__shield { position: relative; flex: none; width: 70px; height: 16px; }
.bd-ptable__tagline { display: block; margin-top: 3px; font: 600 13px/1.45 var(--wp--preset--font-family--montserrat); color: var(--bd-body); }
.bd-ptable__note-line { display: block; margin-top: 4px; font: 600 12.5px/1.45 var(--wp--preset--font-family--montserrat); color: var(--bd-meta); }
.bd-ptable__unknown { font: 600 14px/1 var(--wp--preset--font-family--montserrat); color: var(--bd-disabled); }
.bd-ptable__types { display: flex; flex-direction: column; gap: 3px; font: 600 13px/1.35 var(--wp--preset--font-family--montserrat); color: var(--bd-body); }
.bd-ptable__mark { display: flex; align-items: center; color: var(--bd-haze); }
.bd-ptable__none { font: 600 15px/1 var(--wp--preset--font-family--montserrat); color: var(--bd-disabled); }
.bd-ptable__testing { display: inline-block; width: 12px; height: 12px; margin: 3px; box-sizing: border-box; border-radius: var(--bd-r-pill); border: 2px solid var(--bd-sun); }
.bd-wpbadge { display: inline-block; border: 1px solid rgba(247,248,249,.5); color: var(--bd-haze); border-radius: var(--bd-r-sm); padding: 2px 7px; font: 700 10.5px/1.3 var(--wp--preset--font-family--montserrat); letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.bd-wpbadge.is-edition { background: var(--bd-sun); border-color: var(--bd-sun); color: var(--bd-ink); padding: 3px 8px; }
.bd-ptable__version { display: block; font: 700 14px/1.3 var(--wp--preset--font-family--montserrat); font-variant-numeric: tabular-nums; }
.bd-ptable__date { display: block; margin-top: 2px; font: 600 12.5px/1.3 var(--wp--preset--font-family--montserrat); color: var(--bd-meta); }
.bd-ptable__release .bd-upcoming-chip { margin-top: 4px; padding: 2px 8px; font-size: 10.5px; }
.bd-ptable__arrow { font: 700 16px/1 var(--wp--preset--font-family--montserrat); color: var(--bd-sun); }
.bd-ptable__empty { display: flex; align-items: center; gap: 18px; padding: 24px 0; border-bottom: 1px solid rgba(247,248,249,.12); font: 600 15px/1.4 var(--wp--preset--font-family--montserrat); color: var(--bd-body); }
.bd-ptable__empty[hidden] { display: none; }
.bd-ptable__empty button { background: none; border: 0; padding: 0; min-height: 44px; cursor: pointer; font: 700 14px/1.2 var(--wp--preset--font-family--montserrat); color: var(--bd-sun); text-decoration: underline; text-underline-offset: 4px; }

.bd-ptable__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px 24px; flex-wrap: wrap; margin-top: 16px; font: 600 13px/1.4 var(--wp--preset--font-family--montserrat); color: var(--bd-meta); }
.bd-ptable__count { margin: 0; }
.bd-ptable__legend { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 22px; }
.bd-ptable__legend li { display: flex; align-items: center; gap: 7px; }
.bd-ptable__legend svg { color: var(--bd-haze); }
.bd-ptable__legend a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
/* Products followed by the add-ons: one section in the reference (add-ons 76px below the products foot). */
.bd-ptable.is-product:has(+ .bd-ptable.is-addon) { padding-bottom: 0; }
.bd-ptable.is-addon { padding-top: calc(76px * var(--bd-s)); }
.bd-ptable__addon-head .bd-ptable__sub { text-align: right; }
.bd-ptable__row.is-addon { min-height: 68px; padding: 14px; }
.bd-ptable__row.is-addon:hover { background: none; }
.bd-ptable__row.is-addon .bd-ptable__name { font-size: 15.5px; }
.bd-ptable__badge { flex: none; }
.bd-ptable__action { display: flex; justify-content: flex-end; }
.bd-ptable__details { display: inline-flex; align-items: center; gap: 4px; min-height: 40px; padding: 0 18px; box-sizing: border-box; border: 1.5px solid rgba(255,255,255,.4); border-radius: var(--bd-r-pill); font: 700 13px/1.2 var(--wp--preset--font-family--montserrat); color: var(--bd-haze); white-space: nowrap; transition: border-color 180ms ease-out; }
.bd-ptable__details:hover, .bd-ptable__details:focus-visible { border-color: var(--bd-sun); color: var(--bd-haze); }
.is-addon .bd-ptable__count { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 20px; }
.bd-ptable__catalog { font: 700 13px/1.4 var(--wp--preset--font-family--montserrat); color: var(--bd-sun); }
.bd-ptable__catalog:hover { color: var(--bd-haze); }
.bd-ptable__legend.is-addon { gap: 8px 18px; }
.bd-ptable__legend .bd-ptable__unknown { font-size: 14px; }

.bd-ptable__notes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 44px; }
.bd-ptable__note { display: flex; flex-direction: column; gap: 14px; padding: 28px 30px; }
.bd-ptable__note .bd-kicker { margin: 0; }
.bd-ptable__note-legend { display: grid; grid-template-columns: 104px 1fr; gap: 12px 16px; align-items: baseline; margin: 0; font: 600 14px/1.55 var(--wp--preset--font-family--montserrat); color: var(--bd-body); }
.bd-ptable__note-legend dt { justify-self: start; }
.bd-ptable__note-legend dd { margin: 0; }
.bd-ptable__note-body { margin: 0; font: 600 14px/1.55 var(--wp--preset--font-family--montserrat); color: var(--bd-body); }
.bd-ptable__note-link { align-self: flex-start; margin-top: auto; }

/* Card-only parts (render.php): hidden while the table shows. */
.bd-ptable__m { display: none; }

/* 900–1023: still the table (docs/responsive.md §5 Plugins Overview), columns tightened once more. */
@media (max-width: 1023px) {
	.bd-ptable { --pt-gap: 8px; --pt-type: 86px; --pt-lms: 34px; --pt-wp: 92px; --pt-tot: 46px; --pt-ver: 40px; --pt-rel: 82px; --pt-arr: 12px; --pt-addon-type: 120px; --pt-details: 104px; }
	.bd-ptable__row.is-head { font-size: 10.5px; letter-spacing: .05em; }
	.bd-ptable__title { font-size: 28px; }
	.bd-ptable__details { min-height: 44px; }
	.bd-ptable__notes { grid-template-columns: 1fr; }
}
/* Below 900 (docs/responsive.md §5 Plugins Overview): the table becomes a card list. Per plugin: name + type badge,
   tagline, meta line (version · Moodle · solutions), arrow; the whole card is the link. Add-ons the same, with the
   "Details ↓" pill. The platform filter turns into chips in one swipeable line. */
@media (max-width: 899px) {
	.bd-ptable__row.is-head { display: none; }
	.bd-ptable__table { display: flex; flex-direction: column; gap: 12px; border-top: 0; }
	.bd-ptable__table > [role="rowgroup"] { display: contents; }
	.bd-ptable__row, .bd-ptable__row.is-addon { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0; padding: 18px 20px; min-height: 0; border: 1px solid var(--bd-hairline); border-radius: var(--bd-r-card); background: var(--bd-card-bg); }
	.bd-ptable__row:not(.is-head):hover { background: var(--bd-card-bg); border-color: rgba(247,248,249,.34); }
	.bd-ptable__row[hidden] { display: none; }
	.bd-ptable__row > [role="cell"]:not(.bd-ptable__plugin):not(.bd-ptable__action) { display: none; }
	.bd-ptable__plugin { flex: 1 1 100%; padding-right: 24px; }
	.bd-ptable__row.is-addon .bd-ptable__plugin { padding-right: 0; }
	.bd-ptable__name-line { flex-wrap: wrap; gap: 6px 8px; }
	.bd-ptable__name { margin-right: 2px; font-size: 17px; }
	.bd-ptable__m { display: inline-block; }
	.bd-ptable__type-badge { flex: none; border: 1px solid rgba(250,154,66,.7); color: var(--bd-sun); border-radius: var(--bd-r-sm); padding: 2px 7px; font: 700 10.5px/1.3 var(--wp--preset--font-family--montserrat); letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
	.bd-ptable__tagline { margin-top: 6px; font-size: 14px; }
	.bd-ptable__meta { display: block; margin-top: 8px; font: 600 13px/1.45 var(--wp--preset--font-family--montserrat); color: var(--bd-meta); }
	.bd-ptable__arrow { position: absolute; top: 20px; right: 20px; }
	.bd-ptable__action { flex: 1 1 auto; justify-content: flex-start; }
	.bd-ptable__empty { border-bottom: 0; }
	.bd-ptable__bar { flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 14px; }
	.bd-ptable__filters { align-self: stretch; min-width: 0; margin: -5px calc(-1 * var(--bd-gutter)) -5px -5px; padding: 5px 40px 5px 5px; border: 0; border-radius: 0; gap: 8px; overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: none; -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent); }
	.bd-ptable__filters::-webkit-scrollbar { display: none; }
	.bd-ptable__filters button { flex: none; border: 1.5px solid rgba(247,248,249,.24); white-space: nowrap; }
	.bd-ptable__filters button[aria-pressed="true"] { background: var(--bd-sun); border-color: var(--bd-sun); color: var(--bd-ink); }
	.bd-ptable__addon-head .bd-ptable__sub { text-align: left; }
	.bd-ptable__catalog { display: inline-flex; align-items: center; min-height: 44px; }
	.bd-ptable__legend a { display: inline-block; padding-block: 13px; margin-block: -13px; }
}
@media (max-width: 767px) {
	.bd-ptable__title { font-size: 25px; }
	.bd-ptable__action, .bd-ptable__details { flex: 1 1 100%; width: 100%; justify-content: center; }
	.bd-ptable__note { padding: 24px 20px; }
	.bd-ptable__note-legend { grid-template-columns: 1fr; gap: 4px; }
}
.bd-ptable { padding-block: calc(20px * var(--bd-s)) calc(76px * var(--bd-s)); }
