安裝與使用
Mimosa 可直接透過 npm 安裝,並於 Tailwind v4 專案中載入使用。
npm install mimosa-design-system tailwindcss
建議使用方式
import "mimosa-design-system/tailwind.css";
包含:
Design Tokens
Tailwind layer
Mimosa 元件樣式
其他載入方式
// 僅載入 Design Tokens
import "mimosa-design-system/tokens.css";
<!-- GitHub Pages / 靜態網站 -->
<link rel="stylesheet" href="./dist/mimosa.css" />
元件 (Components)
以下為目前已提供的元件與對應樣式檔案。
色彩 · Color tokens
Mimosa 的 Color Tokens 依照介面用途分類,包含 Primary、Background、Secondary 與 State Colors。
色彩系統以 Semantic Tokens 為主,避免在元件中直接使用 Primitive Colors。
Primary Colors
Primary Colors 用於品牌主色、深色背景與主要介面元素。
元件樣式會優先使用 Semantic Tokens,以維持整體色彩一致性。
primary-darkest
--psy-color-primary-darkest
primary-darker
--psy-color-primary-darker
primary
--psy-color-primary
primary-light
--psy-color-primary-light
on-dark
--psy-color-primary-on-dark
on-dark-muted
--psy-color-primary-on-dark-muted
Secondary colors
對應 NASA「輔助/強調色」:用於按鈕、導覽漸層、標籤等;應節制使用,避免同一視野多個同等強度焦點。
amber
--psy-color-secondary-amber
lime
--psy-color-secondary-lime
magenta
--psy-color-secondary-magenta
orange
--psy-color-secondary-orange
Background colors
大面積區塊與半透明洗色;相鄰區塊須維持可辨的對比(參考 NASA background 段落)。
page top
--psy-color-bg-page-top
page bottom
--psy-color-bg-page-bottom
panel
--psy-color-bg-panel
panel muted
--psy-color-bg-panel-muted
wash neutral
--psy-color-bg-wash-neutral
wash orange
--psy-color-bg-wash-orange
wash lime
--psy-color-bg-wash-lime
wash magenta
--psy-color-bg-wash-magenta
Tertiary colors
對應 NASA tertiary:列表列、次要資訊區,不應壓過 Primary/Secondary 層級。
city row
--psy-color-tertiary-row-city
feed 1
--psy-color-tertiary-row-feed-1
feed 2
--psy-color-tertiary-row-feed-2
feed 3
--psy-color-tertiary-row-feed-3
Special state colors
對應 NASA Special state colors :焦點環、造訪過連結、互動遮罩。
visited
--psy-color-visited
hover overlay
--psy-color-hover-overlay
active overlay
--psy-color-active-overlay
Semantic Tokens(介面語意)
Mimosa 在 Color Tokens 之上,額外建立一層 Semantic Tokens。
例如:
--psy-color-secondary-lime
代表品牌識別的色彩定義;而:
--psy-action-primary-bg
代表元件的介面語意。
這樣未來調整品牌色彩時,只需要修改 Color Tokens,既有元件的介面語意仍可維持一致。
以下為常用對照:
介面語意
Token
主要引用
頁面上/下背景
--psy-surface-page-base/deep
--psy-color-bg-page-top/bottom(漸層最底偏黑,小元件勿單用 deep)
深底區塊(kicker/hero)
--psy-surface-on-dark/elevated
primary-darker 混 primary 約 26%;配 .psy-kicker-on-dark
卡片/列表列底
--psy-surface-container-lowest → low → container → high → highest
同頁面用「低/中/高」分層;其中 low 使用 color-mix(in srgb, #676278 88%, var(--psy-color-bg-panel-muted)) 作為過渡層
流程型內容卡片
--psy-surface-container(預設)
同一流程步驟(如 01~04)維持同層;僅警示/危險區塊(如刪除)使用語意強化底色
Epic 主標題區(Hero)
--psy-surface-hero-epic
所有 Epic 分頁(account/event/pair/chat/security/admin/game/coin)主標題區統一使用此底色,避免跨頁語意不一致
活動列表列底色(Event list item)
--psy-surface-event-list-item
活動系統頁的列表列使用固定底色 #f6b07f,確保事件資訊列與一般卡片底有明顯區隔
活動狀態標記(US-009)
--psy-status-going-*/--psy-status-interested-*/--psy-status-clear-*
Going / Interested / 取消標記需使用獨立語意色,不可共用單一預設 chip 樣式
聊天列表列(display vs controls)
--psy-surface-chat-room-item/--psy-surface-chat-push-item
聊天室列表屬 display/notice;推播通知屬可設定 controls,需使用不同底色與可操作元素(如 pill/switch)區分語意
聊天訊息氣泡(Outgoing)
--psy-surface-chat-bubble-outgoing
發送方訊息氣泡使用固定底色 #f39f9f,需與 incoming 氣泡有清楚區隔
代幣商店一般清單列底色
--psy-surface-coin-list-item
代幣商店的說明/流程清單列使用固定底色 #fdfdfd,與可購買方案列做視覺區分
管理處置按鈕語意
--psy-action-warning-*/--psy-action-restrict-*/--psy-action-success-*/--psy-action-info-*/--psy-action-neutral-*
管理後台需按風險層級分色:danger=不可逆處置、warning=警示、restrict=暫時禁聊(#ae3d3d)、success=恢復、info=標記狀態(#e7de5f)、neutral=解除限制
內文
--psy-text-primary
--psy-color-primary-on-dark
邊框/硬陰影
--psy-border-strong
--psy-color-base
主要/次要行為底色
--psy-action-primary-bg 等
主要:--psy-color-secondary-lime;次要:--psy-color-secondary-amber
造訪過連結
--psy-text-link-visited
--psy-color-visited
提示區塊(Alerts)
--psy-alert-success-bg 等
萊姆/琥珀/洋紅/橘 + panel 混色
表單欄位(Form controls)
--psy-form-input-bg/--psy-form-input-border 等
深底欄位底與字色;錯誤/成功外框沿用 --psy-alert-error-accent/success
Primitive 原料(底層 hex)
僅在此層維護色值;調色時改 primitive,上層 --psy-color-* 與語意 token 會一併連動。
#16001e
--psy-primitive-void
#18002d
--psy-primitive-deep-base
#2a0146
--psy-primitive-deep-purple
#5c1578
--psy-primitive-panel
#772589
--psy-primitive-panel-soft
#fff6ff
--psy-primitive-text
#fff2f9
--psy-primitive-text-muted
#ffcc00
--psy-primitive-amber
#ccff00
--psy-primitive-lime
#ff3399
--psy-primitive-magenta
#ff6600
--psy-primitive-orange
#f5faf0
--psy-primitive-surface-soft-mint
--psy-primitive-notification-unread-bg · 淺綠
--psy-primitive-notification-older-bg · 淺橘
#ffffff
--psy-primitive-white
語意漸層(Semantic gradients)
導覽、hero、面板洗色、日期塊與頭像等區塊用;數值定義於 tokens.css。
基本卡片 (.card)用 --psy-gradient-card-surface + 淡紫
--psy-surface-card;--psy-gradient-card-wash(洋紅/橘色)僅供 mega menu、上傳區等裝飾。
Carousel 投影片 請用 --psy-carousel-slide-bg(#f5faf0),勿疊 card-wash。
通知面板 列底色用 --psy-notification-*(淺綠/中性/淺橘),勿用 card-wash 或 cyan/洋紅底。
--psy-gradient-nav
--psy-gradient-hero-panel
--psy-gradient-panel-wash + panel
--psy-gradient-date-block
--psy-gradient-avatar
Text accessibility
對齊 NASA 文件
Text accessibility
段落:內文與可點擊元件應維持足夠對比;下列為本主題預設的「前景/背景」組合 token,自訂時請以對比工具複驗。
用途
Token
深紫底上的主內文
--psy-a11y-fg-default-on-page
深紫底上的次要內文
--psy-a11y-fg-muted-on-page
淺色卡片/表格/手風琴上的主內文
--psy-a11y-fg-default-on-card(同 --psy-text-on-light)
淺色卡片上的次要內文
--psy-a11y-fg-muted-on-card(同 --psy-text-muted-on-light)
提示列(Alert)主/次內文
--psy-a11y-fg-on-alert/--psy-a11y-fg-muted-on-alert
提示列圖示(依 success/warning 等)
--psy-alert-*-icon-bg + --psy-alert-*-icon-fg
淺底 kicker/eyebrow
--psy-a11y-fg-kicker-on-light
深紫底 kicker
--psy-a11y-fg-kicker-on-dark(螢光萊姆,僅深底)
螢光/淺飽和底上的字
--psy-a11y-fg-on-accent(同 --psy-text-on-dark)
實作備註
WCAG 建議一般內文對比至少約 4.5:1。鍵盤焦點請使用 :focus-visible 與
--psy-color-focus/--psy-focus-ring-*。造訪過連結使用
--psy-text-link-visited。設計系統文件頁使用中性 --ds-doc-*,與產品 token 分離。
字體與字階 · Typography
目標是建立「可讀、可掃描、可維護」的排版系統。字族沿用現有 Psychedelic 主題(Display:Baloo 2 ;Body/UI:Noto Sans TC ),
並吸收 NASA Typography 的類型分工、line length 與 vertical rhythm 概念。
字體家族 · Typefaces
Baloo 2
用於 display / heading / CTA,傳達節奏感與記憶點。
Aa 123
Noto Sans TC
用於段落、導航、表單與說明,優先可讀性與多語穩定性。
Aa 123 這是一段介面內文示例。
字階層級 · Hierarchy
Kicker 在淺底請用 .psy-kicker;深紫區塊用 .psy-kicker-on-dark + 底
--psy-surface-on-dark(標準深紫,勿用 page-deep 近黑紫)。勿在淺底卡片上直接用
--psy-kicker-text。
Display · --psy-font-size-display
Events, taste, discovery.
H2 · --psy-font-size-h2
Featured events
H3 · --psy-font-size-h3
Warehouse Resonance
Subtitle · --psy-font-size-subtitle
延續硬派卡片分區,螢光色塊拼貼與深紫層次並存。
Body · --psy-font-size-body
內文段落:活動地點、簡短描述、列表次要資訊。
Kicker · --psy-font-size-small + letter-spacing
PSYCHEDELIC PALETTE / NEO-BRUTALISM BLOCKS
Caption · --psy-font-size-caption
MAY · 11px 範例
Button 字級 / Brand
Browse events
BassLink
排版節奏 · Typesetting & Vertical rhythm
內文容器建議控制在 66ch(NASA 建議 50–75 字元)。標題/段落採固定節奏間距,減少頁面密度跳動。
段落對齊:預設左對齊
可讀性優先。長文請維持一致起點,讓眼睛能快速回到下一行。若是說明型內容,避免過窄欄寬造成換行噪音,也避免過寬欄造成視線迷航。
行長建議:50–75 字元(理想約 66)
這段文字示範 `max-width: 66ch` 的閱讀節奏。當內容較長時,行長與行高會直接影響理解效率;適當白空間可降低閱讀疲勞。
建議:長文段落以 `line-height` 1.6–1.8,短訊息可略緊。
Vertical rhythm 準則(設計語言)
參考近期排版實務:網站不必硬套 baseline grid;優先使用可重複的 spacing scale,並依內容型態使用不同節奏。
原則 1:以間距尺度為主,不迷信 baseline。 baseline grid 能幫助對齊,但不會自動帶來和諧;真正的節奏來自對比、層級與重複距離。
原則 2:雙尺度策略。 本專案使用同一 token 系統下的雙節奏:內容閱讀節奏(長文區塊,偏寬鬆)與
介面模組節奏(卡片/表單,偏緊湊)。
原則 3:長文以行高倍數建立 rhythm。 內文行高為 1.5 時,段落與小節間距優先採
1x / 1.5x / 2x line-height 對應值,避免任意像素。
原則 4:UI 元件採 8pt/4pt 軟格線。 模組高度與內距優先落在 4/8/12/16/24/32 類型級距;允許例外,但需能對應既有 token。
原則 5:跨平台容忍測量差異。 Web 以 line-height 為自然度量;若與原生 baseline 略有誤差,以可維護一致性優先,不做脆弱微調。
建議檢核:同層級區塊是否使用同一組垂直間距?長文段落是否維持 66ch 與穩定行高?文字是否能放大至 200% 仍保持節奏?
連結與清單 · Links & lists
這是一般連結:Explore events
這是造訪過連結示例:Visited link
無序清單 · ul.psy-list
資訊點列舉,一句一項
句首大寫與一致標點
避免過長敘事型單點
左側萊姆方塊為 ::before marker,與 .psy-list__text 以 grid 兩欄分開(欄間距含硬陰影)。
有序清單 · ol.psy-list--ordered
步驟或排名
每步驟具體可執行
避免混入不相關描述
琥珀編號徽章(1、2、3)由 counter + ::before 產生,勿與內文重疊。
實作 · Product classes
產品頁可使用 prose-content(66ch 內容寬度)與 rhythm-stack(垂直節奏容器)。清單請用
ul.psy-list(萊姆方塊 ::before)/ol.psy-list--ordered(琥珀編號徽章);每列
li 請包 <span class="psy-list__text">,以 grid 分欄(::before 第 1 欄、內文第 2 欄);欄間距為
--psy-list-*-marker-gap + --psy-list-marker-trail(陰影/粗框外溢)。勿用 absolute 壓字。勿裸用
ul/ol。連結狀態沿用
--psy-text-link-*;深底內容區可搭配 link-on-dark。長文區優先採閱讀節奏(line-height 倍數);
卡片/表單區優先採 token 尺度(4/8pt 家族)。
卡片 · Cards
將儀表板、設定頁或表單拆成較小的內容區塊。結構對齊
Tailwind UI — Cards :
外層 .card 負責 flex 欄式版面與 overflow;底色為淡紫 elevated surface(
--psy-gradient-card-surface + --psy-surface-card),內文請用
--psy-text-on-light/--psy-text-muted-on-light,勿與深紫頁面的 --psy-text-primary 混用。粗框/硬陰影見
tailwind/cards.css。版面間距、響應式欄位請用 Tailwind utility(如
grid gap-psy-6、max-w-psy-prose)。
基本卡片 · Basic card
單一 .card__body;適合圖表、表格或短表單容器。預設底為 Mimosa 淡紫(
--psy-surface-card),勿疊洋紅/橘色 --psy-gradient-card-wash。
活動報名趨勢
過去 7 日 · 台北場次
內容區可放圖表、表格或表單。外層用 utility 控制寬度與外距,例如
class="card max-w-lg w-full"。
淡紫次區塊 · Muted body / footer
修飾 class card--body-muted、card--footer-muted 對應 Tailwind UI 的 gray body/gray
footer 概念,但 Mimosa 以淡紫階 區分(--psy-surface-card-header 略深、
--psy-surface-card-muted 更淺),勿混 cyan/amber 等螢光 secondary 當底。
頁首 --psy-surface-card-header(略深淡紫);內文
--psy-surface-card-muted(更淺淡紫),與外層 --psy-surface-card 對比。
Well · 內凹區塊
.well 用於卡片內的子區塊或灰底頁面上的次要容器;無硬陰影,邊框較細。可加
well--on-muted 放在灰底舞台。
Well on gray — 適合篩選列、輔助說明或次要表單群組。
實作 · Implementation
載入 tailwind.css(已含 cards.css)。與 .psy-panel 不同:card 提供 header/body/footer
結構;單純色塊面板仍可用 .psy-brutal-block.psy-panel。
<!-- Tailwind 管版面;card 管結構與 Mimosa 皮膚 -->
<div class="grid gap-psy-6 lg:grid-cols-2">
<article class="card w-full">
<header class="card__header">
<h3 class="card__title">標題</h3>
</header>
<div class="card__body">…</div>
<footer class="card__footer flex gap-psy-4">
<button type="button" class="psy-brutal psy-btn psy-btn--primary">確定</button>
</footer>
</article>
</div>
<div class="well max-w-psy-prose">次要區塊</div>
覆疊層 · Modal & Drawer
結構由 overlays.css 提供;版面(置中、flex、gap)請用 Tailwind utility。面板使用
--psy-overlay-surface 淺底 + --psy-overlay-fg 內文。開關由 host 以
hidden 或 JS 控制。
對話框 · Modal
破壞性確認(刪除等)的主動作請用 psy-btn--danger(洋紅/粉紅語意,對齊
--psy-alert-error-accent);勿 用 psy-btn--primary(萊姆綠=送出/通過)。
取消維持預設 psy-btn(琥珀次要)即可。
抽屜 · Drawer
Popover
定位資訊泡泡(非選單清單);與 Dropdown 不同。修飾類 popover--bottom、
popover--start、popover--end。開關由 host JS(hidden、
aria-expanded);關閉建議支援 Esc 與點擊外部。 靜態展示同 Tooltip,使用 .ds-anchor-grid--popover(docs.css)flex 置中觸發元素。
簡短說明用 role="dialog" + aria-labelledby;勿把唯一資訊只放在 popover 內。
觸發按鈕綁定 aria-expanded、aria-controls;關閉時還原焦點至觸發元素。
支援 Esc 與點擊外部關閉(host JS);與 Dropdown 選單語意勿混用。
通知面板 · Notification center
持久型通知列表(非 Toast)。建議放在 drawer--right 內;class 見
navigation-ui.css 的 .notification-list。底色依已讀與時間 分三層(
--psy-notification-*):最新未讀=淺綠、當日已讀=中性 card、昨日以前=淺橘。勿用 cyan/洋紅/粉紫 wash(易像 info 或錯誤)。
--psy-notification-unread-bg · 淺綠
--psy-notification-read-bg · 當日已讀
--psy-notification-older-bg · 淺橘
建議放在 drawer--right;列表用 .notification-list。
語意修飾類 (--psy-notification-* token):
notification-list__item--unread 最新未讀 → 淺綠;
當日已讀 → 預設中性 card;
notification-list__item--older 昨日以前 → 淺橘。勿用洋紅/粉紫底(易聯想錯誤)。
未讀指示點 .notification-list__dot 為萊姆綠;已讀/較舊項目隱藏圓點。
每則標題用 <p> 或連結;時間用 <time datetime>。
即時彈出仍用 Toast ;此為持久型通知中心。
回饋 · Toast / Loading
與 Alert 不同:Toast 為短暫、非阻塞回饋;Spinner/Progress/Skeleton 用於載入與進度。見
feedback.css。
Toast
Spinner
Progress
Skeleton
Empty state
清單空態、搜尋無結果、權限不足等;見 feedback.css 的 .empty-state。
說明原因並提供行動出口(按鈕或連結)。
版面用 Tailwind(grid、gap-psy-*);皮膚在 .empty-state(feedback.css)。
表格內簡短空態可用 .data-table__empty(tables.css);完整空態區塊用本元件。
標題說明「為何是空的」;至少一個明確 CTA(主按鈕或次要連結)。
導覽 UI · Tabs / Menu / …
頁內導覽與列表控制;見 navigation-ui.css。表單用 select 仍見 Form controls。
Tabs
未選取分頁的 hover/focus 使用 --psy-tab-hover-*(實心底 + 黑框 + 硬陰影);選取中則為
--psy-tab-active-*。勿以 transparent 混色當 hover 底。
Dropdown
選單項 hover 使用 --psy-elevated-hover-*(中性淺底 + 黑框/硬陰影,與 tabs 相同);基底為
--psy-surface-card,勿 混螢光 secondary 色當選單底。刪除項加
dropdown__item--danger。
Breadcrumb
首頁 /
活動 /
春季音樂祭
Toggle · Switch
開啟推播通知
Tooltip
簡短補充說明;見 navigation-ui.css 的 .tooltip。預設在觸發元素上方(
tooltip--bottom、tooltip--left、tooltip--right 可改方向)。
生產環境請以 hidden + hover/focus 顯示,並綁定 aria-describedby。
文件靜態展示請用下方 .ds-anchor-grid(docs.css)預留錨點空間,勿把多個
tooltip--static 直接排在同一段落。
互動示範(hover/focus 顯示;生產環境預設,勿加 tooltip--static):
將滑鼠移入或聚焦
生產環境預設行為
觸發元素需可聚焦(button、a 或 tabindex="0")。
Tooltip 內容容器使用 role="tooltip";勿把重要資訊只放在 tooltip(行動裝置無 hover)。
文件截圖用 tooltip--static 常駐顯示;產品頁請用 hidden + JS 或依賴 hover/focus-within。
可用性 · Usability
適合使用 Tooltip
對 icon-only 按鈕或縮寫提供補充文字 (最多一兩句;勿放重要操作說明)。
UI 空間受限時,做為標籤的延伸說明,避免版面過於擁擠。
不適合使用 Tooltip
行動裝置為主的介面:touch 無 hover,tooltip 永遠不顯示。
說明文字超過兩行:改用 Popover 或展開式說明區塊。
需要使用者與說明內容互動(選取文字、點連結):tooltip 不可聚焦,無法互動。
實作說明 · Implementation
載入 navigation-ui.css(含於 tailwind.css)。生產環境:
.tooltip__content 加 hidden 屬性預設隱藏;hover/focus 時以 JS 移除
hidden。aria-describedby 指向 tooltip 的 id。
文件截圖靜態展示用 .tooltip--static(勿帶入產品頁)。
<!-- 上方(預設) -->
<span class="tooltip">
<button type="button" class="psy-brutal psy-btn"
aria-describedby="tip-save">儲存</button>
<span class="tooltip__content" id="tip-save" role="tooltip" hidden>
Ctrl + S
</span>
</span>
<!-- 下方 -->
<span class="tooltip tooltip--bottom"> … </span>
<!-- 左/右 -->
<span class="tooltip tooltip--left"> … </span>
<span class="tooltip tooltip--right"> … </span>
相關 tokens(tokens.css):
--psy-tooltip-bg — 背景色(對齊 --psy-color-base)
--psy-tooltip-fg — 文字色(--psy-primitive-text)
--psy-tooltip-max-width — 最大寬度(預設 16rem)
Divider
區塊分隔線 token:--psy-divider-color。通用元件 .psy-divider(
components.css);語意化區塊間距可用 .divider(navigation-ui.css)。
區塊 A 與 B 之間的水平分隔(.psy-divider)。
語意化區塊間距(.divider,navigation-ui.css)。
行內垂直分隔:
項目一 項目二 項目三
Chip / Tag
可點擊或群組的標籤/篩選 pill;版面用 Tailwind(flex、gap-psy-*),皮膚在
components.css(.psy-chip)與 flow-page.css(.psy-flow-chip)。
與狀態標籤 .label 不同:label 為非互動狀態徽章,chip 用於導覽或篩選。
基本 Chip
可選取 · Flow chip
多選篩選使用 .psy-flow-chip;選取態加 .psy-flow-chip--selected。裝飾標籤(非互動)可用
.psy-flow-tag。
電子
嘻哈
獨立
NEW
可訪問性 · Accessibility
可選取 chip 請用 button + aria-pressed(或 role="checkbox" + aria-checked)。
導覽用途用 a 並提供明確連結目標;勿把 .label 當成可點擊 chip。
群組加 role="group" 與 aria-label 描述篩選語意。
可用性 · Usability
三種變體的使用時機
.psy-chip(components.css)— 靜態標籤或導覽連結;配合 psy-brutal 加邊框陰影。
.psy-flow-chip(flow-page.css)— 多選篩選;選取態加 .psy-flow-chip--selected,須搭配 aria-pressed。
.psy-flow-tag(flow-page.css)— 純裝飾標籤(NEW、HOT 等),非互動,勿加點擊事件。
與 .label 的區別
.label 為狀態徽章 (進行中、已結束),非互動。
Chip 用於篩選或導覽 ,label 用於狀態顯示 ;兩者語意不同,不可互換。
實作說明 · Implementation
載入 components.css 與 flow-page.css(均含於 tailwind.css)。
版面(間距、換行)使用 Tailwind utility(flex flex-wrap gap-psy-3)。
<!-- 靜態 / 導覽 chip -->
<a class="psy-brutal psy-chip psy-focus-ring" href="/all">全部</a>
<span class="psy-brutal psy-chip">唯讀標籤</span>
<!-- 多選篩選(flow chip) -->
<div class="flex flex-wrap gap-psy-3" role="group" aria-label="風格篩選">
<button type="button"
class="psy-brutal psy-flow-chip psy-flow-chip--selected"
aria-pressed="true">電子</button>
<button type="button"
class="psy-brutal psy-flow-chip"
aria-pressed="false">嘻哈</button>
</div>
<!-- 裝飾標籤(非互動) -->
<span class="psy-flow-tag">NEW</span>
進階元件 · Extended
低頻但常見的資料與表單延伸;版面用 Tailwind utility,皮膚在
avatar.css、forms-extended.css、data-display.css。淺色 elevated 區塊請用
--psy-text-on-light/--psy-text-muted-on-light,勿混用頁面級 --psy-text-primary。
Range · Slider
原生 input[type="range"] + .range;track/thumb 由 --psy-range-* token 控制。單軸可
oninput 更新 .range-field__value;雙端區間 需 host JS 同步兩支
input(下限不可大於上限)並寫入顯示區,見下方 data-range-dual 範例。
雙端區間(兩支 .range)+ 刻度 .range-ticks:
File upload
整區可點擊;隱藏 input[type="file"] 覆蓋於 .file-upload。hover/focus-within 走
--psy-elevated-hover-*。
拖曳檔案至此,或點擊選擇
PNG、JPG 或 PDF,單檔上限 10MB
Combobox · Autocomplete
帶建議下拉的輸入;見 forms-extended.css。控制列底色用
--psy-input-group-bg(淺底 elevated,與 input group 相同),勿用深頁用的
--psy-form-input-bg。與 Search bar 不同:combobox 需
role="combobox"、aria-expanded、aria-controls 綁定 listbox。
鍵盤導覽與 aria-activedescendant 由 host JS 實作。
多選 tag 模式(已選項目 + 輸入框):
輸入使用 role="combobox"、aria-autocomplete、aria-expanded、aria-controls。
建議清單用 role="listbox" + role="option";鍵盤高亮用 aria-activedescendant(host JS)。
多選 tag 的移除鈕需具體 aria-label(例如「移除標籤 音樂」)。
Avatar · Stack
尺寸 --sm|lg|xl;圖片用 .avatar__img;疊加列用 .avatar-stack。
S
MJ
LG
線上狀態 .avatar__status--online、可點擊 .avatar-wrap--link:
Timeline
垂直時間軸;節點 .timeline__marker,連線 --psy-timeline-line。
報名開放
參與者可提交表單並上傳證明文件。
2026-05-01
審核完成
主辦方已核准 128 筆申請。
2026-05-10
活動開始
現場簽到與即時通知將同步啟用。
2026-05-15
Stat / metric card
獨立 .stat-card(亦可與 .card 組合)。卡片底為淡橘
--psy-stat-surface*(中性數據;非 warning 黃、非 info 色條橙);漲跌 pill 用
--psy-semantic-trend-*-fg/*-bg,期間用
.stat-card__delta-context(muted)。
活躍使用者
12,480
+8.2%
較上週
轉換率
3.4%
−0.3%
較上月
平均停留
4m 12s
+12s
Stepper · 步驟指示
多步驟流程進度;見 data-display.css。狀態 token:--psy-step-*。目前步驟用
aria-current="step";已完成用 data-step-state="completed"。進度變更建議搭配
aria-live="polite" 區域公告。
垂直佈局 stepper--vertical:
使用 <nav> + <ol>;目前步驟 aria-current="step",已完成 data-step-state="completed"。
步驟變更時以 aria-live="polite" 區域公告進度(host JS)。
版面用 Tailwind(max-w-*);連線與指示器樣式在 .stepper(data-display.css)。
Carousel · Content slider
僅提供佈局與樣式(scroll-snap + indicator);滑動與焦點管理由 host JS 實作。
若自動播放,須提供暫停控制(WCAG 2.2.2)。投影片底為 --psy-carousel-slide-bg(
#f5faf0 中性淺綠;勿用 --psy-gradient-card-wash,易偏粉紫)。見
data-display.css。
Neon Warehouse
合成器與工業節奏主題夜間派對。
Cosmic Rooftop
露天 chill 電子與社交互動。
Basement Pulse
地下派對與即時簽到。
容器 aria-roledescription="carousel";投影片以 aria-label 或標題區分。
自動播放須提供暫停(WCAG 2.2.2);尊重 prefers-reduced-motion(CSS 已關閉 smooth scroll)。
滑動、indicator 切換與焦點管理由 host JS 實作;樣式僅提供 scroll-snap 佈局。
提示 · Alerts
用來告知使用者重要或具時效 的系統/表單狀態。結構與角色對齊
NASA Web Design System — Alerts ;樣式沿用 Neo-Brutalism
粗框與硬陰影;底色為洗白 elevated(--psy-alert-*-bg),內文請用
--psy-alert-fg/--psy-alert-fg-muted。圖示為狀態色圓底 + 高對比符號(--psy-alert-*-icon-bg/
icon-fg),勿 對 .alert__icon 使用 color: inherit。產品 class 見
tailwind/product.css。
狀態列 · Success / Warning / Error / Info
成功(萊姆)、警告(琥珀)、錯誤(洋紅)、資訊(橘)。錯誤且非互動內容時可設 role="alert"(見可訪問性小節)。
✓
Success Status
操作已完成。如需說明可附 連結範例 。
!
Warning Status
請留意:此變更可能影響既有設定,建議先備份。
!
Error Status
無法完成請求。請檢查網路或 稍後再試 。
i
Information Status
系統將於維護時段短暫停用,時程已公告於最新消息。
i
Information Status — Paragraph width
多行說明:對齊 NASA 的 paragraph width 變體,限制內文欄寬以利長篇可讀性。Neque porro quisquam est
qui dolorem ipsum quia dolor sit amet,實務上應改寫為簡短中文,並在必要時提供復原步驟或聯絡方式。
深底上的提示 · On dark
與產品頁相同的紫底;深底版改用「淺底卡 + 左側色條 + 黑底圖示」提高辨識度。
實作 · Implementation
文件頁使用 ds-alert;產品頁建議使用 alert + 狀態修飾 class,與下列標記對等。
<div class="alert alert-success" role="status">
<span class="alert__icon" aria-hidden="true">✓</span>
<div class="alert__body">
<h4 class="alert__heading">Success</h4>
<p class="alert__text">…</p>
</div>
</div>
<div class="alert alert-error" role="alert">…</div>
可訪問性 · Accessibility
節錄並中譯 NASA Alerts 文件。
時效性高、且非互動 的重要訊息可使用 ARIA role="alert",讓輔助科技及時朗讀;若為需操作的可互動對話,改用
alertdialog。
勿將提示在視覺上完全隱藏後才動態顯示給部分使用者——舊版輔助科技仍可能讀到被隱藏的內容。
可用性 · Usability
節錄 NASA Alerts — When to use / Guidance。
適合使用
通知使用者系統狀態(錯誤、警告、一般更新),不一定需要回應。
表單送出後的驗證摘要,或成功完成的確認訊息。
可改用其他型態
長表單應搭配欄位旁內聯錯誤 ,勿僅依賴頁頂一則 alert。
會破壞性刪除 等行為,請用確認對話框等更強介入,而非僅文字提示。
撰寫要點
說明使用者下一步可做什麼 ,語氣簡潔、避免責備使用者。
通知數量適中;可關閉時提供關閉,避免無關訊息干擾當前任務。
手風琴 · Accordions
手風琴用於在有限空間中分段顯示資訊。結構參照
NASA Web Design System — Accordions ,
並延伸 Psychedelic 的粗框與高對比展開狀態。
無框樣式 · Borderless
配對結果如何計算?
以音樂品味相似度、地理距離與近期互動權重組合計分,並保留探索新風格的隨機性。
為什麼有人看不到我的檔案?
可能是距離範圍、年齡篩選或封鎖條件所致;請檢查設定頁中的可見性選項。
如何提高配對品質?
補齊音樂偏好標籤、近期常聽清單與活動參與紀錄,系統能更快收斂推薦結果。
框線樣式 · Bordered
帳號安全與隱私
支援封鎖、檢舉與可見度控管;敏感資料採分級存取,並在操作流程中給予提示。
活動報名與取消
活動開演前可依主辦規則取消;逾時可能不退回名額,詳見活動條款說明。
通知與推播設定
可分別控制配對通知、活動提醒與系統公告,避免高頻訊息干擾。
可訪問性 · Accessibility
標題列必須是 <button>,確保鍵盤與輔助科技可操作。
按鈕需使用 aria-expanded 表示展開狀態,並以 aria-controls 對應內容區 id。
內容區的可見狀態應與按鈕狀態一致;避免在 JS 失效時直接把內容永久隱藏。
可用性 · Usability
適合使用者只需要少數段落資訊、且版面空間受限時。
若使用者通常要讀完整內容,應改為直接展開的段落排版。
標題列點擊區要夠大,並與內容內可點擊元素保持距離,避免誤收合。
實作 · Product classes
產品頁可使用 accordion、accordion--bordered、accordion__button、accordion__content,
並沿用同樣的 aria-expanded / aria-controls 結構。
搜尋列 · Search bar
提供使用者快速定位內容;結構參照
NASA Web Design System — Search bar ,
視覺沿用 Psychedelic 主色按鈕、粗邊框與硬陰影。
尺寸變體 · Big / Medium / Small
可訪問性 · Accessibility
搜尋按鈕必須包含「Search」文字(可視覺隱藏),以供螢幕報讀器辨識。
即使視覺上簡化,欄位仍需保有 label 或等效可讀名稱。
按鈕應維持 type="submit",減少鍵盤操作成本。
可用性 · Usability
搜尋欄位盡量保留足夠寬度(建議至少可視 27 字元),方便檢查關鍵字。
放大鏡圖示通常可獨立辨識;若小尺寸只顯示圖示,務必保留 sr-only 文字。
首頁建議直接顯示搜尋框,不用隱藏在連結後方。
避免預設進階搜尋,先提供簡單輸入再逐步揭露進階條件。
實作 · Product classes
產品頁可沿用 `form-input` 與 `button button-primary`,搭配 `search-bar`/`search-bar--big`/`search-bar--small`、`search-bar__input`、`search-bar__submit`、
`search-bar__icon`、`sr-only` 形成一致版型。
側邊導覽 · Side navigation
用於呈現 1~3 層導覽階層。結構參照
NASA Web Design System — Side navigation ,
視覺沿用 Psychedelic 粗框與螢光 active 指示。
單層 · Single level
雙層 · Two levels
三層 · Three levels
可訪問性 · Accessibility
所有導覽項目需可透過鍵盤 Tab 逐項聚焦與操作。
目前頁面狀態需可辨識(視覺 active + 語意標示)。
避免過深層級造成導覽迷航,必要時改為拆分資訊架構。
可用性 · Usability
導覽文案要短、可掃描,建議為頁名的精簡版。
適合 1~3 層;若層級過深,使用者容易漏看底部項目。
若整站頁面很少(少於 5),通常不需要側邊導覽。
實作 · Product classes
產品頁可使用 side-nav、side-nav__sub 與 is-current;可維持同一 HTML 結構在不同頁面重複使用。
標籤 · Labels
本節為狀態標籤 (.label,類似
shadcn Badge ),用來凸顯 New/Warning 等狀態。表單欄位關聯文字請用
.form-label(類似
shadcn Label ),勿與 .label 混用 class。視覺參照
NASA Web Design System — Labels 。
樣式變體 · New / Info / Warning / Hot
預設為非互動元素(`span`),僅用於標示,不作為按鈕。
New
Info
Warning
Hot
Unread 12
可訪問性 · Accessibility
若 label 對應的是動態新增內容,請用 ARIA live region 通知螢幕報讀器。
非互動 label 應避免 hover/focus/active 行為,以免誤認為可點擊。
狀態不可只靠顏色區分;可搭配文字(如 New、Warning、Unread 12)。
可用性 · Usability
用於提醒容易被忽略的重要資訊,避免整頁過度標示。
不要混用「可點擊」與「不可點擊」兩種 label 行為,需保持一致。
當內容本身已頻繁更新時,可先用排序與版位處理,不一定要加 label。
實作 · Product classes
產品頁使用 label、label--info 等;內距由 --psy-label-padding-* 控制。表單請用
form-label。可互動 tag 請用 .psy-chip 另建,勿堆在 .label 上。
<span class="label label--warning">Warning</span>
<label class="form-label" for="email">電子郵件</label>
<input id="email" class="form-input" type="email" />
表格 · Tables
節奏對齊
Untitled UI Tables (TableCard、Divider line、Alternating fills、sm/md);
結構與可及性參照
NASA WDS Tables 。外框保留 Mimosa neo-brutal 硬陰影。
框線表格 · Bordered table
活動資料表(框線)
活動名稱
說明
年份
Neon Warehouse
以合成器與工業節奏為主題的夜間派對,提供即時配對卡片。
2026
Cosmic Rooftop
露天場景與 chill 電子樂,適合低壓社交互動。
2026
Indie Social Lab
獨立音樂導向的主題社交場,含偏好標籤篩選。
2027
無框表格 · Borderless table
需要與段落內容融合時,可減少格線干擾。
活動資料表(無框)
活動名稱
說明
年份
Neon Warehouse
以合成器與工業節奏為主題的夜間派對,提供即時配對卡片。
2026
Cosmic Rooftop
露天場景與 chill 電子樂,適合低壓社交互動。
2026
Indie Social Lab
獨立音樂導向的主題社交場,含偏好標籤篩選。
2027
可訪問性 · Accessibility
簡單表格使用 scope="col" / scope="row" 明確標頭關係。
複雜表格(多層標頭)需改用 id + headers 對應。
表格標題放在 <caption>,不要只在外部段落描述。
可用性 · Usability
僅在真正欄列資料使用表格;敘事內容可改清單或段落。
框線表格適合高密度比較;無框表格適合貼近文章內文。
最小必要樣式即可,避免裝飾壓過資料本身。
實作 · Product classes
清單:table-card + data-table data-table--uniform-rows;斑馬紋加
data-table--striped;緊湊列高 data-table--sm。矩陣表(列標在
tbody th)勿加 --uniform-rows。保留 caption 與 scope。
版面系統 · Grids
採 12 欄響應式格線,維持內容對齊與掃讀節奏。結構精神參照
NASA Web Design System — Grids ,
視覺延伸為 Psychedelic 的粗框卡片分欄。
12 欄比例
1/1
1/2
1/2
1/3
1/3
1/3
1/4
1/4
1/4
1/4
版型示例 · Layout examples
8/12 主要內容
4/12 側欄
6/12 活動卡片 A
6/12 活動卡片 B
4/12 篩選
4/12 推薦
4/12 即時訊息
可訪問性 · Accessibility
放大到 200% 時仍需可讀、不破版;避免固定高度與硬塞內容。
欄位順序要符合語意閱讀順序,不以 CSS 變更語意順序。
可用性 · Usability
全站採單一 12 欄系統,避免混用多種 grid 規則。
文字區塊建議控制在約 75 字元內,提高長文可讀性。
小螢幕預設堆疊成單欄,優先保障掃讀與點擊精準度。
實作 · Product classes
產品頁使用 `grid-12` + `col-12/8/6/4/3` 組版;RWD 會在中小螢幕自動滿欄。若需無左右留白容器可另加 `grid-12--full`。
間距 · 邊框 · 陰影
間距為 --psy-space-*;區塊邊框 --psy-border-width-block;Neo-Brutalism 硬陰影
--psy-shadow-hard。
間距尺度表
Token、數值與長條預覽並列,便於掃描與對照實作。
Token
數值
預覽
--psy-space-1
4px
--psy-space-2
8px
--psy-space-3
10px
--psy-space-4
12px
--psy-space-5
14px
--psy-space-6
16px
--psy-space-7
18px
--psy-space-8
22px
--psy-space-9
24px
--psy-space-10
26px
--psy-space-11
28px
--psy-space-12
32px
--psy-space-13
60px
分隔線 · Divider
色票 --psy-divider-color。通用元件 .psy-divider、.psy-divider--vertical(
components.css);語意化區塊間距可用 .divider(navigation-ui.css)。完整範例見
導覽 UI · Divider 。
水平 .psy-divider
陰影範例
產品卡片與主導區塊使用同一硬陰影,並以 container / high / highest 分層(對齊 surface hierarchy)。
--psy-surface-container + --psy-shadow-hard
--psy-surface-container-high + --psy-shadow-hard
--psy-surface-container-highest + --psy-shadow-hard
動效 · Motion
僅以 token 定義時間與曲線,由元件引用。
Token
值
--psy-motion-duration-fast
120ms
--psy-motion-duration-normal
200ms
--psy-motion-duration-slow
280ms
--psy-motion-easing-standard
cubic-bezier(0.2, 0, 0, 1)
可視化範例 · How aliases look
下列示例對應上表 token,方便快速理解「改 token 會影響哪裡」。
HOME
EVENTS
MATCHES
--psy-nav-text 是給「亮色導覽底」用的前景色,不適用深紫底主內容文字。
--psy-kicker-text-on-light:THIS IS A KICKER SAMPLE
Primary Hover
Primary Active
Secondary Hover
Secondary Active
--psy-focus-ring-* Focus Ring
/* token 別名實際使用範例 */
.top-nav a { color: var(--psy-nav-text); }
.hero-kicker { color: var(--psy-kicker-text-on-dark); }
.kicker { color: var(--psy-kicker-text-on-light); }
.psy-btn--primary:hover { background: var(--psy-button-primary-bg-hover); }
.psy-btn--primary:active { background: var(--psy-button-primary-bg-active); }
.psy-btn:hover { background: var(--psy-button-secondary-bg-hover); }
.psy-btn:active { background: var(--psy-button-secondary-bg-active); }
.psy-btn:focus-visible {
outline: var(--psy-focus-ring-width) solid var(--psy-focus-ring-color);
outline-offset: var(--psy-focus-ring-offset);
}
元件別名摘錄 · Component aliases
節錄 tokens.css 底部與導航、按鈕、焦點相關之別名。
Token
用途
範例
--psy-nav-text
導覽列前景(螢光漸層上)
NAV
--psy-kicker-text-on-light
淺底 kicker/eyebrow
KICKER
--psy-kicker-text-on-dark
深紫底 kicker(--psy-surface-on-dark + 萊姆)
KICKER
--psy-button-primary-bg-hover / active
主要按鈕狀態
Hover
Active
--psy-button-secondary-bg-hover / active
次要按鈕狀態
Hover
Active
--psy-focus-ring-*
對焦環(可及性)
Focus