設計變數 Design Tokens


什麼是 Design Tokens

Lucent UI 所有元件的視覺數值(顏色、字級、間距、圓角、陰影)都不是寫死的,而是引用 :root 上的一組 CSS 變數。這代表:

色彩

變數 預設值 用途
--lct-primary #d32f2f 品牌主色(按鈕、重點)
--lct-primary-hover #b71c1c 主色 hover
--lct-primary-active #a31515 主色按下
--lct-primary-soft rgba(211,47,47,.3) 停用 / 次要
--lct-primary-tint rgba(211,47,47,.08) 淡背景
--lct-ink #2b2b2b 主要文字
--lct-text-secondary #5b5b5b 次要文字(項數等)
--lct-muted #8a8278 placeholder / 停用文字
--lct-surface #ffffff 卡片 / 面板底
--lct-surface-hover #fafafa 次要按鈕 hover 底
--lct-bg #f5f5f7 頁面底
--lct-border #d2d2d7 邊框
--lct-hover-tint rgba(0,0,0,.05) 透明 hover 底
--lct-scrim-bg rgba(0,0,0,.4) Modal 遮罩底
--lct-success / --lct-error / --lct-warning / --lct-info 語意色(通知 / Toast)

字級與行高

依 Figma 定義為四階:

變數 大小 / 行高 用途
--lct-fs-caption / --lct-lh-caption 11 / 16 註記、項數
--lct-fs-sm / --lct-lh-sm 12 / 18 小字、按鈕文字
--lct-fs-base / --lct-lh-base 14 / 20 內文
--lct-fs-title / --lct-lh-title 16 / 22 標題

字重:--lct-fw-regular (400)、--lct-fw-medium (500)、--lct-fw-bold (700)。

間距

以 4 的倍數為基礎的階梯,元件內部一律引用這些變數:

--lct-space-1: 4px · -2: 6px · -3: 8px · -4: 10px · -5: 12px · -6: 16px · -7: 20px · -8: 24px

尺寸

變數 用途
--lct-shell-width 420px 外掛面板寬
--lct-header-h 68px Header 高度
--lct-control-h 32px 搜尋框 / 搜尋鈕等控制項高度

除了全域 token,各元件的尺寸(卡片寬、縮圖比例、圖示大小…)也都是元件層級變數(如 --lct-mcard-*--lct-bcard-*--lct-icon-size),可在任意層覆寫,詳見各元件章節。

圓角與陰影

變數 用途
--lct-radius-sm 6px 按鈕、輸入框、小 chip
--lct-radius-md 8px 卡片、清單列
--lct-radius-panel 12px Modal / Dialog 面板
--lct-radius-pill 999px 膠囊徽章
--lct-shadow-sm 0 1px 2px rgba(12,12,13,.05) 面板細陰影
--lct-shadow-md 0 4px 12px rgba(12,12,13,.1) 下拉、Toast
--lct-shadow-lg 0 8px 24px rgba(12,12,13,.14) Modal

客製化:換主色

在你自己的樣式(載入 lucent-ui.css 之後)覆寫變數即可:

:root {
  --lct-primary:       #1565c0;   /* 換成藍色主色 */
  --lct-primary-hover: #0d47a1;
  --lct-font-family:   'Inter', 'Noto Sans TC', sans-serif;
}

不要直接改元件的 class(例如去覆寫 .lct-btn--primarybackground)。永遠改變數,才能保持整套系統一致、升級時不衝突。

客製化:局部主題

變數也可以只作用在某個容器內,做出區塊級的主題:

<div class="lct-root" style="--lct-primary:#2e7d32">
  <!-- 這個區塊裡的主色都變綠色 -->
  <button class="lct-btn lct-btn--primary">套用</button>
</div>