# DESIGN.md — Digital Agency Japan (digital.go.jp / DADS)
> このファイルはAIエージェントが正確な日本語UIを生成するためのデザイン仕様書です。
> セクションヘッダーは英語、値の説明は日本語で記述しています。
> デジタル庁公式ウェブサイト + 公式デザインシステム(Digital Agency Design System / DADS)。
> **公式仕様情報**
> - **Foundations ドキュメント**:
> - **Storybook(HTML 版)**:
> - **GitHub**:
> - License: MIT
> - 設計トークンパッケージ: `@digital-go-jp/design-tokens`
> - CSS class 規約: `dads-` プレフィックス + BEM + data attributes
>
> 本 DESIGN.md は **公式 Foundations ドキュメント + 実装リポジトリのトークン**をベースに作成されています。実サイト digital.go.jp は本デザインシステムを部分採用しているため、観測値とトークン仕様で異なる場合は **公式仕様を優先**してください。
---
## 1. Visual Theme & Atmosphere
- **デザイン方針**: WCAG 2.2 準拠を明確に意識した公共サービスデザインシステム。フレームワーク非依存、リセット CSS と共存可能、後付け可能な「シンプル・カスタマイズ可能・アクセシビリティファースト」を哲学にする
- **密度**: 余裕のある縦余白、本文の line-height 1.7 が標準。タップターゲット最小 44×44px を全コンポーネントで担保
- **キーワード**: Accessible, Public Service, Token-Driven, Forced-Colors-Aware, Methodical
### 公式が明示する 8 つの Foundations
公式 Foundations ページが明示するカテゴリ:
1. **Color**(カラー)
2. **Typography**(タイポグラフィ)
3. **Icon**(アイコン)— 文書構造中の位置による 4 種類定義
4. **Layout**(レイアウト)— **breakpoint は 768px 1 点のみ**
5. **Link Text**(リンクテキスト)— 5 状態の state machine
6. **Spacing**(余白)— 3〜5 値の modular scale
7. **Corner Shapes**(角の形状)— 5 段階のスケール
8. **Elevation**(エレベーション)— 8 段階の box-shadow
### アクセシビリティ準拠基準
- **JIS X 8341-3:2016**(WCAG 2.0 相当)
- **WCAG 2.2** — WAIC(ウェブアクセシビリティ基盤委員会)日本語訳優先
- テキストコントラスト: **4.5:1 以上**
- 非テキスト UI コントラスト: **3:1 以上**
- タッチターゲット: **44×44 CSS px 以上**
- 最小フォントサイズ: **14px 未満は原則使用禁止**
---
## 2. Color Palette & Roles
### 概念層(公式 Foundations が定義する 5 役割)
公式 Color ページは以下の **5 つの役割カテゴリ**を提示しています(リポジトリの Primitive/Neutral/Semantic とは別の概念モデル):
| Category | Purpose | 含まれる色 |
|----------|---------|----------|
| **Key Colors** | ブランドの基盤 | Primary / Secondary / Tertiary / Background |
| **Common Colors** | 中立色(テキスト・罫線) | White〜Black の 14 段階グレースケール |
| **Functional Colors** | インタラクティブ状態 | Hover / Active バリアント |
| **Accent Colors** | 強調・ハイライト | 慎重に使用 |
| **Semantic Colors** | 意味付け | Success / Error / Warning(各 1/2 の 2 段階) |
### 実装層(リポジトリの 3 階層トークン)
DADS の `--color-*` 名前空間は **3 階層**で構成されています:
1. **Primitive**: 11 色相 × 13 段階のスケール(全 143 色)
2. **Neutral**: White / Black / SolidGray / OpacityGray
3. **Semantic**: Success / Error / Warning(Yellow/Orange)— Primitive を意味付けに割り当て
### コントラスト比の必須要件
| 用途 | 比率 |
|------|------|
| テキスト(リンクを含む) | **4.5:1 以上** |
| 非テキスト UI 要素(アイコン・border 等) | **3:1 以上** |
| アイコン(テキスト隣接) | **4.5:1 以上** |
### 2.1 Primitive Colors(プリミティブカラー)
各色相は **50 / 100 / 200 / 300 / 400 / 500 / 600 / 700 / 800 / 900 / 1000 / 1100 / 1200** の 13 段階。
| 色相 | 50 | 500 | 1000 | 備考 |
|------|----|-----|------|------|
| **blue** | `#e8f1fe` | `#4979f5` | `#00118f` | デジタル庁コア。リンク・focus は blue-1000 |
| light-blue | `#f0f9ff` | `#39abff` | `#00428c` | 補助情報 |
| cyan | `#e9f7f9` | `#01b7d6` | `#006173` | データ可視化 |
| green | `#e6f5ec` | `#2cac6e` | `#0c472a` | success |
| lime | `#ebfad9` | `#8cc80c` | `#3e5a00` | 強調 |
| yellow | `#fbf5e0` | `#ebb700` | `#806300` | warning, focus accent |
| orange | `#ffeee2` | `#ff7628` | `#8b3200` | warning |
| **red** | `#fdeeee` | `#ff5454` | `#a90000` | error。red-800 が semantic-error-1 |
| magenta | `#f3e5f4` | `#f137f1` | `#6c006c` | データ可視化 |
| purple | `#f1eafa` | `#a565f8` | `#41048e` | データ可視化 |
**主要な使用ポイント**:
- **`--color-primitive-blue-900: #0017c1`**: ボタン default(`--button-color`)
- **`--color-primitive-blue-1000: #00118f`**: リンクカラー / ボタン hover
- **`--color-primitive-blue-100: #d9e6ff`**: 選択中の背景
- **`--color-primitive-blue-200: #c5d7fb`**: ボタン outline hover bg
- **`--color-primitive-yellow-300: #ffd43d`**: focus indicator のリング色(WCAG 2.2)
### 2.2 Neutral
```css
/* Solid Gray (12 段階) */
--color-neutral-solid-gray-50: #f2f2f2;
--color-neutral-solid-gray-100: #e6e6e6;
--color-neutral-solid-gray-200: #cccccc;
--color-neutral-solid-gray-300: #b3b3b3;
--color-neutral-solid-gray-400: #999999;
--color-neutral-solid-gray-420: #949494; /* AAA contrast */
--color-neutral-solid-gray-500: #7f7f7f;
--color-neutral-solid-gray-536: #767676; /* WCAG 4.5:1 minimum (普通テキスト) */
--color-neutral-solid-gray-600: #666666;
--color-neutral-solid-gray-700: #4d4d4d;
--color-neutral-solid-gray-800: #333333; /* Body text の標準 */
--color-neutral-solid-gray-900: #1a1a1a;
/* Opacity Gray (rgba 黒透過) */
--color-neutral-opacity-gray-50: rgba(0, 0, 0, 0.05);
/* ... 100, 200, 300, 400, 420, 500, 536, 600, 700, 800, 900 */
```
**注目**: `420` と `536` という非規則的な番号は、それぞれ AAA / AA コントラスト比の **WCAG 閾値**を意識した値です。
### 2.3 Semantic(意味付け)
```css
--color-semantic-success-1: var(--color-primitive-green-600); /* #259d63 */
--color-semantic-success-2: var(--color-primitive-green-800); /* #197a4b */
--color-semantic-error-1: var(--color-primitive-red-800); /* #ec0000 */
--color-semantic-error-2: var(--color-primitive-red-900); /* #ce0000 */
--color-semantic-warning-yellow-1: var(--color-primitive-yellow-700); /* #b78f00 */
--color-semantic-warning-yellow-2: var(--color-primitive-yellow-900); /* #927200 */
--color-semantic-warning-orange-1: var(--color-primitive-orange-600); /* #fb5b01 */
--color-semantic-warning-orange-2: var(--color-primitive-orange-800); /* #c74700 */
```
各 semantic は **-1(明)と -2(濃)** の 2 段階を持ち、状態(icon vs text)で使い分け。
---
## 3. Typography Rules
### 3.1 和文フォント
```css
--font-family-sans:
"Noto Sans JP",
-apple-system,
BlinkMacSystemFont,
sans-serif;
```
公式 stack は **わずか 4 要素**。`Segoe UI` 等は含まれていません(実サイトの古い指定が観測される場合があるが、新規実装では公式 stack に従うべき)。
### 3.2 等幅フォント
```css
--font-family-mono:
"Noto Sans Mono",
monospace;
```
数字・コード表示用。`var(--font-family-mono)` で参照。
### 3.3 Typography Utility System(5 カテゴリ)
DADS は **`dads-u-{prefix}-{size}{weight}-{lineHeight}`** という命名のユーティリティクラスを 5 系列で提供:
| Prefix | カテゴリ | 用途 | LH 系列 | LS |
|--------|----------|------|---------|-----|
| `dsp` | **Display** | 大型見出し(64/57/48px) | 140 (×1.4) | 0 |
| `std` | **Standard** | 通常見出し・本文(16〜45px) | 140〜175 | 0〜0.02em |
| `dns` | **Dense** | 密な行間(17/16/14px) | 120, 130 | 0 |
| `oln` | **One Line** | 1 行 UI(17/16/14px) | 100 (×1.0) | 0.02em |
| `mono` | **Monospace** | コード・数値(17/16/14px) | 150 (×1.5) | 0 |
各カテゴリには `B`(Bold = 700)/ `N`(Normal = 400)の 2 ウェイト。
例: `dads-u-std-16N-170` = Standard / 16px / Normal weight / line-height 1.70
### 3.4 Standard カテゴリの詳細スケール
**最も使用頻度が高い** Standard カテゴリの全サイズ:
| Size | Line Height | Letter Spacing | 用途 |
|------|-------------|----------------|------|
| 45px | 1.40 | 0 | H1 ページタイトル |
| 36px | 1.40 | 0.01em | H1 大 |
| 32px | 1.50 | 0.01em | H2 |
| 28px | 1.50 | 0.01em | H3 |
| 26px | 1.50 | 0.02em | H3 sub |
| 24px | 1.50 | 0.02em | H4 |
| 22px | 1.50 | 0.02em | リード |
| 20px | 1.50 | 0.02em | Heading 4 alt |
| 18px | 1.60 | 0.02em | sub-heading |
| 17px | 1.70 | 0.02em | **本文 base** |
| 16px | 1.70 | 0.02em | キャプション・補助本文 |
| 16px | 1.75 | 0.02em | 本文 alt(広め) |
**重要な訂正**(実サイト観測のみだった以前の DESIGN.md からの変更):
- letter-spacing は **「全 0.02em」ではない**。**3 段階**(0 / 0.01em / 0.02em)でサイズに反比例
- 45px 以上: 0
- 36px〜28px: 0.01em
- 26px 以下: 0.02em
- line-height も段階的(1.4 / 1.5 / 1.6 / 1.7 / 1.75)
### 3.5 Heading コンポーネント(10 サイズスケール)
`` で利用。サイズと shoulder(前置きテキスト)の関係:
| size | font-size | line-height | letter-spacing | shoulder size | shoulder lh |
|------|-----------|-------------|----------------|---------------|-------------|
| 64 | 64px | 1.4 | 0 | 28px | 1.5 |
| 57 | 57px | 1.4 | 0 | 24px | 1.5 |
| 45 | 45px | 1.4 | 0 | 22px | 1.5 |
| 36 | 36px | 1.4 | 0.01em | 20px | 1.5 |
| 32 | 32px | 1.5 | 0.01em | 18px | 1.6 |
| 28 | 28px | 1.5 | 0.01em | 16px | 1.7 |
| 24 | 24px | 1.5 | 0.02em | 16px | 1.7 |
| 20 | 20px | 1.5 | 0.02em | 16px | 1.7 |
| 18 | 18px | 1.6 | 0.02em | 16px | 1.7 |
| 16 | 16px | 1.7 | 0.02em | 16px | 1.7 |
#### Heading Variants
```html
見出し
見出し
```
### 3.6 行間・字間(実サイト運用)
実サイト digital.go.jp で観測された body 設定:
- font-size: 17px / line-height: 28.9px (×1.7) / letter-spacing: 0.34px (≈0.02em)
これは **`dads-u-std-17N-170`** に相当。
### 3.7 最小フォントサイズ(公式ルール)
> **14 CSS px 未満の大きさの使用は原則として許容されません**(公式 Foundations 明記)
つまり Typography Utility の最小値は **14px**。それ以下のサイズは法令や WCAG 準拠の理由がない限り使用しません。
### 3.8 フォント独立性の原則
公式は **「情報伝達は書体に非依存で実施可能」** であることを前提にしています。Web フォントがロード失敗してもメッセージが伝わる stack を組むこと。
### 3.9 OpenType / 特殊機能
- `font-feature-settings: normal`
- `palt` 不使用(ベタ組)
- `forced-colors: active` メディアクエリでハイコントラストモード対応
### 3.10 縦書き
該当なし
---
## 4. Component Stylings
### Button
**4 サイズ × 3 タイプ** = 12 バリエーション + 各種状態。
#### Sizes
| Size | min-width | min-height | border-radius | padding | font-size |
|------|-----------|------------|---------------|---------|-----------|
| `lg` | 136px | 56px | 8px | 12px / 16px | 16px |
| `md` | 96px | 48px | 8px | 8px / 16px | 16px |
| `sm` | 80px | 36px | 6px | 2px / 12px | 16px |
| `xs` | 72px | 28px | 4px | 2px / 8px | 14px |
`sm` / `xs` は **`::after` で 44px の不可視タップターゲット**を確保(WCAG 2.5.5)。
#### Types
| Type | Background | Color | Border |
|------|-----------|-------|--------|
| `solid-fill` | `blue-900` | white | 4px double transparent |
| `outline` | white | `blue-900` | 1px solid currentcolor |
| `text` | transparent | `blue-900` | 0 |
#### State Colors
```css
--button-color: var(--color-primitive-blue-900); /* #0017c1 */
--button-hover-color: var(--color-primitive-blue-1000); /* #00118f */
--button-active-color: var(--color-primitive-blue-1200); /* #000060 */
--button-outline-hover-bg-color: var(--color-primitive-blue-200);
--button-outline-active-bg-color: var(--color-primitive-blue-300);
```
ボタン default は **blue-900 (`#0017c1`)** で、hover で blue-1000 (`#00118f`) になる。リンク色(純粋 blue-1000)とは default 状態で微妙に異なる。
#### Focus Indicator(公式仕様)
```css
.dads-button:focus-visible {
outline: 4px solid var(--color-neutral-black);
outline-offset: 2px;
box-shadow: 0 0 0 2px var(--color-primitive-yellow-300);
}
```
**4px 黒 outline + 2px 黄色(yellow-300 #ffd43d)リング**。WCAG 2.2 のフォーカス指標可視性要件を満たす公式仕様。Text 型ボタンでは追加で背景も yellow-300 に。
### Link(5 状態の State Machine)
公式 Foundations の Link Text ページは **5 つの状態**を明示しています:
| 状態 | 色 | 装飾 |
|------|----|------|
| **Default** | 青(`blue-1000` #00118f) | underline / thickness 1px / offset 3px |
| **Visited** | **マゼンタ** | underline 維持 |
| **Hover** | より明るい色 + 下線を太く | weight・size は **絶対に変えない**(がたつき防止) |
| **Active** | **オレンジ** | underline 維持 |
| **Focus** | 黒枠線 | + **黄色背景(yellow-300 全体)** |
#### 実装例(公式 CSS)
```css
.dads-link:any-link {
color: var(--color-primitive-blue-1000); /* #00118f */
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 3px;
}
.dads-link:visited { color: ; }
.dads-link:hover {
/* ⚠ font-weight や font-size は変えない */
text-decoration-thickness: 3px; /* 下線を太くする */
}
.dads-link:active { color: ; }
.dads-link:focus-visible {
outline: 4px solid var(--color-neutral-black);
outline-offset: 2px;
background-color: var(--color-primitive-yellow-300); /* 全体背景! */
}
```
#### Link 必須ルール
- **色のみで判別させない**: 必ず下線などの非色情報を併用
- **外部リンク・新規タブリンクには末尾にアイコン**(位置タイプは Tail Icon)
- **Hover で文字サイズ・ウェイトを変えない**(領域がたつき防止)
### Input Text
```css
.dads-input-text__input {
border: 1px solid var(--color-neutral-solid-gray-600); /* #666 */
border-radius: 8px;
padding: 12px 16px;
font-size: 16px;
line-height: 1.7;
letter-spacing: 0.02em;
}
/* Sizes */
[data-size="sm"] { height: 40px; }
[data-size="md"] { height: 48px; }
[data-size="lg"] { height: 56px; }
/* States */
:read-only { border-style: dashed; }
:hover { border-color: black; }
:focus { outline: 4px black + box-shadow yellow-300 (Button と同じ); }
:invalid { border-color: var(--color-semantic-error-1); }
:disabled { border-color: solid-gray-300; bg: solid-gray-50; color: solid-gray-420; }
```
### Notification Banner
5 タイプ × 2 スタイル:
```css
[data-type="success"] → semantic-success-2
[data-type="error"] → semantic-error-1
[data-type="warning"] → semantic-warning-yellow-2 (border) / yellow-400 (chip)
[data-type="info-1"] → blue-900
[data-type="info-2"] → solid-gray-536
[data-style="standard"] → border-radius 12px / border-width 3px
[data-style="color-chip"] → 左バー 8px (mobile) / 16px (≥48rem)
```
### Other Components
公式リポジトリには以下も実装あり: `accordion`, `blockquote`, `breadcrumb`, `calendar`, `card`, `carousel`, `checkbox`, `chip-label`, `date-picker`, `description-list`, `disclosure`, `divider`, `drawer`, `emergency-banner`, `file-upload`, `form-control-label`, `global-menu`, `hamburger-menu-button`, `heading`, `language-selector`, `list`, `menu-list-box`, `menu-list`, `progress-indicator`, `radio`, `resource-list`, `search-box`, `select`, `step-navigation`, `table`, `textarea`, `utility-link`
合計 **37 コンポーネント** が公式提供。
---
## 5. Layout Principles
### Breakpoint(公式: たった 1 点)
> **デジタル庁デザインシステムでは、ブレークポイントを 1 つ設定する想定**
```css
@media (min-width: 48rem) {
/* ≥ 768px: タブレット〜デスクトップ */
}
/* < 768px: モバイル */
```
これだけです。XS / SM / MD / LG / XL のような多段階は使いません。極めてミニマルな設計判断で、サービスごとのスタイルガイドで追加 breakpoint を定義する方針。
### Grid(12 カラム)
- **カラム数**: 12
- **カラム幅**: 本文の文字サイズの整数倍
- **ガター**: **本文文字サイズの 2 倍**(body 16px なら gutter = 32px)
- **マージン**: ページ幅制約に応じて可変
### Header
```css
:root {
--header-block-size: 5rem; /* 80px */
}
```
### Unit Convention
```css
/* 全要素 rem ベース、border のみ px */
font-size: calc(16 / 16 * 1rem);
padding: calc(8 / 16 * 1rem) calc(16 / 16 * 1rem);
border: 1px solid;
```
`calc(N / 16 * 1rem)` は「設計時の N px をユーザー設定に応じてスケールさせる」公式パターン。
---
## 5b. Spacing(公式:3〜5 値の Modular Scale)
公式 Foundations の Spacing ページは **3〜5 個の値による modular scale** を推奨しています。具体的なトークン名は定義されておらず、サービスごとのスタイルガイドで決定する方針。
### 公式が示す例
| スケール | 値 | 倍率(基準 8px) |
|----------|-----|------------------|
| 基準単位 | **8 CSS px** | 1× |
| 中間 | **24 CSS px** | 3× |
| 大 | **64 CSS px** | 8× |
中間値(16px / 32px / 48px 等)への明示的な言及はなく、**「3〜5 値で modular scale を作る」原則**のみが提示されています。
### 推奨運用
- 余白スケールはサービス単位で **3〜5 個**に絞る
- 倍率系列で構成(1× / 3× / 8× など、単純な等比または整数倍)
- コンポーネント間の視覚調和を優先
---
## 5c. Corner Shapes(5 段階のスケール)
公式 Foundations の Corner Shapes ページは **5 段階**の border-radius スケールを定義:
| Stage | 名称 | 標準値 | 矩形(横長)の調整値 |
|-------|------|--------|--------------------|
| 1 | **角丸なし** | `0` | — |
| 2 | **角丸スモール** | `8px` | — |
| 3 | **角丸ミディアム** | `16px` | `12px` |
| 4 | **角丸ラージ** | `32px` | `16px` |
| 5 | **角丸フル** | `50%` | — |
### 重要ルール
- **同じ radius 値でもコンポーネントサイズで見え方が変わる**ため、**矩形(幅 ≫ 高さ)は radius を縮小**して視覚的な統一感を維持
- **部分適用可能**: 4 隅すべてに同じ値を当てる以外に、特定の角だけ丸める運用も許容
- 5 段階を**目安**として、コンポーネント単位で個別調整
### コンポーネント別の対応(実装リポジトリ実測)
| コンポーネント | 適用 radius |
|--------------|-----------|
| Button lg / md | 8px(角丸スモール) |
| Button sm | 6px(補間) |
| Button xs | 4px(補間) |
| Input Text | 8px |
| Notification Banner standard | 12px(角丸ミディアム矩形版) |
| Skip Link | 4px |
| Header Logo | 4px |
| Pill / Lang Selector | 9999px(角丸フル相当) |
---
## 5d. Icon(公式:文書構造ベースの 4 位置タイプ)
公式 Icon ページは、アイコンを**視覚サイズや機能ではなく「テキストフロー上の位置」で 4 種類**に分類します。これは独自の概念モデル:
| 位置タイプ | 配置場所 | 用途例 |
|----------|---------|-------|
| **Front Icon** | ブロックレベルボックスの先頭 | セクション見出し前のアイコン |
| **Lead Icon** | 行ボックスの先頭 | ボタンテキスト前のアイコン |
| **Tail Icon** | 行ボックスの末尾 | 外部リンク・新規タブ表示 |
| **End Icon** | ブロックレベルボックスの末尾 | カード下部のアクション矢印 |
### Icon アクセシビリティ仕様(公式)
- **必ずラベルと併用**(単独使用は原則禁止)
- ラベル併記時は `alt=""`(または `aria-label` 不要)
- 単独使用の例外時のみ `aria-label` にラベル内容を記入
- **テキスト隣接アイコンは 4.5:1 のコントラスト比**を維持
- インタラクティブアイコン(クリック可能)は **44×44 CSS px のターゲットサイズ**必須
---
## 6. Depth & Elevation
**8 段階のシャドウ階層が公式定義**されています(実サイトトップでは未使用ですが、Drawer / Modal / Card 等のコンポーネントで利用)。
```css
--elevation-1: 0 2px 8px 1px rgba(0,0,0,0.1), 0 1px 5px 0 rgba(0,0,0,0.3);
--elevation-2: 0 2px 12px 2px rgba(0,0,0,0.1), 0 1px 6px 0 rgba(0,0,0,0.3);
--elevation-3: 0 4px 16px 3px rgba(0,0,0,0.1), 0 1px 6px 0 rgba(0,0,0,0.3);
--elevation-4: 0 6px 20px 4px rgba(0,0,0,0.1), 0 2px 6px 0 rgba(0,0,0,0.3);
--elevation-5: 0 8px 24px 5px rgba(0,0,0,0.1), 0 2px 10px 0 rgba(0,0,0,0.3);
--elevation-6: 0 10px 30px 6px rgba(0,0,0,0.1), 0 3px 12px 0 rgba(0,0,0,0.3);
--elevation-7: 0 12px 36px 7px rgba(0,0,0,0.1), 0 3px 14px 0 rgba(0,0,0,0.3);
--elevation-8: 0 14px 40px 7px rgba(0,0,0,0.1), 0 3px 16px 0 rgba(0,0,0,0.3);
```
各 elevation は **2 つの shadow** を重ねた構成(広いソフト + 細かい強)。
---
## 7. Do's and Don'ts
### Do(推奨)
- リンクは **`blue-1000` (#00118f)** から開始し、**5 状態(default/visited/hover/active/focus)** すべてを定義
- リンク **focus は黒枠 + 黄色背景(yellow-300 全体)** で示す
- ボタンは **default = blue-900 / hover = blue-1000 / active = blue-1200** の 3 段階
- focus indicator は **4px 黒 outline + 2px yellow-300 リング** の公式パターン
- Heading は 10 サイズスケール(16/18/20/24/28/32/36/45/57/64)から選ぶ
- letter-spacing は **3 段階**(0 / 0.01em / 0.02em)でサイズに反比例
- 本文の **最小 font-size は 14px**。それ以下は原則使用しない
- フォントは `"Noto Sans JP", -apple-system, BlinkMacSystemFont, sans-serif` で OK
- 等幅は `"Noto Sans Mono", monospace`(数値・コード)
- 単位は **`calc(N / 16 * 1rem)`** で書く(border のみ px)
- semantic-error は `--color-semantic-error-1`(red-800)から始める
- **breakpoint は 768px の 1 点のみ**(XS/SM/MD/LG/XL は使わない)
- グリッドは **12 カラム**、ガターは本文文字サイズの **2 倍**
- 余白は **3〜5 値の modular scale** に絞る(例: 8/24/64)
- 角丸は **5 段階スケール**(0 / 8 / 16 / 32 / 50%)。矩形は radius を縮小
- アイコンは **位置で 4 タイプ**(Front / Lead / Tail / End)に分類
- 外部リンクには **Tail Icon** を末尾配置
- アイコンは必ずラベルと併用、単独使用しない
- インタラクティブアイコンは **44×44 CSS px** のタッチターゲット
- WCAG 2.2 AA を最小目標、`forced-colors: active` 対応も忘れない
- 小さいボタン(sm/xs)は **44px の不可視タップターゲット**を `::after` で確保
- テキストコントラストは **4.5:1 以上**、非テキスト UI は **3:1 以上**
### Don't(禁止)
- `Segoe UI` を font stack に含めない(公式は4要素のみ)
- 14px 未満のフォントサイズを使わない
- letter-spacing を全要素 0.02em にしない(サイズにより変える)
- ボタンに `box-shadow` で奥行きを作らない(ボーダーと色面で)
- ただし「shadow を絶対使うな」ではない — Drawer / Modal 等は elevation-1〜8 を使う
- 純黒 `#000` を本文に使わない(`solid-gray-800 #333` を使う)
- **リンクの hover で文字サイズ・ウェイトを変えない**(領域がたつき防止)
- リンクを default 色だけで実装しない(5 状態すべて定義する)
- 色だけでリンクを判別させない(必ず下線などの非色情報を併用)
- アイコンを単独で使わない(必ずラベルと併用)
- breakpoint を多段階で持たない(768px 1 点のみ)
- 余白スケールを 6 値以上にしない(3〜5 値推奨)
- `dads-` 以外のプレフィックスでデザインシステム由来の class を作らない
- `:hover` を必ず `@media (hover: hover)` で囲む(タッチデバイスでの誤発火を防ぐ)
---
## 8. Responsive Behavior
### Breakpoint
```css
@media (min-width: 48rem) {
/* tablet+ — 768px 以上 */
}
```
公式実装で観測される breakpoint は **48rem (768px) 一点**のみ(極めてシンプル)。
### タッチターゲット
- Button sm/xs: 表示は 36/28px だが `::after` で 44×44px の不可視タップ領域を確保
- Modal close, Mobile close: 44×44px
### フォントサイズの調整
- 本文 17px は維持
- 大型 H1 45px → モバイルで小さい size variant を選ぶ(同じ Heading コンポーネントの `data-size` を切り替え)
### Forced-Colors
全コンポーネントが `@media (forced-colors: active)` を持ち、Windows ハイコントラストモードに対応:
```css
@media (forced-colors: active) {
.dads-button:disabled { border-color: GrayText; color: GrayText; }
.dads-heading[data-chip]::before { background-color: CanvasText; }
}
```
### Reduced Motion
`@media (prefers-reduced-motion: reduce)` も主要コンポーネントで対応。
---
## 9. Agent Prompt Guide
### クイックリファレンス
```
# Source
GitHub: digital-go-jp/design-system-example-components-html (MIT)
Storybook: https://design.digital.go.jp/dads/html/
Tokens: @digital-go-jp/design-tokens
# Brand Color
Link / Active: var(--color-primitive-blue-1000) → #00118F
Button Default: var(--color-primitive-blue-900) → #0017C1
Button Hover: var(--color-primitive-blue-1000)
Button Active: var(--color-primitive-blue-1200) → #000060
Selected Bg: var(--color-primitive-blue-100) → #D9E6FF
Focus Ring: var(--color-primitive-yellow-300) → #FFD43D
# Text
Body Primary: var(--color-neutral-solid-gray-800) → #333333
Body Sub: var(--color-neutral-solid-gray-700) → #4D4D4D
Placeholder: var(--color-neutral-solid-gray-536) → #767676 (WCAG 4.5:1)
Disabled: var(--color-neutral-solid-gray-420) → #949494 (AAA)
Error: var(--color-semantic-error-1) → #EC0000
# Typography
Sans: "Noto Sans JP", -apple-system, BlinkMacSystemFont, sans-serif
Mono: "Noto Sans Mono", monospace
Body: 17px / 400 / lh 1.7 / ls 0.02em
Heading 45px: lh 1.4 / ls 0
Heading 32px: lh 1.5 / ls 0.01em
Heading 16px: lh 1.7 / ls 0.02em
# Buttons
Sizes: lg 56px / md 48px / sm 36px (44px tap) / xs 28px (44px tap)
Radius: 8 / 8 / 6 / 4 (px)
Types: solid-fill / outline / text
Focus: 4px black outline + 2px yellow-300 ring
# Inputs
Border: 1px solid solid-gray-600
Radius: 8px
Heights: sm 40 / md 48 / lg 56
Read-only: border-style: dashed
# Link (5-state state machine)
Default: blue (blue-1000 #00118f) + underline
Visited: magenta + underline
Hover: lighter color + thicker underline (NEVER change weight/size)
Active: orange + underline
Focus: black border + yellow-300 background (whole bg)
# Icon (4-position model)
Front Icon: block-level head(見出し前等)
Lead Icon: inline start(ボタン内アイコン等)
Tail Icon: inline end(外部リンク表示等)
End Icon: block-level tail(カード下のアクション等)
# Elevation
8 levels: --elevation-1 〜 --elevation-8
# Layout / Breakpoint
Single breakpoint: 768px のみ(min-width: 48rem)
Grid: 12 columns / gutter = 本文 × 2 (= 32px)
# Spacing
Recommended: 3〜5 値の modular scale
Example: 8 / 24 / 64 (1× / 3× / 8×)
# Corner Shapes (5 stages)
None / Small / Medium / Large / Full = 0 / 8 / 16 / 32 / 50%
矩形は radius を縮小: Medium 16→12, Large 32→16
# Min Font Size
14px 未満は原則使用禁止(公式ルール)
# Contrast
Text: 4.5:1 以上
Non-text UI: 3:1 以上
# Unit Convention
font-size: calc(16 / 16 * 1rem)
padding: calc(N / 16 * 1rem)
border: 1px (px のみ例外)
```
### プロンプト例
```
デジタル庁デザインシステム(DADS)に従って、お問い合わせフォームを作成してください。
- font-family: "Noto Sans JP", -apple-system, BlinkMacSystemFont, sans-serif
- 本文: 17px / 400 / line-height 1.7 / letter-spacing 0.02em / color: solid-gray-800 (#333)
- フォームラベル: 16px / 700 / line-height 1.7 / letter-spacing 0.02em
- Input: border 1px solid-gray-600 / border-radius 8px / height 48px (md size)
- Input focus: outline 4px solid black + box-shadow 0 0 0 2px yellow-300 (#FFD43D)
- Required indicator: red-800 (#EC0000)
- Submit button: bg blue-900 (#0017C1) / color white / border-radius 8px / lg size (56px)
- Button hover: bg blue-1000 (#00118F)
- Button focus: outline 4px black + 2px yellow-300 ring(Input と統一)
- 単位は calc(N / 16 * 1rem) で書く
- WCAG 2.2 AA 準拠 / forced-colors / reduced-motion 対応
- :hover は @media (hover: hover) で囲む
```
### Storybook 参照運用
新規コンポーネントを作る前に、必ず以下を確認:
1. **公式 Storybook** で同等コンポーネントが既存か
2. 既存コンポーネントの **CSS / mdx** を `digital-go-jp/design-system-example-components-html` リポジトリで確認
3. CSS class は **`dads-` プレフィックス + BEM**、修飾子は **`data-*` 属性**で表現
4. アクセシビリティテスト(VRT)を Playwright で実行可能
公式 37 コンポーネントが既にカバーする範囲:
> accordion / blockquote / breadcrumb / button / calendar / card / carousel / checkbox / chip-label / date-picker / description-list / disclosure / divider / drawer / emergency-banner / file-upload / form-control-label / global-menu / hamburger-menu-button / heading / input-text / language-selector / link / list / menu-list-box / menu-list / notification-banner / progress-indicator / radio / resource-list / search-box / select / step-navigation / table / textarea / utility-link
これら 37 種に当てはまる UI なら、まず公式実装を見るべき。
### 実サイト digital.go.jp との関係
実サイト digital.go.jp は本デザインシステムの **サブセット** を採用しています:
- ✅ 採用: カラー(blue-1000 / 100 / solid-gray-* / yellow-300 など)
- ✅ 採用: Heading スケール(45px H1 など)
- ✅ 採用: 4-element font-family stack の主要部分
- ⚠ 部分採用: ヘッダーで `Segoe UI` 等の旧指定が残る箇所あり
- ⚠ 部分採用: トップページでは elevation-1〜8 を使わず完全フラット
- ✅ 採用: focus indicator の WCAG 2.2 仕様
新規実装では **DESIGN.md(公式トークン)を真とし**、実サイトはあくまで参考実装の 1 例として扱ってください。