golf-mcp 0.1.19__py3-none-any.whl → 0.2.0__py3-none-any.whl

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.

Potentially problematic release.


This version of golf-mcp might be problematic. Click here for more details.

Files changed (123) hide show
  1. golf/__init__.py +9 -1
  2. golf/_endpoints.py +6 -0
  3. golf/_endpoints_fallback.py +10 -0
  4. golf/auth/__init__.py +188 -84
  5. golf/auth/api_key.py +6 -14
  6. golf/auth/factory.py +333 -0
  7. golf/auth/helpers.py +12 -42
  8. golf/auth/providers.py +396 -0
  9. golf/auth/registry.py +256 -0
  10. golf/cli/branding.py +192 -0
  11. golf/cli/main.py +28 -69
  12. golf/commands/__init__.py +2 -0
  13. golf/commands/build.py +4 -7
  14. golf/commands/init.py +30 -53
  15. golf/commands/run.py +50 -20
  16. golf/core/builder.py +356 -412
  17. golf/core/builder_auth.py +63 -144
  18. golf/core/builder_telemetry.py +26 -3
  19. golf/core/config.py +38 -59
  20. golf/core/parser.py +132 -139
  21. golf/core/platform.py +12 -10
  22. golf/core/telemetry.py +11 -19
  23. golf/core/transformer.py +38 -15
  24. golf/examples/__pycache__/__init__.cpython-311.pyc +0 -0
  25. golf/examples/basic/.coverage +0 -0
  26. golf/examples/basic/.env.example +8 -4
  27. golf/examples/basic/README.md +117 -45
  28. golf/examples/basic/__pycache__/auth.cpython-311.pyc +0 -0
  29. golf/examples/basic/auth.py +76 -0
  30. golf/examples/basic/golf.json +2 -5
  31. golf/examples/basic/htmlcov/.gitignore +2 -0
  32. golf/examples/basic/htmlcov/class_index.html +547 -0
  33. golf/examples/basic/htmlcov/coverage_html_cb_6fb7b396.js +733 -0
  34. golf/examples/basic/htmlcov/favicon_32_cb_58284776.png +0 -0
  35. golf/examples/basic/htmlcov/function_index.html +2091 -0
  36. golf/examples/basic/htmlcov/index.html +349 -0
  37. golf/examples/basic/htmlcov/keybd_closed_cb_ce680311.png +0 -0
  38. golf/examples/basic/htmlcov/status.json +1 -0
  39. golf/examples/basic/htmlcov/style_cb_8e611ae1.css +337 -0
  40. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496___init___py.html +323 -0
  41. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_api_key_py.html +170 -0
  42. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_factory_py.html +430 -0
  43. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_helpers_py.html +288 -0
  44. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_providers_py.html +493 -0
  45. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_registry_py.html +353 -0
  46. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950___init___py.html +120 -0
  47. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950_instrumentation_py.html +1535 -0
  48. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db___init___py.html +98 -0
  49. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_branding_py.html +289 -0
  50. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_main_py.html +476 -0
  51. golf/examples/basic/htmlcov/z_5a6c4e6bcc86fb2f___init___py.html +97 -0
  52. golf/examples/basic/htmlcov/z_6cadab9ec0df475d___init___py.html +102 -0
  53. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_build_py.html +178 -0
  54. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_init_py.html +387 -0
  55. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_run_py.html +222 -0
  56. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4___init___py.html +106 -0
  57. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4__endpoints_fallback_py.html +107 -0
  58. golf/examples/basic/htmlcov/z_7ba499ed22986217___init___py.html +98 -0
  59. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_auth_py.html +306 -0
  60. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_metrics_py.html +329 -0
  61. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_py.html +1471 -0
  62. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_telemetry_py.html +186 -0
  63. golf/examples/basic/htmlcov/z_7ba499ed22986217_config_py.html +315 -0
  64. golf/examples/basic/htmlcov/z_7ba499ed22986217_parser_py.html +1149 -0
  65. golf/examples/basic/htmlcov/z_7ba499ed22986217_platform_py.html +279 -0
  66. golf/examples/basic/htmlcov/z_7ba499ed22986217_telemetry_py.html +589 -0
  67. golf/examples/basic/htmlcov/z_7ba499ed22986217_transformer_py.html +286 -0
  68. golf/examples/basic/htmlcov/z_7d7da37693a43688___init___py.html +107 -0
  69. golf/examples/basic/htmlcov/z_7d7da37693a43688_collector_py.html +417 -0
  70. golf/examples/basic/htmlcov/z_7d7da37693a43688_registry_py.html +109 -0
  71. golf/examples/basic/htmlcov/z_abe733142b40ad4e___init___py.html +109 -0
  72. golf/examples/basic/htmlcov/z_abe733142b40ad4e_context_py.html +150 -0
  73. golf/examples/basic/htmlcov/z_abe733142b40ad4e_elicitation_py.html +267 -0
  74. golf/examples/basic/htmlcov/z_abe733142b40ad4e_sampling_py.html +318 -0
  75. golf/examples/basic/prompts/__pycache__/welcome.cpython-311.pyc +0 -0
  76. golf/examples/basic/prompts/welcome.py +3 -5
  77. golf/examples/basic/resources/__pycache__/current_time.cpython-311.pyc +0 -0
  78. golf/examples/basic/resources/__pycache__/info.cpython-311.pyc +0 -0
  79. golf/examples/basic/resources/current_time.py +5 -13
  80. golf/examples/basic/resources/weather/__pycache__/common.cpython-311.pyc +0 -0
  81. golf/examples/basic/resources/weather/__pycache__/current.cpython-311.pyc +0 -0
  82. golf/examples/basic/resources/weather/__pycache__/forecast.cpython-311.pyc +0 -0
  83. golf/examples/basic/resources/weather/city.py +46 -0
  84. golf/examples/basic/resources/weather/common.py +4 -11
  85. golf/examples/basic/resources/weather/current.py +5 -5
  86. golf/examples/basic/resources/weather/forecast.py +5 -5
  87. golf/examples/basic/tools/__pycache__/calculator.cpython-311.pyc +0 -0
  88. golf/examples/basic/tools/calculator.py +94 -0
  89. golf/examples/basic/tools/say/__pycache__/hello.cpython-311.pyc +0 -0
  90. golf/examples/basic/tools/say/hello.py +65 -0
  91. golf/metrics/collector.py +100 -19
  92. golf/telemetry/__init__.py +4 -0
  93. golf/telemetry/instrumentation.py +496 -174
  94. golf/utilities/__init__.py +12 -0
  95. golf/utilities/context.py +53 -0
  96. golf/utilities/elicitation.py +170 -0
  97. golf/utilities/sampling.py +221 -0
  98. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/METADATA +56 -110
  99. golf_mcp-0.2.0.dist-info/RECORD +110 -0
  100. golf/auth/oauth.py +0 -861
  101. golf/auth/provider.py +0 -115
  102. golf/examples/api_key/.env +0 -2
  103. golf/examples/api_key/.env.example +0 -1
  104. golf/examples/api_key/README.md +0 -84
  105. golf/examples/api_key/golf.json +0 -8
  106. golf/examples/api_key/pre_build.py +0 -11
  107. golf/examples/api_key/tools/issues/create.py +0 -93
  108. golf/examples/api_key/tools/issues/list.py +0 -92
  109. golf/examples/api_key/tools/repos/list.py +0 -111
  110. golf/examples/api_key/tools/search/code.py +0 -106
  111. golf/examples/api_key/tools/users/get.py +0 -82
  112. golf/examples/basic/.env +0 -5
  113. golf/examples/basic/pre_build.py +0 -28
  114. golf/examples/basic/tools/github_user.py +0 -65
  115. golf/examples/basic/tools/hello.py +0 -34
  116. golf/examples/basic/tools/payments/charge.py +0 -70
  117. golf/examples/basic/tools/payments/common.py +0 -36
  118. golf/examples/basic/tools/payments/refund.py +0 -61
  119. golf_mcp-0.1.19.dist-info/RECORD +0 -60
  120. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/WHEEL +0 -0
  121. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/entry_points.txt +0 -0
  122. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/licenses/LICENSE +0 -0
  123. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,337 @@
1
+ @charset "UTF-8";
2
+ /* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
3
+ /* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
4
+ /* Don't edit this .css file. Edit the .scss file instead! */
5
+ html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; }
6
+
7
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 1em; background: #fff; color: #000; }
8
+
9
+ @media (prefers-color-scheme: dark) { body { background: #1e1e1e; } }
10
+
11
+ @media (prefers-color-scheme: dark) { body { color: #eee; } }
12
+
13
+ html > body { font-size: 16px; }
14
+
15
+ a:active, a:focus { outline: 2px dashed #007acc; }
16
+
17
+ p { font-size: .875em; line-height: 1.4em; }
18
+
19
+ table { border-collapse: collapse; }
20
+
21
+ td { vertical-align: top; }
22
+
23
+ table tr.hidden { display: none !important; }
24
+
25
+ p#no_rows { display: none; font-size: 1.15em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; }
26
+
27
+ a.nav { text-decoration: none; color: inherit; }
28
+
29
+ a.nav:hover { text-decoration: underline; color: inherit; }
30
+
31
+ .hidden { display: none; }
32
+
33
+ header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; }
34
+
35
+ @media (prefers-color-scheme: dark) { header { background: black; } }
36
+
37
+ @media (prefers-color-scheme: dark) { header { border-color: #333; } }
38
+
39
+ header .content { padding: 1rem 3.5rem; }
40
+
41
+ header h2 { margin-top: .5em; font-size: 1em; }
42
+
43
+ header h2 a.button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; }
44
+
45
+ @media (prefers-color-scheme: dark) { header h2 a.button { background: #333; } }
46
+
47
+ @media (prefers-color-scheme: dark) { header h2 a.button { border-color: #444; } }
48
+
49
+ header h2 a.button.current { border: 2px solid; background: #fff; border-color: #999; cursor: default; }
50
+
51
+ @media (prefers-color-scheme: dark) { header h2 a.button.current { background: #1e1e1e; } }
52
+
53
+ @media (prefers-color-scheme: dark) { header h2 a.button.current { border-color: #777; } }
54
+
55
+ header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; }
56
+
57
+ @media (prefers-color-scheme: dark) { header p.text { color: #aaa; } }
58
+
59
+ header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; }
60
+
61
+ header.sticky .text { display: none; }
62
+
63
+ header.sticky h1, header.sticky h2 { font-size: 1em; margin-top: 0; display: inline-block; }
64
+
65
+ header.sticky .content { padding: 0.5rem 3.5rem; }
66
+
67
+ header.sticky .content p { font-size: 1em; }
68
+
69
+ header.sticky ~ #source { padding-top: 6.5em; }
70
+
71
+ main { position: relative; z-index: 1; }
72
+
73
+ footer { margin: 1rem 3.5rem; }
74
+
75
+ footer .content { padding: 0; color: #666; font-style: italic; }
76
+
77
+ @media (prefers-color-scheme: dark) { footer .content { color: #aaa; } }
78
+
79
+ #index { margin: 1rem 0 0 3.5rem; }
80
+
81
+ h1 { font-size: 1.25em; display: inline-block; }
82
+
83
+ #filter_container { float: right; margin: 0 2em 0 0; line-height: 1.66em; }
84
+
85
+ #filter_container #filter { width: 10em; padding: 0.2em 0.5em; border: 2px solid #ccc; background: #fff; color: #000; }
86
+
87
+ @media (prefers-color-scheme: dark) { #filter_container #filter { border-color: #444; } }
88
+
89
+ @media (prefers-color-scheme: dark) { #filter_container #filter { background: #1e1e1e; } }
90
+
91
+ @media (prefers-color-scheme: dark) { #filter_container #filter { color: #eee; } }
92
+
93
+ #filter_container #filter:focus { border-color: #007acc; }
94
+
95
+ #filter_container :disabled ~ label { color: #ccc; }
96
+
97
+ @media (prefers-color-scheme: dark) { #filter_container :disabled ~ label { color: #444; } }
98
+
99
+ #filter_container label { font-size: .875em; color: #666; }
100
+
101
+ @media (prefers-color-scheme: dark) { #filter_container label { color: #aaa; } }
102
+
103
+ header button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; background: #eee; color: inherit; text-decoration: none; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; }
104
+
105
+ @media (prefers-color-scheme: dark) { header button { background: #333; } }
106
+
107
+ @media (prefers-color-scheme: dark) { header button { border-color: #444; } }
108
+
109
+ header button:active, header button:focus { outline: 2px dashed #007acc; }
110
+
111
+ header button.run { background: #eeffee; }
112
+
113
+ @media (prefers-color-scheme: dark) { header button.run { background: #373d29; } }
114
+
115
+ header button.run.show_run { background: #dfd; border: 2px solid #00dd00; margin: 0 .1em; }
116
+
117
+ @media (prefers-color-scheme: dark) { header button.run.show_run { background: #373d29; } }
118
+
119
+ header button.mis { background: #ffeeee; }
120
+
121
+ @media (prefers-color-scheme: dark) { header button.mis { background: #4b1818; } }
122
+
123
+ header button.mis.show_mis { background: #fdd; border: 2px solid #ff0000; margin: 0 .1em; }
124
+
125
+ @media (prefers-color-scheme: dark) { header button.mis.show_mis { background: #4b1818; } }
126
+
127
+ header button.exc { background: #f7f7f7; }
128
+
129
+ @media (prefers-color-scheme: dark) { header button.exc { background: #333; } }
130
+
131
+ header button.exc.show_exc { background: #eee; border: 2px solid #808080; margin: 0 .1em; }
132
+
133
+ @media (prefers-color-scheme: dark) { header button.exc.show_exc { background: #333; } }
134
+
135
+ header button.par { background: #ffffd5; }
136
+
137
+ @media (prefers-color-scheme: dark) { header button.par { background: #650; } }
138
+
139
+ header button.par.show_par { background: #ffa; border: 2px solid #bbbb00; margin: 0 .1em; }
140
+
141
+ @media (prefers-color-scheme: dark) { header button.par.show_par { background: #650; } }
142
+
143
+ #help_panel, #source p .annotate.long { display: none; position: absolute; z-index: 999; background: #ffffcc; border: 1px solid #888; border-radius: .2em; color: #333; padding: .25em .5em; }
144
+
145
+ #source p .annotate.long { white-space: normal; float: right; top: 1.75em; right: 1em; height: auto; }
146
+
147
+ #help_panel_wrapper { float: right; position: relative; }
148
+
149
+ #keyboard_icon { margin: 5px; }
150
+
151
+ #help_panel_state { display: none; }
152
+
153
+ #help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; }
154
+
155
+ #help_panel .keyhelp p { margin-top: .75em; }
156
+
157
+ #help_panel .legend { font-style: italic; margin-bottom: 1em; }
158
+
159
+ .indexfile #help_panel { width: 25em; }
160
+
161
+ .pyfile #help_panel { width: 18em; }
162
+
163
+ #help_panel_state:checked ~ #help_panel { display: block; }
164
+
165
+ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; }
166
+
167
+ #source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
168
+
169
+ #source p { position: relative; white-space: pre; }
170
+
171
+ #source p * { box-sizing: border-box; }
172
+
173
+ #source p .n { float: left; text-align: right; width: 3.5rem; box-sizing: border-box; margin-left: -3.5rem; padding-right: 1em; color: #999; user-select: none; }
174
+
175
+ @media (prefers-color-scheme: dark) { #source p .n { color: #777; } }
176
+
177
+ #source p .n.highlight { background: #ffdd00; }
178
+
179
+ #source p .n a { scroll-margin-top: 6em; text-decoration: none; color: #999; }
180
+
181
+ @media (prefers-color-scheme: dark) { #source p .n a { color: #777; } }
182
+
183
+ #source p .n a:hover { text-decoration: underline; color: #999; }
184
+
185
+ @media (prefers-color-scheme: dark) { #source p .n a:hover { color: #777; } }
186
+
187
+ #source p .t { display: inline-block; width: 100%; box-sizing: border-box; margin-left: -.5em; padding-left: 0.3em; border-left: 0.2em solid #fff; }
188
+
189
+ @media (prefers-color-scheme: dark) { #source p .t { border-color: #1e1e1e; } }
190
+
191
+ #source p .t:hover { background: #f2f2f2; }
192
+
193
+ @media (prefers-color-scheme: dark) { #source p .t:hover { background: #282828; } }
194
+
195
+ #source p .t:hover ~ .r .annotate.long { display: block; }
196
+
197
+ #source p .t .com { color: #008000; font-style: italic; line-height: 1px; }
198
+
199
+ @media (prefers-color-scheme: dark) { #source p .t .com { color: #6a9955; } }
200
+
201
+ #source p .t .key { font-weight: bold; line-height: 1px; }
202
+
203
+ #source p .t .str { color: #0451a5; }
204
+
205
+ @media (prefers-color-scheme: dark) { #source p .t .str { color: #9cdcfe; } }
206
+
207
+ #source p.mis .t { border-left: 0.2em solid #ff0000; }
208
+
209
+ #source p.mis.show_mis .t { background: #fdd; }
210
+
211
+ @media (prefers-color-scheme: dark) { #source p.mis.show_mis .t { background: #4b1818; } }
212
+
213
+ #source p.mis.show_mis .t:hover { background: #f2d2d2; }
214
+
215
+ @media (prefers-color-scheme: dark) { #source p.mis.show_mis .t:hover { background: #532323; } }
216
+
217
+ #source p.run .t { border-left: 0.2em solid #00dd00; }
218
+
219
+ #source p.run.show_run .t { background: #dfd; }
220
+
221
+ @media (prefers-color-scheme: dark) { #source p.run.show_run .t { background: #373d29; } }
222
+
223
+ #source p.run.show_run .t:hover { background: #d2f2d2; }
224
+
225
+ @media (prefers-color-scheme: dark) { #source p.run.show_run .t:hover { background: #404633; } }
226
+
227
+ #source p.exc .t { border-left: 0.2em solid #808080; }
228
+
229
+ #source p.exc.show_exc .t { background: #eee; }
230
+
231
+ @media (prefers-color-scheme: dark) { #source p.exc.show_exc .t { background: #333; } }
232
+
233
+ #source p.exc.show_exc .t:hover { background: #e2e2e2; }
234
+
235
+ @media (prefers-color-scheme: dark) { #source p.exc.show_exc .t:hover { background: #3c3c3c; } }
236
+
237
+ #source p.par .t { border-left: 0.2em solid #bbbb00; }
238
+
239
+ #source p.par.show_par .t { background: #ffa; }
240
+
241
+ @media (prefers-color-scheme: dark) { #source p.par.show_par .t { background: #650; } }
242
+
243
+ #source p.par.show_par .t:hover { background: #f2f2a2; }
244
+
245
+ @media (prefers-color-scheme: dark) { #source p.par.show_par .t:hover { background: #6d5d0c; } }
246
+
247
+ #source p .r { position: absolute; top: 0; right: 2.5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; }
248
+
249
+ #source p .annotate { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; color: #666; padding-right: .5em; }
250
+
251
+ @media (prefers-color-scheme: dark) { #source p .annotate { color: #ddd; } }
252
+
253
+ #source p .annotate.short:hover ~ .long { display: block; }
254
+
255
+ #source p .annotate.long { width: 30em; right: 2.5em; }
256
+
257
+ #source p input { display: none; }
258
+
259
+ #source p input ~ .r label.ctx { cursor: pointer; border-radius: .25em; }
260
+
261
+ #source p input ~ .r label.ctx::before { content: "▶ "; }
262
+
263
+ #source p input ~ .r label.ctx:hover { background: #e8f4ff; color: #666; }
264
+
265
+ @media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { background: #0f3a42; } }
266
+
267
+ @media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { color: #aaa; } }
268
+
269
+ #source p input:checked ~ .r label.ctx { background: #d0e8ff; color: #666; border-radius: .75em .75em 0 0; padding: 0 .5em; margin: -.25em 0; }
270
+
271
+ @media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { background: #056; } }
272
+
273
+ @media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { color: #aaa; } }
274
+
275
+ #source p input:checked ~ .r label.ctx::before { content: "▼ "; }
276
+
277
+ #source p input:checked ~ .ctxs { padding: .25em .5em; overflow-y: scroll; max-height: 10.5em; }
278
+
279
+ #source p label.ctx { color: #999; display: inline-block; padding: 0 .5em; font-size: .8333em; }
280
+
281
+ @media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } }
282
+
283
+ #source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; }
284
+
285
+ @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } }
286
+
287
+ #index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; }
288
+
289
+ #index table.index { margin-left: -.5em; }
290
+
291
+ #index td, #index th { text-align: right; padding: .25em .5em; border-bottom: 1px solid #eee; }
292
+
293
+ @media (prefers-color-scheme: dark) { #index td, #index th { border-color: #333; } }
294
+
295
+ #index td.name, #index th.name { text-align: left; width: auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; min-width: 15em; }
296
+
297
+ #index th { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-style: italic; color: #333; cursor: pointer; }
298
+
299
+ @media (prefers-color-scheme: dark) { #index th { color: #ddd; } }
300
+
301
+ #index th:hover { background: #eee; }
302
+
303
+ @media (prefers-color-scheme: dark) { #index th:hover { background: #333; } }
304
+
305
+ #index th .arrows { color: #666; font-size: 85%; font-family: sans-serif; font-style: normal; pointer-events: none; }
306
+
307
+ #index th[aria-sort="ascending"], #index th[aria-sort="descending"] { white-space: nowrap; background: #eee; padding-left: .5em; }
308
+
309
+ @media (prefers-color-scheme: dark) { #index th[aria-sort="ascending"], #index th[aria-sort="descending"] { background: #333; } }
310
+
311
+ #index th[aria-sort="ascending"] .arrows::after { content: " ▲"; }
312
+
313
+ #index th[aria-sort="descending"] .arrows::after { content: " ▼"; }
314
+
315
+ #index td.name { font-size: 1.15em; }
316
+
317
+ #index td.name a { text-decoration: none; color: inherit; }
318
+
319
+ #index td.name .no-noun { font-style: italic; }
320
+
321
+ #index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; }
322
+
323
+ #index tr.region:hover { background: #eee; }
324
+
325
+ @media (prefers-color-scheme: dark) { #index tr.region:hover { background: #333; } }
326
+
327
+ #index tr.region:hover td.name { text-decoration: underline; color: inherit; }
328
+
329
+ #scroll_marker { position: fixed; z-index: 3; right: 0; top: 0; width: 16px; height: 100%; background: #fff; border-left: 1px solid #eee; will-change: transform; }
330
+
331
+ @media (prefers-color-scheme: dark) { #scroll_marker { background: #1e1e1e; } }
332
+
333
+ @media (prefers-color-scheme: dark) { #scroll_marker { border-color: #333; } }
334
+
335
+ #scroll_marker .marker { background: #ccc; position: absolute; min-height: 3px; width: 100%; }
336
+
337
+ @media (prefers-color-scheme: dark) { #scroll_marker .marker { background: #444; } }