5. Убрали outline без замены
:focus { outline: none } без альтернативного :focus-visible-стиля делает сайт недоступным для клавиатуры. Фокус должен оставаться видимым.
Большинство ошибок CSS диагностируется проверкой селектора, пути к файлу, порядка правил и DevTools.
Без точки card — это селектор тега <card> (такого тега нет), и правило ни на что не действует. Слева блок остался серым, потому что селектор не совпал; справа добавлена точка — и стиль применился.
/* ❌ как ломается: ищет тег <card> */
card { background: #fef08a; }
/* ✅ как правильно: ищет class="card" */
.card { background: #fef08a; }
> (или наоборот).card p ловит p на любой глубине, .card > p — только прямых детей. Если ждали «все абзацы», а написали >, вложенные останутся без стиля. Ниже .card > p пропустил абзац внутри вложенного блока.
прямой p — выбран ✓
вложенный p — пропущен (не прямой ребёнок)
/* ловит только верхний абзац */
.card > p { background: #fef08a; }
/* ловил бы оба абзаца */
.card p { background: #fef08a; }
Пропущенный пробел меняет смысл: .card .primary (с пробелом) — потомок, а .card.primary (без пробела) — один элемент с двумя классами сразу. Это разные элементы.
/* один элемент: и .card, и .primary */
.card.primary { … }
/* .primary ВНУТРИ .card (потомок) */
.card .primary { … }
Правило вроде #sidebar .menu li a.active работает, но переопределить его потом почти невозможно — приходится писать ещё длиннее. Держите селекторы короткими и опирайтесь на классы.
#sidebar ul li a используйте один класс .nav-link. Меньше специфичность — легче переопределять (подробнее в уроке 12).
:focus { outline: none } без альтернативного :focus-visible-стиля делает сайт недоступным для клавиатуры. Фокус должен оставаться видимым.