char/iocgn-mono
iosevka variant inspired by Simple Köln-Bonn
git clone https://git.t4t.associates/char/iocgn-mono
925b071
main
1<!doctype html > 2< html lang ="en "> 3< meta charset ="utf-8 "> 4< meta name ="viewport "content ="width=device-width, initial-scale=1 "> 5< title > iocgn Mono — continuous weight</ title > 6< style > 7@font-face { 8font-family : iocgn; 9src : url ( "../WOFF2/iocgnMono-Variable.woff2" ) format ( "woff2" ); 10font-weight : 200 800 ; 11} 12@font-face { 13font-family : iocgn; 14src : url ( "../WOFF2/iocgnMono-Variable.woff2" ) format ( "woff2" ); 15font-weight : 200 800 ; 16font-style : italic; 17} 18: root { color-scheme : light dark; --weight : 550 ; } 19body { max-width : 1100 px ; margin : 3 rem auto; padding : 0 2 rem ; font : 16 px system-ui; } 20h1 { font-size : 1.5 rem ; font-weight : 500 ; } 21. controls { display : flex; gap : 1 rem ; align-items : center; flex-wrap : wrap; margin : 2 rem 0 ; } 22input { width : min ( 550 px , 65 vw ); } 23output { min-width : 4 rem ; font-variant-numeric : tabular-nums; } 24pre , . letters { font-family : iocgn, monospace; font-weight : var ( --weight ); font-synthesis : none; } 25. letters { font-size : 48 px ; line-height : 1.5 ; overflow-wrap : anywhere; } 26pre { font-size : 24 px ; line-height : 1.6 ; overflow-x : auto; } 27. small { font-size : 18 px ; } 28. terminal { font-size : 18 px ; line-height : 1.25 ; letter-spacing : 0 ; } 29</ style > 30< h1 > iocgn Mono / continuous weight 200–800</ h1 > 31< p > ASCII design proof. Fixed 500-unit cells; no kerning or ligatures.</ p > 32< div class ="controls "> 33< label for ="weight "> Weight</ label > 34< input id ="weight "type ="range "min ="200 "max ="800 "step ="0.25 "value ="550 "> 35< output for ="weight "id ="value "> 550</ output > 36< label >< input id ="oblique "type ="checkbox "style ="width: auto "> 10° Oblique</ label > 37</ div > 38< div class ="letters "contenteditable ="true "spellcheck ="false "> Hno mWw r g 0O1Il| '"`< br > comment format com rma minimum</ div > 39< pre contenteditable ="true "spellcheck ="false "> fn format_rows(items: &[(&str, u32)]) -> Vec<String> { 40 items.iter().enumerate().map(|(i, (name, count))| { 41 let label = format!("{i:02}: {name}"); 42 if *count > 0 && !name.is_empty() { 43 format!("{label:<16} = {count:>4}") 44 } else { 45 String::from("... waiting ...") 46 } 47 }).collect() 48} 49 50const row = `${name}: ${count}`; // + - = * < > ()[]{} 51let text = "0O1Il| 8B6G9g aopqnr mWw []{}() => != &&";</ pre > 52< pre class ="small "contenteditable ="true "spellcheck ="false "> com rma comment format minimum mmmm WWWW wwww 53'quoted' "double" `grave` @#%& ()[]{}| + - = * < ></ pre > 54< h2 > Terminal symbols</ h2 > 55< pre class ="terminal "contenteditable ="true "spellcheck ="false "> ┌──────────────────────────┐ 56│ ✓ complete ✗ failed │ 57│ ← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ │ 58├──────────────────────────┤ 59│ ░▒▓█ ▏▎▍▌▋▊▉ │ 60│ ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ │ 61└──────────────────────────┘ 62╭──────────────────────────╮ 63│ ‐ ‒ – — ― − … ‘ ’ “ ” │ 64│ ✓ ✔ ✕ ✖ ✗ ✘ ☐ ☑ ☒ ★ ☆ │ 65│ ■ □ ▪ ▫ ▲ △ ▶ ▷ ▼ ▽ │ 66│ ◀ ◁ ◆ ◇ ○ ◉ ◎ ● ◐ ◑ │ 67│ ↩ ↪ ↰ ↱ ↲ ↳ ↴ ↵ ↺ ↻ │ 68│ ⇐ ⇑ ⇒ ⇓ ⇔ ⇤ ⇥ ➜ ❮ ❯ � │ 69╰──────────────────────────╯</ pre > 70< script > 71const slider = document . querySelector ( '#weight' ); 72document . querySelector ( '#oblique' ). addEventListener ( 'change' , event => { 73for ( const sample of document . querySelectorAll ( 'pre, .letters' )) { 74sample . style . fontStyle = event . target . checked ?'italic' :'normal' ; 75} 76}); 77const value = document . querySelector ( '#value' ); 78slider . addEventListener ( 'input' , () => { 79value . value = slider . value ; 80document . documentElement . style . setProperty ( '--weight' , slider . value ); 81}); 82</ script > 83</ html >