GODRICH
#cssアニメーション#ボタン#ローディング#トランジション#スクロール#ダッシュボード#実用ui#デザイントレンド

現場で使う ダークモード デザインシステム LPパーツ9選

今、Pinterestで保存され続けているダークモード デザインシステムは、開発者向けツールLinear.appの画面をきっかけに広まった配色のルールで、濃いインク色の背景に青いグローや枠線のハイライトだけで階層を表現します。この記事では同じ配色で組んだ9パーツを、そのまま貼り付けられるコードごと紹介します。

まずはこの配色だけで組んだ一枚のランディングページを、上から下まで実際にスクロールしてみてください。ヒーローからフッターまで明るさが一度も揺れずに保たれているかが、このスタイルを見分ける一番の手がかりです。

ページを新しいタブで開く

上の画面を組み立てた9つの部品は、ひとつのダークテーマ デザインとしてつながっていて、下のグリッドでひとつずつ個別に開いて確認できます。並び順は、訪問者が実際にページを追う流れ——最初に目を引かれ、ざっと見渡し、値段を確かめ、信頼できるか判断し、行動へ移り、登録する——そのままにしてあります。同じダークな色調をタイルへ分けて収めればベントグリッドのLPパーツになり、文字そのものが動いて色調を引っ張ればキネティックタイポグラフィのLPが続きます。

自動再生 · タイルを押すとその項目へ · すべて1つのzip

01ヒーロー

モックアップと青いグロー

濃いインク色の背景の上にブラウザクロームを模したモックアップウィンドウを浮かべ、その奥に青いグローをひとつだけ静かに滲ませます。

製品モックアップ+グローヒーロー
新しいタブで開く

01 · 製品モックアップ+グローヒーロー — 計測 累積面積 24.265% · 動いたフレーム 18/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

radial-gradient glowfloat loopradius 16

視線を中央へ集める

ウィンドウの中の見出しとCTAボタンも一緒にゆっくり浮き上がっては沈み、視線を画面の中央へ集めます。

<section class="relative overflow-hidden rounded-card border border-line bg-ink p-2 shadow-raised">
  <span class="glow pointer-events-none absolute left-1/2 top-0 h-96 w-96
               -translate-x-1/2"></span>
  <div class="flex gap-1.5 px-3 py-2">
    <span class="h-2.5 w-2.5 rounded-full bg-cream/20"></span>
    <span class="h-2.5 w-2.5 rounded-full bg-cream/20"></span>
  </div>
  <div class="relative flex flex-col gap-3 px-6 pb-10 pt-8">
    <p class="text-xs font-bold uppercase tracking-wide text-accent">Console</p>
    <h2 class="text-2xl font-bold text-cream">ひとつの画面からデプロイまで</h2>
    <button class="w-fit rounded-pill bg-accent px-5 py-2 text-sm font-bold text-cream">
      無料で始める
    </button>
  </div>
</section>

02ナビゲーション

ぼかしたナビバーのピル

backdrop-filterでぼかした丸みの強いナビバーの中で、現在地を示す小さなピルがメニュー項目の間を静かに滑ります。

ブラースティッキーナビ
新しいタブで開く

02 · ブラースティッキーナビ — 計測 累積面積 2.219% · 動いたフレーム 15/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

backdrop-filter: blur(10px)radius 999flex 0 0 auto

動くのはピルだけ

ブランド名とCTAボタンはバーの両端に固定されており、ピルだけが動く構成です。

<nav class="flex items-center gap-4 rounded-pill bg-ink/90 border border-line
            backdrop-blur px-3 py-2 shadow-raised">
  <span class="pl-3 font-display font-extrabold text-sm text-cream">Vantage</span>
  <div class="relative flex flex-1 rounded-pill bg-cream/5 p-1">
    <span class="absolute inset-y-1 left-1 w-1/4 rounded-pill bg-accent"></span>
    <span class="relative z-10 flex-1 text-center text-xs font-semibold py-2 text-cream">ホーム</span>
    <span class="relative z-10 flex-1 text-center text-xs py-2 text-cream/70">機能</span>
  </div>
  <button class="rounded-pill bg-accent px-4 py-2 text-xs font-bold text-cream">開始</button>
</nav>

03カードグリッド

枠線が順に明るくなる

ダークカードを並べたグリッドで、枠線がカードごとに順に青く明るくなっては沈み、視線をグリッドの端まで導きます。

枠ハイライトカード
新しいタブで開く

03 · 枠ハイライトカード — 計測 累積面積 12.578% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

border-color 전환순차 delayradius 16

同時に光らせない理由

全部のカードが同時に光るのではなく、一つずつ順番に回る点がこの部品の要点です。

<div class="grid grid-cols-2 gap-gutter">
  <div class="rounded-card border border-line bg-cream/[.03] p-6
              transition-colors hover:border-accent">
    <span class="mb-3 block h-4 w-4 rounded-sm bg-accent/40"></span>
    <p class="text-sm font-semibold text-cream">自動デプロイ</p>
  </div>
  <div class="rounded-card border border-line bg-cream/[.03] p-6
              transition-colors hover:border-accent">
    <span class="mb-3 block h-4 w-4 rounded-sm bg-accent/40"></span>
    <p class="text-sm font-semibold text-cream">イシュー管理</p>
  </div>
</div>

04機能一覧

モノスペースの番号ラベル

機能ごとにモノスペース書体の番号ラベルを添え、リストの行が下からひとつずつ、せり上がるように現れます。

モノスペースラベルリスト
新しいタブで開く

04 · モノスペースラベルリスト — 計測 累積面積 27.006% · 動いたフレーム 19/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

ui-monospace 라벨stagger 등장translateY

行番号のように見せる

番号がコードエディターの行番号のように見えるため、開発者向けツールという印象が強まります。

<ul class="flex flex-col gap-2 rounded-card border border-line bg-cream/[.03] p-4">
  <li class="flex items-center gap-4 rounded-control px-4 py-3 hover:bg-accent/10">
    <span class="font-mono text-xs font-bold text-accent">01</span>
    <span class="text-sm font-semibold text-cream">リアルタイム共同編集</span>
  </li>
  <li class="flex items-center gap-4 rounded-control px-4 py-3 hover:bg-accent/10">
    <span class="font-mono text-xs font-bold text-accent">02</span>
    <span class="text-sm font-semibold text-cream">キーボード専用コマンドバー</span>
  </li>
</ul>

05料金

おすすめプランだけ呼吸する

おすすめプランのカードだけに青いグローの枠を巻き、静かに膨らんでは縮む、呼吸のような動きを与えます。

強調プランのグロー
新しいタブで開く

05 · 強調プランのグロー — 計測 累積面積 6.678% · 動いたフレーム 19/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

box-shadow 펄스border 2pxradius 16

表を組まずに伝える

表を組まなくても、どのプランを推しているかが一目で伝わります。

<div class="relative flex-[1.1] rounded-card border-2 border-accent
            bg-cream/[.03] p-6 pt-8 shadow-glow">
  <span class="absolute -top-3 left-6 rounded-pill bg-accent px-3 py-1
               text-xs font-bold text-cream">おすすめ</span>
  <p class="font-bold text-cream">プロ</p>
  <p class="mt-1 text-sm text-cream/60">月19,000円</p>
</div>

06お客様の声

薄くしたロゴの列

薄くしたパートナーロゴの列の下に引用カードをひとつ置き、ロゴが順番に明るくなっては薄くなることで信頼を積み重ねます。

ロゴウォール+引用
新しいタブで開く

06 · ロゴウォール+引用 — 計測 累積面積 3.367% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

@keyframes logoShineradius 16grayscale 필터

なぜ明るさ16%か

ロゴを完全な色のまま並べると広告バナーのように見えるため、あえて明るさを16%まで落としてあります。

<div class="rounded-card border border-line bg-cream/[.03] p-6">
  <div class="mb-5 flex justify-between gap-3 opacity-60">
    <span class="h-4 flex-1 rounded-sm bg-cream/20"></span>
    <span class="h-4 flex-1 rounded-sm bg-cream/20"></span>
  </div>
  <blockquote class="border-t border-line pt-4">
    <p class="text-sm font-semibold text-cream">
      「オンボーディング資料なしで、チーム全員が1日で移行できました。」
    </p>
  </blockquote>
</div>

07CTA帯

回転するグラデーション線

CTA帯の枠を包むグラデーションの線がゆっくり回転し、縁だけが光るバッジのように見えます。

グラデーション枠帯
新しいタブで開く

07 · グラデーション枠帯 — 計測 累積面積 2.754% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

conic-gradient 회전mask borderradius 16

2pxだけ残す仕組み

conic-gradientを枠より大きく敷いて回転させ、内側のカードで2pxだけ残して隠す仕組みです。

<div class="relative overflow-hidden rounded-card border border-accent/40
            bg-cream/[.03] px-10 py-12 text-center shadow-glow">
  <h3 class="mx-auto max-w-md text-3xl font-extrabold text-cream">
    今すぐチームを移行しましょう
  </h3>
  <button class="mt-6 rounded-pill bg-accent px-6 py-3 text-sm font-bold text-cream">
    無料で始める
  </button>
</div>

08フッター

左から順に浮かぶ4列

4列に分けたリンク群が左から順に薄く浮かび上がり、暗いフッターを埋めていきます。

4列ダークフッター
新しいタブで開く

08 · 4列ダークフッター — 計測 累積面積 1.578% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

@keyframes colRise4열→2열구분선 없음

区切り線を引かない

区切り線を引かず、列と列の余白だけで領域を分けています。

<footer class="grid grid-cols-4 gap-gutter border-t border-line py-10">
  <div>
    <p class="mb-2 text-xs font-bold uppercase tracking-wide text-accent">プロダクト</p>
    <p class="text-sm text-cream/70">機能</p>
  </div>
  <div>
    <p class="mb-2 text-xs font-bold uppercase tracking-wide text-accent">会社</p>
    <p class="text-sm text-cream/70">会社概要</p>
  </div>
</footer>

09ボタン・入力

ダークモード ボタン デザインで何が動くか

プライマリボタンの青いグローと入力欄のフォーカスリング状の枠は、ホバーやフォーカスに関係なく自動で大きくなったり小さくなったりを繰り返し、ゴーストボタンだけは枠線をまとったまま動きません。

ゴースト/プライマリボタン
新しいタブで開く

09 · ゴースト/プライマリボタン — 計測 累積面積 4.033% · 動いたフレーム 17/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

box-shadow glowfocus ring 2pxradius 12

角丸をカードとそろえる

三つの角丸をカードと同じ値にそろえ、画面全体を一つの規格に見せています。

<form class="mx-auto flex max-w-md flex-col gap-3 rounded-card border
            border-line bg-cream/[.03] p-6 sm:flex-row">
  <label class="relative flex-1 rounded-control border border-line bg-cream/5">
    <input class="w-full rounded-control bg-transparent px-4 py-3 text-sm
                  text-cream outline-none" type="email" placeholder="メールアドレス">
  </label>
  <button class="rounded-control bg-accent px-5 py-3 text-sm font-bold text-cream">
    登録する
  </button>
</form>

tailwind.config カスタム

参照先はひとつだけ

上で見た9つの部品と一枚のランディングページは、すべて下のtheme.extendひとつだけを参照しています。

色調が一度に変わる

背景・強調色・角丸・影の値をここで書き換えると、画面全体の色調が一度に揃って変わります。

theme: {
  extend: {
    colors: {
      ink: "#17141a",
      cream: "#fff7e6",
      accent: "#2f6df6",
      line: "rgba(255,247,230,.08)",
    },
    fontFamily: {
      display: ["'Inter'", "system-ui", "sans-serif"],
      body: ["'Inter'", "system-ui", "sans-serif"],
    },
    borderRadius: { control: "12px", card: "16px", pill: "999px" },
    boxShadow: {
      raised: "0 14px 24px rgba(23,20,26,.32)",
      glow: "0 0 40px rgba(47,109,246,.35)",
    },
    spacing: { gutter: "16px" },
  },
},

バイブコーディング プロンプト

短い指示で足りる

上の設定をプロジェクトに貼り付けたあとは、Claude CodeやCursorに次のような短い指示を渡すだけで十分です。プロンプトの全文はzipのprompt.mdに入っています。

背景は ink(#17141a) ひとつだけ。カードも純白ではなく、ink の上に薄い cream のオーバーレイ(3~5%)で作る。
強調が要る所(ボタン・おすすめバッジ・フォーカスリング)にだけ accent(#2f6df6) を使う。
二つ目の強調色は入れない。角丸は rounded-card・rounded-pill・rounded-control の三つの値だけを使う。

実際に出た結果

この指示をそのままpage/index.htmlへ適用し、1280pxのビューポートでページ全体をキャプチャした結果を残しました。

結果

どこで壊れるか — 落とし穴

theme() が白に戻る

このスタイルでいちばん多い落とし穴は、背景色をtheme()関数で直接指定することです。Tailwind Play CDNはbg-inkのようにコンパイル済みのユーティリティクラスの中にあるtheme()の値は正しく扱いますが、<style>タグの中に直接書いたbackground: theme('colors.ink')は無視され、既定の白背景へ黙って戻ってしまいます。

白背景のまま残るところだった

このプロジェクトも最初は<body>の背景を<style>タグのtheme()で指定していたため、一枚のランディングページ全体が白背景でレンダリングされ、料金カードのtext-cream/60の文字がほとんど読めない状態でスクリーンショットに残るところでした。<body class="bg-ink">のようにコンパイルされるユーティリティクラスへ書き換えてから、ようやくインク色の背景が正しく適用されました。暗い面が明るい文字を飲み込む現象は、色が逆へ反転するトランザクションメールのテンプレートでダークモード未対応の失敗として繰り返されます。

角丸の値がそろわないとき

二つ目の落とし穴は角丸の値です。カードごとにrounded-card・rounded-pill・rounded-controlから外れた任意のpx値を使うと、画面全体が一つのシステムではなく、複数のサイトを継ぎ足したように見えてしまいます。9つの部品と一枚のランディングページを丸ごと収めたzipには鍵がかかっていて、そのパスワードはwdu6yd23です。本文の下にあるボタンから、そのままダウンロードできます。

320pxの狭い画面

三つ目の落とし穴は320pxのような狭い画面です。01のヒーローモックアップの内側の余白を固定pxで指定すると、狭い画面ではカードの高さがビューポートを超えて縦スクロールバーが現れます。余白をclamp()に置き換えると、幅に応じて自然に縮むようになります。

アクセシビリティ

動きを減らすと最終状態だけ

9つのデモはすべてMDNのprefers-reduced-motionのページが定めるメディアクエリで包んであり、動作を減らす設定を有効にした訪問者には回転・グロー・スライドのような動きの代わりに、静止した最終状態だけが見えます。

部品ごとに残る形

02のピルはtranslateX(0)、05のグローの枠は薄さ20%、07の回転は止まった状態のグラデーション枠というように、部品ごとに残る最終状態はそれぞれ異なります。

色だけに頼らない

色だけで意味を伝える02のピルや06のロゴブロックにはaria-hidden属性を付けて装飾として扱い、現在地やパートナー名といった実際の意味は必ずテキストとして隣に置いています。

ほかのランディングページ デザイン 参考が気になる場合はデザイントレンドのカテゴリーを、このサイトがどんな場所かはサイト紹介ページにまとめてあります。

FAQ

Linearのロゴや商標をそのまま使ってもいいですか?

いいえ。ここで紹介した部品はLinear.appのロゴ・商標・実際の画面をコピーしたものではなく、濃い背景と青い強調色、モノスペースのラベルといった一般的な配色とレイアウトの考え方だけを参考にしています。デモに登場するブランド名はすべて架空の名前(Vantage)に置き換えてあります。

ダークモード ui デザインをライトモードでも使えますか?

使えます。inkとcreamの役割を入れ替えるだけで成立しますが、accentという強調色をひとつだけに絞るという考え方は、背景が明るくても暗くても変えないでください。強調色を二つ以上使うと、どの要素が重要なのか伝わらなくなります。

Tailwindを使わずに素のCSSだけで再現できますか?

はい。zipに入っているtokens.cssを読み込むだけで再現できます。このファイルはtailwind.config.jsと同じ値を--color-inkや--color-accentのようなCSS変数へ書き出したもので、クラス名の代わりにvar(--color-accent)と直接参照すれば同じ配色を保てます。割引の文面や締め切り時刻まで載せた販促区間が要るなら、プロモLPのテンプレートがその組立図です。

解凍パスワードを入力してください

パスワードはこの記事の本文の中にあります。読み進めると出てきます。