.dads-table {
  --_border-color: var(--color-neutral-solid-gray-420);
  --_padding: calc(20 / 16 * 1rem) 0.5rem;
  margin: 0;
  box-sizing: border-box;
  border-collapse: collapse;
  color: var(--color-neutral-solid-gray-800);
  font-weight: normal;
  font-size: calc(16 / 16 * 1rem);
  line-height: 1.7;
  font-family: var(--font-family-sans);
  letter-spacing: 0.02em;
}

.dads-table[dads-type="dense"] {
  --_padding: calc(12 / 16 * 1rem) 0.1rem;
  line-height: 1.3;
}

.dads-table caption {
  font-weight: bold;
  font-size: calc(17 / 16 * 1rem);
  text-align: left;
  margin-bottom: calc(16 / 16 * 1rem);
}

.dads-table :is(td, th) {
  padding: var(--_padding);
  text-align: left;
  vertical-align: baseline;
}

.dads-table th {
  font-weight: bold;
}

.dads-table thead th {
  --_border-color: var(--color-neutral-solid-gray-500);
  background-color: var(--color-neutral-solid-gray-100);
  color: var(--color-neutral-solid-gray-900);
}

.dads-table tbody th {
  --_border-color: var(--color-neutral-solid-gray-500);
  background-color: var(--color-neutral-solid-gray-100);
  color: var(--color-neutral-solid-gray-900);
}

/* Stripe */

.dads-table[dads-stripe] {
  --_border-color: var(--color-neutral-solid-gray-500);
}

.dads-table[dads-stripe] tr:nth-child(even) {
  background-color: var(--color-neutral-solid-gray-50);
}

/* Hover highlight */

.dads-table[dads-hover] {
  --_border-color: var(--color-neutral-solid-gray-500);
}

@media (hover: hover) {
  .dads-table[dads-hover] tr:hover {
    background-color: var(--color-primitive-blue-50);
  }
}

/* With checkbox */

.dads-table[dads-selectable] {
  --_border-color: var(--color-neutral-solid-gray-500);
}

.dads-table[dads-selectable] tr:has(:checked) {
  background-color: var(--color-primitive-blue-100);
}

@supports (selector(:has(.x))) {
  .dads-table td:has(.dads-checkbox:only-child, .dads-radio:only-child),
  .dads-table th:has(.dads-checkbox:only-child, .dads-radio:only-child) {
    position: relative;
    box-sizing: border-box;
    width: calc(40 / 16 * 1rem);
    padding: 0;
  }

  .dads-table td > :is(.dads-checkbox:only-child, .dads-radio:only-child),
  .dads-table th > :is(.dads-checkbox:only-child, .dads-radio:only-child) {
    position: absolute;
    inset: 0;
    display: grid;
    justify-content: center;
    width: auto;
    padding-top: calc(10 / 16 * 1rem);
  }
}

/* Sort */

.dads-table th[dads-sort] {
  --_border-color: var(--color-neutral-solid-gray-500);
  background-color: var(--color-neutral-solid-gray-100);
  padding: calc(12 / 16 * 1rem) calc(16 / 16 * 1rem);
  color: var(--color-neutral-solid-gray-900);
  white-space: nowrap;
}

.dads-table[dads-type="dense"] th[dads-sort] {
  padding-top: 0;
  padding-bottom: 0;
}

.dads-sort {
  display: inline-flex;
  flex-direction: column;
  vertical-align: middle;
  margin-inline-start: calc(4 / 16 * 1rem);
}

:is(.dads-sort-up, .dads-sort-down) {
  display: block;
  width: calc(24 / 16 * 1rem);
  height: calc(12 / 16 * 1rem);
  border: 0;
  background-color: transparent;
  padding: 0;
  color: var(--color-neutral-solid-gray-420);
  cursor: pointer;
}

:is(.dads-sort-up, .dads-sort-down)::after {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  background-color: currentcolor;
  mask-repeat: no-repeat;
  mask-position: center;
  mask-size: contain;
}

.dads-sort-up::after {
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='M2 10l10-9 10 9H2z'/%3E%3C/svg%3E");
}

.dads-sort-down::after {
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='M2 2l10 9 10-9H2z'/%3E%3C/svg%3E");
}

.dads-table th[dads-sort][aria-sort="ascending"] .dads-sort-up,
.dads-table th[dads-sort][aria-sort="descending"] .dads-sort-down {
  color: var(--color-neutral-solid-gray-900);
}

:is(.dads-sort-up, .dads-sort-down):hover {
  color: var(--color-neutral-solid-gray-900);
}

:is(.dads-sort-up, .dads-sort-down):focus-visible {
  outline: calc(4 / 16 * 1rem) solid var(--color-neutral-black);
  outline-offset: calc(2 / 16 * 1rem);
  border-radius: calc(2 / 16 * 1rem);
  background-color: var(--color-primitive-yellow-300);
  box-shadow: 0 0 0 calc(2 / 16 * 1rem) var(--color-primitive-yellow-300);
}

/* Utilities */

.dads-table[dads-border=""] :where(td, th) {
  border: 1px solid var(--_border-color);
}

.dads-table[dads-border~="top"] :where(td, th) {
  border-top: 1px solid var(--_border-color);
}

.dads-table[dads-border~="right"] :where(td, th) {
  border-right: 1px solid var(--_border-color);
}

.dads-table[dads-border~="bottom"] :where(td, th) {
  border-bottom: 1px solid var(--_border-color);
}

.dads-table[dads-border~="left"] :where(td, th) {
  border-left: 1px solid var(--_border-color);
}

/* Header cell's black border should take precedence over [dads-border] */
.dads-table thead tr:last-of-type th {
  border-bottom: 1px solid var(--color-neutral-black);
}

.dads-table tbody th:last-of-type {
  border-right: 1px solid var(--color-neutral-black);
}

@media (width >= 40rem) {
  .dads-table {
    --_padding: calc(20 / 16 * 1rem) calc(16 / 16 * 1rem);
  }
}
