quicopt 0.1.0
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.
- checksums.yaml +7 -0
- data/.yardopts +9 -0
- data/LICENSE +201 -0
- data/README.md +205 -0
- data/lib/quicopt/client.rb +504 -0
- data/lib/quicopt/model.rb +627 -0
- data/lib/quicopt/modeler/v1/program_pb.rb +48 -0
- data/lib/quicopt/version.rb +9 -0
- data/lib/quicopt/wire.rb +179 -0
- data/lib/quicopt.rb +50 -0
- data/proto/quicopt/modeler/v1/program.proto +240 -0
- data/templates/default/fulldoc/html/css/common.css +474 -0
- data/templates/default/fulldoc/html/css/quicopt-icon-color.svg +244 -0
- data/templates/default/fulldoc/html/css/quicopt-icon-white.svg +235 -0
- data/templates/default/fulldoc/html/setup.rb +17 -0
- metadata +72 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
* SPDX-FileCopyrightText: (c) 2026 Tim Bode, PGI-12, Forschungszentrum Jülich
|
|
3
|
+
*
|
|
4
|
+
* Quicopt theming for YARD's default template.
|
|
5
|
+
*
|
|
6
|
+
* YARD ships css/common.css as an explicit override hook ("Override this file
|
|
7
|
+
* with custom rules") and loads it *after* style.css — so matching a YARD
|
|
8
|
+
* selector exactly is enough to win, and no !important is needed anywhere. It is
|
|
9
|
+
* also listed in stylesheets_full_list, so it loads into the class-list iframe
|
|
10
|
+
* too; one file themes the whole site, sidebar included.
|
|
11
|
+
*
|
|
12
|
+
* The rules below deliberately reuse YARD's own selectors rather than inventing
|
|
13
|
+
* shorter ones. That is not verbosity: `#filecontents pre.code` out-specifies a
|
|
14
|
+
* reasonable-looking `#content pre`, so a shorter selector silently loses on
|
|
15
|
+
* exactly the elements that matter most. Everything is driven by the variables
|
|
16
|
+
* below, which is what lets dark mode be a palette swap instead of a second
|
|
17
|
+
* stylesheet.
|
|
18
|
+
*
|
|
19
|
+
* Palette matches the Python client's docs site (#2d5faa, logo grey #333333),
|
|
20
|
+
* with the blue lifted in dark mode for contrast.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
:root {
|
|
24
|
+
--qc-blue: #2d5faa;
|
|
25
|
+
--qc-blue-hover: #24487f;
|
|
26
|
+
|
|
27
|
+
--qc-bg: #ffffff;
|
|
28
|
+
--qc-fg: #2b2b2b;
|
|
29
|
+
--qc-muted: #6a737d;
|
|
30
|
+
--qc-border: #e1e4e8;
|
|
31
|
+
--qc-code-bg: #f6f8fa;
|
|
32
|
+
--qc-panel-bg: #f7f8fa;
|
|
33
|
+
--qc-stripe: #f0f2f4;
|
|
34
|
+
--qc-hover: #eef2f7;
|
|
35
|
+
--qc-mark: url(quicopt-icon-color.svg);
|
|
36
|
+
|
|
37
|
+
/* Syntax tokens. YARD's defaults are tuned for white; dark needs its own. */
|
|
38
|
+
--qc-tok-keyword: #0000ff;
|
|
39
|
+
--qc-tok-string: #036a07;
|
|
40
|
+
--qc-tok-comment: #6a737d;
|
|
41
|
+
--qc-tok-const: #585cf6;
|
|
42
|
+
--qc-tok-method: #0085ff;
|
|
43
|
+
--qc-tok-ivar: #318495;
|
|
44
|
+
--qc-tok-symbol: #c5060b;
|
|
45
|
+
|
|
46
|
+
/* Semantic notes keep their meaning in both modes rather than flattening to
|
|
47
|
+
grey: amber warns, red deprecates. */
|
|
48
|
+
--qc-warn-bg: #fffbe6;
|
|
49
|
+
--qc-warn-border: #e6d27a;
|
|
50
|
+
--qc-danger-bg: #ffe5e5;
|
|
51
|
+
--qc-danger-border: #e6a1a1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@media (prefers-color-scheme: dark) {
|
|
55
|
+
:root {
|
|
56
|
+
--qc-blue: #6ea3e0;
|
|
57
|
+
--qc-blue-hover: #93bcea;
|
|
58
|
+
|
|
59
|
+
--qc-bg: #14171c;
|
|
60
|
+
--qc-fg: #d7dde5;
|
|
61
|
+
--qc-muted: #8b97a6;
|
|
62
|
+
--qc-border: #2a3038;
|
|
63
|
+
--qc-code-bg: #1b1f26;
|
|
64
|
+
--qc-panel-bg: #1a1e25;
|
|
65
|
+
--qc-stripe: #191d24;
|
|
66
|
+
--qc-hover: #232933;
|
|
67
|
+
--qc-mark: url(quicopt-icon-white.svg);
|
|
68
|
+
|
|
69
|
+
--qc-tok-keyword: #c792ea;
|
|
70
|
+
--qc-tok-string: #a5e075;
|
|
71
|
+
--qc-tok-comment: #7f8b99;
|
|
72
|
+
--qc-tok-const: #82aaff;
|
|
73
|
+
--qc-tok-method: #82aaff;
|
|
74
|
+
--qc-tok-ivar: #7fdbca;
|
|
75
|
+
--qc-tok-symbol: #f78c6c;
|
|
76
|
+
|
|
77
|
+
--qc-warn-bg: #33301d;
|
|
78
|
+
--qc-warn-border: #5c5231;
|
|
79
|
+
--qc-danger-bg: #33211f;
|
|
80
|
+
--qc-danger-border: #5f3736;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* ── base ────────────────────────────────────────────────────────────────── */
|
|
85
|
+
|
|
86
|
+
body,
|
|
87
|
+
#main,
|
|
88
|
+
#content {
|
|
89
|
+
background: var(--qc-bg);
|
|
90
|
+
color: var(--qc-fg);
|
|
91
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
92
|
+
"Helvetica Neue", Arial, sans-serif;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
a, a:visited,
|
|
96
|
+
#content a, #content a:visited {
|
|
97
|
+
color: var(--qc-blue);
|
|
98
|
+
text-decoration: none;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* YARD paints a yellow highlight behind hovered links; keep the emphasis but
|
|
102
|
+
drop the highlighter-pen look, which is unreadable on a dark background. */
|
|
103
|
+
a:hover,
|
|
104
|
+
#content a:hover {
|
|
105
|
+
background: transparent;
|
|
106
|
+
color: var(--qc-blue-hover);
|
|
107
|
+
text-decoration: underline;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
h1, h2, h3, h4, h5, h6,
|
|
111
|
+
#content h1, #content h2, #content h3, #content h4 {
|
|
112
|
+
color: var(--qc-fg);
|
|
113
|
+
border-color: var(--qc-border);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
hr, #content hr {
|
|
117
|
+
border: 0;
|
|
118
|
+
border-top: 1px solid var(--qc-border);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* ── header, with the brand mark ─────────────────────────────────────────── */
|
|
122
|
+
|
|
123
|
+
#main > #header {
|
|
124
|
+
position: relative;
|
|
125
|
+
background: var(--qc-panel-bg);
|
|
126
|
+
border-bottom: 1px solid var(--qc-border);
|
|
127
|
+
padding: 0.6em 0.9em 0.6em 3.2em;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
#main > #header::before {
|
|
131
|
+
content: "";
|
|
132
|
+
position: absolute;
|
|
133
|
+
left: 0.95em;
|
|
134
|
+
top: 50%;
|
|
135
|
+
width: 1.6em;
|
|
136
|
+
height: 1.6em;
|
|
137
|
+
transform: translateY(-50%);
|
|
138
|
+
background: var(--qc-mark) no-repeat center / contain;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#header #menu,
|
|
142
|
+
#header #menu .title {
|
|
143
|
+
color: var(--qc-muted);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
#header #menu a {
|
|
147
|
+
color: var(--qc-blue);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
#header #search svg rect {
|
|
151
|
+
fill: var(--qc-muted);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
#header #search a,
|
|
155
|
+
#header #search a:hover {
|
|
156
|
+
background: var(--qc-code-bg);
|
|
157
|
+
border: 1px solid var(--qc-border);
|
|
158
|
+
color: var(--qc-blue);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* ── sidebar: its own iframe document, themed by this same file ──────────── */
|
|
162
|
+
|
|
163
|
+
.nav_wrap,
|
|
164
|
+
#nav {
|
|
165
|
+
background: var(--qc-panel-bg);
|
|
166
|
+
border-right: 1px solid var(--qc-border);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
#resizer {
|
|
170
|
+
background: var(--qc-border);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
#full_list {
|
|
174
|
+
background: var(--qc-panel-bg);
|
|
175
|
+
color: var(--qc-fg);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.fixed_header {
|
|
179
|
+
background: var(--qc-panel-bg);
|
|
180
|
+
border-bottom: 1px solid var(--qc-border);
|
|
181
|
+
color: var(--qc-fg);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
#noresults {
|
|
185
|
+
background: var(--qc-panel-bg);
|
|
186
|
+
color: var(--qc-muted);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Zebra striping — the rows that stayed white while everything else went dark. */
|
|
190
|
+
#full_list li.odd,
|
|
191
|
+
li.r1 {
|
|
192
|
+
background: var(--qc-stripe);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
#full_list li.even,
|
|
196
|
+
li.r2 {
|
|
197
|
+
background: var(--qc-panel-bg);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
#full_list li,
|
|
201
|
+
#full_list ul li {
|
|
202
|
+
border-color: var(--qc-border);
|
|
203
|
+
color: var(--qc-fg);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
#full_list .item:hover {
|
|
207
|
+
background: var(--qc-hover);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
#search input,
|
|
211
|
+
#full_list_nav a {
|
|
212
|
+
background: var(--qc-bg);
|
|
213
|
+
color: var(--qc-fg);
|
|
214
|
+
border: 1px solid var(--qc-border);
|
|
215
|
+
border-radius: 3px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
#full_list_nav a {
|
|
219
|
+
border: 0;
|
|
220
|
+
background: transparent;
|
|
221
|
+
color: var(--qc-blue);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* ── table of contents ───────────────────────────────────────────────────── */
|
|
225
|
+
|
|
226
|
+
#toc,
|
|
227
|
+
#toc.hidden,
|
|
228
|
+
#toc.hidden:hover {
|
|
229
|
+
background: var(--qc-panel-bg);
|
|
230
|
+
border: 1px solid var(--qc-border);
|
|
231
|
+
box-shadow: none;
|
|
232
|
+
color: var(--qc-fg);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
#toc .title,
|
|
236
|
+
#toc li {
|
|
237
|
+
color: var(--qc-fg);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
#toc a {
|
|
241
|
+
color: var(--qc-blue);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* ── code ────────────────────────────────────────────────────────────────── */
|
|
245
|
+
|
|
246
|
+
code, tt, pre,
|
|
247
|
+
#content code, #content tt, #content pre {
|
|
248
|
+
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
|
|
249
|
+
"Liberation Mono", monospace;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/* Inline code. YARD gives `.docstring p > code` a pink tint; normalise it. */
|
|
253
|
+
*:not(pre) > code,
|
|
254
|
+
.docstring p > code,
|
|
255
|
+
.docstring p > tt,
|
|
256
|
+
#content code,
|
|
257
|
+
#content tt {
|
|
258
|
+
background: var(--qc-code-bg);
|
|
259
|
+
color: var(--qc-fg);
|
|
260
|
+
border: 1px solid var(--qc-border);
|
|
261
|
+
border-radius: 3px;
|
|
262
|
+
padding: 0.05em 0.3em;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* Block code. These three selectors are YARD's own — a shorter one loses to
|
|
266
|
+
`#filecontents pre.code`, which is what left these boxes white in dark mode
|
|
267
|
+
while the text had already gone light. */
|
|
268
|
+
.docstring pre.code,
|
|
269
|
+
#filecontents pre.code,
|
|
270
|
+
.tags pre.example,
|
|
271
|
+
.source_code,
|
|
272
|
+
.source_code pre {
|
|
273
|
+
background: var(--qc-code-bg);
|
|
274
|
+
border: 1px solid var(--qc-border);
|
|
275
|
+
border-radius: 4px;
|
|
276
|
+
color: var(--qc-fg);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.source_code {
|
|
280
|
+
border-left: 8px solid var(--qc-border);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
pre.code,
|
|
284
|
+
pre.code a {
|
|
285
|
+
color: var(--qc-fg);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
pre.code a {
|
|
289
|
+
border-bottom: 1px dotted var(--qc-border);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* A code span nested in a block must not get its own box. */
|
|
293
|
+
#content pre code,
|
|
294
|
+
#content pre tt,
|
|
295
|
+
pre.code code,
|
|
296
|
+
pre.code tt {
|
|
297
|
+
background: none;
|
|
298
|
+
border: 0;
|
|
299
|
+
padding: 0;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.source_code .lines,
|
|
303
|
+
pre.code .info.file {
|
|
304
|
+
color: var(--qc-muted);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* Syntax tokens — YARD hard-codes these for a white background. */
|
|
308
|
+
pre.code .kw { color: var(--qc-tok-keyword); }
|
|
309
|
+
pre.code .val,
|
|
310
|
+
pre.code .tstring_content,
|
|
311
|
+
pre.code .tstring_beg,
|
|
312
|
+
pre.code .tstring_end,
|
|
313
|
+
pre.code .dstring,
|
|
314
|
+
pre.code .regexp { color: var(--qc-tok-string); }
|
|
315
|
+
pre.code .comment { color: var(--qc-tok-comment); font-style: italic; }
|
|
316
|
+
pre.code .const,
|
|
317
|
+
pre.code .constant { color: var(--qc-tok-const); }
|
|
318
|
+
pre.code .fid,
|
|
319
|
+
pre.code .id,
|
|
320
|
+
pre.code .rubyid_new { color: var(--qc-tok-method); }
|
|
321
|
+
pre.code .ivar { color: var(--qc-tok-ivar); }
|
|
322
|
+
pre.code .gvar,
|
|
323
|
+
pre.code .label,
|
|
324
|
+
pre.code .symbol { color: var(--qc-tok-symbol); }
|
|
325
|
+
pre.code .int,
|
|
326
|
+
pre.code .float { color: var(--qc-tok-const); }
|
|
327
|
+
|
|
328
|
+
/* YARD also colours a handful of specific method names and the cross-reference
|
|
329
|
+
links inside code, each hard-coded for a white background. */
|
|
330
|
+
pre.code .rubyid_to_i,
|
|
331
|
+
pre.code .rubyid_each,
|
|
332
|
+
pre.code .rubyid_include,
|
|
333
|
+
pre.code .id > .object_link a { color: var(--qc-tok-method); }
|
|
334
|
+
pre.code .rubyid_nth_ref { color: var(--qc-tok-symbol); }
|
|
335
|
+
pre.code .const > .object_link a,
|
|
336
|
+
#content .summary_desc pre.code .const > .object_link a { color: var(--qc-tok-const); }
|
|
337
|
+
|
|
338
|
+
/* ── docstring furniture ─────────────────────────────────────────────────── */
|
|
339
|
+
|
|
340
|
+
.docstring .note,
|
|
341
|
+
.note.title,
|
|
342
|
+
.note.returns_void {
|
|
343
|
+
background: var(--qc-code-bg);
|
|
344
|
+
border-left: 4px solid var(--qc-blue);
|
|
345
|
+
color: var(--qc-fg);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.docstring dl dt,
|
|
349
|
+
.box_info dl:nth-child(odd) > *,
|
|
350
|
+
.docstring table tr:nth-child(odd) {
|
|
351
|
+
background: var(--qc-stripe);
|
|
352
|
+
color: var(--qc-fg);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.box_info dl:nth-child(even) > *,
|
|
356
|
+
.docstring table tr:nth-child(even),
|
|
357
|
+
.docstring table th {
|
|
358
|
+
background: var(--qc-panel-bg);
|
|
359
|
+
color: var(--qc-fg);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.docstring table,
|
|
363
|
+
.docstring table th,
|
|
364
|
+
.docstring table td,
|
|
365
|
+
#content table,
|
|
366
|
+
#content table th,
|
|
367
|
+
#content table td {
|
|
368
|
+
border-color: var(--qc-border);
|
|
369
|
+
color: var(--qc-fg);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
p.signature,
|
|
373
|
+
.tags .overload .overload_item .signature,
|
|
374
|
+
.summary_signature,
|
|
375
|
+
.method_details h3.signature {
|
|
376
|
+
background: var(--qc-code-bg);
|
|
377
|
+
border: 1px solid var(--qc-border);
|
|
378
|
+
border-radius: 3px;
|
|
379
|
+
color: var(--qc-fg);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.summary_signature a,
|
|
383
|
+
.method_details h3.signature a,
|
|
384
|
+
.summary_desc .object_link a {
|
|
385
|
+
background: transparent;
|
|
386
|
+
color: var(--qc-blue);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.inheritanceTree,
|
|
390
|
+
h2 small a {
|
|
391
|
+
background: var(--qc-code-bg);
|
|
392
|
+
color: var(--qc-blue);
|
|
393
|
+
border-color: var(--qc-border);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.tags .overload .overload_item,
|
|
397
|
+
.method_details,
|
|
398
|
+
.method_details_list {
|
|
399
|
+
border-color: var(--qc-border);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.tags h3,
|
|
403
|
+
.tags ul li {
|
|
404
|
+
color: var(--qc-fg);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* ── footer ──────────────────────────────────────────────────────────────── */
|
|
408
|
+
|
|
409
|
+
#footer {
|
|
410
|
+
background: var(--qc-panel-bg);
|
|
411
|
+
border-top: 1px solid var(--qc-border);
|
|
412
|
+
color: var(--qc-muted);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
#footer a {
|
|
416
|
+
color: var(--qc-blue);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/* ── the remaining light surfaces ────────────────────────────────────────── */
|
|
420
|
+
|
|
421
|
+
/* Inline code inside tag sections (@param, @return, @raise …). */
|
|
422
|
+
.tags p > code,
|
|
423
|
+
.tags p > tt {
|
|
424
|
+
background: var(--qc-code-bg);
|
|
425
|
+
color: var(--qc-fg);
|
|
426
|
+
border: 1px solid var(--qc-border);
|
|
427
|
+
border-radius: 3px;
|
|
428
|
+
padding: 0.05em 0.3em;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* Cross-reference links carry a pale blue plate; the underline is enough. */
|
|
432
|
+
.docstring .object_link a,
|
|
433
|
+
.toggleDefines {
|
|
434
|
+
background: transparent;
|
|
435
|
+
color: var(--qc-blue);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/* Tables in the README (rendered into #filecontents, not .docstring). */
|
|
439
|
+
#filecontents table tr:nth-child(odd) {
|
|
440
|
+
background: var(--qc-stripe);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
#filecontents table tr:nth-child(even) {
|
|
444
|
+
background: var(--qc-panel-bg);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
#filecontents table th,
|
|
448
|
+
#filecontents dt {
|
|
449
|
+
background: var(--qc-panel-bg);
|
|
450
|
+
color: var(--qc-fg);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
#filecontents table,
|
|
454
|
+
#filecontents table th,
|
|
455
|
+
#filecontents table td {
|
|
456
|
+
border-color: var(--qc-border);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* Semantic notes: amber warns, red deprecates — in both modes. */
|
|
460
|
+
.note.todo,
|
|
461
|
+
.note.private,
|
|
462
|
+
.note.title.private {
|
|
463
|
+
background: var(--qc-warn-bg);
|
|
464
|
+
border-left: 4px solid var(--qc-warn-border);
|
|
465
|
+
color: var(--qc-fg);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.note.deprecated,
|
|
469
|
+
.note.title.deprecated,
|
|
470
|
+
.summary_signature.deprecated {
|
|
471
|
+
background: var(--qc-danger-bg);
|
|
472
|
+
border-left: 4px solid var(--qc-danger-border);
|
|
473
|
+
color: var(--qc-fg);
|
|
474
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="387.05734mm"
|
|
6
|
+
height="387.05734mm"
|
|
7
|
+
viewBox="0 0 387.05734 387.05734"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg10831"
|
|
10
|
+
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
|
11
|
+
sodipodi:docname="Quicopt_Icon_Color.svg"
|
|
12
|
+
inkscape:export-filename="Quicopt_Icon_Color.jpg"
|
|
13
|
+
inkscape:export-xdpi="96"
|
|
14
|
+
inkscape:export-ydpi="96"
|
|
15
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
16
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
17
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
18
|
+
xmlns:svg="http://www.w3.org/2000/svg">
|
|
19
|
+
<sodipodi:namedview
|
|
20
|
+
id="namedview10833"
|
|
21
|
+
pagecolor="#dddddd"
|
|
22
|
+
bordercolor="#eeeeee"
|
|
23
|
+
borderopacity="1"
|
|
24
|
+
inkscape:showpageshadow="0"
|
|
25
|
+
inkscape:pageopacity="0"
|
|
26
|
+
inkscape:pagecheckerboard="0"
|
|
27
|
+
inkscape:deskcolor="#cfcfcf"
|
|
28
|
+
inkscape:document-units="mm"
|
|
29
|
+
showgrid="false"
|
|
30
|
+
inkscape:zoom="0.18340972"
|
|
31
|
+
inkscape:cx="1390.3298"
|
|
32
|
+
inkscape:cy="975.957"
|
|
33
|
+
inkscape:window-width="1512"
|
|
34
|
+
inkscape:window-height="892"
|
|
35
|
+
inkscape:window-x="0"
|
|
36
|
+
inkscape:window-y="34"
|
|
37
|
+
inkscape:window-maximized="0"
|
|
38
|
+
inkscape:current-layer="layer1" />
|
|
39
|
+
<defs
|
|
40
|
+
id="defs10828">
|
|
41
|
+
<rect
|
|
42
|
+
x="487.95303"
|
|
43
|
+
y="-701.96753"
|
|
44
|
+
width="4400.1377"
|
|
45
|
+
height="2234.3113"
|
|
46
|
+
id="rect576-3-5-7" />
|
|
47
|
+
<rect
|
|
48
|
+
x="487.95303"
|
|
49
|
+
y="-701.96753"
|
|
50
|
+
width="4400.1377"
|
|
51
|
+
height="2234.3113"
|
|
52
|
+
id="rect576-3-5-7-9" />
|
|
53
|
+
<rect
|
|
54
|
+
x="487.95303"
|
|
55
|
+
y="-701.96753"
|
|
56
|
+
width="4400.1377"
|
|
57
|
+
height="2234.3113"
|
|
58
|
+
id="rect576-3-5-7-93" />
|
|
59
|
+
<rect
|
|
60
|
+
x="487.95303"
|
|
61
|
+
y="-701.96753"
|
|
62
|
+
width="4400.1377"
|
|
63
|
+
height="2234.3113"
|
|
64
|
+
id="rect576-3-5-7-93-4" />
|
|
65
|
+
<rect
|
|
66
|
+
x="487.95303"
|
|
67
|
+
y="-701.96753"
|
|
68
|
+
width="4400.1377"
|
|
69
|
+
height="2234.3113"
|
|
70
|
+
id="rect576-3-5-7-6" />
|
|
71
|
+
<rect
|
|
72
|
+
x="487.95303"
|
|
73
|
+
y="-701.96753"
|
|
74
|
+
width="4400.1377"
|
|
75
|
+
height="2234.3113"
|
|
76
|
+
id="rect576-3-5-7-1" />
|
|
77
|
+
</defs>
|
|
78
|
+
<g
|
|
79
|
+
inkscape:label="Layer 1"
|
|
80
|
+
inkscape:groupmode="layer"
|
|
81
|
+
id="layer1"
|
|
82
|
+
transform="translate(-1416.4976,330.43283)">
|
|
83
|
+
<g
|
|
84
|
+
id="g46011-3"
|
|
85
|
+
transform="translate(1490.8238,225.21236)"
|
|
86
|
+
style="stroke-width:8;stroke-dasharray:none">
|
|
87
|
+
<path
|
|
88
|
+
id="rect1792-7-6-2-0"
|
|
89
|
+
style="fill:none;stroke:#2d5faa;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
90
|
+
d="m 251.9689,-317.45986 -132.6975,132.6975 -177.497304,-177.4973 177.497304,-177.4972 177.4972,177.4972 v 0 l -33.486,33.486" />
|
|
91
|
+
<path
|
|
92
|
+
id="rect1792-4-8-1-8-7"
|
|
93
|
+
style="fill:none;stroke:#2d5faa;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
94
|
+
d="m 168.4559,-400.13046 37.8706,37.8706 v 0 l -87.0549,87.0548 -87.054804,-87.0548 87.054804,-87.0548 37.8706,37.8705" />
|
|
95
|
+
<path
|
|
96
|
+
id="rect1792-4-5-2-5-9-2"
|
|
97
|
+
style="fill:none;stroke:#2d5faa;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
98
|
+
d="m 19.197596,-394.45096 100.073804,-100.0738 132.2651,132.2651 v 0 l -132.2651,132.2651 -132.265104,-132.2651 20.8776003,-20.8775" />
|
|
99
|
+
</g>
|
|
100
|
+
<g
|
|
101
|
+
id="g46247-3"
|
|
102
|
+
transform="translate(1490.8238,225.21236)"
|
|
103
|
+
style="stroke-width:8;stroke-dasharray:none">
|
|
104
|
+
<circle
|
|
105
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
106
|
+
id="path2616-0-7-0-1-6-1-7-9-5"
|
|
107
|
+
cx="-78.16243"
|
|
108
|
+
cy="-434.03162"
|
|
109
|
+
r="8"
|
|
110
|
+
transform="rotate(45)" />
|
|
111
|
+
<circle
|
|
112
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
113
|
+
id="path2616-0-7-0-1-6-1-7-6-81-8"
|
|
114
|
+
cx="-124.99055"
|
|
115
|
+
cy="-434.03162"
|
|
116
|
+
r="8"
|
|
117
|
+
transform="rotate(45)" />
|
|
118
|
+
<circle
|
|
119
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
120
|
+
id="path2616-0-7-0-1-6-1-7-6-8-0-3"
|
|
121
|
+
cx="-171.81868"
|
|
122
|
+
cy="-434.03162"
|
|
123
|
+
r="8"
|
|
124
|
+
transform="rotate(45)" />
|
|
125
|
+
<circle
|
|
126
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
127
|
+
id="path2616-0-7-0-1-6-1-7-6-8-4-37-5"
|
|
128
|
+
cx="-78.16243"
|
|
129
|
+
cy="-387.26257"
|
|
130
|
+
r="8"
|
|
131
|
+
transform="rotate(45)" />
|
|
132
|
+
<circle
|
|
133
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
134
|
+
id="path2616-0-7-0-1-6-1-7-6-8-4-6-4-6"
|
|
135
|
+
cx="-78.16243"
|
|
136
|
+
cy="-340.49408"
|
|
137
|
+
r="8"
|
|
138
|
+
transform="rotate(45)" />
|
|
139
|
+
<circle
|
|
140
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
141
|
+
id="path2616-0-7-0-1-6-3-7-1-3-1"
|
|
142
|
+
cx="-265.28061"
|
|
143
|
+
cy="-434.03162"
|
|
144
|
+
r="8"
|
|
145
|
+
transform="rotate(45)" />
|
|
146
|
+
<circle
|
|
147
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
148
|
+
id="path2616-0-7-0-1-6-3-3-4-3-4-7"
|
|
149
|
+
cx="-265.28061"
|
|
150
|
+
cy="-246.97406"
|
|
151
|
+
r="8"
|
|
152
|
+
transform="rotate(45)" />
|
|
153
|
+
<circle
|
|
154
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
155
|
+
id="path2616-0-7-0-1-6-3-3-5-5-4-8-9"
|
|
156
|
+
cx="-78.16243"
|
|
157
|
+
cy="-246.97406"
|
|
158
|
+
r="8"
|
|
159
|
+
transform="rotate(45)" />
|
|
160
|
+
<circle
|
|
161
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
162
|
+
id="path2616-0-7-0-1-6-1-7-6-0-39-2"
|
|
163
|
+
cx="-124.99055"
|
|
164
|
+
cy="-246.97406"
|
|
165
|
+
r="8"
|
|
166
|
+
transform="rotate(45)" />
|
|
167
|
+
<circle
|
|
168
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
169
|
+
id="path2616-0-7-0-1-6-1-7-5-9-4"
|
|
170
|
+
cx="-265.28061"
|
|
171
|
+
cy="-387.26257"
|
|
172
|
+
r="8"
|
|
173
|
+
transform="rotate(45)" />
|
|
174
|
+
</g>
|
|
175
|
+
<g
|
|
176
|
+
id="g46225-8"
|
|
177
|
+
transform="translate(1490.8238,225.21236)"
|
|
178
|
+
style="stroke-width:8;stroke-dasharray:none">
|
|
179
|
+
<circle
|
|
180
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
181
|
+
id="path2616-0-7-0-1-7-1-49-3"
|
|
182
|
+
cx="-297.25375"
|
|
183
|
+
cy="-465.9198"
|
|
184
|
+
r="16"
|
|
185
|
+
transform="rotate(45)" />
|
|
186
|
+
<circle
|
|
187
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
188
|
+
id="path2616-0-75-3-1-6-9"
|
|
189
|
+
cx="-46.278656"
|
|
190
|
+
cy="-340.49408"
|
|
191
|
+
r="16"
|
|
192
|
+
transform="rotate(45)" />
|
|
193
|
+
<circle
|
|
194
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
195
|
+
id="path2616-0-2-2-4-6"
|
|
196
|
+
cx="-297.25375"
|
|
197
|
+
cy="-340.49408"
|
|
198
|
+
r="16"
|
|
199
|
+
transform="rotate(45)" />
|
|
200
|
+
<circle
|
|
201
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
202
|
+
id="path2616-0-0-7-6-2-4"
|
|
203
|
+
cx="-171.81868"
|
|
204
|
+
cy="-465.9198"
|
|
205
|
+
r="16"
|
|
206
|
+
transform="rotate(45)" />
|
|
207
|
+
<circle
|
|
208
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
209
|
+
id="path2616-0-5-1-6-8-7"
|
|
210
|
+
cx="-171.81868"
|
|
211
|
+
cy="-214.76801"
|
|
212
|
+
r="16"
|
|
213
|
+
transform="rotate(45)" />
|
|
214
|
+
<circle
|
|
215
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
216
|
+
id="path2616-0-7-00-5-4-7"
|
|
217
|
+
cx="-46.278656"
|
|
218
|
+
cy="-214.76801"
|
|
219
|
+
r="16"
|
|
220
|
+
transform="rotate(45)" />
|
|
221
|
+
<circle
|
|
222
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
223
|
+
id="path2616-0-7-0-9-4-4-3"
|
|
224
|
+
cx="-46.278656"
|
|
225
|
+
cy="-465.9198"
|
|
226
|
+
r="16"
|
|
227
|
+
transform="rotate(45)" />
|
|
228
|
+
<circle
|
|
229
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
230
|
+
id="path2616-0-7-0-1-6-4-1-8-1-1"
|
|
231
|
+
cx="-297.25375"
|
|
232
|
+
cy="-214.76801"
|
|
233
|
+
r="16"
|
|
234
|
+
transform="rotate(45)" />
|
|
235
|
+
<circle
|
|
236
|
+
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:8;stroke-dasharray:none;stroke-opacity:1"
|
|
237
|
+
id="path2616-5-0-6-7"
|
|
238
|
+
cx="-171.81868"
|
|
239
|
+
cy="-340.49408"
|
|
240
|
+
r="16"
|
|
241
|
+
transform="rotate(45)" />
|
|
242
|
+
</g>
|
|
243
|
+
</g>
|
|
244
|
+
</svg>
|