Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

color-palette

ブランドのhex値ひとつから、アクセシビリティに配慮した完全なカラーパレットを生成します。11段階のシェードスケール(50〜950)、セマンティックトークン、ダークモード用バリアント、Tailwind v4向けCSS出力、WCAGコントラストチェックを一括で提供します。ブランドカラーのhex値を渡してパレットの作成を依頼するとき、デザインシステムのセットアップ時、Tailwindテーマカラーの設定時、またはカラーのアクセシビリティやコントラスト確認をしたいときに活用してください。

description の原文を見る

Generate complete, accessible colour palettes from a single brand hex. Produces 11-shade scale (50-950), semantic tokens, dark mode variants, Tailwind v4 CSS output, WCAG contrast checks. Use whenever the user supplies a brand hex and asks for a palette, mentions setting up a design system, wants Tailwind theme colours from a brand colour, or asks to check colour accessibility / contrast.

SKILL.md 本文

カラーパレットジェネレータ

単一のブランドカラーの16進数コードから完全でアクセシブルなカラーシステムを生成します。Tailwind v4 CSS出力はプロジェクトに直接ペーストできます。

ワークフロー

ステップ1:ブランドカラーの16進数コードを取得

プライマリブランドカラーを確認します。#0D9488のような単一の16進数コードで十分です。

ステップ2:11段階のシェードスケールを生成

16進数をHSLに変換し、色相を一定に保ちながら明度を変えてシェードを生成します。

16進数からHSLへの変換

function hexToHSL(hex) {
  hex = hex.replace(/^#/, '');
  const r = parseInt(hex.substring(0, 2), 16) / 255;
  const g = parseInt(hex.substring(2, 4), 16) / 255;
  const b = parseInt(hex.substring(4, 6), 16) / 255;

  const max = Math.max(r, g, b);
  const min = Math.min(r, g, b);
  const diff = max - min;

  let l = (max + min) / 2;
  let s = 0;
  if (diff !== 0) {
    s = l > 0.5 ? diff / (2 - max - min) : diff / (max + min);
  }

  let h = 0;
  if (diff !== 0) {
    if (max === r) h = ((g - b) / diff + (g < b ? 6 : 0)) / 6;
    else if (max === g) h = ((b - r) / diff + 2) / 6;
    else h = ((r - g) / diff + 4) / 6;
  }

  return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };
}

明度と彩度の値

シェード明度彩度倍率用途
5097%0.80繊細な背景
10094%0.80ホバー状態
20087%0.85ボーダー、区切り線
30075%0.90無効状態
40062%0.95プレースホルダーテキスト
50048%1.00ブランドカラーベースライン
60040%1.00プライマリアクション(多くの場合はブランドカラー)
70033%1.00プライマリ上のホバー
80027%1.00アクティブ状態
90020%1.00明るい背景上のテキスト
95010%1.00暗いアクセント

明るいシェード(50〜200)の彩度を15〜20%、300〜400の彩度を5〜10%削減して、過度に鮮やかなパステル色を防ぎます。500〜950では彩度を100%に保ちます。

完全なスケールジェネレータ

function generateShadeScale(brandHex) {
  const { h, s } = hexToHSL(brandHex);
  const shades = {
    50:  { l: 97, sMul: 0.8 },  100: { l: 94, sMul: 0.8 },
    200: { l: 87, sMul: 0.85 }, 300: { l: 75, sMul: 0.9 },
    400: { l: 62, sMul: 0.95 }, 500: { l: 48, sMul: 1.0 },
    600: { l: 40, sMul: 1.0 },  700: { l: 33, sMul: 1.0 },
    800: { l: 27, sMul: 1.0 },  900: { l: 20, sMul: 1.0 },
    950: { l: 10, sMul: 1.0 }
  };
  const result = {};
  for (const [shade, { l, sMul }] of Object.entries(shades)) {
    result[shade] = `hsl(${h}, ${Math.round(s * sMul)}%, ${l}%)`;
  }
  return result;
}

HSLから16進数への変換

function hslToHex(h, s, l) {
  s = s / 100; l = l / 100;
  const c = (1 - Math.abs(2 * l - 1)) * s;
  const x = c * (1 - Math.abs((h / 60) % 2 - 1));
  const m = l - c / 2;
  let r = 0, g = 0, b = 0;
  if (h < 60) { r = c; g = x; }
  else if (h < 120) { r = x; g = c; }
  else if (h < 180) { g = c; b = x; }
  else if (h < 240) { g = x; b = c; }
  else if (h < 300) { r = x; b = c; }
  else { r = c; b = x; }
  r = Math.round((r + m) * 255);
  g = Math.round((g + m) * 255);
  b = Math.round((b + m) * 255);
  return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
}

検証

生成されたシェードは同じカラーファミリーで滑らかに段階化されるように見える必要があります。明るいシェード(50〜300)は背景に使用可能、暗いシェード(700〜950)はテキストに使用可能です。ブランドカラーは500〜700で認識できるようにします。


ステップ3:セマンティックトークンをマッピング

すべての背景トークンには必ずペアの前景トークンが必要です。背景トークンを単独で使用しないでください。そうしないとダークモードが機能しません。

ライトモードトークン

トークンシェード用途
backgroundwhiteページ背景
foreground950本文テキスト
cardwhiteカード背景
card-foreground900カードテキスト
popoverwhiteドロップダウン/ツールチップ背景
popover-foreground950ドロップダウンテキスト
primary600プライマリボタン、リンク
primary-foregroundwhiteプライマリボタン上のテキスト
secondary100セカンダリボタン
secondary-foreground900セカンダリボタン上のテキスト
muted50無効背景、繊細なセクション
muted-foreground600ミュートされたテキスト、キャプション
accent100ホバー状態、繊細なハイライト
accent-foreground900アクセント背景上のテキスト
destructivered-600削除ボタン、エラー
destructive-foregroundwhite破壊的なボタン上のテキスト
border200入力ボーダー、区切り線
input200入力フィールドボーダー
ring600フォーカスリング

ダークモードトークン

トークンシェード用途
background950ページ背景
foreground50本文テキスト
card900カード背景
card-foreground50カードテキスト
popover900ドロップダウン背景
popover-foreground50ドロップダウンテキスト
primary500プライマリボタン(ダークモードではより明るい)
primary-foregroundwhiteプライマリボタン上のテキスト
secondary800セカンダリボタン
secondary-foreground50セカンダリボタン上のテキスト
muted800無効背景
muted-foreground400ミュートされたテキスト
accent800ホバー状態
accent-foreground50アクセント背景上のテキスト
destructivered-500削除ボタン(より明るい)
destructive-foregroundwhite破壊的なボタン上のテキスト
border800ボーダー
input800入力ボーダー
ring500フォーカスリング

ダークモード反転パターン

ダークモードは色相と彩度を保ちながら明度を反転させます。極値を交換し(50は950に、950は50になる)、中央値を保持します(500は500の近くに留まる)。

ライトシェードダーク対応シェード役割
50950背景
100900繊細な背景
200800ボーダー
500500(やや明るい)ブランドベースライン
600400プライマリアクション
95050テキストカラー

ダークモードの主要原則:

  • プライマリに600ではなくシェード500を使用する -- ダーク背景の可視性向上のため明るい
  • 純粋な#FFFFFFではなく、テキストにはシェード50(オフホワイト)を使用する -- 目に優しい
  • ボーダーは背景より約10〜15%明るくする必要があります(例:950背景上の800ボーダー)
  • より高い階層=より明るい色(ライトモードの影とは逆)
  • 背景を変更する場合は常に前景を更新する

ステップ4:コントラストをチェック

WCAGの最小比率

コンテンツ種別AAAAA
通常テキスト(18px未満または14px未満の太字)4.5:17:1
大きいテキスト(18px以上または14px以上の太字)3:14.5:1
UIコンポーネント(ボタン、ボーダー)3:1定義なし
グラフィカルオブジェクト(アイコン、チャート)3:1定義なし

ほとんどのプロジェクトはAAをターゲット、高アクセシビリティが必要な場合(政府、医療)はAAAをターゲットします。

輝度とコントラスト公式

function getLuminance(hex) {
  hex = hex.replace(/^#/, '');
  const r = parseInt(hex.substring(0, 2), 16) / 255;
  const g = parseInt(hex.substring(2, 4), 16) / 255;
  const b = parseInt(hex.substring(4, 6), 16) / 255;
  const rsRGB = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
  const gsRGB = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);
  const bsRGB = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);
  return 0.2126 * rsRGB + 0.7152 * gsRGB + 0.0722 * bsRGB;
}

function getContrastRatio(hex1, hex2) {
  const lum1 = getLuminance(hex1);
  const lum2 = getLuminance(hex2);
  const lighter = Math.max(lum1, lum2);
  const darker = Math.min(lum1, lum2);
  return (lighter + 0.05) / (darker + 0.05);
}

クイックチェックテーブル -- ライトモード

前景背景比率パス?用途
950white18.5:1AAA本文テキスト
900white14.2:1AAAカードテキスト
700white8.1:1AAAテキスト
600white5.7:1AAテキスト、ボタン
500white3.9:1不可テキストに不適切
white6005.7:1AAボタンテキスト
white7008.1:1AAAボタンテキスト
600505.4:1AAミュートセクションテキスト

クイックチェックテーブル -- ダークモード

前景背景比率パス?用途
5095018.5:1AAA本文テキスト
5090014.2:1AAAカードテキスト
4009508.2:1AAAミュートテキスト
4009006.3:1AAミュートテキスト
white6005.7:1AAボタンテキスト

経験則:テキストの場合、前景と背景の明度差が50%以上になるようにします。

検証すべき重要なペア

  1. 本文テキスト:前景を背景上に配置(ライト:white上の950 = 18.5:1、ダーク:950上の50 = 18.5:1)
  2. プライマリボタン:プライマリ前景をプライマリ上に配置(ライト:600上のwhite = 5.7:1、ダーク:500上のwhite = 3.9:1 -- 限界)
  3. ミュートテキスト:ミュート前景をミュート背景上に配置(ライト:50上の600 = 5.4:1、ダーク:800上の400 = 4.1:1 -- 失敗の可能性)
  4. カードテキスト:カード前景をカード上に配置(ライト:white上の900 = 14.2:1、ダーク:900上の50 = 14.2:1)

よくあるコントラスト失敗の修正方法

プライマリ500上の白が失敗(3.9:1):代わりにプライマリ600を使用(5.7:1)、またはボタン上で暗いテキストを使用します。

ダークモードのミュートテキストが失敗(800上の400 = 4.1:1):900上の300を使用(6.8:1)。

リンクが見難い(white上の500 = 3.9:1):プライマリ700を使用(8.1:1)、または下線装飾を追加します。


ステップ5:Tailwind v4 CSSを出力

@import "tailwindcss";

@theme {
  /* シェードスケール */
  --color-primary-50: #F0FDFA;
  --color-primary-100: #CCFBF1;
  --color-primary-200: #99F6E4;
  --color-primary-300: #5EEAD4;
  --color-primary-400: #2DD4BF;
  --color-primary-500: #14B8A6;
  --color-primary-600: #0D9488;
  --color-primary-700: #0F766E;
  --color-primary-800: #115E59;
  --color-primary-900: #134E4A;
  --color-primary-950: #042F2E;

  /* ライトモードセマンティックトークン */
  --color-background: #FFFFFF;
  --color-foreground: var(--color-primary-950);
  --color-card: #FFFFFF;
  --color-card-foreground: var(--color-primary-900);
  --color-popover: #FFFFFF;
  --color-popover-foreground: var(--color-primary-950);
  --color-primary: var(--color-primary-600);
  --color-primary-foreground: #FFFFFF;
  --color-secondary: var(--color-primary-100);
  --color-secondary-foreground: var(--color-primary-900);
  --color-muted: var(--color-primary-50);
  --color-muted-foreground: var(--color-primary-600);
  --color-accent: var(--color-primary-100);
  --color-accent-foreground: var(--color-primary-900);
  --color-destructive: #DC2626;
  --color-destructive-foreground: #FFFFFF;
  --color-border: var(--color-primary-200);
  --color-input: var(--color-primary-200);
  --color-ring: var(--color-primary-600);
  --radius: 0.5rem;
}

/* ダークモードオーバーライド */
.dark {
  --color-background: var(--color-primary-950);
  --color-foreground: var(--color-primary-50);
  --color-card: var(--color-primary-900);
  --color-card-foreground: var(--color-primary-50);
  --color-popover: var(--color-primary-900);
  --color-popover-foreground: var(--color-primary-50);
  --color-primary: var(--color-primary-500);
  --color-primary-foreground: #FFFFFF;
  --color-secondary: var(--color-primary-800);
  --color-secondary-foreground: var(--color-primary-50);
  --color-muted: var(--color-primary-800);
  --color-muted-foreground: var(--color-primary-400);
  --color-accent: var(--color-primary-800);
  --color-accent-foreground: var(--color-primary-50);
  --color-destructive: #EF4444;
  --color-destructive-foreground: #FFFFFF;
  --color-border: var(--color-primary-800);
  --color-input: var(--color-primary-800);
  --color-ring: var(--color-primary-500);
}

assets/tailwind-colors.cssをスターティングテンプレートとしてコピーします。


コンポーネント使用例

// プライマリボタン
<button className="bg-primary text-primary-foreground hover:bg-primary/90">クリック</button>

// セカンダリボタン
<button className="bg-secondary text-secondary-foreground hover:bg-secondary/80">キャンセル</button>

// カード
<div className="bg-card text-card-foreground border-border rounded-lg">
  <h2>タイトル</h2>
  <p className="text-muted-foreground">説明</p>
</div>

// 入力フィールド
<input className="bg-background text-foreground border-input focus:ring-ring" />

一般的な調整

  • 明るいシェードが過度に鮮やか:彩度を10〜20%削減
  • プライマリのコントラストが不良:テキストにはシェード700以上を使用
  • ダークモードが暗すぎる:950ではなくシェード900を背景に使用
  • ブランドカラーが明るすぎる/暗すぎる:シェード500〜600の範囲に調整
  • ダークモードが褪せ色に見える:プライマリにシェード500を使用(ライトモードの600より明るい)
  • 純粋な白テキストがダークモードで厳しすぎる:純粋な白の代わりにシェード50(オフホワイト)を使用
  • ダークモードのミュートテキストがコントラストに失敗:より極端なシェードを使用(400on800ではなく300on900)

ブランドアイデンティティ調整

  • 保守的なブランド(金融、法律):ボタンにはプライマリ700を使用、明るいシェードの彩度を削減
  • 鮮やかなブランド(クリエイティブ、テック):プライマリ500〜600を使用、彩度を100%に保持
  • ミニマルブランド(デザイン、建築):プライマリを控えめに使用、ミュートトーンを強調、繊細なボーダー(プライマリ100)

検証チェックリスト

  • 本文テキスト:>=4.5:1(通常)または>=3:1(大きい)
  • プライマリボタンテキスト:>=4.5:1
  • セカンダリボタンテキスト:>=4.5:1
  • ミュートテキスト:>=4.5:1
  • リンク:>=4.5:1(または下線付き)
  • UIエレメント(ボーダー):>=3:1
  • フォーカスインジケータ:>=3:1
  • エラーテキスト:>=4.5:1
  • ダークモード:上記のチェックすべてに合格
  • すべての背景にペアの前景がある
  • 両モードでブランドカラーが認識できる
  • ボーダーが見える(ただし刺激的ではない)
  • カード/セクションに明確な境界がある

出荷前に両モードをテストしてください。


オプション参考資料

  • オンラインコントラストチェッカー:WebAIM(webaim.org/resources/contrastchecker)、Coolors(coolors.co/contrast-checker)、Accessible Colors(accessible-colors.com)
  • CI/CDコントラストテスト:テストスイートでgetContrastRatio()を使用して、すべてのトークンペアの最小比率をアサート
  • 透明/グラデーション境界ケース:不透明度付きカラーの場合、最終的にレンダリングされたカラーに対して計算します。グラデーションの場合、両方のエンドポイントをチェックします。
  • OLED ダークモード:Amoledスクリーンのバッテリーセーブのため、@media (prefers-contrast: high)#000000背景を使用
  • マルチカラーパレット:各ブランドカラーに対して別々のシェードスケールを生成し、異なるセマンティックロール(プライマリ、アクセント)にマップします
  • パレット可視化ツール:coolors.co、paletton.com、Figmaスウォッチ
  • assets/tailwind-colors.css — 完全なCSS出力テンプレート

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
jezweb
リポジトリ
jezweb/claude-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/jezweb/claude-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: jezweb · jezweb/claude-skills · ライセンス: MIT