branding: SimurgArray brand kit (mark, wordmark, lockups, icons, templates, guide)
Frontal dotted simurg on a bead grid: gold body and wings, three-dot crown, red / gold / green channel plumes with peacock eyes. Detailed (31x27), simple (11x10) and micro (7x7) drawings; dark, light, gold, black, white versions; outlined Noto Sans wordmark; favicon and app icons; README banner, social preview, avatar, featured-image template, report corner mark, CLI banner. Checks: WCAG contrast table, protan/deutan simulation, icon sizes, family sheet. Blog featured images regenerated with the new mark for consistency. Geometry shared in scripts/brand/simurg_mark.py. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01814GKVzZVL3FuF3DeiZXhv
No files matched your search
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 103 KiB |
@@ -0,0 +1,171 @@
|
|||||||
|
# SimurgArray brand guide
|
||||||
|
|
||||||
|
Everything here is generated by `scripts/brand/make_brand.py` (logos, icons, templates, checks) and
|
||||||
|
`scripts/blog/make_featured_images.py` (blog images). The mark geometry lives in one place,
|
||||||
|
`scripts/brand/simurg_mark.py`, so every file shows exactly the same dots. Artwork is released under CC BY 4.0; the
|
||||||
|
fonts are Noto Sans and Noto Sans Mono (SIL Open Font License 1.1).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## The story in three sentences
|
||||||
|
|
||||||
|
In Attar's *Conference of the Birds*, thirty birds search for the Simurg and find that "si murg" means thirty birds:
|
||||||
|
the Simurg was all of them together. A genotyping array is the same idea, hundreds of thousands of small beads that
|
||||||
|
only mean something when read together. SimurgArray is the tool that reads them together, openly.
|
||||||
|
|
||||||
|
Tagline: **Thirty birds, one picture.**
|
||||||
|
|
||||||
|
## The mark
|
||||||
|
|
||||||
|
A simurg seen from the front, wings raised, drawn only with round dots on a square grid, the way beads sit on a
|
||||||
|
BeadChip.
|
||||||
|
|
||||||
|
* **Gold body, wings and crown.** Gold is what you get when the two scanner channels meet.
|
||||||
|
* **Three tail plumes:** red on the left (the red channel), gold in the middle, green on the right (the green
|
||||||
|
channel). Each ends in a round peacock eye.
|
||||||
|
* **Three dots on the head** form a small crown. Nobody has to notice it.
|
||||||
|
|
||||||
|
Three drawings of the same bird, chosen by size:
|
||||||
|
|
||||||
|
* `mark` (31 x 27 dots): 100 px and larger, banners, lockups, print.
|
||||||
|
* `mark_simple` (11 x 10 dots): 24 to 100 px, report corners, small UI.
|
||||||
|
* `mark_micro` (7 x 7 dots): 16 px favicon only.
|
||||||
|
|
||||||
|
Colour versions of each, in `logo/` as SVG and in `logo/png/` as PNG:
|
||||||
|
|
||||||
|
* `dark`: gold #D4A017 with red and green plumes, for indigo or other dark backgrounds.
|
||||||
|
* `light`: deep gold #A87A00 with red and green plumes, for paper or white.
|
||||||
|
* `gold`, `black`, `white`: single colour, for stamps, embossing, merchandise, fax machines that still exist.
|
||||||
|
|
||||||
|
The SVGs contain only circles, no embedded images and no fonts, so they render the same everywhere.
|
||||||
|
|
||||||
|
### Wordmark and lockups
|
||||||
|
|
||||||
|
"Simurg" in the text colour and "Array" in the accent colour, Noto Sans SemiBold, outlined to paths so no font is
|
||||||
|
needed. On dark backgrounds the accent is gold #D4A017, on light backgrounds gold ink #8C6500.
|
||||||
|
|
||||||
|
* `lockup_horizontal_*`: mark left, wordmark right. The default.
|
||||||
|
* `lockup_stacked_*`: mark above, wordmark centred below. For square spaces.
|
||||||
|
|
||||||
|
Clear space around any lockup: at least the height of the mark's head (about three dot rows) on every side.
|
||||||
|
|
||||||
|
### Do
|
||||||
|
|
||||||
|
* Keep the dots round and on their grid.
|
||||||
|
* Keep the red plume on the left and the green plume on the right.
|
||||||
|
* Use the light version on light backgrounds; plain gold on paper is too faint (contrast 2.18).
|
||||||
|
* Scale the whole mark; pick the simple or micro drawing when the dots would get smaller than about 2 px.
|
||||||
|
|
||||||
|
### Do not
|
||||||
|
|
||||||
|
* Recolour the plumes, add gradients, shadows, glows or outlines.
|
||||||
|
* Turn dots into squares or connect them with lines.
|
||||||
|
* Rotate, mirror or stretch the mark.
|
||||||
|
* Put the mark on busy photos.
|
||||||
|
* Combine it with DNA helices, crosses, pills or any clinical imagery. SimurgArray is a research tool.
|
||||||
|
* Use the logos, colours or product names of any genomics company as visual elements. Illumina and Infinium appear
|
||||||
|
only as plain words describing compatibility.
|
||||||
|
|
||||||
|
## Colour
|
||||||
|
|
||||||
|
Brand colours:
|
||||||
|
|
||||||
|
* **Night indigo** #1E2240: backgrounds (most of the work happened at night). Deep indigo #12142A for gradients.
|
||||||
|
* **Paper** #F7F5EF: light backgrounds and text on dark.
|
||||||
|
* **Simurg gold** #D4A017: the bird, accents on dark.
|
||||||
|
* **Gold deep** #A87A00: the bird on light backgrounds.
|
||||||
|
* **Gold ink** #8C6500: accent text on light backgrounds.
|
||||||
|
* **Channel red** #C8453A and **channel green** #2F8F5B: the plumes and the bead grid only. Never for text.
|
||||||
|
* **Muted on dark** #A3A7C9 and **muted on light** #5A5E7E: secondary text.
|
||||||
|
|
||||||
|
Rough proportions on a dark page: indigo 80, paper 10, gold 7, red and green 3 together.
|
||||||
|
|
||||||
|
Every text colour passes WCAG AA (4.5) and every graphic colour passes 3.0 on its background. The full table with
|
||||||
|
the computed ratios is in `checks/contrast.md`.
|
||||||
|
|
||||||
|
### Charts
|
||||||
|
|
||||||
|
Red against green is exactly the pair that red green colour blind readers cannot separate, and in genotyping it is
|
||||||
|
also the most tempting pair. So charts never use the channel colours to tell data apart. Use the Okabe and Ito
|
||||||
|
palette with a second cue:
|
||||||
|
|
||||||
|
* AA: vermillion #D55E00, circles.
|
||||||
|
* AB: bluish green #009E73, triangles.
|
||||||
|
* BB: blue #0072B2, squares.
|
||||||
|
|
||||||
|
Always add shape, position or a direct label as well as colour. `checks/colour_vision_check.png` shows the mark and
|
||||||
|
an example cluster plot under simulated protanopia and deuteranopia (Machado et al. 2009). The bird stays readable
|
||||||
|
because its shape carries it; the two coloured plumes become similar but keep their left and right positions; the
|
||||||
|
chart stays readable because of the shapes.
|
||||||
|
|
||||||
|
## Type
|
||||||
|
|
||||||
|
* **Noto Sans** for everything people read. Headings SemiBold or Bold, body Regular.
|
||||||
|
* **Noto Sans Mono** for anything a user might paste into a terminal, file names, and small labels such as
|
||||||
|
"PART 3".
|
||||||
|
* Numbers in tables use tabular figures (`font-variant-numeric: tabular-nums`), so columns of call rates line up.
|
||||||
|
|
||||||
|
Suggested sizes for the web: body 17 px with 1.6 line height, H1 40 px, H2 28 px, H3 21 px, code 15 px, table text
|
||||||
|
15 px. Reports: 13 px tables, 12 px captions.
|
||||||
|
|
||||||
|
## The dot grid
|
||||||
|
|
||||||
|
New illustrations are built from the same material as the logo.
|
||||||
|
|
||||||
|
* Background grid: dots every 18 px (at 1200 px width), radius 1.6 px, alternating red and green at 14 % opacity
|
||||||
|
over the indigo gradient.
|
||||||
|
* Foreground dots: radius 40 % of the cell, so neighbours never touch.
|
||||||
|
* Colour by meaning: gold for the subject, red and green only for things that come from the two channels, dimmed
|
||||||
|
gold or indigo mixes for "background" subjects.
|
||||||
|
* Motion is suggested with trails of shrinking, fading dots, never with lines.
|
||||||
|
* One subject per image. Empty space is part of the grid.
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
In `templates/`:
|
||||||
|
|
||||||
|
* `featured_template_1200x630.jpg`: WordPress featured image and social preview for posts. Title on the left in Noto
|
||||||
|
Sans Bold (58 px, shrinks to fit a 540 px column), "PART N" above it in gold mono, footer with three dots, the name
|
||||||
|
and the tagline. The five blog images in `blog/images/` follow this layout, each with its own small motif.
|
||||||
|
* `social_preview_1280x640.png`: the repository preview image.
|
||||||
|
* `readme_banner_1280x320.png`: the top of the README.
|
||||||
|
* `avatar_512.png`: square avatar; the mark sits inside the central circle, so round crops are safe.
|
||||||
|
* `report_corner_mark.svg` and `report_corner_mark.html`: the small mark for HTML QC reports. It is always shown with
|
||||||
|
the software version and the first 12 characters of the run manifest checksum. The bird is for recognition; the
|
||||||
|
checksum is what actually proves anything.
|
||||||
|
* `cli_banner.txt`: six lines, 46 columns, plain ASCII, for `simurg --version` or a first run.
|
||||||
|
|
||||||
|
Icons in `icons/`: `favicon.ico` (16, 32, 48), PNGs at 16, 32, 48, 180 (Apple touch) and 512, all on a rounded
|
||||||
|
indigo tile. `checks/icon_sizes.png` shows them side by side.
|
||||||
|
|
||||||
|
## Making a new featured image
|
||||||
|
|
||||||
|
1. Add the post to `POSTS` in `scripts/blog/make_featured_images.py`: file stem, "Part N", the title with `\n`
|
||||||
|
where lines should break, and a motif.
|
||||||
|
2. Reuse a motif or write a new one: draw the mark with `draw_mark`, add at most one supporting element.
|
||||||
|
3. Run `python3 scripts/blog/make_featured_images.py`. Files come out at 1200 x 630 and about 100 KB.
|
||||||
|
|
||||||
|
## Voice
|
||||||
|
|
||||||
|
* Plain, exact English. Short sentences. Numbers instead of adjectives.
|
||||||
|
* Every claim sits next to its limitation, in the same paragraph.
|
||||||
|
* Humour only as a faint smile.
|
||||||
|
* No em dashes, en dashes or hyphens in prose; rephrase instead. Hyphens in code, file names and options are fine.
|
||||||
|
* Never: revolutionary, cutting edge, AI powered, next generation, seamless, unlock.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* Yes: "Concordance with 30x sequencing was 99.44 %, against 99.46 % for the vendor's cluster file."
|
||||||
|
* No: "Best in class accuracy that rivals commercial solutions."
|
||||||
|
* Yes: "Research use only. The PGx report shows the evidence behind every call."
|
||||||
|
* No: "Personalised medicine, unlocked."
|
||||||
|
|
||||||
|
## Acceptance checks
|
||||||
|
|
||||||
|
1. **Recognisable at 48 px, distinctive at 16 px:** see `checks/icon_sizes.png`. The simple and micro drawings were
|
||||||
|
drawn by hand for these sizes instead of scaling the detailed one down.
|
||||||
|
2. **Contrast:** all text pairs pass AA, all graphic pairs pass 3.0 (`checks/contrast.md`); plain gold on paper is
|
||||||
|
the one pair that fails, and the guide forbids it.
|
||||||
|
3. **Colour vision:** `checks/colour_vision_check.png`.
|
||||||
|
4. **One family:** `checks/family.jpg` puts the five blog images and the templates side by side.
|
||||||
|
5. **No dashes in prose:** this guide and all generated text were checked for em dashes, en dashes and hyphens.
|
||||||
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
| colour | on | use | contrast | AA text (4.5) | graphics (3.0) |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| paper #F7F5EF | indigo #1E2240 | text on dark | 14.18 | yes | yes |
|
||||||
|
| muted_dark #A3A7C9 | indigo #1E2240 | secondary text on dark | 6.57 | yes | yes |
|
||||||
|
| gold #D4A017 | indigo #1E2240 | accent text on dark | 6.51 | yes | yes |
|
||||||
|
| indigo #1E2240 | paper #F7F5EF | text on light | 14.18 | yes | yes |
|
||||||
|
| muted_light #5A5E7E | paper #F7F5EF | secondary text on light | 5.77 | yes | yes |
|
||||||
|
| gold_ink #8C6500 | paper #F7F5EF | accent text on light | 4.84 | yes | yes |
|
||||||
|
| red #C8453A | indigo #1E2240 | graphics on dark | 3.22 | no | yes |
|
||||||
|
| green #2F8F5B | indigo #1E2240 | graphics on dark | 3.83 | no | yes |
|
||||||
|
| gold_deep #A87A00 | paper #F7F5EF | graphics on light | 3.54 | no | yes |
|
||||||
|
| red #C8453A | paper #F7F5EF | graphics on light | 4.41 | no | yes |
|
||||||
|
| green #2F8F5B | paper #F7F5EF | graphics on light | 3.70 | no | yes |
|
||||||
|
| gold #D4A017 | paper #F7F5EF | never for text or small marks | 2.18 | no | no |
|
||||||
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 304 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8" width="8" height="8" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="8" height="8" rx="1.44" fill="#1E2240"/><g fill="#D4A017"><circle cx="1.000" cy="1.000" r="0.420"/><circle cx="7.000" cy="1.000" r="0.420"/><circle cx="1.000" cy="2.000" r="0.420"/><circle cx="2.000" cy="2.000" r="0.420"/><circle cx="4.000" cy="2.000" r="0.420"/><circle cx="6.000" cy="2.000" r="0.420"/><circle cx="7.000" cy="2.000" r="0.420"/><circle cx="2.000" cy="3.000" r="0.420"/><circle cx="3.000" cy="3.000" r="0.420"/><circle cx="4.000" cy="3.000" r="0.420"/><circle cx="5.000" cy="3.000" r="0.420"/><circle cx="6.000" cy="3.000" r="0.420"/><circle cx="3.000" cy="4.000" r="0.420"/><circle cx="4.000" cy="4.000" r="0.420"/><circle cx="5.000" cy="4.000" r="0.420"/><circle cx="4.000" cy="5.000" r="0.420"/><circle cx="4.000" cy="6.000" r="0.420"/><circle cx="4.000" cy="7.000" r="0.420"/></g><g fill="#C8453A"><circle cx="2.000" cy="6.000" r="0.420"/><circle cx="1.000" cy="7.000" r="0.420"/></g><g fill="#2F8F5B"><circle cx="6.000" cy="6.000" r="0.420"/><circle cx="7.000" cy="7.000" r="0.420"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 949 B |
|
After Width: | Height: | Size: 59 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34 34" width="34" height="34" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="34" height="34" rx="6.12" fill="#1E2240"/><g fill="#D4A017"><circle cx="3.000" cy="4.000" r="0.400"/><circle cx="4.000" cy="4.000" r="0.400"/><circle cx="30.000" cy="4.000" r="0.400"/><circle cx="31.000" cy="4.000" r="0.400"/><circle cx="3.000" cy="5.000" r="0.400"/><circle cx="4.000" cy="5.000" r="0.400"/><circle cx="5.000" cy="5.000" r="0.400"/><circle cx="15.000" cy="5.000" r="0.400"/><circle cx="17.000" cy="5.000" r="0.400"/><circle cx="19.000" cy="5.000" r="0.400"/><circle cx="29.000" cy="5.000" r="0.400"/><circle cx="30.000" cy="5.000" r="0.400"/><circle cx="31.000" cy="5.000" r="0.400"/><circle cx="3.000" cy="6.000" r="0.400"/><circle cx="4.000" cy="6.000" r="0.400"/><circle cx="5.000" cy="6.000" r="0.400"/><circle cx="6.000" cy="6.000" r="0.400"/><circle cx="7.000" cy="6.000" r="0.400"/><circle cx="15.000" cy="6.000" r="0.400"/><circle cx="16.000" cy="6.000" r="0.400"/><circle cx="17.000" cy="6.000" r="0.400"/><circle cx="18.000" cy="6.000" r="0.400"/><circle cx="19.000" cy="6.000" r="0.400"/><circle cx="27.000" cy="6.000" r="0.400"/><circle cx="28.000" cy="6.000" r="0.400"/><circle cx="29.000" cy="6.000" r="0.400"/><circle cx="30.000" cy="6.000" r="0.400"/><circle cx="31.000" cy="6.000" r="0.400"/><circle cx="5.000" cy="7.000" r="0.400"/><circle cx="6.000" cy="7.000" r="0.400"/><circle cx="7.000" cy="7.000" r="0.400"/><circle cx="8.000" cy="7.000" r="0.400"/><circle cx="9.000" cy="7.000" r="0.400"/><circle cx="15.000" cy="7.000" r="0.400"/><circle cx="16.000" cy="7.000" r="0.400"/><circle cx="17.000" cy="7.000" r="0.400"/><circle cx="18.000" cy="7.000" r="0.400"/><circle cx="19.000" cy="7.000" r="0.400"/><circle cx="25.000" cy="7.000" r="0.400"/><circle cx="26.000" cy="7.000" r="0.400"/><circle cx="27.000" cy="7.000" r="0.400"/><circle cx="28.000" cy="7.000" r="0.400"/><circle cx="29.000" cy="7.000" r="0.400"/><circle cx="6.000" cy="8.000" r="0.400"/><circle cx="7.000" cy="8.000" r="0.400"/><circle cx="8.000" cy="8.000" r="0.400"/><circle cx="9.000" cy="8.000" r="0.400"/><circle cx="10.000" cy="8.000" r="0.400"/><circle cx="15.000" cy="8.000" r="0.400"/><circle cx="16.000" cy="8.000" r="0.400"/><circle cx="17.000" cy="8.000" r="0.400"/><circle cx="18.000" cy="8.000" r="0.400"/><circle cx="19.000" cy="8.000" r="0.400"/><circle cx="24.000" cy="8.000" r="0.400"/><circle cx="25.000" cy="8.000" r="0.400"/><circle cx="26.000" cy="8.000" r="0.400"/><circle cx="27.000" cy="8.000" r="0.400"/><circle cx="28.000" cy="8.000" r="0.400"/><circle cx="3.000" cy="9.000" r="0.400"/><circle cx="8.000" cy="9.000" r="0.400"/><circle cx="9.000" cy="9.000" r="0.400"/><circle cx="10.000" cy="9.000" r="0.400"/><circle cx="11.000" cy="9.000" r="0.400"/><circle cx="15.000" cy="9.000" r="0.400"/><circle cx="16.000" cy="9.000" r="0.400"/><circle cx="17.000" cy="9.000" r="0.400"/><circle cx="18.000" cy="9.000" r="0.400"/><circle cx="19.000" cy="9.000" r="0.400"/><circle cx="23.000" cy="9.000" r="0.400"/><circle cx="24.000" cy="9.000" r="0.400"/><circle cx="25.000" cy="9.000" r="0.400"/><circle cx="26.000" cy="9.000" r="0.400"/><circle cx="31.000" cy="9.000" r="0.400"/><circle cx="2.000" cy="10.000" r="0.400"/><circle cx="3.000" cy="10.000" r="0.400"/><circle cx="4.000" cy="10.000" r="0.400"/><circle cx="5.000" cy="10.000" r="0.400"/><circle cx="6.000" cy="10.000" r="0.400"/><circle cx="10.000" cy="10.000" r="0.400"/><circle cx="11.000" cy="10.000" r="0.400"/><circle cx="12.000" cy="10.000" r="0.400"/><circle cx="13.000" cy="10.000" r="0.400"/><circle cx="16.000" cy="10.000" r="0.400"/><circle cx="17.000" cy="10.000" r="0.400"/><circle cx="18.000" cy="10.000" r="0.400"/><circle cx="21.000" cy="10.000" r="0.400"/><circle cx="22.000" cy="10.000" r="0.400"/><circle cx="23.000" cy="10.000" r="0.400"/><circle cx="24.000" cy="10.000" r="0.400"/><circle cx="28.000" cy="10.000" r="0.400"/><circle cx="29.000" cy="10.000" r="0.400"/><circle cx="30.000" cy="10.000" r="0.400"/><circle cx="31.000" cy="10.000" r="0.400"/><circle cx="32.000" cy="10.000" r="0.400"/><circle cx="2.000" cy="11.000" r="0.400"/><circle cx="3.000" cy="11.000" r="0.400"/><circle cx="4.000" cy="11.000" r="0.400"/><circle cx="5.000" cy="11.000" r="0.400"/><circle cx="6.000" cy="11.000" r="0.400"/><circle cx="7.000" cy="11.000" r="0.400"/><circle cx="8.000" cy="11.000" r="0.400"/><circle cx="9.000" cy="11.000" r="0.400"/><circle cx="10.000" cy="11.000" r="0.400"/><circle cx="11.000" cy="11.000" r="0.400"/><circle cx="12.000" cy="11.000" r="0.400"/><circle cx="13.000" cy="11.000" r="0.400"/><circle cx="14.000" cy="11.000" r="0.400"/><circle cx="16.000" cy="11.000" r="0.400"/><circle cx="17.000" cy="11.000" r="0.400"/><circle cx="18.000" cy="11.000" r="0.400"/><circle cx="20.000" cy="11.000" r="0.400"/><circle cx="21.000" cy="11.000" r="0.400"/><circle cx="22.000" cy="11.000" r="0.400"/><circle cx="23.000" cy="11.000Line truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 662.866 200" width="662.866" height="200" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#111111"><circle cx="46.667" cy="42.222" r="1.778"/><circle cx="51.111" cy="42.222" r="1.778"/><circle cx="166.667" cy="42.222" r="1.778"/><circle cx="171.111" cy="42.222" r="1.778"/><circle cx="46.667" cy="46.667" r="1.778"/><circle cx="51.111" cy="46.667" r="1.778"/><circle cx="55.556" cy="46.667" r="1.778"/><circle cx="100.000" cy="46.667" r="1.778"/><circle cx="108.889" cy="46.667" r="1.778"/><circle cx="117.778" cy="46.667" r="1.778"/><circle cx="162.222" cy="46.667" r="1.778"/><circle cx="166.667" cy="46.667" r="1.778"/><circle cx="171.111" cy="46.667" r="1.778"/><circle cx="46.667" cy="51.111" r="1.778"/><circle cx="51.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="51.111" r="1.778"/><circle cx="60.000" cy="51.111" r="1.778"/><circle cx="64.444" cy="51.111" r="1.778"/><circle cx="100.000" cy="51.111" r="1.778"/><circle cx="104.444" cy="51.111" r="1.778"/><circle cx="108.889" cy="51.111" r="1.778"/><circle cx="113.333" cy="51.111" r="1.778"/><circle cx="117.778" cy="51.111" r="1.778"/><circle cx="153.333" cy="51.111" r="1.778"/><circle cx="157.778" cy="51.111" r="1.778"/><circle cx="162.222" cy="51.111" r="1.778"/><circle cx="166.667" cy="51.111" r="1.778"/><circle cx="171.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="55.556" r="1.778"/><circle cx="60.000" cy="55.556" r="1.778"/><circle cx="64.444" cy="55.556" r="1.778"/><circle cx="68.889" cy="55.556" r="1.778"/><circle cx="73.333" cy="55.556" r="1.778"/><circle cx="100.000" cy="55.556" r="1.778"/><circle cx="104.444" cy="55.556" r="1.778"/><circle cx="108.889" cy="55.556" r="1.778"/><circle cx="113.333" cy="55.556" r="1.778"/><circle cx="117.778" cy="55.556" r="1.778"/><circle cx="144.444" cy="55.556" r="1.778"/><circle cx="148.889" cy="55.556" r="1.778"/><circle cx="153.333" cy="55.556" r="1.778"/><circle cx="157.778" cy="55.556" r="1.778"/><circle cx="162.222" cy="55.556" r="1.778"/><circle cx="60.000" cy="60.000" r="1.778"/><circle cx="64.444" cy="60.000" r="1.778"/><circle cx="68.889" cy="60.000" r="1.778"/><circle cx="73.333" cy="60.000" r="1.778"/><circle cx="77.778" cy="60.000" r="1.778"/><circle cx="100.000" cy="60.000" r="1.778"/><circle cx="104.444" cy="60.000" r="1.778"/><circle cx="108.889" cy="60.000" r="1.778"/><circle cx="113.333" cy="60.000" r="1.778"/><circle cx="117.778" cy="60.000" r="1.778"/><circle cx="140.000" cy="60.000" r="1.778"/><circle cx="144.444" cy="60.000" r="1.778"/><circle cx="148.889" cy="60.000" r="1.778"/><circle cx="153.333" cy="60.000" r="1.778"/><circle cx="157.778" cy="60.000" r="1.778"/><circle cx="46.667" cy="64.444" r="1.778"/><circle cx="68.889" cy="64.444" r="1.778"/><circle cx="73.333" cy="64.444" r="1.778"/><circle cx="77.778" cy="64.444" r="1.778"/><circle cx="82.222" cy="64.444" r="1.778"/><circle cx="100.000" cy="64.444" r="1.778"/><circle cx="104.444" cy="64.444" r="1.778"/><circle cx="108.889" cy="64.444" r="1.778"/><circle cx="113.333" cy="64.444" r="1.778"/><circle cx="117.778" cy="64.444" r="1.778"/><circle cx="135.556" cy="64.444" r="1.778"/><circle cx="140.000" cy="64.444" r="1.778"/><circle cx="144.444" cy="64.444" r="1.778"/><circle cx="148.889" cy="64.444" r="1.778"/><circle cx="171.111" cy="64.444" r="1.778"/><circle cx="42.222" cy="68.889" r="1.778"/><circle cx="46.667" cy="68.889" r="1.778"/><circle cx="51.111" cy="68.889" r="1.778"/><circle cx="55.556" cy="68.889" r="1.778"/><circle cx="60.000" cy="68.889" r="1.778"/><circle cx="77.778" cy="68.889" r="1.778"/><circle cx="82.222" cy="68.889" r="1.778"/><circle cx="86.667" cy="68.889" r="1.778"/><circle cx="91.111" cy="68.889" r="1.778"/><circle cx="104.444" cy="68.889" r="1.778"/><circle cx="108.889" cy="68.889" r="1.778"/><circle cx="113.333" cy="68.889" r="1.778"/><circle cx="126.667" cy="68.889" r="1.778"/><circle cx="131.111" cy="68.889" r="1.778"/><circle cx="135.556" cy="68.889" r="1.778"/><circle cx="140.000" cy="68.889" r="1.778"/><circle cx="157.778" cy="68.889" r="1.778"/><circle cx="162.222" cy="68.889" r="1.778"/><circle cx="166.667" cy="68.889" r="1.778"/><circle cx="171.111" cy="68.889" r="1.778"/><circle cx="175.556" cy="68.889" r="1.778"/><circle cx="42.222" cy="73.333" r="1.778"/><circle cx="46.667" cy="73.333" r="1.778"/><circle cx="51.111" cy="73.333" r="1.778"/><circle cx="55.556" cy="73.333" r="1.778"/><circle cx="60.000" cy="73.333" r="1.778"/><circle cx="64.444" cy="73.333" r="1.778"/><circle cx="68.889" cy="73.333" r="1.778"/><circle cx="73.333" cy="73.333" r="1.778"/><circle cx="77.778" cy="73.333" r="1.778"/><circle cx="82.222" cy="73.333" r="1.778"/><circle cx="86.667" cy="73.333" r="1.778"/><circle cx="91.111" cy="73.333" r="1.778"/><circle cx="95.556" cy="73.333" r="1.778"/><circle cx="104.444" cy="73.333" r="1.778"/><circle cx="108.889" cy="73.333" r="1.778"/><circle cx="113.333" cy="73.333" r="1.778"/><circle cx="122.222" cy="73.333Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 662.866 200" width="662.866" height="200" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="662.865777777778" height="200" fill="#1E2240"/><g fill="#D4A017"><circle cx="46.667" cy="42.222" r="1.778"/><circle cx="51.111" cy="42.222" r="1.778"/><circle cx="166.667" cy="42.222" r="1.778"/><circle cx="171.111" cy="42.222" r="1.778"/><circle cx="46.667" cy="46.667" r="1.778"/><circle cx="51.111" cy="46.667" r="1.778"/><circle cx="55.556" cy="46.667" r="1.778"/><circle cx="100.000" cy="46.667" r="1.778"/><circle cx="108.889" cy="46.667" r="1.778"/><circle cx="117.778" cy="46.667" r="1.778"/><circle cx="162.222" cy="46.667" r="1.778"/><circle cx="166.667" cy="46.667" r="1.778"/><circle cx="171.111" cy="46.667" r="1.778"/><circle cx="46.667" cy="51.111" r="1.778"/><circle cx="51.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="51.111" r="1.778"/><circle cx="60.000" cy="51.111" r="1.778"/><circle cx="64.444" cy="51.111" r="1.778"/><circle cx="100.000" cy="51.111" r="1.778"/><circle cx="104.444" cy="51.111" r="1.778"/><circle cx="108.889" cy="51.111" r="1.778"/><circle cx="113.333" cy="51.111" r="1.778"/><circle cx="117.778" cy="51.111" r="1.778"/><circle cx="153.333" cy="51.111" r="1.778"/><circle cx="157.778" cy="51.111" r="1.778"/><circle cx="162.222" cy="51.111" r="1.778"/><circle cx="166.667" cy="51.111" r="1.778"/><circle cx="171.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="55.556" r="1.778"/><circle cx="60.000" cy="55.556" r="1.778"/><circle cx="64.444" cy="55.556" r="1.778"/><circle cx="68.889" cy="55.556" r="1.778"/><circle cx="73.333" cy="55.556" r="1.778"/><circle cx="100.000" cy="55.556" r="1.778"/><circle cx="104.444" cy="55.556" r="1.778"/><circle cx="108.889" cy="55.556" r="1.778"/><circle cx="113.333" cy="55.556" r="1.778"/><circle cx="117.778" cy="55.556" r="1.778"/><circle cx="144.444" cy="55.556" r="1.778"/><circle cx="148.889" cy="55.556" r="1.778"/><circle cx="153.333" cy="55.556" r="1.778"/><circle cx="157.778" cy="55.556" r="1.778"/><circle cx="162.222" cy="55.556" r="1.778"/><circle cx="60.000" cy="60.000" r="1.778"/><circle cx="64.444" cy="60.000" r="1.778"/><circle cx="68.889" cy="60.000" r="1.778"/><circle cx="73.333" cy="60.000" r="1.778"/><circle cx="77.778" cy="60.000" r="1.778"/><circle cx="100.000" cy="60.000" r="1.778"/><circle cx="104.444" cy="60.000" r="1.778"/><circle cx="108.889" cy="60.000" r="1.778"/><circle cx="113.333" cy="60.000" r="1.778"/><circle cx="117.778" cy="60.000" r="1.778"/><circle cx="140.000" cy="60.000" r="1.778"/><circle cx="144.444" cy="60.000" r="1.778"/><circle cx="148.889" cy="60.000" r="1.778"/><circle cx="153.333" cy="60.000" r="1.778"/><circle cx="157.778" cy="60.000" r="1.778"/><circle cx="46.667" cy="64.444" r="1.778"/><circle cx="68.889" cy="64.444" r="1.778"/><circle cx="73.333" cy="64.444" r="1.778"/><circle cx="77.778" cy="64.444" r="1.778"/><circle cx="82.222" cy="64.444" r="1.778"/><circle cx="100.000" cy="64.444" r="1.778"/><circle cx="104.444" cy="64.444" r="1.778"/><circle cx="108.889" cy="64.444" r="1.778"/><circle cx="113.333" cy="64.444" r="1.778"/><circle cx="117.778" cy="64.444" r="1.778"/><circle cx="135.556" cy="64.444" r="1.778"/><circle cx="140.000" cy="64.444" r="1.778"/><circle cx="144.444" cy="64.444" r="1.778"/><circle cx="148.889" cy="64.444" r="1.778"/><circle cx="171.111" cy="64.444" r="1.778"/><circle cx="42.222" cy="68.889" r="1.778"/><circle cx="46.667" cy="68.889" r="1.778"/><circle cx="51.111" cy="68.889" r="1.778"/><circle cx="55.556" cy="68.889" r="1.778"/><circle cx="60.000" cy="68.889" r="1.778"/><circle cx="77.778" cy="68.889" r="1.778"/><circle cx="82.222" cy="68.889" r="1.778"/><circle cx="86.667" cy="68.889" r="1.778"/><circle cx="91.111" cy="68.889" r="1.778"/><circle cx="104.444" cy="68.889" r="1.778"/><circle cx="108.889" cy="68.889" r="1.778"/><circle cx="113.333" cy="68.889" r="1.778"/><circle cx="126.667" cy="68.889" r="1.778"/><circle cx="131.111" cy="68.889" r="1.778"/><circle cx="135.556" cy="68.889" r="1.778"/><circle cx="140.000" cy="68.889" r="1.778"/><circle cx="157.778" cy="68.889" r="1.778"/><circle cx="162.222" cy="68.889" r="1.778"/><circle cx="166.667" cy="68.889" r="1.778"/><circle cx="171.111" cy="68.889" r="1.778"/><circle cx="175.556" cy="68.889" r="1.778"/><circle cx="42.222" cy="73.333" r="1.778"/><circle cx="46.667" cy="73.333" r="1.778"/><circle cx="51.111" cy="73.333" r="1.778"/><circle cx="55.556" cy="73.333" r="1.778"/><circle cx="60.000" cy="73.333" r="1.778"/><circle cx="64.444" cy="73.333" r="1.778"/><circle cx="68.889" cy="73.333" r="1.778"/><circle cx="73.333" cy="73.333" r="1.778"/><circle cx="77.778" cy="73.333" r="1.778"/><circle cx="82.222" cy="73.333" r="1.778"/><circle cx="86.667" cy="73.333" r="1.778"/><circle cx="91.111" cy="73.333" r="1.778"/><circle cx="95.556" cy="73.333" r="1.778"/><circle cx="104.444" cy="73.333" r="1.778"/><circle cx="108.889" cy="73.333" r="1.778"/><circle cx="113Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 662.866 200" width="662.866" height="200" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="662.865777777778" height="200" fill="#F7F5EF"/><g fill="#A87A00"><circle cx="46.667" cy="42.222" r="1.778"/><circle cx="51.111" cy="42.222" r="1.778"/><circle cx="166.667" cy="42.222" r="1.778"/><circle cx="171.111" cy="42.222" r="1.778"/><circle cx="46.667" cy="46.667" r="1.778"/><circle cx="51.111" cy="46.667" r="1.778"/><circle cx="55.556" cy="46.667" r="1.778"/><circle cx="100.000" cy="46.667" r="1.778"/><circle cx="108.889" cy="46.667" r="1.778"/><circle cx="117.778" cy="46.667" r="1.778"/><circle cx="162.222" cy="46.667" r="1.778"/><circle cx="166.667" cy="46.667" r="1.778"/><circle cx="171.111" cy="46.667" r="1.778"/><circle cx="46.667" cy="51.111" r="1.778"/><circle cx="51.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="51.111" r="1.778"/><circle cx="60.000" cy="51.111" r="1.778"/><circle cx="64.444" cy="51.111" r="1.778"/><circle cx="100.000" cy="51.111" r="1.778"/><circle cx="104.444" cy="51.111" r="1.778"/><circle cx="108.889" cy="51.111" r="1.778"/><circle cx="113.333" cy="51.111" r="1.778"/><circle cx="117.778" cy="51.111" r="1.778"/><circle cx="153.333" cy="51.111" r="1.778"/><circle cx="157.778" cy="51.111" r="1.778"/><circle cx="162.222" cy="51.111" r="1.778"/><circle cx="166.667" cy="51.111" r="1.778"/><circle cx="171.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="55.556" r="1.778"/><circle cx="60.000" cy="55.556" r="1.778"/><circle cx="64.444" cy="55.556" r="1.778"/><circle cx="68.889" cy="55.556" r="1.778"/><circle cx="73.333" cy="55.556" r="1.778"/><circle cx="100.000" cy="55.556" r="1.778"/><circle cx="104.444" cy="55.556" r="1.778"/><circle cx="108.889" cy="55.556" r="1.778"/><circle cx="113.333" cy="55.556" r="1.778"/><circle cx="117.778" cy="55.556" r="1.778"/><circle cx="144.444" cy="55.556" r="1.778"/><circle cx="148.889" cy="55.556" r="1.778"/><circle cx="153.333" cy="55.556" r="1.778"/><circle cx="157.778" cy="55.556" r="1.778"/><circle cx="162.222" cy="55.556" r="1.778"/><circle cx="60.000" cy="60.000" r="1.778"/><circle cx="64.444" cy="60.000" r="1.778"/><circle cx="68.889" cy="60.000" r="1.778"/><circle cx="73.333" cy="60.000" r="1.778"/><circle cx="77.778" cy="60.000" r="1.778"/><circle cx="100.000" cy="60.000" r="1.778"/><circle cx="104.444" cy="60.000" r="1.778"/><circle cx="108.889" cy="60.000" r="1.778"/><circle cx="113.333" cy="60.000" r="1.778"/><circle cx="117.778" cy="60.000" r="1.778"/><circle cx="140.000" cy="60.000" r="1.778"/><circle cx="144.444" cy="60.000" r="1.778"/><circle cx="148.889" cy="60.000" r="1.778"/><circle cx="153.333" cy="60.000" r="1.778"/><circle cx="157.778" cy="60.000" r="1.778"/><circle cx="46.667" cy="64.444" r="1.778"/><circle cx="68.889" cy="64.444" r="1.778"/><circle cx="73.333" cy="64.444" r="1.778"/><circle cx="77.778" cy="64.444" r="1.778"/><circle cx="82.222" cy="64.444" r="1.778"/><circle cx="100.000" cy="64.444" r="1.778"/><circle cx="104.444" cy="64.444" r="1.778"/><circle cx="108.889" cy="64.444" r="1.778"/><circle cx="113.333" cy="64.444" r="1.778"/><circle cx="117.778" cy="64.444" r="1.778"/><circle cx="135.556" cy="64.444" r="1.778"/><circle cx="140.000" cy="64.444" r="1.778"/><circle cx="144.444" cy="64.444" r="1.778"/><circle cx="148.889" cy="64.444" r="1.778"/><circle cx="171.111" cy="64.444" r="1.778"/><circle cx="42.222" cy="68.889" r="1.778"/><circle cx="46.667" cy="68.889" r="1.778"/><circle cx="51.111" cy="68.889" r="1.778"/><circle cx="55.556" cy="68.889" r="1.778"/><circle cx="60.000" cy="68.889" r="1.778"/><circle cx="77.778" cy="68.889" r="1.778"/><circle cx="82.222" cy="68.889" r="1.778"/><circle cx="86.667" cy="68.889" r="1.778"/><circle cx="91.111" cy="68.889" r="1.778"/><circle cx="104.444" cy="68.889" r="1.778"/><circle cx="108.889" cy="68.889" r="1.778"/><circle cx="113.333" cy="68.889" r="1.778"/><circle cx="126.667" cy="68.889" r="1.778"/><circle cx="131.111" cy="68.889" r="1.778"/><circle cx="135.556" cy="68.889" r="1.778"/><circle cx="140.000" cy="68.889" r="1.778"/><circle cx="157.778" cy="68.889" r="1.778"/><circle cx="162.222" cy="68.889" r="1.778"/><circle cx="166.667" cy="68.889" r="1.778"/><circle cx="171.111" cy="68.889" r="1.778"/><circle cx="175.556" cy="68.889" r="1.778"/><circle cx="42.222" cy="73.333" r="1.778"/><circle cx="46.667" cy="73.333" r="1.778"/><circle cx="51.111" cy="73.333" r="1.778"/><circle cx="55.556" cy="73.333" r="1.778"/><circle cx="60.000" cy="73.333" r="1.778"/><circle cx="64.444" cy="73.333" r="1.778"/><circle cx="68.889" cy="73.333" r="1.778"/><circle cx="73.333" cy="73.333" r="1.778"/><circle cx="77.778" cy="73.333" r="1.778"/><circle cx="82.222" cy="73.333" r="1.778"/><circle cx="86.667" cy="73.333" r="1.778"/><circle cx="91.111" cy="73.333" r="1.778"/><circle cx="95.556" cy="73.333" r="1.778"/><circle cx="104.444" cy="73.333" r="1.778"/><circle cx="108.889" cy="73.333" r="1.778"/><circle cx="113Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 662.866 200" width="662.866" height="200" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#FFFFFF"><circle cx="46.667" cy="42.222" r="1.778"/><circle cx="51.111" cy="42.222" r="1.778"/><circle cx="166.667" cy="42.222" r="1.778"/><circle cx="171.111" cy="42.222" r="1.778"/><circle cx="46.667" cy="46.667" r="1.778"/><circle cx="51.111" cy="46.667" r="1.778"/><circle cx="55.556" cy="46.667" r="1.778"/><circle cx="100.000" cy="46.667" r="1.778"/><circle cx="108.889" cy="46.667" r="1.778"/><circle cx="117.778" cy="46.667" r="1.778"/><circle cx="162.222" cy="46.667" r="1.778"/><circle cx="166.667" cy="46.667" r="1.778"/><circle cx="171.111" cy="46.667" r="1.778"/><circle cx="46.667" cy="51.111" r="1.778"/><circle cx="51.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="51.111" r="1.778"/><circle cx="60.000" cy="51.111" r="1.778"/><circle cx="64.444" cy="51.111" r="1.778"/><circle cx="100.000" cy="51.111" r="1.778"/><circle cx="104.444" cy="51.111" r="1.778"/><circle cx="108.889" cy="51.111" r="1.778"/><circle cx="113.333" cy="51.111" r="1.778"/><circle cx="117.778" cy="51.111" r="1.778"/><circle cx="153.333" cy="51.111" r="1.778"/><circle cx="157.778" cy="51.111" r="1.778"/><circle cx="162.222" cy="51.111" r="1.778"/><circle cx="166.667" cy="51.111" r="1.778"/><circle cx="171.111" cy="51.111" r="1.778"/><circle cx="55.556" cy="55.556" r="1.778"/><circle cx="60.000" cy="55.556" r="1.778"/><circle cx="64.444" cy="55.556" r="1.778"/><circle cx="68.889" cy="55.556" r="1.778"/><circle cx="73.333" cy="55.556" r="1.778"/><circle cx="100.000" cy="55.556" r="1.778"/><circle cx="104.444" cy="55.556" r="1.778"/><circle cx="108.889" cy="55.556" r="1.778"/><circle cx="113.333" cy="55.556" r="1.778"/><circle cx="117.778" cy="55.556" r="1.778"/><circle cx="144.444" cy="55.556" r="1.778"/><circle cx="148.889" cy="55.556" r="1.778"/><circle cx="153.333" cy="55.556" r="1.778"/><circle cx="157.778" cy="55.556" r="1.778"/><circle cx="162.222" cy="55.556" r="1.778"/><circle cx="60.000" cy="60.000" r="1.778"/><circle cx="64.444" cy="60.000" r="1.778"/><circle cx="68.889" cy="60.000" r="1.778"/><circle cx="73.333" cy="60.000" r="1.778"/><circle cx="77.778" cy="60.000" r="1.778"/><circle cx="100.000" cy="60.000" r="1.778"/><circle cx="104.444" cy="60.000" r="1.778"/><circle cx="108.889" cy="60.000" r="1.778"/><circle cx="113.333" cy="60.000" r="1.778"/><circle cx="117.778" cy="60.000" r="1.778"/><circle cx="140.000" cy="60.000" r="1.778"/><circle cx="144.444" cy="60.000" r="1.778"/><circle cx="148.889" cy="60.000" r="1.778"/><circle cx="153.333" cy="60.000" r="1.778"/><circle cx="157.778" cy="60.000" r="1.778"/><circle cx="46.667" cy="64.444" r="1.778"/><circle cx="68.889" cy="64.444" r="1.778"/><circle cx="73.333" cy="64.444" r="1.778"/><circle cx="77.778" cy="64.444" r="1.778"/><circle cx="82.222" cy="64.444" r="1.778"/><circle cx="100.000" cy="64.444" r="1.778"/><circle cx="104.444" cy="64.444" r="1.778"/><circle cx="108.889" cy="64.444" r="1.778"/><circle cx="113.333" cy="64.444" r="1.778"/><circle cx="117.778" cy="64.444" r="1.778"/><circle cx="135.556" cy="64.444" r="1.778"/><circle cx="140.000" cy="64.444" r="1.778"/><circle cx="144.444" cy="64.444" r="1.778"/><circle cx="148.889" cy="64.444" r="1.778"/><circle cx="171.111" cy="64.444" r="1.778"/><circle cx="42.222" cy="68.889" r="1.778"/><circle cx="46.667" cy="68.889" r="1.778"/><circle cx="51.111" cy="68.889" r="1.778"/><circle cx="55.556" cy="68.889" r="1.778"/><circle cx="60.000" cy="68.889" r="1.778"/><circle cx="77.778" cy="68.889" r="1.778"/><circle cx="82.222" cy="68.889" r="1.778"/><circle cx="86.667" cy="68.889" r="1.778"/><circle cx="91.111" cy="68.889" r="1.778"/><circle cx="104.444" cy="68.889" r="1.778"/><circle cx="108.889" cy="68.889" r="1.778"/><circle cx="113.333" cy="68.889" r="1.778"/><circle cx="126.667" cy="68.889" r="1.778"/><circle cx="131.111" cy="68.889" r="1.778"/><circle cx="135.556" cy="68.889" r="1.778"/><circle cx="140.000" cy="68.889" r="1.778"/><circle cx="157.778" cy="68.889" r="1.778"/><circle cx="162.222" cy="68.889" r="1.778"/><circle cx="166.667" cy="68.889" r="1.778"/><circle cx="171.111" cy="68.889" r="1.778"/><circle cx="175.556" cy="68.889" r="1.778"/><circle cx="42.222" cy="73.333" r="1.778"/><circle cx="46.667" cy="73.333" r="1.778"/><circle cx="51.111" cy="73.333" r="1.778"/><circle cx="55.556" cy="73.333" r="1.778"/><circle cx="60.000" cy="73.333" r="1.778"/><circle cx="64.444" cy="73.333" r="1.778"/><circle cx="68.889" cy="73.333" r="1.778"/><circle cx="73.333" cy="73.333" r="1.778"/><circle cx="77.778" cy="73.333" r="1.778"/><circle cx="82.222" cy="73.333" r="1.778"/><circle cx="86.667" cy="73.333" r="1.778"/><circle cx="91.111" cy="73.333" r="1.778"/><circle cx="95.556" cy="73.333" r="1.778"/><circle cx="104.444" cy="73.333" r="1.778"/><circle cx="108.889" cy="73.333" r="1.778"/><circle cx="113.333" cy="73.333" r="1.778"/><circle cx="122.222" cy="73.333Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 456.02 360" width="456.02" height="360" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#111111"><circle cx="124.306" cy="43.704" r="2.963"/><circle cx="131.714" cy="43.704" r="2.963"/><circle cx="324.306" cy="43.704" r="2.963"/><circle cx="331.714" cy="43.704" r="2.963"/><circle cx="124.306" cy="51.111" r="2.963"/><circle cx="131.714" cy="51.111" r="2.963"/><circle cx="139.121" cy="51.111" r="2.963"/><circle cx="213.195" cy="51.111" r="2.963"/><circle cx="228.010" cy="51.111" r="2.963"/><circle cx="242.825" cy="51.111" r="2.963"/><circle cx="316.899" cy="51.111" r="2.963"/><circle cx="324.306" cy="51.111" r="2.963"/><circle cx="331.714" cy="51.111" r="2.963"/><circle cx="124.306" cy="58.519" r="2.963"/><circle cx="131.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="58.519" r="2.963"/><circle cx="146.529" cy="58.519" r="2.963"/><circle cx="153.936" cy="58.519" r="2.963"/><circle cx="213.195" cy="58.519" r="2.963"/><circle cx="220.603" cy="58.519" r="2.963"/><circle cx="228.010" cy="58.519" r="2.963"/><circle cx="235.417" cy="58.519" r="2.963"/><circle cx="242.825" cy="58.519" r="2.963"/><circle cx="302.084" cy="58.519" r="2.963"/><circle cx="309.491" cy="58.519" r="2.963"/><circle cx="316.899" cy="58.519" r="2.963"/><circle cx="324.306" cy="58.519" r="2.963"/><circle cx="331.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="65.926" r="2.963"/><circle cx="146.529" cy="65.926" r="2.963"/><circle cx="153.936" cy="65.926" r="2.963"/><circle cx="161.343" cy="65.926" r="2.963"/><circle cx="168.751" cy="65.926" r="2.963"/><circle cx="213.195" cy="65.926" r="2.963"/><circle cx="220.603" cy="65.926" r="2.963"/><circle cx="228.010" cy="65.926" r="2.963"/><circle cx="235.417" cy="65.926" r="2.963"/><circle cx="242.825" cy="65.926" r="2.963"/><circle cx="287.269" cy="65.926" r="2.963"/><circle cx="294.677" cy="65.926" r="2.963"/><circle cx="302.084" cy="65.926" r="2.963"/><circle cx="309.491" cy="65.926" r="2.963"/><circle cx="316.899" cy="65.926" r="2.963"/><circle cx="146.529" cy="73.333" r="2.963"/><circle cx="153.936" cy="73.333" r="2.963"/><circle cx="161.343" cy="73.333" r="2.963"/><circle cx="168.751" cy="73.333" r="2.963"/><circle cx="176.158" cy="73.333" r="2.963"/><circle cx="213.195" cy="73.333" r="2.963"/><circle cx="220.603" cy="73.333" r="2.963"/><circle cx="228.010" cy="73.333" r="2.963"/><circle cx="235.417" cy="73.333" r="2.963"/><circle cx="242.825" cy="73.333" r="2.963"/><circle cx="279.862" cy="73.333" r="2.963"/><circle cx="287.269" cy="73.333" r="2.963"/><circle cx="294.677" cy="73.333" r="2.963"/><circle cx="302.084" cy="73.333" r="2.963"/><circle cx="309.491" cy="73.333" r="2.963"/><circle cx="124.306" cy="80.741" r="2.963"/><circle cx="161.343" cy="80.741" r="2.963"/><circle cx="168.751" cy="80.741" r="2.963"/><circle cx="176.158" cy="80.741" r="2.963"/><circle cx="183.566" cy="80.741" r="2.963"/><circle cx="213.195" cy="80.741" r="2.963"/><circle cx="220.603" cy="80.741" r="2.963"/><circle cx="228.010" cy="80.741" r="2.963"/><circle cx="235.417" cy="80.741" r="2.963"/><circle cx="242.825" cy="80.741" r="2.963"/><circle cx="272.454" cy="80.741" r="2.963"/><circle cx="279.862" cy="80.741" r="2.963"/><circle cx="287.269" cy="80.741" r="2.963"/><circle cx="294.677" cy="80.741" r="2.963"/><circle cx="331.714" cy="80.741" r="2.963"/><circle cx="116.899" cy="88.148" r="2.963"/><circle cx="124.306" cy="88.148" r="2.963"/><circle cx="131.714" cy="88.148" r="2.963"/><circle cx="139.121" cy="88.148" r="2.963"/><circle cx="146.529" cy="88.148" r="2.963"/><circle cx="176.158" cy="88.148" r="2.963"/><circle cx="183.566" cy="88.148" r="2.963"/><circle cx="190.973" cy="88.148" r="2.963"/><circle cx="198.380" cy="88.148" r="2.963"/><circle cx="220.603" cy="88.148" r="2.963"/><circle cx="228.010" cy="88.148" r="2.963"/><circle cx="235.417" cy="88.148" r="2.963"/><circle cx="257.640" cy="88.148" r="2.963"/><circle cx="265.047" cy="88.148" r="2.963"/><circle cx="272.454" cy="88.148" r="2.963"/><circle cx="279.862" cy="88.148" r="2.963"/><circle cx="309.491" cy="88.148" r="2.963"/><circle cx="316.899" cy="88.148" r="2.963"/><circle cx="324.306" cy="88.148" r="2.963"/><circle cx="331.714" cy="88.148" r="2.963"/><circle cx="339.121" cy="88.148" r="2.963"/><circle cx="116.899" cy="95.556" r="2.963"/><circle cx="124.306" cy="95.556" r="2.963"/><circle cx="131.714" cy="95.556" r="2.963"/><circle cx="139.121" cy="95.556" r="2.963"/><circle cx="146.529" cy="95.556" r="2.963"/><circle cx="153.936" cy="95.556" r="2.963"/><circle cx="161.343" cy="95.556" r="2.963"/><circle cx="168.751" cy="95.556" r="2.963"/><circle cx="176.158" cy="95.556" r="2.963"/><circle cx="183.566" cy="95.556" r="2.963"/><circle cx="190.973" cy="95.556" r="2.963"/><circle cx="198.380" cy="95.556" r="2.963"/><circle cx="205.788" cy="95.556" r="2.963"/><circle cx="220.603" cy="95.556" r="2.963"/><circle cx="228.010" cy="95.556" r="2.963"/><circle cx="235.417" cy="95.55Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 456.02 360" width="456.02" height="360" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="456.0199999999999" height="360.0" fill="#1E2240"/><g fill="#D4A017"><circle cx="124.306" cy="43.704" r="2.963"/><circle cx="131.714" cy="43.704" r="2.963"/><circle cx="324.306" cy="43.704" r="2.963"/><circle cx="331.714" cy="43.704" r="2.963"/><circle cx="124.306" cy="51.111" r="2.963"/><circle cx="131.714" cy="51.111" r="2.963"/><circle cx="139.121" cy="51.111" r="2.963"/><circle cx="213.195" cy="51.111" r="2.963"/><circle cx="228.010" cy="51.111" r="2.963"/><circle cx="242.825" cy="51.111" r="2.963"/><circle cx="316.899" cy="51.111" r="2.963"/><circle cx="324.306" cy="51.111" r="2.963"/><circle cx="331.714" cy="51.111" r="2.963"/><circle cx="124.306" cy="58.519" r="2.963"/><circle cx="131.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="58.519" r="2.963"/><circle cx="146.529" cy="58.519" r="2.963"/><circle cx="153.936" cy="58.519" r="2.963"/><circle cx="213.195" cy="58.519" r="2.963"/><circle cx="220.603" cy="58.519" r="2.963"/><circle cx="228.010" cy="58.519" r="2.963"/><circle cx="235.417" cy="58.519" r="2.963"/><circle cx="242.825" cy="58.519" r="2.963"/><circle cx="302.084" cy="58.519" r="2.963"/><circle cx="309.491" cy="58.519" r="2.963"/><circle cx="316.899" cy="58.519" r="2.963"/><circle cx="324.306" cy="58.519" r="2.963"/><circle cx="331.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="65.926" r="2.963"/><circle cx="146.529" cy="65.926" r="2.963"/><circle cx="153.936" cy="65.926" r="2.963"/><circle cx="161.343" cy="65.926" r="2.963"/><circle cx="168.751" cy="65.926" r="2.963"/><circle cx="213.195" cy="65.926" r="2.963"/><circle cx="220.603" cy="65.926" r="2.963"/><circle cx="228.010" cy="65.926" r="2.963"/><circle cx="235.417" cy="65.926" r="2.963"/><circle cx="242.825" cy="65.926" r="2.963"/><circle cx="287.269" cy="65.926" r="2.963"/><circle cx="294.677" cy="65.926" r="2.963"/><circle cx="302.084" cy="65.926" r="2.963"/><circle cx="309.491" cy="65.926" r="2.963"/><circle cx="316.899" cy="65.926" r="2.963"/><circle cx="146.529" cy="73.333" r="2.963"/><circle cx="153.936" cy="73.333" r="2.963"/><circle cx="161.343" cy="73.333" r="2.963"/><circle cx="168.751" cy="73.333" r="2.963"/><circle cx="176.158" cy="73.333" r="2.963"/><circle cx="213.195" cy="73.333" r="2.963"/><circle cx="220.603" cy="73.333" r="2.963"/><circle cx="228.010" cy="73.333" r="2.963"/><circle cx="235.417" cy="73.333" r="2.963"/><circle cx="242.825" cy="73.333" r="2.963"/><circle cx="279.862" cy="73.333" r="2.963"/><circle cx="287.269" cy="73.333" r="2.963"/><circle cx="294.677" cy="73.333" r="2.963"/><circle cx="302.084" cy="73.333" r="2.963"/><circle cx="309.491" cy="73.333" r="2.963"/><circle cx="124.306" cy="80.741" r="2.963"/><circle cx="161.343" cy="80.741" r="2.963"/><circle cx="168.751" cy="80.741" r="2.963"/><circle cx="176.158" cy="80.741" r="2.963"/><circle cx="183.566" cy="80.741" r="2.963"/><circle cx="213.195" cy="80.741" r="2.963"/><circle cx="220.603" cy="80.741" r="2.963"/><circle cx="228.010" cy="80.741" r="2.963"/><circle cx="235.417" cy="80.741" r="2.963"/><circle cx="242.825" cy="80.741" r="2.963"/><circle cx="272.454" cy="80.741" r="2.963"/><circle cx="279.862" cy="80.741" r="2.963"/><circle cx="287.269" cy="80.741" r="2.963"/><circle cx="294.677" cy="80.741" r="2.963"/><circle cx="331.714" cy="80.741" r="2.963"/><circle cx="116.899" cy="88.148" r="2.963"/><circle cx="124.306" cy="88.148" r="2.963"/><circle cx="131.714" cy="88.148" r="2.963"/><circle cx="139.121" cy="88.148" r="2.963"/><circle cx="146.529" cy="88.148" r="2.963"/><circle cx="176.158" cy="88.148" r="2.963"/><circle cx="183.566" cy="88.148" r="2.963"/><circle cx="190.973" cy="88.148" r="2.963"/><circle cx="198.380" cy="88.148" r="2.963"/><circle cx="220.603" cy="88.148" r="2.963"/><circle cx="228.010" cy="88.148" r="2.963"/><circle cx="235.417" cy="88.148" r="2.963"/><circle cx="257.640" cy="88.148" r="2.963"/><circle cx="265.047" cy="88.148" r="2.963"/><circle cx="272.454" cy="88.148" r="2.963"/><circle cx="279.862" cy="88.148" r="2.963"/><circle cx="309.491" cy="88.148" r="2.963"/><circle cx="316.899" cy="88.148" r="2.963"/><circle cx="324.306" cy="88.148" r="2.963"/><circle cx="331.714" cy="88.148" r="2.963"/><circle cx="339.121" cy="88.148" r="2.963"/><circle cx="116.899" cy="95.556" r="2.963"/><circle cx="124.306" cy="95.556" r="2.963"/><circle cx="131.714" cy="95.556" r="2.963"/><circle cx="139.121" cy="95.556" r="2.963"/><circle cx="146.529" cy="95.556" r="2.963"/><circle cx="153.936" cy="95.556" r="2.963"/><circle cx="161.343" cy="95.556" r="2.963"/><circle cx="168.751" cy="95.556" r="2.963"/><circle cx="176.158" cy="95.556" r="2.963"/><circle cx="183.566" cy="95.556" r="2.963"/><circle cx="190.973" cy="95.556" r="2.963"/><circle cx="198.380" cy="95.556" r="2.963"/><circle cx="205.788" cy="95.556" r="2.963"/><circle cx="220.603" cy="95.556" r="2.963"/><circle cx=Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 456.02 360" width="456.02" height="360" role="img" aria-label="SimurgArray"><title>SimurgArray</title><rect width="456.0199999999999" height="360.0" fill="#F7F5EF"/><g fill="#A87A00"><circle cx="124.306" cy="43.704" r="2.963"/><circle cx="131.714" cy="43.704" r="2.963"/><circle cx="324.306" cy="43.704" r="2.963"/><circle cx="331.714" cy="43.704" r="2.963"/><circle cx="124.306" cy="51.111" r="2.963"/><circle cx="131.714" cy="51.111" r="2.963"/><circle cx="139.121" cy="51.111" r="2.963"/><circle cx="213.195" cy="51.111" r="2.963"/><circle cx="228.010" cy="51.111" r="2.963"/><circle cx="242.825" cy="51.111" r="2.963"/><circle cx="316.899" cy="51.111" r="2.963"/><circle cx="324.306" cy="51.111" r="2.963"/><circle cx="331.714" cy="51.111" r="2.963"/><circle cx="124.306" cy="58.519" r="2.963"/><circle cx="131.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="58.519" r="2.963"/><circle cx="146.529" cy="58.519" r="2.963"/><circle cx="153.936" cy="58.519" r="2.963"/><circle cx="213.195" cy="58.519" r="2.963"/><circle cx="220.603" cy="58.519" r="2.963"/><circle cx="228.010" cy="58.519" r="2.963"/><circle cx="235.417" cy="58.519" r="2.963"/><circle cx="242.825" cy="58.519" r="2.963"/><circle cx="302.084" cy="58.519" r="2.963"/><circle cx="309.491" cy="58.519" r="2.963"/><circle cx="316.899" cy="58.519" r="2.963"/><circle cx="324.306" cy="58.519" r="2.963"/><circle cx="331.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="65.926" r="2.963"/><circle cx="146.529" cy="65.926" r="2.963"/><circle cx="153.936" cy="65.926" r="2.963"/><circle cx="161.343" cy="65.926" r="2.963"/><circle cx="168.751" cy="65.926" r="2.963"/><circle cx="213.195" cy="65.926" r="2.963"/><circle cx="220.603" cy="65.926" r="2.963"/><circle cx="228.010" cy="65.926" r="2.963"/><circle cx="235.417" cy="65.926" r="2.963"/><circle cx="242.825" cy="65.926" r="2.963"/><circle cx="287.269" cy="65.926" r="2.963"/><circle cx="294.677" cy="65.926" r="2.963"/><circle cx="302.084" cy="65.926" r="2.963"/><circle cx="309.491" cy="65.926" r="2.963"/><circle cx="316.899" cy="65.926" r="2.963"/><circle cx="146.529" cy="73.333" r="2.963"/><circle cx="153.936" cy="73.333" r="2.963"/><circle cx="161.343" cy="73.333" r="2.963"/><circle cx="168.751" cy="73.333" r="2.963"/><circle cx="176.158" cy="73.333" r="2.963"/><circle cx="213.195" cy="73.333" r="2.963"/><circle cx="220.603" cy="73.333" r="2.963"/><circle cx="228.010" cy="73.333" r="2.963"/><circle cx="235.417" cy="73.333" r="2.963"/><circle cx="242.825" cy="73.333" r="2.963"/><circle cx="279.862" cy="73.333" r="2.963"/><circle cx="287.269" cy="73.333" r="2.963"/><circle cx="294.677" cy="73.333" r="2.963"/><circle cx="302.084" cy="73.333" r="2.963"/><circle cx="309.491" cy="73.333" r="2.963"/><circle cx="124.306" cy="80.741" r="2.963"/><circle cx="161.343" cy="80.741" r="2.963"/><circle cx="168.751" cy="80.741" r="2.963"/><circle cx="176.158" cy="80.741" r="2.963"/><circle cx="183.566" cy="80.741" r="2.963"/><circle cx="213.195" cy="80.741" r="2.963"/><circle cx="220.603" cy="80.741" r="2.963"/><circle cx="228.010" cy="80.741" r="2.963"/><circle cx="235.417" cy="80.741" r="2.963"/><circle cx="242.825" cy="80.741" r="2.963"/><circle cx="272.454" cy="80.741" r="2.963"/><circle cx="279.862" cy="80.741" r="2.963"/><circle cx="287.269" cy="80.741" r="2.963"/><circle cx="294.677" cy="80.741" r="2.963"/><circle cx="331.714" cy="80.741" r="2.963"/><circle cx="116.899" cy="88.148" r="2.963"/><circle cx="124.306" cy="88.148" r="2.963"/><circle cx="131.714" cy="88.148" r="2.963"/><circle cx="139.121" cy="88.148" r="2.963"/><circle cx="146.529" cy="88.148" r="2.963"/><circle cx="176.158" cy="88.148" r="2.963"/><circle cx="183.566" cy="88.148" r="2.963"/><circle cx="190.973" cy="88.148" r="2.963"/><circle cx="198.380" cy="88.148" r="2.963"/><circle cx="220.603" cy="88.148" r="2.963"/><circle cx="228.010" cy="88.148" r="2.963"/><circle cx="235.417" cy="88.148" r="2.963"/><circle cx="257.640" cy="88.148" r="2.963"/><circle cx="265.047" cy="88.148" r="2.963"/><circle cx="272.454" cy="88.148" r="2.963"/><circle cx="279.862" cy="88.148" r="2.963"/><circle cx="309.491" cy="88.148" r="2.963"/><circle cx="316.899" cy="88.148" r="2.963"/><circle cx="324.306" cy="88.148" r="2.963"/><circle cx="331.714" cy="88.148" r="2.963"/><circle cx="339.121" cy="88.148" r="2.963"/><circle cx="116.899" cy="95.556" r="2.963"/><circle cx="124.306" cy="95.556" r="2.963"/><circle cx="131.714" cy="95.556" r="2.963"/><circle cx="139.121" cy="95.556" r="2.963"/><circle cx="146.529" cy="95.556" r="2.963"/><circle cx="153.936" cy="95.556" r="2.963"/><circle cx="161.343" cy="95.556" r="2.963"/><circle cx="168.751" cy="95.556" r="2.963"/><circle cx="176.158" cy="95.556" r="2.963"/><circle cx="183.566" cy="95.556" r="2.963"/><circle cx="190.973" cy="95.556" r="2.963"/><circle cx="198.380" cy="95.556" r="2.963"/><circle cx="205.788" cy="95.556" r="2.963"/><circle cx="220.603" cy="95.556" r="2.963"/><circle cx=Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 456.02 360" width="456.02" height="360" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#FFFFFF"><circle cx="124.306" cy="43.704" r="2.963"/><circle cx="131.714" cy="43.704" r="2.963"/><circle cx="324.306" cy="43.704" r="2.963"/><circle cx="331.714" cy="43.704" r="2.963"/><circle cx="124.306" cy="51.111" r="2.963"/><circle cx="131.714" cy="51.111" r="2.963"/><circle cx="139.121" cy="51.111" r="2.963"/><circle cx="213.195" cy="51.111" r="2.963"/><circle cx="228.010" cy="51.111" r="2.963"/><circle cx="242.825" cy="51.111" r="2.963"/><circle cx="316.899" cy="51.111" r="2.963"/><circle cx="324.306" cy="51.111" r="2.963"/><circle cx="331.714" cy="51.111" r="2.963"/><circle cx="124.306" cy="58.519" r="2.963"/><circle cx="131.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="58.519" r="2.963"/><circle cx="146.529" cy="58.519" r="2.963"/><circle cx="153.936" cy="58.519" r="2.963"/><circle cx="213.195" cy="58.519" r="2.963"/><circle cx="220.603" cy="58.519" r="2.963"/><circle cx="228.010" cy="58.519" r="2.963"/><circle cx="235.417" cy="58.519" r="2.963"/><circle cx="242.825" cy="58.519" r="2.963"/><circle cx="302.084" cy="58.519" r="2.963"/><circle cx="309.491" cy="58.519" r="2.963"/><circle cx="316.899" cy="58.519" r="2.963"/><circle cx="324.306" cy="58.519" r="2.963"/><circle cx="331.714" cy="58.519" r="2.963"/><circle cx="139.121" cy="65.926" r="2.963"/><circle cx="146.529" cy="65.926" r="2.963"/><circle cx="153.936" cy="65.926" r="2.963"/><circle cx="161.343" cy="65.926" r="2.963"/><circle cx="168.751" cy="65.926" r="2.963"/><circle cx="213.195" cy="65.926" r="2.963"/><circle cx="220.603" cy="65.926" r="2.963"/><circle cx="228.010" cy="65.926" r="2.963"/><circle cx="235.417" cy="65.926" r="2.963"/><circle cx="242.825" cy="65.926" r="2.963"/><circle cx="287.269" cy="65.926" r="2.963"/><circle cx="294.677" cy="65.926" r="2.963"/><circle cx="302.084" cy="65.926" r="2.963"/><circle cx="309.491" cy="65.926" r="2.963"/><circle cx="316.899" cy="65.926" r="2.963"/><circle cx="146.529" cy="73.333" r="2.963"/><circle cx="153.936" cy="73.333" r="2.963"/><circle cx="161.343" cy="73.333" r="2.963"/><circle cx="168.751" cy="73.333" r="2.963"/><circle cx="176.158" cy="73.333" r="2.963"/><circle cx="213.195" cy="73.333" r="2.963"/><circle cx="220.603" cy="73.333" r="2.963"/><circle cx="228.010" cy="73.333" r="2.963"/><circle cx="235.417" cy="73.333" r="2.963"/><circle cx="242.825" cy="73.333" r="2.963"/><circle cx="279.862" cy="73.333" r="2.963"/><circle cx="287.269" cy="73.333" r="2.963"/><circle cx="294.677" cy="73.333" r="2.963"/><circle cx="302.084" cy="73.333" r="2.963"/><circle cx="309.491" cy="73.333" r="2.963"/><circle cx="124.306" cy="80.741" r="2.963"/><circle cx="161.343" cy="80.741" r="2.963"/><circle cx="168.751" cy="80.741" r="2.963"/><circle cx="176.158" cy="80.741" r="2.963"/><circle cx="183.566" cy="80.741" r="2.963"/><circle cx="213.195" cy="80.741" r="2.963"/><circle cx="220.603" cy="80.741" r="2.963"/><circle cx="228.010" cy="80.741" r="2.963"/><circle cx="235.417" cy="80.741" r="2.963"/><circle cx="242.825" cy="80.741" r="2.963"/><circle cx="272.454" cy="80.741" r="2.963"/><circle cx="279.862" cy="80.741" r="2.963"/><circle cx="287.269" cy="80.741" r="2.963"/><circle cx="294.677" cy="80.741" r="2.963"/><circle cx="331.714" cy="80.741" r="2.963"/><circle cx="116.899" cy="88.148" r="2.963"/><circle cx="124.306" cy="88.148" r="2.963"/><circle cx="131.714" cy="88.148" r="2.963"/><circle cx="139.121" cy="88.148" r="2.963"/><circle cx="146.529" cy="88.148" r="2.963"/><circle cx="176.158" cy="88.148" r="2.963"/><circle cx="183.566" cy="88.148" r="2.963"/><circle cx="190.973" cy="88.148" r="2.963"/><circle cx="198.380" cy="88.148" r="2.963"/><circle cx="220.603" cy="88.148" r="2.963"/><circle cx="228.010" cy="88.148" r="2.963"/><circle cx="235.417" cy="88.148" r="2.963"/><circle cx="257.640" cy="88.148" r="2.963"/><circle cx="265.047" cy="88.148" r="2.963"/><circle cx="272.454" cy="88.148" r="2.963"/><circle cx="279.862" cy="88.148" r="2.963"/><circle cx="309.491" cy="88.148" r="2.963"/><circle cx="316.899" cy="88.148" r="2.963"/><circle cx="324.306" cy="88.148" r="2.963"/><circle cx="331.714" cy="88.148" r="2.963"/><circle cx="339.121" cy="88.148" r="2.963"/><circle cx="116.899" cy="95.556" r="2.963"/><circle cx="124.306" cy="95.556" r="2.963"/><circle cx="131.714" cy="95.556" r="2.963"/><circle cx="139.121" cy="95.556" r="2.963"/><circle cx="146.529" cy="95.556" r="2.963"/><circle cx="153.936" cy="95.556" r="2.963"/><circle cx="161.343" cy="95.556" r="2.963"/><circle cx="168.751" cy="95.556" r="2.963"/><circle cx="176.158" cy="95.556" r="2.963"/><circle cx="183.566" cy="95.556" r="2.963"/><circle cx="190.973" cy="95.556" r="2.963"/><circle cx="198.380" cy="95.556" r="2.963"/><circle cx="205.788" cy="95.556" r="2.963"/><circle cx="220.603" cy="95.556" r="2.963"/><circle cx="228.010" cy="95.556" r="2.963"/><circle cx="235.417" cy="95.55Line truncated
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33 29" width="33" height="29" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#111111"><circle cx="2.500" cy="1.500" r="0.400"/><circle cx="3.500" cy="1.500" r="0.400"/><circle cx="29.500" cy="1.500" r="0.400"/><circle cx="30.500" cy="1.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="3.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="14.500" cy="2.500" r="0.400"/><circle cx="16.500" cy="2.500" r="0.400"/><circle cx="18.500" cy="2.500" r="0.400"/><circle cx="28.500" cy="2.500" r="0.400"/><circle cx="29.500" cy="2.500" r="0.400"/><circle cx="30.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="14.500" cy="3.500" r="0.400"/><circle cx="15.500" cy="3.500" r="0.400"/><circle cx="16.500" cy="3.500" r="0.400"/><circle cx="17.500" cy="3.500" r="0.400"/><circle cx="18.500" cy="3.500" r="0.400"/><circle cx="26.500" cy="3.500" r="0.400"/><circle cx="27.500" cy="3.500" r="0.400"/><circle cx="28.500" cy="3.500" r="0.400"/><circle cx="29.500" cy="3.500" r="0.400"/><circle cx="30.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="14.500" cy="4.500" r="0.400"/><circle cx="15.500" cy="4.500" r="0.400"/><circle cx="16.500" cy="4.500" r="0.400"/><circle cx="17.500" cy="4.500" r="0.400"/><circle cx="18.500" cy="4.500" r="0.400"/><circle cx="24.500" cy="4.500" r="0.400"/><circle cx="25.500" cy="4.500" r="0.400"/><circle cx="26.500" cy="4.500" r="0.400"/><circle cx="27.500" cy="4.500" r="0.400"/><circle cx="28.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="14.500" cy="5.500" r="0.400"/><circle cx="15.500" cy="5.500" r="0.400"/><circle cx="16.500" cy="5.500" r="0.400"/><circle cx="17.500" cy="5.500" r="0.400"/><circle cx="18.500" cy="5.500" r="0.400"/><circle cx="23.500" cy="5.500" r="0.400"/><circle cx="24.500" cy="5.500" r="0.400"/><circle cx="25.500" cy="5.500" r="0.400"/><circle cx="26.500" cy="5.500" r="0.400"/><circle cx="27.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="9.500" cy="6.500" r="0.400"/><circle cx="10.500" cy="6.500" r="0.400"/><circle cx="14.500" cy="6.500" r="0.400"/><circle cx="15.500" cy="6.500" r="0.400"/><circle cx="16.500" cy="6.500" r="0.400"/><circle cx="17.500" cy="6.500" r="0.400"/><circle cx="18.500" cy="6.500" r="0.400"/><circle cx="22.500" cy="6.500" r="0.400"/><circle cx="23.500" cy="6.500" r="0.400"/><circle cx="24.500" cy="6.500" r="0.400"/><circle cx="25.500" cy="6.500" r="0.400"/><circle cx="30.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/><circle cx="2.500" cy="7.500" r="0.400"/><circle cx="3.500" cy="7.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="9.500" cy="7.500" r="0.400"/><circle cx="10.500" cy="7.500" r="0.400"/><circle cx="11.500" cy="7.500" r="0.400"/><circle cx="12.500" cy="7.500" r="0.400"/><circle cx="15.500" cy="7.500" r="0.400"/><circle cx="16.500" cy="7.500" r="0.400"/><circle cx="17.500" cy="7.500" r="0.400"/><circle cx="20.500" cy="7.500" r="0.400"/><circle cx="21.500" cy="7.500" r="0.400"/><circle cx="22.500" cy="7.500" r="0.400"/><circle cx="23.500" cy="7.500" r="0.400"/><circle cx="27.500" cy="7.500" r="0.400"/><circle cx="28.500" cy="7.500" r="0.400"/><circle cx="29.500" cy="7.500" r="0.400"/><circle cx="30.500" cy="7.500" r="0.400"/><circle cx="31.500" cy="7.500" r="0.400"/><circle cx="1.500" cy="8.500" r="0.400"/><circle cx="2.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="8.500" r="0.400"/><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="5.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="7.500" cy="8.500" r="0.400"/><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="8.500" r="0.400"/><circle cx="10.500" cy="8.500" r="0.400"/><circle cx="11.500" cy="8.500" r="0.400"/><circle cx="12.500" cy="8.500" r="0.400"/><circle cx="13.500" cy="8.500" r="0.400"/><circle cx="15.500" cy="8.500" r="0.400"/><circle cx="16.500" cy="8.500" r="0.400"/><circle cx="17.500" cy="8.500" r="0.400"/><circle cx="19.500" cy="8.500" r="0.400"/><circle cx="20.500" cy="8.500" r="0.400"/><circle cx="21.500" cy="8.500" r="0.400"/><circle cx="22.500" cy="8.500" r="0.400"/><circle cx="23.500" cy="8.500" r="0.400"/><circle cx="24.500" cy="8.500" r="0.400"/><ciLine truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33 29" width="33" height="29" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="2.500" cy="1.500" r="0.400"/><circle cx="3.500" cy="1.500" r="0.400"/><circle cx="29.500" cy="1.500" r="0.400"/><circle cx="30.500" cy="1.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="3.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="14.500" cy="2.500" r="0.400"/><circle cx="16.500" cy="2.500" r="0.400"/><circle cx="18.500" cy="2.500" r="0.400"/><circle cx="28.500" cy="2.500" r="0.400"/><circle cx="29.500" cy="2.500" r="0.400"/><circle cx="30.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="14.500" cy="3.500" r="0.400"/><circle cx="15.500" cy="3.500" r="0.400"/><circle cx="16.500" cy="3.500" r="0.400"/><circle cx="17.500" cy="3.500" r="0.400"/><circle cx="18.500" cy="3.500" r="0.400"/><circle cx="26.500" cy="3.500" r="0.400"/><circle cx="27.500" cy="3.500" r="0.400"/><circle cx="28.500" cy="3.500" r="0.400"/><circle cx="29.500" cy="3.500" r="0.400"/><circle cx="30.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="14.500" cy="4.500" r="0.400"/><circle cx="15.500" cy="4.500" r="0.400"/><circle cx="16.500" cy="4.500" r="0.400"/><circle cx="17.500" cy="4.500" r="0.400"/><circle cx="18.500" cy="4.500" r="0.400"/><circle cx="24.500" cy="4.500" r="0.400"/><circle cx="25.500" cy="4.500" r="0.400"/><circle cx="26.500" cy="4.500" r="0.400"/><circle cx="27.500" cy="4.500" r="0.400"/><circle cx="28.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="14.500" cy="5.500" r="0.400"/><circle cx="15.500" cy="5.500" r="0.400"/><circle cx="16.500" cy="5.500" r="0.400"/><circle cx="17.500" cy="5.500" r="0.400"/><circle cx="18.500" cy="5.500" r="0.400"/><circle cx="23.500" cy="5.500" r="0.400"/><circle cx="24.500" cy="5.500" r="0.400"/><circle cx="25.500" cy="5.500" r="0.400"/><circle cx="26.500" cy="5.500" r="0.400"/><circle cx="27.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="9.500" cy="6.500" r="0.400"/><circle cx="10.500" cy="6.500" r="0.400"/><circle cx="14.500" cy="6.500" r="0.400"/><circle cx="15.500" cy="6.500" r="0.400"/><circle cx="16.500" cy="6.500" r="0.400"/><circle cx="17.500" cy="6.500" r="0.400"/><circle cx="18.500" cy="6.500" r="0.400"/><circle cx="22.500" cy="6.500" r="0.400"/><circle cx="23.500" cy="6.500" r="0.400"/><circle cx="24.500" cy="6.500" r="0.400"/><circle cx="25.500" cy="6.500" r="0.400"/><circle cx="30.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/><circle cx="2.500" cy="7.500" r="0.400"/><circle cx="3.500" cy="7.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="9.500" cy="7.500" r="0.400"/><circle cx="10.500" cy="7.500" r="0.400"/><circle cx="11.500" cy="7.500" r="0.400"/><circle cx="12.500" cy="7.500" r="0.400"/><circle cx="15.500" cy="7.500" r="0.400"/><circle cx="16.500" cy="7.500" r="0.400"/><circle cx="17.500" cy="7.500" r="0.400"/><circle cx="20.500" cy="7.500" r="0.400"/><circle cx="21.500" cy="7.500" r="0.400"/><circle cx="22.500" cy="7.500" r="0.400"/><circle cx="23.500" cy="7.500" r="0.400"/><circle cx="27.500" cy="7.500" r="0.400"/><circle cx="28.500" cy="7.500" r="0.400"/><circle cx="29.500" cy="7.500" r="0.400"/><circle cx="30.500" cy="7.500" r="0.400"/><circle cx="31.500" cy="7.500" r="0.400"/><circle cx="1.500" cy="8.500" r="0.400"/><circle cx="2.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="8.500" r="0.400"/><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="5.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="7.500" cy="8.500" r="0.400"/><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="8.500" r="0.400"/><circle cx="10.500" cy="8.500" r="0.400"/><circle cx="11.500" cy="8.500" r="0.400"/><circle cx="12.500" cy="8.500" r="0.400"/><circle cx="13.500" cy="8.500" r="0.400"/><circle cx="15.500" cy="8.500" r="0.400"/><circle cx="16.500" cy="8.500" r="0.400"/><circle cx="17.500" cy="8.500" r="0.400"/><circle cx="19.500" cy="8.500" r="0.400"/><circle cx="20.500" cy="8.500" r="0.400"/><circle cx="21.500" cy="8.500" r="0.400"/><circle cx="22.500" cy="8.500" r="0.400"/><circle cx="23.500" cy="8.500" r="0.400"/><circle cx="24.500" cy="8.500" r="0.400"/><ciLine truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33 29" width="33" height="29" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="2.500" cy="1.500" r="0.400"/><circle cx="3.500" cy="1.500" r="0.400"/><circle cx="29.500" cy="1.500" r="0.400"/><circle cx="30.500" cy="1.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="3.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="14.500" cy="2.500" r="0.400"/><circle cx="16.500" cy="2.500" r="0.400"/><circle cx="18.500" cy="2.500" r="0.400"/><circle cx="28.500" cy="2.500" r="0.400"/><circle cx="29.500" cy="2.500" r="0.400"/><circle cx="30.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="14.500" cy="3.500" r="0.400"/><circle cx="15.500" cy="3.500" r="0.400"/><circle cx="16.500" cy="3.500" r="0.400"/><circle cx="17.500" cy="3.500" r="0.400"/><circle cx="18.500" cy="3.500" r="0.400"/><circle cx="26.500" cy="3.500" r="0.400"/><circle cx="27.500" cy="3.500" r="0.400"/><circle cx="28.500" cy="3.500" r="0.400"/><circle cx="29.500" cy="3.500" r="0.400"/><circle cx="30.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="14.500" cy="4.500" r="0.400"/><circle cx="15.500" cy="4.500" r="0.400"/><circle cx="16.500" cy="4.500" r="0.400"/><circle cx="17.500" cy="4.500" r="0.400"/><circle cx="18.500" cy="4.500" r="0.400"/><circle cx="24.500" cy="4.500" r="0.400"/><circle cx="25.500" cy="4.500" r="0.400"/><circle cx="26.500" cy="4.500" r="0.400"/><circle cx="27.500" cy="4.500" r="0.400"/><circle cx="28.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="14.500" cy="5.500" r="0.400"/><circle cx="15.500" cy="5.500" r="0.400"/><circle cx="16.500" cy="5.500" r="0.400"/><circle cx="17.500" cy="5.500" r="0.400"/><circle cx="18.500" cy="5.500" r="0.400"/><circle cx="23.500" cy="5.500" r="0.400"/><circle cx="24.500" cy="5.500" r="0.400"/><circle cx="25.500" cy="5.500" r="0.400"/><circle cx="26.500" cy="5.500" r="0.400"/><circle cx="27.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="9.500" cy="6.500" r="0.400"/><circle cx="10.500" cy="6.500" r="0.400"/><circle cx="14.500" cy="6.500" r="0.400"/><circle cx="15.500" cy="6.500" r="0.400"/><circle cx="16.500" cy="6.500" r="0.400"/><circle cx="17.500" cy="6.500" r="0.400"/><circle cx="18.500" cy="6.500" r="0.400"/><circle cx="22.500" cy="6.500" r="0.400"/><circle cx="23.500" cy="6.500" r="0.400"/><circle cx="24.500" cy="6.500" r="0.400"/><circle cx="25.500" cy="6.500" r="0.400"/><circle cx="30.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/><circle cx="2.500" cy="7.500" r="0.400"/><circle cx="3.500" cy="7.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="9.500" cy="7.500" r="0.400"/><circle cx="10.500" cy="7.500" r="0.400"/><circle cx="11.500" cy="7.500" r="0.400"/><circle cx="12.500" cy="7.500" r="0.400"/><circle cx="15.500" cy="7.500" r="0.400"/><circle cx="16.500" cy="7.500" r="0.400"/><circle cx="17.500" cy="7.500" r="0.400"/><circle cx="20.500" cy="7.500" r="0.400"/><circle cx="21.500" cy="7.500" r="0.400"/><circle cx="22.500" cy="7.500" r="0.400"/><circle cx="23.500" cy="7.500" r="0.400"/><circle cx="27.500" cy="7.500" r="0.400"/><circle cx="28.500" cy="7.500" r="0.400"/><circle cx="29.500" cy="7.500" r="0.400"/><circle cx="30.500" cy="7.500" r="0.400"/><circle cx="31.500" cy="7.500" r="0.400"/><circle cx="1.500" cy="8.500" r="0.400"/><circle cx="2.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="8.500" r="0.400"/><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="5.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="7.500" cy="8.500" r="0.400"/><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="8.500" r="0.400"/><circle cx="10.500" cy="8.500" r="0.400"/><circle cx="11.500" cy="8.500" r="0.400"/><circle cx="12.500" cy="8.500" r="0.400"/><circle cx="13.500" cy="8.500" r="0.400"/><circle cx="15.500" cy="8.500" r="0.400"/><circle cx="16.500" cy="8.500" r="0.400"/><circle cx="17.500" cy="8.500" r="0.400"/><circle cx="19.500" cy="8.500" r="0.400"/><circle cx="20.500" cy="8.500" r="0.400"/><circle cx="21.500" cy="8.500" r="0.400"/><circle cx="22.500" cy="8.500" r="0.400"/><circle cx="23.500" cy="8.500" r="0.400"/><circle cx="24.500" cy="8.500" r="0.400"/><ciLine truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33 29" width="33" height="29" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#A87A00"><circle cx="2.500" cy="1.500" r="0.400"/><circle cx="3.500" cy="1.500" r="0.400"/><circle cx="29.500" cy="1.500" r="0.400"/><circle cx="30.500" cy="1.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="3.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="14.500" cy="2.500" r="0.400"/><circle cx="16.500" cy="2.500" r="0.400"/><circle cx="18.500" cy="2.500" r="0.400"/><circle cx="28.500" cy="2.500" r="0.400"/><circle cx="29.500" cy="2.500" r="0.400"/><circle cx="30.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="14.500" cy="3.500" r="0.400"/><circle cx="15.500" cy="3.500" r="0.400"/><circle cx="16.500" cy="3.500" r="0.400"/><circle cx="17.500" cy="3.500" r="0.400"/><circle cx="18.500" cy="3.500" r="0.400"/><circle cx="26.500" cy="3.500" r="0.400"/><circle cx="27.500" cy="3.500" r="0.400"/><circle cx="28.500" cy="3.500" r="0.400"/><circle cx="29.500" cy="3.500" r="0.400"/><circle cx="30.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="14.500" cy="4.500" r="0.400"/><circle cx="15.500" cy="4.500" r="0.400"/><circle cx="16.500" cy="4.500" r="0.400"/><circle cx="17.500" cy="4.500" r="0.400"/><circle cx="18.500" cy="4.500" r="0.400"/><circle cx="24.500" cy="4.500" r="0.400"/><circle cx="25.500" cy="4.500" r="0.400"/><circle cx="26.500" cy="4.500" r="0.400"/><circle cx="27.500" cy="4.500" r="0.400"/><circle cx="28.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="14.500" cy="5.500" r="0.400"/><circle cx="15.500" cy="5.500" r="0.400"/><circle cx="16.500" cy="5.500" r="0.400"/><circle cx="17.500" cy="5.500" r="0.400"/><circle cx="18.500" cy="5.500" r="0.400"/><circle cx="23.500" cy="5.500" r="0.400"/><circle cx="24.500" cy="5.500" r="0.400"/><circle cx="25.500" cy="5.500" r="0.400"/><circle cx="26.500" cy="5.500" r="0.400"/><circle cx="27.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="9.500" cy="6.500" r="0.400"/><circle cx="10.500" cy="6.500" r="0.400"/><circle cx="14.500" cy="6.500" r="0.400"/><circle cx="15.500" cy="6.500" r="0.400"/><circle cx="16.500" cy="6.500" r="0.400"/><circle cx="17.500" cy="6.500" r="0.400"/><circle cx="18.500" cy="6.500" r="0.400"/><circle cx="22.500" cy="6.500" r="0.400"/><circle cx="23.500" cy="6.500" r="0.400"/><circle cx="24.500" cy="6.500" r="0.400"/><circle cx="25.500" cy="6.500" r="0.400"/><circle cx="30.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/><circle cx="2.500" cy="7.500" r="0.400"/><circle cx="3.500" cy="7.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="9.500" cy="7.500" r="0.400"/><circle cx="10.500" cy="7.500" r="0.400"/><circle cx="11.500" cy="7.500" r="0.400"/><circle cx="12.500" cy="7.500" r="0.400"/><circle cx="15.500" cy="7.500" r="0.400"/><circle cx="16.500" cy="7.500" r="0.400"/><circle cx="17.500" cy="7.500" r="0.400"/><circle cx="20.500" cy="7.500" r="0.400"/><circle cx="21.500" cy="7.500" r="0.400"/><circle cx="22.500" cy="7.500" r="0.400"/><circle cx="23.500" cy="7.500" r="0.400"/><circle cx="27.500" cy="7.500" r="0.400"/><circle cx="28.500" cy="7.500" r="0.400"/><circle cx="29.500" cy="7.500" r="0.400"/><circle cx="30.500" cy="7.500" r="0.400"/><circle cx="31.500" cy="7.500" r="0.400"/><circle cx="1.500" cy="8.500" r="0.400"/><circle cx="2.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="8.500" r="0.400"/><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="5.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="7.500" cy="8.500" r="0.400"/><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="8.500" r="0.400"/><circle cx="10.500" cy="8.500" r="0.400"/><circle cx="11.500" cy="8.500" r="0.400"/><circle cx="12.500" cy="8.500" r="0.400"/><circle cx="13.500" cy="8.500" r="0.400"/><circle cx="15.500" cy="8.500" r="0.400"/><circle cx="16.500" cy="8.500" r="0.400"/><circle cx="17.500" cy="8.500" r="0.400"/><circle cx="19.500" cy="8.500" r="0.400"/><circle cx="20.500" cy="8.500" r="0.400"/><circle cx="21.500" cy="8.500" r="0.400"/><circle cx="22.500" cy="8.500" r="0.400"/><circle cx="23.500" cy="8.500" r="0.400"/><circle cx="24.500" cy="8.500" r="0.400"/><ciLine truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9" height="9" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#111111"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="7.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="6.500" cy="2.500" r="0.400"/><circle cx="7.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/></g><g fill="#111111"><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/></g><g fill="#111111"><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9" height="9" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="7.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="6.500" cy="2.500" r="0.400"/><circle cx="7.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/></g><g fill="#C8453A"><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/></g><g fill="#2F8F5B"><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9" height="9" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="7.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="6.500" cy="2.500" r="0.400"/><circle cx="7.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/></g><g fill="#D4A017"><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/></g><g fill="#D4A017"><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9" height="9" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#A87A00"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="7.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="6.500" cy="2.500" r="0.400"/><circle cx="7.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/></g><g fill="#C8453A"><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/></g><g fill="#2F8F5B"><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9" height="9" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#FFFFFF"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="7.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="6.500" cy="2.500" r="0.400"/><circle cx="7.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/></g><g fill="#FFFFFF"><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/></g><g fill="#FFFFFF"><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#111111"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#111111"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#111111"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#C8453A"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#2F8F5B"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#D4A017"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#D4A017"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#A87A00"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#C8453A"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#2F8F5B"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#FFFFFF"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#FFFFFF"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#FFFFFF"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33 29" width="33" height="29" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#FFFFFF"><circle cx="2.500" cy="1.500" r="0.400"/><circle cx="3.500" cy="1.500" r="0.400"/><circle cx="29.500" cy="1.500" r="0.400"/><circle cx="30.500" cy="1.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="3.500" cy="2.500" r="0.400"/><circle cx="4.500" cy="2.500" r="0.400"/><circle cx="14.500" cy="2.500" r="0.400"/><circle cx="16.500" cy="2.500" r="0.400"/><circle cx="18.500" cy="2.500" r="0.400"/><circle cx="28.500" cy="2.500" r="0.400"/><circle cx="29.500" cy="2.500" r="0.400"/><circle cx="30.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="3.500" r="0.400"/><circle cx="5.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="14.500" cy="3.500" r="0.400"/><circle cx="15.500" cy="3.500" r="0.400"/><circle cx="16.500" cy="3.500" r="0.400"/><circle cx="17.500" cy="3.500" r="0.400"/><circle cx="18.500" cy="3.500" r="0.400"/><circle cx="26.500" cy="3.500" r="0.400"/><circle cx="27.500" cy="3.500" r="0.400"/><circle cx="28.500" cy="3.500" r="0.400"/><circle cx="29.500" cy="3.500" r="0.400"/><circle cx="30.500" cy="3.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="14.500" cy="4.500" r="0.400"/><circle cx="15.500" cy="4.500" r="0.400"/><circle cx="16.500" cy="4.500" r="0.400"/><circle cx="17.500" cy="4.500" r="0.400"/><circle cx="18.500" cy="4.500" r="0.400"/><circle cx="24.500" cy="4.500" r="0.400"/><circle cx="25.500" cy="4.500" r="0.400"/><circle cx="26.500" cy="4.500" r="0.400"/><circle cx="27.500" cy="4.500" r="0.400"/><circle cx="28.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="14.500" cy="5.500" r="0.400"/><circle cx="15.500" cy="5.500" r="0.400"/><circle cx="16.500" cy="5.500" r="0.400"/><circle cx="17.500" cy="5.500" r="0.400"/><circle cx="18.500" cy="5.500" r="0.400"/><circle cx="23.500" cy="5.500" r="0.400"/><circle cx="24.500" cy="5.500" r="0.400"/><circle cx="25.500" cy="5.500" r="0.400"/><circle cx="26.500" cy="5.500" r="0.400"/><circle cx="27.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="9.500" cy="6.500" r="0.400"/><circle cx="10.500" cy="6.500" r="0.400"/><circle cx="14.500" cy="6.500" r="0.400"/><circle cx="15.500" cy="6.500" r="0.400"/><circle cx="16.500" cy="6.500" r="0.400"/><circle cx="17.500" cy="6.500" r="0.400"/><circle cx="18.500" cy="6.500" r="0.400"/><circle cx="22.500" cy="6.500" r="0.400"/><circle cx="23.500" cy="6.500" r="0.400"/><circle cx="24.500" cy="6.500" r="0.400"/><circle cx="25.500" cy="6.500" r="0.400"/><circle cx="30.500" cy="6.500" r="0.400"/><circle cx="1.500" cy="7.500" r="0.400"/><circle cx="2.500" cy="7.500" r="0.400"/><circle cx="3.500" cy="7.500" r="0.400"/><circle cx="4.500" cy="7.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="9.500" cy="7.500" r="0.400"/><circle cx="10.500" cy="7.500" r="0.400"/><circle cx="11.500" cy="7.500" r="0.400"/><circle cx="12.500" cy="7.500" r="0.400"/><circle cx="15.500" cy="7.500" r="0.400"/><circle cx="16.500" cy="7.500" r="0.400"/><circle cx="17.500" cy="7.500" r="0.400"/><circle cx="20.500" cy="7.500" r="0.400"/><circle cx="21.500" cy="7.500" r="0.400"/><circle cx="22.500" cy="7.500" r="0.400"/><circle cx="23.500" cy="7.500" r="0.400"/><circle cx="27.500" cy="7.500" r="0.400"/><circle cx="28.500" cy="7.500" r="0.400"/><circle cx="29.500" cy="7.500" r="0.400"/><circle cx="30.500" cy="7.500" r="0.400"/><circle cx="31.500" cy="7.500" r="0.400"/><circle cx="1.500" cy="8.500" r="0.400"/><circle cx="2.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="8.500" r="0.400"/><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="5.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="7.500" cy="8.500" r="0.400"/><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="8.500" r="0.400"/><circle cx="10.500" cy="8.500" r="0.400"/><circle cx="11.500" cy="8.500" r="0.400"/><circle cx="12.500" cy="8.500" r="0.400"/><circle cx="13.500" cy="8.500" r="0.400"/><circle cx="15.500" cy="8.500" r="0.400"/><circle cx="16.500" cy="8.500" r="0.400"/><circle cx="17.500" cy="8.500" r="0.400"/><circle cx="19.500" cy="8.500" r="0.400"/><circle cx="20.500" cy="8.500" r="0.400"/><circle cx="21.500" cy="8.500" r="0.400"/><circle cx="22.500" cy="8.500" r="0.400"/><circle cx="23.500" cy="8.500" r="0.400"/><circle cx="24.500" cy="8.500" r="0.400"/><ciLine truncated
|
||||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630.7 100" width="630.7" height="100" role="img" aria-label="SimurgArray"><title>SimurgArray</title><path fill="#111111" d="M50.800000000000004 58.5Q50.800000000000004 68.0 43.900000000000006 73.5Q37.0 79.0 24.8 79.0Q13.0 79.0 4.800000000000001 75.0V63.0Q9.3 65.0 14.700000000000001 66.65Q20.1 68.3 25.700000000000003 68.3Q32.1 68.3 35.1 65.8Q38.1 63.3 38.1 59.2Q38.1 54.7 34.3 52.1Q30.5 49.5 23.200000000000003 46.4Q18.8 44.5 14.8 41.9Q10.8 39.3 8.200000000000001 35.3Q5.6000000000000005 31.299999999999997 5.6000000000000005 25.099999999999994Q5.6000000000000005 15.899999999999999 12.05 10.749999999999996Q18.5 5.599999999999994 29.3 5.599999999999994Q35.0 5.599999999999994 39.95 6.799999999999997Q44.900000000000006 8.0 49.900000000000006 10.200000000000003L45.800000000000004 20.5Q41.300000000000004 18.599999999999994 37.25 17.499999999999996Q33.2 16.4 28.900000000000002 16.4Q23.700000000000003 16.4 21.0 18.749999999999996Q18.3 21.099999999999994 18.3 24.799999999999997Q18.3 27.799999999999997 19.8 29.799999999999997Q21.3 31.799999999999997 24.450000000000003 33.5Q27.6 35.199999999999996 32.6 37.4Q38.300000000000004 39.9 42.400000000000006 42.599999999999994Q46.5 45.3 48.650000000000006 49.099999999999994Q50.800000000000004 52.9 50.800000000000004 58.5Z M69.9 2.8999999999999915Q72.8 2.8999999999999915 74.85 4.349999999999994Q76.9 5.799999999999997 76.9 9.5Q76.9 13.200000000000003 74.85 14.7Q72.8 16.199999999999996 69.9 16.199999999999996Q67.0 16.199999999999996 64.95 14.7Q62.9 13.200000000000003 62.9 9.5Q62.9 5.799999999999997 64.95 4.349999999999994Q67.0 2.8999999999999915 69.9 2.8999999999999915ZM76.2 23.799999999999997V78.0H63.6V23.799999999999997Z M154.9 22.799999999999997Q164.10000000000002 22.799999999999997 168.75 27.499999999999996Q173.4 32.199999999999996 173.4 42.699999999999996V78.0H160.8V45.1Q160.8 33.0 151.60000000000002 33.0Q145.0 33.0 142.2 37.3Q139.4 41.6 139.4 49.8V78.0H126.80000000000001V45.1Q126.80000000000001 33.0 117.5 33.0Q110.60000000000001 33.0 108.0 37.8Q105.4 42.6 105.4 51.5V78.0H92.8V23.799999999999997H102.5L104.30000000000001 30.9H105.0Q107.4 26.699999999999996 111.75 24.749999999999996Q116.10000000000001 22.799999999999997 120.80000000000001 22.799999999999997Q126.9 22.799999999999997 131.05 24.849999999999998Q135.2 26.9 137.4 31.199999999999996H138.4Q140.9 26.799999999999997 145.4 24.799999999999997Q149.9 22.799999999999997 154.9 22.799999999999997Z M237.8 23.799999999999997V78.0H227.90000000000003L226.20000000000002 71.0H225.60000000000002Q222.90000000000003 75.2 218.35000000000002 77.1Q213.8 79.0 208.70000000000002 79.0Q199.60000000000002 79.0 194.45000000000002 74.3Q189.3 69.6 189.3 59.2V23.799999999999997H201.90000000000003V56.7Q201.90000000000003 68.8 211.90000000000003 68.8Q219.50000000000003 68.8 222.35000000000002 64.05Q225.20000000000002 59.3 225.20000000000002 50.3V23.799999999999997Z M282.8 22.799999999999997Q284.1 22.799999999999997 285.65000000000003 22.9Q287.20000000000005 23.0 288.3 23.299999999999997L287.20000000000005 35.0Q286.20000000000005 34.8 284.80000000000007 34.65Q283.40000000000003 34.5 282.3 34.5Q278.3 34.5 274.8 36.15Q271.3 37.8 269.15 41.25Q267.0 44.699999999999996 267.0 49.9V78.0H254.4V23.799999999999997H264.1L265.90000000000003 33.199999999999996H266.5Q268.90000000000003 28.9 273.1 25.849999999999998Q277.3 22.799999999999997 282.8 22.799999999999997Z M317.00000000000006 22.799999999999997Q327.30000000000007 22.799999999999997 333.1 30.799999999999997H333.6L334.80000000000007 23.799999999999997H345.30000000000007V78.4Q345.30000000000007 90.0 338.75000000000006 96.0Q332.20000000000005 102.0 319.20000000000005 102.0Q313.40000000000003 102.0 308.5 101.25Q303.6 100.5 299.20000000000005 98.7V88.3Q308.50000000000006 92.5 320.00000000000006 92.5Q326.20000000000005 92.5 329.45000000000005 89.05Q332.70000000000005 85.6 332.70000000000005 79.0V77.6Q332.70000000000005 76.1 332.80000000000007 74.1Q332.90000000000003 72.1 333.1 70.9H332.70000000000005Q329.90000000000003 75.1 325.85 77.05Q321.80000000000007 79.0 316.70000000000005 79.0Q306.80000000000007 79.0 301.20000000000005 71.6Q295.6 64.2 295.6 51.0Q295.6 37.8 301.25 30.299999999999997Q306.90000000000003 22.799999999999997 317.00000000000006 22.799999999999997ZM320.30000000000007 33.099999999999994Q308.50000000000006 33.099999999999994 308.50000000000006 51.2Q308.50000000000006 69.0 320.50000000000006 69.0Q327.1 69.0 330.25 65.35Q333.40000000000003 61.7 333.40000000000003 53.0V51.099999999999994Q333.40000000000003 41.5 330.25 37.3Q327.1 33.099999999999994 320.30000000000007 33.099999999999994Z"/><path fill="#111111" d="M409.70000000000005 78.0 403.20000000000005 59.099999999999994H376.30000000000007L369.9000000000001 78.0H356.30000000000007L382.50000000000006 6.299999999999997H397.1000000000001L423.30000000000007 78.0ZM393.70000000000005 29.699999999999996Q393.30000000000007 28.299999999999997 392.50000000000006 25.9Q391.70000000000005 23.5 390.95000000000005 Line truncated
|
||||||
|
After Width: | Height: | Size: 7.8 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630.7 100" width="630.7" height="100" role="img" aria-label="SimurgArray"><title>SimurgArray</title><path fill="#F7F5EF" d="M50.800000000000004 58.5Q50.800000000000004 68.0 43.900000000000006 73.5Q37.0 79.0 24.8 79.0Q13.0 79.0 4.800000000000001 75.0V63.0Q9.3 65.0 14.700000000000001 66.65Q20.1 68.3 25.700000000000003 68.3Q32.1 68.3 35.1 65.8Q38.1 63.3 38.1 59.2Q38.1 54.7 34.3 52.1Q30.5 49.5 23.200000000000003 46.4Q18.8 44.5 14.8 41.9Q10.8 39.3 8.200000000000001 35.3Q5.6000000000000005 31.299999999999997 5.6000000000000005 25.099999999999994Q5.6000000000000005 15.899999999999999 12.05 10.749999999999996Q18.5 5.599999999999994 29.3 5.599999999999994Q35.0 5.599999999999994 39.95 6.799999999999997Q44.900000000000006 8.0 49.900000000000006 10.200000000000003L45.800000000000004 20.5Q41.300000000000004 18.599999999999994 37.25 17.499999999999996Q33.2 16.4 28.900000000000002 16.4Q23.700000000000003 16.4 21.0 18.749999999999996Q18.3 21.099999999999994 18.3 24.799999999999997Q18.3 27.799999999999997 19.8 29.799999999999997Q21.3 31.799999999999997 24.450000000000003 33.5Q27.6 35.199999999999996 32.6 37.4Q38.300000000000004 39.9 42.400000000000006 42.599999999999994Q46.5 45.3 48.650000000000006 49.099999999999994Q50.800000000000004 52.9 50.800000000000004 58.5Z M69.9 2.8999999999999915Q72.8 2.8999999999999915 74.85 4.349999999999994Q76.9 5.799999999999997 76.9 9.5Q76.9 13.200000000000003 74.85 14.7Q72.8 16.199999999999996 69.9 16.199999999999996Q67.0 16.199999999999996 64.95 14.7Q62.9 13.200000000000003 62.9 9.5Q62.9 5.799999999999997 64.95 4.349999999999994Q67.0 2.8999999999999915 69.9 2.8999999999999915ZM76.2 23.799999999999997V78.0H63.6V23.799999999999997Z M154.9 22.799999999999997Q164.10000000000002 22.799999999999997 168.75 27.499999999999996Q173.4 32.199999999999996 173.4 42.699999999999996V78.0H160.8V45.1Q160.8 33.0 151.60000000000002 33.0Q145.0 33.0 142.2 37.3Q139.4 41.6 139.4 49.8V78.0H126.80000000000001V45.1Q126.80000000000001 33.0 117.5 33.0Q110.60000000000001 33.0 108.0 37.8Q105.4 42.6 105.4 51.5V78.0H92.8V23.799999999999997H102.5L104.30000000000001 30.9H105.0Q107.4 26.699999999999996 111.75 24.749999999999996Q116.10000000000001 22.799999999999997 120.80000000000001 22.799999999999997Q126.9 22.799999999999997 131.05 24.849999999999998Q135.2 26.9 137.4 31.199999999999996H138.4Q140.9 26.799999999999997 145.4 24.799999999999997Q149.9 22.799999999999997 154.9 22.799999999999997Z M237.8 23.799999999999997V78.0H227.90000000000003L226.20000000000002 71.0H225.60000000000002Q222.90000000000003 75.2 218.35000000000002 77.1Q213.8 79.0 208.70000000000002 79.0Q199.60000000000002 79.0 194.45000000000002 74.3Q189.3 69.6 189.3 59.2V23.799999999999997H201.90000000000003V56.7Q201.90000000000003 68.8 211.90000000000003 68.8Q219.50000000000003 68.8 222.35000000000002 64.05Q225.20000000000002 59.3 225.20000000000002 50.3V23.799999999999997Z M282.8 22.799999999999997Q284.1 22.799999999999997 285.65000000000003 22.9Q287.20000000000005 23.0 288.3 23.299999999999997L287.20000000000005 35.0Q286.20000000000005 34.8 284.80000000000007 34.65Q283.40000000000003 34.5 282.3 34.5Q278.3 34.5 274.8 36.15Q271.3 37.8 269.15 41.25Q267.0 44.699999999999996 267.0 49.9V78.0H254.4V23.799999999999997H264.1L265.90000000000003 33.199999999999996H266.5Q268.90000000000003 28.9 273.1 25.849999999999998Q277.3 22.799999999999997 282.8 22.799999999999997Z M317.00000000000006 22.799999999999997Q327.30000000000007 22.799999999999997 333.1 30.799999999999997H333.6L334.80000000000007 23.799999999999997H345.30000000000007V78.4Q345.30000000000007 90.0 338.75000000000006 96.0Q332.20000000000005 102.0 319.20000000000005 102.0Q313.40000000000003 102.0 308.5 101.25Q303.6 100.5 299.20000000000005 98.7V88.3Q308.50000000000006 92.5 320.00000000000006 92.5Q326.20000000000005 92.5 329.45000000000005 89.05Q332.70000000000005 85.6 332.70000000000005 79.0V77.6Q332.70000000000005 76.1 332.80000000000007 74.1Q332.90000000000003 72.1 333.1 70.9H332.70000000000005Q329.90000000000003 75.1 325.85 77.05Q321.80000000000007 79.0 316.70000000000005 79.0Q306.80000000000007 79.0 301.20000000000005 71.6Q295.6 64.2 295.6 51.0Q295.6 37.8 301.25 30.299999999999997Q306.90000000000003 22.799999999999997 317.00000000000006 22.799999999999997ZM320.30000000000007 33.099999999999994Q308.50000000000006 33.099999999999994 308.50000000000006 51.2Q308.50000000000006 69.0 320.50000000000006 69.0Q327.1 69.0 330.25 65.35Q333.40000000000003 61.7 333.40000000000003 53.0V51.099999999999994Q333.40000000000003 41.5 330.25 37.3Q327.1 33.099999999999994 320.30000000000007 33.099999999999994Z"/><path fill="#D4A017" d="M409.70000000000005 78.0 403.20000000000005 59.099999999999994H376.30000000000007L369.9000000000001 78.0H356.30000000000007L382.50000000000006 6.299999999999997H397.1000000000001L423.30000000000007 78.0ZM393.70000000000005 29.699999999999996Q393.30000000000007 28.299999999999997 392.50000000000006 25.9Q391.70000000000005 23.5 390.95000000000005 Line truncated
|
||||||
|
After Width: | Height: | Size: 7.8 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630.7 100" width="630.7" height="100" role="img" aria-label="SimurgArray"><title>SimurgArray</title><path fill="#D4A017" d="M50.800000000000004 58.5Q50.800000000000004 68.0 43.900000000000006 73.5Q37.0 79.0 24.8 79.0Q13.0 79.0 4.800000000000001 75.0V63.0Q9.3 65.0 14.700000000000001 66.65Q20.1 68.3 25.700000000000003 68.3Q32.1 68.3 35.1 65.8Q38.1 63.3 38.1 59.2Q38.1 54.7 34.3 52.1Q30.5 49.5 23.200000000000003 46.4Q18.8 44.5 14.8 41.9Q10.8 39.3 8.200000000000001 35.3Q5.6000000000000005 31.299999999999997 5.6000000000000005 25.099999999999994Q5.6000000000000005 15.899999999999999 12.05 10.749999999999996Q18.5 5.599999999999994 29.3 5.599999999999994Q35.0 5.599999999999994 39.95 6.799999999999997Q44.900000000000006 8.0 49.900000000000006 10.200000000000003L45.800000000000004 20.5Q41.300000000000004 18.599999999999994 37.25 17.499999999999996Q33.2 16.4 28.900000000000002 16.4Q23.700000000000003 16.4 21.0 18.749999999999996Q18.3 21.099999999999994 18.3 24.799999999999997Q18.3 27.799999999999997 19.8 29.799999999999997Q21.3 31.799999999999997 24.450000000000003 33.5Q27.6 35.199999999999996 32.6 37.4Q38.300000000000004 39.9 42.400000000000006 42.599999999999994Q46.5 45.3 48.650000000000006 49.099999999999994Q50.800000000000004 52.9 50.800000000000004 58.5Z M69.9 2.8999999999999915Q72.8 2.8999999999999915 74.85 4.349999999999994Q76.9 5.799999999999997 76.9 9.5Q76.9 13.200000000000003 74.85 14.7Q72.8 16.199999999999996 69.9 16.199999999999996Q67.0 16.199999999999996 64.95 14.7Q62.9 13.200000000000003 62.9 9.5Q62.9 5.799999999999997 64.95 4.349999999999994Q67.0 2.8999999999999915 69.9 2.8999999999999915ZM76.2 23.799999999999997V78.0H63.6V23.799999999999997Z M154.9 22.799999999999997Q164.10000000000002 22.799999999999997 168.75 27.499999999999996Q173.4 32.199999999999996 173.4 42.699999999999996V78.0H160.8V45.1Q160.8 33.0 151.60000000000002 33.0Q145.0 33.0 142.2 37.3Q139.4 41.6 139.4 49.8V78.0H126.80000000000001V45.1Q126.80000000000001 33.0 117.5 33.0Q110.60000000000001 33.0 108.0 37.8Q105.4 42.6 105.4 51.5V78.0H92.8V23.799999999999997H102.5L104.30000000000001 30.9H105.0Q107.4 26.699999999999996 111.75 24.749999999999996Q116.10000000000001 22.799999999999997 120.80000000000001 22.799999999999997Q126.9 22.799999999999997 131.05 24.849999999999998Q135.2 26.9 137.4 31.199999999999996H138.4Q140.9 26.799999999999997 145.4 24.799999999999997Q149.9 22.799999999999997 154.9 22.799999999999997Z M237.8 23.799999999999997V78.0H227.90000000000003L226.20000000000002 71.0H225.60000000000002Q222.90000000000003 75.2 218.35000000000002 77.1Q213.8 79.0 208.70000000000002 79.0Q199.60000000000002 79.0 194.45000000000002 74.3Q189.3 69.6 189.3 59.2V23.799999999999997H201.90000000000003V56.7Q201.90000000000003 68.8 211.90000000000003 68.8Q219.50000000000003 68.8 222.35000000000002 64.05Q225.20000000000002 59.3 225.20000000000002 50.3V23.799999999999997Z M282.8 22.799999999999997Q284.1 22.799999999999997 285.65000000000003 22.9Q287.20000000000005 23.0 288.3 23.299999999999997L287.20000000000005 35.0Q286.20000000000005 34.8 284.80000000000007 34.65Q283.40000000000003 34.5 282.3 34.5Q278.3 34.5 274.8 36.15Q271.3 37.8 269.15 41.25Q267.0 44.699999999999996 267.0 49.9V78.0H254.4V23.799999999999997H264.1L265.90000000000003 33.199999999999996H266.5Q268.90000000000003 28.9 273.1 25.849999999999998Q277.3 22.799999999999997 282.8 22.799999999999997Z M317.00000000000006 22.799999999999997Q327.30000000000007 22.799999999999997 333.1 30.799999999999997H333.6L334.80000000000007 23.799999999999997H345.30000000000007V78.4Q345.30000000000007 90.0 338.75000000000006 96.0Q332.20000000000005 102.0 319.20000000000005 102.0Q313.40000000000003 102.0 308.5 101.25Q303.6 100.5 299.20000000000005 98.7V88.3Q308.50000000000006 92.5 320.00000000000006 92.5Q326.20000000000005 92.5 329.45000000000005 89.05Q332.70000000000005 85.6 332.70000000000005 79.0V77.6Q332.70000000000005 76.1 332.80000000000007 74.1Q332.90000000000003 72.1 333.1 70.9H332.70000000000005Q329.90000000000003 75.1 325.85 77.05Q321.80000000000007 79.0 316.70000000000005 79.0Q306.80000000000007 79.0 301.20000000000005 71.6Q295.6 64.2 295.6 51.0Q295.6 37.8 301.25 30.299999999999997Q306.90000000000003 22.799999999999997 317.00000000000006 22.799999999999997ZM320.30000000000007 33.099999999999994Q308.50000000000006 33.099999999999994 308.50000000000006 51.2Q308.50000000000006 69.0 320.50000000000006 69.0Q327.1 69.0 330.25 65.35Q333.40000000000003 61.7 333.40000000000003 53.0V51.099999999999994Q333.40000000000003 41.5 330.25 37.3Q327.1 33.099999999999994 320.30000000000007 33.099999999999994Z"/><path fill="#D4A017" d="M409.70000000000005 78.0 403.20000000000005 59.099999999999994H376.30000000000007L369.9000000000001 78.0H356.30000000000007L382.50000000000006 6.299999999999997H397.1000000000001L423.30000000000007 78.0ZM393.70000000000005 29.699999999999996Q393.30000000000007 28.299999999999997 392.50000000000006 25.9Q391.70000000000005 23.5 390.95000000000005 Line truncated
|
||||||
|
After Width: | Height: | Size: 7.8 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630.7 100" width="630.7" height="100" role="img" aria-label="SimurgArray"><title>SimurgArray</title><path fill="#1E2240" d="M50.800000000000004 58.5Q50.800000000000004 68.0 43.900000000000006 73.5Q37.0 79.0 24.8 79.0Q13.0 79.0 4.800000000000001 75.0V63.0Q9.3 65.0 14.700000000000001 66.65Q20.1 68.3 25.700000000000003 68.3Q32.1 68.3 35.1 65.8Q38.1 63.3 38.1 59.2Q38.1 54.7 34.3 52.1Q30.5 49.5 23.200000000000003 46.4Q18.8 44.5 14.8 41.9Q10.8 39.3 8.200000000000001 35.3Q5.6000000000000005 31.299999999999997 5.6000000000000005 25.099999999999994Q5.6000000000000005 15.899999999999999 12.05 10.749999999999996Q18.5 5.599999999999994 29.3 5.599999999999994Q35.0 5.599999999999994 39.95 6.799999999999997Q44.900000000000006 8.0 49.900000000000006 10.200000000000003L45.800000000000004 20.5Q41.300000000000004 18.599999999999994 37.25 17.499999999999996Q33.2 16.4 28.900000000000002 16.4Q23.700000000000003 16.4 21.0 18.749999999999996Q18.3 21.099999999999994 18.3 24.799999999999997Q18.3 27.799999999999997 19.8 29.799999999999997Q21.3 31.799999999999997 24.450000000000003 33.5Q27.6 35.199999999999996 32.6 37.4Q38.300000000000004 39.9 42.400000000000006 42.599999999999994Q46.5 45.3 48.650000000000006 49.099999999999994Q50.800000000000004 52.9 50.800000000000004 58.5Z M69.9 2.8999999999999915Q72.8 2.8999999999999915 74.85 4.349999999999994Q76.9 5.799999999999997 76.9 9.5Q76.9 13.200000000000003 74.85 14.7Q72.8 16.199999999999996 69.9 16.199999999999996Q67.0 16.199999999999996 64.95 14.7Q62.9 13.200000000000003 62.9 9.5Q62.9 5.799999999999997 64.95 4.349999999999994Q67.0 2.8999999999999915 69.9 2.8999999999999915ZM76.2 23.799999999999997V78.0H63.6V23.799999999999997Z M154.9 22.799999999999997Q164.10000000000002 22.799999999999997 168.75 27.499999999999996Q173.4 32.199999999999996 173.4 42.699999999999996V78.0H160.8V45.1Q160.8 33.0 151.60000000000002 33.0Q145.0 33.0 142.2 37.3Q139.4 41.6 139.4 49.8V78.0H126.80000000000001V45.1Q126.80000000000001 33.0 117.5 33.0Q110.60000000000001 33.0 108.0 37.8Q105.4 42.6 105.4 51.5V78.0H92.8V23.799999999999997H102.5L104.30000000000001 30.9H105.0Q107.4 26.699999999999996 111.75 24.749999999999996Q116.10000000000001 22.799999999999997 120.80000000000001 22.799999999999997Q126.9 22.799999999999997 131.05 24.849999999999998Q135.2 26.9 137.4 31.199999999999996H138.4Q140.9 26.799999999999997 145.4 24.799999999999997Q149.9 22.799999999999997 154.9 22.799999999999997Z M237.8 23.799999999999997V78.0H227.90000000000003L226.20000000000002 71.0H225.60000000000002Q222.90000000000003 75.2 218.35000000000002 77.1Q213.8 79.0 208.70000000000002 79.0Q199.60000000000002 79.0 194.45000000000002 74.3Q189.3 69.6 189.3 59.2V23.799999999999997H201.90000000000003V56.7Q201.90000000000003 68.8 211.90000000000003 68.8Q219.50000000000003 68.8 222.35000000000002 64.05Q225.20000000000002 59.3 225.20000000000002 50.3V23.799999999999997Z M282.8 22.799999999999997Q284.1 22.799999999999997 285.65000000000003 22.9Q287.20000000000005 23.0 288.3 23.299999999999997L287.20000000000005 35.0Q286.20000000000005 34.8 284.80000000000007 34.65Q283.40000000000003 34.5 282.3 34.5Q278.3 34.5 274.8 36.15Q271.3 37.8 269.15 41.25Q267.0 44.699999999999996 267.0 49.9V78.0H254.4V23.799999999999997H264.1L265.90000000000003 33.199999999999996H266.5Q268.90000000000003 28.9 273.1 25.849999999999998Q277.3 22.799999999999997 282.8 22.799999999999997Z M317.00000000000006 22.799999999999997Q327.30000000000007 22.799999999999997 333.1 30.799999999999997H333.6L334.80000000000007 23.799999999999997H345.30000000000007V78.4Q345.30000000000007 90.0 338.75000000000006 96.0Q332.20000000000005 102.0 319.20000000000005 102.0Q313.40000000000003 102.0 308.5 101.25Q303.6 100.5 299.20000000000005 98.7V88.3Q308.50000000000006 92.5 320.00000000000006 92.5Q326.20000000000005 92.5 329.45000000000005 89.05Q332.70000000000005 85.6 332.70000000000005 79.0V77.6Q332.70000000000005 76.1 332.80000000000007 74.1Q332.90000000000003 72.1 333.1 70.9H332.70000000000005Q329.90000000000003 75.1 325.85 77.05Q321.80000000000007 79.0 316.70000000000005 79.0Q306.80000000000007 79.0 301.20000000000005 71.6Q295.6 64.2 295.6 51.0Q295.6 37.8 301.25 30.299999999999997Q306.90000000000003 22.799999999999997 317.00000000000006 22.799999999999997ZM320.30000000000007 33.099999999999994Q308.50000000000006 33.099999999999994 308.50000000000006 51.2Q308.50000000000006 69.0 320.50000000000006 69.0Q327.1 69.0 330.25 65.35Q333.40000000000003 61.7 333.40000000000003 53.0V51.099999999999994Q333.40000000000003 41.5 330.25 37.3Q327.1 33.099999999999994 320.30000000000007 33.099999999999994Z"/><path fill="#8C6500" d="M409.70000000000005 78.0 403.20000000000005 59.099999999999994H376.30000000000007L369.9000000000001 78.0H356.30000000000007L382.50000000000006 6.299999999999997H397.1000000000001L423.30000000000007 78.0ZM393.70000000000005 29.699999999999996Q393.30000000000007 28.299999999999997 392.50000000000006 25.9Q391.70000000000005 23.5 390.95000000000005 Line truncated
|
||||||
|
After Width: | Height: | Size: 7.8 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630.7 100" width="630.7" height="100" role="img" aria-label="SimurgArray"><title>SimurgArray</title><path fill="#FFFFFF" d="M50.800000000000004 58.5Q50.800000000000004 68.0 43.900000000000006 73.5Q37.0 79.0 24.8 79.0Q13.0 79.0 4.800000000000001 75.0V63.0Q9.3 65.0 14.700000000000001 66.65Q20.1 68.3 25.700000000000003 68.3Q32.1 68.3 35.1 65.8Q38.1 63.3 38.1 59.2Q38.1 54.7 34.3 52.1Q30.5 49.5 23.200000000000003 46.4Q18.8 44.5 14.8 41.9Q10.8 39.3 8.200000000000001 35.3Q5.6000000000000005 31.299999999999997 5.6000000000000005 25.099999999999994Q5.6000000000000005 15.899999999999999 12.05 10.749999999999996Q18.5 5.599999999999994 29.3 5.599999999999994Q35.0 5.599999999999994 39.95 6.799999999999997Q44.900000000000006 8.0 49.900000000000006 10.200000000000003L45.800000000000004 20.5Q41.300000000000004 18.599999999999994 37.25 17.499999999999996Q33.2 16.4 28.900000000000002 16.4Q23.700000000000003 16.4 21.0 18.749999999999996Q18.3 21.099999999999994 18.3 24.799999999999997Q18.3 27.799999999999997 19.8 29.799999999999997Q21.3 31.799999999999997 24.450000000000003 33.5Q27.6 35.199999999999996 32.6 37.4Q38.300000000000004 39.9 42.400000000000006 42.599999999999994Q46.5 45.3 48.650000000000006 49.099999999999994Q50.800000000000004 52.9 50.800000000000004 58.5Z M69.9 2.8999999999999915Q72.8 2.8999999999999915 74.85 4.349999999999994Q76.9 5.799999999999997 76.9 9.5Q76.9 13.200000000000003 74.85 14.7Q72.8 16.199999999999996 69.9 16.199999999999996Q67.0 16.199999999999996 64.95 14.7Q62.9 13.200000000000003 62.9 9.5Q62.9 5.799999999999997 64.95 4.349999999999994Q67.0 2.8999999999999915 69.9 2.8999999999999915ZM76.2 23.799999999999997V78.0H63.6V23.799999999999997Z M154.9 22.799999999999997Q164.10000000000002 22.799999999999997 168.75 27.499999999999996Q173.4 32.199999999999996 173.4 42.699999999999996V78.0H160.8V45.1Q160.8 33.0 151.60000000000002 33.0Q145.0 33.0 142.2 37.3Q139.4 41.6 139.4 49.8V78.0H126.80000000000001V45.1Q126.80000000000001 33.0 117.5 33.0Q110.60000000000001 33.0 108.0 37.8Q105.4 42.6 105.4 51.5V78.0H92.8V23.799999999999997H102.5L104.30000000000001 30.9H105.0Q107.4 26.699999999999996 111.75 24.749999999999996Q116.10000000000001 22.799999999999997 120.80000000000001 22.799999999999997Q126.9 22.799999999999997 131.05 24.849999999999998Q135.2 26.9 137.4 31.199999999999996H138.4Q140.9 26.799999999999997 145.4 24.799999999999997Q149.9 22.799999999999997 154.9 22.799999999999997Z M237.8 23.799999999999997V78.0H227.90000000000003L226.20000000000002 71.0H225.60000000000002Q222.90000000000003 75.2 218.35000000000002 77.1Q213.8 79.0 208.70000000000002 79.0Q199.60000000000002 79.0 194.45000000000002 74.3Q189.3 69.6 189.3 59.2V23.799999999999997H201.90000000000003V56.7Q201.90000000000003 68.8 211.90000000000003 68.8Q219.50000000000003 68.8 222.35000000000002 64.05Q225.20000000000002 59.3 225.20000000000002 50.3V23.799999999999997Z M282.8 22.799999999999997Q284.1 22.799999999999997 285.65000000000003 22.9Q287.20000000000005 23.0 288.3 23.299999999999997L287.20000000000005 35.0Q286.20000000000005 34.8 284.80000000000007 34.65Q283.40000000000003 34.5 282.3 34.5Q278.3 34.5 274.8 36.15Q271.3 37.8 269.15 41.25Q267.0 44.699999999999996 267.0 49.9V78.0H254.4V23.799999999999997H264.1L265.90000000000003 33.199999999999996H266.5Q268.90000000000003 28.9 273.1 25.849999999999998Q277.3 22.799999999999997 282.8 22.799999999999997Z M317.00000000000006 22.799999999999997Q327.30000000000007 22.799999999999997 333.1 30.799999999999997H333.6L334.80000000000007 23.799999999999997H345.30000000000007V78.4Q345.30000000000007 90.0 338.75000000000006 96.0Q332.20000000000005 102.0 319.20000000000005 102.0Q313.40000000000003 102.0 308.5 101.25Q303.6 100.5 299.20000000000005 98.7V88.3Q308.50000000000006 92.5 320.00000000000006 92.5Q326.20000000000005 92.5 329.45000000000005 89.05Q332.70000000000005 85.6 332.70000000000005 79.0V77.6Q332.70000000000005 76.1 332.80000000000007 74.1Q332.90000000000003 72.1 333.1 70.9H332.70000000000005Q329.90000000000003 75.1 325.85 77.05Q321.80000000000007 79.0 316.70000000000005 79.0Q306.80000000000007 79.0 301.20000000000005 71.6Q295.6 64.2 295.6 51.0Q295.6 37.8 301.25 30.299999999999997Q306.90000000000003 22.799999999999997 317.00000000000006 22.799999999999997ZM320.30000000000007 33.099999999999994Q308.50000000000006 33.099999999999994 308.50000000000006 51.2Q308.50000000000006 69.0 320.50000000000006 69.0Q327.1 69.0 330.25 65.35Q333.40000000000003 61.7 333.40000000000003 53.0V51.099999999999994Q333.40000000000003 41.5 330.25 37.3Q327.1 33.099999999999994 320.30000000000007 33.099999999999994Z"/><path fill="#FFFFFF" d="M409.70000000000005 78.0 403.20000000000005 59.099999999999994H376.30000000000007L369.9000000000001 78.0H356.30000000000007L382.50000000000006 6.299999999999997H397.1000000000001L423.30000000000007 78.0ZM393.70000000000005 29.699999999999996Q393.30000000000007 28.299999999999997 392.50000000000006 25.9Q391.70000000000005 23.5 390.95000000000005 Line truncated
|
||||||
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
o o SimurgArray {version}
|
||||||
|
oo o oo Thirty birds, one picture.
|
||||||
|
ooooooo
|
||||||
|
ooo IDAT to genotypes, QC, CN, PGx
|
||||||
|
/ | \ research use only
|
||||||
|
* o *
|
||||||
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 71 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<!-- SimurgArray report corner mark.
|
||||||
|
Always shown with the software version and the run manifest checksum. -->
|
||||||
|
<div class="simurg-mark" style="display:flex;align-items:center;gap:8px;font:12px 'Noto Sans Mono',monospace;color:#A3A7C9">
|
||||||
|
<img src="report_corner_mark.svg" width="26" height="24" alt="SimurgArray">
|
||||||
|
<span>SimurgArray {version} · run {manifest_sha256[:12]}</span>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" width="13" height="12" role="img" aria-label="SimurgArray"><title>SimurgArray</title><g fill="#D4A017"><circle cx="1.500" cy="1.500" r="0.400"/><circle cx="11.500" cy="1.500" r="0.400"/><circle cx="1.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="2.500" r="0.400"/><circle cx="10.500" cy="2.500" r="0.400"/><circle cx="11.500" cy="2.500" r="0.400"/><circle cx="2.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="3.500" r="0.400"/><circle cx="6.500" cy="3.500" r="0.400"/><circle cx="9.500" cy="3.500" r="0.400"/><circle cx="10.500" cy="3.500" r="0.400"/><circle cx="3.500" cy="4.500" r="0.400"/><circle cx="4.500" cy="4.500" r="0.400"/><circle cx="5.500" cy="4.500" r="0.400"/><circle cx="6.500" cy="4.500" r="0.400"/><circle cx="7.500" cy="4.500" r="0.400"/><circle cx="8.500" cy="4.500" r="0.400"/><circle cx="9.500" cy="4.500" r="0.400"/><circle cx="1.500" cy="5.500" r="0.400"/><circle cx="2.500" cy="5.500" r="0.400"/><circle cx="3.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="5.500" r="0.400"/><circle cx="5.500" cy="5.500" r="0.400"/><circle cx="6.500" cy="5.500" r="0.400"/><circle cx="7.500" cy="5.500" r="0.400"/><circle cx="8.500" cy="5.500" r="0.400"/><circle cx="9.500" cy="5.500" r="0.400"/><circle cx="10.500" cy="5.500" r="0.400"/><circle cx="11.500" cy="5.500" r="0.400"/><circle cx="4.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="6.500" r="0.400"/><circle cx="6.500" cy="6.500" r="0.400"/><circle cx="7.500" cy="6.500" r="0.400"/><circle cx="8.500" cy="6.500" r="0.400"/><circle cx="5.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="7.500" r="0.400"/><circle cx="7.500" cy="7.500" r="0.400"/><circle cx="6.500" cy="8.500" r="0.400"/><circle cx="6.500" cy="9.500" r="0.400"/><circle cx="5.500" cy="10.500" r="0.400"/><circle cx="6.500" cy="10.500" r="0.400"/><circle cx="7.500" cy="10.500" r="0.400"/></g><g fill="#C8453A"><circle cx="4.500" cy="8.500" r="0.400"/><circle cx="3.500" cy="9.500" r="0.400"/><circle cx="2.500" cy="10.500" r="0.400"/><circle cx="3.500" cy="10.500" r="0.400"/></g><g fill="#2F8F5B"><circle cx="8.500" cy="8.500" r="0.400"/><circle cx="9.500" cy="9.500" r="0.400"/><circle cx="9.500" cy="10.500" r="0.400"/><circle cx="10.500" cy="10.500" r="0.400"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 125 KiB |
@@ -1,6 +1,6 @@
|
|||||||
"""Featured images for the blog posts (1200 x 630 JPEG, WordPress / social preview size).
|
"""Featured images for the blog posts (1200 x 630 JPEG, WordPress / social preview size).
|
||||||
|
|
||||||
A bird drawn from dots on a BeadChip-like grid: red and green are the two scanner channels, the bird is gold.
|
The SimurgArray mark (scripts/brand/simurg_mark.py) on a bead grid: gold bird, red and green channel plumes.
|
||||||
Run with any Python that has Pillow: python3 scripts/blog/make_featured_images.py → blog/images/*.jpg
|
Run with any Python that has Pillow: python3 scripts/blog/make_featured_images.py → blog/images/*.jpg
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -8,9 +8,13 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import math
|
import math
|
||||||
import random
|
import random
|
||||||
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFilter, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "brand"))
|
||||||
|
from simurg_mark import SIMPLE, Grid, art, detailed
|
||||||
|
|
||||||
W, H, SS = 1200, 630, 2 # output size, supersampling
|
W, H, SS = 1200, 630, 2 # output size, supersampling
|
||||||
INDIGO, INDIGO2 = (30, 34, 64), (18, 20, 40)
|
INDIGO, INDIGO2 = (30, 34, 64), (18, 20, 40)
|
||||||
@@ -28,89 +32,6 @@ POSTS = [
|
|||||||
] # fmt: skip
|
] # fmt: skip
|
||||||
|
|
||||||
|
|
||||||
def _bezier(p0: tuple[float, float], p1: tuple[float, float], p2: tuple[float, float],
|
|
||||||
w0: float, w1: float, n: int = 40) -> list[tuple[float, float]]: # fmt: skip
|
|
||||||
"""Polygon of a tapered quadratic Bezier stroke (a tail plume)."""
|
|
||||||
left, right = [], []
|
|
||||||
for i in range(n + 1):
|
|
||||||
t = i / n
|
|
||||||
x = (1 - t) ** 2 * p0[0] + 2 * (1 - t) * t * p1[0] + t * t * p2[0]
|
|
||||||
y = (1 - t) ** 2 * p0[1] + 2 * (1 - t) * t * p1[1] + t * t * p2[1]
|
|
||||||
dx = 2 * (1 - t) * (p1[0] - p0[0]) + 2 * t * (p2[0] - p1[0])
|
|
||||||
dy = 2 * (1 - t) * (p1[1] - p0[1]) + 2 * t * (p2[1] - p1[1])
|
|
||||||
ln = math.hypot(dx, dy) or 1.0
|
|
||||||
hw = (w0 + (w1 - w0) * t) / 2
|
|
||||||
left.append((x - dy / ln * hw, y + dx / ln * hw))
|
|
||||||
right.append((x + dy / ln * hw, y - dx / ln * hw))
|
|
||||||
return left + right[::-1]
|
|
||||||
|
|
||||||
|
|
||||||
def bird_mask(w: int, h: int) -> Image.Image:
|
|
||||||
"""Silhouette of a simurg in flight, facing right: raised swept wings, crest, hooked beak and three long
|
|
||||||
plumes ending in peacock eyes, in a w x h box (design grid 520 x 420)."""
|
|
||||||
sx, sy = w / 520, h / 420
|
|
||||||
m = Image.new("L", (w, h), 0)
|
|
||||||
d = ImageDraw.Draw(m)
|
|
||||||
|
|
||||||
def p(pts: list[tuple[float, float]]) -> list[tuple[float, float]]:
|
|
||||||
return [(x * sx, y * sy) for x, y in pts]
|
|
||||||
|
|
||||||
def circle(cx: float, cy: float, r: float) -> None:
|
|
||||||
d.ellipse([(cx - r) * sx, (cy - r) * sy, (cx + r) * sx, (cy + r) * sy], fill=255)
|
|
||||||
|
|
||||||
body = [(250 + 95 * math.cos(t) * math.cos(-0.35) - 34 * math.sin(t) * math.sin(-0.35) + 70,
|
|
||||||
228 + 95 * math.cos(t) * math.sin(-0.35) + 34 * math.sin(t) * math.cos(-0.35))
|
|
||||||
for t in [k * math.pi / 30 for k in range(60)]] # fmt: skip
|
|
||||||
d.polygon(p(body), fill=255)
|
|
||||||
d.polygon(p([(385, 170), (420, 150), (440, 200), (395, 225)]), fill=255) # neck
|
|
||||||
circle(432, 166, 27) # head
|
|
||||||
d.polygon(p([(452, 152), (496, 166), (486, 184), (470, 178), (452, 184)]), fill=255) # hooked beak
|
|
||||||
for tip in ((372, 118), (392, 108), (414, 112)): # crest
|
|
||||||
d.polygon(p(_bezier((425, 150), ((425 + tip[0]) / 2, tip[1] + 18), tip, 12, 3)), fill=255)
|
|
||||||
d.polygon(
|
|
||||||
p(
|
|
||||||
[
|
|
||||||
(345, 205),
|
|
||||||
(338, 150),
|
|
||||||
(312, 92),
|
|
||||||
(266, 46),
|
|
||||||
(200, 12),
|
|
||||||
(222, 48),
|
|
||||||
(176, 44),
|
|
||||||
(226, 84),
|
|
||||||
(170, 92),
|
|
||||||
(236, 122),
|
|
||||||
(180, 138),
|
|
||||||
(250, 162),
|
|
||||||
(204, 186),
|
|
||||||
(284, 214),
|
|
||||||
]
|
|
||||||
),
|
|
||||||
fill=255,
|
|
||||||
) # near wing
|
|
||||||
d.polygon(
|
|
||||||
p(
|
|
||||||
[
|
|
||||||
(305, 214),
|
|
||||||
(268, 162),
|
|
||||||
(214, 124),
|
|
||||||
(140, 100),
|
|
||||||
(170, 130),
|
|
||||||
(124, 138),
|
|
||||||
(184, 162),
|
|
||||||
(146, 176),
|
|
||||||
(220, 196),
|
|
||||||
(262, 236),
|
|
||||||
]
|
|
||||||
),
|
|
||||||
fill=255,
|
|
||||||
) # far wing
|
|
||||||
for c, e, eye in (((150, 250), (22, 300), 20), ((170, 320), (58, 392), 18), ((230, 350), (170, 408), 15)):
|
|
||||||
d.polygon(p(_bezier((250, 250), c, e, 30, 8)), fill=255) # plume
|
|
||||||
circle(e[0], e[1], eye) # peacock eye
|
|
||||||
return m
|
|
||||||
|
|
||||||
|
|
||||||
def background(rng: random.Random) -> Image.Image:
|
def background(rng: random.Random) -> Image.Image:
|
||||||
img = Image.new("RGB", (W * SS, H * SS), INDIGO)
|
img = Image.new("RGB", (W * SS, H * SS), INDIGO)
|
||||||
d = ImageDraw.Draw(img)
|
d = ImageDraw.Draw(img)
|
||||||
@@ -129,69 +50,59 @@ def background(rng: random.Random) -> Image.Image:
|
|||||||
return img
|
return img
|
||||||
|
|
||||||
|
|
||||||
def dot_bird(img: Image.Image, x0: int, y0: int, w: int, h: int, step: int, rng: random.Random,
|
def draw_mark(img: Image.Image, grid: Grid, x: float, y: float, cell: float, dim: float = 1.0,
|
||||||
dim: float = 1.0) -> list[tuple[float, float]]: # fmt: skip
|
rad: float = 0.4) -> list[tuple[float, float]]: # fmt: skip
|
||||||
"""Draw the bird as dots; returns the dot centres (full-resolution pixels)."""
|
"""Draw a mark grid with its top left at (x, y); returns the dot centres."""
|
||||||
mask = bird_mask(w, h)
|
|
||||||
edge = mask.filter(ImageFilter.MinFilter(max(3, (step // 2) | 1)))
|
|
||||||
d = ImageDraw.Draw(img)
|
d = ImageDraw.Draw(img)
|
||||||
|
pal = {"gold": GOLD, "red": RED, "green": GREEN}
|
||||||
pts = []
|
pts = []
|
||||||
for yy in range(step // 2, h, step):
|
for (c, r), layer in grid.items():
|
||||||
for xx in range(step // 2, w, step):
|
col = tuple(int(bg + (cc - bg) * dim) for bg, cc in zip(INDIGO, pal[layer], strict=True))
|
||||||
if mask.getpixel((xx, yy)) < 128:
|
cx, cy = x + (c + 0.5) * cell, y + (r + 0.5) * cell
|
||||||
continue
|
d.ellipse([cx - rad * cell, cy - rad * cell, cx + rad * cell, cy + rad * cell], fill=col)
|
||||||
inner = edge.getpixel((xx, yy)) >= 128
|
pts.append((cx, cy))
|
||||||
col = GOLD if inner else (RED if (xx // step + yy // step) % 2 else GREEN)
|
|
||||||
if inner and rng.random() < 0.12:
|
|
||||||
col = (236, 196, 72)
|
|
||||||
c = tuple(int(bg + (cc - bg) * dim) for bg, cc in zip(INDIGO, col, strict=True))
|
|
||||||
r = step * (0.36 if inner else 0.30)
|
|
||||||
cx, cy = x0 + xx, y0 + yy
|
|
||||||
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=c)
|
|
||||||
pts.append((cx, cy))
|
|
||||||
return pts
|
return pts
|
||||||
|
|
||||||
|
|
||||||
|
def dot(d: ImageDraw.ImageDraw, cx: float, cy: float, r: float, col: tuple[int, int, int], a: float) -> None:
|
||||||
|
c = tuple(int(bg + (cc - bg) * a) for bg, cc in zip(INDIGO, col, strict=True))
|
||||||
|
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=c)
|
||||||
|
|
||||||
|
|
||||||
def motif(img: Image.Image, kind: str, rng: random.Random) -> None:
|
def motif(img: Image.Image, kind: str, rng: random.Random) -> None:
|
||||||
d = ImageDraw.Draw(img)
|
d = ImageDraw.Draw(img)
|
||||||
bx, by, bw, bh = 640 * SS, 90 * SS, 520 * SS, 420 * SS
|
big, _, _ = detailed()
|
||||||
|
small, sc, sr = art(SIMPLE)
|
||||||
if kind == "box": # a closed box, and a stream of dots leaving it to become the bird
|
if kind == "box": # a closed box, and a stream of dots leaving it to become the bird
|
||||||
x, y, sz = 590 * SS, 380 * SS, 150 * SS
|
x, y, sz = 600 * SS, 400 * SS, 140 * SS
|
||||||
d.rectangle([x, y, x + sz, y + sz], fill=(12, 13, 26), outline=(70, 74, 110), width=2 * SS)
|
d.rectangle([x, y, x + sz, y + sz], fill=(12, 13, 26), outline=(70, 74, 110), width=2 * SS)
|
||||||
sx0, sy0, sx1, sy1 = x + sz - 20 * SS, y + 20 * SS, 790 * SS, 300 * SS
|
cell = 14 * SS
|
||||||
for k in range(9):
|
mx, my = 730 * SS, 40 * SS
|
||||||
f = k / 8
|
draw_mark(img, big, mx, my, cell)
|
||||||
cx, cy = sx0 + (sx1 - sx0) * f, sy0 + (sy1 - sy0) * f
|
x0, y0, x1, y1 = x + sz - 18 * SS, y + 18 * SS, mx + 9 * cell, my + 24 * cell
|
||||||
|
for k in range(10):
|
||||||
|
f = k / 9
|
||||||
col = GOLD if f > 0.6 else (RED if k % 2 else GREEN)
|
col = GOLD if f > 0.6 else (RED if k % 2 else GREEN)
|
||||||
a = 0.35 + 0.65 * f
|
dot(d, x0 + (x1 - x0) * f, y0 + (y1 - y0) * f, (2.2 + 2.4 * f) * SS, col, 0.35 + 0.65 * f)
|
||||||
c = tuple(int(bg + (cc - bg) * a) for bg, cc in zip(INDIGO, col, strict=True))
|
|
||||||
r = (2.2 + 2.6 * f) * SS
|
|
||||||
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=c)
|
|
||||||
dot_bird(img, bx + 90 * SS, by - 50 * SS, int(bw * 0.82), int(bh * 0.82), 12 * SS, rng)
|
|
||||||
elif kind == "flock": # smaller dim birds around one bright bird
|
elif kind == "flock": # smaller dim birds around one bright bird
|
||||||
for fx, fy, fs, dim in (
|
for fx, fy, cell, dim in ((575, 60, 4.2, 0.4), (600, 440, 3.6, 0.34), (1070, 470, 3.4, 0.34),
|
||||||
(560, 70, 0.28, 0.35),
|
(1080, 40, 3.2, 0.3)): # fmt: skip
|
||||||
(600, 430, 0.24, 0.3),
|
draw_mark(img, big, fx * SS, fy * SS, cell * SS, dim)
|
||||||
(1030, 470, 0.22, 0.3),
|
draw_mark(img, big, 700 * SS, 100 * SS, 13 * SS)
|
||||||
(1060, 40, 0.2, 0.28),
|
|
||||||
):
|
|
||||||
dot_bird(img, fx * SS, fy * SS, int(bw * fs), int(bh * fs), 6 * SS, rng, dim)
|
|
||||||
dot_bird(img, bx + 40 * SS, by + 20 * SS, int(bw * 0.8), int(bh * 0.8), 12 * SS, rng)
|
|
||||||
elif kind == "converge": # dots flowing in from the edges
|
elif kind == "converge": # dots flowing in from the edges
|
||||||
pts = dot_bird(img, bx, by, bw, bh, 13 * SS, rng)
|
pts = draw_mark(img, big, 690 * SS, 70 * SS, 15 * SS)
|
||||||
for _ in range(90):
|
for _ in range(90):
|
||||||
tx, ty = rng.choice(pts)
|
tx, ty = rng.choice(pts)
|
||||||
ang = rng.uniform(math.pi * 0.55, math.pi * 1.45)
|
ang = rng.uniform(0, 2 * math.pi)
|
||||||
dist = rng.uniform(140, 420) * SS
|
dist = rng.uniform(120, 360) * SS
|
||||||
for k in range(1, 7):
|
for k in range(1, 7):
|
||||||
f = k / 7
|
f = k / 7
|
||||||
cx, cy = tx + math.cos(ang) * dist * f, ty + math.sin(ang) * dist * f
|
cx, cy = tx + math.cos(ang) * dist * f, ty + math.sin(ang) * dist * f
|
||||||
a = 0.55 * (1 - f)
|
if cx < 620 * SS:
|
||||||
col = RED if k % 2 else GREEN
|
continue
|
||||||
c = tuple(int(bg + (cc - bg) * a) for bg, cc in zip(INDIGO, col, strict=True))
|
dot(d, cx, cy, (2.6 - 1.6 * f) * SS, RED if k % 2 else GREEN, 0.5 * (1 - f))
|
||||||
r = (2.6 - 1.6 * f) * SS
|
|
||||||
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=c)
|
|
||||||
elif kind == "calendar": # a calendar grid under the bird, some weeks done
|
elif kind == "calendar": # a calendar grid under the bird, some weeks done
|
||||||
|
draw_mark(img, big, 740 * SS, 26 * SS, 11 * SS)
|
||||||
x0, y0, cw, ch = 610 * SS, 400 * SS, 62 * SS, 34 * SS
|
x0, y0, cw, ch = 610 * SS, 400 * SS, 62 * SS, 34 * SS
|
||||||
for i in range(14):
|
for i in range(14):
|
||||||
cx, cy = x0 + (i % 7) * (cw + 8 * SS), y0 + (i // 7) * (ch + 8 * SS)
|
cx, cy = x0 + (i % 7) * (cw + 8 * SS), y0 + (i // 7) * (ch + 8 * SS)
|
||||||
@@ -202,20 +113,23 @@ def motif(img: Image.Image, kind: str, rng: random.Random) -> None:
|
|||||||
if done:
|
if done:
|
||||||
d.line([(cx + 20 * SS, cy + 18 * SS), (cx + 28 * SS, cy + 25 * SS), (cx + 44 * SS, cy + 10 * SS)],
|
d.line([(cx + 20 * SS, cy + 18 * SS), (cx + 28 * SS, cy + 25 * SS), (cx + 44 * SS, cy + 10 * SS)],
|
||||||
fill=GOLD, width=3 * SS) # fmt: skip
|
fill=GOLD, width=3 * SS) # fmt: skip
|
||||||
dot_bird(img, bx + 40 * SS, 30 * SS, int(bw * 0.72), int(bh * 0.72), 11 * SS, rng)
|
|
||||||
elif kind == "thirty": # thirty small birds that together make the big one
|
elif kind == "thirty": # thirty small birds that together make the big one
|
||||||
dot_bird(img, bx, by, bw, bh, 13 * SS, rng, dim=0.16)
|
cell = 15 * SS
|
||||||
mask = bird_mask(bw, bh)
|
mx, my = 680 * SS, 70 * SS
|
||||||
spots: list[tuple[int, int]] = []
|
pts = draw_mark(img, big, mx, my, cell, dim=0.16)
|
||||||
tries = 0
|
scell = 4.2 * SS
|
||||||
while len(spots) < 30 and tries < 50000:
|
w, h = sc * scell, sr * scell
|
||||||
tries += 1
|
spots: list[tuple[float, float]] = []
|
||||||
x, y = rng.randrange(bw), rng.randrange(bh)
|
order = pts[:]
|
||||||
if mask.getpixel((x, y)) > 128 and all((x - a) ** 2 + (y - b) ** 2 > (50 * SS) ** 2 for a, b in spots):
|
rng.shuffle(order)
|
||||||
spots.append((x, y))
|
for md in (60, 54, 48, 44, 40):
|
||||||
s = 0.15
|
for x, y in order:
|
||||||
for x, y in spots:
|
if len(spots) >= 30:
|
||||||
dot_bird(img, bx + x - int(bw * s / 2), by + y - int(bh * s / 2), int(bw * s), int(bh * s), 3 * SS, rng)
|
break
|
||||||
|
if all((x - a) ** 2 + (y - b) ** 2 > (md * SS) ** 2 for a, b in spots):
|
||||||
|
spots.append((x, y))
|
||||||
|
for x, y in spots[:30]:
|
||||||
|
draw_mark(img, small, x - w / 2, y - h / 2, scell)
|
||||||
|
|
||||||
|
|
||||||
def text(img: Image.Image, part: str, title: str) -> None:
|
def text(img: Image.Image, part: str, title: str) -> None:
|
||||||
|
|||||||
@@ -0,0 +1,452 @@
|
|||||||
|
"""SimurgArray brand kit: marks, wordmark, lockups, icons, templates and checks → branding/.
|
||||||
|
|
||||||
|
Needs Pillow and fontTools (for the wordmark outlines), rsvg-convert and ImageMagick:
|
||||||
|
python -m venv /tmp/b && /tmp/b/bin/pip install pillow fonttools && /tmp/b/bin/python scripts/brand/make_brand.py
|
||||||
|
|
||||||
|
The mark is drawn on a dot grid in grid units (capsules and circles tested at each cell centre), so every export is
|
||||||
|
the same set of dots: a frontal simurg with raised wings, a three-dot crown and three tail plumes (red channel,
|
||||||
|
gold, green channel) ending in peacock eyes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from fontTools.pens.svgPathPen import SVGPathPen
|
||||||
|
from fontTools.pens.transformPen import TransformPen
|
||||||
|
from fontTools.ttLib import TTFont
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[2]
|
||||||
|
OUT = ROOT / "branding"
|
||||||
|
FONTS = Path("/usr/share/fonts/truetype/noto")
|
||||||
|
|
||||||
|
C = {
|
||||||
|
"indigo": "#1E2240", "indigo_deep": "#12142A", "paper": "#F7F5EF", "red": "#C8453A", "green": "#2F8F5B",
|
||||||
|
"gold": "#D4A017", "gold_deep": "#A87A00", "gold_ink": "#8C6500", "muted_dark": "#A3A7C9",
|
||||||
|
"muted_light": "#5A5E7E", "black": "#111111", "white": "#FFFFFF",
|
||||||
|
} # fmt: skip
|
||||||
|
CHART = {"AA": ("#D55E00", "circle"), "AB": ("#009E73", "triangle"), "BB": ("#0072B2", "square")} # Okabe and Ito
|
||||||
|
SCHEMES = { # layer colours per version
|
||||||
|
"dark": {"gold": C["gold"], "red": C["red"], "green": C["green"], "bg": C["indigo"], "text": C["paper"]},
|
||||||
|
"light": {"gold": C["gold_deep"], "red": C["red"], "green": C["green"], "bg": C["paper"], "text": C["indigo"]},
|
||||||
|
"gold": {"gold": C["gold"], "red": C["gold"], "green": C["gold"], "bg": None, "text": C["gold"]},
|
||||||
|
"black": {"gold": C["black"], "red": C["black"], "green": C["black"], "bg": None, "text": C["black"]},
|
||||||
|
"white": {"gold": C["white"], "red": C["white"], "green": C["white"], "bg": None, "text": C["white"]},
|
||||||
|
}
|
||||||
|
ACCENT = {"dark": C["gold"], "light": C["gold_ink"], "gold": C["gold"], "black": C["black"], "white": C["white"]}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- the mark (geometry in simurg_mark.py)
|
||||||
|
|
||||||
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||||
|
from simurg_mark import MICRO, SIMPLE, Grid, art, detailed # noqa: E402
|
||||||
|
|
||||||
|
MARKS = {"mark": detailed(), "mark_simple": art(SIMPLE), "mark_micro": art(MICRO)}
|
||||||
|
|
||||||
|
|
||||||
|
def mark_svg_body(grid: Grid, scheme: str, x0: float = 0, y0: float = 0, cell: float = 1.0, rad: float = 0.4) -> str:
|
||||||
|
col = SCHEMES[scheme]
|
||||||
|
out = []
|
||||||
|
for layer in ("gold", "red", "green"):
|
||||||
|
cells = sorted((rc for rc, lay in grid.items() if lay == layer), key=lambda k: (k[1], k[0]))
|
||||||
|
dots = [f'<circle cx="{x0 + (c + 0.5) * cell:.3f}" cy="{y0 + (r + 0.5) * cell:.3f}" r="{rad * cell:.3f}"/>'
|
||||||
|
for c, r in cells] # fmt: skip
|
||||||
|
if dots:
|
||||||
|
out.append(f'<g fill="{col[layer]}">' + "".join(dots) + "</g>")
|
||||||
|
return "".join(out)
|
||||||
|
|
||||||
|
|
||||||
|
def svg(w: float, h: float, body: str, bg: str | None = None, title: str = "SimurgArray") -> str:
|
||||||
|
rect = f'<rect width="{w}" height="{h}" fill="{bg}"/>' if bg else ""
|
||||||
|
return (f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {w:g} {h:g}" width="{w:g}" height="{h:g}" '
|
||||||
|
f'role="img" aria-label="{title}"><title>{title}</title>{rect}{body}</svg>\n') # fmt: skip
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- the wordmark (outlined Noto Sans SemiBold)
|
||||||
|
|
||||||
|
|
||||||
|
class Wordmark:
|
||||||
|
def __init__(self, path: Path) -> None:
|
||||||
|
self.font = TTFont(path)
|
||||||
|
self.gs = self.font.getGlyphSet()
|
||||||
|
self.cmap = self.font.getBestCmap()
|
||||||
|
self.upm = self.font["head"].unitsPerEm
|
||||||
|
self.hmtx = self.font["hmtx"]
|
||||||
|
|
||||||
|
def paths(self, text: str, size: float, x: float, baseline: float, tracking: float = 0.0) -> tuple[str, float]:
|
||||||
|
"""SVG path data for ``text`` at ``size`` px, starting at x; returns (d, advance)."""
|
||||||
|
s = size / self.upm
|
||||||
|
ds, pen_x = [], x
|
||||||
|
for ch in text:
|
||||||
|
gname = self.cmap[ord(ch)]
|
||||||
|
pen = SVGPathPen(self.gs)
|
||||||
|
self.gs[gname].draw(TransformPen(pen, (s, 0, 0, -s, pen_x, baseline)))
|
||||||
|
ds.append(pen.getCommands())
|
||||||
|
pen_x += self.hmtx[gname][0] * s + tracking * size
|
||||||
|
return " ".join(ds), pen_x - x - tracking * size
|
||||||
|
|
||||||
|
def cap_height(self, size: float) -> float:
|
||||||
|
return float(getattr(self.font["OS/2"], "sCapHeight", 714)) * size / self.upm
|
||||||
|
|
||||||
|
|
||||||
|
WM = Wordmark(FONTS / "NotoSans-SemiBold.ttf")
|
||||||
|
|
||||||
|
|
||||||
|
def wordmark_body(scheme: str, x: float, baseline: float, size: float) -> tuple[str, float]:
|
||||||
|
d1, w1 = WM.paths("Simurg", size, x, baseline, tracking=0.005)
|
||||||
|
d2, w2 = WM.paths("Array", size, x + w1 + size * 0.03, baseline, tracking=0.005)
|
||||||
|
body = f'<path fill="{SCHEMES[scheme]["text"]}" d="{d1}"/><path fill="{ACCENT[scheme]}" d="{d2}"/>'
|
||||||
|
return body, w1 + size * 0.03 + w2
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- files
|
||||||
|
|
||||||
|
|
||||||
|
def write(path: Path, text: str) -> Path:
|
||||||
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
path.write_text(text)
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def png(svg_path: Path, out: Path, width: int) -> None:
|
||||||
|
out.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
subprocess.run(["rsvg-convert", "-w", str(width), "-o", str(out), str(svg_path)], check=True)
|
||||||
|
|
||||||
|
|
||||||
|
def logos() -> None:
|
||||||
|
for name, (g, cols, rows) in MARKS.items():
|
||||||
|
pad = 1
|
||||||
|
for scheme in SCHEMES:
|
||||||
|
p = write(OUT / "logo" / f"{name}_{scheme}.svg",
|
||||||
|
svg(cols + 2 * pad, rows + 2 * pad, mark_svg_body(g, scheme, pad, pad))) # fmt: skip
|
||||||
|
png(p, OUT / "logo" / "png" / f"{name}_{scheme}.png", 512 if name == "mark" else 256)
|
||||||
|
size = 100.0
|
||||||
|
for scheme in SCHEMES:
|
||||||
|
body, w = wordmark_body(scheme, 0, size * 0.78, size)
|
||||||
|
p = write(OUT / "logo" / f"wordmark_{scheme}.svg", svg(w + 4, size, body))
|
||||||
|
png(p, OUT / "logo" / "png" / f"wordmark_{scheme}.png", 900)
|
||||||
|
g, cols, rows = MARKS["mark"]
|
||||||
|
for scheme in ("dark", "light", "black", "white"):
|
||||||
|
bg = SCHEMES[scheme]["bg"]
|
||||||
|
# horizontal: mark 120 px high, wordmark cap height ~ 40 % of it
|
||||||
|
cell = 120 / rows
|
||||||
|
ms = mark_svg_body(g, scheme, 40, 40, cell)
|
||||||
|
wsize = 64.0
|
||||||
|
wb, ww = wordmark_body(scheme, 40 + cols * cell + 36, 40 + 60 + WM.cap_height(wsize) / 2, wsize)
|
||||||
|
W, H = 40 + cols * cell + 36 + ww + 48, 200
|
||||||
|
p = write(OUT / "logo" / f"lockup_horizontal_{scheme}.svg", svg(W, H, ms + wb, bg))
|
||||||
|
png(p, OUT / "logo" / "png" / f"lockup_horizontal_{scheme}.png", 1200)
|
||||||
|
# stacked
|
||||||
|
cell = 200 / rows
|
||||||
|
wsize = 60.0
|
||||||
|
_, ww = wordmark_body(scheme, 0, 0, wsize)
|
||||||
|
W = max(cols * cell, ww) + 80
|
||||||
|
ms = mark_svg_body(g, scheme, (W - cols * cell) / 2, 40, cell)
|
||||||
|
wb, _ = wordmark_body(scheme, (W - ww) / 2, 40 + rows * cell + 30 + WM.cap_height(wsize), wsize)
|
||||||
|
p = write(OUT / "logo" / f"lockup_stacked_{scheme}.svg", svg(W, 40 + rows * cell + 30 + 90, ms + wb, bg))
|
||||||
|
png(p, OUT / "logo" / "png" / f"lockup_stacked_{scheme}.png", 800)
|
||||||
|
|
||||||
|
|
||||||
|
def icons() -> None:
|
||||||
|
"""Rounded indigo tile; micro mark at 16, simple at 32/48, detailed from 180 up."""
|
||||||
|
d = OUT / "icons"
|
||||||
|
for size, name in ((16, "mark_micro"), (32, "mark_simple"), (48, "mark_simple"), (180, "mark"), (512, "mark")):
|
||||||
|
g, cols, rows = MARKS[name]
|
||||||
|
n = max(cols, rows) + (1 if size <= 48 else 3)
|
||||||
|
rx = n * 0.18
|
||||||
|
body = f'<rect width="{n}" height="{n}" rx="{rx:.2f}" fill="{C["indigo"]}"/>'
|
||||||
|
body += mark_svg_body(g, "dark", (n - cols) / 2, (n - rows) / 2, 1.0, 0.42 if size <= 48 else 0.4)
|
||||||
|
p = write(d / f"icon_{size}.svg", svg(n, n, body))
|
||||||
|
png(p, d / f"icon_{size}.png", size)
|
||||||
|
subprocess.run(["magick", str(d / "icon_16.png"), str(d / "icon_32.png"), str(d / "icon_48.png"),
|
||||||
|
str(d / "favicon.ico")], check=True) # fmt: skip
|
||||||
|
for f in d.glob("icon_*.svg"):
|
||||||
|
if f.stem not in ("icon_16", "icon_512"):
|
||||||
|
f.unlink()
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- raster templates (Pillow)
|
||||||
|
|
||||||
|
|
||||||
|
def rgb(h: str) -> tuple[int, int, int]:
|
||||||
|
return int(h[1:3], 16), int(h[3:5], 16), int(h[5:7], 16)
|
||||||
|
|
||||||
|
|
||||||
|
def canvas(w: int, h: int, ss: int = 2) -> Image.Image:
|
||||||
|
img = Image.new("RGB", (w * ss, h * ss), rgb(C["indigo"]))
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
a, b = rgb(C["indigo"]), rgb(C["indigo_deep"])
|
||||||
|
for y in range(h * ss):
|
||||||
|
t = y / (h * ss)
|
||||||
|
dr.line([(0, y), (w * ss, y)], fill=tuple(int(x + (z - x) * t) for x, z in zip(a, b, strict=True)))
|
||||||
|
step, k = 18 * ss, 0
|
||||||
|
for gy in range(step // 2, h * ss, step): # faint bead grid, alternating channels
|
||||||
|
for gx in range(step // 2, w * ss, step):
|
||||||
|
k += 1
|
||||||
|
col = rgb(C["red"] if (gx // step + gy // step) % 2 else C["green"])
|
||||||
|
c = tuple(int(bg + (cc - bg) * 0.14) for bg, cc in zip(a, col, strict=True))
|
||||||
|
r = 1.6 * ss
|
||||||
|
dr.ellipse([gx - r, gy - r, gx + r, gy + r], fill=c)
|
||||||
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
def draw_mark(img: Image.Image, grid: Grid, x: float, y: float, cell: float, scheme: str = "dark",
|
||||||
|
rad: float = 0.4) -> None: # fmt: skip
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
col = SCHEMES[scheme]
|
||||||
|
for (c, r), layer in grid.items():
|
||||||
|
cx, cy = x + (c + 0.5) * cell, y + (r + 0.5) * cell
|
||||||
|
dr.ellipse([cx - rad * cell, cy - rad * cell, cx + rad * cell, cy + rad * cell], fill=rgb(col[layer]))
|
||||||
|
|
||||||
|
|
||||||
|
def font(name: str, px: float) -> ImageFont.FreeTypeFont:
|
||||||
|
return ImageFont.truetype(str(FONTS / name), int(px))
|
||||||
|
|
||||||
|
|
||||||
|
def text_wordmark(img: Image.Image, x: float, y: float, px: float) -> float:
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
f = font("NotoSans-SemiBold.ttf", px)
|
||||||
|
dr.text((x, y), "Simurg", font=f, fill=rgb(C["paper"]))
|
||||||
|
w = dr.textlength("Simurg", font=f) + px * 0.03
|
||||||
|
dr.text((x + w, y), "Array", font=f, fill=rgb(C["gold"]))
|
||||||
|
return w + dr.textlength("Array", font=f)
|
||||||
|
|
||||||
|
|
||||||
|
def save(img: Image.Image, w: int, h: int, path: Path, quality: int = 86) -> None:
|
||||||
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
img = img.resize((w, h), Image.Resampling.LANCZOS)
|
||||||
|
if path.suffix == ".jpg":
|
||||||
|
img.save(path, "JPEG", quality=quality, optimize=True, progressive=True)
|
||||||
|
else:
|
||||||
|
img.save(path, "PNG", optimize=True)
|
||||||
|
|
||||||
|
|
||||||
|
def templates() -> None:
|
||||||
|
ss = 2
|
||||||
|
g, cols, rows = MARKS["mark"]
|
||||||
|
t = OUT / "templates"
|
||||||
|
# README banner 1280 x 320
|
||||||
|
img = canvas(1280, 320, ss)
|
||||||
|
cell = 230 * ss / rows
|
||||||
|
draw_mark(img, g, 70 * ss, 45 * ss, cell)
|
||||||
|
x = 70 * ss + cols * cell + 50 * ss
|
||||||
|
text_wordmark(img, x, 88 * ss, 76 * ss)
|
||||||
|
ImageDraw.Draw(img).text((x + 4 * ss, 196 * ss), "Thirty birds, one picture.", font=font("NotoSans-Regular.ttf",
|
||||||
|
30 * ss), fill=rgb(C["muted_dark"])) # fmt: skip
|
||||||
|
save(img, 1280, 320, t / "readme_banner_1280x320.png")
|
||||||
|
# repository social preview 1280 x 640
|
||||||
|
img = canvas(1280, 640, ss)
|
||||||
|
cell = 380 * ss / rows
|
||||||
|
draw_mark(img, g, 90 * ss, 110 * ss, cell)
|
||||||
|
x = 90 * ss + cols * cell + 60 * ss
|
||||||
|
text_wordmark(img, x, 200 * ss, 84 * ss)
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
dr.text((x + 4 * ss, 320 * ss), "Thirty birds, one picture.", font=font("NotoSans-Regular.ttf", 34 * ss),
|
||||||
|
fill=rgb(C["muted_dark"])) # fmt: skip
|
||||||
|
dr.text((x + 4 * ss, 400 * ss), "Open Infinium array analysis:\nIDAT to genotypes, QC, CN and PGx",
|
||||||
|
font=font("NotoSansMono-Regular.ttf", 24 * ss), fill=rgb(C["gold"]), spacing=10 * ss) # fmt: skip
|
||||||
|
save(img, 1280, 640, t / "social_preview_1280x640.png")
|
||||||
|
# avatar 512, safe inside a circle (mark within 70 % of the diameter)
|
||||||
|
img = Image.new("RGB", (512 * ss, 512 * ss), rgb(C["indigo"]))
|
||||||
|
cell = 512 * ss * 0.62 / max(cols, rows)
|
||||||
|
draw_mark(img, g, (512 * ss - cols * cell) / 2, (512 * ss - rows * cell) / 2 + 6 * ss, cell)
|
||||||
|
save(img, 512, 512, t / "avatar_512.png")
|
||||||
|
# WordPress featured image template: title area left, mark right
|
||||||
|
img = canvas(1200, 630, ss)
|
||||||
|
cell = 400 * ss / rows
|
||||||
|
draw_mark(img, g, 1200 * ss - cols * cell - 70 * ss, 100 * ss, cell)
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
dr.text((70 * ss, 88 * ss), "PART N", font=font("NotoSansMono-Regular.ttf", 26 * ss), fill=rgb(C["gold"]))
|
||||||
|
dr.multiline_text((70 * ss, 140 * ss), "Post title in\ntwo or three lines", font=font("NotoSans-Bold.ttf", 58 * ss),
|
||||||
|
fill=rgb(C["paper"]), spacing=14 * ss) # fmt: skip
|
||||||
|
footer(img, 70 * ss, 530 * ss, ss)
|
||||||
|
save(img, 1200, 630, t / "featured_template_1200x630.jpg")
|
||||||
|
|
||||||
|
|
||||||
|
def footer(img: Image.Image, x: float, y: float, ss: int) -> None:
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
for i, k in enumerate(("red", "green", "gold")):
|
||||||
|
dr.ellipse([x + i * 18 * ss, y + 10 * ss, x + i * 18 * ss + 12 * ss, y + 22 * ss], fill=rgb(C[k]))
|
||||||
|
f = font("NotoSans-Regular.ttf", 24 * ss)
|
||||||
|
dr.text((x + 66 * ss, y), "SimurgArray", font=f, fill=rgb(C["paper"]))
|
||||||
|
dr.text((x + 66 * ss + dr.textlength("SimurgArray ", font=f), y), "Thirty birds, one picture.", font=f,
|
||||||
|
fill=rgb(C["muted_dark"])) # fmt: skip
|
||||||
|
|
||||||
|
|
||||||
|
def report_mark() -> None:
|
||||||
|
g, cols, rows = MARKS["mark_simple"]
|
||||||
|
body = mark_svg_body(g, "dark", 1, 1)
|
||||||
|
write(OUT / "templates" / "report_corner_mark.svg", svg(cols + 2, rows + 2, body))
|
||||||
|
style = f"display:flex;align-items:center;gap:8px;font:12px 'Noto Sans Mono',monospace;color:{C['muted_dark']}"
|
||||||
|
write(OUT / "templates" / "report_corner_mark.html", f"""<!-- SimurgArray report corner mark.
|
||||||
|
Always shown with the software version and the run manifest checksum. -->
|
||||||
|
<div class="simurg-mark" style="{style}">
|
||||||
|
<img src="report_corner_mark.svg" width="26" height="24" alt="SimurgArray">
|
||||||
|
<span>SimurgArray {{version}} · run {{manifest_sha256[:12]}}</span>
|
||||||
|
</div>
|
||||||
|
""") # fmt: skip
|
||||||
|
|
||||||
|
|
||||||
|
CLI_BANNER = r"""
|
||||||
|
o o SimurgArray {version}
|
||||||
|
oo o oo Thirty birds, one picture.
|
||||||
|
ooooooo
|
||||||
|
ooo IDAT to genotypes, QC, CN, PGx
|
||||||
|
/ | \ research use only
|
||||||
|
* o *
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------- checks
|
||||||
|
|
||||||
|
|
||||||
|
def _lin(c: float) -> float:
|
||||||
|
return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4
|
||||||
|
|
||||||
|
|
||||||
|
def _unlin(c: float) -> int:
|
||||||
|
c = max(0.0, min(1.0, c))
|
||||||
|
return round(255 * (12.92 * c if c <= 0.0031308 else 1.055 * c ** (1 / 2.4) - 0.055))
|
||||||
|
|
||||||
|
|
||||||
|
def contrast(a: str, b: str) -> float:
|
||||||
|
def lum(h: str) -> float:
|
||||||
|
r, g, bb = (_lin(v / 255) for v in rgb(h))
|
||||||
|
return 0.2126 * r + 0.7152 * g + 0.0722 * bb
|
||||||
|
|
||||||
|
la, lb = sorted((lum(a), lum(b)), reverse=True)
|
||||||
|
return (la + 0.05) / (lb + 0.05)
|
||||||
|
|
||||||
|
|
||||||
|
MACHADO = { # Machado, Oliveira and Fernandes 2009, severity 1.0 (linear RGB)
|
||||||
|
"protanopia": ((0.152286, 1.052583, -0.204868), (0.114503, 0.786281, 0.099216), (-0.003882, -0.048116, 1.051998)),
|
||||||
|
"deuteranopia": ((0.367322, 0.860646, -0.227968), (0.280085, 0.672501, 0.047413),
|
||||||
|
(-0.011820, 0.042940, 0.968881)),
|
||||||
|
} # fmt: skip
|
||||||
|
|
||||||
|
|
||||||
|
def simulate(img: Image.Image, kind: str) -> Image.Image:
|
||||||
|
m = MACHADO[kind]
|
||||||
|
lut = [_lin(i / 255) for i in range(256)]
|
||||||
|
px = img.convert("RGB").load()
|
||||||
|
out = img.convert("RGB").copy()
|
||||||
|
po = out.load()
|
||||||
|
cache: dict[tuple[int, int, int], tuple[int, int, int]] = {}
|
||||||
|
for y in range(img.height):
|
||||||
|
for x in range(img.width):
|
||||||
|
v = px[x, y]
|
||||||
|
if v not in cache:
|
||||||
|
r, g, b = (lut[c] for c in v)
|
||||||
|
cache[v] = tuple(_unlin(row[0] * r + row[1] * g + row[2] * b) for row in m) # type: ignore[assignment]
|
||||||
|
po[x, y] = cache[v]
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def chart_example(ss: int = 2) -> Image.Image:
|
||||||
|
"""A genotype cluster plot in the chart palette: colour plus marker shape."""
|
||||||
|
import random
|
||||||
|
|
||||||
|
rng = random.Random(7)
|
||||||
|
w, h = 420, 300
|
||||||
|
img = Image.new("RGB", (w * ss, h * ss), rgb(C["paper"]))
|
||||||
|
dr = ImageDraw.Draw(img)
|
||||||
|
dr.line([(40 * ss, 260 * ss), (400 * ss, 260 * ss)], fill=rgb(C["muted_light"]), width=ss)
|
||||||
|
dr.line([(40 * ss, 20 * ss), (40 * ss, 260 * ss)], fill=rgb(C["muted_light"]), width=ss)
|
||||||
|
for gt, cx in (("AA", 90), ("AB", 220), ("BB", 350)):
|
||||||
|
col, shape = CHART[gt]
|
||||||
|
for _ in range(40):
|
||||||
|
x, y = (cx + rng.gauss(0, 14)) * ss, (140 + rng.gauss(0, 30)) * ss
|
||||||
|
r = 5 * ss
|
||||||
|
if shape == "circle":
|
||||||
|
dr.ellipse([x - r, y - r, x + r, y + r], fill=rgb(col))
|
||||||
|
elif shape == "square":
|
||||||
|
dr.rectangle([x - r * 0.9, y - r * 0.9, x + r * 0.9, y + r * 0.9], fill=rgb(col))
|
||||||
|
else:
|
||||||
|
dr.polygon([(x, y - r * 1.1), (x - r, y + r * 0.8), (x + r, y + r * 0.8)], fill=rgb(col))
|
||||||
|
dr.text((cx * ss - 12 * ss, 268 * ss), gt, font=font("NotoSansMono-Regular.ttf", 16 * ss),
|
||||||
|
fill=rgb(C["indigo"])) # fmt: skip
|
||||||
|
return img.resize((w, h), Image.Resampling.LANCZOS)
|
||||||
|
|
||||||
|
|
||||||
|
def checks() -> list[tuple[str, str, str, float]]:
|
||||||
|
d = OUT / "checks"
|
||||||
|
d.mkdir(parents=True, exist_ok=True)
|
||||||
|
g, cols, rows = MARKS["mark"]
|
||||||
|
logo = Image.new("RGB", (cols * 12 + 24, rows * 12 + 24), rgb(C["indigo"]))
|
||||||
|
draw_mark(logo, g, 12, 12, 12)
|
||||||
|
chart = chart_example()
|
||||||
|
panels = [("original", logo, chart)] + [(k, simulate(logo, k), simulate(chart, k)) for k in MACHADO]
|
||||||
|
pw = logo.width + chart.width + 30
|
||||||
|
ph = max(logo.height, chart.height) + 50
|
||||||
|
sheet = Image.new("RGB", (pw, ph * 3), rgb(C["paper"]))
|
||||||
|
dr = ImageDraw.Draw(sheet)
|
||||||
|
for i, (name, lg, ch) in enumerate(panels):
|
||||||
|
y = i * ph
|
||||||
|
dr.text((10, y + 8), name, font=font("NotoSansMono-Regular.ttf", 18), fill=rgb(C["indigo"]))
|
||||||
|
sheet.paste(lg, (10, y + 36))
|
||||||
|
sheet.paste(ch, (logo.width + 20, y + 36))
|
||||||
|
sheet.save(d / "colour_vision_check.png", optimize=True)
|
||||||
|
# small sizes side by side
|
||||||
|
row = Image.new("RGB", (520, 90), rgb(C["paper"]))
|
||||||
|
x = 10
|
||||||
|
for s in (16, 32, 48, 180):
|
||||||
|
ic = Image.open(OUT / "icons" / f"icon_{s}.png").convert("RGB")
|
||||||
|
if s == 180:
|
||||||
|
ic = ic.resize((72, 72), Image.Resampling.LANCZOS)
|
||||||
|
row.paste(ic, (x, 10))
|
||||||
|
x += ic.width + 30
|
||||||
|
row.save(d / "icon_sizes.png", optimize=True)
|
||||||
|
pairs = [("paper", "indigo", "text on dark"), ("muted_dark", "indigo", "secondary text on dark"),
|
||||||
|
("gold", "indigo", "accent text on dark"), ("indigo", "paper", "text on light"),
|
||||||
|
("muted_light", "paper", "secondary text on light"), ("gold_ink", "paper", "accent text on light"),
|
||||||
|
("red", "indigo", "graphics on dark"), ("green", "indigo", "graphics on dark"),
|
||||||
|
("gold_deep", "paper", "graphics on light"), ("red", "paper", "graphics on light"),
|
||||||
|
("green", "paper", "graphics on light"), ("gold", "paper", "never for text or small marks")] # fmt: skip
|
||||||
|
return [(a, b, use, contrast(C[a], C[b])) for a, b, use in pairs]
|
||||||
|
|
||||||
|
|
||||||
|
def family(featured: list[Path]) -> None:
|
||||||
|
"""Featured images and templates side by side (acceptance check 4)."""
|
||||||
|
tiles = [Image.open(p).convert("RGB") for p in featured] + [
|
||||||
|
Image.open(OUT / "templates" / "featured_template_1200x630.jpg").convert("RGB"),
|
||||||
|
Image.open(OUT / "templates" / "social_preview_1280x640.png").convert("RGB"),
|
||||||
|
Image.open(OUT / "templates" / "readme_banner_1280x320.png").convert("RGB"),
|
||||||
|
Image.open(OUT / "templates" / "avatar_512.png").convert("RGB"),
|
||||||
|
] # fmt: skip
|
||||||
|
th = 200
|
||||||
|
tiles = [t.resize((int(t.width * th / t.height), th), Image.Resampling.LANCZOS) for t in tiles]
|
||||||
|
per_row, gap = 3, 16
|
||||||
|
rows_ = [tiles[i : i + per_row] for i in range(0, len(tiles), per_row)]
|
||||||
|
W = max(sum(t.width for t in r) + gap * (len(r) + 1) for r in rows_)
|
||||||
|
sheet = Image.new("RGB", (W, len(rows_) * (th + gap) + gap), rgb(C["paper"]))
|
||||||
|
y = gap
|
||||||
|
for r in rows_:
|
||||||
|
x = gap
|
||||||
|
for t in r:
|
||||||
|
sheet.paste(t, (x, y))
|
||||||
|
x += t.width + gap
|
||||||
|
y += th + gap
|
||||||
|
sheet.save(OUT / "checks" / "family.jpg", quality=76, optimize=True)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
logos()
|
||||||
|
icons()
|
||||||
|
templates()
|
||||||
|
report_mark()
|
||||||
|
write(OUT / "templates" / "cli_banner.txt", CLI_BANNER.lstrip("\n"))
|
||||||
|
table = checks()
|
||||||
|
featured = sorted((ROOT / "blog" / "images").glob("*.jpg"))
|
||||||
|
family(featured)
|
||||||
|
lines = ["| colour | on | use | contrast | AA text (4.5) | graphics (3.0) |", "|---|---|---|---|---|---|"]
|
||||||
|
for a, b, use, cr in table:
|
||||||
|
lines.append(f"| {a} {C[a]} | {b} {C[b]} | {use} | {cr:.2f} | {'yes' if cr >= 4.5 else 'no'} | "
|
||||||
|
f"{'yes' if cr >= 3 else 'no'} |") # fmt: skip
|
||||||
|
write(OUT / "checks" / "contrast.md", "\n".join(lines) + "\n")
|
||||||
|
print("\n".join(lines))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
"""Geometry of the SimurgArray mark on its dot grid (no dependencies beyond the standard library).
|
||||||
|
|
||||||
|
A frontal simurg with raised wings (three feathers each), a three-dot crown and three tail plumes: red channel,
|
||||||
|
gold, green channel, each ending in a peacock eye. Shapes are capsules, circles and an ellipse in grid units; a cell
|
||||||
|
belongs to the first shape that contains its centre. ``SIMPLE`` and ``MICRO`` are hand-drawn small versions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import math
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def _seg(px: float, py: float, a: tuple[float, float], b: tuple[float, float]) -> float:
|
||||||
|
dx, dy = b[0] - a[0], b[1] - a[1]
|
||||||
|
t = max(0.0, min(1.0, ((px - a[0]) * dx + (py - a[1]) * dy) / ((dx * dx + dy * dy) or 1.0)))
|
||||||
|
return math.hypot(px - a[0] - t * dx, py - a[1] - t * dy)
|
||||||
|
|
||||||
|
|
||||||
|
CX = 15.5
|
||||||
|
_WING = [([(13.6, 9.6), (8, 5.2), (1.8, 1.4)], 1.25), ([(13.4, 11), (7.5, 8.4), (1.2, 6.6)], 1.25),
|
||||||
|
([(13.4, 12.6), (8, 12), (2.6, 11.8)], 1.2)] # fmt: skip
|
||||||
|
SHAPES: list[tuple[str, Any, str]] = []
|
||||||
|
for pts, r in _WING:
|
||||||
|
SHAPES.append(("cap", (pts, r), "gold"))
|
||||||
|
SHAPES.append(("cap", ([(2 * CX - x, y) for x, y in pts], r), "gold"))
|
||||||
|
SHAPES += [
|
||||||
|
("circ", (CX, 4.4, 2.3), "gold"), ("cap", ([(CX, 6), (CX, 8)], 1.3), "gold"), # head, neck
|
||||||
|
("circ", (CX, 1.2, 0.62), "gold"), ("circ", (13.6, 1.9, 0.62), "gold"), ("circ", (17.4, 1.9, 0.62), "gold"),
|
||||||
|
("ell", (CX, 12.5, 2.9, 5.4), "gold"), # body
|
||||||
|
("cap", ([(14.8, 17), (12.6, 20.5), (10.4, 23.2)], 0.7), "red"), ("circ", (10, 24.3, 1.6), "red"),
|
||||||
|
("cap", ([(CX, 17.5), (CX, 23.2)], 0.7), "gold"), ("circ", (CX, 24.6, 1.6), "gold"),
|
||||||
|
("cap", ([(16.2, 17), (18.4, 20.5), (20.6, 23.2)], 0.7), "green"), ("circ", (21, 24.3, 1.6), "green"),
|
||||||
|
] # fmt: skip
|
||||||
|
DETAILED_SIZE = (31, 27)
|
||||||
|
SIMPLE = """
|
||||||
|
X.........X
|
||||||
|
XX.......XX
|
||||||
|
.XX..X..XX.
|
||||||
|
..XXXXXXX..
|
||||||
|
XXXXXXXXXXX
|
||||||
|
...XXXXX...
|
||||||
|
....XXX....
|
||||||
|
...R.X.G...
|
||||||
|
..R..X..G..
|
||||||
|
.RR.XXX.GG.
|
||||||
|
"""
|
||||||
|
MICRO = """
|
||||||
|
X.....X
|
||||||
|
XX.X.XX
|
||||||
|
.XXXXX.
|
||||||
|
..XXX..
|
||||||
|
...X...
|
||||||
|
.R.X.G.
|
||||||
|
R..X..G
|
||||||
|
"""
|
||||||
|
Grid = dict[tuple[int, int], str]
|
||||||
|
|
||||||
|
|
||||||
|
def _inside(x: float, y: float, kind: str, p: Any) -> bool:
|
||||||
|
if kind == "circ":
|
||||||
|
return math.hypot(x - p[0], y - p[1]) <= p[2]
|
||||||
|
if kind == "cap":
|
||||||
|
pts, r = p
|
||||||
|
return min(_seg(x, y, pts[i], pts[i + 1]) for i in range(len(pts) - 1)) <= r
|
||||||
|
cx, cy, rx, ry = p
|
||||||
|
return ((x - cx) / rx) ** 2 + ((y - cy) / ry) ** 2 <= 1
|
||||||
|
|
||||||
|
|
||||||
|
def detailed() -> tuple[Grid, int, int]:
|
||||||
|
cols, rows = DETAILED_SIZE
|
||||||
|
g: Grid = {}
|
||||||
|
for r in range(rows):
|
||||||
|
for c in range(cols):
|
||||||
|
for kind, p, layer in SHAPES:
|
||||||
|
if _inside(c + 0.5, r + 0.5, kind, p):
|
||||||
|
g[(c, r)] = layer
|
||||||
|
break
|
||||||
|
return g, cols, rows
|
||||||
|
|
||||||
|
|
||||||
|
def art(s: str) -> tuple[Grid, int, int]:
|
||||||
|
lines = s.strip().splitlines()
|
||||||
|
g = {(c, r): {"X": "gold", "R": "red", "G": "green"}[ch] for r, ln in enumerate(lines) for c, ch in enumerate(ln)
|
||||||
|
if ch != "."} # fmt: skip
|
||||||
|
return g, len(lines[0]), len(lines)
|
||||||