Files
nunuchek be8db997a5 fix(landing): impeccable audit — фокус на первое неверное поле, POST без JS, отступ под липкую CTA, 320 без скролла, AVIF и sizes
- форма: после «Отправить» с ошибками фокус уходит на первое поле с aria-invalid, скринридер читает подсказку; method=post — без JS имя и телефон не попадают в URL
- scroll-padding-bottom < 768: фокус и якоря не прячутся под липкой CTA (WCAG 2.4.11)
- штамп на этикетке сжимается на 320 вместо горизонтального скролла (WCAG 1.4.10); на 390 и шире без изменений
- цена читается «32 BYN», «250 г» (sr-only пробелы)
- sizes фото hero и «Кто обжаривает» по реальной ширине колонки на 1440; AVIF перед WebP
2026-10-17 17:21:12 +03:00

19 lines
764 B
TypeScript

import path from 'node:path';
import type { NextConfig } from 'next';
const config: NextConfig = {
output: 'standalone',
outputFileTracingRoot: path.join(import.meta.dirname, '../..'),
transpilePackages: ['@kvarta/shared'],
poweredByHeader: false,
// AVIF заметно легче WebP на фото зерна (LCP на мобиле); WebP — запасной
images: { formats: ['image/avif', 'image/webp'] },
// в проде /api/ отдаёт nginx на контейнер api; локально проксируем на dev-сервер api
async rewrites() {
if (process.env.NODE_ENV === 'production') return [];
return [{ source: '/api/:path*', destination: 'http://127.0.0.1:3001/api/:path*' }];
},
};
export default config;