PedanticDesign System · aCo

Table

Tables are for data with real row and column relationships — never for layout. Pedantic tables name themselves with a caption and label every header cell.

Basic table

Live example — data table with status badges

Open projects by status
ProjectOwnerStatusDue
Website RedesignDesign TeamOn TrackDec 4, 2026
App OnboardingProduct TeamAt RiskDec 11, 2026
Billing MigrationEngineeringBlockedDec 18, 2026
Help Center RefreshSupport TeamPlannedJan 8, 2027
<div class="pds-table-wrap">
  <table class="pds-table">
    <caption>Open projects by status</caption>
    <thead>
      <tr><th scope="col">Project</th><th scope="col">Owner</th><th scope="col">Status</th><th scope="col">Due</th></tr>
    </thead>
    <tbody>
      <tr><th scope="row">Website Redesign</th><td>Design Team</td>
        <td><span class="pds-badge pds-badge--success">On Track</span></td><td>Dec 4, 2026</td></tr>
      <tr><th scope="row">App Onboarding</th><td>Product Team</td>
        <td><span class="pds-badge pds-badge--warning">At Risk</span></td><td>Dec 11, 2026</td></tr>
      <tr><th scope="row">Billing Migration</th><td>Engineering</td>
        <td><span class="pds-badge pds-badge--danger">Blocked</span></td><td>Dec 18, 2026</td></tr>
    </tbody>
  </table>
</div>

Anatomy

Rules

Do

Wrap wide tables in .pds-table-wrap so they scroll horizontally inside the page instead of breaking the layout.

Left-align text columns; keep numbers in their natural reading order.

Don’t

Don’t use tables for page layout, merge cells to fake a design, or leave header cells as plain <td>.

Don’t put essential actions only in a hover state inside a row.

Accessibility notes