table {
  font-family: Arial, sans-serif;
  border-collapse: collapse;
  text-align: center;
}

table,
caption,
th,
td {
  border: 1px solid; /* если черный, то по умолчанию можно не указывать */
  padding: 5px;
}

/* по приоритету селекторов лучше держать caption под table во избежание наложения границ */
caption {
  border-bottom: none;
  color: rgb(18, 17, 16);
  font-weight: 900;
}

th {
  /* можно в верхнем регистре писать и в разметке */
  text-transform: uppercase;
}

/*  Использованы псевдоклассы порядка или структурные порядковые селекторы для избежания дублирования и чтобы покрасить дни по аналогу цикла. Внутри thead у меня находится tr и в него вложен th (вложенность на любом уровне в отличие от вложенности только на первом уровне ">"). Суббота и Воскресенье находятся у меня внутри thead в первом ряду и совпадают с 6 и 7 колонками (6 и 7 дочерние элементы).
Далее, остальные дни числами находятся в пределах tbody и все 6-е и 7-е элементы должны закраситься аналогично. 
color - красит только текст, где он есть. Число 'тридцать' не подпадает под порядковый номер 6 или 7. Если бы мне надо было бы его закрасить, я бы выбрал что-то типа tbody tr:last-child td:first-child или :nth-child(1)- здесь выбрали бы послед ряд и внутри него выбрали бы первую ячейку (из двух).
tbody tr:first-child td:last-child - здесь выбирается самый первый ряд внутри tbody и в свою очередь выбирается самая последняя ячейка для окраски.
Вместо td:last-child,если не ошибаюсь, можно также поставить и td:nth-child(2) - по смыслу первый ряд разделен на две ячейки, и число 01 - это типа второй элемент..
.*/

thead tr th:nth-child(6),
thead tr th:nth-child(7),
tbody tr:first-child td:last-child,
tbody tr td:nth-child(6),
tbody tr td:nth-child(7) {
  /* color: color (display-p3 1 0 0); */
  color: #ff0000;
  border-color: hsl(0, 0%, 0%);
}
