diff --git a/app/globals.css b/app/globals.css index a2dc41e..8e4f11d 100644 --- a/app/globals.css +++ b/app/globals.css @@ -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; + } } diff --git a/app/layout.tsx b/app/layout.tsx index 9852c15..835ce4f 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -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 ( -
{children} + +