Author: Kevin Schoon [me@kevinschoon.com]
Hash: 5ab30c75e489badb4363f6f7a635fe8f006aeb24
Timestamp: Wed, 13 Dec 2023 20:59:15 +0000 (5 months ago)

+1457 -425 +/-29 browse
add some basic documentation
1diff --git a/ATTRIBUTIONS.md b/ATTRIBUTIONS.md
2index 1569333..c27faf8 100644
3--- a/ATTRIBUTIONS.md
4+++ b/ATTRIBUTIONS.md
5 @@ -22,7 +22,6 @@ Inca style textile patterns are created by [@TrucomanX](https://openclipart.org/
6 ##### CC BY-SA 4.0
7
8 * Most SVG icons come from [OpenMoji](https://openmoji.org)
9- * [Ayllu moon emoji](https://openmoji.org/library/emoji-1F319/) by Vanessa Boutzikoudi.
10 * [Web Syndication Icon](https://openmoji.org/library/emoji-E381/) by Alexander Müller.
11 * [Balance Scale](https://openmoji.org/library/emoji-2696/) by Hilda Kalyoncu.
12 * [Classical Building](https://openmoji.org/library/emoji-1F3DB/) by Martin Wehl.
13 diff --git a/ayllu-shell/README.md b/ayllu-shell/README.md
14new file mode 100644
15index 0000000..7eb6fcf
16--- /dev/null
17+++ b/ayllu-shell/README.md
18 @@ -0,0 +1,4 @@
19+ # ayllu-shell
20+
21+ Placeholder for a [Gitolite](https://gitolite.com/gitolite/overview.html) style
22+ restricted shell for Ayllu.
23 diff --git a/www/content/_index.md b/www/content/_index.md
24index 2d0728d..ba7191f 100644
25--- a/www/content/_index.md
26+++ b/www/content/_index.md
27 @@ -13,8 +13,8 @@ Ayllu is a lightweight code forge designed to enable individuals and
28 community projects to develop software in collaboration across open internet
29 standards.
30
31- <a href="https://ayllu-forge.org/projects/ayllu/refs">
32- <button> Latest Release: 0.2.1 </button>
33+ <a href="https://ayllu-forge.org/projects/ayllu">
34+ <button> Source </button>
35 </a>
36
37 </div>
38 diff --git a/www/content/docs/_index.md b/www/content/docs/_index.md
39index 24a5d09..f15e505 100644
40--- a/www/content/docs/_index.md
41+++ b/www/content/docs/_index.md
42 @@ -5,3 +5,6 @@ sort_by = "weight"
43 +++
44
45 # Documentation
46+
47+ Welcome to the Ayllu documentation 📖, this is section serves as an
48+ authoritative reference on all things related to the Ayllu code forge!
49 diff --git a/www/content/docs/architecture.md b/www/content/docs/architecture.md
50new file mode 100644
51index 0000000..5d449bc
52--- /dev/null
53+++ b/www/content/docs/architecture.md
54 @@ -0,0 +1,19 @@
55+ +++
56+ title = "Architecture"
57+ slug = "architecture"
58+ weight = 0
59+ +++
60+
61+ **Ayllu is a new software project and it's design is evolving.**
62+
63+ It's basic architecture is that of a single binary providing a web interface to
64+ browse and interact with Git repositories as well as an RPC server based on
65+ [Cap'n Proto](https://capnproto.org/) with an embedded client. The RPC server
66+ running in the core Ayllu binary is called the `job_server` and it provides an
67+ interface to interact with Ayllu for administrators. Much of the functionality
68+ of Ayllu is implemented via `RPC extensions` which are minimal binaries that
69+ are used to extend the core functionality of Ayllu.
70+
71+ The current architecture of Ayllu is depicted below:
72+
73+ <img class="diagram" src="/assets/architecture.svg" />
74 diff --git a/www/content/docs/developers.md b/www/content/docs/developers.md
75new file mode 100644
76index 0000000..d773077
77--- /dev/null
78+++ b/www/content/docs/developers.md
79 @@ -0,0 +1,27 @@
80+ +++
81+ title = "Developers"
82+ slug = "developers"
83+ weight = 0
84+ +++
85+
86+ # ayllu-forge.org
87+
88+ The [Ayllu website](https://ayllu-forge.org) and project documentation are built
89+ together with [Zola](https://www.getzola.org/) which you must install. After
90+ which you can startup a local preview of the site with the following commands:
91+
92+ ```sh
93+ cd www && zola serve
94+ ```
95+ The generated content are hosted directly from Ayllu and you simply need to
96+ build and commit the generated code directly into the repository.
97+
98+ ```sh
99+ cd www && zola build
100+ ```
101+
102+ ## Diagrams
103+
104+ Diagrams are built with [nomnoml](https://www.nomnoml.com/) and their SVG
105+ content contain the source for generating the diagrams. Simply open one of the
106+ source SVGs up and copy-paste it to the editor of the nomnoml website.
107 diff --git a/www/content/docs/installation.md b/www/content/docs/installation.md
108index c4d1b71..42a3d28 100644
109--- a/www/content/docs/installation.md
110+++ b/www/content/docs/installation.md
111 @@ -4,6 +4,4 @@ slug = "installation"
112 weight = 0
113 +++
114
115- ### Installation
116-
117- #### From Source
118+ TODO
119 diff --git a/www/public/assets/architecture.svg b/www/public/assets/architecture.svg
120new file mode 100644
121index 0000000..2de2a37
122--- /dev/null
123+++ b/www/public/assets/architecture.svg
124 @@ -0,0 +1,598 @@
125+ <svg version="1.1" baseProfile="full" width="1938.0" height="655.0" viewbox="0 0 1938 655" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
126+ <desc >
127+ [reverse_proxy]
128+
129+ [reverse_proxy]&lt;--&gt;[Rudolfs (LFS API)]
130+
131+ [reverse_proxy]&lt;--&gt;[ayllu-core |
132+ [axum http interface]
133+ [sites static hosting]
134+ [capnp-rpc-server (job_server)]
135+ [git repositories via libgit2]
136+ [&lt;database&gt; sqlite]
137+ ]
138+
139+ [ayllu-core] &lt;--&gt; [
140+ ayllu-mail|
141+ [capnp-rpc-server]
142+ [mailpot]
143+ [postfix]
144+ [&lt;database&gt; sqlite]
145+ ] &lt;-- SMTP [&lt;actor&gt; contributor-2]
146+
147+ [ayllu-core] &lt;--&gt; [
148+ ayllu-xmpp |
149+ [capnp-rpc-server]
150+ [chat interface/bot]
151+ [&lt;database&gt; sqlite]
152+ ] &lt;-- XMPP [&lt;actor&gt; contributor-2]
153+
154+ [ayllu-core] &lt;--&gt; [
155+ ayllu-build |
156+ [capnp-rpc-server]
157+ [&lt;database&gt; sqlite]
158+ ]
159+
160+ [ayllu-core] &lt;--&gt; [ayllu-shell] &lt;-- SSH [&lt;actor&gt; contributor]
161+ [ayllu-core] &lt;--&gt; [ayllu-cli] &lt;-- [&lt;actor&gt; admin]
162+
163+
164+ [ayllu-build]&lt;--&gt;[
165+ ayllu-builder-1 |
166+ [&lt;package&gt;qemu-x86_64| capnp-rpc-server | executor]
167+ ]
168+
169+ [ayllu-build]&lt;--&gt;[
170+ ayllu-builder-2 |
171+ [&lt;package&gt;qemu-aarch64| capnp-rpc-server | exectuor]
172+ ]
173+
174+ [ayllu-build]&lt;--&gt;[
175+ ayllu-builder-n |
176+ [&lt;package&gt;lxc| capnp-rpc-server | executor]
177+ ] --&gt; [ayllu-core]</desc>
178+ <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="normal" font-style="normal">
179+ <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
180+ <g stroke="transparent" fill="transparent">
181+ <rect x="0.0" y="0.0" height="655.0" width="1938.0" stroke="none"></rect>
182+ </g>
183+ <g transform="translate(8, 8)" fill="#33322E">
184+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
185+ <g stroke-dasharray="6 6">
186+ <path d="M965.1 23.1 L713 51 L713 115.83333333333333 L713.0 115.8 " fill="none"></path>
187+ </g>
188+ <path d="M707.7 109.2 L713.0 115.8 L718.3 109.2 L713.0 122.5 Z"></path>
189+ <path d="M959.1 29.2 L965.1 23.1 L957.9 18.6 L971.8 22.4 Z"></path>
190+ <g stroke-dasharray="6 6">
191+ <path d="M1103.4 23.1 L1355.5 51 L1355.5 64.33333333333333 L1355.5 64.3 " fill="none"></path>
192+ </g>
193+ <path d="M1350.2 57.7 L1355.5 64.3 L1360.8 57.7 L1355.5 71.0 Z"></path>
194+ <path d="M1110.6 18.6 L1103.4 23.1 L1109.4 29.2 L1096.8 22.4 Z"></path>
195+ <g stroke-dasharray="6 6">
196+ <path d="M822.4 180.4 L261 225 L261 238.33333333333334 L261.0 238.3 " fill="none"></path>
197+ </g>
198+ <path d="M255.7 231.7 L261.0 238.3 L266.3 231.7 L261.0 245.0 Z"></path>
199+ <path d="M816.1 186.2 L822.4 180.4 L815.3 175.6 L829.0 179.9 Z"></path>
200+ <text x="758.0" y="489.4" stroke="none">SMTP</text>
201+ <g stroke-dasharray="6 6">
202+ <path d="M261.0 385.7 L261 399 L750 497.4263494967978 L750.0 497.4 " fill="none"></path>
203+ </g>
204+ <path d="M266.3 392.3 L261.0 385.7 L255.7 392.3 L261.0 379.0 Z"></path>
205+ <g stroke-dasharray="6 6">
206+ <path d="M926.9 206.0 L807.5 225 L807.5 238.33333333333334 L807.5 238.3 " fill="none"></path>
207+ </g>
208+ <path d="M802.2 231.7 L807.5 238.3 L812.8 231.7 L807.5 245.0 Z"></path>
209+ <path d="M921.1 212.4 L926.9 206.0 L919.5 201.8 L933.5 205.0 Z"></path>
210+ <text x="754.7" y="473.5" stroke="none">XMPP</text>
211+ <g stroke-dasharray="6 6">
212+ <path d="M807.5 385.7 L807.5 399 L807.5 481.5 L807.5 481.5 " fill="none"></path>
213+ </g>
214+ <path d="M812.8 392.3 L807.5 385.7 L802.2 392.3 L807.5 379.0 Z"></path>
215+ <g stroke-dasharray="6 6">
216+ <path d="M1276.2 209.5 L1259 225 L1259 238.33333333333334 L1259.0 238.3 " fill="none"></path>
217+ </g>
218+ <path d="M1253.7 231.7 L1259.0 238.3 L1264.3 231.7 L1259.0 245.0 Z"></path>
219+ <path d="M1274.9 217.9 L1276.2 209.5 L1267.7 210.0 L1281.2 205.0 Z"></path>
220+ <g stroke-dasharray="6 6">
221+ <path d="M1595.6 206.8 L1659 225 L1659 289.8333333333333 L1659.0 289.8 " fill="none"></path>
222+ </g>
223+ <path d="M1653.7 283.2 L1659.0 289.8 L1664.3 283.2 L1659.0 296.5 Z"></path>
224+ <path d="M1603.5 203.5 L1595.6 206.8 L1600.6 213.8 L1589.2 205.0 Z"></path>
225+ <text x="1618.3" y="473.5" stroke="none">SSH</text>
226+ <g stroke-dasharray="6 6">
227+ <path d="M1659.0 334.2 L1659 399 L1659 481.5 L1659.0 481.5 " fill="none"></path>
228+ </g>
229+ <path d="M1664.3 340.8 L1659.0 334.2 L1653.7 340.8 L1659.0 327.5 Z"></path>
230+ <g stroke-dasharray="6 6">
231+ <path d="M1691.6 206.3 L1783.5 225 L1783.5 289.8333333333333 L1783.5 289.8 " fill="none"></path>
232+ </g>
233+ <path d="M1778.2 283.2 L1783.5 289.8 L1788.8 283.2 L1783.5 296.5 Z"></path>
234+ <path d="M1699.2 202.4 L1691.6 206.3 L1697.1 212.9 L1685.1 205.0 Z"></path>
235+ <g stroke-dasharray="6 6">
236+ <path d="M1783.5 334.2 L1783.5 399 L1783.5 481.5 L1783.5 481.5 " fill="none"></path>
237+ </g>
238+ <path d="M1788.8 340.8 L1783.5 334.2 L1778.2 340.8 L1783.5 327.5 Z"></path>
239+ <g stroke-dasharray="6 6">
240+ <path d="M1102.2 365.9 L1006 399 L1006 412.3333333333333 L1006.0 412.3 " fill="none"></path>
241+ </g>
242+ <path d="M1000.7 405.7 L1006.0 412.3 L1011.3 405.7 L1006.0 419.0 Z"></path>
243+ <path d="M1097.6 373.1 L1102.2 365.9 L1094.2 363.0 L1108.5 363.8 Z"></path>
244+ <g stroke-dasharray="6 6">
245+ <path d="M1242.1 385.5 L1239 399 L1239 412.3333333333333 L1239.0 412.3 " fill="none"></path>
246+ </g>
247+ <path d="M1233.7 405.7 L1239.0 412.3 L1244.3 405.7 L1239.0 419.0 Z"></path>
248+ <path d="M1245.8 393.2 L1242.1 385.5 L1235.4 390.8 L1243.6 379.0 Z"></path>
249+ <g stroke-dasharray="6 6">
250+ <path d="M1354.1 383.0 L1375.5 399 L1388.6489765726408 413.9884707045646 L1388.6 414.0 " fill="none"></path>
251+ </g>
252+ <path d="M1380.2 412.5 L1388.6 414.0 L1388.3 405.5 L1393.0 419.0 Z"></path>
253+ <path d="M1362.6 382.7 L1354.1 383.0 L1356.2 391.3 L1348.7 379.0 Z"></path>
254+ <g stroke-dasharray="6 6">
255+ <path d="M1512.9 419.0 L1522 399 L1522 312 L1522 312 L1522 225 L1522 225 L1489.6328041618644 208.08741118367695 L1489.6 208.1 " fill="none"></path>
256+ </g>
257+ <path d="M1498.0 206.4 L1489.6 208.1 L1493.1 215.9 L1483.7 205.0 Z"></path>
258+ <g data-name="reverse_proxy">
259+ <g fill="#eee8d5" stroke="#33322E" data-name="reverse_proxy">
260+ <rect x="971.8" y="0.0" height="31.0" width="125.0" data-name="reverse_proxy"></rect>
261+ </g>
262+ <g transform="translate(971.75, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="reverse_proxy">
263+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="reverse_proxy">
264+ <text x="54.5" y="13.5" stroke="none" text-anchor="middle" data-name="reverse_proxy">reverse_proxy</text>
265+
266+ </g>
267+ </g>
268+ </g>
269+ <g data-name="Rudolfs (LFS API)">
270+ <g fill="#eee8d5" stroke="#33322E" data-name="Rudolfs (LFS API)">
271+ <rect x="637.0" y="122.5" height="31.0" width="152.0" data-name="Rudolfs (LFS API)"></rect>
272+ </g>
273+ <g transform="translate(637, 122.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Rudolfs (LFS API)">
274+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Rudolfs (LFS API)">
275+ <text x="68.0" y="13.5" stroke="none" text-anchor="middle" data-name="Rudolfs (LFS API)">Rudolfs (LFS API)</text>
276+
277+ </g>
278+ </g>
279+ </g>
280+ <g data-name="ayllu-core">
281+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-core">
282+ <rect x="829.0" y="71.0" height="134.0" width="1053.0" data-name="ayllu-core"></rect>
283+ <path d="M829.0 102.0 L1882.0 102.0" fill="none" data-name="ayllu-core"></path>
284+ </g>
285+ <g transform="translate(829, 71)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-core">
286+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-core">
287+ <text x="518.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-core">ayllu-core</text>
288+
289+ </g>
290+ </g>
291+ <g transform="translate(829, 102)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-core">
292+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-core">
293+ <g transform="translate(20, 20)" data-name="ayllu-core">
294+ <g data-name="axum http interface">
295+ <g fill="#fdf6e3" stroke="#33322E" data-name="axum http interface">
296+ <rect x="0.0" y="8.0" height="31.0" width="164.0" data-name="axum http interface"></rect>
297+ </g>
298+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="axum http interface">
299+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="axum http interface">
300+ <text x="74.0" y="13.5" stroke="none" text-anchor="middle" data-name="axum http interface">axum http interface</text>
301+
302+ </g>
303+ </g>
304+ </g>
305+ <g data-name="sites static hosting">
306+ <g fill="#fdf6e3" stroke="#33322E" data-name="sites static hosting">
307+ <rect x="204.0" y="8.0" height="31.0" width="161.0" data-name="sites static hosting"></rect>
308+ </g>
309+ <g transform="translate(204, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sites static hosting">
310+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sites static hosting">
311+ <text x="72.5" y="13.5" stroke="none" text-anchor="middle" data-name="sites static hosting">sites static hosting</text>
312+
313+ </g>
314+ </g>
315+ </g>
316+ <g data-name="capnp-rpc-server (job_server)">
317+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server (job_server)">
318+ <rect x="405.0" y="8.0" height="31.0" width="244.0" data-name="capnp-rpc-server (job_server)"></rect>
319+ </g>
320+ <g transform="translate(405, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server (job_server)">
321+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server (job_server)">
322+ <text x="114.0" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server (job_server)">capnp-rpc-server (job_server)</text>
323+
324+ </g>
325+ </g>
326+ </g>
327+ <g data-name="git repositories via libgit2">
328+ <g fill="#fdf6e3" stroke="#33322E" data-name="git repositories via libgit2">
329+ <rect x="689.0" y="8.0" height="31.0" width="210.0" data-name="git repositories via libgit2"></rect>
330+ </g>
331+ <g transform="translate(689, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="git repositories via libgit2">
332+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="git repositories via libgit2">
333+ <text x="97.0" y="13.5" stroke="none" text-anchor="middle" data-name="git repositories via libgit2">git repositories via libgit2</text>
334+
335+ </g>
336+ </g>
337+ </g>
338+ <g data-name="sqlite">
339+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
340+ <rect x="939.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
341+ <path d="M939.0 8.0 L939.0 39.0" fill="none" data-name="sqlite"></path>
342+ <path d="M997.0 8.0 L997.0 39.0" fill="none" data-name="sqlite"></path>
343+ <ellipse cx="968.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
344+ <path d="M997.0 39.0 L997.0 39.3 L996.9 39.6 L996.7 39.9 L996.4 40.2 L996.1 40.5 L995.7 40.8 L995.3 41.1 L994.7 41.3 L994.1 41.6 L993.5 41.9 L992.7 42.1 L992.0 42.4 L991.1 42.6 L990.2 42.9 L989.3 43.1 L988.2 43.3 L987.2 43.5 L986.1 43.7 L984.9 43.9 L983.7 44.0 L982.5 44.2 L981.2 44.3 L979.9 44.5 L978.6 44.6 L977.2 44.7 L975.9 44.8 L974.5 44.8 L973.0 44.9 L971.6 45.0 L970.2 45.0 L968.7 45.0 L967.3 45.0 L965.8 45.0 L964.4 45.0 L963.0 44.9 L961.5 44.8 L960.1 44.8 L958.8 44.7 L957.4 44.6 L956.1 44.5 L954.8 44.3 L953.5 44.2 L952.3 44.0 L951.1 43.9 L949.9 43.7 L948.8 43.5 L947.8 43.3 L946.7 43.1 L945.8 42.9 L944.9 42.6 L944.0 42.4 L943.3 42.1 L942.5 41.9 L941.9 41.6 L941.3 41.3 L940.7 41.1 L940.3 40.8 L939.9 40.5 L939.6 40.2 L939.3 39.9 L939.1 39.6 L939.0 39.3 L939.0 39.0" data-name="sqlite"></path>
345+ </g>
346+ <g transform="translate(939, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
347+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
348+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
349+
350+ </g>
351+ </g>
352+ </g>
353+ </g>
354+ </g>
355+ </g>
356+ </g>
357+ <g data-name="ayllu-mail">
358+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-mail">
359+ <rect x="0.0" y="245.0" height="134.0" width="522.0" data-name="ayllu-mail"></rect>
360+ <path d="M0.0 276.0 L522.0 276.0" fill="none" data-name="ayllu-mail"></path>
361+ </g>
362+ <g transform="translate(0, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-mail">
363+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-mail">
364+ <text x="253.0" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-mail">ayllu-mail</text>
365+
366+ </g>
367+ </g>
368+ <g transform="translate(0, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-mail">
369+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-mail">
370+ <g transform="translate(20, 20)" data-name="ayllu-mail">
371+ <g data-name="capnp-rpc-server">
372+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
373+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
374+ </g>
375+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
376+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
377+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
378+
379+ </g>
380+ </g>
381+ </g>
382+ <g data-name="mailpot">
383+ <g fill="#fdf6e3" stroke="#33322E" data-name="mailpot">
384+ <rect x="187.0" y="8.0" height="31.0" width="73.0" data-name="mailpot"></rect>
385+ </g>
386+ <g transform="translate(187, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="mailpot">
387+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="mailpot">
388+ <text x="28.5" y="13.5" stroke="none" text-anchor="middle" data-name="mailpot">mailpot</text>
389+
390+ </g>
391+ </g>
392+ </g>
393+ <g data-name="postfix">
394+ <g fill="#fdf6e3" stroke="#33322E" data-name="postfix">
395+ <rect x="300.0" y="8.0" height="31.0" width="68.0" data-name="postfix"></rect>
396+ </g>
397+ <g transform="translate(300, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="postfix">
398+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="postfix">
399+ <text x="26.0" y="13.5" stroke="none" text-anchor="middle" data-name="postfix">postfix</text>
400+
401+ </g>
402+ </g>
403+ </g>
404+ <g data-name="sqlite">
405+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
406+ <rect x="408.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
407+ <path d="M408.0 8.0 L408.0 39.0" fill="none" data-name="sqlite"></path>
408+ <path d="M466.0 8.0 L466.0 39.0" fill="none" data-name="sqlite"></path>
409+ <ellipse cx="437.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
410+ <path d="M466.0 39.0 L466.0 39.3 L465.9 39.6 L465.7 39.9 L465.4 40.2 L465.1 40.5 L464.7 40.8 L464.3 41.1 L463.7 41.3 L463.1 41.6 L462.5 41.9 L461.7 42.1 L461.0 42.4 L460.1 42.6 L459.2 42.9 L458.3 43.1 L457.2 43.3 L456.2 43.5 L455.1 43.7 L453.9 43.9 L452.7 44.0 L451.5 44.2 L450.2 44.3 L448.9 44.5 L447.6 44.6 L446.2 44.7 L444.9 44.8 L443.5 44.8 L442.0 44.9 L440.6 45.0 L439.2 45.0 L437.7 45.0 L436.3 45.0 L434.8 45.0 L433.4 45.0 L432.0 44.9 L430.5 44.8 L429.1 44.8 L427.8 44.7 L426.4 44.6 L425.1 44.5 L423.8 44.3 L422.5 44.2 L421.3 44.0 L420.1 43.9 L418.9 43.7 L417.8 43.5 L416.8 43.3 L415.7 43.1 L414.8 42.9 L413.9 42.6 L413.0 42.4 L412.3 42.1 L411.5 41.9 L410.9 41.6 L410.3 41.3 L409.7 41.1 L409.3 40.8 L408.9 40.5 L408.6 40.2 L408.3 39.9 L408.1 39.6 L408.0 39.3 L408.0 39.0" data-name="sqlite"></path>
411+ </g>
412+ <g transform="translate(408, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
413+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
414+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
415+
416+ </g>
417+ </g>
418+ </g>
419+ </g>
420+ </g>
421+ </g>
422+ </g>
423+ <g data-name="contributor-2">
424+ <g fill="#eee8d5" stroke="#33322E" data-name="contributor-2">
425+ <circle r="4.0" cx="807.5" cy="493.5" data-name="contributor-2"></circle>
426+ <path d="M807.5 497.5 L807.5 505.5" fill="none" data-name="contributor-2"></path>
427+ <path d="M803.5 501.5 L811.5 501.5" fill="none" data-name="contributor-2"></path>
428+ <path d="M803.5 509.5 L807.5 505.5 L811.5 509.5" fill="none" data-name="contributor-2"></path>
429+ </g>
430+ <g transform="translate(750, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor-2">
431+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor-2">
432+ <text x="49.5" y="13.5" stroke="none" text-anchor="middle" data-name="contributor-2">contributor-2</text>
433+
434+ </g>
435+ </g>
436+ </g>
437+ <g data-name="ayllu-xmpp">
438+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-xmpp">
439+ <rect x="562.0" y="245.0" height="134.0" width="491.0" data-name="ayllu-xmpp"></rect>
440+ <path d="M562.0 276.0 L1053.0 276.0" fill="none" data-name="ayllu-xmpp"></path>
441+ </g>
442+ <g transform="translate(562, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-xmpp">
443+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-xmpp">
444+ <text x="237.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-xmpp">ayllu-xmpp</text>
445+
446+ </g>
447+ </g>
448+ <g transform="translate(562, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-xmpp">
449+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-xmpp">
450+ <g transform="translate(20, 20)" data-name="ayllu-xmpp">
451+ <g data-name="capnp-rpc-server">
452+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
453+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
454+ </g>
455+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
456+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
457+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
458+
459+ </g>
460+ </g>
461+ </g>
462+ <g data-name="chat interface/bot">
463+ <g fill="#fdf6e3" stroke="#33322E" data-name="chat interface/bot">
464+ <rect x="187.0" y="8.0" height="31.0" width="150.0" data-name="chat interface/bot"></rect>
465+ </g>
466+ <g transform="translate(187, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="chat interface/bot">
467+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="chat interface/bot">
468+ <text x="67.0" y="13.5" stroke="none" text-anchor="middle" data-name="chat interface/bot">chat interface/bot</text>
469+
470+ </g>
471+ </g>
472+ </g>
473+ <g data-name="sqlite">
474+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
475+ <rect x="377.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
476+ <path d="M377.0 8.0 L377.0 39.0" fill="none" data-name="sqlite"></path>
477+ <path d="M435.0 8.0 L435.0 39.0" fill="none" data-name="sqlite"></path>
478+ <ellipse cx="406.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
479+ <path d="M435.0 39.0 L435.0 39.3 L434.9 39.6 L434.7 39.9 L434.4 40.2 L434.1 40.5 L433.7 40.8 L433.3 41.1 L432.7 41.3 L432.1 41.6 L431.5 41.9 L430.7 42.1 L430.0 42.4 L429.1 42.6 L428.2 42.9 L427.3 43.1 L426.2 43.3 L425.2 43.5 L424.1 43.7 L422.9 43.9 L421.7 44.0 L420.5 44.2 L419.2 44.3 L417.9 44.5 L416.6 44.6 L415.2 44.7 L413.9 44.8 L412.5 44.8 L411.0 44.9 L409.6 45.0 L408.2 45.0 L406.7 45.0 L405.3 45.0 L403.8 45.0 L402.4 45.0 L401.0 44.9 L399.5 44.8 L398.1 44.8 L396.8 44.7 L395.4 44.6 L394.1 44.5 L392.8 44.3 L391.5 44.2 L390.3 44.0 L389.1 43.9 L387.9 43.7 L386.8 43.5 L385.8 43.3 L384.7 43.1 L383.8 42.9 L382.9 42.6 L382.0 42.4 L381.3 42.1 L380.5 41.9 L379.9 41.6 L379.3 41.3 L378.7 41.1 L378.3 40.8 L377.9 40.5 L377.6 40.2 L377.3 39.9 L377.1 39.6 L377.0 39.3 L377.0 39.0" data-name="sqlite"></path>
480+ </g>
481+ <g transform="translate(377, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
482+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
483+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
484+
485+ </g>
486+ </g>
487+ </g>
488+ </g>
489+ </g>
490+ </g>
491+ </g>
492+ <g data-name="ayllu-build">
493+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-build">
494+ <rect x="1108.5" y="245.0" height="134.0" width="301.0" data-name="ayllu-build"></rect>
495+ <path d="M1108.5 276.0 L1409.5 276.0" fill="none" data-name="ayllu-build"></path>
496+ </g>
497+ <g transform="translate(1108.5, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-build">
498+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-build">
499+ <text x="142.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-build">ayllu-build</text>
500+
501+ </g>
502+ </g>
503+ <g transform="translate(1108.5, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-build">
504+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-build">
505+ <g transform="translate(20, 20)" data-name="ayllu-build">
506+ <g data-name="capnp-rpc-server">
507+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
508+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
509+ </g>
510+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
511+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
512+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
513+
514+ </g>
515+ </g>
516+ </g>
517+ <g data-name="sqlite">
518+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
519+ <rect x="187.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
520+ <path d="M187.0 8.0 L187.0 39.0" fill="none" data-name="sqlite"></path>
521+ <path d="M245.0 8.0 L245.0 39.0" fill="none" data-name="sqlite"></path>
522+ <ellipse cx="216.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
523+ <path d="M245.0 39.0 L245.0 39.3 L244.9 39.6 L244.7 39.9 L244.4 40.2 L244.1 40.5 L243.7 40.8 L243.3 41.1 L242.7 41.3 L242.1 41.6 L241.5 41.9 L240.7 42.1 L240.0 42.4 L239.1 42.6 L238.2 42.9 L237.3 43.1 L236.2 43.3 L235.2 43.5 L234.1 43.7 L232.9 43.9 L231.7 44.0 L230.5 44.2 L229.2 44.3 L227.9 44.5 L226.6 44.6 L225.2 44.7 L223.9 44.8 L222.5 44.8 L221.0 44.9 L219.6 45.0 L218.2 45.0 L216.7 45.0 L215.3 45.0 L213.8 45.0 L212.4 45.0 L211.0 44.9 L209.5 44.8 L208.1 44.8 L206.8 44.7 L205.4 44.6 L204.1 44.5 L202.8 44.3 L201.5 44.2 L200.3 44.0 L199.1 43.9 L197.9 43.7 L196.8 43.5 L195.8 43.3 L194.7 43.1 L193.8 42.9 L192.9 42.6 L192.0 42.4 L191.3 42.1 L190.5 41.9 L189.9 41.6 L189.3 41.3 L188.7 41.1 L188.3 40.8 L187.9 40.5 L187.6 40.2 L187.3 39.9 L187.1 39.6 L187.0 39.3 L187.0 39.0" data-name="sqlite"></path>
524+ </g>
525+ <g transform="translate(187, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
526+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
527+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
528+
529+ </g>
530+ </g>
531+ </g>
532+ </g>
533+ </g>
534+ </g>
535+ </g>
536+ <g data-name="ayllu-shell">
537+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-shell">
538+ <rect x="1612.0" y="296.5" height="31.0" width="94.0" data-name="ayllu-shell"></rect>
539+ </g>
540+ <g transform="translate(1612, 296.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-shell">
541+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-shell">
542+ <text x="39.0" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-shell">ayllu-shell</text>
543+
544+ </g>
545+ </g>
546+ </g>
547+ <g data-name="contributor">
548+ <g fill="#eee8d5" stroke="#33322E" data-name="contributor">
549+ <circle r="4.0" cx="1659.0" cy="493.5" data-name="contributor"></circle>
550+ <path d="M1659.0 497.5 L1659.0 505.5" fill="none" data-name="contributor"></path>
551+ <path d="M1655.0 501.5 L1663.0 501.5" fill="none" data-name="contributor"></path>
552+ <path d="M1655.0 509.5 L1659.0 505.5 L1663.0 509.5" fill="none" data-name="contributor"></path>
553+ </g>
554+ <g transform="translate(1608.5, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor">
555+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor">
556+ <text x="42.5" y="13.5" stroke="none" text-anchor="middle" data-name="contributor">contributor</text>
557+
558+ </g>
559+ </g>
560+ </g>
561+ <g data-name="ayllu-cli">
562+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-cli">
563+ <rect x="1746.0" y="296.5" height="31.0" width="75.0" data-name="ayllu-cli"></rect>
564+ </g>
565+ <g transform="translate(1746, 296.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-cli">
566+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-cli">
567+ <text x="29.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-cli">ayllu-cli</text>
568+
569+ </g>
570+ </g>
571+ </g>
572+ <g data-name="admin">
573+ <g fill="#eee8d5" stroke="#33322E" data-name="admin">
574+ <circle r="4.0" cx="1783.5" cy="493.5" data-name="admin"></circle>
575+ <path d="M1783.5 497.5 L1783.5 505.5" fill="none" data-name="admin"></path>
576+ <path d="M1779.5 501.5 L1787.5 501.5" fill="none" data-name="admin"></path>
577+ <path d="M1779.5 509.5 L1783.5 505.5 L1787.5 509.5" fill="none" data-name="admin"></path>
578+ </g>
579+ <g transform="translate(1752, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="admin">
580+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="admin">
581+ <text x="23.5" y="13.5" stroke="none" text-anchor="middle" data-name="admin">admin</text>
582+
583+ </g>
584+ </g>
585+ </g>
586+ <g data-name="ayllu-builder-1">
587+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-1">
588+ <rect x="909.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-1"></rect>
589+ <path d="M909.5 450.0 L1102.5 450.0" fill="none" data-name="ayllu-builder-1"></path>
590+ </g>
591+ <g transform="translate(909.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-1">
592+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-1">
593+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-1">ayllu-builder-1</text>
594+
595+ </g>
596+ </g>
597+ <g transform="translate(909.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-1">
598+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-1">
599+ <g transform="translate(20, 20)" data-name="ayllu-builder-1">
600+ <g data-name="qemu-x86_64">
601+ <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-x86_64">
602+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="qemu-x86_64"></rect>
603+ <path d="M0.0 31.0 L0.0 0.0 L113.1 0.0 L113.1 31.0 Z" data-name="qemu-x86_64"></path>
604+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="qemu-x86_64"></path>
605+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="qemu-x86_64"></path>
606+ </g>
607+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
608+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
609+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">qemu-x86_64</text>
610+
611+ </g>
612+ </g>
613+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
614+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
615+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">capnp-rpc-server</text>
616+
617+ </g>
618+ </g>
619+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
620+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
621+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">executor</text>
622+
623+ </g>
624+ </g>
625+ </g>
626+ </g>
627+ </g>
628+ </g>
629+ </g>
630+ <g data-name="ayllu-builder-2">
631+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-2">
632+ <rect x="1142.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-2"></rect>
633+ <path d="M1142.5 450.0 L1335.5 450.0" fill="none" data-name="ayllu-builder-2"></path>
634+ </g>
635+ <g transform="translate(1142.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-2">
636+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-2">
637+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-2">ayllu-builder-2</text>
638+
639+ </g>
640+ </g>
641+ <g transform="translate(1142.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-2">
642+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-2">
643+ <g transform="translate(20, 20)" data-name="ayllu-builder-2">
644+ <g data-name="qemu-aarch64">
645+ <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-aarch64">
646+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="qemu-aarch64"></rect>
647+ <path d="M0.0 31.0 L0.0 0.0 L118.9 0.0 L118.9 31.0 Z" data-name="qemu-aarch64"></path>
648+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="qemu-aarch64"></path>
649+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="qemu-aarch64"></path>
650+ </g>
651+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
652+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
653+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">qemu-aarch64</text>
654+
655+ </g>
656+ </g>
657+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
658+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
659+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">capnp-rpc-server</text>
660+
661+ </g>
662+ </g>
663+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
664+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
665+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">exectuor</text>
666+
667+ </g>
668+ </g>
669+ </g>
670+ </g>
671+ </g>
672+ </g>
673+ </g>
674+ <g data-name="ayllu-builder-n">
675+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-n">
676+ <rect x="1375.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-n"></rect>
677+ <path d="M1375.5 450.0 L1568.5 450.0" fill="none" data-name="ayllu-builder-n"></path>
678+ </g>
679+ <g transform="translate(1375.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-n">
680+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-n">
681+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-n">ayllu-builder-n</text>
682+
683+ </g>
684+ </g>
685+ <g transform="translate(1375.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-n">
686+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-n">
687+ <g transform="translate(20, 20)" data-name="ayllu-builder-n">
688+ <g data-name="lxc">
689+ <g fill="#fdf6e3" stroke="#33322E" data-name="lxc">
690+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="lxc"></rect>
691+ <path d="M0.0 31.0 L0.0 0.0 L35.2 0.0 L35.2 31.0 Z" data-name="lxc"></path>
692+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="lxc"></path>
693+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="lxc"></path>
694+ </g>
695+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
696+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
697+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">lxc</text>
698+
699+ </g>
700+ </g>
701+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
702+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
703+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">capnp-rpc-server</text>
704+
705+ </g>
706+ </g>
707+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
708+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
709+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">executor</text>
710+
711+ </g>
712+ </g>
713+ </g>
714+ </g>
715+ </g>
716+ </g>
717+ </g>
718+ </g>
719+ </g>
720+ </g>
721+ </g>
722+ </svg>
723\ No newline at end of file
724 diff --git a/www/public/assets/computer.png b/www/public/assets/computer.png
725deleted file mode 100644
726index dbe2651..0000000
727 Binary files a/www/public/assets/computer.png and /dev/null differ
728 diff --git a/www/public/assets/crescent.png b/www/public/assets/crescent.png
729deleted file mode 100644
730index c46dc91..0000000
731 Binary files a/www/public/assets/crescent.png and /dev/null differ
732 diff --git a/www/public/assets/crescent.svg b/www/public/assets/crescent.svg
733deleted file mode 100644
734index 51596eb..0000000
735--- a/www/public/assets/crescent.svg
736+++ /dev/null
737 @@ -1,12 +0,0 @@
738- <svg id="emoji" viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg">
739- <g id="color">
740- <path fill="#FCEA2B" stroke="none" d="M7.3634,42.4095c4.5525,6.1703,11.874,10.1726,20.1303,10.1726c13.8071,0,25-11.1929,25-25 c0-8.5226-4.2646-16.0492-10.7763-20.5621c13.0383,2.8385,22.7812,14.4426,22.7812,28.3317c0,16.0163-12.9837,29-29,29 C21.9109,64.3517,10.5097,55.0229,7.3634,42.4095z"/>
741- <path fill="#F1B31C" stroke="none" d="M45.8373,9.2108c8.25,4.25,16.1946,11.8724,16.1946,24.6742c0,15.4494-12.5242,27.9735-27.9735,27.9735 c-9.2431,0-19.7524-4.8353-24.294-15.5436c0,0,4.3805,18.6568,25.7189,18.665c19.327,0.0074,28.0419-20.6218,28.0419-20.6218 C70.033,12.3815,45.8373,9.2108,45.8373,9.2108z"/>
742- </g>
743- <g id="hair"/>
744- <g id="skin"/>
745- <g id="skin-shadow"/>
746- <g id="line">
747- <path fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M7.3634,42.4095c4.5525,6.1703,11.874,10.1726,20.1303,10.1726c13.8071,0,25-11.1929,25-25 c0-8.5226-4.2646-16.0492-10.7763-20.5621c13.0383,2.8385,22.7812,14.4426,22.7812,28.3317c0,16.0163-12.9837,29-29,29 C21.9109,64.3517,10.5097,55.0229,7.3634,42.4095z"/>
748- </g>
749- </svg>
750 diff --git a/www/public/assets/crescent_logo.png b/www/public/assets/crescent_logo.png
751deleted file mode 100644
752index c3aef0d..0000000
753 Binary files a/www/public/assets/crescent_logo.png and /dev/null differ
754 diff --git a/www/public/assets/crescent_logo.svg b/www/public/assets/crescent_logo.svg
755deleted file mode 100644
756index b766584..0000000
757--- a/www/public/assets/crescent_logo.svg
758+++ /dev/null
759 @@ -1,192 +0,0 @@
760- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
761- <svg
762- id="emoji"
763- viewBox="0 0 75 80"
764- version="1.1"
765- sodipodi:docname="ayllu_logo.svg"
766- width="75"
767- height="80"
768- inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
769- inkscape:export-filename="ayllu_logo.png"
770- inkscape:export-xdpi="92.290512"
771- inkscape:export-ydpi="92.290512"
772- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
773- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
774- xmlns="http://www.w3.org/2000/svg"
775- xmlns:svg="http://www.w3.org/2000/svg"
776- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
777- xmlns:cc="http://creativecommons.org/ns#"
778- xmlns:dc="http://purl.org/dc/elements/1.1/">
779- <title
780- id="title8">Ayllu Logo</title>
781- <defs
782- id="defs3">
783- <pattern
784- patternUnits="userSpaceOnUse"
785- width="100"
786- height="100"
787- id="Gingham"
788- preserveAspectRatio="xMidYMid"
789- patternTransform="scale(0.5,0.5)"
790- style="fill:#0000ff">
791- <rect
792- style="fill-opacity:0.5;stroke:none"
793- id="rect3"
794- width="50"
795- height="50"
796- x="50"
797- y="0" />
798- <rect
799- style="stroke:none"
800- id="rect4"
801- width="50"
802- height="50"
803- x="50"
804- y="50" />
805- <rect
806- style="fill-opacity:0.5;stroke:none"
807- id="rect5"
808- width="50"
809- height="50"
810- x="0"
811- y="50" />
812- </pattern>
813- </defs>
814- <sodipodi:namedview
815- id="namedview3"
816- pagecolor="#ffffff"
817- bordercolor="#999999"
818- borderopacity="1"
819- inkscape:showpageshadow="0"
820- inkscape:pageopacity="0"
821- inkscape:pagecheckerboard="0"
822- inkscape:deskcolor="#d1d1d1"
823- inkscape:zoom="8.25"
824- inkscape:cx="5.1515152"
825- inkscape:cy="36.424242"
826- inkscape:window-width="3826"
827- inkscape:window-height="1029"
828- inkscape:window-x="0"
829- inkscape:window-y="0"
830- inkscape:window-maximized="1"
831- inkscape:current-layer="emoji"
832- showgrid="true">
833- <inkscape:grid
834- id="grid8"
835- units="px"
836- originx="0"
837- originy="0"
838- spacingx="1"
839- spacingy="1"
840- empcolor="#0099e5"
841- empopacity="0.30196078"
842- color="#0099e5"
843- opacity="0.14901961"
844- empspacing="5"
845- dotted="false"
846- gridanglex="30"
847- gridanglez="30"
848- visible="true" />
849- </sodipodi:namedview>
850- <g
851- inkscape:groupmode="layer"
852- id="layer7"
853- inkscape:label="bg">
854- <rect
855- style="fill:#000000;fill-opacity:1;stroke-width:3.26929"
856- id="rect14"
857- width="74.891571"
858- height="79.840912"
859- x="0.029829545"
860- y="0.18181819"
861- rx="4.2495718"
862- ry="4.1789107" />
863- </g>
864- <g
865- inkscape:groupmode="layer"
866- id="layer1"
867- inkscape:label="bg 1">
868- <g
869- inkscape:groupmode="layer"
870- id="layer7-3"
871- inkscape:label="bg"
872- transform="translate(0.10227227,0.03882594)">
873- <rect
874- style="fill:#fcea2b;fill-opacity:1;stroke-width:3.10583"
875- id="rect14-6"
876- width="71.146996"
877- height="75.848869"
878- x="1.9021188"
879- y="2.1778409"
880- rx="4.0370932"
881- ry="3.9699652" />
882- </g>
883- </g>
884- <g
885- inkscape:groupmode="layer"
886- id="layer4"
887- inkscape:label="text"
888- transform="translate(-1.2556819,-2.7045453)"
889- style="display:inline" />
890- <g
891- id="g8"
892- transform="matrix(1.0086293,0,0,0.99990106,-0.07783972,3.322434)">
893- <g
894- id="color"
895- transform="translate(1.3252841,0.98390174)"
896- style="display:inline"
897- inkscape:label="moon-shade">
898- <path
899- fill="#fcea2b"
900- stroke="none"
901- d="m 7.3634,42.4095 c 4.5525,6.1703 11.874,10.1726 20.1303,10.1726 13.8071,0 25,-11.1929 25,-25 0,-8.5226 -4.2646,-16.0492 -10.7763,-20.5621 13.0383,2.8385 22.7812,14.4426 22.7812,28.3317 0,16.0163 -12.9837,29 -29,29 -13.5877,0 -24.9889,-9.3288 -28.1352,-21.9422 z"
902- id="path1" />
903- <path
904- fill="#f1b31c"
905- stroke="none"
906- d="m 45.8373,9.2108 c 8.25,4.25 16.1946,11.8724 16.1946,24.6742 0,15.4494 -12.5242,27.9735 -27.9735,27.9735 -9.2431,0 -19.7524,-4.8353 -24.294,-15.5436 0,0 4.3805,18.6568 25.7189,18.665 C 54.8103,64.9873 63.5252,44.3581 63.5252,44.3581 70.033,12.3815 45.8373,9.2108 45.8373,9.2108 Z"
907- id="path2" />
908- </g>
909- <g
910- id="line"
911- transform="translate(1.3252841,0.98390174)"
912- inkscape:label="moon-line">
913- <path
914- fill="none"
915- stroke="#000000"
916- stroke-linecap="round"
917- stroke-linejoin="round"
918- stroke-miterlimit="10"
919- stroke-width="2"
920- d="m 7.3634,42.4095 c 4.5525,6.1703 11.874,10.1726 20.1303,10.1726 13.8071,0 25,-11.1929 25,-25 0,-8.5226 -4.2646,-16.0492 -10.7763,-20.5621 13.0383,2.8385 22.7812,14.4426 22.7812,28.3317 0,16.0163 -12.9837,29 -29,29 -13.5877,0 -24.9889,-9.3288 -28.1352,-21.9422 z"
921- id="path3" />
922- </g>
923- </g>
924- <metadata
925- id="metadata8">
926- <rdf:RDF>
927- <cc:Work
928- rdf:about="">
929- <dc:title>Ayllu Logo</dc:title>
930- <cc:license
931- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
932- <dc:description>Originally created by Vanessa Boutzikoudi @ https://openmoji.org/library/emoji-1F319/</dc:description>
933- </cc:Work>
934- <cc:License
935- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
936- <cc:permits
937- rdf:resource="http://creativecommons.org/ns#Reproduction" />
938- <cc:permits
939- rdf:resource="http://creativecommons.org/ns#Distribution" />
940- <cc:requires
941- rdf:resource="http://creativecommons.org/ns#Notice" />
942- <cc:requires
943- rdf:resource="http://creativecommons.org/ns#Attribution" />
944- <cc:permits
945- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
946- <cc:requires
947- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
948- </cc:License>
949- </rdf:RDF>
950- </metadata>
951- </svg>
952 diff --git a/www/public/docs/architecture/index.html b/www/public/docs/architecture/index.html
953new file mode 100644
954index 0000000..0e4ba41
955--- /dev/null
956+++ b/www/public/docs/architecture/index.html
957 @@ -0,0 +1,76 @@
958+ <!doctype html>
959+ <html lang="en">
960+ <head>
961+ <meta charset="utf-8" />
962+ <link rel="stylesheet" href="/main.css" />
963+ <link href="/assets/ayllu_logo.svg" rel="icon" type="image/svg+xml" />
964+ <link
965+ href="/assets/ayllu_logo.png"
966+ rel="icon"
967+ sizes="any"
968+ type="image/png"
969+ />
970+ <title>Ayllu</title>
971+ </head>
972+ <nav>
973+ <ul>
974+ <li>
975+ <a href="/">
976+ <img class="logo" src="/assets/ayllu_logo.png" />
977+ </a>
978+ </li>
979+ </ul>
980+ <ul>
981+ <li><a href="https://ayllu-forge.org/browse">browse</a></li>
982+ <li><a href="/docs">docs</a></li>
983+ </ul>
984+ </nav>
985+ <body class="container">
986+ <div class="wrapper">
987+ <main class="page-body">
988+
989+
990+ <div class="documentation">
991+ <div class="side-panel">
992+
993+ <ul>
994+
995+ <li class="active">
996+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;architecture&#x2F;">Architecture</a>
997+ </li>
998+
999+ <li class="">
1000+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;developers&#x2F;">Developers</a>
1001+ </li>
1002+
1003+ <li class="">
1004+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;installation&#x2F;">Installation</a>
1005+ </li>
1006+
1007+ <li class="">
1008+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;faq&#x2F;">FAQ</a>
1009+ </li>
1010+
1011+ </ul>
1012+ </div>
1013+ <div class="doc-content">
1014+ <h1>Architecture</h1>
1015+ <p><strong>Ayllu is a new software project and it's design is evolving.</strong> </p>
1016+ <p>It's basic architecture is that of a single binary providing a web interface to
1017+ browse and interact with Git repositories as well as an RPC server based on
1018+ <a href="https://capnproto.org/">Cap'n Proto</a> with an embedded client. The RPC server
1019+ running in the core Ayllu binary is called the <code>job_server</code> and it provides an
1020+ interface to interact with Ayllu for administrators. Much of the functionality
1021+ of Ayllu is implemented via <code>RPC extensions</code> which are minimal binaries that
1022+ are used to extend the core functionality of Ayllu.</p>
1023+ <p>The current architecture of Ayllu is depicted below:</p>
1024+ <img class="diagram" src="/assets/architecture.svg" />
1025+
1026+ </div>
1027+ </div>
1028+
1029+ </main>
1030+ <footer class="page-footer"> 2023, <a href="/projects/ayllu/blob/main/ATTRIBUTIONS.md">attributions</a> </footer>
1031+ </div>
1032+ </body>
1033+ </html>
1034 diff --git a/www/public/docs/developers/index.html b/www/public/docs/developers/index.html
1035new file mode 100644
1036index 0000000..413d217
1037--- /dev/null
1038+++ b/www/public/docs/developers/index.html
1039 @@ -0,0 +1,80 @@
1040+ <!doctype html>
1041+ <html lang="en">
1042+ <head>
1043+ <meta charset="utf-8" />
1044+ <link rel="stylesheet" href="/main.css" />
1045+ <link href="/assets/ayllu_logo.svg" rel="icon" type="image/svg+xml" />
1046+ <link
1047+ href="/assets/ayllu_logo.png"
1048+ rel="icon"
1049+ sizes="any"
1050+ type="image/png"
1051+ />
1052+ <title>Ayllu</title>
1053+ </head>
1054+ <nav>
1055+ <ul>
1056+ <li>
1057+ <a href="/">
1058+ <img class="logo" src="/assets/ayllu_logo.png" />
1059+ </a>
1060+ </li>
1061+ </ul>
1062+ <ul>
1063+ <li><a href="https://ayllu-forge.org/browse">browse</a></li>
1064+ <li><a href="/docs">docs</a></li>
1065+ </ul>
1066+ </nav>
1067+ <body class="container">
1068+ <div class="wrapper">
1069+ <main class="page-body">
1070+
1071+
1072+ <div class="documentation">
1073+ <div class="side-panel">
1074+
1075+ <ul>
1076+
1077+ <li class="">
1078+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;architecture&#x2F;">Architecture</a>
1079+ </li>
1080+
1081+ <li class="active">
1082+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;developers&#x2F;">Developers</a>
1083+ </li>
1084+
1085+ <li class="">
1086+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;installation&#x2F;">Installation</a>
1087+ </li>
1088+
1089+ <li class="">
1090+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;faq&#x2F;">FAQ</a>
1091+ </li>
1092+
1093+ </ul>
1094+ </div>
1095+ <div class="doc-content">
1096+ <h1>Developers</h1>
1097+ <h1 id="ayllu-forge-org">ayllu-forge.org</h1>
1098+ <p>The <a href="https://ayllu-forge.org">Ayllu website</a> and project documentation are built
1099+ together with <a href="https://www.getzola.org/">Zola</a> which you must install. After
1100+ which you can startup a local preview of the site with the following commands:</p>
1101+ <pre data-lang="sh" class="language-sh "><code class="language-sh" data-lang="sh">cd www &amp;&amp; zola serve
1102+ </code></pre>
1103+ <p>The generated content are hosted directly from Ayllu and you simply need to
1104+ build and commit the generated code directly into the repository.</p>
1105+ <pre data-lang="sh" class="language-sh "><code class="language-sh" data-lang="sh">cd www &amp;&amp; zola build
1106+ </code></pre>
1107+ <h2 id="diagrams">Diagrams</h2>
1108+ <p>Diagrams are built with <a href="https://www.nomnoml.com/">nomnoml</a> and their SVG
1109+ content contain the source for generating the diagrams. Simply open one of the
1110+ source SVGs up and copy-paste it to the editor of the nomnoml website.</p>
1111+
1112+ </div>
1113+ </div>
1114+
1115+ </main>
1116+ <footer class="page-footer"> 2023, <a href="/projects/ayllu/blob/main/ATTRIBUTIONS.md">attributions</a> </footer>
1117+ </div>
1118+ </body>
1119+ </html>
1120 diff --git a/www/public/docs/faq/index.html b/www/public/docs/faq/index.html
1121index a97f054..cc95153 100644
1122--- a/www/public/docs/faq/index.html
1123+++ b/www/public/docs/faq/index.html
1124 @@ -22,7 +22,7 @@
1125 </ul>
1126 <ul>
1127 <li><a href="https://ayllu-forge.org/browse">browse</a></li>
1128- <!--<li><a href="/docs">docs</a></li> -->
1129+ <li><a href="/docs">docs</a></li>
1130 </ul>
1131 </nav>
1132 <body class="container">
1133 @@ -36,6 +36,14 @@
1134 <ul>
1135
1136 <li class="">
1137+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;architecture&#x2F;">Architecture</a>
1138+ </li>
1139+
1140+ <li class="">
1141+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;developers&#x2F;">Developers</a>
1142+ </li>
1143+
1144+ <li class="">
1145 <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;installation&#x2F;">Installation</a>
1146 </li>
1147
1148 @@ -48,7 +56,9 @@
1149 <div class="doc-content">
1150 <h1>FAQ</h1>
1151 <h5 id="what-does-ayllu-mean">What Does &quot;Ayllu&quot; Mean?</h5>
1152- <p>The name <a href="https://en.wikipedia.org/wiki/Ayllu">Ayllu</a> [IPA] <em>/ˈajʎu/</em>, or <em>eye-joo</em> is the Quechua word for the traditional form of community in the Andes particularly around in Bolivia and Peru.</p>
1153+ <p>The name <a href="https://en.wikipedia.org/wiki/Ayllu">Ayllu</a> <em>/ˈajʎu/</em>, <em>eye-joo</em> is
1154+ the Quechua word for the traditional form of a community in the Andes region
1155+ of South America, particularly in Bolivia and Peru.</p>
1156 <h5 id="do-you-provide-hosting">Do You Provide Hosting?</h5>
1157 <p>Not currently. If there was enough interest the project might offer hosted
1158 environments as a way to sustain it's development.</p>
1159 diff --git a/www/public/docs/index.html b/www/public/docs/index.html
1160index fa44605..6566d04 100644
1161--- a/www/public/docs/index.html
1162+++ b/www/public/docs/index.html
1163 @@ -22,7 +22,7 @@
1164 </ul>
1165 <ul>
1166 <li><a href="https://ayllu-forge.org/browse">browse</a></li>
1167- <!--<li><a href="/docs">docs</a></li> -->
1168+ <li><a href="/docs">docs</a></li>
1169 </ul>
1170 </nav>
1171 <body class="container">
1172 @@ -35,6 +35,14 @@
1173 <ul>
1174
1175 <li class="">
1176+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;architecture&#x2F;">Architecture</a>
1177+ </li>
1178+
1179+ <li class="">
1180+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;developers&#x2F;">Developers</a>
1181+ </li>
1182+
1183+ <li class="">
1184 <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;installation&#x2F;">Installation</a>
1185 </li>
1186
1187 @@ -46,6 +54,8 @@
1188 </div>
1189 <div class="doc-content">
1190 <h1 id="documentation">Documentation</h1>
1191+ <p>Welcome to the Ayllu documentation 📖, this is section serves as an
1192+ authoritative reference on all things related to the Ayllu code forge!</p>
1193
1194 </div>
1195 </div>
1196 diff --git a/www/public/docs/installation/index.html b/www/public/docs/installation/index.html
1197index 78a9587..b563e6b 100644
1198--- a/www/public/docs/installation/index.html
1199+++ b/www/public/docs/installation/index.html
1200 @@ -22,7 +22,7 @@
1201 </ul>
1202 <ul>
1203 <li><a href="https://ayllu-forge.org/browse">browse</a></li>
1204- <!--<li><a href="/docs">docs</a></li> -->
1205+ <li><a href="/docs">docs</a></li>
1206 </ul>
1207 </nav>
1208 <body class="container">
1209 @@ -35,6 +35,14 @@
1210
1211 <ul>
1212
1213+ <li class="">
1214+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;architecture&#x2F;">Architecture</a>
1215+ </li>
1216+
1217+ <li class="">
1218+ <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;developers&#x2F;">Developers</a>
1219+ </li>
1220+
1221 <li class="active">
1222 <a href="https:&#x2F;&#x2F;ayllu-forge.org&#x2F;docs&#x2F;installation&#x2F;">Installation</a>
1223 </li>
1224 @@ -47,8 +55,7 @@
1225 </div>
1226 <div class="doc-content">
1227 <h1>Installation</h1>
1228- <h3 id="installation">Installation</h3>
1229- <h4 id="from-source">From Source</h4>
1230+ <p>TODO</p>
1231
1232 </div>
1233 </div>
1234 diff --git a/www/public/index.html b/www/public/index.html
1235index 696b663..70e52f1 100644
1236--- a/www/public/index.html
1237+++ b/www/public/index.html
1238 @@ -22,7 +22,7 @@
1239 </ul>
1240 <ul>
1241 <li><a href="https://ayllu-forge.org/browse">browse</a></li>
1242- <!--<li><a href="/docs">docs</a></li> -->
1243+ <li><a href="/docs">docs</a></li>
1244 </ul>
1245 </nav>
1246 <body class="container">
1247 @@ -35,8 +35,8 @@
1248 <p>Ayllu is a lightweight code forge designed to enable individuals and
1249 community projects to develop software in collaboration across open internet
1250 standards.</p>
1251- <a href="https://ayllu-forge.org/projects/ayllu/refs">
1252- <button> Latest Release: 0.2.1 </button>
1253+ <a href="https://ayllu-forge.org/projects/ayllu">
1254+ <button> Source </button>
1255 </a>
1256 </div>
1257 <figure>
1258 diff --git a/www/public/main.css b/www/public/main.css
1259index bc04568..e6248c3 100644
1260--- a/www/public/main.css
1261+++ b/www/public/main.css
1262 @@ -4,4 +4,4 @@
1263 *
1264 * Slim version example
1265 * You can export only the modules you need
1266- */:root{--font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--line-height: 1.5;--font-weight: 400;--font-size: 16px;--border-radius: 0.25rem;--border-width: 1px;--outline-width: 3px;--spacing: 1rem;--typography-spacing-vertical: 1.5rem;--block-spacing-vertical: calc(var(--spacing) * 2);--block-spacing-horizontal: var(--spacing);--grid-spacing-vertical: 0;--grid-spacing-horizontal: var(--spacing);--form-element-spacing-vertical: 0.75rem;--form-element-spacing-horizontal: 1rem;--nav-element-spacing-vertical: 1rem;--nav-element-spacing-horizontal: 0.5rem;--nav-link-spacing-vertical: 0.5rem;--nav-link-spacing-horizontal: 0.5rem;--form-label-font-weight: var(--font-weight);--transition: 0.2s ease-in-out;--modal-overlay-backdrop-filter: blur(0.25rem)}@media (min-width: 576px){:root{--font-size: 17px}}@media (min-width: 768px){:root{--font-size: 18px}}@media (min-width: 1220px){:root{--font-size: 19px}}@media (min-width: 1700px){:root{--font-size: 20px}}a{--text-decoration: none}a.secondary,a.contrast{--text-decoration: underline}small{--font-size: 0.875em}h1,h2,h3,h4,h5,h6{--font-weight: 700}h1{--font-size: 2rem;--typography-spacing-vertical: 3rem}h2{--font-size: 1.75rem;--typography-spacing-vertical: 2.625rem}h3{--font-size: 1.5rem;--typography-spacing-vertical: 2.25rem}h4{--font-size: 1.25rem;--typography-spacing-vertical: 1.874rem}h5{--font-size: 1.125rem;--typography-spacing-vertical: 1.6875rem}[type=checkbox],[type=radio]{--border-width: 2px}[type=checkbox][role=switch]{--border-width: 3px}thead th,thead td,tfoot th,tfoot td{--border-width: 3px}:not(thead,tfoot)>*>td{--font-size: 0.875em}pre,code,kbd,samp{--font-family: "Menlo", "Consolas", "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}kbd{--font-weight: bolder}[data-theme=light],:root:not([data-theme=dark]){--background-color: #fff;--color: #415462;--h1-color: #1b2832;--h2-color: #24333e;--h3-color: #2c3d49;--h4-color: #374956;--h5-color: #415462;--h6-color: #4d606d;--muted-color: #73828c;--muted-border-color: #edf0f3;--primary: #1095c1;--primary-hover: #08769b;--primary-focus: rgba(16,149,193,.125);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #415462;--secondary-focus: rgba(89,107,120,.125);--secondary-inverse: #fff;--contrast: #1b2832;--contrast-hover: #000;--contrast-focus: rgba(89,107,120,.125);--contrast-inverse: #fff;--mark-background-color: #fff2ca;--mark-color: #543a26;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: transparent;--form-element-border-color: #a2afb9;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: transparent;--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #d5dce2;--form-element-disabled-border-color: #a2afb9;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #c62828;--form-element-invalid-active-border-color: #d32f2f;--form-element-invalid-focus-color: rgba(211,47,47,.125);--form-element-valid-border-color: #388e3c;--form-element-valid-active-border-color: #43a047;--form-element-valid-focus-color: rgba(67,160,71,.125);--switch-background-color: #bbc6ce;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #d5dce2;--range-active-border-color: #bbc6ce;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: #f6f8f9;--code-background-color: #edf0f3;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #b34d80;--code-property-color: #3d888f;--code-value-color: #986;--code-comment-color: #a2afb9;--accordion-border-color: var(--muted-border-color);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: var(--background-color);--card-border-color: var(--muted-border-color);--card-box-shadow: .0145rem .029rem .174rem rgba(27,40,50,.01698), .0335rem .067rem .402rem rgba(27,40,50,.024), .0625rem .125rem .75rem rgba(27,40,50,.03), .1125rem .225rem 1.35rem rgba(27,40,50,.036), .2085rem .417rem 2.502rem rgba(27,40,50,.04302), .5rem 1rem 6rem rgba(27,40,50,.06), 0 0 0 0.0625rem rgba(27,40,50,.015);--card-sectionning-background-color: #fbfbfc;--dropdown-background-color: #fbfbfc;--dropdown-border-color: #e1e6eb;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: #edf0f3;--modal-overlay-background-color: rgba(213,220,226,.7);--progress-background-color: #d5dce2;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:light}@media only screen and (prefers-color-scheme: dark){:root:not([data-theme]){--background-color: #11191f;--color: #bbc6ce;--h1-color: #edf0f3;--h2-color: #e1e6eb;--h3-color: #d5dce2;--h4-color: #c8d1d8;--h5-color: #bbc6ce;--h6-color: #afbbc4;--muted-color: #73828c;--muted-border-color: #1f2d38;--primary: #1095c1;--primary-hover: #1ab3e6;--primary-focus: rgba(16,149,193,.25);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #73828c;--secondary-focus: rgba(115,130,140,.25);--secondary-inverse: #fff;--contrast: #edf0f3;--contrast-hover: #fff;--contrast-focus: rgba(115,130,140,.25);--contrast-inverse: #000;--mark-background-color: #d1c284;--mark-color: #11191f;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: #11191f;--form-element-border-color: #374956;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: var(--form-element-background-color);--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #2c3d49;--form-element-disabled-border-color: #415462;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #b71c1c;--form-element-invalid-active-border-color: #c62828;--form-element-invalid-focus-color: rgba(198,40,40,.25);--form-element-valid-border-color: #2e7d32;--form-element-valid-active-border-color: #388e3c;--form-element-valid-focus-color: rgba(56,142,60,.25);--switch-background-color: #374956;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #24333e;--range-active-border-color: #2c3d49;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: rgba(115,130,140,.05);--code-background-color: #18232c;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #a65980;--code-property-color: #599fa6;--code-value-color: #8c8473;--code-comment-color: #4d606d;--accordion-border-color: var(--muted-border-color);--accordion-active-summary-color: var(--primary);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: #141e26;--card-border-color: var(--card-background-color);--card-box-shadow: .0145rem .029rem .174rem rgba(0,0,0,.01698), .0335rem .067rem .402rem rgba(0,0,0,.024), .0625rem .125rem .75rem rgba(0,0,0,.03), .1125rem .225rem 1.35rem rgba(0,0,0,.036), .2085rem .417rem 2.502rem rgba(0,0,0,.04302), .5rem 1rem 6rem rgba(0,0,0,.06), 0 0 0 0.0625rem rgba(0,0,0,.015);--card-sectionning-background-color: #18232c;--dropdown-background-color: #1b2832;--dropdown-border-color: #24333e;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: rgba(36,51,62,.75);--modal-overlay-background-color: rgba(36,51,62,.8);--progress-background-color: #24333e;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}}[data-theme=dark]{--background-color: #11191f;--color: #bbc6ce;--h1-color: #edf0f3;--h2-color: #e1e6eb;--h3-color: #d5dce2;--h4-color: #c8d1d8;--h5-color: #bbc6ce;--h6-color: #afbbc4;--muted-color: #73828c;--muted-border-color: #1f2d38;--primary: #1095c1;--primary-hover: #1ab3e6;--primary-focus: rgba(16,149,193,.25);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #73828c;--secondary-focus: rgba(115,130,140,.25);--secondary-inverse: #fff;--contrast: #edf0f3;--contrast-hover: #fff;--contrast-focus: rgba(115,130,140,.25);--contrast-inverse: #000;--mark-background-color: #d1c284;--mark-color: #11191f;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: #11191f;--form-element-border-color: #374956;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: var(--form-element-background-color);--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #2c3d49;--form-element-disabled-border-color: #415462;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #b71c1c;--form-element-invalid-active-border-color: #c62828;--form-element-invalid-focus-color: rgba(198,40,40,.25);--form-element-valid-border-color: #2e7d32;--form-element-valid-active-border-color: #388e3c;--form-element-valid-focus-color: rgba(56,142,60,.25);--switch-background-color: #374956;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #24333e;--range-active-border-color: #2c3d49;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: rgba(115,130,140,.05);--code-background-color: #18232c;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #a65980;--code-property-color: #599fa6;--code-value-color: #8c8473;--code-comment-color: #4d606d;--accordion-border-color: var(--muted-border-color);--accordion-active-summary-color: var(--primary);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: #141e26;--card-border-color: var(--card-background-color);--card-box-shadow: .0145rem .029rem .174rem rgba(0,0,0,.01698), .0335rem .067rem .402rem rgba(0,0,0,.024), .0625rem .125rem .75rem rgba(0,0,0,.03), .1125rem .225rem 1.35rem rgba(0,0,0,.036), .2085rem .417rem 2.502rem rgba(0,0,0,.04302), .5rem 1rem 6rem rgba(0,0,0,.06), 0 0 0 0.0625rem rgba(0,0,0,.015);--card-sectionning-background-color: #18232c;--dropdown-background-color: #1b2832;--dropdown-border-color: #24333e;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: rgba(36,51,62,.75);--modal-overlay-background-color: rgba(36,51,62,.8);--progress-background-color: #24333e;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}progress,[type=checkbox],[type=radio],[type=range]{accent-color:var(--primary)}*,*::before,*::after{box-sizing:border-box;background-repeat:no-repeat}::before,::after{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--background-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);line-height:var(--line-height);font-family:var(--font-family);text-rendering:optimizeLegibility;overflow-wrap:break-word;cursor:default;tab-size:4}main{display:block}body{width:100%;margin:0}body>header,body>main,body>footer{width:100%;margin-right:auto;margin-left:auto;padding:var(--block-spacing-vertical) 0}.container,.container-fluid{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--spacing);padding-left:var(--spacing)}@media (min-width: 576px){.container{max-width:510px;padding-right:0;padding-left:0}}@media (min-width: 768px){.container{max-width:740px}}@media (min-width: 1220px){.container{max-width:1200px}}@media (min-width: 1700px){.container{max-width:1630px}}section{margin-bottom:var(--block-spacing-vertical)}.grid{grid-column-gap:var(--grid-spacing-horizontal);grid-row-gap:var(--grid-spacing-vertical);display:grid;grid-template-columns:1fr;margin:0}@media (min-width: 1220px){.grid{grid-template-columns:repeat(auto-fit, minmax(0%, 1fr))}}.grid>*{min-width:0}figure{display:block;margin:0;padding:0;overflow-x:auto}figure figcaption{padding:calc(var(--spacing)*.5) 0;color:var(--muted-color)}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}address,blockquote,dl,figure,form,ol,p,pre,table,ul{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-style:normal;font-weight:var(--font-weight);font-size:var(--font-size)}a,[role=link]{--color: var(--primary);--background-color: transparent;outline:none;background-color:var(--background-color);color:var(--color);text-decoration:var(--text-decoration)}a:is([aria-current],:hover,:active,:focus),[role=link]:is([aria-current],:hover,:active,:focus){--color: var(--primary-hover);--text-decoration: underline}a:focus,[role=link]:focus{--background-color: var(--primary-focus)}a.secondary,[role=link].secondary{--color: var(--secondary)}a.secondary:is([aria-current],:hover,:active,:focus),[role=link].secondary:is([aria-current],:hover,:active,:focus){--color: var(--secondary-hover)}a.secondary:focus,[role=link].secondary:focus{--background-color: var(--secondary-focus)}a.contrast,[role=link].contrast{--color: var(--contrast)}a.contrast:is([aria-current],:hover,:active,:focus),[role=link].contrast:is([aria-current],:hover,:active,:focus){--color: var(--contrast-hover)}a.contrast:focus,[role=link].contrast:focus{--background-color: var(--contrast-focus)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);font-family:var(--font-family)}h1{--color: var(--h1-color)}h2{--color: var(--h2-color)}h3{--color: var(--h3-color)}h4{--color: var(--h4-color)}h5{--color: var(--h5-color)}h6{--color: var(--h6-color)}:where(address,blockquote,dl,figure,form,ol,p,pre,table,ul)~:is(h1,h2,h3,h4,h5,h6){margin-top:var(--typography-spacing-vertical)}hgroup,.headings{margin-bottom:var(--typography-spacing-vertical)}hgroup>*,.headings>*{margin-bottom:0}hgroup>*:last-child,.headings>*:last-child{--color: var(--muted-color);--font-weight: unset;font-size:1rem;font-family:unset}p{margin-bottom:var(--typography-spacing-vertical)}small{font-size:var(--font-size)}:where(dl,ol,ul){padding-right:0;padding-left:var(--spacing);padding-inline-start:var(--spacing);padding-inline-end:0}:where(dl,ol,ul) li{margin-bottom:calc(var(--typography-spacing-vertical)*.25)}:where(dl,ol,ul) :is(dl,ol,ul){margin:0;margin-top:calc(var(--typography-spacing-vertical)*.25)}ul li{list-style:square}mark{padding:.125rem .25rem;background-color:var(--mark-background-color);color:var(--mark-color);vertical-align:baseline}blockquote{display:block;margin:var(--typography-spacing-vertical) 0;padding:var(--spacing);border-right:none;border-left:.25rem solid var(--blockquote-border-color);border-inline-start:.25rem solid var(--blockquote-border-color);border-inline-end:none}blockquote footer{margin-top:calc(var(--typography-spacing-vertical)*.5);color:var(--blockquote-footer-color)}abbr[title]{border-bottom:1px dotted;text-decoration:none;cursor:help}ins{color:var(--ins-color);text-decoration:none}del{color:var(--del-color)}::selection{background-color:var(--primary-focus)}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}:where(iframe){border-style:none}img{max-width:100%;height:auto;border-style:none}:where(svg:not([fill])){fill:currentColor}svg:not(:root){overflow:hidden}button{margin:0;overflow:visible;font-family:inherit;text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button{display:block;width:100%;margin-bottom:var(--spacing)}[role=button]{display:inline-block;text-decoration:none}button,input[type=submit],input[type=button],input[type=reset],[role=button]{--background-color: var(--primary);--border-color: var(--primary);--color: var(--primary-inverse);--box-shadow: var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:none;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer}button:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),[role=button]:is([aria-current],:hover,:active,:focus){--background-color: var(--primary-hover);--border-color: var(--primary-hover);--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--color: var(--primary-inverse)}button:focus,input[type=submit]:focus,input[type=button]:focus,input[type=reset]:focus,[role=button]:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--primary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).secondary,input[type=reset]{--background-color: var(--secondary);--border-color: var(--secondary);--color: var(--secondary-inverse);cursor:pointer}:is(button,input[type=submit],input[type=button],[role=button]).secondary:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus){--background-color: var(--secondary-hover);--border-color: var(--secondary-hover);--color: var(--secondary-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).secondary:focus,input[type=reset]:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--secondary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).contrast{--background-color: var(--contrast);--border-color: var(--contrast);--color: var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:is([aria-current],:hover,:active,:focus){--background-color: var(--contrast-hover);--border-color: var(--contrast-hover);--color: var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--contrast-focus)}:is(button,input[type=submit],input[type=button],[role=button]).outline,input[type=reset].outline{--background-color: transparent;--color: var(--primary)}:is(button,input[type=submit],input[type=button],[role=button]).outline:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--background-color: transparent;--color: var(--primary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary,input[type=reset].outline{--color: var(--secondary)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--color: var(--secondary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast{--color: var(--contrast)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast:is([aria-current],:hover,:active,:focus){--color: var(--contrast-hover)}:where(button,[type=submit],[type=button],[type=reset],[role=button])[disabled],:where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]),a[role=button]:not([href]){opacity:.5;pointer-events:none}input,optgroup,select,textarea{margin:0;font-size:1rem;line-height:var(--line-height);font-family:inherit;letter-spacing:inherit}input{overflow:visible}select{text-transform:none}legend{max-width:100%;padding:0;color:inherit;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{padding:0;border-style:none}:-moz-focusring{outline:none}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{padding:0;border-width:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem*var(--line-height) + var(--form-element-spacing-vertical)*2 + var(--border-width)*2)}fieldset{margin:0;margin-bottom:var(--spacing);padding:0;border:0}label,fieldset legend{display:block;margin-bottom:calc(var(--spacing)*.25);font-weight:var(--form-label-font-weight, var(--font-weight))}input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{appearance:none;padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal)}input,select,textarea{--background-color: var(--form-element-background-color);--border-color: var(--form-element-border-color);--color: var(--form-element-color);--box-shadow: none;border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:none;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight)}input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus),:where(select,textarea):is(:active,:focus){--background-color: var(--form-element-active-background-color)}input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus),:where(select,textarea):is(:active,:focus){--border-color: var(--form-element-active-border-color)}input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus,select:focus,textarea:focus{--box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color)}input:not([type=submit],[type=button],[type=reset])[disabled],select[disabled],textarea[disabled],:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea){--background-color: var(--form-element-disabled-background-color);--border-color: var(--form-element-disabled-border-color);opacity:var(--form-element-disabled-opacity);pointer-events:none}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid]{padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=false]{background-image:var(--icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=true]{background-image:var(--icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--border-color: var(--form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--border-color: var(--form-element-valid-active-border-color);--box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color)}:where(input,select,textarea)[aria-invalid=true]{--border-color: var(--form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--border-color: var(--form-element-invalid-active-border-color);--box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color)}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::placeholder,input::-webkit-input-placeholder,textarea::placeholder,textarea::-webkit-input-placeholder,select:invalid{color:var(--form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--spacing)}select::-ms-expand{border:0;background-color:rgba(0,0,0,0)}select:not([multiple],[size]){padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-image:var(--icon-chevron);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}:where(input,select,textarea,.grid)+small{display:block;width:100%;margin-top:calc(var(--spacing)*-.75);margin-bottom:var(--spacing);color:var(--muted-color)}label>:where(input,select,textarea){margin-top:calc(var(--spacing)*.25)}:where(table){width:100%;border-collapse:collapse;border-spacing:0;text-indent:0}th,td{padding:calc(var(--spacing)/2) var(--spacing);border-bottom:var(--border-width) solid var(--table-border-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);text-align:left;text-align:start}tfoot th,tfoot td{border-top:var(--border-width) solid var(--table-border-color);border-bottom:0}table[role=grid] tbody tr:nth-child(odd){background-color:var(--table-row-stripped-background-color)}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]{display:initial}[aria-hidden=false][hidden]:not(:focus){clip:rect(0, 0, 0, 0);position:absolute}a,area,button,input,label,select,summary,textarea,[tabindex]{-ms-touch-action:manipulation}[dir=rtl]{direction:rtl}:where(nav li)::before{float:left;content:"​"}nav,nav ul{display:flex}nav{justify-content:space-between}nav ol,nav ul{align-items:center;margin-bottom:0;padding:0;list-style:none}nav ol:first-of-type,nav ul:first-of-type{margin-left:calc(var(--nav-element-spacing-horizontal)*-1)}nav ol:last-of-type,nav ul:last-of-type{margin-right:calc(var(--nav-element-spacing-horizontal)*-1)}nav li{display:inline-block;margin:0;padding:var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal)}nav li>*{--spacing: 0}nav :where(a,[role=link]){display:inline-block;margin:calc(var(--nav-link-spacing-vertical)*-1) calc(var(--nav-link-spacing-horizontal)*-1);padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);border-radius:var(--border-radius);text-decoration:none}nav :where(a,[role=link]):is([aria-current],:hover,:active,:focus){text-decoration:none}nav[aria-label=breadcrumb]{align-items:center;justify-content:start}nav[aria-label=breadcrumb] ul li:not(:first-child){margin-inline-start:var(--nav-link-spacing-horizontal)}nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{position:absolute;width:calc(var(--nav-link-spacing-horizontal)*2);margin-inline-start:calc(var(--nav-link-spacing-horizontal)/2);content:"/";color:var(--muted-color);text-align:center}nav[aria-label=breadcrumb] a[aria-current]{background-color:rgba(0,0,0,0);color:inherit;text-decoration:none;pointer-events:none}nav [role=button]{margin-right:inherit;margin-left:inherit;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}aside nav,aside ol,aside ul,aside li{display:block}aside li{padding:calc(var(--nav-element-spacing-vertical)*.5) var(--nav-element-spacing-horizontal)}aside li a{display:block}aside li [role=button]{margin:inherit}[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{content:"\\"}.night{display:none}h1,h2,h3,h4,h5,h6{margin-bottom:.5em}a>button{color:#fff;text-decoration:underline}figure{overflow:clip}.blurb>button{margin-top:20px}@media (min-width: 1220px){.blurb{margin-right:6em;margin-left:6em}}img.screenshot{border:double 3px;border-radius:4px;max-width:500px;margin:.5em}img.logo{max-width:72px}html,body{box-sizing:border-box;height:100%}body>footer{margin:0px;padding:0px}.wrapper{min-height:100%;display:flex;flex-direction:column;box-sizing:border-box}.page-body{flex-grow:1}.page-footer{flex-grow:0;flex-shrink:0}footer{text-align:center;font-size:.8em}figure{text-align:center}.active{text-decoration:underline}.documentation{display:flex}.documentation .side-panel{margin-right:3em;min-width:200px;font-size:10px}.documentation .side-panel ul>li{list-style:none;font-weight:bold}.home-header{display:grid;grid-template-columns:50% 40%;grid-column-gap:20px;grid-row-gap:20px;justify-items:stretch;align-items:stretch}@media (max-width: 1220px){.home-header{grid-template-columns:none}}.home-wrapper{display:grid;grid-template-columns:33% 33% 33%;grid-column-gap:20px;grid-row-gap:20px;justify-items:stretch;align-items:stretch}@media (min-width: 1220px){.home-wrapper{margin-right:10em;margin-left:10em}}@media (max-width: 768px){.home-wrapper{grid-template-columns:none}}@media (prefers-color-scheme: dark){img.logo{filter:drop-shadow(0px 0px 30px #fff)}.day{display:none}.night{display:initial}figure{filter:drop-shadow(0px 0px 30px #fff)}}
1267\ No newline at end of file
1268+ */:root{--font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--line-height: 1.5;--font-weight: 400;--font-size: 16px;--border-radius: 0.25rem;--border-width: 1px;--outline-width: 3px;--spacing: 1rem;--typography-spacing-vertical: 1.5rem;--block-spacing-vertical: calc(var(--spacing) * 2);--block-spacing-horizontal: var(--spacing);--grid-spacing-vertical: 0;--grid-spacing-horizontal: var(--spacing);--form-element-spacing-vertical: 0.75rem;--form-element-spacing-horizontal: 1rem;--nav-element-spacing-vertical: 1rem;--nav-element-spacing-horizontal: 0.5rem;--nav-link-spacing-vertical: 0.5rem;--nav-link-spacing-horizontal: 0.5rem;--form-label-font-weight: var(--font-weight);--transition: 0.2s ease-in-out;--modal-overlay-backdrop-filter: blur(0.25rem)}@media (min-width: 576px){:root{--font-size: 17px}}@media (min-width: 768px){:root{--font-size: 18px}}@media (min-width: 1220px){:root{--font-size: 19px}}@media (min-width: 1700px){:root{--font-size: 20px}}a{--text-decoration: none}a.secondary,a.contrast{--text-decoration: underline}small{--font-size: 0.875em}h1,h2,h3,h4,h5,h6{--font-weight: 700}h1{--font-size: 2rem;--typography-spacing-vertical: 3rem}h2{--font-size: 1.75rem;--typography-spacing-vertical: 2.625rem}h3{--font-size: 1.5rem;--typography-spacing-vertical: 2.25rem}h4{--font-size: 1.25rem;--typography-spacing-vertical: 1.874rem}h5{--font-size: 1.125rem;--typography-spacing-vertical: 1.6875rem}[type=checkbox],[type=radio]{--border-width: 2px}[type=checkbox][role=switch]{--border-width: 3px}thead th,thead td,tfoot th,tfoot td{--border-width: 3px}:not(thead,tfoot)>*>td{--font-size: 0.875em}pre,code,kbd,samp{--font-family: "Menlo", "Consolas", "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}kbd{--font-weight: bolder}[data-theme=light],:root:not([data-theme=dark]){--background-color: #fff;--color: #415462;--h1-color: #1b2832;--h2-color: #24333e;--h3-color: #2c3d49;--h4-color: #374956;--h5-color: #415462;--h6-color: #4d606d;--muted-color: #73828c;--muted-border-color: #edf0f3;--primary: #1095c1;--primary-hover: #08769b;--primary-focus: rgba(16,149,193,.125);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #415462;--secondary-focus: rgba(89,107,120,.125);--secondary-inverse: #fff;--contrast: #1b2832;--contrast-hover: #000;--contrast-focus: rgba(89,107,120,.125);--contrast-inverse: #fff;--mark-background-color: #fff2ca;--mark-color: #543a26;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: transparent;--form-element-border-color: #a2afb9;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: transparent;--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #d5dce2;--form-element-disabled-border-color: #a2afb9;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #c62828;--form-element-invalid-active-border-color: #d32f2f;--form-element-invalid-focus-color: rgba(211,47,47,.125);--form-element-valid-border-color: #388e3c;--form-element-valid-active-border-color: #43a047;--form-element-valid-focus-color: rgba(67,160,71,.125);--switch-background-color: #bbc6ce;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #d5dce2;--range-active-border-color: #bbc6ce;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: #f6f8f9;--code-background-color: #edf0f3;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #b34d80;--code-property-color: #3d888f;--code-value-color: #986;--code-comment-color: #a2afb9;--accordion-border-color: var(--muted-border-color);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: var(--background-color);--card-border-color: var(--muted-border-color);--card-box-shadow: .0145rem .029rem .174rem rgba(27,40,50,.01698), .0335rem .067rem .402rem rgba(27,40,50,.024), .0625rem .125rem .75rem rgba(27,40,50,.03), .1125rem .225rem 1.35rem rgba(27,40,50,.036), .2085rem .417rem 2.502rem rgba(27,40,50,.04302), .5rem 1rem 6rem rgba(27,40,50,.06), 0 0 0 0.0625rem rgba(27,40,50,.015);--card-sectionning-background-color: #fbfbfc;--dropdown-background-color: #fbfbfc;--dropdown-border-color: #e1e6eb;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: #edf0f3;--modal-overlay-background-color: rgba(213,220,226,.7);--progress-background-color: #d5dce2;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:light}@media only screen and (prefers-color-scheme: dark){:root:not([data-theme]){--background-color: #11191f;--color: #bbc6ce;--h1-color: #edf0f3;--h2-color: #e1e6eb;--h3-color: #d5dce2;--h4-color: #c8d1d8;--h5-color: #bbc6ce;--h6-color: #afbbc4;--muted-color: #73828c;--muted-border-color: #1f2d38;--primary: #1095c1;--primary-hover: #1ab3e6;--primary-focus: rgba(16,149,193,.25);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #73828c;--secondary-focus: rgba(115,130,140,.25);--secondary-inverse: #fff;--contrast: #edf0f3;--contrast-hover: #fff;--contrast-focus: rgba(115,130,140,.25);--contrast-inverse: #000;--mark-background-color: #d1c284;--mark-color: #11191f;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: #11191f;--form-element-border-color: #374956;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: var(--form-element-background-color);--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #2c3d49;--form-element-disabled-border-color: #415462;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #b71c1c;--form-element-invalid-active-border-color: #c62828;--form-element-invalid-focus-color: rgba(198,40,40,.25);--form-element-valid-border-color: #2e7d32;--form-element-valid-active-border-color: #388e3c;--form-element-valid-focus-color: rgba(56,142,60,.25);--switch-background-color: #374956;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #24333e;--range-active-border-color: #2c3d49;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: rgba(115,130,140,.05);--code-background-color: #18232c;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #a65980;--code-property-color: #599fa6;--code-value-color: #8c8473;--code-comment-color: #4d606d;--accordion-border-color: var(--muted-border-color);--accordion-active-summary-color: var(--primary);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: #141e26;--card-border-color: var(--card-background-color);--card-box-shadow: .0145rem .029rem .174rem rgba(0,0,0,.01698), .0335rem .067rem .402rem rgba(0,0,0,.024), .0625rem .125rem .75rem rgba(0,0,0,.03), .1125rem .225rem 1.35rem rgba(0,0,0,.036), .2085rem .417rem 2.502rem rgba(0,0,0,.04302), .5rem 1rem 6rem rgba(0,0,0,.06), 0 0 0 0.0625rem rgba(0,0,0,.015);--card-sectionning-background-color: #18232c;--dropdown-background-color: #1b2832;--dropdown-border-color: #24333e;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: rgba(36,51,62,.75);--modal-overlay-background-color: rgba(36,51,62,.8);--progress-background-color: #24333e;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}}[data-theme=dark]{--background-color: #11191f;--color: #bbc6ce;--h1-color: #edf0f3;--h2-color: #e1e6eb;--h3-color: #d5dce2;--h4-color: #c8d1d8;--h5-color: #bbc6ce;--h6-color: #afbbc4;--muted-color: #73828c;--muted-border-color: #1f2d38;--primary: #1095c1;--primary-hover: #1ab3e6;--primary-focus: rgba(16,149,193,.25);--primary-inverse: #fff;--secondary: #596b78;--secondary-hover: #73828c;--secondary-focus: rgba(115,130,140,.25);--secondary-inverse: #fff;--contrast: #edf0f3;--contrast-hover: #fff;--contrast-focus: rgba(115,130,140,.25);--contrast-inverse: #000;--mark-background-color: #d1c284;--mark-color: #11191f;--ins-color: #388e3c;--del-color: #c62828;--blockquote-border-color: var(--muted-border-color);--blockquote-footer-color: var(--muted-color);--button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);--form-element-background-color: #11191f;--form-element-border-color: #374956;--form-element-color: var(--color);--form-element-placeholder-color: var(--muted-color);--form-element-active-background-color: var(--form-element-background-color);--form-element-active-border-color: var(--primary);--form-element-focus-color: var(--primary-focus);--form-element-disabled-background-color: #2c3d49;--form-element-disabled-border-color: #415462;--form-element-disabled-opacity: 0.5;--form-element-invalid-border-color: #b71c1c;--form-element-invalid-active-border-color: #c62828;--form-element-invalid-focus-color: rgba(198,40,40,.25);--form-element-valid-border-color: #2e7d32;--form-element-valid-active-border-color: #388e3c;--form-element-valid-focus-color: rgba(56,142,60,.25);--switch-background-color: #374956;--switch-color: var(--primary-inverse);--switch-checked-background-color: var(--primary);--range-border-color: #24333e;--range-active-border-color: #2c3d49;--range-thumb-border-color: var(--background-color);--range-thumb-color: var(--secondary);--range-thumb-hover-color: var(--secondary-hover);--range-thumb-active-color: var(--primary);--table-border-color: var(--muted-border-color);--table-row-stripped-background-color: rgba(115,130,140,.05);--code-background-color: #18232c;--code-color: var(--muted-color);--code-kbd-background-color: var(--contrast);--code-kbd-color: var(--contrast-inverse);--code-tag-color: #a65980;--code-property-color: #599fa6;--code-value-color: #8c8473;--code-comment-color: #4d606d;--accordion-border-color: var(--muted-border-color);--accordion-active-summary-color: var(--primary);--accordion-close-summary-color: var(--color);--accordion-open-summary-color: var(--muted-color);--card-background-color: #141e26;--card-border-color: var(--card-background-color);--card-box-shadow: .0145rem .029rem .174rem rgba(0,0,0,.01698), .0335rem .067rem .402rem rgba(0,0,0,.024), .0625rem .125rem .75rem rgba(0,0,0,.03), .1125rem .225rem 1.35rem rgba(0,0,0,.036), .2085rem .417rem 2.502rem rgba(0,0,0,.04302), .5rem 1rem 6rem rgba(0,0,0,.06), 0 0 0 0.0625rem rgba(0,0,0,.015);--card-sectionning-background-color: #18232c;--dropdown-background-color: #1b2832;--dropdown-border-color: #24333e;--dropdown-box-shadow: var(--card-box-shadow);--dropdown-color: var(--color);--dropdown-hover-background-color: rgba(36,51,62,.75);--modal-overlay-background-color: rgba(36,51,62,.8);--progress-background-color: #24333e;--progress-color: var(--primary);--loading-spinner-opacity: 0.5;--tooltip-background-color: var(--contrast);--tooltip-color: var(--contrast-inverse);--icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}progress,[type=checkbox],[type=radio],[type=range]{accent-color:var(--primary)}*,*::before,*::after{box-sizing:border-box;background-repeat:no-repeat}::before,::after{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--background-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);line-height:var(--line-height);font-family:var(--font-family);text-rendering:optimizeLegibility;overflow-wrap:break-word;cursor:default;tab-size:4}main{display:block}body{width:100%;margin:0}body>header,body>main,body>footer{width:100%;margin-right:auto;margin-left:auto;padding:var(--block-spacing-vertical) 0}.container,.container-fluid{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--spacing);padding-left:var(--spacing)}@media (min-width: 576px){.container{max-width:510px;padding-right:0;padding-left:0}}@media (min-width: 768px){.container{max-width:740px}}@media (min-width: 1220px){.container{max-width:1200px}}@media (min-width: 1700px){.container{max-width:1630px}}section{margin-bottom:var(--block-spacing-vertical)}.grid{grid-column-gap:var(--grid-spacing-horizontal);grid-row-gap:var(--grid-spacing-vertical);display:grid;grid-template-columns:1fr;margin:0}@media (min-width: 1220px){.grid{grid-template-columns:repeat(auto-fit, minmax(0%, 1fr))}}.grid>*{min-width:0}figure{display:block;margin:0;padding:0;overflow-x:auto}figure figcaption{padding:calc(var(--spacing)*.5) 0;color:var(--muted-color)}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}address,blockquote,dl,figure,form,ol,p,pre,table,ul{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-style:normal;font-weight:var(--font-weight);font-size:var(--font-size)}a,[role=link]{--color: var(--primary);--background-color: transparent;outline:none;background-color:var(--background-color);color:var(--color);text-decoration:var(--text-decoration)}a:is([aria-current],:hover,:active,:focus),[role=link]:is([aria-current],:hover,:active,:focus){--color: var(--primary-hover);--text-decoration: underline}a:focus,[role=link]:focus{--background-color: var(--primary-focus)}a.secondary,[role=link].secondary{--color: var(--secondary)}a.secondary:is([aria-current],:hover,:active,:focus),[role=link].secondary:is([aria-current],:hover,:active,:focus){--color: var(--secondary-hover)}a.secondary:focus,[role=link].secondary:focus{--background-color: var(--secondary-focus)}a.contrast,[role=link].contrast{--color: var(--contrast)}a.contrast:is([aria-current],:hover,:active,:focus),[role=link].contrast:is([aria-current],:hover,:active,:focus){--color: var(--contrast-hover)}a.contrast:focus,[role=link].contrast:focus{--background-color: var(--contrast-focus)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);font-family:var(--font-family)}h1{--color: var(--h1-color)}h2{--color: var(--h2-color)}h3{--color: var(--h3-color)}h4{--color: var(--h4-color)}h5{--color: var(--h5-color)}h6{--color: var(--h6-color)}:where(address,blockquote,dl,figure,form,ol,p,pre,table,ul)~:is(h1,h2,h3,h4,h5,h6){margin-top:var(--typography-spacing-vertical)}hgroup,.headings{margin-bottom:var(--typography-spacing-vertical)}hgroup>*,.headings>*{margin-bottom:0}hgroup>*:last-child,.headings>*:last-child{--color: var(--muted-color);--font-weight: unset;font-size:1rem;font-family:unset}p{margin-bottom:var(--typography-spacing-vertical)}small{font-size:var(--font-size)}:where(dl,ol,ul){padding-right:0;padding-left:var(--spacing);padding-inline-start:var(--spacing);padding-inline-end:0}:where(dl,ol,ul) li{margin-bottom:calc(var(--typography-spacing-vertical)*.25)}:where(dl,ol,ul) :is(dl,ol,ul){margin:0;margin-top:calc(var(--typography-spacing-vertical)*.25)}ul li{list-style:square}mark{padding:.125rem .25rem;background-color:var(--mark-background-color);color:var(--mark-color);vertical-align:baseline}blockquote{display:block;margin:var(--typography-spacing-vertical) 0;padding:var(--spacing);border-right:none;border-left:.25rem solid var(--blockquote-border-color);border-inline-start:.25rem solid var(--blockquote-border-color);border-inline-end:none}blockquote footer{margin-top:calc(var(--typography-spacing-vertical)*.5);color:var(--blockquote-footer-color)}abbr[title]{border-bottom:1px dotted;text-decoration:none;cursor:help}ins{color:var(--ins-color);text-decoration:none}del{color:var(--del-color)}::selection{background-color:var(--primary-focus)}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}:where(iframe){border-style:none}img{max-width:100%;height:auto;border-style:none}:where(svg:not([fill])){fill:currentColor}svg:not(:root){overflow:hidden}button{margin:0;overflow:visible;font-family:inherit;text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button{display:block;width:100%;margin-bottom:var(--spacing)}[role=button]{display:inline-block;text-decoration:none}button,input[type=submit],input[type=button],input[type=reset],[role=button]{--background-color: var(--primary);--border-color: var(--primary);--color: var(--primary-inverse);--box-shadow: var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:none;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer}button:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),[role=button]:is([aria-current],:hover,:active,:focus){--background-color: var(--primary-hover);--border-color: var(--primary-hover);--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--color: var(--primary-inverse)}button:focus,input[type=submit]:focus,input[type=button]:focus,input[type=reset]:focus,[role=button]:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--primary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).secondary,input[type=reset]{--background-color: var(--secondary);--border-color: var(--secondary);--color: var(--secondary-inverse);cursor:pointer}:is(button,input[type=submit],input[type=button],[role=button]).secondary:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus){--background-color: var(--secondary-hover);--border-color: var(--secondary-hover);--color: var(--secondary-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).secondary:focus,input[type=reset]:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--secondary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).contrast{--background-color: var(--contrast);--border-color: var(--contrast);--color: var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:is([aria-current],:hover,:active,:focus){--background-color: var(--contrast-hover);--border-color: var(--contrast-hover);--color: var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:focus{--box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--contrast-focus)}:is(button,input[type=submit],input[type=button],[role=button]).outline,input[type=reset].outline{--background-color: transparent;--color: var(--primary)}:is(button,input[type=submit],input[type=button],[role=button]).outline:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--background-color: transparent;--color: var(--primary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary,input[type=reset].outline{--color: var(--secondary)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--color: var(--secondary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast{--color: var(--contrast)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast:is([aria-current],:hover,:active,:focus){--color: var(--contrast-hover)}:where(button,[type=submit],[type=button],[type=reset],[role=button])[disabled],:where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]),a[role=button]:not([href]){opacity:.5;pointer-events:none}input,optgroup,select,textarea{margin:0;font-size:1rem;line-height:var(--line-height);font-family:inherit;letter-spacing:inherit}input{overflow:visible}select{text-transform:none}legend{max-width:100%;padding:0;color:inherit;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{padding:0;border-style:none}:-moz-focusring{outline:none}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{padding:0;border-width:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem*var(--line-height) + var(--form-element-spacing-vertical)*2 + var(--border-width)*2)}fieldset{margin:0;margin-bottom:var(--spacing);padding:0;border:0}label,fieldset legend{display:block;margin-bottom:calc(var(--spacing)*.25);font-weight:var(--form-label-font-weight, var(--font-weight))}input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{appearance:none;padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal)}input,select,textarea{--background-color: var(--form-element-background-color);--border-color: var(--form-element-border-color);--color: var(--form-element-color);--box-shadow: none;border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:none;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight)}input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus),:where(select,textarea):is(:active,:focus){--background-color: var(--form-element-active-background-color)}input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus),:where(select,textarea):is(:active,:focus){--border-color: var(--form-element-active-border-color)}input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus,select:focus,textarea:focus{--box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color)}input:not([type=submit],[type=button],[type=reset])[disabled],select[disabled],textarea[disabled],:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea){--background-color: var(--form-element-disabled-background-color);--border-color: var(--form-element-disabled-border-color);opacity:var(--form-element-disabled-opacity);pointer-events:none}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid]{padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=false]{background-image:var(--icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=true]{background-image:var(--icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--border-color: var(--form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--border-color: var(--form-element-valid-active-border-color);--box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color)}:where(input,select,textarea)[aria-invalid=true]{--border-color: var(--form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--border-color: var(--form-element-invalid-active-border-color);--box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color)}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::placeholder,input::-webkit-input-placeholder,textarea::placeholder,textarea::-webkit-input-placeholder,select:invalid{color:var(--form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--spacing)}select::-ms-expand{border:0;background-color:rgba(0,0,0,0)}select:not([multiple],[size]){padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-image:var(--icon-chevron);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}:where(input,select,textarea,.grid)+small{display:block;width:100%;margin-top:calc(var(--spacing)*-.75);margin-bottom:var(--spacing);color:var(--muted-color)}label>:where(input,select,textarea){margin-top:calc(var(--spacing)*.25)}:where(table){width:100%;border-collapse:collapse;border-spacing:0;text-indent:0}th,td{padding:calc(var(--spacing)/2) var(--spacing);border-bottom:var(--border-width) solid var(--table-border-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);text-align:left;text-align:start}tfoot th,tfoot td{border-top:var(--border-width) solid var(--table-border-color);border-bottom:0}table[role=grid] tbody tr:nth-child(odd){background-color:var(--table-row-stripped-background-color)}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]{display:initial}[aria-hidden=false][hidden]:not(:focus){clip:rect(0, 0, 0, 0);position:absolute}a,area,button,input,label,select,summary,textarea,[tabindex]{-ms-touch-action:manipulation}[dir=rtl]{direction:rtl}:where(nav li)::before{float:left;content:"​"}nav,nav ul{display:flex}nav{justify-content:space-between}nav ol,nav ul{align-items:center;margin-bottom:0;padding:0;list-style:none}nav ol:first-of-type,nav ul:first-of-type{margin-left:calc(var(--nav-element-spacing-horizontal)*-1)}nav ol:last-of-type,nav ul:last-of-type{margin-right:calc(var(--nav-element-spacing-horizontal)*-1)}nav li{display:inline-block;margin:0;padding:var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal)}nav li>*{--spacing: 0}nav :where(a,[role=link]){display:inline-block;margin:calc(var(--nav-link-spacing-vertical)*-1) calc(var(--nav-link-spacing-horizontal)*-1);padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);border-radius:var(--border-radius);text-decoration:none}nav :where(a,[role=link]):is([aria-current],:hover,:active,:focus){text-decoration:none}nav[aria-label=breadcrumb]{align-items:center;justify-content:start}nav[aria-label=breadcrumb] ul li:not(:first-child){margin-inline-start:var(--nav-link-spacing-horizontal)}nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{position:absolute;width:calc(var(--nav-link-spacing-horizontal)*2);margin-inline-start:calc(var(--nav-link-spacing-horizontal)/2);content:"/";color:var(--muted-color);text-align:center}nav[aria-label=breadcrumb] a[aria-current]{background-color:rgba(0,0,0,0);color:inherit;text-decoration:none;pointer-events:none}nav [role=button]{margin-right:inherit;margin-left:inherit;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}aside nav,aside ol,aside ul,aside li{display:block}aside li{padding:calc(var(--nav-element-spacing-vertical)*.5) var(--nav-element-spacing-horizontal)}aside li a{display:block}aside li [role=button]{margin:inherit}[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{content:"\\"}.night{display:none}h1,h2,h3,h4,h5,h6{margin-bottom:.5em}a>button{color:#fff;text-decoration:underline}figure{overflow:clip}.blurb>button{margin-top:20px}@media (min-width: 1220px){.blurb{margin-right:6em;margin-left:6em}}img.screenshot{border:double 3px;border-radius:4px;max-width:500px;margin:.5em}img.logo{max-width:72px}html,body{box-sizing:border-box;height:100%}body>footer{margin:0px;padding:0px}.wrapper{min-height:100%;display:flex;flex-direction:column;box-sizing:border-box}.page-body{flex-grow:1}.page-footer{flex-grow:0;flex-shrink:0}footer{text-align:center;font-size:.8em}figure{text-align:center}.active{text-decoration:underline}.documentation{display:flex}.documentation .side-panel{margin-right:3em;min-width:200px;font-size:10px}.documentation .side-panel ul>li{list-style:none;font-weight:bold}.home-header{display:grid;grid-template-columns:50% 40%;grid-column-gap:20px;grid-row-gap:20px;justify-items:stretch;align-items:stretch}@media (max-width: 1220px){.home-header{grid-template-columns:none}}.home-wrapper{display:grid;grid-template-columns:33% 33% 33%;grid-column-gap:20px;grid-row-gap:20px;justify-items:stretch;align-items:stretch}@media (min-width: 1220px){.home-wrapper{margin-right:10em;margin-left:10em}}@media (max-width: 768px){.home-wrapper{grid-template-columns:none}}@media (prefers-color-scheme: dark){.diagram{background:grey}img.logo{filter:drop-shadow(0px 0px 30px #fff)}.day{display:none}.night{display:initial}figure{filter:drop-shadow(0px 0px 30px #fff)}}
1269\ No newline at end of file
1270 diff --git a/www/public/sitemap.xml b/www/public/sitemap.xml
1271index 4459071..1a013c7 100644
1272--- a/www/public/sitemap.xml
1273+++ b/www/public/sitemap.xml
1274 @@ -7,6 +7,12 @@
1275 <loc>https://ayllu-forge.org/docs/</loc>
1276 </url>
1277 <url>
1278+ <loc>https://ayllu-forge.org/docs/architecture/</loc>
1279+ </url>
1280+ <url>
1281+ <loc>https://ayllu-forge.org/docs/developers/</loc>
1282+ </url>
1283+ <url>
1284 <loc>https://ayllu-forge.org/docs/faq/</loc>
1285 </url>
1286 <url>
1287 diff --git a/www/sass/main.scss b/www/sass/main.scss
1288index ef717ca..7496248 100644
1289--- a/www/sass/main.scss
1290+++ b/www/sass/main.scss
1291 @@ -160,6 +160,11 @@ figure {
1292 }
1293
1294 @media (prefers-color-scheme: dark) {
1295+
1296+ .diagram {
1297+ background: grey;
1298+ }
1299+
1300 img.logo {
1301 filter: drop-shadow(0px 0px 30px #fff);
1302 }
1303 diff --git a/www/static/assets/architecture.svg b/www/static/assets/architecture.svg
1304new file mode 100644
1305index 0000000..2de2a37
1306--- /dev/null
1307+++ b/www/static/assets/architecture.svg
1308 @@ -0,0 +1,598 @@
1309+ <svg version="1.1" baseProfile="full" width="1938.0" height="655.0" viewbox="0 0 1938 655" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
1310+ <desc >
1311+ [reverse_proxy]
1312+
1313+ [reverse_proxy]&lt;--&gt;[Rudolfs (LFS API)]
1314+
1315+ [reverse_proxy]&lt;--&gt;[ayllu-core |
1316+ [axum http interface]
1317+ [sites static hosting]
1318+ [capnp-rpc-server (job_server)]
1319+ [git repositories via libgit2]
1320+ [&lt;database&gt; sqlite]
1321+ ]
1322+
1323+ [ayllu-core] &lt;--&gt; [
1324+ ayllu-mail|
1325+ [capnp-rpc-server]
1326+ [mailpot]
1327+ [postfix]
1328+ [&lt;database&gt; sqlite]
1329+ ] &lt;-- SMTP [&lt;actor&gt; contributor-2]
1330+
1331+ [ayllu-core] &lt;--&gt; [
1332+ ayllu-xmpp |
1333+ [capnp-rpc-server]
1334+ [chat interface/bot]
1335+ [&lt;database&gt; sqlite]
1336+ ] &lt;-- XMPP [&lt;actor&gt; contributor-2]
1337+
1338+ [ayllu-core] &lt;--&gt; [
1339+ ayllu-build |
1340+ [capnp-rpc-server]
1341+ [&lt;database&gt; sqlite]
1342+ ]
1343+
1344+ [ayllu-core] &lt;--&gt; [ayllu-shell] &lt;-- SSH [&lt;actor&gt; contributor]
1345+ [ayllu-core] &lt;--&gt; [ayllu-cli] &lt;-- [&lt;actor&gt; admin]
1346+
1347+
1348+ [ayllu-build]&lt;--&gt;[
1349+ ayllu-builder-1 |
1350+ [&lt;package&gt;qemu-x86_64| capnp-rpc-server | executor]
1351+ ]
1352+
1353+ [ayllu-build]&lt;--&gt;[
1354+ ayllu-builder-2 |
1355+ [&lt;package&gt;qemu-aarch64| capnp-rpc-server | exectuor]
1356+ ]
1357+
1358+ [ayllu-build]&lt;--&gt;[
1359+ ayllu-builder-n |
1360+ [&lt;package&gt;lxc| capnp-rpc-server | executor]
1361+ ] --&gt; [ayllu-core]</desc>
1362+ <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="normal" font-style="normal">
1363+ <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
1364+ <g stroke="transparent" fill="transparent">
1365+ <rect x="0.0" y="0.0" height="655.0" width="1938.0" stroke="none"></rect>
1366+ </g>
1367+ <g transform="translate(8, 8)" fill="#33322E">
1368+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
1369+ <g stroke-dasharray="6 6">
1370+ <path d="M965.1 23.1 L713 51 L713 115.83333333333333 L713.0 115.8 " fill="none"></path>
1371+ </g>
1372+ <path d="M707.7 109.2 L713.0 115.8 L718.3 109.2 L713.0 122.5 Z"></path>
1373+ <path d="M959.1 29.2 L965.1 23.1 L957.9 18.6 L971.8 22.4 Z"></path>
1374+ <g stroke-dasharray="6 6">
1375+ <path d="M1103.4 23.1 L1355.5 51 L1355.5 64.33333333333333 L1355.5 64.3 " fill="none"></path>
1376+ </g>
1377+ <path d="M1350.2 57.7 L1355.5 64.3 L1360.8 57.7 L1355.5 71.0 Z"></path>
1378+ <path d="M1110.6 18.6 L1103.4 23.1 L1109.4 29.2 L1096.8 22.4 Z"></path>
1379+ <g stroke-dasharray="6 6">
1380+ <path d="M822.4 180.4 L261 225 L261 238.33333333333334 L261.0 238.3 " fill="none"></path>
1381+ </g>
1382+ <path d="M255.7 231.7 L261.0 238.3 L266.3 231.7 L261.0 245.0 Z"></path>
1383+ <path d="M816.1 186.2 L822.4 180.4 L815.3 175.6 L829.0 179.9 Z"></path>
1384+ <text x="758.0" y="489.4" stroke="none">SMTP</text>
1385+ <g stroke-dasharray="6 6">
1386+ <path d="M261.0 385.7 L261 399 L750 497.4263494967978 L750.0 497.4 " fill="none"></path>
1387+ </g>
1388+ <path d="M266.3 392.3 L261.0 385.7 L255.7 392.3 L261.0 379.0 Z"></path>
1389+ <g stroke-dasharray="6 6">
1390+ <path d="M926.9 206.0 L807.5 225 L807.5 238.33333333333334 L807.5 238.3 " fill="none"></path>
1391+ </g>
1392+ <path d="M802.2 231.7 L807.5 238.3 L812.8 231.7 L807.5 245.0 Z"></path>
1393+ <path d="M921.1 212.4 L926.9 206.0 L919.5 201.8 L933.5 205.0 Z"></path>
1394+ <text x="754.7" y="473.5" stroke="none">XMPP</text>
1395+ <g stroke-dasharray="6 6">
1396+ <path d="M807.5 385.7 L807.5 399 L807.5 481.5 L807.5 481.5 " fill="none"></path>
1397+ </g>
1398+ <path d="M812.8 392.3 L807.5 385.7 L802.2 392.3 L807.5 379.0 Z"></path>
1399+ <g stroke-dasharray="6 6">
1400+ <path d="M1276.2 209.5 L1259 225 L1259 238.33333333333334 L1259.0 238.3 " fill="none"></path>
1401+ </g>
1402+ <path d="M1253.7 231.7 L1259.0 238.3 L1264.3 231.7 L1259.0 245.0 Z"></path>
1403+ <path d="M1274.9 217.9 L1276.2 209.5 L1267.7 210.0 L1281.2 205.0 Z"></path>
1404+ <g stroke-dasharray="6 6">
1405+ <path d="M1595.6 206.8 L1659 225 L1659 289.8333333333333 L1659.0 289.8 " fill="none"></path>
1406+ </g>
1407+ <path d="M1653.7 283.2 L1659.0 289.8 L1664.3 283.2 L1659.0 296.5 Z"></path>
1408+ <path d="M1603.5 203.5 L1595.6 206.8 L1600.6 213.8 L1589.2 205.0 Z"></path>
1409+ <text x="1618.3" y="473.5" stroke="none">SSH</text>
1410+ <g stroke-dasharray="6 6">
1411+ <path d="M1659.0 334.2 L1659 399 L1659 481.5 L1659.0 481.5 " fill="none"></path>
1412+ </g>
1413+ <path d="M1664.3 340.8 L1659.0 334.2 L1653.7 340.8 L1659.0 327.5 Z"></path>
1414+ <g stroke-dasharray="6 6">
1415+ <path d="M1691.6 206.3 L1783.5 225 L1783.5 289.8333333333333 L1783.5 289.8 " fill="none"></path>
1416+ </g>
1417+ <path d="M1778.2 283.2 L1783.5 289.8 L1788.8 283.2 L1783.5 296.5 Z"></path>
1418+ <path d="M1699.2 202.4 L1691.6 206.3 L1697.1 212.9 L1685.1 205.0 Z"></path>
1419+ <g stroke-dasharray="6 6">
1420+ <path d="M1783.5 334.2 L1783.5 399 L1783.5 481.5 L1783.5 481.5 " fill="none"></path>
1421+ </g>
1422+ <path d="M1788.8 340.8 L1783.5 334.2 L1778.2 340.8 L1783.5 327.5 Z"></path>
1423+ <g stroke-dasharray="6 6">
1424+ <path d="M1102.2 365.9 L1006 399 L1006 412.3333333333333 L1006.0 412.3 " fill="none"></path>
1425+ </g>
1426+ <path d="M1000.7 405.7 L1006.0 412.3 L1011.3 405.7 L1006.0 419.0 Z"></path>
1427+ <path d="M1097.6 373.1 L1102.2 365.9 L1094.2 363.0 L1108.5 363.8 Z"></path>
1428+ <g stroke-dasharray="6 6">
1429+ <path d="M1242.1 385.5 L1239 399 L1239 412.3333333333333 L1239.0 412.3 " fill="none"></path>
1430+ </g>
1431+ <path d="M1233.7 405.7 L1239.0 412.3 L1244.3 405.7 L1239.0 419.0 Z"></path>
1432+ <path d="M1245.8 393.2 L1242.1 385.5 L1235.4 390.8 L1243.6 379.0 Z"></path>
1433+ <g stroke-dasharray="6 6">
1434+ <path d="M1354.1 383.0 L1375.5 399 L1388.6489765726408 413.9884707045646 L1388.6 414.0 " fill="none"></path>
1435+ </g>
1436+ <path d="M1380.2 412.5 L1388.6 414.0 L1388.3 405.5 L1393.0 419.0 Z"></path>
1437+ <path d="M1362.6 382.7 L1354.1 383.0 L1356.2 391.3 L1348.7 379.0 Z"></path>
1438+ <g stroke-dasharray="6 6">
1439+ <path d="M1512.9 419.0 L1522 399 L1522 312 L1522 312 L1522 225 L1522 225 L1489.6328041618644 208.08741118367695 L1489.6 208.1 " fill="none"></path>
1440+ </g>
1441+ <path d="M1498.0 206.4 L1489.6 208.1 L1493.1 215.9 L1483.7 205.0 Z"></path>
1442+ <g data-name="reverse_proxy">
1443+ <g fill="#eee8d5" stroke="#33322E" data-name="reverse_proxy">
1444+ <rect x="971.8" y="0.0" height="31.0" width="125.0" data-name="reverse_proxy"></rect>
1445+ </g>
1446+ <g transform="translate(971.75, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="reverse_proxy">
1447+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="reverse_proxy">
1448+ <text x="54.5" y="13.5" stroke="none" text-anchor="middle" data-name="reverse_proxy">reverse_proxy</text>
1449+
1450+ </g>
1451+ </g>
1452+ </g>
1453+ <g data-name="Rudolfs (LFS API)">
1454+ <g fill="#eee8d5" stroke="#33322E" data-name="Rudolfs (LFS API)">
1455+ <rect x="637.0" y="122.5" height="31.0" width="152.0" data-name="Rudolfs (LFS API)"></rect>
1456+ </g>
1457+ <g transform="translate(637, 122.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Rudolfs (LFS API)">
1458+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Rudolfs (LFS API)">
1459+ <text x="68.0" y="13.5" stroke="none" text-anchor="middle" data-name="Rudolfs (LFS API)">Rudolfs (LFS API)</text>
1460+
1461+ </g>
1462+ </g>
1463+ </g>
1464+ <g data-name="ayllu-core">
1465+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-core">
1466+ <rect x="829.0" y="71.0" height="134.0" width="1053.0" data-name="ayllu-core"></rect>
1467+ <path d="M829.0 102.0 L1882.0 102.0" fill="none" data-name="ayllu-core"></path>
1468+ </g>
1469+ <g transform="translate(829, 71)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-core">
1470+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-core">
1471+ <text x="518.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-core">ayllu-core</text>
1472+
1473+ </g>
1474+ </g>
1475+ <g transform="translate(829, 102)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-core">
1476+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-core">
1477+ <g transform="translate(20, 20)" data-name="ayllu-core">
1478+ <g data-name="axum http interface">
1479+ <g fill="#fdf6e3" stroke="#33322E" data-name="axum http interface">
1480+ <rect x="0.0" y="8.0" height="31.0" width="164.0" data-name="axum http interface"></rect>
1481+ </g>
1482+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="axum http interface">
1483+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="axum http interface">
1484+ <text x="74.0" y="13.5" stroke="none" text-anchor="middle" data-name="axum http interface">axum http interface</text>
1485+
1486+ </g>
1487+ </g>
1488+ </g>
1489+ <g data-name="sites static hosting">
1490+ <g fill="#fdf6e3" stroke="#33322E" data-name="sites static hosting">
1491+ <rect x="204.0" y="8.0" height="31.0" width="161.0" data-name="sites static hosting"></rect>
1492+ </g>
1493+ <g transform="translate(204, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sites static hosting">
1494+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sites static hosting">
1495+ <text x="72.5" y="13.5" stroke="none" text-anchor="middle" data-name="sites static hosting">sites static hosting</text>
1496+
1497+ </g>
1498+ </g>
1499+ </g>
1500+ <g data-name="capnp-rpc-server (job_server)">
1501+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server (job_server)">
1502+ <rect x="405.0" y="8.0" height="31.0" width="244.0" data-name="capnp-rpc-server (job_server)"></rect>
1503+ </g>
1504+ <g transform="translate(405, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server (job_server)">
1505+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server (job_server)">
1506+ <text x="114.0" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server (job_server)">capnp-rpc-server (job_server)</text>
1507+
1508+ </g>
1509+ </g>
1510+ </g>
1511+ <g data-name="git repositories via libgit2">
1512+ <g fill="#fdf6e3" stroke="#33322E" data-name="git repositories via libgit2">
1513+ <rect x="689.0" y="8.0" height="31.0" width="210.0" data-name="git repositories via libgit2"></rect>
1514+ </g>
1515+ <g transform="translate(689, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="git repositories via libgit2">
1516+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="git repositories via libgit2">
1517+ <text x="97.0" y="13.5" stroke="none" text-anchor="middle" data-name="git repositories via libgit2">git repositories via libgit2</text>
1518+
1519+ </g>
1520+ </g>
1521+ </g>
1522+ <g data-name="sqlite">
1523+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1524+ <rect x="939.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1525+ <path d="M939.0 8.0 L939.0 39.0" fill="none" data-name="sqlite"></path>
1526+ <path d="M997.0 8.0 L997.0 39.0" fill="none" data-name="sqlite"></path>
1527+ <ellipse cx="968.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1528+ <path d="M997.0 39.0 L997.0 39.3 L996.9 39.6 L996.7 39.9 L996.4 40.2 L996.1 40.5 L995.7 40.8 L995.3 41.1 L994.7 41.3 L994.1 41.6 L993.5 41.9 L992.7 42.1 L992.0 42.4 L991.1 42.6 L990.2 42.9 L989.3 43.1 L988.2 43.3 L987.2 43.5 L986.1 43.7 L984.9 43.9 L983.7 44.0 L982.5 44.2 L981.2 44.3 L979.9 44.5 L978.6 44.6 L977.2 44.7 L975.9 44.8 L974.5 44.8 L973.0 44.9 L971.6 45.0 L970.2 45.0 L968.7 45.0 L967.3 45.0 L965.8 45.0 L964.4 45.0 L963.0 44.9 L961.5 44.8 L960.1 44.8 L958.8 44.7 L957.4 44.6 L956.1 44.5 L954.8 44.3 L953.5 44.2 L952.3 44.0 L951.1 43.9 L949.9 43.7 L948.8 43.5 L947.8 43.3 L946.7 43.1 L945.8 42.9 L944.9 42.6 L944.0 42.4 L943.3 42.1 L942.5 41.9 L941.9 41.6 L941.3 41.3 L940.7 41.1 L940.3 40.8 L939.9 40.5 L939.6 40.2 L939.3 39.9 L939.1 39.6 L939.0 39.3 L939.0 39.0" data-name="sqlite"></path>
1529+ </g>
1530+ <g transform="translate(939, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1531+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1532+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1533+
1534+ </g>
1535+ </g>
1536+ </g>
1537+ </g>
1538+ </g>
1539+ </g>
1540+ </g>
1541+ <g data-name="ayllu-mail">
1542+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-mail">
1543+ <rect x="0.0" y="245.0" height="134.0" width="522.0" data-name="ayllu-mail"></rect>
1544+ <path d="M0.0 276.0 L522.0 276.0" fill="none" data-name="ayllu-mail"></path>
1545+ </g>
1546+ <g transform="translate(0, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-mail">
1547+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-mail">
1548+ <text x="253.0" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-mail">ayllu-mail</text>
1549+
1550+ </g>
1551+ </g>
1552+ <g transform="translate(0, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-mail">
1553+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-mail">
1554+ <g transform="translate(20, 20)" data-name="ayllu-mail">
1555+ <g data-name="capnp-rpc-server">
1556+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
1557+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
1558+ </g>
1559+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
1560+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
1561+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
1562+
1563+ </g>
1564+ </g>
1565+ </g>
1566+ <g data-name="mailpot">
1567+ <g fill="#fdf6e3" stroke="#33322E" data-name="mailpot">
1568+ <rect x="187.0" y="8.0" height="31.0" width="73.0" data-name="mailpot"></rect>
1569+ </g>
1570+ <g transform="translate(187, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="mailpot">
1571+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="mailpot">
1572+ <text x="28.5" y="13.5" stroke="none" text-anchor="middle" data-name="mailpot">mailpot</text>
1573+
1574+ </g>
1575+ </g>
1576+ </g>
1577+ <g data-name="postfix">
1578+ <g fill="#fdf6e3" stroke="#33322E" data-name="postfix">
1579+ <rect x="300.0" y="8.0" height="31.0" width="68.0" data-name="postfix"></rect>
1580+ </g>
1581+ <g transform="translate(300, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="postfix">
1582+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="postfix">
1583+ <text x="26.0" y="13.5" stroke="none" text-anchor="middle" data-name="postfix">postfix</text>
1584+
1585+ </g>
1586+ </g>
1587+ </g>
1588+ <g data-name="sqlite">
1589+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1590+ <rect x="408.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1591+ <path d="M408.0 8.0 L408.0 39.0" fill="none" data-name="sqlite"></path>
1592+ <path d="M466.0 8.0 L466.0 39.0" fill="none" data-name="sqlite"></path>
1593+ <ellipse cx="437.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1594+ <path d="M466.0 39.0 L466.0 39.3 L465.9 39.6 L465.7 39.9 L465.4 40.2 L465.1 40.5 L464.7 40.8 L464.3 41.1 L463.7 41.3 L463.1 41.6 L462.5 41.9 L461.7 42.1 L461.0 42.4 L460.1 42.6 L459.2 42.9 L458.3 43.1 L457.2 43.3 L456.2 43.5 L455.1 43.7 L453.9 43.9 L452.7 44.0 L451.5 44.2 L450.2 44.3 L448.9 44.5 L447.6 44.6 L446.2 44.7 L444.9 44.8 L443.5 44.8 L442.0 44.9 L440.6 45.0 L439.2 45.0 L437.7 45.0 L436.3 45.0 L434.8 45.0 L433.4 45.0 L432.0 44.9 L430.5 44.8 L429.1 44.8 L427.8 44.7 L426.4 44.6 L425.1 44.5 L423.8 44.3 L422.5 44.2 L421.3 44.0 L420.1 43.9 L418.9 43.7 L417.8 43.5 L416.8 43.3 L415.7 43.1 L414.8 42.9 L413.9 42.6 L413.0 42.4 L412.3 42.1 L411.5 41.9 L410.9 41.6 L410.3 41.3 L409.7 41.1 L409.3 40.8 L408.9 40.5 L408.6 40.2 L408.3 39.9 L408.1 39.6 L408.0 39.3 L408.0 39.0" data-name="sqlite"></path>
1595+ </g>
1596+ <g transform="translate(408, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1597+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1598+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1599+
1600+ </g>
1601+ </g>
1602+ </g>
1603+ </g>
1604+ </g>
1605+ </g>
1606+ </g>
1607+ <g data-name="contributor-2">
1608+ <g fill="#eee8d5" stroke="#33322E" data-name="contributor-2">
1609+ <circle r="4.0" cx="807.5" cy="493.5" data-name="contributor-2"></circle>
1610+ <path d="M807.5 497.5 L807.5 505.5" fill="none" data-name="contributor-2"></path>
1611+ <path d="M803.5 501.5 L811.5 501.5" fill="none" data-name="contributor-2"></path>
1612+ <path d="M803.5 509.5 L807.5 505.5 L811.5 509.5" fill="none" data-name="contributor-2"></path>
1613+ </g>
1614+ <g transform="translate(750, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor-2">
1615+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor-2">
1616+ <text x="49.5" y="13.5" stroke="none" text-anchor="middle" data-name="contributor-2">contributor-2</text>
1617+
1618+ </g>
1619+ </g>
1620+ </g>
1621+ <g data-name="ayllu-xmpp">
1622+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-xmpp">
1623+ <rect x="562.0" y="245.0" height="134.0" width="491.0" data-name="ayllu-xmpp"></rect>
1624+ <path d="M562.0 276.0 L1053.0 276.0" fill="none" data-name="ayllu-xmpp"></path>
1625+ </g>
1626+ <g transform="translate(562, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-xmpp">
1627+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-xmpp">
1628+ <text x="237.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-xmpp">ayllu-xmpp</text>
1629+
1630+ </g>
1631+ </g>
1632+ <g transform="translate(562, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-xmpp">
1633+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-xmpp">
1634+ <g transform="translate(20, 20)" data-name="ayllu-xmpp">
1635+ <g data-name="capnp-rpc-server">
1636+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
1637+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
1638+ </g>
1639+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
1640+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
1641+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
1642+
1643+ </g>
1644+ </g>
1645+ </g>
1646+ <g data-name="chat interface/bot">
1647+ <g fill="#fdf6e3" stroke="#33322E" data-name="chat interface/bot">
1648+ <rect x="187.0" y="8.0" height="31.0" width="150.0" data-name="chat interface/bot"></rect>
1649+ </g>
1650+ <g transform="translate(187, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="chat interface/bot">
1651+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="chat interface/bot">
1652+ <text x="67.0" y="13.5" stroke="none" text-anchor="middle" data-name="chat interface/bot">chat interface/bot</text>
1653+
1654+ </g>
1655+ </g>
1656+ </g>
1657+ <g data-name="sqlite">
1658+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1659+ <rect x="377.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1660+ <path d="M377.0 8.0 L377.0 39.0" fill="none" data-name="sqlite"></path>
1661+ <path d="M435.0 8.0 L435.0 39.0" fill="none" data-name="sqlite"></path>
1662+ <ellipse cx="406.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1663+ <path d="M435.0 39.0 L435.0 39.3 L434.9 39.6 L434.7 39.9 L434.4 40.2 L434.1 40.5 L433.7 40.8 L433.3 41.1 L432.7 41.3 L432.1 41.6 L431.5 41.9 L430.7 42.1 L430.0 42.4 L429.1 42.6 L428.2 42.9 L427.3 43.1 L426.2 43.3 L425.2 43.5 L424.1 43.7 L422.9 43.9 L421.7 44.0 L420.5 44.2 L419.2 44.3 L417.9 44.5 L416.6 44.6 L415.2 44.7 L413.9 44.8 L412.5 44.8 L411.0 44.9 L409.6 45.0 L408.2 45.0 L406.7 45.0 L405.3 45.0 L403.8 45.0 L402.4 45.0 L401.0 44.9 L399.5 44.8 L398.1 44.8 L396.8 44.7 L395.4 44.6 L394.1 44.5 L392.8 44.3 L391.5 44.2 L390.3 44.0 L389.1 43.9 L387.9 43.7 L386.8 43.5 L385.8 43.3 L384.7 43.1 L383.8 42.9 L382.9 42.6 L382.0 42.4 L381.3 42.1 L380.5 41.9 L379.9 41.6 L379.3 41.3 L378.7 41.1 L378.3 40.8 L377.9 40.5 L377.6 40.2 L377.3 39.9 L377.1 39.6 L377.0 39.3 L377.0 39.0" data-name="sqlite"></path>
1664+ </g>
1665+ <g transform="translate(377, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1666+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1667+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1668+
1669+ </g>
1670+ </g>
1671+ </g>
1672+ </g>
1673+ </g>
1674+ </g>
1675+ </g>
1676+ <g data-name="ayllu-build">
1677+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-build">
1678+ <rect x="1108.5" y="245.0" height="134.0" width="301.0" data-name="ayllu-build"></rect>
1679+ <path d="M1108.5 276.0 L1409.5 276.0" fill="none" data-name="ayllu-build"></path>
1680+ </g>
1681+ <g transform="translate(1108.5, 245)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-build">
1682+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-build">
1683+ <text x="142.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-build">ayllu-build</text>
1684+
1685+ </g>
1686+ </g>
1687+ <g transform="translate(1108.5, 276)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-build">
1688+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-build">
1689+ <g transform="translate(20, 20)" data-name="ayllu-build">
1690+ <g data-name="capnp-rpc-server">
1691+ <g fill="#fdf6e3" stroke="#33322E" data-name="capnp-rpc-server">
1692+ <rect x="0.0" y="8.0" height="31.0" width="147.0" data-name="capnp-rpc-server"></rect>
1693+ </g>
1694+ <g transform="translate(0, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="capnp-rpc-server">
1695+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="capnp-rpc-server">
1696+ <text x="65.5" y="13.5" stroke="none" text-anchor="middle" data-name="capnp-rpc-server">capnp-rpc-server</text>
1697+
1698+ </g>
1699+ </g>
1700+ </g>
1701+ <g data-name="sqlite">
1702+ <g fill="#fdf6e3" stroke="#33322E" data-name="sqlite">
1703+ <rect x="187.0" y="8.0" height="31.0" width="58.0" stroke="none" data-name="sqlite"></rect>
1704+ <path d="M187.0 8.0 L187.0 39.0" fill="none" data-name="sqlite"></path>
1705+ <path d="M245.0 8.0 L245.0 39.0" fill="none" data-name="sqlite"></path>
1706+ <ellipse cx="216.0" cy="8.0" rx="29.0" ry="6.0" data-name="sqlite"></ellipse>
1707+ <path d="M245.0 39.0 L245.0 39.3 L244.9 39.6 L244.7 39.9 L244.4 40.2 L244.1 40.5 L243.7 40.8 L243.3 41.1 L242.7 41.3 L242.1 41.6 L241.5 41.9 L240.7 42.1 L240.0 42.4 L239.1 42.6 L238.2 42.9 L237.3 43.1 L236.2 43.3 L235.2 43.5 L234.1 43.7 L232.9 43.9 L231.7 44.0 L230.5 44.2 L229.2 44.3 L227.9 44.5 L226.6 44.6 L225.2 44.7 L223.9 44.8 L222.5 44.8 L221.0 44.9 L219.6 45.0 L218.2 45.0 L216.7 45.0 L215.3 45.0 L213.8 45.0 L212.4 45.0 L211.0 44.9 L209.5 44.8 L208.1 44.8 L206.8 44.7 L205.4 44.6 L204.1 44.5 L202.8 44.3 L201.5 44.2 L200.3 44.0 L199.1 43.9 L197.9 43.7 L196.8 43.5 L195.8 43.3 L194.7 43.1 L193.8 42.9 L192.9 42.6 L192.0 42.4 L191.3 42.1 L190.5 41.9 L189.9 41.6 L189.3 41.3 L188.7 41.1 L188.3 40.8 L187.9 40.5 L187.6 40.2 L187.3 39.9 L187.1 39.6 L187.0 39.3 L187.0 39.0" data-name="sqlite"></path>
1708+ </g>
1709+ <g transform="translate(187, 12)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="sqlite">
1710+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="sqlite">
1711+ <text x="21.0" y="13.5" stroke="none" text-anchor="middle" data-name="sqlite">sqlite</text>
1712+
1713+ </g>
1714+ </g>
1715+ </g>
1716+ </g>
1717+ </g>
1718+ </g>
1719+ </g>
1720+ <g data-name="ayllu-shell">
1721+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-shell">
1722+ <rect x="1612.0" y="296.5" height="31.0" width="94.0" data-name="ayllu-shell"></rect>
1723+ </g>
1724+ <g transform="translate(1612, 296.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-shell">
1725+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-shell">
1726+ <text x="39.0" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-shell">ayllu-shell</text>
1727+
1728+ </g>
1729+ </g>
1730+ </g>
1731+ <g data-name="contributor">
1732+ <g fill="#eee8d5" stroke="#33322E" data-name="contributor">
1733+ <circle r="4.0" cx="1659.0" cy="493.5" data-name="contributor"></circle>
1734+ <path d="M1659.0 497.5 L1659.0 505.5" fill="none" data-name="contributor"></path>
1735+ <path d="M1655.0 501.5 L1663.0 501.5" fill="none" data-name="contributor"></path>
1736+ <path d="M1655.0 509.5 L1659.0 505.5 L1663.0 509.5" fill="none" data-name="contributor"></path>
1737+ </g>
1738+ <g transform="translate(1608.5, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="contributor">
1739+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="contributor">
1740+ <text x="42.5" y="13.5" stroke="none" text-anchor="middle" data-name="contributor">contributor</text>
1741+
1742+ </g>
1743+ </g>
1744+ </g>
1745+ <g data-name="ayllu-cli">
1746+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-cli">
1747+ <rect x="1746.0" y="296.5" height="31.0" width="75.0" data-name="ayllu-cli"></rect>
1748+ </g>
1749+ <g transform="translate(1746, 296.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-cli">
1750+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-cli">
1751+ <text x="29.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-cli">ayllu-cli</text>
1752+
1753+ </g>
1754+ </g>
1755+ </g>
1756+ <g data-name="admin">
1757+ <g fill="#eee8d5" stroke="#33322E" data-name="admin">
1758+ <circle r="4.0" cx="1783.5" cy="493.5" data-name="admin"></circle>
1759+ <path d="M1783.5 497.5 L1783.5 505.5" fill="none" data-name="admin"></path>
1760+ <path d="M1779.5 501.5 L1787.5 501.5" fill="none" data-name="admin"></path>
1761+ <path d="M1779.5 509.5 L1783.5 505.5 L1787.5 509.5" fill="none" data-name="admin"></path>
1762+ </g>
1763+ <g transform="translate(1752, 505.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="admin">
1764+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="admin">
1765+ <text x="23.5" y="13.5" stroke="none" text-anchor="middle" data-name="admin">admin</text>
1766+
1767+ </g>
1768+ </g>
1769+ </g>
1770+ <g data-name="ayllu-builder-1">
1771+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-1">
1772+ <rect x="909.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-1"></rect>
1773+ <path d="M909.5 450.0 L1102.5 450.0" fill="none" data-name="ayllu-builder-1"></path>
1774+ </g>
1775+ <g transform="translate(909.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-1">
1776+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-1">
1777+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-1">ayllu-builder-1</text>
1778+
1779+ </g>
1780+ </g>
1781+ <g transform="translate(909.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-1">
1782+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-1">
1783+ <g transform="translate(20, 20)" data-name="ayllu-builder-1">
1784+ <g data-name="qemu-x86_64">
1785+ <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-x86_64">
1786+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="qemu-x86_64"></rect>
1787+ <path d="M0.0 31.0 L0.0 0.0 L113.1 0.0 L113.1 31.0 Z" data-name="qemu-x86_64"></path>
1788+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="qemu-x86_64"></path>
1789+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="qemu-x86_64"></path>
1790+ </g>
1791+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
1792+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
1793+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">qemu-x86_64</text>
1794+
1795+ </g>
1796+ </g>
1797+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
1798+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
1799+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">capnp-rpc-server</text>
1800+
1801+ </g>
1802+ </g>
1803+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-x86_64">
1804+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-x86_64">
1805+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-x86_64">executor</text>
1806+
1807+ </g>
1808+ </g>
1809+ </g>
1810+ </g>
1811+ </g>
1812+ </g>
1813+ </g>
1814+ <g data-name="ayllu-builder-2">
1815+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-2">
1816+ <rect x="1142.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-2"></rect>
1817+ <path d="M1142.5 450.0 L1335.5 450.0" fill="none" data-name="ayllu-builder-2"></path>
1818+ </g>
1819+ <g transform="translate(1142.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-2">
1820+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-2">
1821+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-2">ayllu-builder-2</text>
1822+
1823+ </g>
1824+ </g>
1825+ <g transform="translate(1142.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-2">
1826+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-2">
1827+ <g transform="translate(20, 20)" data-name="ayllu-builder-2">
1828+ <g data-name="qemu-aarch64">
1829+ <g fill="#fdf6e3" stroke="#33322E" data-name="qemu-aarch64">
1830+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="qemu-aarch64"></rect>
1831+ <path d="M0.0 31.0 L0.0 0.0 L118.9 0.0 L118.9 31.0 Z" data-name="qemu-aarch64"></path>
1832+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="qemu-aarch64"></path>
1833+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="qemu-aarch64"></path>
1834+ </g>
1835+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
1836+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
1837+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">qemu-aarch64</text>
1838+
1839+ </g>
1840+ </g>
1841+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
1842+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
1843+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">capnp-rpc-server</text>
1844+
1845+ </g>
1846+ </g>
1847+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="qemu-aarch64">
1848+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="qemu-aarch64">
1849+ <text x="0.0" y="13.5" stroke="none" data-name="qemu-aarch64">exectuor</text>
1850+
1851+ </g>
1852+ </g>
1853+ </g>
1854+ </g>
1855+ </g>
1856+ </g>
1857+ </g>
1858+ <g data-name="ayllu-builder-n">
1859+ <g fill="#eee8d5" stroke="#33322E" data-name="ayllu-builder-n">
1860+ <rect x="1375.5" y="419.0" height="180.0" width="193.0" data-name="ayllu-builder-n"></rect>
1861+ <path d="M1375.5 450.0 L1568.5 450.0" fill="none" data-name="ayllu-builder-n"></path>
1862+ </g>
1863+ <g transform="translate(1375.5, 419)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ayllu-builder-n">
1864+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ayllu-builder-n">
1865+ <text x="88.5" y="13.5" stroke="none" text-anchor="middle" data-name="ayllu-builder-n">ayllu-builder-n</text>
1866+
1867+ </g>
1868+ </g>
1869+ <g transform="translate(1375.5, 450)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ayllu-builder-n">
1870+ <g transform="translate(8, 8)" fill="#33322E" data-name="ayllu-builder-n">
1871+ <g transform="translate(20, 20)" data-name="ayllu-builder-n">
1872+ <g data-name="lxc">
1873+ <g fill="#fdf6e3" stroke="#33322E" data-name="lxc">
1874+ <rect x="0.0" y="31.0" height="62.0" width="137.0" data-name="lxc"></rect>
1875+ <path d="M0.0 31.0 L0.0 0.0 L35.2 0.0 L35.2 31.0 Z" data-name="lxc"></path>
1876+ <path d="M0.0 31.0 L137.0 31.0" fill="none" data-name="lxc"></path>
1877+ <path d="M0.0 62.0 L137.0 62.0" fill="none" data-name="lxc"></path>
1878+ </g>
1879+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
1880+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
1881+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">lxc</text>
1882+
1883+ </g>
1884+ </g>
1885+ <g transform="translate(0, 31)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
1886+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
1887+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">capnp-rpc-server</text>
1888+
1889+ </g>
1890+ </g>
1891+ <g transform="translate(0, 62)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="lxc">
1892+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="lxc">
1893+ <text x="0.0" y="13.5" stroke="none" data-name="lxc">executor</text>
1894+
1895+ </g>
1896+ </g>
1897+ </g>
1898+ </g>
1899+ </g>
1900+ </g>
1901+ </g>
1902+ </g>
1903+ </g>
1904+ </g>
1905+ </g>
1906+ </svg>
1907\ No newline at end of file
1908 diff --git a/www/static/assets/computer.png b/www/static/assets/computer.png
1909deleted file mode 100644
1910index dbe2651..0000000
1911 Binary files a/www/static/assets/computer.png and /dev/null differ
1912 diff --git a/www/static/assets/crescent.png b/www/static/assets/crescent.png
1913deleted file mode 100644
1914index c46dc91..0000000
1915 Binary files a/www/static/assets/crescent.png and /dev/null differ
1916 diff --git a/www/static/assets/crescent.svg b/www/static/assets/crescent.svg
1917deleted file mode 100644
1918index 51596eb..0000000
1919--- a/www/static/assets/crescent.svg
1920+++ /dev/null
1921 @@ -1,12 +0,0 @@
1922- <svg id="emoji" viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg">
1923- <g id="color">
1924- <path fill="#FCEA2B" stroke="none" d="M7.3634,42.4095c4.5525,6.1703,11.874,10.1726,20.1303,10.1726c13.8071,0,25-11.1929,25-25 c0-8.5226-4.2646-16.0492-10.7763-20.5621c13.0383,2.8385,22.7812,14.4426,22.7812,28.3317c0,16.0163-12.9837,29-29,29 C21.9109,64.3517,10.5097,55.0229,7.3634,42.4095z"/>
1925- <path fill="#F1B31C" stroke="none" d="M45.8373,9.2108c8.25,4.25,16.1946,11.8724,16.1946,24.6742c0,15.4494-12.5242,27.9735-27.9735,27.9735 c-9.2431,0-19.7524-4.8353-24.294-15.5436c0,0,4.3805,18.6568,25.7189,18.665c19.327,0.0074,28.0419-20.6218,28.0419-20.6218 C70.033,12.3815,45.8373,9.2108,45.8373,9.2108z"/>
1926- </g>
1927- <g id="hair"/>
1928- <g id="skin"/>
1929- <g id="skin-shadow"/>
1930- <g id="line">
1931- <path fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M7.3634,42.4095c4.5525,6.1703,11.874,10.1726,20.1303,10.1726c13.8071,0,25-11.1929,25-25 c0-8.5226-4.2646-16.0492-10.7763-20.5621c13.0383,2.8385,22.7812,14.4426,22.7812,28.3317c0,16.0163-12.9837,29-29,29 C21.9109,64.3517,10.5097,55.0229,7.3634,42.4095z"/>
1932- </g>
1933- </svg>
1934 diff --git a/www/static/assets/crescent_logo.png b/www/static/assets/crescent_logo.png
1935deleted file mode 100644
1936index c3aef0d..0000000
1937 Binary files a/www/static/assets/crescent_logo.png and /dev/null differ
1938 diff --git a/www/static/assets/crescent_logo.svg b/www/static/assets/crescent_logo.svg
1939deleted file mode 100644
1940index b766584..0000000
1941--- a/www/static/assets/crescent_logo.svg
1942+++ /dev/null
1943 @@ -1,192 +0,0 @@
1944- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1945- <svg
1946- id="emoji"
1947- viewBox="0 0 75 80"
1948- version="1.1"
1949- sodipodi:docname="ayllu_logo.svg"
1950- width="75"
1951- height="80"
1952- inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
1953- inkscape:export-filename="ayllu_logo.png"
1954- inkscape:export-xdpi="92.290512"
1955- inkscape:export-ydpi="92.290512"
1956- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
1957- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
1958- xmlns="http://www.w3.org/2000/svg"
1959- xmlns:svg="http://www.w3.org/2000/svg"
1960- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
1961- xmlns:cc="http://creativecommons.org/ns#"
1962- xmlns:dc="http://purl.org/dc/elements/1.1/">
1963- <title
1964- id="title8">Ayllu Logo</title>
1965- <defs
1966- id="defs3">
1967- <pattern
1968- patternUnits="userSpaceOnUse"
1969- width="100"
1970- height="100"
1971- id="Gingham"
1972- preserveAspectRatio="xMidYMid"
1973- patternTransform="scale(0.5,0.5)"
1974- style="fill:#0000ff">
1975- <rect
1976- style="fill-opacity:0.5;stroke:none"
1977- id="rect3"
1978- width="50"
1979- height="50"
1980- x="50"
1981- y="0" />
1982- <rect
1983- style="stroke:none"
1984- id="rect4"
1985- width="50"
1986- height="50"
1987- x="50"
1988- y="50" />
1989- <rect
1990- style="fill-opacity:0.5;stroke:none"
1991- id="rect5"
1992- width="50"
1993- height="50"
1994- x="0"
1995- y="50" />
1996- </pattern>
1997- </defs>
1998- <sodipodi:namedview
1999- id="namedview3"
2000- pagecolor="#ffffff"
2001- bordercolor="#999999"
2002- borderopacity="1"
2003- inkscape:showpageshadow="0"
2004- inkscape:pageopacity="0"
2005- inkscape:pagecheckerboard="0"
2006- inkscape:deskcolor="#d1d1d1"
2007- inkscape:zoom="8.25"
2008- inkscape:cx="5.1515152"
2009- inkscape:cy="36.424242"
2010- inkscape:window-width="3826"
2011- inkscape:window-height="1029"
2012- inkscape:window-x="0"
2013- inkscape:window-y="0"
2014- inkscape:window-maximized="1"
2015- inkscape:current-layer="emoji"
2016- showgrid="true">
2017- <inkscape:grid
2018- id="grid8"
2019- units="px"
2020- originx="0"
2021- originy="0"
2022- spacingx="1"
2023- spacingy="1"
2024- empcolor="#0099e5"
2025- empopacity="0.30196078"
2026- color="#0099e5"
2027- opacity="0.14901961"
2028- empspacing="5"
2029- dotted="false"
2030- gridanglex="30"
2031- gridanglez="30"
2032- visible="true" />
2033- </sodipodi:namedview>
2034- <g
2035- inkscape:groupmode="layer"
2036- id="layer7"
2037- inkscape:label="bg">
2038- <rect
2039- style="fill:#000000;fill-opacity:1;stroke-width:3.26929"
2040- id="rect14"
2041- width="74.891571"
2042- height="79.840912"
2043- x="0.029829545"
2044- y="0.18181819"
2045- rx="4.2495718"
2046- ry="4.1789107" />
2047- </g>
2048- <g
2049- inkscape:groupmode="layer"
2050- id="layer1"
2051- inkscape:label="bg 1">
2052- <g
2053- inkscape:groupmode="layer"
2054- id="layer7-3"
2055- inkscape:label="bg"
2056- transform="translate(0.10227227,0.03882594)">
2057- <rect
2058- style="fill:#fcea2b;fill-opacity:1;stroke-width:3.10583"
2059- id="rect14-6"
2060- width="71.146996"
2061- height="75.848869"
2062- x="1.9021188"
2063- y="2.1778409"
2064- rx="4.0370932"
2065- ry="3.9699652" />
2066- </g>
2067- </g>
2068- <g
2069- inkscape:groupmode="layer"
2070- id="layer4"
2071- inkscape:label="text"
2072- transform="translate(-1.2556819,-2.7045453)"
2073- style="display:inline" />
2074- <g
2075- id="g8"
2076- transform="matrix(1.0086293,0,0,0.99990106,-0.07783972,3.322434)">
2077- <g
2078- id="color"
2079- transform="translate(1.3252841,0.98390174)"
2080- style="display:inline"
2081- inkscape:label="moon-shade">
2082- <path
2083- fill="#fcea2b"
2084- stroke="none"
2085- d="m 7.3634,42.4095 c 4.5525,6.1703 11.874,10.1726 20.1303,10.1726 13.8071,0 25,-11.1929 25,-25 0,-8.5226 -4.2646,-16.0492 -10.7763,-20.5621 13.0383,2.8385 22.7812,14.4426 22.7812,28.3317 0,16.0163 -12.9837,29 -29,29 -13.5877,0 -24.9889,-9.3288 -28.1352,-21.9422 z"
2086- id="path1" />
2087- <path
2088- fill="#f1b31c"
2089- stroke="none"
2090- d="m 45.8373,9.2108 c 8.25,4.25 16.1946,11.8724 16.1946,24.6742 0,15.4494 -12.5242,27.9735 -27.9735,27.9735 -9.2431,0 -19.7524,-4.8353 -24.294,-15.5436 0,0 4.3805,18.6568 25.7189,18.665 C 54.8103,64.9873 63.5252,44.3581 63.5252,44.3581 70.033,12.3815 45.8373,9.2108 45.8373,9.2108 Z"
2091- id="path2" />
2092- </g>
2093- <g
2094- id="line"
2095- transform="translate(1.3252841,0.98390174)"
2096- inkscape:label="moon-line">
2097- <path
2098- fill="none"
2099- stroke="#000000"
2100- stroke-linecap="round"
2101- stroke-linejoin="round"
2102- stroke-miterlimit="10"
2103- stroke-width="2"
2104- d="m 7.3634,42.4095 c 4.5525,6.1703 11.874,10.1726 20.1303,10.1726 13.8071,0 25,-11.1929 25,-25 0,-8.5226 -4.2646,-16.0492 -10.7763,-20.5621 13.0383,2.8385 22.7812,14.4426 22.7812,28.3317 0,16.0163 -12.9837,29 -29,29 -13.5877,0 -24.9889,-9.3288 -28.1352,-21.9422 z"
2105- id="path3" />
2106- </g>
2107- </g>
2108- <metadata
2109- id="metadata8">
2110- <rdf:RDF>
2111- <cc:Work
2112- rdf:about="">
2113- <dc:title>Ayllu Logo</dc:title>
2114- <cc:license
2115- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
2116- <dc:description>Originally created by Vanessa Boutzikoudi @ https://openmoji.org/library/emoji-1F319/</dc:description>
2117- </cc:Work>
2118- <cc:License
2119- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
2120- <cc:permits
2121- rdf:resource="http://creativecommons.org/ns#Reproduction" />
2122- <cc:permits
2123- rdf:resource="http://creativecommons.org/ns#Distribution" />
2124- <cc:requires
2125- rdf:resource="http://creativecommons.org/ns#Notice" />
2126- <cc:requires
2127- rdf:resource="http://creativecommons.org/ns#Attribution" />
2128- <cc:permits
2129- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
2130- <cc:requires
2131- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
2132- </cc:License>
2133- </rdf:RDF>
2134- </metadata>
2135- </svg>
2136 diff --git a/www/templates/base.html b/www/templates/base.html
2137index 865d7d8..d77b7ef 100644
2138--- a/www/templates/base.html
2139+++ b/www/templates/base.html
2140 @@ -22,7 +22,7 @@
2141 </ul>
2142 <ul>
2143 <li><a href="https://ayllu-forge.org/browse">browse</a></li>
2144- <!--<li><a href="/docs">docs</a></li> -->
2145+ <li><a href="/docs">docs</a></li>
2146 </ul>
2147 </nav>
2148 <body class="container">