vscode-bauhaus-theme 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Extension Development Host",
6
+ "type": "extensionHost",
7
+ "request": "launch",
8
+ "args": ["--extensionDevelopmentPath=${workspaceFolder}", "${workspaceFolder}/samples"]
9
+ }
10
+ ]
11
+ }
package/.vscodeignore ADDED
@@ -0,0 +1,11 @@
1
+ .vscode
2
+ reference
3
+ samples
4
+ scripts
5
+ src
6
+ colors.json
7
+ palettes.json
8
+ .editorconfig
9
+ .npmignore
10
+ icon.svg
11
+ screenshot.*
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
+
5
+ ## [1.0.1](https://github.com/dmnsgn/vscode-bauhaus-theme/compare/v1.0.0...v1.0.1) (2026-09-25)
6
+
7
+ # 1.0.0 (2026-09-25)
package/LICENSE.md ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2026 Damien Seguin
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,239 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/dmnsgn/vscode-bauhaus-theme/main/icon.png" width="128" alt="">
3
+ </p>
4
+
5
+ <h1 align="center">Bauhaus Theme</h1>
6
+
7
+ <p align="center">Primary colors on warm black and paper, for VS Code. Dark and light themes where every syntax color passes WCAG AA.</p>
8
+
9
+ ![Bauhaus Dark and Bauhaus Light on TypeScript, Python, CSS and Markdown](https://raw.githubusercontent.com/dmnsgn/vscode-bauhaus-theme/main/screenshot.gif)
10
+
11
+ [![paypal](https://img.shields.io/badge/donate-paypal-informational?logo=paypal)](https://paypal.me/dmnsgn)
12
+ [![coinbase](https://img.shields.io/badge/donate-coinbase-informational?logo=coinbase)](https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3)
13
+ [![twitter](https://img.shields.io/twitter/follow/dmnsgn?style=social)](https://twitter.com/dmnsgn)
14
+ [![bluesky](https://img.shields.io/badge/-blue?logo=bluesky&label=Follow%20%40dmnsgn.me&style=social)](https://bsky.app/profile/dmnsgn.me)
15
+
16
+ ## Features
17
+
18
+ - **Bauhaus palette**: red, blue and yellow primaries on warm black or paper.
19
+ - **Readable by design**: every syntax color is tuned in OKLCH to reach 4.5:1 against the editor (WCAG AA).
20
+ - **Dark and Light**: same hues, same roles.
21
+ - **Color blocks**: flat primary fills for the status bar, active items and badges, with three accent styles to dial them up or down.
22
+
23
+ ## Install
24
+
25
+ Install from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=dmnsgn.vscode-bauhaus-theme), or run in Quick Open (<kbd>Cmd</kbd>/<kbd>Ctrl</kbd>+<kbd>P</kbd>):
26
+
27
+ ```
28
+ ext install dmnsgn.vscode-bauhaus-theme
29
+ ```
30
+
31
+ Then pick **Bauhaus Dark** or **Bauhaus Light** with `Preferences: Color Theme`.
32
+
33
+ ## Accent styles
34
+
35
+ - **Tricolor** (default): red focus, badges and buttons, blue status bar and panel tab, yellow activity bar item, red when debugging.
36
+ - **Blocks**: red status bar and active items, yellow when debugging, blue when no folder is open.
37
+ - **Restrained**: neutral status bar, red active items, red when debugging.
38
+
39
+ To switch, add the matching snippet to your `settings.json`.
40
+
41
+ <details>
42
+ <summary>Blocks and Restrained settings</summary>
43
+
44
+ <!-- accents:start -->
45
+
46
+ ### Blocks
47
+
48
+ ```json
49
+ {
50
+ "workbench.colorCustomizations": {
51
+ "[Bauhaus Dark]": {
52
+ "modernActivityBarItem.activeBackground": "#95171d",
53
+ "modernActivityBarItem.activeForeground": "#f2f2f2",
54
+ "modernTab.activeBackground": "#95171d",
55
+ "activityBar.activeBorder": "#95171d",
56
+ "activityBarTop.activeBorder": "#95171d",
57
+ "panelTitle.activeBorder": "#95171d",
58
+ "statusBar.background": "#95171d",
59
+ "statusBar.border": "#95171d",
60
+ "statusBar.debuggingBackground": "#cb9820",
61
+ "statusBar.debuggingForeground": "#2b2119",
62
+ "statusBar.debuggingBorder": "#cb9820",
63
+ "statusBar.noFolderBackground": "#30436a",
64
+ "statusBarItem.remoteBackground": "#30436a",
65
+ "statusBarItem.remoteForeground": "#f2f2f2",
66
+ "statusBarItem.remoteHoverBackground": "#45567a",
67
+ "terminal.tab.activeBorder": "#95171d"
68
+ },
69
+ "[Bauhaus Light]": {
70
+ "modernActivityBarItem.activeBackground": "#95171d",
71
+ "modernActivityBarItem.activeForeground": "#f2f2f2",
72
+ "modernTab.activeBackground": "#95171d",
73
+ "activityBar.activeBorder": "#95171d",
74
+ "activityBarTop.activeBorder": "#95171d",
75
+ "panelTitle.activeBorder": "#95171d",
76
+ "statusBar.background": "#95171d",
77
+ "statusBar.border": "#95171d",
78
+ "statusBar.debuggingBackground": "#cb9820",
79
+ "statusBar.debuggingForeground": "#2b2119",
80
+ "statusBar.debuggingBorder": "#cb9820",
81
+ "statusBar.noFolderBackground": "#30436a",
82
+ "statusBarItem.remoteBackground": "#30436a",
83
+ "statusBarItem.remoteForeground": "#f2f2f2",
84
+ "statusBarItem.remoteHoverBackground": "#303f60",
85
+ "terminal.tab.activeBorder": "#95171d"
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### Restrained
92
+
93
+ ```json
94
+ {
95
+ "workbench.colorCustomizations": {
96
+ "[Bauhaus Dark]": {
97
+ "modernActivityBarItem.activeBackground": "#95171d",
98
+ "modernActivityBarItem.activeForeground": "#f2f2f2",
99
+ "modernTab.activeBackground": "#95171d",
100
+ "activityBar.activeBorder": "#95171d",
101
+ "activityBarTop.activeBorder": "#95171d",
102
+ "panelTitle.activeBorder": "#95171d",
103
+ "statusBar.background": "#2b2119",
104
+ "statusBar.foreground": "#9a9a9a",
105
+ "statusBar.border": "#574d43",
106
+ "statusBar.noFolderBackground": "#2b2119",
107
+ "statusBar.noFolderForeground": "#9a9a9a",
108
+ "statusBarItem.remoteBackground": "#95171d",
109
+ "statusBarItem.remoteForeground": "#f2f2f2",
110
+ "statusBarItem.remoteHoverBackground": "#a33936",
111
+ "statusBarItem.hoverBackground": "#9a9a9a1f",
112
+ "statusBarItem.activeBackground": "#9a9a9a33",
113
+ "statusBarItem.prominentBackground": "#9a9a9a26",
114
+ "terminal.tab.activeBorder": "#95171d"
115
+ },
116
+ "[Bauhaus Light]": {
117
+ "modernActivityBarItem.activeBackground": "#95171d",
118
+ "modernActivityBarItem.activeForeground": "#f2f2f2",
119
+ "modernTab.activeBackground": "#95171d",
120
+ "activityBar.activeBorder": "#95171d",
121
+ "activityBarTop.activeBorder": "#95171d",
122
+ "panelTitle.activeBorder": "#95171d",
123
+ "statusBar.background": "#e5dbd3",
124
+ "statusBar.foreground": "#616161",
125
+ "statusBar.border": "#c9bfb8",
126
+ "statusBar.noFolderBackground": "#e5dbd3",
127
+ "statusBar.noFolderForeground": "#616161",
128
+ "statusBarItem.remoteBackground": "#95171d",
129
+ "statusBarItem.remoteForeground": "#f2f2f2",
130
+ "statusBarItem.remoteHoverBackground": "#881c1d",
131
+ "statusBarItem.hoverBackground": "#6161611f",
132
+ "statusBarItem.activeBackground": "#61616133",
133
+ "statusBarItem.prominentBackground": "#61616126",
134
+ "terminal.tab.activeBorder": "#95171d"
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ <!-- accents:end -->
141
+
142
+ </details>
143
+
144
+ ## Palettes
145
+
146
+ Contrast is WCAG 2.0 against the editor background.
147
+
148
+ <details>
149
+ <summary>Colors and contrast ratios</summary>
150
+
151
+ <!-- palettes:start -->
152
+
153
+ ### Dark
154
+
155
+ | Surface | Color |
156
+ | ---------- | --------- |
157
+ | editor | `#3b3128` |
158
+ | chrome | `#2b2119` |
159
+ | line | `#574d43` |
160
+ | fg.default | `#f2f2f2` |
161
+ | fg.muted | `#9a9a9a` |
162
+
163
+ | Hue | Ink | Bright (terminal) |
164
+ | ------ | --------- | ----------------- |
165
+ | red | `#ff6963` | `#ffaba3` |
166
+ | orange | `#ef7a04` | `#feaf7b` |
167
+ | yellow | `#c59208` | `#f6b606` |
168
+ | green | `#8aa441` | `#afcc69` |
169
+ | cyan | `#15acaa` | `#52d3d1` |
170
+ | blue | `#769ae2` | `#a2c1fe` |
171
+ | violet | `#d873e1` | `#f8a2ff` |
172
+
173
+ | Syntax role | Color | Contrast on editor | WCAG 2.0 |
174
+ | ----------- | --------- | ------------------ | -------- |
175
+ | text | `#f2f2f2` | 11.33:1 | AAA |
176
+ | comment | `#9a9a9a` | 4.51:1 | AA |
177
+ | keyword | `#ff6963` | 4.5:1 | AA |
178
+ | operator | `#15acaa` | 4.54:1 | AA |
179
+ | function | `#769ae2` | 4.52:1 | AA |
180
+ | type | `#c59208` | 4.52:1 | AA |
181
+ | string | `#8aa441` | 4.51:1 | AA |
182
+ | constant | `#ef7a04` | 4.5:1 | AA |
183
+ | variable | `#d873e1` | 4.5:1 | AA |
184
+ | invalid | `#ff6963` | 4.5:1 | AA |
185
+
186
+ | Fill | Text | Contrast | WCAG 2.0 |
187
+ | ---------------- | --------- | -------- | -------- |
188
+ | red `#95171d` | `#f2f2f2` | 7.76:1 | AAA |
189
+ | blue `#30436a` | `#f2f2f2` | 8.78:1 | AAA |
190
+ | green `#495821` | `#f2f2f2` | 6.94:1 | AA |
191
+ | yellow `#cb9820` | `#2b2119` | 6.03:1 | AA |
192
+
193
+ ### Light
194
+
195
+ | Surface | Color |
196
+ | ---------- | --------- |
197
+ | editor | `#f5ebe3` |
198
+ | chrome | `#e5dbd3` |
199
+ | line | `#c9bfb8` |
200
+ | fg.default | `#2b2119` |
201
+ | fg.muted | `#616161` |
202
+
203
+ | Hue | Ink | Bright (terminal) |
204
+ | ------ | --------- | ----------------- |
205
+ | red | `#c5031e` | `#8f0113` |
206
+ | orange | `#9a4c00` | `#703500` |
207
+ | yellow | `#7e5c05` | `#5a4100` |
208
+ | green | `#546903` | `#3b4b01` |
209
+ | cyan | `#036d6c` | `#034d4c` |
210
+ | blue | `#4060a3` | `#254283` |
211
+ | violet | `#9935a3` | `#790d83` |
212
+
213
+ | Syntax role | Color | Contrast on editor | WCAG 2.0 |
214
+ | ----------- | --------- | ------------------ | -------- |
215
+ | text | `#2b2119` | 13.4:1 | AAA |
216
+ | comment | `#616161` | 5.27:1 | AA |
217
+ | keyword | `#c5031e` | 5.25:1 | AA |
218
+ | operator | `#036d6c` | 5.25:1 | AA |
219
+ | function | `#4060a3` | 5.23:1 | AA |
220
+ | type | `#7e5c05` | 5.23:1 | AA |
221
+ | string | `#546903` | 5.26:1 | AA |
222
+ | constant | `#9a4c00` | 5.25:1 | AA |
223
+ | variable | `#9935a3` | 5.27:1 | AA |
224
+ | invalid | `#c5031e` | 5.25:1 | AA |
225
+
226
+ | Fill | Text | Contrast | WCAG 2.0 |
227
+ | ---------------- | --------- | -------- | -------- |
228
+ | red `#95171d` | `#f2f2f2` | 7.76:1 | AAA |
229
+ | blue `#30436a` | `#f2f2f2` | 8.78:1 | AAA |
230
+ | green `#495821` | `#f2f2f2` | 6.94:1 | AA |
231
+ | yellow `#cb9820` | `#2b2119` | 6.03:1 | AA |
232
+
233
+ <!-- palettes:end -->
234
+
235
+ </details>
236
+
237
+ ## License
238
+
239
+ MIT. See [license file](https://github.com/dmnsgn/vscode-bauhaus-theme/blob/main/LICENSE.md).
package/colors.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "white": "#f2f2f2",
3
+ "blue": "#30436a",
4
+ "red": "#95171d",
5
+ "green": "#495821",
6
+ "yellow": "#cb9820",
7
+ "black": "#2b2119",
8
+ "grey-22": "#222222",
9
+ "grey-40": "#404040",
10
+ "grey-6d": "#6d6d6d"
11
+ }
package/icon.png ADDED
Binary file
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "vscode-bauhaus-theme",
3
+ "displayName": "Bauhaus Theme",
4
+ "version": "1.0.1",
5
+ "description": "Bauhaus primary colors on warm black and paper. Dark and light themes, every syntax color WCAG AA.",
6
+ "categories": [
7
+ "Themes"
8
+ ],
9
+ "keywords": [
10
+ "theme",
11
+ "color-theme",
12
+ "bauhaus",
13
+ "dark",
14
+ "light",
15
+ "warm",
16
+ "minimal",
17
+ "accessibility",
18
+ "contrast",
19
+ "wcag"
20
+ ],
21
+ "homepage": "https://github.com/dmnsgn/vscode-bauhaus-theme",
22
+ "bugs": "https://github.com/dmnsgn/vscode-bauhaus-theme/issues",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/dmnsgn/vscode-bauhaus-theme.git"
26
+ },
27
+ "funding": [
28
+ {
29
+ "type": "individual",
30
+ "url": "https://paypal.me/dmnsgn"
31
+ },
32
+ {
33
+ "type": "individual",
34
+ "url": "https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3"
35
+ }
36
+ ],
37
+ "license": "MIT",
38
+ "author": "Damien Seguin (https://github.com/dmnsgn)",
39
+ "publisher": "dmnsgn",
40
+ "type": "module",
41
+ "scripts": {
42
+ "build": "node scripts/build.js",
43
+ "icon": "node scripts/icon.js",
44
+ "reference": "node scripts/reference.js",
45
+ "screenshot": "node scripts/screenshot.js"
46
+ },
47
+ "contributes": {
48
+ "themes": [
49
+ {
50
+ "label": "Bauhaus Dark",
51
+ "uiTheme": "vs-dark",
52
+ "path": "./themes/bauhaus-dark.json"
53
+ },
54
+ {
55
+ "label": "Bauhaus Light",
56
+ "uiTheme": "vs",
57
+ "path": "./themes/bauhaus-light.json"
58
+ }
59
+ ]
60
+ },
61
+ "devDependencies": {
62
+ "@resvg/resvg-js": "^2.6.2",
63
+ "pex-color": "^2.3.0"
64
+ },
65
+ "engines": {
66
+ "node": ">=22.0.0",
67
+ "npm": ">=10.5.1",
68
+ "snowdev": ">=3.0.0-alpha.3",
69
+ "vscode": "^1.90.0"
70
+ },
71
+ "icon": "icon.png",
72
+ "galleryBanner": {
73
+ "color": "#2b2119",
74
+ "theme": "dark"
75
+ },
76
+ "snowdev": {
77
+ "serve": false
78
+ }
79
+ }
package/palettes.json ADDED
@@ -0,0 +1,272 @@
1
+ [
2
+ {
3
+ "id": "dark",
4
+ "type": "dark",
5
+ "bg": {
6
+ "editor": "#3b3128",
7
+ "chrome": "#2b2119",
8
+ "line": "#574d43"
9
+ },
10
+ "fg": {
11
+ "default": "#f2f2f2",
12
+ "muted": "#9a9a9a"
13
+ },
14
+ "ink": {
15
+ "red": "#ff6963",
16
+ "orange": "#ef7a04",
17
+ "yellow": "#c59208",
18
+ "green": "#8aa441",
19
+ "cyan": "#15acaa",
20
+ "blue": "#769ae2",
21
+ "violet": "#d873e1"
22
+ },
23
+ "bright": {
24
+ "red": "#ffaba3",
25
+ "orange": "#feaf7b",
26
+ "yellow": "#f6b606",
27
+ "green": "#afcc69",
28
+ "cyan": "#52d3d1",
29
+ "blue": "#a2c1fe",
30
+ "violet": "#f8a2ff"
31
+ },
32
+ "fill": {
33
+ "red": "#95171d",
34
+ "blue": "#30436a",
35
+ "green": "#495821",
36
+ "yellow": "#cb9820"
37
+ },
38
+ "onFill": {
39
+ "red": "#f2f2f2",
40
+ "blue": "#f2f2f2",
41
+ "green": "#f2f2f2",
42
+ "yellow": "#2b2119"
43
+ },
44
+ "syntax": [
45
+ {
46
+ "role": "text",
47
+ "color": "#f2f2f2",
48
+ "ratio": 11.33,
49
+ "grade": "AAA"
50
+ },
51
+ {
52
+ "role": "comment",
53
+ "color": "#9a9a9a",
54
+ "ratio": 4.51,
55
+ "grade": "AA"
56
+ },
57
+ {
58
+ "role": "keyword",
59
+ "color": "#ff6963",
60
+ "ratio": 4.5,
61
+ "grade": "AA"
62
+ },
63
+ {
64
+ "role": "operator",
65
+ "color": "#15acaa",
66
+ "ratio": 4.54,
67
+ "grade": "AA"
68
+ },
69
+ {
70
+ "role": "function",
71
+ "color": "#769ae2",
72
+ "ratio": 4.52,
73
+ "grade": "AA"
74
+ },
75
+ {
76
+ "role": "type",
77
+ "color": "#c59208",
78
+ "ratio": 4.52,
79
+ "grade": "AA"
80
+ },
81
+ {
82
+ "role": "string",
83
+ "color": "#8aa441",
84
+ "ratio": 4.51,
85
+ "grade": "AA"
86
+ },
87
+ {
88
+ "role": "constant",
89
+ "color": "#ef7a04",
90
+ "ratio": 4.5,
91
+ "grade": "AA"
92
+ },
93
+ {
94
+ "role": "variable",
95
+ "color": "#d873e1",
96
+ "ratio": 4.5,
97
+ "grade": "AA"
98
+ },
99
+ {
100
+ "role": "invalid",
101
+ "color": "#ff6963",
102
+ "ratio": 4.5,
103
+ "grade": "AA"
104
+ }
105
+ ],
106
+ "fills": [
107
+ {
108
+ "hue": "red",
109
+ "color": "#95171d",
110
+ "text": "#f2f2f2",
111
+ "ratio": 7.76,
112
+ "grade": "AAA"
113
+ },
114
+ {
115
+ "hue": "blue",
116
+ "color": "#30436a",
117
+ "text": "#f2f2f2",
118
+ "ratio": 8.78,
119
+ "grade": "AAA"
120
+ },
121
+ {
122
+ "hue": "green",
123
+ "color": "#495821",
124
+ "text": "#f2f2f2",
125
+ "ratio": 6.94,
126
+ "grade": "AA"
127
+ },
128
+ {
129
+ "hue": "yellow",
130
+ "color": "#cb9820",
131
+ "text": "#2b2119",
132
+ "ratio": 6.03,
133
+ "grade": "AA"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "id": "light",
139
+ "type": "light",
140
+ "bg": {
141
+ "editor": "#f5ebe3",
142
+ "chrome": "#e5dbd3",
143
+ "line": "#c9bfb8"
144
+ },
145
+ "fg": {
146
+ "default": "#2b2119",
147
+ "muted": "#616161"
148
+ },
149
+ "ink": {
150
+ "red": "#c5031e",
151
+ "orange": "#9a4c00",
152
+ "yellow": "#7e5c05",
153
+ "green": "#546903",
154
+ "cyan": "#036d6c",
155
+ "blue": "#4060a3",
156
+ "violet": "#9935a3"
157
+ },
158
+ "bright": {
159
+ "red": "#8f0113",
160
+ "orange": "#703500",
161
+ "yellow": "#5a4100",
162
+ "green": "#3b4b01",
163
+ "cyan": "#034d4c",
164
+ "blue": "#254283",
165
+ "violet": "#790d83"
166
+ },
167
+ "fill": {
168
+ "red": "#95171d",
169
+ "blue": "#30436a",
170
+ "green": "#495821",
171
+ "yellow": "#cb9820"
172
+ },
173
+ "onFill": {
174
+ "red": "#f2f2f2",
175
+ "blue": "#f2f2f2",
176
+ "green": "#f2f2f2",
177
+ "yellow": "#2b2119"
178
+ },
179
+ "syntax": [
180
+ {
181
+ "role": "text",
182
+ "color": "#2b2119",
183
+ "ratio": 13.4,
184
+ "grade": "AAA"
185
+ },
186
+ {
187
+ "role": "comment",
188
+ "color": "#616161",
189
+ "ratio": 5.27,
190
+ "grade": "AA"
191
+ },
192
+ {
193
+ "role": "keyword",
194
+ "color": "#c5031e",
195
+ "ratio": 5.25,
196
+ "grade": "AA"
197
+ },
198
+ {
199
+ "role": "operator",
200
+ "color": "#036d6c",
201
+ "ratio": 5.25,
202
+ "grade": "AA"
203
+ },
204
+ {
205
+ "role": "function",
206
+ "color": "#4060a3",
207
+ "ratio": 5.23,
208
+ "grade": "AA"
209
+ },
210
+ {
211
+ "role": "type",
212
+ "color": "#7e5c05",
213
+ "ratio": 5.23,
214
+ "grade": "AA"
215
+ },
216
+ {
217
+ "role": "string",
218
+ "color": "#546903",
219
+ "ratio": 5.26,
220
+ "grade": "AA"
221
+ },
222
+ {
223
+ "role": "constant",
224
+ "color": "#9a4c00",
225
+ "ratio": 5.25,
226
+ "grade": "AA"
227
+ },
228
+ {
229
+ "role": "variable",
230
+ "color": "#9935a3",
231
+ "ratio": 5.27,
232
+ "grade": "AA"
233
+ },
234
+ {
235
+ "role": "invalid",
236
+ "color": "#c5031e",
237
+ "ratio": 5.25,
238
+ "grade": "AA"
239
+ }
240
+ ],
241
+ "fills": [
242
+ {
243
+ "hue": "red",
244
+ "color": "#95171d",
245
+ "text": "#f2f2f2",
246
+ "ratio": 7.76,
247
+ "grade": "AAA"
248
+ },
249
+ {
250
+ "hue": "blue",
251
+ "color": "#30436a",
252
+ "text": "#f2f2f2",
253
+ "ratio": 8.78,
254
+ "grade": "AAA"
255
+ },
256
+ {
257
+ "hue": "green",
258
+ "color": "#495821",
259
+ "text": "#f2f2f2",
260
+ "ratio": 6.94,
261
+ "grade": "AA"
262
+ },
263
+ {
264
+ "hue": "yellow",
265
+ "color": "#cb9820",
266
+ "text": "#2b2119",
267
+ "ratio": 6.03,
268
+ "grade": "AA"
269
+ }
270
+ ]
271
+ }
272
+ ]