Files
veilix.app/src/ui/Logo.tsx
T
andreypr207andClaude Opus 5.5 7e331c2c9d Этап 1a: фундамент
- Next 16.4 и Payload 3.91 в одном приложении, PostgreSQL с UUID,
  TypeScript 6, ESLint 9, Prettier, Vitest
- Payload: администраторы с ролями, multi-tenant по сайтам, локализация
  en/ru/de/fr/es, интерфейс админки ru/en, языки сайта (sites.locales)
- Коллекции sites, domains, currencies, countries, locations, tags,
  tariffs, payment-systems (manual), media и начальные данные (pnpm seed)
- Proxy: хост → домен, язык и валюта, внутренние маршруты по хосту;
  /admin и /api закрыты на доменах брендов
- Токены и темы брендов, оболочки сайта и кабинета, переключатели языка,
  валюты и темы, заглушки страниц
- /svc/health, юнит systemd veilix-dev.service
- Документация: решения D-022…D-024, команды в CLAUDE.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 05:08:05 +02:00

53 lines
1.8 KiB
TypeScript

/** Знак «Слои»: два перекрывающихся скруглённых квадрата, цвета — из токенов бренда */
const MARK = {
// шапка сайта
lg: { box: 28, square: 21, radius: 7, offset: 3, blur: true },
// карточка входа
card: { box: 26, square: 19, radius: 6, offset: 3, blur: false },
// подвал сайта и кабинет
md: { box: 24, square: 18, radius: 6, offset: 3, blur: false },
} as const
const TEXT_SIZE = { lg: 'text-[17px]', card: 'text-base', md: 'text-[15px]' } as const
export function LogoMark({ size }: { size: keyof typeof MARK }) {
const { box, square, radius, offset, blur } = MARK[size]
return (
<span aria-hidden className="relative block flex-none" style={{ width: box, height: box }}>
<span
className="absolute left-0 block"
style={{
top: offset,
width: square,
height: square,
borderRadius: radius,
background:
'linear-gradient(140deg, var(--accent), color-mix(in oklab, var(--accent) 55%, var(--glow-3)))',
}}
/>
<span
className="absolute right-0 block border bg-veil"
style={{
bottom: offset,
width: square,
height: square,
borderRadius: radius,
borderColor: 'color-mix(in oklab, var(--accent) 35%, transparent)',
backdropFilter: blur ? 'blur(2px)' : undefined,
}}
/>
</span>
)
}
/** Надпись логотипа: Unbounded 600 */
export function LogoText({ children, size }: { children: string; size: keyof typeof TEXT_SIZE }) {
return (
<span
className={`font-logo font-semibold tracking-[-0.02em] whitespace-nowrap ${TEXT_SIZE[size]}`}
>
{children}
</span>
)
}