d3ro-voice/site/tailwind.config.js
Yun Chan e689683b72 feat(site): rewrite the landing page around verified facts and accessible controls
- Replace claims that contradicted the app: the default hotkey is Right Alt
  (hold to talk), local features are free with no daily cap, there is no
  14-day trial, Team/SSO/SCIM/ZDR are not offered, and the repository is not
  public. Remove invented metrics, status badges, the competitor table, the
  ad-mediation changelog, the hash calculator and the duplicate demo.
- Seven sections: hero with one labelled example, features, how it works,
  privacy, pricing (Free / Pro 2,900 / Pro+ 8,900 KRW a month), download, FAQ.
  Footer links the privacy policy, terms and account deletion pages.
- All copy moves into i18n and every one of the 10 locales is translated.
  Pricing and cloud quotas come from site/src/pricing.ts.
- Accessibility: skip link, labelled sections, aria-expanded with Esc and
  focus return for the menu, language list and FAQ, live status for the
  example, reduced-motion support, 44px targets, AA contrast on the primary
  button. Korean keep-all line breaking is scoped to :lang(ko) because
  Tailwind's break-keep blocked wrapping in Japanese and Chinese.
- JS 111 -> 98 KB gzip, CSS 7.8 -> 5.2 KB gzip.
2026-09-26 15:04:43 +09:00

120 lines
3.5 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
export default {
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
theme: {
extend: {
colors: {
brand: {
// 브랜드 통일: 앱(Midnight Glass) blue 토큰과 동일 값 — 레거시 amber 폐기
blue: '#3b82f6',
'blue-light': '#60a5fa',
'blue-dark': '#2563eb',
// 버튼 hover. 흰 글자 대비 6.7:1 (blue-dark 5.2:1, blue 3.7:1 은 본문 버튼에 부족)
'blue-deep': '#1d4ed8',
'blue-glow': 'rgba(59,130,246,0.5)',
'blue-dim': 'rgba(59,130,246,0.14)',
'blue-muted': 'rgba(59,130,246,0.08)',
},
surface: {
950: '#08090c',
900: '#0d0f14',
800: '#13161f',
700: '#1a1e2b',
600: '#222838',
500: '#2b3245',
400: '#363f57',
300: '#434d69',
200: '#535f7f',
100: '#68769c',
},
neutral: {
50: '#ffffff',
100: '#f4f4f5',
200: '#e4e4e7',
300: '#d4d4d8',
400: '#a1a1aa',
500: '#71717a',
600: '#52525b',
700: '#3f3f46',
800: '#27272a',
900: '#18181b',
},
},
fontFamily: {
sans: [
'"Pretendard Variable"',
'Pretendard',
'-apple-system',
'BlinkMacSystemFont',
'system-ui',
'Roboto',
'"Helvetica Neue"',
'"Segoe UI"',
'"Apple SD Gothic Neo"',
'"Noto Sans KR"',
'"Malgun Gothic"',
'sans-serif',
],
display: [
'"Pretendard Variable"',
'Pretendard',
'-apple-system',
'BlinkMacSystemFont',
'system-ui',
'"Apple SD Gothic Neo"',
'"Noto Sans KR"',
'sans-serif',
],
mono: [
'"JetBrains Mono"',
'"Fira Code"',
'ui-monospace',
'SFMono-Regular',
'Menlo',
'Monaco',
'Consolas',
'monospace',
],
},
fontSize: {
// 한글 헤드라인: 행간 1.2+ (블록 글자의 숨 쉬는 공간), 자간 -0.01~-0.02em.
'hero': ['clamp(2.75rem, 5.5vw, 4.5rem)', { lineHeight: '1.22', letterSpacing: '-0.02em' }],
'display': ['clamp(2.25rem, 4vw, 3.5rem)', { lineHeight: '1.28', letterSpacing: '-0.015em' }],
'h2': ['clamp(1.75rem, 3vw, 2.5rem)', { lineHeight: '1.32', letterSpacing: '-0.012em' }],
'h3': ['1.375rem', { lineHeight: '1.4', letterSpacing: '-0.008em' }],
'micro': ['0.75rem', { lineHeight: '1.4', letterSpacing: '0.04em' }],
'nano': ['0.6875rem', { lineHeight: '1.4', letterSpacing: '0.05em' }],
},
spacing: {
'4.5': '1.125rem',
'13': '3.25rem',
'15': '3.75rem',
'18': '4.5rem',
'22': '5.5rem',
'26': '6.5rem',
'30': '7.5rem',
'34': '8.5rem',
},
borderRadius: {
'instrument': '4px',
'panel': '8px',
'card': '16px',
'2card': '20px',
'3card': '24px',
},
boxShadow: {
'chassis': '0 4px 20px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.06)',
},
animation: {
'glow-pulse': 'glow-pulse 2s ease-in-out infinite',
},
keyframes: {
'glow-pulse': {
'0%, 100%': { opacity: '0.4' },
'50%': { opacity: '1' },
},
},
},
},
plugins: [],
}