Named gradient · uiGradients

JShine

JShine is a blue gradient from uiGradients (MIT) — #12c2e9 → #c471ed → #f64f59 at 90°. Shown here interpolated in OKLab, next to the original sRGB, with the worst-case contrast for white and black text and every export.

Aa — the quick brown fox
black text · worst 6.18:1 · AA
white 2.12 failsblack 6.18 AAbanding medium

Same stops, three spaces

The source renders this in sRGB. The number is how much chroma survives at the dullest point along the line — the difference between the first bar and the others is the grey that OKLab removes.

sRGB77%
OKLab63%
OKLCH80%

Report

  • white ink: worst 2.12:1 at 0% (fails AA); black ink: worst 6.18:1 at 99% (AA) → use black text.
  • Banding medium: ~5px bands at 1440px — add grain 7 (≈1% soft-light noise) or shorten the ramp.

Export

css
.gradient {
  background-image: linear-gradient(90deg, #12c2e9 0%, #3ebde9 3.57%, #55b8ea 7.14%, #65b3ea 10.71%, #73aeea 14.29%, #7fa9eb 17.86%, #8aa4eb 21.43%, #939eeb 25%, #9c98ec 28.57%, #a392ec 32.14%, #ab8cec 35.71%, #b286ec 39.29%, #b87fed 42.86%, #be78ed 46.43%, #c471ed 50%, #c870e3 53.57%, #cb70d9 57.14%, #cf6ed0 60.71%, #d26dc6 64.29%, #d66bbc 67.86%, #da6ab2 71.43%, #dd67a8 75%, #e1659d 78.57%, #e46293 82.14%, #e85f88 85.71%, #eb5c7d 89.29%, #ef5872 92.86%, #f35466 96.43%, #f64f59 100%);
  background-image: linear-gradient(90deg in oklab, #12c2e9 0%, #c471ed 50%, #f64f59 100%);
}
tailwind v4
bg-linear-to-r/oklab from-[#12c2e9] via-[#c471ed] to-[#f64f59]
svg
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="600" viewBox="0 0 1440 600"><defs><linearGradient id="bs-gradient" gradientUnits="userSpaceOnUse" x1="0" y1="300" x2="1440" y2="300"><stop offset="0%" stop-color="#12c2e9"/><stop offset="3.57%" stop-color="#3ebde9"/><stop offset="7.14%" stop-color="#55b8ea"/><stop offset="10.71%" stop-color="#65b3ea"/><stop offset="14.29%" stop-color="#73aeea"/><stop offset="17.86%" stop-color="#7fa9eb"/><stop offset="21.43%" stop-color="#8aa4eb"/><stop offset="25%" stop-color="#939eeb"/><stop offset="28.57%" stop-color="#9c98ec"/><stop offset="32.14%" stop-color="#a392ec"/><stop offset="35.71%" stop-color="#ab8cec"/><stop offset="39.29%" stop-color="#b286ec"/><stop offset="42.86%" stop-color="#b87fed"/><stop offset="46.43%" stop-color="#be78ed"/><stop offset="50%" stop-color="#c471ed"/><stop offset="53.57%" stop-color="#c870e3"/><stop offset="57.14%" stop-color="#cb70d9"/><stop offset="60.71%" stop-color="#cf6ed0"/><stop offset="64.29%" stop-color="#d26dc6"/><stop offset="67.86%" stop-color="#d66bbc"/><stop offset="71.43%" stop-color="#da6ab2"/><stop offset="75%" stop-color="#dd67a8"/><stop offset="78.57%" stop-color="#e1659d"/><stop offset="82.14%" stop-color="#e46293"/><stop offset="85.71%" stop-color="#e85f88"/><stop offset="89.29%" stop-color="#eb5c7d"/><stop offset="92.86%" stop-color="#ef5872"/><stop offset="96.43%" stop-color="#f35466"/><stop offset="100%" stop-color="#f64f59"/></linearGradient></defs><rect width="1440" height="600" fill="url(#bs-gradient)"/></svg>
dtcg
{
  "jshine": {
    "$type": "gradient",
    "$value": [
      {
        "color": {
          "colorSpace": "srgb",
          "components": [
            0.071,
            0.761,
            0.914
          ],
          "hex": "#12c2e9"
        },
        "position": 0
      },
      {
        "color": {
          "colorSpace": "srgb",
          "components": [
            0.769,
            0.443,
            0.929
          ],
          "hex": "#c471ed"
        },
        "position": 0.5
      },
      {
        "color": {
          "colorSpace": "srgb",
          "components": [
            0.965,
            0.31,
            0.349
          ],
          "hex": "#f64f59"
        },
        "position": 1
      }
    ],
    "$extensions": {
      "com.brandsweets": {
        "kind": "linear",
        "css": "linear-gradient(90deg in oklab, #12c2e9 0%, #c471ed 50%, #f64f59 100%)",
        "interpolation": "oklab",
        "angle": 90,
        "name": "JShine",
        "contrast": {
          "white": {
            "ratio": 2.117,
            "at": 0,
            "passesAA": false,
            "passesAALarge": false
          },
          "black": {
            "ratio": 6.181,
            "at": 0.9949,
            "passesAA": true,
            "passesAALarge": true
          },
          "suggestedInk": "#000000"
        }
      }
    },
    "$description": "JShine (uiGradients, MIT), rendered in OKLab."
  }
}

Tagged

More blue gradients

mcpConnect your agent to the gradient engine
live endpoint

Point any MCP client at the shared gradients endpoint and your agent gets the same engine as this page — make_gradient returns CSS with the interpolation space, Tailwind v4, SVG, a PNG URL, a DTCG token and the contrast report in one call; brand_gradients derives the whole contact sheet from a brand or a palette. Read-only, no key. Every gradient is a /gradients/new/… link: open it, refine, paste it back.

endpointhttps://mcp.brandsweets.com/gradients/mcp
claude mcp add --transport http brandsweets-gradients https://mcp.brandsweets.com/gradients/mcp
try this prompt

take the JShine gradient (#12c2e9, #c471ed, #f64f59), re-interpolate it in oklch, and tell me the worst-case contrast for white text

Want the agent to remember your picks and write them into a living brand? Create a free BrandSweets workspace.

Machine-readable: gradients.md · From uiGradients (MIT) — licences