tailwind.config.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /** @type {import('tailwindcss').Config} */
  2. module.exports = {
  3. content: ['./src/**/*.{html,ts}'],
  4. theme: {
  5. // 🔴 以下三项位于 `theme`(非 extend) → **覆盖** Tailwind 默认刻度。
  6. //
  7. // 为什么必须覆盖而非 extend:
  8. // 底座 147 个组件的类名是**编译期字面量**(rounded-lg / text-sm / px-4),
  9. // 不是 var(--r-md)。仅覆盖 CSS 变量令牌对它们**无效**。
  10. // 要让"保持原型视觉"真正生效,必须重映射刻度本身 ——
  11. // 这样 `rounded-lg` 在编译后就等于 --r-md,底座零改动即采用原型圆角。
  12. //
  13. // 依据:《设计令牌.md》v3.0 §六/§七 · 原型 styles.css 的 8 档字号 / 4 档圆角
  14. borderRadius: {
  15. none: '0',
  16. // --r-sm(6) —— 小件:徽标、标签、图标块
  17. sm: 'var(--r-sm)',
  18. // --r-md(10) —— 卡片/输入/按钮基准(底座最常用 rounded-lg,故映射到此处)
  19. DEFAULT: 'var(--r-md)',
  20. md: 'var(--r-md)',
  21. lg: 'var(--r-md)',
  22. // --r-lg(16) —— 弹窗、抽屉、大卡
  23. xl: 'var(--r-lg)',
  24. '2xl': 'var(--r-lg)',
  25. '3xl': 'var(--r-lg)',
  26. // --r-tag(999) —— 胶囊、头像
  27. full: 'var(--r-tag)',
  28. },
  29. spacing: {
  30. // 8pt 网格(原型刻度),覆盖默认 4px 基数 —— 底座 px-4/gap-2 等自动对齐
  31. px: '1px',
  32. 0: '0',
  33. 0.5: 'var(--sp-1)', // 4
  34. 1: 'var(--sp-1)', // 4
  35. 1.5: 'var(--sp-2)', // 8
  36. 2: 'var(--sp-2)', // 8
  37. 2.5: 'var(--sp-3)', // 12
  38. 3: 'var(--sp-3)', // 12
  39. 3.5: 'var(--sp-4)', // 16
  40. 4: 'var(--sp-4)', // 16
  41. 5: 'var(--sp-5)', // 20
  42. 6: 'var(--sp-6)', // 24
  43. 7: 'var(--sp-6)', // 24
  44. 8: 'var(--sp-8)', // 32
  45. 9: 'var(--sp-8)',
  46. 10: 'var(--sp-8)',
  47. 11: 'var(--sp-8)',
  48. 12: 'var(--sp-8)',
  49. },
  50. fontSize: {
  51. // 锁定 8 档(原型刻度)—— 底座 text-sm/text-xs 等自动对齐
  52. xs: 'var(--fs-12)', // 12(原型 --fs-sm)
  53. sm: 'var(--fs-15)', // 14(原型 --fs-body,正文基准)
  54. base: 'var(--fs-17)', // 16
  55. lg: 'var(--fs-20)', // 20
  56. xl: 'var(--fs-26)', // 28
  57. '2xl': 'var(--fs-42)', // 36
  58. '3xl': 'var(--fs-42)',
  59. '4xl': 'var(--fs-42)',
  60. },
  61. extend: {
  62. // 语义 token → Tailwind 工具类(bg-surface / text-ink / border-edge / bg-primary ...)
  63. // 值全部引用 CSS 变量,明暗与配色切换由 _base.scss / _palette.scss 控制。
  64. // 🔴 colors 与 ui-kit/tailwind.config.js 同名同源(不新增前缀)。
  65. colors: {
  66. canvas: 'var(--canvas)',
  67. surface: {
  68. DEFAULT: 'var(--surface)',
  69. 2: 'var(--surface-2)',
  70. hover: 'var(--surface-hover)',
  71. active: 'var(--surface-active)',
  72. },
  73. rail: 'var(--rail-surface)',
  74. edge: {
  75. DEFAULT: 'var(--edge)',
  76. strong: 'var(--edge-strong)',
  77. },
  78. ink: {
  79. DEFAULT: 'var(--ink)',
  80. 2: 'var(--ink-2)',
  81. },
  82. muted: 'var(--muted)',
  83. faint: 'var(--faint)',
  84. inverse: 'var(--inverse)',
  85. primary: {
  86. DEFAULT: 'var(--primary)',
  87. hover: 'var(--primary-hover)',
  88. active: 'var(--primary-active)',
  89. subtle: 'var(--primary-subtle)',
  90. content: 'var(--primary-content)',
  91. ring: 'var(--primary-ring)',
  92. },
  93. success: {
  94. DEFAULT: 'var(--success)',
  95. subtle: 'var(--success-subtle)',
  96. },
  97. danger: {
  98. DEFAULT: 'var(--danger)',
  99. subtle: 'var(--danger-subtle)',
  100. },
  101. warning: {
  102. DEFAULT: 'var(--warning)',
  103. subtle: 'var(--warning-subtle)',
  104. },
  105. info: {
  106. DEFAULT: 'var(--info)',
  107. subtle: 'var(--info-subtle)',
  108. },
  109. // 导航族(深墨 / 浅色随配色变)—— 不只用于导航,但仅限导航语义
  110. nav: {
  111. DEFAULT: 'var(--nav-surface)',
  112. ink: 'var(--nav-ink)',
  113. text: 'var(--nav-text)',
  114. muted: 'var(--nav-muted)',
  115. line: 'var(--nav-line)',
  116. hover: 'var(--nav-hover)',
  117. active: 'var(--nav-active)',
  118. accent: 'var(--nav-accent)',
  119. brand: 'var(--nav-brand)',
  120. 'on-brand': 'var(--nav-on-brand)',
  121. },
  122. metric: 'var(--metric-fill)',
  123. },
  124. // 阴影改引变量(修复底座硬编码 rgb(15 23 42/…) 不受 .dark 影响的缺陷)
  125. boxShadow: {
  126. soft: 'var(--shadow-soft)',
  127. card: 'var(--shadow-card)',
  128. pop: 'var(--shadow-pop)',
  129. overlay: 'var(--shadow-overlay)',
  130. },
  131. // 字号映射:锁定 8 档(补齐底座未映射的缺口 —— 盘点缺口 3)
  132. // 间距映射:7 级(盘点缺口 2);注意 Tailwind 默认间距仍可用,此处只加语义别名
  133. // 圆角映射:锁定 4 档
  134. // z-index 映射:禁止魔数(引用底座 --z-* 九级令牌)
  135. zIndex: {
  136. affix: 'var(--z-affix)',
  137. float: 'var(--z-float)',
  138. mask: 'var(--z-mask)',
  139. popover: 'var(--z-popover)',
  140. modal: 'var(--z-modal)',
  141. 'context-menu': 'var(--z-context-menu)',
  142. palette: 'var(--z-palette)',
  143. preview: 'var(--z-preview)',
  144. toast: 'var(--z-toast)',
  145. },
  146. transitionDuration: {
  147. fast: 'var(--motion-fast)',
  148. page: 'var(--motion-page)',
  149. detail: 'var(--motion-detail)',
  150. panel: 'var(--motion-panel)',
  151. exit: 'var(--motion-exit)',
  152. },
  153. transitionTimingFunction: {
  154. standard: 'var(--ease-standard)',
  155. },
  156. },
  157. },
  158. plugins: [],
  159. };