<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Seoulnight - Notes</title>
    <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/</link>
    <description>An editor color scheme drawn from Seoul at night: neon signage, river bridges, and late-hour code</description>
    <atom:link href="https://hahwul.github.io/hwaro-examples/seoulnight/notes/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Release notes, version 1.0</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/release-notes-v1/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/release-notes-v1/</guid>
      <description>The scheme is frozen: eight colors, every one measured, none of them moving again without a note in this log.</description>
      <content:encoded><![CDATA[<p>Version 1.0 is the freeze. After eighteen months of tuning, the eight colors are now fixed, and any future change must land with a note in this log explaining what was measured and why the old value lost. A color scheme is a dependency like any other; people build muscle memory against it, and silent drift is a breaking change even when no API moved.</p>
<!-- more -->
<p>What shipped: the blue-ink background documented in the first note, the desaturated sign magenta for keywords, and a contrast floor of 4.5 to 1 that every color in the set now clears against the base. The quietest change since the last beta is also the one most people will feel: comment fog was lifted two steps after readers reported that block comments were disappearing entirely at low brightness. Comments should whisper, not vanish.</p>
<p>Installation stays a one-line affair in the fictional editor this scheme pretends to target:</p>
<pre><code class="language-json hljs"><span class="hljs-punctuation">{</span>
  <span class="hljs-name">&quot;editor.colorScheme&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;seoulnight&quot;</span><span class="hljs-punctuation">,</span>
  <span class="hljs-name">&quot;editor.background&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;dim&quot;</span>
<span class="hljs-punctuation">}</span>
</code></pre>
<aside class="callout"><p>Upgrading from a 0.x build: the comment color changed value in this release. If you pinned individual hex codes instead of the scheme name, repin <code>angae</code> before updating.</p>
</aside>
<p>What did not ship: a light variant. Daylight asks different questions, and answering them halfway would cheapen both halves. If a companion ever appears it will be its own scheme with its own name, measured against morning instead of borrowed from midnight.</p>
]]></content:encoded>
      <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
      <category>release</category>
    </item>
    <item>
      <title>The roundel legend</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/the-roundel-legend/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/the-roundel-legend/</guid>
      <description>The scheme needed a legend that works at thumbnail size. Metro line roundels turned out to be the answer.</description>
      <content:encoded><![CDATA[<p>Every color scheme site faces the same layout problem: how do you present eight colors so that a stranger can hold them in their head? A flat row of hex codes is a spreadsheet. Vertical bars look like a paint catalogue. Both formats say what the colors are and nothing about how to remember them.</p>
<!-- more -->
<p>The answer came from the subway map folded in a coat pocket. Seoul's metro lines are identified by numbered circles in flat, committed colors, and the whole city navigates by them without thinking. A roundel does three jobs at once: the fill shows the color, the number gives it an address, and the circle makes it feel like infrastructure rather than decoration.</p>
<p>So the scheme adopted the format as its legend. The eight colors are numbered one through eight in the order they matter: text first, keywords second, down to comments in fog at the end of the line. On the landing page the roundels run across the title bar of the code specimen, joined by a thin connector, exactly the way stations sit on a route diagram. The swatch cards repeat the same numbers, so the strip works as a table of contents for the section below it.</p>
<p>The pleasant surprise was how well the strip survives shrinking. In a browser tab, in a social preview, in the tiny screenshot of a gallery card, eight colored dots on a line stay legible long after any text has dissolved. A legend that still reads at sixty pixels wide is the closest thing a color scheme gets to a logo.</p>
]]></content:encoded>
      <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
      <category>seoul</category>
      <category>design</category>
    </item>
    <item>
      <title>Hangul in the margins</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/hangul-in-the-margins/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/hangul-in-the-margins/</guid>
      <description>Korean glyphs are visually denser than Latin ones. What that means for line height, UI labels, and the specimen on the landing page.</description>
      <content:encoded><![CDATA[<p>Seoulnight ships with Korean labels next to its color names, and the site you are reading sets its masthead in Hangul. That decision came with typographic homework. Hangul glyphs are built from stacked jamo inside a square frame, which makes them visually denser than Latin lowercase at the same point size. Set both scripts on the same line with Latin-tuned metrics and the Korean reads cramped while the Latin reads loose.</p>
<!-- more -->
<p>Two adjustments carried most of the weight. Line height on mixed lines runs slightly taller than the Latin-only default, giving the stacked blocks room to breathe without opening visible gaps in pure-Latin paragraphs. And the display face had to be chosen for its Hangul first: Gothic A1 keeps its stroke contrast at heavy weights in both scripts, so the masthead can set 서울밤 at poster size without the counters filling in.</p>
<p>The subtler lesson was about hierarchy. In a Latin-only layout, size and weight do the ranking. Add a second script and the script itself becomes a signal: the Hangul name reads as the identity, the romanization underneath as the annotation. The landing page leans on that deliberately. The big glyphs carry the mood, and the small mono line under them carries the spelling you would type into a package manager.</p>
<p>None of this needed custom features or variable-font tricks. It needed measuring the two scripts honestly instead of assuming the Latin defaults would stretch to cover both.</p>
]]></content:encoded>
      <pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate>
      <category>typography</category>
    </item>
    <item>
      <title>Tuning the neon</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/tuning-the-neon/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/tuning-the-neon/</guid>
      <description>The keyword magenta was sampled from a real sign tube and arrived far too loud. Desaturating it without losing the night.</description>
      <content:encoded><![CDATA[<p>The keyword color was sampled from a photograph of a sign tube in Euljiro, and the raw sample was unusable. Real neon pushes past what a code editor can politely display: on screen it measured close to full saturation, and a page of <code>if</code>, <code>return</code>, and <code>import</code> flickered like a shop front. Keywords are roughly a fifth of the tokens in a typical file. Whatever color they wear becomes the color of the whole buffer.</p>
<!-- more -->
<p>The tuning process was mechanical. Drop saturation a step, read a familiar file for ten minutes, measure contrast, repeat. The stopping rule: the moment a keyword stopped registering as a light source and started registering as ink, back up one step and take that value. The final magenta keeps the hue of the sign but roughly two thirds of its saturation, and it clears the background at 5.4 to 1.</p>
<p>The same pass is recorded in the scheme definition, which doubles as a sample of the scheme reading its own source:</p>
<pre><code class="language-toml hljs"><span class="hljs-punctuation">[</span>colors<span class="hljs-punctuation">.</span>neon<span class="hljs-punctuation">]</span>
hex <span class="hljs-punctuation">=</span> <span class="hljs-string">&quot;#d957c4&quot;</span>
role <span class="hljs-punctuation">=</span> <span class="hljs-string">&quot;keywords&quot;</span>
sampled <span class="hljs-punctuation">=</span> <span class="hljs-string">&quot;sign tube, euljiro 3-ga&quot;</span>
contrast <span class="hljs-punctuation">=</span> <span class="hljs-number">5.4</span>
</code></pre>
<p>One rejected idea deserves a line. A late draft gave keywords a subtle bold weight on top of the color. It read beautifully for five minutes and then the page felt shouted. Weight is a second channel of emphasis, and spending two channels on one token class is how schemes turn into carnival. Color alone, correctly desaturated, was enough.</p>
]]></content:encoded>
      <pubDate>Tue, 22 Jul 2025 00:00:00 +0000</pubDate>
      <category>color</category>
      <category>keywords</category>
    </item>
    <item>
      <title>Naming colors after the city</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/naming-colors-after-the-city/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/naming-colors-after-the-city/</guid>
      <description>A hex value says what a color is. A name says what it is for. How the eight scheme colors got their Seoul names.</description>
      <content:encoded><![CDATA[<p>Early builds of the scheme named colors the way most themes do: <code>blue1</code>, <code>magenta</code>, <code>comment-gray</code>. The values were fine, but every tuning session started with a lookup. Which blue was <code>blue1</code> again? Was <code>magenta</code> the keyword color or the diff-delete color? A name that only restates the hue tells you nothing when you are deciding what the color should do.</p>
<!-- more -->
<p>So the palette was renamed after the places the values were sampled from, and every name doubles as a job description. The function color is <em>hangang</em>, the river, because call chains are supposed to flow downstream. The keyword color is <em>neon</em>, from the sign tubes of Euljiro, because keywords are the words that stay lit whatever else changes. Strings are <em>namsan</em> pine green, the one organic thing visible from most office windows. Numbers are <em>eunhaeng</em>, ginkgo, after the yellow that buries Jongno every November. Types wear <em>dancheong</em> vermilion, the pigment painted under palace eaves, structural and a little ceremonial, which is exactly what a type annotation is.</p>
<p>The quiet one matters most. Comments are <em>angae</em>, fog. Fog sits behind the city without hiding it, and that is the entire design brief for a comment color in one word. Since the rename, no tuning note in this log has needed a lookup table to stay readable, which is its own small proof that the naming was worth a full note.</p>
]]></content:encoded>
      <pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate>
      <category>seoul</category>
      <category>naming</category>
    </item>
    <item>
      <title>Why the background is not black</title>
      <link>https://hahwul.github.io/hwaro-examples/seoulnight/notes/why-the-background-is-not-black/</link>
      <guid>https://hahwul.github.io/hwaro-examples/seoulnight/notes/why-the-background-is-not-black/</guid>
      <description>True black turns bright accents into halos. How the base color #101320 was picked, and what halation does to late-night eyes.</description>
      <content:encoded><![CDATA[<p>The first draft of Seoulnight used a pure black background, and it lasted exactly one night. On an OLED panel in a dark room, saturated glyphs on true black develop a faint bloom at their edges, an effect photographers call halation. Keywords started to shimmer. After twenty minutes the shimmer read as eye strain, and after an hour it read as a headache.</p>
<!-- more -->
<p>The fix was to lift the background until the halos collapsed, then stop. Lifting too far costs the scheme its depth of night; the whole point is that the window should feel like looking out over the river at 2 a.m. The value that held both properties was a blue-leaning ink, sampled from a long-exposure photograph of the Han River taken from the Dongjak Bridge.</p>
<p>Lifting the background also softened the contrast stack. Body text now sits at 14.5 to 1 against the base, comfortably past the 4.5 to 1 floor the project holds every color to, but no longer at the razor 21 to 1 that pure white on pure black produces. Maximum contrast sounds like a feature until you read under it for six hours; it is the typographic equivalent of high beams in the fog.</p>
<p>One more consequence worth recording: with a blue base, warm colors gained apparent brightness for free. Vermilion and ginkgo yellow both measured the same as before, but sat forward in a way they never did on neutral black. The city taught that trick too. Neon looks brightest over dark water.</p>
]]></content:encoded>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      <category>contrast</category>
      <category>color</category>
    </item>
  </channel>
</rss>
