A minimal variant of Night with a single accent. Teal marks keywords, tags and focus; everything else stays on the slate ramp. No warm literals or multicolor diagnostics.
Try the code you write, then switch flavors. The same roles carry through every sample, from syntax to the lines you add and remove.
Previewing Signal. Your language stays selected when you change flavors.
theme.ts
1// A quiet ground. Color with a job.2typeTheme={name:string;contrast:number};34exportfunctionchooseTheme(light:boolean):Theme{5constname=light?"paper":"night";67return{8name,9contrast:4.5,10};11}1213constactive=chooseTheme(false);14console.log(active.name);
theme.py
1# A quiet ground. Color with a job.2fromdataclassesimportdataclass34@dataclass5classTheme:6name:str7contrast:float=4.58910defchoose_theme(light:bool)->Theme:11name="paper"iflightelse"night"12returnTheme(name,contrast=4.5)1314active=choose_theme(False)15print(active.name)
theme.rs
1// A quiet ground. Color with a job.2structTheme{3name:String,4contrast:f64,5}67fnchoose_theme(light:bool)->Theme{8letname=iflight{"paper"}else{"night"};9Theme{name:name.to_string(),contrast:4.5}10}1112fnmain(){13letactive=choose_theme(false);14println!("{}",active.name);15}
theme.html / theme.css
1<mainclass="workspace"data-theme="night">2<h1>Color with a job.</h1>3<p>A quiet ground for your next idea.</p>4<ahref="/ports/">Find your app</a>5</main>67/* The same roles, on the web. */8.workspace{9background:var(--lc-bg);10color:var(--lc-fg);11padding:24px;12}1314.workspacea{color:var(--lc-link);}