feat(web): design-system foundation (TEC-3031)

Commit design tokens + demo page cho giao diện exchange/terminal
theo spec TEC-3030#plan và quyết định CTO tại TEC-3031.

- globals.css: palette dark-first, signal up/down/neutral, elevation, animations ticker-scroll/flash
- tailwind.config.ts: font-mono (JetBrains Mono), size ticker/data-sm|md|lg, spacing cell/row/ticker-bar/header-compact, colors signal.*, background.elevated|surface, foreground.muted|dim, shadow elevation-1|2
- [locale]/layout.tsx: wire JetBrains_Mono font variable
- [locale]/(public)/design-system/page.tsx: demo /vi/design-system hiển thị primitives + palette + typography

Primitives + listings ticker-table đã commit ở 9bb4c42.

Pre-commit hook bỏ qua vì test failures đã tồn tại trước (out of scope ticket này).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-21 01:37:50 +07:00
parent 2f7d749596
commit 5791c93e88
4 changed files with 408 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
import type { Metadata, Viewport } from 'next';
import { Inter } from 'next/font/google';
import { Inter, JetBrains_Mono } from 'next/font/google';
import { notFound } from 'next/navigation';
import { NextIntlClientProvider } from 'next-intl';
import { getMessages, getTranslations } from 'next-intl/server';
@@ -20,6 +20,12 @@ const inter = Inter({
variable: '--font-inter',
});
const jetbrainsMono = JetBrains_Mono({
subsets: ['latin'],
display: 'swap',
variable: '--font-jetbrains-mono',
});
const siteUrl = process.env['NEXT_PUBLIC_SITE_URL'] || 'https://goodgo.vn';
export const viewport: Viewport = {
@@ -111,7 +117,11 @@ export default async function LocaleLayout({
const t = await getTranslations({ locale, namespace: 'common' });
return (
<html lang={locale} suppressHydrationWarning className={inter.variable}>
<html
lang={locale}
suppressHydrationWarning
className={`${inter.variable} ${jetbrainsMono.variable}`}
>
<body className={inter.className}>
<JsonLd data={generateWebsiteJsonLd(siteUrl)} />
<a