feat(ui): initialize base nova design system

This commit is contained in:
2026-08-28 16:29:07 +00:00 Unverified
parent d3b09a4e70
commit 56cfdd99e5
43 changed files with 5368 additions and 26 deletions
+123 -13
View File
@@ -1,26 +1,136 @@
@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
:root {
--background: #ffffff;
--foreground: #171717;
}
@custom-variant dark (&:is(.dark *));
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-success: var(--success);
--color-warning: var(--warning);
--color-info: var(--info);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--color-chart-6: var(--chart-6);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
--font-sans: var(--font-anuphan);
--font-heading: var(--font-anuphan);
--font-mono: var(--font-geist-mono);
--radius-sm: calc(var(--radius) * 0.6);
--radius-md: calc(var(--radius) * 0.8);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) * 1.4);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
:root,
.dark {
color-scheme: dark;
--background: oklch(0.13 0.012 275);
--foreground: oklch(0.95 0.012 88);
--card: oklch(0.175 0.016 274);
--card-foreground: oklch(0.95 0.012 88);
--popover: oklch(0.19 0.018 274);
--popover-foreground: oklch(0.95 0.012 88);
--primary: oklch(0.79 0.14 78);
--primary-foreground: oklch(0.16 0.025 70);
--secondary: oklch(0.23 0.02 274);
--secondary-foreground: oklch(0.92 0.012 88);
--muted: oklch(0.22 0.017 274);
--muted-foreground: oklch(0.7 0.018 274);
--accent: oklch(0.255 0.035 275);
--accent-foreground: oklch(0.96 0.01 88);
--destructive: oklch(0.67 0.2 25);
--success: oklch(0.72 0.15 155);
--warning: oklch(0.8 0.15 82);
--info: oklch(0.72 0.12 235);
--border: oklch(0.96 0.01 88 / 12%);
--input: oklch(0.96 0.01 88 / 16%);
--ring: oklch(0.79 0.14 78);
--chart-1: oklch(0.76 0.16 76);
--chart-2: oklch(0.7 0.14 255);
--chart-3: oklch(0.72 0.15 155);
--chart-4: oklch(0.7 0.16 325);
--chart-5: oklch(0.75 0.13 210);
--chart-6: oklch(0.7 0.17 25);
--radius: 0.625rem;
--sidebar: oklch(0.155 0.015 274);
--sidebar-foreground: oklch(0.93 0.012 88);
--sidebar-primary: oklch(0.79 0.14 78);
--sidebar-primary-foreground: oklch(0.16 0.025 70);
--sidebar-accent: oklch(0.235 0.025 274);
--sidebar-accent-foreground: oklch(0.95 0.012 88);
--sidebar-border: oklch(0.96 0.01 88 / 10%);
--sidebar-ring: oklch(0.79 0.14 78);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
html {
@apply bg-background font-sans;
scrollbar-gutter: stable;
}
body {
@apply min-h-svh bg-background text-foreground;
overflow-wrap: anywhere;
text-rendering: optimizeLegibility;
}
::selection {
background: color-mix(in oklch, var(--primary) 30%, transparent);
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
@media (pointer: coarse) {
[data-slot="button"],
[data-slot="toggle-group-item"],
[data-slot="select-trigger"],
[data-slot="input"],
[data-slot="input-group"] {
min-height: 2.75rem;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
+22 -9
View File
@@ -1,10 +1,15 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Anuphan, Geist_Mono } from "next/font/google";
import { Toaster } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
const anuphan = Anuphan({
variable: "--font-anuphan",
subsets: ["thai", "latin"],
fallback: ["Tahoma", "Arial", "sans-serif"],
});
const geistMono = Geist_Mono({
@@ -13,17 +18,25 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
title: {
default: "Buzz Sheet — คู่มือเกม",
template: "%s | Buzz Sheet",
},
description: "คู่มือตัวละคร บิลด์ ทีม และโรเทชันที่อ่านง่ายในทุกหน้าจอ",
};
export default function RootLayout({ children }: LayoutProps<"/">) {
return (
<html
lang="en"
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}
lang="th"
className={`dark ${anuphan.variable} ${geistMono.variable} h-full antialiased`}
>
<body className="min-h-full flex flex-col">{children}</body>
<body className="flex min-h-full flex-col">
<TooltipProvider>
{children}
<Toaster position="bottom-right" />
</TooltipProvider>
</body>
</html>
);
}