メインコンテンツへスキップ
Context Grammar文脈を読むAIをデザインする

Intent First デザインシステム · v2

トークンをひとつ変えれば、全ページが変わる。

intentfirst.ai を支えるデザインシステムです。状況に合わせて変わるインターフェースのために作りました。色・文字・動きはひとつのファイルにトークンとしてまとめてあり、1か所の変更がすべてのページに届きます。

試してみる:見出しの書体を切り替える

文字の役割
5
動きの長さ
5
合図の色
1
言語
2

01原則

読む人への、4つの約束

どれも雰囲気ではなく、コードが守っているルールです。

  1. 01

    やさしく、怖くない

    温かみのある紙の色、ふつうの言葉、角のある形。丸いのは、押せるチップだけです。

  2. 02

    シンプルで、迷わない

    文字の役割は5つ、サイズは名前のついた10段階。人もエージェントも、同じ短いリストから選びます。

    Aatext-body 17Aatext-lead 21Aatext-h2 41
  3. 03

    読むのが楽しい

    本文用のトークンは17pxで、行間はゆったり。人が話す場面には、読みやすい明朝体を使います。

    「いつもので」
  4. 04

    モダンで、未来を感じる

    タップへの反応は100〜240ms。すばやく現れて、やわらかく止まります。

    --dur-instant 100ms · --dur-base 240ms

02このシステムの決まりごと

人は太い筆で、仕組みは細い線で。

イラストは人の状況を描きます。太い墨と、赤をひとつだけ。図は仕組みを描きます。均一な1pxの線で。いま見ているのがどちらなのか、いつでも分かります。

メニューの2つの料理を指さして迷う客と、注文を急かさずに待つ店主。
太い筆 — 決めようとしている人
細い線 — Context Grammar の6つの段階

03役割で組む文字

役割は5つ。スイッチはひとつ。

文字が指定するのは書体ではなく役割です。見出しの書体を切り替えると、このページの見出しがすべて変わります。いちばん上の見出しも。

見出しの書体
font-display見出し · M PLUS 2
状況が変われば、答えも変わる。
font-body本文 · M PLUS 2
よい店主は好みを覚えていて、それでも決める前にはひと言聞いてくれます。
font-labelボタン・ナビ・ラベル · M PLUS 2
次のステップ · 3/6
font-voice人の言葉 · Noto Serif JP
「いつもので」
font-data数字とコード · JetBrains Mono
--dur-base 240ms · 0123456789

日本語では、ゴシック系の役割はすべて M PLUS 2 に、人の言葉は Noto Serif JP に切り替わります。斜体にはしません。

書体の役割をカタログで全部見る →

04インクと紙、合図はひとつ

明暗は入れ替わる。赤は、ひとつの合図のまま。

ダークモードはインクと紙を入れ替えるだけで、色を手で塗り直すことはありません。赤が示すのは1画面にひとつ。いまの決定か、主な操作か、見てほしい1点です。決定を選ぶと、赤い点が動きます。

ライト

今夜は何にしますか?

  • いつもの
  • 新しいもの
  • あとで決める
--paper
#F8F7F2
--ink
#15171C
--spark
#E1402F

いまの決定を選ぶ

いまの決定:いつもの

明るい地でも暗い地でも、点は同じ --spark の赤です。

色をカタログで全部見る →

05動きの文法

すばやく現れ、やわらかく止まる。

画面の反応に使う動きの長さは、5つのトークン。100msの押下から、560msの登場まで。ページ単位の演出も600ms以内に収めます。動かすのは位置と透明度で、色はクロスフェード。例外は名前をつけた2つだけです。イラストはクリップパスのワイプで現れ、図の線はスクロールに合わせて描かれます。「動きを減らす」設定のときは、完成した状態をそのまま見せます。線は描き終えた姿で、絵ははじめから見える状態で。

5つの長さのトークン

  • instant100ms押す・ホバーの色
  • quick160msリンクの線・カードのトンボ・矢印
  • base240msタブ・スイッチ・トースト
  • move380msこのページの赤い点
  • stage560ms初回の罫線・イラストの登場(上限)

文法を試す

カード160ms · linear

ホバーするか、Tab で移動してみてください

浮き上がりも影もありません。枠が濃くなり、四隅にトンボが現れます。

Intent の章を読む

ボタン100ms · scale 0.97

まだ押していません

タブ240ms · ease-in-out

その人が、何をしようとしているか。

ページ遷移< 400ms

前のページが消え、次のページが8px浮かび、ヘッダーの線が引き直されます。400ms以内に。

カタログで見る

動きをカタログで全部見る →

06使われている部品

本物の部品を、本物の状態で。

このシステムが用意している部品を、ここで試せるようにつなぎました。何も送信されません。

新しい章をメールで受け取る

デモ

ドメインが足りません。name@example.com のように入力してください。

頻度
  • TextField

    エラーは、次に何をすればいいかを言葉で伝えます。色だけには頼りません。

  • Toggle

    スイッチはスプリングの曲線で動きます。この曲線を使うのはここだけです。

  • SegmentedControl

    選んだ項目へ、背景がすべるように移ります。パッと切り替わりません。

  • Toast

    トーストはページの上に浮かぶので、影を持てます。サイトのカードに影はありません。

部品をカタログで全部見る →

07つくり

値の出どころはひとつ。

トークンの値はすべて app/globals.css にあります。ほかはそこから読むか、写しを持つだけ。写しがずれたら、その場でテストが失敗します。

app/globals.css

色・文字・動きのトークン。正しい値はここだけ

@theme → Tailwind のユーティリティ

サイトのページ

bg-paper、font-display、text-h2 など。どのページもこれで組まれています。

lib/design/tokens.ts

JavaScript の動き

React のアニメーションが使う長さとイージング。

public/design-system/v2/tokens.css

単体ページと映像

レビュー用ボードや単体ページのための持ち運べる写し。映像にも、同じ文字の役割を指定しています。

app/globals.css から、サイトのページ、lib/design/tokens.ts、public/design-system/v2/tokens.css へ

tests/unit/design-tokens.test.tsすべての写しを元の値と照らし合わせます。値がずれれば、テストが失敗します。

docs/design-system/agent-brief.mdこのサイトのページを作るエージェントが、最初に読む決まりごと。