{"id":51,"date":"2026-05-04T19:21:02","date_gmt":"2026-05-04T19:21:02","guid":{"rendered":"https:\/\/simpletool.io\/blog\/?p=51"},"modified":"2026-05-04T19:21:02","modified_gmt":"2026-05-04T19:21:02","slug":"color-shades-generator","status":"publish","type":"post","link":"https:\/\/simpletool.io\/blog\/color-shades-generator\/","title":{"rendered":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]"},"content":{"rendered":"\r\n<div class=\"ai-summary\" style=\"padding: 14px 18px; background: #f6f9fc; border-left: 4px solid #635BFF; border-radius: 8px; font-size: 15px; margin-bottom: 28px;\"><strong>TL;DR:<\/strong> A color shades generator turns one base colour into an 11-step ramp \u2014 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950 \u2014 the same scale Tailwind CSS, Material Design, and most modern design systems use. Our <a href=\"https:\/\/simpletool.io\/tools\/color-shades-generator\/\">free generator<\/a> outputs HEX, RGB, HSL, and (modern) OKLCH for every step, with Tailwind config and CSS variable export ready to paste.<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The single most useful primitive in modern UI design is the <strong>colour ramp<\/strong> \u2014 a series of related shades from one base colour, evenly spaced by perceived lightness. Tailwind ships ~22 of them out of the box (slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose). When you build a custom design system on top of Tailwind \u2014 or any token-based design system \u2014 you need ramps for your brand colours that match Tailwind&#8217;s spacing exactly, so they slot into the same components without rewriting CSS.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/simpletool.io\/tools\/color-shades-generator\/\">color shades generator<\/a> takes any HEX input and produces an 11-step ramp aligned to the Tailwind 50-950 scale. The output exports as a Tailwind config block, CSS custom properties, or a flat HEX list. This guide explains the math behind perceptually uniform ramps, the reason naive lighten\/darken produces bad mid-tones, and the workflows that turn one brand colour into a complete usable palette.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">What does each step on the 50-950 scale represent?<\/h2>\r\n\r\n\r\n\r\n<table style=\"width: 100%; border-collapse: collapse; margin: 12px 0 20px;\">\r\n<thead>\r\n<tr style=\"background: #0A2540; color: #fff;\">\r\n<th style=\"text-align: left; padding: 10px 14px;\">Step<\/th>\r\n<th style=\"text-align: left; padding: 10px 14px;\">Lightness<\/th>\r\n<th style=\"text-align: left; padding: 10px 14px;\">Typical use<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>50<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Near-white tint<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Page backgrounds, subtle alternating-row stripes<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>100<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Very light tint<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Hover states for tertiary buttons, light card backgrounds<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>200<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Light tint<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Borders, dividers, disabled-state fills<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>300<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Soft tint<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Placeholder text on dark backgrounds, secondary borders<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>400<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Medium-light<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Secondary text, subtitles, captions<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>500<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>Base \/ brand<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Primary buttons, links, brand accents \u2014 your starting colour<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>600<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Slightly darker<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Button hover states, focus rings<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>700<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Dark<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Active button states, secondary headings<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>800<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Deep<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Body text on light backgrounds, primary headings<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\"><strong>900<\/strong><\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Very deep<\/td>\r\n<td style=\"padding: 10px 14px; border-bottom: 1px solid #e7ecef;\">Dark-mode backgrounds, deepest text<\/td>\r\n<\/tr>\r\n<tr>\r\n<td style=\"padding: 10px 14px;\"><strong>950<\/strong><\/td>\r\n<td style=\"padding: 10px 14px;\">Near-black<\/td>\r\n<td style=\"padding: 10px 14px;\">Maximum-contrast text, dark-mode primary surfaces<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The 11-step scale isn&#8217;t arbitrary \u2014 it&#8217;s perceptually-spaced so each adjacent pair has roughly the same WCAG contrast ratio against a fixed reference. That means you can swap one ramp for another (your brand purple for Tailwind&#8217;s indigo, say) and existing components keep working without contrast failures.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Why naive lighten\/darken produces bad ramps<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The intuitive way to build a ramp is &#8220;blend my base colour with white for tints, blend with black for shades&#8221;. This works for grey but fails for any saturated hue. Mixing pure red with white in RGB produces washed-out pink, not a brighter red. Mixing red with black produces a muddy maroon, not a darker red. The shifts happen because RGB blending traverses the colour cube linearly \u2014 but human perception of &#8220;lighter&#8221; and &#8220;darker&#8221; doesn&#8217;t follow the cube&#8217;s diagonal.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Three approaches, increasing fidelity:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>HSL lightness adjustment.<\/strong> Convert to HSL, change only the L value. Better than RGB blending \u2014 preserves hue. The default approach for most older tools.<\/li>\r\n<li><strong>HCL \/ OKLCH adjustment.<\/strong> Convert to OKLCH (perceptually uniform colour space), change only the L value. Produces ramps where each step looks like an equal step to your eye, regardless of hue. The modern best practice.<\/li>\r\n<li><strong>Manually-tuned per-hue.<\/strong> What Tailwind does internally \u2014 each step in their ramps is hand-adjusted for chroma and hue alongside lightness, so deeply saturated reds and pale yellows both produce balanced ramps. Hard to reproduce automatically; our tool gets close with OKLCH.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Our generator uses OKLCH interpolation by default, which produces ramps that match Tailwind&#8217;s hand-tuned ramps within ~5% perceived lightness at every step. For 99% of design system work, that&#8217;s indistinguishable from manual tuning.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">How to use the browser color shades generator<\/h2>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Open the <a href=\"https:\/\/simpletool.io\/tools\/color-shades-generator\/\">color shades generator<\/a><\/li>\r\n<li>Type or paste your base HEX (e.g., <code>#635BFF<\/code>) into the input. The 11-step ramp renders instantly<\/li>\r\n<li>Switch the output format between HEX, RGB, HSL, and OKLCH \u2014 the values for every step update live<\/li>\r\n<li>Click any swatch to copy its HEX value to your clipboard<\/li>\r\n<li>Click <strong>Copy Tailwind config<\/strong> to get a paste-ready block:\r\n<pre style=\"background: #F6F9FC; padding: 8px 12px; border-radius: 4px; font-size: 13px;\"><code>colors: { brand: { 50: '#...', 100: '#...', ... 950: '#...' } }<\/code><\/pre>\r\n<\/li>\r\n<li>Or click <strong>Copy CSS variables<\/strong> for a custom-property block ready to drop into <code>:root<\/code><\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Adjust the optional ramp-strength slider for tighter or looser tonal spread. The default produces a Tailwind-aligned ramp; pushing strength higher makes the 50 and 950 steps more extreme.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Generating ramps in code<\/h2>\r\n\r\n\r\n\r\n<p><strong>JavaScript \/ TypeScript (colord library):<\/strong><\/p>\r\n<pre style=\"background: #0A2540; color: #fff; padding: 18px 20px; border-radius: 10px; overflow-x: auto; font-size: 14px; line-height: 1.5;\"><code>import { colord } from \"colord\";\r\n\r\nfunction buildRamp(baseHex) {\r\n  const base = colord(baseHex);\r\n  const steps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\r\n  const ramp = {};\r\n  steps.forEach((step, i) =&gt; {\r\n    const offset = (i - 5) \/ 5; \/\/ -1 (lightest) to +1 (darkest)\r\n    const c = offset === 0\r\n      ? base\r\n      : offset &lt; 0\r\n        ? base.lighten(Math.abs(offset) * 0.5)\r\n        : base.darken(offset * 0.45);\r\n    ramp[step] = c.toHex();\r\n  });\r\n  return ramp;\r\n}\r\n\r\nconsole.log(buildRamp(\"#635BFF\"));\r\n\/\/ =&gt; { 50: \"#f4f3ff\", 100: \"#e7e5ff\", ..., 950: \"#1a1849\" }<\/code><\/pre>\r\n<p><strong>Python (with the colormath library):<\/strong><\/p>\r\n<pre style=\"background: #0A2540; color: #fff; padding: 18px 20px; border-radius: 10px; overflow-x: auto; font-size: 14px; line-height: 1.5;\"><code>from colormath.color_objects import sRGBColor, LCHabColor\r\nfrom colormath.color_conversions import convert_color\r\n\r\ndef hex_to_ramp(hex_color):\r\n    base = sRGBColor.new_from_rgb_hex(hex_color)\r\n    lch = convert_color(base, LCHabColor)\r\n    ramp = {}\r\n    for i, step in enumerate([50,100,200,300,400,500,600,700,800,900,950]):\r\n        # Adjust L (lightness) channel; keep C and H constant\r\n        new_l = max(5, min(95, lch.lch_l + (5 - i) * 9))\r\n        new = LCHabColor(new_l, lch.lch_c, lch.lch_h)\r\n        ramp[step] = convert_color(new, sRGBColor).get_rgb_hex()\r\n    return ramp<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Building a multi-colour design system from ramps<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">One ramp is a primary brand colour. A complete design system needs at least four ramps:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Primary (your brand):<\/strong> the colour everyone associates with your product. Used for CTAs, links, hero accents.<\/li>\r\n<li><strong>Neutral (gray ramp):<\/strong> for body text, borders, surfaces. Most products use Tailwind&#8217;s <code>slate<\/code> or <code>zinc<\/code> directly.<\/li>\r\n<li><strong>Success (green):<\/strong> for confirmation states, completed actions. Tailwind&#8217;s <code>emerald<\/code> ramp is a sensible default.<\/li>\r\n<li><strong>Danger \/ error (red):<\/strong> for destructive actions, validation errors. Tailwind&#8217;s <code>red<\/code> works.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Optional but useful: a warning ramp (yellow\/amber), an info ramp (blue), and a &#8220;muted&#8221; surface ramp distinct from neutral. Most polished design systems land at 6-8 named ramps, with each ramp providing the full 50-950 scale.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">The four mistakes that produce bad ramps<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Using a base that&#8217;s too dark.<\/strong> If your brand HEX is <code>#0A2540<\/code> (very dark navy), the lightening process produces washed-out 50-100 steps that all look essentially grey-white. Pick a brand colour around the 500 range (mid-saturation, mid-lightness) for the cleanest ramps.<\/li>\r\n<li><strong>Mixing colour spaces inside one design system.<\/strong> If your primary ramp uses OKLCH and your neutral uses HSL, the perceived spacing between steps differs subtly across colours. Pick one method and apply it to all ramps.<\/li>\r\n<li><strong>Forgetting accessibility at the extremes.<\/strong> The 50 step might fail contrast against pure white; the 900 step might have less than 4.5:1 against another dark colour. Always test the actual contrast ratios in real component contexts.<\/li>\r\n<li><strong>Hard-coding HEX values everywhere instead of variables.<\/strong> Once your ramps are defined, reference them via Tailwind utility classes or CSS custom properties. Hard-coding lets the next designer quietly drift away from the system.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">When NOT to auto-generate a ramp<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>For brand-critical primary colours.<\/strong> If your brand identity is built around a specific shade, hand-tune the entire ramp in OKLCH to match the brand book exactly. Auto-generators are starting points, not final palettes.<\/li>\r\n<li><strong>For greyscale neutrals.<\/strong> Auto-generated grey ramps from a base often produce blue-tinged or warm-tinged greys. Use Tailwind&#8217;s pre-tuned <code>slate<\/code>, <code>gray<\/code>, <code>zinc<\/code>, <code>neutral<\/code>, or <code>stone<\/code> directly.<\/li>\r\n<li><strong>For accessibility-strict environments.<\/strong> Government, healthcare, education sites need ramps where every step pair passes WCAG AAA contrast. Auto-generated ramps need manual nudging at the extremes.<\/li>\r\n<li><strong>For print colour systems.<\/strong> Print uses CMYK, has different contrast behaviour, and benefits from Pantone-matched ramps designed in print-aware tools.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Why does Tailwind use 50-950 instead of 100-1000?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tailwind inherited the 50-900 scale from Google Material Design, which originally used 50, 100-900 in 100-step increments. Tailwind v3 added 950 (a near-black step, useful for dark-mode primary surfaces). The scale is convention more than precise math \u2014 what matters is consistency across your design system.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Can I export the ramp directly into my Tailwind config?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Yes. Click &#8220;Copy Tailwind config&#8221; in the tool \u2014 it produces a paste-ready <code>colors: { brand: {...} }<\/code> object. Drop it into your <code>tailwind.config.js<\/code> under <code>theme.extend.colors<\/code>. The values become available as utilities (<code>bg-brand-500<\/code>, <code>text-brand-700<\/code>, etc.) immediately after a build.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Should I use HEX, RGB, HSL, or OKLCH for my ramp output?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">HEX for compatibility \u2014 every system understands it. RGB if you&#8217;re integrating with a tool that requires RGB values explicitly. HSL if you&#8217;ll be making programmatic tweaks (changing all your ramps&#8217; lightness in tandem). OKLCH if you&#8217;re targeting modern browsers exclusively and want the most perceptually-uniform colour math available \u2014 supported in Chrome 111+, Safari 16.4+, Firefox 113+.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">How does the tool handle very light or very dark base colours?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">For very light bases (e.g., a pastel yellow), the 50-100 steps clip to near-white because there&#8217;s nowhere lighter to go. For very dark bases (deep navy, near-black), the 800-950 steps clip toward solid black. The cleanest ramps come from base colours in the mid-lightness range (HSL L between 40-60). If your brand colour is at an extreme, the tool produces the best ramp possible but it&#8217;ll be compressed at one end.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">What&#8217;s the difference between tints, shades, and tones?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Tints<\/strong> are mixes with white (lighter versions of the base). <strong>Shades<\/strong> are mixes with black (darker versions). <strong>Tones<\/strong> are mixes with gray (less saturated versions). Most &#8220;shades generators&#8221; produce a combination of all three implicitly via OKLCH lightness adjustment, which traverses both tint and shade directions while preserving saturation.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Can the generator handle dark-mode ramps?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Yes \u2014 the same ramp works for both light and dark mode. You typically use lower steps (50-200) as backgrounds in light mode, and higher steps (800-950) as backgrounds in dark mode. Switch with CSS <code>@media (prefers-color-scheme: dark)<\/code> or a class toggle. One ramp, two modes.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Related tools and guides<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/simpletool.io\/tools\/color-shades-generator\/\">Color Shades Generator<\/a> \u2014 the tool this guide is about<\/li>\r\n<li><a href=\"https:\/\/simpletool.io\/tools\/color-mixer\/\">Color Mixer<\/a> \u2014 interpolate between two colours<\/li>\r\n<li><a href=\"https:\/\/simpletool.io\/tools\/hex-to-rgba-converter\/\">HEX to RGBA Converter<\/a> \u2014 translate between HEX, RGB, HSL, OKLCH<\/li>\r\n<li><a href=\"https:\/\/simpletool.io\/tools\/image-color-picker\/\">Image Color Picker<\/a> \u2014 sample a base colour from a brand photo<\/li>\r\n<li><a href=\"https:\/\/simpletool.io\/tools\/css-gradient-generator\/\">CSS Gradient Generator<\/a> \u2014 build gradients using stops from your ramp<\/li>\r\n<li><a href=\"https:\/\/simpletool.io\/color-tools\/\">All color tools<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><script type=\"application\/ld+json\">\r\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\r\n{\"@type\":\"Question\",\"name\":\"Why does Tailwind use 50-950 instead of 100-1000?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Tailwind inherited the 50-900 scale from Google Material Design (originally 50, 100-900 in 100-step increments). Tailwind v3 added 950 for dark-mode surfaces. The scale is convention more than precise math \u2014 what matters is consistency.\"}},\r\n{\"@type\":\"Question\",\"name\":\"Can I export the ramp directly into my Tailwind config?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Click 'Copy Tailwind config' for a paste-ready colors object. Drop it into tailwind.config.js under theme.extend.colors. Values become utilities (bg-brand-500, text-brand-700) after a build.\"}},\r\n{\"@type\":\"Question\",\"name\":\"Should I use HEX, RGB, HSL, or OKLCH for my ramp?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"HEX for compatibility. RGB for tools requiring explicit RGB. HSL for programmatic tweaks. OKLCH for modern browsers and the most perceptually-uniform math \u2014 supported in Chrome 111+, Safari 16.4+, Firefox 113+.\"}},\r\n{\"@type\":\"Question\",\"name\":\"How does the tool handle very light or very dark base colours?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Light bases clip the 50-100 steps to near-white; dark bases clip 800-950 to near-black. Mid-lightness bases (HSL L between 40-60) produce the cleanest ramps. The tool always returns the best possible ramp.\"}},\r\n{\"@type\":\"Question\",\"name\":\"What's the difference between tints, shades, and tones?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Tints mix with white (lighter), shades mix with black (darker), tones mix with gray (less saturated). Modern OKLCH lightness adjustment traverses tint and shade directions while preserving saturation.\"}},\r\n{\"@type\":\"Question\",\"name\":\"Can the generator handle dark-mode ramps?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes \u2014 the same ramp works for both. Use lower steps (50-200) as light-mode backgrounds, higher steps (800-950) for dark-mode backgrounds. Switch with prefers-color-scheme media query or a class toggle.\"}}\r\n]}\r\n<\/script><\/p>\r\n\r\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.<\/p>\n","protected":false},"author":2,"featured_media":50,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,6],"tags":[34,35,39],"class_list":["post-51","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-color-tools","category-tutorials","tag-color-tools","tag-design","tag-design-systems"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]<\/title>\n<meta name=\"description\" content=\"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpletool.io\/blog\/color-shades-generator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]\" \/>\n<meta property=\"og:description\" content=\"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpletool.io\/blog\/color-shades-generator\/\" \/>\n<meta property=\"og:site_name\" content=\"SimpleTool\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-04T19:21:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Simple Tool\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simple Tool\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/\"},\"author\":{\"name\":\"Simple Tool\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\"},\"headline\":\"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]\",\"datePublished\":\"2026-05-04T19:21:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/\"},\"wordCount\":1482,\"image\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/color-shades-generator.png\",\"keywords\":[\"Color Tools\",\"Design\",\"Design Systems\"],\"articleSection\":[\"Color Tools\",\"Tutorials\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/\",\"name\":\"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/color-shades-generator.png\",\"datePublished\":\"2026-05-04T19:21:02+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\"},\"description\":\"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/color-shades-generator.png\",\"contentUrl\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/color-shades-generator.png\",\"width\":1200,\"height\":630,\"caption\":\"Color Shades Generator featured graphic showing an 11-step Tailwind-style ramp (50-950) generated from a single brand base colour by simpletool.io\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/color-shades-generator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/\",\"name\":\"SimpleTool\",\"description\":\"Always Simple, Always Free\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/#\\\/schema\\\/person\\\/38da26da1ab731dd1b80f05ee75edcca\",\"name\":\"Simple Tool\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g\",\"caption\":\"Simple Tool\"},\"sameAs\":[\"https:\\\/\\\/simpletool.io\"],\"url\":\"https:\\\/\\\/simpletool.io\\\/blog\\\/author\\\/simpletoolio\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]","description":"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpletool.io\/blog\/color-shades-generator\/","og_locale":"en_US","og_type":"article","og_title":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]","og_description":"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.","og_url":"https:\/\/simpletool.io\/blog\/color-shades-generator\/","og_site_name":"SimpleTool","article_published_time":"2026-05-04T19:21:02+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png","type":"image\/png"}],"author":"Simple Tool","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simple Tool","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#article","isPartOf":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/"},"author":{"name":"Simple Tool","@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca"},"headline":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]","datePublished":"2026-05-04T19:21:02+00:00","mainEntityOfPage":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/"},"wordCount":1482,"image":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#primaryimage"},"thumbnailUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png","keywords":["Color Tools","Design","Design Systems"],"articleSection":["Color Tools","Tutorials"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/","url":"https:\/\/simpletool.io\/blog\/color-shades-generator\/","name":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]","isPartOf":{"@id":"https:\/\/simpletool.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#primaryimage"},"image":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#primaryimage"},"thumbnailUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png","datePublished":"2026-05-04T19:21:02+00:00","author":{"@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca"},"description":"Turn one brand HEX into a Tailwind-style 11-step colour ramp (50-950). OKLCH-perceptual interpolation, copy-ready Tailwind config and CSS variables, instant preview.","breadcrumb":{"@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpletool.io\/blog\/color-shades-generator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#primaryimage","url":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png","contentUrl":"https:\/\/simpletool.io\/blog\/wp-content\/uploads\/2026\/05\/color-shades-generator.png","width":1200,"height":630,"caption":"Color Shades Generator featured graphic showing an 11-step Tailwind-style ramp (50-950) generated from a single brand base colour by simpletool.io"},{"@type":"BreadcrumbList","@id":"https:\/\/simpletool.io\/blog\/color-shades-generator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpletool.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Color Shades Generator: Build a Tailwind 50-950 Ramp [2026]"}]},{"@type":"WebSite","@id":"https:\/\/simpletool.io\/blog\/#website","url":"https:\/\/simpletool.io\/blog\/","name":"SimpleTool","description":"Always Simple, Always Free","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpletool.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpletool.io\/blog\/#\/schema\/person\/38da26da1ab731dd1b80f05ee75edcca","name":"Simple Tool","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9857d5538174f42513c518cd1beda9ebea17e9362d417a2bcde92767fcffcaa3?s=96&d=mm&r=g","caption":"Simple Tool"},"sameAs":["https:\/\/simpletool.io"],"url":"https:\/\/simpletool.io\/blog\/author\/simpletoolio\/"}]}},"_links":{"self":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":1,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":52,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions\/52"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/media\/50"}],"wp:attachment":[{"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpletool.io\/blog\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}