- tailwind: восстановлены токены paper/accent/muted (их используют все компоненты — незакоммиченный оверхол их удалял → ломало палитру); serif/display указывают на реально загруженные next/font (Cormorant/Inter), а не на несуществующий --font-serif/Space Grotesk/Manrope; muted возвращён к #6b6b6b (WCAG-AA на белом). Новые токены gold/bg/graphite/ радиусы/тени оставлены аддитивно. - layout: metadataBase + canonical + OG url/siteName + twitter card (SEO/OG). - 404: metadata title + robots noindex. - app/icon.png: favicon (Next app-icon). Сборка/типы: next build + tsc --noEmit — зелёные. Бот-адаптер /api/bot/* и Яндекс-redirect не трогались (соответствуют SPEC). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import type { Config } from 'tailwindcss';
|
|
|
|
// NIKA ART — премиум design-system.
|
|
// Палитра: bg #F7F7F5 / #FAFAFA · ink #111 · gold #C8A55A · graphite #444.
|
|
// Токены paper/accent/muted оставлены (back-compat) — их используют текущие
|
|
// компоненты; новые gold/bg/graphite аддитивны. Шрифты грузятся в layout.tsx
|
|
// как next/font: --font-display = Cormorant Garamond, --font-body = Inter.
|
|
const config: Config = {
|
|
content: [
|
|
'./app/**/*.{ts,tsx}',
|
|
'./components/**/*.{ts,tsx}',
|
|
'./lib/**/*.{ts,tsx}',
|
|
],
|
|
darkMode: 'class',
|
|
theme: {
|
|
extend: {
|
|
fontFamily: {
|
|
// Реально загруженные next/font-семейства (layout.tsx):
|
|
// --font-display = Cormorant Garamond, --font-body = Inter.
|
|
display: ['var(--font-display)', 'Cormorant Garamond', 'Georgia', 'serif'],
|
|
serif: ['var(--font-display)', 'Cormorant Garamond', 'Georgia', 'serif'],
|
|
sans: ['var(--font-body)', 'Inter', 'system-ui', 'sans-serif'],
|
|
},
|
|
colors: {
|
|
bg: '#F7F7F5',
|
|
'bg-alt': '#FAFAFA',
|
|
ink: '#111111',
|
|
'ink-soft': '#1b1b1b',
|
|
gold: '#C8A55A',
|
|
'gold-deep': '#a9863d',
|
|
graphite: '#444444',
|
|
// back-compat: используются текущими компонентами (не ломаем вид).
|
|
paper: '#f7f5f1',
|
|
accent: '#8a6f52',
|
|
muted: '#6b6b6b', // WCAG-AA на белом (≈4.5:1)
|
|
line: '#e4e0d8',
|
|
'line-soft': 'rgba(17,17,17,0.06)',
|
|
},
|
|
letterSpacing: {
|
|
tightest: '-0.03em',
|
|
widener: '0.24em',
|
|
},
|
|
maxWidth: {
|
|
content: '1320px',
|
|
},
|
|
borderRadius: {
|
|
's': '10px',
|
|
'm': '18px',
|
|
'l': '28px',
|
|
},
|
|
boxShadow: {
|
|
's': '0 2px 10px rgba(17,17,17,.05)',
|
|
'm': '0 18px 50px -20px rgba(17,17,17,.22)',
|
|
'l': '0 40px 90px -30px rgba(17,17,17,.35)',
|
|
gold: '0 14px 30px -14px rgba(169,134,61,.7)',
|
|
},
|
|
transitionTimingFunction: {
|
|
gallery: 'cubic-bezier(0.16, 1, 0.3, 1)',
|
|
},
|
|
keyframes: {
|
|
slide: { to: { transform: 'translateX(-50%)' } },
|
|
cue: {
|
|
'0%': { transform: 'scaleY(0)', transformOrigin: 'top' },
|
|
'45%': { transform: 'scaleY(1)', transformOrigin: 'top' },
|
|
'55%': { transform: 'scaleY(1)', transformOrigin: 'bottom' },
|
|
'100%': { transform: 'scaleY(0)', transformOrigin: 'bottom' },
|
|
},
|
|
},
|
|
animation: {
|
|
marquee: 'slide 34s linear infinite',
|
|
cue: 'cue 2.2s cubic-bezier(0.16,1,0.3,1) infinite',
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
};
|
|
|
|
export default config;
|