:root {
    --container-max-width: 1280px;

    --space-xs: 0.25rem;
    --space-s: 0.5rem;
    --space-m: 1rem;
    --space-l: 2rem;
    --space-xl: 4rem;
    --space-xxl: 6rem;

    --primary-grid-column-min-width: 12rem;
    --secondary-grid-column-min-width: 12rem;
}

/* CONTAINER */

/* horizontal container sizing
   width: 100% first = fluid base so max-width can clamp cleanly
   (prevents horizontal overflow on any screen < 1280 px) */
.container {
    margin: 0 auto;
    width: 100%;
    max-width: min(var(--container-max-width), 90vw);
}

/* GRID */

.grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
}

.primary.grid {
    grid-template-columns: repeat(
        auto-fit,
        minmax(var(--primary-grid-column-min-width), 1fr)
    );
}

.secondary.grid {
    grid-template-columns: repeat(
        auto-fit,
        minmax(var(--secondary-grid-column-min-width), 1fr)
    );
}

/* VERTICAL */

.vertical {
    display: flex;
    flex-direction: column;
}

.vertical > * {
    flex: 0 1 auto;
}

/* HORIZONTAL */

.horizontal {
    display: flex;
    flex-direction: row;
}

.horizontal > * {
    flex: 0 1 auto;
}

/* BAR */

.horizontal.bar,
.vertical.bar {
    align-items: center;
    justify-content: space-between;
}

/* GAPS */

.primary.grid,
.primary.vertical,
.primary.horizontal {
    gap: var(--space-xl);
}

.secondary.grid,
.secondary.vertical,
.secondary.horizontal {
    gap: var(--space-l);
}

/* TABLES */

th {
    text-align: left;
}

td {
    vertical-align: top;
}

th,
td {
    padding: 0;
}

th:not(:last-child),
td:not(:last-child) {
    padding-right: var(--space-m);
}

thead th,
tbody tr:not(:last-child) td {
    padding-bottom: var(--space-m);
}
