fix(tradein): a11y follow-up — sr-only th-текст + heading-order (#835) #845

Merged
bot-reviewer merged 1 commit from feat/835-a11y-2 into main 2026-05-30 21:13:20 +00:00
5 changed files with 22 additions and 8 deletions

View file

@ -128,7 +128,7 @@ export function DealsCard({ estimate }: Props) {
<th className="num"> / м²</th>
<th className="num">Цена сделки</th>
<th className="num">Дата</th>
<th aria-label="Действия" />
<th><span className="sr-only">Действия</span></th>
</tr>
</thead>
<tbody>

View file

@ -258,7 +258,7 @@ export function ListingsCard({ estimate, estimateId }: Props) {
<th className="num"> / м²</th>
<th className="num">Стоимость</th>
<th className="num">Дист.</th>
<th aria-label="Действия" />
<th><span className="sr-only">Действия</span></th>
</tr>
</thead>
<tbody>

View file

@ -215,7 +215,7 @@ export function OfferCard({ estimate, brandSlug }: Props) {
<path d="m15.5 7.5 3 3L22 7l-3-3" />
</svg>
</div>
<h4>Экономия времени</h4>
<h3>Экономия времени</h3>
<p>Берём на себя показы, переговоры и поиск покупателей. Менеджеру остаётся только подписать ДКП.</p>
</div>
<div className="advantage">
@ -225,7 +225,7 @@ export function OfferCard({ estimate, brandSlug }: Props) {
<polyline points="9 22 9 12 15 12 15 22" />
</svg>
</div>
<h4>Юридическая безопасность</h4>
<h3>Юридическая безопасность</h3>
<p>Проверяем чистоту документов, ЕГРН, прописанных и обременения. Исключаем риски.</p>
</div>
<div className="advantage">
@ -236,7 +236,7 @@ export function OfferCard({ estimate, brandSlug }: Props) {
<circle cx="17.5" cy="17.5" r="2.5" />
</svg>
</div>
<h4>Фиксированная цена новостройки</h4>
<h3>Фиксированная цена новостройки</h3>
<p>Сохраняем планировку в каталоге по цене на момент оценки до закрытия сделки.</p>
</div>
<div className="advantage">
@ -247,7 +247,7 @@ export function OfferCard({ estimate, brandSlug }: Props) {
<circle cx="12" cy="12" r="2" />
</svg>
</div>
<h4>Гарантия цены</h4>
<h3>Гарантия цены</h3>
<p>Снимаем риск колебаний рынка выкупная стоимость зафиксирована в оффере на 30 дней.</p>
</div>
</div>

View file

@ -165,7 +165,7 @@ export function StreetDealsCard({ estimate }: Props) {
<th className="num">/м²</th>
<th className="num">Дата</th>
{hasAnyListing && <th>Объявление до сделки</th>}
<th aria-label="Действия" />
<th><span className="sr-only">Действия</span></th>
</tr>
</thead>
<tbody>

View file

@ -1348,7 +1348,7 @@
display: grid; place-items: center;
margin-bottom: 4px;
}
.advantage h4 {
.advantage h3 {
font-size: 14px;
letter-spacing: -0.005em;
}
@ -1967,6 +1967,20 @@
.discount-neg { color: var(--success); }
.discount-pos { color: var(--danger); }
/* #835 a11y: визуально-скрытый текст для скринридеров (sr-only) для пустых
th-заголовков (empty-table-header требует ТЕКСТ, не aria-label). */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Ячейка listing-колонки */
.listing-cell {
min-width: 200px;