💄 fix(notifications): шторка слипалась — ритм списка и интерлиньяж

Зазора между уведомлениями не было вовсе: измеренные 0px. Из-за этого два
непрочитанных подряд сливались подложками в один цветной блок и читались как
одно уведомление из четырёх строк. Внутри карточки было не лучше: заголовок,
текст и время шли в 2 и 4 пикселя друг от друга с line-height: normal.
При этом между секциями «Сегодня» и «Ранее» стояло 42px пустоты.

- 6px между уведомлениями плюс рамка у непрочитанного: подложки соседей больше
  не сливаются;
- интерлиньяж задан каждой строке (заголовок 1.35, текст 1.45), заголовок →
  текст 3px, время отбито 8px и выровнено с первой строкой заголовка;
- секции разделены линией --n-8 вместо воздуха, а сам воздух ужат с 42 до 14.
  Девятка на подложке карточки почти не видна — восьмёркой отбиты шапки таблиц;
- «Прочитать всё» получила подложку по наведению: раньше это был голый текст
  без признаков кнопки.

Проверено в обеих темах на копии шторки с реальным CSS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
AndreyandClaude Opus 5 committed 2026-09-08 02:04:16 +03:00
1 parent c512d5a0f5
commit 324198d6df
1 file changed
+59 -24
@@ -1,28 +1,55 @@
/* Шторка уведомлений (antd Drawer). Список слипался: у элементов не было
зазора вовсе, поэтому два непрочитанных подряд сливались в один цветной
блок, а внутри карточки заголовок, текст и время шли в 2–4 px друг от друга
с line-height: normal. Ниже — ритм: 6 px между уведомлениями, интерлиньяж у
каждой строки, секции разделены линией. */
.notif-mark-all {
height: 26px;
padding: 0 8px;
border: none;
border-radius: 7px;
background: none;
color: var(--primary);
font-family: inherit;
font-size: 13px;
font-weight: 500;
cursor: pointer;
}
.notif-empty {
color: var(--n-4);
text-align: center;
padding: 32px 0;
.notif-mark-all:hover {
background: var(--primary-bg);
}
.notif-empty {
padding: 32px 0;
color: var(--n-4);
text-align: center;
}
.notif-section {
display: flex;
flex-direction: column;
gap: 6px;
}
/* Между секциями линия, а не просто воздух: «Сегодня» и «Ранее» — разные
пачки, и на глаз это должно быть видно сразу. */
.notif-section + .notif-section {
margin-top: 18px;
margin-top: 14px;
padding-top: 14px;
/* --n-8, а не --n-9: на подложке карточки (--surface-card) девятка почти не
видна — тем же цветом отбиты шапки таблиц и .table-card. */
border-top: 1px solid var(--n-8);
}
.notif-section-title {
font-size: 12px;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
margin-bottom: 2px;
color: var(--n-4);
margin-bottom: 8px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.notif-item {
@@ -30,11 +57,11 @@
gap: 12px;
align-items: flex-start;
width: 100%;
text-align: left;
border: none;
background: none;
padding: 10px 8px;
padding: 11px 10px;
border: 1px solid transparent;
border-radius: 10px;
background: none;
text-align: left;
cursor: pointer;
}
@@ -42,50 +69,58 @@
background: var(--n-9);
}
/* Непрочитанное — подложка и рамка. Рамка нужна именно потому, что подряд идут
несколько непрочитанных: без неё их подложки читаются как один блок. */
.notif-item.unread {
background: var(--primary-bg);
border-color: var(--primary-border);
}
.notif-item-icon {
display: inline-flex;
flex: none;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 8px;
flex: none;
}
.notif-item-body {
display: flex;
flex-direction: column;
gap: 2px;
flex: 1;
flex-direction: column;
gap: 3px;
min-width: 0;
}
.notif-item-title {
font-weight: 600;
font-size: 13px;
color: var(--n-1);
font-size: 13px;
font-weight: 600;
line-height: 1.35;
}
.notif-item-text {
font-size: 12px;
color: var(--n-3);
font-size: 12px;
line-height: 1.45;
overflow-wrap: anywhere;
}
.notif-item-time {
font-size: 11px;
margin-top: 5px;
color: var(--n-4);
margin-top: 2px;
font-size: 11px;
line-height: 1;
}
/* Точка выравнена по первой строке заголовка: 13px × 1.35 ≈ 17.5, (17.5−8)/2. */
.notif-item-dot {
flex: none;
width: 8px;
height: 8px;
margin-top: 5px;
border-radius: 50%;
background: var(--primary);
flex: none;
margin-top: 6px;
}