STYLE GUIDE β

Style Guide β

DiSAのページは、この設計書に基づいて実装されています。カラートークン・コンポーネント・グリッド・アニメーションを1ファイルで一元管理することで、ブランドの統一感と実装の再現性を保証します。

🎨

Token First

色・サイズ・余白はすべて CSS 変数で定義。デザイン変更は1箇所の編集で全ページに反映されます。

🧩

Component Based

15 のコンポーネントパターンで構成。同じクラス名・同じ構造で、どのページも一貫した見た目を保証します。

📱

Mobile Ready

全グリッドは 960px 以下で自動的に 1カラムへ折り返し。追加実装なしにモバイル対応を実現します。

DESIGN TOKENS

1. デザイントークン

カラー — アクセント

--blue#3f8092アクセント・CTA
--blue-deep#2f6674ホバー・強調
--blue-soft#b9d7de背景・サブ強調

カラー — ベース & ニュートラル

--bg#edededページ背景
--panel#dfdfdfパネル背景
--c-surface#f5f5f5カード・行背景
--text#313338本文テキスト
--c-ink#111見出し・太テキスト
--c-muted#555補足テキスト
--surface-border#d0d0d0ボーダー・区切り

タイポグラフィスケール

変数値 (clamp)用途
--fs-138px〜64px超大見出し (.h2-accent)
--fs-222px〜34pxセクション見出し (h2)
--fs-317px〜20pxカード見出し (h3)
--fs-414px〜17px本文
--fs-512px〜14px補足テキスト・ラベル

行間 (Line Height) ポリシー

行間タイプ値 (line-height)用途・特徴
本文・リスト1.8日本語文章に最も適した、読み疲れしないゆったりとした余白感(.content-stackなど)
カード・解説文1.7グリッド内などの限られたスペースで可読性を保ちつつコンパクトに収める行間
大見出し (h2)1.25見出しテキストの一体感と力強さを引き出すための狭い行間
超大見出し (h2-accent)1.2フォントサイズが極大のタイトル用として、最も引き締まった行間

シャドウ

--surface-shadow
--surface-shadow-strong
--surface-shadow-deep

ボーダーラジウス

--radius-sm
8px
--radius-md
12px
--radius-lg
14px
pill
999px

レイアウト・ブレイクポイント

定義・変数用途
--site-max1140pxコンテンツ全体の最大表示幅
--gutter15px画面左右のセーフティ余白
グリッド崩し (SP崩し)960px以下これ以下で全グリッドが自動的に1カラムに折り返します(@media)
モバイル表示切替 (SP)768px以下これ以下で一部のカード群が横スワイプカルーセル化、フォントサイズ調整、改行無効化などが発生します(@media)

BUTTONS

2. ボタン

標準 CTA — .cm-btn

<a class="cm-btn" href="/inquiry/">お問い合わせはこちら</a>

サービスカード内 CTA — .service-banner-btn

<a class="service-banner-btn" href="/inquiry/">詳細はこちら →</a>

TYPOGRAPHY

3. タイポグラフィ

フォントファミリー

Inter

"Inter" — 欧文・数字・UI要素

Noto Sans JP

"Noto Sans JP" — 日本語テキスト

font-family: "Inter", "Noto Sans JP", sans-serif;

フォントウェイト

Regular 400 本文・読み物テキスト
Bold 700 見出し・カードタイトル・強調
Black 900 インパクト見出し・数字・.h2-accent

ページ最大見出し — h1.page-title

<h1 class="page-title">ページタイトル</h1>

セクションラベル + 見出し — .eyebrow + h2

■ トップページ(.page-top)での表示例 — 中央揃え

SECTION LABEL

セクション見出し

■ 下層ページ(.page-main)での表示例 — 左揃え

SECTION LABEL

セクション見出し

<p class="eyebrow">SECTION LABEL</p>
<h2>セクション見出し</h2>

補足見出し — .sub

■ トップページ(.page-top)での表示例 — 中央揃え

サブ見出し・補足テキスト

■ 下層ページ(.page-main)での表示例 — 左揃え

サブ見出し・補足テキスト

<p class="sub">サブ見出し・補足テキスト</p>

本文テキストコンテナ — .content-stack

本文テキスト。複数段落はこの中に並べます。

2段落目。リスト要素も使えます。

  • リスト項目 1
  • リスト項目 2
<div class="content-stack">
  <p>本文テキスト。</p>
  <p>2段落目。</p>
</div>

LAYOUT

4. パネル & レイアウト

標準パネル — .panel

.panel(ページ背景と区別がつきにくいため枠線で表示)
背景: --panel (#dfdfdf), padding: clamp(20px, 3vw, 40px), border-radius: 14px
<section class="panel" data-aos="fade-up" data-aos-duration="700">
  <p class="eyebrow">LABEL</p>
  <h2>見出し</h2>
  <!-- コンテンツ -->
</section>

イントロパネル — .panel.about-intro-dark

.about-intro-dark: 背景・ボーダーが消えページ背景と一体化。ページ最初のパネルに使用。
<section class="panel about-intro-dark" data-aos="fade-up" data-aos-duration="700">
  <h1 class="page-title">ページタイトル</h1>
  <div class="content-stack">
    <p>概要文。</p>
  </div>
</section>

インナーパネル — .inner-panel

パネル内のサブエリア。背景色は --bg (#ededed) と同じ。パネル (#dfdfdf) の中で明るく浮き上がる。

<div class="inner-panel">
  <!-- ネストしたコンテンツ -->
</div>

CARDS

5. カード

カード内タイポグラフィ原則 (Card Typography Policy)

カード型コンポーネント(.card, .member-card, .support-card, .flow-item等)のテキスト配置には、全ページ共通で以下の統一ルールが適用されます:

  • 太字(Bold)テキストは中央揃え(text-align: center;):見出し(h3等)、肩書き(.role)、ラベル(.en-label)など、太字の構成要素はすべて中央揃えで配置します。
  • 細字(Regular/Thin)テキストは左寄せ(text-align: left;):複数行にわたる説明文、プロフィール文、本文等、細字の通常テキストは可読性向上のためすべて左寄せで配置します。
  • リスト・フロー項目(.flow-item):バッジ付フロー内であっても原則通り、太字の見出しは中央揃え、細字の説明テキストは左寄せを維持し、明快な構造を作ります。

5-1. 汎用カード — .cards > .card(3カラム) ※太字中央・細字左寄せ

情報発信

情報発信

ウェビナー・交流会・note

詳細はこちら →

「自分だけがうまくできていないのか」と思ったことはないか。ウェビナー・交流会・noteで、現場の生の声を集め、一緒に前に進む場をつくっています。

体系化

体系化

ナレッジ化・共同講座の開発

詳細はこちら →

現場で積み上げてきた経験やノウハウを整理し、次の世代に渡せる形にする。それがナレッジ化の目的です。

サポート

サポート

スポット支援・法人会員

詳細はこちら →

困ったときに頼れる専門家が、すぐそこにいる環境をつくります。

<div class="cards">
  <article class="card" data-aos="flip-left" data-aos-duration="400"
           data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <div class="card-banner">
      <img src="/assets/wp/photo.webp" alt="説明" loading="lazy">
      <h3>見出し</h3>
      <h4>サブ見出し</h4>
      <a class="card-banner-btn" href="/...">詳細はこちら →</a>
    </div>
    <div class="card-body"><p>本文。</p></div>
  </article>
</div>

5-2. サポートカード(3カラム) — .support-grid--3 > .support-card ※太字中央・細字左寄せ

※ モバイル(≤768px)では3個以上の子要素を持つ場合、自動でスワイプ可能なスライダーに変換されます(2個以下の場合は静的グリッドレイアウトを維持)

▼ 画像あり(アバター写真)

ディレクター
DIRECTOR

ディレクター

説明文テキスト。

デザイナー
DESIGNER

デザイナー

説明文テキスト。

エンジニア
ENGINEER

エンジニア

説明文テキスト。

<div class="support-grid support-grid--3">
  <div class="support-card" data-aos="flip-left" data-aos-duration="400"
       data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <div class="support-icon">
      <img src="/assets/wp/support-faces/director.webp" alt="ディレクター" loading="lazy">
    </div>
    <span class="en-label">DIRECTOR</span>
    <h3>ディレクター</h3>
    <p>説明文。</p>
  </div>
</div>

▼ 絵文字アイコン

🏔️
MISSION

ミッション

説明文テキスト。

🔭
VISION

ビジョン

説明文テキスト。

📋
VALUES

バリュー

説明文テキスト。

<div class="support-grid support-grid--3">
  <article class="support-card">
    <div class="support-icon">🏔️</div>
    <span class="en-label">MISSION</span>
    <h3>ミッション</h3>
    <p>説明文。</p>
  </article>
</div>

▼ 画像なし(.detail-card 修飾子)

得られるもの

・沈黙を恐れず、落ち着いて言葉を待てる精神的なゆとり

・聴衆一人ひとりと目が合う、深いコンタクトスキル

実施概要

・120分 × 3回:300,000円

・参加人数:6名まで

実施方法・時間

・第1回:依頼企業様のオフィスで実施

・1セッション120分 / 平日10:00〜17:00対応

<div class="support-grid support-grid--3">
  <article class="support-card cm-card detail-card">
    <h3>見出し</h3>
    <p>説明文。</p>
  </article>
</div>

5-3. サポートカード(4カラム / 丸アバタ写真) — .support-grid > .support-card ※太字中央・細字左寄せ

※ モバイル(≤768px)では3個以上の子要素を持つ場合、自動でスワイプ可能なスライダーに変換されます

▼ 画像あり(アバター写真)

ディレクター
DIRECTOR

ディレクター

説明文テキスト。

デザイナー
DESIGNER

デザイナー

説明文テキスト。

エンジニア
ENGINEER

エンジニア

説明文テキスト。

マーケター
MARKETER

マーケター

説明文テキスト。

<div class="support-grid">
  <div class="support-card" data-aos="flip-left" data-aos-duration="400"
       data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <div class="support-icon">
      <img src="/assets/wp/support-faces/director.webp" alt="ディレクター" loading="lazy">
    </div>
    <span class="en-label">DIRECTOR</span>
    <h3>ディレクター</h3>
    <p>説明文。</p>
  </div>
</div>

▼ 絵文字アイコン

🎯
PLAN

企画

説明文テキスト。

📐
DESIGN

設計

説明文テキスト。

⚙️
BUILD

開発

説明文テキスト。

🚀
LAUNCH

リリース

説明文テキスト。

<div class="support-grid">
  <article class="support-card">
    <div class="support-icon">🎯</div>
    <span class="en-label">PLAN</span>
    <h3>企画</h3>
    <p>説明文。</p>
  </article>
</div>

5-4. サービスカード — .service-grid > .service-card(3カラム) ※太字中央・細字左寄せ

<div class="service-grid">
  <article class="service-card" data-aos="flip-left" data-aos-duration="400"
           data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <div class="service-banner">
      <img class="service-banner-avatar" src="/assets/wp/photo.webp" alt="担当者名">
      <p class="service-banner-title">サービス名</p>
      <a class="service-banner-btn" href="/partner/">詳細はこちら →</a>
    </div>
    <div class="service-body"><p>説明文。</p></div>
  </article>
</div>

5-5. 制作実績カード — .tile-grid > .works-tile(3カラム) ※太字中央・細字左寄せ

TOMAP

DXプロジェクト支援

サイトを見る →

実績の概要文。DX、業務改善PJのPMO、イベントレポートなど実績の詳細を記載します。

<div class="tile-grid">
  <article class="works-tile" data-aos="flip-left" data-aos-duration="400"
           data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <div class="works-tile-banner">
      <img src="/assets/wp/toma.webp" alt="TOMAP" loading="lazy">
      <h3>DXプロジェクト支援</h3>
      <a class="works-tile-btn" href="https://tomap.co/" target="_blank"
         rel="noopener noreferrer">サイトを見る →</a>
    </div>
    <div class="works-tile-body">
      <p>実績の概要文。</p>
    </div>
  </article>
</div>

5-6. メンバーカード — .member-cards > .member-card(3カラム) ※太字中央・細字左寄せ

<div class="member-cards">
  <article class="member-card" data-aos="flip-left" data-aos-duration="400"
           data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <img src="/assets/wp/photo.webp" alt="氏名" loading="lazy">
    <h3>氏名(ニックネーム)</h3>
    <p class="role">役職</p>
    <p>プロフィール文。</p>
    <div class="member-links">
      <a href="/member/...">↗詳細プロフィール</a>
      <a class="x-icon-link" href="https://x.com/handle" target="_blank"
         rel="noopener noreferrer">𝕏</a>
    </div>
  </article>
</div>

5-7. FAQカード — .faq-grid > .faq-card(2カラム)

Q:どんな人が対象ですか?
A:Webディレクター、デザイナー、エンジニアなど制作に関わる方が対象です。
Q:費用はかかりますか?
A:活動によって異なります。詳しくはお問い合わせください。
<div class="faq-grid">
  <dl class="faq-card" data-aos="flip-left" data-aos-duration="400"
      data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
    <dt>Q:質問文</dt>
    <dd>A:回答文。</dd>
  </dl>
</div>

5-8. スポットCTAカード — .spot-cta-card.cm-card

<article class="spot-cta-card cm-card">
  <p class="spot-cta-label">INQUIRY</p>
  <p class="spot-cta-copy">メールはASAPで返信します</p>
  <a class="service-banner-btn cm-btn" href="/inquiry/">お問い合わせはこちら →</a>
</article>

5-9. Slackカード — .slack-cards > .slack-card.cm-card(ai-bu専用)

🛠️ 自作デモ

M
ユーザーA

英語学習アプリ作りました!日常で出会ったフレーズをGemini APIでアーカイブできます。

Y
ユーザーB

DB管理どうしてる?うちスプレッドシートでなんとかしてるんだけど…w

👍 3 🔥 1
<div class="slack-cards">
  <div class="slack-card cm-card" data-aos="fade-up" data-aos-duration="500"
       data-aos-delay="0" data-aos-once="true">
    <p class="slack-card-label">🛠️ ラベル</p>
    <div class="slack-msgs">
      <div class="slack-msg">
        <span class="slack-avatar">M</span>
        <div class="slack-body">
          <span class="slack-name">ユーザー名</span>
          <p>メッセージ。</p>
        </div>
      </div>
      <div class="slack-reactions">
        <span class="slack-reaction">👍 3</span>
      </div>
    </div>
  </div>
</div>

FLOW

6. フロー

.flow-list > .flow-item(縦並び)

1

ステップ 1

最初のステップの説明文が入ります。

2

ステップ 2

次のステップの説明文が入ります。

3

ステップ 3

最後のステップの説明文が入ります。

<div class="flow-list">
  <div class="flow-item">
    <div class="flow-num">1</div>
    <div class="flow-content">
      <h3>ステップ見出し</h3>
      <p>説明文。</p>
    </div>
  </div>
</div>

TABLE

7. 法人概要テーブル

.law-grid > .law-table

法人名 一般社団法人ディレクションサポート協会
代表理事 助田 正樹
設立 2022年
<table class="law-table">
  <tr>
    <th>法人名</th>
    <td>一般社団法人ディレクションサポート協会</td>
  </tr>
</table>

GRID SYSTEM

8. グリッドシステム

グリッドクラス一覧

クラスカラム数使用コンポーネント
.cards3汎用 .card
.member-cards3.member-card
.service-grid3.service-card
.support-grid--33.support-card(3列)
.support-grid--22.support-card(2列)
.support-grid4.support-card
.faq-grid2.faq-card
.law-grid2.law-table + 地図

※ すべてのグリッドは 960px 以下で 1カラムに折り返します。

ANIMATION

9. AOS アニメーション

使用パターン

要素属性
.panel(セクション)data-aos="fade-up" data-aos-duration="700"
カード 1枚目data-aos="flip-left" data-aos-duration="400" data-aos-delay="0" data-aos-easing="ease" data-aos-once="true"
カード 2枚目data-aos-delay="100"
カード 3枚目data-aos-delay="200"
カード 4枚目data-aos-delay="300"
<!-- data-aos-once="true" は必須 -->
<div class="support-card" data-aos="flip-left" data-aos-duration="400"
     data-aos-delay="0" data-aos-easing="ease" data-aos-once="true">
<div class="support-card" data-aos="flip-left" data-aos-duration="400"
     data-aos-delay="100" data-aos-easing="ease" data-aos-once="true">
<div class="support-card" data-aos="flip-left" data-aos-duration="400"
     data-aos-delay="200" data-aos-easing="ease" data-aos-once="true">

UI / UX QUALITY

10. UI/UX 品質基準

ユーザビリティチェックリストを基に定めた全ページ共通のルール。styles.css Section 12 および main.js に実装済み。

10-1. スキップリンク(キーボードナビゲーション)

Tab キーを押したときのみ左上に表示されるリンク。main.js が全ページに自動挿入します。

/* main.js — 全ページ自動挿入 */
const skip = document.createElement('a');
skip.href = '#main-content';
skip.className = 'skip-link';
skip.textContent = 'メインコンテンツへスキップ';

10-2. フォーカスリング(:focus-visible)

/* マウス操作では非表示、Tab/キーボード操作時のみ表示 */
a:focus-visible,
button:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 2px;
  border-radius: 4px;
}

10-3. 必須フィールドマーク(自動付与)

required 属性を持つ input/textarea の label には CSS :has() で自動的に * を付与。HTML 変更不要。

/* HTML — required を付けるだけで * が自動表示される */
<label for="name">お名前</label>
<input type="text" id="name" required aria-required="true" autocomplete="name">

/* CSS */
.form-field:has(input[required]) label::after,
.form-field:has(textarea[required]) label::after {
  content: " *";
  color: #c0392b;
  font-weight: 900;
}

10-4. フォームエラー状態(:user-invalid)

/* ユーザーが操作した後 invalid になった場合のみ赤枠 */
.form-field input:user-invalid,
.form-field textarea:user-invalid {
  border-color: #c0392b;
  background: #fff8f8;
}

/* JS から付与するフォールバック用クラス */
.form-field input.is-invalid { ... }

10-5. フォーム送信フィードバック

送信が完了しました。ご連絡ありがとうございます。担当者よりご返信いたします。
送信に失敗しました。しばらく経ってから再度お試しいただくか、チャットよりご連絡ください。
/* HTML — フォーム直下に配置 */
<div id="form-result" class="form-result" role="alert" aria-live="polite" hidden></div>

/* main.js が送信結果に応じてクラスを付与して hidden を解除 */
resultEl.className = 'form-result form-result--success';
resultEl.hidden = false;

10-6. ナビゲーション現在ページ表示(aria-current)

main.js が URL を照合して現在ページのリンクに自動付与。HTML 変更不要。

/* CSS */
nav a[aria-current="page"]:not(.nav-cta) {
  color: var(--blue-deep);
}
nav a[aria-current="page"]:not(.nav-cta)::after {
  opacity: 1;
  transform: scaleX(1); /* アンダーラインを表示 */
}

/* main.js — 全ページ自動実行 */
const path = window.location.pathname.replace(/\/$/, '');
for (const link of document.querySelectorAll('.site-header nav a')) {
  const linkPath = link.getAttribute('href').replace(/\/$/, '');
  if (linkPath === path || path.startsWith(linkPath + '/')) {
    link.setAttribute('aria-current', 'page');
  }
}

10-7. タッチターゲット最小サイズ

要素変更前変更後基準
.member-links a(SNS・外部リンクボタン)30 × 30px40 × 40pxWCAG 2.5.5 推奨 44px に近づけた
.member-links a:not(.x-icon-link),
.member-links .x-icon-link {
  width: 40px;
  height: 40px;
  min-width: 40px;
  min-height: 40px;
}

10-8. ボタンホバートランジション

.card-banner-btn,
.service-banner-btn,
.works-tile-btn,
.cm-btn {
  transition: background-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;
}

.card-banner-btn:hover,
.service-banner-btn:hover,
.works-tile-btn:hover,
.cm-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.14);
}

/* 送信ボタン */
.form-submit {
  transition: background-color 0.2s ease, transform 0.15s ease;
}
.form-submit:active:not(:disabled) { transform: scale(0.98); }
.form-submit:disabled { opacity: 0.6; cursor: not-allowed; }

10-9. フォーム autocomplete 属性

フィールドautocomplete 値
お名前name
会社名organization
メールアドレスemail
<input type="text" id="name" name="name"
       required aria-required="true" autocomplete="name">
<input type="text" id="company" name="company" autocomplete="organization">
<input type="email" id="email" name="email"
       required aria-required="true" autocomplete="email">