Compare commits

9 Commits
main ... main2

Author SHA1 Message Date
YoRHa
9aa9e44295 大改变 2026-02-03 19:56:21 +08:00
4b13d255bc fix: change product cards layout from vertical to horizontal
Changed product cards container from flex-col to flex-row to match
prototype design where 3 cards are displayed horizontally side by side.

Before: Cards stacked vertically (top to bottom)
After: Cards arranged horizontally (left to right)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 05:37:30 +00:00
b98500e61f feat: refactor Product page to match prototype design
Redesigned ProductCard and Product page based on original prototype:

ProductCard Component:
- Added gradient background matching prototype style
- Copied all SVG icons from prototype (US flags, HK flag, etc.)
- Implemented proper icon display with white background container
- Added category color variants (blue, green, purple)
- Risk level indicators with accurate colors
- Styled progress bar matching prototype
- Proper spacing and typography from CSS

Visual Elements:
- Radial gradient backgrounds on cards
- Glass-morphism effect with transparency
- Shadow and border effects from prototype
- Icon container with white background and shadow ring
- Category badges with colored backgrounds

Assets Added:
- frame-9230.svg, frame-9231.svg (US flag icons)
- hk0.svg (HK flag icon)
- chart-square1.svg
- All component SVG files from prototype
- View toggle icons

Styling:
- Followed prototype's style.css specifications
- Maintained exact color values and gradients
- Proper border radius and spacing
- Typography matching prototype

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 05:35:08 +00:00
4c86b7cce1 feat: add Products navigation button to sidebar
- Added new "Products" navigation item in sidebar
- Links to /product page (product listing)
- "Assets" button now links to / (product detail page)
- Added i18n support for "products" label (EN: Products, ZH: 产品)

Navigation structure:
- Assets → / (Product detail page)
- Products → /product (Product listing page)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 04:57:24 +00:00
2d3b83fbaf feat: add navigation links to sidebar
- Updated NavItem to use Next.js Link component
- Changed from onClick to href for proper routing
- Added usePathname to detect current route
- Assets navigation now links to /product page
- Active state automatically highlights based on current path
- Added dark mode hover states

Navigation:
- Click "Assets" in sidebar to view Product page
- Automatic active highlighting on current page
- Smooth client-side navigation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 04:31:01 +00:00
f3b0c0db6e feat: implement Product page with fund listing
Created a complete Product page based on prototype design with:

Page Features:
- New /product route with full page layout
- AssetX Fund Market title section
- 4 statistics cards (TVL, Cumulative Yield, Balance, Earnings)
- Assets listing section with view toggle (list/grid)
- Product cards grid layout

ProductCard Component:
- Reusable product card component with HeroUI integration
- Product header with icon and category badge
- Two-column metric display (Yield APY, Pool Cap, Maturity, etc.)
- Risk indicator with color-coded bars (Low/Medium/High)
- Pool capacity progress bar with gradient
- Invest button with HeroUI Button component
- Hover effects and transitions
- Color-coded category badges (Quant Strategy, Real Estate)

Assets:
- Copied view toggle icons from prototype
- edit-list-unordered0.svg (list view)
- menu-more-grid-small0.svg (grid view)

Internationalization:
- Added productPage section to en.json and zh.json
- All labels translated (English and Chinese)
- Consistent with existing i18n pattern

Technical Implementation:
- Full responsive design
- Dark mode support
- Gradient styling for visual appeal
- Smooth animations and transitions
- Proper TypeScript types
- Follows existing design system

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 04:11:58 +00:00
16aa079cba fix: remove input styles to match design system
- Replaced HeroUI Input with native input element
- Removed number input spin buttons (up/down arrows)
- Removed all backgrounds, borders, and shadows
- Removed focus outline for seamless integration
- Input now appears as plain text until clicked
- Maintains right-aligned text and placeholder styling

CSS techniques used:
- [appearance:textfield] for Firefox
- [&::-webkit-*-spin-button]:appearance-none for Chrome/Safari
- bg-transparent, border-none, outline-none for clean look

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 04:01:30 +00:00
f190d6c4c0 fix: add functional input field to MintSwapPanel
- Added HeroUI Input component for amount entry
- Replaced static text with editable input field
- Added state management for amount value
- Updated MAX button to use HeroUI Button and set max value
- Input now displays right-aligned with proper styling
- Shows USD equivalent below input

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 04:00:08 +00:00
9e0dd1d278 feat: integrate HeroUI component library
Implemented HeroUI migration plan with the following changes:

Stage 0: Environment Setup
- Installed @heroui/react@2.8.7, @heroui/theme@2.4.26, framer-motion@12.29.2
- Configured Tailwind with HeroUI plugin
- Added HeroUI content paths to Tailwind config

Stage 1: Provider Architecture
- Created Providers.tsx wrapper combining HeroUIProvider and AppProvider
- Updated app/layout.tsx to use new Providers component
- Preserved all AppContext functionality (theme, language, translations)

Stage 2: Component Migrations
- TabNavigation: Migrated to HeroUI Tabs with keyboard navigation support
- TopBar: Migrated buttons to HeroUI Button components
- LanguageSwitch: Migrated to HeroUI Dropdown for better UX
- ThemeSwitch: Migrated to HeroUI Button (isIconOnly variant)
- MintSwapPanel: Migrated to HeroUI Tabs and Button components

Benefits:
- Enhanced accessibility with ARIA attributes and keyboard navigation
- Smooth animations and transitions via Framer Motion
- Consistent component API across the application
- Maintained all existing design tokens and color system
- Preserved dark mode functionality

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 03:49:53 +00:00
63 changed files with 12057 additions and 12057 deletions

View File

@@ -1,35 +1,35 @@
import type { Metadata } from "next"; import type { Metadata } from "next";
import { Inter, JetBrains_Mono } from "next/font/google"; import { Inter, JetBrains_Mono } from "next/font/google";
import "./globals.css"; import "./globals.css";
import { Providers } from "@/components/Providers"; import { Providers } from "@/components/Providers";
const inter = Inter({ const inter = Inter({
subsets: ["latin"], subsets: ["latin"],
weight: ["400", "500", "700", "800"], weight: ["400", "500", "700", "800"],
variable: "--font-inter", variable: "--font-inter",
}); });
const jetbrainsMono = JetBrains_Mono({ const jetbrainsMono = JetBrains_Mono({
subsets: ["latin"], subsets: ["latin"],
weight: ["500", "700", "800"], weight: ["500", "700", "800"],
variable: "--font-jetbrains", variable: "--font-jetbrains",
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
title: "AssetX Dashboard", title: "AssetX Dashboard",
description: "DeFi Asset Management Platform", description: "DeFi Asset Management Platform",
}; };
export default function RootLayout({ export default function RootLayout({
children, children,
}: Readonly<{ }: Readonly<{
children: React.ReactNode; children: React.ReactNode;
}>) { }>) {
return ( return (
<html lang="en" suppressHydrationWarning> <html lang="en" suppressHydrationWarning>
<body className={`${inter.variable} ${jetbrainsMono.variable} ${inter.className}`}> <body className={`${inter.variable} ${jetbrainsMono.variable} ${inter.className}`}>
<Providers>{children}</Providers> <Providers>{children}</Providers>
</body> </body>
</html> </html>
); );
} }

View File

@@ -1,101 +1,101 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function APYHistoryCard() { export default function APYHistoryCard() {
const { t } = useApp(); const { t } = useApp();
const [activeTab, setActiveTab] = useState<"apy" | "price">("apy"); const [activeTab, setActiveTab] = useState<"apy" | "price">("apy");
// 橙色渐变条形图数据 // 橙色渐变条形图数据
const chartData = [ const chartData = [
{ height: 85, color: "#ffe9dc" }, { height: 85, color: "#ffe9dc" },
{ height: 93, color: "#ffc9ad" }, { height: 93, color: "#ffc9ad" },
{ height: 100, color: "#ffc9ad" }, { height: 100, color: "#ffc9ad" },
{ height: 105, color: "#ffba96" }, { height: 105, color: "#ffba96" },
{ height: 108, color: "#ffa67e" }, { height: 108, color: "#ffa67e" },
{ height: 116, color: "#f48d5f" }, { height: 116, color: "#f48d5f" },
{ height: 124, color: "#ff6900" }, { height: 124, color: "#ff6900" },
{ height: 127, color: "#f35b00" }, { height: 127, color: "#f35b00" },
{ height: 139, color: "#d64700" }, { height: 139, color: "#d64700" },
]; ];
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-6 flex flex-col gap-6"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-6 flex flex-col gap-6">
{/* Tabs */} {/* Tabs */}
<div className="flex gap-6 border-b border-border-gray dark:border-gray-700"> <div className="flex gap-6 border-b border-border-gray dark:border-gray-700">
<button <button
onClick={() => setActiveTab("apy")} onClick={() => setActiveTab("apy")}
className={`pb-3 px-1 text-body-small font-bold transition-colors ${ className={`pb-3 px-1 text-body-small font-bold transition-colors ${
activeTab === "apy" activeTab === "apy"
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]" ? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
: "text-text-tertiary dark:text-gray-400" : "text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("apy.apyHistory")} {t("apy.apyHistory")}
</button> </button>
<button <button
onClick={() => setActiveTab("price")} onClick={() => setActiveTab("price")}
className={`pb-3 px-1 text-body-small font-bold transition-colors ${ className={`pb-3 px-1 text-body-small font-bold transition-colors ${
activeTab === "price" activeTab === "price"
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]" ? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
: "text-text-tertiary dark:text-gray-400" : "text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("apy.priceHistory")} {t("apy.priceHistory")}
</button> </button>
</div> </div>
{/* Chart Area */} {/* Chart Area */}
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400"> <span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
{t("apy.lastDays")} {t("apy.lastDays")}
</span> </span>
</div> </div>
{/* Orange Gradient Chart */} {/* Orange Gradient Chart */}
<div <div
className="flex items-end gap-4 w-full border-b border-border-gray dark:border-gray-700" className="flex items-end gap-4 w-full border-b border-border-gray dark:border-gray-700"
style={{ style={{
height: "140px", height: "140px",
background: background:
"linear-gradient(0deg, rgba(255, 247, 237, 0.5) 0%, rgba(255, 247, 237, 0) 100%)", "linear-gradient(0deg, rgba(255, 247, 237, 0.5) 0%, rgba(255, 247, 237, 0) 100%)",
}} }}
> >
{chartData.map((bar, index) => ( {chartData.map((bar, index) => (
<div <div
key={index} key={index}
className="flex-1" className="flex-1"
style={{ style={{
height: `${bar.height}px`, height: `${bar.height}px`,
backgroundColor: bar.color, backgroundColor: bar.color,
borderRadius: "2px 2px 0px 0px", borderRadius: "2px 2px 0px 0px",
}} }}
/> />
))} ))}
</div> </div>
{/* Stats */} {/* Stats */}
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400"> <span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
{t("apy.highest")} {t("apy.highest")}
</span> </span>
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
24.8% 24.8%
</span> </span>
</div> </div>
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400"> <span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
{t("apy.lowest")} {t("apy.lowest")}
</span> </span>
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
18.2% 18.2%
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,237 +1,237 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface VerificationCardProps { interface VerificationCardProps {
icon: string; icon: string;
title: string; title: string;
description: string; description: string;
buttonText: string; buttonText: string;
} }
function VerificationCard({ icon, title, description, buttonText }: VerificationCardProps) { function VerificationCard({ icon, title, description, buttonText }: VerificationCardProps) {
return ( return (
<div className="flex-1 bg-bg-surface dark:bg-gray-700 rounded-2xl border border-border-normal dark:border-gray-600 p-6 flex flex-col justify-between"> <div className="flex-1 bg-bg-surface dark:bg-gray-700 rounded-2xl border border-border-normal dark:border-gray-600 p-6 flex flex-col justify-between">
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<div className="w-5 h-5 flex-shrink-0"> <div className="w-5 h-5 flex-shrink-0">
<Image src={icon} alt={title} width={20} height={20} /> <Image src={icon} alt={title} width={20} height={20} />
</div> </div>
<div className="flex flex-col gap-1"> <div className="flex flex-col gap-1">
<h4 className="text-body-default font-bold text-text-primary dark:text-white"> <h4 className="text-body-default font-bold text-text-primary dark:text-white">
{title} {title}
</h4> </h4>
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
{description} {description}
</p> </p>
</div> </div>
</div> </div>
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-[118px]"> <button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-[118px]">
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400"> <span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
{buttonText} {buttonText}
</span> </span>
<Image src="/component-118.svg" alt="" width={16} height={16} /> <Image src="/component-118.svg" alt="" width={16} height={16} />
</button> </button>
</div> </div>
); );
} }
export default function AssetCustodyVerification() { export default function AssetCustodyVerification() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="flex flex-col gap-8 w-full"> <div className="flex flex-col gap-8 w-full">
{/* Header */} {/* Header */}
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<h2 className="text-body-large font-bold text-text-primary dark:text-white"> <h2 className="text-body-large font-bold text-text-primary dark:text-white">
{t("custody.title")} {t("custody.title")}
</h2> </h2>
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400"> <p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
{t("custody.description")} {t("custody.description")}
</p> </p>
</div> </div>
{/* Holdings Table Card */} {/* Holdings Table Card */}
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
{/* Table Header */} {/* Table Header */}
<div className="flex flex-col gap-6 pb-6 border-b border-border-gray dark:border-gray-700"> <div className="flex flex-col gap-6 pb-6 border-b border-border-gray dark:border-gray-700">
<div className="flex flex-col gap-1"> <div className="flex flex-col gap-1">
<h3 className="text-body-default font-bold text-text-primary dark:text-white"> <h3 className="text-body-default font-bold text-text-primary dark:text-white">
{t("custody.underlyingHoldings")} {t("custody.underlyingHoldings")}
</h3> </h3>
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
{t("custody.verifiedBy")} {t("custody.verifiedBy")}
</p> </p>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Image src="/component-115.svg" alt="" width={16} height={16} /> <Image src="/component-115.svg" alt="" width={16} height={16} />
<span className="text-caption-tiny font-medium text-[#9ca1af] dark:text-gray-400"> <span className="text-caption-tiny font-medium text-[#9ca1af] dark:text-gray-400">
{t("custody.lastUpdated")}: 2 {t("custody.minutesAgo")} {t("custody.lastUpdated")}: 2 {t("custody.minutesAgo")}
</span> </span>
</div> </div>
</div> </div>
{/* Table */} {/* Table */}
<div className="flex flex-col"> <div className="flex flex-col">
{/* Table Header Row */} {/* Table Header Row */}
<div className="grid grid-cols-5 gap-4 pb-4 border-b border-border-gray dark:border-gray-700"> <div className="grid grid-cols-5 gap-4 pb-4 border-b border-border-gray dark:border-gray-700">
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400"> <div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
{t("custody.custodian")} {t("custody.custodian")}
</div> </div>
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400"> <div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
{t("custody.assetType")} {t("custody.assetType")}
</div> </div>
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400"> <div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
{t("custody.maturity")} {t("custody.maturity")}
</div> </div>
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400"> <div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
{t("custody.valueUSD")} {t("custody.valueUSD")}
</div> </div>
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400"> <div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
{t("custody.status")} {t("custody.status")}
</div> </div>
</div> </div>
{/* Table Body Row */} {/* Table Body Row */}
<div className="grid grid-cols-5 gap-4 py-6"> <div className="grid grid-cols-5 gap-4 py-6">
{/* Custodian */} {/* Custodian */}
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div <div
className="w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0" className="w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0"
style={{ style={{
background: "linear-gradient(135deg, rgba(255, 137, 4, 1) 0%, rgba(245, 73, 0, 1) 100%)", background: "linear-gradient(135deg, rgba(255, 137, 4, 1) 0%, rgba(245, 73, 0, 1) 100%)",
}} }}
> >
<span className="text-[13.5px] font-bold leading-[19px] text-white tracking-tight"> <span className="text-[13.5px] font-bold leading-[19px] text-white tracking-tight">
GY GY
</span> </span>
</div> </div>
<div className="flex flex-col"> <div className="flex flex-col">
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
{t("custody.morganStanley")} {t("custody.morganStanley")}
</span> </span>
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
{t("custody.primeBroker")} {t("custody.primeBroker")}
</span> </span>
</div> </div>
</div> </div>
{/* Asset Type */} {/* Asset Type */}
<div className="flex items-center"> <div className="flex items-center">
<span className="text-body-small font-medium text-text-primary dark:text-white"> <span className="text-body-small font-medium text-text-primary dark:text-white">
{t("custody.usEquityPortfolio")} {t("custody.usEquityPortfolio")}
</span> </span>
</div> </div>
{/* Maturity */} {/* Maturity */}
<div className="flex flex-col justify-center"> <div className="flex flex-col justify-center">
<span className="text-body-small font-medium text-text-primary dark:text-white"> <span className="text-body-small font-medium text-text-primary dark:text-white">
05 Feb 2026 05 Feb 2026
</span> </span>
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
(77 {t("custody.days")}) (77 {t("custody.days")})
</span> </span>
</div> </div>
{/* Value */} {/* Value */}
<div className="flex items-center"> <div className="flex items-center">
<span className="text-body-small font-medium text-text-primary dark:text-white"> <span className="text-body-small font-medium text-text-primary dark:text-white">
$12,500,000.00 $12,500,000.00
</span> </span>
</div> </div>
{/* Status */} {/* Status */}
<div className="flex items-center"> <div className="flex items-center">
<div className="rounded-full px-3 py-1.5 flex items-center gap-2 bg-[#f2fcf7] dark:bg-green-900/20"> <div className="rounded-full px-3 py-1.5 flex items-center gap-2 bg-[#f2fcf7] dark:bg-green-900/20">
<Image src="/component-116.svg" alt="" width={12} height={12} /> <Image src="/component-116.svg" alt="" width={12} height={12} />
<span className="text-[10px] font-bold leading-[150%] text-[#10b981] dark:text-green-400"> <span className="text-[10px] font-bold leading-[150%] text-[#10b981] dark:text-green-400">
{t("custody.verified")} {t("custody.verified")}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
{/* Table Footer Row */} {/* Table Footer Row */}
<div className="grid grid-cols-5 gap-4 pt-6 border-t border-border-gray dark:border-gray-700"> <div className="grid grid-cols-5 gap-4 pt-6 border-t border-border-gray dark:border-gray-700">
<div className="col-span-3 flex items-center"> <div className="col-span-3 flex items-center">
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
{t("custody.totalValue")} {t("custody.totalValue")}
</span> </span>
</div> </div>
<div className="col-span-2 flex items-center"> <div className="col-span-2 flex items-center">
<span className="text-body-default font-bold text-text-primary dark:text-white"> <span className="text-body-default font-bold text-text-primary dark:text-white">
$12,500,000.00 $12,500,000.00
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* Verification Cards Row */} {/* Verification Cards Row */}
<div className="flex flex-row gap-6 pt-6"> <div className="flex flex-row gap-6 pt-6">
<VerificationCard <VerificationCard
icon="/component-117.svg" icon="/component-117.svg"
title={t("custody.smartContract")} title={t("custody.smartContract")}
description={t("custody.smartContractDesc")} description={t("custody.smartContractDesc")}
buttonText={t("custody.viewReports")} buttonText={t("custody.viewReports")}
/> />
<VerificationCard <VerificationCard
icon="/component-119.svg" icon="/component-119.svg"
title={t("custody.compliance")} title={t("custody.compliance")}
description={t("custody.complianceDesc")} description={t("custody.complianceDesc")}
buttonText={t("custody.viewReports")} buttonText={t("custody.viewReports")}
/> />
<VerificationCard <VerificationCard
icon="/component-121.svg" icon="/component-121.svg"
title={t("custody.proofOfReserves")} title={t("custody.proofOfReserves")}
description={t("custody.proofDesc")} description={t("custody.proofDesc")}
buttonText={t("custody.viewReports")} buttonText={t("custody.viewReports")}
/> />
{/* Independent Verifications */} {/* Independent Verifications */}
<div className="flex-1 rounded-2xl border bg-[#f9fafb] dark:bg-gray-700 border-[#e5e7eb] dark:border-gray-600 p-6 flex flex-col"> <div className="flex-1 rounded-2xl border bg-[#f9fafb] dark:bg-gray-700 border-[#e5e7eb] dark:border-gray-600 p-6 flex flex-col">
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<h3 className="text-body-default font-bold text-text-primary dark:text-white"> <h3 className="text-body-default font-bold text-text-primary dark:text-white">
{t("custody.independentVerifications")} {t("custody.independentVerifications")}
</h3> </h3>
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400"> <p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
{t("custody.independentDesc")} {t("custody.independentDesc")}
</p> </p>
</div> </div>
<div className="flex flex-col gap-2 mt-6"> <div className="flex flex-col gap-2 mt-6">
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between"> <div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
<div className="flex flex-col gap-0.5"> <div className="flex flex-col gap-0.5">
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
{t("custody.attestationReport")} {t("custody.attestationReport")}
</span> </span>
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
November 2025 November 2025
</span> </span>
</div> </div>
<Image src="/component-123.svg" alt="" width={24} height={24} /> <Image src="/component-123.svg" alt="" width={24} height={24} />
</div> </div>
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between"> <div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
<div className="flex flex-col gap-0.5"> <div className="flex flex-col gap-0.5">
<span className="text-body-small font-bold text-text-primary dark:text-white"> <span className="text-body-small font-bold text-text-primary dark:text-white">
{t("custody.attestationReport")} {t("custody.attestationReport")}
</span> </span>
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400"> <span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
October 2025 October 2025
</span> </span>
</div> </div>
<Image src="/component-124.svg" alt="" width={24} height={24} /> <Image src="/component-124.svg" alt="" width={24} height={24} />
</div> </div>
</div> </div>
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-4"> <button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-4">
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400"> <span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
{t("custody.viewAllArchive")} {t("custody.viewAllArchive")}
</span> </span>
<Image src="/component-125.svg" alt="" width={16} height={16} /> <Image src="/component-125.svg" alt="" width={16} height={16} />
</button> </button>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,9 +1,9 @@
import AssetCustodyVerification from "./AssetCustodyVerification"; import AssetCustodyVerification from "./AssetCustodyVerification";
export default function AssetCustodyVerificationTab() { export default function AssetCustodyVerificationTab() {
return ( return (
<div className="flex flex-col gap-8 w-full"> <div className="flex flex-col gap-8 w-full">
<AssetCustodyVerification /> <AssetCustodyVerification />
</div> </div>
); );
} }

View File

@@ -1,18 +1,18 @@
"use client"; "use client";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function AssetDescriptionCard() { export default function AssetDescriptionCard() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-4 h-[300px]"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-4 h-[300px]">
<h3 className="text-body-large font-bold text-text-primary dark:text-white"> <h3 className="text-body-large font-bold text-text-primary dark:text-white">
{t("description.title")} {t("description.title")}
</h3> </h3>
<div className="text-body-default font-regular text-text-primary dark:text-gray-300 leading-relaxed whitespace-pre-line flex-1 overflow-y-auto"> <div className="text-body-default font-regular text-text-primary dark:text-gray-300 leading-relaxed whitespace-pre-line flex-1 overflow-y-auto">
{t("description.content")} {t("description.content")}
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,9 +1,9 @@
import AssetDescriptionCard from "./AssetDescriptionCard"; import AssetDescriptionCard from "./AssetDescriptionCard";
export default function AssetDescriptionTab() { export default function AssetDescriptionTab() {
return ( return (
<div className="flex flex-col gap-8 w-full"> <div className="flex flex-col gap-8 w-full">
<AssetDescriptionCard /> <AssetDescriptionCard />
</div> </div>
); );
} }

View File

@@ -1,116 +1,116 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface OverviewItemProps { interface OverviewItemProps {
icon: string; icon: string;
label: string; label: string;
value: string; value: string;
} }
function OverviewItem({ icon, label, value }: OverviewItemProps) { function OverviewItem({ icon, label, value }: OverviewItemProps) {
return ( return (
<div className="flex items-center justify-between w-full"> <div className="flex items-center justify-between w-full">
<div className="flex items-center gap-1"> <div className="flex items-center gap-1">
<div className="w-5 h-6 flex-shrink-0"> <div className="w-5 h-6 flex-shrink-0">
<Image src={icon} alt={label} width={20} height={24} /> <Image src={icon} alt={label} width={20} height={24} />
</div> </div>
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
{label} {label}
</span> </span>
</div> </div>
<span className="text-body-small font-medium text-text-primary dark:text-white"> <span className="text-body-small font-medium text-text-primary dark:text-white">
{value} {value}
</span> </span>
</div> </div>
); );
} }
export default function AssetOverviewCard() { export default function AssetOverviewCard() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
{/* Header */} {/* Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<h3 className="text-body-large font-bold text-text-primary dark:text-white"> <h3 className="text-body-large font-bold text-text-primary dark:text-white">
{t("assetOverview.title")} {t("assetOverview.title")}
</h3> </h3>
<div <div
className="rounded-full border flex items-center gap-2 px-3 py-1.5" className="rounded-full border flex items-center gap-2 px-3 py-1.5"
style={{ style={{
backgroundColor: "#fffbf5", backgroundColor: "#fffbf5",
borderColor: "#ffedd5", borderColor: "#ffedd5",
}} }}
> >
<div <div
className="w-1.5 h-1.5 rounded-full flex-shrink-0" className="w-1.5 h-1.5 rounded-full flex-shrink-0"
style={{ backgroundColor: "#ffb933" }} style={{ backgroundColor: "#ffb933" }}
/> />
<span <span
className="text-xs font-semibold leading-4" className="text-xs font-semibold leading-4"
style={{ color: "#ffb933" }} style={{ color: "#ffb933" }}
> >
{t("assetOverview.mediumRisk")} {t("assetOverview.mediumRisk")}
</span> </span>
</div> </div>
</div> </div>
{/* Overview Items */} {/* Overview Items */}
<div className="flex gap-12 w-full"> <div className="flex gap-12 w-full">
<div className="flex-1 flex flex-col gap-5"> <div className="flex-1 flex flex-col gap-5">
<OverviewItem <OverviewItem
icon="/component-11.svg" icon="/component-11.svg"
label={t("assetOverview.underlyingAssets")} label={t("assetOverview.underlyingAssets")}
value={t("assetOverview.usEquityIndex")} value={t("assetOverview.usEquityIndex")}
/> />
<OverviewItem <OverviewItem
icon="/component-12.svg" icon="/component-12.svg"
label={t("assetOverview.maturityRange")} label={t("assetOverview.maturityRange")}
value="05 Feb 2026" value="05 Feb 2026"
/> />
<OverviewItem <OverviewItem
icon="/component-13.svg" icon="/component-13.svg"
label={t("assetOverview.cap")} label={t("assetOverview.cap")}
value="$50,000,000" value="$50,000,000"
/> />
</div> </div>
<div className="flex-1 flex flex-col gap-5"> <div className="flex-1 flex flex-col gap-5">
<OverviewItem <OverviewItem
icon="/component-14.svg" icon="/component-14.svg"
label={t("assetOverview.minInvestment")} label={t("assetOverview.minInvestment")}
value="100 USDC" value="100 USDC"
/> />
<div className="flex flex-col gap-3 w-full"> <div className="flex flex-col gap-3 w-full">
<OverviewItem <OverviewItem
icon="/component-15.svg" icon="/component-15.svg"
label={t("assetOverview.poolCapacity")} label={t("assetOverview.poolCapacity")}
value="75%" value="75%"
/> />
<div className="w-full h-2 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden"> <div className="w-full h-2 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden">
<div className="h-full bg-blue-500 rounded-full" style={{ width: "75%" }} /> <div className="h-full bg-blue-500 rounded-full" style={{ width: "75%" }} />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* Divider */} {/* Divider */}
<div className="border-t border-border-gray dark:border-gray-700" /> <div className="border-t border-border-gray dark:border-gray-700" />
{/* Current Price */} {/* Current Price */}
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex items-center justify-between"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex items-center justify-between">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Image src="/component-16.svg" alt="Price" width={24} height={24} /> <Image src="/component-16.svg" alt="Price" width={24} height={24} />
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
{t("assetOverview.currentPrice")} {t("assetOverview.currentPrice")}
</span> </span>
</div> </div>
<div className="text-[20px] font-bold leading-[140%]"> <div className="text-[20px] font-bold leading-[140%]">
<span className="text-text-primary dark:text-white">1 GY-US = </span> <span className="text-text-primary dark:text-white">1 GY-US = </span>
<span style={{ color: "#10b981" }}>1.04 USDC</span> <span style={{ color: "#10b981" }}>1.04 USDC</span>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,39 +1,39 @@
import Image from "next/image"; import Image from "next/image";
interface BreadcrumbItem { interface BreadcrumbItem {
label: string; label: string;
href?: string; href?: string;
} }
interface BreadcrumbProps { interface BreadcrumbProps {
items: BreadcrumbItem[]; items: BreadcrumbItem[];
} }
export default function Breadcrumb({ items }: BreadcrumbProps) { export default function Breadcrumb({ items }: BreadcrumbProps) {
return ( return (
<nav className="flex items-center gap-[3px] h-5"> <nav className="flex items-center gap-[3px] h-5">
{items.map((item, index) => ( {items.map((item, index) => (
<div key={index} className="flex items-center gap-[3px]"> <div key={index} className="flex items-center gap-[3px]">
<span <span
className={`text-sm font-medium leading-[150%] ${ className={`text-sm font-medium leading-[150%] ${
index === items.length - 1 index === items.length - 1
? "text-text-primary font-bold" ? "text-text-primary font-bold"
: "text-text-tertiary" : "text-text-tertiary"
}`} }`}
> >
{item.label} {item.label}
</span> </span>
{index < items.length - 1 && ( {index < items.length - 1 && (
<Image <Image
src="/icon-chevron-right.svg" src="/icon-chevron-right.svg"
alt="" alt=""
width={14} width={14}
height={14} height={14}
className="flex-shrink-0" className="flex-shrink-0"
/> />
)} )}
</div> </div>
))} ))}
</nav> </nav>
); );
} }

View File

@@ -1,63 +1,63 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
import TabNavigation from "./TabNavigation"; import TabNavigation from "./TabNavigation";
import OverviewTab from "./OverviewTab"; import OverviewTab from "./OverviewTab";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function ContentSection() { export default function ContentSection() {
const { t } = useApp(); const { t } = useApp();
const tabs = [ const tabs = [
{ id: "overview", label: t("tabs.overview") }, { id: "overview", label: t("tabs.overview") },
{ id: "asset-description", label: t("tabs.assetDescription") }, { id: "asset-description", label: t("tabs.assetDescription") },
{ id: "analytics", label: t("tabs.analytics") }, { id: "analytics", label: t("tabs.analytics") },
{ id: "performance-analysis", label: t("tabs.performanceAnalysis") }, { id: "performance-analysis", label: t("tabs.performanceAnalysis") },
{ id: "asset-custody", label: t("tabs.assetCustody") }, { id: "asset-custody", label: t("tabs.assetCustody") },
]; ];
const [activeTab, setActiveTab] = useState("overview"); const [activeTab, setActiveTab] = useState("overview");
const handleTabChange = (tabId: string) => { const handleTabChange = (tabId: string) => {
// If clicking asset-description, performance-analysis, or asset-custody, scroll to that section // If clicking asset-description, performance-analysis, or asset-custody, scroll to that section
if (tabId === "asset-description" || tabId === "performance-analysis" || tabId === "asset-custody") { if (tabId === "asset-description" || tabId === "performance-analysis" || tabId === "asset-custody") {
setTimeout(() => { setTimeout(() => {
const element = document.getElementById(tabId); const element = document.getElementById(tabId);
if (element) { if (element) {
element.scrollIntoView({ behavior: "smooth", block: "start" }); element.scrollIntoView({ behavior: "smooth", block: "start" });
} }
}, 100); }, 100);
// Keep active tab as overview // Keep active tab as overview
setActiveTab("overview"); setActiveTab("overview");
} else { } else {
setActiveTab(tabId); setActiveTab(tabId);
} }
}; };
// Show OverviewTab for overview, asset-description, analytics, performance-analysis, and asset-custody // Show OverviewTab for overview, asset-description, analytics, performance-analysis, and asset-custody
const showOverview = ["overview", "asset-description", "analytics", "performance-analysis", "asset-custody"].includes(activeTab); const showOverview = ["overview", "asset-description", "analytics", "performance-analysis", "asset-custody"].includes(activeTab);
return ( return (
<div className="flex flex-col gap-6 w-full"> <div className="flex flex-col gap-6 w-full">
{/* Tab Navigation */} {/* Tab Navigation */}
<TabNavigation <TabNavigation
tabs={tabs} tabs={tabs}
defaultActiveId="overview" defaultActiveId="overview"
onTabChange={handleTabChange} onTabChange={handleTabChange}
/> />
{/* Content Area */} {/* Content Area */}
<div className="w-full"> <div className="w-full">
{showOverview && <OverviewTab />} {showOverview && <OverviewTab />}
{!showOverview && ( {!showOverview && (
<div className="bg-bg-surface rounded-2xl border border-border-normal p-6"> <div className="bg-bg-surface rounded-2xl border border-border-normal p-6">
<p className="text-text-tertiary"> <p className="text-text-tertiary">
{tabs.find((t) => t.id === activeTab)?.label} content will be {tabs.find((t) => t.id === activeTab)?.label} content will be
displayed here... displayed here...
</p> </p>
</div> </div>
)} )}
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,22 +1,22 @@
"use client"; "use client";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function LanguageSwitch() { export default function LanguageSwitch() {
const { language, setLanguage } = useApp(); const { language, setLanguage } = useApp();
const toggleLanguage = () => { const toggleLanguage = () => {
setLanguage(language === "zh" ? "en" : "zh"); setLanguage(language === "zh" ? "en" : "zh");
}; };
return ( return (
<button <button
onClick={toggleLanguage} onClick={toggleLanguage}
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
> >
<span className="text-sm font-medium text-text-primary dark:text-white"> <span className="text-sm font-medium text-text-primary dark:text-white">
{language === "zh" ? "中" : "EN"} {language === "zh" ? "中" : "EN"}
</span> </span>
</button> </button>
); );
} }

View File

@@ -1,199 +1,199 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function MintSwapPanel() { export default function MintSwapPanel() {
const { t } = useApp(); const { t } = useApp();
const [activeMode, setActiveMode] = useState<"mint" | "swap">("mint"); const [activeMode, setActiveMode] = useState<"mint" | "swap">("mint");
const [activeAction, setActiveAction] = useState<"deposit" | "withdraw">("deposit"); const [activeAction, setActiveAction] = useState<"deposit" | "withdraw">("deposit");
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 flex flex-col"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 flex flex-col">
{/* Mint/Swap Tabs */} {/* Mint/Swap Tabs */}
<div className="flex border-b border-border-gray dark:border-gray-700"> <div className="flex border-b border-border-gray dark:border-gray-700">
<button <button
onClick={() => setActiveMode("mint")} onClick={() => setActiveMode("mint")}
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold rounded-tl-3xl transition-colors ${ className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold rounded-tl-3xl transition-colors ${
activeMode === "mint" activeMode === "mint"
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white" ? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
: "text-text-tertiary dark:text-gray-400" : "text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("mintSwap.mint")} {t("mintSwap.mint")}
</button> </button>
<button <button
onClick={() => setActiveMode("swap")} onClick={() => setActiveMode("swap")}
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold transition-colors ${ className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold transition-colors ${
activeMode === "swap" activeMode === "swap"
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white" ? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
: "text-text-tertiary dark:text-gray-400" : "text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("mintSwap.swap")} {t("mintSwap.swap")}
</button> </button>
</div> </div>
{/* Content */} {/* Content */}
<div className="flex flex-col gap-6 p-6"> <div className="flex flex-col gap-6 p-6">
{/* Deposit/Withdraw Toggle */} {/* Deposit/Withdraw Toggle */}
<div className="bg-[#f9fafb] dark:bg-gray-700 rounded-xl p-1 flex gap-0"> <div className="bg-[#f9fafb] dark:bg-gray-700 rounded-xl p-1 flex gap-0">
<button <button
onClick={() => setActiveAction("deposit")} onClick={() => setActiveAction("deposit")}
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${ className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
activeAction === "deposit" activeAction === "deposit"
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm" ? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
: "font-medium text-text-tertiary dark:text-gray-400" : "font-medium text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("mintSwap.deposit")} {t("mintSwap.deposit")}
</button> </button>
<button <button
onClick={() => setActiveAction("withdraw")} onClick={() => setActiveAction("withdraw")}
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${ className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
activeAction === "withdraw" activeAction === "withdraw"
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm" ? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
: "font-medium text-text-tertiary dark:text-gray-400" : "font-medium text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{t("mintSwap.withdraw")} {t("mintSwap.withdraw")}
</button> </button>
</div> </div>
{/* Input Area */} {/* Input Area */}
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-3"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-3">
{/* Label and Balance */} {/* Label and Balance */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400"> <span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
{t("mintSwap.deposit")} {t("mintSwap.deposit")}
</span> </span>
<div className="flex items-center gap-1"> <div className="flex items-center gap-1">
<Image src="/icon7.svg" alt="" width={12} height={12} /> <Image src="/icon7.svg" alt="" width={12} height={12} />
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400"> <span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
{t("mintSwap.balance")}: $12,500.00 {t("mintSwap.balance")}: $12,500.00
</span> </span>
<button className="rounded-full px-3 h-[22px] text-[10px] font-medium bg-[#e5e7eb] dark:bg-gray-600 text-[#111827] dark:text-white"> <button className="rounded-full px-3 h-[22px] text-[10px] font-medium bg-[#e5e7eb] dark:bg-gray-600 text-[#111827] dark:text-white">
{t("mintSwap.max")} {t("mintSwap.max")}
</button> </button>
</div> </div>
</div> </div>
{/* Input Row */} {/* Input Row */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<button className="bg-bg-surface dark:bg-gray-600 rounded-full border border-border-normal dark:border-gray-500 px-2 h-[46px] flex items-center gap-2"> <button className="bg-bg-surface dark:bg-gray-600 rounded-full border border-border-normal dark:border-gray-500 px-2 h-[46px] flex items-center gap-2">
<Image <Image
src="/usd-coin-usdc-logo-10.svg" src="/usd-coin-usdc-logo-10.svg"
alt="USDC" alt="USDC"
width={32} width={32}
height={32} height={32}
/> />
<span className="text-body-default font-bold text-text-primary dark:text-white">USDC</span> <span className="text-body-default font-bold text-text-primary dark:text-white">USDC</span>
</button> </button>
<div className="flex flex-col items-end"> <div className="flex flex-col items-end">
<span className="text-heading-h3 font-bold text-[#d1d5db] dark:text-gray-500"> <span className="text-heading-h3 font-bold text-[#d1d5db] dark:text-gray-500">
0.00 0.00
</span> </span>
<span className="text-caption-tiny font-regular text-text-tertiary dark:text-gray-400">--</span> <span className="text-caption-tiny font-regular text-text-tertiary dark:text-gray-400">--</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* Estimated Returns */} {/* Estimated Returns */}
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300"> <span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
{t("mintSwap.estimatedReturns")} {t("mintSwap.estimatedReturns")}
</span> </span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.estAPY")} {t("mintSwap.estAPY")}
</span> </span>
<span className="text-body-small font-bold text-[#ff6900] dark:text-orange-400"> <span className="text-body-small font-bold text-[#ff6900] dark:text-orange-400">
22% 22%
</span> </span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.estReturns")} {t("mintSwap.estReturns")}
</span> </span>
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400"> <span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
~ $0.50 ~ $0.50
</span> </span>
</div> </div>
</div> </div>
{/* Transaction Summary */} {/* Transaction Summary */}
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300"> <span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
{t("mintSwap.transactionSummary")} {t("mintSwap.transactionSummary")}
</span> </span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.youGet")} {t("mintSwap.youGet")}
</span> </span>
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400"> <span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
9852.21 GYUS 9852.21 GYUS
</span> </span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.salesPrice")} {t("mintSwap.salesPrice")}
</span> </span>
<span className="text-body-small font-bold text-text-primary dark:text-white">$1.04 USDC</span> <span className="text-body-small font-bold text-text-primary dark:text-white">$1.04 USDC</span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.fee")} {t("mintSwap.fee")}
</span> </span>
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400"> <span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
-$50 (0.5%) -$50 (0.5%)
</span> </span>
</div> </div>
<div className="flex items-center justify-between h-5"> <div className="flex items-center justify-between h-5">
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400"> <span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
{t("mintSwap.gas")} {t("mintSwap.gas")}
</span> </span>
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400"> <span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
-$0.09 -$0.09
</span> </span>
</div> </div>
</div> </div>
{/* Submit Button */} {/* Submit Button */}
<button <button
className="rounded-xl h-12 flex items-center justify-center gap-2 bg-[#9ca1af] dark:bg-gray-600" className="rounded-xl h-12 flex items-center justify-center gap-2 bg-[#9ca1af] dark:bg-gray-600"
disabled disabled
> >
<span className="text-lg font-bold text-white leading-7"> <span className="text-lg font-bold text-white leading-7">
{t("mintSwap.approveDeposit")} {t("mintSwap.approveDeposit")}
</span> </span>
<Image src="/icon8.svg" alt="" width={20} height={20} /> <Image src="/icon8.svg" alt="" width={20} height={20} />
</button> </button>
{/* Terms */} {/* Terms */}
<div className="flex flex-col gap-0 text-center"> <div className="flex flex-col gap-0 text-center">
<div className="text-caption-tiny font-regular"> <div className="text-caption-tiny font-regular">
<span className="text-[#9ca1af] dark:text-gray-400"> <span className="text-[#9ca1af] dark:text-gray-400">
{t("mintSwap.termsText")}{" "} {t("mintSwap.termsText")}{" "}
</span> </span>
<span className="text-[#10b981] dark:text-green-400"> <span className="text-[#10b981] dark:text-green-400">
{t("mintSwap.termsOfService")} {t("mintSwap.termsOfService")}
</span> </span>
<span className="text-[#9ca1af] dark:text-gray-400"> <span className="text-[#9ca1af] dark:text-gray-400">
{" "}{t("mintSwap.and")} {" "}{t("mintSwap.and")}
</span> </span>
</div> </div>
<span className="text-caption-tiny font-regular text-[#10b981] dark:text-green-400"> <span className="text-caption-tiny font-regular text-[#10b981] dark:text-green-400">
{t("mintSwap.privacyPolicy")} {t("mintSwap.privacyPolicy")}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,53 +1,53 @@
import Image from "next/image"; import Image from "next/image";
interface NavItemProps { interface NavItemProps {
icon: string; icon: string;
label: string; label: string;
isActive: boolean; isActive: boolean;
onClick: () => void; onClick: () => void;
} }
export default function NavItem({ icon, label, isActive, onClick }: NavItemProps) { export default function NavItem({ icon, label, isActive, onClick }: NavItemProps) {
return ( return (
<button <button
onClick={onClick} onClick={onClick}
className={` className={`
rounded-xl rounded-xl
pl-4 pl-4
flex flex
items-center items-center
gap-2 gap-2
h-[42px] h-[42px]
w-full w-full
overflow-hidden overflow-hidden
transition-colors transition-colors
${isActive ${isActive
? 'bg-fill-secondary-click' ? 'bg-fill-secondary-click'
: 'hover:bg-gray-50' : 'hover:bg-gray-50'
} }
`} `}
> >
<div className="w-[22px] h-[22px] flex-shrink-0 relative"> <div className="w-[22px] h-[22px] flex-shrink-0 relative">
<Image <Image
src={icon} src={icon}
alt={label} alt={label}
width={22} width={22}
height={22} height={22}
className="w-full h-full" className="w-full h-full"
/> />
</div> </div>
<span <span
className={` className={`
text-sm text-sm
leading-[150%] leading-[150%]
${isActive ${isActive
? 'text-text-primary font-bold' ? 'text-text-primary font-bold'
: 'text-text-tertiary font-medium' : 'text-text-tertiary font-medium'
} }
`} `}
> >
{label} {label}
</span> </span>
</button> </button>
); );
} }

View File

@@ -1,55 +1,55 @@
import ProductHeader from "./ProductHeader"; import ProductHeader from "./ProductHeader";
import StatsCards from "./StatsCards"; import StatsCards from "./StatsCards";
import AssetOverviewCard from "./AssetOverviewCard"; import AssetOverviewCard from "./AssetOverviewCard";
import APYHistoryCard from "./APYHistoryCard"; import APYHistoryCard from "./APYHistoryCard";
import AssetDescriptionCard from "./AssetDescriptionCard"; import AssetDescriptionCard from "./AssetDescriptionCard";
import MintSwapPanel from "./MintSwapPanel"; import MintSwapPanel from "./MintSwapPanel";
import ProtocolInformation from "./ProtocolInformation"; import ProtocolInformation from "./ProtocolInformation";
import PerformanceAnalysis from "./PerformanceAnalysis"; import PerformanceAnalysis from "./PerformanceAnalysis";
import Season1Rewards from "./Season1Rewards"; import Season1Rewards from "./Season1Rewards";
import AssetCustodyVerification from "./AssetCustodyVerification"; import AssetCustodyVerification from "./AssetCustodyVerification";
export default function OverviewTab() { export default function OverviewTab() {
return ( return (
<div className="flex flex-col gap-8 w-full"> <div className="flex flex-col gap-8 w-full">
{/* Product Header */} {/* Product Header */}
<ProductHeader /> <ProductHeader />
{/* Stats Cards */} {/* Stats Cards */}
<StatsCards /> <StatsCards />
{/* Main Content Grid */} {/* Main Content Grid */}
<div className="grid grid-cols-3 gap-8"> <div className="grid grid-cols-3 gap-8">
{/* Left Column - 2/3 width */} {/* Left Column - 2/3 width */}
<div className="col-span-2 flex flex-col gap-8"> <div className="col-span-2 flex flex-col gap-8">
<AssetOverviewCard /> <AssetOverviewCard />
<APYHistoryCard /> <APYHistoryCard />
<div id="asset-description"> <div id="asset-description">
<AssetDescriptionCard /> <AssetDescriptionCard />
</div> </div>
</div> </div>
{/* Right Column - 1/3 width */} {/* Right Column - 1/3 width */}
<div className="col-span-1"> <div className="col-span-1">
<div className="sticky top-8 flex flex-col gap-8"> <div className="sticky top-8 flex flex-col gap-8">
<MintSwapPanel /> <MintSwapPanel />
<ProtocolInformation /> <ProtocolInformation />
</div> </div>
</div> </div>
</div> </div>
{/* Season 1 Rewards */} {/* Season 1 Rewards */}
<Season1Rewards /> <Season1Rewards />
{/* Performance Analysis */} {/* Performance Analysis */}
<div id="performance-analysis"> <div id="performance-analysis">
<PerformanceAnalysis /> <PerformanceAnalysis />
</div> </div>
{/* Asset Custody & Verification */} {/* Asset Custody & Verification */}
<div id="asset-custody"> <div id="asset-custody">
<AssetCustodyVerification /> <AssetCustodyVerification />
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,207 +1,207 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface CalendarDayProps { interface CalendarDayProps {
day: number | null; day: number | null;
value: string; value: string;
type: "positive" | "negative" | "neutral" | "current"; type: "positive" | "negative" | "neutral" | "current";
} }
function CalendarDay({ day, value, type }: CalendarDayProps) { function CalendarDay({ day, value, type }: CalendarDayProps) {
// Empty cell // Empty cell
if (day === null) { if (day === null) {
return <div className="flex-1" />; return <div className="flex-1" />;
} }
const typeStyles = { const typeStyles = {
positive: "bg-[#f2fcf7] dark:bg-green-900/20 border-[#cef3e0] dark:border-green-700/30", positive: "bg-[#f2fcf7] dark:bg-green-900/20 border-[#cef3e0] dark:border-green-700/30",
negative: "bg-[#fff8f7] dark:bg-red-900/20 border-[#ffdbd5] dark:border-red-700/30", negative: "bg-[#fff8f7] dark:bg-red-900/20 border-[#ffdbd5] dark:border-red-700/30",
neutral: "bg-[#f9fafb] dark:bg-gray-700 border-[#f3f4f6] dark:border-gray-600", neutral: "bg-[#f9fafb] dark:bg-gray-700 border-[#f3f4f6] dark:border-gray-600",
current: "bg-[#111827] dark:bg-blue-600 border-[#111827] dark:border-blue-600", current: "bg-[#111827] dark:bg-blue-600 border-[#111827] dark:border-blue-600",
}; };
const isCurrent = type === "current"; const isCurrent = type === "current";
const dayTextStyle = isCurrent const dayTextStyle = isCurrent
? "text-[#fcfcfd]" ? "text-[#fcfcfd]"
: "text-[#9ca1af] dark:text-gray-400"; : "text-[#9ca1af] dark:text-gray-400";
// Value text color should match the type // Value text color should match the type
let valueTextStyle = ""; let valueTextStyle = "";
if (isCurrent) { if (isCurrent) {
valueTextStyle = "text-[#fcfcfd]"; valueTextStyle = "text-[#fcfcfd]";
} else if (type === "positive") { } else if (type === "positive") {
valueTextStyle = "text-[#10b981] dark:text-green-400"; valueTextStyle = "text-[#10b981] dark:text-green-400";
} else if (type === "negative") { } else if (type === "negative") {
valueTextStyle = "text-[#dc2626] dark:text-red-400"; valueTextStyle = "text-[#dc2626] dark:text-red-400";
} else { } else {
valueTextStyle = "text-[#9ca1af] dark:text-gray-400"; valueTextStyle = "text-[#9ca1af] dark:text-gray-400";
} }
return ( return (
<div <div
className={`rounded border flex flex-col items-center justify-center flex-1 p-3 gap-6 ${typeStyles[type]}`} className={`rounded border flex flex-col items-center justify-center flex-1 p-3 gap-6 ${typeStyles[type]}`}
> >
<div className="w-full flex items-start"> <div className="w-full flex items-start">
<span className={`text-[10px] font-bold leading-[150%] ${dayTextStyle}`}> <span className={`text-[10px] font-bold leading-[150%] ${dayTextStyle}`}>
{day} {day}
</span> </span>
</div> </div>
<div className="w-full flex items-end justify-end"> <div className="w-full flex items-end justify-end">
<span className={`text-body-small font-bold leading-[150%] ${valueTextStyle}`}> <span className={`text-body-small font-bold leading-[150%] ${valueTextStyle}`}>
{value} {value}
</span> </span>
</div> </div>
</div> </div>
); );
} }
interface StatCardProps { interface StatCardProps {
label: string; label: string;
value: string; value: string;
} }
function StatCard({ label, value }: StatCardProps) { function StatCard({ label, value }: StatCardProps) {
return ( return (
<div className="flex flex-col items-center gap-1"> <div className="flex flex-col items-center gap-1">
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400"> <span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
{label} {label}
</span> </span>
<span className="text-body-large font-bold text-[#10b981] dark:text-green-400"> <span className="text-body-large font-bold text-[#10b981] dark:text-green-400">
{value} {value}
</span> </span>
</div> </div>
); );
} }
export default function PerformanceAnalysis() { export default function PerformanceAnalysis() {
const { t } = useApp(); const { t } = useApp();
const [currentMonth] = useState("November 2025"); const [currentMonth] = useState("November 2025");
// 模拟日历数据 - 5周数据 // 模拟日历数据 - 5周数据
const weekData = [ const weekData = [
[ [
{ day: 31, value: "0.00%", type: "neutral" as const }, { day: 31, value: "0.00%", type: "neutral" as const },
{ day: 1, value: "+0.12%", type: "positive" as const }, { day: 1, value: "+0.12%", type: "positive" as const },
{ day: 2, value: "+0.08%", type: "positive" as const }, { day: 2, value: "+0.08%", type: "positive" as const },
{ day: 3, value: "-0.03%", type: "negative" as const }, { day: 3, value: "-0.03%", type: "negative" as const },
{ day: 4, value: "+0.15%", type: "positive" as const }, { day: 4, value: "+0.15%", type: "positive" as const },
{ day: 5, value: "+0.21%", type: "positive" as const }, { day: 5, value: "+0.21%", type: "positive" as const },
{ day: 6, value: "0.00%", type: "neutral" as const }, { day: 6, value: "0.00%", type: "neutral" as const },
], ],
[ [
{ day: 7, value: "+0.12%", type: "positive" as const }, { day: 7, value: "+0.12%", type: "positive" as const },
{ day: 8, value: "+0.12%", type: "positive" as const }, { day: 8, value: "+0.12%", type: "positive" as const },
{ day: 9, value: "-0.03%", type: "negative" as const }, { day: 9, value: "-0.03%", type: "negative" as const },
{ day: 10, value: "+0.08%", type: "positive" as const }, { day: 10, value: "+0.08%", type: "positive" as const },
{ day: 11, value: "-0.03%", type: "negative" as const }, { day: 11, value: "-0.03%", type: "negative" as const },
{ day: 12, value: "+0.21%", type: "positive" as const }, { day: 12, value: "+0.21%", type: "positive" as const },
{ day: 13, value: "0.00%", type: "neutral" as const }, { day: 13, value: "0.00%", type: "neutral" as const },
], ],
[ [
{ day: 14, value: "-0.03%", type: "negative" as const }, { day: 14, value: "-0.03%", type: "negative" as const },
{ day: 15, value: "-0.03%", type: "negative" as const }, { day: 15, value: "-0.03%", type: "negative" as const },
{ day: 16, value: "+0.15%", type: "positive" as const }, { day: 16, value: "+0.15%", type: "positive" as const },
{ day: 17, value: "+0.21%", type: "positive" as const }, { day: 17, value: "+0.21%", type: "positive" as const },
{ day: 18, value: "+0.08%", type: "positive" as const }, { day: 18, value: "+0.08%", type: "positive" as const },
{ day: 19, value: "0.00%", type: "neutral" as const }, { day: 19, value: "0.00%", type: "neutral" as const },
{ day: 20, value: "+0.12%", type: "positive" as const }, { day: 20, value: "+0.12%", type: "positive" as const },
], ],
[ [
{ day: 21, value: "+0.08%", type: "positive" as const }, { day: 21, value: "+0.08%", type: "positive" as const },
{ day: 22, value: "+0.15%", type: "positive" as const }, { day: 22, value: "+0.15%", type: "positive" as const },
{ day: 23, value: "-0.03%", type: "negative" as const }, { day: 23, value: "-0.03%", type: "negative" as const },
{ day: 24, value: "+0.12%", type: "current" as const }, { day: 24, value: "+0.12%", type: "current" as const },
{ day: 25, value: "0.00%", type: "neutral" as const }, { day: 25, value: "0.00%", type: "neutral" as const },
{ day: 26, value: "+0.21%", type: "positive" as const }, { day: 26, value: "+0.21%", type: "positive" as const },
{ day: 27, value: "+0.08%", type: "positive" as const }, { day: 27, value: "+0.08%", type: "positive" as const },
], ],
[ [
{ day: 28, value: "+0.12%", type: "positive" as const }, { day: 28, value: "+0.12%", type: "positive" as const },
{ day: 30, value: "-0.03%", type: "negative" as const }, { day: 30, value: "-0.03%", type: "negative" as const },
{ day: 29, value: "-0.03%", type: "negative" as const }, { day: 29, value: "-0.03%", type: "negative" as const },
{ day: null, value: "", type: "neutral" as const }, { day: null, value: "", type: "neutral" as const },
{ day: null, value: "", type: "neutral" as const }, { day: null, value: "", type: "neutral" as const },
{ day: null, value: "", type: "neutral" as const }, { day: null, value: "", type: "neutral" as const },
{ day: null, value: "", type: "neutral" as const }, { day: null, value: "", type: "neutral" as const },
], ],
]; ];
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-8"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-8">
{/* Top Section - Title and Stats */} {/* Top Section - Title and Stats */}
<div className="flex items-start justify-between pb-8 border-b border-border-gray dark:border-gray-700"> <div className="flex items-start justify-between pb-8 border-b border-border-gray dark:border-gray-700">
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<h2 className="text-body-large font-bold text-text-primary dark:text-white"> <h2 className="text-body-large font-bold text-text-primary dark:text-white">
{t("performance.title")} {t("performance.title")}
</h2> </h2>
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400"> <p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
{t("performance.description")} {t("performance.description")}
</p> </p>
</div> </div>
<div className="flex items-center gap-8"> <div className="flex items-center gap-8">
<StatCard label={t("performance.ytd")} value="+8.7%" /> <StatCard label={t("performance.ytd")} value="+8.7%" />
<StatCard label={t("performance.ytd")} value="+8.7%" /> <StatCard label={t("performance.ytd")} value="+8.7%" />
</div> </div>
</div> </div>
{/* Calendar Section */} {/* Calendar Section */}
<div className="flex flex-col gap-6"> <div className="flex flex-col gap-6">
{/* Calendar Header */} {/* Calendar Header */}
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<div className="w-6 h-6"> <div className="w-6 h-6">
<Image src="/component-114.svg" alt="" width={24} height={24} /> <Image src="/component-114.svg" alt="" width={24} height={24} />
</div> </div>
<h3 className="text-body-small font-bold text-text-primary dark:text-white"> <h3 className="text-body-small font-bold text-text-primary dark:text-white">
{t("performance.dailyNetReturns")} {t("performance.dailyNetReturns")}
</h3> </h3>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<Image src="/icon9.svg" alt="Previous" width={16} height={16} /> <Image src="/icon9.svg" alt="Previous" width={16} height={16} />
</button> </button>
<span className="text-body-small font-bold text-[#0a0a0a] dark:text-white tracking-tight"> <span className="text-body-small font-bold text-[#0a0a0a] dark:text-white tracking-tight">
{currentMonth} {currentMonth}
</span> </span>
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<Image src="/icon10.svg" alt="Next" width={16} height={16} /> <Image src="/icon10.svg" alt="Next" width={16} height={16} />
</button> </button>
</div> </div>
</div> </div>
{/* Calendar */} {/* Calendar */}
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
{/* Weekday Headers */} {/* Weekday Headers */}
<div className="grid grid-cols-7 gap-2"> <div className="grid grid-cols-7 gap-2">
{["sun", "mon", "tue", "wed", "thu", "fri", "sat"].map((day) => ( {["sun", "mon", "tue", "wed", "thu", "fri", "sat"].map((day) => (
<div key={day} className="flex items-center justify-center"> <div key={day} className="flex items-center justify-center">
<span className="text-[10px] font-bold leading-[150%] text-[#94a3b8] dark:text-gray-400"> <span className="text-[10px] font-bold leading-[150%] text-[#94a3b8] dark:text-gray-400">
{t(`performance.weekdays.${day}`)} {t(`performance.weekdays.${day}`)}
</span> </span>
</div> </div>
))} ))}
</div> </div>
{/* Calendar Grid */} {/* Calendar Grid */}
<div className="flex flex-col gap-1"> <div className="flex flex-col gap-1">
{weekData.map((week, weekIndex) => ( {weekData.map((week, weekIndex) => (
<div key={weekIndex} className="grid grid-cols-7 gap-2"> <div key={weekIndex} className="grid grid-cols-7 gap-2">
{week.map((day, dayIndex) => ( {week.map((day, dayIndex) => (
<CalendarDay <CalendarDay
key={`${weekIndex}-${dayIndex}`} key={`${weekIndex}-${dayIndex}`}
day={day.day} day={day.day}
value={day.value} value={day.value}
type={day.type} type={day.type}
/> />
))} ))}
</div> </div>
))} ))}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,9 +1,9 @@
import PerformanceAnalysis from "./PerformanceAnalysis"; import PerformanceAnalysis from "./PerformanceAnalysis";
export default function PerformanceAnalysisTab() { export default function PerformanceAnalysisTab() {
return ( return (
<div className="flex flex-col gap-8 w-full"> <div className="flex flex-col gap-8 w-full">
<PerformanceAnalysis /> <PerformanceAnalysis />
</div> </div>
); );
} }

View File

@@ -1,35 +1,35 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function ProductHeader() { export default function ProductHeader() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="flex flex-col gap-6"> <div className="flex flex-col gap-6">
{/* Product Title Section */} {/* Product Title Section */}
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div className="flex gap-6"> <div className="flex gap-6">
<div className="flex-shrink-0"> <div className="flex-shrink-0">
<Image src="/lr0.svg" alt="Product Logo" width={80} height={80} /> <Image src="/lr0.svg" alt="Product Logo" width={80} height={80} />
</div> </div>
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<h1 className="text-heading-h2 font-bold text-text-primary dark:text-white"> <h1 className="text-heading-h2 font-bold text-text-primary dark:text-white">
{t("product.gyUsEquityIndexToken")} {t("product.gyUsEquityIndexToken")}
</h1> </h1>
<p className="text-body-default font-regular text-text-tertiary dark:text-gray-400"> <p className="text-body-default font-regular text-text-tertiary dark:text-gray-400">
High-Yield US Equity Quantitative Strategy - Institutional Grade RWA High-Yield US Equity Quantitative Strategy - Institutional Grade RWA
</p> </p>
</div> </div>
</div> </div>
<div className="flex items-center gap-2 px-4 py-2 bg-bg-subtle dark:bg-gray-700 rounded-lg border border-border-gray dark:border-gray-600"> <div className="flex items-center gap-2 px-4 py-2 bg-bg-subtle dark:bg-gray-700 rounded-lg border border-border-gray dark:border-gray-600">
<Image src="/group-9270.svg" alt="Contract" width={16} height={16} /> <Image src="/group-9270.svg" alt="Contract" width={16} height={16} />
<span className="text-caption-tiny font-medium font-jetbrains text-text-tertiary dark:text-gray-400"> <span className="text-caption-tiny font-medium font-jetbrains text-text-tertiary dark:text-gray-400">
{t("product.contractAddress")}: 0x1b19...4f2c {t("product.contractAddress")}: 0x1b19...4f2c
</span> </span>
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,53 +1,53 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface ProtocolLinkProps { interface ProtocolLinkProps {
icon: string; icon: string;
label: string; label: string;
arrowIcon: string; arrowIcon: string;
} }
function ProtocolLink({ icon, label, arrowIcon }: ProtocolLinkProps) { function ProtocolLink({ icon, label, arrowIcon }: ProtocolLinkProps) {
return ( return (
<button className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 px-4 py-3.5 flex items-center justify-between w-full hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors"> <button className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 px-4 py-3.5 flex items-center justify-between w-full hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors">
<div className="flex items-center gap-1"> <div className="flex items-center gap-1">
<Image src={icon} alt="" width={20} height={24} /> <Image src={icon} alt="" width={20} height={24} />
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-300"> <span className="text-body-small font-medium text-text-tertiary dark:text-gray-300">
{label} {label}
</span> </span>
</div> </div>
<Image src={arrowIcon} alt="" width={20} height={24} /> <Image src={arrowIcon} alt="" width={20} height={24} />
</button> </button>
); );
} }
export default function ProtocolInformation() { export default function ProtocolInformation() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 px-6 py-8 flex flex-col gap-4"> <div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 px-6 py-8 flex flex-col gap-4">
<h3 className="text-body-large font-bold text-text-primary dark:text-white"> <h3 className="text-body-large font-bold text-text-primary dark:text-white">
{t("protocol.title")} {t("protocol.title")}
</h3> </h3>
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<ProtocolLink <ProtocolLink
icon="/component-17.svg" icon="/component-17.svg"
label={t("protocol.whitepaper")} label={t("protocol.whitepaper")}
arrowIcon="/component-18.svg" arrowIcon="/component-18.svg"
/> />
<ProtocolLink <ProtocolLink
icon="/component-19.svg" icon="/component-19.svg"
label={t("protocol.documentation")} label={t("protocol.documentation")}
arrowIcon="/component-110.svg" arrowIcon="/component-110.svg"
/> />
<ProtocolLink <ProtocolLink
icon="/component-111.svg" icon="/component-111.svg"
label={t("protocol.github")} label={t("protocol.github")}
arrowIcon="/component-112.svg" arrowIcon="/component-112.svg"
/> />
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,13 +1,13 @@
"use client"; "use client";
import { HeroUIProvider } from "@heroui/react"; import { HeroUIProvider } from "@heroui/react";
import { AppProvider } from "@/contexts/AppContext"; import { AppProvider } from "@/contexts/AppContext";
import { ReactNode } from "react"; import { ReactNode } from "react";
export function Providers({ children }: { children: ReactNode }) { export function Providers({ children }: { children: ReactNode }) {
return ( return (
<HeroUIProvider> <HeroUIProvider>
<AppProvider>{children}</AppProvider> <AppProvider>{children}</AppProvider>
</HeroUIProvider> </HeroUIProvider>
); );
} }

View File

@@ -1,101 +1,101 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface RewardStatProps { interface RewardStatProps {
label: string; label: string;
value: string; value: string;
} }
function RewardStat({ label, value }: RewardStatProps) { function RewardStat({ label, value }: RewardStatProps) {
return ( return (
<div className="flex flex-col items-center gap-1.5"> <div className="flex flex-col items-center gap-1.5">
<span <span
className="text-[24px] font-bold leading-[130%] dark:text-white" className="text-[24px] font-bold leading-[130%] dark:text-white"
style={{ color: "#111827", letterSpacing: "-0.005em" }} style={{ color: "#111827", letterSpacing: "-0.005em" }}
> >
{value} {value}
</span> </span>
<span <span
className="text-[10px] font-bold uppercase leading-[150%] text-center dark:text-gray-400" className="text-[10px] font-bold uppercase leading-[150%] text-center dark:text-gray-400"
style={{ color: "#9ca1af", letterSpacing: "0.05em" }} style={{ color: "#9ca1af", letterSpacing: "0.05em" }}
> >
{label} {label}
</span> </span>
</div> </div>
); );
} }
export default function Season1Rewards() { export default function Season1Rewards() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div <div
className="rounded-3xl border flex flex-col relative overflow-hidden" className="rounded-3xl border flex flex-col relative overflow-hidden"
style={{ style={{
background: background:
"radial-gradient(50% 50% at 100% 0%, rgba(255, 217, 100, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%), #ffffff", "radial-gradient(50% 50% at 100% 0%, rgba(255, 217, 100, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%), #ffffff",
borderColor: "rgba(255, 255, 255, 0.6)", borderColor: "rgba(255, 255, 255, 0.6)",
paddingTop: "20px", paddingTop: "20px",
paddingBottom: "20px", paddingBottom: "20px",
paddingLeft: "24px", paddingLeft: "24px",
paddingRight: "24px", paddingRight: "24px",
}} }}
> >
{/* Background Decoration */} {/* Background Decoration */}
<div <div
className="absolute" className="absolute"
style={{ opacity: 0.5, right: "-15px", bottom: "-20px" }} style={{ opacity: 0.5, right: "-15px", bottom: "-20px" }}
> >
<Image <Image
src="/component-113.svg" src="/component-113.svg"
alt="" alt=""
width={120} width={120}
height={144} height={144}
/> />
</div> </div>
{/* Content Container */} {/* Content Container */}
<div className="flex flex-row items-center relative z-10" style={{ gap: "400px" }}> <div className="flex flex-row items-center relative z-10" style={{ gap: "400px" }}>
{/* Left: Header and Description */} {/* Left: Header and Description */}
<div className="flex flex-col gap-2 flex-shrink-0"> <div className="flex flex-col gap-2 flex-shrink-0">
{/* Header */} {/* Header */}
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<h3 <h3
className="text-[20px] font-bold leading-[140%] dark:text-white" className="text-[20px] font-bold leading-[140%] dark:text-white"
style={{ color: "#111827" }} style={{ color: "#111827" }}
> >
{t("rewards.season1")} {t("rewards.season1")}
</h3> </h3>
<div <div
className="rounded-full px-2.5 py-1 flex items-center" className="rounded-full px-2.5 py-1 flex items-center"
style={{ backgroundColor: "#111827" }} style={{ backgroundColor: "#111827" }}
> >
<span <span
className="text-[10px] font-bold leading-4" className="text-[10px] font-bold leading-4"
style={{ color: "#fcfcfd" }} style={{ color: "#fcfcfd" }}
> >
{t("rewards.live")} {t("rewards.live")}
</span> </span>
</div> </div>
</div> </div>
{/* Description */} {/* Description */}
<p <p
className="text-body-small font-medium dark:text-gray-400" className="text-body-small font-medium dark:text-gray-400"
style={{ color: "#9ca1af" }} style={{ color: "#9ca1af" }}
> >
{t("rewards.earnPoints")} {t("rewards.earnPoints")}
</p> </p>
</div> </div>
{/* Right: Stats */} {/* Right: Stats */}
<div className="flex items-center justify-between flex-1"> <div className="flex items-center justify-between flex-1">
<RewardStat label={t("rewards.yourPoints")} value="-" /> <RewardStat label={t("rewards.yourPoints")} value="-" />
<RewardStat label={t("rewards.badgeBoost")} value="-" /> <RewardStat label={t("rewards.badgeBoost")} value="-" />
<RewardStat label={t("rewards.referrals")} value="-" /> <RewardStat label={t("rewards.referrals")} value="-" />
</div> </div>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,80 +1,80 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useState } from "react"; import { useState } from "react";
import NavItem from "./NavItem"; import NavItem from "./NavItem";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function Sidebar() { export default function Sidebar() {
const { t } = useApp(); const { t } = useApp();
const [activeItem, setActiveItem] = useState("Assets"); const [activeItem, setActiveItem] = useState("Assets");
const navigationItems = [ const navigationItems = [
{ icon: "/icon-assets.svg", label: t("nav.assets"), key: "Assets", path: "/" }, { icon: "/icon-assets.svg", label: t("nav.assets"), key: "Assets", path: "/" },
{ icon: "/icon-alp.svg", label: t("nav.alp"), key: "ALP", path: "/alp" }, { icon: "/icon-alp.svg", label: t("nav.alp"), key: "ALP", path: "/alp" },
{ icon: "/icon-swap.svg", label: t("nav.swap"), key: "Swap", path: "/swap" }, { icon: "/icon-swap.svg", label: t("nav.swap"), key: "Swap", path: "/swap" },
{ icon: "/icon-lending.svg", label: t("nav.lending"), key: "Lending", path: "/lending" }, { icon: "/icon-lending.svg", label: t("nav.lending"), key: "Lending", path: "/lending" },
{ icon: "/icon-transparency.svg", label: t("nav.transparency"), key: "Transparency", path: "/transparency" }, { icon: "/icon-transparency.svg", label: t("nav.transparency"), key: "Transparency", path: "/transparency" },
{ icon: "/icon-ecosystem.svg", label: t("nav.ecosystem"), key: "Ecosystem", path: "/ecosystem" }, { icon: "/icon-ecosystem.svg", label: t("nav.ecosystem"), key: "Ecosystem", path: "/ecosystem" },
{ icon: "/icon-points.svg", label: t("nav.points"), key: "Points", path: "/points" }, { icon: "/icon-points.svg", label: t("nav.points"), key: "Points", path: "/points" },
]; ];
return ( return (
<aside className="fixed left-0 top-0 bg-bg-surface dark:bg-gray-800 border-r border-border-normal dark:border-gray-700 flex flex-col items-center px-6 py-8 gap-8 h-screen w-[222px] overflow-y-auto"> <aside className="fixed left-0 top-0 bg-bg-surface dark:bg-gray-800 border-r border-border-normal dark:border-gray-700 flex flex-col items-center px-6 py-8 gap-8 h-screen w-[222px] overflow-y-auto">
{/* Logo */} {/* Logo */}
<div className="w-full h-10"> <div className="w-full h-10">
<Image <Image
src="/logo.svg" src="/logo.svg"
alt="ASSETX Logo" alt="ASSETX Logo"
width={174} width={174}
height={40} height={40}
className="w-full h-full" className="w-full h-full"
/> />
</div> </div>
{/* Navigation */} {/* Navigation */}
<nav className="flex flex-col gap-2 w-[174px]"> <nav className="flex flex-col gap-2 w-[174px]">
{navigationItems.map((item) => ( {navigationItems.map((item) => (
<NavItem <NavItem
key={item.key} key={item.key}
icon={item.icon} icon={item.icon}
label={item.label} label={item.label}
isActive={activeItem === item.key} isActive={activeItem === item.key}
onClick={() => setActiveItem(item.key)} onClick={() => setActiveItem(item.key)}
/> />
))} ))}
</nav> </nav>
{/* Spacer */} {/* Spacer */}
<div className="flex-1" /> <div className="flex-1" />
{/* Global TVL Section */} {/* Global TVL Section */}
<div className="w-full border-t border-border-gray dark:border-gray-700 pt-8"> <div className="w-full border-t border-border-gray dark:border-gray-700 pt-8">
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex flex-col gap-1 h-[85px]"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex flex-col gap-1 h-[85px]">
<p className="text-text-tertiary dark:text-gray-400 text-[10px] font-medium leading-[150%] tracking-[0.01em]"> <p className="text-text-tertiary dark:text-gray-400 text-[10px] font-medium leading-[150%] tracking-[0.01em]">
{t("nav.globalTVL")} {t("nav.globalTVL")}
</p> </p>
<p className="text-text-primary dark:text-white text-base font-extrabold leading-[150%] font-jetbrains"> <p className="text-text-primary dark:text-white text-base font-extrabold leading-[150%] font-jetbrains">
$465,000,000 $465,000,000
</p> </p>
</div> </div>
{/* FAQs Link */} {/* FAQs Link */}
<div className="rounded-xl flex items-center h-[42px] mt-8"> <div className="rounded-xl flex items-center h-[42px] mt-8">
<div className="flex items-center gap-0"> <div className="flex items-center gap-0">
<Image <Image
src="/icon-faq.png" src="/icon-faq.png"
alt="FAQ" alt="FAQ"
width={24} width={24}
height={24} height={24}
className="object-cover" className="object-cover"
/> />
<span className="text-text-primary dark:text-white text-sm font-bold leading-[150%]"> <span className="text-text-primary dark:text-white text-sm font-bold leading-[150%]">
{t("nav.faqs")} {t("nav.faqs")}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</aside> </aside>
); );
} }

View File

@@ -1,61 +1,61 @@
"use client"; "use client";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
interface StatCardProps { interface StatCardProps {
label: string; label: string;
value: string; value: string;
change?: string; change?: string;
changeColor?: string; changeColor?: string;
valueColor?: string; valueColor?: string;
} }
function StatCard({ function StatCard({
label, label,
value, value,
change, change,
changeColor = "text-green-500", changeColor = "text-green-500",
valueColor valueColor
}: StatCardProps) { }: StatCardProps) {
const getValueColor = () => { const getValueColor = () => {
if (valueColor) return valueColor; if (valueColor) return valueColor;
if (label.includes("APY") || label.includes("年化")) return "#ff6900"; if (label.includes("APY") || label.includes("年化")) return "#ff6900";
return "#111827"; return "#111827";
}; };
return ( return (
<div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2"> <div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
<p className="text-caption-tiny font-bold text-text-tertiary dark:text-gray-400 uppercase tracking-wider"> <p className="text-caption-tiny font-bold text-text-tertiary dark:text-gray-400 uppercase tracking-wider">
{label} {label}
</p> </p>
<p className="text-heading-h3 font-bold dark:text-white" style={{ color: getValueColor() }}> <p className="text-heading-h3 font-bold dark:text-white" style={{ color: getValueColor() }}>
{value} {value}
</p> </p>
{change && ( {change && (
<p className={`text-caption-tiny font-medium ${changeColor} dark:text-gray-400`}> <p className={`text-caption-tiny font-medium ${changeColor} dark:text-gray-400`}>
{change} {change}
</p> </p>
)} )}
</div> </div>
); );
} }
export default function StatsCards() { export default function StatsCards() {
const { t } = useApp(); const { t } = useApp();
return ( return (
<div className="grid grid-cols-5 gap-4 w-full"> <div className="grid grid-cols-5 gap-4 w-full">
<StatCard label={t("stats.currentAPY")} value="22%" change="+2.5% WoW" changeColor="text-green-500" /> <StatCard label={t("stats.currentAPY")} value="22%" change="+2.5% WoW" changeColor="text-green-500" />
<StatCard label={t("stats.totalValueLocked")} value="$240.5M" change="+$2.3M Today" changeColor="text-green-500" /> <StatCard label={t("stats.totalValueLocked")} value="$240.5M" change="+$2.3M Today" changeColor="text-green-500" />
<StatCard label="24h Volume" value="$12.8M" change="↑ 23% vs Avg" changeColor="text-green-500" /> <StatCard label="24h Volume" value="$12.8M" change="↑ 23% vs Avg" changeColor="text-green-500" />
<StatCard label={t("stats.yourBalance")} value="0.00" change="$0.00 USD" changeColor="text-text-tertiary" /> <StatCard label={t("stats.yourBalance")} value="0.00" change="$0.00 USD" changeColor="text-text-tertiary" />
<StatCard <StatCard
label={t("stats.yourEarnings")} label={t("stats.yourEarnings")}
value="$0.00" value="$0.00"
change="All Time" change="All Time"
changeColor="text-text-tertiary" changeColor="text-text-tertiary"
valueColor="#10b981" valueColor="#10b981"
/> />
</div> </div>
); );
} }

View File

@@ -1,55 +1,55 @@
"use client"; "use client";
import { useState } from "react"; import { useState } from "react";
interface Tab { interface Tab {
id: string; id: string;
label: string; label: string;
} }
interface TabNavigationProps { interface TabNavigationProps {
tabs: Tab[]; tabs: Tab[];
defaultActiveId?: string; defaultActiveId?: string;
onTabChange?: (tabId: string) => void; onTabChange?: (tabId: string) => void;
} }
export default function TabNavigation({ export default function TabNavigation({
tabs, tabs,
defaultActiveId, defaultActiveId,
onTabChange, onTabChange,
}: TabNavigationProps) { }: TabNavigationProps) {
const [activeTab, setActiveTab] = useState(defaultActiveId || tabs[0]?.id); const [activeTab, setActiveTab] = useState(defaultActiveId || tabs[0]?.id);
const handleTabClick = (tabId: string) => { const handleTabClick = (tabId: string) => {
setActiveTab(tabId); setActiveTab(tabId);
onTabChange?.(tabId); onTabChange?.(tabId);
}; };
return ( return (
<div className="flex items-center gap-8"> <div className="flex items-center gap-8">
{tabs.map((tab) => { {tabs.map((tab) => {
const isActive = activeTab === tab.id; const isActive = activeTab === tab.id;
return ( return (
<button <button
key={tab.id} key={tab.id}
onClick={() => handleTabClick(tab.id)} onClick={() => handleTabClick(tab.id)}
className="flex flex-col gap-2 items-start" className="flex flex-col gap-2 items-start"
> >
<span <span
className={`text-sm font-bold leading-[150%] ${ className={`text-sm font-bold leading-[150%] ${
isActive ? "text-text-primary dark:text-white" : "text-text-tertiary dark:text-gray-400" isActive ? "text-text-primary dark:text-white" : "text-text-tertiary dark:text-gray-400"
}`} }`}
> >
{tab.label} {tab.label}
</span> </span>
<div <div
className={`self-stretch border-t-2 -mt-[2px] ${ className={`self-stretch border-t-2 -mt-[2px] ${
isActive ? "border-text-primary dark:border-white" : "border-transparent" isActive ? "border-text-primary dark:border-white" : "border-transparent"
}`} }`}
/> />
</button> </button>
); );
})} })}
</div> </div>
); );
} }

View File

@@ -1,46 +1,46 @@
"use client"; "use client";
import { useApp } from "@/contexts/AppContext"; import { useApp } from "@/contexts/AppContext";
export default function ThemeSwitch() { export default function ThemeSwitch() {
const { theme, setTheme } = useApp(); const { theme, setTheme } = useApp();
const toggleTheme = () => { const toggleTheme = () => {
setTheme(theme === "light" ? "dark" : "light"); setTheme(theme === "light" ? "dark" : "light");
}; };
return ( return (
<button <button
onClick={toggleTheme} onClick={toggleTheme}
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
> >
{theme === "light" ? ( {theme === "light" ? (
<svg width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
<path <path
d="M10 15C12.7614 15 15 12.7614 15 10C15 7.23858 12.7614 5 10 5C7.23858 5 5 7.23858 5 10C5 12.7614 7.23858 15 10 15Z" d="M10 15C12.7614 15 15 12.7614 15 10C15 7.23858 12.7614 5 10 5C7.23858 5 5 7.23858 5 10C5 12.7614 7.23858 15 10 15Z"
stroke="#111827" stroke="#111827"
strokeWidth="1.5" strokeWidth="1.5"
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
/> />
<path <path
d="M10 1V3M10 17V19M19 10H17M3 10H1M16.07 16.07L14.64 14.64M5.36 5.36L3.93 3.93M16.07 3.93L14.64 5.36M5.36 14.64L3.93 16.07" d="M10 1V3M10 17V19M19 10H17M3 10H1M16.07 16.07L14.64 14.64M5.36 5.36L3.93 3.93M16.07 3.93L14.64 5.36M5.36 14.64L3.93 16.07"
stroke="#111827" stroke="#111827"
strokeWidth="1.5" strokeWidth="1.5"
strokeLinecap="round" strokeLinecap="round"
/> />
</svg> </svg>
) : ( ) : (
<svg width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
<path <path
d="M17 10.79C16.8427 12.4922 16.1039 14.0754 14.9116 15.2662C13.7192 16.4571 12.1503 17.1913 10.4501 17.3464C8.74989 17.5016 7.04992 17.0676 5.63182 16.1159C4.21372 15.1642 3.15973 13.7534 2.63564 12.1102C2.11155 10.467 2.14637 8.68739 2.73477 7.06725C3.32317 5.44711 4.43113 4.07931 5.88616 3.18637C7.3412 2.29343 9.05859 1.93047 10.7542 2.15507C12.4498 2.37967 13.9989 3.17747 15.16 4.41" d="M17 10.79C16.8427 12.4922 16.1039 14.0754 14.9116 15.2662C13.7192 16.4571 12.1503 17.1913 10.4501 17.3464C8.74989 17.5016 7.04992 17.0676 5.63182 16.1159C4.21372 15.1642 3.15973 13.7534 2.63564 12.1102C2.11155 10.467 2.14637 8.68739 2.73477 7.06725C3.32317 5.44711 4.43113 4.07931 5.88616 3.18637C7.3412 2.29343 9.05859 1.93047 10.7542 2.15507C12.4498 2.37967 13.9989 3.17747 15.16 4.41"
stroke="#111827" stroke="#111827"
strokeWidth="1.5" strokeWidth="1.5"
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
/> />
</svg> </svg>
)} )}
</button> </button>
); );
} }

View File

@@ -1,50 +1,50 @@
import Image from "next/image"; import Image from "next/image";
import Breadcrumb from "./Breadcrumb"; import Breadcrumb from "./Breadcrumb";
import LanguageSwitch from "./LanguageSwitch"; import LanguageSwitch from "./LanguageSwitch";
import ThemeSwitch from "./ThemeSwitch"; import ThemeSwitch from "./ThemeSwitch";
export default function TopBar() { export default function TopBar() {
const breadcrumbItems = [ const breadcrumbItems = [
{ label: "ASSETX" }, { label: "ASSETX" },
{ label: "Product" }, { label: "Product" },
{ label: "Detail" }, { label: "Detail" },
]; ];
return ( return (
<div className="flex items-center justify-between w-full"> <div className="flex items-center justify-between w-full">
{/* Left: Breadcrumb */} {/* Left: Breadcrumb */}
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Breadcrumb items={breadcrumbItems} /> <Breadcrumb items={breadcrumbItems} />
</div> </div>
{/* Right: Actions */} {/* Right: Actions */}
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
{/* Language Switch */} {/* Language Switch */}
<LanguageSwitch /> <LanguageSwitch />
{/* Theme Switch */} {/* Theme Switch */}
<ThemeSwitch /> <ThemeSwitch />
{/* Wallet Button */} {/* Wallet Button */}
<button className="bg-bg-surface rounded-lg border border-border-normal px-2 py-2 flex items-center justify-center h-10"> <button className="bg-bg-surface rounded-lg border border-border-normal px-2 py-2 flex items-center justify-center h-10">
<Image src="/icon-wallet.svg" alt="Wallet" width={20} height={20} /> <Image src="/icon-wallet.svg" alt="Wallet" width={20} height={20} />
<Image <Image
src="/icon-notification.svg" src="/icon-notification.svg"
alt="Notification" alt="Notification"
width={14} width={14}
height={14} height={14}
className="ml-1" className="ml-1"
/> />
</button> </button>
{/* Address Button */} {/* Address Button */}
<button className="bg-text-primary rounded-lg px-4 py-2 flex items-center justify-center gap-2 h-10 hover:bg-gray-800 transition-colors"> <button className="bg-text-primary rounded-lg px-4 py-2 flex items-center justify-center gap-2 h-10 hover:bg-gray-800 transition-colors">
<Image src="/icon-copy.svg" alt="Copy" width={16} height={16} /> <Image src="/icon-copy.svg" alt="Copy" width={16} height={16} />
<span className="text-white text-sm font-bold font-jetbrains"> <span className="text-white text-sm font-bold font-jetbrains">
0x12...4F82 0x12...4F82
</span> </span>
</button> </button>
</div> </div>
</div> </div>
); );
} }

View File

@@ -1,338 +1,338 @@
{ {
"nav": { "nav": {
"fundMarket": "Fund Market", "fundMarket": "Fund Market",
"alp": "ALP", "alp": "ALP",
"swap": "Swap", "swap": "Swap",
"lending": "Lending", "lending": "Lending",
"transparency": "Transparency", "transparency": "Transparency",
"ecosystem": "Ecosystem", "ecosystem": "Ecosystem",
"points": "Points", "points": "Points",
"globalTVL": "Global TVL", "globalTVL": "Global TVL",
"faqs": "FAQs" "faqs": "FAQs"
}, },
"tabs": { "tabs": {
"overview": "Overview", "overview": "Overview",
"assetDescription": "Asset Description", "assetDescription": "Asset Description",
"analytics": "Analytics", "analytics": "Analytics",
"performanceAnalysis": "Performance Analysis", "performanceAnalysis": "Performance Analysis",
"assetCustody": "Asset Custody & Verification" "assetCustody": "Asset Custody & Verification"
}, },
"product": { "product": {
"gyUsEquityIndexToken": "High-Yield US Equity Quantitative Strategy", "gyUsEquityIndexToken": "High-Yield US Equity Quantitative Strategy",
"contractAddress": "Contract" "contractAddress": "Contract"
}, },
"stats": { "stats": {
"currentAPY": "Current APY", "currentAPY": "Current APY",
"totalValueLocked": "Total Value Locked", "totalValueLocked": "Total Value Locked",
"yourBalance": "Your Balance", "yourBalance": "Your Balance",
"yourEarnings": "Your Earnings", "yourEarnings": "Your Earnings",
"availableToWithdraw": "Available to Withdraw" "availableToWithdraw": "Available to Withdraw"
}, },
"assetOverview": { "assetOverview": {
"title": "Asset Overview", "title": "Asset Overview",
"mediumRisk": "Medium Risk", "mediumRisk": "Medium Risk",
"underlyingAssets": "Underlying Assets", "underlyingAssets": "Underlying Assets",
"usEquityIndex": "US Equity Index", "usEquityIndex": "US Equity Index",
"maturityRange": "Maturity Range", "maturityRange": "Maturity Range",
"cap": "Cap", "cap": "Cap",
"minInvestment": "Min. Investment", "minInvestment": "Min. Investment",
"poolCapacity": "Pool Capacity", "poolCapacity": "Pool Capacity",
"currentPrice": "Current Price" "currentPrice": "Current Price"
}, },
"apy": { "apy": {
"apyHistory": "APY History", "apyHistory": "APY History",
"priceHistory": "Price History", "priceHistory": "Price History",
"lastDays": "Last 30 days", "lastDays": "Last 30 days",
"highest": "Highest", "highest": "Highest",
"lowest": "Lowest" "lowest": "Lowest"
}, },
"description": { "description": {
"title": "Asset Description", "title": "Asset Description",
"content": "高盈美股量化策略 (High-Yield US Equity Quantitative Strategy) is an institutional-grade Real World Asset (RWA) offering investors exposure to a diversified portfolio of US equities. This strategy utilizes advanced quantitative models to generate high yields through market-neutral arbitrage and other sophisticated trading techniques. Designed for stability and consistent returns, it provides an on-chain gateway to traditional financial markets with enhanced transparency and instant settlement.\n\nThe strategy aims to minimize market risk while maximizing yield generation, making it suitable for investors seeking stable growth within the decentralized finance ecosystem. Underlying assets are held by institutional custodians and verified through robust compliance frameworks." "content": "高盈美股量化策略 (High-Yield US Equity Quantitative Strategy) is an institutional-grade Real World Asset (RWA) offering investors exposure to a diversified portfolio of US equities. This strategy utilizes advanced quantitative models to generate high yields through market-neutral arbitrage and other sophisticated trading techniques. Designed for stability and consistent returns, it provides an on-chain gateway to traditional financial markets with enhanced transparency and instant settlement.\n\nThe strategy aims to minimize market risk while maximizing yield generation, making it suitable for investors seeking stable growth within the decentralized finance ecosystem. Underlying assets are held by institutional custodians and verified through robust compliance frameworks."
}, },
"mintSwap": { "mintSwap": {
"mint": "Mint", "mint": "Mint",
"swap": "Swap", "swap": "Swap",
"deposit": "Deposit", "deposit": "Deposit",
"withdraw": "Withdraw", "withdraw": "Withdraw",
"balance": "Bal", "balance": "Bal",
"max": "MAX", "max": "MAX",
"estimatedReturns": "Estimated Returns", "estimatedReturns": "Estimated Returns",
"estAPY": "Est. APY", "estAPY": "Est. APY",
"estReturns": "Est. Returns", "estReturns": "Est. Returns",
"transactionSummary": "Transaction Summary", "transactionSummary": "Transaction Summary",
"youGet": "You Get", "youGet": "You Get",
"salesPrice": "Sales Price", "salesPrice": "Sales Price",
"fee": "Fee", "fee": "Fee",
"gas": "Gas", "gas": "Gas",
"approveDeposit": "Approve & Deposit USDC", "approveDeposit": "Approve & Deposit USDC",
"termsText": "By depositing, you agree to the", "termsText": "By depositing, you agree to the",
"termsOfService": "Terms of Service", "termsOfService": "Terms of Service",
"and": "and", "and": "and",
"privacyPolicy": "Privacy Policy" "privacyPolicy": "Privacy Policy"
}, },
"protocol": { "protocol": {
"title": "Protocol Information", "title": "Protocol Information",
"whitepaper": "Whitepaper", "whitepaper": "Whitepaper",
"documentation": "Documentation", "documentation": "Documentation",
"github": "GitHub" "github": "GitHub"
}, },
"rewards": { "rewards": {
"season1": "Season 1 Rewards", "season1": "Season 1 Rewards",
"live": "Live", "live": "Live",
"earnPoints": "Earn 1 point per USDC per day holding GY-US", "earnPoints": "Earn 1 point per USDC per day holding GY-US",
"yourPoints": "Your Points", "yourPoints": "Your Points",
"badgeBoost": "Badge Boost", "badgeBoost": "Badge Boost",
"referrals": "Referrals" "referrals": "Referrals"
}, },
"performance": { "performance": {
"title": "Performance Analysis", "title": "Performance Analysis",
"description": "Historical daily net returns for the High-Yield US Equity Strategy.", "description": "Historical daily net returns for the High-Yield US Equity Strategy.",
"ytd": "2025 YTD", "ytd": "2025 YTD",
"dailyNetReturns": "Daily Net Returns (%)", "dailyNetReturns": "Daily Net Returns (%)",
"weekdays": { "weekdays": {
"sun": "SUN", "sun": "SUN",
"mon": "MON", "mon": "MON",
"tue": "TUE", "tue": "TUE",
"wed": "WED", "wed": "WED",
"thu": "THU", "thu": "THU",
"fri": "FRI", "fri": "FRI",
"sat": "SAT" "sat": "SAT"
} }
}, },
"custody": { "custody": {
"title": "Asset Custody & Verification", "title": "Asset Custody & Verification",
"description": "Real-time view of underlying asset holdings and institutional custodian verification status.", "description": "Real-time view of underlying asset holdings and institutional custodian verification status.",
"underlyingHoldings": "Underlying Asset Holdings", "underlyingHoldings": "Underlying Asset Holdings",
"verifiedBy": "Verified by third-party institutional custodians", "verifiedBy": "Verified by third-party institutional custodians",
"lastUpdated": "Last updated", "lastUpdated": "Last updated",
"minutesAgo": "minutes ago", "minutesAgo": "minutes ago",
"custodian": "Custodian", "custodian": "Custodian",
"assetType": "Asset Type", "assetType": "Asset Type",
"maturity": "Maturity", "maturity": "Maturity",
"valueUSD": "Value (USD)", "valueUSD": "Value (USD)",
"status": "Status", "status": "Status",
"verified": "Verified", "verified": "Verified",
"totalValue": "Total underlying asset value", "totalValue": "Total underlying asset value",
"smartContract": "Smart Contract", "smartContract": "Smart Contract",
"smartContractDesc": "Audited by OpenZeppelin & Certik for security and reliability.", "smartContractDesc": "Audited by OpenZeppelin & Certik for security and reliability.",
"compliance": "Compliance", "compliance": "Compliance",
"complianceDesc": "SEC-regulated structure & bankruptcy remote legal framework.", "complianceDesc": "SEC-regulated structure & bankruptcy remote legal framework.",
"proofOfReserves": "Proof of Reserves", "proofOfReserves": "Proof of Reserves",
"proofDesc": "Real-time on-chain verification via Chainlink Oracle.", "proofDesc": "Real-time on-chain verification via Chainlink Oracle.",
"viewReports": "View Reports", "viewReports": "View Reports",
"independentVerifications": "Independent Verifications", "independentVerifications": "Independent Verifications",
"independentDesc": "Every month, assetX undergoes third-party auditing to ensure complete transparency.", "independentDesc": "Every month, assetX undergoes third-party auditing to ensure complete transparency.",
"attestationReport": "Attestation Report", "attestationReport": "Attestation Report",
"viewAllArchive": "View All Archive", "viewAllArchive": "View All Archive",
"morganStanley": "Morgan Stanley", "morganStanley": "Morgan Stanley",
"primeBroker": "Prime Broker", "primeBroker": "Prime Broker",
"usEquityPortfolio": "US Equity Portfolio", "usEquityPortfolio": "US Equity Portfolio",
"days": "days" "days": "days"
}, },
"productPage": { "productPage": {
"title": "AssetX Fund Market", "title": "AssetX Fund Market",
"assets": "Assets", "assets": "Assets",
"totalValueLocked": "Total Value Locked", "totalValueLocked": "Total Value Locked",
"cumulativeYield": "Cumulative Yield", "cumulativeYield": "Cumulative Yield",
"yourTotalBalance": "Your Total Balance", "yourTotalBalance": "Your Total Balance",
"yourTotalEarning": "Your Total Earning", "yourTotalEarning": "Your Total Earning",
"yieldAPY": "Yield APY", "yieldAPY": "Yield APY",
"poolCap": "Pool CaP", "poolCap": "Pool CaP",
"maturity": "Maturity", "maturity": "Maturity",
"risk": "Risk", "risk": "Risk",
"lockUp": "Lock-Up", "lockUp": "Lock-Up",
"circulatingSupply": "Circulating supply", "circulatingSupply": "Circulating supply",
"poolCapacity": "Pool Capacity", "poolCapacity": "Pool Capacity",
"filled": "Filled", "filled": "Filled",
"invest": "Invest", "invest": "Invest",
"quantStrategy": "Quant Strategy", "quantStrategy": "Quant Strategy",
"realEstate": "Real Estate", "realEstate": "Real Estate",
"low": "LOW", "low": "LOW",
"medium": "Medium", "medium": "Medium",
"high": "High" "high": "High"
}, },
"alp": { "alp": {
"title": "AssetX Liquidity Pool", "title": "AssetX Liquidity Pool",
"price": "Price", "price": "Price",
"poolAPR": "Pool APR", "poolAPR": "Pool APR",
"rewardAPR": "Reward APR", "rewardAPR": "Reward APR",
"priceHistory": "Price History", "priceHistory": "Price History",
"lastDays": "Last 30 days", "lastDays": "Last 30 days",
"avg": "Avg", "avg": "Avg",
"highest": "Highest", "highest": "Highest",
"lowest": "Lowest", "lowest": "Lowest",
"current": "Current", "current": "Current",
"sell": "SELL", "sell": "SELL",
"buy": "BUY", "buy": "BUY",
"buyUsdc": "Buy USDC", "buyUsdc": "Buy USDC",
"liquidityAllocation": "Liquidity Allocation", "liquidityAllocation": "Liquidity Allocation",
"token": "TOKEN", "token": "TOKEN",
"poolSize": "Pool Size", "poolSize": "Pool Size",
"currentTargetWeight": "Current / Target Weight", "currentTargetWeight": "Current / Target Weight",
"currentPrice": "Current Price", "currentPrice": "Current Price",
"quantStrategy": "Quant Strategy" "quantStrategy": "Quant Strategy"
}, },
"swap": { "swap": {
"title": "AssetX SWAP", "title": "AssetX SWAP",
"subtitle": "Trade Yield Tokens instantly with AssetX LP Vault" "subtitle": "Trade Yield Tokens instantly with AssetX LP Vault"
}, },
"lending": { "lending": {
"title": "Lending Market", "title": "Lending Market",
"subtitle": "Borrow USDC against your Yield Token holdings.", "subtitle": "Borrow USDC against your Yield Token holdings.",
"totalUsdcSupply": "TOTAL USDC SUPPLY", "totalUsdcSupply": "TOTAL USDC SUPPLY",
"utilization": "UTILIZATION", "utilization": "UTILIZATION",
"activeLoans": "ACTIVE LOANS", "activeLoans": "ACTIVE LOANS",
"usdcBorrowed": "USDC Borrowed", "usdcBorrowed": "USDC Borrowed",
"vsLastMonth": "vs last month", "vsLastMonth": "vs last month",
"avgApy": "Avg. APY", "avgApy": "Avg. APY",
"stableYield": "Stable yield environment", "stableYield": "Stable yield environment",
"yourPortfolio": "Your Portfolio", "yourPortfolio": "Your Portfolio",
"earned": "EARNED", "earned": "EARNED",
"supplyUsdc": "Supply USDC", "supplyUsdc": "Supply USDC",
"borrowMarket": "Borrow Market", "borrowMarket": "Borrow Market",
"yourBalance": "Your Balance", "yourBalance": "Your Balance",
"yourInterest": "Your Interest", "yourInterest": "Your Interest",
"borrowed": "Borrowed", "borrowed": "Borrowed",
"ltv": "LTV", "ltv": "LTV",
"repay": "Repay", "repay": "Repay",
"borrow": "Borrow" "borrow": "Borrow"
}, },
"supply": { "supply": {
"supply": "Supply", "supply": "Supply",
"withdraw": "Withdraw", "withdraw": "Withdraw",
"tokenBalance": "Token Balance", "tokenBalance": "Token Balance",
"supplied": "Supplied", "supplied": "Supplied",
"deposit": "Deposit", "deposit": "Deposit",
"max": "MAX", "max": "MAX",
"healthFactor": "Health Factor", "healthFactor": "Health Factor",
"utilization": "Utilization", "utilization": "Utilization",
"safe": "Safe", "safe": "Safe",
"estimatedReturns": "Estimated Returns", "estimatedReturns": "Estimated Returns",
"estApy": "Est. APY", "estApy": "Est. APY",
"estReturnsYear": "Est. Returns (/Year)", "estReturnsYear": "Est. Returns (/Year)",
"usdcLendPool": "USDC Lend Pool", "usdcLendPool": "USDC Lend Pool",
"historicalApy": "HISTORICAL APY" "historicalApy": "HISTORICAL APY"
}, },
"repay": { "repay": {
"backToLending": "Back to lending", "backToLending": "Back to lending",
"supplyToBorrow": "Supply YT/ALP to Borrow USDC", "supplyToBorrow": "Supply YT/ALP to Borrow USDC",
"price": "Price", "price": "Price",
"available": "Available", "available": "Available",
"supplyCollateral": "Supply Collateral", "supplyCollateral": "Supply Collateral",
"borrowDebt": "Borrow Debt", "borrowDebt": "Borrow Debt",
"deposit": "Deposit", "deposit": "Deposit",
"withdraw": "Withdraw", "withdraw": "Withdraw",
"borrow": "Borrow", "borrow": "Borrow",
"repay": "Repay", "repay": "Repay",
"apr": "APR", "apr": "APR",
"netApr": "NET APR", "netApr": "NET APR",
"liqPriceOffset": "Liq.price/offset", "liqPriceOffset": "Liq.price/offset",
"positionHealth": "Position Health", "positionHealth": "Position Health",
"totalValueLocked": "Total Value Locked in Pool", "totalValueLocked": "Total Value Locked in Pool",
"utilization": "Utilization", "utilization": "Utilization",
"rewardMultiplier": "Reward Multiplier" "rewardMultiplier": "Reward Multiplier"
}, },
"transparency": { "transparency": {
"title": "Transparency", "title": "Transparency",
"subtitle": "Real-time view of all reserve assets and positions", "subtitle": "Real-time view of all reserve assets and positions",
"totalReserves": "Total Reserves", "totalReserves": "Total Reserves",
"totalUsdcSupply": "TOTAL USDC SUPPLY", "totalUsdcSupply": "TOTAL USDC SUPPLY",
"utilization": "UTILIZATION", "utilization": "UTILIZATION",
"activeLoans": "ACTIVE LOANS", "activeLoans": "ACTIVE LOANS",
"rwaHoldings": "RWA Holdings", "rwaHoldings": "RWA Holdings",
"rwaSubtitle": "Real-world assets held by institutional custodians", "rwaSubtitle": "Real-world assets held by institutional custodians",
"lastUpdated": "Last updated", "lastUpdated": "Last updated",
"minutesAgo": "minutes ago", "minutesAgo": "minutes ago",
"custodian": "Custodian", "custodian": "Custodian",
"assetType": "Asset Type", "assetType": "Asset Type",
"maturity": "Maturity", "maturity": "Maturity",
"valueUsd": "Value (USD)", "valueUsd": "Value (USD)",
"status": "Status", "status": "Status",
"verified": "Verified", "verified": "Verified",
"assetDistribution": "Asset Distribution", "assetDistribution": "Asset Distribution",
"distributionSubtitle": "Portfolio breakdown by risk class", "distributionSubtitle": "Portfolio breakdown by risk class",
"geographicAllocation": "Geographic Allocation", "geographicAllocation": "Geographic Allocation",
"geographicSubtitle": "Assets by jurisdictional region", "geographicSubtitle": "Assets by jurisdictional region",
"realEstate": "Real Estate", "realEstate": "Real Estate",
"usTreasuryBills": "US Treasury Bills", "usTreasuryBills": "US Treasury Bills",
"privateCredit": "Private Credit", "privateCredit": "Private Credit",
"fixedIncome": "Fixed Income", "fixedIncome": "Fixed Income",
"alternativeAssets": "Alternative Assets", "alternativeAssets": "Alternative Assets",
"alternativeCredit": "Alternative Credit", "alternativeCredit": "Alternative Credit",
"unitedStates": "United States", "unitedStates": "United States",
"northAmerica": "North America", "northAmerica": "North America",
"hongKong": "Hong Kong", "hongKong": "Hong Kong",
"asiaPacific": "Asia Pacific", "asiaPacific": "Asia Pacific",
"morganStanley": "Morgan Stanley", "morganStanley": "Morgan Stanley",
"primeBroker": "Prime Broker", "primeBroker": "Prime Broker",
"usEquityPortfolio": "US Equity Portfolio", "usEquityPortfolio": "US Equity Portfolio",
"days": "days" "days": "days"
}, },
"points": { "points": {
"title": "Points", "title": "Points",
"season1": "Season 1", "season1": "Season 1",
"live": "Live", "live": "Live",
"xPoints": "7x Points", "xPoints": "7x Points",
"pointsDashboard": "Points Dashboard", "pointsDashboard": "Points Dashboard",
"unlockUpTo": "Unlock up to", "unlockUpTo": "Unlock up to",
"withEcosystemMultipliers": "with ecosystem multipliers.", "withEcosystemMultipliers": "with ecosystem multipliers.",
"yourTotalPoints": "Your Total Points", "yourTotalPoints": "Your Total Points",
"globalRank": "Global Rank", "globalRank": "Global Rank",
"topOfUsers": "Top 12% of users", "topOfUsers": "Top 12% of users",
"endsIn": "Ends In", "endsIn": "Ends In",
"silverMember": "Silver Member", "silverMember": "Silver Member",
"goldMember": "Gold Member", "goldMember": "Gold Member",
"platinumMember": "Platinum Member", "platinumMember": "Platinum Member",
"currentTier": "Current Tier", "currentTier": "Current Tier",
"progress": "Progress", "progress": "Progress",
"pointsTo": "points to", "pointsTo": "points to",
"referralCode": "REFERRAL CODE", "referralCode": "REFERRAL CODE",
"shareYourCode": "Share your unique code to earn 10% commission on all friend activities.", "shareYourCode": "Share your unique code to earn 10% commission on all friend activities.",
"copy": "Copy", "copy": "Copy",
"share": "Share", "share": "Share",
"bindInviteCode": "BIND INVITE CODE", "bindInviteCode": "BIND INVITE CODE",
"enterInviteCode": "Enter your friend's invite code to unlock bonus points.", "enterInviteCode": "Enter your friend's invite code to unlock bonus points.",
"enterCode": "ENTER CODE", "enterCode": "ENTER CODE",
"apply": "Apply", "apply": "Apply",
"teamTVL": "TEAM TVL", "teamTVL": "TEAM TVL",
"buildYourTeam": "Build your team to reach milestones and unlock rewards.", "buildYourTeam": "Build your team to reach milestones and unlock rewards.",
"members": "Members", "members": "Members",
"whales": "Whales", "whales": "Whales",
"traders": "Traders", "traders": "Traders",
"users": "Users", "users": "Users",
"depositToAlp": "Deposit USDC to ALP", "depositToAlp": "Deposit USDC to ALP",
"nativeStaking": "Native Staking", "nativeStaking": "Native Staking",
"upTo3x": "UP TO 3X", "upTo3x": "UP TO 3X",
"lockPeriod": "30 DAYS", "lockPeriod": "30 DAYS",
"pointsBoost": "+10% POINTS", "pointsBoost": "+10% POINTS",
"deposit": "Deposit", "deposit": "Deposit",
"pendleYT": "Pendle YT", "pendleYT": "Pendle YT",
"yieldTradingOptimization": "Yield Trading optimization", "yieldTradingOptimization": "Yield Trading optimization",
"curveLp": "Curve LP", "curveLp": "Curve LP",
"liquidityPoolProvision": "Liquidity Pool provision", "liquidityPoolProvision": "Liquidity Pool provision",
"morpho": "Morpho", "morpho": "Morpho",
"lendingLoopStrategy": "Lending Loop strategy", "lendingLoopStrategy": "Lending Loop strategy",
"estApy": "EST. APY", "estApy": "EST. APY",
"currentApy": "CURRENT APY", "currentApy": "CURRENT APY",
"maxLtv": "MAX LTV", "maxLtv": "MAX LTV",
"zapIn": "ZAP IN", "zapIn": "ZAP IN",
"addLiquidity": "Add Liquidity", "addLiquidity": "Add Liquidity",
"startLoop": "Start LOOP", "startLoop": "Start LOOP",
"activityHistory": "Activity History", "activityHistory": "Activity History",
"trackActivities": "Track all your points-earning activities", "trackActivities": "Track all your points-earning activities",
"lastUpdatedMinutesAgo": "Last updated: 2 minutes ago", "lastUpdatedMinutesAgo": "Last updated: 2 minutes ago",
"all": "All", "all": "All",
"referrals": "Referrals", "referrals": "Referrals",
"deposits": "Deposits", "deposits": "Deposits",
"user": "User", "user": "User",
"friends": "Friends", "friends": "Friends",
"code": "Code", "code": "Code",
"points": "Points", "points": "Points",
"topPerformers": "Top Performers", "topPerformers": "Top Performers",
"leaderboard": "Leaderboard of highest earners this season", "leaderboard": "Leaderboard of highest earners this season",
"rank": "Rank", "rank": "Rank",
"address": "Address", "address": "Address",
"level": "Level" "level": "Level"
} }
} }

View File

@@ -1,338 +1,338 @@
{ {
"nav": { "nav": {
"fundMarket": "基金市场", "fundMarket": "基金市场",
"alp": "ALP", "alp": "ALP",
"swap": "交换", "swap": "交换",
"lending": "借贷", "lending": "借贷",
"transparency": "透明度", "transparency": "透明度",
"ecosystem": "生态系统", "ecosystem": "生态系统",
"points": "积分", "points": "积分",
"globalTVL": "全球锁仓总值", "globalTVL": "全球锁仓总值",
"faqs": "常见问题" "faqs": "常见问题"
}, },
"tabs": { "tabs": {
"overview": "概览", "overview": "概览",
"assetDescription": "资产描述", "assetDescription": "资产描述",
"analytics": "分析", "analytics": "分析",
"performanceAnalysis": "业绩分析", "performanceAnalysis": "业绩分析",
"assetCustody": "资产托管与验证" "assetCustody": "资产托管与验证"
}, },
"product": { "product": {
"gyUsEquityIndexToken": "高盈美股量化策略", "gyUsEquityIndexToken": "高盈美股量化策略",
"contractAddress": "合约地址" "contractAddress": "合约地址"
}, },
"stats": { "stats": {
"currentAPY": "当前年化收益率", "currentAPY": "当前年化收益率",
"totalValueLocked": "总锁仓价值", "totalValueLocked": "总锁仓价值",
"yourBalance": "您的余额", "yourBalance": "您的余额",
"yourEarnings": "您的收益", "yourEarnings": "您的收益",
"availableToWithdraw": "可提取金额" "availableToWithdraw": "可提取金额"
}, },
"assetOverview": { "assetOverview": {
"title": "资产概览", "title": "资产概览",
"mediumRisk": "中等风险", "mediumRisk": "中等风险",
"underlyingAssets": "基础资产", "underlyingAssets": "基础资产",
"usEquityIndex": "美国股票指数", "usEquityIndex": "美国股票指数",
"maturityRange": "到期日范围", "maturityRange": "到期日范围",
"cap": "上限", "cap": "上限",
"minInvestment": "最小投资额", "minInvestment": "最小投资额",
"poolCapacity": "资金池容量", "poolCapacity": "资金池容量",
"currentPrice": "当前价格" "currentPrice": "当前价格"
}, },
"apy": { "apy": {
"apyHistory": "APY 历史", "apyHistory": "APY 历史",
"priceHistory": "价格历史", "priceHistory": "价格历史",
"lastDays": "最近 30 天", "lastDays": "最近 30 天",
"highest": "最高", "highest": "最高",
"lowest": "最低" "lowest": "最低"
}, },
"description": { "description": {
"title": "资产描述", "title": "资产描述",
"content": "高盈美股量化策略High-Yield US Equity Quantitative Strategy是一款机构级真实世界资产RWA产品为投资者提供多元化的美国股票投资组合敞口。该策略利用先进的量化模型通过市场中性套利和其他复杂的交易技术来产生高收益。专为稳定性和持续回报而设计它提供了一个通往传统金融市场的链上通道具有更高的透明度和即时结算功能。\n\n该策略旨在最小化市场风险的同时最大化收益生成适合在去中心化金融生态系统中寻求稳定增长的投资者。基础资产由机构托管人持有并通过健全的合规框架进行验证。" "content": "高盈美股量化策略High-Yield US Equity Quantitative Strategy是一款机构级真实世界资产RWA产品为投资者提供多元化的美国股票投资组合敞口。该策略利用先进的量化模型通过市场中性套利和其他复杂的交易技术来产生高收益。专为稳定性和持续回报而设计它提供了一个通往传统金融市场的链上通道具有更高的透明度和即时结算功能。\n\n该策略旨在最小化市场风险的同时最大化收益生成适合在去中心化金融生态系统中寻求稳定增长的投资者。基础资产由机构托管人持有并通过健全的合规框架进行验证。"
}, },
"mintSwap": { "mintSwap": {
"mint": "铸造", "mint": "铸造",
"swap": "交换", "swap": "交换",
"deposit": "存入", "deposit": "存入",
"withdraw": "提取", "withdraw": "提取",
"balance": "余额", "balance": "余额",
"max": "最大", "max": "最大",
"estimatedReturns": "预计收益", "estimatedReturns": "预计收益",
"estAPY": "预计 APY", "estAPY": "预计 APY",
"estReturns": "预计回报", "estReturns": "预计回报",
"transactionSummary": "交易摘要", "transactionSummary": "交易摘要",
"youGet": "您将获得", "youGet": "您将获得",
"salesPrice": "销售价格", "salesPrice": "销售价格",
"fee": "手续费", "fee": "手续费",
"gas": "Gas 费用", "gas": "Gas 费用",
"approveDeposit": "批准并存入 USDC", "approveDeposit": "批准并存入 USDC",
"termsText": "通过存入,您同意", "termsText": "通过存入,您同意",
"termsOfService": "服务条款", "termsOfService": "服务条款",
"and": "和", "and": "和",
"privacyPolicy": "隐私政策" "privacyPolicy": "隐私政策"
}, },
"protocol": { "protocol": {
"title": "协议信息", "title": "协议信息",
"whitepaper": "白皮书", "whitepaper": "白皮书",
"documentation": "文档", "documentation": "文档",
"github": "GitHub" "github": "GitHub"
}, },
"rewards": { "rewards": {
"season1": "第一季奖励", "season1": "第一季奖励",
"live": "进行中", "live": "进行中",
"earnPoints": "持有 GY-US 每天每 USDC 赚取 1 积分", "earnPoints": "持有 GY-US 每天每 USDC 赚取 1 积分",
"yourPoints": "您的积分", "yourPoints": "您的积分",
"badgeBoost": "徽章加成", "badgeBoost": "徽章加成",
"referrals": "推荐" "referrals": "推荐"
}, },
"performance": { "performance": {
"title": "业绩分析", "title": "业绩分析",
"description": "高收益美国股票策略的历史每日净回报。", "description": "高收益美国股票策略的历史每日净回报。",
"ytd": "2025 年初至今", "ytd": "2025 年初至今",
"dailyNetReturns": "每日净回报 (%)", "dailyNetReturns": "每日净回报 (%)",
"weekdays": { "weekdays": {
"sun": "周日", "sun": "周日",
"mon": "周一", "mon": "周一",
"tue": "周二", "tue": "周二",
"wed": "周三", "wed": "周三",
"thu": "周四", "thu": "周四",
"fri": "周五", "fri": "周五",
"sat": "周六" "sat": "周六"
} }
}, },
"custody": { "custody": {
"title": "资产托管与验证", "title": "资产托管与验证",
"description": "实时查看基础资产持有情况和机构托管人验证状态。", "description": "实时查看基础资产持有情况和机构托管人验证状态。",
"underlyingHoldings": "基础资产持有量", "underlyingHoldings": "基础资产持有量",
"verifiedBy": "由第三方机构托管人验证", "verifiedBy": "由第三方机构托管人验证",
"lastUpdated": "最后更新", "lastUpdated": "最后更新",
"minutesAgo": "分钟前", "minutesAgo": "分钟前",
"custodian": "托管人", "custodian": "托管人",
"assetType": "资产类型", "assetType": "资产类型",
"maturity": "到期日", "maturity": "到期日",
"valueUSD": "价值 (USD)", "valueUSD": "价值 (USD)",
"status": "状态", "status": "状态",
"verified": "已验证", "verified": "已验证",
"totalValue": "基础资产总价值", "totalValue": "基础资产总价值",
"smartContract": "智能合约", "smartContract": "智能合约",
"smartContractDesc": "由 OpenZeppelin 和 Certik 审计,确保安全性和可靠性。", "smartContractDesc": "由 OpenZeppelin 和 Certik 审计,确保安全性和可靠性。",
"compliance": "合规性", "compliance": "合规性",
"complianceDesc": "SEC 监管结构和破产隔离法律框架。", "complianceDesc": "SEC 监管结构和破产隔离法律框架。",
"proofOfReserves": "储备证明", "proofOfReserves": "储备证明",
"proofDesc": "通过 Chainlink Oracle 进行实时链上验证。", "proofDesc": "通过 Chainlink Oracle 进行实时链上验证。",
"viewReports": "查看报告", "viewReports": "查看报告",
"independentVerifications": "独立验证", "independentVerifications": "独立验证",
"independentDesc": "每月 assetX 都会接受第三方审计以确保完全透明。", "independentDesc": "每月 assetX 都会接受第三方审计以确保完全透明。",
"attestationReport": "证明报告", "attestationReport": "证明报告",
"viewAllArchive": "查看所有存档", "viewAllArchive": "查看所有存档",
"morganStanley": "摩根士丹利", "morganStanley": "摩根士丹利",
"primeBroker": "主经纪商", "primeBroker": "主经纪商",
"usEquityPortfolio": "美国股票投资组合", "usEquityPortfolio": "美国股票投资组合",
"days": "天" "days": "天"
}, },
"productPage": { "productPage": {
"title": "AssetX 基金市场", "title": "AssetX 基金市场",
"assets": "资产", "assets": "资产",
"totalValueLocked": "总锁仓量", "totalValueLocked": "总锁仓量",
"cumulativeYield": "累计收益", "cumulativeYield": "累计收益",
"yourTotalBalance": "您的总余额", "yourTotalBalance": "您的总余额",
"yourTotalEarning": "您的总收益", "yourTotalEarning": "您的总收益",
"yieldAPY": "收益率 APY", "yieldAPY": "收益率 APY",
"poolCap": "池容量", "poolCap": "池容量",
"maturity": "到期日", "maturity": "到期日",
"risk": "风险", "risk": "风险",
"lockUp": "锁仓期", "lockUp": "锁仓期",
"circulatingSupply": "流通量", "circulatingSupply": "流通量",
"poolCapacity": "池容量", "poolCapacity": "池容量",
"filled": "已填充", "filled": "已填充",
"invest": "投资", "invest": "投资",
"quantStrategy": "量化策略", "quantStrategy": "量化策略",
"realEstate": "房地产", "realEstate": "房地产",
"low": "低", "low": "低",
"medium": "中", "medium": "中",
"high": "高" "high": "高"
}, },
"alp": { "alp": {
"title": "AssetX 流动性池", "title": "AssetX 流动性池",
"price": "价格", "price": "价格",
"poolAPR": "池收益率", "poolAPR": "池收益率",
"rewardAPR": "奖励收益率", "rewardAPR": "奖励收益率",
"priceHistory": "价格历史", "priceHistory": "价格历史",
"lastDays": "最近 30 天", "lastDays": "最近 30 天",
"avg": "平均", "avg": "平均",
"highest": "最高", "highest": "最高",
"lowest": "最低", "lowest": "最低",
"current": "当前", "current": "当前",
"sell": "卖出", "sell": "卖出",
"buy": "买入", "buy": "买入",
"buyUsdc": "购买 USDC", "buyUsdc": "购买 USDC",
"liquidityAllocation": "流动性分配", "liquidityAllocation": "流动性分配",
"token": "代币", "token": "代币",
"poolSize": "池容量", "poolSize": "池容量",
"currentTargetWeight": "当前 / 目标权重", "currentTargetWeight": "当前 / 目标权重",
"currentPrice": "当前价格", "currentPrice": "当前价格",
"quantStrategy": "量化策略" "quantStrategy": "量化策略"
}, },
"swap": { "swap": {
"title": "AssetX 交换", "title": "AssetX 交换",
"subtitle": "使用 AssetX LP 保险库即时交易收益代币" "subtitle": "使用 AssetX LP 保险库即时交易收益代币"
}, },
"lending": { "lending": {
"title": "借贷市场", "title": "借贷市场",
"subtitle": "使用您的收益代币作为抵押借入 USDC。", "subtitle": "使用您的收益代币作为抵押借入 USDC。",
"totalUsdcSupply": "USDC 总供应量", "totalUsdcSupply": "USDC 总供应量",
"utilization": "利用率", "utilization": "利用率",
"activeLoans": "活跃贷款", "activeLoans": "活跃贷款",
"usdcBorrowed": "已借出 USDC", "usdcBorrowed": "已借出 USDC",
"vsLastMonth": "较上月", "vsLastMonth": "较上月",
"avgApy": "平均年化收益率", "avgApy": "平均年化收益率",
"stableYield": "稳定收益环境", "stableYield": "稳定收益环境",
"yourPortfolio": "您的投资组合", "yourPortfolio": "您的投资组合",
"earned": "已赚取", "earned": "已赚取",
"supplyUsdc": "供应 USDC", "supplyUsdc": "供应 USDC",
"borrowMarket": "借贷市场", "borrowMarket": "借贷市场",
"yourBalance": "您的余额", "yourBalance": "您的余额",
"yourInterest": "您的利息", "yourInterest": "您的利息",
"borrowed": "已借出", "borrowed": "已借出",
"ltv": "贷款价值比", "ltv": "贷款价值比",
"repay": "还款", "repay": "还款",
"borrow": "借款" "borrow": "借款"
}, },
"supply": { "supply": {
"supply": "供应", "supply": "供应",
"withdraw": "提取", "withdraw": "提取",
"tokenBalance": "代币余额", "tokenBalance": "代币余额",
"supplied": "已供应", "supplied": "已供应",
"deposit": "存入", "deposit": "存入",
"max": "最大", "max": "最大",
"healthFactor": "健康因子", "healthFactor": "健康因子",
"utilization": "利用率", "utilization": "利用率",
"safe": "安全", "safe": "安全",
"estimatedReturns": "预计收益", "estimatedReturns": "预计收益",
"estApy": "预计年化收益率", "estApy": "预计年化收益率",
"estReturnsYear": "预计收益(/年)", "estReturnsYear": "预计收益(/年)",
"usdcLendPool": "USDC 借贷池", "usdcLendPool": "USDC 借贷池",
"historicalApy": "历史年化收益率" "historicalApy": "历史年化收益率"
}, },
"repay": { "repay": {
"backToLending": "返回借贷", "backToLending": "返回借贷",
"supplyToBorrow": "供应 YT/ALP 以借入 USDC", "supplyToBorrow": "供应 YT/ALP 以借入 USDC",
"price": "价格", "price": "价格",
"available": "可用", "available": "可用",
"supplyCollateral": "供应抵押品", "supplyCollateral": "供应抵押品",
"borrowDebt": "借入债务", "borrowDebt": "借入债务",
"deposit": "存入", "deposit": "存入",
"withdraw": "提取", "withdraw": "提取",
"borrow": "借款", "borrow": "借款",
"repay": "还款", "repay": "还款",
"apr": "年化收益率", "apr": "年化收益率",
"netApr": "净年化收益率", "netApr": "净年化收益率",
"liqPriceOffset": "清算价格/偏移", "liqPriceOffset": "清算价格/偏移",
"positionHealth": "仓位健康度", "positionHealth": "仓位健康度",
"totalValueLocked": "池内总锁仓价值", "totalValueLocked": "池内总锁仓价值",
"utilization": "利用率", "utilization": "利用率",
"rewardMultiplier": "奖励倍数" "rewardMultiplier": "奖励倍数"
}, },
"transparency": { "transparency": {
"title": "透明度", "title": "透明度",
"subtitle": "所有储备资产和仓位的实时视图", "subtitle": "所有储备资产和仓位的实时视图",
"totalReserves": "总储备", "totalReserves": "总储备",
"totalUsdcSupply": "USDC 总供应量", "totalUsdcSupply": "USDC 总供应量",
"utilization": "利用率", "utilization": "利用率",
"activeLoans": "活跃贷款", "activeLoans": "活跃贷款",
"rwaHoldings": "RWA 持有量", "rwaHoldings": "RWA 持有量",
"rwaSubtitle": "由机构托管人持有的真实世界资产", "rwaSubtitle": "由机构托管人持有的真实世界资产",
"lastUpdated": "最后更新", "lastUpdated": "最后更新",
"minutesAgo": "分钟前", "minutesAgo": "分钟前",
"custodian": "托管人", "custodian": "托管人",
"assetType": "资产类型", "assetType": "资产类型",
"maturity": "到期日", "maturity": "到期日",
"valueUsd": "价值 (USD)", "valueUsd": "价值 (USD)",
"status": "状态", "status": "状态",
"verified": "已验证", "verified": "已验证",
"assetDistribution": "资产分布", "assetDistribution": "资产分布",
"distributionSubtitle": "按风险等级划分的投资组合", "distributionSubtitle": "按风险等级划分的投资组合",
"geographicAllocation": "地理分配", "geographicAllocation": "地理分配",
"geographicSubtitle": "按司法管辖区域划分的资产", "geographicSubtitle": "按司法管辖区域划分的资产",
"realEstate": "房地产", "realEstate": "房地产",
"usTreasuryBills": "美国国债", "usTreasuryBills": "美国国债",
"privateCredit": "私人信贷", "privateCredit": "私人信贷",
"fixedIncome": "固定收益", "fixedIncome": "固定收益",
"alternativeAssets": "另类资产", "alternativeAssets": "另类资产",
"alternativeCredit": "另类信贷", "alternativeCredit": "另类信贷",
"unitedStates": "美国", "unitedStates": "美国",
"northAmerica": "北美", "northAmerica": "北美",
"hongKong": "香港", "hongKong": "香港",
"asiaPacific": "亚太地区", "asiaPacific": "亚太地区",
"morganStanley": "摩根士丹利", "morganStanley": "摩根士丹利",
"primeBroker": "主经纪商", "primeBroker": "主经纪商",
"usEquityPortfolio": "美国股票投资组合", "usEquityPortfolio": "美国股票投资组合",
"days": "天" "days": "天"
}, },
"points": { "points": {
"title": "积分", "title": "积分",
"season1": "第一季", "season1": "第一季",
"live": "进行中", "live": "进行中",
"xPoints": "7倍积分", "xPoints": "7倍积分",
"pointsDashboard": "积分仪表板", "pointsDashboard": "积分仪表板",
"unlockUpTo": "解锁高达", "unlockUpTo": "解锁高达",
"withEcosystemMultipliers": "的生态系统倍数。", "withEcosystemMultipliers": "的生态系统倍数。",
"yourTotalPoints": "您的总积分", "yourTotalPoints": "您的总积分",
"globalRank": "全球排名", "globalRank": "全球排名",
"topOfUsers": "前 12% 用户", "topOfUsers": "前 12% 用户",
"endsIn": "结束于", "endsIn": "结束于",
"silverMember": "白银会员", "silverMember": "白银会员",
"goldMember": "黄金会员", "goldMember": "黄金会员",
"platinumMember": "铂金会员", "platinumMember": "铂金会员",
"currentTier": "当前等级", "currentTier": "当前等级",
"progress": "进度", "progress": "进度",
"pointsTo": "积分到", "pointsTo": "积分到",
"referralCode": "推荐码", "referralCode": "推荐码",
"shareYourCode": "分享您的专属代码,赚取朋友所有活动的 10% 佣金。", "shareYourCode": "分享您的专属代码,赚取朋友所有活动的 10% 佣金。",
"copy": "复制", "copy": "复制",
"share": "分享", "share": "分享",
"bindInviteCode": "绑定邀请码", "bindInviteCode": "绑定邀请码",
"enterInviteCode": "输入您朋友的邀请码以解锁奖励积分。", "enterInviteCode": "输入您朋友的邀请码以解锁奖励积分。",
"enterCode": "输入代码", "enterCode": "输入代码",
"apply": "应用", "apply": "应用",
"teamTVL": "团队 TVL", "teamTVL": "团队 TVL",
"buildYourTeam": "建立您的团队以达到里程碑并解锁奖励。", "buildYourTeam": "建立您的团队以达到里程碑并解锁奖励。",
"members": "成员", "members": "成员",
"whales": "巨鲸", "whales": "巨鲸",
"traders": "交易者", "traders": "交易者",
"users": "用户", "users": "用户",
"depositToAlp": "存入 USDC 到 ALP", "depositToAlp": "存入 USDC 到 ALP",
"nativeStaking": "原生质押", "nativeStaking": "原生质押",
"upTo3x": "最高 3倍", "upTo3x": "最高 3倍",
"lockPeriod": "30 天", "lockPeriod": "30 天",
"pointsBoost": "+10% 积分", "pointsBoost": "+10% 积分",
"deposit": "存入", "deposit": "存入",
"pendleYT": "Pendle YT", "pendleYT": "Pendle YT",
"yieldTradingOptimization": "收益交易优化", "yieldTradingOptimization": "收益交易优化",
"curveLp": "Curve LP", "curveLp": "Curve LP",
"liquidityPoolProvision": "流动性池供应", "liquidityPoolProvision": "流动性池供应",
"morpho": "Morpho", "morpho": "Morpho",
"lendingLoopStrategy": "借贷循环策略", "lendingLoopStrategy": "借贷循环策略",
"estApy": "预计年化收益率", "estApy": "预计年化收益率",
"currentApy": "当前年化收益率", "currentApy": "当前年化收益率",
"maxLtv": "最大贷款价值比", "maxLtv": "最大贷款价值比",
"zapIn": "快速投入", "zapIn": "快速投入",
"addLiquidity": "添加流动性", "addLiquidity": "添加流动性",
"startLoop": "启动循环", "startLoop": "启动循环",
"activityHistory": "活动历史", "activityHistory": "活动历史",
"trackActivities": "跟踪您所有的积分获取活动", "trackActivities": "跟踪您所有的积分获取活动",
"lastUpdatedMinutesAgo": "最后更新2 分钟前", "lastUpdatedMinutesAgo": "最后更新2 分钟前",
"all": "全部", "all": "全部",
"referrals": "推荐", "referrals": "推荐",
"deposits": "存款", "deposits": "存款",
"user": "用户", "user": "用户",
"friends": "朋友", "friends": "朋友",
"code": "代码", "code": "代码",
"points": "积分", "points": "积分",
"topPerformers": "最佳表现者", "topPerformers": "最佳表现者",
"leaderboard": "本季最高收入者排行榜", "leaderboard": "本季最高收入者排行榜",
"rank": "排名", "rank": "排名",
"address": "地址", "address": "地址",
"level": "等级" "level": "等级"
} }
} }

18964
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,32 +1,32 @@
{ {
"name": "asset-dashboard-next", "name": "asset-dashboard-next",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev -H 0.0.0.0", "dev": "next dev -H 0.0.0.0",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"@heroui/react": "^2.8.8", "@heroui/react": "^2.8.8",
"@heroui/theme": "^2.4.26", "@heroui/theme": "^2.4.26",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"echarts-for-react": "^3.0.6", "echarts-for-react": "^3.0.6",
"framer-motion": "^12.29.2", "framer-motion": "^12.29.2",
"next": "^15.1.4", "next": "^15.1.4",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0" "react-dom": "^19.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "^15.1.4", "eslint-config-next": "^15.1.4",
"postcss": "^8.4.49", "postcss": "^8.4.49",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"typescript": "^5" "typescript": "^5"
} }
} }

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/> <path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 226 B

After

Width:  |  Height:  |  Size: 229 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.66666 17L1.66666 12L6.66666 7L7.85416 8.1875L4.02082 12.0208L7.83332 15.8333L6.66666 17ZM13.3333 17L12.1458 15.8125L15.9792 11.9792L12.1667 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/> <path d="M6.66666 17L1.66666 12L6.66666 7L7.85416 8.1875L4.02082 12.0208L7.83332 15.8333L6.66666 17ZM13.3333 17L12.1458 15.8125L15.9792 11.9792L12.1667 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 317 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/> <path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 226 B

After

Width:  |  Height:  |  Size: 229 B

View File

@@ -1,3 +1,3 @@
<svg width="161" height="192" viewBox="0 0 161 192" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="161" height="192" viewBox="0 0 161 192" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M46.6767 29.3332H113.343V81.6665C113.343 84.2221 112.788 86.4998 111.677 88.4998C110.566 90.4998 109.01 92.1109 107.01 93.3332L83.3433 107.333L88.01 122.667H113.343L92.6767 137.333L100.677 162.667L80.01 147L59.3433 162.667L67.3433 137.333L46.6767 122.667H72.01L76.6767 107.333L53.01 93.3332C51.01 92.1109 49.4544 90.4998 48.3433 88.4998C47.2322 86.4998 46.6767 84.2221 46.6767 81.6665V29.3332ZM60.01 42.6665V81.6665L73.3433 89.6665V42.6665H60.01ZM100.01 42.6665H86.6767V89.6665L100.01 81.6665V42.6665Z" fill="#FFEDD5"/> <path d="M46.6767 29.3332H113.343V81.6665C113.343 84.2221 112.788 86.4998 111.677 88.4998C110.566 90.4998 109.01 92.1109 107.01 93.3332L83.3433 107.333L88.01 122.667H113.343L92.6767 137.333L100.677 162.667L80.01 147L59.3433 162.667L67.3433 137.333L46.6767 122.667H72.01L76.6767 107.333L53.01 93.3332C51.01 92.1109 49.4544 90.4998 48.3433 88.4998C47.2322 86.4998 46.6767 84.2221 46.6767 81.6665V29.3332ZM60.01 42.6665V81.6665L73.3433 89.6665V42.6665H60.01ZM100.01 42.6665H86.6767V89.6665L100.01 81.6665V42.6665Z" fill="#FFEDD5"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 636 B

After

Width:  |  Height:  |  Size: 639 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.16667 20.3335C3.70833 20.3335 3.31597 20.1703 2.98958 19.8439C2.66319 19.5175 2.5 19.1252 2.5 18.6668V7.00016C2.5 6.54183 2.66319 6.14947 2.98958 5.82308C3.31597 5.49669 3.70833 5.33349 4.16667 5.33349H5V3.66683H6.66667V5.33349H13.3333V3.66683H15V5.33349H15.8333C16.2917 5.33349 16.684 5.49669 17.0104 5.82308C17.3368 6.14947 17.5 6.54183 17.5 7.00016V18.6668C17.5 19.1252 17.3368 19.5175 17.0104 19.8439C16.684 20.1703 16.2917 20.3335 15.8333 20.3335H4.16667ZM4.16667 18.6668H15.8333V10.3335H4.16667V18.6668ZM4.16667 8.66683H15.8333V7.00016H4.16667V8.66683Z" fill="#94A3B8"/> <path d="M4.16667 20.3335C3.70833 20.3335 3.31597 20.1703 2.98958 19.8439C2.66319 19.5175 2.5 19.1252 2.5 18.6668V7.00016C2.5 6.54183 2.66319 6.14947 2.98958 5.82308C3.31597 5.49669 3.70833 5.33349 4.16667 5.33349H5V3.66683H6.66667V5.33349H13.3333V3.66683H15V5.33349H15.8333C16.2917 5.33349 16.684 5.49669 17.0104 5.82308C17.3368 6.14947 17.5 6.54183 17.5 7.00016V18.6668C17.5 19.1252 17.3368 19.5175 17.0104 19.8439C16.684 20.1703 16.2917 20.3335 15.8333 20.3335H4.16667ZM4.16667 18.6668H15.8333V10.3335H4.16667V18.6668ZM4.16667 8.66683H15.8333V7.00016H4.16667V8.66683Z" fill="#94A3B8"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 695 B

View File

@@ -1,4 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 4V8L10.6667 9.33333" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 4V8L10.6667 9.33333" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8 14.6668C11.6819 14.6668 14.6667 11.6821 14.6667 8.00016C14.6667 4.31826 11.6819 1.3335 8 1.3335C4.3181 1.3335 1.33333 4.31826 1.33333 8.00016C1.33333 11.6821 4.3181 14.6668 8 14.6668Z" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 14.6668C11.6819 14.6668 14.6667 11.6821 14.6667 8.00016C14.6667 4.31826 11.6819 1.3335 8 1.3335C4.3181 1.3335 1.33333 4.31826 1.33333 8.00016C1.33333 11.6821 4.3181 14.6668 8 14.6668Z" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 511 B

After

Width:  |  Height:  |  Size: 515 B

View File

@@ -1,3 +1,3 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.57747 9.62718L10.0017 6.20295L9.32171 5.52296L6.57747 8.26721L5.1932 6.88294L4.51321 7.56293L6.57747 9.62718ZM7.25746 12.25C6.58556 12.25 5.95414 12.1225 5.3632 11.8675C4.77226 11.6125 4.25822 11.2664 3.82108 10.8293C3.38395 10.3922 3.03788 9.87813 2.78288 9.28719C2.52789 8.69625 2.40039 8.06483 2.40039 7.39293C2.40039 6.72104 2.52789 6.08962 2.78288 5.49868C3.03788 4.90773 3.38395 4.39369 3.82108 3.95656C4.25822 3.51942 4.77226 3.17336 5.3632 2.91836C5.95414 2.66336 6.58556 2.53587 7.25746 2.53587C7.92935 2.53587 8.56077 2.66336 9.15171 2.91836C9.74266 3.17336 10.2567 3.51942 10.6938 3.95656C11.131 4.39369 11.477 4.90773 11.732 5.49868C11.987 6.08962 12.1145 6.72104 12.1145 7.39293C12.1145 8.06483 11.987 8.69625 11.732 9.28719C11.477 9.87813 11.131 10.3922 10.6938 10.8293C10.2567 11.2664 9.74266 11.6125 9.15171 11.8675C8.56077 12.1225 7.92935 12.25 7.25746 12.25ZM7.25746 11.2786C8.3422 11.2786 9.261 10.9022 10.0138 10.1493C10.7667 9.39647 11.1431 8.47768 11.1431 7.39293C11.1431 6.30819 10.7667 5.38939 10.0138 4.63655C9.261 3.8837 8.3422 3.50728 7.25746 3.50728C6.17271 3.50728 5.25392 3.8837 4.50107 4.63655C3.74823 5.38939 3.3718 6.30819 3.3718 7.39293C3.3718 8.47768 3.74823 9.39647 4.50107 10.1493C5.25392 10.9022 6.17271 11.2786 7.25746 11.2786Z" fill="#10B981"/> <path d="M6.57747 9.62718L10.0017 6.20295L9.32171 5.52296L6.57747 8.26721L5.1932 6.88294L4.51321 7.56293L6.57747 9.62718ZM7.25746 12.25C6.58556 12.25 5.95414 12.1225 5.3632 11.8675C4.77226 11.6125 4.25822 11.2664 3.82108 10.8293C3.38395 10.3922 3.03788 9.87813 2.78288 9.28719C2.52789 8.69625 2.40039 8.06483 2.40039 7.39293C2.40039 6.72104 2.52789 6.08962 2.78288 5.49868C3.03788 4.90773 3.38395 4.39369 3.82108 3.95656C4.25822 3.51942 4.77226 3.17336 5.3632 2.91836C5.95414 2.66336 6.58556 2.53587 7.25746 2.53587C7.92935 2.53587 8.56077 2.66336 9.15171 2.91836C9.74266 3.17336 10.2567 3.51942 10.6938 3.95656C11.131 4.39369 11.477 4.90773 11.732 5.49868C11.987 6.08962 12.1145 6.72104 12.1145 7.39293C12.1145 8.06483 11.987 8.69625 11.732 9.28719C11.477 9.87813 11.131 10.3922 10.6938 10.8293C10.2567 11.2664 9.74266 11.6125 9.15171 11.8675C8.56077 12.1225 7.92935 12.25 7.25746 12.25ZM7.25746 11.2786C8.3422 11.2786 9.261 10.9022 10.0138 10.1493C10.7667 9.39647 11.1431 8.47768 11.1431 7.39293C11.1431 6.30819 10.7667 5.38939 10.0138 4.63655C9.261 3.8837 8.3422 3.50728 7.25746 3.50728C6.17271 3.50728 5.25392 3.8837 4.50107 4.63655C3.74823 5.38939 3.3718 6.30819 3.3718 7.39293C3.3718 8.47768 3.74823 9.39647 4.50107 10.1493C5.25392 10.9022 6.17271 11.2786 7.25746 11.2786Z" fill="#10B981"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.66663 17L1.66663 12L6.66663 7L7.85413 8.1875L4.02079 12.0208L7.83329 15.8333L6.66663 17ZM13.3333 17L12.1458 15.8125L15.9791 11.9792L12.1666 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/> <path d="M6.66663 17L1.66663 12L6.66663 7L7.85413 8.1875L4.02079 12.0208L7.83329 15.8333L6.66663 17ZM13.3333 17L12.1458 15.8125L15.9791 11.9792L12.1666 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 317 B

View File

@@ -1,3 +1,3 @@
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/> <path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 262 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.16669 16.1667V10.3333H5.83335V16.1667H4.16669ZM9.16669 16.1667V10.3333H10.8334V16.1667H9.16669ZM1.66669 19.5V17.8333H18.3334V19.5H1.66669ZM14.1667 16.1667V10.3333H15.8334V16.1667H14.1667ZM1.66669 8.66667V7L10 2.83333L18.3334 7V8.66667H1.66669ZM5.37502 7H10H14.625H5.37502ZM5.37502 7H14.625L10 4.70833L5.37502 7Z" fill="#9CA1AF"/> <path d="M4.16669 16.1667V10.3333H5.83335V16.1667H4.16669ZM9.16669 16.1667V10.3333H10.8334V16.1667H9.16669ZM1.66669 19.5V17.8333H18.3334V19.5H1.66669ZM14.1667 16.1667V10.3333H15.8334V16.1667H14.1667ZM1.66669 8.66667V7L10 2.83333L18.3334 7V8.66667H1.66669ZM5.37502 7H10H14.625H5.37502ZM5.37502 7H14.625L10 4.70833L5.37502 7Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 445 B

After

Width:  |  Height:  |  Size: 448 B

View File

@@ -1,3 +1,3 @@
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/> <path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 262 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.16666 16.1665H5.83332C4.68055 16.1665 3.69791 15.7603 2.88541 14.9478C2.07291 14.1353 1.66666 13.1526 1.66666 11.9998C1.66666 10.8471 2.07291 9.86442 2.88541 9.05192C3.69791 8.23942 4.68055 7.83317 5.83332 7.83317H9.16666V9.49984H5.83332C5.13888 9.49984 4.5486 9.74289 4.06249 10.229C3.57638 10.7151 3.33332 11.3054 3.33332 11.9998C3.33332 12.6943 3.57638 13.2846 4.06249 13.7707C4.5486 14.2568 5.13888 14.4998 5.83332 14.4998H9.16666V16.1665ZM6.66666 12.8332V11.1665H13.3333V12.8332H6.66666ZM10.8333 16.1665V14.4998H14.1667C14.8611 14.4998 15.4514 14.2568 15.9375 13.7707C16.4236 13.2846 16.6667 12.6943 16.6667 11.9998C16.6667 11.3054 16.4236 10.7151 15.9375 10.229C15.4514 9.74289 14.8611 9.49984 14.1667 9.49984H10.8333V7.83317H14.1667C15.3194 7.83317 16.3021 8.23942 17.1146 9.05192C17.9271 9.86442 18.3333 10.8471 18.3333 11.9998C18.3333 13.1526 17.9271 14.1353 17.1146 14.9478C16.3021 15.7603 15.3194 16.1665 14.1667 16.1665H10.8333Z" fill="#9CA1AF"/> <path d="M9.16666 16.1665H5.83332C4.68055 16.1665 3.69791 15.7603 2.88541 14.9478C2.07291 14.1353 1.66666 13.1526 1.66666 11.9998C1.66666 10.8471 2.07291 9.86442 2.88541 9.05192C3.69791 8.23942 4.68055 7.83317 5.83332 7.83317H9.16666V9.49984H5.83332C5.13888 9.49984 4.5486 9.74289 4.06249 10.229C3.57638 10.7151 3.33332 11.3054 3.33332 11.9998C3.33332 12.6943 3.57638 13.2846 4.06249 13.7707C4.5486 14.2568 5.13888 14.4998 5.83332 14.4998H9.16666V16.1665ZM6.66666 12.8332V11.1665H13.3333V12.8332H6.66666ZM10.8333 16.1665V14.4998H14.1667C14.8611 14.4998 15.4514 14.2568 15.9375 13.7707C16.4236 13.2846 16.6667 12.6943 16.6667 11.9998C16.6667 11.3054 16.4236 10.7151 15.9375 10.229C15.4514 9.74289 14.8611 9.49984 14.1667 9.49984H10.8333V7.83317H14.1667C15.3194 7.83317 16.3021 8.23942 17.1146 9.05192C17.9271 9.86442 18.3333 10.8471 18.3333 11.9998C18.3333 13.1526 17.9271 14.1353 17.1146 14.9478C16.3021 15.7603 15.3194 16.1665 14.1667 16.1665H10.8333Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,3 @@
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31288 3.78864L6.00501 3.10865L9.89066 6.9943L6.00501 10.88L5.31288 10.2L8.03283 7.48001Z" fill="#9CA1AF"/> <path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31288 3.78864L6.00501 3.10865L9.89066 6.9943L6.00501 10.88L5.31288 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 262 B

After

Width:  |  Height:  |  Size: 265 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/> <path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 492 B

After

Width:  |  Height:  |  Size: 495 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/> <path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 492 B

After

Width:  |  Height:  |  Size: 495 B

View File

@@ -1,3 +1,3 @@
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31287 3.78864L6.005 3.10865L9.89065 6.9943L6.005 10.88L5.31287 10.2L8.03283 7.48001Z" fill="#9CA1AF"/> <path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31287 3.78864L6.005 3.10865L9.89065 6.9943L6.005 10.88L5.31287 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 258 B

After

Width:  |  Height:  |  Size: 261 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.8334 11.1668H16.625C16.4167 9.63905 15.7813 8.34391 14.7188 7.28141C13.6563 6.21891 12.3611 5.58349 10.8334 5.37516V11.1668ZM9.16669 18.6252V5.37516C7.48613 5.58349 6.09377 6.31613 4.9896 7.57308C3.88544 8.83002 3.33335 10.3057 3.33335 12.0002C3.33335 13.6946 3.88544 15.1703 4.9896 16.4272C6.09377 17.6842 7.48613 18.4168 9.16669 18.6252ZM10.8334 18.6252C12.3611 18.4307 13.6597 17.7988 14.7292 16.7293C15.7986 15.6599 16.4306 14.3613 16.625 12.8335H10.8334V18.6252ZM10 20.3335C8.84724 20.3335 7.76391 20.1147 6.75002 19.6772C5.73613 19.2397 4.85419 18.646 4.10419 17.896C3.35419 17.146 2.76044 16.2641 2.32294 15.2502C1.88544 14.2363 1.66669 13.1529 1.66669 12.0002C1.66669 10.8474 1.88544 9.76405 2.32294 8.75016C2.76044 7.73627 3.35419 6.85433 4.10419 6.10433C4.85419 5.35433 5.73613 4.76058 6.75002 4.32308C7.76391 3.88558 8.84724 3.66683 10 3.66683C11.1528 3.66683 12.2327 3.88558 13.2396 4.32308C14.2465 4.76058 15.1285 5.3578 15.8854 6.11474C16.6424 6.87169 17.2396 7.75363 17.6771 8.76058C18.1146 9.76752 18.3334 10.8474 18.3334 12.0002C18.3334 13.1391 18.1146 14.2154 17.6771 15.2293C17.2396 16.2432 16.6459 17.1286 15.8959 17.8856C15.1459 18.6425 14.2639 19.2397 13.25 19.6772C12.2361 20.1147 11.1528 20.3335 10 20.3335Z" fill="#9CA1AF"/> <path d="M10.8334 11.1668H16.625C16.4167 9.63905 15.7813 8.34391 14.7188 7.28141C13.6563 6.21891 12.3611 5.58349 10.8334 5.37516V11.1668ZM9.16669 18.6252V5.37516C7.48613 5.58349 6.09377 6.31613 4.9896 7.57308C3.88544 8.83002 3.33335 10.3057 3.33335 12.0002C3.33335 13.6946 3.88544 15.1703 4.9896 16.4272C6.09377 17.6842 7.48613 18.4168 9.16669 18.6252ZM10.8334 18.6252C12.3611 18.4307 13.6597 17.7988 14.7292 16.7293C15.7986 15.6599 16.4306 14.3613 16.625 12.8335H10.8334V18.6252ZM10 20.3335C8.84724 20.3335 7.76391 20.1147 6.75002 19.6772C5.73613 19.2397 4.85419 18.646 4.10419 17.896C3.35419 17.146 2.76044 16.2641 2.32294 15.2502C1.88544 14.2363 1.66669 13.1529 1.66669 12.0002C1.66669 10.8474 1.88544 9.76405 2.32294 8.75016C2.76044 7.73627 3.35419 6.85433 4.10419 6.10433C4.85419 5.35433 5.73613 4.76058 6.75002 4.32308C7.76391 3.88558 8.84724 3.66683 10 3.66683C11.1528 3.66683 12.2327 3.88558 13.2396 4.32308C14.2465 4.76058 15.1285 5.3578 15.8854 6.11474C16.6424 6.87169 17.2396 7.75363 17.6771 8.76058C18.1146 9.76752 18.3334 10.8474 18.3334 12.0002C18.3334 13.1391 18.1146 14.2154 17.6771 15.2293C17.2396 16.2432 16.6459 17.1286 15.8959 17.8856C15.1459 18.6425 14.2639 19.2397 13.25 19.6772C12.2361 20.1147 11.1528 20.3335 10 20.3335Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.24996 17.8335H10.7083V16.7918C11.4027 16.6668 12 16.396 12.5 15.9793C13 15.5627 13.25 14.9446 13.25 14.1252C13.25 13.5418 13.0833 13.0071 12.75 12.521C12.4166 12.0349 11.75 11.6113 10.75 11.2502C9.91663 10.9724 9.34024 10.7293 9.02079 10.521C8.70135 10.3127 8.54163 10.0279 8.54163 9.66683C8.54163 9.30572 8.6701 9.021 8.92704 8.81266C9.18399 8.60433 9.55552 8.50016 10.0416 8.50016C10.4861 8.50016 10.8333 8.6078 11.0833 8.82308C11.3333 9.03836 11.5138 9.30572 11.625 9.62516L12.9583 9.0835C12.8055 8.59738 12.5243 8.17377 12.1145 7.81266C11.7048 7.45155 11.25 7.25016 10.75 7.20849V6.16683H9.29163V7.20849C8.59718 7.36127 8.05552 7.66683 7.66663 8.12516C7.27774 8.5835 7.08329 9.09738 7.08329 9.66683C7.08329 10.3196 7.27427 10.8474 7.65621 11.2502C8.03815 11.6529 8.63885 12.0002 9.45829 12.2918C10.3333 12.6113 10.9409 12.896 11.2812 13.146C11.6215 13.396 11.7916 13.7224 11.7916 14.1252C11.7916 14.5835 11.6284 14.9203 11.302 15.1356C10.9757 15.3509 10.5833 15.4585 10.125 15.4585C9.66663 15.4585 9.26038 15.3161 8.90621 15.0314C8.55204 14.7467 8.29163 14.3196 8.12496 13.7502L6.74996 14.2918C6.9444 14.9585 7.24649 15.4967 7.65621 15.9064C8.06593 16.3161 8.59718 16.5974 9.24996 16.7502V17.8335ZM9.99996 20.3335C8.84718 20.3335 7.76385 20.1147 6.74996 19.6772C5.73607 19.2397 4.85413 18.646 4.10413 17.896C3.35413 17.146 2.76038 16.2641 2.32288 15.2502C1.88538 14.2363 1.66663 13.1529 1.66663 12.0002C1.66663 10.8474 1.88538 9.76405 2.32288 8.75016C2.76038 7.73627 3.35413 6.85433 4.10413 6.10433C4.85413 5.35433 5.73607 4.76058 6.74996 4.32308C7.76385 3.88558 8.84718 3.66683 9.99996 3.66683C11.1527 3.66683 12.2361 3.88558 13.25 4.32308C14.2638 4.76058 15.1458 5.35433 15.8958 6.10433C16.6458 6.85433 17.2395 7.73627 17.677 8.75016C18.1145 9.76405 18.3333 10.8474 18.3333 12.0002C18.3333 13.1529 18.1145 14.2363 17.677 15.2502C17.2395 16.2641 16.6458 17.146 15.8958 17.896C15.1458 18.646 14.2638 19.2397 13.25 19.6772C12.2361 20.1147 11.1527 20.3335 9.99996 20.3335ZM9.99996 18.6668C11.8611 18.6668 13.4375 18.021 14.7291 16.7293C16.0208 15.4377 16.6666 13.8613 16.6666 12.0002C16.6666 10.1391 16.0208 8.56266 14.7291 7.27099C13.4375 5.97933 11.8611 5.33349 9.99996 5.33349C8.13885 5.33349 6.56246 5.97933 5.27079 7.27099C3.97913 8.56266 3.33329 10.1391 3.33329 12.0002C3.33329 13.8613 3.97913 15.4377 5.27079 16.7293C6.56246 18.021 8.13885 18.6668 9.99996 18.6668Z" fill="#4B5563"/> <path d="M9.24996 17.8335H10.7083V16.7918C11.4027 16.6668 12 16.396 12.5 15.9793C13 15.5627 13.25 14.9446 13.25 14.1252C13.25 13.5418 13.0833 13.0071 12.75 12.521C12.4166 12.0349 11.75 11.6113 10.75 11.2502C9.91663 10.9724 9.34024 10.7293 9.02079 10.521C8.70135 10.3127 8.54163 10.0279 8.54163 9.66683C8.54163 9.30572 8.6701 9.021 8.92704 8.81266C9.18399 8.60433 9.55552 8.50016 10.0416 8.50016C10.4861 8.50016 10.8333 8.6078 11.0833 8.82308C11.3333 9.03836 11.5138 9.30572 11.625 9.62516L12.9583 9.0835C12.8055 8.59738 12.5243 8.17377 12.1145 7.81266C11.7048 7.45155 11.25 7.25016 10.75 7.20849V6.16683H9.29163V7.20849C8.59718 7.36127 8.05552 7.66683 7.66663 8.12516C7.27774 8.5835 7.08329 9.09738 7.08329 9.66683C7.08329 10.3196 7.27427 10.8474 7.65621 11.2502C8.03815 11.6529 8.63885 12.0002 9.45829 12.2918C10.3333 12.6113 10.9409 12.896 11.2812 13.146C11.6215 13.396 11.7916 13.7224 11.7916 14.1252C11.7916 14.5835 11.6284 14.9203 11.302 15.1356C10.9757 15.3509 10.5833 15.4585 10.125 15.4585C9.66663 15.4585 9.26038 15.3161 8.90621 15.0314C8.55204 14.7467 8.29163 14.3196 8.12496 13.7502L6.74996 14.2918C6.9444 14.9585 7.24649 15.4967 7.65621 15.9064C8.06593 16.3161 8.59718 16.5974 9.24996 16.7502V17.8335ZM9.99996 20.3335C8.84718 20.3335 7.76385 20.1147 6.74996 19.6772C5.73607 19.2397 4.85413 18.646 4.10413 17.896C3.35413 17.146 2.76038 16.2641 2.32288 15.2502C1.88538 14.2363 1.66663 13.1529 1.66663 12.0002C1.66663 10.8474 1.88538 9.76405 2.32288 8.75016C2.76038 7.73627 3.35413 6.85433 4.10413 6.10433C4.85413 5.35433 5.73607 4.76058 6.74996 4.32308C7.76385 3.88558 8.84718 3.66683 9.99996 3.66683C11.1527 3.66683 12.2361 3.88558 13.25 4.32308C14.2638 4.76058 15.1458 5.35433 15.8958 6.10433C16.6458 6.85433 17.2395 7.73627 17.677 8.75016C18.1145 9.76405 18.3333 10.8474 18.3333 12.0002C18.3333 13.1529 18.1145 14.2363 17.677 15.2502C17.2395 16.2641 16.6458 17.146 15.8958 17.896C15.1458 18.646 14.2638 19.2397 13.25 19.6772C12.2361 20.1147 11.1527 20.3335 9.99996 20.3335ZM9.99996 18.6668C11.8611 18.6668 13.4375 18.021 14.7291 16.7293C16.0208 15.4377 16.6666 13.8613 16.6666 12.0002C16.6666 10.1391 16.0208 8.56266 14.7291 7.27099C13.4375 5.97933 11.8611 5.33349 9.99996 5.33349C8.13885 5.33349 6.56246 5.97933 5.27079 7.27099C3.97913 8.56266 3.33329 10.1391 3.33329 12.0002C3.33329 13.8613 3.97913 15.4377 5.27079 16.7293C6.56246 18.021 8.13885 18.6668 9.99996 18.6668Z" fill="#4B5563"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.66668 17.0002H13.3333V15.3335H6.66668V17.0002ZM6.66668 13.6668H13.3333V12.0002H6.66668V13.6668ZM5.00001 20.3335C4.54168 20.3335 4.14932 20.1703 3.82293 19.8439C3.49654 19.5175 3.33334 19.1252 3.33334 18.6668V5.33349C3.33334 4.87516 3.49654 4.4828 3.82293 4.15641C4.14932 3.83002 4.54168 3.66683 5.00001 3.66683H11.6667L16.6667 8.66683V18.6668C16.6667 19.1252 16.5035 19.5175 16.1771 19.8439C15.8507 20.1703 15.4583 20.3335 15 20.3335H5.00001ZM10.8333 9.50016V5.33349H5.00001V18.6668H15V9.50016H10.8333ZM5.00001 5.33349V9.50016V18.6668V5.33349Z" fill="#9CA1AF"/> <path d="M6.66668 17.0002H13.3333V15.3335H6.66668V17.0002ZM6.66668 13.6668H13.3333V12.0002H6.66668V13.6668ZM5.00001 20.3335C4.54168 20.3335 4.14932 20.1703 3.82293 19.8439C3.49654 19.5175 3.33334 19.1252 3.33334 18.6668V5.33349C3.33334 4.87516 3.49654 4.4828 3.82293 4.15641C4.14932 3.83002 4.54168 3.66683 5.00001 3.66683H11.6667L16.6667 8.66683V18.6668C16.6667 19.1252 16.5035 19.5175 16.1771 19.8439C15.8507 20.1703 15.4583 20.3335 15 20.3335H5.00001ZM10.8333 9.50016V5.33349H5.00001V18.6668H15V9.50016H10.8333ZM5.00001 5.33349V9.50016V18.6668V5.33349Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 677 B

After

Width:  |  Height:  |  Size: 680 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/> <path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 226 B

After

Width:  |  Height:  |  Size: 229 B

View File

@@ -1,3 +1,3 @@
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.12501 14.9585L13.8333 10.2502L12.6458 9.06266L9.12501 12.5835L7.37501 10.8335L6.18751 12.021L9.12501 14.9585ZM10 20.3335C8.06945 19.8474 6.4757 18.7397 5.21876 17.0106C3.96182 15.2814 3.33334 13.3613 3.33334 11.2502V6.16683L10 3.66683L16.6667 6.16683V11.2502C16.6667 13.3613 16.0382 15.2814 14.7813 17.0106C13.5243 18.7397 11.9306 19.8474 10 20.3335ZM10 18.5835C11.4445 18.1252 12.6389 17.2085 13.5833 15.8335C14.5278 14.4585 15 12.9307 15 11.2502V7.31266L10 5.43766L5.00001 7.31266V11.2502C5.00001 12.9307 5.47223 14.4585 6.41668 15.8335C7.36112 17.2085 8.55557 18.1252 10 18.5835Z" fill="#9CA1AF"/> <path d="M9.12501 14.9585L13.8333 10.2502L12.6458 9.06266L9.12501 12.5835L7.37501 10.8335L6.18751 12.021L9.12501 14.9585ZM10 20.3335C8.06945 19.8474 6.4757 18.7397 5.21876 17.0106C3.96182 15.2814 3.33334 13.3613 3.33334 11.2502V6.16683L10 3.66683L16.6667 6.16683V11.2502C16.6667 13.3613 16.0382 15.2814 14.7813 17.0106C13.5243 18.7397 11.9306 19.8474 10 20.3335ZM10 18.5835C11.4445 18.1252 12.6389 17.2085 13.5833 15.8335C14.5278 14.4585 15 12.9307 15 11.2502V7.31266L10 5.43766L5.00001 7.31266V11.2502C5.00001 12.9307 5.47223 14.4585 6.41668 15.8335C7.36112 17.2085 8.55557 18.1252 10 18.5835Z" fill="#9CA1AF"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 716 B

After

Width:  |  Height:  |  Size: 719 B

View File

@@ -1,4 +1,4 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.8 3.6001H4.80001C4.13726 3.6001 3.60001 4.13736 3.60001 4.8001V10.8001C3.60001 11.4628 4.13726 12.0001 4.80001 12.0001H10.8C11.4627 12.0001 12 11.4628 12 10.8001V4.8001C12 4.13736 11.4627 3.6001 10.8 3.6001Z" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10.8 3.6001H4.80001C4.13726 3.6001 3.60001 4.13736 3.60001 4.8001V10.8001C3.60001 11.4628 4.13726 12.0001 4.80001 12.0001H10.8C11.4627 12.0001 12 11.4628 12 10.8001V4.8001C12 4.13736 11.4627 3.6001 10.8 3.6001Z" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M1.2 8.4C0.54 8.4 0 7.86 0 7.2V1.2C0 0.54 0.54 0 1.2 0H7.2C7.86 0 8.4 0.54 8.4 1.2" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M1.2 8.4C0.54 8.4 0 7.86 0 7.2V1.2C0 0.54 0.54 0 1.2 0H7.2C7.86 0 8.4 0.54 8.4 1.2" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 596 B

After

Width:  |  Height:  |  Size: 600 B

View File

@@ -1,6 +1,6 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.83844 10.2212C6.26094 10.2212 5.79346 10.6886 5.79346 11.2661V15.9595H9.2676V10.2212V10.2212H6.83844Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.83844 10.2212C6.26094 10.2212 5.79346 10.6886 5.79346 11.2661V15.9595H9.2676V10.2212V10.2212H6.83844Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.3046 6.05029C9.72713 6.05029 9.25964 6.51781 9.25964 7.09531V15.9503H12.7338V7.09531C12.7338 6.51781 12.2755 6.05029 11.698 6.05029H10.3046Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10.3046 6.05029C9.72713 6.05029 9.25964 6.51781 9.25964 7.09531V15.9503H12.7338V7.09531C12.7338 6.51781 12.2755 6.05029 11.698 6.05029H10.3046Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12.7401 11.7793V15.9502H16.2143V12.8243C16.2051 12.2468 15.7376 11.7793 15.1693 11.7793H12.7401Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12.7401 11.7793V15.9502H16.2143V12.8243C16.2051 12.2468 15.7376 11.7793 15.1693 11.7793H12.7401Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.75 20.1668C18.3334 20.1668 20.1667 18.3335 20.1667 13.7502V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H13.75Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M13.75 20.1668C18.3334 20.1668 20.1667 18.3335 20.1667 13.7502V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H13.75Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,5 +1,5 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.32754 6.45316C2.50254 7.09482 1.83337 8.46066 1.83337 9.49649V16.289C1.83337 18.4157 3.56587 20.1573 5.69254 20.1573H16.3075C18.4342 20.1573 20.1667 18.4157 20.1667 16.2982V9.62482C20.1667 8.51566 19.4242 7.09482 18.5167 6.46232L12.8517 2.49316C11.5684 1.59482 9.50587 1.64066 8.26837 2.60316L3.32754 6.45316Z" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M3.32754 6.45316C2.50254 7.09482 1.83337 8.46066 1.83337 9.49649V16.289C1.83337 18.4157 3.56587 20.1573 5.69254 20.1573H16.3075C18.4342 20.1573 20.1667 18.4157 20.1667 16.2982V9.62482C20.1667 8.51566 19.4242 7.09482 18.5167 6.46232L12.8517 2.49316C11.5684 1.59482 9.50587 1.64066 8.26837 2.60316L3.32754 6.45316Z" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M15.125 10.5415L11.275 14.3915L9.80833 12.1915L6.875 15.1248" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15.125 10.5415L11.275 14.3915L9.80833 12.1915L6.875 15.1248" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.2916 10.5415H15.125V12.3748" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M13.2916 10.5415H15.125V12.3748" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 802 B

View File

@@ -1,4 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.6667 4.66667V2.66667C12.6667 2.48986 12.5964 2.32029 12.4714 2.19526C12.3464 2.07024 12.1768 2 12 2H3.33333C2.97971 2 2.64057 2.14048 2.39052 2.39052C2.14048 2.64057 2 2.97971 2 3.33333C2 3.68696 2.14048 4.02609 2.39052 4.27614C2.64057 4.52619 2.97971 4.66667 3.33333 4.66667H13.3333C13.5101 4.66667 13.6797 4.7369 13.8047 4.86193C13.9298 4.98695 14 5.15652 14 5.33333V8M14 8H12C11.6464 8 11.3072 8.14048 11.0572 8.39052C10.8071 8.64057 10.6667 8.97971 10.6667 9.33333C10.6667 9.68696 10.8071 10.0261 11.0572 10.2761C11.3072 10.5262 11.6464 10.6667 12 10.6667H14C14.1768 10.6667 14.3464 10.5964 14.4714 10.4714C14.5964 10.3464 14.6667 10.1768 14.6667 10V8.66667C14.6667 8.48986 14.5964 8.32029 14.4714 8.19526C14.3464 8.07024 14.1768 8 14 8Z" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12.6667 4.66667V2.66667C12.6667 2.48986 12.5964 2.32029 12.4714 2.19526C12.3464 2.07024 12.1768 2 12 2H3.33333C2.97971 2 2.64057 2.14048 2.39052 2.39052C2.14048 2.64057 2 2.97971 2 3.33333C2 3.68696 2.14048 4.02609 2.39052 4.27614C2.64057 4.52619 2.97971 4.66667 3.33333 4.66667H13.3333C13.5101 4.66667 13.6797 4.7369 13.8047 4.86193C13.9298 4.98695 14 5.15652 14 5.33333V8M14 8H12C11.6464 8 11.3072 8.14048 11.0572 8.39052C10.8071 8.64057 10.6667 8.97971 10.6667 9.33333C10.6667 9.68696 10.8071 10.0261 11.0572 10.2761C11.3072 10.5262 11.6464 10.6667 12 10.6667H14C14.1768 10.6667 14.3464 10.5964 14.4714 10.4714C14.5964 10.3464 14.6667 10.1768 14.6667 10V8.66667C14.6667 8.48986 14.5964 8.32029 14.4714 8.19526C14.3464 8.07024 14.1768 8 14 8Z" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 3.3335V12.6668C2 13.0205 2.14048 13.3596 2.39052 13.6096C2.64057 13.8597 2.97971 14.0002 3.33333 14.0002H13.3333C13.5101 14.0002 13.6797 13.9299 13.8047 13.8049C13.9298 13.6799 14 13.5103 14 13.3335V10.6668" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M2 3.3335V12.6668C2 13.0205 2.14048 13.3596 2.39052 13.6096C2.64057 13.8597 2.97971 14.0002 3.33333 14.0002H13.3333C13.5101 14.0002 13.6797 13.9299 13.8047 13.8049C13.9298 13.6799 14 13.5103 14 13.3335V10.6668" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,14 +1,14 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4_5948)"> <g clip-path="url(#clip0_4_5948)">
<path d="M19.25 14.6665H15.5833C15.077 14.6665 14.6666 15.0769 14.6666 15.5832V19.2498C14.6666 19.7561 15.077 20.1665 15.5833 20.1665H19.25C19.7562 20.1665 20.1666 19.7561 20.1666 19.2498V15.5832C20.1666 15.0769 19.7562 14.6665 19.25 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M19.25 14.6665H15.5833C15.077 14.6665 14.6666 15.0769 14.6666 15.5832V19.2498C14.6666 19.7561 15.077 20.1665 15.5833 20.1665H19.25C19.7562 20.1665 20.1666 19.7561 20.1666 19.2498V15.5832C20.1666 15.0769 19.7562 14.6665 19.25 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.41671 14.6665H2.75004C2.24378 14.6665 1.83337 15.0769 1.83337 15.5832V19.2498C1.83337 19.7561 2.24378 20.1665 2.75004 20.1665H6.41671C6.92297 20.1665 7.33337 19.7561 7.33337 19.2498V15.5832C7.33337 15.0769 6.92297 14.6665 6.41671 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.41671 14.6665H2.75004C2.24378 14.6665 1.83337 15.0769 1.83337 15.5832V19.2498C1.83337 19.7561 2.24378 20.1665 2.75004 20.1665H6.41671C6.92297 20.1665 7.33337 19.7561 7.33337 19.2498V15.5832C7.33337 15.0769 6.92297 14.6665 6.41671 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12.8333 1.8335H9.16667C8.66041 1.8335 8.25 2.2439 8.25 2.75016V6.41683C8.25 6.92309 8.66041 7.3335 9.16667 7.3335H12.8333C13.3396 7.3335 13.75 6.92309 13.75 6.41683V2.75016C13.75 2.2439 13.3396 1.8335 12.8333 1.8335Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M12.8333 1.8335H9.16667C8.66041 1.8335 8.25 2.2439 8.25 2.75016V6.41683C8.25 6.92309 8.66041 7.3335 9.16667 7.3335H12.8333C13.3396 7.3335 13.75 6.92309 13.75 6.41683V2.75016C13.75 2.2439 13.3396 1.8335 12.8333 1.8335Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4.58337 14.6667V11.9167C4.58337 11.6736 4.67995 11.4404 4.85186 11.2685C5.02377 11.0966 5.25693 11 5.50004 11H16.5C16.7432 11 16.9763 11.0966 17.1482 11.2685C17.3201 11.4404 17.4167 11.6736 17.4167 11.9167V14.6667" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M4.58337 14.6667V11.9167C4.58337 11.6736 4.67995 11.4404 4.85186 11.2685C5.02377 11.0966 5.25693 11 5.50004 11H16.5C16.7432 11 16.9763 11.0966 17.1482 11.2685C17.3201 11.4404 17.4167 11.6736 17.4167 11.9167V14.6667" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11 11.0002V7.3335" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11 11.0002V7.3335" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
</g> </g>
<defs> <defs>
<clipPath id="clip0_4_5948"> <clipPath id="clip0_4_5948">
<rect width="22" height="22" fill="white"/> <rect width="22" height="22" fill="white"/>
</clipPath> </clipPath>
</defs> </defs>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,5 +1,5 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.2083 13.7502C14.0525 13.7502 13.8875 13.741 13.7317 13.7318C13.5025 10.826 11.1742 8.49765 8.26832 8.26849C8.25916 8.11265 8.25 7.94766 8.25 7.79183C8.25 4.501 10.9175 1.8335 14.2083 1.8335C17.4992 1.8335 20.1667 4.501 20.1667 7.79183C20.1667 11.0827 17.4992 13.7502 14.2083 13.7502Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M14.2083 13.7502C14.0525 13.7502 13.8875 13.741 13.7317 13.7318C13.5025 10.826 11.1742 8.49765 8.26832 8.26849C8.25916 8.11265 8.25 7.94766 8.25 7.79183C8.25 4.501 10.9175 1.8335 14.2083 1.8335C17.4992 1.8335 20.1667 4.501 20.1667 7.79183C20.1667 11.0827 17.4992 13.7502 14.2083 13.7502Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.79171 20.1667C4.50087 20.1667 1.83337 17.4992 1.83337 14.2083C1.83337 10.9175 4.50087 8.25 7.79171 8.25C7.94754 8.25 8.11253 8.25916 8.26836 8.26832C11.1742 8.49749 13.5026 10.8258 13.7317 13.7317C13.7409 13.8875 13.75 14.0525 13.75 14.2083C13.75 17.4992 11.0825 20.1667 7.79171 20.1667Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M7.79171 20.1667C4.50087 20.1667 1.83337 17.4992 1.83337 14.2083C1.83337 10.9175 4.50087 8.25 7.79171 8.25C7.94754 8.25 8.11253 8.25916 8.26836 8.26832C11.1742 8.49749 13.5026 10.8258 13.7317 13.7317C13.7409 13.8875 13.75 14.0525 13.75 14.2083C13.75 17.4992 11.0825 20.1667 7.79171 20.1667Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.79167 11.9165L8.59834 13.4015L10.0833 14.2082L8.59834 15.0148L7.79167 16.4998L6.985 15.0148L5.5 14.2082L6.985 13.4015L7.79167 11.9165Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M7.79167 11.9165L8.59834 13.4015L10.0833 14.2082L8.59834 15.0148L7.79167 16.4998L6.985 15.0148L5.5 14.2082L6.985 13.4015L7.79167 11.9165Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,3 +1,3 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.5 5.25L7 8.75L3.5 5.25" stroke="#9CA1AF" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M10.5 5.25L7 8.75L3.5 5.25" stroke="#9CA1AF" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 232 B

View File

@@ -1,5 +1,5 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.1667 11.9168V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H11.9167" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M20.1667 11.9168V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H11.9167" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.71924 13.2823L8.90091 10.4498C9.21258 10.0465 9.79008 9.97312 10.1934 10.2848L11.8709 11.6048C12.2743 11.9165 12.8517 11.8431 13.1634 11.449L15.2809 8.71729" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6.71924 13.2823L8.90091 10.4498C9.21258 10.0465 9.79008 9.97312 10.1934 10.2848L11.8709 11.6048C12.2743 11.9165 12.8517 11.8431 13.1634 11.449L15.2809 8.71729" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.1134 15.0243C18.2417 15.281 18.5625 15.5193 18.8467 15.5743L19.195 15.6293C20.24 15.8035 20.4875 16.5735 19.7359 17.3343L19.415 17.6551C19.2042 17.8751 19.085 18.2968 19.1492 18.5901L19.195 18.7826C19.4792 20.0476 18.81 20.5335 17.71 19.8735L17.4717 19.736C17.1875 19.571 16.7292 19.571 16.445 19.736L16.2067 19.8735C15.0975 20.5426 14.4284 20.0476 14.7217 18.7826L14.7675 18.5901C14.8317 18.2968 14.7125 17.8751 14.5017 17.6551L14.1809 17.3343C13.4292 16.5735 13.6767 15.8035 14.7217 15.6293L15.07 15.5743C15.345 15.5285 15.675 15.281 15.8034 15.0243L16.06 14.5018C16.555 13.5026 17.3617 13.5026 17.8567 14.5018L18.1134 15.0243Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M18.1134 15.0243C18.2417 15.281 18.5625 15.5193 18.8467 15.5743L19.195 15.6293C20.24 15.8035 20.4875 16.5735 19.7359 17.3343L19.415 17.6551C19.2042 17.8751 19.085 18.2968 19.1492 18.5901L19.195 18.7826C19.4792 20.0476 18.81 20.5335 17.71 19.8735L17.4717 19.736C17.1875 19.571 16.7292 19.571 16.445 19.736L16.2067 19.8735C15.0975 20.5426 14.4284 20.0476 14.7217 18.7826L14.7675 18.5901C14.8317 18.2968 14.7125 17.8751 14.5017 17.6551L14.1809 17.3343C13.4292 16.5735 13.6767 15.8035 14.7217 15.6293L15.07 15.5743C15.345 15.5285 15.675 15.281 15.8034 15.0243L16.06 14.5018C16.555 13.5026 17.3617 13.5026 17.8567 14.5018L18.1134 15.0243Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,6 +1,6 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.6666 2.75L18.3333 6.41667L14.6666 10.0833" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M14.6666 2.75L18.3333 6.41667L14.6666 10.0833" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.3333 6.4165H3.66663" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M18.3333 6.4165H3.66663" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.33329 19.2498L3.66663 15.5832L7.33329 11.9165" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M7.33329 19.2498L3.66663 15.5832L7.33329 11.9165" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M3.66663 15.5835H18.3333" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/> <path d="M3.66663 15.5835H18.3333" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 637 B

View File

@@ -1,4 +1,4 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.3333 11.9168C18.3333 16.5001 15.125 18.7918 11.3116 20.1209C11.1119 20.1886 10.895 20.1853 10.6975 20.1118C6.87496 18.7918 3.66663 16.5001 3.66663 11.9168V5.50009C3.66663 5.25697 3.7632 5.02381 3.93511 4.85191C4.10702 4.68 4.34018 4.58342 4.58329 4.58342C6.41663 4.58342 8.70829 3.48342 10.3033 2.09009C10.4975 1.92417 10.7445 1.83301 11 1.83301C11.2554 1.83301 11.5024 1.92417 11.6966 2.09009C13.3008 3.49259 15.5833 4.58342 17.4166 4.58342C17.6597 4.58342 17.8929 4.68 18.0648 4.85191C18.2367 5.02381 18.3333 5.25697 18.3333 5.50009V11.9168Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M18.3333 11.9168C18.3333 16.5001 15.125 18.7918 11.3116 20.1209C11.1119 20.1886 10.895 20.1853 10.6975 20.1118C6.87496 18.7918 3.66663 16.5001 3.66663 11.9168V5.50009C3.66663 5.25697 3.7632 5.02381 3.93511 4.85191C4.10702 4.68 4.34018 4.58342 4.58329 4.58342C6.41663 4.58342 8.70829 3.48342 10.3033 2.09009C10.4975 1.92417 10.7445 1.83301 11 1.83301C11.2554 1.83301 11.5024 1.92417 11.6966 2.09009C13.3008 3.49259 15.5833 4.58342 17.4166 4.58342C17.6597 4.58342 17.8929 4.68 18.0648 4.85191C18.2367 5.02381 18.3333 5.25697 18.3333 5.50009V11.9168Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8.25 10.9998L10.0833 12.8332L13.75 9.1665" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8.25 10.9998L10.0833 12.8332L13.75 9.1665" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 892 B

After

Width:  |  Height:  |  Size: 896 B

View File

@@ -1,7 +1,7 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.272 14.7103V19.3169L15.9655 11.2942L10.272 14.7103ZM15.7585 9.79297L10.272 0.683594V7.30859L15.7585 9.79297Z" fill="#3B3735"/> <path d="M10.272 14.7103V19.3169L15.9655 11.2942L10.272 14.7103ZM15.7585 9.79297L10.272 0.683594V7.30859L15.7585 9.79297Z" fill="#3B3735"/>
<path d="M10.272 7.82422V13.4659L15.7067 10.3086L10.272 7.82422Z" fill="#1F1D19"/> <path d="M10.272 7.82422V13.4659L15.7067 10.3086L10.272 7.82422Z" fill="#1F1D19"/>
<path d="M4.26765 9.79297L9.75406 0.683594V7.30859L4.26765 9.79297Z" fill="#959190"/> <path d="M4.26765 9.79297L9.75406 0.683594V7.30859L4.26765 9.79297Z" fill="#959190"/>
<path d="M9.7536 7.82422V13.4659L4.31891 10.3086L9.7536 7.82422Z" fill="#403C3A"/> <path d="M9.7536 7.82422V13.4659L4.31891 10.3086L9.7536 7.82422Z" fill="#403C3A"/>
<path d="M9.75398 14.71V19.3166L4.06055 11.2939L9.75398 14.71Z" fill="#959190"/> <path d="M9.75398 14.71V19.3166L4.06055 11.2939L9.75398 14.71Z" fill="#959190"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 576 B

After

Width:  |  Height:  |  Size: 583 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 12L10 8L6 4" stroke="#0A0A0A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/> <path d="M6 12L10 8L6 4" stroke="#0A0A0A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 217 B

After

Width:  |  Height:  |  Size: 220 B

View File

@@ -1,9 +1,9 @@
<svg width="174" height="40" viewBox="0 0 174 40" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="174" height="40" viewBox="0 0 174 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M72.5039 27.4229H69.3193L63.4033 16.8848L57.4717 27.4229H54.2861L63.4053 11.2412L72.5039 27.4229ZM90.6846 14.7344H79.8057C79.2937 14.7345 78.8758 14.9071 78.5107 15.2715C78.1459 15.6358 77.9727 16.0526 77.9727 16.5635C77.9727 17.0728 78.1443 17.4891 78.5068 17.8525C78.87 18.2058 79.289 18.3759 79.8057 18.376H86.1533C87.3949 18.3762 88.4742 18.8246 89.3457 19.7041C90.2326 20.5757 90.6844 21.6559 90.6846 22.8994C90.6846 24.1427 90.2325 25.2259 89.3496 26.1074C88.4756 26.9799 87.3951 27.4228 86.1533 27.4229H75.2734V24.7295H86.1533C86.6651 24.7294 87.0823 24.5566 87.4473 24.1924C87.8124 23.8279 87.9863 23.4106 87.9863 22.8994C87.9862 22.3889 87.8133 21.9813 87.4541 21.6309L87.4473 21.624C87.0823 21.26 86.665 21.088 86.1533 21.0879H79.8057C78.5641 21.0879 77.4796 20.6456 76.5957 19.7773L76.5918 19.7715L76.5869 19.7686C75.7168 18.8861 75.2734 17.803 75.2734 16.5635C75.2735 15.324 75.7178 14.2454 76.5918 13.373C77.4749 12.4917 78.5602 12.0401 79.8057 12.04H90.6846V14.7344ZM109.412 14.7344H98.5332C98.0215 14.7345 97.6042 14.9074 97.2393 15.2715C96.8743 15.6357 96.7003 16.0526 96.7002 16.5635C96.7002 17.0728 96.873 17.4891 97.2354 17.8525C97.5986 18.2055 98.017 18.3758 98.5332 18.376H104.881C106.122 18.3761 107.202 18.8247 108.073 19.7041C108.96 20.5757 109.412 21.6559 109.412 22.8994C109.412 24.1426 108.961 25.226 108.078 26.1074C107.204 26.9799 106.123 27.4228 104.881 27.4229H94.001V24.7295H104.881C105.393 24.7294 105.811 24.5568 106.176 24.1924C106.541 23.8279 106.714 23.4106 106.714 22.8994C106.714 22.3888 106.541 21.9814 106.182 21.6309L106.176 21.624C105.811 21.2598 105.393 21.088 104.881 21.0879H98.5332C97.2919 21.0877 96.2081 20.6454 95.3242 19.7773L95.3154 19.7686C94.4452 18.8861 94.001 17.803 94.001 16.5635C94.001 15.3241 94.4456 14.2454 95.3193 13.373C96.2024 12.4917 97.2879 12.0402 98.5332 12.04H109.412V14.7344ZM128.143 14.7344H120.438C119.139 14.7344 118.028 15.1657 117.071 16.04C116.343 16.7054 115.861 17.4793 115.617 18.376H128.143V21.0879H115.617C115.861 21.9868 116.343 22.7676 117.072 23.4424C118.027 24.3037 119.138 24.7295 120.438 24.7295H128.143V27.4229H120.438C118.316 27.4229 116.484 26.6672 114.986 25.1729C113.489 23.6783 112.732 21.8496 112.732 19.7314C112.733 17.6133 113.489 15.7854 114.986 14.291C116.484 12.7964 118.316 12.04 120.438 12.04H128.143V14.7344ZM146.874 14.7344H140.525V27.4229H137.81V14.7344H131.463V12.04H146.874V14.7344ZM157.896 17.6377L162.839 12.04H166.538L159.737 19.7314L166.538 27.4229H162.839L157.896 21.8271L152.955 27.4229H149.257L156.058 19.7314L149.257 12.04H152.955L157.896 17.6377Z" fill="#111827"/> <path d="M72.5039 27.4229H69.3193L63.4033 16.8848L57.4717 27.4229H54.2861L63.4053 11.2412L72.5039 27.4229ZM90.6846 14.7344H79.8057C79.2937 14.7345 78.8758 14.9071 78.5107 15.2715C78.1459 15.6358 77.9727 16.0526 77.9727 16.5635C77.9727 17.0728 78.1443 17.4891 78.5068 17.8525C78.87 18.2058 79.289 18.3759 79.8057 18.376H86.1533C87.3949 18.3762 88.4742 18.8246 89.3457 19.7041C90.2326 20.5757 90.6844 21.6559 90.6846 22.8994C90.6846 24.1427 90.2325 25.2259 89.3496 26.1074C88.4756 26.9799 87.3951 27.4228 86.1533 27.4229H75.2734V24.7295H86.1533C86.6651 24.7294 87.0823 24.5566 87.4473 24.1924C87.8124 23.8279 87.9863 23.4106 87.9863 22.8994C87.9862 22.3889 87.8133 21.9813 87.4541 21.6309L87.4473 21.624C87.0823 21.26 86.665 21.088 86.1533 21.0879H79.8057C78.5641 21.0879 77.4796 20.6456 76.5957 19.7773L76.5918 19.7715L76.5869 19.7686C75.7168 18.8861 75.2734 17.803 75.2734 16.5635C75.2735 15.324 75.7178 14.2454 76.5918 13.373C77.4749 12.4917 78.5602 12.0401 79.8057 12.04H90.6846V14.7344ZM109.412 14.7344H98.5332C98.0215 14.7345 97.6042 14.9074 97.2393 15.2715C96.8743 15.6357 96.7003 16.0526 96.7002 16.5635C96.7002 17.0728 96.873 17.4891 97.2354 17.8525C97.5986 18.2055 98.017 18.3758 98.5332 18.376H104.881C106.122 18.3761 107.202 18.8247 108.073 19.7041C108.96 20.5757 109.412 21.6559 109.412 22.8994C109.412 24.1426 108.961 25.226 108.078 26.1074C107.204 26.9799 106.123 27.4228 104.881 27.4229H94.001V24.7295H104.881C105.393 24.7294 105.811 24.5568 106.176 24.1924C106.541 23.8279 106.714 23.4106 106.714 22.8994C106.714 22.3888 106.541 21.9814 106.182 21.6309L106.176 21.624C105.811 21.2598 105.393 21.088 104.881 21.0879H98.5332C97.2919 21.0877 96.2081 20.6454 95.3242 19.7773L95.3154 19.7686C94.4452 18.8861 94.001 17.803 94.001 16.5635C94.001 15.3241 94.4456 14.2454 95.3193 13.373C96.2024 12.4917 97.2879 12.0402 98.5332 12.04H109.412V14.7344ZM128.143 14.7344H120.438C119.139 14.7344 118.028 15.1657 117.071 16.04C116.343 16.7054 115.861 17.4793 115.617 18.376H128.143V21.0879H115.617C115.861 21.9868 116.343 22.7676 117.072 23.4424C118.027 24.3037 119.138 24.7295 120.438 24.7295H128.143V27.4229H120.438C118.316 27.4229 116.484 26.6672 114.986 25.1729C113.489 23.6783 112.732 21.8496 112.732 19.7314C112.733 17.6133 113.489 15.7854 114.986 14.291C116.484 12.7964 118.316 12.04 120.438 12.04H128.143V14.7344ZM146.874 14.7344H140.525V27.4229H137.81V14.7344H131.463V12.04H146.874V14.7344ZM157.896 17.6377L162.839 12.04H166.538L159.737 19.7314L166.538 27.4229H162.839L157.896 21.8271L152.955 27.4229H149.257L156.058 19.7314L149.257 12.04H152.955L157.896 17.6377Z" fill="#111827"/>
<path d="M30.7595 21.1203C26.5742 26.4404 27.4882 25.3226 23.8872 29.3075C20.2862 33.2924 18.8695 34.122 15.8447 35.6161C18.6589 38.3532 25.6613 39.5414 28.5777 39.6614C39.9067 39.6614 45.8658 29.0974 47.4293 23.8154L42.6487 28.5872C34.8272 34.5505 35.5173 27.1545 35.8281 21.4701C36.139 15.7856 34.9448 15.8001 30.7595 21.1203Z" fill="#111827"/> <path d="M30.7595 21.1203C26.5742 26.4404 27.4882 25.3226 23.8872 29.3075C20.2862 33.2924 18.8695 34.122 15.8447 35.6161C18.6589 38.3532 25.6613 39.5414 28.5777 39.6614C39.9067 39.6614 45.8658 29.0974 47.4293 23.8154L42.6487 28.5872C34.8272 34.5505 35.5173 27.1545 35.8281 21.4701C36.139 15.7856 34.9448 15.8001 30.7595 21.1203Z" fill="#111827"/>
<path opacity="0.1" d="M29.2095 26.2439C33.3136 20.8326 32.7563 22.5015 32.807 24.7774C32.8519 26.7963 34.5315 36.6559 41.1007 34.301C38.0469 37.3255 33.907 39.662 28.5793 39.662C26.3122 39.5687 21.8577 38.9891 18.6646 37.45C21.017 35.3088 26.0422 30.4203 29.2095 26.2439Z" fill="#111827"/> <path opacity="0.1" d="M29.2095 26.2439C33.3136 20.8326 32.7563 22.5015 32.807 24.7774C32.8519 26.7963 34.5315 36.6559 41.1007 34.301C38.0469 37.3255 33.907 39.662 28.5793 39.662C26.3122 39.5687 21.8577 38.9891 18.6646 37.45C21.017 35.3088 26.0422 30.4203 29.2095 26.2439Z" fill="#111827"/>
<path d="M33.6931 9.41385C39.7064 4.99711 41.3042 12.2451 41.3513 16.4212V23.1454C41.3513 27.4346 47.8398 20.9512 47.8398 18.7215C47.8398 17.7209 45.2516 0 29.084 0C12.9162 0 6.88907 13.0945 8.16545 22.2252C9.44185 31.356 12.9227 29.6112 15.2564 28.1708C18.731 26.9675 26.1765 14.9347 33.6931 9.41385Z" fill="#111827"/> <path d="M33.6931 9.41385C39.7064 4.99711 41.3042 12.2451 41.3513 16.4212V23.1454C41.3513 27.4346 47.8398 20.9512 47.8398 18.7215C47.8398 17.7209 45.2516 0 29.084 0C12.9162 0 6.88907 13.0945 8.16545 22.2252C9.44185 31.356 12.9227 29.6112 15.2564 28.1708C18.731 26.9675 26.1765 14.9347 33.6931 9.41385Z" fill="#111827"/>
<path d="M29.0861 0C38.6554 4.75569e-06 43.4673 6.20837 45.8012 11.4831C42.1121 7.97614 38.7616 7.54956 36.4579 8.08875C35.6616 8.22689 34.7457 8.64219 33.6951 9.41381C26.1786 14.9347 18.2903 26.9881 15.369 28.3181C12.4477 29.6479 8.98626 31.1565 8.1674 22.2252C7.32568 13.0444 12.9182 0 29.0861 0Z" fill="#111827"/> <path d="M29.0861 0C38.6554 4.75569e-06 43.4673 6.20837 45.8012 11.4831C42.1121 7.97614 38.7616 7.54956 36.4579 8.08875C35.6616 8.22689 34.7457 8.64219 33.6951 9.41381C26.1786 14.9347 18.2903 26.9881 15.369 28.3181C12.4477 29.6479 8.98626 31.1565 8.1674 22.2252C7.32568 13.0444 12.9182 0 29.0861 0Z" fill="#111827"/>
<path opacity="0.1" d="M26.7258 33.5267C30.0192 29.4302 30.2606 26.9637 31.3365 30.9474C32.2891 34.4746 34.7076 36.2162 37.1681 37.3452C34.7482 38.7572 31.8932 39.6621 28.5782 39.6621C26.8803 39.5922 23.9554 39.2493 21.2524 38.4351C23.0305 37.2144 25.1293 35.5124 26.7258 33.5267Z" fill="#111827"/> <path opacity="0.1" d="M26.7258 33.5267C30.0192 29.4302 30.2606 26.9637 31.3365 30.9474C32.2891 34.4746 34.7076 36.2162 37.1681 37.3452C34.7482 38.7572 31.8932 39.6621 28.5782 39.6621C26.8803 39.5922 23.9554 39.2493 21.2524 38.4351C23.0305 37.2144 25.1293 35.5124 26.7258 33.5267Z" fill="#111827"/>
<path d="M29.088 0C29.3164 0 29.5422 0.00350863 29.7652 0.0104881C31.9447 0.0786729 33.8683 0.475476 35.565 1.11005C35.7725 1.18767 35.9766 1.26895 36.1773 1.35352C36.2003 1.36323 36.2235 1.37276 36.2464 1.38255C36.3196 1.41379 36.3923 1.44574 36.4646 1.47788C36.5163 1.50086 36.5677 1.52413 36.619 1.54755C36.7651 1.61432 36.9095 1.68267 37.052 1.75301C37.1196 1.7864 37.1867 1.82035 37.2534 1.85452C37.3449 1.90133 37.4356 1.9488 37.5257 1.99705C38.6339 2.5913 39.6275 3.29283 40.5172 4.06639C40.6232 4.15858 40.7278 4.25182 40.831 4.346C40.9697 4.4727 41.1057 4.60121 41.2392 4.73125C41.2839 4.77477 41.3283 4.81848 41.3725 4.86235C41.434 4.92356 41.4949 4.98514 41.5554 5.04702C41.5739 5.06596 41.5924 5.08494 41.6107 5.10395C41.6736 5.16883 41.7359 5.23394 41.7974 5.29948C42.0164 5.53248 42.2277 5.76965 42.4318 6.01023C42.5281 6.12388 42.6225 6.23863 42.7157 6.35372C42.8215 6.48444 42.9255 6.61579 43.0271 6.74814C44.1938 8.2668 45.0918 9.88565 45.7782 11.4271C45.7864 11.4456 45.7946 11.4641 45.8028 11.4826C42.7535 8.5841 39.9355 7.79003 37.749 7.90634C35.2573 7.13785 31.2106 7.96321 25.9463 13.2178C13.9145 25.2275 6.1716 26.8444 10.0602 12.1741C10.4412 10.7369 10.9705 9.45623 11.6294 8.31499C12.6146 6.90895 13.8095 5.60385 15.2247 4.46399C15.3511 4.36217 15.4794 4.26178 15.6094 4.16264C17.1619 2.97822 18.9663 1.98826 21.036 1.27149C21.3319 1.169 21.6333 1.07212 21.9402 0.98101C24.0584 0.352059 26.4368 2.0529e-05 29.088 0Z" fill="#111827"/> <path d="M29.088 0C29.3164 0 29.5422 0.00350863 29.7652 0.0104881C31.9447 0.0786729 33.8683 0.475476 35.565 1.11005C35.7725 1.18767 35.9766 1.26895 36.1773 1.35352C36.2003 1.36323 36.2235 1.37276 36.2464 1.38255C36.3196 1.41379 36.3923 1.44574 36.4646 1.47788C36.5163 1.50086 36.5677 1.52413 36.619 1.54755C36.7651 1.61432 36.9095 1.68267 37.052 1.75301C37.1196 1.7864 37.1867 1.82035 37.2534 1.85452C37.3449 1.90133 37.4356 1.9488 37.5257 1.99705C38.6339 2.5913 39.6275 3.29283 40.5172 4.06639C40.6232 4.15858 40.7278 4.25182 40.831 4.346C40.9697 4.4727 41.1057 4.60121 41.2392 4.73125C41.2839 4.77477 41.3283 4.81848 41.3725 4.86235C41.434 4.92356 41.4949 4.98514 41.5554 5.04702C41.5739 5.06596 41.5924 5.08494 41.6107 5.10395C41.6736 5.16883 41.7359 5.23394 41.7974 5.29948C42.0164 5.53248 42.2277 5.76965 42.4318 6.01023C42.5281 6.12388 42.6225 6.23863 42.7157 6.35372C42.8215 6.48444 42.9255 6.61579 43.0271 6.74814C44.1938 8.2668 45.0918 9.88565 45.7782 11.4271C45.7864 11.4456 45.7946 11.4641 45.8028 11.4826C42.7535 8.5841 39.9355 7.79003 37.749 7.90634C35.2573 7.13785 31.2106 7.96321 25.9463 13.2178C13.9145 25.2275 6.1716 26.8444 10.0602 12.1741C10.4412 10.7369 10.9705 9.45623 11.6294 8.31499C12.6146 6.90895 13.8095 5.60385 15.2247 4.46399C15.3511 4.36217 15.4794 4.26178 15.6094 4.16264C17.1619 2.97822 18.9663 1.98826 21.036 1.27149C21.3319 1.169 21.6333 1.07212 21.9402 0.98101C24.0584 0.352059 26.4368 2.0529e-05 29.088 0Z" fill="#111827"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -1,62 +1,62 @@
import type { Config } from "tailwindcss"; import type { Config } from "tailwindcss";
import { heroui } from "@heroui/theme"; import { heroui } from "@heroui/theme";
export default { export default {
darkMode: "class", darkMode: "class",
content: [ content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}", "./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}", "./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}",
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}", "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}",
], ],
theme: { theme: {
extend: { extend: {
colors: { colors: {
background: "var(--background)", background: "var(--background)",
foreground: "var(--foreground)", foreground: "var(--foreground)",
'bg-subtle': '#f9fafb', 'bg-subtle': '#f9fafb',
'bg-surface': '#ffffff', 'bg-surface': '#ffffff',
'border-normal': '#e5e7eb', 'border-normal': '#e5e7eb',
'border-gray': '#f3f4f6', 'border-gray': '#f3f4f6',
'text-primary': '#111827', 'text-primary': '#111827',
'text-tertiary': '#9ca1af', 'text-tertiary': '#9ca1af',
'fill-secondary-click': '#f3f4f6', 'fill-secondary-click': '#f3f4f6',
}, },
fontFamily: { fontFamily: {
inter: ['var(--font-inter)', 'Inter', 'sans-serif'], inter: ['var(--font-inter)', 'Inter', 'sans-serif'],
jetbrains: ['var(--font-jetbrains)', 'JetBrains Mono', 'monospace'], jetbrains: ['var(--font-jetbrains)', 'JetBrains Mono', 'monospace'],
}, },
fontSize: { fontSize: {
'caption-tiny': ['12px', { lineHeight: '150%', letterSpacing: '0.01em' }], 'caption-tiny': ['12px', { lineHeight: '150%', letterSpacing: '0.01em' }],
'body-small': ['14px', { lineHeight: '150%' }], 'body-small': ['14px', { lineHeight: '150%' }],
'body-default': ['16px', { lineHeight: '150%' }], 'body-default': ['16px', { lineHeight: '150%' }],
'body-large': ['18px', { lineHeight: '150%' }], 'body-large': ['18px', { lineHeight: '150%' }],
'heading-h4': ['20px', { lineHeight: '140%', letterSpacing: '-0.005em' }], 'heading-h4': ['20px', { lineHeight: '140%', letterSpacing: '-0.005em' }],
'heading-h3': ['24px', { lineHeight: '130%', letterSpacing: '-0.005em' }], 'heading-h3': ['24px', { lineHeight: '130%', letterSpacing: '-0.005em' }],
'heading-h2': ['32px', { lineHeight: '120%', letterSpacing: '-0.01em' }], 'heading-h2': ['32px', { lineHeight: '120%', letterSpacing: '-0.01em' }],
}, },
fontWeight: { fontWeight: {
regular: '400', regular: '400',
medium: '500', medium: '500',
bold: '700', bold: '700',
extrabold: '800', extrabold: '800',
}, },
animation: { animation: {
'fade-in': 'fadeInCard 0.4s ease-out', 'fade-in': 'fadeInCard 0.4s ease-out',
}, },
keyframes: { keyframes: {
fadeInCard: { fadeInCard: {
'0%': { '0%': {
opacity: '0', opacity: '0',
transform: 'scale(0.95) translateY(20px)', transform: 'scale(0.95) translateY(20px)',
}, },
'100%': { '100%': {
opacity: '1', opacity: '1',
transform: 'scale(1) translateY(0)', transform: 'scale(1) translateY(0)',
}, },
}, },
}, },
}, },
}, },
plugins: [heroui()], plugins: [heroui()],
} satisfies Config; } satisfies Config;