Lunarcana

· 美學元志 ·

我們如何手抄這部書

黑曜石之上的象牙色墨水。金箔僅在門檻上落筆。寫在內封的幾條註腳。

這一頁是書的內封。是裝訂之前寫給自己看的那一段——好讓幾個月之後,當某個細小的決定冒出來、規則忽然覺得不便時,可以回來重讀,記起當初為何這樣選。

我們把 Lunarcana 當成一部活動的鍊金術手稿來抄寫,而非一件軟體。下文的大多數選擇,都從這一姿態延伸而出:解讀是一場儀式,而非一次查詢;介面是會呼吸的羊皮紙,而非一塊儀表盤;裝飾是一筆細線,而非一道漸變。

下文是這部書的短教義。色彩、字型、動態、我們拒絕去做的事,以及我們應當致謝的源流。其中沒有一條是封死的——手稿一直保持敞開——但每條規矩都有其理由,理由就寫在敘述裡。

為何稱之為手稿,而非介面

我們不想再做一款神秘學應用。我們想做一部恰好住在瀏覽器裡的書——一部你一次翻一張牌的書,墨色在草稿之間慢慢變幹,頁邊帶著十六世紀印刷工人會簽字認可的那種細線裝飾。把它叫作「手稿」而不是「介面」,並非詩意的修辭。它改變了之後每一個下游決定。

介面以吞吐為最佳化目標。它要讓你從意圖到結果之間,敲擊次數儘可能少。手稿則以注意力為最佳化目標。它要讓你在合適的時刻慢下來——抽牌前的那一口靜心呼吸、卡牌翻轉時安靜的兩秒、解讀開始落墨之前的那段停頓。把吞吐量調到最高的那個版本的 Lunarcana 會更快、更小,而你再也不會回頭來用它。

黑曜石之上的象牙色,是這種姿態向我們提的第一個請求。深色頁面讀起來像被燭光從下方點亮的羊皮紙,像那一刻——蠟燭被靠近書脊。這種調性也在一個早已被紫色漸變與水晶球擺拍過度照亮的品類裡,發出一點點嚴肅的訊號。我們希望 Lunarcana 第一眼看上去,像一處可以認真做內在功課的地方,而不是一場客廳戲法。

三件事我們一開始就拒絕。我們拒絕任何形式的「神秘風」素材圖——飄動的絲巾、發光的手掌、紫色星雲,全都不要。我們拒絕在儀式時刻使用彈窗——靜心在流中、揭牌在流中,沒有任何中斷。我們拒絕把這件事框定為「占卜」。Lunarcana 是數字手稿,是一件書寫工具。它是鏡子,不是神諭。下文所有的規矩,都為這三條拒絕服務。

「吞吐屬於工具,注意力屬於儀式。」

色彩 · 象牙、黑曜石、金箔

調色盤上只有三個音。象牙是預設的墨——每一段正文、每一處標籤、每一行安靜的後設資料,都是象牙色或它略微淡去的變體。黑曜是頁面——純黑,不被柔化為靛或炭,因為背景一旦升溫幾度,金的「門檻性」便失守,手稿便開始像營銷頁。金是第三個音,定量供給。

金,僅作為門檻訊號。它標記注意力應當轉換形態的那些時刻——文件頂部的品牌印記、長段開首的首字下沉、章節標題下方的細線、按鈕可觸達的懸停態、卡牌翻轉時的明亮一緣、剛剛被翻開的位置標籤、外殼裡的月相符號。除此之外,金是被禁止的。一整頁可以一畫素金都不出現,而那正是設計的本意。

限量供給的理由不是審美,而是資訊理論。若金到處都是,金便無處可在——它失去訊號,淪為材質。把它留給那些真正改變讀者與頁面關係的瞬間,便能讓一束溫暖的火花,做完十道漸變也做不到的事。「門檻規則」是這份文件裡最重要的一條,也是在功能壓力下最容易被悄悄違反的一條。

象牙 · 預設的墨

var(--color-ivory)

黑曜 · 頁面本身

var(--color-obsidian)

金箔 · 僅在門檻

var(--color-gold)

金可被允許的所在

  • 文件頭頂的 Lunarcana 印記。
  • 長段開首的首字下沉。
  • 章節標題下的細線。
  • 可互動控制元件的懸停與聚焦態。
  • 塔羅牌翻轉時的明亮一緣。
  • 剛剛被翻開的位置標籤。
  • 外殼裡的月相符號。

我們不用紫色。不在漸變裡、不作強調色、不作懸停態、哪裡都不用。紫色是整個神秘學應用品類的視覺俗套,繞開它,是最高效地說明 Lunarcana 在做另一件事的方式。

字型 · 層級、對比、呼吸

手稿裡有八枚字型令牌,每一枚都只做一件事。Display 是字標與極少數儀式性標題。H1 是章節起首。Section 是引出一塊內容的小眉。Body 是你此刻正在讀的長篇正文。Body-CJK 是同一段正文的中日變體,字面被針對縱向韻律調過。Eyebrow 是小號大寫標籤。Quiet 是頁邊的後設資料。Numeral 是用於計數的等寬數字。

正文透過 bodyClass(locale) 選擇——這隻助手在拉丁場景返回 t-body,在 zh/ja 場景返回 t-body-cjk——因為中文與日文的字面與拉丁字面呼吸方式不同:在英文裡讀起來寬裕的行高,在中文裡卻會顯得侷促。永遠不要在 JSX 裡直接寫 locale === 「zh」|| 「ja」 這種判斷。助手就是邊界。

字型層疊裡有一個值得記下的小坑。globals.css 中的 .t-* 類是無層級的,這意味著 Tailwind 的隨寫工具如 text-[1rem] 無法覆蓋 .t-display 或 .t-h1 上的字號、字距與行高。當你需要對這三者做響應式覆蓋時,請直接落到內聯 style 裡,配合 clamp()——內聯樣式同時壓過兩層。Header 字標曾經被它咬過一次,不會有第二次。

.t-display · 儀式性

LVNARCANA

.t-h1 · 章節起首

我們如何手抄這部書

.t-eyebrow · 章節小眉

美學元志

.t-body · 長篇正文

解讀是一場儀式,而非一次查詢。

這四個示例使用的,正是手稿其餘部分所用的同一組 .t-* 類,而非截圖。任何令牌的聲調若發生漂移,會先在這裡顯形。

動態 · 僅以透明度淡入淡出

Lunarcana 的相位過渡是淡入淡出。它不滑、不跳、不在 y 軸上彈簧。整條解讀流——提問、靜心、抽牌、揭牌、解讀——都發生在同一個 AnimatePresence 的 wait 模式之內,每一相以透明度入場,再以透明度退場。只有一個例外:卡牌本身在翻轉時繞 Y 軸旋轉,因為卡是卡,卡會翻。其餘每一處過渡,都是墨在頁面上慢慢浸入或淡出。

首版之後我們移除了 layoutId。layoutId 在技術上很美——它讓 Framer 在兩套佈局之間執行 FLIP 動畫——但在我們的場景裡,它在揭牌後牌陣重排時,會帶來細微的位移抖動。我們用 left 上的 CSS 過渡 + 新外殼上獨立的透明度淡入替代了那次飛行,手稿便不再痙攣。不變數是「永不出現位移抖動」。如果兩個狀態之間頁面尺寸有變,新狀態必須在變化前先把空位佔好。

「降低動態偏好」在每一層都被尊重。在 prefers-reduced-motion 下,呼吸圓停止呼吸,卡牌翻轉退化為 300ms 的透明度切換,牌堆停止顫動,燭光停止閃爍,翻轉時的金光被靜默。可達性在這裡不是一個勾選框——對於一件冥想工具而言,那就是它本身的表面積。

相位過渡的透明度時序

100ms700ms
用我們的儀式緩動,從 0 到 1 約 700 毫秒。離場的那一相沿映象曲線退場。無位移、無縮放、無彈簧——僅是墨色逐漸滲透進頁。

我們不做的事

大多數設計系統描述自己「會做什麼」。更難寫的、也是我們最常重讀的那份文件,是「我們拒絕做什麼」的清單。負空間即教義。下面五件事,我們立下界限。

  • 我們不預測未來。

    Lunarcana 的定位是數字手稿、是一件書寫工具、是一面內在的鏡子——而不是占卜服務。這種定位是承重的:既因為支付提供方的可接受使用條款要求如此,更因為——更要緊地——一旦把卡片框定為「預測」,它為讀者所做的內在功課便在那一刻被掏空。我們說手稿、說書寫、說鏡子。我們不說神諭。

  • 我們不用神秘風素材圖。

    沒有紫色漸變,沒有水晶球渲染圖,沒有飄動的絲巾,沒有發光的手掌,沒有牌堆背後的星雲。整部手稿裡的「神秘風」影像,只來自牌面本身;包裹它的外殼故意保持嚴峻,好讓牌面以自己的聲音發聲。

  • 我們不在核心儀式上設付費牆。

    免費檔永遠可以讀。兩種日常用的牌陣不限量,其餘按月計配額。牆——若出現——圍在「次數」與「匯出」周圍,絕不圍在靜心、抽牌、揭牌或解讀本身。儀式是屬於讀者的。

  • 我們不在儀式時刻打斷式彈窗。

    靜心在流中,揭牌在流中,解讀在流中流入。在這些時刻冒出一個彈窗,就把節律擊碎了。彈窗只為工具性場景保留——確認、設定、支付——絕不為儀式本身。

  • 我們不自動播放聲音。

    在許多語境裡,靜音才是預設。環境音床與音效都透過外殼手動開啟,並記住讀者上一次的選擇。在安靜的列車上忽然驚嚇到讀者的音訊,是失去他們最快的方式;手稿寧可保持沉默,也不願失禮。

源流與致謝

Lunarcana 沒有一處是憑空發明出來的。這部手稿站在一長排緩慢、手作、細心裝飾的工作之上,向那一排長架致謝,是這份紀律的一部分。下面是我們在漫長迭代裡始終放在心裡的影響。它們不是為了「掉書袋」而被列出——每一項都給了這部最終的書一種具體的姿態。

威廉·莫里斯與凱姆斯科特出版社
一種信念:頁面不是佈局,而是一塊織物;頁邊與正文同等重要;手裝訂的工作有權比工業競爭對手更慢。
奧伯利·比亞茲萊
黑白線條工作的紀律,以及一種膽量——敢於讓一整片頁面留空,好讓一處裝飾承擔全部敘述。
1909 年韋特塔羅的彩色石版印刷
牌面本身的圖像學與色彩邏輯,並提醒我們:被印刷的神秘學,反而在它停止「看上去神秘」、開始「看上去像一本嚴肅的書」時,最清晰地抵達讀者。
伏尼契手稿
一種氣質——一頁知道得比它解釋的更多。頁邊注。細線裝飾。允許讀者在意義沉澱之前,先在「讀不懂」裡待上一陣。
當代慢設計運動
一份許可——拒絕主導現代應用的「參與迴路、滑屏餵養、多巴胺節奏」模式,轉而為那位選擇坐下來、與一念獨處的讀者來設計。

邀約

若一份教義在做它該做的事,它會在被吸收之後消失。上面寫的大部分東西,幾分鐘之後,對你來說會只是「你正坐著的這間屋子」的樣子。這正是用意。表層之下的規矩在那裡,只是為了讓表層得以保持安靜。

當你準備好了,抽一張牌。牌堆在隔壁。指南在它上方那一架。「關於」一頁會告訴你是誰在守這部手稿。願裝訂處依然結實。