Focus Ring

キーボード操作時のフォーカス可視化。:focus-visible を使い、マウスクリックではリングが表示されず、Tab/キーボード操作時のみ表示されます(WCAG 2.4.7 Focus Visible 準拠)。

Interactive Elements — Tab キーで移動して確認

Link element

フォーカスリングトークン

TokenValue用途
--ring-focus-colorvar(--color-border-focus)リング色(アクセント / テーマ追従)
--ring-focus-width2pxアウトラインの太さ
--ring-focus-offset2px要素とリングの隙間

使い方

/* 全インタラクティブ要素に自動適用(グローバルルール) */
:focus-visible {
  outline: var(--ring-focus-width) solid var(--ring-focus-color);
  outline-offset: var(--ring-focus-offset);
}

/* カスタムコンポーネントにも同じトークンで統一 */
.my-widget:focus-visible {
  outline: var(--ring-focus-width) solid var(--ring-focus-color);
  outline-offset: var(--ring-focus-offset);
}
WCAG 2.1 AA 準拠 — WCAG 2.4.7 (Focus Visible) に対応。フォーカスインジケーターはキーボード操作時に常時表示され、アクセントカラーはライト/ダーク両モードで 3:1 以上のコントラスト比を維持します。エラー入力フォームのフォーカスリングは var(--color-error) に自動切替されます。

Buttons

Primary, Secondary, Ghost, Danger, and Icon-only button variants with sizes and states.

Primary

Standard action button with accent color.

Small
Medium
Large

Spec

sm: padding 0.375rem 0.75rem; font-size 0.75rem; md: padding 0.5rem 1rem; font-size 0.875rem; lg: padding 0.75rem 1.5rem; font-size 1rem; radius: 8px; border-radius: var(--radius-md); background: var(--color-accent); color: #FFFFFF;

Secondary

Outlined button with accent border.

Small
Medium
Large

Spec

sm: padding 0.375rem 0.75rem; font-size 0.75rem; md: padding 0.5rem 1rem; font-size 0.875rem; lg: padding 0.75rem 1.5rem; font-size 1rem; radius: 8px; border: 1px solid var(--color-accent); color: var(--color-accent);

Ghost

Transparent button with subtle hover state.

Small
Medium
Large

Spec

sm: padding 0.375rem 0.75rem; font-size 0.75rem; md: padding 0.5rem 1rem; font-size 0.875rem; lg: padding 0.75rem 1.5rem; font-size 1rem; radius: 8px; background: transparent; color: var(--color-text-primary);

Danger

Destructive action button with error color.

Small
Medium
Large

Spec

sm: padding 0.375rem 0.75rem; font-size 0.75rem; md: padding 0.5rem 1rem; font-size 0.875rem; lg: padding 0.75rem 1.5rem; font-size 1rem; radius: 8px; background: var(--color-error); color: #FFFFFF;

Icon-only

Square icon button in multiple sizes.

Small / Medium / Large

Spec

sm: width 2rem; height 2rem; md: width 2.5rem; height 2.5rem; lg: width 3rem; height 3rem; radius: 8px; display: flex; align-items: center; justify-content: center;

Form States

全入力系コンポーネントで共通する状態表示パターン。順序は ラベル → 入力 → 補助文 → エラー/成功メッセージ に統一(DADS-03)。

全6状態一覧

Default
ログインに使用します
Focus
ログインに使用します
Error
有効なメールアドレスを入力してください
Success
確認済みのアドレスです
Disabled
この項目は変更できません
Readonly
システムが自動付与したID(変更不可・コピー可)

レイアウト規則 — ラベル→入力→メッセージの順序

1 Label <label>for 属性を必ず付与。 必須項目は <span class="form-label-required">*</span> を末尾に(aria-hidden="true" で読み上げ除外)。
2 Input コントロール本体。状態に応じてボーダー色・フォーカスリングが変化。 エラー時は aria-invalid="true"、 メッセージIDを aria-describedby で紐付ける。
3 Help / Message 常時表示の補助文 → .form-help(色: --form-help-color)。 条件付き → .form-message.error または .form-message.success。 エラーメッセージには role="alert" を付けてスクリーンリーダーに即時通知。

フォーム状態トークン

TokenValue用途
--form-gapvar(--space-4) = 16pxフォームグループ間の余白
--form-label-gapvar(--space-1-5) = 6pxラベル↔入力の隙間
--form-message-gapvar(--space-1) = 4px入力↔補助文の隙間
--form-label-colorvar(--color-text-primary)ラベルテキスト色
--form-help-colorvar(--color-text-tertiary)補助文テキスト色
--form-error-colorvar(--color-error)エラーメッセージ色
--form-success-colorvar(--color-success)成功メッセージ色

ARIA パターン(コピー用)

<!-- エラー状態 -->
<div class="form-group">
  <label class="form-label" for="email">
    メールアドレス
    <span class="form-label-required" aria-hidden="true">*</span>
  </label>
  <input id="email" type="email" class="form-input error"
         aria-invalid="true" aria-describedby="email-error">
  <span id="email-error" class="form-message error" role="alert">
    <span class="form-message-icon" aria-hidden="true">⚠</span>
    有効なメールアドレスを入力してください
  </span>
</div>

<!-- 成功状態 -->
<div class="form-group">
  <label class="form-label" for="email">メールアドレス</label>
  <input id="email" type="email" class="form-input success"
         value="you@example.com" aria-describedby="email-ok">
  <span id="email-ok" class="form-message success">
    <span class="form-message-icon" aria-hidden="true">✓</span>
    確認済みのアドレスです
  </span>
</div>

Form Layout

フォームレイアウトの余白・並び規格(DADS-10)。 フィールド間・行間・セクション間の間隔をトークンで統一し、 単カラム / 横並び / インラインラベルの3パターンを定義する。

単カラム(推奨: max-width 480px)

省略可能

横並び行(form-row)+ セクション分割

基本情報
住所

インラインラベル(左ラベル配置)

スペーシングトークン(--form-layout-* / --form-*)

用途トークン適用箇所
フィールド間(縦)--form-field-gap--space-5 (20px).form-layout の gap
フィールド間(横並び)--form-row-gap--space-4 (16px).form-row の gap
セクション間--form-section-gap--space-8 (32px)セクション見出しの前マージン
ラベル↔入力--form-label-gap--space-1-5 (6px).form-group の gap
入力↔補助文--form-message-gap--space-1 (4px)補助文・エラーメッセージの上マージン
インラインラベル幅--form-inline-label-width140px左ラベル配置時の固定幅
フォーム最大幅--form-max-width480px単カラムフォームの推奨幅上限

実装パターン

<!-- 単カラム -->
<form class="form-layout">  <!-- gap: --form-field-gap; max-width: --form-max-width -->
  <div class="form-group">...</div>
  <div class="form-group">...</div>
</form>

<!-- 横並び行 -->
<div class="form-row">  <!-- grid 2-col, gap: --form-row-gap -->
  <div class="form-group">...</div>
  <div class="form-group">...</div>
</div>

<!-- インラインラベル -->
<div class="form-group form-group-inline">
  <label class="form-label">...</label>  <!-- width: --form-inline-label-width -->
  <input class="form-input">
</div>

Disabled / Readonly

disabledreadonly の規約分離(DADS-11)。 2つは見た目が似ているが、意味・送信挙動・アクセシビリティが異なる。用途に応じて正しく使い分ける。

disabled — 操作不可・送信されない

🚫フォーム送信: 含まれない
⌨️キーボード: フォーカス不可
🎨外観: opacity 50%・背景 bg-inset・cursor not-allowed
ARIA: disabled 属性のみ(aria-disabled="true" は interactive 要素に)
readonly — 編集不可・送信される
select に readonly は無効 → disabled + aria-readonly で代替

フォーム送信: 含まれる
⌨️キーボード: フォーカス可能(Tab でアクセス可)
🎨外観: 背景 bg-subtle・破線ボーダー・cursor default
ARIA: readonly 属性 または aria-readonly="true"

使い分けガイド

状況使うべき状態理由
権限がないため変更できないdisabled送信しても無意味・操作自体禁止を明示
確認画面の入力値を表示readonly送信時に値を含めたい・フォーカスで内容確認できる
自動計算された結果フィールドreadonly手動変更不可だが値はサーバーに送りたい
プランの上限により機能無効化disabledユーザーが変更できない状態を明確に示す
ログイン中ユーザーのメールアドレスreadonly表示・コピーは可能だが変更は不可

コンポーネントトークン(--form-disabled-* / --form-readonly-*)

トークン用途
--form-disabled-bg--color-bg-insetdisabled 背景色
--form-disabled-color--color-text-tertiarydisabled 文字色
--form-disabled-opacity--opacity-50 (0.5)disabled 不透明度
--form-disabled-cursornot-alloweddisabled カーソル
--form-readonly-bg--color-bg-subtlereadonly 背景色
--form-readonly-color--color-text-secondaryreadonly 文字色
--form-readonly-border-styledashedreadonly ボーダースタイル(破線で区別)
--form-readonly-cursordefaultreadonly カーソル(通常矢印)

Message Style

補助文・エラーメッセージ・成功メッセージの文体ガイド(DADS-12)。 詳細は docs/07-message-style.md を参照。

補助文(Help Text)

例: taro@example.com(登録済みのアドレスは使用できません)
半角英数字・記号を使用できます(8〜128 文字)

エラーメッセージ(Error Message)

メールアドレスを正しく入力してください(例: taro@example.com)
パスワードは 8 文字以上で入力してください

文体ルール — 良い例 / 悪い例

種別✅ 良い例❌ 悪い例理由
エラー メールアドレスを正しく入力してください 無効な入力です 何が問題か・どう直すかが不明
エラー パスワードは 8 文字以上で入力してください パスワードエラー 体言止め・解決策なし
エラー 使用できない文字が含まれています(半角英数字のみ) 不正な文字が含まれています 「不正」はユーザーを責める表現
補助文 例: 03-1234-5678 ここに電話番号を入力してください 冗長・ラベルと重複
成功 保存しました 操作が完了しました 具体的に何が起きたか不明

ARIA 実装(エラー時)

<div class="form-group">
  <label class="form-label" for="email">メールアドレス</label>
  <input class="form-input error"
         id="email" type="email"
         aria-invalid="true"
         aria-describedby="email-error">
  <span class="form-message error" id="email-error" role="alert">
    メールアドレスを正しく入力してください(例: taro@example.com)
  </span>
</div>
<!-- role="alert" → 動的挿入時にスクリーンリーダーが即座に読み上げる  -->
<!-- aria-invalid="true" → 入力欄本体に設定(メッセージ要素ではない) -->

Textarea Counter

上限付きテキストエリアの文字数カウンター。通常 / 警告(80%+)/ 超過(100%+) の3状態で色・ボーダー・バーが連動して変化する(DADS-04)。

状態一覧(上限 200文字)

Normal < 80%
60 / 200
Warning ≥ 80%
170 / 200
Over ≥ 100%
⚠ 215 / 200
200文字以内に収めてください(15文字オーバー)
▶ ライブデモ
0 / 120

文字数カウンタートークン

TokenValue用途
--form-counter-colorvar(--color-text-tertiary)通常状態の文字色
--form-counter-warn-colorvar(--color-warning)警告状態(≥80%)の文字色
--form-counter-over-colorvar(--color-error)超過状態(≥100%)の文字色
--form-counter-warn-threshold0.8警告開始しきい値(JS で参照可)

実装パターン(HTML + JS)

<!-- HTML -->
<div class="form-group">
  <label class="form-label" for="body">本文</label>
  <div class="textarea-wrapper">
    <textarea id="body" class="form-textarea"
              data-maxlength="200" rows="4"></textarea>
    <div class="char-counter" id="body-counter">
      <span class="char-counter-bar">
        <span class="char-counter-bar-fill" style="width:0%"></span>
      </span>
      <span class="char-counter-text">0 / 200</span>
    </div>
  </div>
</div>

<script>
function initCharCounter(textarea) {
  const max  = parseInt(textarea.dataset.maxlength, 10);
  const root = getComputedStyle(document.documentElement);
  const warnAt = parseFloat(
    root.getPropertyValue('--form-counter-warn-threshold').trim()
  ) || 0.8;

  const counter = document.getElementById(textarea.id + '-counter');
  const fill    = counter?.querySelector('.char-counter-bar-fill');
  const label   = counter?.querySelector('.char-counter-text');

  function update() {
    const len  = textarea.value.length;
    const pct  = len / max;
    const over = len > max;
    const warn = !over && pct >= warnAt;

    counter.className = 'char-counter' + (over ? ' over' : warn ? ' warn' : '');
    textarea.classList.toggle('error', over);
    textarea.classList.toggle('warn',  warn);
    if (fill)  fill.style.width = Math.min(pct * 100, 100) + '%';
    if (label) label.textContent =
      (over ? '⚠ ' : '') + len + ' / ' + max;
    textarea.setAttribute('aria-invalid', String(over));
  }

  textarea.addEventListener('input', update);
  update();
}

document.querySelectorAll('textarea[data-maxlength]')
  .forEach(initCharCounter);
</script>

Combobox

WAI-ARIA Combobox Pattern 1.2 準拠。キーボード操作・フィルタリング・選択状態を含む。 でナビゲーション、Enterで選択、Escで閉じる。

閉じた状態

    開いた状態(選択なし)

    • React
    • Vue
    • Svelte
    • Angular
    • Solid

    選択済み状態

    • React
    • Vue
    • Svelte
    • Angular
    • Solid

    ライブデモ — フィルタリング付きオートコンプリート

    Select-only(フィルターなし)

    • JavaScript
    • TypeScript
    • Python
    • Rust
    • Go
    • Swift
    • Kotlin

    Autocomplete(入力でフィルタリング)

    ARIA パターン(WAI-ARIA 1.2 Combobox)

    属性要素説明
    role="combobox"input の親コンテナコンボボックスウィジェット全体
    aria-haspopup="listbox"comboboxリストボックスポップアップを持つ
    aria-expandedcomboboxリストボックスの開閉状態(true/false)
    aria-controlscombobox関連するリストボックスの ID
    aria-activedescendantcombobox現在フォーカスのあるオプションの ID
    aria-autocomplete="list"inputフィルタリングあり(なしの場合は "none")
    role="listbox"ulオプションリスト
    role="option"li各選択肢
    aria-selectedoption選択状態(true/false)

    コンポーネントトークン(--combobox-*)

    トークン参照先用途
    --combobox-height--density-row-height入力行の高さ(密度対応)
    --combobox-padding-x--space-3水平パディング
    --combobox-bg--color-surface入力エリア背景
    --combobox-border--color-border通常時ボーダー
    --combobox-border-focus--color-border-focusフォーカス時ボーダー
    --combobox-radius--radius-md角丸
    --combobox-listbox-shadow--shadow-mdリストボックス影
    --combobox-option-height--density-row-heightオプション行高(密度対応)
    --combobox-option-hover-bg--color-bg-subtleホバー時背景
    --combobox-option-active-bg--color-selectedキーボードフォーカス背景
    --combobox-option-selected-bg--color-selected-strong選択済み背景
    --combobox-option-check-color--color-accent選択チェックマーク色

    実装パターン(WAI-ARIA 1.2)

    <!-- Select-only combobox -->
    <div class="combobox-wrapper"
         role="combobox"
         aria-haspopup="listbox"
         aria-expanded="false"
         aria-controls="my-listbox">
    
      <div class="combobox-input-row">
        <input class="combobox-input" type="text"
               placeholder="選択…" readonly
               aria-autocomplete="none">
        <svg class="combobox-chevron" ...>...</svg>
      </div>
    
      <ul class="combobox-listbox" id="my-listbox" role="listbox">
        <li class="combobox-option" role="option"
            aria-selected="false" data-value="option-1">
          <svg class="combobox-option-check">...</svg>
          選択肢 1
        </li>
      </ul>
    </div>
    
    <!-- キーボード操作 -->
    <!-- ↓↑: オプション間ナビゲーション(aria-activedescendant 更新)  -->
    <!-- Enter / Space: 選択確定・リスト閉じる                           -->
    <!-- Escape: リスト閉じる・入力値リセット                           -->
    <!-- Tab: リスト閉じる(フォーカス移動)                            -->
    <!-- Alt + ↓: リスト開く(select-only モード)                     -->

    Heading

    h1〜h4 の見出し階層とセクションラベル(eyebrow)の規約(DADS-08)。 サイズ・ウェイト・行間・余白をトークンで統一し、見出し構造がドキュメントアウトラインを正しく形成することを保証する。

    見出しスケール

    h1 32px · w700 · 1.25 ページタイトル
    h2 24px · w600 · 1.25 セクション見出し
    h3 20px · w600 · 1.25 サブセクション見出し
    h4 18px · w600 · 1.25 コンポーネント見出し

    セクションラベル + 見出し + リード文

    機能紹介

    デザインシステムで
    一貫性を実現する

    トークンベースの設計により、すべてのプロダクトで統一されたUIを維持します。

    詳細仕様

    トークン設計の原則

    Primitive → Semantic → Component の3層構造でトークンを管理します。

    コンポーネントトークン

    使用例: --form-label-gap

    フォームラベルと入力欄の間隔を統一するトークンです。

    余白規則

    ルールトークン説明
    見出し↔直後コンテンツ--heading-gap-below--space-4 (16px)見出しの下マージン
    セクション間マージン--heading-gap-above--space-8 (32px)前コンテンツ↔次見出し
    ラベル↔見出し--heading-label-gap--space-2 (8px)eyebrow ↔ 見出し間

    コンポーネントトークン(--heading-*)

    トークン参照先用途
    --heading-1-size--text-4xl (32px)h1 フォントサイズ
    --heading-2-size--text-3xl (24px)h2 フォントサイズ
    --heading-3-size--text-xl (20px)h3 フォントサイズ
    --heading-4-size--text-lg (18px)h4 フォントサイズ
    --heading-weight-display700h1 フォントウェイト
    --heading-weight600h2–h4 フォントウェイト
    --heading-line-height--leading-tight (1.25)すべての見出し行間
    --heading-color--color-text-primary見出し文字色
    --heading-label-size--text-xs (12px)セクションラベルサイズ
    --heading-label-weight600セクションラベルウェイト
    --heading-label-color--color-text-secondaryセクションラベル文字色
    --heading-label-tracking--tracking-widest (0.1em)ラベル文字間隔
    --heading-label-transformuppercaseラベル大文字変換

    見出し構造ルール(WCAG 1.3.1 — レベルA)

    <!-- ✅ 正しい例: 見出しレベルをスキップしない -->
    <h1 class="heading-1">ページタイトル</h1>
      <h2 class="heading-2">セクション</h2>
        <h3 class="heading-3">サブセクション</h3>
    
    <!-- ❌ NG: 見た目でh4を選ぶ(h2の直下にh4を置く) -->
    <!-- h2 → h4 はドキュメントアウトラインを壊す     -->
    
    <!-- セクションラベル(eyebrow)パターン -->
    <span class="heading-label" aria-hidden="true">機能紹介</span>
    <h2 class="heading-2">デザインシステムで一貫性を実現する</h2>
    <!-- aria-hidden="true" でスクリーンリーダーはラベルを重複読み上げしない -->

    Status

    ステータス表示の非色依存化ルール(DADS-09)。WCAG 1.4.1「色の使用」により、 情報は色だけで伝えてはいけない。アイコン + ラベル + 色の 3点セットが必須。

    ✅ 準拠 — アイコン + ラベル + 色
    ファイルを保存しました 完了
    ディスク容量 85% 警告
    接続が切れました エラー
    同期中 処理中
    ❌ 非準拠 — 色のみ(ドットだけ)
    ファイルを保存しました
    ディスク容量 85%
    接続が切れました
    色盲ユーザーには区別不能

    Status Badge(インライン表示)

    完了 警告 エラー 情報 処理中

    コンポーネントトークン(--status-*)

    トークン参照先用途
    --status-icon-size16pxアイコン基本サイズ
    --status-gap--space-1-5アイコン↔テキスト間隔
    --status-success-color--color-success成功 テキスト・アイコン色
    --status-success-bg--color-success-subtle成功 バッジ背景
    --status-warning-color--color-warning警告 テキスト・アイコン色
    --status-warning-bg--color-warning-subtle警告 バッジ背景
    --status-error-color--color-errorエラー テキスト・アイコン色
    --status-error-bg--color-error-subtleエラー バッジ背景
    --status-info-color--color-info情報 テキスト・アイコン色
    --status-info-bg--color-info-subtle情報 バッジ背景
    --status-neutral-color--color-text-secondary中立 テキスト・アイコン色
    --status-neutral-bg--color-bg-subtle中立 バッジ背景

    DADS-09 準拠チェックリスト(WCAG 1.4.1)

    <!-- ✅ 準拠: アイコン + ラベル + 色の3点セット -->
    <span class="status-indicator status-success">
      <svg class="status-icon" aria-hidden="true">...チェックアイコン...</svg>
      完了
    </span>
    
    <!-- ✅ バッジ形式 -->
    <span class="status-badge status-warning">
      <svg class="status-icon" aria-hidden="true">...警告アイコン...</svg>
      警告
    </span>
    
    <!-- アイコンは aria-hidden="true" にしてテキストラベルで意味を伝える -->
    <!-- スクリーンリーダー専用テキストが必要なら .sr-only クラスを使う   -->
    
    <!-- ❌ 非準拠: 色のみ(テキスト・アイコンなし)                     -->
    <span class="status-dot dot-success"></span>

    Inputs

    Text, Password, Textarea, and Select inputs with various states.

    Text Input

    Standard text input field.

    Default
    Hover
    Focus
    Filled
    Error
    This field is required
    Disabled

    Spec

    padding: 0.5rem 0.75rem; font-size: 0.875rem; radius: 8px; border: 1px solid var(--color-border); background: var(--color-surface); focus: border-color var(--color-accent); focus: box-shadow 0 0 0 3px rgba(107, 107, 224, 0.1);

    Password Input

    Password field with show/hide toggle.

    Default (Hidden)
    Visible
    Error
    Password must be at least 8 characters

    Spec

    padding: 0.5rem 0.75rem; font-size: 0.875rem; radius: 8px; border: 1px solid var(--color-border); position: relative (wrapper); toggle button: position absolute right 0.75rem top 50%;

    Textarea

    Multi-line text input.

    Default
    Filled
    Error
    Message cannot be empty
    Disabled

    Spec

    padding: 0.5rem 0.75rem; font-size: 0.875rem; radius: 8px; border: 1px solid var(--color-border); min-height: 100px; resize: vertical;

    Select / Dropdown

    Native select element.

    Default
    Selected
    Focus
    Disabled

    Spec

    padding: 0.5rem 0.75rem; font-size: 0.875rem; radius: 8px; border: 1px solid var(--color-border); background: var(--color-surface); color: var(--color-text-primary);

    Form Group

    Input with label and helper text.

    With Label & Helper
    We'll never share your email with anyone else.
    With Error Message
    Please enter a valid email address.

    Spec

    form-group: display flex; flex-direction column; gap 0.5rem; form-label: font-size 0.875rem; font-weight 500; form-helper: font-size 0.75rem; color var(--color-text-secondary); form-error: font-size 0.75rem; color var(--color-error);

    Checkboxes & Radio

    Selection controls with labels and states.

    Checkbox

    Multi-select checkbox control.

    Default (Unchecked)
    Checked
    Indeterminate
    Disabled (Unchecked / Checked)

    Spec

    width: 1.25rem; height: 1.25rem; border: 2px solid var(--color-border); border-radius: 4px; background: var(--color-surface); checked: background var(--color-accent); checked: border-color var(--color-accent); checked::after: content '✓'; color #FFFFFF;

    Radio

    Single-select radio control.

    Default (Unselected)
    Selected
    Disabled

    Spec

    width: 1.25rem; height: 1.25rem; border: 2px solid var(--color-border); border-radius: 9999px (full circle); background: var(--color-surface); checked: background var(--color-accent); checked: border-color var(--color-accent);

    Toggle Switch

    On/Off toggle control.

    Toggle Switch

    Binary toggle control with on/off states.

    Off / On / Disabled

    Spec

    input[type="checkbox"]: width: 2.5rem; height: 1.5rem; border-radius: 9999px; background: var(--color-border); checked: background var(--color-accent); ::before (circle): width: 1.25rem; height: 1.25rem; border-radius: 50%; background: #FFFFFF; left: 0.125rem; checked left: 1.125rem;

    Badges & Tags

    Status badges and closable tags.

    Badges

    Compact status and category badges.

    Variants
    Default Accent Success Warning Error Info

    Spec

    padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; white-space: nowrap; display: inline-flex; align-items: center; gap: 0.5rem;

    Closable Tags

    Tags with remove button.

    Default / With Close Button
    React TypeScript Design System

    Spec

    badge-close button: background: none; border: none; color: inherit; cursor: pointer; padding: 0; display: flex; align-items: center; font-weight: 700; margin-left: auto;

    Alerts / Banners

    Status alerts with icons and dismiss buttons.

    Alert - Success

    Positive confirmation message.

    Default / With Dismiss
    Success
    Your action completed successfully.
    Success
    Your action completed successfully.

    Spec

    padding: 1rem; border-radius: 8px; border-left: 4px solid var(--color-success); background: rgba(43, 184, 122, 0.1); color: var(--color-success); display: flex; gap: 1rem;

    Alert - Warning

    Cautionary message.

    Default / With Dismiss
    Warning
    Please review this carefully before proceeding.
    Warning
    Please review this carefully before proceeding.

    Spec

    padding: 1rem; border-radius: 8px; border-left: 4px solid var(--color-warning); background: rgba(212, 137, 30, 0.1); color: var(--color-warning); display: flex; gap: 1rem;

    Alert - Error

    Error or failure message.

    Default / With Dismiss
    Error
    Something went wrong. Please try again.
    Error
    Something went wrong. Please try again.

    Spec

    padding: 1rem; border-radius: 8px; border-left: 4px solid var(--color-error); background: rgba(201, 59, 26, 0.1); color: var(--color-error); display: flex; gap: 1rem;

    Alert - Info

    Informational message.

    Default / With Dismiss
    Info
    Here's something you should know.
    Info
    Here's something you should know.

    Spec

    padding: 1rem; border-radius: 8px; border-left: 4px solid var(--color-info); background: rgba(91, 91, 214, 0.1); color: var(--color-info); display: flex; gap: 1rem;

    Toast / Notification

    Floating notifications with auto-dismiss timer.

    Toast Notification

    Small notification displayed in corner with dismiss and auto-close.

    Success Toast
    Success
    Your file has been saved.
    Error Toast
    Error
    Failed to upload file.
    Info Toast
    Info
    Update available. Refresh to install.

    Spec

    position: fixed; bottom: 2rem; right: 2rem; max-width: 400px; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 12px; padding: 1rem; display: flex; gap: 1rem; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);

    Tooltip

    Directional tooltips (top, bottom, left, right).

    Tooltip Positions

    Tooltips in all directions.

    Top / Bottom / Left / Right
    Tooltip above
    Tooltip on left
    Tooltip on right
    Tooltip below

    Spec

    tooltip: position: absolute; background: #1A1A1F; color: #FFFFFF; padding: 0.5rem 0.75rem; border-radius: 4px; font-size: 0.75rem; white-space: nowrap; z-index: 1000; tooltip::after (arrow): width: 6px; height: 6px; background: #1A1A1F; transform: rotate(45deg);

    Progress

    Determinate / Indeterminate プログレスバーと Circular Spinner の標準化(DADS-07)。 サイズ 3 段階・セマンティックカラー 4 種・正しい role="progressbar" ARIA 付き。

    Linear — Determinate

    値バリエーション(sm / md / lg)

    sm · 25%25 / 100
    md · 60%60 / 100
    lg · 85%85 / 100
    md · 100%(完了)100 / 100

    セマンティックカラー

    accent(デフォルト)70%
    success100%
    warning45%
    danger30%

    Indeterminate & Spinner

    不定形プログレスバー

    sm
    md(デフォルト)
    lg · warning

    Circular Spinner(sm / md / lg)

    sm · 24px
    md · 40px
    lg · 56px

    コンポーネントトークン(--progress-*)

    トークン参照先用途
    --progress-height--space-2 (8px)標準トラック高
    --progress-height-sm--space-1-5 (6px)細めトラック
    --progress-height-lg--space-3 (12px)太めトラック
    --progress-track-bg--color-bg-insetトラック背景色
    --progress-fill-color--color-accent塗り色(デフォルト)
    --progress-fill-success/warning/danger各セマンティック色状態別塗り色
    --progress-radius--radius-fullPill 型角丸
    --progress-duration300msfill 変化トランジション
    --progress-spinner-size40pxスピナー直径(md)
    --progress-spinner-width--stroke-medium (2px)スピナー線幅
    --progress-spinner-color--color-accentスピナーアクティブ弧色
    --progress-spinner-track--color-bg-insetスピナートラック色
    --progress-spinner-duration700ms1回転の時間

    ARIA パターン

    <!-- Determinate -->
    <div class="progress-track"
         role="progressbar"
         aria-valuenow="60"
         aria-valuemin="0"
         aria-valuemax="100"
         aria-label="インストール進捗">
      <div class="progress-fill" style="width: 60%"></div>
    </div>
    
    <!-- Indeterminate: aria-valuenow を省略 -->
    <div class="progress-track"
         role="progressbar"
         aria-valuemin="0"
         aria-valuemax="100"
         aria-label="読み込み中">
      <div class="progress-fill progress-indeterminate"></div>
    </div>
    
    <!-- Circular spinner -->
    <div class="progress-spinner"
         role="status"
         aria-label="読み込み中"></div>

    Tabs

    Horizontal tab bar with active/inactive/disabled states.

    Tab Navigation

    Horizontal tab navigation.

    Default
    Content for Tab 1 goes here

    Spec

    tabs: display: flex; border-bottom: 1px solid var(--color-border); tab-button: background: none; border: none; color: var(--color-text-secondary); cursor: pointer; padding: 1rem 1.5rem; font-size: 0.875rem; font-weight: 500; border-bottom: 2px solid transparent; transition: all 0.2s; tab-button.active: color: var(--color-accent); border-bottom-color: var(--color-accent);

    Avatar

    User avatars with sizes, initials fallback, and status indicators.

    Avatar Sizes

    Avatar in small, medium, and large sizes.

    Small / Medium / Large
    AB
    CD
    EF

    Spec

    sm: width 32px; height 32px; font-size 0.75rem; md: width 48px; height 48px; font-size 0.875rem; lg: width 64px; height 64px; font-size 1rem; border-radius: 50%; background: var(--color-accent); color: #FFFFFF; font-weight: 600; display: flex; align-items: center; justify-content: center;

    Avatar with Status

    Avatar with online/offline status indicator.

    Online / Offline
    JD
    KL

    Spec

    avatar: position: relative; overflow: hidden; avatar-status: position: absolute; width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--color-surface); bottom: 0; right: 0; avatar-status.online: background: var(--color-success); avatar-status.offline: background: var(--color-text-secondary);

    Table

    Data table with header, rows, hover, selected, and striped variants.

    Table Rows

    Standard data table with various row states.

    Default / Hover / Selected / Striped
    Name Role Status Email
    Alice Johnson Designer Active alice@example.com
    Bob Smith Developer Active bob@example.com
    Carol White Manager Pending carol@example.com
    David Brown Engineer Inactive david@example.com

    Spec

    table: width: 100%; border-collapse: collapse; background: var(--color-surface); border-radius: 8px; overflow: hidden; thead: background: var(--color-bg); border-bottom: 1px solid var(--color-border); th: padding: 1rem; text-align: left; font-weight: 600; font-size: 0.875rem; td: padding: 1rem; border-bottom: 1px solid var(--color-border); font-size: 0.875rem; tbody tr: transition: background-color 0.2s; tbody tr:hover: background: var(--color-bg); tbody tr.selected: background: rgba(91, 91, 214, 0.1);