Syntax Spectrum
Each programming language has its own visual identity.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β TRADITIONAL SYNTAX HIGHLIGHTING β
β β
β .ts file: .py file: β
β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β const x = "hello"; β β x = "hello" β β
β β ^^^^^ ^^^^^^^^ β β ^ ^^^^^^^^ β β
β β BLUE GREEN β β BLUE GREEN β β
β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β
β Problem: ALL files use the SAME colors β
β TypeScript looks just like Python β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SYNTAX SPECTRUM β
β β
β .ts file (SEED: Blue): .py file (SEED: Green): β
β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β const x = "hello"; β β x = "hello" β β
β β ^^^^^ ^^^^^^^^ β β ^ ^^^^^^^^ β β
β β 230 deg 257.5 deg β β 130 deg 157.5 deg β β
β β (blue) (blue-purple)β β (green) (teal) β β
β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β
β Solution: Each file type has its OWN color world β
β TypeScript = "Blue World" β
β Python = "Green World" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Blue World and Green World
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β TYPESCRIPT: THE BLUE WORLD β
β β
β SEED = oklch(55% 0.15 230) -- Blue β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1 | const greeting: string = "Hello"; β β
β β 2 | function sayHello(): void { β β
β β 3 | console.log(greeting); // output β β
β β 4 | return 42; β β
β β 5 | } β β
β β | ^ ^ ^ ^ β β
β β | keyword type string comment β β
β β | (230deg) (340deg) (257deg) (gray-blue) β β
β β | β β
β β | All colors derive from 230deg (Blue) β β
β β | Opening this file = entering a "blue world" β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PYTHON: THE GREEN WORLD β
β β
β SEED = oklch(55% 0.15 130) -- Green β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1 | greeting: str = "Hello" β β
β β 2 | def say_hello() -> None: β β
β β 3 | print(greeting) # output β β
β β 4 | return 42 β β
β β 5 | β β
β β | ^ ^ ^ ^ β β
β β | keyword type string comment β β
β β | (130deg) (240deg) (157deg) (gray-green) β β
β β | β β
β β | All colors derive from 130deg (Green) β β
β β | Opening this file = entering a "green world" β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Golden Angle for Tokens
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FULL GOLDEN ANGLE: 137.5 degrees β
β βββββββββββββββββββββββββββββββ β
β β
β Based on golden ratio (phi = 1.618...) β
β 360 / phi^2 = 137.5077... β
β β
β Maximizes visual separation when generating N colors β
β No matter how many, they never cluster β
β β
β Color 1: 0 deg β
β Color 2: 137.5 deg β
β Color 3: 275 deg β
β Color 4: 52.5 deg β
β ... β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SMALLER ANGLE: 27.5 degrees (for syntax tokens) β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Used for tokens WITHIN a file's spectrum β
β Creates smooth progression of related hues β
β β
β From SEED (e.g., 230 for .ts): β
β Token 0 (keyword): 230 deg β
β Token 1 (function): 257.5 deg (+27.5) β
β Token 2 (number): 285 deg (+55) β
β Token 3 (builtin): 312.5 deg (+82.5) β
β β
β All tokens are "neighbors" on the color wheel β
β Related but distinguishable β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Token Color Wheel
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β TOKENS ON THE COLOR WHEEL (starting from 180 deg) β
β β
β 0 deg (Red) β
β | β
β 7 | β
β (attribute)| 6 (tag-name) β
β \ | / β
β \ | / β
β \ |/ 5 (tag) β
β 270 deg (Blue) ββββββββ+-βββββββ 90 deg (Green) β
β 4 (meta) | \ β
β / | \ β
β / | \ β
β 3 (builtin) / | \ 0 (keyword) β
β / | \ β
β / | \ β
β 2 (number) / | \ 1 (function) β
β | β
β 180 deg (Cyan) β
β β
β Starting from 180 deg (cyan), tokens progress clockwise β
β by 27.5 degrees each, covering about 195 degrees total β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Comment Special Case
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β COMMENTS: BLEND WITH GRAY β
β β
β Comments should not demand attention β
β They should "whisper" their file's color identity β
β β
β Formula: Mix SEED color with 60% gray β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β SEED (Blue): ββββββββββββββββββββ oklch(55% 0.15 230) β
β β β β
β β Gray: ββββββββββββββββββββ oklch(50% 0 0) β β
β β β β
β β Mix at 40%/60%: β β
β β β β
β β L = 0.55 * 0.4 + 0.50 * 0.6 = 0.52 β β
β β a = -0.10 * 0.4 + 0 * 0.6 = -0.04 β β
β β b = -0.11 * 0.4 + 0 * 0.6 = -0.044 β β
β β β β
β β Result: ββββββββββββββββββββ Grayish-blue β β
β β β β
β β A subtle hint of blue that says "I'm from the blue β β
β β family" without demanding attention β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
File Type Hue Assignments
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FILE EXTENSION TO HUE MAPPING β
β β
β ββββββββββββ¬βββββββ¬βββββββββββββββ¬βββββββββββββββββββββββββ β
β βExtension β Hue β Color β Rationale β β
β ββββββββββββΌβββββββΌβββββββββββββββΌβββββββββββββββββββββββββ€ β
β β .ts β 230 β Blue β TypeScript (Microsoft) β β
β β .js β 55 β Yellow β JavaScript (classic) β β
β β .py β 130 β Green β Python (common) β β
β β .rs β 35 β Orange β Rust (official) β β
β β .go β 195 β Cyan β Go (gopher color) β β
β β .rb β 355 β Red β Ruby (gemstone) β β
β β .java β 80 β Yellow-Green β Java (coffee) β β
β β .kt β 270 β Purple β Kotlin (JetBrains) β β
β β .swift β 340 β Orange-Red β Swift (bird) β β
β β .c β 200 β Teal β C (classic) β β
β β .cpp β 210 β Blue-Teal β C++ (similar to C) β β
β β .cs β 290 β Violet β C# (Microsoft) β β
β β .html β 20 β Red-Orange β HTML (web) β β
β β .css β 240 β Blue-Violet β CSS (styling) β β
β β .scss β 300 β Magenta β SCSS (Sass) β β
β β .json β 50 β Orange-Yellowβ JSON (data) β β
β β .yaml β 180 β Cyan β YAML (config) β β
β β .md β 100 β Lime β Markdown (text) β β
β β .sh β 140 β Green β Shell (terminal) β β
β ββββββββββββ΄βββββββ΄βββββββββββββββ΄βββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
UI Elements from SEED
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THE ENTIRE EDITOR ADOPTS THE FILE'S COLOR β
β β
β Given SEED = oklch(55% 0.15 230) for .ts file β
β β
β βββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ β
β β Element β Derivation β β
β βββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββ€ β
β β selection β SEED + 85% transparent β β
β β line-number β SEED + 70% gray β β
β β scrollbar β SEED + 90% transparent β β
β β cursor β Brighter, more saturated β β
β β matching-bracket β SEED + 30% white β β
β β indent-guide β SEED + 95% transparent β β
β βββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββ β
β β
β These elements "belong" to the file's color world β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β .ts file: EVERYTHING has a blue tint β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β | 1 | const x = "hello"; | βββ <- scrollbar β β
β β | 2 | function foo() { | βββ β β
β β | 3 | return x; | βββ β β
β β | 4 | } | βββ β β
β β ^^^^^ β β
β β line numbers (gray-blue) β β
β β β β
β β .py file: EVERYTHING has a green tint β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β | 1 | x = "hello" | βββ <- scrollbar β β
β β | 2 | def foo(): | βββ β β
β β | 3 | return x | βββ β β
β β | 4 | | βββ β β
β β ^^^^^ β β
β β line numbers (gray-green) β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Traditional vs Spectrum
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β COMPARISON β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β TRADITIONAL (Fixed Colors) β β
β β β β
β β Token Type Color Used In β β
β β ββββββββββ βββββ βββββββ β β
β β keyword Blue .ts, .py, .rs, .go... β β
β β string Green all files β β
β β function Yellow all files β β
β β number Orange all files β β
β β comment Gray-Green all files β β
β β β β
β β Pros: Consistent, easy to learn β β
β β Cons: All files look the same β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β SYNTAX SPECTRUM (Derived Colors) β β
β β β β
β β .ts file (SEED 230): .py file (SEED 130): β β
β β keyword 180 deg (cyan) keyword 80 deg β β
β β string 207.5 deg string 107.5 deg β β
β β function 235 deg function 135 deg β β
β β comment gray-blue comment gray-green β β
β β β β
β β Pros: Each file type has unique identity β β
β β "Blue world" for TS, "Green world" for Python β β
β β Easier to identify file type at a glance β β
β β β β
β β Cons: More variation to learn β β
β β "keyword" looks different in different files β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Takeaways
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SUMMARY β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β 1. Each file extension has a unique SEED hue β β
β β (.ts = 230, .py = 130, .rs = 35, etc.) β β
β β β β
β β 2. Token colors rotate by 27.5 degrees from SEED β β
β β Creates related but distinguishable colors β β
β β β β
β β 3. Comments blend SEED with gray (60%) β β
β β Subtle hint of file's color identity β β
β β β β
β β 4. UI elements also derive from SEED β β
β β Selection, line numbers, scrollbar, cursor β β
β β Entire editor adopts the file's world β β
β β β β
β β 5. Golden angle (27.5) ensures token distinction β β
β β Close enough to feel related β β
β β Far enough to be distinguishable β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β When you open a TypeScript file, you enter a blue world. β
β When you switch to Python, you enter a green world. β
β Language identity becomes visible through color. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ