Communitygithub.com

Adamparishspok/skills

Construye o migra la paleta neutra de una interfaz (fondos, superficies, líneas, texto/tinta) como una fórmula OKLCH impulsada por pocas entradas en lugar de docenas de valores hexadecimales elegidos manualmente, con temas claro y oscuro, anulaciones por escalón, un script de ajuste que reproduce colores existentes y una auditoría de contraste en navegador. Útil al crear un tema, añadir modo oscuro, retintear un producto, auditar contraste de texto o consolidar paletas de varias aplicaciones. Se activa con: paleta, neutros, rampa de grises, modo oscuro, tokens de tema, oklch, retinte, tono, auditoría de contraste, tokens de diseño, colores Tailwind @theme.

¿Qué es skills?

Esta skill permite construir o migrar la paleta neutra de una interfaz (fondos, superficies, líneas y tintas/texto) utilizando una fórmula basada en OKLCH en lugar de seleccionar manualmente docenas de valores hexadecimales. Con solo tres parámetros (--hue, --lightness, --chroma o --contraste) y una escalera por tema, se genera toda la rampa de colores, manteniendo las brechas de contraste incluso al cambiar de tono. La skill incluye un script de ajuste (fit_palette.py) que reproduce colores existentes con un error ΔE bajo, soporta temas claro y oscuro con anulaciones por escalón, y proporciona una auditoría de contraste en navegador real. Compatible con CSS nativo y Tailwind v4. Es ideal para crear temas, añadir modo oscuro, retintear productos, auditar contraste de texto o consolidar paletas de varias aplicaciones, evitando deriva cromática y garantizando accesibilidad.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Adamparishspok/skills/tree/HEAD/skills/oklch-palette-formula

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación


name: oklch-palette-formula description: Construye o migra la paleta neutra de una interfaz (fondos, superficies, líneas, texto/tinta) como una fórmula OKLCH impulsada por pocas entradas en lugar de docenas de valores hexadecimales elegidos manualmente, con temas claro y oscuro, anulaciones por escalón, un script de ajuste que reproduce colores existentes y una auditoría de contraste en navegador. Útil al crear un tema, añadir modo oscuro, retintear un producto, auditar contraste de texto o consolidar paletas de varias aplicaciones. Se activa con: paleta, neutros, rampa de grises, modo oscuro, tokens de tema, oklch, retinte, tono, auditoría de contraste, tokens de diseño, colores Tailwind @theme. license: MIT

Fórmula de paleta OKLCH

Los neutros de un producto (fondo de página, superficie de tarjeta, campos, líneas finas, cuatro niveles de texto) suelen ser de 15 a 30 valores hexadecimales por tema, elegidos a ojo. Estos valores derivan, el modo oscuro es un segundo conjunto elegido manualmente y nadie sabe qué pares todavía pasan el contraste. Reemplázalos con una fórmula:

token tipo superficie: L = papel + profundidad × n(token)     croma = tinte      tono = tono
token tipo tinta:      L = tinta + paso   × n(token)     croma = tinte-tinta  tono = tono

n(token) es la posición del token en una escalera, una escalera por tema. Mueve una entrada y toda la rampa se mueve junta, así que los espacios entre escalones, donde vive el contraste, sobreviven a un retinte. Retintear un producto es una línea (--hue).

Tres perillas (--hue, --lightness, --chroma o --contrast) guían cada color.

Archivos

  • references/palette.css: reglas listas para usar con entradas y escaleras predeterminadas.
  • scripts/fit_palette.py: ajusta las entradas a una paleta hexadecimal existente e imprime ΔE por token.
  • scripts/ladders.json: las escaleras predeterminadas (claro, oscuro).
  • scripts/palette-audit.mjs: resuelve cada token en un navegador real en ambos temas y falla en contraste.
  • scripts/oklch.py: conversiones y helpers de ΔE / WCAG.

Procedimiento

  1. Nombra los tokens por su función, no por su valor. Los valores predeterminados:

    • Fondos: ground (página), panel (barras, rieles), surface (tarjetas, menús), surface-2 (campos), surface-3 (chips, filas hover), field.
    • Líneas: line, line-2, line-3 (líneas finas, de más claras a más oscuras), más field-line, el borde de un control, que debe superar 3:1.
    • Tinta: ink, ink-2, ink-3, ink-4 (texto, de más oscuro a más claro). Cada paso de tinta es texto, así que cada uno debe superar 4.5:1.
  2. Ajusta, no vuelvas a elegir. Para un producto existente, ejecuta python3 scripts/fit_palette.py theme.css. Lee las declaraciones --color-* hexadecimales (claro y luego la regla [data-theme="dark"]), ajusta las entradas contra la escalera predeterminada e imprime ΔE por token. Menos de 2 es visualmente idéntico.

  3. Anula pasos de la escalera donde el diseño los espacie de forma diferente, nunca el color. Evalúa candidatos con fit_palette.py theme.css light '<inputs>' '<overrides>' hasta que el peor ΔE esté por debajo de ~2. Anulaciones típicas: field: 0 (los campos son la cara de la tarjeta), un line-3 más ancho, un mayor espacio entre ink e ink-2.

  4. Escribe las reglas (ver references/palette.css):

    • Coloca las entradas y las fórmulas --color-* en el elemento que lleva el atributo del tema.
    • Vuelve a declarar cada entrada que cambies en la regla oscura. Una regla oscura escrita para los valores predeterminados del kit, de lo contrario, gana con sus valores.
    • Con Tailwind v4, mantén los nombres de los tokens en @theme para que las utilidades existan; las declaraciones en tiempo de ejecución las anulan.
  5. Audita en un navegador real: node scripts/palette-audit.mjs <url>. Pinta cada token, lee el sRGB de vuelta y verifica:

    • cada paso de tinta a 4.5:1 contra cada fondo;
    • field-line y ring a 3:1.

    Corrige un FALLO moviendo el paso de la escalera de ese token, no poniendo una excepción de color. Espera FALLOS en paletas existentes: en una migración de 17 aplicaciones la auditoría encontró valores de ink-4 o field-line que fallaban en más de la mitad, todos ellos publicados anteriormente.

Trampas

  • var() dentro de una propiedad personalizada se resuelve donde se declara.
    • Declara las fórmulas en :root y establece las entradas en un hijo: el hijo nunca se recolorea.
    • Los tokens alias (--color-heading: var(--color-ink)) también deben declararse en el mismo elemento temático.
  • Los valores de @theme de Tailwind v4 viven en :root. Un tema con ámbito en la raíz de una aplicación ([data-app]) debe declarar la fórmula allí, no en @theme.
  • Cualquier cosa que pase colores a un lienzo o biblioteca de mapas (getComputedStyle(...).getPropertyValue('--color-x')) ahora recibe una cadena oklch(calc(...)) sin resolver. Resuélvela primero: pinta un elemento de prueba y lee un lienzo de 1px, de la misma manera que lo hace la auditoría.
  • Un solo tono para fondos y tintas. Si el diseño de las tintas tiene un tono diferente al de los fondos, mantén --ink-tint bajo; en L 0.98 cualquier croma se lee como un matiz de color.
  • Los colores de marca, estado y gráficos quedan fuera de la fórmula. Deriva variantes de texto sobre tinte (por ejemplo brand-text) a partir del mismo tono con una luminosidad fija en lugar de elegirlos por separado.
  • Las paletas de tono mixto, solo claras, muestreadas de composiciones pueden no ajustarse a ~2 ΔE. Omítelas en lugar de distorsionar el diseño. La auditoría sigue aplicándose.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Adamparishspok/skills

Make a website, web app or online store ready for AI agents. Scan it with Cloudflare's Agent Readiness checks, decide which checks apply to this kind of site, ship the discovery files and headers in priority order, and add the AI-first basics the scanner does not score (server-rendered content, JSON-LD, llms.txt). Covers robots.txt AI rules, Content Signals, sitemap, Markdown for Agents (Accept text/markdown), Link headers, API catalog, OAuth discovery, auth.md, MCP server card, A2A agent card, agent skills index, WebMCP, and commerce protocols (ACP, UCP, AP2, MPP, x402). Use when making a site AI-ready, agent-ready or AI-first, or fixing an isitagentready.com or Cloudflare Agent Readiness report. Triggers on: AI ready, agent ready, AI-first, agent readiness, isitagentready, AI Crawl Control, Markdown for Agents, text/markdown, llms.txt, GPTBot, ClaudeBot, AI crawlers, Content-Signal, ai-train, api-catalog, .well-known, oauth-protected-resource, auth.md, MCP server card, agent card, agent skills, WebMCP, a...

Adamparishspok/skills

Install a complete, lean favicon set on any website or web app — the five files modern browsers, iOS and Android actually use, one block of head markup added once in the root layout, and a check that every file resolves. Covers finding the public folder per framework, generating the set from one SVG (or from a RealFaviconGenerator package), dark-mode SVG icons, maskable manifest icons, cache busting and verification. Use when adding, replacing or auditing a favicon, app icon, apple-touch-icon or web manifest. Triggers on: favicon, favicon.ico, favicon.svg, apple-touch-icon, site.webmanifest, manifest.json, app icon, PWA icon, maskable icon, tab icon, RealFaviconGenerator.

Adamparishspok/skills

Give an interface one shared tempo and a small vocabulary of hover and state micro-interactions: duration tiers (tap/pop/hover/card/layout) for CSS and Motion, swap hand-offs, rows whose highlight grows in, trailing arrows, chevron nudges, card lifts without translate, scroll-edge fades, and icon/label swaps for copy and toggle buttons. Use when animations feel inconsistent, durations are scattered magic numbers, hovers only change colour, or a product feels flat or unfinished. Triggers on: animation duration, transition timing, hover state, micro-interaction, polish, copy button feedback, menu icon to close, back arrow, card hover, scroll fade, motion tokens, Framer Motion durations.

Adamparishspok/skills

Consolidate several apps or prototypes onto one shared component library without flattening their looks. Covers finding duplicated local components (buttons, selects, fields, modals, pagers, toasts), making shared components token-sized so each suite or app sets its own measurements, mapping variant names, deciding what stays app-specific, and the tailwind-merge traps that silently break custom tokens. Use when several apps each grew their own Btn/Select/Modal, when a design system's components "don't fit" a second product, or when retheming a family of apps. Triggers on: shared component library, design system consolidation, duplicate components, retheme, suite of apps, shadcn retokened, token-driven components, cn tailwind-merge custom tokens, variant mapping.

Skills relacionados