Skip to content

Commit fdb4d1b

Browse files
authored
chore(design-system): upgrade to 3.41.1 + adopt primary token (#989)
* chore(design-system): upgrade to 3.41.1 + adopt primary token across docs Bumps @arcadeai/design-system from 3.39.1 to 3.41.1 and reconciles the docs with two breaking API/visual changes shipped in that range: - 3.40.0 removed the Radix-style `asChild` prop on Button, PopoverTrigger, and DropdownMenuTrigger in favor of Base UI's `render={<Element/>}` API. Migrates 9 call sites across landing-page, references, faq, not-found, challenge-solution, glossary-term, and filters-bar. - 3.41.1 changed `--primary` from Arcade pink to a bright lime. Replaces the 11 hardcoded `#ee175e` / `#ff6b8a` sites with `var(--primary)` via Tailwind utilities (`bg-primary/X`, `text-primary`, `border-primary/X`) so future primary changes propagate without a code edit. Also adopts the design system more broadly: - Migrates several custom `<button>` styles to `<Button variant="…">` where the classes were a clean match (toggle-content → outline, enhanced code block copy → ghost xs). Leaves bespoke ones (search trigger, dark terminal copy, badge X-icons, card a11y wrappers) untouched. - Replaces the half-migrated `buttonVariants({…})`-on-`<Link>` pattern in toolkits-client.tsx and 3 sites in not-found.tsx with proper `<Button render={<Link/>}>` wrappers. - Drops the `text-white` override on every `bg-primary` button — the default variant's `text-primary-foreground` already provides correct near-black contrast against the lime, restoring accessibility on the hero CTA, references CTAs, and FAQ CTA. - Removes the hardcoded blue override on the integrations "Learn how to build a MCP Server" button so the default variant takes over (black-text-on-blue + lime hover bleed-through both fixed). - Replaces `#9089fc` purple in the landing-page decorative gradients and LLM-friendly banner with `primary` at varying alpha for a monochrome lime treatment. Adds two CSS-level wiring fixes in globals.css: - A new `--color-brand-accent` token (registered via `@theme inline`) resolves to `var(--primary)` in dark mode and `oklch(from var(--primary) 0.45 c h)` in light mode, giving a saturated dark green that's readable as text/icons/borders on light surfaces. Used in place of `text-primary` on 9 light-bg sites (quick-start card, footer, references links, LLM banner, landing-page quick links, analytics SignupLink). - An override of Nextra's primary scale (`--x-color-primary-100…800`) that derives every shade from `var(--primary)` via `color-mix`, so the sidebar active state, TOC highlight, accent links, and focus rings follow the design-system primary instead of the stale pink HSL config. Verified: `tsc --noEmit` clean, `pnpm test` 601/601 passing. * fix(design-system): point card hover shadow at --primary Three Framer Motion `whileHover.boxShadow` values were still using the old pink `rgba(238, 23, 94, 0.1)` while the CSS hover border on the same cards now uses `var(--primary)` (lime). On hover, the border glowed lime but the shadow glowed pink — a visible color mismatch. Replaces the literal rgba with `oklch(from var(--primary) l c h / 0.1)` so the glow follows the design-system primary in both light and dark modes. Affects: - app/_components/challenge-solution.tsx - app/_components/quick-start-card.tsx - app/_components/sample-app-card.tsx * style: apply Ultracite formatting to toolkits-client.tsx Inline the @arcadeai/design-system import (fits on one line) and break the inline `render={<Link/>}` JSX across multiple lines per Biome's multi-attribute formatting rule. Fixes the CI lint format check. * fix(logo): drop invert filter, use text-foreground for theme-aware color The new `ArcadeLogo` SVG in @arcadeai/design-system 3.41.x uses `fill="currentColor"`, where the previous version had a hardcoded white fill. The `invert dark:invert-0` filter assumed the latter — flipping white → black in light mode, no-op in dark mode. With currentColor, `invert` rotates whatever color is inherited from the parent, producing an invisible near-white logo on the light-mode navbar's white background. Replaces the filter with `text-foreground`, the design-system token that's already themed (near-black light, near-white dark). The logo now renders correctly in both modes without filter trickery. * fix(cards): move hover shadow from Framer Motion to CSS Framer Motion's color parser decomposes box-shadow values in JS for interpolation and cannot resolve `var()` references or relative-color syntax (`oklch(from …)`) — those are browser-only. The previous commit swapped the rgba pink for `oklch(from var(--primary) l c h / 0.1)` to follow the design-system token, which left the shadow snapping on/off on hover instead of smoothly fading. Moves the shadow to a Tailwind arbitrary-value `hover:shadow-[…]` class on the same motion.div, with `transition-shadow` for a smooth CSS fade. Framer Motion keeps the scale spring on hover/tap — color stays in CSS where it belongs. Affects: - app/_components/quick-start-card.tsx - app/_components/sample-app-card.tsx - app/_components/challenge-solution.tsx
1 parent 35ccdd1 commit fdb4d1b

18 files changed

Lines changed: 836 additions & 1801 deletions

app/_components/analytics.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const SignupLink = ({
4040

4141
return (
4242
<Link
43-
className={cn("text-primary", className)}
43+
className={cn("text-brand-accent", className)}
4444
href={buildRegisterHref(utmCampaign, utmMedium)}
4545
onClick={() => trackSignupClick(linkLocation)}
4646
>

app/_components/challenge-solution.tsx

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,8 @@ export function ChallengeSolution({
3131
}: ChallengeSolutionProps) {
3232
return (
3333
<motion.div
34-
className="group"
35-
whileHover={{
36-
scale: 1.01,
37-
boxShadow: "0 0 20px 0 rgba(238, 23, 94, 0.1)",
38-
}}
34+
className="group transition-shadow hover:shadow-[0_0_20px_0_oklch(from_var(--primary)_l_c_h_/_0.1)]"
35+
whileHover={{ scale: 1.01 }}
3936
whileTap={{ scale: 0.98 }}
4037
>
4138
<Card className="h-full overflow-hidden border-zinc-700 bg-[rgba(17,17,17,0.8)] backdrop-blur-xs">
@@ -78,16 +75,16 @@ export function ChallengeSolution({
7875
{solution.description}
7976
</p>
8077
<Button
81-
asChild
8278
className="h-auto p-0 pt-1.5 text-zinc-400 hover:text-zinc-300"
79+
render={
80+
<Link
81+
className="flex items-center gap-1.5"
82+
href={solution.href}
83+
/>
84+
}
8385
variant="link"
8486
>
85-
<Link
86-
className="flex items-center gap-1.5"
87-
href={solution.href}
88-
>
89-
Learn more <ExternalLink className="h-4 w-4" />
90-
</Link>
87+
Learn more <ExternalLink className="h-4 w-4" />
9188
</Button>
9289
</div>
9390
</div>

app/_components/enhanced-code-block.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use client";
22

3+
import { Button } from "@arcadeai/design-system";
34
import { Copy, FileText } from "lucide-react";
45
import type React from "react";
56

@@ -62,8 +63,7 @@ const EnhancedCodeBlock: React.FC<EnhancedCodeBlockProps> = ({
6263
{displayName}
6364
</span>
6465
</div>
65-
<button
66-
className="flex cursor-pointer items-center gap-1 rounded px-2 py-1 text-gray-600 text-xs transition-colors hover:bg-gray-200 hover:text-gray-800 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200"
66+
<Button
6767
onClick={async () => {
6868
try {
6969
await navigator.clipboard.writeText(children);
@@ -81,11 +81,12 @@ const EnhancedCodeBlock: React.FC<EnhancedCodeBlockProps> = ({
8181
document.body.removeChild(textArea);
8282
}
8383
}}
84-
type="button"
84+
size="xs"
85+
variant="ghost"
8586
>
86-
<Copy className="h-3 w-3" />
87+
<Copy />
8788
Copy
88-
</button>
89+
</Button>
8990
</div>
9091

9192
{/* Code Content */}

app/_components/footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ const ResourceCol: React.FC<ResourceColProps> = ({ title, resources }) => (
8585
{resources?.map((resource) => (
8686
<li key={resource.url}>
8787
<a
88-
className="text-gray-500 no-underline transition-colors duration-150 ease-in-out hover:text-primary"
88+
className="text-gray-500 no-underline transition-colors duration-150 ease-in-out hover:text-brand-accent"
8989
href={resource.url}
9090
rel="noreferrer"
9191
target={resource.external ? "_blank" : "_self"}

app/_components/glossary-term.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,13 @@ export function GlossaryTerm({
3636

3737
return (
3838
<Popover onOpenChange={setOpen} open={open}>
39-
<PopoverTrigger asChild>
40-
<button
41-
className="cursor-help border-gray-400 border-b border-dotted bg-transparent p-0 font-inherit text-inherit transition-colors hover:border-gray-600 dark:border-gray-600 dark:hover:border-gray-400"
42-
onMouseEnter={() => setOpen(true)}
43-
onMouseLeave={() => setOpen(false)}
44-
type="button"
45-
>
46-
{displayText}
47-
</button>
39+
<PopoverTrigger
40+
className="cursor-help border-gray-400 border-b border-dotted bg-transparent p-0 font-inherit text-inherit transition-colors hover:border-gray-600 dark:border-gray-600 dark:hover:border-gray-400"
41+
onMouseEnter={() => setOpen(true)}
42+
onMouseLeave={() => setOpen(false)}
43+
type="button"
44+
>
45+
{displayText}
4846
</PopoverTrigger>
4947
<PopoverContent
5048
align="center"

app/_components/logo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function Logo() {
77
return (
88
<>
99
<div className="mr-2 hidden w-40 flex-row lg:flex lg:items-end lg:gap-2.5">
10-
<ArcadeLogo className="h-7 w-auto invert dark:invert-0" />
10+
<ArcadeLogo className="h-7 w-auto text-foreground" />
1111
{/* <Badge
1212
className="relative top-0.5 font-medium font-mono text-xs"
1313
variant="outline"

app/_components/quick-start-card.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ export function QuickStartCard({
4949
const content = (
5050
<>
5151
<CardHeader className="flex flex-row items-center gap-3 p-4 min-[1062px]:p-6">
52-
<div className="rounded-full bg-[#ee175e]/10 p-2">
53-
<Icon className="h-5 w-5 text-[#ee175e]" />
52+
<div className="rounded-full bg-brand-accent/10 p-2">
53+
<Icon className="h-5 w-5 text-brand-accent" />
5454
</div>
5555
<CardTitle className="text-gray-900 text-xl tracking-tight dark:text-white">
5656
{title}
@@ -102,7 +102,7 @@ export function QuickStartCard({
102102
</pre>
103103
)}
104104
{isClickable && (
105-
<div className="mt-4 flex items-center justify-end font-medium text-[#ee175e] text-sm">
105+
<div className="mt-4 flex items-center justify-end font-medium text-brand-accent text-sm">
106106
Learn more
107107
<ArrowRight className="ml-1 h-4 w-4 transition-transform group-hover:translate-x-1" />
108108
</div>
@@ -143,14 +143,11 @@ export function QuickStartCard({
143143

144144
return (
145145
<motion.div
146-
className="h-full"
147-
whileHover={{
148-
scale: 1.02,
149-
boxShadow: "0 0 20px 0 rgba(238, 23, 94, 0.1)",
150-
}}
146+
className="h-full transition-shadow hover:shadow-[0_0_20px_0_oklch(from_var(--primary)_l_c_h_/_0.1)]"
147+
whileHover={{ scale: 1.02 }}
151148
whileTap={{ scale: 0.98 }}
152149
>
153-
<Card className="h-full border-gray-200 bg-white/80 backdrop-blur-xs transition-all hover:border-[#ee175e]/30 dark:border-gray-700 dark:bg-[rgba(17,17,17,0.8)]">
150+
<Card className="h-full border-gray-200 bg-white/80 backdrop-blur-xs transition-all hover:border-primary/30 dark:border-gray-700 dark:bg-[rgba(17,17,17,0.8)]">
154151
{wrapper}
155152
</Card>
156153
</motion.div>

app/_components/sample-app-card.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,8 @@ export function SampleAppCard({
3434

3535
return (
3636
<motion.div
37-
whileHover={{
38-
scale: 1.02,
39-
boxShadow: "0 0 20px 0 rgba(238, 23, 94, 0.1)",
40-
}}
37+
className="transition-shadow hover:shadow-[0_0_20px_0_oklch(from_var(--primary)_l_c_h_/_0.1)]"
38+
whileHover={{ scale: 1.02 }}
4139
whileTap={{ scale: 0.98 }}
4240
>
4341
<Link
@@ -46,7 +44,7 @@ export function SampleAppCard({
4644
onClick={handleClick}
4745
target={blank ? "_blank" : undefined}
4846
>
49-
<Card className="h-full border-gray-200 bg-white/80 backdrop-blur-xs transition-all hover:border-[#ee175e]/30 dark:border-gray-700 dark:bg-[rgba(17,17,17,0.8)]">
47+
<Card className="h-full border-gray-200 bg-white/80 backdrop-blur-xs transition-all hover:border-primary/30 dark:border-gray-700 dark:bg-[rgba(17,17,17,0.8)]">
5048
<CardContent className="p-0">
5149
{image && (
5250
<div className="relative aspect-video w-full overflow-hidden rounded-t-lg bg-gray-100 dark:bg-gray-800">

app/_components/toggle-content.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"use client";
2+
import { Button } from "@arcadeai/design-system";
23
import { useState } from "react";
34

45
type ToggleContentProps = {
@@ -20,13 +21,9 @@ const ToggleContent: React.FC<ToggleContentProps> = ({
2021

2122
return (
2223
<div>
23-
<button
24-
className="mb-4 cursor-pointer rounded-md border border-border bg-card px-3 py-2 font-normal text-card-foreground transition-colors duration-200 ease-in-out hover:bg-muted hover:text-muted-foreground"
25-
onClick={handleToggle}
26-
type="button"
27-
>
24+
<Button className="mb-4" onClick={handleToggle} variant="outline">
2825
{isExpanded ? hideText : showText}
29-
</button>
26+
</Button>
3027
{isExpanded && <div>{children}</div>}
3128
</div>
3229
);

app/en/home/landing-page.tsx

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ export function LandingPage() {
214214
className="-top-24 -z-10 sm:-top-40 absolute inset-x-0 transform-gpu overflow-hidden blur-3xl"
215215
>
216216
<div
217-
className="-translate-x-1/2 relative left-[calc(50%-11rem)] aspect-1155/678 w-sm rotate-30 bg-linear-to-tr from-[#ee175e] to-[#9089fc] opacity-20 sm:left-[calc(50%-30rem)] sm:w-3xl"
217+
className="-translate-x-1/2 relative left-[calc(50%-11rem)] aspect-1155/678 w-sm rotate-30 bg-linear-to-tr from-primary to-primary/30 opacity-20 sm:left-[calc(50%-30rem)] sm:w-3xl"
218218
style={{
219219
clipPath:
220220
"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)",
@@ -254,37 +254,37 @@ export function LandingPage() {
254254
}}
255255
>
256256
<Button
257-
asChild
258-
className="h-12 bg-primary px-6 text-white hover:bg-primary/90"
257+
className="h-12 px-6"
258+
render={
259+
<Link
260+
href="/get-started/quickstarts/call-tool-agent"
261+
onClick={trackClick(
262+
"hero_get_started_clicked",
263+
"/get-started/quickstarts/call-tool-agent"
264+
)}
265+
/>
266+
}
259267
size="lg"
260268
>
261-
<Link
262-
href="/get-started/quickstarts/call-tool-agent"
263-
onClick={trackClick(
264-
"hero_get_started_clicked",
265-
"/get-started/quickstarts/call-tool-agent"
266-
)}
267-
>
268-
<Rocket className="mr-2 h-5 w-5" />
269-
Get Started
270-
</Link>
269+
<Rocket className="mr-2 h-5 w-5" />
270+
Get Started
271271
</Button>
272272
<Button
273-
asChild
274-
className="h-12 border-gray-900 bg-transparent px-6 text-gray-900 hover:bg-gray-900 hover:text-white dark:border-white dark:text-white dark:hover:bg-white dark:hover:text-gray-900"
273+
className="h-12 px-6"
274+
render={
275+
<Link
276+
href={INTEGRATIONS_PAGE_HREF}
277+
onClick={trackClick(
278+
"hero_explore_tools_clicked",
279+
INTEGRATIONS_PAGE_HREF
280+
)}
281+
/>
282+
}
275283
size="lg"
276284
variant="outline"
277285
>
278-
<Link
279-
href={INTEGRATIONS_PAGE_HREF}
280-
onClick={trackClick(
281-
"hero_explore_tools_clicked",
282-
INTEGRATIONS_PAGE_HREF
283-
)}
284-
>
285-
<Puzzle className="mr-2 h-5 w-5" />
286-
Explore Tools
287-
</Link>
286+
<Puzzle className="mr-2 h-5 w-5" />
287+
Explore Tools
288288
</Button>
289289
</motion.div>
290290
</div>
@@ -294,7 +294,7 @@ export function LandingPage() {
294294
{/* LLM-friendly docs banner (desktop only) */}
295295
<div className="flex justify-center px-4">
296296
<Link
297-
className="group inline-flex items-center gap-2.5 rounded-full border border-[#ee175e]/30 bg-gradient-to-r from-[#ee175e]/10 to-[#9089fc]/10 px-5 py-2 font-medium text-[#ee175e] text-sm shadow-sm transition-all hover:border-[#ee175e]/50 hover:shadow-md hover:shadow-[#ee175e]/10 dark:border-[#ee175e]/40 dark:from-[#ee175e]/15 dark:to-[#9089fc]/15 dark:text-[#ff6b8a]"
297+
className="group inline-flex items-center gap-2.5 rounded-full border border-brand-accent/30 bg-gradient-to-r from-brand-accent/10 to-brand-accent/5 px-5 py-2 font-medium text-brand-accent text-sm shadow-sm transition-all hover:border-brand-accent/50 hover:shadow-md hover:shadow-brand-accent/10 dark:border-primary/40 dark:from-primary/15 dark:to-primary/5"
298298
href="/get-started/setup/connect-arcade-docs"
299299
onClick={trackClick(
300300
"llm_banner_clicked",
@@ -447,20 +447,20 @@ export function LandingPage() {
447447
</p>
448448
</div>
449449
<Button
450-
asChild
451450
className="mt-4 min-[1062px]:mt-0"
451+
render={
452+
<Link
453+
href={INTEGRATIONS_PAGE_HREF}
454+
onClick={trackClick(
455+
"view_all_integrations_clicked",
456+
INTEGRATIONS_PAGE_HREF
457+
)}
458+
/>
459+
}
452460
variant="outline"
453461
>
454-
<Link
455-
href={INTEGRATIONS_PAGE_HREF}
456-
onClick={trackClick(
457-
"view_all_integrations_clicked",
458-
INTEGRATIONS_PAGE_HREF
459-
)}
460-
>
461-
See all 7,000+
462-
<ArrowRight className="ml-2 h-4 w-4" />
463-
</Link>
462+
See all 7,000+
463+
<ArrowRight className="ml-2 h-4 w-4" />
464464
</Button>
465465
</div>
466466
<div className="space-y-4">
@@ -613,20 +613,20 @@ export function LandingPage() {
613613
</p>
614614
</div>
615615
<Button
616-
asChild
617616
className="mt-4 min-[1062px]:mt-0"
617+
render={
618+
<Link
619+
href="/resources/examples"
620+
onClick={trackClick(
621+
"view_all_examples_clicked",
622+
"/resources/examples"
623+
)}
624+
/>
625+
}
618626
variant="outline"
619627
>
620-
<Link
621-
href="/resources/examples"
622-
onClick={trackClick(
623-
"view_all_examples_clicked",
624-
"/resources/examples"
625-
)}
626-
>
627-
See all examples
628-
<ArrowRight className="ml-2 h-4 w-4" />
629-
</Link>
628+
See all examples
629+
<ArrowRight className="ml-2 h-4 w-4" />
630630
</Button>
631631
</div>
632632
<div className="grid grid-cols-1 gap-8 min-[1062px]:grid-cols-3">
@@ -660,15 +660,15 @@ export function LandingPage() {
660660
</div>
661661
<div className="flex flex-wrap justify-center gap-6">
662662
<Link
663-
className="flex items-center gap-2 text-gray-600 hover:text-primary dark:text-gray-400 dark:hover:text-primary"
663+
className="flex items-center gap-2 text-gray-600 hover:text-brand-accent dark:text-gray-400 dark:hover:text-brand-accent"
664664
href="/references/api"
665665
onClick={trackClick("quick_link_api_clicked", "/references/api")}
666666
>
667667
<BookOpen className="h-5 w-5" />
668668
<span className="font-medium">API Reference</span>
669669
</Link>
670670
<Link
671-
className="flex items-center gap-2 text-gray-600 hover:text-primary dark:text-gray-400 dark:hover:text-primary"
671+
className="flex items-center gap-2 text-gray-600 hover:text-brand-accent dark:text-gray-400 dark:hover:text-brand-accent"
672672
href="/references/cli-cheat-sheet"
673673
onClick={trackClick(
674674
"quick_link_cli_clicked",
@@ -679,15 +679,15 @@ export function LandingPage() {
679679
<span className="font-medium">CLI Cheat Sheet</span>
680680
</Link>
681681
<Link
682-
className="flex items-center gap-2 text-gray-600 hover:text-primary dark:text-gray-400 dark:hover:text-primary"
682+
className="flex items-center gap-2 text-gray-600 hover:text-brand-accent dark:text-gray-400 dark:hover:text-brand-accent"
683683
href="/resources/faq"
684684
onClick={trackClick("quick_link_faq_clicked", "/resources/faq")}
685685
>
686686
<HelpCircle className="h-5 w-5" />
687687
<span className="font-medium">FAQ</span>
688688
</Link>
689689
<Link
690-
className="flex items-center gap-2 text-gray-600 hover:text-primary dark:text-gray-400 dark:hover:text-primary"
690+
className="flex items-center gap-2 text-gray-600 hover:text-brand-accent dark:text-gray-400 dark:hover:text-brand-accent"
691691
href="/references/changelog"
692692
onClick={trackClick(
693693
"quick_link_changelog_clicked",
@@ -707,7 +707,7 @@ export function LandingPage() {
707707
className="-z-10 absolute inset-x-0 top-[calc(100%-13rem)] transform-gpu overflow-hidden blur-3xl sm:top-[calc(100%-30rem)]"
708708
>
709709
<div
710-
className="-translate-x-1/2 relative left-[calc(50%+3rem)] aspect-1155/678 w-sm bg-linear-to-tr from-[#ee175e] to-[#9089fc] opacity-20 sm:left-[calc(50%+36rem)] sm:w-3xl"
710+
className="-translate-x-1/2 relative left-[calc(50%+3rem)] aspect-1155/678 w-sm bg-linear-to-tr from-primary to-primary/30 opacity-20 sm:left-[calc(50%+36rem)] sm:w-3xl"
711711
style={{
712712
clipPath:
713713
"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)",

0 commit comments

Comments
 (0)