/* hub.css — shared safety net for the hub pages (HUB-TABLE-SAFETY-NET, 2026-10-19).
 *
 * Every hub page (ar, capex, floor, index, launcher, m1-home, opint, pick, quality,
 * readiness, safety, traveler) carries its own inline <style>, so each one reinvents
 * its table CSS. Column overlap shipped twice that way (floor 9/28, pick 10/19): a
 * long unbroken token (03250-M000.00 4140HT SOLID) ran over the next column.
 *
 * Gentle on purpose. A first version forced table-layout:fixed + width:100% and broke
 * every cell anywhere; the rendered sweep showed it split money mid-number on ar and
 * capex and pushed the capex status pills over their column. So:
 *   - tables keep the page's own layout and are only capped at their container;
 *   - a cell breaks a token only when that token cannot fit on a line of its own
 *     (break-word does not lower a column's minimum width, so numbers stay whole);
 *   - chrome inside a cell (pills, badges, buttons, nowrap labels) is held to the
 *     cell's width and clipped with an ellipsis instead of drawing over the next
 *     column. Data text in a cell is never clipped by this file.
 *
 * !important on purpose: linked last in <head> so it wins over a page's own rules.
 * scripts/design-lint.mjs (R4) fails the build when a hub page has a table and does
 * not link this file.
 */
table {
  max-width: 100% !important;
}
th, td {
  overflow-wrap: break-word !important;
}
:is(th, td) :is(button, .badge, .pill, .chip, .st, .tag, [class*="badge"], [class*="pill"], [style*="white-space: nowrap"], [style*="white-space:nowrap"]) {
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  vertical-align: middle;
}
