<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://csswitch.github.io/jekyll-neon-theme/feed.xml" rel="self" type="application/atom+xml" /><link href="https://csswitch.github.io/jekyll-neon-theme/" rel="alternate" type="text/html" /><updated>2026-05-12T20:27:47+00:00</updated><id>https://csswitch.github.io/jekyll-neon-theme/feed.xml</id><title type="html">Neon Noir</title><subtitle>Your cyberpunk-inspired Jekyll site</subtitle><author><name>Your Name</name><email>you@example.com</email></author><entry><title type="html">CSS Neon Glow Effects — No Images, Just box-shadow</title><link href="https://csswitch.github.io/jekyll-neon-theme/2024/01/22/css-neon-glow-effects/" rel="alternate" type="text/html" title="CSS Neon Glow Effects — No Images, Just box-shadow" /><published>2024-01-22T00:00:00+00:00</published><updated>2024-01-22T00:00:00+00:00</updated><id>https://csswitch.github.io/jekyll-neon-theme/2024/01/22/css-neon-glow-effects</id><content type="html" xml:base="https://csswitch.github.io/jekyll-neon-theme/2024/01/22/css-neon-glow-effects/"><![CDATA[<p>Real neon signs glow because gas plasma emits light in all directions. We can fake this with CSS using nothing but <code class="language-plaintext highlighter-rouge">box-shadow</code> — stacked at two radii with different opacities.</p>

<h2 id="the-two-layer-glow-formula">The Two-Layer Glow Formula</h2>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.neon-element</span> <span class="p">{</span>
  <span class="nl">box-shadow</span><span class="p">:</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">8px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.6</span><span class="p">),</span>   <span class="c">/* tight inner glow */</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">24px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.3</span><span class="p">);</span>  <span class="c">/* wide outer halo */</span>
<span class="p">}</span>
</code></pre></div></div>

<p>The key insight: the inner layer (8px) is high opacity for crispness; the outer layer (24px) is low opacity for the soft halo. Together they read as a real neon bloom.</p>

<h2 id="animating-the-glow">Animating the Glow</h2>

<p>For hover transitions, always animate <code class="language-plaintext highlighter-rouge">box-shadow</code> between two defined states:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.btn</span> <span class="p">{</span>
  <span class="nl">box-shadow</span><span class="p">:</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">8px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.4</span><span class="p">),</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">20px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.15</span><span class="p">);</span>
  <span class="nl">transition</span><span class="p">:</span> <span class="n">box-shadow</span> <span class="m">0.2s</span> <span class="n">ease</span><span class="p">;</span>
<span class="p">}</span>

<span class="nc">.btn</span><span class="nd">:hover</span> <span class="p">{</span>
  <span class="nl">box-shadow</span><span class="p">:</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">12px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.9</span><span class="p">),</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">40px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.5</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Do NOT animate <code class="language-plaintext highlighter-rouge">filter: drop-shadow</code> — it triggers GPU compositing on every frame.</p>

<h2 id="text-glow">Text Glow</h2>

<p>For text, use <code class="language-plaintext highlighter-rouge">text-shadow</code>:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">.neon-title</span> <span class="p">{</span>
  <span class="nl">color</span><span class="p">:</span> <span class="m">#e040fb</span><span class="p">;</span>
  <span class="nl">text-shadow</span><span class="p">:</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">8px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.8</span><span class="p">),</span>
    <span class="m">0</span> <span class="m">0</span> <span class="m">20px</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.4</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Keep text-shadow radius small (8–12px) — wide text glow looks muddy.</p>

<h2 id="the-perspective-grid">The Perspective Grid</h2>

<p>The Neon Noir background grid is a CSS gradient with a directional mask:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">body</span><span class="nd">::before</span> <span class="p">{</span>
  <span class="nl">background-image</span><span class="p">:</span>
    <span class="n">linear-gradient</span><span class="p">(</span><span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.07</span><span class="p">)</span> <span class="m">1px</span><span class="p">,</span> <span class="nb">transparent</span> <span class="m">1px</span><span class="p">),</span>
    <span class="n">linear-gradient</span><span class="p">(</span><span class="m">90deg</span><span class="p">,</span> <span class="n">rgba</span><span class="p">(</span><span class="m">224</span><span class="p">,</span> <span class="m">64</span><span class="p">,</span> <span class="m">251</span><span class="p">,</span> <span class="m">0.07</span><span class="p">)</span> <span class="m">1px</span><span class="p">,</span> <span class="nb">transparent</span> <span class="m">1px</span><span class="p">);</span>
  <span class="nl">background-size</span><span class="p">:</span> <span class="m">60px</span> <span class="m">60px</span><span class="p">;</span>

  <span class="c">/* Fade toward the top — floor perspective illusion */</span>
  <span class="py">mask-image</span><span class="p">:</span> <span class="n">linear-gradient</span><span class="p">(</span>
    <span class="n">to</span> <span class="nb">top</span><span class="p">,</span>
    <span class="n">rgba</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0.6</span><span class="p">)</span> <span class="m">0%</span><span class="p">,</span>
    <span class="n">rgba</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0</span><span class="p">,</span><span class="m">0.1</span><span class="p">)</span> <span class="m">40%</span><span class="p">,</span>
    <span class="nb">transparent</span> <span class="m">70%</span>
  <span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>The mask makes the grid dense near the “floor” and invisible at the “horizon” — no JavaScript required.</p>

<h2 id="glitch-with-clip-path">Glitch with clip-path</h2>

<p>The glitch animation uses <code class="language-plaintext highlighter-rouge">clip-path: polygon()</code> to slice the element into horizontal strips:</p>

<div class="language-css highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">@keyframes</span> <span class="n">glitch</span> <span class="p">{</span>
  <span class="err">0</span><span class="o">%</span>   <span class="p">{</span> <span class="nl">clip-path</span><span class="p">:</span> <span class="n">polygon</span><span class="p">(</span><span class="m">0</span> <span class="m">0%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">0%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">30%</span><span class="p">,</span> <span class="m">0</span> <span class="m">30%</span><span class="p">);</span> <span class="p">}</span>
  <span class="err">50</span><span class="o">%</span>  <span class="p">{</span> <span class="nl">clip-path</span><span class="p">:</span> <span class="n">polygon</span><span class="p">(</span><span class="m">0</span> <span class="m">40%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">40%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">70%</span><span class="p">,</span> <span class="m">0</span> <span class="m">70%</span><span class="p">);</span> <span class="p">}</span>
  <span class="err">100</span><span class="o">%</span> <span class="p">{</span> <span class="nl">clip-path</span><span class="p">:</span> <span class="n">polygon</span><span class="p">(</span><span class="m">0</span> <span class="m">0%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">0%</span><span class="p">,</span> <span class="m">100%</span> <span class="m">100%</span><span class="p">,</span> <span class="m">0</span> <span class="m">100%</span><span class="p">);</span> <span class="p">}</span>
<span class="p">}</span>

<span class="nc">.glitch</span><span class="nd">::before</span> <span class="p">{</span>
  <span class="nl">content</span><span class="p">:</span> <span class="n">attr</span><span class="p">(</span><span class="n">data-text</span><span class="p">);</span>
  <span class="nl">color</span><span class="p">:</span> <span class="no">cyan</span><span class="p">;</span>
  <span class="nl">animation</span><span class="p">:</span> <span class="n">glitch</span> <span class="m">0.4s</span> <span class="n">steps</span><span class="p">(</span><span class="m">1</span><span class="p">)</span> <span class="n">forwards</span><span class="p">;</span>
  <span class="nl">transform</span><span class="p">:</span> <span class="n">translateX</span><span class="p">(</span><span class="m">-2px</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Run at <code class="language-plaintext highlighter-rouge">steps(1)</code> — continuous easing looks wrong. Glitch should snap between frames.</p>]]></content><author><name>Your Name</name><email>you@example.com</email></author><category term="css" /><category term="design" /><category term="tutorial" /><category term="animation" /><summary type="html"><![CDATA[How to build convincing neon glow effects entirely with CSS box-shadow — stacked radii, rgba opacity, and hover transitions.]]></summary></entry><entry><title type="html">Welcome to Neon Noir — A Cyberpunk Jekyll Theme</title><link href="https://csswitch.github.io/jekyll-neon-theme/2024/01/15/welcome-to-neon-noir/" rel="alternate" type="text/html" title="Welcome to Neon Noir — A Cyberpunk Jekyll Theme" /><published>2024-01-15T00:00:00+00:00</published><updated>2024-01-15T00:00:00+00:00</updated><id>https://csswitch.github.io/jekyll-neon-theme/2024/01/15/welcome-to-neon-noir</id><content type="html" xml:base="https://csswitch.github.io/jekyll-neon-theme/2024/01/15/welcome-to-neon-noir/"><![CDATA[<p><strong>Neon Noir</strong> is a cyberpunk-inspired Jekyll theme — deep darkness, electric glow, and a faint perspective grid that pulls the eye into the screen.</p>

<h2 id="design-language">Design Language</h2>

<p>Every design decision comes from the same aesthetic source — neon signs, rain-slicked streets, CRT monitors:</p>

<ul>
  <li><strong>Perspective grid</strong> — the background is a pure CSS grid with a bottom-heavy opacity mask, creating a subtle vanishing-point floor</li>
  <li><strong>Glow on everything</strong> — hover any card, any link, any button: <code class="language-plaintext highlighter-rouge">box-shadow</code> with <code class="language-plaintext highlighter-rouge">rgba</code> at stacked radii creates a realistic neon bloom</li>
  <li><strong>Scanlines</strong> — a single <code class="language-plaintext highlighter-rouge">repeating-linear-gradient</code> at 3px intervals creates the CRT scanline effect</li>
  <li><strong>Glitch</strong> — post titles use <code class="language-plaintext highlighter-rouge">clip-path: polygon()</code> with staggered <code class="language-plaintext highlighter-rouge">::before</code>/<code class="language-plaintext highlighter-rouge">::after</code> animations at 0.4s</li>
</ul>

<h2 id="configuration">Configuration</h2>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">neon</span><span class="pi">:</span>
  <span class="na">accent</span><span class="pi">:</span> <span class="s2">"</span><span class="s">magenta"</span>   <span class="c1"># magenta | cyan | amber | green</span>
  <span class="na">grid</span><span class="pi">:</span> <span class="no">true</span>          <span class="c1"># perspective grid background</span>
  <span class="na">scanlines</span><span class="pi">:</span> <span class="no">true</span>     <span class="c1"># CRT scanline overlay</span>
  <span class="na">glitch</span><span class="pi">:</span> <span class="no">true</span>        <span class="c1"># clip-path glitch on page load</span>
  <span class="na">particles</span><span class="pi">:</span> <span class="no">true</span>     <span class="c1"># floating neon particles</span>
</code></pre></div></div>

<h2 id="writing-posts">Writing Posts</h2>

<p>Add <code class="language-plaintext highlighter-rouge">tags</code> and <code class="language-plaintext highlighter-rouge">description</code> to every post for the best presentation:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">layout</span><span class="pi">:</span> <span class="s">post</span>
<span class="na">title</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Your</span><span class="nv"> </span><span class="s">Post</span><span class="nv"> </span><span class="s">Title"</span>
<span class="na">date</span><span class="pi">:</span> <span class="s">2024-01-01</span>
<span class="na">tags</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">javascript</span><span class="pi">,</span> <span class="nv">design</span><span class="pi">,</span> <span class="nv">tutorial</span><span class="pi">]</span>
<span class="na">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">A</span><span class="nv"> </span><span class="s">one-sentence</span><span class="nv"> </span><span class="s">description</span><span class="nv"> </span><span class="s">shown</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">post</span><span class="nv"> </span><span class="s">card."</span>
<span class="nn">---</span>
</code></pre></div></div>

<p>The featured card on the home page always shows the most recent post — no configuration needed.</p>

<h2 id="color-accents">Color Accents</h2>

<p>The four accent modes shift the dominant color:</p>

<table>
  <thead>
    <tr>
      <th>Mode</th>
      <th>Primary</th>
      <th>Secondary</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">magenta</code></td>
      <td><code class="language-plaintext highlighter-rouge">#e040fb</code></td>
      <td><code class="language-plaintext highlighter-rouge">#00e5ff</code></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">cyan</code></td>
      <td><code class="language-plaintext highlighter-rouge">#00e5ff</code></td>
      <td><code class="language-plaintext highlighter-rouge">#e040fb</code></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">amber</code></td>
      <td><code class="language-plaintext highlighter-rouge">#ffab00</code></td>
      <td><code class="language-plaintext highlighter-rouge">#e040fb</code></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">green</code></td>
      <td><code class="language-plaintext highlighter-rouge">#69ff47</code></td>
      <td><code class="language-plaintext highlighter-rouge">#00e5ff</code></td>
    </tr>
  </tbody>
</table>]]></content><author><name>Your Name</name><email>you@example.com</email></author><category term="design" /><category term="jekyll" /><category term="getting-started" /><summary type="html"><![CDATA[Everything you need to know to configure and run Neon Noir — the cyberpunk Jekyll theme with perspective grid, glitch effects, and electric neon glows.]]></summary></entry></feed>