@analitikisler/ai-tag-debugger 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0 (2026-10-25)
4
+
5
+ - New brand: the tool's name is written `ai tag debugger`, lowercase, wherever the reports, `plan.html`, the README, the MCP registry listing and the GitHub Actions examples show it. The reports and `plan.html` carry the new lockup with its red point, the ai mark on phones, the shared ai favicon, and the Analitik İşler master logo with its red point and three bars in the byline and footer. The logos take the page's text colour in light, dark and print, with only the point in red. The "broken" red is the brand's one red, `#C12D30` in light and `#FA6B6D` in dark. The `aitd` and `ai-tag-debugger` commands, the npm package and the config keys are unchanged.
6
+ - Fixed: dependencies with published advisories are updated: zod to 4.6.7 (the minimum is now 4.6.6), and body-parser, fast-uri and ip-address, which the MCP server's HTTP mode uses. `npm audit --omit=dev` reports none.
7
+ - Fixed: on macOS, a page load whose connection dropped is now tried once more, as on Linux; Chromium's error page could end the load or its retry with "interrupted by another navigation to chrome-error://chromewebdata/".
8
+ - Fixed: the GitHub Actions examples and the cron script pin 0.19.0. The deploy example pinned 0.6.3, which writes no `junit.xml` for its upload step.
9
+ - Development: the brand guide and its assets are in `brand/ai/` (a copy of `design/13-ai-brand` from the analitikisler.com repo), the retired orange set is in `brand/retired/`, and `node scripts/brand.js` embeds the assets into `src/brand.js`.
10
+
3
11
  ## 0.18.0 (2026-10-19)
4
12
 
5
13
  - The HTML report was rebuilt as an inspector: a collapsible rail with seven sections (Summary, Findings, Journeys, Consent, Coverage, Inventory, Run), one screen at a time. The Summary is a score ring banded red, amber and green, the verdict, up to three lines saying what cost the points, status chips that open the findings pre-filtered, and six cards about the run. Findings have a filter bar (severity, owner, platform, journey, viewport, search) over failed, unverified and passed groups, every row collapsed and opening into Evidence, Fix, Where and Verify tabs. Journeys show the steps by page title on the left and the selected step's Hits, Data Layer and Requests tabs on the right, with a consent chip on every hit. Every card starts collapsed except the Summary; every section, filter and card has its own URL. With a model, the Summary shows its one-line headline and an AI summary card in Findings keeps its points and its "worth checking" list; a route that differs from the last run is named under the Run facts. Severity is never colour alone, one hue per kind of chip, light and dark mode, keyboard (`[` folds the rail, `1`–`7` jump), no horizontal scroll on phones, and the stacked no-JavaScript document is the print layout. Design notes and the mockups it was built from are under `docs/design/directions/`.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  English | [Türkçe](README.tr.md)
2
2
 
3
- # AI Tag Debugger
3
+ <h1><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-dark.svg"><img src="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-light.svg" alt="ai tag debugger" height="40"></picture></h1>
4
4
 
5
5
  **An open-source AI agent that QA-tests your website's analytics and ad tracking.**
6
6
 
@@ -466,8 +466,8 @@ The file holds one entry per finding, with a `key` the run matches on (the check
466
466
  | `baseline` | Optional path, relative to the config file, of a baseline of accepted findings. Same as `--baseline`. See [Accept known findings](#accept-known-findings). |
467
467
  | `language` | Report language, `en` (default) or `tr`. Same as `--lang`. |
468
468
  | `keep_bodies` | Default `false`. Set to `true` to store tracking requests as sent, without redacting user data. Same as `--keep-bodies`. |
469
- | `branding` | Default `true`. Set to `false` to leave the Analitik İşler logo and the "Generated by AI Tag Debugger · analitikisler.com" line out of the reports. Same as `--no-branding`, or `branding: false` on the MCP `finish_audit` and `run_audit` tools. |
470
- | `report` | Optional white label: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF or SVG, up to 512 KB, relative to the config file) and `name` replace the Analitik İşler branding in the HTML report (a small "by AI Tag Debugger" logo and credit stay); `color` sets the accent color; `pdf: true` also writes `report.pdf` next to `report.html`. |
469
+ | `branding` | Default `true`. Set to `false` to leave the Analitik İşler logo and the "Generated by ai tag debugger · analitikisler.com" line out of the reports. Same as `--no-branding`, or `branding: false` on the MCP `finish_audit` and `run_audit` tools. |
470
+ | `report` | Optional white label: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF or SVG, up to 512 KB, relative to the config file) and `name` replace the Analitik İşler branding in the HTML report (a small "by ai tag debugger" logo and credit stay); `color` sets the accent color; `pdf: true` also writes `report.pdf` next to `report.html`. |
471
471
  | `provider` | Optional: `anthropic`, `openai`, `gemini`, `vercel`, `cloudflare` or `openai-compatible`. Same as `--provider`. |
472
472
  | `base_url`, `model` | Optional: the API address and model id, e.g. for `openai-compatible`. Same as `--base-url` and `--model`. |
473
473
  | `notify` | Optional alerts after each saved run: `slack` (a webhook URL, or `true` to read `SLACK_WEBHOOK_URL`) and `email` (an address or a list). See [Alerts](#alerts). |
@@ -610,7 +610,7 @@ Output:
610
610
  - `summary.json`: the counts, verdict, score, trend direction, journeys, findings and file names of the run in one small file for scripts.
611
611
  - `plan.html` (in the plan's folder): a readable page of the plan's events, parameters and user properties.
612
612
 
613
- Reports end with a credit line, "Generated by AI Tag Debugger · analitikisler.com", where the domain is a plain link (no images, no tracking, and no referrer, so report URLs aren't leaked). `--no-branding` removes it along with the logo.
613
+ Reports end with a credit line, "Generated by ai tag debugger · analitikisler.com", where the domain is a plain link (no images, no tracking, and no referrer, so report URLs aren't leaked). `--no-branding` removes it along with the logo.
614
614
 
615
615
  Use `--lang tr` for a Turkish report. Finding texts, headings, and the model's explanations and fixes are all written in Turkish, and the agent describes its steps in Turkish too.
616
616
 
package/README.tr.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [English](README.md) | Türkçe
2
2
 
3
- # AI Tag Debugger
3
+ <h1><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-dark.svg"><img src="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-light.svg" alt="ai tag debugger" height="40"></picture></h1>
4
4
 
5
5
  **Web sitenizin analitik ve reklam takibini test eden, açık kaynaklı bir yapay zekâ ajanı.**
6
6
 
@@ -466,8 +466,8 @@ Dosyada her bulgu için bir kayıt bulunur: çalıştırmanın eşleştirme yapt
466
466
  | `baseline` | İsteğe bağlı: kabul edilen bulguların temel dosyasının, ayar dosyasına göre bağıl yolu. `--baseline` ile aynıdır. Bkz. [Bilinen bulguları kabul edin](#bilinen-bulguları-kabul-edin). |
467
467
  | `language` | Rapor dili, `en` (varsayılan) ya da `tr`. `--lang` ile aynıdır. |
468
468
  | `keep_bodies` | Varsayılan `false`. Takip isteklerini gönderildiği gibi, kullanıcı verisi gizlenmeden saklamak için `true` yapın. `--keep-bodies` ile aynıdır. |
469
- | `branding` | Varsayılan `true`. Analitik İşler logosunu ve "Generated by AI Tag Debugger · analitikisler.com" satırını raporlardan çıkarmak için `false` yapın. `--no-branding` ile aynıdır, ya da MCP `finish_audit` ve `run_audit` araçlarında `branding: false`. |
470
- | `report` | İsteğe bağlı beyaz etiket: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF veya SVG; en fazla 512 KB; ayar dosyasına göre bağıl) ve `name`, HTML raporundaki Analitik İşler markasının yerine geçer (küçük bir AI Tag Debugger logosu ve kredisi kalır). `color` vurgu rengini ayarlar; `pdf: true` ise `report.html` yanına `report.pdf` de yazar. |
469
+ | `branding` | Varsayılan `true`. Analitik İşler logosunu ve "Generated by ai tag debugger · analitikisler.com" satırını raporlardan çıkarmak için `false` yapın. `--no-branding` ile aynıdır, ya da MCP `finish_audit` ve `run_audit` araçlarında `branding: false`. |
470
+ | `report` | İsteğe bağlı beyaz etiket: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF veya SVG; en fazla 512 KB; ayar dosyasına göre bağıl) ve `name`, HTML raporundaki Analitik İşler markasının yerine geçer (küçük bir ai tag debugger logosu ve kredisi kalır). `color` vurgu rengini ayarlar; `pdf: true` ise `report.html` yanına `report.pdf` de yazar. |
471
471
  | `provider` | İsteğe bağlı: `anthropic`, `openai`, `gemini`, `vercel`, `cloudflare` ya da `openai-compatible`. `--provider` ile aynıdır. |
472
472
  | `base_url`, `model` | İsteğe bağlı: API adresi ve model kimliği, örneğin `openai-compatible` için. `--base-url` ve `--model` ile aynıdır. |
473
473
  | `notify` | İsteğe bağlı uyarılar, kayıtlı her çalıştırmadan sonra: `slack` (bir webhook adresi ya da `SLACK_WEBHOOK_URL` değişkenini okumak için `true`) ve `email` (bir adres ya da liste). Bkz. [Uyarılar](#uyarılar). |
@@ -610,7 +610,7 @@ jq -r '.verdict.status + " " + (.score | tostring)' aitd/example.com/runs/*/summ
610
610
  - `summary.json`: çalıştırmanın sayıları, sonucu, puanı, eğilim yönü, yolculukları, bulguları ve dosya adları, betikler için tek bir küçük dosyada.
611
611
  - `plan.html` (planın klasöründe): planın event'lerini, parametrelerini ve kullanıcı özelliklerini gösteren okunabilir bir sayfa.
612
612
 
613
- Raporlar bir kredi satırıyla biter: "Generated by AI Tag Debugger · analitikisler.com"; alan adı düz bir bağlantıdır (görsel yok, takip yok ve yönlendiren bilgisi yok; böylece rapor adresleri sızdırılmaz). `--no-branding`, bunu logosuyla birlikte kaldırır.
613
+ Raporlar bir kredi satırıyla biter: "Generated by ai tag debugger · analitikisler.com"; alan adı düz bir bağlantıdır (görsel yok, takip yok ve yönlendiren bilgisi yok; böylece rapor adresleri sızdırılmaz). `--no-branding`, bunu logosuyla birlikte kaldırır.
614
614
 
615
615
  Türkçe rapor için `--lang tr` kullanın. Bulgu metinleri, başlıklar, modelin açıklamaları ve düzeltmeleri Türkçe yazılır; ajan adımlarını da Türkçe anlatır.
616
616
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@analitikisler/ai-tag-debugger",
3
3
  "mcpName": "io.github.analitikisler/ai-tag-debugger",
4
- "version": "0.18.0",
4
+ "version": "0.19.0",
5
5
  "description": "Open-source AI agent that QA-tests your website's analytics, ad and consent tracking (GA4, GTM, Google Ads, Meta, TikTok). Bring your own model (Claude, OpenAI, Gemini) or use it from your chat app over MCP.",
6
6
  "type": "module",
7
7
  "bin": {
@@ -58,7 +58,7 @@
58
58
  "@modelcontextprotocol/sdk": "^1.32.1",
59
59
  "openai": "^7.30.1",
60
60
  "playwright": "1.56.1",
61
- "zod": "^4.6.5"
61
+ "zod": "^4.6.6"
62
62
  },
63
63
  "optionalDependencies": {
64
64
  "fflate": "^0.8.3"
package/src/brand.js CHANGED
@@ -1,14 +1,20 @@
1
- // Logos embedded in the HTML report as data URIs, so a report is one file and needs nothing next to it.
2
- // Copied from design-proposals/report-v3/logos/logos.json (approved 2026-10-10). The report CSP allows img-src data:.
3
- // atd-*: AI Tag Debugger. horizontal-* and stacked-*: Analitik İşler, left out when branding is false.
1
+ // The brand's logos for the HTML report, so a report is one file and needs nothing next to it.
2
+ // Written by node scripts/brand.js from brand/ai/assets/ (the brand guide is brand/ai/BRAND.md); edit the assets, not this file.
3
+ // atd-lockup brand/ai/assets/lockups/ai-tag-debugger-light.svg (and -dark.svg, checked to match)
4
+ // mark brand/ai/assets/mark/ai-mark-light.svg (and -dark.svg, checked to match)
5
+ // master brand/ai/assets/master/analitik-isler-light.svg (and -dark.svg, checked to match)
6
+ // favicon-light brand/ai/assets/icons/favicon-ai-16.svg
7
+ // favicon-dark brand/ai/assets/icons/favicon-ai-16-ink.svg
4
8
 
9
+ /** Sprite symbols: the ink is currentColor and the point is var(--brand-point), so a logo follows the page's colours. */
10
+ export const LOGO_ART = {
11
+ "atd-lockup": {"viewBox":"-0.1 1.4 1455.8 199.3","art":"<path fill=\"currentColor\" d=\"M39.42 161.88Q29.25 161.88 20.24 158.48Q11.23 155.07 5.59 147.83Q-0.04 140.6 -0.04 129.14Q-0.04 116.76 7.11 108.68Q14.26 100.6 27.35 96.63Q40.44 92.67 58.36 92.67H72.43L70.63 95.8V89.43Q70.63 79.65 67.27 75.14Q63.92 70.63 56.2 70.63Q48.71 70.63 44.83 74.61Q40.95 78.6 39.68 86.32L4.75 80.68Q6.67 71.59 12.85 64.28Q19.04 56.97 30.18 52.67Q41.32 48.37 58.11 48.37Q72.86 48.37 83.43 52.77Q94 57.17 99.67 67.77Q105.33 78.37 105.33 97.05V128.66Q105.33 132.04 106.28 133.14Q107.23 134.24 106.4 134.24H109.4V159.24H99.05Q85.49 159.24 78.81 152.72Q72.13 146.19 72.13 133.48V129.41L78.48 132.16Q77.27 136.52 74.94 141.62Q72.61 146.71 68.28 151.33Q63.96 155.94 56.94 158.91Q49.92 161.88 39.42 161.88ZM49.9 139Q56.4 139 61.1 136.12Q65.8 133.23 68.38 127.75Q70.96 122.26 70.96 114.47V111.52H60.12Q50.51 111.52 45.22 114.04Q39.93 116.56 37.87 120.14Q35.81 123.72 35.81 127.09Q35.81 129.28 36.89 132.08Q37.97 134.88 41 136.94Q44.02 139 49.9 139ZM119 159.24 154.1 159.24 154.1 55.14 119 49.44Z M241.09 159.24Q233.92 159.24 228.9 154.78Q223.88 150.31 223.88 143.2V66.31H206.75V51.24H223.88V28.83L242.45 24.75V51.24H263.65V66.31H242.45V138.67Q242.45 141.98 243.4 143.08Q244.35 144.18 247.45 144.18H263.95V159.24Z M314.75 161.67Q304.01 161.67 295.96 157.59Q287.91 153.51 283.48 146.31Q279.05 139.1 279.05 129.78Q279.05 119.82 284.89 111.63Q290.73 103.44 302.79 98.59Q314.85 93.73 333.48 93.73H351.1L349.3 95.66V89.71Q349.3 77.03 344.28 70.31Q339.25 63.6 327.49 63.6Q316.37 63.6 310.4 69.36Q304.42 75.12 303.94 84.9L283.49 80.47Q284.49 71.73 290.28 64.56Q296.07 57.4 305.87 53.1Q315.66 48.8 328.76 48.8Q342.01 48.8 350.49 53.7Q358.96 58.59 363.03 68.02Q367.11 77.44 367.11 91.08V138.67Q367.11 141.98 368.06 143.08Q369.01 144.18 372.11 144.18H378.04V159.24H366.86Q359.41 159.24 354.6 154.77Q349.8 150.3 349.8 143.2V135.95L352.68 136.21Q351.11 140.43 348.18 144.85Q345.24 149.27 340.67 153.1Q336.1 156.94 329.68 159.3Q323.27 161.67 314.75 161.67ZM319.2 146.81Q327.33 146.81 334.19 142.83Q341.06 138.84 345.24 130.41Q349.42 121.97 349.42 108.58V107.48H333.1Q320.16 107.48 312.74 110.88Q305.32 114.29 302.23 119.29Q299.14 124.28 299.14 129.22Q299.14 134.04 301.32 138.01Q303.5 141.98 307.95 144.4Q312.4 146.81 319.2 146.81Z M439.16 200.67Q414.78 200.67 403.21 193.9Q391.64 187.13 391.64 172.98Q391.64 164.87 395.8 158.68Q399.96 152.48 409.75 149.2Q405.96 146.85 403.6 143.04Q401.23 139.22 401.23 134.53Q401.23 128.86 404.77 124.39Q408.31 119.92 414.9 118Q406.9 113.27 402.46 105.24Q398.01 97.21 398.01 86.6Q398.01 75.01 403.25 66.53Q408.48 58.06 418.14 53.44Q427.81 48.81 441.1 48.81Q454.39 48.81 464.14 53.44Q473.89 58.06 479.22 66.58Q484.55 75.1 484.55 86.78Q484.55 98.27 479.22 106.66Q473.9 115.04 464.1 119.61Q454.3 124.19 440.81 124.19H431.79Q419.57 124.19 419.57 131.4Q419.57 138.23 431.46 138.23H453.09Q465.66 138.23 473.49 141.14Q481.33 144.05 485.57 148.69Q489.82 153.33 491.42 158.8Q493.01 164.26 493.01 169.38Q493.01 185.35 481.31 193.01Q469.6 200.67 445.04 200.67ZM439.25 186.51H445.1Q473.87 186.51 473.87 169.32Q473.87 162.21 468.72 157.68Q463.57 153.15 451.02 153.15H433.03Q423.54 153.15 417.07 157.05Q410.6 160.95 410.6 169.83Q410.6 178.31 417.61 182.41Q424.63 186.51 439.25 186.51ZM441.1 111.46Q453.26 111.46 459.78 105.11Q466.3 98.76 466.3 86.78Q466.3 74.9 459.78 68.32Q453.26 61.73 441.1 61.73Q429.04 61.73 422.6 68.27Q416.16 74.81 416.16 86.78Q416.16 98.76 422.6 105.11Q429.04 111.46 441.1 111.46ZM458.66 60.69V49.96Q458.66 42.85 463.68 38.39Q468.7 33.92 475.87 33.92H488.51V48.98H477.63Q474.53 48.98 473.58 50.08Q472.63 51.18 472.63 54.49V60.69Z M602.17 161.67Q589.01 161.67 578.97 154.79Q568.93 147.91 563.36 135.2Q557.78 122.5 557.78 105.13Q557.78 87.76 563.41 75.11Q569.03 62.47 579.03 55.64Q589.04 48.81 602.23 48.81Q613.02 48.81 623.28 54.14Q633.54 59.47 638.9 72.07L636.85 72.78V9.24H655.42V159.24H637.93V136.85L638.41 138.44Q633.87 150.23 623.79 155.95Q613.7 161.67 602.17 161.67ZM607.45 146.51Q615.74 146.51 622.55 142.21Q629.35 137.9 633.41 128.8Q637.48 119.69 637.48 105.53Q637.48 84.37 628.75 74.17Q620.02 63.97 607.66 63.97Q594.6 63.97 586.29 74.76Q577.97 85.54 577.97 105.56Q577.97 125 586 135.75Q594.03 146.51 607.45 146.51Z M731.49 161.67Q716.03 161.67 704.59 154.77Q693.15 147.87 686.87 135.21Q680.6 122.54 680.6 105.31Q680.6 88.01 686.85 75.32Q693.11 62.62 704.41 55.72Q715.71 48.81 730.86 48.81Q739.5 48.81 748.22 51.56Q756.94 54.31 764.16 61.07Q771.38 67.84 775.78 79.65Q780.17 91.47 780.17 109.51H692.53V95.45H763.96L759.38 101.62Q758.84 87.88 754.86 79.55Q750.89 71.22 744.56 67.48Q738.23 63.75 730.49 63.75Q721.2 63.75 714.52 68.64Q707.84 73.53 704.29 82.83Q700.73 92.13 700.73 105.42Q700.73 125.05 708.68 135.82Q716.63 146.59 731.46 146.59Q741.99 146.59 749.22 141.27Q756.45 135.95 759.9 125.79L777.82 131.56Q773.93 141.2 767.27 147.91Q760.61 154.62 751.52 158.15Q742.44 161.67 731.49 161.67Z M858.14 161.67Q847.36 161.67 837.1 156.34Q826.85 151.01 821.48 138.42L822.45 137.7V159.24H804.97V9.24H823.53V73.63L821.97 72.04Q826.53 60.23 836.61 54.52Q846.69 48.81 858.21 48.81Q871.47 48.81 881.46 55.7Q891.45 62.58 897.03 75.28Q902.6 87.98 902.6 105.36Q902.6 122.72 896.98 135.37Q891.35 148.02 881.35 154.85Q871.34 161.67 858.14 161.67ZM852.73 146.51Q865.78 146.51 874.1 135.72Q882.41 124.94 882.41 104.93Q882.41 85.48 874.38 74.72Q866.35 63.97 852.93 63.97Q844.73 63.97 837.88 68.27Q831.03 72.58 826.97 81.64Q822.9 90.7 822.9 104.96Q822.9 126.03 831.63 136.27Q840.36 146.51 852.73 146.51Z M963.38 161.67Q951.93 161.67 943.66 156.49Q935.39 151.31 930.98 141.72Q926.56 132.14 926.56 118.95V51.24H945.12V117.35Q945.12 130.53 950.05 138.52Q954.98 146.52 967.51 146.52Q976.66 146.52 983.48 141.8Q990.3 137.07 994.14 127.49Q997.99 117.91 997.99 103.34V51.24H1016.55V159.24H998.99V133.85L999.7 138.26Q995.41 148.4 986.1 155.04Q976.8 161.67 963.38 161.67Z M1087.06 200.67Q1062.68 200.67 1051.11 193.9Q1039.54 187.13 1039.54 172.98Q1039.54 164.87 1043.7 158.68Q1047.86 152.48 1057.65 149.2Q1053.86 146.85 1051.5 143.04Q1049.13 139.22 1049.13 134.53Q1049.13 128.86 1052.67 124.39Q1056.21 119.92 1062.8 118Q1054.8 113.27 1050.36 105.24Q1045.91 97.21 1045.91 86.6Q1045.91 75.01 1051.15 66.53Q1056.38 58.06 1066.04 53.44Q1075.71 48.81 1089 48.81Q1102.29 48.81 1112.04 53.44Q1121.79 58.06 1127.12 66.58Q1132.45 75.1 1132.45 86.78Q1132.45 98.27 1127.12 106.66Q1121.8 115.04 1112 119.61Q1102.2 124.19 1088.71 124.19H1079.69Q1067.47 124.19 1067.47 131.4Q1067.47 138.23 1079.36 138.23H1100.99Q1113.56 138.23 1121.39 141.14Q1129.23 144.05 1133.47 148.69Q1137.72 153.33 1139.32 158.8Q1140.91 164.26 1140.91 169.38Q1140.91 185.35 1129.21 193.01Q1117.5 200.67 1092.94 200.67ZM1087.15 186.51H1093Q1121.77 186.51 1121.77 169.32Q1121.77 162.21 1116.62 157.68Q1111.47 153.15 1098.92 153.15H1080.93Q1071.44 153.15 1064.97 157.05Q1058.5 160.95 1058.5 169.83Q1058.5 178.31 1065.51 182.41Q1072.53 186.51 1087.15 186.51ZM1089 111.46Q1101.16 111.46 1107.68 105.11Q1114.2 98.76 1114.2 86.78Q1114.2 74.9 1107.68 68.32Q1101.16 61.73 1089 61.73Q1076.94 61.73 1070.5 68.27Q1064.06 74.81 1064.06 86.78Q1064.06 98.76 1070.5 105.11Q1076.94 111.46 1089 111.46ZM1106.56 60.69V49.96Q1106.56 42.85 1111.58 38.39Q1116.6 33.92 1123.77 33.92H1136.41V48.98H1125.53Q1122.43 48.98 1121.48 50.08Q1120.53 51.18 1120.53 54.49V60.69Z M1200.76 200.67Q1176.38 200.67 1164.81 193.9Q1153.24 187.13 1153.24 172.98Q1153.24 164.87 1157.4 158.68Q1161.56 152.48 1171.35 149.2Q1167.56 146.85 1165.2 143.04Q1162.83 139.22 1162.83 134.53Q1162.83 128.86 1166.37 124.39Q1169.91 119.92 1176.5 118Q1168.5 113.27 1164.06 105.24Q1159.61 97.21 1159.61 86.6Q1159.61 75.01 1164.85 66.53Q1170.08 58.06 1179.74 53.44Q1189.41 48.81 1202.7 48.81Q1215.99 48.81 1225.74 53.44Q1235.49 58.06 1240.82 66.58Q1246.15 75.1 1246.15 86.78Q1246.15 98.27 1240.82 106.66Q1235.5 115.04 1225.7 119.61Q1215.9 124.19 1202.41 124.19H1193.39Q1181.17 124.19 1181.17 131.4Q1181.17 138.23 1193.06 138.23H1214.69Q1227.26 138.23 1235.09 141.14Q1242.93 144.05 1247.17 148.69Q1251.42 153.33 1253.02 158.8Q1254.61 164.26 1254.61 169.38Q1254.61 185.35 1242.91 193.01Q1231.2 200.67 1206.64 200.67ZM1200.85 186.51H1206.7Q1235.47 186.51 1235.47 169.32Q1235.47 162.21 1230.32 157.68Q1225.17 153.15 1212.62 153.15H1194.63Q1185.14 153.15 1178.67 157.05Q1172.2 160.95 1172.2 169.83Q1172.2 178.31 1179.21 182.41Q1186.23 186.51 1200.85 186.51ZM1202.7 111.46Q1214.86 111.46 1221.38 105.11Q1227.9 98.76 1227.9 86.78Q1227.9 74.9 1221.38 68.32Q1214.86 61.73 1202.7 61.73Q1190.64 61.73 1184.2 68.27Q1177.76 74.81 1177.76 86.78Q1177.76 98.76 1184.2 105.11Q1190.64 111.46 1202.7 111.46ZM1220.26 60.69V49.96Q1220.26 42.85 1225.28 38.39Q1230.3 33.92 1237.47 33.92H1250.11V48.98H1239.23Q1236.13 48.98 1235.18 50.08Q1234.23 51.18 1234.23 54.49V60.69Z M1320.19 161.67Q1304.73 161.67 1293.29 154.77Q1281.85 147.87 1275.57 135.21Q1269.3 122.54 1269.3 105.31Q1269.3 88.01 1275.55 75.32Q1281.81 62.62 1293.11 55.72Q1304.41 48.81 1319.56 48.81Q1328.2 48.81 1336.92 51.56Q1345.64 54.31 1352.86 61.07Q1360.08 67.84 1364.48 79.65Q1368.87 91.47 1368.87 109.51H1281.23V95.45H1352.66L1348.08 101.62Q1347.54 87.88 1343.56 79.55Q1339.59 71.22 1333.26 67.48Q1326.93 63.75 1319.19 63.75Q1309.9 63.75 1303.22 68.64Q1296.54 73.53 1292.99 82.83Q1289.43 92.13 1289.43 105.42Q1289.43 125.05 1297.38 135.82Q1305.33 146.59 1320.16 146.59Q1330.69 146.59 1337.92 141.27Q1345.15 135.95 1348.6 125.79L1366.52 131.56Q1362.63 141.2 1355.97 147.91Q1349.31 154.62 1340.22 158.15Q1331.14 161.67 1320.19 161.67Z M1393.66 159.24V51.24H1411.22V74.33L1410.54 71.66Q1415.38 60.34 1424.98 54.58Q1434.58 48.81 1444.64 48.81Q1447.57 48.81 1450.38 49.31Q1453.19 49.81 1455.69 51.01L1453.48 68.12Q1447.84 66.41 1442.36 66.41Q1438.75 66.41 1433.67 67.8Q1428.58 69.2 1423.68 73.28Q1418.78 77.36 1415.5 85.32Q1412.22 93.28 1412.22 106.41V159.24Z\"/><path style=\"fill:var(--brand-point)\" d=\"M158.51 13.21C162.22 24.64 158.23 35.1 145.98 38.19C134.52 41.06 123.86 38.6 120.13 27.81C116.74 18.2 121.96 6.11 132.86 2.77C143.37 -0.45 154.81 1.77 158.51 13.21Z\"/>"},
12
+ "mark": {"viewBox":"-0.1 1.4 160 160.5","art":"<path fill=\"currentColor\" d=\"M39.42 161.88Q29.25 161.88 20.24 158.48Q11.23 155.07 5.59 147.83Q-0.04 140.6 -0.04 129.14Q-0.04 116.76 7.11 108.68Q14.26 100.6 27.35 96.63Q40.44 92.67 58.36 92.67H72.43L70.63 95.8V89.43Q70.63 79.65 67.27 75.14Q63.92 70.63 56.2 70.63Q48.71 70.63 44.83 74.61Q40.95 78.6 39.68 86.32L4.75 80.68Q6.67 71.59 12.85 64.28Q19.04 56.97 30.18 52.67Q41.32 48.37 58.11 48.37Q72.86 48.37 83.43 52.77Q94 57.17 99.67 67.77Q105.33 78.37 105.33 97.05V128.66Q105.33 132.04 106.28 133.14Q107.23 134.24 106.4 134.24H109.4V159.24H99.05Q85.49 159.24 78.81 152.72Q72.13 146.19 72.13 133.48V129.41L78.48 132.16Q77.27 136.52 74.94 141.62Q72.61 146.71 68.28 151.33Q63.96 155.94 56.94 158.91Q49.92 161.88 39.42 161.88ZM49.9 139Q56.4 139 61.1 136.12Q65.8 133.23 68.38 127.75Q70.96 122.26 70.96 114.47V111.52H60.12Q50.51 111.52 45.22 114.04Q39.93 116.56 37.87 120.14Q35.81 123.72 35.81 127.09Q35.81 129.28 36.89 132.08Q37.97 134.88 41 136.94Q44.02 139 49.9 139ZM119 159.24 154.1 159.24 154.1 55.14 119 49.44Z\"/><path style=\"fill:var(--brand-point)\" d=\"M158.51 13.21C162.22 24.64 158.23 35.1 145.98 38.19C134.52 41.06 123.86 38.6 120.13 27.81C116.74 18.2 121.96 6.11 132.86 2.77C143.37 -0.45 154.81 1.77 158.51 13.21Z\"/>"},
13
+ "master": {"viewBox":"0.5 0.4 630.3 95.1","art":"<path fill=\"currentColor\" d=\"M18.69 73.87Q13.39 74.14 9.32 72.01Q5.24 69.89 2.88 66.02Q0.52 62.15 0.52 57.11Q0.52 51.85 3.23 48.08Q5.93 44.31 10.49 42.23Q15.05 40.16 20.63 40.16Q23.66 40.16 26.15 40.5Q28.64 40.85 30.6 41.34Q32.55 41.83 33.65 42.51L33.6 40.55Q33.6 36.69 30.64 34.19Q27.68 31.68 22.49 31.68Q19.02 31.68 15.79 33.26Q12.56 34.84 10.35 37.63L1.91 30.84Q4.45 27.48 7.69 25.26Q10.92 23.04 14.84 21.91Q18.76 20.78 23.07 20.78Q34.53 20.78 40.52 26.12Q46.51 31.45 46.51 41.71V72.58H33.6V67.41L33.05 67.53Q31.73 69.2 29.67 70.73Q27.61 72.26 24.87 73.2Q22.12 74.14 18.69 73.87Z M125.55 73.87Q120.25 74.14 116.18 72.01Q112.1 69.89 109.74 66.02Q107.38 62.15 107.38 57.11Q107.38 51.85 110.09 48.08Q112.79 44.31 117.35 42.23Q121.91 40.16 127.49 40.16Q130.52 40.16 133.01 40.5Q135.5 40.85 137.46 41.34Q139.41 41.83 140.51 42.51L140.46 40.55Q140.46 36.69 137.5 34.19Q134.54 31.68 129.35 31.68Q125.88 31.68 122.65 33.26Q119.42 34.84 117.21 37.63L108.77 30.84Q111.31 27.48 114.55 25.26Q117.78 23.04 121.7 21.91Q125.62 20.78 129.93 20.78Q141.39 20.78 147.38 26.12Q153.37 31.45 153.37 41.71V72.58H140.46V67.41L139.92 67.53Q138.59 69.2 136.53 70.73Q134.48 72.26 131.73 73.2Q128.98 74.14 125.55 73.87Z M450.75 73.87Q443.21 74.14 437.29 70.69Q431.36 67.25 427.98 61.24Q424.6 55.23 424.6 47.56Q424.6 40.38 427.93 34.27Q431.26 28.17 437.04 24.47Q442.82 20.78 450.26 20.78Q458.29 20.78 463.78 24.23Q469.27 27.68 472.12 33.45Q474.96 39.21 474.96 46.19Q474.96 47.76 474.86 48.91Q474.76 50.05 474.63 50.77H437.51Q437.95 53.33 439.04 55.35Q440.87 58.74 443.99 60.51Q447.11 62.27 450.95 62.27Q455.46 62.27 458.54 60.31Q461.62 58.36 463.42 55.19L474.05 60.5Q470.45 66.95 464.76 70.55Q459.07 74.14 450.75 73.87Z M265.67 72.58V2.26H278.77V40.4L296.99 22.34H312.92V23.5L294.27 41.82L313.81 71.45V72.58H298.43L284.98 50.94L278.77 57.04V72.58Z M379.8 95.41Q376.24 95.68 373.67 93.78Q371.1 91.88 369.95 88.83L376.5 85.98Q376.93 87.36 377.77 88.07Q378.6 88.79 379.8 88.79Q381.29 88.79 382.07 87.95Q382.85 87.11 382.85 85.95Q382.85 84.79 382.06 83.86Q381.28 82.92 379.8 82.92Q378.98 82.92 378.37 83.33Q377.77 83.73 377.22 84.34L371.04 81.42L373.96 73.81Q370.13 73.5 367.13 72.27Q362.57 70.4 359.72 67.33Q356.87 64.27 355.44 60.37L367.14 55.19Q368.84 58.85 371.62 60.61Q374.39 62.36 378.14 62.36Q381.23 62.36 383.69 61.4Q386.15 60.44 386.15 57.89Q386.15 56.07 384.88 55.01Q383.61 53.96 381.69 53.34Q379.76 52.72 377.72 52.33L371.88 51.06Q368.25 50.27 365.01 48.24Q361.77 46.21 359.75 43.08Q357.73 39.95 357.73 35.87Q357.73 31.3 360.35 27.91Q362.96 24.54 367.42 22.66Q371.89 20.78 377.27 20.78Q382.26 20.78 386.28 21.96Q390.3 23.14 393.25 25.57Q396.2 27.99 398.04 32L386.81 37Q385.22 33.95 382.78 32.81Q380.35 31.68 377.57 31.68Q374.31 31.68 372.43 32.88Q370.54 34.08 370.54 35.67Q370.54 37.38 372.43 38.68Q374.32 39.98 377.02 40.65L384.32 42.41Q391.77 44.18 395.56 48.15Q399.35 52.12 399.35 57.7Q399.35 62.66 396.49 66.38Q393.64 70.1 388.83 72.12Q385.12 73.68 380.77 73.88L379.45 76.78Q379.79 76.52 380.19 76.52H381.07Q384.94 76.52 387.67 79.08Q390.39 81.65 390.39 86.05Q390.39 88.76 389.05 90.97Q387.71 93.18 385.33 94.43Q382.96 95.68 379.8 95.41Z M54.87 72.58V22.34H67.19V28.69L67.72 28.57Q69.94 25.03 74.06 22.91Q78.18 20.78 82.99 20.78Q92.21 20.78 96.83 26.42Q101.45 32.06 101.45 41.42V72.58H88.34V43Q88.34 38.25 85.92 35.74Q83.49 33.24 79.28 33.24Q75.83 33.24 73.29 35.09Q70.76 36.95 69.36 40.05Q67.97 43.16 67.97 47V72.58Z M202.33 33.83V22.34H210.97V8.3H224.07V22.34H236.22V33.83H224.07V54.06Q224.07 57.56 225.49 59.18Q226.9 60.8 230.13 60.8Q231.66 60.8 233 60.38Q234.34 59.95 236.61 58.44V71.62Q234.35 72.48 232.14 72.92Q229.94 73.36 227.59 73.09Q219.82 73.36 215.4 68.85Q210.97 64.33 210.97 56.43V33.83Z M161.73 72.58V2.26H174.83V72.58Z M405.17 72.58V2.26H418.27V72.58Z M481.28 72.58V22.34H493.6V29.07L494.13 28.97Q495.36 26.72 497.48 24.89Q499.59 23.05 502.44 21.96Q505.29 20.88 508.52 20.88Q510.49 20.88 512.06 21.18Q513.63 21.47 514.91 22.04V35.41Q512.66 34.5 510.68 33.97Q508.7 33.44 506.48 33.44Q502.74 33.44 500 35.28Q497.27 37.13 495.83 40.33Q494.38 43.53 494.38 47.57V72.58Z M183.87 72.58V22.34H196.97V72.58Z M243.53 72.58V22.34H256.63V72.58Z M336.95 72.58V22.34H350.05V72.58Z M128.57 63.9Q132.41 63.63 135.05 61.97Q137.68 60.31 139.07 57.65Q140.46 54.99 140.46 52.21Q138.43 51.24 135.72 50.62Q133.02 49.99 130.21 49.99Q124.65 49.99 122.57 52.05Q120.48 54.11 120.48 57.1Q120.48 59.9 122.52 61.76Q124.56 63.63 128.57 63.9Z M21.71 63.9Q25.55 63.63 28.18 61.97Q30.82 60.31 32.21 57.65Q33.6 54.99 33.6 52.21Q31.57 51.24 28.86 50.62Q26.16 49.99 23.35 49.99Q17.79 49.99 15.71 52.05Q13.62 54.11 13.62 57.1Q13.62 59.9 15.66 61.76Q17.69 63.63 21.71 63.9Z M438.05 41.16 462.35 41.26Q462.25 39.84 461.39 38.13Q460.53 36.44 459 35.01Q457.47 33.59 455.31 32.68Q453.15 31.78 450.37 31.78Q446.72 31.78 443.7 33.68Q440.67 35.59 438.94 38.98Q438.41 40.01 438.05 41.16Z M190.47 17.18Q186.99 17.46 184.5 14.94Q182.02 12.41 182.02 8.88Q182.02 5.35 184.5 2.88Q186.99 0.41 190.47 0.41Q193.95 0.41 196.38 2.88Q198.82 5.35 198.82 8.88Q198.82 12.41 196.38 14.93Q193.95 17.46 190.47 17.18Z M250.12 17.18Q246.65 17.46 244.16 14.94Q241.68 12.41 241.68 8.88Q241.68 5.35 244.16 2.88Q246.65 0.41 250.12 0.41Q253.6 0.41 256.04 2.88Q258.48 5.35 258.48 8.88Q258.48 12.41 256.04 14.93Q253.6 17.46 250.12 17.18Z\"/><path fill=\"currentColor\" d=\"M571.52 72.3V6.88C571.52 5.67 572.5 4.69 573.71 4.69H598.34C599.55 4.69 600.53 5.67 600.53 6.88V72.3ZM541.25 72.3V23.43C541.25 22.22 542.23 21.25 543.43 21.25H569.12V72.3ZM603 72.3V30.99H628.56C629.77 30.99 630.75 31.97 630.75 33.18V72.3Z\"/><path style=\"fill:var(--brand-point)\" d=\"M353.23 5.91C354.89 11.02 353.11 15.7 347.63 17.08C342.51 18.36 337.75 17.27 336.08 12.44C334.56 8.14 336.89 2.74 341.77 1.25C346.47 -0.19 351.58 0.8 353.23 5.91Z\"/>"},
14
+ };
15
+
16
+ /** Images as data URIs (the report CSP allows img-src data:). */
5
17
  export const LOGOS = {
6
- "stacked-light": "data:image/webp;base64,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",
7
- "stacked-dark": "data:image/webp;base64,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",
8
- "horizontal-light": "data:image/webp;base64,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",
9
- "horizontal-dark": "data:image/webp;base64,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",
10
- "atd-lockup-light": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzk2LjIzMSIgaGVpZ2h0PSIyMDQiIHZpZXdCb3g9IjAgMCAxMzk2LjIzMSAyMDQiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KPHRpdGxlPmFpIHRhZyBkZWJ1Z2dlciDigJQgR29vZ2xlIFNhbnMgQm9sZCDigJQgbGlnaHQ8L3RpdGxlPgo8ZGVzYz5Mb3dlcmNhc2UgbGV0dGVyaW5nIG91dGxpbmVkIGZyb20gdGhlIGluc3RhbGxlZCBHb29nbGUgU2FucyBCb2xkIDEzLjAwMiBmb250LiBUYWcgYW5kIHZpc2libGUgd29yZG1hcmsgYm90aCBoYXZlIGhlaWdodCAxNDAuIE9yYW5nZSB0b2tlbjogI0Q5NTMxRS4gVHJhbnNwYXJlbnQgYmFja2dyb3VuZC48L2Rlc2M+CjxnIGFyaWEtbGFiZWw9ImFpIHRhZyBkZWJ1Z2dlciI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIgMzIpIHNjYWxlKDAuNjczMDc2OTIzKSIgZmlsbD0iI0Q5NTMxRSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNDIgMEgyMjRRMjM3IDAgMjQ3IDEwTDMxMiA4OFEzMjggMTA0IDMxMiAxMjBMMjQ3IDE5OFEyMzcgMjA4IDIyNCAyMDhINDJRMCAyMDggMCAxNjZWNDJRMCAwIDQyIDBaIE00OSA5MVE2MSA3OSA3MyA5MUwxMDYgMTI0TDE4MCA1MFExOTIgMzggMjA0IDUwUTIxNiA2MiAyMDQgNzRMMTE4IDE2MFExMDYgMTcyIDk0IDE2MEw0OSAxMTVRMzcgMTAzIDQ5IDkxWiBNMjgxIDEwNGExNyAxNyAwIDEgMCAtMzQgMGExNyAxNyAwIDEgMCAzNCAwWiIvPjwvZz4KICA8cGF0aCBmaWxsPSIjMEEwRTFBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzIuMzE3Mzk3MTg0IDEzOC40MTE1ODIyMTMpIHNjYWxlKDAuMTQ0Nzc3NjYzIC0wLjE0NDc3NzY2MykiIGQ9Ik0yMjAgLTE2UTE2NiAtMTYgMTI0LjUgNS41UTgzIDI3IDU5LjAgNjYuMFEzNSAxMDUgMzUgMTU2UTM1IDIwOSA2Mi41IDI0Ny4wUTkwIDI4NSAxMzYuNSAzMDYuMFExODMgMzI3IDI0MCAzMjdRMjcxIDMyNyAyOTYuNSAzMjMuNVEzMjIgMzIwIDM0Mi4wIDMxNS4wUTM2MiAzMTAgMzc1IDMwNFYzMjZRMzc1IDM2NyAzNDQuMCAzOTMuNVEzMTMgNDIwIDI1OSA0MjBRMjIzIDQyMCAxODkuNSA0MDMuNVExNTYgMzg3IDEzNCAzNjBMNTAgNDI2UTc1IDQ1OCAxMDguMCA0ODAuNVExNDEgNTAzIDE4MS4wIDUxNC41UTIyMSA1MjYgMjY1IDUyNlEzODIgNTI2IDQ0My4wIDQ3Mi4wUTUwNCA0MTggNTA0IDMxNFYwSDM3NVY1MkgzNjdRMzUzIDM0IDMzMi4wIDE4LjVRMzExIDMgMjgzLjAgLTYuNVEyNTUgLTE2IDIyMCAtMTZaTTI1MSA4NlEyOTEgODYgMzE4LjUgMTAzLjVRMzQ2IDEyMSAzNjAuNSAxNDkuMFEzNzUgMTc3IDM3NSAyMDhRMzUzIDIxOSAzMjUuMCAyMjUuNVEyOTcgMjMyIDI2OCAyMzJRMjEwIDIzMiAxODguMCAyMTAuMFExNjYgMTg4IDE2NiAxNTZRMTY2IDEyNiAxODcuNSAxMDYuMFEyMDkgODYgMjUxIDg2Wk02MjMgMFY1MTBINzU0VjBaTTY4OSA1NjZRNjU0IDU2NiA2MjkuMCA1OTEuMFE2MDQgNjE2IDYwNCA2NTFRNjA0IDY4NiA2MjkuMCA3MTAuNVE2NTQgNzM1IDY4OSA3MzVRNzI0IDczNSA3NDguNSA3MTAuNVE3NzMgNjg2IDc3MyA2NTFRNzczIDYxNiA3NDguNSA1OTEuMFE3MjQgNTY2IDY4OSA1NjZaTTEwNzYgMzk4VjUxMEgxMTcwVjM5OFpNMTMzNCAtOFExMjU1IC04IDEyMTAuMCAzNy41UTExNjUgODMgMTE2NSAxNjNWNjU0SDEyOTZWMTg3UTEyOTYgMTUwIDEzMTEuMCAxMzIuNVExMzI2IDExNSAxMzYwIDExNVExMzc2IDExNSAxMzkwLjAgMTE5LjVRMTQwNCAxMjQgMTQyNSAxMzdWOVExNDAzIDEgMTM4MC41IC0zLjVRMTM1OCAtOCAxMzM0IC04Wk0xMjkxIDM5OFY1MTBIMTQyMVYzOThaTTE2NzYgLTE2UTE2MjIgLTE2IDE1ODAuNSA1LjVRMTUzOSAyNyAxNTE1LjAgNjYuMFExNDkxIDEwNSAxNDkxIDE1NlExNDkxIDIwOSAxNTE4LjUgMjQ3LjBRMTU0NiAyODUgMTU5Mi41IDMwNi4wUTE2MzkgMzI3IDE2OTYgMzI3UTE3MjcgMzI3IDE3NTIuNSAzMjMuNVExNzc4IDMyMCAxNzk4LjAgMzE1LjBRMTgxOCAzMTAgMTgzMSAzMDRWMzI2UTE4MzEgMzY3IDE4MDAuMCAzOTMuNVExNzY5IDQyMCAxNzE1IDQyMFExNjc5IDQyMCAxNjQ1LjUgNDAzLjVRMTYxMiAzODcgMTU5MCAzNjBMMTUwNiA0MjZRMTUzMSA0NTggMTU2NC4wIDQ4MC41UTE1OTcgNTAzIDE2MzcuMCA1MTQuNVExNjc3IDUyNiAxNzIxIDUyNlExODM4IDUyNiAxODk5LjAgNDcyLjBRMTk2MCA0MTggMTk2MCAzMTRWMEgxODMxVjUySDE4MjNRMTgwOSAzNCAxNzg4LjAgMTguNVExNzY3IDMgMTczOS4wIC02LjVRMTcxMSAtMTYgMTY3NiAtMTZaTTE3MDcgODZRMTc0NyA4NiAxNzc0LjUgMTAzLjVRMTgwMiAxMjEgMTgxNi41IDE0OS4wUTE4MzEgMTc3IDE4MzEgMjA4UTE4MDkgMjE5IDE3ODEuMCAyMjUuNVExNzUzIDIzMiAxNzI0IDIzMlExNjY2IDIzMiAxNjQ0LjAgMjEwLjBRMTYyMiAxODggMTYyMiAxNTZRMTYyMiAxMjYgMTY0My41IDEwNi4wUTE2NjUgODYgMTcwNyA4NlpNMjMxNCAtMjMyUTIyNDUgLTIzMiAyMTk0LjUgLTIxMC41UTIxNDQgLTE4OSAyMTEyLjAgLTE1NS4wUTIwODAgLTEyMSAyMDY3IC04NEwyMTkwIC0zNFEyMjA2IC03MSAyMjM4LjUgLTkzLjVRMjI3MSAtMTE2IDIzMTQgLTExNlEyMzc1IC0xMTYgMjQxMi4wIC03OC41UTI0NDkgLTQxIDI0NDkgMzBWNzBIMjQ0MVEyNDE3IDM2IDIzNzguMCAxOC4wUTIzMzkgMCAyMjg5IDBRMjIyNyAwIDIxNzIuNSAzMi4wUTIxMTggNjQgMjA4NC41IDEyMy4wUTIwNTEgMTgyIDIwNTEgMjYzUTIwNTEgMzQ1IDIwODQuNSA0MDMuNVEyMTE4IDQ2MiAyMTcyLjUgNDk0LjBRMjIyNyA1MjYgMjI4OSA1MjZRMjMzOSA1MjYgMjM3OC4wIDUwOC41UTI0MTcgNDkxIDI0NDEgNDU2SDI0NDlWNTEwSDI1NzVWMzVRMjU3NSAtNDcgMjU0My4wIC0xMDcuMFEyNTExIC0xNjcgMjQ1Mi41IC0xOTkuNVEyMzk0IC0yMzIgMjMxNCAtMjMyWk0yMzE2IDExOVEyMzUxIDExOSAyMzgxLjUgMTM1LjVRMjQxMiAxNTIgMjQzMC41IDE4NC41UTI0NDkgMjE3IDI0NDkgMjYzUTI0NDkgMzExIDI0MzAuNSAzNDMuMFEyNDEyIDM3NSAyMzgxLjUgMzkxLjBRMjM1MSA0MDcgMjMxNiA0MDdRMjI4MSA0MDcgMjI1MC4wIDM5MS4wUTIyMTkgMzc1IDIyMDAuNSAzNDMuMFEyMTgyIDMxMSAyMTgyIDI2M1EyMTgyIDIxNiAyMjAwLjUgMTgzLjVRMjIxOSAxNTEgMjI1MC4wIDEzNS4wUTIyODEgMTE5IDIzMTYgMTE5Wk0zMTU0IC0xNlEzMDg0IC0xNiAzMDI4LjAgMTguNVEyOTcyIDUzIDI5MzkuNSAxMTQuMFEyOTA3IDE3NSAyOTA3IDI1NVEyOTA3IDMzNSAyOTM5LjUgMzk2LjBRMjk3MiA0NTcgMzAyOC4wIDQ5MS41UTMwODQgNTI2IDMxNTQgNTI2UTMxOTEgNTI2IDMyMjEuMCA1MTUuMFEzMjUxIDUwNCAzMjczLjAgNDg2LjBRMzI5NSA0NjggMzMwNyA0NDhIMzMxNUwzMzA3IDUyMFY3MTZIMzQzN1YwSDMzMTVWNjFIMzMwN1EzMjk1IDQxIDMyNzMuMCAyMy41UTMyNTEgNiAzMjIxLjAgLTUuMFEzMTkxIC0xNiAzMTU0IC0xNlpNMzE3NiAxMDVRMzIxMyAxMDUgMzI0NC41IDEyNC4wUTMyNzYgMTQzIDMyOTUuNSAxNzYuNVEzMzE1IDIxMCAzMzE1IDI1NVEzMzE1IDMwMCAzMjk1LjUgMzMzLjVRMzI3NiAzNjcgMzI0NC41IDM4NS41UTMyMTMgNDA0IDMxNzYgNDA0UTMxNDAgNDA0IDMxMDguNSAzODUuNVEzMDc3IDM2NyAzMDU3LjUgMzM0LjBRMzAzOCAzMDEgMzAzOCAyNTVRMzAzOCAyMTAgMzA1Ny41IDE3Ni4wUTMwNzcgMTQyIDMxMDguNSAxMjMuNVEzMTQwIDEwNSAzMTc2IDEwNVpNMzgwMiAtMTZRMzcyNSAtMTYgMzY2NC41IDE5LjBRMzYwNCA1NCAzNTY5LjUgMTE1LjBRMzUzNSAxNzYgMzUzNSAyNTRRMzUzNSAzMjcgMzU2OS4wIDM4OS4wUTM2MDMgNDUxIDM2NjIuMCA0ODguNVEzNzIxIDUyNiAzNzk3IDUyNlEzODc5IDUyNiAzOTM1LjAgNDkxLjBRMzk5MSA0NTYgNDAyMC4wIDM5Ny41UTQwNDkgMzM5IDQwNDkgMjY4UTQwNDkgMjUyIDQwNDguMCAyNDAuNVE0MDQ3IDIyOSA0MDQ2IDIyNEgzNjA4VjMxN0gzOTIzUTM5MjIgMzM0IDM5MTMuMCAzNTIuMFEzOTA0IDM3MCAzODg4LjAgMzg1LjBRMzg3MiA0MDAgMzg0OS41IDQwOS41UTM4MjcgNDE5IDM3OTggNDE5UTM3NjAgNDE5IDM3MjguNSAzOTkuMFEzNjk3IDM3OSAzNjc5LjAgMzQzLjVRMzY2MSAzMDggMzY2MSAyNTlRMzY2MSAyMDggMzY4MC4wIDE3Mi41UTM2OTkgMTM3IDM3MzEuNSAxMTguNVEzNzY0IDEwMCAzODA0IDEwMFEzODUxIDEwMCAzODgzLjAgMTIwLjVRMzkxNSAxNDEgMzkzMyAxNzJMNDAzOSAxMjBRNDAwMyA1NyAzOTQ1LjAgMjAuNVEzODg3IC0xNiAzODAyIC0xNlpNNDQzMSAtMTZRNDM5NCAtMTYgNDM2NC4wIC01LjBRNDMzNCA2IDQzMTIuNSAyMy41UTQyOTEgNDEgNDI3OCA2MUg0MjcwVjBINDE0N1Y3MTZINDI3OFY1MjBMNDI3MCA0NDhINDI3OFE0MjkxIDQ2OCA0MzEyLjUgNDg2LjBRNDMzNCA1MDQgNDM2NC4wIDUxNS4wUTQzOTQgNTI2IDQ0MzEgNTI2UTQ1MDEgNTI2IDQ1NTYuNSA0OTEuNVE0NjEyIDQ1NyA0NjQ0LjUgMzk2LjBRNDY3NyAzMzUgNDY3NyAyNTVRNDY3NyAxNzUgNDY0NC41IDExNC4wUTQ2MTIgNTMgNDU1Ni41IDE4LjVRNDUwMSAtMTYgNDQzMSAtMTZaTTQ0MDggMTA1UTQ0NDUgMTA1IDQ0NzYuNSAxMjMuNVE0NTA4IDE0MiA0NTI3LjUgMTc2LjBRNDU0NyAyMTAgNDU0NyAyNTVRNDU0NyAzMDEgNDUyNy41IDMzNC4wUTQ1MDggMzY3IDQ0NzYuNSAzODUuNVE0NDQ1IDQwNCA0NDA4IDQwNFE0MzcyIDQwNCA0MzQwLjUgMzg1LjVRNDMwOSAzNjcgNDI4OS41IDMzMy41UTQyNzAgMzAwIDQyNzAgMjU1UTQyNzAgMjEwIDQyODkuNSAxNzYuNVE0MzA5IDE0MyA0MzQwLjUgMTI0LjBRNDM3MiAxMDUgNDQwOCAxMDVaTTQ5NTkgLTE2UTQ4NjUgLTE2IDQ4MTguMCA0Mi4wUTQ3NzEgMTAwIDQ3NzEgMjAwVjUxMEg0OTAyVjIxNlE0OTAyIDE2NCA0OTI3LjUgMTM0LjVRNDk1MyAxMDUgNDk5MyAxMDVRNTAzMiAxMDUgNTA1OS4wIDEyNC41UTUwODYgMTQ0IDUxMDAuNSAxNzcuMFE1MTE1IDIxMCA1MTE1IDI1MFY1MTBINTI0NlYwSDUxMjNWNjRINTExNVE1MTAwIDQwIDUwNzYuMCAyMi4wUTUwNTIgNCA1MDIyLjUgLTYuMFE0OTkzIC0xNiA0OTU5IC0xNlpNNTYwNyAtMjMyUTU1MzggLTIzMiA1NDg3LjUgLTIxMC41UTU0MzcgLTE4OSA1NDA1LjAgLTE1NS4wUTUzNzMgLTEyMSA1MzYwIC04NEw1NDgzIC0zNFE1NDk5IC03MSA1NTMxLjUgLTkzLjVRNTU2NCAtMTE2IDU2MDcgLTExNlE1NjY4IC0xMTYgNTcwNS4wIC03OC41UTU3NDIgLTQxIDU3NDIgMzBWNzBINTczNFE1NzEwIDM2IDU2NzEuMCAxOC4wUTU2MzIgMCA1NTgyIDBRNTUyMCAwIDU0NjUuNSAzMi4wUTU0MTEgNjQgNTM3Ny41IDEyMy4wUTUzNDQgMTgyIDUzNDQgMjYzUTUzNDQgMzQ1IDUzNzcuNSA0MDMuNVE1NDExIDQ2MiA1NDY1LjUgNDk0LjBRNTUyMCA1MjYgNTU4MiA1MjZRNTYzMiA1MjYgNTY3MS4wIDUwOC41UTU3MTAgNDkxIDU3MzQgNDU2SDU3NDJWNTEwSDU4NjhWMzVRNTg2OCAtNDcgNTgzNi4wIC0xMDcuMFE1ODA0IC0xNjcgNTc0NS41IC0xOTkuNVE1Njg3IC0yMzIgNTYwNyAtMjMyWk01NjA5IDExOVE1NjQ0IDExOSA1Njc0LjUgMTM1LjVRNTcwNSAxNTIgNTcyMy41IDE4NC41UTU3NDIgMjE3IDU3NDIgMjYzUTU3NDIgMzExIDU3MjMuNSAzNDMuMFE1NzA1IDM3NSA1Njc0LjUgMzkxLjBRNTY0NCA0MDcgNTYwOSA0MDdRNTU3NCA0MDcgNTU0My4wIDM5MS4wUTU1MTIgMzc1IDU0OTMuNSAzNDMuMFE1NDc1IDMxMSA1NDc1IDI2M1E1NDc1IDIxNiA1NDkzLjUgMTgzLjVRNTUxMiAxNTEgNTU0My4wIDEzNS4wUTU1NzQgMTE5IDU2MDkgMTE5Wk02MjI5IC0yMzJRNjE2MCAtMjMyIDYxMDkuNSAtMjEwLjVRNjA1OSAtMTg5IDYwMjcuMCAtMTU1LjBRNTk5NSAtMTIxIDU5ODIgLTg0TDYxMDUgLTM0UTYxMjEgLTcxIDYxNTMuNSAtOTMuNVE2MTg2IC0xMTYgNjIyOSAtMTE2UTYyOTAgLTExNiA2MzI3LjAgLTc4LjVRNjM2NCAtNDEgNjM2NCAzMFY3MEg2MzU2UTYzMzIgMzYgNjI5My4wIDE4LjBRNjI1NCAwIDYyMDQgMFE2MTQyIDAgNjA4Ny41IDMyLjBRNjAzMyA2NCA1OTk5LjUgMTIzLjBRNTk2NiAxODIgNTk2NiAyNjNRNTk2NiAzNDUgNTk5OS41IDQwMy41UTYwMzMgNDYyIDYwODcuNSA0OTQuMFE2MTQyIDUyNiA2MjA0IDUyNlE2MjU0IDUyNiA2MjkzLjAgNTA4LjVRNjMzMiA0OTEgNjM1NiA0NTZINjM2NFY1MTBINjQ5MFYzNVE2NDkwIC00NyA2NDU4LjAgLTEwNy4wUTY0MjYgLTE2NyA2MzY3LjUgLTE5OS41UTYzMDkgLTIzMiA2MjI5IC0yMzJaTTYyMzEgMTE5UTYyNjYgMTE5IDYyOTYuNSAxMzUuNVE2MzI3IDE1MiA2MzQ1LjUgMTg0LjVRNjM2NCAyMTcgNjM2NCAyNjNRNjM2NCAzMTEgNjM0NS41IDM0My4wUTYzMjcgMzc1IDYyOTYuNSAzOTEuMFE2MjY2IDQwNyA2MjMxIDQwN1E2MTk2IDQwNyA2MTY1LjAgMzkxLjBRNjEzNCAzNzUgNjExNS41IDM0My4wUTYwOTcgMzExIDYwOTcgMjYzUTYwOTcgMjE2IDYxMTUuNSAxODMuNVE2MTM0IDE1MSA2MTY1LjAgMTM1LjBRNjE5NiAxMTkgNjIzMSAxMTlaTTY4NTUgLTE2UTY3NzggLTE2IDY3MTcuNSAxOS4wUTY2NTcgNTQgNjYyMi41IDExNS4wUTY1ODggMTc2IDY1ODggMjU0UTY1ODggMzI3IDY2MjIuMCAzODkuMFE2NjU2IDQ1MSA2NzE1LjAgNDg4LjVRNjc3NCA1MjYgNjg1MCA1MjZRNjkzMiA1MjYgNjk4OC4wIDQ5MS4wUTcwNDQgNDU2IDcwNzMuMCAzOTcuNVE3MTAyIDMzOSA3MTAyIDI2OFE3MTAyIDI1MiA3MTAxLjAgMjQwLjVRNzEwMCAyMjkgNzA5OSAyMjRINjY2MVYzMTdINjk3NlE2OTc1IDMzNCA2OTY2LjAgMzUyLjBRNjk1NyAzNzAgNjk0MS4wIDM4NS4wUTY5MjUgNDAwIDY5MDIuNSA0MDkuNVE2ODgwIDQxOSA2ODUxIDQxOVE2ODEzIDQxOSA2NzgxLjUgMzk5LjBRNjc1MCAzNzkgNjczMi4wIDM0My41UTY3MTQgMzA4IDY3MTQgMjU5UTY3MTQgMjA4IDY3MzMuMCAxNzIuNVE2NzUyIDEzNyA2Nzg0LjUgMTE4LjVRNjgxNyAxMDAgNjg1NyAxMDBRNjkwNCAxMDAgNjkzNi4wIDEyMC41UTY5NjggMTQxIDY5ODYgMTcyTDcwOTIgMTIwUTcwNTYgNTcgNjk5OC4wIDIwLjVRNjk0MCAtMTYgNjg1NSAtMTZaTTcyMDAgMFY1MTBINzMyM1Y0NDJINzMzMVE3MzQ0IDQ2NiA3MzY1LjUgNDg0LjVRNzM4NyA1MDMgNzQxNi4wIDUxNC4wUTc0NDUgNTI1IDc0NzggNTI1UTc0OTggNTI1IDc1MTQuMCA1MjIuMFE3NTMwIDUxOSA3NTQyIDUxNFYzODNRNzUyMSAzOTEgNzUwMC41IDM5Ni41UTc0ODAgNDAyIDc0NTcgNDAyUTc0MTggNDAyIDczODkuNSAzODIuNVE3MzYxIDM2MyA3MzQ2LjAgMzI5LjVRNzMzMSAyOTYgNzMzMSAyNTRWMFoiLz4KPC9nPgo8L3N2Zz4=",
11
- "atd-lockup-dark": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzk2LjIzMSIgaGVpZ2h0PSIyMDQiIHZpZXdCb3g9IjAgMCAxMzk2LjIzMSAyMDQiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KPHRpdGxlPmFpIHRhZyBkZWJ1Z2dlciDigJQgR29vZ2xlIFNhbnMgQm9sZCDigJQgZGFyazwvdGl0bGU+CjxkZXNjPkxvd2VyY2FzZSBsZXR0ZXJpbmcgb3V0bGluZWQgZnJvbSB0aGUgaW5zdGFsbGVkIEdvb2dsZSBTYW5zIEJvbGQgMTMuMDAyIGZvbnQuIFRhZyBhbmQgdmlzaWJsZSB3b3JkbWFyayBib3RoIGhhdmUgaGVpZ2h0IDE0MC4gT3JhbmdlIHRva2VuOiAjRkY2RDMzLiBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kLjwvZGVzYz4KPGcgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMiAzMikgc2NhbGUoMC42NzMwNzY5MjMpIiBmaWxsPSIjRkY2RDMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00MiAwSDIyNFEyMzcgMCAyNDcgMTBMMzEyIDg4UTMyOCAxMDQgMzEyIDEyMEwyNDcgMTk4UTIzNyAyMDggMjI0IDIwOEg0MlEwIDIwOCAwIDE2NlY0MlEwIDAgNDIgMFogTTQ5IDkxUTYxIDc5IDczIDkxTDEwNiAxMjRMMTgwIDUwUTE5MiAzOCAyMDQgNTBRMjE2IDYyIDIwNCA3NEwxMTggMTYwUTEwNiAxNzIgOTQgMTYwTDQ5IDExNVEzNyAxMDMgNDkgOTFaIE0yODEgMTA0YTE3IDE3IDAgMSAwIC0zNCAwYTE3IDE3IDAgMSAwIDM0IDBaIi8+PC9nPgogIDxwYXRoIGZpbGw9IiNGNUY3RkEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Mi4zMTczOTcxODQgMTM4LjQxMTU4MjIxMykgc2NhbGUoMC4xNDQ3Nzc2NjMgLTAuMTQ0Nzc3NjYzKSIgZD0iTTIyMCAtMTZRMTY2IC0xNiAxMjQuNSA1LjVRODMgMjcgNTkuMCA2Ni4wUTM1IDEwNSAzNSAxNTZRMzUgMjA5IDYyLjUgMjQ3LjBROTAgMjg1IDEzNi41IDMwNi4wUTE4MyAzMjcgMjQwIDMyN1EyNzEgMzI3IDI5Ni41IDMyMy41UTMyMiAzMjAgMzQyLjAgMzE1LjBRMzYyIDMxMCAzNzUgMzA0VjMyNlEzNzUgMzY3IDM0NC4wIDM5My41UTMxMyA0MjAgMjU5IDQyMFEyMjMgNDIwIDE4OS41IDQwMy41UTE1NiAzODcgMTM0IDM2MEw1MCA0MjZRNzUgNDU4IDEwOC4wIDQ4MC41UTE0MSA1MDMgMTgxLjAgNTE0LjVRMjIxIDUyNiAyNjUgNTI2UTM4MiA1MjYgNDQzLjAgNDcyLjBRNTA0IDQxOCA1MDQgMzE0VjBIMzc1VjUySDM2N1EzNTMgMzQgMzMyLjAgMTguNVEzMTEgMyAyODMuMCAtNi41UTI1NSAtMTYgMjIwIC0xNlpNMjUxIDg2UTI5MSA4NiAzMTguNSAxMDMuNVEzNDYgMTIxIDM2MC41IDE0OS4wUTM3NSAxNzcgMzc1IDIwOFEzNTMgMjE5IDMyNS4wIDIyNS41UTI5NyAyMzIgMjY4IDIzMlEyMTAgMjMyIDE4OC4wIDIxMC4wUTE2NiAxODggMTY2IDE1NlExNjYgMTI2IDE4Ny41IDEwNi4wUTIwOSA4NiAyNTEgODZaTTYyMyAwVjUxMEg3NTRWMFpNNjg5IDU2NlE2NTQgNTY2IDYyOS4wIDU5MS4wUTYwNCA2MTYgNjA0IDY1MVE2MDQgNjg2IDYyOS4wIDcxMC41UTY1NCA3MzUgNjg5IDczNVE3MjQgNzM1IDc0OC41IDcxMC41UTc3MyA2ODYgNzczIDY1MVE3NzMgNjE2IDc0OC41IDU5MS4wUTcyNCA1NjYgNjg5IDU2NlpNMTA3NiAzOThWNTEwSDExNzBWMzk4Wk0xMzM0IC04UTEyNTUgLTggMTIxMC4wIDM3LjVRMTE2NSA4MyAxMTY1IDE2M1Y2NTRIMTI5NlYxODdRMTI5NiAxNTAgMTMxMS4wIDEzMi41UTEzMjYgMTE1IDEzNjAgMTE1UTEzNzYgMTE1IDEzOTAuMCAxMTkuNVExNDA0IDEyNCAxNDI1IDEzN1Y5UTE0MDMgMSAxMzgwLjUgLTMuNVExMzU4IC04IDEzMzQgLThaTTEyOTEgMzk4VjUxMEgxNDIxVjM5OFpNMTY3NiAtMTZRMTYyMiAtMTYgMTU4MC41IDUuNVExNTM5IDI3IDE1MTUuMCA2Ni4wUTE0OTEgMTA1IDE0OTEgMTU2UTE0OTEgMjA5IDE1MTguNSAyNDcuMFExNTQ2IDI4NSAxNTkyLjUgMzA2LjBRMTYzOSAzMjcgMTY5NiAzMjdRMTcyNyAzMjcgMTc1Mi41IDMyMy41UTE3NzggMzIwIDE3OTguMCAzMTUuMFExODE4IDMxMCAxODMxIDMwNFYzMjZRMTgzMSAzNjcgMTgwMC4wIDM5My41UTE3NjkgNDIwIDE3MTUgNDIwUTE2NzkgNDIwIDE2NDUuNSA0MDMuNVExNjEyIDM4NyAxNTkwIDM2MEwxNTA2IDQyNlExNTMxIDQ1OCAxNTY0LjAgNDgwLjVRMTU5NyA1MDMgMTYzNy4wIDUxNC41UTE2NzcgNTI2IDE3MjEgNTI2UTE4MzggNTI2IDE4OTkuMCA0NzIuMFExOTYwIDQxOCAxOTYwIDMxNFYwSDE4MzFWNTJIMTgyM1ExODA5IDM0IDE3ODguMCAxOC41UTE3NjcgMyAxNzM5LjAgLTYuNVExNzExIC0xNiAxNjc2IC0xNlpNMTcwNyA4NlExNzQ3IDg2IDE3NzQuNSAxMDMuNVExODAyIDEyMSAxODE2LjUgMTQ5LjBRMTgzMSAxNzcgMTgzMSAyMDhRMTgwOSAyMTkgMTc4MS4wIDIyNS41UTE3NTMgMjMyIDE3MjQgMjMyUTE2NjYgMjMyIDE2NDQuMCAyMTAuMFExNjIyIDE4OCAxNjIyIDE1NlExNjIyIDEyNiAxNjQzLjUgMTA2LjBRMTY2NSA4NiAxNzA3IDg2Wk0yMzE0IC0yMzJRMjI0NSAtMjMyIDIxOTQuNSAtMjEwLjVRMjE0NCAtMTg5IDIxMTIuMCAtMTU1LjBRMjA4MCAtMTIxIDIwNjcgLTg0TDIxOTAgLTM0UTIyMDYgLTcxIDIyMzguNSAtOTMuNVEyMjcxIC0xMTYgMjMxNCAtMTE2UTIzNzUgLTExNiAyNDEyLjAgLTc4LjVRMjQ0OSAtNDEgMjQ0OSAzMFY3MEgyNDQxUTI0MTcgMzYgMjM3OC4wIDE4LjBRMjMzOSAwIDIyODkgMFEyMjI3IDAgMjE3Mi41IDMyLjBRMjExOCA2NCAyMDg0LjUgMTIzLjBRMjA1MSAxODIgMjA1MSAyNjNRMjA1MSAzNDUgMjA4NC41IDQwMy41UTIxMTggNDYyIDIxNzIuNSA0OTQuMFEyMjI3IDUyNiAyMjg5IDUyNlEyMzM5IDUyNiAyMzc4LjAgNTA4LjVRMjQxNyA0OTEgMjQ0MSA0NTZIMjQ0OVY1MTBIMjU3NVYzNVEyNTc1IC00NyAyNTQzLjAgLTEwNy4wUTI1MTEgLTE2NyAyNDUyLjUgLTE5OS41UTIzOTQgLTIzMiAyMzE0IC0yMzJaTTIzMTYgMTE5UTIzNTEgMTE5IDIzODEuNSAxMzUuNVEyNDEyIDE1MiAyNDMwLjUgMTg0LjVRMjQ0OSAyMTcgMjQ0OSAyNjNRMjQ0OSAzMTEgMjQzMC41IDM0My4wUTI0MTIgMzc1IDIzODEuNSAzOTEuMFEyMzUxIDQwNyAyMzE2IDQwN1EyMjgxIDQwNyAyMjUwLjAgMzkxLjBRMjIxOSAzNzUgMjIwMC41IDM0My4wUTIxODIgMzExIDIxODIgMjYzUTIxODIgMjE2IDIyMDAuNSAxODMuNVEyMjE5IDE1MSAyMjUwLjAgMTM1LjBRMjI4MSAxMTkgMjMxNiAxMTlaTTMxNTQgLTE2UTMwODQgLTE2IDMwMjguMCAxOC41UTI5NzIgNTMgMjkzOS41IDExNC4wUTI5MDcgMTc1IDI5MDcgMjU1UTI5MDcgMzM1IDI5MzkuNSAzOTYuMFEyOTcyIDQ1NyAzMDI4LjAgNDkxLjVRMzA4NCA1MjYgMzE1NCA1MjZRMzE5MSA1MjYgMzIyMS4wIDUxNS4wUTMyNTEgNTA0IDMyNzMuMCA0ODYuMFEzMjk1IDQ2OCAzMzA3IDQ0OEgzMzE1TDMzMDcgNTIwVjcxNkgzNDM3VjBIMzMxNVY2MUgzMzA3UTMyOTUgNDEgMzI3My4wIDIzLjVRMzI1MSA2IDMyMjEuMCAtNS4wUTMxOTEgLTE2IDMxNTQgLTE2Wk0zMTc2IDEwNVEzMjEzIDEwNSAzMjQ0LjUgMTI0LjBRMzI3NiAxNDMgMzI5NS41IDE3Ni41UTMzMTUgMjEwIDMzMTUgMjU1UTMzMTUgMzAwIDMyOTUuNSAzMzMuNVEzMjc2IDM2NyAzMjQ0LjUgMzg1LjVRMzIxMyA0MDQgMzE3NiA0MDRRMzE0MCA0MDQgMzEwOC41IDM4NS41UTMwNzcgMzY3IDMwNTcuNSAzMzQuMFEzMDM4IDMwMSAzMDM4IDI1NVEzMDM4IDIxMCAzMDU3LjUgMTc2LjBRMzA3NyAxNDIgMzEwOC41IDEyMy41UTMxNDAgMTA1IDMxNzYgMTA1Wk0zODAyIC0xNlEzNzI1IC0xNiAzNjY0LjUgMTkuMFEzNjA0IDU0IDM1NjkuNSAxMTUuMFEzNTM1IDE3NiAzNTM1IDI1NFEzNTM1IDMyNyAzNTY5LjAgMzg5LjBRMzYwMyA0NTEgMzY2Mi4wIDQ4OC41UTM3MjEgNTI2IDM3OTcgNTI2UTM4NzkgNTI2IDM5MzUuMCA0OTEuMFEzOTkxIDQ1NiA0MDIwLjAgMzk3LjVRNDA0OSAzMzkgNDA0OSAyNjhRNDA0OSAyNTIgNDA0OC4wIDI0MC41UTQwNDcgMjI5IDQwNDYgMjI0SDM2MDhWMzE3SDM5MjNRMzkyMiAzMzQgMzkxMy4wIDM1Mi4wUTM5MDQgMzcwIDM4ODguMCAzODUuMFEzODcyIDQwMCAzODQ5LjUgNDA5LjVRMzgyNyA0MTkgMzc5OCA0MTlRMzc2MCA0MTkgMzcyOC41IDM5OS4wUTM2OTcgMzc5IDM2NzkuMCAzNDMuNVEzNjYxIDMwOCAzNjYxIDI1OVEzNjYxIDIwOCAzNjgwLjAgMTcyLjVRMzY5OSAxMzcgMzczMS41IDExOC41UTM3NjQgMTAwIDM4MDQgMTAwUTM4NTEgMTAwIDM4ODMuMCAxMjAuNVEzOTE1IDE0MSAzOTMzIDE3Mkw0MDM5IDEyMFE0MDAzIDU3IDM5NDUuMCAyMC41UTM4ODcgLTE2IDM4MDIgLTE2Wk00NDMxIC0xNlE0Mzk0IC0xNiA0MzY0LjAgLTUuMFE0MzM0IDYgNDMxMi41IDIzLjVRNDI5MSA0MSA0Mjc4IDYxSDQyNzBWMEg0MTQ3VjcxNkg0Mjc4VjUyMEw0MjcwIDQ0OEg0Mjc4UTQyOTEgNDY4IDQzMTIuNSA0ODYuMFE0MzM0IDUwNCA0MzY0LjAgNTE1LjBRNDM5NCA1MjYgNDQzMSA1MjZRNDUwMSA1MjYgNDU1Ni41IDQ5MS41UTQ2MTIgNDU3IDQ2NDQuNSAzOTYuMFE0Njc3IDMzNSA0Njc3IDI1NVE0Njc3IDE3NSA0NjQ0LjUgMTE0LjBRNDYxMiA1MyA0NTU2LjUgMTguNVE0NTAxIC0xNiA0NDMxIC0xNlpNNDQwOCAxMDVRNDQ0NSAxMDUgNDQ3Ni41IDEyMy41UTQ1MDggMTQyIDQ1MjcuNSAxNzYuMFE0NTQ3IDIxMCA0NTQ3IDI1NVE0NTQ3IDMwMSA0NTI3LjUgMzM0LjBRNDUwOCAzNjcgNDQ3Ni41IDM4NS41UTQ0NDUgNDA0IDQ0MDggNDA0UTQzNzIgNDA0IDQzNDAuNSAzODUuNVE0MzA5IDM2NyA0Mjg5LjUgMzMzLjVRNDI3MCAzMDAgNDI3MCAyNTVRNDI3MCAyMTAgNDI4OS41IDE3Ni41UTQzMDkgMTQzIDQzNDAuNSAxMjQuMFE0MzcyIDEwNSA0NDA4IDEwNVpNNDk1OSAtMTZRNDg2NSAtMTYgNDgxOC4wIDQyLjBRNDc3MSAxMDAgNDc3MSAyMDBWNTEwSDQ5MDJWMjE2UTQ5MDIgMTY0IDQ5MjcuNSAxMzQuNVE0OTUzIDEwNSA0OTkzIDEwNVE1MDMyIDEwNSA1MDU5LjAgMTI0LjVRNTA4NiAxNDQgNTEwMC41IDE3Ny4wUTUxMTUgMjEwIDUxMTUgMjUwVjUxMEg1MjQ2VjBINTEyM1Y2NEg1MTE1UTUxMDAgNDAgNTA3Ni4wIDIyLjBRNTA1MiA0IDUwMjIuNSAtNi4wUTQ5OTMgLTE2IDQ5NTkgLTE2Wk01NjA3IC0yMzJRNTUzOCAtMjMyIDU0ODcuNSAtMjEwLjVRNTQzNyAtMTg5IDU0MDUuMCAtMTU1LjBRNTM3MyAtMTIxIDUzNjAgLTg0TDU0ODMgLTM0UTU0OTkgLTcxIDU1MzEuNSAtOTMuNVE1NTY0IC0xMTYgNTYwNyAtMTE2UTU2NjggLTExNiA1NzA1LjAgLTc4LjVRNTc0MiAtNDEgNTc0MiAzMFY3MEg1NzM0UTU3MTAgMzYgNTY3MS4wIDE4LjBRNTYzMiAwIDU1ODIgMFE1NTIwIDAgNTQ2NS41IDMyLjBRNTQxMSA2NCA1Mzc3LjUgMTIzLjBRNTM0NCAxODIgNTM0NCAyNjNRNTM0NCAzNDUgNTM3Ny41IDQwMy41UTU0MTEgNDYyIDU0NjUuNSA0OTQuMFE1NTIwIDUyNiA1NTgyIDUyNlE1NjMyIDUyNiA1NjcxLjAgNTA4LjVRNTcxMCA0OTEgNTczNCA0NTZINTc0MlY1MTBINTg2OFYzNVE1ODY4IC00NyA1ODM2LjAgLTEwNy4wUTU4MDQgLTE2NyA1NzQ1LjUgLTE5OS41UTU2ODcgLTIzMiA1NjA3IC0yMzJaTTU2MDkgMTE5UTU2NDQgMTE5IDU2NzQuNSAxMzUuNVE1NzA1IDE1MiA1NzIzLjUgMTg0LjVRNTc0MiAyMTcgNTc0MiAyNjNRNTc0MiAzMTEgNTcyMy41IDM0My4wUTU3MDUgMzc1IDU2NzQuNSAzOTEuMFE1NjQ0IDQwNyA1NjA5IDQwN1E1NTc0IDQwNyA1NTQzLjAgMzkxLjBRNTUxMiAzNzUgNTQ5My41IDM0My4wUTU0NzUgMzExIDU0NzUgMjYzUTU0NzUgMjE2IDU0OTMuNSAxODMuNVE1NTEyIDE1MSA1NTQzLjAgMTM1LjBRNTU3NCAxMTkgNTYwOSAxMTlaTTYyMjkgLTIzMlE2MTYwIC0yMzIgNjEwOS41IC0yMTAuNVE2MDU5IC0xODkgNjAyNy4wIC0xNTUuMFE1OTk1IC0xMjEgNTk4MiAtODRMNjEwNSAtMzRRNjEyMSAtNzEgNjE1My41IC05My41UTYxODYgLTExNiA2MjI5IC0xMTZRNjI5MCAtMTE2IDYzMjcuMCAtNzguNVE2MzY0IC00MSA2MzY0IDMwVjcwSDYzNTZRNjMzMiAzNiA2MjkzLjAgMTguMFE2MjU0IDAgNjIwNCAwUTYxNDIgMCA2MDg3LjUgMzIuMFE2MDMzIDY0IDU5OTkuNSAxMjMuMFE1OTY2IDE4MiA1OTY2IDI2M1E1OTY2IDM0NSA1OTk5LjUgNDAzLjVRNjAzMyA0NjIgNjA4Ny41IDQ5NC4wUTYxNDIgNTI2IDYyMDQgNTI2UTYyNTQgNTI2IDYyOTMuMCA1MDguNVE2MzMyIDQ5MSA2MzU2IDQ1Nkg2MzY0VjUxMEg2NDkwVjM1UTY0OTAgLTQ3IDY0NTguMCAtMTA3LjBRNjQyNiAtMTY3IDYzNjcuNSAtMTk5LjVRNjMwOSAtMjMyIDYyMjkgLTIzMlpNNjIzMSAxMTlRNjI2NiAxMTkgNjI5Ni41IDEzNS41UTYzMjcgMTUyIDYzNDUuNSAxODQuNVE2MzY0IDIxNyA2MzY0IDI2M1E2MzY0IDMxMSA2MzQ1LjUgMzQzLjBRNjMyNyAzNzUgNjI5Ni41IDM5MS4wUTYyNjYgNDA3IDYyMzEgNDA3UTYxOTYgNDA3IDYxNjUuMCAzOTEuMFE2MTM0IDM3NSA2MTE1LjUgMzQzLjBRNjA5NyAzMTEgNjA5NyAyNjNRNjA5NyAyMTYgNjExNS41IDE4My41UTYxMzQgMTUxIDYxNjUuMCAxMzUuMFE2MTk2IDExOSA2MjMxIDExOVpNNjg1NSAtMTZRNjc3OCAtMTYgNjcxNy41IDE5LjBRNjY1NyA1NCA2NjIyLjUgMTE1LjBRNjU4OCAxNzYgNjU4OCAyNTRRNjU4OCAzMjcgNjYyMi4wIDM4OS4wUTY2NTYgNDUxIDY3MTUuMCA0ODguNVE2Nzc0IDUyNiA2ODUwIDUyNlE2OTMyIDUyNiA2OTg4LjAgNDkxLjBRNzA0NCA0NTYgNzA3My4wIDM5Ny41UTcxMDIgMzM5IDcxMDIgMjY4UTcxMDIgMjUyIDcxMDEuMCAyNDAuNVE3MTAwIDIyOSA3MDk5IDIyNEg2NjYxVjMxN0g2OTc2UTY5NzUgMzM0IDY5NjYuMCAzNTIuMFE2OTU3IDM3MCA2OTQxLjAgMzg1LjBRNjkyNSA0MDAgNjkwMi41IDQwOS41UTY4ODAgNDE5IDY4NTEgNDE5UTY4MTMgNDE5IDY3ODEuNSAzOTkuMFE2NzUwIDM3OSA2NzMyLjAgMzQzLjVRNjcxNCAzMDggNjcxNCAyNTlRNjcxNCAyMDggNjczMy4wIDE3Mi41UTY3NTIgMTM3IDY3ODQuNSAxMTguNVE2ODE3IDEwMCA2ODU3IDEwMFE2OTA0IDEwMCA2OTM2LjAgMTIwLjVRNjk2OCAxNDEgNjk4NiAxNzJMNzA5MiAxMjBRNzA1NiA1NyA2OTk4LjAgMjAuNVE2OTQwIC0xNiA2ODU1IC0xNlpNNzIwMCAwVjUxMEg3MzIzVjQ0Mkg3MzMxUTczNDQgNDY2IDczNjUuNSA0ODQuNVE3Mzg3IDUwMyA3NDE2LjAgNTE0LjBRNzQ0NSA1MjUgNzQ3OCA1MjVRNzQ5OCA1MjUgNzUxNC4wIDUyMi4wUTc1MzAgNTE5IDc1NDIgNTE0VjM4M1E3NTIxIDM5MSA3NTAwLjUgMzk2LjVRNzQ4MCA0MDIgNzQ1NyA0MDJRNzQxOCA0MDIgNzM4OS41IDM4Mi41UTczNjEgMzYzIDczNDYuMCAzMjkuNVE3MzMxIDI5NiA3MzMxIDI1NFYwWiIvPgo8L2c+Cjwvc3ZnPg==",
12
- "atd-icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMzYiIGhlaWdodD0iMjI0IiB2aWV3Qm94PSItOCAtOCAzMzYgMjI0IiByb2xlPSJpbWciIGFyaWEtbGFiZWw9ImFpIHRhZyBkZWJ1Z2dlciBlbWJsZW0iPjx0aXRsZT5haSB0YWcgZGVidWdnZXIgZW1ibGVtIOKAlCBsaWdodDwvdGl0bGU+PHBhdGggZmlsbD0iI0Q5NTMxRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNDIgMEgyMjRRMjM3IDAgMjQ3IDEwTDMxMiA4OFEzMjggMTA0IDMxMiAxMjBMMjQ3IDE5OFEyMzcgMjA4IDIyNCAyMDhINDJRMCAyMDggMCAxNjZWNDJRMCAwIDQyIDBaIE00OSA5MVE2MSA3OSA3MyA5MUwxMDYgMTI0TDE4MCA1MFExOTIgMzggMjA0IDUwUTIxNiA2MiAyMDQgNzRMMTE4IDE2MFExMDYgMTcyIDk0IDE2MEw0OSAxMTVRMzcgMTAzIDQ5IDkxWiBNMjgxIDEwNGExNyAxNyAwIDEgMCAtMzQgMGExNyAxNyAwIDEgMCAzNCAwWiIgLz48L3N2Zz4=",
13
- "favicon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE50lEQVR4nMRXa0xbVRz/3b64lLbAGI+WlQGCOBiODYMzi8SJAffFsKnDmS26mIAzPvHxyTi/+ZqPzMfIiJljLvrB6MSR6JYQSYxl06SIIhkLYQO6sgLLVgq0tL3Hc0/vbXtbKF2G7Jfcnse/5//4nf//3HM1iAJvMu/jCBoBbivHwYIVBCG4Qn97CYdTXrfzhDzPMcO8eb1Kh6N0WI9VATkjLKDZ63VeVjEvtNzJ1TPOLNZzWnwt9tS8MW+/iuNewCqD47gCtS5tVEONN+E2QbStAUFVKBOWhrXmaRRsa4YudS1NJsIeSC0REJ6LHkfkoXbG2YeR7oPwucciiqlttZY3fZDIuGXLHpQ1vAWVOpWNBUG0AKZYNCKwNjIvj0n0mEKjzwEJLGDGcS6inOMMmkTG15ZsR9nDbzPlRDIaYUA5JtFOLSonUGn0cTaWdMCYV4Hyxk+kiEg4EgUD0vhSz/uYnbyAnIpHkVnSEJKTGGYkJ5NyIMVkQWXTl+DUKcooZLrlPRZCSl0D30EI+JCSsR6ZxfVLMIDkHNDwJmzacwyalHS2MLK3ApOLSgW/Dw77CdoPILfySYT1xuYEEJMjZDkHOFTs+hx8ujUccdDvxfj5dvi9HqyraaGOmeB29mPcdpit4DOKEbFP4Jnoh3vcBj6zFCZrrRQ5iQSTyIGs0jqYLNWhKKU9dg12Yay3jfXVOgPy72kJ7a9sVFBGNfHXcbhHe6BNy4VxXW1M1SCxA/PXRiK1i1CbmlkUlvPphVK2QxG1rJjEBCgEBWXVLLcFc9PDGP/jGK39p8Ke67MrsWlvF4I0yfiMQqkkoxmIcgYkLCOSc9HnQlJJONJzCDpDPs3mB8Peaw1maKOyms8oRd6WZ2lfgD63CuaaVgTmXDCY72XVoOGzoDMWMAYUVbOIB5zeZImb5VRabNh1HGnZGxTZH5fdEs0iFtxOTNg/g+eKDZnZZvi8s5if9cJgrUNW+TP0EErDjZFOTPZ9lJiBkDE/hn46gLt2dkBnyg8bJ4rzXRoLQUwNfovpfztQ29iC6rpDMK7JZXomHcOwnW6H/cw+ZFe9EpewSzIgI8VkxZ2PfAU1Lb3Ys13OEb/HhdHuZrS88z2yzEVs/urlQej4NDouZP+9aP8V33z8OtKLH8P034eXZ0CG+OYa/uUl3LGjjb43NIozX2bDaf8UdbtfZMYHbF3obHsD857rbH1GjhVNrW0o3fwAqrbVof/82ZtjQIYx/z6sLd8rRS5luVRaznMH8WZHP60SP97dvxEL87OKtfklm9Hy3mlMUFa+aBUvXULyDMiYcdjYsxjMxRvF2w1uTDnijItwjQ2yNsdaRl/pqnDS3pQDiSAnlkq1uKpgMJhwvQq3CNfYBUZ/enY+1uQVxcnLqh8K/08IBlbeAVHpb6eOUAZUeLz1CC3BvLDMUlyJxuc+ZP1LA72Lrk8qCZcFzYEnXmtH+dYd8TJRu3TnFCvkz7MnFWK1Vmc4IN7NcIv45/dOeOdmGAPalFQseOcwOTaEIXs3Y0JE8d3304PpaGQrCLmqod710W4DVgDiqSc+sbg+NY7tu1+F42If/D5vREBtc3qjpZF2fsD/DFOWBe5rTuWtiGAn2x29yfwzdWdFWEgW9CD7cX7G2ciqIEC4l6ljPqwS6CHuQcD3vNhXfBPdjs/z/wAAAP//hkxTugAAAAZJREFUAwAgrRNzbxNrdwAAAABJRU5ErkJggg==",
18
+ "favicon-light": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idCI+PHRpdGxlIGlkPSJ0Ij5haTwvdGl0bGU+PGRlc2M+RmF2aWNvbiAxNnB4OiBtYXJrIG9ubHksIHN0ZW0gM3B4IG9uIHRoZSBwaXhlbCBncmlkLjwvZGVzYz48cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNGM0YwRTgiLz48cGF0aCBmaWxsPSIjMTcxNDBGIiBkPSJNNS4yIDE1LjIzUTQuMzMgMTUuMjMgMy41NiAxNC45M1EyLjc5IDE0LjY0IDIuMzEgMTQuMDJRMS44MyAxMy40MSAxLjgzIDEyLjQzUTEuODMgMTEuMzcgMi40NCAxMC42OFEzLjA1IDkuOTkgNC4xNyA5LjY1UTUuMjkgOS4zMSA2LjgyIDkuMzFIOC4wMkw3Ljg3IDkuNThWOS4wM1E3Ljg3IDguMiA3LjU4IDcuODFRNy4yOSA3LjQzIDYuNjMgNy40M1E1Ljk5IDcuNDMgNS42NiA3Ljc3UTUuMzMgOC4xMSA1LjIyIDguNzdMMi4yMyA4LjI5UTIuNCA3LjUxIDIuOTMgNi44OFEzLjQ2IDYuMjYgNC40MSA1Ljg5UTUuMzYgNS41MiA2LjggNS41MlE4LjA2IDUuNTIgOC45NiA1LjlROS44NiA2LjI4IDEwLjM1IDcuMThRMTAuODMgOC4wOSAxMC44MyA5LjY4VjEyLjM5UTEwLjgzIDEyLjY3IDEwLjkxIDEyLjc3UTEwLjk5IDEyLjg2IDEwLjkyIDEyLjg2SDExLjE4VjE1SDEwLjNROS4xNCAxNSA4LjU3IDE0LjQ0UTcuOTkgMTMuODggNy45OSAxMi44VjEyLjQ1TDguNTQgMTIuNjlROC40MyAxMy4wNiA4LjIzIDEzLjQ5UTguMDMgMTMuOTMgNy42NyAxNC4zMlE3LjMgMTQuNzIgNi43IDE0Ljk3UTYuMSAxNS4yMyA1LjIgMTUuMjNaTTYuMDkgMTMuMjdRNi42NSAxMy4yNyA3LjA1IDEzLjAyUTcuNDUgMTIuNzggNy42NyAxMi4zMVE3Ljg5IDExLjg0IDcuODkgMTEuMTdWMTAuOTJINi45N1E2LjE1IDEwLjkyIDUuNjkgMTEuMTRRNS4yNCAxMS4zNSA1LjA3IDExLjY2UTQuODkgMTEuOTYgNC44OSAxMi4yNVE0Ljg5IDEyLjQ0IDQuOTggMTIuNjhRNS4wNyAxMi45MiA1LjMzIDEzLjA5UTUuNTkgMTMuMjcgNi4wOSAxMy4yN1pNMTIgMTUgMTUgMTUgMTUgNi4xIDEyIDUuNjJaIi8+PHBhdGggZmlsbD0iI0MxMkQzMCIgZD0iTTE1LjU4IDEuOThDMTUuOTMgMy4wOCAxNS41NSA0LjA4IDE0LjM4IDQuMzdDMTMuMjggNC42NSAxMi4yNiA0LjQxIDExLjkxIDMuMzhDMTEuNTggMi40NiAxMi4wOCAxLjMgMTMuMTIgMC45OEMxNC4xMyAwLjY3IDE1LjIzIDAuODkgMTUuNTggMS45OFoiLz48L3N2Zz4K",
19
+ "favicon-dark": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idCI+PHRpdGxlIGlkPSJ0Ij5haTwvdGl0bGU+PGRlc2M+RmF2aWNvbiAxNnB4OiBtYXJrIG9ubHksIHN0ZW0gM3B4IG9uIHRoZSBwaXhlbCBncmlkLjwvZGVzYz48cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxNTEzMTAiLz48cGF0aCBmaWxsPSIjRjFFQ0UyIiBkPSJNNS4yIDE1LjIzUTQuMzMgMTUuMjMgMy41NiAxNC45M1EyLjc5IDE0LjY0IDIuMzEgMTQuMDJRMS44MyAxMy40MSAxLjgzIDEyLjQzUTEuODMgMTEuMzcgMi40NCAxMC42OFEzLjA1IDkuOTkgNC4xNyA5LjY1UTUuMjkgOS4zMSA2LjgyIDkuMzFIOC4wMkw3Ljg3IDkuNThWOS4wM1E3Ljg3IDguMiA3LjU4IDcuODFRNy4yOSA3LjQzIDYuNjMgNy40M1E1Ljk5IDcuNDMgNS42NiA3Ljc3UTUuMzMgOC4xMSA1LjIyIDguNzdMMi4yMyA4LjI5UTIuNCA3LjUxIDIuOTMgNi44OFEzLjQ2IDYuMjYgNC40MSA1Ljg5UTUuMzYgNS41MiA2LjggNS41MlE4LjA2IDUuNTIgOC45NiA1LjlROS44NiA2LjI4IDEwLjM1IDcuMThRMTAuODMgOC4wOSAxMC44MyA5LjY4VjEyLjM5UTEwLjgzIDEyLjY3IDEwLjkxIDEyLjc3UTEwLjk5IDEyLjg2IDEwLjkyIDEyLjg2SDExLjE4VjE1SDEwLjNROS4xNCAxNSA4LjU3IDE0LjQ0UTcuOTkgMTMuODggNy45OSAxMi44VjEyLjQ1TDguNTQgMTIuNjlROC40MyAxMy4wNiA4LjIzIDEzLjQ5UTguMDMgMTMuOTMgNy42NyAxNC4zMlE3LjMgMTQuNzIgNi43IDE0Ljk3UTYuMSAxNS4yMyA1LjIgMTUuMjNaTTYuMDkgMTMuMjdRNi42NSAxMy4yNyA3LjA1IDEzLjAyUTcuNDUgMTIuNzggNy42NyAxMi4zMVE3Ljg5IDExLjg0IDcuODkgMTEuMTdWMTAuOTJINi45N1E2LjE1IDEwLjkyIDUuNjkgMTEuMTRRNS4yNCAxMS4zNSA1LjA3IDExLjY2UTQuODkgMTEuOTYgNC44OSAxMi4yNVE0Ljg5IDEyLjQ0IDQuOTggMTIuNjhRNS4wNyAxMi45MiA1LjMzIDEzLjA5UTUuNTkgMTMuMjcgNi4wOSAxMy4yN1pNMTIgMTUgMTUgMTUgMTUgNi4xIDEyIDUuNjJaIi8+PHBhdGggZmlsbD0iI0ZBNkI2RCIgZD0iTTE1LjU4IDEuOThDMTUuOTMgMy4wOCAxNS41NSA0LjA4IDE0LjM4IDQuMzdDMTMuMjggNC42NSAxMi4yNiA0LjQxIDExLjkxIDMuMzhDMTEuNTggMi40NiAxMi4wOCAxLjMgMTMuMTIgMC45OEMxNC4xMyAwLjY3IDE1LjIzIDAuODkgMTUuNTggMS45OFoiLz48L3N2Zz4K",
14
20
  };
package/src/browser.js CHANGED
@@ -357,12 +357,23 @@ const NAVIGATION_RETRY_MS = 2000;
357
357
  // a lookup or the server took too long. Blocked, refused-by-proxy, certificate and protocol errors are not here.
358
358
  const TRANSIENT_NET_ERRORS = /net::ERR_(CONNECTION_(RESET|CLOSED|ABORTED|REFUSED|TIMED_OUT)|TIMED_OUT|NETWORK_CHANGED|NAME_NOT_RESOLVED|NAME_RESOLUTION_FAILED|DNS_TIMED_OUT|INTERNET_DISCONNECTED|ADDRESS_UNREACHABLE|EMPTY_RESPONSE|SOCKET_NOT_CONNECTED|HTTP2_(PROTOCOL|SERVER_REFUSED_STREAM|PING_FAILED)|NETWORK_IO_SUSPENDED|SPDY_PROTOCOL_ERROR|QUIC_PROTOCOL_ERROR)\b/;
359
359
 
360
- /** The net::ERR_* code or "timeout" from a Playwright navigation error, for the log line. */
361
- const navigationErrorCode = (err) => String(err?.message ?? err).match(/net::ERR_[A-Z0-9_]+/)?.[0] ?? (err?.name === "TimeoutError" || /Timeout \d+ms exceeded/.test(String(err?.message)) ? "timeout" : "error");
360
+ // goto's error when Chromium committed its error page before goto heard why the load failed. It has no
361
+ // net::ERR_* code; the failed document request does. Other interruptions say nothing about the network.
362
+ const ERROR_PAGE_INTERRUPTION = /interrupted by another navigation to "chrome-error:/;
363
+
364
+ /**
365
+ * The net::ERR_* code or "timeout" from a Playwright navigation error, for the log line. failedLoad is the
366
+ * error text of the main frame's failed document request, which counts when an error page cut goto short.
367
+ */
368
+ function navigationErrorCode(err, failedLoad) {
369
+ const message = String(err?.message ?? err);
370
+ if (ERROR_PAGE_INTERRUPTION.test(message)) return failedLoad?.match(/net::ERR_[A-Z0-9_]+/)?.[0] ?? "error";
371
+ return message.match(/net::ERR_[A-Z0-9_]+/)?.[0] ?? (err?.name === "TimeoutError" || /Timeout \d+ms exceeded/.test(message) ? "timeout" : "error");
372
+ }
362
373
 
363
374
  /** True when a failed navigation is worth one more try: a transient network error or a timeout. */
364
- export function isTransientNavigationError(err) {
365
- const code = navigationErrorCode(err);
375
+ export function isTransientNavigationError(err, failedLoad) {
376
+ const code = navigationErrorCode(err, failedLoad);
366
377
  return code === "timeout" || TRANSIENT_NET_ERRORS.test(code);
367
378
  }
368
379
 
@@ -404,6 +415,8 @@ export class AuditSession {
404
415
  this.skipped = {}; // step index -> { vendor label: requests }
405
416
  this.loadedIn = new Map(); // page address -> the last step whose main-frame navigation reached it
406
417
  this.leaving = null; // the page address being navigated away from, until the next page commits
418
+ this.failedLoad = null; // the error text of the main frame's last failed document request in navigate()
419
+ this.errorPageShown = false; // whether Chromium's error page committed in the main frame since navigate() began
407
420
  this.bodyBytes = 0;
408
421
  this.bodyBudgetStep = null; // the step at which POST bodies stopped being stored
409
422
  this.startedAt = Date.now();
@@ -442,6 +455,7 @@ export class AuditSession {
442
455
  this.page.on("pageerror", (err) => this.errors.push({ step: this.currentStep, message: err.message }));
443
456
  this.page.on("framenavigated", (frame) => {
444
457
  if (frame !== this.page.mainFrame()) return;
458
+ if (frame.url().startsWith("chrome-error:")) this.errorPageShown = true;
445
459
  this.loadedIn.set(pageKey(frame.url()), this.currentStep);
446
460
  this.leaving = null;
447
461
  // Script redirects on the first page move where it ends up.
@@ -449,7 +463,10 @@ export class AuditSession {
449
463
  });
450
464
  // From the moment the main frame starts loading another document, the open page is leaving.
451
465
  this.page.on("request", (request) => {
452
- if (request.isNavigationRequest() && request.frame() === this.page.mainFrame()) this.leaving = pageKey(this.page.url());
466
+ if (this.isPageLoad(request)) this.leaving = pageKey(this.page.url());
467
+ });
468
+ this.page.on("requestfailed", (request) => {
469
+ if (this.isPageLoad(request)) this.failedLoad = request.failure()?.errorText ?? null;
453
470
  });
454
471
 
455
472
  const onRequest = (request) => {
@@ -659,17 +676,36 @@ export class AuditSession {
659
676
  */
660
677
  async navigate(url) {
661
678
  const options = { waitUntil: "domcontentloaded", timeout: 30000 };
679
+ this.failedLoad = null;
680
+ this.errorPageShown = false;
662
681
  try {
663
682
  return await this.page.goto(url, options);
664
683
  } catch (err) {
665
- if (this.blocked?.step === this.currentStep || !isTransientNavigationError(err)) throw err;
684
+ if (this.blocked?.step === this.currentStep) throw err;
685
+ // When the error page cut goto short, the failed request can be reported just after goto rejects.
686
+ if (!this.failedLoad && ERROR_PAGE_INTERRUPTION.test(err?.message)) {
687
+ await this.page.waitForEvent("requestfailed", { predicate: (request) => this.isPageLoad(request), timeout: 1000 }).catch(() => {});
688
+ }
689
+ if (!isTransientNavigationError(err, this.failedLoad)) throw err;
690
+ const code = navigationErrorCode(err, this.failedLoad);
666
691
  const delay = this.opts.navigationRetryMs ?? NAVIGATION_RETRY_MS;
667
- this.log(` Opening ${url} failed (${navigationErrorCode(err)}); trying once more in ${Math.round(delay / 1000)}s`);
668
- await new Promise((resolve) => setTimeout(resolve, delay));
692
+ this.log(` Opening ${url} failed (${code}); trying once more in ${Math.round(delay / 1000)}s`);
693
+ // Chromium can commit the error page for the failed load well after goto has given up. A retry begun
694
+ // before that is interrupted by it, so the retry waits for it. A load that timed out gets no error page.
695
+ const errorPage = code === "timeout" || this.errorPageShown ? null : this.page.waitForEvent("framenavigated", {
696
+ predicate: (frame) => frame === this.page.mainFrame() && frame.url().startsWith("chrome-error:"),
697
+ timeout: 5000,
698
+ }).catch(() => {});
699
+ await Promise.all([new Promise((resolve) => setTimeout(resolve, delay)), errorPage]);
669
700
  return this.page.goto(url, options);
670
701
  }
671
702
  }
672
703
 
704
+ /** Whether a request loads a new document into the main frame. */
705
+ isPageLoad(request) {
706
+ return request.isNavigationRequest() && request.frame() === this.page.mainFrame();
707
+ }
708
+
673
709
  /** Error message when the browser may not be on this URL, or null. */
674
710
  checkUrl(url) {
675
711
  if (url.startsWith("chrome-error:")) return null; // Chromium's own error page, e.g. after a blocked navigation
package/src/html/css.js CHANGED
@@ -8,13 +8,14 @@ import { brandCss } from "../whitelabel.js";
8
8
  // ---------- tokens: colours (light, then dark under both selectors), spacing, radii, fonts ----------
9
9
  const TOKENS = `/* Direction D tokens. Light on :root; dark twice (OS preference unless the page forces light, and the forced dark theme),
10
10
  so <html data-theme> beats the OS both ways. Every -fg passes 4.5:1 on --card, --page and its own -bg in both modes;
11
- every base passes 3:1 on --card (VISUAL.md has the table). Builders reference these names only, never a hex. */
11
+ every base passes 3:1 on --card (VISUAL.md has the table). Builders reference these names only, never a hex.
12
+ --brand-point is the logos' point. Broken is the same red (brand/ai/BRAND.md §4), so a page never shows two reds. */
12
13
  :root{
13
14
  color-scheme:light dark;
14
15
  --page:#F6F7F9;--card:#FFFFFF;--well:#EEF1F6;--fg:#111827;--muted:#4B5567;--border:#D9DEE8;--border-strong:#C3CAD8;
15
16
  --accent:#2E6CDB;--accent-fg:#2459C0;--accent-bg:#EBF1FE;
16
17
  --shadow-sm:0 1px 2px rgb(16 24 40 / 6%);--shadow-md:0 1px 2px rgb(16 24 40 / 5%),0 4px 16px -4px rgb(16 24 40 / 10%);
17
- --sev-broken:#D92D20;--sev-broken-fg:#B42318;--sev-broken-bg:#FEE4E2;
18
+ --brand-point:#C12D30;--sev-broken:#C12D30;--sev-broken-fg:#C12D30;--sev-broken-bg:#FEE4E2;
18
19
  --sev-risk:#9B3B9A;--sev-risk-fg:#86338A;--sev-risk-bg:#F7E8F7;
19
20
  --sev-warning:#C07B03;--sev-warning-fg:#7A5A00;--sev-warning-bg:#FBF0D0;
20
21
  --sev-info:#5B6B8C;--sev-info-fg:#3F4D6B;--sev-info-bg:#E9EDF5;
@@ -50,7 +51,7 @@ color-scheme:light dark;
50
51
  --page:#0B0F19;--card:#141927;--well:#1B2235;--fg:#EEF2FF;--muted:#9AA4BD;--border:#263050;--border-strong:#34406A;
51
52
  --accent:#4F8EF7;--accent-fg:#8CBBFF;--accent-bg:#1A2F5C;
52
53
  --shadow-sm:none;--shadow-md:none;
53
- --sev-broken:#F04438;--sev-broken-fg:#FDA29B;--sev-broken-bg:#3D1D1D;
54
+ --brand-point:#FA6B6D;--sev-broken:#FA6B6D;--sev-broken-fg:#FA6B6D;--sev-broken-bg:#3D1D1D;
54
55
  --sev-risk:#D78AD6;--sev-risk-fg:#E3A6E0;--sev-risk-bg:#34203A;
55
56
  --sev-warning:#E8B44A;--sev-warning-fg:#F5C451;--sev-warning-bg:#352B10;
56
57
  --sev-info:#8191B8;--sev-info-fg:#B4C0DC;--sev-info-bg:#1E2536;
@@ -71,7 +72,7 @@ color-scheme:light dark;
71
72
  --page:#0B0F19;--card:#141927;--well:#1B2235;--fg:#EEF2FF;--muted:#9AA4BD;--border:#263050;--border-strong:#34406A;
72
73
  --accent:#4F8EF7;--accent-fg:#8CBBFF;--accent-bg:#1A2F5C;
73
74
  --shadow-sm:none;--shadow-md:none;
74
- --sev-broken:#F04438;--sev-broken-fg:#FDA29B;--sev-broken-bg:#3D1D1D;
75
+ --brand-point:#FA6B6D;--sev-broken:#FA6B6D;--sev-broken-fg:#FA6B6D;--sev-broken-bg:#3D1D1D;
75
76
  --sev-risk:#D78AD6;--sev-risk-fg:#E3A6E0;--sev-risk-bg:#34203A;
76
77
  --sev-warning:#E8B44A;--sev-warning-fg:#F5C451;--sev-warning-bg:#352B10;
77
78
  --sev-info:#8191B8;--sev-info-fg:#B4C0DC;--sev-info-bg:#1E2536;
@@ -353,6 +354,7 @@ const SHELL = `/* Page shell: skip link, top bar, rail (expanded 200 px, collaps
353
354
  html.js .js-only{display:inline-flex!important}
354
355
  html.js .sec-tools.js-only{display:flex!important}
355
356
  .logo{display:inline-flex}
357
+ svg.logo{display:inline-block;flex:none;color:var(--fg)}
356
358
  .logo .l-dark{display:none}
357
359
  html[data-theme="dark"] .logo .l-light{display:none}
358
360
  html[data-theme="dark"] .logo .l-dark{display:inline}
@@ -444,7 +446,7 @@ html:not(.js) main>.sec[id^="failed-"]{display:none}
444
446
  @keyframes aitd-flash{from{background-color:var(--accent-bg)}}
445
447
 
446
448
  .footer{display:flex;align-items:center;gap:var(--s4);padding:var(--s4);border-top:1px solid var(--border);background:var(--card)}
447
- .footer img{vertical-align:-3px}
449
+ .footer img,.f-atd .logo{vertical-align:-3px}
448
450
 
449
451
  /* ---------- under 720 px: the rail becomes a strip under the top bar ---------- */
450
452
  @media (max-width:719.98px){
package/src/html/lib.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // renderer imports its icon, logo and id helpers from here, so the sections cannot drift apart while
4
4
  // both exist; this module imports neither of them. CONTRACT-IMPL.md in the build notes lists what each helper is for.
5
5
  import { hitMatchesEvent } from "../checks.js";
6
- import { LOGOS } from "../brand.js";
6
+ import { LOGOS, LOGO_ART } from "../brand.js";
7
7
  import { OWNERS, ownerOf } from "../verify.js";
8
8
  import { escapeHtml, platformLabel, safeKey, sortPlatforms } from "../report-shared.js";
9
9
 
@@ -52,9 +52,10 @@ const use = (id, size = 16, cls = "") => `<svg class="ic${cls ? ` ${cls}` : ""}"
52
52
 
53
53
  /** The sprite with only the symbols the page references, so a report never carries artwork it does not show. */
54
54
  function sprite(html) {
55
- const used = new Set([...html.matchAll(/href="#((?:sev|ui)-[a-z]+|p-[a-z0-9_]+)"/g)].map((x) => x[1]));
55
+ const used = new Set([...html.matchAll(/href="#((?:sev|ui)-[a-z]+|p-[a-z0-9_]+|logo-[a-z-]+)"/g)].map((x) => x[1]));
56
56
  const symbols = [...used].sort().map((id) => {
57
57
  if (id.startsWith("p-")) return `<symbol id="${id}" viewBox="0 0 24 24">${PLATFORM_ART[id.slice(2)]}</symbol>`;
58
+ if (id.startsWith("logo-")) return `<symbol id="${id}" viewBox="${LOGO_ART[id.slice(5)].viewBox}">${LOGO_ART[id.slice(5)].art}</symbol>`;
58
59
  return `<symbol id="${id}" ${STROKE}>${UI_SYMBOLS[id]}</symbol>`;
59
60
  });
60
61
  return `<svg hidden style="display:none" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">${symbols.join("")}</svg>`;
@@ -84,8 +85,18 @@ const hostPath = (url) => {
84
85
 
85
86
  /** A severity badge: glyph and word, never colour alone. A badge without a severity is a plain grey chip. */
86
87
  const badge = (sev, text) => (UI_SYMBOLS[`sev-${sev}`] ? `<span class="badge sev-${sev}">${use(`sev-${sev}`, 14)}${escapeHtml(text)}</span>` : `<span class="badge">${escapeHtml(text)}</span>`);
87
- /** A logo with its light and dark versions as two images; the CSS shows the one that fits the colour scheme or the forced theme. */
88
- export const logo = (key, alt, height, cls) => `<span class="logo ${cls}"><img class="l-light" src="${LOGOS[`${key}-light`]}" alt="${alt}" height="${height}"><img class="l-dark" src="${LOGOS[`${key}-dark`]}" alt="${alt}" height="${height}"></span>`;
88
+ /**
89
+ * A logo at a given height. The brand's own logos (LOGO_ART) are drawn from the sprite, so their ink is the text colour and
90
+ * only the point is red, as brand/ai/BRAND.md §4 asks of a product's UI. Anything else in LOGOS (the favicon tiles, which
91
+ * carry their own ground) comes as its light and dark images, and the CSS shows the one that fits the colour scheme.
92
+ */
93
+ export const logo = (key, alt, height, cls) => {
94
+ const art = LOGO_ART[key];
95
+ if (!art) return `<span class="logo ${cls}"><img class="l-light" src="${LOGOS[`${key}-light`]}" alt="${alt}" height="${height}"><img class="l-dark" src="${LOGOS[`${key}-dark`]}" alt="${alt}" height="${height}"></span>`;
96
+ const [, , w, h] = art.viewBox.split(" ").map(Number);
97
+ const named = alt ? `role="img" aria-label="${escapeHtml(alt)}"` : 'aria-hidden="true"';
98
+ return `<svg class="logo ${cls}" width="${+((height * w) / h).toFixed(1)}" height="${height}" ${named}><use href="#logo-${key}"/></svg>`;
99
+ };
89
100
 
90
101
  /** The journey and step a finding's place points at. Steps are named by label; when labels repeat, prefer the step where the finding's event fired. */
91
102
  function whereTarget(runs, w, f) {
package/src/html/shell.js CHANGED
@@ -125,9 +125,9 @@ function topBar(ctx) {
125
125
  const t = m.html.shell;
126
126
  const brandName = brand?.name ? escapeHtml(brand.name) : "";
127
127
  const brandLogo = brand?.logo ? `<img src="${brand.logo}" alt="${brandName}" height="26">` : "";
128
- const product = whiteLabel ? (brandLogo || `<span class="brand-name">${brandName}</span>`) : `${logo("atd-lockup", "AI Tag Debugger", 22, "l-lockup")}<img class="l-mark" src="${LOGOS["atd-icon"]}" alt="AI Tag Debugger" height="24">`;
129
- const atdByline = whiteLabel ? `<a href="${ATD_REPO}" class="byline" rel="noopener noreferrer"><span>${m.ui.by}</span>${logo("atd-lockup", "AI Tag Debugger", 16, "logo-atd")}</a>` : "";
130
- const aiByline = branding ? `<a href="https://analitikisler.com" class="byline" rel="noopener noreferrer"><span>${m.ui.by}</span>${logo("horizontal", "Analitik İşler", 16, "logo-h")}</a>` : "";
128
+ const product = whiteLabel ? (brandLogo || `<span class="brand-name">${brandName}</span>`) : `${logo("atd-lockup", "ai tag debugger", 22, "l-lockup")}${logo("mark", "ai tag debugger", 24, "l-mark")}`;
129
+ const atdByline = whiteLabel ? `<a href="${ATD_REPO}" class="byline" rel="noopener noreferrer"><span>${m.ui.by}</span>${logo("atd-lockup", "ai tag debugger", 16, "logo-atd")}</a>` : "";
130
+ const aiByline = branding ? `<a href="https://analitikisler.com" class="byline" rel="noopener noreferrer"><span>${m.ui.by}</span>${logo("master", "Analitik İşler", 16, "logo-h")}</a>` : "";
131
131
  const word = m.verdict.status[metrics.verdict.status];
132
132
  // 0–49 red, 50–89 amber, 90–100 green, as Lighthouse bands its scores; no score reads as a fail.
133
133
  const band = tally.score === null || tally.score < 50 ? "fail" : tally.score < 90 ? "mid" : "pass";
@@ -139,11 +139,11 @@ function topBar(ctx) {
139
139
 
140
140
  function footer(ctx) {
141
141
  const { m, site, title, generatedAt, brand, branding, whiteLabel } = ctx;
142
- const atd = `<a class="f-atd" href="${ATD_REPO}" rel="noopener noreferrer"><img src="${LOGOS["atd-icon"]}" alt="" height="14"> AI Tag Debugger</a>`;
142
+ const atd = `<a class="f-atd" href="${ATD_REPO}" rel="noopener noreferrer">${logo("favicon", "", 16, "f-mark")} ai tag debugger</a>`;
143
143
  const meta = `<span class="muted">${escapeHtml(site ?? title)} · ${escapeHtml(generatedAt)} · v${VERSION}</span>`;
144
- if (branding) return `<footer class="footer"><a href="https://analitikisler.com" class="logo-link" aria-label="analitikisler.com" rel="noopener noreferrer">${logo("stacked", "Analitik İşler", 40, "logo-s")}</a><p class="xs">${m.ui.credit(atd)} ${meta}</p></footer>`;
144
+ if (branding) return `<footer class="footer"><a href="https://analitikisler.com" class="logo-link" aria-label="analitikisler.com" rel="noopener noreferrer">${logo("master", "Analitik İşler", 24, "logo-s")}</a><p class="xs">${m.ui.credit(atd)} ${meta}</p></footer>`;
145
145
  const brandName = brand?.name ? escapeHtml(brand.name) : "";
146
- return `<footer class="footer"><p class="xs">${whiteLabel ? `${brandName}${brandName ? " · " : ""}${m.ui.credit(atd)}` : "AI Tag Debugger"} ${meta}</p></footer>`;
146
+ return `<footer class="footer"><p class="xs">${whiteLabel ? `${brandName}${brandName ? " · " : ""}${m.ui.credit(atd)}` : "ai tag debugger"} ${meta}</p></footer>`;
147
147
  }
148
148
 
149
149
  /** The expand / collapse pair under a section's h2, for every section but Summary that holds a details.card. */
@@ -172,7 +172,7 @@ export function renderHtml(report) {
172
172
  <html lang="${lang}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
173
173
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src ${scriptCspSource()}">
174
174
  <meta name="color-scheme" content="light dark">
175
- <title>${escapeHtml(title)}</title><link rel="icon"${brand?.logo ? "" : ' type="image/png"'} href="${brand?.logo ?? LOGOS.favicon}">
175
+ <title>${escapeHtml(title)}</title><link rel="icon"${brand?.logo ? "" : ' type="image/svg+xml"'} href="${brand?.logo ?? LOGOS["favicon-light"]}">
176
176
  <style>${CSS}${brandCss(brand?.color)}</style></head><body>
177
177
  <a class="skip" href="#main">${escapeHtml(t.skip)}</a>
178
178
  ${sprite(`${top}${nav}${sections}${foot}`)}
package/src/i18n.js CHANGED
@@ -26,7 +26,7 @@ const en = {
26
26
  name: "English",
27
27
  severity: { broken: "Broken", risk: "Risk", warning: "Warning", info: "Info", ok: "OK" },
28
28
  ui: {
29
- title: (host) => `AI Tag Debugger report: ${host}`,
29
+ title: (host) => `ai tag debugger report: ${host}`,
30
30
  generated: (at) => `Generated ${at} by ai-tag-debugger · Analitik İşler`,
31
31
  summary: "Summary",
32
32
  eyebrow: "AI tracking audit",
@@ -64,7 +64,7 @@ const en = {
64
64
  status: "Status",
65
65
  vendor: "Vendor",
66
66
  clickedThrough: "clicked through an overlapping element",
67
- generatedBy: "Generated by AI Tag Debugger",
67
+ generatedBy: "Generated by ai tag debugger",
68
68
  nothing: "None",
69
69
  counts: (c) => `${c.broken} broken · ${c.risk} risk · ${c.warning} warning · ${c.info} info · ${c.ok} ok`,
70
70
  accepted: "Accepted",
@@ -722,8 +722,8 @@ const tr = {
722
722
  name: "Turkish",
723
723
  severity: { broken: "Bozuk", risk: "Risk", warning: "Uyarı", info: "Bilgi", ok: "Sorunsuz" },
724
724
  ui: {
725
- title: (host) => `AI Tag Debugger raporu: ${host}`,
726
- generated: (at) => `${at} tarihinde ai-tag-debugger ile oluşturuldu · Analitik İşler`,
725
+ title: (host) => `ai tag debugger raporu: ${host}`,
726
+ generated: (at) => `${at} tarihinde ai tag debugger ile oluşturuldu · Analitik İşler`,
727
727
  summary: "Özet",
728
728
  eyebrow: "Yapay zekâ ile izleme denetimi",
729
729
  paramsShort: "parametre",
@@ -760,7 +760,7 @@ const tr = {
760
760
  status: "Durum",
761
761
  vendor: "Sağlayıcı",
762
762
  clickedThrough: "üstündeki bir öğeye rağmen tıklandı",
763
- generatedBy: "AI Tag Debugger ile oluşturuldu",
763
+ generatedBy: "ai tag debugger ile oluşturuldu",
764
764
  nothing: "Yok",
765
765
  counts: (c) => `${c.broken} bozuk · ${c.risk} risk · ${c.warning} uyarı · ${c.info} bilgi · ${c.ok} sorunsuz`,
766
766
  accepted: "Kabul edildi",
package/src/plan-html.js CHANGED
@@ -18,6 +18,7 @@ const PLAN_CSS = `
18
18
  .top-end{margin-left:auto;display:flex;align-items:center;gap:var(--s2)}
19
19
  .byline{display:inline-flex;align-items:center;gap:var(--s2);font-size:12px;color:var(--muted)}
20
20
  .logo{display:inline-flex}
21
+ svg.logo{display:inline-block;flex:none;color:var(--fg)}
21
22
  .logo .l-dark{display:none}
22
23
  html[data-theme="dark"] .logo .l-light{display:none}
23
24
  html[data-theme="dark"] .logo .l-dark{display:inline}
@@ -99,12 +100,12 @@ export function renderPlanHtml(plan, { id = "", generatedAt = "", branding = tru
99
100
  const events = plan.events ?? [];
100
101
  const custom = events.filter((ev) => ev.custom).length;
101
102
  const title = `Measurement plan${plan.site ? `: ${plan.site}` : ""}`;
102
- const meta = [id && `Plan ${id}`, generatedAt, `${events.length} events (${custom} custom)`, `ai-tag-debugger ${VERSION}`].filter(Boolean).join(" · ");
103
+ const meta = [id && `Plan ${id}`, generatedAt, `${events.length} events (${custom} custom)`, `ai tag debugger ${VERSION}`].filter(Boolean).join(" · ");
103
104
  const consent = plan.consent_mode ? flag("Consent mode on", "on") : flag("Consent mode off");
104
105
  const footer = branding
105
- ? `<a href="https://analitikisler.com" class="logo-link" aria-label="analitikisler.com" rel="noopener noreferrer">${logo("stacked", "Analitik İşler", 40, "logo-s")}</a><div class="f-links xs"><a href="https://analitikisler.com" rel="noopener noreferrer">analitikisler.com</a><a href="https://github.com/analitikisler/ai-tag-debugger" rel="noopener noreferrer">GitHub</a></div><p class="f-meta xs muted">v${VERSION}</p>`
106
- : `<p class="xs">AI Tag Debugger</p><p class="f-meta xs muted">v${VERSION}</p>`;
107
- const body = `<header class="top"><span class="brand">${logo("atd-lockup", "AI Tag Debugger", 22, "l-lockup")}<img class="l-mark" src="${LOGOS["atd-icon"]}" alt="AI Tag Debugger" height="24"></span><span class="top-site"><span class="eyebrow">Measurement plan</span>${plan.site ? `<b>${e(plan.site)}</b>` : ""}</span><div class="top-end">${branding ? `<a href="https://analitikisler.com" class="byline" rel="noopener noreferrer"><span>by</span>${logo("horizontal", "Analitik İşler", 16, "logo-h")}</a>` : ""}</div></header>
106
+ ? `<a href="https://analitikisler.com" class="logo-link" aria-label="analitikisler.com" rel="noopener noreferrer">${logo("master", "Analitik İşler", 24, "logo-s")}</a><div class="f-links xs"><a href="https://analitikisler.com" rel="noopener noreferrer">analitikisler.com</a><a href="https://github.com/analitikisler/ai-tag-debugger" rel="noopener noreferrer">GitHub</a></div><p class="f-meta xs muted">v${VERSION}</p>`
107
+ : `<p class="xs">ai tag debugger</p><p class="f-meta xs muted">v${VERSION}</p>`;
108
+ const body = `<header class="top"><span class="brand">${logo("atd-lockup", "ai tag debugger", 22, "l-lockup")}${logo("mark", "ai tag debugger", 24, "l-mark")}</span><span class="top-site"><span class="eyebrow">Measurement plan</span>${plan.site ? `<b>${e(plan.site)}</b>` : ""}</span><div class="top-end">${branding ? `<a href="https://analitikisler.com" class="byline" rel="noopener noreferrer"><span>by</span>${logo("master", "Analitik İşler", 16, "logo-h")}</a>` : ""}</div></header>
108
109
  <main class="plan">
109
110
  <div class="plan-title"><div class="eyebrow">Measurement plan</div><h1>${e(title)}</h1><div class="muted xs">${e(meta)}</div><div class="chips">${consent}</div></div>
110
111
  <section class="card"><div class="pl-card-h"><h2>Events</h2><p class="pl-card-d">What should be tracked, where it fires and which parameters it carries.</p></div>${events.length ? events.map(eventCard).join("") : `<p class="pl-empty muted xs">No events.</p>`}</section>
@@ -114,7 +115,7 @@ ${userPropertiesCard(plan.user_properties ?? [])}
114
115
  return `<!doctype html>
115
116
  <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
116
117
  <meta name="color-scheme" content="light dark">
117
- <title>${e(title)}</title><link rel="icon" type="image/png" href="${LOGOS.favicon}">
118
+ <title>${e(title)}</title><link rel="icon" type="image/svg+xml" href="${LOGOS["favicon-light"]}">
118
119
  <style>${TOKENS}\n${COMPONENTS}\n${PRODUCT}\n${PLAN_CSS}</style></head><body>
119
120
  ${sprite(body)}
120
121
  ${body}
package/src/report.js CHANGED
@@ -441,7 +441,7 @@ export function renderMarkdown({ title, site = null, generatedAt, findings, expl
441
441
  lines.push(...mdJourneys(m, runs, rows));
442
442
  lines.push(...mdNotChecked(m, runs, rows, plan, consentScenarios));
443
443
  lines.push(...mdInventory(m, runs));
444
- // A report with its own name or logo carries no Analitik İşler credit; the AI Tag Debugger one stays.
444
+ // A report with its own name or logo carries no Analitik İşler credit; the ai tag debugger one stays.
445
445
  if (brand?.name || brand?.logo) lines.push("---", "", `_${brand.name ? `${brand.name} · ` : ""}${m.ui.generatedBy}_`, "");
446
446
  else if (branding) lines.push("---", "", `_${m.ui.generatedBy} · [analitikisler.com](https://analitikisler.com)_`, "");
447
447
  return lines.join("\n");