{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreiao6dj7xyvr37ei2ei3tyajbr7wwbtzyly3hbwuigfv7lvanbpjnu",
    "uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mpexjtmrj532"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreic5joujnnchxcyq7cvp57ds2zj2nido6m2ef5ht7rjbvroheltjfi"
    },
    "mimeType": "image/webp",
    "size": 228402
  },
  "path": "/grimicorn/grimicorn-neon-when-a-calm-theme-goes-loud-1j20",
  "publishedAt": "2026-06-28T21:17:47.000Z",
  "site": "https://dev.to",
  "tags": [
    "tooling",
    "css",
    "a11y",
    "typescript",
    "danholloran.me",
    "Grimicorn Neon page"
  ],
  "textContent": "> _Originally published on danholloran.me_\n\nThe original Grimicorn was an exercise in restraint: muted pastels on a blue-gray base, tuned so nothing on screen ever burns your eyes. Grimicorn Neon is the opposite impulse. Same grim-reaper-meets-unicorn idea, except this one is plugged into the mains — saturated, glowing accents on a near-black base, dark-only, loud on purpose.\n\nWhat makes the pair interesting from an engineering angle is how little had to change to get there. Neon is not a new theme so much as the same theme with the volume knob turned all the way up. That only works because of a decision made back in the calm version: colors are defined by role, not by appearance.\n\n##  Eight roles, eight louder hexes\n\nBoth themes share the exact same role map. Blue is keywords, links, and the primary accent. Green is strings, success, and the cursor. Yellow is types, decorators, and warnings. The accent hierarchy is still blue → purple → teal, and the semantic anchors still hold: green means good, the error color means wrong.\n\nWhat changes is only the values bound to those roles. Calm Grimicorn's blue is a soft `#83AFE5`; Neon's is an electric `#2323FF`. Calm green is a sage `#A9CE93`; Neon green is an acid `#A3E635`. The error role even swaps identity, from a gentle salmon to a hot `#FF2D9B` pink. Lay the two palettes side by side and the structure is identical — only the saturation and brightness move:\n\n\n\n    // same eight roles, two personalities\n    const calm = {\n      blue: \"#83AFE5\",\n      green: \"#A9CE93\",\n      error: \"#DD9787\",\n      base: \"#253039\",\n    };\n    const neon = {\n      blue: \"#2323FF\",\n      green: \"#A3E635\",\n      error: \"#FF2D9B\",\n      base: \"#0A0A0B\",\n    };\n\n\nBecause every one of the fourteen tool ports — VS Code, Ghostty, Obsidian, Claude Code, JetBrains, tmux, and the rest — is generated from a single `palette.md`, producing the neon set was mostly a matter of feeding the build a different eight values. The emitters that translate roles into VS Code scopes or ANSI slots never knew the difference. That is the real payoff of role-based theming: one architecture, two completely different moods, no forked codebase.\n\n##  The near-black base is doing real work\n\nNeon accents only read as neon if the thing behind them gets out of the way. Calm Grimicorn could afford a blue-gray base because its accents were gentle. Crank the accents to full saturation and that same base would turn into mud — everything competing, nothing glowing.\n\nSo Neon drops the floor to near-black. The background scale runs from `#050506` through `#303036`, six steps that are almost monochrome by design. The chrome recedes, and the only saturated pixels left on screen are the ones carrying meaning: a keyword, a string, an error. High contrast plus near-zero background saturation is what produces the \"glow.\" It is the same trick a concert uses — a dark room is what lets the lights pop.\n\n##  Loud is a tradeoff, not a free upgrade\n\nWorth being honest here: maximum-saturation text on a black background is the highest-contrast pairing you can build, and that is not purely a win. On dark UIs, very bright, very saturated glyphs can bloom slightly at their edges — a halation effect that some eyes, especially astigmatic ones, read as fuzziness after a long session. That is exactly the fatigue the calm variant was designed to avoid, which is why Neon ships dark-only and is framed as a mood rather than a default. It is a theme for when you want your screen to feel alive, not for the eighth straight hour of debugging.\n\nThat is also why both themes exist instead of one. Calm is the everyday driver; Neon is the rave you opt into. Same roles, same pipeline, same fourteen tools — one tuned to disappear, the other tuned to shout.\n\nIf you want to plug in, every tool gets a single neon file, and you can grab one port or the whole set from the Grimicorn Neon page. The calm original is one click away if your eyes need the quiet back.\n\n_This post was originally published on danholloran.me. Follow along there for more frontend and dev content._",
  "title": "Grimicorn Neon: When a Calm Theme Goes Loud"
}