@dyrected/admin 2.5.60 → 2.5.62

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/dist/index.mjs CHANGED
@@ -3,9 +3,9 @@ import React, { Component, StrictMode, createContext, createElement, useCallback
3
3
  import { createRoot } from "react-dom/client";
4
4
  import { HashRouter, Link, MemoryRouter, Route, Routes, useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom";
5
5
  import { QueryClient, QueryClientProvider, keepPreviousData, useInfiniteQuery, useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query";
6
- import { createClient } from "@dyrected/sdk";
6
+ import { DyrectedError, PREVIEW_TOKEN_PARAM, createClient } from "@dyrected/sdk";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
- import { AlertCircle, AlertTriangle, AlignCenter, AlignLeft, AlignRight, Archive, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpRight, Bold, Braces, Calendar, Check, CheckCircle, CheckCircle2, ChevronDown, ChevronLeft, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronUp, ChevronsUpDown, Circle, Clock, Clock3, Code, Copy, Database, Download, ExternalLink, Eye, EyeOff, FileDown, FileIcon, FileText, FileUp, Filter, Globe, GripVertical, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, Home, Image as Image$1, Info, Italic, KeyRound, Layers, LayoutDashboard, LayoutGrid, Library, Link as Link$1, List, ListOrdered, Loader2, Lock, LogOut, Mail, Menu, Monitor, Moon, MoreHorizontal, MousePointer2, PanelLeftClose, PanelLeftOpen, Pencil, Play, Plus, Quote, RotateCcw, Save, Scissors, Search, Settings, Settings2, Share2, Shield, Smartphone, Sparkles, Strikethrough, Sun, Table, Trash2, Underline, Undo2, Upload, UploadCloud, Users, Video, Volume2, Workflow, X, XCircle, icons } from "lucide-react";
8
+ import { AlertCircle, AlertTriangle, AlignCenter, AlignLeft, AlignRight, Archive, ArrowDown, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpRight, Bold, Braces, Calendar, Check, CheckCircle, CheckCircle2, ChevronDown, ChevronLeft, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronUp, ChevronsUpDown, Circle, Clock, Clock3, Code, Copy, Database, Download, ExternalLink, Eye, EyeOff, FileDown, FileIcon, FileText, FileUp, Filter, Globe, GripVertical, Heading1, Heading2, Heading3, Heading4, Heading5, Heading6, History, Home, Image as Image$1, Info, Italic, KeyRound, Layers, LayoutDashboard, LayoutGrid, Library, Link as Link$1, List, ListOrdered, Loader2, Lock, LogOut, Mail, Menu, Monitor, Moon, MoreHorizontal, MousePointer2, PanelLeftClose, PanelLeftOpen, Pencil, Play, Plus, Quote, RotateCcw, Save, Scissors, Search, Settings, Settings2, Share2, Shield, Smartphone, Sparkles, Star, Strikethrough, Sun, Table, Trash2, Underline, Undo2, Upload, UploadCloud, Users, Video, Volume2, Workflow, X, XCircle, icons } from "lucide-react";
9
9
  import { clsx } from "clsx";
10
10
  import { extendTailwindMerge } from "tailwind-merge";
11
11
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
@@ -67,6 +67,35 @@ function useDyrected() {
67
67
  }
68
68
  //#endregion
69
69
  //#region src/providers/dyrected-provider.tsx
70
+ function resolveBlock(block, registry) {
71
+ return {
72
+ ...block,
73
+ fields: block.fields.map((field) => resolveFieldBlocks(field, registry))
74
+ };
75
+ }
76
+ function resolveFieldBlocks(field, registry) {
77
+ const next = { ...field };
78
+ if (next.fields) next.fields = next.fields.map((child) => resolveFieldBlocks(child, registry));
79
+ if (next.type === "blocks" && next.blockReferences?.length) {
80
+ next.blocks = next.blockReferences.map((slug) => registry.get(slug)).filter((block) => !!block);
81
+ next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
82
+ } else if (next.blocks) next.blocks = next.blocks.map((block) => resolveBlock(block, registry));
83
+ return next;
84
+ }
85
+ function resolveSchemas(schema) {
86
+ const registry = new Map((schema.blocks ?? []).map((block) => [block.slug, block]));
87
+ return {
88
+ ...schema,
89
+ collections: schema.collections.map((collection) => ({
90
+ ...collection,
91
+ fields: collection.fields.map((field) => resolveFieldBlocks(field, registry))
92
+ })),
93
+ globals: schema.globals.map((global) => ({
94
+ ...global,
95
+ fields: global.fields.map((field) => resolveFieldBlocks(field, registry))
96
+ }))
97
+ };
98
+ }
70
99
  function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBaseUrl, siteId: initialSiteId, initialToken, defaultTechStack, components }) {
71
100
  const [baseUrl, setBaseUrl] = useState(() => initialBaseUrl || (typeof window !== "undefined" ? localStorage.getItem("dyrected_url") : null) || "");
72
101
  const [apiKey, setApiKey] = useState(() => initialApiKey || (typeof window !== "undefined" ? localStorage.getItem("dyrected_key") : null) || void 0);
@@ -94,7 +123,8 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
94
123
  };
95
124
  client.getSchemas().then((nextSchemas) => {
96
125
  if (cancelled) return;
97
- setSchemas((prev) => prev === nextSchemas ? prev : nextSchemas);
126
+ const resolved = resolveSchemas(nextSchemas);
127
+ setSchemas((prev) => prev === resolved ? prev : resolved);
98
128
  }, (err) => {
99
129
  if (cancelled) return;
100
130
  console.error("Failed to fetch schemas:", err);
@@ -108,6 +138,16 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
108
138
  useEffect(() => {
109
139
  if (initialToken && client) client.setToken(initialToken);
110
140
  }, [initialToken, client]);
141
+ const clearPersistedAuthState = useCallback((nextClient) => {
142
+ localStorage.removeItem("dyrected_token");
143
+ localStorage.removeItem("dyrected_admin_auth_collection");
144
+ (nextClient ?? client)?.clearToken();
145
+ setAuthCollectionSlug(null);
146
+ setUser(null);
147
+ }, [client]);
148
+ const shouldClearStoredAuth = useCallback((error) => {
149
+ return error instanceof DyrectedError && (error.statusCode === 401 || error.statusCode === 404);
150
+ }, []);
111
151
  const setAuth = useCallback((newUrl, newKey, newSiteId) => {
112
152
  localStorage.setItem("dyrected_url", newUrl);
113
153
  localStorage.setItem("dyrected_key", newKey);
@@ -119,11 +159,7 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
119
159
  }, []);
120
160
  const setToken = useCallback((token, collectionSlug) => {
121
161
  if (!token) {
122
- localStorage.removeItem("dyrected_token");
123
- localStorage.removeItem("dyrected_admin_auth_collection");
124
- if (client) client.clearToken();
125
- setAuthCollectionSlug(null);
126
- setUser(null);
162
+ clearPersistedAuthState(client);
127
163
  return;
128
164
  }
129
165
  const resolvedCollectionSlug = collectionSlug || authCollectionSlug || getAdminCollectionSlug(schemas);
@@ -134,12 +170,20 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
134
170
  }
135
171
  if (client) {
136
172
  client.setToken(token);
137
- if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () => setUser(null));
173
+ if (resolvedCollectionSlug) client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
174
+ if (shouldClearStoredAuth(error)) {
175
+ clearPersistedAuthState(client);
176
+ return;
177
+ }
178
+ setUser(null);
179
+ });
138
180
  }
139
181
  }, [
140
182
  authCollectionSlug,
183
+ clearPersistedAuthState,
141
184
  client,
142
- schemas
185
+ schemas,
186
+ shouldClearStoredAuth
143
187
  ]);
144
188
  useEffect(() => {
145
189
  if (initialToken || !client || !schemas || activeUser) return;
@@ -147,21 +191,39 @@ function DyrectedProvider({ children, apiKey: initialApiKey, baseUrl: initialBas
147
191
  const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
148
192
  if (!token || !resolvedCollectionSlug) return;
149
193
  client.setToken(token);
150
- client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), () => setUser(null));
194
+ client.collection(resolvedCollectionSlug).me().then((nextUser) => setUser(nextUser), (error) => {
195
+ if (shouldClearStoredAuth(error)) {
196
+ clearPersistedAuthState(client);
197
+ return;
198
+ }
199
+ setUser(null);
200
+ });
151
201
  }, [
152
202
  activeUser,
153
203
  authCollectionSlug,
204
+ clearPersistedAuthState,
154
205
  client,
155
206
  initialToken,
156
- schemas
207
+ schemas,
208
+ shouldClearStoredAuth
157
209
  ]);
158
210
  const logout = useCallback(() => {
159
- localStorage.removeItem("dyrected_token");
160
- localStorage.removeItem("dyrected_admin_auth_collection");
161
- if (client) client.clearToken();
162
- setAuthCollectionSlug(null);
163
- setUser(null);
164
- }, [client]);
211
+ (async () => {
212
+ const resolvedCollectionSlug = authCollectionSlug || getAdminCollectionSlug(schemas);
213
+ try {
214
+ if (client && resolvedCollectionSlug) await client.collection(resolvedCollectionSlug).logout();
215
+ } catch (error) {
216
+ console.warn("Failed to revoke admin session during logout:", error);
217
+ } finally {
218
+ clearPersistedAuthState(client);
219
+ }
220
+ })();
221
+ }, [
222
+ authCollectionSlug,
223
+ clearPersistedAuthState,
224
+ client,
225
+ schemas
226
+ ]);
165
227
  return /* @__PURE__ */ jsx(DyrectedContext.Provider, {
166
228
  value: {
167
229
  client,
@@ -387,26 +449,36 @@ function BrandingProvider({ children }) {
387
449
  const branding = schemas?.admin?.branding;
388
450
  return /* @__PURE__ */ jsxs(Fragment, { children: [useMemo(() => {
389
451
  const hasCustomPrimary = Boolean(branding?.primaryColor);
452
+ const hasCustomAccent = Boolean(branding?.accentColor);
390
453
  const primaryHsl = toRawHsl(branding?.primaryColor || "#B6FF2E");
391
- const intelligenceHsl = hasCustomPrimary ? primaryHsl : "259 100% 62%";
454
+ const accentHsl = hasCustomAccent ? toRawHsl(branding.accentColor) : hasCustomPrimary ? primaryHsl : "259 100% 62%";
392
455
  const fg = primaryForeground(primaryHsl);
456
+ const tokens = `
457
+ --primary: ${primaryHsl};
458
+ --primary-foreground: ${fg};
459
+ --intelligence: ${accentHsl};
460
+ --accent-foreground: ${accentHsl};
461
+ --sidebar-primary: ${primaryHsl};
462
+ --sidebar-primary-foreground: ${fg};
463
+ --sidebar-accent-foreground: ${accentHsl};
464
+ --sidebar-ring: ${accentHsl};
465
+ --ring: ${accentHsl} / 0.24;
466
+ ${branding?.fontSans ? `--font-sans: ${branding.fontSans};` : ""}
467
+ ${branding?.fontSerif ? `--font-serif: ${branding.fontSerif};` : ""}
468
+ `;
393
469
  return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: `
394
- .dy-admin-ui {
395
- --primary: ${primaryHsl};
396
- --primary-foreground: ${fg};
397
- --intelligence: ${intelligenceHsl};
398
- --accent-foreground: ${intelligenceHsl};
399
- --sidebar-primary: ${primaryHsl};
400
- --sidebar-primary-foreground: ${fg};
401
- --sidebar-accent-foreground: ${intelligenceHsl};
402
- --sidebar-ring: ${intelligenceHsl};
403
- --ring: ${intelligenceHsl} / 0.24;
404
- ${branding?.fontSans ? `--font-sans: ${branding.fontSans};` : ""}
405
- ${branding?.fontSerif ? `--font-serif: ${branding.fontSerif};` : ""}
406
- }
470
+ .dy-admin-ui { ${tokens} }
471
+ /* Repeat under the dark selectors so brand colours also apply in dark
472
+ mode. The base stylesheet's \`.dy-admin-ui.dark\` sets its own
473
+ --primary/--intelligence at the same specificity; matching that
474
+ specificity here (and coming later in source order) lets the brand
475
+ colours win in dark mode too. */
476
+ .dy-admin-ui.dark,
477
+ .dy-admin-ui[data-theme="dark"] { ${tokens} }
407
478
  ` } });
408
479
  }, [
409
480
  branding?.primaryColor,
481
+ branding?.accentColor,
410
482
  branding?.fontSans,
411
483
  branding?.fontSerif
412
484
  ]), children] });
@@ -744,7 +816,8 @@ function SidebarInner({ schemas, isLoading, location, logout, isEmbedded, collap
744
816
  className: "dy-px-3 dy-mb-1.5 dy-text-[10px] dy-font-semibold dy-uppercase dy-tracking-widest dy-text-muted-foreground/50",
745
817
  children: text
746
818
  }) : /* @__PURE__ */ jsx("div", { className: "dy-my-2 dy-mx-3 dy-h-px dy-bg-border" });
747
- const branding = (schemas?.admin)?.branding;
819
+ const branding = schemas?.admin?.branding;
820
+ const meta = schemas?.admin?.meta;
748
821
  return /* @__PURE__ */ jsxs("div", {
749
822
  className: "dy-flex dy-flex-col dy-min-h-screen",
750
823
  children: [
@@ -775,7 +848,7 @@ function SidebarInner({ schemas, isLoading, location, logout, isEmbedded, collap
775
848
  })
776
849
  }), !collapsed && !branding?.logoText && /* @__PURE__ */ jsx("span", {
777
850
  className: "dy-font-serif dy-text-lg dy-tracking-tight dy-text-foreground dy-flex-1 dy-truncate",
778
- children: branding?.titleSuffix?.replace(/^- /, "") || ""
851
+ children: meta?.titleSuffix?.replace(/^- /, "") || ""
779
852
  })] }) })
780
853
  }),
781
854
  /* @__PURE__ */ jsxs("nav", {
@@ -965,7 +1038,7 @@ function isNewerVersion(latest, current) {
965
1038
  return false;
966
1039
  }
967
1040
  function useUpdateCheck() {
968
- const currentVersion = "2.5.59";
1041
+ const currentVersion = "2.5.62";
969
1042
  const [updateInfo, setUpdateInfo] = useState(() => {
970
1043
  if (typeof window === "undefined") return null;
971
1044
  const cacheKey = "dyrected_latest_release";
@@ -1011,7 +1084,7 @@ function useUpdateCheck() {
1011
1084
  return updateInfo;
1012
1085
  }
1013
1086
  function AdminShell({ children, isEmbedded = false }) {
1014
- const { client, logout, user } = useDyrected();
1087
+ const { client, logout } = useDyrected();
1015
1088
  const location = useLocation();
1016
1089
  const updateInfo = useUpdateCheck();
1017
1090
  const [collapsed, setCollapsed] = useState(false);
@@ -1043,7 +1116,6 @@ function AdminShell({ children, isEmbedded = false }) {
1043
1116
  },
1044
1117
  enabled: !!client
1045
1118
  });
1046
- const mobileBranding = (schemas?.admin)?.branding;
1047
1119
  return /* @__PURE__ */ jsx(BrandingProvider, { children: /* @__PURE__ */ jsx(SidebarControlProvider, {
1048
1120
  value: sidebarControl,
1049
1121
  children: /* @__PURE__ */ jsxs("div", {
@@ -1094,39 +1166,12 @@ function AdminShell({ children, isEmbedded = false }) {
1094
1166
  }),
1095
1167
  /* @__PURE__ */ jsxs("main", {
1096
1168
  className: "dy-flex-1 dy-min-w-0 dy-overflow-auto dy-flex dy-flex-col dy-relative dy-bg-background/95",
1097
- children: [!isEmbedded && /* @__PURE__ */ jsxs("header", {
1098
- className: "md:dy-hidden dy-sticky dy-top-0 dy-z-20 dy-flex dy-h-14 dy-items-center dy-border-b dy-border-border dy-bg-background/95 dy-backdrop-blur-sm dy-px-3 dy-shrink-0",
1099
- children: [!isEmbedded && /* @__PURE__ */ jsx("div", {
1100
- className: "dy-absolute dy-left-1/2 dy--translate-x-1/2 dy-flex dy-items-center dy-gap-2",
1101
- children: mobileBranding?.logoText ? /* @__PURE__ */ jsx("span", {
1102
- className: "dy-font-serif dy-text-base dy-font-bold dy-tracking-tight dy-text-foreground dy-leading-none",
1103
- children: mobileBranding.logoText
1104
- }) : mobileBranding?.logo ? /* @__PURE__ */ jsx("img", {
1105
- src: getMediaUrl(mobileBranding.logo, client?.getBaseUrl() || ""),
1106
- alt: "Logo",
1107
- className: "dy-h-7 dy-w-auto dy-object-contain"
1108
- }) : /* @__PURE__ */ jsx("img", {
1109
- src: "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='75%20408%20880%20200'%20width='1024'%20height='320'%3e%3cpath%20d='M0%200%20C80.77777778%200%2080.77777778%200%20104.25%2016.25%20C110.41149028%2022.41149028%20115.8130796%2029.84774381%20119%2038%20C119.37125%2038.93457031%20119.7425%2039.86914062%20120.125%2040.83203125%20C125.97853191%2057.96580693%20124.38837118%2076.7725057%20116.9375%2093.0625%20C109.56325726%20107.53398146%2097.58992255%20116.7156145%2082.375%20121.875%20C71.26222779%20125.44607062%2060.56671647%20126.28755488%2048.92578125%20126.1953125%20C47.67873413%20126.19329834%2046.43168701%20126.19128418%2045.14685059%20126.18920898%20C40.53536241%20126.17882812%2035.9239271%20126.15090625%2031.3125%20126.125%20C20.979375%20126.08375%2010.64625%20126.0425%200%20126%20C0%2084.42%200%2042.84%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(94,437)'/%3e%3cpath%20d='M0%200%20C2.71975521%200.35943901%203.84341638%200.83999752%205.7890625%202.828125%20C6.39492188%203.62734375%207.00078125%204.4265625%207.625%205.25%20C8.3159375%206.14847656%209.006875%207.04695313%209.71875%207.97265625%20C10.4715625%208.97167969%2011.224375%209.97070312%2012%2011%20C13.27334297%2012.66801941%2014.55020731%2014.33328608%2015.828125%2015.99780273%20C16.68920631%2017.1197048%2017.54859726%2018.24290639%2018.40625%2019.36743164%20C20.72359821%2022.39401514%2023.10162467%2025.33084868%2025.625%2028.1875%20C28%2031%2028%2031%2028%2033%20C24.04%2033%2020.08%2033%2016%2033%20C16%2036.96%2016%2040.92%2016%2045%20C23.92%2045%2031.84%2045%2040%2045%20C40%2052.26%2040%2059.52%2040%2067%20C32.08%2067%2024.16%2067%2016%2067%20C16.05110565%2073.01513491%2016.11411805%2079.02770699%2016.20751953%2085.04199219%20C16.23569066%2087.08650395%2016.25692435%2089.13112384%2016.27099609%2091.17578125%20C16.29247887%2094.12035322%2016.3391569%2097.06363041%2016.390625%20100.0078125%20C16.39185364%20100.9174173%2016.39308228%20101.82702209%2016.39434814%20102.76419067%20C16.52453003%20108.44478815%2017.27045802%20111.64305028%2021%20116%20C25.45146778%20118.22573389%2031.49130269%20117.61284521%2036.22265625%20116.45703125%20C43.02192732%20113.57781706%2047.39900966%20107.25297069%2051.15625%20101.109375%20C56.12293503%2093.05732503%2066.02505874%2086.96170223%2075%2084.4375%20C75.99%2084.2209375%2075.99%2084.2209375%2077%2084%20C77.76934372%2083.82831802%2078.53868744%2083.65663605%2079.3313446%2083.47975159%20C81.85956507%2083.02524638%2084.13490112%2082.87925324%2086.69848633%2082.88647461%20C88.0493206%2082.88658791%2088.0493206%2082.88658791%2089.42744446%2082.88670349%20C90.3859581%2082.89186478%2091.34447174%2082.89702606%2092.33203125%2082.90234375%20C93.32377853%2082.9037587%2094.31552582%2082.90517365%2095.33732605%2082.90663147%20C98.49574843%2082.91221582%20101.65409915%2082.92476548%20104.8125%2082.9375%20C106.95768127%2082.94251702%20109.10286365%2082.94707958%20111.24804688%2082.95117188%20C116.49872224%2082.96218012%20121.749356%2082.9789027%20127%2083%20C126.41627107%2081.40206803%20125.81844039%2079.8092836%20125.21484375%2078.21875%20C124.88347412%2077.33123047%20124.55210449%2076.44371094%20124.21069336%2075.52929688%20C121.96215073%2070.83179705%20118.27353717%2068.10625131%20113.671875%2065.8671875%20C107.40145998%2063.8320528%2099.62475654%2063.83565488%2093.5625%2066.5625%20C90.74762291%2068.18758368%2089.23412527%2069.92734346%2087.375%2072.5625%20C83.79694231%2077.15174791%2079.16997757%2077.25826651%2073.6875%2078.1875%20C67.93513917%2079.45496934%2063.11247292%2082.15885793%2058%2085%20C56.67024353%2085.67377293%2055.33832199%2086.34340541%2054%2087%20C54.53283313%2074.23864658%2059.85622582%2063.62873005%2069.125%2054.8125%20C79.48783101%2046.05739319%2090.98874912%2042.60318009%20104.3125%2042.6875%20C105.24167236%2042.69313965%20106.17084473%2042.6987793%20107.12817383%2042.70458984%20C120.80891332%2042.94676927%20132.08138441%2047.30179809%20142%2057%20C150.69408674%2067.01964256%20154.41434505%2078.42703622%20154.12890625%2091.5%20C154.11960083%2092.32242188%20154.11029541%2093.14484375%20154.10070801%2093.9921875%20C154.07669258%2095.99492902%20154.03971288%2097.99750824%20154%20100%20C153.20788116%20100.00142502%20152.41576233%20100.00285004%20151.59963989%20100.00431824%20C144.09719277%20100.0222236%20136.5954255%20100.06405798%20129.09327888%20100.13209057%20C125.23723861%20100.16623308%20121.38158914%20100.19145048%20117.52539062%20100.19555664%20C113.79674299%20100.1998673%20110.06897502%20100.22855506%20106.34060287%20100.27343178%20C104.9254661%20100.2863193%20103.51022356%20100.29074578%20102.09503555%20100.28615379%20C90.97909255%20100.25851196%2082.24496399%20102.13674731%2074%20110%20C72.693186%20111.68664002%2071.44412084%20113.4192826%2070.25%20115.1875%20C60.98713546%20128.13484969%2049.31550166%20137.60492408%2033.359375%20140.6015625%20C22.09111259%20141.93803083%2011.94495066%20141.67673859%201.8125%20136.3125%20C-6.21093351%20129.71545467%20-11.15550672%20122.32419258%20-13%20112%20C-13.25198192%20108.45441218%20-13.23420464%20104.92803422%20-13.1953125%20101.375%20C-13.1924826%20100.38749756%20-13.18965271%2099.39999512%20-13.18673706%2098.38256836%20C-13.1756182%2095.25491785%20-13.15052916%2092.12756272%20-13.125%2089%20C-13.11495948%2086.86849374%20-13.10583551%2084.73698296%20-13.09765625%2082.60546875%20C-13.07570607%2077.4035335%20-13.04123391%2072.20181669%20-13%2067%20C-17.95%2067%20-22.9%2067%20-28%2067%20C-28%2059.74%20-28%2052.48%20-28%2045%20C-25.11584117%2043.55792059%20-22.58278472%2043.90605113%20-19.375%2043.9375%20C-18.18648437%2043.94652344%20-16.99796875%2043.95554687%20-15.7734375%2043.96484375%20C-14.85820313%2043.97644531%20-13.94296875%2043.98804688%20-13%2044%20C-13%2040.37%20-13%2036.74%20-13%2033%20C-16.63%2033%20-20.26%2033%20-24%2033%20C-22.47026072%2029.1756518%20-21.7364866%2027.36138218%20-19.27734375%2024.43359375%20C-18.74262451%2023.78841797%20-18.20790527%2023.14324219%20-17.65698242%2022.47851562%20C-16.80583862%2021.46821289%20-16.80583862%2021.46821289%20-15.9375%2020.4375%20C-10.41141017%2013.76832013%20-5.12012996%206.98560367%200%200%20Z%20'%20fill='%23B6FF2E'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C29.59839035%2022.9781895%2028.74526871%2040.62390375%2012.65625%2058.3359375%20C11%2060%2011%2060%208.4375%2062%20C5.46025693%2064.44286611%203.51309236%2067.23700629%201.33203125%2070.390625%20C0.89246094%2070.92171875%200.45289063%2071.4528125%200%2072%20C-0.66%2072%20-1.32%2072%20-2%2072%20C-2.93987733%2070.55661697%20-3.87796552%2069.11202069%20-4.8046875%2067.66015625%20C-8.25891165%2062.86262271%20-12.44079328%2060.54083019%20-18%2059%20C-25.38567118%2058.11965024%20-31.79640485%2058.30895235%20-38.12890625%2062.45703125%20C-43.93075089%2067.24143341%20-46.08004443%2072.64035542%20-47%2080%20C-47.62384022%2087.86038675%20-46.29060096%2095.4983732%20-41.375%20101.875%20C-36.78559554%20106.66837799%20-31.1204383%20109.16020416%20-24.5%20109.4375%20C-17.63097442%20109.06652475%20-10.76252345%20107.03884639%20-5.6171875%20102.3203125%20C-2.88904376%2098.40601931%20-1.66280214%2093.9535236%20-0.1809082%2089.45141602%20C3.35486261%2078.72166264%208.74872668%2071.79757179%2016.88671875%2064.08325195%20C20.82961215%2060.32870988%2023.90074122%2056.47544342%2027%2052%20C27.33%2052%2027.66%2052%2028%2052%20C28%2078.4%2028%20104.8%2028%20132%20C19.42%20132%2010.84%20132%202%20132%20C2%20128.37%202%20124.74%202%20121%20C1.34%20121%200.68%20121%200%20121%20C-0.495%20122.485%20-0.495%20122.485%20-1%20124%20C-12.73711711%20132.94256542%20-25.06338231%20134.43156199%20-39.3125%20132.56640625%20C-51.92494538%20129.92239101%20-62.18469132%20122.09849232%20-69.1875%20111.4375%20C-76.64035884%2098.17021241%20-78.4709381%2082.69085036%20-74.375%2068.0625%20C-69.54605076%2054.5211808%20-61.09321667%2044.22524607%20-48%2038%20C-41.32156484%2035.17823273%20-35.2722462%2034.50746377%20-28.0625%2034.5625%20C-27.13759766%2034.54251953%20-26.21269531%2034.52253906%20-25.25976562%2034.50195312%20C-15.04309922%2034.50911267%20-8.83524108%2037.47063244%20-1%2044%20C-0.67%2029.48%20-0.34%2014.96%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(902,431)'/%3e%3cpath%20d='M0%200%20C1.98755052%201.41100915%203.72130576%202.89802373%205.484375%204.578125%20C6.38349609%205.34576172%206.38349609%205.34576172%207.30078125%206.12890625%20C15.92373572%2013.93240069%2020.74453573%2025.07362429%2021.484375%2036.578125%20C21.60509121%2040.91384903%2021.70071786%2045.24490485%2021.484375%2049.578125%20C20.484375%2050.578125%2020.484375%2050.578125%2017.63072205%2050.69837952%20C16.35387039%2050.69615891%2015.07701874%2050.69393829%2013.76147461%2050.69165039%20C13.0590715%2050.69179642%2012.3566684%2050.69194244%2011.63298035%2050.6920929%20C9.30086222%2050.69139372%206.968823%2050.68360117%204.63671875%2050.67578125%20C3.02389062%2050.67391708%201.41106193%2050.67249318%20-0.20176697%2050.67149353%20C-4.45477857%2050.66766823%20-8.70775624%2050.65783785%20-12.96075439%2050.64678955%20C-17.2973993%2050.63657569%20-21.63404967%2050.63199596%20-25.97070312%2050.62695312%20C-34.48569269%2050.61621559%20-43.00065463%2050.59913903%20-51.515625%2050.578125%20C-50.76310085%2052.01068418%20-50.00072966%2053.43807287%20-49.234375%2054.86328125%20C-48.81091797%2055.65871338%20-48.38746094%2056.45414551%20-47.95117188%2057.27368164%20C-44.77728619%2062.36863181%20-40.24267716%2065.83885608%20-34.515625%2067.578125%20C-24.44648111%2068.75306138%20-13.88210791%2068.97920567%20-5.515625%2062.578125%20C-4.49191978%2061.60240597%20-3.48336669%2060.60937474%20-2.515625%2059.578125%20C0.41667693%2060.89933328%202.47102399%2062.32450697%204.71875%2064.6171875%20C5.29238281%2065.19726562%205.86601562%2065.77734375%206.45703125%2066.375%20C7.04355469%2066.97828125%207.63007813%2067.5815625%208.234375%2068.203125%20C8.83636719%2068.81414062%209.43835938%2069.42515625%2010.05859375%2070.0546875%20C11.53842805%2071.55801124%2013.01202176%2073.06747356%2014.484375%2074.578125%20C6.88082899%2084.58279081%20-3.31152864%2089.39611981%20-15.515625%2091.578125%20C-19.0759833%2091.8143607%20-22.63564692%2091.80900924%20-26.203125%2091.828125%20C-27.61754883%2091.8590625%20-27.61754883%2091.8590625%20-29.06054688%2091.890625%20C-43.17549414%2091.96823296%20-55.10728015%2086.56442315%20-65.26171875%2076.88671875%20C-75.61516851%2066.28205877%20-79.89439154%2053.46530582%20-79.73046875%2038.73046875%20C-78.80311822%2025.12370731%20-72.27652509%2013.81184063%20-62.515625%204.578125%20C-45.29287927%20-9.47756591%20-19.26149726%20-10.88693323%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(493.515625,472.421875)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C31.88545714%206.3480057%2034.74623297%2012.64267461%2037.375%2019.08984375%20C37.66681152%2019.80048477%2037.95862305%2020.51112579%2038.25927734%2021.24330139%20C39.17479456%2023.47391024%2040.08751229%2025.70565039%2041%2027.9375%20C41.60917627%2029.42390959%2042.2185503%2030.91023814%2042.828125%2032.39648438%20C43.27551025%2033.48759018%2043.27551025%2033.48759018%2043.73193359%2034.60073853%20C44.32289018%2036.04103366%2044.91435386%2037.48112086%2045.50634766%2038.92098999%20C46.83058613%2042.14243669%2048.14705044%2045.36608605%2049.4453125%2048.59814453%20C49.87585938%2049.6601709%2050.30640625%2050.72219727%2050.75%2051.81640625%20C51.11609375%2052.7297876%2051.4821875%2053.64316895%2051.859375%2054.58422852%20C52.99948383%2056.99890679%2054.32194326%2058.93105971%2056%2061%20C63.85224401%2042.59935141%2063.85224401%2042.59935141%2071.375%2024.0625%20C74.61034321%2015.88404588%2078.06515289%207.86969422%2082%200%20C90.91%200%2099.82%200%20109%200%20C105.62156917%2011.2614361%20105.62156917%2011.2614361%20103.94921875%2015.33203125%20C103.57990234%2016.23373047%20103.21058594%2017.13542969%20102.83007812%2018.06445312%20C102.45302734%2018.97130859%20102.07597656%2019.87816406%20101.6875%2020.8125%20C101.13932617%2022.15538086%20101.13932617%2022.15538086%20100.58007812%2023.52539062%20C98.52888864%2028.50280206%2096.36531611%2033.41002468%2094.08984375%2038.2890625%20C91.12034683%2044.67044212%2088.37355778%2051.13053761%2085.67678833%2057.63122559%20C84.27693812%2061.00305678%2082.86621358%2064.37034217%2081.45703125%2067.73828125%20C81.17043137%2068.42368988%2080.88383148%2069.10909851%2080.58854675%2069.8152771%20C77.59723903%2076.96761949%2074.59243132%2084.11392962%2071.5625%2091.25%20C71.09118652%2092.37220947%2070.61987305%2093.49441895%2070.13427734%2094.65063477%20C64.14372759%20108.71158026%2057.88097216%20122.54500294%2043.26171875%20129.16015625%20C32.99566383%20132.97224918%2018.99532524%20132.39132855%209%20128%20C6.27254605%20126.74842163%203.64641133%20125.4212209%201%20124%20C1.6411928%20121.09325931%202.56662682%20118.57468666%203.84765625%20115.890625%20C4.38422852%20114.75947266%204.38422852%20114.75947266%204.93164062%20113.60546875%20C5.30482422%20112.82816406%205.67800781%20112.05085937%206.0625%20111.25%20C6.62807617%20110.06083984%206.62807617%20110.06083984%207.20507812%20108.84765625%20C8.13345839%20106.89688254%209.06629544%20104.94823094%2010%20103%20C12.57030771%20104.02467879%2015.13501673%20105.05651863%2017.6875%20106.125%20C23.13926051%20107.56508768%2028.53393046%20107.91137353%2033.875%20105.9375%20C36.67992585%20103.3800676%2038.90092755%20100.67546954%2040%2097%20C39.51255272%2092.02739581%2037.81323979%2087.84336435%2035.75390625%2083.34765625%20C35.42739075%2082.61970352%2035.10087524%2081.89175079%2034.76446533%2081.14173889%20C34.06574374%2079.58604999%2033.36386031%2078.03177798%2032.65908813%2076.4788208%20C31.54929238%2074.03339714%2030.44768068%2071.58443912%2029.34838867%2069.13427734%20C28.24699442%2066.67954634%2027.14520032%2064.22500817%2026.04084778%2061.77160645%20C22.05427867%2052.9145598%2018.19057599%2044.00588863%2014.33935547%2035.08935547%20C13.03927819%2032.09059902%2011.73151205%2029.09532776%2010.42124939%2026.10101318%20C9.20378396%2023.3178069%207.98924352%2020.53332878%206.7749939%2017.74871826%20C6.17859872%2016.3828194%205.58097738%2015.01745522%204.98208618%2013.65264893%20C4.14875742%2011.75295298%203.31997874%209.85133284%202.4921875%207.94921875%20C2.01120605%206.84924561%201.53022461%205.74927246%201.03466797%204.6159668%20C0%202%200%202%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(224,467)'/%3e%3cpath%20d='M0%200%20C4.6456294%203.80490916%208.23887006%207.95463812%2010.84375%2013.40234375%20C10.84375%2014.06234375%2010.84375%2014.72234375%2010.84375%2015.40234375%20C0.44875%2020.84734375%200.44875%2020.84734375%20-10.15625%2026.40234375%20C-15.15625%2022.40234375%20-15.15625%2022.40234375%20-17.59375%2019.83984375%20C-23.69448695%2014.03670372%20-29.49135908%2013.8685058%20-37.5859375%2014.05859375%20C-44.66458696%2014.74012674%20-48.35592604%2018.17840756%20-52.89453125%2023.42578125%20C-57.35750661%2030.4173154%20-57.05559365%2039.03898526%20-55.7265625%2046.96484375%20C-53.69407611%2054.19146201%20-49.25238278%2059.49703127%20-42.90625%2063.40234375%20C-35.21481566%2065.45339291%20-27.19943303%2065.45458604%20-20.15625%2061.40234375%20C-17.38502725%2059.04807876%20-17.38502725%2059.04807876%20-15.15625%2056.40234375%20C-13.82291667%2055.06901042%20-12.48958333%2053.73567708%20-11.15625%2052.40234375%20C-3.48829498%2054.74171986%203.61512274%2057.95003181%2010.84375%2061.40234375%20C9.71301894%2068.83286216%205.25630274%2073.41753074%20-0.15625%2078.40234375%20C-14.27515309%2088.65893292%20-29.58374274%2090.22229359%20-46.59375%2087.94140625%20C-59.50522416%2084.75107107%20-71.47879005%2076.68814229%20-78.59375%2065.40234375%20C-85.12640699%2053.53652894%20-87.70329542%2038.76522142%20-84.28515625%2025.4921875%20C-81.80476638%2018.01848819%20-78.48663047%2012.17115378%20-73.15625%206.40234375%20C-72.35574219%205.46648437%20-72.35574219%205.46648437%20-71.5390625%204.51171875%20C-54.14361329%20-14.63159857%20-19.9950983%20-14.8152087%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(612.15625,475.59765625)'/%3e%3cpath%20d='M0%200%20C0.92917236%200.00563965%201.85834473%200.0112793%202.81567383%200.01708984%20C16.49641332%200.25926927%2027.76888441%204.61429809%2037.6875%2014.3125%20C46.38158674%2024.33214256%2050.10184505%2035.73953622%2049.81640625%2048.8125%20C49.80710083%2049.63492188%2049.79779541%2050.45734375%2049.78820801%2051.3046875%20C49.76419258%2053.30742902%2049.72721288%2055.31000824%2049.6875%2057.3125%20C48.89538116%2057.31392502%2048.10326233%2057.31535004%2047.28713989%2057.31681824%20C39.78469277%2057.3347236%2032.2829255%2057.37655798%2024.78077888%2057.44459057%20C20.92473861%2057.47873308%2017.06908914%2057.50395048%2013.21289062%2057.50805664%20C9.48424299%2057.5123673%205.75647502%2057.54105506%202.02810287%2057.58593178%20C0.6129661%2057.5988193%20-0.80227644%2057.60324578%20-2.21746445%2057.59865379%20C-13.33340745%2057.57101196%20-22.06753601%2059.44924731%20-30.3125%2067.3125%20C-31.619314%2068.99914002%20-32.86837916%2070.7317826%20-34.0625%2072.5%20C-39.27138551%2079.83175205%20-44.31888353%2086.93254032%20-53.3125%2089.3125%20C-59.27605196%2089.97511688%20-63.4418563%2088.64128375%20-68.3125%2085.3125%20C-71.47815211%2082.38915707%20-73.44158139%2079.56624985%20-74.3125%2075.3125%20C-73.64863281%2075.07015625%20-72.98476563%2074.8278125%20-72.30078125%2074.578125%20C-70.97626953%2074.07539062%20-70.97626953%2074.07539062%20-69.625%2073.5625%20C-68.31982422%2073.07523438%20-68.31982422%2073.07523438%20-66.98828125%2072.578125%20C-61.914668%2070.17834297%20-58.99832299%2067.14164616%20-55.97827148%2062.4387207%20C-49.17329509%2051.85146005%20-39.91704612%2044.06974446%20-27.3125%2041.3125%20C-26.54315628%2041.14081802%20-25.77381256%2040.96913605%20-24.9811554%2040.79225159%20C-22.45293493%2040.33774638%20-20.17759888%2040.19175324%20-17.61401367%2040.19897461%20C-16.2631794%2040.19908791%20-16.2631794%2040.19908791%20-14.88505554%2040.19920349%20C-13.44728508%2040.20694542%20-13.44728508%2040.20694542%20-11.98046875%2040.21484375%20C-10.49284782%2040.21696617%20-10.49284782%2040.21696617%20-8.97517395%2040.21913147%20C-5.81675157%2040.22471582%20-2.65840085%2040.23726548%200.5%2040.25%20C2.64518127%2040.25501702%204.79036365%2040.25957958%206.93554688%2040.26367188%20C12.18622224%2040.27468012%2017.436856%2040.2914027%2022.6875%2040.3125%20C22.10377107%2038.71456803%2021.50594039%2037.1217836%2020.90234375%2035.53125%20C20.57097412%2034.64373047%2020.23960449%2033.75621094%2019.89819336%2032.84179688%20C17.64965073%2028.14429705%2013.96103717%2025.41875131%209.359375%2023.1796875%20C3.08895998%2021.1445528%20-4.68774346%2021.14815488%20-10.75%2023.875%20C-13.56487709%2025.50008368%20-15.07837473%2027.23984346%20-16.9375%2029.875%20C-20.51555769%2034.46424791%20-25.14252243%2034.57076651%20-30.625%2035.5%20C-36.37736083%2036.76746934%20-41.20002708%2039.47135793%20-46.3125%2042.3125%20C-47.64225647%2042.98627293%20-48.97417801%2043.65590541%20-50.3125%2044.3125%20C-49.77966687%2031.55114658%20-44.45627418%2020.94123005%20-35.1875%2012.125%20C-24.82466899%203.36989319%20-13.32375088%20-0.08431991%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(764.3125,465.6875)'/%3e%3cpath%20d='M0%200%20C44.84375%200%2044.84375%200%2055%2010%20C63.50692661%2020.10567615%2066.02395277%2031.00367642%2065%2044%20C63.92164324%2052.75980221%2059.27536689%2061.86408571%2053%2068%20C36.90761972%2079.76525518%2020.54677762%2076%200%2076%20C0%2050.92%200%2025.84%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(123,462)'/%3e%3cpath%20d='M0%200%20C0%208.58%200%2017.16%200%2026%20C-2.475%2026.0825%20-4.95%2026.165%20-7.5%2026.25%20C-15.58592043%2026.68028387%20-20.78770187%2028.00185508%20-26.8125%2033.625%20C-32.18698591%2040.84882192%20-32.45755497%2050.04763218%20-32.51171875%2058.6953125%20C-32.52966995%2059.76876923%20-32.54762115%2060.84222595%20-32.56611633%2061.94821167%20C-32.61983039%2065.34043577%20-32.65398988%2068.73252235%20-32.6875%2072.125%20C-32.72070741%2074.44012315%20-32.75520018%2076.75522823%20-32.79101562%2079.0703125%20C-32.87792806%2084.71355721%20-32.93833073%2090.35619859%20-33%2096%20C-42.24%2096%20-51.48%2096%20-61%2096%20C-61.11629021%2091.57321943%20-61.21532635%2087.15195899%20-61.2746582%2082.72485352%20C-61.29944483%2081.22662179%20-61.33328586%2079.72850609%20-61.37719727%2078.23071289%20C-61.84659218%2061.77980184%20-58.18723461%2049.29745852%20-47.64160156%2036.32958984%20C-46.11388537%2034.44998397%20-44.58793536%2032.56895731%20-43.0625%2030.6875%20C-42.54276611%2030.05078369%20-42.02303223%2029.41406738%20-41.48754883%2028.75805664%20C-38.17466035%2024.64362091%20-35.32555694%2020.47816771%20-32.625%2015.9375%20C-27.24219449%206.99173768%20-23.75743907%203.76906718%20-13.609375%200.6640625%20C-10%200%20-10%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(406,466)'/%3e%3cpath%20d='M0%200%20C5.66129431%204.69766975%2010.85228904%209.74723372%2016%2015%20C11.92304775%2022.70385133%204.05433775%2027.16606635%20-4%2030%20C-19.29250715%2034.53548448%20-36.16315756%2033.34402642%20-50.4140625%2026.31640625%20C-58.66486514%2021.8238732%20-58.66486514%2021.8238732%20-59.77929688%2019.08422852%20C-60%2017%20-60%2017%20-57.796875%2013.87109375%20C-56.79405635%2012.71532531%20-55.77778517%2011.57112409%20-54.75%2010.4375%20C-54.24597656%209.86064453%20-53.74195313%209.28378906%20-53.22265625%208.68945312%20C-50.89341628%206.03925489%20-48.51068548%203.47978615%20-46%201%20C-42.31120701%202.80247839%20-38.77349917%204.8276212%20-35.21875%206.87890625%20C-27.51820571%2010.76985028%20-18.90673806%209.19207078%20-10.88671875%207.06640625%20C-6.60864698%205.48600897%20-3.35300014%203.04728542%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(791,532)'/%3e%3cpath%20d='M0%200%20C4.56326885%202.95860288%208.00828055%206.6679148%209.9375%2011.8125%20C9.9375%2013.4625%209.9375%2015.1125%209.9375%2016.8125%20C-4.9125%2016.8125%20-19.7625%2016.8125%20-35.0625%2016.8125%20C-33.85907282%209.59193695%20-31.77484523%205.59340843%20-25.8984375%201.19140625%20C-17.83251928%20-3.44583989%20-8.3946856%20-4.34922034%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(477.0625,489.1875)'/%3e%3cpath%20d='M0%200%20C2.71975521%200.35943901%203.84341638%200.83999752%205.7890625%202.828125%20C6.39492188%203.62734375%207.00078125%204.4265625%207.625%205.25%20C8.3159375%206.14847656%209.006875%207.04695313%209.71875%207.97265625%20C10.4715625%208.97167969%2011.224375%209.97070312%2012%2011%20C13.27334297%2012.66801941%2014.55020731%2014.33328608%2015.828125%2015.99780273%20C16.68920631%2017.1197048%2017.54859726%2018.24290639%2018.40625%2019.36743164%20C20.72359821%2022.39401514%2023.10162467%2025.33084868%2025.625%2028.1875%20C28%2031%2028%2031%2028%2033%20C24.04%2033%2020.08%2033%2016%2033%20C16%2036.96%2016%2040.92%2016%2045%20C15.01%2044.505%2015.01%2044.505%2014%2044%20C13.5859375%2041.27734375%2013.5859375%2041.27734375%2013.375%2037.9375%20C13.30023437%2036.83277344%2013.22546875%2035.72804688%2013.1484375%2034.58984375%20C13.09945312%2033.73519531%2013.05046875%2032.88054687%2013%2032%20C14.134375%2031.54625%2015.26875%2031.0925%2016.4375%2030.625%20C20.04721692%2029.42904194%2020.04721692%2029.42904194%2021%2027%20C20.34%2027%2019.68%2027%2019%2027%20C18.608125%2025.9275%2018.21625%2024.855%2017.8125%2023.75%20C16.27259896%2020.08533167%2014.21849461%2018.3486312%2011%2016%20C11%2015.34%2011%2014.68%2011%2014%20C10.34%2014%209.68%2014%209%2014%20C7.4921875%2012.25%207.4921875%2012.25%205.875%2010%20C5.33617187%209.2575%204.79734375%208.515%204.2421875%207.75%20C3.83226562%207.1725%203.42234375%206.595%203%206%20C-3.93710167%209.15322803%20-9.63269943%2014.06474733%20-12.375%2021.25%20C-12.63023437%2022.05953125%20-12.88546875%2022.8690625%20-13.1484375%2023.703125%20C-14.07536523%2026.20327869%20-15.31553255%2027.94852568%20-17%2030%20C-15.02%2030.33%20-13.04%2030.66%20-11%2031%20C-9.51119807%2035.4664058%20-9.31090749%2039.30056546%20-11.09765625%2043.70703125%20C-13%2046%20-13%2046%20-16.13671875%2046.48828125%20C-19.42447917%2046.32552083%20-22.71223958%2046.16276042%20-26%2046%20C-26%2052.27%20-26%2058.54%20-26%2065%20C-24.1025%2064.95875%20-22.205%2064.9175%20-20.25%2064.875%20C-16.10895658%2064.78497732%20-13.61590012%2065.02831107%20-10%2067%20C-9.98786972%2067.91628929%20-9.98786972%2067.91628929%20-9.97549438%2068.85108948%20C-9.88922875%2075.22686062%20-9.78971604%2081.60232871%20-9.68261719%2087.9777832%20C-9.644408%2090.35500995%20-9.60954125%2092.73229292%20-9.578125%2095.10961914%20C-9.53229961%2098.53291881%20-9.47433332%20101.95583411%20-9.4140625%20105.37890625%20C-9.40251129%20106.43646622%20-9.39096008%20107.49402618%20-9.37905884%20108.58363342%20C-9.26966133%20114.09218328%20-8.82932532%20118.79123684%20-7%20124%20C-6.34%20124%20-5.68%20124%20-5%20124%20C-4.9071875%20124.928125%20-4.9071875%20124.928125%20-4.8125%20125.875%20C-4.19124685%20128.2501999%20-4.19124685%20128.2501999%20-1.625%20129.0625%20C-0.75875%20129.371875%200.1075%20129.68125%201%20130%20C2.6875%20131.5625%202.6875%20131.5625%204%20133%20C4.66%20133.33%205.32%20133.66%206%20134%20C6.625%20136.0625%206.625%20136.0625%207%20138%20C0.64042919%20136.72808584%20-3.00409013%20132.83266023%20-7%20128%20C-12.40978943%20119.7580267%20-13.30059906%20110.99356957%20-13.1953125%20101.375%20C-13.1924826%20100.38749756%20-13.18965271%2099.39999512%20-13.18673706%2098.38256836%20C-13.1756182%2095.25491785%20-13.15052916%2092.12756272%20-13.125%2089%20C-13.11495948%2086.86849374%20-13.10583551%2084.73698296%20-13.09765625%2082.60546875%20C-13.07570607%2077.4035335%20-13.04123391%2072.20181669%20-13%2067%20C-17.95%2067%20-22.9%2067%20-28%2067%20C-28%2059.74%20-28%2052.48%20-28%2045%20C-25.11584117%2043.55792059%20-22.58278472%2043.90605113%20-19.375%2043.9375%20C-18.18648437%2043.94652344%20-16.99796875%2043.95554687%20-15.7734375%2043.96484375%20C-14.85820313%2043.97644531%20-13.94296875%2043.98804688%20-13%2044%20C-13%2040.37%20-13%2036.74%20-13%2033%20C-16.63%2033%20-20.26%2033%20-24%2033%20C-22.47026072%2029.1756518%20-21.7364866%2027.36138218%20-19.27734375%2024.43359375%20C-18.74262451%2023.78841797%20-18.20790527%2023.14324219%20-17.65698242%2022.47851562%20C-16.80583862%2021.46821289%20-16.80583862%2021.46821289%20-15.9375%2020.4375%20C-10.41141017%2013.76832013%20-5.12012996%206.98560367%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C0.68078561%2010.15126993%20-6.26162995%2018.50517827%20-12.625%2025.8125%20C-13.10155029%2026.35165039%20-13.57810059%2026.89080078%20-14.0690918%2027.44628906%20C-17.57519453%2031.41656971%20-20.32199043%2035.44738374%20-23%2040%20C-23.33%2040%20-23.66%2040%20-24%2040%20C-24%2027.13%20-24%2014.26%20-24%201%20C-20.225625%200.835%20-16.45125%200.67%20-12.5625%200.5%20C-11.37084229%200.44779297%20-10.17918457%200.39558594%20-8.95141602%200.34179688%20C-7.55427368%200.28088867%20-7.55427368%200.28088867%20-6.12890625%200.21875%20C-5.17056885%200.17685547%20-4.21223145%200.13496094%20-3.22485352%200.09179688%20C-1%200%20-1%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(369,467)'/%3e%3cpath%20d='M0%200%20C2.00720923%200.28674418%204.0085944%200.61866701%206%201%20C6.495%202.485%206.495%202.485%207%204%20C7.66%204%208.32%204%209%204%20C9.495%205.98%209.495%205.98%2010%208%20C10.66%208%2011.32%208%2012%208%20C12.474375%208.639375%2012.94875%209.27875%2013.4375%209.9375%20C14.9091365%2012.28372963%2014.9091365%2012.28372963%2018%2013%20C18.495%2015.97%2018.495%2015.97%2019%2019%20C19.66%2019%2020.32%2019%2021%2019%20C22.0625%2020.8125%2022.0625%2020.8125%2023%2023%20C22.505%2024.485%2022.505%2024.485%2022%2026%20C21.3709375%2025.17757813%2020.741875%2024.35515625%2020.09375%2023.5078125%20C17.8531051%2020.58200082%2015.60149285%2017.6647905%2013.34716797%2014.74951172%20C12.10990021%2013.14272289%2010.88443769%2011.52686179%209.66015625%209.91015625%20C8.96792969%209.01167969%208.27570312%208.11320312%207.5625%207.1875%20C6.63630859%205.97126953%206.63630859%205.97126953%205.69140625%204.73046875%20C5.13324219%204.15941406%204.57507813%203.58835937%204%203%20C3.01%203%202.02%203%201%203%20C-1.1667738%205.33134682%20-1.1667738%205.33134682%20-3.375%208.4375%20C-4.25611385%209.62008724%20-5.13764692%2010.80236221%20-6.01953125%2011.984375%20C-6.49342285%2012.62568359%20-6.96731445%2013.26699219%20-7.45556641%2013.92773438%20C-9.12007314%2016.16110984%20-10.81214938%2018.37132519%20-12.51171875%2020.578125%20C-13.10098145%2021.34326416%20-13.69024414%2022.10840332%20-14.29736328%2022.89672852%20C-15.46363033%2024.41029473%20-16.62997013%2025.92380488%20-17.79638672%2027.43725586%20C-18.32893066%2028.13214111%20-18.86147461%2028.82702637%20-19.41015625%2029.54296875%20C-19.88590088%2030.16196045%20-20.36164551%2030.78095215%20-20.85180664%2031.41870117%20C-22.07331217%2033.0102519%20-22.07331217%2033.0102519%20-23%2035%20C-19.37%2035%20-15.74%2035%20-12%2035%20C-12%2038.63%20-12%2042.26%20-12%2046%20C-16.95%2046.33%20-21.9%2046.66%20-27%2047%20C-27%2054.26%20-27%2061.52%20-27%2069%20C-22.05%2069%20-17.1%2069%20-12%2069%20C-11.98541748%2070.31081543%20-11.97083496%2071.62163086%20-11.95581055%2072.97216797%20C-11.89747545%2077.87396394%20-11.82024648%2082.77531735%20-11.73754883%2087.67675781%20C-11.70446426%2089.7909421%20-11.67638204%2091.90521123%20-11.65356445%2094.01953125%20C-11.61971392%2097.07328159%20-11.56738455%20100.12626594%20-11.51171875%20103.1796875%20C-11.50532883%20104.11239471%20-11.4989389%20105.04510193%20-11.49235535%20106.006073%20C-11.26437364%20116.37399184%20-8.63724873%20126.05256773%20-1.3671875%20133.72265625%20C6.92807918%20141.29255208%2016.09690889%20142.40300166%2027.015625%20142.2109375%20C37.64372477%20141.64827339%2045.9753421%20138.49041118%2055%20133%20C55.66%20132.67%2056.32%20132.34%2057%20132%20C56.17631135%20135.60363786%2054.73164913%20137.5598772%2051.8125%20139.6875%20C43.36448472%20144.51927852%2032.57412865%20144.15231016%2023.0625%20144.25%20C22.03491577%20144.2641394%2022.03491577%20144.2641394%2020.98657227%20144.27856445%20C16.010662%20144.24659412%2011.7517971%20143.33793617%207%20142%20C6.67%20142.66%206.34%20143.32%206%20144%20C6%20143.34%206%20142.68%206%20142%20C5.2575%20141.731875%204.515%20141.46375%203.75%20141.1875%20C1.10938051%20140.04723249%20-0.85552844%20138.90619694%20-3%20137%20C-3%20136.34%20-3%20135.68%20-3%20135%20C-4.32%20134.67%20-5.64%20134.34%20-7%20134%20C-7.495%20132.02%20-7.495%20132.02%20-8%20130%20C-8.66%20130%20-9.32%20130%20-10%20130%20C-13.3917714%20117.17092103%20-13.35377076%20104.75435973%20-13.1875%2091.5625%20C-13.17241597%2089.4629003%20-13.15873419%2087.36329003%20-13.14648438%2085.26367188%20C-13.1137965%2080.17551518%20-13.0622224%2075.0878777%20-13%2070%20C-17.95%2070%20-22.9%2070%20-28%2070%20C-29.81226714%2066.37546571%20-29.18470181%2062.11521368%20-29.1875%2058.125%20C-29.19974609%2057.21363281%20-29.21199219%2056.30226563%20-29.22460938%2055.36328125%20C-29.22654297%2054.48285156%20-29.22847656%2053.60242188%20-29.23046875%2052.6953125%20C-29.23457764%2051.89109863%20-29.23868652%2051.08688477%20-29.24291992%2050.25830078%20C-28.96966064%2047.71795063%20-28.41516433%2046.12497675%20-27%2044%20C-24.1796875%2043.390625%20-24.1796875%2043.390625%20-20.875%2043.25%20C-19.77929688%2043.19328125%20-18.68359375%2043.1365625%20-17.5546875%2043.078125%20C-16.71164062%2043.05234375%20-15.86859375%2043.0265625%20-15%2043%20C-14.505%2040.03%20-14.505%2040.03%20-14%2037%20C-14.721875%2037.20625%20-15.44375%2037.4125%20-16.1875%2037.625%20C-19.54297056%2038.07239607%20-21.11604375%2037.76241771%20-24%2036%20C-24.875%2033.7421875%20-24.875%2033.7421875%20-25%2031%20C-23.453125%2028.359375%20-23.453125%2028.359375%20-21.25%2025.75%20C-20.53328125%2024.87859375%20-19.8165625%2024.0071875%20-19.078125%2023.109375%20C-17%2021%20-17%2021%20-14%2020%20C-14%2019.34%20-14%2018.68%20-14%2018%20C-13.34%2018%20-12.68%2018%20-12%2018%20C-12%2017.01%20-12%2016.02%20-12%2015%20C-11.34%2015%20-10.68%2015%20-10%2015%20C-9.938125%2014.46375%20-9.87625%2013.9275%20-9.8125%2013.375%20C-8.59964736%209.82973843%20-6.55389074%207.7407608%20-4%205%20C-3.34%205%20-2.68%205%20-2%205%20C-1.855625%204.360625%20-1.71125%203.72125%20-1.5625%203.0625%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(659,421)'/%3e%3cpath%20d='M0%200%20C7.92%200%2015.84%200%2024%200%20C24%207.26%2024%2014.52%2024%2022%20C16.08%2022%208.16%2022%200%2022%20C0.05110565%2028.01513491%200.11411805%2034.02770699%200.20751953%2040.04199219%20C0.23569066%2042.08650395%200.25692435%2044.13112384%200.27099609%2046.17578125%20C0.29247887%2049.12035322%200.3391569%2052.06363041%200.390625%2055.0078125%20C0.39185364%2055.9174173%200.39308228%2056.82702209%200.39434814%2057.76419067%20C0.52424586%2063.4323883%201.24752639%2066.66904733%205%2071%20C7.15616421%2071.84067552%207.15616421%2071.84067552%209.4375%2071.875%20C13.59953049%2072.52786753%2013.59953049%2072.52786753%2015.484375%2074.75%20C16.28446347%2076.16314328%2017.06211601%2077.58923329%2017.81640625%2079.02734375%20C20.15058208%2082.91763679%2023.83300287%2084.61100096%2028%2086%20C29.72795352%2086.06802967%2031.45835365%2086.08495645%2033.1875%2086.0625%20C34.08855469%2086.05347656%2034.98960937%2086.04445313%2035.91796875%2086.03515625%20C36.60503906%2086.02355469%2037.29210937%2086.01195312%2038%2086%20C28.4198669%2094.94145756%2015.04998512%2096.35397366%202.5546875%2096.203125%20C-1.58388881%2095.96663493%20-5.07173198%2095.28269976%20-9%2094%20C-6.13129876%2093.17066175%20-3.67877335%2092.90857069%20-0.69921875%2093.0078125%20C0.51991211%2093.03294922%200.51991211%2093.03294922%201.76367188%2093.05859375%20C3.45140273%2093.10256528%205.13894568%2093.15453885%206.82617188%2093.21484375%20C12.36551383%2093.31102806%2016.06333211%2092.5449489%2021%2090%20C21%2089.01%2021%2088.02%2021%2087%20C19.5459375%2086.0409375%2019.5459375%2086.0409375%2018.0625%2085.0625%20C15%2083%2015%2083%2014.125%2080.75%20C14.08375%2080.1725%2014.0425%2079.595%2014%2079%20C13.34%2079%2012.68%2079%2012%2079%20C12%2078.34%2012%2077.68%2012%2077%20C11.278125%2076.896875%2010.55625%2076.79375%209.8125%2076.6875%20C5.46614904%2075.62505865%202.79905402%2074.21337832%200.3125%2070.4375%20C-0.120625%2069.633125%20-0.55375%2068.82875%20-1%2068%20C-1.66%2067.34%20-2.32%2066.68%20-3%2066%20C-4.56682324%2055.65896659%20-4.02187183%2044.9749078%20-3.6875%2034.5625%20C-3.65293701%2033.35924072%20-3.61837402%2032.15598145%20-3.58276367%2030.91625977%20C-3.53869385%2029.79018311%20-3.49462402%2028.66410645%20-3.44921875%2027.50390625%20C-3.41143311%2026.49142822%20-3.37364746%2025.4789502%20-3.3347168%2024.43579102%20C-3%2022%20-3%2022%20-1%2020%20C1.15478516%2019.68115234%201.15478516%2019.68115234%203.7890625%2019.5859375%20C5.20058594%2019.52792969%205.20058594%2019.52792969%206.640625%2019.46875%20C7.62546875%2019.4378125%208.6103125%2019.406875%209.625%2019.375%20C11.11386719%2019.31699219%2011.11386719%2019.31699219%2012.6328125%2019.2578125%20C15.08835385%2019.1633686%2017.5438841%2019.07780125%2020%2019%20C19.98839844%2018.18015625%2019.97679687%2017.3603125%2019.96484375%2016.515625%20C19.95582031%2015.43796875%2019.94679688%2014.3603125%2019.9375%2013.25%20C19.92589844%2012.18265625%2019.91429687%2011.1153125%2019.90234375%2010.015625%20C19.98489913%207.46631499%2020.25382442%205.42066409%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%239BE600'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C3%203%203%203%203.2578125%205.3046875%20C3.21398437%206.15289062%203.17015625%207.00109375%203.125%207.875%20C3.00502835%2011.46371724%203.2754511%2014.48076247%204%2018%20C3.60976365%2021.31700894%202.61164065%2022.93522445%200%2025%20C-2.36010742%2025.34057617%20-2.36010742%2025.34057617%20-5.10546875%2025.29296875%20C-6.08837891%2025.28330078%20-7.07128906%2025.27363281%20-8.08398438%2025.26367188%20C-9.10814453%2025.23853516%20-10.13230469%2025.21339844%20-11.1875%2025.1875%20C-12.22326172%2025.17396484%20-13.25902344%2025.16042969%20-14.32617188%2025.14648438%20C-16.88463699%2025.11111389%20-19.4420578%2025.06175544%20-22%2025%20C-21.93433838%2025.60046143%20-21.86867676%2026.20092285%20-21.80102539%2026.81958008%20C-20.93290834%2035.43139683%20-20.67409758%2044.04154841%20-20.4375%2052.6875%20C-20.39418922%2054.17904546%20-20.35057152%2055.67058205%20-20.30664062%2057.16210938%20C-20.20089527%2060.77464429%20-20.09928034%2064.38728094%20-20%2068%20C-19.05898438%2068.29648437%20-18.11796875%2068.59296875%20-17.1484375%2068.8984375%20C-14.2055568%2069.92808062%20-12.3554191%2071.00695307%20-10%2073%20C-14.03645882%2073.31658501%20-16.32333195%2073.4210379%20-19.8125%2071.25%20C-23.0830854%2067.88596931%20-24.25459399%2065.28097814%20-24.22705078%2060.59863281%20C-24.22689972%2059.7380426%20-24.22674866%2058.87745239%20-24.22659302%2057.99078369%20C-24.21627045%2057.07085632%20-24.20594788%2056.15092896%20-24.1953125%2055.203125%20C-24.1924826%2054.25435486%20-24.18965271%2053.30558472%20-24.18673706%2052.32806396%20C-24.17555448%2049.30191361%20-24.1504533%2046.2760607%20-24.125%2043.25%20C-24.11496772%2041.19661886%20-24.1058423%2039.14323308%20-24.09765625%2037.08984375%20C-24.07732418%2032.05968942%20-24.03817166%2027.03017714%20-24%2022%20C-16.08%2022%20-8.16%2022%200%2022%20C0%2014.74%200%207.48%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(700,468)'/%3e%3cpath%20d='M0%200%20C4.62%200%209.24%200%2014%200%20C14.01458252%201.31081543%2014.02916504%202.62163086%2014.04418945%203.97216797%20C14.10252455%208.87396394%2014.17975352%2013.77531735%2014.26245117%2018.67675781%20C14.29553574%2020.7909421%2014.32361796%2022.90521123%2014.34643555%2025.01953125%20C14.38028608%2028.07328159%2014.43261545%2031.12626594%2014.48828125%2034.1796875%20C14.49467117%2035.11239471%2014.5010611%2036.04510193%2014.50764465%2037.006073%20C14.73562636%2047.37399184%2017.36275127%2057.05256773%2024.6328125%2064.72265625%20C32.92807918%2072.29255208%2042.09690889%2073.40300166%2053.015625%2073.2109375%20C63.64372477%2072.64827339%2071.9753421%2069.49041118%2081%2064%20C81.66%2063.67%2082.32%2063.34%2083%2063%20C82.17631135%2066.60363786%2080.73164913%2068.5598772%2077.8125%2070.6875%20C69.36448472%2075.51927852%2058.57412865%2075.15231016%2049.0625%2075.25%20C48.03491577%2075.2641394%2048.03491577%2075.2641394%2046.98657227%2075.27856445%20C42.010662%2075.24659412%2037.7517971%2074.33793617%2033%2073%20C32.67%2073.66%2032.34%2074.32%2032%2075%20C32%2074.34%2032%2073.68%2032%2073%20C31.2575%2072.731875%2030.515%2072.46375%2029.75%2072.1875%20C27.10938051%2071.04723249%2025.14447156%2069.90619694%2023%2068%20C23%2067.34%2023%2066.68%2023%2066%20C21.68%2065.67%2020.36%2065.34%2019%2065%20C18.67%2063.68%2018.34%2062.36%2018%2061%20C17.34%2061%2016.68%2061%2016%2061%20C12.6082286%2048.17092103%2012.64622924%2035.75435973%2012.8125%2022.5625%20C12.82758403%2020.4629003%2012.84126581%2018.36329003%2012.85351562%2016.26367188%20C12.8862035%2011.17551518%2012.9377776%206.0878777%2013%201%20C8.71%201%204.42%201%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(633,490)'/%3e%3cpath%20d='M0%200%20C0.81434143%202.85160391%201.11881242%205.36626131%201.09765625%208.328125%20C1.09443359%209.12734375%201.09121094%209.9265625%201.08789062%2010.75%20C1.07951172%2011.575%201.07113281%2012.4%201.0625%2013.25%20C1.05798828%2014.09046875%201.05347656%2014.9309375%201.04882812%2015.796875%20C1.03707961%2017.86461401%201.01914522%2019.93231624%201%2022%20C1.99%2022%202.98%2022%204%2022%20C4%2028.27%204%2034.54%204%2041%20C-5.24%2041%20-14.48%2041%20-24%2041%20C-24%2040.67%20-24%2040.34%20-24%2040%20C-22.35%2040%20-20.7%2040%20-19%2040%20C-19%2028.12%20-19%2016.24%20-19%204%20C-18.34%203.67%20-17.68%203.34%20-17%203%20C-17%2015.21%20-17%2027.42%20-17%2040%20C-11.72%2040%20-6.44%2040%20-1%2040%20C-1.00523682%2038.82381104%20-1.01047363%2037.64762207%20-1.01586914%2036.43579102%20C-1.03391663%2032.08797969%20-1.04543108%2027.7401717%20-1.05493164%2023.39233398%20C-1.05997244%2021.5075627%20-1.06680498%2019.62279535%20-1.07543945%2017.73803711%20C-1.08751617%2015.03498364%20-1.09323068%2012.33198169%20-1.09765625%209.62890625%20C-1.10281754%208.78099014%20-1.10797882%207.93307404%20-1.11329651%207.0594635%20C-1.11349195%205.03928932%20-1.06206211%203.01922066%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(369,521)'/%3e%3cpath%20d='M0%200%20C7.92%200%2015.84%200%2024%200%20C24%207.26%2024%2014.52%2024%2022%20C11.625%2022.495%2011.625%2022.495%20-1%2023%20C-1.33%2036.2%20-1.66%2049.4%20-2%2063%20C-2.33%2063%20-2.66%2063%20-3%2063%20C-4.13448821%2053.55756734%20-4.00188302%2044.23836711%20-3.6875%2034.75%20C-3.65277588%2033.53530029%20-3.61805176%2032.32060059%20-3.58227539%2031.0690918%20C-3.5383667%2029.92738525%20-3.49445801%2028.78567871%20-3.44921875%2027.609375%20C-3.41143311%2026.57780273%20-3.37364746%2025.54623047%20-3.3347168%2024.48339844%20C-3%2022%20-3%2022%20-1%2020%20C1.15478516%2019.68115234%201.15478516%2019.68115234%203.7890625%2019.5859375%20C5.20058594%2019.52792969%205.20058594%2019.52792969%206.640625%2019.46875%20C7.62546875%2019.4378125%208.6103125%2019.406875%209.625%2019.375%20C11.11386719%2019.31699219%2011.11386719%2019.31699219%2012.6328125%2019.2578125%20C15.08835385%2019.1633686%2017.5438841%2019.07780125%2020%2019%20C19.98839844%2018.18015625%2019.97679687%2017.3603125%2019.96484375%2016.515625%20C19.95582031%2015.43796875%2019.94679688%2014.3603125%2019.9375%2013.25%20C19.92589844%2012.18265625%2019.91429687%2011.1153125%2019.90234375%2010.015625%20C19.98489913%207.46631499%2020.25382442%205.42066409%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C6.96345149%205.39532832%206.9764649%2010.29708307%206.5625%2015.75%20C6.15134315%2021.36947121%206.15134315%2021.36947121%206%2027%20C4.94140625%2029.04296875%204.94140625%2029.04296875%203.5625%2031.1875%20C2.88380859%2032.26064453%202.88380859%2032.26064453%202.19140625%2033.35546875%20C1.79824219%2033.89816406%201.40507812%2034.44085938%201%2035%20C0.67%2035%200.34%2035%200%2035%20C0%2023.45%200%2011.9%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(345,472)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%2025.74%201%2051.48%201%2078%20C0.01%2077.67%20-0.98%2077.34%20-2%2077%20C-1.83734146%2076.29841263%20-1.67468292%2075.59682526%20-1.50709534%2074.87397766%20C-0.97453003%2071.8556482%20-0.87991379%2069.08025882%20-0.88647461%2066.01635742%20C-0.88655014%2064.83551071%20-0.88662567%2063.654664%20-0.88670349%2062.43803406%20C-0.89186478%2061.17328751%20-0.89702606%2059.90854095%20-0.90234375%2058.60546875%20C-0.9037587%2057.30297684%20-0.90517365%2056.00048492%20-0.90663147%2054.65852356%20C-0.91043645%2051.20783546%20-0.92024936%2047.75718992%20-0.93133545%2044.30651855%20C-0.94159311%2040.78052343%20-0.9461384%2037.25452139%20-0.95117188%2033.72851562%20C-0.96187356%2026.81899301%20-0.97892557%2019.90949855%20-1%2013%20C-1.99%2012.67%20-2.98%2012.34%20-4%2012%20C-3.649375%2011.236875%20-3.29875%2010.47375%20-2.9375%209.6875%20C-1.67639116%206.95240621%20-1.67639116%206.95240621%20-3%204%20C-1.625%201.8125%20-1.625%201.8125%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(929,483)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C3.78043103%208.12172411%203%2015.65909482%203%2023%20C-16.47%2023%20-35.94%2023%20-56%2023%20C-56%2022.67%20-56%2022.34%20-56%2022%20C-28.775%2021.505%20-28.775%2021.505%20-1%2021%20C-1.66%2018.03%20-2.32%2015.06%20-3%2012%20C-2.70676058%207.60140869%20-1.82135506%204.00698114%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(811,500)'/%3e%3cpath%20d='M0%200%20C10.89%200%2021.78%200%2033%200%20C32%202%2032%202%2028.9375%203.125%20C27.968125%203.41375%2026.99875%203.7025%2026%204%20C26%204.33%2026%204.66%2026%205%20C22.9166866%205.02911321%2019.83340875%205.04683682%2016.75%205.0625%20C15.87730469%205.07087891%2015.00460938%205.07925781%2014.10546875%205.08789062%20C13.26113281%205.09111328%2012.41679687%205.09433594%2011.546875%205.09765625%20C10.38430176%205.10551147%2010.38430176%205.10551147%209.19824219%205.11352539%20C6.99642569%204.99981541%205.11528675%204.60281778%203%204%20C2.2575%203.814375%201.515%203.62875%200.75%203.4375%20C0.1725%203.293125%20-0.405%203.14875%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(127,456)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.00808685%200.61085953%201.01617371%201.22171906%201.02450562%201.85108948%20C1.11077125%208.22686062%201.21028396%2014.60232871%201.31738281%2020.9777832%20C1.355592%2023.35500995%201.39045875%2025.73229292%201.421875%2028.10961914%20C1.46770039%2031.53291881%201.52566668%2034.95583411%201.5859375%2038.37890625%20C1.60326431%2039.9652462%201.60326431%2039.9652462%201.62094116%2041.58363342%20C1.73033867%2047.09218328%202.17067468%2051.79123684%204%2057%20C4.66%2057%205.32%2057%206%2057%20C6.061875%2057.61875%206.12375%2058.2375%206.1875%2058.875%20C6.80875315%2061.2501999%206.80875315%2061.2501999%209.375%2062.0625%20C10.24125%2062.371875%2011.1075%2062.68125%2012%2063%20C13.6875%2064.5625%2013.6875%2064.5625%2015%2066%20C15.66%2066.33%2016.32%2066.66%2017%2067%20C17.625%2069.0625%2017.625%2069.0625%2018%2071%20C11.64674292%2069.72934858%207.98595005%2065.83583279%204%2061%20C-0.20320088%2054.43626224%20-1.13694835%2048.50999461%20-1.09375%2040.75%20C-1.09016479%2040.05398682%20-1.08657959%2039.35797363%20-1.08288574%2038.64086914%20C-1.02339219%2030.75687156%20-0.77025329%2022.87906229%20-0.5%2015%20C-0.4515835%2013.53125787%20-0.40340556%2012.06250786%20-0.35546875%2010.59375%20C-0.23971031%207.06240545%20-0.12078988%203.53117647%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(649,490)'/%3e%3cpath%20d='M0%200%20C6.93%200%2013.86%200%2021%200%20C21%200.66%2021%201.32%2021%202%20C23.475%202.99%2023.475%202.99%2026%204%20C26%204.33%2026%204.66%2026%205%20C14.78%205%203.56%205%20-8%205%20C-4%203%20-4%203%20-1%202%20C-0.67%201.34%20-0.34%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(132,539)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.0093457%201.27117676%201.01869141%202.54235352%201.02832031%203.85205078%20C1.0682865%208.58238362%201.13406414%2013.31207062%201.20751953%2018.04199219%20C1.23569066%2020.08650395%201.25692435%2022.13112384%201.27099609%2024.17578125%20C1.29247887%2027.12035322%201.3391569%2030.06363041%201.390625%2033.0078125%20C1.39246796%2034.3722197%201.39246796%2034.3722197%201.39434814%2035.76419067%20C1.52438447%2041.4384366%202.24925859%2044.66233702%206%2049%20C8.30476633%2050.12133721%208.30476633%2050.12133721%2010.75%2050.375%20C11.54921875%2050.50648438%2012.3484375%2050.63796875%2013.171875%2050.7734375%20C13.77515625%2050.84820313%2014.3784375%2050.92296875%2015%2051%20C15%2051.33%2015%2051.66%2015%2052%20C13.22992286%2052.08114106%2011.45877902%2052.13925505%209.6875%2052.1875%20C8.70136719%2052.22230469%207.71523438%2052.25710938%206.69921875%2052.29296875%20C4%2052%204%2052%202.20703125%2050.67578125%20C1%2049%201%2049%200%2046%20C-0.66%2045.34%20-1.32%2044.68%20-2%2044%20C-2.20927429%2042.1337738%20-2.20927429%2042.1337738%20-2.15112305%2039.84155273%20C-2.13417892%2038.98403915%20-2.1172348%2038.12652557%20-2.09977722%2037.24302673%20C-2.07071793%2036.31591385%20-2.04165863%2035.38880096%20-2.01171875%2034.43359375%20C-1.98906448%2033.48436539%20-1.96641022%2032.53513702%20-1.94306946%2031.55714417%20C-1.8930653%2029.54879358%20-1.83809315%2027.54056154%20-1.77856445%2025.5324707%20C-1.68777846%2022.4469639%20-1.61311485%2019.36138491%20-1.54101562%2016.27539062%20C-1.49053325%2014.32810014%20-1.43913222%2012.38083321%20-1.38671875%2010.43359375%20C-1.36373215%209.50445663%20-1.34074554%208.57531952%20-1.31706238%207.61802673%20C-1.29066177%206.76366531%20-1.26426117%205.90930389%20-1.23706055%205.02905273%20C-1.21548386%204.27341537%20-1.19390717%203.51777802%20-1.17167664%202.73924255%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(675,490)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%2014.85%201%2029.7%201%2045%20C-1%2043%20-1%2043%20-1.125%2040.72265625%20C-1.04178877%2038.95181718%20-0.95845579%2037.18098382%20-0.875%2035.41015625%20C-0.80800597%2032.73455911%20-0.80800597%2032.73455911%20-3%2030%20C-2.505%2028.515%20-2.505%2028.515%20-2%2027%20C-2.31050297%2025.32892945%20-2.64717051%2023.66264856%20-3%2022%20C-3.09035285%2020.00160753%20-3.13010313%2018.00042747%20-3.125%2016%20C-3.12757813%2014.989375%20-3.13015625%2013.97875%20-3.1328125%2012.9375%20C-3.00826727%2010.18285256%20-2.62110865%207.68161197%20-2%205%20C-1.34%205%20-0.68%205%200%205%20C0%203.35%200%201.7%200%200%20Z%20'%20fill='%23FFFFFF'%20transform='translate(901,431)'/%3e%3cpath%20d='M0%200%20C2.57069617%203.85604425%202.35065056%207.12746343%202.4140625%2011.60546875%20C2.43342865%2012.44467361%202.4527948%2013.28387848%202.4727478%2014.14851379%20C2.53251213%2016.82807258%202.57891612%2019.5076744%202.625%2022.1875%20C2.6631827%2024.00457599%202.70223461%2025.82163394%202.7421875%2027.63867188%20C2.83821103%2032.09230132%202.92225359%2036.54601551%203%2041%20C3.94101562%2041.29648437%204.88203125%2041.59296875%205.8515625%2041.8984375%20C8.7944432%2042.92808062%2010.6445809%2044.00695307%2013%2046%20C8.86001651%2046.32470459%206.66000999%2046.4304413%203.125%2044.125%20C0.12481839%2041.12481839%200.01401021%2040.48116775%20-0.11352539%2036.10107422%20C-0.11336671%2034.418937%20-0.10769737%2032.73679475%20-0.09765625%2031.0546875%20C-0.0962413%2030.1696756%20-0.09482635%2029.2846637%20-0.09336853%2028.37283325%20C-0.0877614%2025.54018809%20-0.07520771%2022.70762136%20-0.0625%2019.875%20C-0.05748592%2017.95703239%20-0.05292285%2016.03906354%20-0.04882812%2014.12109375%20C-0.03778966%209.41403218%20-0.02052025%204.7070294%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(677,495)'/%3e%3cpath%20d='M0%200%20C0.82200425%206.24723226%20-2.07448606%2010.71317837%20-5%2016%20C-6.95100616%2014.37586398%20-7.92782782%2013.56206818%20-8.2578125%2010.9921875%20C-8.21398437%2010.29351562%20-8.17015625%209.59484375%20-8.125%208.875%20C-8.08375%207.59625%20-8.0425%206.3175%20-8%205%20C-8.98267859%203.79438816%20-8.98267859%203.79438816%20-10.84765625%203.90234375%20C-12.8984375%203.93489583%20-14.94921875%203.96744792%20-17%204%20C-17%203.01%20-17%202.02%20-17%201%20C-14.3541898%200.832959%20-11.70835369%200.66634934%20-9.0625%200.5%20C-8.30775391%200.45230469%20-7.55300781%200.40460938%20-6.77539062%200.35546875%20C-1.11328125%200%20-1.11328125%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(369,467)'/%3e%3cpath%20d='M0%200%20C4.29%200%208.58%200%2013%200%20C13.02505615%201.34747314%2013.0501123%202.69494629%2013.07592773%204.08325195%20C13.17000223%209.07602678%2013.27022294%2014.06866249%2013.37231445%2019.0612793%20C13.41566313%2021.2233556%2013.45733825%2023.38546613%2013.49731445%2025.54760742%20C13.55501844%2028.65293702%2013.61871272%2031.75809436%2013.68359375%2034.86328125%20C13.70030624%2035.83211746%2013.71701874%2036.80095367%2013.73423767%2037.79914856%20C13.75418289%2038.6998558%2013.77412811%2039.60056305%2013.79467773%2040.52856445%20C13.81022202%2041.32132278%2013.8257663%2042.11408112%2013.84178162%2042.93086243%20C13.93081226%2045.19739774%2013.93081226%2045.19739774%2015%2048%20C15.12781786%2050.67394964%2015.04391871%2053.32095857%2015%2056%20C14.67%2056%2014.34%2056%2014%2056%20C13.29066112%2053.54623548%2012.60781467%2051.08945724%2011.9375%2048.625%20C11.73833984%2047.94566406%2011.53917969%2047.26632812%2011.33398438%2046.56640625%20C10.04560625%2041.72933752%2010.02964032%2037.78697173%2010.67358398%2032.84228516%20C11.33901124%2027.04804123%2011.37950304%2021.20090331%2011.5625%2015.375%20C11.60568359%2014.08464844%2011.64886719%2012.79429687%2011.69335938%2011.46484375%20C11.79852148%208.30998067%2011.90066604%205.15505105%2012%202%20C11.25363281%202.17402344%2010.50726562%202.34804688%209.73828125%202.52734375%20C6.30488867%203.11998355%203.41085419%202.60191545%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(633,491)'/%3e%3cpath%20d='M0%200%20C7.26%200%2014.52%200%2022%200%20C21.34%200.66%2020.68%201.32%2020%202%20C20.33%202.66%2020.66%203.32%2021%204%20C14.73%204%208.46%204%202%204%20C2%206.64%202%209.28%202%2012%20C1.34%2012.66%200.68%2013.32%200%2014%20C0.01160156%2013.30132812%200.02320313%2012.60265625%200.03515625%2011.8828125%20C0.04417969%2010.97273438%200.05320313%2010.06265625%200.0625%209.125%20C0.07410156%208.22007812%200.08570313%207.31515625%200.09765625%206.3828125%20C0.16249257%203.9831415%200.16249257%203.9831415%20-1%202%20C-0.67%201.34%20-0.34%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(230,468)'/%3e%3cpath%20d='M0%200%20C3.26587942%200.14550948%206.38789358%200.49324673%209.5625%201.3125%20C9.2325%202.3025%208.9025%203.2925%208.5625%204.3125%20C9.2225%204.6425%209.8825%204.9725%2010.5625%205.3125%20C9.5625%206.3125%209.5625%206.3125%206.87866211%206.42602539%20C5.71085205%206.42078857%204.54304199%206.41555176%203.33984375%206.41015625%20C2.07978516%206.40693359%200.81972656%206.40371094%20-0.47851562%206.40039062%20C-1.81901109%206.39203403%20-3.15950588%206.38356907%20-4.5%206.375%20C-5.84439942%206.3699866%20-7.1888006%206.36542342%20-8.53320312%206.36132812%20C-11.83467941%206.34949488%20-15.13606803%206.33300971%20-18.4375%206.3125%20C-15.4375%204.3125%20-15.4375%204.3125%20-12%204.4375%20C-8.38721028%204.72990718%20-8.38721028%204.72990718%20-6.5625%202.3125%20C-4.04895307%20-0.05319123%20-3.34014743%200.01650814%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(584.4375,465.6875)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%200.66%204%201.32%204%202%20C4.73605469%201.855625%205.47210937%201.71125%206.23046875%201.5625%20C7.20628906%201.376875%208.18210937%201.19125%209.1875%201%20C10.15042969%200.814375%2011.11335937%200.62875%2012.10546875%200.4375%20C18.83937824%20-0.58031088%2018.83937824%20-0.58031088%2022%201%20C22.99%200.67%2023.98%200.34%2025%200%20C25.33%200.33%2025.66%200.66%2026%201%20C27.99964982%201.08758003%2030.0023611%201.10696576%2032.00390625%201.09765625%20C33.82631836%201.09282227%2033.82631836%201.09282227%2035.68554688%201.08789062%20C36.96494141%201.07951172%2038.24433594%201.07113281%2039.5625%201.0625%20C41.48739258%201.05573242%2041.48739258%201.05573242%2043.45117188%201.04882812%20C46.63416022%201.03699545%2049.81705762%201.02051068%2053%201%20C53.495%201.99%2053.495%201.99%2054%203%20C36.18%203%2018.36%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(731,509)'/%3e%3cpath%20d='M0%200%20C3.3%200%206.6%200%2010%200%20C10%200.33%2010%200.66%2010%201%20C7.69%201.33%205.38%201.66%203%202%20C3%204.64%203%207.28%203%2010%20C3.66%209.67%204.32%209.34%205%209%20C6.44848582%208.91657841%207.90070869%208.89267139%209.3515625%208.90234375%20C10.20234375%208.90556641%2011.053125%208.90878906%2011.9296875%208.91210938%20C12.81914063%208.92048828%2013.70859375%208.92886719%2014.625%208.9375%20C15.5221875%208.94201172%2016.419375%208.94652344%2017.34375%208.95117188%20C19.56256648%208.96297409%2021.78125018%208.97943845%2024%209%20C24%209.99%2024%2010.98%2024%2012%20C16.08%2012%208.16%2012%200%2012%20C0%208.04%200%204.08%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(676,456)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.02893932%203.62498334%201.04677792%207.24993713%201.0625%2010.875%20C1.07087891%2011.90753906%201.07925781%2012.94007813%201.08789062%2014.00390625%20C1.09111328%2014.99003906%201.09433594%2015.97617187%201.09765625%2016.9921875%20C1.10289307%2017.90339355%201.10812988%2018.81459961%201.11352539%2019.75341797%20C1%2022%201%2022%200%2024%20C-0.99%2023.67%20-1.98%2023.34%20-3%2023%20C-5.01862148%2017.75866703%20-4.98056566%2010.73616357%20-3.10546875%205.50390625%20C-2.15670432%203.62314001%20-1.08879621%201.80331872%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(831,508)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C5.67%200.99%205.34%201.98%205%203%20C5.99%203.33%206.98%203.66%208%204%20C7.34%204%206.68%204%206%204%20C6.66%205.65%207.32%207.3%208%209%20C9.65%208.67%2011.3%208.34%2013%208%20C13.33%209.32%2013.66%2010.64%2014%2012%20C16.31%2012%2018.62%2012%2021%2012%20C21%2011.34%2021%2010.68%2021%2010%20C21.66%2010%2022.32%2010%2023%2010%20C23.33%2010.99%2023.66%2011.98%2024%2013%20C18.94576102%2014.68474633%2014.71544468%2014.58019314%209.875%2012.375%20C5.29909504%209.86935884%201.9168134%206.67991608%200.1875%201.625%20C0.125625%201.08875%200.06375%200.5525%200%200%20Z%20'%20fill='%236F9300'%20transform='translate(690,541)'/%3e%3cpath%20d='M0%200%20C6.93%200.33%2013.86%200.66%2021%201%20C20.34%201.66%2019.68%202.32%2019%203%20C19.33%203.66%2019.66%204.32%2020%205%20C17.10410348%205.02706445%2014.20846205%205.04687029%2011.3125%205.0625%20C10.08756836%205.07506836%2010.08756836%205.07506836%208.83789062%205.08789062%20C4.75500916%205.10442051%200.98348293%205.03035098%20-3%204%20C-2.34%203.67%20-1.68%203.34%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(241,593)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%208.25%201%2016.5%201%2025%20C0.34%2025%20-0.32%2025%20-1%2025%20C-3.52775351%2021.20836973%20-3.22443035%2018.19125969%20-3.125%2013.8125%20C-3.11597656%2013.06291016%20-3.10695312%2012.31332031%20-3.09765625%2011.54101562%20C-3.07412578%209.69387346%20-3.03825561%207.84689588%20-3%206%20C-2.67%206%20-2.34%206%20-2%206%20C-1.34%204.02%20-0.68%202.04%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(191,487)'/%3e%3cpath%20d='M0%200%20C0.66%200.66%201.32%201.32%202%202%20C1.525625%202.845625%201.05125%203.69125%200.5625%204.5625%20C-1.69167803%209.67126796%20-1.51097377%2015.18235336%20-1.69140625%2020.671875%20C-2%2024%20-2%2024%20-4%2027%20C-4.39387788%2029.32387947%20-4.73486085%2031.65793749%20-5%2034%20C-5.33%2034%20-5.66%2034%20-6%2034%20C-6.52846015%2021.74266038%20-5.86678537%2011.12575063%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(832,489)'/%3e%3cpath%20d='M0%200%20C0.98742187%200.16242187%201.97484375%200.32484375%202.9921875%200.4921875%20C7.03537925%201.06688527%2011.04640663%201.15126811%2015.125%201.125%20C15.858396%201.12306641%2016.59179199%201.12113281%2017.34741211%201.11914062%20C23.93030125%201.06771738%2030.4468302%200.63822175%2037%200%20C33.42278921%202.9386979%2031.63341748%203.18911908%2027%203%20C22.9008693%203.63063549%2018.97489026%204.83091463%2015%206%20C15%205.34%2015%204.68%2015%204%20C13.02%204.66%2011.04%205.32%209%206%20C8.67%205.34%208.34%204.68%208%204%20C6.8553125%204.12375%206.8553125%204.12375%205.6875%204.25%20C3%204%203%204%201.1875%202%20C0.5996875%201.01%200.5996875%201.01%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(667,563)'/%3e%3cpath%20d='M0%200%20C-1.70577342%200.65256456%20-3.41476089%201.29673041%20-5.125%201.9375%20C-6.07632813%202.29714844%20-7.02765625%202.65679688%20-8.0078125%203.02734375%20C-18.08362171%206.30263943%20-29.94180625%206.28430816%20-40%203%20C-37.09031691%202.16087482%20-34.5469594%201.89148572%20-31.5234375%201.9375%20C-30.27046875%201.94910156%20-30.27046875%201.94910156%20-28.9921875%201.9609375%20C-28.12851562%201.97382812%20-27.26484375%201.98671875%20-26.375%202%20C-24.65370809%202.0254629%20-22.93234349%202.04651171%20-21.2109375%202.0625%20C-20.45087402%202.07410156%20-19.69081055%202.08570313%20-18.90771484%202.09765625%20C-16.91256704%202.12332635%20-16.91256704%202.12332635%20-15%201%20C-12.70190464%200.69130062%20-10.40279871%200.49116352%20-8.09375%200.28125%20C-1.8556701%20-0.55670103%20-1.8556701%20-0.55670103%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(707,559)'/%3e%3cpath%20d='M0%200%20C9.57%200%2019.14%200%2029%200%20C29%200.33%2029%200.66%2029%201%20C21.41%201%2013.82%201%206%201%20C6.33%202.32%206.66%203.64%207%205%20C6.87890625%207.359375%206.87890625%207.359375%206.5625%209.75%20C6.46066406%2010.54921875%206.35882813%2011.3484375%206.25390625%2012.171875%20C6.12822266%2013.07679688%206.12822266%2013.07679688%206%2014%20C4.31821339%2011.47732009%203.09893258%209.18908177%201.875%206.4375%20C1.52179688%205.65246094%201.16859375%204.86742187%200.8046875%204.05859375%20C0%202%200%202%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(224,467)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%207.59%201%2015.18%201%2023%20C0.01%2023%20-0.98%2023%20-2%2023%20C-3.53887884%208.19349005%20-3.53887884%208.19349005%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(372,520)'/%3e%3cpath%20d='M0%200%20C6.93%200%2013.86%200%2021%200%20C19.02%200.99%2019.02%200.99%2017%202%20C16.37609375%202.53238281%2015.7521875%203.06476563%2015.109375%203.61328125%20C12.34672115%205.42947035%2010.52244363%205.30437299%207.25%205.1875%20C5.77273438%205.14689453%205.77273438%205.14689453%204.265625%205.10546875%20C3.14414062%205.05326172%203.14414062%205.05326172%202%205%20C2.33%204.01%202.66%203.02%203%202%20C2.01%201.34%201.02%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(454,466)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.97%201%205.94%201%209%20C2.32451172%208.87431641%202.32451172%208.87431641%203.67578125%208.74609375%20C11.27709596%208.10108423%2018.43413122%207.99636435%2026%209%20C26%209.66%2026%2010.32%2026%2011%20C17.42%2011%208.84%2011%200%2011%20C0%207.37%200%203.74%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(904,552)'/%3e%3cpath%20d='M0%200%20C1.28132812%200.00902344%202.56265625%200.01804687%203.8828125%200.02734375%20C4.87023437%200.03894531%205.85765625%200.05054688%206.875%200.0625%20C6.875%200.7225%206.875%201.3825%206.875%202.0625%20C7.535%202.3925%208.195%202.7225%208.875%203.0625%20C7.875%204.0625%207.875%204.0625%204.27734375%204.16015625%20C2.78903133%204.1534822%201.30073568%204.14152183%20-0.1875%204.125%20C-0.94611328%204.12048828%20-1.70472656%204.11597656%20-2.48632812%204.11132812%20C-4.36591871%204.0995068%20-6.24546899%204.08157078%20-8.125%204.0625%20C-8.455%203.0725%20-8.785%202.0825%20-9.125%201.0625%20C-6.12186252%20-0.43906874%20-3.33432478%20-0.03031204%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(874.125,559.9375)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.97%201%205.94%201%209%20C3.31%209%205.62%209%208%209%20C6.47291037%2012.43595166%204.40072955%2015.11912454%202%2018%20C1.01%2017.67%200.02%2017.34%20-1%2017%20C-0.67%2011.39%20-0.34%205.78%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(351,479)'/%3e%3cpath%20d='M0%200%20C6.6%200%2013.2%200%2020%200%20C20%200.99%2020%201.98%2020%203%20C15.38%203.33%2010.76%203.66%206%204%20C6%203.67%206%203.34%206%203%20C3.03%202.505%203.03%202.505%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(384,488)'/%3e%3cpath%20d='M0%200%20C14.7664042%20-0.22834646%2014.7664042%20-0.22834646%2022%201%20C23%202%2023%202%2023.09765625%204.50390625%20C23.08605469%205.51324219%2023.07445312%206.52257812%2023.0625%207.5625%20C23.05347656%208.57441406%2023.04445313%209.58632813%2023.03515625%2010.62890625%20C23.02355469%2011.41136719%2023.01195312%2012.19382812%2023%2013%20C22.67%2013%2022.34%2013%2022%2013%20C21.505%208.05%2021.505%208.05%2021%203%20C20.01966797%203.29197266%2020.01966797%203.29197266%2019.01953125%203.58984375%20C15.00486508%204.13517357%2011.62136988%203.38864783%207.6875%202.5625%20C6.94693359%202.41490234%206.20636719%202.26730469%205.44335938%202.11523438%20C3.62718357%201.75199921%201.81333589%201.37715682%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%23B6FF2E'%20transform='translate(676,468)'/%3e%3cpath%20d='M0%200%20C5.61%200.33%2011.22%200.66%2017%201%20C14%204%2014%204%2010.64453125%204.29296875%20C9.37996094%204.25816406%208.11539063%204.22335937%206.8125%204.1875%20C5.54019531%204.16042969%204.26789062%204.13335938%202.95703125%204.10546875%20C1.98121094%204.07066406%201.00539063%204.03585937%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(569,540)'/%3e%3cpath%20d='M0%200%20C6.27%200%2012.54%200%2019%200%20C18.01%200.495%2018.01%200.495%2017%201%20C17%201.66%2017%202.32%2017%203%20C11.39%203%205.78%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(761,523)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.33%209.24%201.66%2018.48%202%2028%20C2.99%2028.33%203.98%2028.66%205%2029%20C3.69593116%2031.01920337%202.36176581%2033.01924973%201%2035%20C0.67%2035%200.34%2035%200%2035%20C0%2023.45%200%2011.9%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(345,472)'/%3e%3cpath%20d='M0%200%20C0%201.65%200%203.3%200%205%20C-1.134375%205.28875%20-2.26875%205.5775%20-3.4375%205.875%20C-4.613125%206.24625%20-5.78875%206.6175%20-7%207%20C-8.2981424%209.2236068%20-8.2981424%209.2236068%20-8%2013%20C-8.66%2013%20-9.32%2013%20-10%2013%20C-11%2010.4375%20-11%2010.4375%20-11%207%20C-7.98890645%203.33845177%20-4.8796426%200%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(736,475)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%200.66%202%201.32%202%202%20C3.36125%202.37125%203.36125%202.37125%204.75%202.75%20C8.13493865%204.05189948%209.60793414%205.35164137%2012%208%20C12.66%208.33%2013.32%208.66%2014%209%20C14.625%2011.0625%2014.625%2011.0625%2015%2013%20C8.7298413%2011.74596826%204.95911962%207.77173128%201%203%20C0.67%202.01%200.34%201.02%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(652,548)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%204.62%201%209.24%201%2014%20C0.01%2014.495%200.01%2014.495%20-1%2015%20C-1%2014.01%20-1%2013.02%20-1%2012%20C-1.99%2012%20-2.98%2012%20-4%2012%20C-3.53439347%207.25081338%20-2.83067342%203.89217595%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(287,513)'/%3e%3cpath%20d='M0%200%20C2.4375%200.8125%202.4375%200.8125%205%202%20C5.33%202.99%205.66%203.98%206%205%20C7.49985609%206.66710346%207.49985609%206.66710346%209%208%20C5.68585212%2012.10954337%203.12159208%2012.43093421%20-2%2013%20C-2.66%2013.66%20-3.32%2014.32%20-4%2015%20C-3.67%2013.35%20-3.34%2011.7%20-3%2010%20C1.455%209.505%201.455%209.505%206%209%20C5.566875%208.43410156%205.13375%207.86820312%204.6875%207.28515625%20C3.8521875%206.18494141%203.8521875%206.18494141%203%205.0625%20C2.1646875%203.96615234%202.1646875%203.96615234%201.3125%202.84765625%20C0%201%200%201%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(682,447)'/%3e%3cpath%20d='M0%200%20C2.31%200%204.62%200%207%200%20C6.67%201.32%206.34%202.64%206%204%20C-1.26%204%20-8.52%204%20-16%204%20C-16%203.67%20-16%203.34%20-16%203%20C-11.05%203%20-6.1%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(472,560)'/%3e%3cpath%20d='M0%200%20C3.63%200%207.26%200%2011%200%20C9%204%209%204%207.25%204.8125%20C4.36824559%205.0526462%201.82252185%204.57733402%20-1%204%20C-0.67%202.68%20-0.34%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(449,506)'/%3e%3cpath%20d='M0%200%20C3.3%200.33%206.6%200.66%2010%201%20C10.33%202.32%2010.66%203.64%2011%205%20C9.58376784%205.05447047%208.16691809%205.09300508%206.75%205.125%20C5.96109375%205.14820313%205.1721875%205.17140625%204.359375%205.1953125%20C1.79268059%204.9828378%200.2083933%204.28654105%20-2%203%20C-1.34%202.01%20-0.68%201.02%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(760,537)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%201.99%201.34%202.98%201%204%20C1.74765625%203.97679687%202.4953125%203.95359375%203.265625%203.9296875%20C4.25046875%203.91164063%205.2353125%203.89359375%206.25%203.875%20C7.22453125%203.85179687%208.1990625%203.82859375%209.203125%203.8046875%20C12%204%2012%204%2016%206%20C9.73%206%203.46%206%20-3%206%20C-3%204.68%20-3%203.36%20-3%202%20C-2.01%202%20-1.02%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(447,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.22212255%202.74951693%201.42815588%205.49865612%201.625%208.25%20C1.68945312%209.02730469%201.75390625%209.80460937%201.8203125%2010.60546875%20C2.30707097%2017.72431144%202.30707097%2017.72431144%200%2021%20C-0.86860031%2016.51223172%20-1.13464852%2012.25607233%20-1.125%207.6875%20C-1.12757813%206.45386719%20-1.13015625%205.22023438%20-1.1328125%203.94921875%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(553,496)'/%3e%3cpath%20d='M0%200%20C0%201.65%200%203.3%200%205%20C-3.63%205%20-7.26%205%20-11%205%20C-11.33%204.34%20-11.66%203.68%20-12%203%20C-10.75336669%202.49166409%20-9.50250613%201.99368855%20-8.25%201.5%20C-7.55390625%201.2215625%20-6.8578125%200.943125%20-6.140625%200.65625%20C-4%200%20-4%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(454,467)'/%3e%3cpath%20d='M0%200%20C0.98613281%200.03480469%201.97226562%200.06960938%202.98828125%200.10546875%20C3.98214844%200.13253906%204.97601563%200.15960937%206%200.1875%20C7.13888672%200.23970703%207.13888672%200.23970703%208.30078125%200.29296875%20C8.63078125%201.28296875%208.96078125%202.27296875%209.30078125%203.29296875%20C4.35078125%203.29296875%20-0.59921875%203.29296875%20-5.69921875%203.29296875%20C-2.69921875%200.29296875%20-2.69921875%200.29296875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(461.69921875,559.70703125)'/%3e%3cpath%20d='M0%200%20C0.56203125%200.30679688%201.1240625%200.61359375%201.703125%200.9296875%20C4.06346934%202.02957585%206.20465562%202.60095851%208.75%203.125%20C9.54921875%203.29257812%2010.3484375%203.46015625%2011.171875%203.6328125%20C11.77515625%203.75398437%2012.3784375%203.87515625%2013%204%20C13%204.66%2013%205.32%2013%206%20C8.126739%207.5912689%204.19209404%208.21192221%20-1%208%20C0.32%207.34%201.64%206.68%203%206%20C2.690625%205.38125%202.38125%204.7625%202.0625%204.125%20C1.375%202.75%200.6875%201.375%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(695,552)'/%3e%3cpath%20d='M0%200%20C-0.99%201.485%20-0.99%201.485%20-2%203%20C-4.8984375%203.36328125%20-4.8984375%203.36328125%20-8.375%203.3125%20C-9.51710938%203.30863281%20-10.65921875%203.30476562%20-11.8359375%203.30078125%20C-14.80057739%203.01895746%20-16.49947121%202.54589341%20-19%201%20C-12.65758005%20-0.15316726%20-6.43311296%20-0.09507063%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(884,541)'/%3e%3cpath%20d='M0%200%20C1.58323688%20-0.027193%203.16661062%20-0.04648306%204.75%20-0.0625%20C6.07257812%20-0.07990234%206.07257812%20-0.07990234%207.421875%20-0.09765625%20C9.7818838%20-0.00826198%2011.74498524%200.33087179%2014%201%20C14%201.66%2014%202.32%2014%203%20C9.05%203%204.1%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(581,560)'/%3e%3cpath%20d='M0%200%20C0%200.99%200%201.98%200%203%20C-5.28%203%20-10.56%203%20-16%203%20C-16%202.34%20-16%201.68%20-16%201%20C-10.62915894%200.31798844%20-5.41499441%20-0.11521265%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(479,541)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%205.28%201%2010.56%201%2016%20C-2.37152003%2012.62847997%20-2.82142723%2011.64289204%20-3%207%20C-2.21181089%204.49988422%20-1.17946058%202.35892116%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(247,504)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2.08082094%202.95766281%202.13910778%204.91626728%202.1875%206.875%20C2.23970703%208.51082031%202.23970703%208.51082031%202.29296875%2010.1796875%20C2.19628906%2011.11039062%202.09960938%2012.04109375%202%2013%20C1.01%2013.66%200.02%2014.32%20-1%2015%20C-1.02685412%2012.68756208%20-1.04632841%2010.3750373%20-1.0625%208.0625%20C-1.07410156%206.77472656%20-1.08570312%205.48695313%20-1.09765625%204.16015625%20C-1%201%20-1%201%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(121,466)'/%3e%3cpath%20d='M0%200%20C0%202.97%200%205.94%200%209%20C-0.99%209.495%20-0.99%209.495%20-2%2010%20C-3.32%206.7%20-4.64%203.4%20-6%200%20C-2%20-1%20-2%20-1%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(254,523)'/%3e%3cpath%20d='M0%200%20C2.64%200.33%205.28%200.66%208%201%20C7.34%202.32%206.68%203.64%206%205%20C3.69%205%201.38%205%20-1%205%20C-0.67%203.35%20-0.34%201.7%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(880,489)'/%3e%3cpath%20d='M0%200%20C1.953125%200.390625%203.90625%200.78125%205.859375%201.171875%20C5.859375%202.161875%205.859375%203.151875%205.859375%204.171875%20C1.899375%204.171875%20-2.060625%204.171875%20-6.140625%204.171875%20C-2.140625%200.171875%20-2.140625%200.171875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(780.140625,467.828125)'/%3e%3cpath%20d='M0%200%20C0.598125%200.20625%201.19625%200.4125%201.8125%200.625%20C0.8225%200.955%20-0.1675%201.285%20-1.1875%201.625%20C-1.5175%205.915%20-1.8475%2010.205%20-2.1875%2014.625%20C-2.8475%2014.295%20-3.5075%2013.965%20-4.1875%2013.625%20C-4.6015625%2010.90234375%20-4.6015625%2010.90234375%20-4.8125%207.5625%20C-4.88726563%206.45777344%20-4.96203125%205.35304688%20-5.0390625%204.21484375%20C-5.08804688%203.36019531%20-5.13703125%202.50554687%20-5.1875%201.625%20C-2.1875%20-0.375%20-2.1875%20-0.375%200%200%20Z%20'%20fill='%23C7FF57'%20transform='translate(678.1875,453.375)'/%3e%3cpath%20d='M0%200%20C3%203.75%203%203.75%203%206%20C0.03%206%20-2.94%206%20-6%206%20C-5.67%204.68%20-5.34%203.36%20-5%202%20C-2.4375%200.75%20-2.4375%200.75%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(743,538)'/%3e%3cpath%20d='M0%200%20C3.63%200%207.26%200%2011%200%20C9.515%201.98%209.515%201.98%208%204%20C4.8125%204.25%204.8125%204.25%202%204%20C1.34%202.68%200.68%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(473,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C2.62227918%205.43940666%203.3864587%209.33862697%202%2015%20C1.01%2015.495%201.01%2015.495%200%2016%20C0%2013.36%200%2010.72%200%208%20C-0.66%207.67%20-1.32%207.34%20-2%207%20C-1.125%202.25%20-1.125%202.25%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(294,496)'/%3e%3cpath%20d='M0%200%20C1.134375%200.020625%202.26875%200.04125%203.4375%200.0625%20C4.0975%202.0425%204.7575%204.0225%205.4375%206.0625%20C4.4475%206.7225%203.4575%207.3825%202.4375%208.0625%20C0.10416667%205.72916667%20-2.22916667%203.39583333%20-4.5625%201.0625%20C-3.5625%200.0625%20-3.5625%200.0625%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(594.5625,489.9375)'/%3e%3cpath%20d='M0%200%20C0%200.33%200%200.66%200%201%20C-2.31%201%20-4.62%201%20-7%201%20C-7%201.66%20-7%202.32%20-7%203%20C-7.99%203%20-8.98%203%20-10%203%20C-10%203.66%20-10%204.32%20-10%205%20C-11.65%205%20-13.3%205%20-15%205%20C-15%204.34%20-15%203.68%20-15%203%20C-15.66%202.67%20-16.32%202.34%20-17%202%20C-11.19233704%200.4943096%20-6.0018137%20-0.21824777%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(750,506)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%203.63%201%207.26%201%2011%20C0.34%209.68%20-0.32%208.36%20-1%207%20C-2.32%207.33%20-3.64%207.66%20-5%208%20C-4.67%206.35%20-4.34%204.7%20-4%203%20C-3.01%203%20-2.02%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(303,481)'/%3e%3cpath%20d='M0%200%20C4.62%200%209.24%200%2014%200%20C14%200.66%2014%201.32%2014%202%20C11%203%2011%203%208.625%202.4375%20C5.45352412%201.90892069%203.84890119%202.61624799%201%204%20C0.67%202.68%200.34%201.36%200%200%20Z%20'%20fill='%2394D600'%20transform='translate(634,469)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%202.64%201%205.28%201%208%20C-5.27%207.67%20-11.54%207.34%20-18%207%20C-18%206.67%20-18%206.34%20-18%206%20C-9.585%205.505%20-9.585%205.505%20-1%205%20C-0.67%203.35%20-0.34%201.7%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(931,557)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.34%203.31%200.68%205.62%200%208%20C-0.99%208%20-1.98%208%20-3%208%20C-3%205.69%20-3%203.38%20-3%201%20C-2.01%200.67%20-1.02%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(621,536)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.66%202.97%202.32%205.94%203%209%20C-0.96%209%20-4.92%209%20-9%209%20C-8.67%208.34%20-8.34%207.68%20-8%207%20C-5.69%207%20-3.38%207%20-1%207%20C-0.67%204.69%20-0.34%202.38%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(808,513)'/%3e%3cpath%20d='M0%200%20C0%203.73675706%20-1.26051811%205.72174568%20-3%209%20C-3.391875%209.78375%20-3.78375%2010.5675%20-4.1875%2011.375%20C-4.455625%2011.91125%20-4.72375%2012.4475%20-5%2013%20C-5.99%2013%20-6.98%2013%20-8%2013%20C-7.51294002%208.6164602%20-6.21626567%206.93247752%20-3%204%20C-1.97676564%202.68441297%20-0.96873032%201.35622245%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(648,441)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2.36923077%206.53846154%202.36923077%206.53846154%200.5%208.875%20C-0.2425%209.431875%20-0.2425%209.431875%20-1%2010%20C-1.66%209.67%20-2.32%209.34%20-3%209%20C-2.30058404%205.85262818%20-1.23921302%202.97411124%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(228,582)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2.125%205.75%202.125%205.75%201%208%20C0.34%208%20-0.32%208%20-1%208%20C-1.33%208.99%20-1.66%209.98%20-2%2011%20C-3.13643966%207.59068103%20-2.86747764%206.99664544%20-1.5625%203.8125%20C-1.13130859%202.73935547%20-1.13130859%202.73935547%20-0.69140625%201.64453125%20C-0.46324219%201.10183594%20-0.23507812%200.55914063%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(350,514)'/%3e%3cpath%20d='M0%200%20C3.3%200%206.6%200%2010%200%20C10.33%201.32%2010.66%202.64%2011%204%20C9.35%204%207.7%204%206%204%20C6%203.67%206%203.34%206%203%20C3.03%202.505%203.03%202.505%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(384,488)'/%3e%3cpath%20d='M0%200%20C0.845625%200.804375%201.69125%201.60875%202.5625%202.4375%20C5.8515158%205.21628662%208.68629604%205.74117776%2013%206%20C13%206.33%2013%206.66%2013%207%20C11.20866022%207.05391993%209.41686101%207.09275571%207.625%207.125%20C6.62726562%207.14820313%205.62953125%207.17140625%204.6015625%207.1953125%20C2%207%202%207%200%205%20C-0.125%202.375%20-0.125%202.375%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(677,535)'/%3e%3cpath%20d='M0%200%20C0.33%201.65%200.66%203.3%201%205%20C-1.97%205%20-4.94%205%20-8%205%20C-3%200%20-3%200%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(175,531)'/%3e%3cpath%20d='M0%200%20C2.97%200%205.94%200%209%200%20C9.33%200.66%209.66%201.32%2010%202%20C3.71428571%204.42857143%203.71428571%204.42857143%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(739,522)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2.33%203.63%202.66%207.26%203%2011%20C2.01%2011%201.02%2011%200%2011%20C0%207.37%200%203.74%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(304,520)'/%3e%3cpath%20d='M0%200%20C0%200.66%200%201.32%200%202%20C-4.95%202%20-9.9%202%20-15%202%20C-11.5998228%200.2999114%20-9.96676075%20-0.32111638%20-6.375%20-0.6875%20C-5.21097656%20-0.81705078%20-5.21097656%20-0.81705078%20-4.0234375%20-0.94921875%20C-2%20-1%20-2%20-1%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(507,520)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.33%202.97%201.66%205.94%202%209%20C1.01%209.33%200.02%209.66%20-1%2010%20C-2.1875%207.8125%20-2.1875%207.8125%20-3%205%20C-1.6875%202.1875%20-1.6875%202.1875%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(421,489)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%203.96%202%207.92%202%2012%20C1.01%2011.67%200.02%2011.34%20-1%2011%20C-0.67%207.37%20-0.34%203.74%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(238,488)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%200.99%204%201.98%204%203%20C4.66%203%205.32%203%206%203%20C7.0625%204.8125%207.0625%204.8125%208%207%20C7.67%207.99%207.34%208.98%207%2010%20C5.83043409%208.52312468%204.66441854%207.04343707%203.5%205.5625%20C2.8503125%204.73878906%202.200625%203.91507812%201.53125%203.06640625%20C0%201%200%201%200%200%20Z%20'%20fill='%23E8FFC2'%20transform='translate(674,437)'/%3e%3cpath%20d='M0%200%20C3.23739279%201.6186964%204.42244771%204.84489543%206%208%20C2.31245243%207.50168276%200.39509338%206.89932357%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(230,587)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1%203.3%201%206.6%201%2010%20C0.01%2010.495%200.01%2010.495%20-1%2011%20C-2.1875%208.3125%20-2.1875%208.3125%20-3%205%20C-1.6875%202.125%20-1.6875%202.125%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(533,527)'/%3e%3cpath%20d='M0%200%20C0.33%200%200.66%200%201%200%20C1.22151549%201.79008467%201.42682213%203.58218162%201.625%205.375%20C1.74101563%206.37273438%201.85703125%207.37046875%201.9765625%208.3984375%20C1.98429688%209.25695312%201.99203125%2010.11546875%202%2011%20C1.34%2011.66%200.68%2012.32%200%2013%20C-0.66%2010.03%20-1.32%207.06%20-2%204%20C-1.34%204%20-0.68%204%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(554,513)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C-3.51718381%203.36884358%20-6.58774263%202.47075246%20-11%201%20C-6.78915963%20-1.80722691%20-4.88445782%20-0.94537893%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(399,468)'/%3e%3cpath%20d='M0%200%20C-0.66%200.66%20-1.32%201.32%20-2%202%20C-1.34%202.66%20-0.68%203.32%200%204%20C-3.96%203.67%20-7.92%203.34%20-12%203%20C-7.27030266%20-0.54727301%20-5.56673301%20-1.35407019%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(167,435)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C0.0625%204.625%200.0625%204.625%20-1%207%20C-1.33%206.34%20-1.66%205.68%20-2%205%20C-4.32156597%204.59270772%20-6.6568787%204.25561323%20-9%204%20C-9%203.67%20-9%203.34%20-9%203%20C-6.03%202.01%20-3.06%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(891,537)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C2%202.31%202%204.62%202%207%20C2.66%207%203.32%207%204%207%20C4%207.99%204%208.98%204%2010%20C2.68%2010%201.36%2010%200%2010%20C0%206.7%200%203.4%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(296,537)'/%3e%3cpath%20d='M0%200%20C1.7074998%201.28062485%203.37373596%202.61767557%205%204%20C5%204.66%205%205.32%205%206%20C1.04%206%20-2.92%206%20-7%206%20C-7%205.67%20-7%205.34%20-7%205%20C-3.535%204.505%20-3.535%204.505%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(683,450)'/%3e%3cpath%20d='M0%200%20C5.94%200.99%205.94%200.99%2012%202%20C12%202.66%2012%203.32%2012%204%20C10.56416999%204.10836453%209.1259798%204.18576167%207.6875%204.25%20C6.48673828%204.31960938%206.48673828%204.31960938%205.26171875%204.390625%20C3%204%203%204%200%200%20Z%20'%20fill='%23F2FFD9'%20transform='translate(667,563)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5.33%201.98%205.66%203.96%206%206%20C3.69%205.01%201.38%204.02%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(848,554)'/%3e%3cpath%20d='M0%200%20C3%204%203%204%204%207%20C0.25%2010%200.25%2010%20-2%2010%20C-1.34%206.7%20-0.68%203.4%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(187,506)'/%3e%3cpath%20d='M0%200%20C1.9451%202.91765%202.45276317%204.62537285%203%208%20C1.02%208.99%201.02%208.99%20-1%2010%20C-0.67%206.7%20-0.34%203.4%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(715,500)'/%3e%3cpath%20d='M0%200%20C2.9375%201.1875%202.9375%201.1875%203.9375%203.1875%20C1.02267222%203.99717438%20-0.52363217%204.40595993%20-3.375%203.25%20C-3.931875%202.899375%20-4.48875%202.54875%20-5.0625%202.1875%20C-5.0625%201.5275%20-5.0625%200.8675%20-5.0625%200.1875%20C-3.0625%20-0.8125%20-3.0625%20-0.8125%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(606.0625,467.8125)'/%3e%3cpath%20d='M0%200%20C0.5625%201.9375%200.5625%201.9375%201%204%20C0%205%200%205%20-3.0625%205.0625%20C-4.031875%205.041875%20-5.00125%205.02125%20-6%205%20C-6.33%204.34%20-6.66%203.68%20-7%203%20C-4.69%202.01%20-2.38%201.02%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(485,537)'/%3e%3cpath%20d='M0%200%20C0.99%200.33%201.98%200.66%203%201%20C2.01%203.97%201.02%206.94%200%2010%20C-0.33%2010%20-0.66%2010%20-1%2010%20C-1.125%202.25%20-1.125%202.25%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(322,486)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5%200.99%205%201.98%205%203%20C3.35%203.66%201.7%204.32%200%205%20C0%203.35%200%201.7%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(738,552)'/%3e%3cpath%20d='M0%200%20C0.91007813%200.00902344%201.82015625%200.01804687%202.7578125%200.02734375%20C3.45648438%200.03894531%204.15515625%200.05054688%204.875%200.0625%20C5.205%200.7225%205.535%201.3825%205.875%202.0625%20C4.82699219%202.15337891%204.82699219%202.15337891%203.7578125%202.24609375%20C2.84773437%202.32988281%201.93765625%202.41367187%201%202.5%20C0.09507812%202.58121094%20-0.80984375%202.66242188%20-1.7421875%202.74609375%20C-4.13610861%202.93239285%20-4.13610861%202.93239285%20-6.125%204.0625%20C-6.455%203.0725%20-6.785%202.0825%20-7.125%201.0625%20C-4.60024538%20-0.19987731%20-2.81299534%20-0.03606404%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(128.125,458.9375)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C0.515%204.465%200.515%204.465%20-1%208%20C-1.66%208%20-2.32%208%20-3%208%20C-3%206.02%20-3%204.04%20-3%202%20C-2.01%202%20-1.02%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(294,556)'/%3e%3cpath%20d='M0%200%20C1.51400391%200.01740234%201.51400391%200.01740234%203.05859375%200.03515625%20C4.07050781%200.04417969%205.08242188%200.05320312%206.125%200.0625%20C7.29869141%200.07990234%207.29869141%200.07990234%208.49609375%200.09765625%20C8.49609375%200.42765625%208.49609375%200.75765625%208.49609375%201.09765625%20C5.52609375%201.09765625%202.55609375%201.09765625%20-0.50390625%201.09765625%20C-0.50390625%201.75765625%20-0.50390625%202.41765625%20-0.50390625%203.09765625%20C-2.81390625%203.09765625%20-5.12390625%203.09765625%20-7.50390625%203.09765625%20C-6.86453125%202.78828125%20-6.22515625%202.47890625%20-5.56640625%202.16015625%20C-1.48563778%200.05794219%20-1.48563778%200.05794219%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(463.50390625,540.90234375)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C2.32%201.67%203.64%201.34%205%201%20C3.9024777%203.99324263%203.32317108%204.84610901%200.375%206.25%20C-0.40875%206.4975%20-1.1925%206.745%20-2%207%20C-1.34%204.69%20-0.68%202.38%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(306,531)'/%3e%3cpath%20d='M0%200%20C0.33%200.99%200.66%201.98%201%203%20C-0.98%204.98%20-2.96%206.96%20-5%209%20C-5.99%208.67%20-6.98%208.34%20-8%208%20C-5.33333333%205.33333333%20-2.66666667%202.66666667%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(601,528)'/%3e%3cpath%20d='M0%200%20C0.99%200%201.98%200%203%200%20C3.125%202.875%203.125%202.875%203%206%20C2.34%206.66%201.68%207.32%201%208%20C0%207%200%207%20-0.0625%203.4375%20C-0.041875%202.303125%20-0.02125%201.16875%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(272,520)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%201.66%201.34%202.32%201%203%20C0.95977609%205.3329866%200.95679753%207.66706666%201%2010%20C0.34%2010%20-0.32%2010%20-1%2010%20C-1.9765625%203.9453125%20-1.9765625%203.9453125%20-2%202%20C-1.34%201.34%20-0.68%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(359,502)'/%3e%3cpath%20d='M0%200%20C3.63%200.66%207.26%201.32%2011%202%20C11%202.33%2011%202.66%2011%203%20C7.37%203%203.74%203%200%203%20C0%202.01%200%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(387,469)'/%3e%3cpath%20d='M0%200%20C2.31%200.33%204.62%200.66%207%201%20C6.67%201.66%206.34%202.32%206%203%20C4.35%203%202.7%203%201%203%20C1%203.99%201%204.98%201%206%20C0.01%206%20-0.98%206%20-2%206%20C-1.34%204.02%20-0.68%202.04%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(305,468)'/%3e%3cpath%20d='M0%200%20C1.65%200.33%203.3%200.66%205%201%20C5%201.99%205%202.98%205%204%20C3.35%204%201.7%204%200%204%20C0%202.68%200%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(549,552)'/%3e%3cpath%20d='M0%200%20C0.94875%200.04125%201.8975%200.0825%202.875%200.125%20C2.875%200.785%202.875%201.445%202.875%202.125%20C0.895%202.785%20-1.085%203.445%20-3.125%204.125%20C-3.785%203.465%20-4.445%202.805%20-5.125%202.125%20C-3.125%200.125%20-3.125%200.125%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(181.125,553.875)'/%3e%3cpath%20d='M0%200%20C1.9375%200.3125%201.9375%200.3125%204%201%20C4.33%201.99%204.66%202.98%205%204%20C2.69%204%200.38%204%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(587,540)'/%3e%3cpath%20d='M0%200%20C0%202.31%200%204.62%200%207%20C-0.99%207.495%20-0.99%207.495%20-2%208%20C-2%207.01%20-2%206.02%20-2%205%20C-2.66%205%20-3.32%205%20-4%205%20C-3.625%203.0625%20-3.625%203.0625%20-3%201%20C-1%200%20-1%200%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(185,520)'/%3e%3cpath%20d='M0%200%20C0.66%200%201.32%200%202%200%20C1.67%202.64%201.34%205.28%201%208%20C0.01%207.67%20-0.98%207.34%20-2%207%20C-1.34%207%20-0.68%207%200%207%20C0%206.01%200%205.02%200%204%20C-1.32%203.67%20-2.64%203.34%20-4%203%20C-2.68%202.67%20-1.36%202.34%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(616,486)'/%3e%3cpath%20d='M0%200%20C3.125%20-0.1875%203.125%20-0.1875%206%200%20C6%200.99%206%201.98%206%203%20C3.36%203%200.72%203%20-2%203%20C-1.34%202.01%20-0.68%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(842,477)'/%3e%3cpath%20d='M0%200%20C2.475%200.495%202.475%200.495%205%201%20C4.67%202.32%204.34%203.64%204%205%20C2.68%205.33%201.36%205.66%200%206%20C0%204.02%200%202.04%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(920,472)'/%3e%3cpath%20d='M0%200%20C1.65%200%203.3%200%205%200%20C5.33%200.99%205.66%201.98%206%203%20C3.69%203%201.38%203%20-1%203%20C-0.67%202.01%20-0.34%201.02%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(568,560)'/%3e%3cpath%20d='M0%200%20C3.39609044%201.19322096%205.62433927%202.28495916%208%205%20C8.66%205.66%209.32%206.32%2010%207%20C7.29068581%206.84518205%205.53415961%206.51827919%203.5546875%204.59765625%20C2.32320358%203.10228292%201.1570163%201.5537076%200%200%20Z%20'%20fill='%23A7EA18'%20transform='translate(656,551)'/%3e%3cpath%20d='M0%200%20C-3.6441774%202.4294516%20-5.71241272%202.16179575%20-10%202%20C-10%201.34%20-10%200.68%20-10%200%20C-6.33694766%20-0.74926071%20-3.57644848%20-1.2380014%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(762,542)'/%3e%3cpath%20d='M0%200%20C1.32%200%202.64%200%204%200%20C4%201.65%204%203.3%204%205%20C3.01%205%202.02%205%201%205%20C0.34%203.68%20-0.32%202.36%20-1%201%20C-0.67%200.67%20-0.34%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(780,539)'/%3e%3cpath%20d='M0%200%20C0%201.98%200%203.96%200%206%20C-0.99%206%20-1.98%206%20-3%206%20C-3.66%204.68%20-4.32%203.36%20-5%202%20C-1.125%200%20-1.125%200%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(611,497)'/%3e%3cpath%20d='M0%200%20C2%203%202%203%201.625%205.1875%20C1.41875%205.785625%201.2125%206.38375%201%207%20C0.01%207%20-0.98%207%20-2%207%20C-2%205.35%20-2%203.7%20-2%202%20C-1.34%202%20-0.68%202%200%202%20C0%201.34%200%200.68%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(260,485)'/%3e%3cpath%20d='M0%200%20C0.99%200.33%201.98%200.66%203%201%20C3.33%202.98%203.66%204.96%204%207%20C2.35%206.01%200.7%205.02%20-1%204%20C-0.67%202.68%20-0.34%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(896,467)'/%3e%3cpath%20d='M0%200%20C2.97%200%205.94%200%209%200%20C9%201.32%209%202.64%209%204%20C8.01%204%207.02%204%206%204%20C5.67%203.34%205.34%202.68%205%202%20C2.47266765%201.34444881%202.47266765%201.34444881%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%2312003B'%20transform='translate(396,466)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4%201.99%204%202.98%204%204%20C1.69%204.33%20-0.62%204.66%20-3%205%20C-2.01%203.35%20-1.02%201.7%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(660,423)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4.33%202.65%204.66%204.3%205%206%20C4.01%206%203.02%206%202%206%20C1.34%204.02%200.68%202.04%200%200%20Z%20'%20fill='%236F9300'%20transform='translate(690,541)'/%3e%3cpath%20d='M0%200%20C1.32%200.99%202.64%201.98%204%203%20C3.67%203.66%203.34%204.32%203%205%20C1.35%205%20-0.3%205%20-2%205%20C-1.34%203.35%20-0.68%201.7%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(858,531)'/%3e%3cpath%20d='M0%200%20C0.66%200.99%201.32%201.98%202%203%20C1.67%203.99%201.34%204.98%201%206%20C-1.5625%207.1875%20-1.5625%207.1875%20-4%208%20C-2.68%205.36%20-1.36%202.72%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(373,482)'/%3e%3cpath%20d='M0%200%20C1.74959319%202.62438979%202.62068453%203.96547627%203%207%20C2.01%208.485%202.01%208.485%201%2010%20C0.34%209.67%20-0.32%209.34%20-1%209%20C-0.67%208.34%20-0.34%207.68%200%207%20C0.04022391%204.6670134%200.04320247%202.33293334%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(360,477)'/%3e%3cpath%20d='M0%200%20C0%200.66%200%201.32%200%202%20C-0.66%202%20-1.32%202%20-2%202%20C-2%202.99%20-2%203.98%20-2%205%20C-3.32%205%20-4.64%205%20-6%205%20C-5.6875%203.0625%20-5.6875%203.0625%20-5%201%20C-2%200%20-2%200%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(891,561)'/%3e%3cpath%20d='M0%200%20C0.33%200.66%200.66%201.32%201%202%20C0.01%203.32%20-0.98%204.64%20-2%206%20C-3.32%205.34%20-4.64%204.68%20-6%204%20C-4.02%202.68%20-2.04%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(715,553)'/%3e%3cpath%20d='M0%200%20C1.98%200%203.96%200%206%200%20C6.33%201.65%206.66%203.3%207%205%20C3.535%203.02%203.535%203.02%200%201%20C0%200.67%200%200.34%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(432,552)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.60196439%203.88575819%201.20990931%204.82189513%20-1.0625%206.75%20C-1.701875%207.1625%20-2.34125%207.575%20-3%208%20C-1.125%201.125%20-1.125%201.125%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(299,549)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C2%201.99%202%202.98%202%204%20C-1.13349732%205.04449911%20-1.98968256%204.93423645%20-5%204%20C-3.35%202.68%20-1.7%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(198,546)'/%3e%3cpath%20d='M0%200%20C1.32%200.33%202.64%200.66%204%201%20C4%204%204%204%202.5%205.6875%20C2.005%206.120625%201.51%206.55375%201%207%20C0.67%204.69%200.34%202.38%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(802,545)'/%3e%3cpath%20d='M0%200%20C2%201.3125%202%201.3125%204%203%20C4%203.99%204%204.98%204%206%20C2.02%205.34%200.04%204.68%20-2%204%20C-1.34%202.68%20-0.68%201.36%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(617,530)'/%3e%3cpath%20d='M0%200%20C2%201.8125%202%201.8125%204%204%20C4%204.99%204%205.98%204%207%20C2.68%207.33%201.36%207.66%200%208%20C0%205.36%200%202.72%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(552,520)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C0.1875%204%200.1875%204%20-2%207%20C-2.99%207%20-3.98%207%20-5%207%20C-3.35%204.69%20-1.7%202.38%200%200%20Z%20'%20fill='%231E0259'%20transform='translate(715,519)'/%3e%3cpath%20d='M0%200%20C2.50037734%202.17424117%203.43628586%203.73045798%204%207%20C2.68%206.67%201.36%206.34%200%206%20C0%204.02%200%202.04%200%200%20Z%20'%20fill='%23F0E9FF'%20transform='translate(483,496)'/%3e%3cpath%20d='M0%200%20C0.66%200.33%201.32%200.66%202%201%20C1.67%202.98%201.34%204.96%201%207%20C0.34%206.67%20-0.32%206.34%20-1%206%20C-1.625%203.4375%20-1.625%203.4375%20-2%201%20C-1.34%200.67%20-0.68%200.34%200%200%20Z%20'%20fill='%230D0026'%20transform='translate(182,471)'/%3e%3cpath%20d='M0%200%20C0.33%201.32%200.66%202.64%201%204%20C3.31%204%205.62%204%208%204%20C8%204.33%208%204.66%208%205%20C4.7%205%201.4%205%20-2%205%20C-1.34%203.35%20-0.68%201.7%200%200%20Z%20'%20fill='%23DFFF99'%20transform='translate(638,451)'/%3e%3c/svg%3e",
1110
- alt: "Dyrected",
1111
- className: "dy-h-7 dy-w-auto"
1112
- })
1113
- }), /* @__PURE__ */ jsxs("div", {
1114
- className: "dy-ml-auto dy-flex dy-items-center dy-gap-1.5",
1115
- children: [
1116
- /* @__PURE__ */ jsx(ThemeSelector, { mobile: true }),
1117
- user && /* @__PURE__ */ jsx("div", {
1118
- className: "dy-flex dy-h-8 dy-w-8 dy-items-center dy-justify-center dy-rounded-full dy-bg-primary/10 dy-text-primary dy-font-semibold dy-text-xs dy-shrink-0",
1119
- children: (user.name || user.email || "?").charAt(0).toUpperCase()
1120
- }),
1121
- /* @__PURE__ */ jsx("button", {
1122
- type: "button",
1123
- onClick: () => setMobileOpen(true),
1124
- className: "dy-flex dy-h-9 dy-w-9 dy-items-center dy-justify-center dy-rounded-md dy-text-muted-foreground hover:dy-bg-accent hover:dy-text-foreground dy-transition-colors",
1125
- "aria-label": "Open menu",
1126
- children: /* @__PURE__ */ jsx(Menu, { className: "dy-h-5 dy-w-5" })
1127
- })
1128
- ]
1129
- })]
1169
+ children: [!isEmbedded && /* @__PURE__ */ jsx("button", {
1170
+ type: "button",
1171
+ onClick: () => setMobileOpen(true),
1172
+ className: "dy-fixed md:dy-hidden dy-z-10 dy-top-2 dy-right-2 dy-flex dy-h-9 dy-w-9 dy-items-center dy-justify-center dy-rounded-md dy-text-muted-foreground dy-bg-background hover:dy-bg-accent hover:dy-text-foreground dy-transition-colors",
1173
+ "aria-label": "Open menu",
1174
+ children: /* @__PURE__ */ jsx(Menu, { className: "dy-h-5 dy-w-5" })
1130
1175
  }), /* @__PURE__ */ jsx("div", {
1131
1176
  className: "dy-flex-1 dy-py-6 dy-px-4 lg:dy-py-10 lg:dy-px-6",
1132
1177
  children
@@ -1219,7 +1264,7 @@ function getStatusLabel(doc) {
1219
1264
  }
1220
1265
  function Dashboard() {
1221
1266
  const { client, components, user } = useDyrected();
1222
- const currentVersion = "2.5.59";
1267
+ const currentVersion = "2.5.62";
1223
1268
  const [latestVersion, setLatestVersion] = useState(() => {
1224
1269
  if (typeof window === "undefined") return null;
1225
1270
  return localStorage.getItem("dyrected_latest_release");
@@ -2985,26 +3030,357 @@ function CsvImporter({ slug, schema, onClose }) {
2985
3030
  });
2986
3031
  }
2987
3032
  //#endregion
3033
+ //#region src/lib/format.ts
3034
+ /** Normalize the shorthand string form into the object form. */
3035
+ function resolveNumberFormat(format) {
3036
+ if (!format) return null;
3037
+ return typeof format === "string" ? { type: format } : format;
3038
+ }
3039
+ /** Normalize the shorthand string form into the object form. */
3040
+ function resolveDateFormat(format) {
3041
+ if (!format) return null;
3042
+ return typeof format === "string" ? { type: format } : format;
3043
+ }
3044
+ function toNumber(value) {
3045
+ if (typeof value === "number") return Number.isFinite(value) ? value : null;
3046
+ if (typeof value === "string" && value.trim() !== "") {
3047
+ const parsed = Number(value);
3048
+ return Number.isFinite(parsed) ? parsed : null;
3049
+ }
3050
+ return null;
3051
+ }
3052
+ /**
3053
+ * When the field uses the `rating` format, return the numeric value and star
3054
+ * count so the caller can render stars. Returns `null` for every other format,
3055
+ * signalling that {@link formatNumber} should be used instead.
3056
+ */
3057
+ function getRatingSpec(value, format) {
3058
+ const resolved = resolveNumberFormat(format);
3059
+ if (!resolved || resolved.type !== "rating") return null;
3060
+ const num = toNumber(value);
3061
+ if (num === null) return null;
3062
+ const max = typeof resolved.max === "number" && resolved.max > 0 ? Math.floor(resolved.max) : 5;
3063
+ return {
3064
+ value: Math.max(0, Math.min(num, max)),
3065
+ max
3066
+ };
3067
+ }
3068
+ var BYTE_UNITS_DECIMAL = [
3069
+ "B",
3070
+ "KB",
3071
+ "MB",
3072
+ "GB",
3073
+ "TB",
3074
+ "PB",
3075
+ "EB"
3076
+ ];
3077
+ var BYTE_UNITS_BINARY = [
3078
+ "B",
3079
+ "KiB",
3080
+ "MiB",
3081
+ "GiB",
3082
+ "TiB",
3083
+ "PiB",
3084
+ "EiB"
3085
+ ];
3086
+ function formatBytes$1(bytes, binary, maximumFractionDigits) {
3087
+ const base = binary ? 1024 : 1e3;
3088
+ const units = binary ? BYTE_UNITS_BINARY : BYTE_UNITS_DECIMAL;
3089
+ const sign = bytes < 0 ? "-" : "";
3090
+ let amount = Math.abs(bytes);
3091
+ let unitIndex = 0;
3092
+ while (amount >= base && unitIndex < units.length - 1) {
3093
+ amount /= base;
3094
+ unitIndex += 1;
3095
+ }
3096
+ const digits = unitIndex === 0 ? 0 : maximumFractionDigits;
3097
+ return `${sign}${amount.toFixed(digits).replace(/\.?0+$/, "")} ${units[unitIndex]}`;
3098
+ }
3099
+ /**
3100
+ * Format a numeric field value for display. Returns a plain string for every
3101
+ * format except `rating` (use {@link getRatingSpec} for that). Non-numeric input
3102
+ * is stringified unchanged.
3103
+ */
3104
+ function formatNumber(value, format) {
3105
+ const resolved = resolveNumberFormat(format);
3106
+ const num = toNumber(value);
3107
+ if (!resolved || num === null) return value == null ? "" : String(value);
3108
+ try {
3109
+ switch (resolved.type) {
3110
+ case "decimal": return new Intl.NumberFormat(resolved.locale, {
3111
+ minimumFractionDigits: resolved.minimumFractionDigits,
3112
+ maximumFractionDigits: resolved.maximumFractionDigits
3113
+ }).format(num);
3114
+ case "currency": return new Intl.NumberFormat(resolved.locale, {
3115
+ style: "currency",
3116
+ currency: resolved.currency ?? "USD",
3117
+ minimumFractionDigits: resolved.minimumFractionDigits,
3118
+ maximumFractionDigits: resolved.maximumFractionDigits
3119
+ }).format(num);
3120
+ case "percent": {
3121
+ const ratio = resolved.scale === false ? num / 100 : num;
3122
+ return new Intl.NumberFormat(resolved.locale, {
3123
+ style: "percent",
3124
+ minimumFractionDigits: resolved.minimumFractionDigits,
3125
+ maximumFractionDigits: resolved.maximumFractionDigits
3126
+ }).format(ratio);
3127
+ }
3128
+ case "unit": return new Intl.NumberFormat(resolved.locale, {
3129
+ style: "unit",
3130
+ unit: resolved.unit,
3131
+ unitDisplay: resolved.unitDisplay,
3132
+ maximumFractionDigits: resolved.maximumFractionDigits
3133
+ }).format(num);
3134
+ case "compact": return new Intl.NumberFormat(resolved.locale, {
3135
+ notation: "compact",
3136
+ maximumFractionDigits: resolved.maximumFractionDigits ?? 1
3137
+ }).format(num);
3138
+ case "bytes": return formatBytes$1(num, resolved.binary === true, resolved.maximumFractionDigits ?? 1);
3139
+ case "rating": return `${num}/${typeof resolved.max === "number" ? resolved.max : 5}`;
3140
+ default: return String(num);
3141
+ }
3142
+ } catch {
3143
+ return String(num);
3144
+ }
3145
+ }
3146
+ var RELATIVE_DIVISIONS = [
3147
+ {
3148
+ amount: 60,
3149
+ unit: "second"
3150
+ },
3151
+ {
3152
+ amount: 60,
3153
+ unit: "minute"
3154
+ },
3155
+ {
3156
+ amount: 24,
3157
+ unit: "hour"
3158
+ },
3159
+ {
3160
+ amount: 7,
3161
+ unit: "day"
3162
+ },
3163
+ {
3164
+ amount: 4.34524,
3165
+ unit: "week"
3166
+ },
3167
+ {
3168
+ amount: 12,
3169
+ unit: "month"
3170
+ },
3171
+ {
3172
+ amount: Number.POSITIVE_INFINITY,
3173
+ unit: "year"
3174
+ }
3175
+ ];
3176
+ function formatRelative(date, locale, now) {
3177
+ const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
3178
+ let duration = (date.getTime() - now) / 1e3;
3179
+ for (const division of RELATIVE_DIVISIONS) {
3180
+ if (Math.abs(duration) < division.amount) return rtf.format(Math.round(duration), division.unit);
3181
+ duration /= division.amount;
3182
+ }
3183
+ return rtf.format(Math.round(duration), "year");
3184
+ }
3185
+ /**
3186
+ * Format a date/datetime/time field value for display. `now` is injected so the
3187
+ * `relative` format stays deterministic and testable. Unparseable input is
3188
+ * stringified unchanged.
3189
+ */
3190
+ function formatDate(value, format, fieldType, now = Date.now()) {
3191
+ const resolved = resolveDateFormat(format);
3192
+ if (value == null || value === "") return "";
3193
+ const raw = String(value);
3194
+ const date = fieldType === "time" && /^\d{1,2}:\d{2}/.test(raw) ? /* @__PURE__ */ new Date(`1970-01-01T${raw}`) : new Date(raw);
3195
+ if (Number.isNaN(date.getTime())) return raw;
3196
+ const type = resolved?.type ?? fieldType;
3197
+ try {
3198
+ switch (type) {
3199
+ case "relative": return formatRelative(date, resolved && "locale" in resolved ? resolved.locale : void 0, now);
3200
+ case "time": return date.toLocaleTimeString(resolved?.locale, resolved?.type === "time" ? { timeStyle: resolved.timeStyle ?? "short" } : { timeStyle: "short" });
3201
+ case "datetime": return date.toLocaleString(resolved?.locale, resolved?.type === "datetime" ? {
3202
+ dateStyle: resolved.dateStyle ?? "medium",
3203
+ timeStyle: resolved.timeStyle ?? "short"
3204
+ } : {
3205
+ dateStyle: "medium",
3206
+ timeStyle: "short"
3207
+ });
3208
+ default: return date.toLocaleDateString(resolved?.locale, resolved?.type === "date" ? { dateStyle: resolved.dateStyle ?? "medium" } : { dateStyle: "medium" });
3209
+ }
3210
+ } catch {
3211
+ return date.toLocaleString();
3212
+ }
3213
+ }
3214
+ /**
3215
+ * Soft pill classes per {@link DisplayTone}. Kept here (not as JSX) so the same
3216
+ * mapping can drive list cells, previews, and tests. Composed with the base pill
3217
+ * classes by the caller.
3218
+ */
3219
+ var DISPLAY_TONE_CLASS = {
3220
+ neutral: "dy-border-border dy-bg-muted dy-text-muted-foreground",
3221
+ primary: "dy-border-primary/20 dy-bg-primary/10 dy-text-primary",
3222
+ success: "dy-border-emerald-500/20 dy-bg-emerald-500/10 dy-text-emerald-600",
3223
+ warning: "dy-border-amber-500/20 dy-bg-amber-500/10 dy-text-amber-600",
3224
+ danger: "dy-border-red-500/20 dy-bg-red-500/10 dy-text-red-600",
3225
+ info: "dy-border-blue-500/20 dy-bg-blue-500/10 dy-text-blue-600"
3226
+ };
3227
+ /** The color classes for a tone, falling back to `neutral`. */
3228
+ function displayToneClass(tone) {
3229
+ return DISPLAY_TONE_CLASS[tone ?? "neutral"] ?? DISPLAY_TONE_CLASS.neutral;
3230
+ }
3231
+ function resolveOptionFormat(format) {
3232
+ if (!format) return null;
3233
+ return typeof format === "string" ? { type: format } : format;
3234
+ }
3235
+ function optionLabel(value, options) {
3236
+ if (Array.isArray(options)) {
3237
+ for (const option of options) if (typeof option === "string") {
3238
+ if (option === value) return option;
3239
+ } else if (option && option.value === value) return option.label ?? String(option.value);
3240
+ }
3241
+ return value == null ? "" : String(value);
3242
+ }
3243
+ /**
3244
+ * Resolve a single option value into a badge label + tone. Returns `null` when
3245
+ * the field has no badge format, signalling the caller to render plainly.
3246
+ */
3247
+ function getOptionBadge(value, format, options) {
3248
+ const resolved = resolveOptionFormat(format);
3249
+ if (!resolved || resolved.type !== "badge") return null;
3250
+ const key = value == null ? "" : String(value);
3251
+ return {
3252
+ label: resolved.labels?.[key] ?? optionLabel(value, options),
3253
+ tone: resolved.tones?.[key] ?? resolved.defaultTone ?? "neutral"
3254
+ };
3255
+ }
3256
+ /**
3257
+ * Resolve a boolean value into a custom label + tone. Returns `null` when the
3258
+ * field has no boolean format, so the caller keeps the default Yes/No badge.
3259
+ */
3260
+ function getBooleanBadge(value, format) {
3261
+ if (!format || format.type !== "boolean") return null;
3262
+ const side = value ? format.true : format.false;
3263
+ return {
3264
+ label: side?.label ?? (value ? "Yes" : "No"),
3265
+ tone: side?.tone ?? (value ? "success" : "neutral")
3266
+ };
3267
+ }
3268
+ function resolveTextFormat(format) {
3269
+ if (!format) return null;
3270
+ return typeof format === "string" ? { type: format } : format;
3271
+ }
3272
+ function capitalizeWords(text) {
3273
+ return text.replace(/\b\w/g, (char) => char.toUpperCase());
3274
+ }
3275
+ /** Apply a display-only transform to a text value. */
3276
+ function formatText(value, format) {
3277
+ const resolved = resolveTextFormat(format);
3278
+ const text = value == null ? "" : String(value);
3279
+ if (!resolved) return text;
3280
+ switch (resolved.type) {
3281
+ case "uppercase": return text.toUpperCase();
3282
+ case "lowercase": return text.toLowerCase();
3283
+ case "capitalize": return capitalizeWords(text);
3284
+ case "code": return text;
3285
+ case "truncate": return text.length > resolved.length ? `${text.slice(0, resolved.length)}…` : text;
3286
+ case "mask": {
3287
+ const reveal = typeof resolved.reveal === "number" ? Math.max(0, resolved.reveal) : 4;
3288
+ const char = resolved.character ?? "•";
3289
+ if (text.length <= reveal) return text;
3290
+ return `${char.repeat(Math.min(text.length - reveal, 8))}${text.slice(text.length - reveal)}`;
3291
+ }
3292
+ default: return text;
3293
+ }
3294
+ }
3295
+ /** Whether a text format should render in a monospace pill. */
3296
+ function isCodeText(format) {
3297
+ return resolveTextFormat(format)?.type === "code";
3298
+ }
3299
+ /**
3300
+ * Resolve a url/email value into a link spec. Returns `null` when the field has
3301
+ * no link format. `fieldType` selects between an `http` link and a `mailto:`.
3302
+ */
3303
+ function getLinkSpec(value, format, fieldType) {
3304
+ if (!format) return null;
3305
+ const resolved = typeof format === "string" ? { type: "link" } : format;
3306
+ if (resolved.type !== "link") return null;
3307
+ const raw = value == null ? "" : String(value);
3308
+ if (!raw) return null;
3309
+ return {
3310
+ href: fieldType === "email" ? `mailto:${raw}` : raw,
3311
+ label: raw,
3312
+ newTab: resolved.newTab !== false && fieldType === "url"
3313
+ };
3314
+ }
3315
+ /** Format a JSON value as a compact summary or truncated code preview. */
3316
+ function formatJson(value, format) {
3317
+ if ((typeof format === "string" ? { type: format } : format)?.type === "summary" && value && typeof value === "object") {
3318
+ const count = Array.isArray(value) ? value.length : Object.keys(value).length;
3319
+ return Array.isArray(value) ? `[ ${count} items ]` : `{ ${count} keys }`;
3320
+ }
3321
+ const json = JSON.stringify(value);
3322
+ if (!json) return "";
3323
+ return json.length > 40 ? `${json.slice(0, 40)}…` : json;
3324
+ }
3325
+ //#endregion
2988
3326
  //#region src/components/ui/render-cell.tsx
3327
+ var PILL_BASE = "dy-inline-flex dy-items-center dy-rounded-full dy-border dy-px-2.5 dy-py-0.5 dy-text-xs dy-font-medium";
3328
+ function TonePill({ spec }) {
3329
+ return /* @__PURE__ */ jsx("span", {
3330
+ className: cn(PILL_BASE, displayToneClass(spec.tone)),
3331
+ children: spec.label
3332
+ });
3333
+ }
2989
3334
  function RenderCell({ value, field, client, schemas }) {
2990
3335
  if (value === null || value === void 0) return /* @__PURE__ */ jsx("span", {
2991
3336
  className: "dy-text-muted-foreground",
2992
3337
  children: "-"
2993
3338
  });
2994
- if (field.type === "boolean" || typeof value === "boolean") return /* @__PURE__ */ jsx(Badge, {
2995
- variant: value ? "default" : "secondary",
2996
- children: value ? "Yes" : "No"
3339
+ if (field.type === "boolean" || typeof value === "boolean") {
3340
+ const badge = getBooleanBadge(value, field.admin?.format);
3341
+ if (badge) return /* @__PURE__ */ jsx(TonePill, { spec: badge });
3342
+ return /* @__PURE__ */ jsx(Badge, {
3343
+ variant: value ? "default" : "secondary",
3344
+ children: value ? "Yes" : "No"
3345
+ });
3346
+ }
3347
+ if (field.type === "select" || field.type === "radio") {
3348
+ const badge = getOptionBadge(value, field.admin?.format, field.options);
3349
+ if (badge) return /* @__PURE__ */ jsx(TonePill, { spec: badge });
3350
+ }
3351
+ if (field.type === "multiSelect" && Array.isArray(value) && field.admin?.format) return /* @__PURE__ */ jsxs("div", {
3352
+ className: "dy-flex dy-flex-wrap dy-gap-1",
3353
+ children: [value.slice(0, 3).map((item, i) => {
3354
+ const badge = getOptionBadge(item, field.admin?.format, field.options);
3355
+ return badge ? /* @__PURE__ */ jsx(TonePill, { spec: badge }, i) : null;
3356
+ }), value.length > 3 && /* @__PURE__ */ jsxs("span", {
3357
+ className: "dy-text-[10px] dy-text-muted-foreground",
3358
+ children: [
3359
+ "+",
3360
+ value.length - 3,
3361
+ " more"
3362
+ ]
3363
+ })]
2997
3364
  });
2998
- if (field.type === "date") {
2999
- const date = new Date(value);
3000
- return /* @__PURE__ */ jsxs("div", {
3001
- className: "dy-flex dy-items-center dy-gap-1.5 dy-text-muted-foreground",
3002
- children: [/* @__PURE__ */ jsx(Calendar, { className: "dy-h-3 dy-w-3" }), /* @__PURE__ */ jsx("span", {
3003
- className: "dy-text-xs",
3004
- children: date.toLocaleDateString()
3005
- })]
3365
+ if (field.type === "number") {
3366
+ const rating = getRatingSpec(value, field.admin?.format);
3367
+ if (rating) return /* @__PURE__ */ jsx("div", {
3368
+ className: "dy-flex dy-items-center dy-gap-0.5",
3369
+ title: `${rating.value} / ${rating.max}`,
3370
+ children: Array.from({ length: rating.max }, (_, i) => /* @__PURE__ */ jsx(Star, { className: i < Math.round(rating.value) ? "dy-h-3.5 dy-w-3.5 dy-fill-amber-400 dy-text-amber-400" : "dy-h-3.5 dy-w-3.5 dy-text-muted-foreground/30" }, i))
3371
+ });
3372
+ return /* @__PURE__ */ jsx("span", {
3373
+ className: "dy-text-sm dy-font-medium dy-tabular-nums",
3374
+ children: formatNumber(value, field.admin?.format)
3006
3375
  });
3007
3376
  }
3377
+ if (field.type === "date" || field.type === "datetime" || field.type === "time") return /* @__PURE__ */ jsxs("div", {
3378
+ className: "dy-flex dy-items-center dy-gap-1.5 dy-text-muted-foreground",
3379
+ children: [/* @__PURE__ */ jsx(Calendar, { className: "dy-h-3 dy-w-3" }), /* @__PURE__ */ jsx("span", {
3380
+ className: "dy-text-xs",
3381
+ children: formatDate(value, field.admin?.format, field.type)
3382
+ })]
3383
+ });
3008
3384
  const relationTo = field.relationTo || field.collection;
3009
3385
  if (field.type === "image" || field.type === "relationship" && isUploadCollection(relationTo, schemas)) {
3010
3386
  if (!value) return /* @__PURE__ */ jsx("span", {
@@ -3037,6 +3413,10 @@ function RenderCell({ value, field, client, schemas }) {
3037
3413
  })
3038
3414
  });
3039
3415
  }
3416
+ if (field.type === "json" && typeof value === "object") return /* @__PURE__ */ jsx("span", {
3417
+ className: "dy-text-[11px] dy-text-muted-foreground dy-font-mono dy-bg-muted/30 dy-px-1.5 dy-py-0.5 dy-rounded",
3418
+ children: formatJson(value, field.admin?.format)
3419
+ });
3040
3420
  if (Array.isArray(value)) return /* @__PURE__ */ jsxs("div", {
3041
3421
  className: "dy-flex dy-flex-wrap dy-gap-1",
3042
3422
  children: [value.slice(0, 2).map((item, i) => /* @__PURE__ */ jsx(Badge, {
@@ -3053,7 +3433,7 @@ function RenderCell({ value, field, client, schemas }) {
3053
3433
  })]
3054
3434
  });
3055
3435
  if (typeof value === "object" && !Array.isArray(value)) {
3056
- const entries = Object.entries(value).filter(([_, v]) => typeof v !== "object" && v !== null && v !== void 0).slice(0, 3);
3436
+ const entries = Object.entries(value).filter(([, v]) => typeof v !== "object" && v !== null && v !== void 0).slice(0, 3);
3057
3437
  if (entries.length > 0) return /* @__PURE__ */ jsxs("span", {
3058
3438
  className: "dy-text-[11px] dy-text-muted-foreground dy-font-medium dy-leading-tight",
3059
3439
  children: [entries.map(([k, v]) => `${k}: ${String(v)}`).join(", "), Object.keys(value).length > 3 ? "..." : ""]
@@ -3063,6 +3443,29 @@ function RenderCell({ value, field, client, schemas }) {
3063
3443
  children: [JSON.stringify(value).slice(0, 30), JSON.stringify(value).length > 30 ? "..." : ""]
3064
3444
  });
3065
3445
  }
3446
+ if ((field.type === "url" || field.type === "email") && field.admin?.format) {
3447
+ const link = getLinkSpec(value, field.admin.format, field.type);
3448
+ if (link) return /* @__PURE__ */ jsxs("a", {
3449
+ href: link.href,
3450
+ target: link.newTab ? "_blank" : void 0,
3451
+ rel: link.newTab ? "noreferrer" : void 0,
3452
+ onClick: (e) => e.stopPropagation(),
3453
+ className: "dy-inline-flex dy-items-center dy-gap-1 dy-text-sm dy-font-medium dy-text-primary hover:dy-underline",
3454
+ children: [link.label, field.type === "url" && /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3 dy-w-3 dy-opacity-60" })]
3455
+ });
3456
+ }
3457
+ if ((field.type === "text" || field.type === "textarea") && field.admin?.format) {
3458
+ const formatted = formatText(value, field.admin.format);
3459
+ if (isCodeText(field.admin.format)) return /* @__PURE__ */ jsx("span", {
3460
+ className: "dy-text-xs dy-font-mono dy-bg-muted/50 dy-px-1.5 dy-py-0.5 dy-rounded dy-border",
3461
+ children: formatted
3462
+ });
3463
+ return /* @__PURE__ */ jsx("span", {
3464
+ className: "dy-text-sm dy-font-medium",
3465
+ title: String(value),
3466
+ children: formatted
3467
+ });
3468
+ }
3066
3469
  let text = String(value);
3067
3470
  if (field.type === "richText") text = text.replace(/<[^>]*>/g, "");
3068
3471
  const truncated = text.slice(0, 30);
@@ -6059,6 +6462,21 @@ function TextField({ schema, field, disabled }) {
6059
6462
  });
6060
6463
  }
6061
6464
  })();
6465
+ const numberFormat = schema.type === "number" ? schema.admin?.format : void 0;
6466
+ if (numberFormat && field.value !== null && field.value !== void 0 && field.value !== "") {
6467
+ const rating = getRatingSpec(field.value, numberFormat);
6468
+ return /* @__PURE__ */ jsxs("div", {
6469
+ className: "dy-space-y-1",
6470
+ children: [inputEl, rating ? /* @__PURE__ */ jsx("div", {
6471
+ className: "dy-flex dy-items-center dy-gap-0.5",
6472
+ title: `${rating.value} / ${rating.max}`,
6473
+ children: Array.from({ length: rating.max }, (_, i) => /* @__PURE__ */ jsx(Star, { className: i < Math.round(rating.value) ? "dy-h-4 dy-w-4 dy-fill-amber-400 dy-text-amber-400" : "dy-h-4 dy-w-4 dy-text-muted-foreground/30" }, i))
6474
+ }) : /* @__PURE__ */ jsx("span", {
6475
+ className: "dy-text-xs dy-text-muted-foreground",
6476
+ children: formatNumber(field.value, numberFormat)
6477
+ })]
6478
+ });
6479
+ }
6062
6480
  const hasMaxLength = maxLength && typeof maxLength === "number";
6063
6481
  const hasMaxWords = maxWords && typeof maxWords === "number";
6064
6482
  if (hasMaxLength || hasMaxWords) return /* @__PURE__ */ jsxs("div", {
@@ -9109,7 +9527,7 @@ function FormFieldRendererInner({ schema, basePath, control, collection, canUpda
9109
9527
  //#region src/components/forms/form-engine.tsx
9110
9528
  /** Query-string key holding the active form tab (replace-navigated). */
9111
9529
  var TAB_PARAM = "tab";
9112
- function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onChange, isLoading, submitLabel = "Save", readOnly, onDataChange, passwordChangeMode = null, documentId, defaultTabLabel }) {
9530
+ function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onChange, isLoading, submitLabel = "Save", hideSubmit = false, readOnly, onDataChange, passwordChangeMode = null, documentId, defaultTabLabel }) {
9113
9531
  const { activePath, navigateToPath, getStableId } = useNestedEditor();
9114
9532
  const [searchParams, setSearchParams] = useSearchParams();
9115
9533
  const isDrilledIn = activePath.length > 0;
@@ -9573,7 +9991,7 @@ function FormEngineInner({ collection, fields, defaultValues = {}, onSubmit, onC
9573
9991
  })
9574
9992
  ]
9575
9993
  }),
9576
- /* @__PURE__ */ jsx("div", {
9994
+ !hideSubmit && /* @__PURE__ */ jsx("div", {
9577
9995
  className: "dy-flex dy-justify-end dy-gap-4",
9578
9996
  children: !readOnly && /* @__PURE__ */ jsx(Button, {
9579
9997
  type: "submit",
@@ -10728,24 +11146,53 @@ function CollectionListPage({ slug }) {
10728
11146
  }
10729
11147
  });
10730
11148
  const [exporting, setExporting] = React$1.useState(false);
11149
+ const exportDocsToCsv = React$1.useCallback((docs, filenameSuffix = "") => {
11150
+ if (!schema || !client) return;
11151
+ const csvColumns = [
11152
+ {
11153
+ key: "id",
11154
+ label: "ID"
11155
+ },
11156
+ ...schema.fields.filter((f) => f.name !== "password" && !f.admin?.hidden && f.type !== "row" && f.type !== "join").filter((f) => !!f.name).map((f) => ({
11157
+ key: f.name,
11158
+ label: f.label || f.name
11159
+ })),
11160
+ {
11161
+ key: "updatedAt",
11162
+ label: "Last Updated"
11163
+ }
11164
+ ];
11165
+ const flattenForCsv = (val) => {
11166
+ if (val === null || val === void 0) return "";
11167
+ if (typeof val === "boolean") return val ? "true" : "false";
11168
+ if (typeof val === "number" || typeof val === "string") return String(val);
11169
+ if (Array.isArray(val)) return val.map((item) => flattenForCsv(item)).filter(Boolean).join("; ");
11170
+ if (typeof val === "object" && val !== null) {
11171
+ const obj = val;
11172
+ if (obj.url || obj.filename) return getMediaUrl(obj, client?.getBaseUrl() || "");
11173
+ if (obj.id) return String(obj.title || obj.name || obj.label || obj.id);
11174
+ return JSON.stringify(val);
11175
+ }
11176
+ return String(val);
11177
+ };
11178
+ const escapeCsv = (val) => /[",\n\r]/.test(val) ? `"${val.replace(/"/g, "\"\"")}"` : val;
11179
+ const csv = [csvColumns.map((c) => escapeCsv(flattenForCsv(c.label))).join(","), ...docs.map((doc) => csvColumns.map((c) => escapeCsv(flattenForCsv(doc[c.key]))).join(","))].join("\n");
11180
+ const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
11181
+ const url = URL.createObjectURL(blob);
11182
+ const link = document.createElement("a");
11183
+ link.href = url;
11184
+ link.download = `${slug}-export${filenameSuffix}.csv`;
11185
+ link.click();
11186
+ URL.revokeObjectURL(url);
11187
+ }, [
11188
+ schema,
11189
+ client,
11190
+ slug
11191
+ ]);
10731
11192
  const handleExportCsv = React$1.useCallback(async () => {
10732
11193
  if (!schema || !client) return;
10733
11194
  setExporting(true);
10734
11195
  try {
10735
- const csvColumns = [
10736
- {
10737
- key: "id",
10738
- label: "ID"
10739
- },
10740
- ...schema.fields.filter((f) => f.name !== "password" && !f.admin?.hidden && f.type !== "row" && f.type !== "join").filter((f) => !!f.name).map((f) => ({
10741
- key: f.name,
10742
- label: f.label || f.name
10743
- })),
10744
- {
10745
- key: "updatedAt",
10746
- label: "Last Updated"
10747
- }
10748
- ];
10749
11196
  const allDocs = [];
10750
11197
  let pg = 1;
10751
11198
  let totalPages = 1;
@@ -10759,27 +11206,7 @@ function CollectionListPage({ slug }) {
10759
11206
  totalPages = res.totalPages ?? 1;
10760
11207
  pg++;
10761
11208
  }
10762
- const flattenForCsv = (val) => {
10763
- if (val === null || val === void 0) return "";
10764
- if (typeof val === "boolean") return val ? "true" : "false";
10765
- if (typeof val === "number" || typeof val === "string") return String(val);
10766
- if (Array.isArray(val)) return val.map((item) => flattenForCsv(item)).filter(Boolean).join("; ");
10767
- if (typeof val === "object" && val !== null) {
10768
- const obj = val;
10769
- if (obj.url || obj.filename) return getMediaUrl(obj, client?.getBaseUrl() || "");
10770
- if (obj.id) return String(obj.title || obj.name || obj.label || obj.id);
10771
- return JSON.stringify(val);
10772
- }
10773
- return String(val);
10774
- };
10775
- const csv = [csvColumns.map((c) => flattenForCsv(c.label)).join(","), ...allDocs.map((doc) => csvColumns.map((c) => flattenForCsv(doc[c.key])).join(","))].join("\n");
10776
- const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
10777
- const url = URL.createObjectURL(blob);
10778
- const link = document.createElement("a");
10779
- link.href = url;
10780
- link.download = `${slug}-export.csv`;
10781
- link.click();
10782
- URL.revokeObjectURL(url);
11209
+ exportDocsToCsv(allDocs);
10783
11210
  toast.success(`Exported ${allDocs.length} entries`);
10784
11211
  } catch (err) {
10785
11212
  toast.error("Export failed", { description: err instanceof Error ? err.message : String(err) });
@@ -10789,8 +11216,15 @@ function CollectionListPage({ slug }) {
10789
11216
  }, [
10790
11217
  schema,
10791
11218
  client,
10792
- slug
11219
+ slug,
11220
+ exportDocsToCsv
10793
11221
  ]);
11222
+ const handleExportSelected = React$1.useCallback((ids) => {
11223
+ const selectedDocs = ids.map((id) => response?.docs?.find((d) => d.id === id)).filter((d) => !!d);
11224
+ if (selectedDocs.length === 0) return;
11225
+ exportDocsToCsv(selectedDocs, "-selected");
11226
+ toast.success(`Exported ${selectedDocs.length} selected ${selectedDocs.length === 1 ? "entry" : "entries"}`);
11227
+ }, [response, exportDocsToCsv]);
10794
11228
  const handleDelete = React$1.useCallback((id) => {
10795
11229
  if (schema?.auth && id === user?.id) {
10796
11230
  toast.error("Action not allowed", { description: "You cannot delete your own account." });
@@ -11362,7 +11796,19 @@ function CollectionListPage({ slug }) {
11362
11796
  }
11363
11797
  return canDelete;
11364
11798
  });
11365
- return /* @__PURE__ */ jsxs(Button, {
11799
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Button, {
11800
+ variant: "outline",
11801
+ size: "sm",
11802
+ className: "dy-h-8",
11803
+ onClick: () => handleExportSelected(selectedIds),
11804
+ disabled: selectedIds.length === 0,
11805
+ children: [
11806
+ /* @__PURE__ */ jsx(FileDown, { className: "dy-h-4 dy-w-4 dy-mr-2" }),
11807
+ "Export Selected (",
11808
+ selectedIds.length,
11809
+ ")"
11810
+ ]
11811
+ }), /* @__PURE__ */ jsxs(Button, {
11366
11812
  variant: "destructive",
11367
11813
  size: "sm",
11368
11814
  className: "dy-h-8",
@@ -11374,7 +11820,7 @@ function CollectionListPage({ slug }) {
11374
11820
  deletableIds.length,
11375
11821
  ")"
11376
11822
  ]
11377
- });
11823
+ })] });
11378
11824
  }
11379
11825
  }, slug),
11380
11826
  /* @__PURE__ */ jsx(AdminComponentSlot, {
@@ -11404,12 +11850,67 @@ function CollectionListPage({ slug }) {
11404
11850
  }
11405
11851
  //#endregion
11406
11852
  //#region src/components/live-preview/LivePreviewPane.tsx
11407
- function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus }) {
11853
+ /** Append the preview token to a resolved (absolute) preview URL. */
11854
+ function withPreviewToken(url, token) {
11855
+ try {
11856
+ const u = new URL(url);
11857
+ u.searchParams.set(PREVIEW_TOKEN_PARAM, token);
11858
+ return u.toString();
11859
+ } catch {
11860
+ return `${url}${url.includes("?") ? "&" : "?"}${PREVIEW_TOKEN_PARAM}=${encodeURIComponent(token)}`;
11861
+ }
11862
+ }
11863
+ function safeStringify(value) {
11864
+ try {
11865
+ return JSON.stringify(value) ?? "";
11866
+ } catch {
11867
+ return "";
11868
+ }
11869
+ }
11870
+ function LivePreviewPane({ previewUrl, data, mode = "postMessage", collectionSlug, documentId, onFieldFocus }) {
11408
11871
  const iframeRef = useRef(null);
11872
+ const { client } = useDyrected();
11409
11873
  const [isReady, setIsReady] = useState(false);
11410
11874
  const [viewMode, setViewMode] = useState("desktop");
11411
11875
  const [zoom, setZoom] = useState(.75);
11412
11876
  const [editMode, setEditMode] = useState(true);
11877
+ const [tokenSrc, setTokenSrc] = useState(null);
11878
+ const [tokenError, setTokenError] = useState(null);
11879
+ const lastDataKeyRef = useRef(null);
11880
+ const dataKey = safeStringify(data);
11881
+ useEffect(() => {
11882
+ if (mode !== "token" || !client || !collectionSlug) return;
11883
+ if (dataKey === lastDataKeyRef.current) return;
11884
+ let cancelled = false;
11885
+ const timer = setTimeout(async () => {
11886
+ try {
11887
+ const { token } = await client.createPreviewToken({
11888
+ collectionSlug,
11889
+ documentId,
11890
+ data
11891
+ });
11892
+ if (cancelled) return;
11893
+ lastDataKeyRef.current = dataKey;
11894
+ setTokenSrc(withPreviewToken(previewUrl, token));
11895
+ setTokenError(null);
11896
+ } catch (err) {
11897
+ if (cancelled) return;
11898
+ setTokenError(err instanceof Error ? err.message : "Failed to create preview token.");
11899
+ }
11900
+ }, 800);
11901
+ return () => {
11902
+ cancelled = true;
11903
+ clearTimeout(timer);
11904
+ };
11905
+ }, [
11906
+ mode,
11907
+ client,
11908
+ collectionSlug,
11909
+ documentId,
11910
+ previewUrl,
11911
+ dataKey
11912
+ ]);
11913
+ const iframeSrc = mode === "token" ? tokenSrc ?? previewUrl : previewUrl;
11413
11914
  useEffect(() => {
11414
11915
  if (mode !== "postMessage") return;
11415
11916
  const handleMessage = (event) => {
@@ -11445,7 +11946,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
11445
11946
  }, [editMode, isReady]);
11446
11947
  const reload = () => {
11447
11948
  if (iframeRef.current) {
11448
- iframeRef.current.src = previewUrl;
11949
+ iframeRef.current.src = iframeSrc;
11449
11950
  setIsReady(false);
11450
11951
  }
11451
11952
  };
@@ -11504,24 +12005,32 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
11504
12005
  ]
11505
12006
  }), /* @__PURE__ */ jsxs("div", {
11506
12007
  className: "dy-flex dy-items-center dy-gap-2",
11507
- children: [/* @__PURE__ */ jsx(Button, {
11508
- variant: "ghost",
11509
- size: "icon",
11510
- className: "dy-h-8 dy-w-8",
11511
- onClick: reload,
11512
- children: /* @__PURE__ */ jsx(RotateCcw, { className: "dy-h-3.5 dy-w-3.5" })
11513
- }), /* @__PURE__ */ jsx(Button, {
11514
- variant: "ghost",
11515
- size: "icon",
11516
- className: "dy-h-8 dy-w-8",
11517
- asChild: true,
11518
- children: /* @__PURE__ */ jsx("a", {
11519
- href: previewUrl,
11520
- target: "_blank",
11521
- rel: "noreferrer",
11522
- children: /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3.5 dy-w-3.5" })
12008
+ children: [
12009
+ mode === "token" && tokenError && /* @__PURE__ */ jsx("span", {
12010
+ className: "dy-text-[11px] dy-font-medium dy-text-destructive dy-truncate dy-max-w-[220px]",
12011
+ title: tokenError,
12012
+ children: "Preview token failed"
12013
+ }),
12014
+ /* @__PURE__ */ jsx(Button, {
12015
+ variant: "ghost",
12016
+ size: "icon",
12017
+ className: "dy-h-8 dy-w-8",
12018
+ onClick: reload,
12019
+ children: /* @__PURE__ */ jsx(RotateCcw, { className: "dy-h-3.5 dy-w-3.5" })
12020
+ }),
12021
+ /* @__PURE__ */ jsx(Button, {
12022
+ variant: "ghost",
12023
+ size: "icon",
12024
+ className: "dy-h-8 dy-w-8",
12025
+ asChild: true,
12026
+ children: /* @__PURE__ */ jsx("a", {
12027
+ href: previewUrl,
12028
+ target: "_blank",
12029
+ rel: "noreferrer",
12030
+ children: /* @__PURE__ */ jsx(ExternalLink, { className: "dy-h-3.5 dy-w-3.5" })
12031
+ })
11523
12032
  })
11524
- })]
12033
+ ]
11525
12034
  })]
11526
12035
  }), /* @__PURE__ */ jsx("div", {
11527
12036
  className: "dy-flex-1 dy-flex dy-items-center dy-justify-center dy-p-0 dy-overflow-hidden dy-bg-muted/5",
@@ -11529,7 +12038,7 @@ function LivePreviewPane({ previewUrl, data, mode = "postMessage", onFieldFocus
11529
12038
  className: `dy-bg-background dy-shadow-[0_20px_50px_rgba(0,0,0,0.1)] dy-transition-all dy-duration-500 dy-overflow-hidden dy-border dy-border-border/40 ${viewMode === "mobile" ? "dy-w-[375px] dy-h-[667px]" : "dy-w-full dy-h-full"}`,
11530
12039
  children: /* @__PURE__ */ jsx("iframe", {
11531
12040
  ref: iframeRef,
11532
- src: previewUrl,
12041
+ src: iframeSrc,
11533
12042
  className: cn("dy-border-none dy-transition-transform dy-duration-300", editMode && "dy-cursor-crosshair"),
11534
12043
  style: viewMode === "desktop" ? {
11535
12044
  width: `${100 / zoom}%`,
@@ -11960,7 +12469,7 @@ function HeaderAction({ icon: Icon, label, onClick, active, disabled, busy, titl
11960
12469
  * the editor into that block, then (one tick later, once the sub-form mounts)
11961
12470
  * scrolls to and focuses the specific input.
11962
12471
  */
11963
- function PreviewPaneWithNav({ previewUrl, data, mode, fields, active, onFieldNavigate }) {
12472
+ function PreviewPaneWithNav({ previewUrl, data, mode, collectionSlug, documentId, fields, active, onFieldNavigate }) {
11964
12473
  const { navigateToPath, getStableId } = useNestedEditor();
11965
12474
  const sidebar = useSidebarControl();
11966
12475
  const setCollapsed = sidebar?.setCollapsed;
@@ -12007,9 +12516,25 @@ function PreviewPaneWithNav({ previewUrl, data, mode, fields, active, onFieldNav
12007
12516
  previewUrl,
12008
12517
  data,
12009
12518
  mode,
12519
+ collectionSlug,
12520
+ documentId,
12010
12521
  onFieldFocus: handleFieldFocus
12011
12522
  });
12012
12523
  }
12524
+ function getEntryTitle(entry, schema) {
12525
+ if (!entry) return "";
12526
+ const titleField = schema?.admin?.useAsTitle || "title";
12527
+ if (entry[titleField]) return String(entry[titleField]);
12528
+ for (const f of [
12529
+ "title",
12530
+ "name",
12531
+ "label",
12532
+ "heading",
12533
+ "email",
12534
+ "subject"
12535
+ ]) if (entry[f]) return String(entry[f]);
12536
+ return String(entry.id);
12537
+ }
12013
12538
  function EditEntryPage() {
12014
12539
  const { slug, id } = useParams();
12015
12540
  const [searchParams] = useSearchParams();
@@ -12017,7 +12542,7 @@ function EditEntryPage() {
12017
12542
  const navigate = useNavigate();
12018
12543
  const queryClient = useQueryClient();
12019
12544
  const [showPreview, setShowPreview] = useState(false);
12020
- const [showWorkflow, setShowWorkflow] = useState(false);
12545
+ const [activeTab, setActiveTab] = useState("edit");
12021
12546
  const [mobilePreview, setMobilePreview] = useState(false);
12022
12547
  const [isDirty, setIsDirty] = useState(false);
12023
12548
  const [previewData, setPreviewData] = useState(null);
@@ -12128,7 +12653,7 @@ function EditEntryPage() {
12128
12653
  ]);
12129
12654
  const hasWorkflow = !!schema?.workflow;
12130
12655
  const syncShowWorkflow = useState(() => (next) => {
12131
- setShowWorkflow((prev) => prev === next ? prev : next);
12656
+ setActiveTab((prev) => next ? "versions" : prev === "versions" ? "edit" : prev);
12132
12657
  })[0];
12133
12658
  useEffect(() => {
12134
12659
  if (!hasWorkflow || schemaPreviewUrl) return;
@@ -12147,6 +12672,29 @@ function EditEntryPage() {
12147
12672
  queryFn: () => client.collection(slug).findOne(id),
12148
12673
  enabled: !!client && isEdit
12149
12674
  });
12675
+ const [switcherOpen, setSwitcherOpen] = useState(false);
12676
+ const [searchQuery, setSearchQuery] = useState("");
12677
+ const [debouncedSearchQuery, setDebouncedSearchQuery] = useState("");
12678
+ useEffect(() => {
12679
+ const timer = setTimeout(() => {
12680
+ setDebouncedSearchQuery(searchQuery);
12681
+ }, 300);
12682
+ return () => clearTimeout(timer);
12683
+ }, [searchQuery]);
12684
+ const { data: siblingEntries, isLoading: isSiblingsLoading } = useQuery({
12685
+ queryKey: [
12686
+ "collection-siblings",
12687
+ slug,
12688
+ debouncedSearchQuery
12689
+ ],
12690
+ queryFn: async () => {
12691
+ const displayField = schema?.admin?.useAsTitle || "title";
12692
+ let qb = client.collection(slug).find({ limit: 50 });
12693
+ if (debouncedSearchQuery) qb = qb.where({ [displayField]: { like: `%${debouncedSearchQuery}%` } });
12694
+ return qb.exec();
12695
+ },
12696
+ enabled: !!client && !!slug && isEdit && switcherOpen
12697
+ });
12150
12698
  const syncPreviewData = useState(() => (next) => {
12151
12699
  setPreviewData((prev) => prev === next ? prev : next);
12152
12700
  })[0];
@@ -12210,6 +12758,9 @@ function EditEntryPage() {
12210
12758
  const workflowMeta = isEdit && entry ? entry._workflow ?? null : null;
12211
12759
  const hasStatus = schema?.fields.some((f) => f.name === "status");
12212
12760
  const currentStatus = entry?.status || "draft";
12761
+ const workflowState = workflowConfig && workflowMeta ? workflowConfig.states?.find((s) => s.name === workflowMeta.state) : null;
12762
+ const isPublished = workflowState ? !!workflowState.published : currentStatus === "published";
12763
+ const showStatusBadge = workflowConfig ? !!workflowMeta : hasStatus;
12213
12764
  const siteUrl = getSiteUrl(schemas?.admin?.siteUrl);
12214
12765
  const previewUrl = resolvePreviewUrl(schema.admin?.previewUrl, previewData || entry, siteUrl);
12215
12766
  const readAccess = schema.access?.read;
@@ -12262,15 +12813,26 @@ function EditEntryPage() {
12262
12813
  } catch (e) {
12263
12814
  console.warn("Update access eval failed:", e);
12264
12815
  }
12816
+ const auditAccess = schema.access?.readAudit ?? readAccess;
12817
+ let canReadAudit = true;
12818
+ if (auditAccess === false) canReadAudit = false;
12819
+ else if (typeof auditAccess === "string") try {
12820
+ canReadAudit = jexl.evalSync(auditAccess, {
12821
+ user,
12822
+ ...previewData || entry || {}
12823
+ });
12824
+ } catch {
12825
+ canReadAudit = false;
12826
+ }
12265
12827
  const workflowAvailable = !!(workflowConfig && isEdit && workflowMeta);
12266
- const showLivePreview = showPreview && !!previewUrl;
12267
- const showWorkflowSidebar = workflowAvailable && showWorkflow;
12828
+ const showLivePreview = activeTab === "edit" && showPreview && !!previewUrl;
12829
+ const docsToDisplay = debouncedSearchQuery ? siblingEntries?.docs || [] : siblingEntries?.docs?.filter((d) => String(d.id) !== id).slice(0, 4) || [];
12268
12830
  return /* @__PURE__ */ jsx(NestedEditorProvider, {
12269
12831
  drillInEnabled: !!showLivePreview,
12270
12832
  children: /* @__PURE__ */ jsxs("div", {
12271
12833
  className: cn("dy-flex dy-flex-col dy--mt-6 dy--mb-6 dy--mx-4 lg:dy--mt-10 lg:dy--mb-10 lg:dy--mx-6", showLivePreview ? "dy-h-screen" : ""),
12272
12834
  children: [/* @__PURE__ */ jsxs("div", {
12273
- className: "dy-flex dy-shrink-0 dy-items-center dy-gap-2 dy-border-b dy-border-border/50 dy-bg-background dy-px-3 dy-py-2",
12835
+ className: "dy-flex dy-flex-wrap dy-shrink-0 dy-items-center dy-gap-2 dy-border-b dy-border-border/50 dy-bg-background dy-px-3 dy-py-2",
12274
12836
  children: [
12275
12837
  /* @__PURE__ */ jsx(Button, {
12276
12838
  variant: "ghost",
@@ -12282,13 +12844,52 @@ function EditEntryPage() {
12282
12844
  }),
12283
12845
  /* @__PURE__ */ jsxs("div", {
12284
12846
  className: "dy-flex dy-items-center dy-gap-2 dy-min-w-0",
12285
- children: [/* @__PURE__ */ jsx("h1", {
12847
+ children: [isEdit ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
12848
+ className: "dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground dy-mr-0.5",
12849
+ children: "Edit"
12850
+ }), /* @__PURE__ */ jsxs(Popover, {
12851
+ open: switcherOpen,
12852
+ onOpenChange: setSwitcherOpen,
12853
+ children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
12854
+ className: "dy-flex dy-items-center dy-gap-1 dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground hover:dy-bg-muted/80 dy-px-2 dy-py-1 dy-rounded-lg dy-transition-all dy-outline-none dy-min-w-0",
12855
+ children: [/* @__PURE__ */ jsx("span", {
12856
+ className: "dy-truncate dy-max-w-[150px] sm:dy-max-w-none dy-inline-block",
12857
+ children: isEdit && entry ? getEntryTitle(entry, schema) : "..."
12858
+ }), /* @__PURE__ */ jsx(ChevronDown, { className: "dy-h-4 dy-w-4 dy-text-muted-foreground/80 dy-shrink-0" })]
12859
+ }), /* @__PURE__ */ jsx(PopoverContent, {
12860
+ align: "start",
12861
+ className: "dy-w-64 dy-p-0 dy-z-[101]",
12862
+ children: /* @__PURE__ */ jsxs(Command$1, {
12863
+ shouldFilter: false,
12864
+ children: [/* @__PURE__ */ jsx(CommandInput, {
12865
+ placeholder: "Search entries...",
12866
+ value: searchQuery,
12867
+ onValueChange: setSearchQuery
12868
+ }), /* @__PURE__ */ jsx(CommandList, { children: isSiblingsLoading ? /* @__PURE__ */ jsx("div", {
12869
+ className: "dy-py-6 dy-text-center dy-text-sm dy-text-muted-foreground",
12870
+ children: "Loading..."
12871
+ }) : docsToDisplay.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, { children: "No entries found." }) : /* @__PURE__ */ jsx(CommandGroup, { children: docsToDisplay.map((sibling) => /* @__PURE__ */ jsx(CommandItem, {
12872
+ value: sibling.id,
12873
+ onSelect: (val) => {
12874
+ navigate(`/collections/${slug}/edit/${val}`);
12875
+ setSwitcherOpen(false);
12876
+ setSearchQuery("");
12877
+ },
12878
+ className: "dy-cursor-pointer dy-py-2 dy-px-3 dy-rounded-lg",
12879
+ children: /* @__PURE__ */ jsx("span", {
12880
+ className: "dy-text-sm dy-text-foreground",
12881
+ children: getEntryTitle(sibling, schema)
12882
+ })
12883
+ }, sibling.id)) }) })]
12884
+ })
12885
+ })]
12886
+ })] }) : /* @__PURE__ */ jsxs("h1", {
12286
12887
  className: "dy-text-base dy-font-serif dy-font-bold dy-tracking-tight dy-text-foreground dy-truncate",
12287
- children: isEdit ? `Edit ${schema?.labels?.plural || schema?.slug}` : `New ${schema?.labels?.singular || schema?.slug}`
12288
- }), hasStatus && !workflowConfig && /* @__PURE__ */ jsx(Badge, {
12289
- className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0", currentStatus === "published" ? "dy-bg-emerald-100 dy-text-emerald-700 dy-border-emerald-200" : "dy-bg-amber-100 dy-text-amber-700 dy-border-amber-200"),
12888
+ children: ["New ", schema?.labels?.singular || schema?.slug]
12889
+ }), showStatusBadge && /* @__PURE__ */ jsx(Badge, {
12890
+ className: cn("dy-px-2 dy-py-0 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider dy-shrink-0", isPublished ? "dy-bg-emerald-100 dy-text-emerald-700 dy-border-emerald-200" : "dy-bg-amber-100 dy-text-amber-700 dy-border-amber-200"),
12290
12891
  variant: "outline",
12291
- children: currentStatus === "published" ? "Live" : "Draft"
12892
+ children: isPublished ? "Live" : "Draft"
12292
12893
  })]
12293
12894
  }),
12294
12895
  /* @__PURE__ */ jsxs("div", {
@@ -12317,12 +12918,19 @@ function EditEntryPage() {
12317
12918
  }),
12318
12919
  workflowAvailable && /* @__PURE__ */ jsx(HeaderAction, {
12319
12920
  icon: Workflow,
12320
- label: "Workflow",
12321
- active: showWorkflow,
12322
- title: showWorkflow ? "Hide Workflow" : "Show Workflow",
12323
- onClick: () => setShowWorkflow((v) => !v)
12921
+ label: "Versions",
12922
+ active: activeTab === "versions",
12923
+ title: activeTab === "versions" ? "Hide Version History" : "Show Version History",
12924
+ onClick: () => setActiveTab((tab) => tab === "versions" ? "edit" : "versions")
12324
12925
  }),
12325
- previewUrl && /* @__PURE__ */ jsx(HeaderAction, {
12926
+ schema?.audit && isEdit && canReadAudit && /* @__PURE__ */ jsx(HeaderAction, {
12927
+ icon: History,
12928
+ label: "Audit Log",
12929
+ active: activeTab === "audit",
12930
+ title: activeTab === "audit" ? "Hide Audit Log" : "Show Audit Log",
12931
+ onClick: () => setActiveTab((tab) => tab === "audit" ? "edit" : "audit")
12932
+ }),
12933
+ previewUrl && activeTab === "edit" && /* @__PURE__ */ jsx(HeaderAction, {
12326
12934
  icon: showPreview ? Eye : EyeOff,
12327
12935
  label: "Preview",
12328
12936
  active: showPreview,
@@ -12380,45 +12988,65 @@ function EditEntryPage() {
12380
12988
  })]
12381
12989
  })] })]
12382
12990
  })] }),
12383
- (isEdit ? canUpdate : canCreate) && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", { className: "dy-mx-1 dy-h-6 dy-w-px dy-bg-border/60" }), /* @__PURE__ */ jsx(Button, {
12384
- size: "sm",
12385
- className: "dy-h-9 dy-rounded-lg dy-px-4 dy-font-bold dy-bg-primary dy-text-primary-foreground hover:dy-bg-primary/90 dy-shadow-sm dy-shrink-0",
12386
- onClick: () => document.getElementById("dyrected-form-submit")?.click(),
12387
- disabled: saveMutation.isPending,
12388
- title: isEdit ? "Save Changes (⌘S)" : "Create Entry (⌘S)",
12389
- children: saveMutation.isPending ? /* @__PURE__ */ jsxs("span", {
12390
- className: "dy-flex dy-items-center dy-gap-2",
12391
- children: [/* @__PURE__ */ jsx("span", { className: "dy-h-3.5 dy-w-3.5 dy-animate-spin dy-rounded-full dy-border-2 dy-border-current dy-border-t-transparent" }), "Saving…"]
12392
- }) : /* @__PURE__ */ jsxs("span", {
12393
- className: "dy-flex dy-items-center dy-gap-2",
12394
- children: [/* @__PURE__ */ jsx(Save, { className: "dy-h-3.5 dy-w-3.5" }), isEdit ? "Save" : "Create"]
12395
- })
12396
- })] })
12991
+ (isEdit ? canUpdate : canCreate) && activeTab === "edit" && /* @__PURE__ */ jsxs("div", {
12992
+ className: "dy-hidden md:dy-flex dy-items-center",
12993
+ children: [/* @__PURE__ */ jsx("div", { className: "dy-mx-1 dy-h-6 dy-w-px dy-bg-border/60" }), /* @__PURE__ */ jsx(Button, {
12994
+ size: "sm",
12995
+ className: "dy-h-9 dy-rounded-lg dy-px-4 dy-font-bold dy-bg-primary dy-text-primary-foreground hover:dy-bg-primary/90 dy-shadow-sm dy-shrink-0",
12996
+ onClick: () => document.getElementById("dyrected-form-submit")?.click(),
12997
+ disabled: saveMutation.isPending,
12998
+ title: isEdit ? "Save Changes (⌘S)" : "Create Entry (⌘S)",
12999
+ children: saveMutation.isPending ? /* @__PURE__ */ jsxs("span", {
13000
+ className: "dy-flex dy-items-center dy-gap-2",
13001
+ children: [/* @__PURE__ */ jsx("span", { className: "dy-h-3.5 dy-w-3.5 dy-animate-spin dy-rounded-full dy-border-2 dy-border-current dy-border-t-transparent" }), "Saving…"]
13002
+ }) : /* @__PURE__ */ jsxs("span", {
13003
+ className: "dy-flex dy-items-center dy-gap-2",
13004
+ children: [/* @__PURE__ */ jsx(Save, { className: "dy-h-3.5 dy-w-3.5" }), isEdit ? "Save" : "Create"]
13005
+ })
13006
+ })]
13007
+ })
12397
13008
  ]
12398
13009
  })
12399
13010
  ]
12400
13011
  }), /* @__PURE__ */ jsxs("div", {
12401
13012
  className: "dy-flex dy-flex-1 dy-min-h-0",
12402
- children: [
12403
- previewUrl && /* @__PURE__ */ jsx("div", {
12404
- className: cn("dy-border-r dy-border-border/50 dy-bg-muted/5 dy-transition-all dy-duration-500 dy-overflow-hidden lg:dy-block", showLivePreview ? "lg:dy-flex-1 lg:dy-opacity-100" : "lg:dy-w-0 lg:dy-opacity-0 lg:dy-border-r-0", mobilePreview && showLivePreview ? "dy-flex-1 dy-opacity-100" : "dy-hidden"),
12405
- children: /* @__PURE__ */ jsx("div", {
12406
- className: "dy-h-full",
12407
- children: /* @__PURE__ */ jsx(PreviewPaneWithNav, {
12408
- previewUrl,
12409
- data: previewData || entry,
12410
- mode: schema.admin?.previewMode,
12411
- fields: orderedFields,
12412
- active: !!showLivePreview,
12413
- onFieldNavigate: () => setMobilePreview(false)
12414
- })
13013
+ children: [previewUrl && /* @__PURE__ */ jsx("div", {
13014
+ className: cn("dy-border-r dy-border-border/50 dy-bg-muted/5 dy-transition-all dy-duration-500 dy-overflow-hidden lg:dy-block", showLivePreview ? "lg:dy-flex-1 lg:dy-opacity-100" : "lg:dy-w-0 lg:dy-opacity-0 lg:dy-border-r-0", mobilePreview && showLivePreview ? "dy-flex-1 dy-opacity-100" : "dy-hidden"),
13015
+ children: /* @__PURE__ */ jsx("div", {
13016
+ className: "dy-h-full",
13017
+ children: /* @__PURE__ */ jsx(PreviewPaneWithNav, {
13018
+ previewUrl,
13019
+ data: previewData || entry,
13020
+ mode: schema.admin?.previewMode,
13021
+ collectionSlug: slug,
13022
+ documentId: id && id !== "new" ? id : void 0,
13023
+ fields: orderedFields,
13024
+ active: !!showLivePreview,
13025
+ onFieldNavigate: () => setMobilePreview(false)
12415
13026
  })
12416
- }),
12417
- /* @__PURE__ */ jsx("div", {
12418
- className: cn("dy-px-4 dy-py-6 md:dy-px-4 lg:dy-px-4 lg:dy-py-6 dy-transition-all dy-duration-500", showLivePreview ? "dy-flex-none dy-w-full lg:dy-w-2/6 xl:dy-w-2/7 dy-min-w-0 dy-overflow-y-auto" : showWorkflowSidebar ? "dy-flex-1 dy-max-w-3xl xl:dy-max-w-4xl dy-mx-auto dy-w-full dy-overflow-y-auto" : "dy-flex-1 dy-max-w-4xl xl:dy-max-w-5xl dy-mx-auto dy-w-full dy-overflow-y-auto", mobilePreview && showLivePreview ? "dy-hidden lg:dy-block" : ""),
12419
- children: /* @__PURE__ */ jsx("div", {
12420
- className: "dy-space-y-4",
12421
- children: /* @__PURE__ */ jsxs("div", {
13027
+ })
13028
+ }), /* @__PURE__ */ jsx("div", {
13029
+ className: cn("dy-px-4 dy-py-6 md:dy-px-4 lg:dy-px-4 lg:dy-py-6 dy-transition-all dy-duration-500", showLivePreview ? "dy-flex-none dy-w-full lg:dy-w-2/6 xl:dy-w-2/7 dy-min-w-0 dy-overflow-y-auto" : "dy-flex-1 dy-max-w-4xl xl:dy-max-w-5xl dy-mx-auto dy-w-full dy-overflow-y-auto", mobilePreview && showLivePreview ? "dy-hidden lg:dy-block" : ""),
13030
+ children: /* @__PURE__ */ jsxs("div", {
13031
+ className: "dy-space-y-4",
13032
+ children: [
13033
+ activeTab === "versions" && workflowAvailable && /* @__PURE__ */ jsx("div", {
13034
+ className: "dy-animate-in dy-fade-in dy-duration-200 dy-max-w-3xl dy-mx-auto dy-py-6",
13035
+ children: /* @__PURE__ */ jsx(WorkflowPanel, {
13036
+ collection: slug,
13037
+ documentId: id,
13038
+ workflowMeta,
13039
+ workflowConfig
13040
+ })
13041
+ }),
13042
+ activeTab === "audit" && /* @__PURE__ */ jsx("div", {
13043
+ className: "dy-animate-in dy-fade-in dy-duration-200 dy-max-w-3xl dy-mx-auto dy-py-6",
13044
+ children: /* @__PURE__ */ jsx(AuditPanel, {
13045
+ collection: slug,
13046
+ documentId: id
13047
+ })
13048
+ }),
13049
+ activeTab === "edit" && /* @__PURE__ */ jsxs("div", {
12422
13050
  className: "dy-animate-in dy-space-y-8 dy-pb-32",
12423
13051
  children: [
12424
13052
  !canUpdate && isEdit && /* @__PURE__ */ jsxs("div", {
@@ -12599,6 +13227,7 @@ function EditEntryPage() {
12599
13227
  onChange: (dirty) => setIsDirty(dirty),
12600
13228
  isLoading: saveMutation.isPending || isPreferenceLoading,
12601
13229
  submitLabel: isEdit ? "Save Changes" : "Create Entry",
13230
+ hideSubmit: true,
12602
13231
  readOnly: isEdit ? !canUpdate : !canCreate,
12603
13232
  passwordChangeMode: isEdit ? passwordChangeMode : null,
12604
13233
  documentId: id,
@@ -12612,7 +13241,7 @@ function EditEntryPage() {
12612
13241
  className: "dy-hidden"
12613
13242
  }),
12614
13243
  (isDirty || !isEdit) && (isEdit ? canUpdate : canCreate) && /* @__PURE__ */ jsx("div", {
12615
- className: "dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-pointer-events-none",
13244
+ className: "dy-hidden md:dy-block dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-pointer-events-none",
12616
13245
  children: /* @__PURE__ */ jsx("div", {
12617
13246
  className: "dy-pointer-events-auto dy-mx-auto dy-max-w-2xl dy-px-4 dy-pb-4",
12618
13247
  children: /* @__PURE__ */ jsxs("div", {
@@ -12635,25 +13264,158 @@ function EditEntryPage() {
12635
13264
  })]
12636
13265
  })
12637
13266
  })
13267
+ }),
13268
+ (isEdit ? canUpdate : canCreate) && /* @__PURE__ */ jsx("div", {
13269
+ className: "md:dy-hidden dy-sticky dy-bottom-0 dy-left-0 dy-right-0 dy-z-20 dy-border-t dy-border-border dy-bg-background/95 dy-backdrop-blur-sm dy-px-4 dy-py-3",
13270
+ children: /* @__PURE__ */ jsx(Button, {
13271
+ className: "dy-w-full dy-h-11 dy-rounded-xl dy-font-bold dy-bg-primary dy-text-primary-foreground hover:dy-bg-primary/90 dy-shadow-sm",
13272
+ onClick: () => document.getElementById("dyrected-form-submit")?.click(),
13273
+ disabled: saveMutation.isPending || !(isDirty || !isEdit),
13274
+ children: saveMutation.isPending ? /* @__PURE__ */ jsxs("span", {
13275
+ className: "dy-flex dy-items-center dy-gap-2",
13276
+ children: [/* @__PURE__ */ jsx("span", { className: "dy-h-4 dy-w-4 dy-animate-spin dy-border-2 dy-border-current dy-border-t-transparent dy-rounded-full" }), "Saving..."]
13277
+ }) : /* @__PURE__ */ jsxs("span", {
13278
+ className: "dy-flex dy-items-center dy-gap-2",
13279
+ children: [/* @__PURE__ */ jsx(Save, { className: "dy-h-4 dy-w-4" }), isEdit ? "Save Changes" : "Create Entry"]
13280
+ })
13281
+ })
12638
13282
  })
12639
13283
  ]
12640
13284
  })
12641
- })
12642
- }),
12643
- showWorkflowSidebar && /* @__PURE__ */ jsx("div", {
12644
- className: "dy-hidden lg:dy-block dy-w-72 dy-shrink-0 dy-border-l dy-border-border/50 dy-bg-muted/5 dy-px-4 dy-py-8 dy-overflow-y-auto",
12645
- children: /* @__PURE__ */ jsx(WorkflowPanel, {
12646
- collection: slug,
12647
- documentId: id,
12648
- workflowMeta,
12649
- workflowConfig
12650
- })
13285
+ ]
12651
13286
  })
12652
- ]
13287
+ })]
12653
13288
  })]
12654
13289
  }, id || "new")
12655
13290
  });
12656
13291
  }
13292
+ function AuditPanel({ collection, documentId }) {
13293
+ const { client } = useDyrected();
13294
+ const { data: auditData, isLoading } = useQuery({
13295
+ queryKey: [
13296
+ "audit-log",
13297
+ collection,
13298
+ documentId
13299
+ ],
13300
+ queryFn: async () => {
13301
+ return await client.collectionAudit(collection, { where: { documentId } });
13302
+ }
13303
+ });
13304
+ if (isLoading) return /* @__PURE__ */ jsx("div", {
13305
+ className: "dy-flex dy-items-center dy-justify-center dy-py-12",
13306
+ children: /* @__PURE__ */ jsx(Loader2, { className: "dy-h-6 dy-w-6 dy-animate-spin dy-text-muted-foreground" })
13307
+ });
13308
+ const logs = auditData?.docs || [];
13309
+ if (logs.length === 0) return /* @__PURE__ */ jsx("div", {
13310
+ className: "dy-text-center dy-py-12 dy-text-muted-foreground dy-text-sm",
13311
+ children: "No audit logs found for this document."
13312
+ });
13313
+ return /* @__PURE__ */ jsxs("div", {
13314
+ className: "dy-space-y-6",
13315
+ children: [/* @__PURE__ */ jsx("div", {
13316
+ className: "dy-flex dy-items-center dy-justify-between",
13317
+ children: /* @__PURE__ */ jsx("h2", {
13318
+ className: "dy-text-lg dy-font-bold",
13319
+ children: "Audit History"
13320
+ })
13321
+ }), /* @__PURE__ */ jsx("div", {
13322
+ className: "dy-space-y-4",
13323
+ children: logs.map((log) => {
13324
+ let changeDetails = null;
13325
+ try {
13326
+ const parsed = JSON.parse(log.changes);
13327
+ const before = parsed.before || {};
13328
+ const after = parsed.after || {};
13329
+ const diffs = [];
13330
+ const allKeys = Array.from(/* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)]));
13331
+ for (const key of allKeys) {
13332
+ if ([
13333
+ "updatedAt",
13334
+ "updatedBy",
13335
+ "createdAt",
13336
+ "createdBy",
13337
+ "id"
13338
+ ].includes(key)) continue;
13339
+ if (JSON.stringify(before[key]) !== JSON.stringify(after[key])) diffs.push({
13340
+ field: key,
13341
+ from: before[key],
13342
+ to: after[key]
13343
+ });
13344
+ }
13345
+ if (diffs.length > 0) changeDetails = /* @__PURE__ */ jsx("div", {
13346
+ className: "dy-mt-3 dy-overflow-x-auto dy-rounded-lg dy-border dy-border-border/40",
13347
+ children: /* @__PURE__ */ jsxs("table", {
13348
+ className: "dy-w-full dy-text-left dy-text-xs",
13349
+ children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", {
13350
+ className: "dy-bg-muted/40 dy-border-b dy-border-border/40",
13351
+ children: [
13352
+ /* @__PURE__ */ jsx("th", {
13353
+ className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
13354
+ children: "Field"
13355
+ }),
13356
+ /* @__PURE__ */ jsx("th", {
13357
+ className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
13358
+ children: "Before"
13359
+ }),
13360
+ /* @__PURE__ */ jsx("th", {
13361
+ className: "dy-px-3 dy-py-2 dy-font-semibold dy-text-muted-foreground",
13362
+ children: "After"
13363
+ })
13364
+ ]
13365
+ }) }), /* @__PURE__ */ jsx("tbody", {
13366
+ className: "dy-divide-y dy-divide-border/30",
13367
+ children: diffs.map((diff) => /* @__PURE__ */ jsxs("tr", { children: [
13368
+ /* @__PURE__ */ jsx("td", {
13369
+ className: "dy-px-3 dy-py-2 dy-font-mono dy-font-semibold dy-text-foreground",
13370
+ children: diff.field
13371
+ }),
13372
+ /* @__PURE__ */ jsx("td", {
13373
+ className: "dy-px-3 dy-py-2 dy-text-muted-foreground dy-max-w-[200px] dy-truncate",
13374
+ title: JSON.stringify(diff.from),
13375
+ children: diff.from === null || diff.from === void 0 ? /* @__PURE__ */ jsx("span", {
13376
+ className: "dy-italic dy-text-muted-foreground/40",
13377
+ children: "empty"
13378
+ }) : typeof diff.from === "object" ? JSON.stringify(diff.from) : String(diff.from)
13379
+ }),
13380
+ /* @__PURE__ */ jsx("td", {
13381
+ className: "dy-px-3 dy-py-2 dy-text-foreground dy-max-w-[200px] dy-truncate",
13382
+ title: JSON.stringify(diff.to),
13383
+ children: diff.to === null || diff.to === void 0 ? /* @__PURE__ */ jsx("span", {
13384
+ className: "dy-italic dy-text-muted-foreground/40",
13385
+ children: "empty"
13386
+ }) : typeof diff.to === "object" ? JSON.stringify(diff.to) : String(diff.to)
13387
+ })
13388
+ ] }, diff.field))
13389
+ })]
13390
+ })
13391
+ });
13392
+ } catch {}
13393
+ return /* @__PURE__ */ jsxs("div", {
13394
+ className: "dy-p-5 dy-rounded-2xl dy-border dy-border-border/60 dy-bg-card dy-shadow-sm dy-space-y-2",
13395
+ children: [/* @__PURE__ */ jsxs("div", {
13396
+ className: "dy-flex dy-items-center dy-justify-between",
13397
+ children: [/* @__PURE__ */ jsxs("div", {
13398
+ className: "dy-flex dy-items-center dy-gap-2",
13399
+ children: [/* @__PURE__ */ jsx("span", {
13400
+ className: cn("dy-px-2 dy-py-0.5 dy-rounded-full dy-text-[10px] dy-font-bold dy-uppercase dy-tracking-wider", log.operation === "create" ? "dy-bg-emerald-50 dy-text-emerald-700 dy-border dy-border-emerald-200" : log.operation === "delete" ? "dy-bg-red-50 dy-text-red-700 dy-border dy-border-red-200" : "dy-bg-blue-50 dy-text-blue-700 dy-border dy-border-blue-200"),
13401
+ children: log.operation
13402
+ }), /* @__PURE__ */ jsxs("span", {
13403
+ className: "dy-text-xs dy-text-muted-foreground",
13404
+ children: ["by ", /* @__PURE__ */ jsx("span", {
13405
+ className: "dy-font-mono dy-text-foreground",
13406
+ children: log.user || "System"
13407
+ })]
13408
+ })]
13409
+ }), /* @__PURE__ */ jsx("span", {
13410
+ className: "dy-text-xs dy-text-muted-foreground",
13411
+ children: new Date(log.timestamp).toLocaleString()
13412
+ })]
13413
+ }), changeDetails]
13414
+ }, log.id);
13415
+ })
13416
+ })]
13417
+ });
13418
+ }
12657
13419
  //#endregion
12658
13420
  //#region src/components/ui/card.tsx
12659
13421
  var Card = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
@@ -13972,7 +14734,7 @@ function SetupPromptUI({ config }) {
13972
14734
  setCopied(true);
13973
14735
  window.setTimeout(() => setCopied(false), 1800);
13974
14736
  }
13975
- const currentVersion = "2.5.59";
14737
+ const currentVersion = "2.5.62";
13976
14738
  const [latestVersion, setLatestVersion] = useState(() => {
13977
14739
  if (typeof window === "undefined") return null;
13978
14740
  return localStorage.getItem("dyrected_latest_release");
@@ -14146,6 +14908,85 @@ function SetupPromptUI({ config }) {
14146
14908
  });
14147
14909
  }
14148
14910
  //#endregion
14911
+ //#region src/components/document-meta.tsx
14912
+ /** Turn a slug like `blog-posts` into a readable `Blog Posts` fallback. */
14913
+ function humanize(slug) {
14914
+ return slug.split(/[-_]/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
14915
+ }
14916
+ /**
14917
+ * Derive a human page label from the current admin path, e.g. "Posts",
14918
+ * "New Post", "Edit Post", or "Dashboard". Uses the collection/global labels
14919
+ * from the loaded schemas, falling back to a humanized slug.
14920
+ */
14921
+ function pageLabel(pathname, collections, globals) {
14922
+ const segments = pathname.split("/").filter(Boolean);
14923
+ if (segments.length === 0) return "Dashboard";
14924
+ if (segments[0] === "setup") return "Setup";
14925
+ if (segments[0] === "collections" && segments[1]) {
14926
+ const slug = segments[1];
14927
+ const collection = collections.find((c) => c.slug === slug);
14928
+ const singular = collection?.labels?.singular ?? humanize(slug);
14929
+ const plural = collection?.labels?.plural ?? humanize(slug);
14930
+ if (segments[2] === "new") return `New ${singular}`;
14931
+ if (segments[2] === "edit") return `Edit ${singular}`;
14932
+ return plural;
14933
+ }
14934
+ if (segments[0] === "globals" && segments[1]) {
14935
+ const slug = segments[1];
14936
+ return globals.find((g) => g.slug === slug)?.label ?? humanize(slug);
14937
+ }
14938
+ return "";
14939
+ }
14940
+ /**
14941
+ * Keeps the browser tab in sync with the admin: sets `document.title` from the
14942
+ * current page plus `admin.meta.titleSuffix`, updating on every route change,
14943
+ * and applies `admin.branding.favicon` to the page favicon.
14944
+ *
14945
+ * Renders nothing. Must be mounted inside the router (needs `useLocation`) and
14946
+ * inside `DyrectedProvider` (needs the loaded schemas).
14947
+ */
14948
+ function DocumentMeta() {
14949
+ const location = useLocation();
14950
+ const { schemas } = useDyrected();
14951
+ const admin = schemas?.admin;
14952
+ const titleSuffix = admin?.meta?.titleSuffix ?? "- Dyrected";
14953
+ const favicon = admin?.branding?.favicon;
14954
+ const originalTitleRef = useRef(null);
14955
+ useEffect(() => {
14956
+ if (typeof document === "undefined") return;
14957
+ if (originalTitleRef.current === null) originalTitleRef.current = document.title;
14958
+ return () => {
14959
+ if (originalTitleRef.current !== null) document.title = originalTitleRef.current;
14960
+ };
14961
+ }, []);
14962
+ useEffect(() => {
14963
+ if (typeof document === "undefined") return;
14964
+ const next = [pageLabel(location.pathname, schemas?.collections ?? [], schemas?.globals ?? []), titleSuffix].filter(Boolean).join(" ");
14965
+ if (next && document.title !== next) document.title = next;
14966
+ }, [
14967
+ location.pathname,
14968
+ schemas,
14969
+ titleSuffix
14970
+ ]);
14971
+ useEffect(() => {
14972
+ if (typeof document === "undefined" || !favicon) return;
14973
+ let link = document.querySelector("link[rel~=\"icon\"]");
14974
+ const created = !link;
14975
+ if (!link) {
14976
+ link = document.createElement("link");
14977
+ link.rel = "icon";
14978
+ document.head.appendChild(link);
14979
+ }
14980
+ const previousHref = link.getAttribute("href");
14981
+ link.setAttribute("href", favicon);
14982
+ return () => {
14983
+ if (created) link?.remove();
14984
+ else if (previousHref !== null) link?.setAttribute("href", previousHref);
14985
+ };
14986
+ }, [favicon]);
14987
+ return null;
14988
+ }
14989
+ //#endregion
14149
14990
  //#region src/pages/auth/login-page.tsx
14150
14991
  function LoginPage({ collectionSlug, onLogin }) {
14151
14992
  const { client } = useDyrected();
@@ -14907,32 +15748,36 @@ function NavigationSync({ onNavigate }) {
14907
15748
  function AdminRoutes({ onNavigate, isEmbedded = false }) {
14908
15749
  return /* @__PURE__ */ jsx(AuthGate, { children: /* @__PURE__ */ jsxs(AdminShell, {
14909
15750
  isEmbedded,
14910
- children: [/* @__PURE__ */ jsx(NavigationSync, { onNavigate }), /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxs(Routes, { children: [
14911
- /* @__PURE__ */ jsx(Route, {
14912
- path: "/",
14913
- element: /* @__PURE__ */ jsx(Dashboard, {})
14914
- }),
14915
- /* @__PURE__ */ jsx(Route, {
14916
- path: "/collections/:slug",
14917
- element: /* @__PURE__ */ jsx(CollectionRoute, {})
14918
- }),
14919
- /* @__PURE__ */ jsx(Route, {
14920
- path: "/collections/:slug/new",
14921
- element: /* @__PURE__ */ jsx(EditEntryPage, {})
14922
- }),
14923
- /* @__PURE__ */ jsx(Route, {
14924
- path: "/collections/:slug/edit/:id",
14925
- element: /* @__PURE__ */ jsx(EditEntryPage, {})
14926
- }),
14927
- /* @__PURE__ */ jsx(Route, {
14928
- path: "/globals/:slug",
14929
- element: /* @__PURE__ */ jsx(GlobalEditorPage, {})
14930
- }),
14931
- /* @__PURE__ */ jsx(Route, {
14932
- path: "/setup",
14933
- element: /* @__PURE__ */ jsx(SetupPage, {})
14934
- })
14935
- ] }) })]
15751
+ children: [
15752
+ /* @__PURE__ */ jsx(NavigationSync, { onNavigate }),
15753
+ /* @__PURE__ */ jsx(DocumentMeta, {}),
15754
+ /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxs(Routes, { children: [
15755
+ /* @__PURE__ */ jsx(Route, {
15756
+ path: "/",
15757
+ element: /* @__PURE__ */ jsx(Dashboard, {})
15758
+ }),
15759
+ /* @__PURE__ */ jsx(Route, {
15760
+ path: "/collections/:slug",
15761
+ element: /* @__PURE__ */ jsx(CollectionRoute, {})
15762
+ }),
15763
+ /* @__PURE__ */ jsx(Route, {
15764
+ path: "/collections/:slug/new",
15765
+ element: /* @__PURE__ */ jsx(EditEntryPage, {})
15766
+ }),
15767
+ /* @__PURE__ */ jsx(Route, {
15768
+ path: "/collections/:slug/edit/:id",
15769
+ element: /* @__PURE__ */ jsx(EditEntryPage, {})
15770
+ }),
15771
+ /* @__PURE__ */ jsx(Route, {
15772
+ path: "/globals/:slug",
15773
+ element: /* @__PURE__ */ jsx(GlobalEditorPage, {})
15774
+ }),
15775
+ /* @__PURE__ */ jsx(Route, {
15776
+ path: "/setup",
15777
+ element: /* @__PURE__ */ jsx(SetupPage, {})
15778
+ })
15779
+ ] }) })
15780
+ ]
14936
15781
  }) });
14937
15782
  }
14938
15783
  /**