From b066c40731e62e04cbef1cd4db8792d0a8a2307e Mon Sep 17 00:00:00 2001 From: Andrzej Ochodek Date: Fri, 30 Oct 2026 14:08:00 +0100 Subject: [PATCH 1/3] Brand the packages and set their identity metadata Every package gets an icon from assets/branding (the base ticket; the NBP ticket for Nbp and Nbp.DependencyInjection, through OpenUrzednikPackageIcon), Authors and Company "Andrzej Ochodek" and a Copyright line as in LICENSE. The root READMEs get the header picture (light and dark). BRANDING.md, the design spec, and the provider icons for GUS, KRS and MF are committed but not wired (ADR-0010). Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 1 + Directory.Build.props | 9 +- README.md | 7 +- README.pl.md | 7 +- assets/branding/BRANDING.md | 187 ++++++++++++++++++ assets/branding/favicon-32.png | Bin 0 -> 338 bytes assets/branding/favicon.svg | 1 + assets/branding/header-dark.svg | 1 + assets/branding/header-light.svg | 1 + assets/branding/icon-gus.png | Bin 0 -> 2713 bytes assets/branding/icon-gus.svg | 1 + assets/branding/icon-krs.png | Bin 0 -> 2772 bytes assets/branding/icon-krs.svg | 1 + assets/branding/icon-mf.png | Bin 0 -> 2177 bytes assets/branding/icon-mf.svg | 1 + assets/branding/icon-nbp.png | Bin 0 -> 2678 bytes assets/branding/icon-nbp.svg | 1 + assets/branding/icon.png | Bin 0 -> 2899 bytes assets/branding/icon.svg | 1 + assets/branding/social-preview.png | Bin 0 -> 28804 bytes assets/branding/social-preview.svg | 1 + ...penUrzednik.Nbp.DependencyInjection.csproj | 1 + src/OpenUrzednik.Nbp/OpenUrzednik.Nbp.csproj | 1 + 23 files changed, 218 insertions(+), 4 deletions(-) create mode 100644 assets/branding/BRANDING.md create mode 100644 assets/branding/favicon-32.png create mode 100644 assets/branding/favicon.svg create mode 100644 assets/branding/header-dark.svg create mode 100644 assets/branding/header-light.svg create mode 100644 assets/branding/icon-gus.png create mode 100644 assets/branding/icon-gus.svg create mode 100644 assets/branding/icon-krs.png create mode 100644 assets/branding/icon-krs.svg create mode 100644 assets/branding/icon-mf.png create mode 100644 assets/branding/icon-mf.svg create mode 100644 assets/branding/icon-nbp.png create mode 100644 assets/branding/icon-nbp.svg create mode 100644 assets/branding/icon.png create mode 100644 assets/branding/icon.svg create mode 100644 assets/branding/social-preview.png create mode 100644 assets/branding/social-preview.svg diff --git a/CLAUDE.md b/CLAUDE.md index d656159..9a88e4b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -133,6 +133,7 @@ Before you say a task is done, run `dotnet build`, `dotnet test -f net10.0` and - If a change contradicts an accepted ADR, stop and use `/adr` instead of working around it. Until the first stable release, accepted ADRs are changed in place with a dated note (ADR-0001); from 1.0 on, a new superseding ADR. - Before opening a PR, run the `reviewer` agent on the diff. - The NuGet workflows build and pack `OpenUrzednik.Packages.slnf` (the `src/` projects only). **A new `src/` project must be added to it**, or it isn't published. Every package gets the version of the root `version.json` (lockstep, ADR-0008); don't add a `version.json` to a project. A new package input outside `src/` goes into both `pathFilters` in `version.json` and the `paths` filter of `nuget-pre-release.yml` (a directory is `dir` in the first and `dir/**` in the second). +- Package icons follow `assets/branding/BRANDING.md`: a provider package sets `OpenUrzednikPackageIcon` in its csproj, and its PNG joins both publish lists above. - **CI job names are required status checks in the GitHub ruleset.** If you rename a job in `.github/workflows/build.yml`, `format.yml`, `dependency-review.yml` or `release-label.yml`, say so: the ruleset must be updated (see `docs/GITHUB-SETUP.md`). - Language ([ADR-0009](docs/adr/0009-documentation-language.md)): everything is in English, user-facing docs included (`README.md` in the root and per package, `CONTRIBUTING.md`, `SECURITY.md`, the samples README). English is the single source of truth: if a Polish text differs, the English one wins. `README.pl.md` next to the root README and each published package's README has only the informational parts: what the package is and the "unofficial" notice, installation, the quick-start example (the same code) and links to the English sections. Contract and reference content (API limits, data availability, errors, telemetry, configuration rules, dependencies, versioning, support) is English only. `SECURITY.pl.md` says how to report a vulnerability. Skeleton READMEs are English only; issue forms are bilingual inline. When a PR changes an informational part of a README, it updates `README.pl.md` too, and renaming or removing a section of an English README updates the links to it in `README.pl.md`. - Prose style: when you write or edit user-facing prose (READMEs, `CONTRIBUTING`, `SECURITY`), run `/stop-slop` on the English files and `/miodkuj` on the Polish ones (`*.pl.md`). Edit only the prose: keep code blocks, commands, package and API names, badges, links and numbers exactly as they are. Meaning comes before style: keep API limits and qualifiers ("only", "never", "at most") even where a style rule says to cut them (stop-slop removes absolutes and adverbs). diff --git a/Directory.Build.props b/Directory.Build.props index c499b46..9850683 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,8 +7,9 @@ true true - milten89 - OpenUrzednik Open Source + Andrzej Ochodek + Andrzej Ochodek + Copyright (c) 2026 Andrzej Ochodek Modern, high-performance .NET SDK for Polish government public APIs. MIT https://github.com/milten89/OpenUrzednik.NET @@ -27,6 +28,9 @@ $(WarningsNotAsErrors);NU1900;NU1901;NU1902;NU1903;NU1904;NU1905 README.md + icon.png + + icon.png + \ No newline at end of file diff --git a/README.md b/README.md index 8e7aced..f17ee51 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# OpenUrzednik.NET 💼🇵🇱 +

+ + + OpenUrzędnik.NET + +

🇵🇱 [Wersja polska (skrócona)](README.pl.md) diff --git a/README.pl.md b/README.pl.md index 5754632..7caeb57 100644 --- a/README.pl.md +++ b/README.pl.md @@ -1,4 +1,9 @@ -# OpenUrzednik.NET 💼🇵🇱 +

+ + + OpenUrzędnik.NET + +

🇬🇧 Pełna dokumentacja jest po angielsku: [README.md](README.md). Ta wersja zawiera tylko część informacyjną. Jeśli wersje się różnią, obowiązuje angielska. diff --git a/assets/branding/BRANDING.md b/assets/branding/BRANDING.md new file mode 100644 index 0000000..3dd3e64 --- /dev/null +++ b/assets/branding/BRANDING.md @@ -0,0 +1,187 @@ +# OpenUrzędnik.NET branding + +The spec for the project's icons and logo. With this file and `icon.svg`, a person or an agent can rebuild every asset or draw a new provider icon so it matches the rest. + +## Idea + +The icon is a **queue ticket** (*numerek*), the slip you pull when you enter a Polish government office. The number on it is `200`, the HTTP status for success. It's a small joke: with this library you're served on the first call. The provider icons put the provider's short name where the number is, so the NuGet listing shows which office you are queuing at. + +The design is flat on purpose: no gradients, shadows or outlines. It has to read at 64 px on nuget.org. + +**Never use the Polish state emblem (the white eagle) or anything resembling it.** Polish law restricts its use, and it would suggest an official project. This project is unofficial. + +## Files + +| File | Content | Used by | +|---|---|---| +| `icon.svg`, `icon.png` | Base ticket: `OU.NET` / `200` | NuGet icon of Core, Extensions.Logging, Diagnostics | +| `icon-.svg`, `icon-.png` | Base ticket with the provider name in place of `200` | NuGet icon of the provider and its integration packages (`icon-nbp` → `Nbp`, `Nbp.DependencyInjection`) | +| `favicon.svg`, `favicon-32.png` | Ticket without text | Anything at 32 px or less | +| `header-light.svg`, `header-dark.svg` | Ticket + wordmark | Root `README.md` / `README.pl.md` | +| `social-preview.svg`, `social-preview.png` | 1280×640 card | GitHub repository social preview (uploaded by hand) | + +The SVG is the source; each PNG is rendered from its SVG. Text in every SVG is converted to outlines (paths), so the files never depend on installed fonts. + +### Package → icon + +| Package | Icon | +|---|---| +| `OpenUrzednik.Core`, `.Extensions.Logging`, `.Diagnostics` | `icon.png` | +| `OpenUrzednik.Nbp`, `OpenUrzednik.Nbp.DependencyInjection` | `icon-nbp.png` | +| `OpenUrzednik.Gus` (and its integrations) | `icon-gus.png` (not wired until the provider is ready, ADR-0010) | +| `OpenUrzednik.Krs` (and its integrations) | `icon-krs.png` (not wired until the provider is ready, ADR-0010) | +| `OpenUrzednik.Mf` (and its integrations) | `icon-mf.png` (not wired until the provider is ready, ADR-0010) | + +Rule: shared infrastructure gets the base icon. A provider package and every package built on it (`*.DependencyInjection`, future adapters) get that provider's icon. The root `Directory.Build.props` packs the file named by the `OpenUrzednikPackageIcon` property as `icon.png` (default `icon.png`). A provider csproj and each package built on it set `icon-.png`. When you add a provider icon, also add its PNG to `pathFilters` in `version.json` and to the `paths` filter of `.github/workflows/nuget-pre-release.yml` (ADR-0008). + +## Colors + +| Token | Hex | Where | +|---|---|---| +| Ticket purple | `#512BD4` | Ticket body, `.NET` in the light wordmark. The .NET brand purple | +| Polish red | `#C8102E` | Strip at the top of the ticket, stripe on the social preview | +| Lilac | `#D9D2FA` | `OU.NET` on the ticket | +| White | `#FFFFFF` | `200` / provider name, perforation | +| Ink | `#1F1F1F` | Wordmark on light backgrounds | +| Grey | `#5F5E5A` | Tagline on the social preview | +| Paper | `#FAFAF7` | Social preview background | +| Dark ink | `#E6EDF3` | Wordmark on dark backgrounds (GitHub dark text color) | +| Dark purple | `#9B87F5` | `.NET` on dark backgrounds (`#512BD4` is too dark on `#0D1117`) | + +The ticket itself keeps the same colors in light and dark mode. + +## Typography + +One family everywhere: **Cascadia Mono** (Microsoft, SIL Open Font License 1.1, ). It's a monospace font from the .NET world, and it has Polish glyphs (`ę` in the wordmark). The current files were made from the variable font `CascadiaMono.ttf` 2102.025, instanced at the weight shown below. + +| Text | Weight | Size (in its own coordinate system) | +|---|---|---| +| `OU.NET` on the ticket | 700 | 15 | +| `200` / provider name | 700 | 30 (see label rules) | +| Wordmark `OpenUrzędnik.NET` | 700 | 40 (header), 72 (social preview) | +| Tagline | 400 | 30 (social preview) | + +Metrics: 2048 units per em, advance width 1200 for every glyph (0.586 em), cap height 1420 (0.693 em). Text has no letter-spacing and no kerning. + +The wordmark is written **`OpenUrzędnik.NET`**, with `ę`. Package IDs and code stay ASCII (`OpenUrzednik`). In the wordmark, `OpenUrzędnik` uses the ink color and `.NET` the purple, with no space between them. + +## Icon geometry + +Coordinate system: `viewBox="0 0 120 120"`, exported at 128×128. Every number below is in viewBox units. + +``` + x: 22 98 +y14 ┌──────────────────────┐ red strip y 14–20 (#C8102E) + ├──────────────────────┤ + │ OU.NET │ baseline 44, size 15, centered on x 60 (#D9D2FA) +y50 │ │ + ( - - - - - - - - - - ) notches: r 8, centers (22,58) and (98,58) +y66 │ │ perforation y 58, x 32–88, 2 wide, dash 4 gap 4 (#FFF) + │ 200 │ baseline 94, size 30, centered on x 60 (#FFF) +y106└──────────────────────┘ +``` + +Ticket outline (fill `#512BD4`): + +``` +M22 14 H98 V50 A8 8 0 0 0 98 66 V106 H22 V66 A8 8 0 0 0 22 50 Z +``` + +- Ticket: 76 wide, 92 tall, square corners. The two semicircular notches (radius 8) cut into the sides at mid-height (y 50–66). +- Red strip: `rect x=22 y=14 width=76 height=6`, drawn over the ticket. +- Perforation: line from (32, 58) to (88, 58), white, stroke width 2, `stroke-dasharray="4 4"`, which gives 7 dashes. +- Text is centered horizontally on x = 60 by its advance width: `x_start = 60 − (characters × 0.586 × size) / 2`. Monospace, so the advance width equals the box. +- Margins: 22 left and right, 14 top and bottom. Keep them, don't scale the ticket up to the edge. NuGet and GitHub crop or round corners. + +### Label rules (bottom half) + +The bottom label must stay **at most 56 units wide**, which leaves at least 10 units to each side of the ticket. + +| Characters | Size | Width | +|---|---|---| +| 1–3 (`200`, `NBP`, `MF`) | 30 | ≤ 52.7 | +| 4 (e.g. `KSeF`) | 23.5 | 55.1 | +| 5 (e.g. `CEIDG`) | 19 | 55.7 | + +Formula: `size = min(30, 56 / (characters × 0.586))`, rounded down to 0.5. The baseline stays at 94 for every size. Uppercase is the default. Use the institution's own casing when it has one (`KSeF`). No more than 5 characters: use the institution's common abbreviation, never a shortened word. + +### Favicon (≤ 32 px) + +At 32 px and below, text turns to noise, so the favicon is just the shape. It uses a slightly bigger ticket and a thicker strip so it stays readable: + +``` +viewBox 0 0 120 120 +ticket M14 10 H106 V48 A12 12 0 0 0 106 72 V110 H14 V72 A12 12 0 0 0 14 48 Z #512BD4 +strip rect x=14 y=10 width=92 height=16 #C8102E +``` + +No perforation, no text. Every package and provider shares the same favicon. + +## README header + +- Canvas height 96. Width = 104 + wordmark width + 4 (483 for the current wordmark). +- Ticket: the full icon group scaled by 0.8 at the origin, so it is about 61×74 inside x 17.6–78.4, y 11.2–84.8. +- Wordmark: starts at x 104, baseline 62, size 40, weight 700. +- No background (transparent). Two files: `header-light.svg` (ink `#1F1F1F`, `.NET` `#512BD4`) and `header-dark.svg` (ink `#E6EDF3`, `.NET` `#9B87F5`), switched with `` and `prefers-color-scheme`. +- No tagline: the header is shared by the Polish and the English README. + +## Social preview (1280×640) + +- Background `#FAFAF7`. A white band (y 0–16) and a red band (y 16–32) at the top: the Polish flag as a thin stripe. +- Ticket: the base icon group, `translate(64 176) scale(2.4)` (ticket body at x 116.8–299.2, y 209.6–430.4). +- Wordmark: x 392, baseline 322, size 72, weight 700, ink + purple. +- Tagline: `Klienci .NET do polskich API publicznych`, x 392, baseline 392, size 30, weight 400, `#5F5E5A`. +- GitHub crops the edges in some views: keep content at least 40 px from every edge. + +## Adding a provider icon + +1. Copy `icon.svg` to `icon-.svg` (lowercase file name). +2. Replace the **last** `` (the white `200`) with the outlined label, sized and centered by the label rules, baseline 94. Change `` to `OpenUrzędnik.NET <LABEL>`. +3. Render `icon-<provider>.png` at 128×128. +4. Check it at 128, 64 and 32 px next to `icon.png`: the label must not touch the notches. +5. Wire it as described in "Package → icon" and add the row to the table there. + +## Converting text to outlines and rendering PNGs + +Any tool that outlines text works: Inkscape (*Path → Object to Path*), Figma (*Outline stroke / Flatten*), or a script. The current files were made with Python `fonttools` and Node `@resvg/resvg-js`: + +```python +# pip install fonttools +from fontTools.ttLib import TTFont +from fontTools.varLib.instancer import instantiateVariableFont +from fontTools.pens.svgPathPen import SVGPathPen +from fontTools.pens.transformPen import TransformPen + +font = instantiateVariableFont(TTFont("CascadiaMono.ttf"), {"wght": 700}) +glyphs, cmap, upm = font.getGlyphSet(), font.getBestCmap(), font["head"].unitsPerEm + +def text_path(text, center_x, baseline, size): + k = size / upm + x = center_x - sum(glyphs[cmap[ord(c)]].width for c in text) * k / 2 + pen = SVGPathPen(glyphs, ntos=lambda v: f"{v:.2f}".rstrip("0").rstrip(".")) + for c in text: + g = glyphs[cmap[ord(c)]] + g.draw(TransformPen(pen, (k, 0, 0, -k, x, baseline))) # font units are y-up + x += g.width * k + return pen.getCommands() + +print(f'<path fill="#FFFFFF" d="{text_path("NBP", 60, 94, 30)}"/>') +``` + +```js +// npm install @resvg/resvg-js +const fs = require('fs'); +const { Resvg } = require('@resvg/resvg-js'); +const png = new Resvg(fs.readFileSync('icon-nbp.svg'), { fitTo: { mode: 'width', value: 128 } }).render().asPng(); +fs.writeFileSync('icon-nbp.png', png); +``` + +Render sizes: icons 128, favicon 32, social preview 1280. Write SVGs as UTF-8 with LF line endings (`<title>` contains `ę`). + +## Don'ts + +- No gradients, shadows, glows, rounded ticket corners or outlines around the ticket. +- Don't recolor the ticket per provider. The name is the only difference. +- Don't put live `<text>` in an SVG. Outline it. +- Don't add the state emblem, the flag as a shape, or the logos of the institutions (NBP, GUS, …). Their names as plain text are fine. +- Don't change `200` on the base icon or `OU.NET` on any icon. diff --git a/assets/branding/favicon-32.png b/assets/branding/favicon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..7de98d3da8d15a2a2b8123836fab8247fb010c05 GIT binary patch literal 338 zcmV-Y0j>UtP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80003QNkl<Zc%1E& zy-or_6h`L?#s-Z~prK|rS$zWSEDdUJVP)geSeb~4l?`iSWnr%pOFMW1*kqTQz!MOl zA^cpvY=AHXDt0nk%t<CWnPyJzO@@SKk`?foeLWtGdzVmU?4|bq?wU_6XawOb_&9oW zPrLsms4{8?7lr%wn+J_B0m%xuwt}-UQw6Gw6!G~_XjjDy6JP?QfE%abjD}o?DkHs1 zC*OX~hek*NbMm>+Wg$w?*uX=Da>MeV61ZPa-U^D$^bFk^B7P}{c2TThV?dniSRMN^ z$qmrDf-5U{m@s+J*w`U<e?$8nDj@~LIrdGgu0smY{t=k~6JP>Nz^&6f?2q~mR2i9c k#{crO9cY9UpabmzQ}a6BAs5#?Q2+n{07*qoM6N<$f}bgjr2qf` literal 0 HcmV?d00001 diff --git a/assets/branding/favicon.svg b/assets/branding/favicon.svg new file mode 100644 index 0000000..0745136 --- /dev/null +++ b/assets/branding/favicon.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 120 120" role="img"><title>OpenUrzędnik.NET diff --git a/assets/branding/header-dark.svg b/assets/branding/header-dark.svg new file mode 100644 index 0000000..0deff68 --- /dev/null +++ b/assets/branding/header-dark.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET diff --git a/assets/branding/header-light.svg b/assets/branding/header-light.svg new file mode 100644 index 0000000..748397f --- /dev/null +++ b/assets/branding/header-light.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET diff --git a/assets/branding/icon-gus.png b/assets/branding/icon-gus.png new file mode 100644 index 0000000000000000000000000000000000000000..64cb129e420c9a1c27b8e11069f796542645f20c GIT binary patch literal 2713 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 TkZ8MSIRSfXXRGp4n3#V907?bR literal 0 HcmV?d00001 diff --git a/assets/branding/icon-gus.svg b/assets/branding/icon-gus.svg new file mode 100644 index 0000000..2583b27 --- /dev/null +++ b/assets/branding/icon-gus.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET GUS diff --git a/assets/branding/icon-krs.png b/assets/branding/icon-krs.png new file mode 100644 index 0000000000000000000000000000000000000000..039956a77118013739e10ac80a01088ee6dfecd3 GIT binary patch literal 2772 zcmai0c{J2*8~*)fV`eO48=;UQ6%8s=#>?>9iWvLOFxIlYk$ssLNg`XxZpbuI_9gX- z!Hc}{QInKimXI=KALP^dzVn^;`%dS4e?0f|$8%lxbD#S<_kFILBx8MElsF0i0Nx7* zI%fMf^~d2x?8gobmzMy5%DbSWWf7YHIp5z$xLbrdQRvGIUdlFO0mbi1W!qvbtm8|p zEL}4nddrq1Xf8;V-B!9RV|F(Cfs~Pjw&3gXIjCZA36?IRcg{>gOWJprZYiD@ov34O zVcqyUMxf||uh1W75UxJeQTI0d{3EBoR{C%Bj&+7FAFJ^9%gJ+G-tHU8dD@BPek=fH zAAu<8!^pR}nFj@^=VgFE9bhgI=>5q<#tCM+Z0eIr@$;5Q?e_eBr=fM5z2)-iY+;4b zj0A3_h`%#EjnVAsKTHn3;7%EIH8n`PNwn&Cx$HN3v$HhK0#v&%u#u~+%9~yR2RHt-u{$G$b>pJ#ec(MH#y3@H zv->I?vkLd0l=Oe>P>`bOYZ2kGUG9q?*CeQHiQ#t&Mcd4%OQV2#%eHYd4b3jN;JZ8MCg12{8--k^*{nxF_(Lw~@tZ{2d_Vp`~C#WI2bzPV0VsY;!C z@m*t-vNE4p6nA!GOe0LI4-i+9 z-F(|JU?1sms7fA`pI+LWO?vSOVe~P4JJYx5>FvBI_1M=0_oG6V6Fa}`v>O8=HY@FA z=arP|7%S%TuDkkS51-4bF~iHze`%Yi0@}Abh+0 zGi$F&h2EX&6jC_+FIXdFpuXyB&aI~IuKokm*r3%XQXeG!=OHACD_>rwmIgnM8aDBL zG~M0dABBI1B%)7UOF3BsOSdq3o`SXUa+D_EDJs$z6IsWU-*IUsM^MTTCk%kxs~Q{IxJiP9Ie?$9Q!8)bPNM=a#d1f z$AXE9?uYIQxjYiNwbWDHZrQE&azvW9^b+7ovDKHj&Gn^Q#`!V3N2p--ZkpWd6GS)C z0TkXPUD1kJeqol@f3yOkZuiPkSp)kWk1gITgr{YSGBf(f69;%!hf~dko^FBi&j{;# zu*AxcB}S-7Af2~h%T}zjCx5QvS=iEzZl-jpB6_mM+{BH8m%QAm zOM^t7w3#aI?Il{ObwQ4ck^{GL^tGpM${}08i< zs*H(vgfDGF4%VNd{i*0ifb$M;$|(yz5mt+NThV`GbcbhDC~jDN?X9KPHfvxe>}V1< zrZW{7ky1+q8>HHjj!}{DRLM!Nu(iF-f8>ssfUJ-R2b2!=Ay6O<eSuja12qiU8bk8@t)s79iUunHarHB@#Q9z$37 z^SJbA$`FO|U?Hbd_qzTe)&I{!W@mbcmj$)2s6JA+|D(?q5(;CH(Pn*1t2E~fapkK8UE%!2Y4(O}>B15}9Hp|zk2zO78LN7lknH#I9*7aCaDGEoVT-_K zEoifOOltytMjE1{45!sU-@1H;K#c3bd^LjP$$Q|07bhg$-gv#CF&0TlAdQj+xjI#{;Q$*SI=C!7UIE~mW=c4gQ z(2%7JHDnR&wpcxVXrqNK*rm_%_s`LT#nB|h)eI`Fv*=#PhO0+*Zi=85j7>eyW+}tj zN$2yF4kH@}$CPJVsX4tK->Wd7x)STUu@1m^vyAA|nLof;HT8TDxDv}f35v%ru+APr z-IfC7qn68%vCbZXZN3#uvEML@$%~gND z8LiYDKY?q!FKhfXvV6QQ+U^bp+I&m>p#)Va&M@1S`FQ#$Q1j@w^U-1V;k-lW-evY$ z<3=+RMOxdDU+qWh&9Lr7S!=!mmfuGzLke(@ic0F_h-Z$=TbR{ZxuwKVVPV8D_l9UV^(97h0Ote8`25{){oKQyX23BTyFd4HKW7&K)B&?CTv~1I QzFP$@=o;%(YLjFC34Hq)$ literal 0 HcmV?d00001 diff --git a/assets/branding/icon-krs.svg b/assets/branding/icon-krs.svg new file mode 100644 index 0000000..da7b437 --- /dev/null +++ b/assets/branding/icon-krs.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET KRS diff --git a/assets/branding/icon-mf.png b/assets/branding/icon-mf.png new file mode 100644 index 0000000000000000000000000000000000000000..1f56c8f46db061b312aeeb870216096a107b60d4 GIT binary patch literal 2177 zcmZ{mc{JNu8^?c%A5EgMMJ-X$B%?7Yl`gTXAog`EuXGGTJLR;fx2U}dO)<7E6fdDc zs~A+?Qd&x4ZxO0hK|7WyRiu{UwX}?$^PZkL?>qCyz4wp%obU6!&vWkm++Um>t&j*b z0ssJ{jWyL}Z)JWRFp0gn?UZj10KlwmsHSd_Y*E35KzVn0W`CgP>{TmS{?aXl+a6=I ztJZ$|Yt8)ZNh@i2FbJNS?y@R8`un)5*5iNZZ z_hDeC@U*@}=cEQjIR5awPpZ}KaMFB@yx{_vd;EmBcrHtwS?n+r`K~?}-i2_$M76+;H~#z0rAwRZ|U$SN^-()47m(kkb%0Wl0EG-yp7Us(lPIoXS^; zX{mJ;t+n92g$PPcoJD@MU%G|Sdm!s>iJDhep0Gxea_n56s;`u2eZ$S^n_V~sbyOv# zln(DL%FWQpqZdWRXVtOFZ{05^xT#9 zQSt6PbQY-~!7J1E z&AXzR=#-zkjsm8kQp8f&fbk6iGTY_E@XGWA^)Z@lG2=W|WH(LaiO=na1Rf_GF$?^%18P zdfps+jouMYy`gWc?2@#v=Ijq1FA=&swZZof4_bnU&ipvM2qve5zV>QLiI-~=4BTbe z>uP^0p8OSPpQ>CTo#G3wD&HU*BJC7>Vk5A)X4?)?<{+PS(AN4m;wc&# z!uaT`Dk_4)%q5tQVO$g_mH@#!&(4(5C#KMs>}b2kBv!P1ag^QvduA!1W0wEq8K;Hu z{`v8~BabSp6E2Mv81+BZk;viFQtqULB5R_;W!_N0WM(FC1k(Z_*RYz9h3y%vlA$jw z`w1RO+iwe5c$R(-iG?;WeV_-0UXu4SKEIt8c_L(at-KC$lRWd5b9lM3LbD#)F)kV< zweUnDbVfP}dF?;uGV}dcJjS*7FF;OYusRt-Wx{5m>@Uq2?@^LK({;toh0(fIk=l3e zG4xi;2 z;bZm&rYQ611PdV5l)!Ywt!)KB2ckePcRf=Ng|K^*Iyed#jXK2m!Juhb09JCHb6C*{ zC2$#Jok_hc1UHZmtoFPy?!xfUlH~925@=wJQW#WbJ^FTlF~7pQ=)v{GI7ToIO63&> z#F!~mH|!fsB+#F2!8qE9tDqH%hv|3PD})|=K;^3kNm-6qTwHCWHx^2zfU_nz%D%0w zfaNB$y`FsK9#d*{?Zs5oHJA)Umb1G*05Y4cZP8|e{ZuMV=ybGhy$G+`1uX}RO!}lX x{u}vsjQz&BJ(%tZu^QF>n#F&P`$q5gj8b^TT&G^=%-+`mu(5EYR-4fi{s3MD$Ugu8 literal 0 HcmV?d00001 diff --git a/assets/branding/icon-mf.svg b/assets/branding/icon-mf.svg new file mode 100644 index 0000000..fdb1c33 --- /dev/null +++ b/assets/branding/icon-mf.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET MF diff --git a/assets/branding/icon-nbp.png b/assets/branding/icon-nbp.png new file mode 100644 index 0000000000000000000000000000000000000000..9de645d93b0e4a4b95a5b5bd2b83c7f0ee7dd046 GIT binary patch literal 2678 zcma)8S5%YP8vPT4LTI5EL7EiN!J!wE5FvnpAwXbMhB5)Eg4Cf4gaFY21O*h3-V~4) zDFH;PfFRXEG4v)32!tN$&D^KC-urML&N&ZffBW0(TkG3v|7nUfV227r0RUjf+(6?P zFX8XQe3o&yBkeu_02F~iU$+R%_@3eB&O5?K7%08hq5+drWrq=s<+&@%8uCp8#t@tc(2cB*Qa>lu+$=nft%5W7_zylT$z2;<(<~5vQrB~@^XR&i=Ln3d2Y!{ z;}{A5OK0!8+lQ!sTV171zMb6ZUw!?C+)pnULnt@-t_Sz42ds^YQbBqu@&qpnV5SIY zGXq8CgP9GOVDV6K5k8d0e}7>0nMNr~v|+yX^_vliN-tU0T|>6pDqbn}GIJ;h=`!6A z`)66&Fc|JPGBXj>I;6$+lvjw8SLJ9k($9*47UIK)26e^eKHdV83}ZB~ONF|bd{=cy zrXb|p|DmKB*oxhsy%}yWv)Ll(@#pJ02bo@Zww7pLb$p=QL#w<615)JRi0>In z;2nC8&V9d`gVlrjHFO3-6;3vhJPK3LDFCANK!Hc~R2rebO*N${i_0af%u^>yHmg~b zNB#Wd{RJtF5FbGb0I%}~!RzcmGILsu^v!UuSatss52mIDuTcME>j25x@V)JK$Uip@ z>zSW`;p8)%^Ce?H`-F-d1bapeG}1dpdD!CG%72=;4gP@UP?LQ)eUXkBd;xfhH9|ba z>Qsuu%F~f&c5bMBo@`IxZX56t!bW?fk9e`&la7AKL*N|m4nGmwef#x+ zm9^UOG;8HSla(w-QKmR?uMmyne%l7FUR`-`&g(R#DclKnY^_eoW@}#Hk+=yQw$S{s z<(cAb3Uhq?gy4*yw5|BVevh4~w>(8p$X3kF)*6`ZVG)V!DU@)|W=1O>H!%%lPKLEY z7mMVolC2%cMchEq#_8siw)%^(a;l7(mG$Ha;z$xpK%a}JY=H)n0gJ2b<1T>n@PJ?T z{^8S9<*@nSBdco)o~IYWxGn<|yQ;_#4ocm=&>7Rj-DaAi2aR+I_(DEts-G#JD9x@l zpBN8QI(lXjr2%qjD{S)C)Q7FbEW78k@IM!jyV8?>gPGNPR!}Bnpljy%ZkA=7qjLvh z>G#7$`0bsiRyl=1z(Ne-jxnfbc$~ZZK?ulWz*Fb=-)zj-@<(Ge>6BO*m4Ly@w*ov% zSV6@Mhbj(IxITFBr*EvybjkAiQSe3LuIkLDJPHbisTAutU&)M4w)l%>3IDPBitZUz zt@jqBoT_KR?1rhv6a9{rE@QnL1H}qF<^XX~qz=m`&i;`L<^AK*efo{CZjmKVcW`%C zHZ%nTzXFwP0@9jq>#FTGL!9QntsjRT_FQ-m<4~}?6RIcB0~=?TaNfLGG zMD3RKkp#%(#{9eR`D%N)EV!&iXiilgyAP@#B0l^ypn4{7I*e^$HY#3pt+a?J^28j} z7TJa`V$mgQfL^MlM!)H66x>w_^l#C~zI$8Kol|Zm8@c8%X`$6F$me)v{5--7}S69Y` z!TU@k`&P)&lIbnF2b(XrHv3xT;d&>9`>`>n?O8(_LRO=09)dW`$8-A(v*M{^viA?w z`Q1A(IYD(L8o8}UM<_pqPOzl_Ubmy$fS5~@F>Ycqgn4b=<@7JrBDz^hxq$~QwUNRl z?H=LEaxAS;t9_TfgkOI-j}J*}M^GdEU_@@hMqc2{b0SMD8WE&lcA$@2L+-sPWz~P&{z^SS9Kbp1KbVrE$NN`tz z?W1C9r^g3}rN1=(2>+QoY`t}_d`{PVc!7_vWwy*lAg7QXE?7T`p>a&HgyOGv2W{qZD*BL^svL#adZQr^0;Bb7?S?3l}q3xoA_1k+hg^TCK?0Gvp+)4_*Ixer} zEKcqzZa!d?CU#PL*T#^8#Zc3!N?z&I*e9`w(Tl6KFSv6Ko&;@dn>@qw7A{Vj%jv+R z))@-rTo<=?tFer!O15xh7~y-!$daVVv|P8j8E;bNl{aO@kPROUjmV(p$VvmUU`iA& zTSzKY_}E+&{$7PleQrqTs+~IP)=UAU1fGioJGBeN9p!@2;-Fp!T%z2NKQ8dvowX$9 z24gqZCP-QMg^WLj(?{<~bK_?ci5udB7bm4VSmjX=Zi4QqvjwCX56Z+vfl)=nD?V90`TNRfRA>84FldJEBOgFf%uBh1v_X;&yKys*Le{83VsN51DkgATT?9tW{Ttt_YjRtjS+r@56{F+eL|i?s{*Zc=dtf@&+AW z?7SD(mnV2CNfR=ed9H#@g_7(=3?8FdQ+iu!Zo2?oQw!AZB>?7qGC)i0G4)AendWPV zPal930m$xTAnMq6(TN3RPT9_k&?Mdh-A}}T0(IWY*nnJAOb)mFrqE0q7%i~r>@U4S znnaItv2mvzUE6ydCnm_}NQFmIG3?qxa6XkTlP!+8l+cfQr9e#V51am@OpenUrzędnik.NET NBP diff --git a/assets/branding/icon.png b/assets/branding/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3a3cd9156cb6917bb5cd078609a67e3ecd922c4 GIT binary patch literal 2899 zcmZvec{tPy7sr1ymKm~5){rfwi%?3IFcU)dv1e&4QJ0z|+mK~ulBH{j8Z=RM-E1Wc zGiHXwjST79jZrkNJv4S+??3O;eeeC_obx>Aoag(TKh8PNC)wWCT##Ry9{>PBOAAxv zL5%;eL3s~+n~_f!034FGG(|W?5*MBZ1&a-ecQ7_UQXNA0i(GhL6DzQes`&A8hsRP$ zc`hZYc5feFO4jTAS^z~ZiCyTofDJ-!Ea`T0w&9W zRtFHi2n;pn5lQ1$ko{*tr3f4>v$K}qa9-Fs^O259>WKlPusz|d#vGVz>@@-L=i5JP z*rrRMCUMaNZ1WL`PzTE_4!KoOW}=`4pL#^G2;5zMVGDV7mfUG}+(uSqYh|&iR?{KT z9@N76S>xa5Fs}o4Arkicn&O|P?M7zqtR7{G23okIXC1T6*^IHmr>9^{(dr3|_C=fD z8Y1m}eJJJi&e+R3I()lyLBZ%k?3=IJ2)v=D0y4hv%LNQ(lPdDgTZ@EHv61 zUJNi^u@32#YQAM&FDvbD@HMR7hxc%Qyjd6Sz%|IykI<~=6VXEON57ze$#3VBC~sGN z2^^bIU5LN3jO-G`POz9xZG+@ru+j-G@m2Q{Z zu6Wtr+xpg@W+UG>i5qOABR+EwMOz?rGHsXbI8tAgyx!Qo zH%z#(Q?wrLX>S0h#YiNWia54IYtW-Sd94L;n`LE9b?6bD4!cW3TZklaTFdPKDqq!6 z1=OIW_%Yy2PvL|>I>m1K?&3{q(SqOkjcGYy1gmYf zh7N@x+oAEvvLB=Z-W$7&R2ZUq{T}q3dv8Q&|A73k{&~Fvguxo=2ioB zF#UbZs@#ZcfA^iR#aeHW>WMMYpbmdfD7gkC=wS>E0Ry6*GU#8|nHm`S2tDyynO^)N zHj~ahJeo+~5dyQGthO7+K5p;~24QJ|l$~HtZ5{w{s|)Q%!H}OY#mQl8-m1 zy9Af0XF7vuV*b@I+YXA{7x;x=zAH^Fw@5ZY@D zhR9Eu0$RVXTz8KCtVc8ZK4s8nX)yPG04da&3!pI5eOK~@FT6J+>Gt8GXWzRxq;*yR zwU$20P4`oMLsp1U!^E}WDW~}1ud^NFH&XWqsZM+L^0OX~I*t>*mFhIz?zu;l79)If z7{-0y7X^MSk?g)pV=l{hVyD>9W#_V_>&3%qpAaQ|Vy4~E* znT*@q^bln|n6h7Y<{v3+e>U)e&o`+_?zmtNnP@_A022*tKl6Q5Izg&>N7?(yl* z?)f&vMJPccVde5@Rok`82n4g(vzzC&2CcicqtvW$!QkEYPNmI3@zvO&*;OMK3n3IrK*$szrKoxN!XAP?v za}8>fKTu#rpPz`%)zLtIL2BtXI6v)b9F+X-qE&s$*c`&~oN@8i zfSoDod099UtbqF64J?`+v3@nx(2*^eI@IjzeQfx`_S}oJ$!r)ecN|?*MNb#T zYw^ykSlFBVR8cWEeq@`1%N-vU;MXBFpq? z5<*$6kL4^|6L6y64h$X1H_?6zWK-dTzlv}Jk6b!Pqhus!16Y2GTXtO^>YR&NWymLCNtq`nC z%g@;SVc~ID)CpZvn^70_(OmsO!mkPk!fSv4 z4u?n=!oyGzUOeb_I+=E>zvm<;PytxpE6dol?hQE*-iZI>1;t+M?q~p{bUI^CC_3F~f5@?0m$C08m+JxoG$2&VG0 zK=gHwL^A~~iS5awa|wL-bx!ZY(Rv`@77Cg-lz~&0Zrw}TfjZ#NyMzpXnIr*Fer0Mdu^+!hGE;C)%^{nlG$sK`MQx0q+W7MgE+7sjrkv#^ ze6V>QDve@twO~{xui@b6F_45u?;JV7GLh06F|!avY+>B_MX1GX#a2B;Hrg3xa*z)U zVnSL8Z{Aq)uL0-qKcUc9K}0u+zjwG5{U!j_$CNF^qDw^*#Q!;vy$6>wgQ`!9+zwas6D zeSmlcq@?~UEdGrmF?GNPN%?;g<=>iqW>B_v`*g+T%V%)X0W1TSX11nP7g5;%0G8HV ANB{r; literal 0 HcmV?d00001 diff --git a/assets/branding/icon.svg b/assets/branding/icon.svg new file mode 100644 index 0000000..0e61586 --- /dev/null +++ b/assets/branding/icon.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET diff --git a/assets/branding/social-preview.png b/assets/branding/social-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e20d8e4393b527cd58e711f59553bf790b979a GIT binary patch literal 28804 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 literal 0 HcmV?d00001 diff --git a/assets/branding/social-preview.svg b/assets/branding/social-preview.svg new file mode 100644 index 0000000..15a7db0 --- /dev/null +++ b/assets/branding/social-preview.svg @@ -0,0 +1 @@ +OpenUrzędnik.NET diff --git a/src/OpenUrzednik.Nbp.DependencyInjection/OpenUrzednik.Nbp.DependencyInjection.csproj b/src/OpenUrzednik.Nbp.DependencyInjection/OpenUrzednik.Nbp.DependencyInjection.csproj index 0df5363..03cdadd 100644 --- a/src/OpenUrzednik.Nbp.DependencyInjection/OpenUrzednik.Nbp.DependencyInjection.csproj +++ b/src/OpenUrzednik.Nbp.DependencyInjection/OpenUrzednik.Nbp.DependencyInjection.csproj @@ -3,6 +3,7 @@ Unofficial Microsoft.Extensions.DependencyInjection registration for the OpenUrzednik.NET NBP clients: typed HttpClients, validated options, logging and tracing; ready for AddStandardResilienceHandler() on .NET 8 and later. NBP;DependencyInjection;HttpClientFactory;API;Poland;Gov + icon-nbp.png diff --git a/src/OpenUrzednik.Nbp/OpenUrzednik.Nbp.csproj b/src/OpenUrzednik.Nbp/OpenUrzednik.Nbp.csproj index dcf2b25..3114fd0 100644 --- a/src/OpenUrzednik.Nbp/OpenUrzednik.Nbp.csproj +++ b/src/OpenUrzednik.Nbp/OpenUrzednik.Nbp.csproj @@ -3,6 +3,7 @@ Unofficial .NET client for the NBP (Narodowy Bank Polski) API: currency exchange rates, rate tables and gold prices. Not affiliated with NBP. NBP;Currency;ExchangeRates;Gold;API;Poland;Gov + icon-nbp.png From f03125210ae3be1d3a5c6d40239a366cea531ba8 Mon Sep 17 00:00:00 2001 From: Andrzej Ochodek Date: Fri, 30 Oct 2026 14:27:58 +0100 Subject: [PATCH 2/3] Generate the branding from one definitions file assets/branding/branding.toml holds every definition (font pin, colors, geometry, the icons with their labels, headers, social cards), and generate.py (a uv script, locked) rebuilds every SVG and PNG from it; --check reports drift. A new institution's icon is one new entry. The script reproduces the committed SVGs byte for byte; the PNGs were re-encoded with identical pixels. Adds an English social preview, and LF rules for SVG, TOML and Python files. Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 3 + assets/branding/BRANDING.md | 61 ++-- assets/branding/branding.toml | 160 ++++++++++ assets/branding/favicon-32.png | Bin 338 -> 335 bytes assets/branding/generate.py | 444 ++++++++++++++++++++++++++ assets/branding/generate.py.lock | 124 +++++++ assets/branding/icon-gus.png | Bin 2713 -> 2555 bytes assets/branding/icon-krs.png | Bin 2772 -> 2569 bytes assets/branding/icon-mf.png | Bin 2177 -> 1885 bytes assets/branding/icon-nbp.png | Bin 2678 -> 2320 bytes assets/branding/icon.png | Bin 2899 -> 2744 bytes assets/branding/social-preview-en.png | Bin 0 -> 22379 bytes assets/branding/social-preview-en.svg | 1 + assets/branding/social-preview.png | Bin 28804 -> 23289 bytes 14 files changed, 750 insertions(+), 43 deletions(-) create mode 100644 assets/branding/branding.toml create mode 100644 assets/branding/generate.py create mode 100644 assets/branding/generate.py.lock create mode 100644 assets/branding/social-preview-en.png create mode 100644 assets/branding/social-preview-en.svg diff --git a/.gitattributes b/.gitattributes index 0347eda..4cb8e39 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,6 +8,9 @@ *.md text eol=lf *.yml text eol=lf *.sh text eol=lf +*.svg text eol=lf +*.toml text eol=lf +*.py text eol=lf *.editorconfig text eol=lf *.sln text eol=crlf *.png binary diff --git a/assets/branding/BRANDING.md b/assets/branding/BRANDING.md index 3dd3e64..7ebdf4c 100644 --- a/assets/branding/BRANDING.md +++ b/assets/branding/BRANDING.md @@ -1,6 +1,6 @@ # OpenUrzędnik.NET branding -The spec for the project's icons and logo. With this file and `icon.svg`, a person or an agent can rebuild every asset or draw a new provider icon so it matches the rest. +The spec for the project's icons and logo. `branding.toml` holds every number, color, label and tagline, and `generate.py` builds every asset from it. This file explains the design; when a number here and in `branding.toml` disagree, `branding.toml` wins. ## Idea @@ -18,9 +18,12 @@ The design is flat on purpose: no gradients, shadows or outlines. It has to read | `icon-.svg`, `icon-.png` | Base ticket with the provider name in place of `200` | NuGet icon of the provider and its integration packages (`icon-nbp` → `Nbp`, `Nbp.DependencyInjection`) | | `favicon.svg`, `favicon-32.png` | Ticket without text | Anything at 32 px or less | | `header-light.svg`, `header-dark.svg` | Ticket + wordmark | Root `README.md` / `README.pl.md` | -| `social-preview.svg`, `social-preview.png` | 1280×640 card | GitHub repository social preview (uploaded by hand) | +| `social-preview.svg`, `social-preview.png` | 1280×640 card, Polish tagline | GitHub repository social preview (uploaded by hand) | +| `social-preview-en.svg`, `social-preview-en.png` | 1280×640 card, English tagline | The same, for an English-facing upload | +| `branding.toml` | Every number, color, label and tagline | `generate.py` | +| `generate.py` | Generator script | Builds every SVG and PNG above | -The SVG is the source; each PNG is rendered from its SVG. Text in every SVG is converted to outlines (paths), so the files never depend on installed fonts. +`branding.toml` is the source: `generate.py` writes each SVG from it and renders each PNG from its SVG. Text in every SVG is converted to outlines (paths), so the files never depend on installed fonts. ### Package → icon @@ -119,7 +122,7 @@ No perforation, no text. Every package and provider shares the same favicon. ## README header -- Canvas height 96. Width = 104 + wordmark width + 4 (483 for the current wordmark). +- Canvas height 96. Width = 104 + wordmark width + 4, rounded up to a whole unit (483 for the current wordmark). - Ticket: the full icon group scaled by 0.8 at the origin, so it is about 61×74 inside x 17.6–78.4, y 11.2–84.8. - Wordmark: starts at x 104, baseline 62, size 40, weight 700. - No background (transparent). Two files: `header-light.svg` (ink `#1F1F1F`, `.NET` `#512BD4`) and `header-dark.svg` (ink `#E6EDF3`, `.NET` `#9B87F5`), switched with `` and `prefers-color-scheme`. @@ -131,52 +134,24 @@ No perforation, no text. Every package and provider shares the same favicon. - Ticket: the base icon group, `translate(64 176) scale(2.4)` (ticket body at x 116.8–299.2, y 209.6–430.4). - Wordmark: x 392, baseline 322, size 72, weight 700, ink + purple. - Tagline: `Klienci .NET do polskich API publicznych`, x 392, baseline 392, size 30, weight 400, `#5F5E5A`. +- Two cards, identical except for the tagline: `social-preview` (Polish, above) and `social-preview-en` (`.NET clients for Polish public APIs`, for an English-facing upload). The maintainer chooses which one to upload. - GitHub crops the edges in some views: keep content at least 40 px from every edge. ## Adding a provider icon -1. Copy `icon.svg` to `icon-.svg` (lowercase file name). -2. Replace the **last** `` (the white `200`) with the outlined label, sized and centered by the label rules, baseline 94. Change `` to `OpenUrzędnik.NET <LABEL>`. -3. Render `icon-<provider>.png` at 128×128. -4. Check it at 128, 64 and 32 px next to `icon.png`: the label must not touch the notches. -5. Wire it as described in "Package → icon" and add the row to the table there. - -## Converting text to outlines and rendering PNGs - -Any tool that outlines text works: Inkscape (*Path → Object to Path*), Figma (*Outline stroke / Flatten*), or a script. The current files were made with Python `fonttools` and Node `@resvg/resvg-js`: - -```python -# pip install fonttools -from fontTools.ttLib import TTFont -from fontTools.varLib.instancer import instantiateVariableFont -from fontTools.pens.svgPathPen import SVGPathPen -from fontTools.pens.transformPen import TransformPen - -font = instantiateVariableFont(TTFont("CascadiaMono.ttf"), {"wght": 700}) -glyphs, cmap, upm = font.getGlyphSet(), font.getBestCmap(), font["head"].unitsPerEm - -def text_path(text, center_x, baseline, size): - k = size / upm - x = center_x - sum(glyphs[cmap[ord(c)]].width for c in text) * k / 2 - pen = SVGPathPen(glyphs, ntos=lambda v: f"{v:.2f}".rstrip("0").rstrip(".")) - for c in text: - g = glyphs[cmap[ord(c)]] - g.draw(TransformPen(pen, (k, 0, 0, -k, x, baseline))) # font units are y-up - x += g.width * k - return pen.getCommands() - -print(f'<path fill="#FFFFFF" d="{text_path("NBP", 60, 94, 30)}"/>') -``` +1. Add an entry to `[icons]` in `branding.toml`: `file = "icon-<provider>"` (lowercase) and `label`, following the label rules. The script sizes and centers the label and sets `<title>` to `OpenUrzędnik.NET <LABEL>`. +2. Run `uv run assets/branding/generate.py`. It writes `icon-<provider>.svg` and renders `icon-<provider>.png` at 128×128. +3. Check it at 128, 64 and 32 px next to `icon.png`: the label must not touch the notches. +4. Wire it as described in "Package → icon": `OpenUrzednikPackageIcon` in the csproj, the PNG in `pathFilters` in `version.json` and in the `paths` filter of `nuget-pre-release.yml`, and the row in the table there. + +## Generating the assets -```js -// npm install @resvg/resvg-js -const fs = require('fs'); -const { Resvg } = require('@resvg/resvg-js'); -const png = new Resvg(fs.readFileSync('icon-nbp.svg'), { fitTo: { mode: 'width', value: 128 } }).render().asPng(); -fs.writeFileSync('icon-nbp.png', png); +```bash +uv run assets/branding/generate.py # write every SVG and PNG listed in branding.toml +uv run assets/branding/generate.py --check # generate into a temporary directory; exit 1 and list the files that differ ``` -Render sizes: icons 128, favicon 32, social preview 1280. Write SVGs as UTF-8 with LF line endings (`<title>` contains `ę`). +The script is a uv script with pinned dependencies, locked with hashes in `generate.py.lock`: `fonttools` outlines the text and `resvg-py` (resvg) renders the PNGs. It downloads the font archive named in `branding.toml` once into a cache outside the repository (`%LOCALAPPDATA%\openurzednik-branding` on Windows, `$XDG_CACHE_HOME/openurzednik-branding` or `~/.cache/openurzednik-branding` elsewhere), checks its SHA-256, and fails if the font version differs from the one pinned there. Output is deterministic: running it twice gives the same bytes, so `--check` passes on an unchanged tree. Render sizes: icons 128, favicon 32, social preview 1280. SVGs are UTF-8 with LF line endings (`<title>` contains `ę`). ## Don'ts diff --git a/assets/branding/branding.toml b/assets/branding/branding.toml new file mode 100644 index 0000000..ba45c24 --- /dev/null +++ b/assets/branding/branding.toml @@ -0,0 +1,160 @@ +# The single source of truth for the OpenUrzędnik.NET branding assets. +# Edit this file, then run: uv run assets/branding/generate.py +# BRANDING.md explains the design; the numbers live here. +# All geometry is in SVG user units (the viewBox of the file it ends up in). + +# Name shown in every <title> and drawn as the wordmark. +[brand] +name = "OpenUrzędnik.NET" +# The wordmark is drawn in two parts: the first in the ink color, the second in the accent color. +wordmark = ["OpenUrzędnik", ".NET"] + +# Cascadia Mono (SIL OFL 1.1). The archive is downloaded once into a cache outside the +# repository and checked against the SHA-256 below; `version` must match the font's own version. +[font] +url = "https://github.com/microsoft/cascadia-code/releases/download/v2102.25/CascadiaCode-2102.25.zip" +sha256 = "a64e8834f06ec9acca4a5307cb6cf35922021d4fd0ca19096f8bf6a3e2515ad3" +member = "ttf/CascadiaMono.ttf" +version = "2102.025" +# Weights the variable font is instanced at. +bold = 700 +regular = 400 + +# Color tokens, referenced by name below. +[colors] +purple = "#512BD4" # ticket body, .NET in the light wordmark +red = "#C8102E" # strip at the top of the ticket, stripe on the social preview +lilac = "#D9D2FA" # OU.NET on the ticket +white = "#FFFFFF" # label, perforation +ink = "#1F1F1F" # wordmark on light backgrounds +grey = "#5F5E5A" # tagline on the social preview +paper = "#FAFAF7" # social preview background +dark_ink = "#E6EDF3" # wordmark on dark backgrounds +dark_purple = "#9B87F5" # .NET on dark backgrounds + +# The queue ticket shared by every icon, the headers and the social preview. +# viewBox 0 0 120 120. The notches are semicircles cut into both sides, centered on notch_y. +[ticket] +viewbox = 120 +x = 22 +y = 14 +width = 76 +height = 92 +notch_radius = 8 +notch_y = 58 +fill = "purple" +strip_height = 6 +strip_fill = "red" +# Perforation: a dashed line along notch_y. +perforation_x1 = 32 +perforation_x2 = 88 +perforation_width = 2 +perforation_dash = "4 4" +perforation_stroke = "white" + +# "OU.NET" in the top half of every ticket, centered on center_x. +[ticket.top_text] +text = "OU.NET" +center_x = 60 +baseline = 44 +size = 15 +color = "lilac" + +# The label in the bottom half ("200" or the provider name), centered on center_x. +# size = min(max_size, max_width / text width at size 1), rounded down to size_step. +[ticket.label] +center_x = 60 +baseline = 94 +max_size = 30 +max_width = 56 +size_step = 0.5 +max_chars = 5 +color = "white" + +# Icons: one SVG and one PNG (render_size × render_size) per entry, file name without extension. +# label_in_title = false keeps the label out of the <title> (the base icon is just the brand). +# base = true marks the one icon whose ticket the headers and social cards reuse (exactly one). +[icons] +render_size = 128 + +[[icons.icon]] +file = "icon" +label = "200" +label_in_title = false +base = true + +[[icons.icon]] +file = "icon-nbp" +label = "NBP" + +[[icons.icon]] +file = "icon-gus" +label = "GUS" + +[[icons.icon]] +file = "icon-krs" +label = "KRS" + +[[icons.icon]] +file = "icon-mf" +label = "MF" + +# Favicon: a bigger ticket with a thicker strip, no perforation, no text. SVG + PNG. +[favicon] +file = "favicon" +png = "favicon-32" +render_size = 32 +x = 14 +y = 10 +width = 92 +height = 100 +notch_radius = 12 +notch_y = 60 +strip_height = 16 + +# README headers: the base icon scaled by icon_scale at the origin, then the wordmark. +# Width = wordmark_x + wordmark width + padding_right, rounded up to a whole unit. SVG only. +[header] +height = 96 +icon_scale = 0.8 +wordmark_x = 104 +wordmark_baseline = 62 +wordmark_size = 40 +padding_right = 4 + +[[header.variant]] +file = "header-light" +ink = "ink" +accent = "purple" + +[[header.variant]] +file = "header-dark" +ink = "dark_ink" +accent = "dark_purple" + +# Social preview cards (1280×640): flag stripe, base icon, wordmark and a tagline. SVG + PNG. +# The maintainer uploads one of them to GitHub by hand. +[social] +width = 1280 +height = 640 +background = "paper" +# Bands at the top, drawn in order: [y, height, color]. +bands = [[0, 16, "white"], [16, 16, "red"]] +icon_translate = [64, 176] +icon_scale = 2.4 +text_x = 392 +wordmark_baseline = 322 +wordmark_size = 72 +wordmark_ink = "ink" +wordmark_accent = "purple" +tagline_baseline = 392 +tagline_size = 30 +tagline_color = "grey" + +[[social.card]] +file = "social-preview" +tagline = "Klienci .NET do polskich API publicznych" + +[[social.card]] +file = "social-preview-en" +tagline = ".NET clients for Polish public APIs" diff --git a/assets/branding/favicon-32.png b/assets/branding/favicon-32.png index 7de98d3da8d15a2a2b8123836fab8247fb010c05..9ad743428900e851645c8953708f2703eecd2d4d 100644 GIT binary patch delta 308 zcmV-40n7f<0?z`FB!3o3L_t(|ob8sqZo)7Wh0k?dbpg~js5(O>sy;!tj{Q-`cIsZb zcd68=OVhn?P=Oeckaz^J1k8vxK)?bdG06Z*B9qCM8T>8LO{{x9={imrEW=<Ko-Y0_ zzRp+S;tmEm^~&wn$;VVFuny<<*YnN~4AQUMQhf1uwe=A=fq%>%=vAIYxBLQ=cq9ez zy|3K}oIpl^IGe#R`3zDmdZ>;X63}`g#zF6`am~-)SB@ZANF+a@D?IL{3O^{2;BnT5 zCW?9;?^_TCk+#orQ7`2te5?)MB1t|p!bmonqsw0u2|U%u^<X0hFbF@PtA9}yd$IIG z8AN9=Og_UM#Vt<22{?hwUvY_-#4=dkz#vIRx+Yl0`Utigp+}oO5%WX<0000<MNUMn GLSTZ#yNpi& delta 311 zcmV-70m%N(0@4DIB!3x6L_t(|ob8moP69y`M&}B~28~akp=LK(eFE()4Qg*;W#iIV znTUy%4Qpd%VXqQPJ9q-vWS5%26A+*w{9L|lfG`9qb~0PcNhUd&W=`%+hJ<F474VsT zJsymEmr!NwrS|{snolig1mP_BIC^wXyZ<GqGHM4Gh5PoK2Y-z)0m%xuwt}-UQw6Gw z6!G~_XjjDy6JP?QfE%abjD}o?DkHs1C*OX~hek*NbMm>+Wg$w?*uX=Da>MeV61ZPa z-U^D$^bFk^B7P}{c2TThV?dniSRMN^$qmrDf-5U{m@s+J*w`U<e?$8nDj@~LIrdGg zu0smY{t=k~6EI)`Ou((vJnWD94pbSLbjJVkvmI!J6rcm`0aNoj-XRy)JW&7u002ov JPDHLkV1h0)ilqPm diff --git a/assets/branding/generate.py b/assets/branding/generate.py new file mode 100644 index 0000000..adc6c70 --- /dev/null +++ b/assets/branding/generate.py @@ -0,0 +1,444 @@ +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "fonttools==4.67.0", +# "resvg-py==0.5.0", +# ] +# +# [tool.uv] +# exclude-newer = "2026-10-30T00:00:00Z" +# /// +"""Generate the OpenUrzędnik.NET branding assets from branding.toml. + + uv run assets/branding/generate.py # write every SVG and PNG + uv run assets/branding/generate.py --check # exit 1 if a working-tree file differs + +The font archive is downloaded once into a cache outside the repository +(%LOCALAPPDATA%\\openurzednik-branding on Windows, otherwise +$XDG_CACHE_HOME/openurzednik-branding or ~/.cache/openurzednik-branding) +and verified against the SHA-256 pinned in branding.toml. +""" + +from __future__ import annotations + +import argparse +import hashlib +import io +import math +import os +import sys +import tempfile +import tomllib +import urllib.request +import zipfile +from collections import Counter +from pathlib import Path +from xml.sax.saxutils import escape + +import resvg_py +from fontTools.pens.svgPathPen import SVGPathPen +from fontTools.pens.transformPen import TransformPen +from fontTools.ttLib import TTFont +from fontTools.varLib.instancer import instantiateVariableFont + +HERE = Path(__file__).resolve().parent +CONFIG = HERE / "branding.toml" +SVG_NS = "http://www.w3.org/2000/svg" + + +def num(value: float) -> str: + """Format a number with at most two decimals and no trailing zeros.""" + text = f"{value:.2f}".rstrip("0").rstrip(".") + return "0" if text == "-0" else text + + +# --- font ------------------------------------------------------------------- + + +def cache_dir() -> Path: + if os.name == "nt" and os.environ.get("LOCALAPPDATA"): + base = Path(os.environ["LOCALAPPDATA"]) + else: + base = Path(os.environ.get("XDG_CACHE_HOME") or Path.home() / ".cache") + return base / "openurzednik-branding" + + +def sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def font_archive(cfg: dict) -> Path: + """Return the cached font archive, downloading it when missing or corrupt.""" + directory = cache_dir() + archive = directory / cfg["url"].rsplit("/", 1)[-1] + expected = cfg["sha256"].lower() + if archive.exists() and sha256(archive) == expected: + return archive + directory.mkdir(parents=True, exist_ok=True) + print(f"Downloading {cfg['url']}", file=sys.stderr) + partial = archive.with_name(archive.name + ".part") + request = urllib.request.Request( + cfg["url"], headers={"User-Agent": "openurzednik-branding"} + ) + try: + with ( + urllib.request.urlopen(request, timeout=120) as response, + partial.open("wb") as out, + ): + while chunk := response.read(1 << 20): + out.write(chunk) + actual = sha256(partial) + if actual != expected: + sys.exit( + f"SHA-256 mismatch for {cfg['url']}: expected {expected}, got {actual}" + ) + partial.replace(archive) + finally: + partial.unlink(missing_ok=True) + return archive + + +class Font: + """One instance of the variable font, able to turn text into SVG path data.""" + + def __init__(self, data: bytes, weight: int) -> None: + self.ttf = instantiateVariableFont(TTFont(io.BytesIO(data)), {"wght": weight}) + self.glyphs = self.ttf.getGlyphSet() + self.cmap = self.ttf.getBestCmap() + self.upm = self.ttf["head"].unitsPerEm + + def _glyph(self, char: str): + if ord(char) not in self.cmap: + sys.exit(f"The font has no glyph for {char!r}") + return self.glyphs[self.cmap[ord(char)]] + + def width(self, text: str, size: float) -> float: + """Advance width of the text at the given size (no kerning, no letter-spacing).""" + return sum(self._glyph(c).width for c in text) * size / self.upm + + def path( + self, text: str, x: float, baseline: float, size: float + ) -> tuple[str, float]: + """Outline the text starting at x; return the path data and the x after it.""" + k = size / self.upm + pen = SVGPathPen(self.glyphs, ntos=num) + for char in text: + glyph = self._glyph(char) + glyph.draw( + TransformPen(pen, (k, 0, 0, -k, x, baseline)) + ) # font units are y-up + x += glyph.width * k + return pen.getCommands(), x + + +def load_fonts(cfg: dict) -> dict[int, Font]: + with zipfile.ZipFile(font_archive(cfg)) as archive: + data = archive.read(cfg["member"]) + fonts = {weight: Font(data, weight) for weight in (cfg["bold"], cfg["regular"])} + version = f"{fonts[cfg['bold']].ttf['head'].fontRevision:.3f}" + if version != cfg["version"]: + sys.exit( + f"Font version {version} does not match branding.toml ({cfg['version']})" + ) + return fonts + + +# --- SVG building ----------------------------------------------------------- + + +def element(name: str, **attrs: str | float) -> str: + """A self-closing element; attributes keep the order given (trailing _ and _ → -).""" + parts = [name] + for key, value in attrs.items(): + key = key.rstrip("_").replace("_", "-") + parts.append( + f'{key}="{num(value) if isinstance(value, (int, float)) else value}"' + ) + return "<" + " ".join(parts) + "/>" + + +def rect(x: float, y: float, width: float, height: float, fill: str) -> str: + attrs: dict[str, str | float] = {} + if x: + attrs["x"] = x + if y: + attrs["y"] = y + return element("rect", **attrs, width=width, height=height, fill=fill) + + +def svg(width: float, height: float, viewbox: str, title: str, body: list[str]) -> str: + head = ( + f'<svg xmlns="{SVG_NS}" width="{num(width)}" height="{num(height)}" ' + f'viewBox="{viewbox}" role="img"><title>{escape(title)}' + ) + return head + "".join(body) + "\n" + + +def ticket_outline( + x: float, y: float, width: float, height: float, r: float, notch_y: float +) -> str: + right, bottom, top_notch, bottom_notch = ( + x + width, + y + height, + notch_y - r, + notch_y + r, + ) + a = f"A{num(r)} {num(r)} 0 0 0" + return ( + f"M{num(x)} {num(y)}H{num(right)}V{num(top_notch)}{a} {num(right)} {num(bottom_notch)}" + f"V{num(bottom)}H{num(x)}V{num(bottom_notch)}{a} {num(x)} {num(top_notch)}Z" + ) + + +class Generator: + def __init__(self, config: dict, fonts: dict[int, Font]) -> None: + self.c = config + self.bold = fonts[config["font"]["bold"]] + self.regular = fonts[config["font"]["regular"]] + + def color(self, token: str) -> str: + return self.c["colors"][token] + + def label_size(self, label: str) -> float: + rule = self.c["ticket"]["label"] + if not 1 <= len(label) <= rule["max_chars"]: + sys.exit(f"Label {label!r} must have 1 to {rule['max_chars']} characters") + size = min(rule["max_size"], rule["max_width"] / self.bold.width(label, 1)) + return math.floor(size / rule["size_step"]) * rule["size_step"] + + def centered( + self, font: Font, text: str, center_x: float, baseline: float, size: float + ) -> str: + return font.path(text, center_x - font.width(text, size) / 2, baseline, size)[0] + + def ticket(self, label: str) -> list[str]: + t, top, lab = ( + self.c["ticket"], + self.c["ticket"]["top_text"], + self.c["ticket"]["label"], + ) + outline = ticket_outline( + t["x"], t["y"], t["width"], t["height"], t["notch_radius"], t["notch_y"] + ) + perforation = f"M{num(t['perforation_x1'])} {num(t['notch_y'])}H{num(t['perforation_x2'])}" + top_path = self.centered( + self.bold, top["text"], top["center_x"], top["baseline"], top["size"] + ) + label_path = self.centered( + self.bold, label, lab["center_x"], lab["baseline"], self.label_size(label) + ) + return [ + element("path", fill=self.color(t["fill"]), d=outline), + rect( + t["x"], + t["y"], + t["width"], + t["strip_height"], + self.color(t["strip_fill"]), + ), + element( + "path", + stroke=self.color(t["perforation_stroke"]), + stroke_width=t["perforation_width"], + stroke_dasharray=t["perforation_dash"], + d=perforation, + ), + element("path", fill=self.color(top["color"]), d=top_path), + element("path", fill=self.color(lab["color"]), d=label_path), + ] + + def base_ticket(self) -> list[str]: + """The ticket of the icon marked base = true, reused by headers and cards.""" + base = next(icon for icon in self.c["icons"]["icon"] if icon.get("base")) + return self.ticket(base["label"]) + + def wordmark( + self, x: float, baseline: float, size: float, ink: str, accent: str + ) -> tuple[list[str], float]: + body = [] + for part, token in zip(self.c["brand"]["wordmark"], (ink, accent), strict=True): + d, x = self.bold.path(part, x, baseline, size) + body.append(element("path", fill=self.color(token), d=d)) + return body, x + + def files(self) -> dict[str, tuple[str, tuple[str, int] | None]]: + """Map each SVG file name (no extension) to its content and its PNG (name, width), if any.""" + c, name = self.c, self.c["brand"]["name"] + box = num(c["ticket"]["viewbox"]) + viewbox = f"0 0 {box} {box}" + out: dict[str, tuple[str, tuple[str, int] | None]] = {} + + size = c["icons"]["render_size"] + for icon in c["icons"]["icon"]: + title = ( + f"{name} {icon['label']}" if icon.get("label_in_title", True) else name + ) + out[icon["file"]] = ( + svg(size, size, viewbox, title, self.ticket(icon["label"])), + (icon["file"], size), + ) + + f, t = c["favicon"], c["ticket"] + favicon = [ + element( + "path", + fill=self.color(t["fill"]), + d=ticket_outline( + f["x"], + f["y"], + f["width"], + f["height"], + f["notch_radius"], + f["notch_y"], + ), + ), + rect( + f["x"], + f["y"], + f["width"], + f["strip_height"], + self.color(t["strip_fill"]), + ), + ] + out[f["file"]] = ( + svg(f["render_size"], f["render_size"], viewbox, name, favicon), + (f["png"], f["render_size"]), + ) + + h = c["header"] + group = ( + f'' + + "".join(self.base_ticket()) + + "" + ) + for variant in h["variant"]: + words, end = self.wordmark( + h["wordmark_x"], + h["wordmark_baseline"], + h["wordmark_size"], + variant["ink"], + variant["accent"], + ) + width = math.ceil(round(end + h["padding_right"], 6)) + body = [group, *words] + out[variant["file"]] = ( + svg(width, h["height"], f"0 0 {width} {num(h['height'])}", name, body), + None, + ) + + s = c["social"] + tx, ty = s["icon_translate"] + group = ( + f'' + + "".join(self.base_ticket()) + + "" + ) + words, _ = self.wordmark( + s["text_x"], + s["wordmark_baseline"], + s["wordmark_size"], + s["wordmark_ink"], + s["wordmark_accent"], + ) + for card in s["card"]: + tagline, _ = self.regular.path( + card["tagline"], s["text_x"], s["tagline_baseline"], s["tagline_size"] + ) + body = [ + rect(0, 0, s["width"], s["height"], self.color(s["background"])), + *( + rect(0, y, s["width"], height, self.color(token)) + for y, height, token in s["bands"] + ), + group, + *words, + element("path", fill=self.color(s["tagline_color"]), d=tagline), + ] + viewbox_s = f"0 0 {num(s['width'])} {num(s['height'])}" + out[card["file"]] = ( + svg(s["width"], s["height"], viewbox_s, name, body), + (card["file"], s["width"]), + ) + return out + + +def render_png(svg_text: str, width: int) -> bytes: + return bytes(resvg_py.svg_to_bytes(svg_string=svg_text, width=width)) + + +def validate(config: dict) -> None: + """Fail on definitions that can't produce a consistent set of files.""" + icons = config["icons"]["icon"] + bases = [icon["file"] for icon in icons if icon.get("base")] + if len(bases) != 1: + sys.exit(f"Exactly one icon must have base = true, found {len(bases)}: {bases}") + favicon = config["favicon"] + names = [ + *(f"{icon['file']}.{ext}" for icon in icons for ext in ("svg", "png")), + f"{favicon['file']}.svg", + f"{favicon['png']}.png", + *(f"{variant['file']}.svg" for variant in config["header"]["variant"]), + *( + f"{card['file']}.{e}" + for card in config["social"]["card"] + for e in ("svg", "png") + ), + ] + counts = Counter(name.lower() for name in names) + duplicates = sorted(name for name, count in counts.items() if count > 1) + if duplicates: + sys.exit( + f"Duplicate output file names in branding.toml: {', '.join(duplicates)}" + ) + + +def build(directory: Path) -> dict[str, bool]: + """Write every asset into directory; map each file name to whether its bytes changed.""" + with CONFIG.open("rb") as stream: + config = tomllib.load(stream) + validate(config) + generator = Generator(config, load_fonts(config["font"])) + result = {} + for stem, (text, png) in generator.files().items(): + outputs = {f"{stem}.svg": text.encode("utf-8")} + if png is not None: + outputs[f"{png[0]}.png"] = render_png(text, png[1]) + for file_name, data in outputs.items(): + target = directory / file_name + result[file_name] = not target.exists() or target.read_bytes() != data + if result[file_name]: + target.write_bytes(data) + return result + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument( + "--check", + action="store_true", + help="generate into a temporary directory; fail if a working-tree file differs", + ) + args = parser.parse_args() + if not args.check: + for file_name, changed in build(HERE).items(): + print(f"{'wrote ' if changed else 'unchanged'} {file_name}") + return 0 + with tempfile.TemporaryDirectory() as temp: + names = list(build(Path(temp))) + changed = [ + n + for n in names + if not (HERE / n).exists() + or (HERE / n).read_bytes() != (Path(temp) / n).read_bytes() + ] + for file_name in changed: + print(f"differs: {file_name}") + generated = {p.name for p in HERE.iterdir() if p.suffix in (".svg", ".png")} + for file_name in sorted(generated - set(names)): + print(f"warning: no entry in branding.toml produces {file_name}") + print(f"{len(names) - len(changed)} of {len(names)} files up to date") + return 1 if changed else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/assets/branding/generate.py.lock b/assets/branding/generate.py.lock new file mode 100644 index 0000000..1e4dec4 --- /dev/null +++ b/assets/branding/generate.py.lock @@ -0,0 +1,124 @@ +version = 1 +revision = 5 +requires-python = ">=3.12" + +[options] +exclude-newer = "2026-10-30T00:00:00Z" + +[manifest] +requirements = [ + { name = "fonttools", specifier = "==4.67.0" }, + { name = "resvg-py", specifier = "==0.5.0" }, +] + +[[package]] +name = "fonttools" +version = "4.67.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/36/102e180f8f5dbaee88b26595b01ca8aa80bf4e62128d9aa94265b3996c96/fonttools-4.67.0.tar.gz", hash = "sha256:3cb57e6600ca77c0b1729cf8adc23bc0652633a37f18cfa934d9c7bc3de25519", size = 3750028, upload-time = "2026-10-14T13:20:28.294Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/50/f674402869f11a89868c4755ae86cd2fcfd67ca6193c6f5d1b479b1267b9/fonttools-4.67.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fcb9743140419410161acfe7ec205fb0a8a703acfccb85b586becb5a97c047c9", size = 3108316, upload-time = "2026-10-14T13:18:39.162Z" }, + { url = "https://files.pythonhosted.org/packages/e3/c8/5963603c5f9bbc28bde3a29dd7cdbe0bfcbee414b0f7eccec04ae477e1b6/fonttools-4.67.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ad813967410ba6d24a52850df59b164ee17883f17b96a91b4b0ac6e9d7b5a118", size = 2598450, upload-time = "2026-10-14T13:18:42.136Z" }, + { url = "https://files.pythonhosted.org/packages/25/6d/f8e5924917a6b5c0296fb507f748c139a34972f66e91d89159d5c98e27b2/fonttools-4.67.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:768a33bbe6ec5ba8f19979f938752f06d4e614cb554fd47abd7830f2007660e3", size = 5427391, upload-time = "2026-10-14T13:18:44.248Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e0/ec9e4cc868c514deb02233aa1047a6aeb9350d3ee012862f58eec10ef834/fonttools-4.67.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:eb3c98cac93aac4b9f6e3ce2008325340b234cc9b0338ca6b513f31962a1e278", size = 5408233, upload-time = "2026-10-14T13:18:46.616Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4a/fe409cb3ab32f322de92e08e6362cd06bf6dd5f0cee5980d823849e9bd11/fonttools-4.67.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e0ca4c8438dd6320f5850c9bbee3b3980455ee3bac602a9a0299caf9e799a0e8", size = 5364778, upload-time = "2026-10-14T13:18:48.926Z" }, + { url = "https://files.pythonhosted.org/packages/de/5b/2a8dede092113be56329dd210deb6b34c55df2f3d7270934ffece8c7d0bb/fonttools-4.67.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2a09d33a9264a6b29efca9dc633b53969aaedb250a9c8521d60f51280cef65ca", size = 5528522, upload-time = "2026-10-14T13:18:51.297Z" }, + { url = "https://files.pythonhosted.org/packages/6c/de/d3baf686e4ac5726a24819a670747c51571c774dcfa41cc0528e5e8c1a2d/fonttools-4.67.0-cp312-cp312-win32.whl", hash = "sha256:e8a8545cbd58bd29494ffe81e3cb35f8a29332a8e495c42bec334145ce8cd65b", size = 2446090, upload-time = "2026-10-14T13:18:53.379Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3a/625a6dd0173e88dbea1826405b4bcbfa06c6ca095310ed720caba36b2e43/fonttools-4.67.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bfab2f5d1d255dec82f4bd082a1c10e77df808e42210890f50a9c30bf91570e", size = 2497985, upload-time = "2026-10-14T13:18:55.245Z" }, + { url = "https://files.pythonhosted.org/packages/30/b4/cd473e0a48427003733e92bc3e8077081ba537eb33f7c658f2b7bef63776/fonttools-4.67.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8239e2ca24878715a19f061d065b5721e87da81d145e48b3418f771a469b5a24", size = 3106141, upload-time = "2026-10-14T13:18:57.238Z" }, + { url = "https://files.pythonhosted.org/packages/ef/36/04d74f0c71d93829657a703d680a54968253bbb5c93babc34378eae2087a/fonttools-4.67.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1be99c1f07fca59510d657ef3eae584b5273fa4e203aff2383b3520744e19536", size = 2598180, upload-time = "2026-10-14T13:18:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e6/b0cbdedb363a49043d704d8c7903543fdd317596409fb8ac2cb604c1e73c/fonttools-4.67.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad8b4f7c754a627e91908fa1a1ccc90b489cd2810c0ba16acd26ea2ff5273db7", size = 5400755, upload-time = "2026-10-14T13:19:01.557Z" }, + { url = "https://files.pythonhosted.org/packages/a8/26/939ae9874dd44116f2ecf61cb0caf029e3004ec1ed311a86389dee3450be/fonttools-4.67.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:50c41e30aa2e0130b80d1a58ac0f3ea7c02a854a70dbea1ff8d88e0ce524806f", size = 5382979, upload-time = "2026-10-14T13:19:03.726Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/35a0a34ab74609d2e8dc7a1f45f6386c81942868fc4fdf8e873878f392fd/fonttools-4.67.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0781fe22583529e1e98bb8a3a33040632e202a4c427ed7e65412c41a21b8ebcb", size = 5343745, upload-time = "2026-10-14T13:19:06.055Z" }, + { url = "https://files.pythonhosted.org/packages/bc/90/293577941809c3ec5a7f0870c01b3729c682467a858b8978a5c3ea54c226/fonttools-4.67.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:36f0fee56227b909c9d1392f17b23803616f1f04efbe020c176d9945cabc0be5", size = 5501573, upload-time = "2026-10-14T13:19:08.241Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3c/4e25460f37840c51b3983a7a83ceef7a1efa9ea588aca6f0e3a852f4b120/fonttools-4.67.0-cp313-cp313-win32.whl", hash = "sha256:48696b630069e29b8aa5ea8b034e4f651a2e112073938ec16bd536dadde1debf", size = 2444457, upload-time = "2026-10-14T13:19:10.463Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f6/39e9461211309965514642c005a8d51e866a1092f69f5f693b16de9c5395/fonttools-4.67.0-cp313-cp313-win_amd64.whl", hash = "sha256:7343cd0ef70edf8be7f4913cb9b55b992fb4e04055b47dcfecddcc2eb045a9d2", size = 2496147, upload-time = "2026-10-14T13:19:12.588Z" }, + { url = "https://files.pythonhosted.org/packages/25/5b/c418f48918e40ef8c3f0f555567fe013c0c8058a8afa8040d6baeec80683/fonttools-4.67.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:846982e89b1861d6c9d7fcd6567aec3fa5a10ad313e7f2076045fcd339cfbd8e", size = 3110155, upload-time = "2026-10-14T13:19:14.877Z" }, + { url = "https://files.pythonhosted.org/packages/30/18/49013c643c3d56fce1b7e909ef7c01c36a5bd906dfb58571c9dcdaa4dc38/fonttools-4.67.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:952eb091689545d86d16e40f719ed7bb086dd810a07dcc9ea2ca0a81004810a3", size = 2599657, upload-time = "2026-10-14T13:19:16.93Z" }, + { url = "https://files.pythonhosted.org/packages/1f/2c/b7f33fa3bd1e4afdf9bf93b760f22486350eda487ce76c47f5931f868957/fonttools-4.67.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2b5d511ea012dce7bd6df12b279b7d7a5b01b019865717d03ae679f4b944fa5", size = 5385200, upload-time = "2026-10-14T13:19:18.868Z" }, + { url = "https://files.pythonhosted.org/packages/79/fe/fef04b2cc2930edba11095f9e9b5c2797f8594fc54316195cc39d3c3bc63/fonttools-4.67.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:916836845e4b1c1447bb61390ffb3cb5f2940fd9f5d6de4685539a81806c7764", size = 5328754, upload-time = "2026-10-14T13:19:21.179Z" }, + { url = "https://files.pythonhosted.org/packages/2e/c6/41cd4f6137f61dd059cc0609b73d9556091ecfcc8cb4d3cc543129c8ec24/fonttools-4.67.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:775364ac079e2ea7a2eedb5f9172c57b059d638ff79e2bf8d4257e5805713f32", size = 5327159, upload-time = "2026-10-14T13:19:23.153Z" }, + { url = "https://files.pythonhosted.org/packages/53/5c/08abd0a6d5c36624411e1b934745b4689d4309b03e98d8cf49f9469c63b6/fonttools-4.67.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b3ddf350e74508102b33dc6b32984b6dd751359a7c57732bcd39f9d7cb37d71e", size = 5460332, upload-time = "2026-10-14T13:19:25.454Z" }, + { url = "https://files.pythonhosted.org/packages/b5/0f/59e835023817fe3932653067fde74960a0800fb95535375d8206aa9ecd68/fonttools-4.67.0-cp314-cp314-win32.whl", hash = "sha256:72d6d316dffc92eadb771f697f289ea7b60f689580931328905a267bd170f93b", size = 2448714, upload-time = "2026-10-14T13:19:27.73Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/5230265a5ff16aead01ce1a432a6b5bbdabe086f433988f41a1395e6dff8/fonttools-4.67.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e2c1586b5b6588a47d02e2588170eefdc996b708f2659c44dbe169bd6fcacb5", size = 2500790, upload-time = "2026-10-14T13:19:29.906Z" }, + { url = "https://files.pythonhosted.org/packages/b3/38/d899d7bbbe04d27dd509ac6b8f58f73fc240bb1dfe0ada9a9d33ad3bf9f2/fonttools-4.67.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:84a3aed005de106fb1794372dace82eca50859d52ae26da4bb6c602480a41250", size = 3183808, upload-time = "2026-10-14T13:19:32.015Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f6/4f465a62972e383b3d82205841b93f625a4e5ece6e5693c5be2a691ffe6d/fonttools-4.67.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:64e56d0d6a39780fee86955c758674538387b18f911ea904a4aae8f8e30fa26f", size = 2632826, upload-time = "2026-10-14T13:19:33.854Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/ce1ae8f8baa75feb2320caf6f74d2c228eba210a13b3e0895c0403e5e987/fonttools-4.67.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c21073cfe7129aaa070d94f575c1e2a880ae4aae1dcffd5352f174b96d27d16", size = 5557857, upload-time = "2026-10-14T13:19:36.086Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1c/495fe0a6bb8625e693c1417e178aeac42a11aa47e79efd7611c7bc5fb81e/fonttools-4.67.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:720bcf27727193b0fe1883c2e036dc88e37047916e977f5c3daf6ee4316e9656", size = 5364450, upload-time = "2026-10-14T13:19:38.5Z" }, + { url = "https://files.pythonhosted.org/packages/19/9c/d9730d3dd32e39583d6db929d0867df02042539bb0ebc3ad3d92a52a6aaf/fonttools-4.67.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6c19a770a8d273371a37969003c143eaa629ab893c3db028af8b91d04c6f9a6d", size = 5425231, upload-time = "2026-10-14T13:19:40.659Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c6/d41c1163431828b0fa2172e867798e0c4517ac6606e774b9175e048fb666/fonttools-4.67.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:13d7507252c5a5d7941a5fa1be27d335c378ef07983ea2bb24988bf600eadd5e", size = 5460574, upload-time = "2026-10-14T13:19:43.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/af/14885b78b1c1ff7219f890b79a5a6f76608d907c171b40e43839de995f54/fonttools-4.67.0-cp314-cp314t-win32.whl", hash = "sha256:07a2f36b3263faadf5b7b548f62fd3cac401e490189c82b16f7139ac0df91cd4", size = 2482468, upload-time = "2026-10-14T13:19:45.91Z" }, + { url = "https://files.pythonhosted.org/packages/cf/33/3d660eb850d24a81b4097ed46a1352c4ac0e4c10025526fa115e1871fc64/fonttools-4.67.0-cp314-cp314t-win_amd64.whl", hash = "sha256:fd79e36c2968e9fc3e1b082f2ba7dc63ae88a161a3d8ceaa0746b906455f3617", size = 2532326, upload-time = "2026-10-14T13:19:48.023Z" }, + { url = "https://files.pythonhosted.org/packages/b2/74/ebff33b3c6dfe77d86a1b67b470c3d817f044910203880a1f4e92a08bec2/fonttools-4.67.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:89ad62d116f45bb45873bb92fd69c14a720ba591cba488044731954a5565e194", size = 3104541, upload-time = "2026-10-14T13:19:50.418Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f5/7b3b786447cdda91f8cd06e44bf3b906e71825118f5cbb9b69c099415152/fonttools-4.67.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:1671e5f368b0c136ed9fb62fef26c7e425b4ebb0bb669a1cb7ba453f5bba580b", size = 2598216, upload-time = "2026-10-14T13:19:52.388Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c8/c0c08d8a76b2ed460bf8b63642d98445aa18179a14005cae617bfe9ec732/fonttools-4.67.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:451077d2fc61a2a03f5dca54d84fbb01051ad781f48ea137eff35c775a4cb025", size = 5382399, upload-time = "2026-10-14T13:19:54.344Z" }, + { url = "https://files.pythonhosted.org/packages/3c/db/66b5ef9985c7d69f7b3521ee965c3093b1802322fb6c16e8c3da608b747e/fonttools-4.67.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f200cd2cf046a5a0b03babe84ebf8bbc12187d5d57f50bc03f24be89e7c1605", size = 5345746, upload-time = "2026-10-14T13:19:56.472Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b0/77d22a73d5cfce9651909583ea3011c7ab26daf155b0eb21f7a3f02ac78a/fonttools-4.67.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:bd3239e5709fd4c3343db67245ede46aece610d7f7ef61afb174718122479282", size = 5322591, upload-time = "2026-10-14T13:19:59.539Z" }, + { url = "https://files.pythonhosted.org/packages/97/b8/d3e7b799186fc3213a31d0cfa2c553c5d8eed0a7c7960dc3cf7c0d0497fa/fonttools-4.67.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:b274ed3106b8086f237b7dbb1529c28142ba10ae40b9d285be0ae6a44b2946d0", size = 5470360, upload-time = "2026-10-14T13:20:01.876Z" }, + { url = "https://files.pythonhosted.org/packages/b7/89/c9799e81e6de16196d4781dbb81136d354eaef07136607917275a5fe958f/fonttools-4.67.0-cp315-cp315-win32.whl", hash = "sha256:fc6b6b03aa44f504c8734e62ccc3e4dcda9f4b8213a85aa80742e4d1cc9d96ef", size = 2447522, upload-time = "2026-10-14T13:20:04.197Z" }, + { url = "https://files.pythonhosted.org/packages/79/48/40f5591bd0e198d34ee3e25710e730c824750b3c822fc0a65b08e193de80/fonttools-4.67.0-cp315-cp315-win_amd64.whl", hash = "sha256:592d8f72024dea0408739a92599e4f839b960e1e887b25adc76dc87271fdac76", size = 2499770, upload-time = "2026-10-14T13:20:06.54Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5c/f98ee788f76ffad100427c20abab3a6213b37c97575dc82e4ccfaaafbc55/fonttools-4.67.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:9c38fece8156cbda31b42d49c4a187858056a35932b88233b6fb31eaca5cf67f", size = 3175346, upload-time = "2026-10-14T13:20:08.7Z" }, + { url = "https://files.pythonhosted.org/packages/e3/b1/af3016813fd44c0ed32d37f3a12cb707efd99edd8205bd8b73aea1f0f542/fonttools-4.67.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:3b34324deb3e09ad648039a0a86d945b83f23a44fe3da74a84e6ada71fe0b650", size = 2629083, upload-time = "2026-10-14T13:20:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/b5/bc/13b45dec208145da2c49c063b6ce73ddb2e6e3bd137ba3613562d686a013/fonttools-4.67.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a19f6d5e1a373f2e4a5bdb9452c8ba212dd9f1e43df2fff042b896e28084e4a", size = 5535751, upload-time = "2026-10-14T13:20:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8c/01f2f16066c802ad2cd6f3321c226240475b30ada91d69d493f7a40445a7/fonttools-4.67.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ccaa87b312219d02cf72a79f1eb2f3ce028882d6fd1b79336141005db83b84e", size = 5357413, upload-time = "2026-10-14T13:20:15.289Z" }, + { url = "https://files.pythonhosted.org/packages/84/e6/d6dff534e9cb8688ec7ecddc353609bca580efef9967334e2289f56bd9da/fonttools-4.67.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:38fc772182ebff3e2ebba7886460476eb65842b601ca0b9221a6a5826136396e", size = 5403722, upload-time = "2026-10-14T13:20:17.535Z" }, + { url = "https://files.pythonhosted.org/packages/39/c8/4de02224adea134666e6705b0137cd3df2df60a03ce100797b2b221a73dd/fonttools-4.67.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f672398385849ff79e7dd50c0a06efe110c8ba23d8890f9b45fbb922bc2f55f6", size = 5450104, upload-time = "2026-10-14T13:20:19.612Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e1/3a32904bac7c3460e23a86e9e1529b40d0969a69bd4edefa31e2d2f1bae7/fonttools-4.67.0-cp315-cp315t-win32.whl", hash = "sha256:77e0d4096a2ac60aebe43928b5382766df2d148577db8e8ff79b6a50879a6c06", size = 2479606, upload-time = "2026-10-14T13:20:21.996Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c5/8834cfb95383059addca24f591379d152f137689ff63766736c26b0f9b25/fonttools-4.67.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8c58a8a9ad447bead6f91e5f50b23c0e4988538cdbd9bf2f68952b39f5900a84", size = 2527993, upload-time = "2026-10-14T13:20:23.949Z" }, + { url = "https://files.pythonhosted.org/packages/3d/61/4161946319472aaa9b897bd18ad5108a5b10f5ebaa503d921a001ac4fff9/fonttools-4.67.0-py3-none-any.whl", hash = "sha256:4304f03ed7f4ba000a8dcc941ad854bfa52e2f3b6112b8f099b6f431cf98e701", size = 1213142, upload-time = "2026-10-14T13:20:26.258Z" }, +] + +[[package]] +name = "resvg-py" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/64/a24f8f29d8bf158e01f6ccad68a1366afd922dc0f0977cbd0c0aaa7a22f2/resvg_py-0.5.0.tar.gz", hash = "sha256:6d3bf8e866b4e129524d9432a809138b2d100931d8d635bc81294002abcdfd46", size = 1756395, upload-time = "2026-08-24T19:43:27.663Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/89/49f7c84a2a3fc3d2b9973134f72f95467a40acfbc7ca5d820aeb06af6e79/resvg_py-0.5.0-cp310-abi3-android_24_arm64_v8a.whl", hash = "sha256:2715f2b88ce2cf91f57ff37bb34c5909c8007de431d488e9c3ebf6cf2d69c91b", size = 1370989, upload-time = "2026-08-24T19:42:09.747Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d1/09ebd099134589225861e0668c9fdff103b0450df0e399689787a0d8962f/resvg_py-0.5.0-cp310-abi3-android_24_x86_64.whl", hash = "sha256:9901e2f9ce53e7535d2676123c8d4894bff040f52821e54192605b5dd4fb5af9", size = 1366983, upload-time = "2026-08-24T19:42:11.479Z" }, + { url = "https://files.pythonhosted.org/packages/ed/36/3408156e9cba54d1ef5793377f39be4096660933cc6df155ba425315bf09/resvg_py-0.5.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9d3f5c2544d6b5f74847513e07e6ab6a70f9e7f0d8a141bc16bd4b0c555f4234", size = 1261946, upload-time = "2026-08-24T19:42:12.703Z" }, + { url = "https://files.pythonhosted.org/packages/74/bf/4083b177388125e5ce2ab9fa4cd9efd881fa133dd97e5b2d4ca68e543256/resvg_py-0.5.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:7b43f942157f5d16126e108dab8ab37e4bc2b198099e5f6274b753a3b1ac7b6e", size = 1216814, upload-time = "2026-08-24T19:42:13.943Z" }, + { url = "https://files.pythonhosted.org/packages/52/92/1dfd0d7b5f8dbb16f9c889bba0d7477ab514d1f2a81a5f904662215103bc/resvg_py-0.5.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e66216f78c84a27d34ce75f4535d8e26565771be4f1848ddc71e8a7ce78973a", size = 1414542, upload-time = "2026-08-24T19:42:15.538Z" }, + { url = "https://files.pythonhosted.org/packages/13/99/a77f933e6cc355fd168f6eae2e23b5d361cb61531bfb83477f9816a62a49/resvg_py-0.5.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:977921f22b0a3283e6cd121339a2aff51d0df3b542ce7a5f96fa3a87f8d65106", size = 1321567, upload-time = "2026-08-24T19:42:17.142Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/a9d0cf6cee5fb1bf3abdba760821f76e1c979f81923c0bf54279dd1a285e/resvg_py-0.5.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da8e52d7d5d16b288aa47fa830fd66301a6b6f135f9f37fa9f4854b7a722e6d", size = 1501716, upload-time = "2026-08-24T19:42:18.482Z" }, + { url = "https://files.pythonhosted.org/packages/5e/f2/cf7390e196923a0f591981d3f2754f70825f0a8b206d0778866806ba1159/resvg_py-0.5.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:200baa4a01b6779d7b6f3fa31e5eabfc5ab594a1317d75853ee73c5229686599", size = 1450509, upload-time = "2026-08-24T19:42:19.601Z" }, + { url = "https://files.pythonhosted.org/packages/9e/08/217f2289ceb16a4eafd9c9c6f69aa3221ef047a6abe4ff1ce5c8d6be87d8/resvg_py-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84f2378ecc7a8e38b03429efaefc816daec1b1970114909a6f973393b297c91b", size = 1405807, upload-time = "2026-08-24T19:42:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d6/b3b9411b5b812799621ee43844552cbf7c0ddc2d5a552f5e91ba808ac67c/resvg_py-0.5.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ebcc40941811b49001ad4e721aa87f489b74c0132ff3fcbceed97305c944749", size = 1491386, upload-time = "2026-08-24T19:42:22.131Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e6/5d8e0fac79e19ec95db6902ab03f3e681a69183a0a959fb081a7385c9e7e/resvg_py-0.5.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7c3e8c2324fc2bcf03c1010b7987adf5ff4ce43e8fc1a7c9b8271cbbcca6ba37", size = 1593186, upload-time = "2026-08-24T19:42:24.057Z" }, + { url = "https://files.pythonhosted.org/packages/a4/81/db56ea6225d0294dfc5e96fa18d16231e33cd1812a75c4cf03e8e17586cc/resvg_py-0.5.0-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:4a5db1a607059a48f5d4c20c7363e4888e001b11a04465d36e3ca77a511651eb", size = 1600258, upload-time = "2026-08-24T19:42:26.11Z" }, + { url = "https://files.pythonhosted.org/packages/24/66/43c32a28e5d19ada46c8589cb3eaef5db0dc151be1aec0e86a68b9534ba7/resvg_py-0.5.0-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:d54a8c85e7d6f4ba55f39c2330c7830d8c98a7dc205ca3c2ca069f9b11cb01c4", size = 1653522, upload-time = "2026-08-24T19:42:27.674Z" }, + { url = "https://files.pythonhosted.org/packages/65/01/91794e3dedcfaf93b780ecd4cf0061262fd2665034756773f7e768812389/resvg_py-0.5.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:feee1ee6c2c0b64018c046a7604240c233c6cf14496e475238370c7d9a9db455", size = 1622060, upload-time = "2026-08-24T19:42:28.858Z" }, + { url = "https://files.pythonhosted.org/packages/dc/20/a7d7371a4104fd733702b942c396fd898510431ee3a1d2f7b4462da65117/resvg_py-0.5.0-cp310-abi3-win32.whl", hash = "sha256:45b2e66f76e7649155dc768c3cd1f5a94907d0086c2bde22da14c9ecbf9eda9a", size = 1204672, upload-time = "2026-08-24T19:42:30.191Z" }, + { url = "https://files.pythonhosted.org/packages/fe/53/aa8f92ce6eb2f97095d8b6359a1613c5a5ee0aa9b1a33434df9294362979/resvg_py-0.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:1f6b8956c4143dbfe107bcd35799d0dfd778a40a8cd537893c0bf489898a6c3c", size = 1242277, upload-time = "2026-08-24T19:42:31.42Z" }, + { url = "https://files.pythonhosted.org/packages/56/64/e63614663df1404999802e82d462ffa534999c126067257bfba7d1de590c/resvg_py-0.5.0-cp310-abi3-win_arm64.whl", hash = "sha256:8016e2006c09953570af466e7674c398c1f255cb00022152b15e18f9e8ca3af8", size = 1153784, upload-time = "2026-08-24T19:42:32.607Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1e/4e24cdabab6c4f9b2d1175fe6b57f07f24625a6a8e1ff331a2a4a28da3a6/resvg_py-0.5.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5547fc79ee600ee0e40ad01cdeb36140a74e85cfad2722973dae654db3667fcd", size = 1261363, upload-time = "2026-08-24T19:42:33.844Z" }, + { url = "https://files.pythonhosted.org/packages/d7/98/d4d0128dc2fd71eeaaa4e82d6c5a6213a89bcc96dd03b759fb7a5588c496/resvg_py-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4bd8da85e5332aded549894d7fe4aec6f19a681ecda3385acbfdf1a1c67bc8da", size = 1216436, upload-time = "2026-08-24T19:42:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/4e/74/34fde2a05e81b6fd57445b18660fb7c3c2c988908cdf59f57f2481c98606/resvg_py-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1447c10535c4fa122bb20f702da5d23ad5053cdff831aa2d6f6b482ebab12485", size = 1413277, upload-time = "2026-08-24T19:42:36.295Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e0/0225387a65b51a9e2a5b6a11a517e777b82e887db4b67e6e44d44607cf18/resvg_py-0.5.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1ed526890579f8bf1afcf6c17f29c22659196c57b2c760e485f15dfc93dca64", size = 1320862, upload-time = "2026-08-24T19:42:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/49/25/033b4ff263788ea10ae8e5ab2c445e8dcf0d78941b322781f8abe323dc73/resvg_py-0.5.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfe18bc3d36cc885190f450d5f0d26473c5cecb86b28bcb714f7a025e1cfd5c2", size = 1500068, upload-time = "2026-08-24T19:42:38.978Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5a/472629604d6d0fbae13648d3ef378727b533e71baeff3403367b5efa9ae2/resvg_py-0.5.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8481cdbaf7fea5dbf2bfe57e86201c6a40193c462e365729185c66849b5966a", size = 1449571, upload-time = "2026-08-24T19:42:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/8c/50/9776c9a2181205a21f90c1a14cd1deeacccb66d19457cf9b9cc25ebba17d/resvg_py-0.5.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12cdd0349ebd8efaade78f74fc3fc08fcdd3f21f7152fb199a561176a64581bf", size = 1404321, upload-time = "2026-08-24T19:42:41.391Z" }, + { url = "https://files.pythonhosted.org/packages/39/ec/78f53523b7c387312b0b790d33373d502eaf41310953baf2b17e18812d36/resvg_py-0.5.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c184cad5c3593dbe655ef9f304068fa941646947d94767dbd1afcbf094c8dae5", size = 1490813, upload-time = "2026-08-24T19:42:42.766Z" }, + { url = "https://files.pythonhosted.org/packages/e8/4e/ac6077896efb94d8c7ebe08552da48c323c657554e715c80f4e8e8f30cca/resvg_py-0.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:75e6822b492c66d85f03a6f2510ac69902ff0509a2a86cd50ef30ebb73c714ea", size = 1591632, upload-time = "2026-08-24T19:42:44.129Z" }, + { url = "https://files.pythonhosted.org/packages/3f/49/7dfe358ac7d52849b16ef98ad2cd4a41f77a87cff96122da095861fbb070/resvg_py-0.5.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1abaadac95daa2907e3fa0f668c90a099d4bfffe0a6fa7cf36d30c607bfd5797", size = 1599831, upload-time = "2026-08-24T19:42:45.373Z" }, + { url = "https://files.pythonhosted.org/packages/d4/d2/f53350c3b2c512ae9d6ab4ae39db20bb573048bfcc60fdd5213ab7474d81/resvg_py-0.5.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:92cdc56331224980b85c1604c7da9bef37737657cf123d88e920ca10a07c6a11", size = 1652833, upload-time = "2026-08-24T19:42:46.758Z" }, + { url = "https://files.pythonhosted.org/packages/ac/04/d958e02af538996ce963baa88d47667fc28c72b72aefea78546ab89a6288/resvg_py-0.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:403fed36186bbe4ef4eb3ec1d5fabe003a1c90ad71f145ca0e9b9f7f80e70696", size = 1620547, upload-time = "2026-08-24T19:42:48.173Z" }, + { url = "https://files.pythonhosted.org/packages/10/9d/8dc520a62512f309bc74dddee8309d8a940ae1ee80317825b5ef705d3b4e/resvg_py-0.5.0-cp314-cp314t-win32.whl", hash = "sha256:c7fad8f8c28e770da8783dc429bfa0d71f2abe740be2f8d726308a669a392919", size = 1204113, upload-time = "2026-08-24T19:42:49.398Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0b/8edd6a94ed6c9d8306008c277c0e5f0d74df87cd2109eaff86ded437fcad/resvg_py-0.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b0284c50c7e3b009e97e5c64a2d31e02b8bb36cd066d947fda9e43f480ca19f7", size = 1240324, upload-time = "2026-08-24T19:42:50.87Z" }, + { url = "https://files.pythonhosted.org/packages/76/78/bdeb2fc44497c53c9f53e05acf58a571dc2589465031e37b9de8c0e57044/resvg_py-0.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5c026b67b79604f32865e132ef68ff25633b8668e35b29ad412fcef906c0c39a", size = 1152505, upload-time = "2026-08-24T19:42:52.06Z" }, + { url = "https://files.pythonhosted.org/packages/0e/d1/2f85ce0ec44642a849a57a709e121dd2fa934ea1a54d77bb31e8f4aea7e8/resvg_py-0.5.0-cp315-abi3.abi3t-macosx_10_12_x86_64.whl", hash = "sha256:51fa0564ad1a3e82307c1aed7222b66edeb3b8c595251709f929b0a819109da1", size = 1261198, upload-time = "2026-08-24T19:42:53.279Z" }, + { url = "https://files.pythonhosted.org/packages/51/0c/b7af93cfd9bbcd83a4c8970e17dcf4917f12d3b88b695fa9a9b86913d375/resvg_py-0.5.0-cp315-abi3.abi3t-macosx_11_0_arm64.whl", hash = "sha256:1f91870d5315168093d546777fccece4406ad2053c1908f5ceab3c39f2c49e7c", size = 1216652, upload-time = "2026-08-24T19:42:54.876Z" }, + { url = "https://files.pythonhosted.org/packages/85/e8/2d6dbd6cf5be1871248d9e6307b4f42e916a16d83c13590ace9dccb8f49f/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d597eef189a8e728c8026417ea51b61720c83d2ed262b508362c4309cd57bc8a", size = 1412990, upload-time = "2026-08-24T19:42:56.491Z" }, + { url = "https://files.pythonhosted.org/packages/2d/10/c10989f4eebd61242134a0bc1e26a2eaf618cf911115e447ea570bfd9bdb/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5befa08450f4248b9670e054f446065d0fc33c1a4ff302baaacc205ddee97b3c", size = 1320774, upload-time = "2026-08-24T19:42:57.697Z" }, + { url = "https://files.pythonhosted.org/packages/de/ae/b6416f0d984a445d2ba962dd39750dd0f79c16346517f8f98b595bbdb37c/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17640c3bb2f4498a6aa61d256ec21257b32e68fd2564b509c4919f5171561b99", size = 1500202, upload-time = "2026-08-24T19:42:58.886Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/f44bc28c82e3f21065a0b721ddae31769420747f99b807df83560dc75697/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fca2d6b28938e7fa7553a7f9c5f330b908c7fd8c50f4fe3d175ddcc5e958879", size = 1449452, upload-time = "2026-08-24T19:43:00.044Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c9/c4cbcbbe45d327a669c4c346cdef9253a50e052c102da4fc92576e407041/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c4cc14543c29b753db751eace1dadcf0d58d77aa58be5370393bcfbcc1cbc2f", size = 1404433, upload-time = "2026-08-24T19:43:01.57Z" }, + { url = "https://files.pythonhosted.org/packages/60/03/7b7c89086cb7cbede4e21bcbbf2870d62564dcce71fc23fa97de67293ba5/resvg_py-0.5.0-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:869e4ab0b8f4a403d6fac93d2c4e3df79488b9f6fd053ba0f4fa4ed45d456fe5", size = 1490660, upload-time = "2026-08-24T19:43:03.026Z" }, + { url = "https://files.pythonhosted.org/packages/99/07/4a9595a3c760c91006ac4753ced8daabd2c6d64024ca668e2867bb84a283/resvg_py-0.5.0-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl", hash = "sha256:f322d7bf0ddab60156d6cf1883718b726c1c210bd7623e253756986798c5c83e", size = 1591455, upload-time = "2026-08-24T19:43:04.404Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7e/c2151824834b6df07083489a959cab2b37ba3b1834cc5e576aeb95e86e92/resvg_py-0.5.0-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl", hash = "sha256:55d65708e2dee0de77cccc0d03d21cd148a491c2bc6ef25542081db8eee74923", size = 1599781, upload-time = "2026-08-24T19:43:05.666Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ef/573c43420a5c39758f9e2cf67e8834ad430935eaecfb71c7ba73457b65c5/resvg_py-0.5.0-cp315-abi3.abi3t-musllinux_1_2_i686.whl", hash = "sha256:04b32b1e2d7a848124d9b96bc7446ceae71ea144d950007e93c4a382f7ee134c", size = 1652940, upload-time = "2026-08-24T19:43:06.993Z" }, + { url = "https://files.pythonhosted.org/packages/5e/76/68290af871f9347e1e8c7e14c8b09251362c74cff406b5f94c6711e8b6a2/resvg_py-0.5.0-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl", hash = "sha256:7fc91829a4d12d80071e9f4f191a9f459adf310919cbdf1377711b30dfa996b5", size = 1620456, upload-time = "2026-08-24T19:43:08.422Z" }, + { url = "https://files.pythonhosted.org/packages/bb/af/28e4758e087c6d3a3e691ecd67fd1304074b9bca4b5f1563ab6d1336a6a4/resvg_py-0.5.0-cp315-abi3.abi3t-win32.whl", hash = "sha256:f0c834262db96eac4d5767e1025c21efefa0ed0359bded8dfd4b79fc7549694f", size = 1204143, upload-time = "2026-08-24T19:43:09.706Z" }, + { url = "https://files.pythonhosted.org/packages/73/5c/5b0e68ce15bd87eaee64501427437f57bece008e15bf40dd759563f0038a/resvg_py-0.5.0-cp315-abi3.abi3t-win_amd64.whl", hash = "sha256:011111a4c3f46d409e989fe88ec783a3ffae1f3877092ab0351aaf2167fe399d", size = 1240349, upload-time = "2026-08-24T19:43:11.397Z" }, + { url = "https://files.pythonhosted.org/packages/62/e6/25b6616cebbce1412bb5fe8b037545f382b4da875bc614a97ff1ecd7aa28/resvg_py-0.5.0-cp315-abi3.abi3t-win_arm64.whl", hash = "sha256:66e5a7699f2b00024ed7e95ec53df05bb3da277ee5bc86f867d487e310e4d392", size = 1152399, upload-time = "2026-08-24T19:43:12.618Z" }, +] diff --git a/assets/branding/icon-gus.png b/assets/branding/icon-gus.png index 64cb129e420c9a1c27b8e11069f796542645f20c..b779d045813c4de0ce5d57475bb241c2bb650530 100644 GIT binary patch literal 2555 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 literal 2713 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 TkZ8MSIRSfXXRGp4n3#V907?bR diff --git a/assets/branding/icon-krs.png b/assets/branding/icon-krs.png index 039956a77118013739e10ac80a01088ee6dfecd3..5b23546f580f294f8415fb09996d13a18d23dade 100644 GIT binary patch literal 2569 zcma);X*d)L7sqGDlCj*egu%rSSsU4DtP_PIWZxP^D2$6_oiQ4WZgyoiWQ)p95o4&# z%^sDVDZ6BgF}Y^ut>=9|y&vxTemLhm=XuU~&i{GN|HCiE*5)D~w>UQd0N}H`N8L0~*>*-W|a0(1{&Awmt%+6C^NzJjr z(yiv9JC}^{daDYloy`cutHB@GRazVZZ;7(bWB)_|uc~ z@f@RgsvrT_A zHPz-hVcPI@ENnqt`k;%~(^S<;-%4-sqa6|Jv=P@dVnI>)B=z|NW4|F$tHt!x?^7e_ zB7|5jQ(p{wMWcz~l}OG7DW2gOZ?2!MhOafz!y0>(Zn4Z&;rK_zj{PA6>uY7Ku}Y>T zqrERxWi6%JN$JMr(f9YHeUGC?BwrdcC-sPo^3+O|0{IcR&$a+Y z4RzShaZ%UG(!+DX=?&Y?caAuMW?f7@SNs0rJB!@?QL`3(_W?6{uXgb^*1$**d;F%& zv4di9r&D^zQ_vsU&5|a*S(LvXLYzLqk8|I@M#tZhaR*K=%lgfuV41g- zRK~K~ePG^NtDunW;HU~Db%38LoJ6UKI-3Z{N!I8*X)?(VoHfmeuk5ezWF2conM}OW zRplfWbfpVu{6DOOo$C)na|JQzaXiEE?V06bTN*RXapnMESD z(*gWNim_YC1T*Trm-;9x={OVK_mhPes4Ca$9ekJKlokL0EGm% z?KTSU?|(nsCdL>aV+Yzm;F_?$Q=9=0xi49#KT@rc)^HH`1g~{$;fmxeaAYg9>7og z@$t1<7HZ|o{j8>{wykr{XfAI`_RL*XLTRC#9Mr?953Sg;i&LFw({=u-hp|oo2vu{gh ztX=x4#sG0rlb(vRlR(v9tGTZ83wOPHo1}BX@?7mtZplG*kEMdIT!_&=HVjuqzP~8y z4D326^lm)^Z?40J>q{Cq`9*DiIx-r-*baNId?Q6)34#@ytVGt5f({I=o86w=gI@Iz zJQ_>c^4E>RS4*L6c(nP$ZdSLR-s8W*QJTQ=x}G*MLDmEYrqW0iOfw6Dst3=N9k~;c z9cA_2H*eOR*TyMZnrQmBywscBG>6-UKz2SHG0$9&mDq5j7Eq^caY}h7$WNTXBVNMa zBQi5i`ew8}&Kk``MzJ|_0L(`M!eSh&gk(|3muBi~kHl176*9~&5L3fGv zt?$f3;=T%lh-~D8Y0EYyTnN=^s5W6ckT#-6N|X1lc|eSe73*TIwjQ}5jRhltWZ^=w zw7Duo4^6aI@@;F(LKk=>b)l%zNPDdDb7QeCmf46lG@+g+=juAT(Ec8K;{gp|ZJ7>) zL5pK(A8o&{SdE97Z_F-hmF|Hw??7@-7j66Lh(fk;w)Re5707pv8+zZ~p^Y?T=^%gj zi%m!;k!h3=f$E&VL?%A&?{c1irx-&H86vLE>@%h$l=Ph6bp1LKAD{J{lg5J+0c5Gi zaL(`AY?bp}csk#y7+>plJ5sDWf35Eu5e*peK9s`9HRuCoX%UV|`MBNhDXlcR;q|Ad zi+JzbkJf{|PP5Yrw-I~sR)AcWl6#2Z=@u6xNa0X-n9Mbbbd zzkbe|O#hLC^@mOg8B`0fRz8=pdz%o{nBm&3B_4};3iN#P5nwq{|{#)%a|tx_}03W(^k)*dPD4I#y_mb-h%tBtUOxXTSS4u(V4wLoHh6CBv=% z1`M<>gj(_$QV8d@tD)z=LIP;FVA51lbIqK3FOfCfoy`rD-3jyJR|J-RP2x#48|2Mu zxO`E3k7H0oypZ7$vS4$D8V*H<)S8u8s!ObE6Oq&i^MzTT(xlbzXh*eB=0b-c)Fo_c3X;rnv?}oqE?ZR|5f zBveRZ*t2>MN3h}?`VO?9@oy(zofREL)13fQFNYj>)KG-WslXnez4pF8FxU2q!FvO+ te}?>9iWvLOFxIlYk$ssLNg`XxZpbuI_9gX- z!Hc}{QInKimXI=KALP^dzVn^;`%dS4e?0f|$8%lxbD#S<_kFILBx8MElsF0i0Nx7* zI%fMf^~d2x?8gobmzMy5%DbSWWf7YHIp5z$xLbrdQRvGIUdlFO0mbi1W!qvbtm8|p zEL}4nddrq1Xf8;V-B!9RV|F(Cfs~Pjw&3gXIjCZA36?IRcg{>gOWJprZYiD@ov34O zVcqyUMxf||uh1W75UxJeQTI0d{3EBoR{C%Bj&+7FAFJ^9%gJ+G-tHU8dD@BPek=fH zAAu<8!^pR}nFj@^=VgFE9bhgI=>5q<#tCM+Z0eIr@$;5Q?e_eBr=fM5z2)-iY+;4b zj0A3_h`%#EjnVAsKTHn3;7%EIH8n`PNwn&Cx$HN3v$HhK0#v&%u#u~+%9~yR2RHt-u{$G$b>pJ#ec(MH#y3@H zv->I?vkLd0l=Oe>P>`bOYZ2kGUG9q?*CeQHiQ#t&Mcd4%OQV2#%eHYd4b3jN;JZ8MCg12{8--k^*{nxF_(Lw~@tZ{2d_Vp`~C#WI2bzPV0VsY;!C z@m*t-vNE4p6nA!GOe0LI4-i+9 z-F(|JU?1sms7fA`pI+LWO?vSOVe~P4JJYx5>FvBI_1M=0_oG6V6Fa}`v>O8=HY@FA z=arP|7%S%TuDkkS51-4bF~iHze`%Yi0@}Abh+0 zGi$F&h2EX&6jC_+FIXdFpuXyB&aI~IuKokm*r3%XQXeG!=OHACD_>rwmIgnM8aDBL zG~M0dABBI1B%)7UOF3BsOSdq3o`SXUa+D_EDJs$z6IsWU-*IUsM^MTTCk%kxs~Q{IxJiP9Ie?$9Q!8)bPNM=a#d1f z$AXE9?uYIQxjYiNwbWDHZrQE&azvW9^b+7ovDKHj&Gn^Q#`!V3N2p--ZkpWd6GS)C z0TkXPUD1kJeqol@f3yOkZuiPkSp)kWk1gITgr{YSGBf(f69;%!hf~dko^FBi&j{;# zu*AxcB}S-7Af2~h%T}zjCx5QvS=iEzZl-jpB6_mM+{BH8m%QAm zOM^t7w3#aI?Il{ObwQ4ck^{GL^tGpM${}08i< zs*H(vgfDGF4%VNd{i*0ifb$M;$|(yz5mt+NThV`GbcbhDC~jDN?X9KPHfvxe>}V1< zrZW{7ky1+q8>HHjj!}{DRLM!Nu(iF-f8>ssfUJ-R2b2!=Ay6O<eSuja12qiU8bk8@t)s79iUunHarHB@#Q9z$37 z^SJbA$`FO|U?Hbd_qzTe)&I{!W@mbcmj$)2s6JA+|D(?q5(;CH(Pn*1t2E~fapkK8UE%!2Y4(O}>B15}9Hp|zk2zO78LN7lknH#I9*7aCaDGEoVT-_K zEoifOOltytMjE1{45!sU-@1H;K#c3bd^LjP$$Q|07bhg$-gv#CF&0TlAdQj+xjI#{;Q$*SI=C!7UIE~mW=c4gQ z(2%7JHDnR&wpcxVXrqNK*rm_%_s`LT#nB|h)eI`Fv*=#PhO0+*Zi=85j7>eyW+}tj zN$2yF4kH@}$CPJVsX4tK->Wd7x)STUu@1m^vyAA|nLof;HT8TDxDv}f35v%ru+APr z-IfC7qn68%vCbZXZN3#uvEML@$%~gND z8LiYDKY?q!FKhfXvV6QQ+U^bp+I&m>p#)Va&M@1S`FQ#$Q1j@w^U-1V;k-lW-evY$ z<3=+RMOxdDU+qWh&9Lr7S!=!mmfuGzLke(@ic0F_h-Z$=TbR{ZxuwKVVPV8D_l9UV^(97h0Ote8`25{){oKQyX23BTyFd4HKW7&K)B&?CTv~1I QzFP$@=o;%(YLjFC34Hq)$ diff --git a/assets/branding/icon-mf.png b/assets/branding/icon-mf.png index 1f56c8f46db061b312aeeb870216096a107b60d4..0afe18cde68a1bb711359e74cb5848fc0cb3ffb8 100644 GIT binary patch literal 1885 zcmah~X*3&%7S4uDG#Z42mp6^lScX2TR7FXNqS4qUM9ULfMNvU*HAn`vRBcsFwYBSL zwHl*ED2;s-rK5Hwm7;2IOpy}PH$UDv&w1y)ANSsK?!D)J-;aB~FV&uG1&1la0002o z#+vB(tup@=P|0t(&D6680FY9%A)fv*>fZ8wyFerb&3id!HV{!<-XeE8%iRk(5%kzU z1qGgf9L&d=v(WNKW&wKNCq}(Vz_wb-px28e<>-7L`vLll<)HZtu-e8ZvXW7BA;~>( zNSrM$U6xtByK;Bsa-`pcPK`c(dXt0``uX|Q3FCy#t4-1PaG-@UO1I1tn9>G9Buijr zqzM>Brja%vgbJA90NVEtzSqqb25i=uor=?e*tSe+#TR=A@7T(-AtU>Coh|@hIyZ-w zhINosXt0Z&vrWKteVXC}7(!@jQ1%F>n^dat3BiUY|5uoO_+4-Bo+gzybb^O6qdnIO zHPIM0IVR|S{K?!~jac!#T6!k#_b-KLJA$?`m)}3O5y)-U&b%G{Q}mMCq&U_s-tMU4 z*QPX#{nq}|1Sn+>(y4NQf-<+4)m|bpk2{5?!MjXM5uqo2sDVSbaT$l4^ z5Fe{*uv|CXULFi6bd$;D1j(gP;Qnf*}1(PlW4;H(EDegLNtk>={=EAG=9co+_<() zw)BAe&vzn=Kgc62WLH$x8=o(tt}jEr@qOG^J(jGrxAZwwr5zTu9nsG=yqz>zA0BZC zNj!UV%s=tP)@Q9Z>2AU3>1-oIyk&|1+XaDIAPU4;|oXAnFKvw%g>$f_l*LpG&M3juAv_%xT zb0gM1@w&$psd6P`d#9T^tc)!Pq2**ooQRR(1+NJ}AVhVXcLt5^BbgUO^ zup!fMwg32d_V__gufRV>_Y}P32p?6cq89|YsIrmz(Bc`OBub`*m?jeJ=83E;AK^?T zC=WpwP1B4YYgAd>Zde>IvPSMMz@NaIDzE)=2H!pt#w!ageYGh4JY2#y7E8qCnKY|v zo<=dOvo=y&gEb=FtLCY(wvrnZo-3f?CMaj5sn-JdrwGYLJkgW`*C?%UIhwp^L6glh z1Y5QaO14*vFx0E~(dBDZ3m=&Iyt!i))RXf9LLf}E`ug21A*F%0XX`rtRduB6_hHg3 z`k{7MqcP81JO0|l>jqAmP%yt^U*~%nIp9*bdENgqJDfq1z~E8VF~KC=oZ5eCby?4b zs?q(G7HQ_CYBoz%qhxDBYme!Q0;a{AaTtM`WGu4 zf#klG#olJEtM?}zq2_>>{8NtG+NqCQst;(Ro4GURAi)PTFyTwTPd z$=6*oI5{Crr9=4zJh{1K={;bLZWIB!U;4>5C%_>-PklDx1$+E4@jLtRSXQr?)jJ~m zd%tGxGr;?FspHD5NXU&9*j&uJhYaZdbrG`C)N3Skzh(R{-#G|m)t8>*6KkBm*(Sio Ll1!{Jr~UjVVCq^I literal 2177 zcmZ{mc{JNu8^?c%A5EgMMJ-X$B%?7Yl`gTXAog`EuXGGTJLR;fx2U}dO)<7E6fdDc zs~A+?Qd&x4ZxO0hK|7WyRiu{UwX}?$^PZkL?>qCyz4wp%obU6!&vWkm++Um>t&j*b z0ssJ{jWyL}Z)JWRFp0gn?UZj10KlwmsHSd_Y*E35KzVn0W`CgP>{TmS{?aXl+a6=I ztJZ$|Yt8)ZNh@i2FbJNS?y@R8`un)5*5iNZZ z_hDeC@U*@}=cEQjIR5awPpZ}KaMFB@yx{_vd;EmBcrHtwS?n+r`K~?}-i2_$M76+;H~#z0rAwRZ|U$SN^-()47m(kkb%0Wl0EG-yp7Us(lPIoXS^; zX{mJ;t+n92g$PPcoJD@MU%G|Sdm!s>iJDhep0Gxea_n56s;`u2eZ$S^n_V~sbyOv# zln(DL%FWQpqZdWRXVtOFZ{05^xT#9 zQSt6PbQY-~!7J1E z&AXzR=#-zkjsm8kQp8f&fbk6iGTY_E@XGWA^)Z@lG2=W|WH(LaiO=na1Rf_GF$?^%18P zdfps+jouMYy`gWc?2@#v=Ijq1FA=&swZZof4_bnU&ipvM2qve5zV>QLiI-~=4BTbe z>uP^0p8OSPpQ>CTo#G3wD&HU*BJC7>Vk5A)X4?)?<{+PS(AN4m;wc&# z!uaT`Dk_4)%q5tQVO$g_mH@#!&(4(5C#KMs>}b2kBv!P1ag^QvduA!1W0wEq8K;Hu z{`v8~BabSp6E2Mv81+BZk;viFQtqULB5R_;W!_N0WM(FC1k(Z_*RYz9h3y%vlA$jw z`w1RO+iwe5c$R(-iG?;WeV_-0UXu4SKEIt8c_L(at-KC$lRWd5b9lM3LbD#)F)kV< zweUnDbVfP}dF?;uGV}dcJjS*7FF;OYusRt-Wx{5m>@Uq2?@^LK({;toh0(fIk=l3e zG4xi;2 z;bZm&rYQ611PdV5l)!Ywt!)KB2ckePcRf=Ng|K^*Iyed#jXK2m!Juhb09JCHb6C*{ zC2$#Jok_hc1UHZmtoFPy?!xfUlH~925@=wJQW#WbJ^FTlF~7pQ=)v{GI7ToIO63&> z#F!~mH|!fsB+#F2!8qE9tDqH%hv|3PD})|=K;^3kNm-6qTwHCWHx^2zfU_nz%D%0w zfaNB$y`FsK9#d*{?Zs5oHJA)Umb1G*05Y4cZP8|e{ZuMV=ybGhy$G+`1uX}RO!}lX x{u}vsjQz&BJ(%tZu^QF>n#F&P`$q5gj8b^TT&G^=%-+`mu(5EYR-4fi{s3MD$Ugu8 diff --git a/assets/branding/icon-nbp.png b/assets/branding/icon-nbp.png index 9de645d93b0e4a4b95a5b5bd2b83c7f0ee7dd046..182042db7ac00ed19bbec14610925e6212adcbdf 100644 GIT binary patch literal 2320 zcma)8dpHw}8sFx!*{pBS$w21l~NIZjwfLH0)l(@1K zi82_9^VRN52v9b`2$yhO`wkV7nIL7Y<^qy36{VMhj?4P(ue(nH)e{J+x>9x8{9*SY zum~7>r8#i)L%-9N7YpZ)VMkM~l_zV3%fl;KfHmStFq`j_` z­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 ANB{r; diff --git a/assets/branding/social-preview-en.png b/assets/branding/social-preview-en.png new file mode 100644 index 0000000000000000000000000000000000000000..39f53908577acb6c055a48a8307ad70248862093 GIT binary patch literal 22379 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ędnik.NET diff --git a/assets/branding/social-preview.png b/assets/branding/social-preview.png index f7e20d8e4393b527cd58e711f59553bf790b979a..d23dd4afb6a2bb861704d58908a582e63c70d9a8 100644 GIT binary patch literal 23289 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 From 31633fa34798b338bdd53ed85ef4ac2d32eaa757 Mon Sep 17 00:00:00 2001 From: Andrzej Ochodek Date: Fri, 30 Oct 2026 14:32:08 +0100 Subject: [PATCH 3/3] Drop the unused GUS, KRS and MF icons No provider uses them yet (ADR-0010); each provider gets its icon from a branding.toml entry when it becomes ready. The generator reproduces the remaining 12 files byte for byte on Windows and Linux. Co-Authored-By: Claude Opus 5.5 --- assets/branding/BRANDING.md | 5 ++--- assets/branding/branding.toml | 12 ------------ assets/branding/icon-gus.png | Bin 2555 -> 0 bytes assets/branding/icon-gus.svg | 1 - assets/branding/icon-krs.png | Bin 2569 -> 0 bytes assets/branding/icon-krs.svg | 1 - assets/branding/icon-mf.png | Bin 1885 -> 0 bytes assets/branding/icon-mf.svg | 1 - 8 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 assets/branding/icon-gus.png delete mode 100644 assets/branding/icon-gus.svg delete mode 100644 assets/branding/icon-krs.png delete mode 100644 assets/branding/icon-krs.svg delete mode 100644 assets/branding/icon-mf.png delete mode 100644 assets/branding/icon-mf.svg diff --git a/assets/branding/BRANDING.md b/assets/branding/BRANDING.md index 7ebdf4c..7bd9bb5 100644 --- a/assets/branding/BRANDING.md +++ b/assets/branding/BRANDING.md @@ -31,9 +31,8 @@ The design is flat on purpose: no gradients, shadows or outlines. It has to read |---|---| | `OpenUrzednik.Core`, `.Extensions.Logging`, `.Diagnostics` | `icon.png` | | `OpenUrzednik.Nbp`, `OpenUrzednik.Nbp.DependencyInjection` | `icon-nbp.png` | -| `OpenUrzednik.Gus` (and its integrations) | `icon-gus.png` (not wired until the provider is ready, ADR-0010) | -| `OpenUrzednik.Krs` (and its integrations) | `icon-krs.png` (not wired until the provider is ready, ADR-0010) | -| `OpenUrzednik.Mf` (and its integrations) | `icon-mf.png` (not wired until the provider is ready, ADR-0010) | + +A provider gets its icon when it becomes ready (ADR-0010), by adding its entry to `branding.toml`. Rule: shared infrastructure gets the base icon. A provider package and every package built on it (`*.DependencyInjection`, future adapters) get that provider's icon. The root `Directory.Build.props` packs the file named by the `OpenUrzednikPackageIcon` property as `icon.png` (default `icon.png`). A provider csproj and each package built on it set `icon-.png`. When you add a provider icon, also add its PNG to `pathFilters` in `version.json` and to the `paths` filter of `.github/workflows/nuget-pre-release.yml` (ADR-0008). diff --git a/assets/branding/branding.toml b/assets/branding/branding.toml index ba45c24..2530174 100644 --- a/assets/branding/branding.toml +++ b/assets/branding/branding.toml @@ -87,18 +87,6 @@ base = true file = "icon-nbp" label = "NBP" -[[icons.icon]] -file = "icon-gus" -label = "GUS" - -[[icons.icon]] -file = "icon-krs" -label = "KRS" - -[[icons.icon]] -file = "icon-mf" -label = "MF" - # Favicon: a bigger ticket with a thicker strip, no perforation, no text. SVG + PNG. [favicon] file = "favicon" diff --git a/assets/branding/icon-gus.png b/assets/branding/icon-gus.png deleted file mode 100644 index b779d045813c4de0ce5d57475bb241c2bb650530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2555 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 diff --git a/assets/branding/icon-gus.svg b/assets/branding/icon-gus.svg deleted file mode 100644 index 2583b27..0000000 --- a/assets/branding/icon-gus.svg +++ /dev/null @@ -1 +0,0 @@ -OpenUrzędnik.NET GUS diff --git a/assets/branding/icon-krs.png b/assets/branding/icon-krs.png deleted file mode 100644 index 5b23546f580f294f8415fb09996d13a18d23dade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2569 zcma);X*d)L7sqGDlCj*egu%rSSsU4DtP_PIWZxP^D2$6_oiQ4WZgyoiWQ)p95o4&# z%^sDVDZ6BgF}Y^ut>=9|y&vxTemLhm=XuU~&i{GN|HCiE*5)D~w>UQd0N}H`N8L0~*>*-W|a0(1{&Awmt%+6C^NzJjr z(yiv9JC}^{daDYloy`cutHB@GRazVZZ;7(bWB)_|uc~ z@f@RgsvrT_A zHPz-hVcPI@ENnqt`k;%~(^S<;-%4-sqa6|Jv=P@dVnI>)B=z|NW4|F$tHt!x?^7e_ zB7|5jQ(p{wMWcz~l}OG7DW2gOZ?2!MhOafz!y0>(Zn4Z&;rK_zj{PA6>uY7Ku}Y>T zqrERxWi6%JN$JMr(f9YHeUGC?BwrdcC-sPo^3+O|0{IcR&$a+Y z4RzShaZ%UG(!+DX=?&Y?caAuMW?f7@SNs0rJB!@?QL`3(_W?6{uXgb^*1$**d;F%& zv4di9r&D^zQ_vsU&5|a*S(LvXLYzLqk8|I@M#tZhaR*K=%lgfuV41g- zRK~K~ePG^NtDunW;HU~Db%38LoJ6UKI-3Z{N!I8*X)?(VoHfmeuk5ezWF2conM}OW zRplfWbfpVu{6DOOo$C)na|JQzaXiEE?V06bTN*RXapnMESD z(*gWNim_YC1T*Trm-;9x={OVK_mhPes4Ca$9ekJKlokL0EGm% z?KTSU?|(nsCdL>aV+Yzm;F_?$Q=9=0xi49#KT@rc)^HH`1g~{$;fmxeaAYg9>7og z@$t1<7HZ|o{j8>{wykr{XfAI`_RL*XLTRC#9Mr?953Sg;i&LFw({=u-hp|oo2vu{gh ztX=x4#sG0rlb(vRlR(v9tGTZ83wOPHo1}BX@?7mtZplG*kEMdIT!_&=HVjuqzP~8y z4D326^lm)^Z?40J>q{Cq`9*DiIx-r-*baNId?Q6)34#@ytVGt5f({I=o86w=gI@Iz zJQ_>c^4E>RS4*L6c(nP$ZdSLR-s8W*QJTQ=x}G*MLDmEYrqW0iOfw6Dst3=N9k~;c z9cA_2H*eOR*TyMZnrQmBywscBG>6-UKz2SHG0$9&mDq5j7Eq^caY}h7$WNTXBVNMa zBQi5i`ew8}&Kk``MzJ|_0L(`M!eSh&gk(|3muBi~kHl176*9~&5L3fGv zt?$f3;=T%lh-~D8Y0EYyTnN=^s5W6ckT#-6N|X1lc|eSe73*TIwjQ}5jRhltWZ^=w zw7Duo4^6aI@@;F(LKk=>b)l%zNPDdDb7QeCmf46lG@+g+=juAT(Ec8K;{gp|ZJ7>) zL5pK(A8o&{SdE97Z_F-hmF|Hw??7@-7j66Lh(fk;w)Re5707pv8+zZ~p^Y?T=^%gj zi%m!;k!h3=f$E&VL?%A&?{c1irx-&H86vLE>@%h$l=Ph6bp1LKAD{J{lg5J+0c5Gi zaL(`AY?bp}csk#y7+>plJ5sDWf35Eu5e*peK9s`9HRuCoX%UV|`MBNhDXlcR;q|Ad zi+JzbkJf{|PP5Yrw-I~sR)AcWl6#2Z=@u6xNa0X-n9Mbbbd zzkbe|O#hLC^@mOg8B`0fRz8=pdz%o{nBm&3B_4};3iN#P5nwq{|{#)%a|tx_}03W(^k)*dPD4I#y_mb-h%tBtUOxXTSS4u(V4wLoHh6CBv=% z1`M<>gj(_$QV8d@tD)z=LIP;FVA51lbIqK3FOfCfoy`rD-3jyJR|J-RP2x#48|2Mu zxO`E3k7H0oypZ7$vS4$D8V*H<)S8u8s!ObE6Oq&i^MzTT(xlbzXh*eB=0b-c)Fo_c3X;rnv?}oqE?ZR|5f zBveRZ*t2>MN3h}?`VO?9@oy(zofREL)13fQFNYj>)KG-WslXnez4pF8FxU2q!FvO+ te}OpenUrzędnik.NET KRS diff --git a/assets/branding/icon-mf.png b/assets/branding/icon-mf.png deleted file mode 100644 index 0afe18cde68a1bb711359e74cb5848fc0cb3ffb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1885 zcmah~X*3&%7S4uDG#Z42mp6^lScX2TR7FXNqS4qUM9ULfMNvU*HAn`vRBcsFwYBSL zwHl*ED2;s-rK5Hwm7;2IOpy}PH$UDv&w1y)ANSsK?!D)J-;aB~FV&uG1&1la0002o z#+vB(tup@=P|0t(&D6680FY9%A)fv*>fZ8wyFerb&3id!HV{!<-XeE8%iRk(5%kzU z1qGgf9L&d=v(WNKW&wKNCq}(Vz_wb-px28e<>-7L`vLll<)HZtu-e8ZvXW7BA;~>( zNSrM$U6xtByK;Bsa-`pcPK`c(dXt0``uX|Q3FCy#t4-1PaG-@UO1I1tn9>G9Buijr zqzM>Brja%vgbJA90NVEtzSqqb25i=uor=?e*tSe+#TR=A@7T(-AtU>Coh|@hIyZ-w zhINosXt0Z&vrWKteVXC}7(!@jQ1%F>n^dat3BiUY|5uoO_+4-Bo+gzybb^O6qdnIO zHPIM0IVR|S{K?!~jac!#T6!k#_b-KLJA$?`m)}3O5y)-U&b%G{Q}mMCq&U_s-tMU4 z*QPX#{nq}|1Sn+>(y4NQf-<+4)m|bpk2{5?!MjXM5uqo2sDVSbaT$l4^ z5Fe{*uv|CXULFi6bd$;D1j(gP;Qnf*}1(PlW4;H(EDegLNtk>={=EAG=9co+_<() zw)BAe&vzn=Kgc62WLH$x8=o(tt}jEr@qOG^J(jGrxAZwwr5zTu9nsG=yqz>zA0BZC zNj!UV%s=tP)@Q9Z>2AU3>1-oIyk&|1+XaDIAPU4;|oXAnFKvw%g>$f_l*LpG&M3juAv_%xT zb0gM1@w&$psd6P`d#9T^tc)!Pq2**ooQRR(1+NJ}AVhVXcLt5^BbgUO^ zup!fMwg32d_V__gufRV>_Y}P32p?6cq89|YsIrmz(Bc`OBub`*m?jeJ=83E;AK^?T zC=WpwP1B4YYgAd>Zde>IvPSMMz@NaIDzE)=2H!pt#w!ageYGh4JY2#y7E8qCnKY|v zo<=dOvo=y&gEb=FtLCY(wvrnZo-3f?CMaj5sn-JdrwGYLJkgW`*C?%UIhwp^L6glh z1Y5QaO14*vFx0E~(dBDZ3m=&Iyt!i))RXf9LLf}E`ug21A*F%0XX`rtRduB6_hHg3 z`k{7MqcP81JO0|l>jqAmP%yt^U*~%nIp9*bdENgqJDfq1z~E8VF~KC=oZ5eCby?4b zs?q(G7HQ_CYBoz%qhxDBYme!Q0;a{AaTtM`WGu4 zf#klG#olJEtM?}zq2_>>{8NtG+NqCQst;(Ro4GURAi)PTFyTwTPd z$=6*oI5{Crr9=4zJh{1K={;bLZWIB!U;4>5C%_>-PklDx1$+E4@jLtRSXQr?)jJ~m zd%tGxGr;?FspHD5NXU&9*j&uJhYaZdbrG`C)N3Skzh(R{-#G|m)t8>*6KkBm*(Sio Ll1!{Jr~UjVVCq^I diff --git a/assets/branding/icon-mf.svg b/assets/branding/icon-mf.svg deleted file mode 100644 index fdb1c33..0000000 --- a/assets/branding/icon-mf.svg +++ /dev/null @@ -1 +0,0 @@ -OpenUrzędnik.NET MF