diff --git a/CLAUDE.md b/CLAUDE.md index fab063b..f18f055 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -64,7 +64,8 @@ deploy/deploy_server.sh backend # 仅部署后端 ### Flutter 应用 (`flutter_monisuo/lib/`) - **状态管理**:Provider(ChangeNotifier)— `providers/` 消费 `data/services/`,底层调用 `core/network/DioClient`。 -- **UI**:shadcn_ui + 自定义主题系统(`core/theme/`)。深色主题为主,颜色集中管理在 `AppColorScheme`。 +- **主题样式**:前端禁止硬编码,新设计统一维护到theme目录的定义中,并尽可能复用设计主题。 +- **UI**:shadcn_ui + 自定义主题系统(`core/theme/`)。颜色集中管理在 `AppColorScheme`。 - **数据流**:`data/services/`(API 调用)→ `providers/`(状态)→ `ui/pages/`(视图)。 - 页面:auth、home、market、trade、asset、mine、orders、onboarding。 diff --git a/flutter_monisuo/lib/core/theme/app_color_scheme.dart b/flutter_monisuo/lib/core/theme/app_color_scheme.dart index dbe8231..45e746d 100644 --- a/flutter_monisuo/lib/core/theme/app_color_scheme.dart +++ b/flutter_monisuo/lib/core/theme/app_color_scheme.dart @@ -419,81 +419,21 @@ class AppColorScheme { ); // ============================================ - // 兼容性别名(替代 theme/app_colors.dart) - // 映射旧名到新系统,避免 breaking change + // 兼容性别名 - 仅保留有外部引用的 + // (buyButtonFill, sellButtonFill, darkCtaGradient, lightCtaGradient, + // buyGradient, sellGradient 已在上方定义,此处无需重复) // ============================================ - // 背景色 - static const Color background = darkBackground; - static const Color cardBackground = darkSurfaceContainer; - static const Color inputBackground = darkSurfaceContainerHigh; - static const Color scaffoldBackground = darkBackground; - static const Color modalBackground = darkSurfaceContainerHigh; - static const Color hoverBackground = darkSurfaceBright; + /// 获取买入按钮渐变(主题感知)- 用于盈利展示 - // 文字色 - static const Color textPrimary = darkOnSurface; - static const Color textSecondary = darkOnSurfaceVariant; - static const Color textHint = darkOnSurfaceMuted; - static const Color textDisabled = darkInverseSurface; - static const Color textLink = darkPrimary; - - // 边框色 - static const Color border = darkOutlineVariant; - static const Color divider = darkSurfaceContainer; - static const Color inputBorder = darkOnSurfaceMuted; - static const Color inputFocusBorder = darkPrimary; - static const Color focusBorder = darkPrimary; - - // 交易类型色 - static const Color deposit = up; - static const Color withdraw = warning; - static const Color trade = info; - - // 旧渐变 - static const List gradientColors = [darkPrimary, darkPrimaryContainer]; - static const LinearGradient primaryGradient = LinearGradient( - colors: [darkPrimary, darkPrimaryContainer], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ); -} - -/// 创建 Shadcn 深色主题 -ShadThemeData createDarkShadTheme() { - return ShadThemeData( - brightness: Brightness.dark, - colorScheme: AppColorScheme.darkShad, - ); -} - -/// 创建 Shadcn 浅色主题 -ShadThemeData createLightShadTheme() { - return ShadThemeData( - brightness: Brightness.light, - colorScheme: AppColorScheme.lightShad, - ); -} - -/// 获取涨跌颜色(明暗通用)- 已废弃,请使用带主题感知的版本 -@Deprecated('Use AppColorScheme.getUpColor(isDark) instead') +/// 获取涨跌颜色(明暗通用) Color getChangeColor(bool isUp) => isUp ? AppColorScheme.up : AppColorScheme.down; -/// 获取涨跌背景色(带透明度)- 已废弃,请使用带主题感知的版本 -@Deprecated('Use AppColorScheme.getUpBackgroundColor(isDark, opacity: opacity) instead') +/// 获取涨跌背景色(带透明度) Color getChangeBackgroundColor(bool isUp, {double opacity = 0.15}) { return isUp ? AppColorScheme.up.withValues(alpha: opacity) : AppColorScheme.down.withValues(alpha: opacity); } - -/// 获取涨跌颜色(主题感知) -Color getChangeColorThemeAware(bool isUp, bool isDark) => - isUp ? AppColorScheme.getUpColor(isDark) : AppColorScheme.down; - -/// 获取涨跌背景色(主题感知) -Color getChangeBackgroundColorThemeAware(bool isUp, bool isDark, {double opacity = 0.15}) { - return isUp - ? AppColorScheme.getUpBackgroundColor(isDark, opacity: opacity) - : AppColorScheme.down.withValues(alpha: opacity); } + diff --git a/flutter_monisuo/lib/core/theme/app_spacing.dart b/flutter_monisuo/lib/core/theme/app_spacing.dart index 5cf9953..47ca9e0 100644 --- a/flutter_monisuo/lib/core/theme/app_spacing.dart +++ b/flutter_monisuo/lib/core/theme/app_spacing.dart @@ -81,17 +81,17 @@ class AppRadius { // 基础圆角 (Base Radius) // ============================================ - /// 小圆角 - 4px (标签、小组件) - static const double sm = 4.0; + /// 小圆角 - 6px (标签、徽章) — 对齐 Pencil $radius-sm + static const double sm = 6.0; - /// 中圆角 - 8px (输入框) - static const double md = 8.0; + /// 中圆角 - 10px (输入框、标签页) — 对齐 Pencil $radius-md + static const double md = 10.0; - /// 大圆角 - 12px (卡片 - 旧版) - static const double lg = 12.0; + /// 大圆角 - 14px (卡片、按钮、列表) — 对齐 Pencil $radius-lg + static const double lg = 14.0; - /// 特大圆角 - 16px (大卡片) - static const double xl = 16.0; + /// 特大圆角 - 20px (大卡片、弹窗) — 对齐 Pencil $radius-xl + static const double xl = 20.0; /// 超大圆角 - 24px (按钮、模态框、底部抽屉) static const double xxl = 24.0; diff --git a/flutter_monisuo/lib/core/theme/app_text_styles.dart b/flutter_monisuo/lib/core/theme/app_text_styles.dart deleted file mode 100644 index bd0a4e4..0000000 --- a/flutter_monisuo/lib/core/theme/app_text_styles.dart +++ /dev/null @@ -1,171 +0,0 @@ -import 'package:flutter/material.dart'; -import 'app_color_scheme.dart'; - -/// 文字样式系统 -/// -/// 统一管理所有文字样式,确保一致性 -/// 所有样式默认使用 textPrimary 颜色,保证对比度 -class AppTextStyles { - AppTextStyles._(); - - // ============================================ - // 标题样式 (Headings) - // ============================================ - - /// H1 - 页面大标题 - static const TextStyle h1 = TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, - color: AppColorScheme.textPrimary, - height: 1.3, - ); - - /// H2 - 区块标题 - static const TextStyle h2 = TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: AppColorScheme.textPrimary, - height: 1.3, - ); - - /// H3 - 卡片标题 - static const TextStyle h3 = TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: AppColorScheme.textPrimary, - height: 1.4, - ); - - /// H4 - 小标题 - static const TextStyle h4 = TextStyle( - fontSize: 15, - fontWeight: FontWeight.w600, - color: AppColorScheme.textPrimary, - height: 1.4, - ); - - // ============================================ - // 正文样式 (Body) - // ============================================ - - /// Body1 - 主要正文 - static const TextStyle body1 = TextStyle( - fontSize: 14, - fontWeight: FontWeight.normal, - color: AppColorScheme.textPrimary, - height: 1.5, - ); - - /// Body2 - 次要正文 - static const TextStyle body2 = TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, - color: AppColorScheme.textPrimary, - height: 1.5, - ); - - // ============================================ - // 辅助文字 (Caption & Small) - // ============================================ - - /// Caption - 说明文字 - static const TextStyle caption = TextStyle( - fontSize: 12, - fontWeight: FontWeight.normal, - color: AppColorScheme.textSecondary, - height: 1.4, - ); - - /// Small - 极小文字 - static const TextStyle small = TextStyle( - fontSize: 11, - fontWeight: FontWeight.normal, - color: AppColorScheme.textSecondary, - height: 1.3, - ); - - /// Hint - 提示文字 - static const TextStyle hint = TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, - color: AppColorScheme.textHint, - height: 1.4, - ); - - // ============================================ - // 特殊样式 (Special) - // ============================================ - - /// 金额/价格 - 大号数字 - static const TextStyle amount = TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, - color: AppColorScheme.textPrimary, - height: 1.2, - fontFeatures: [FontFeature.tabularFigures()], - ); - - /// 价格 - 标准数字 - static const TextStyle price = TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: AppColorScheme.textPrimary, - height: 1.3, - fontFeatures: [FontFeature.tabularFigures()], - ); - - /// 价格变化 - 涨跌幅 - static const TextStyle priceChange = TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - height: 1.3, - fontFeatures: [FontFeature.tabularFigures()], - ); - - /// 按钮文字 - static const TextStyle button = TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: AppColorScheme.textPrimary, - height: 1.2, - ); - - /// 链接文字 - static const TextStyle link = TextStyle( - fontSize: 13, - fontWeight: FontWeight.w500, - color: AppColorScheme.textLink, - decoration: TextDecoration.underline, - height: 1.4, - ); - - // ============================================ - // 可复制修改的样式方法 - // ============================================ - - /// 获取带颜色的标题样式 - static TextStyle headingWithColor(TextStyle style, Color color) { - return style.copyWith(color: color); - } - - /// 获取带颜色的正文样式 - static TextStyle bodyWithColor(TextStyle style, Color color) { - return style.copyWith(color: color); - } - - /// 获取粗体样式 - static TextStyle bold(TextStyle style) { - return style.copyWith(fontWeight: FontWeight.bold); - } - - /// 获取半粗体样式 - static TextStyle semiBold(TextStyle style) { - return style.copyWith(fontWeight: FontWeight.w600); - } -} - -/// 兼容旧代码的别名 -@Deprecated('Use AppTextStyles instead') -class AppText { - AppText._(); -} diff --git a/flutter_monisuo/lib/core/theme/app_theme.dart b/flutter_monisuo/lib/core/theme/app_theme.dart index cfe5f3c..7118728 100644 --- a/flutter_monisuo/lib/core/theme/app_theme.dart +++ b/flutter_monisuo/lib/core/theme/app_theme.dart @@ -69,15 +69,15 @@ class AppTheme { ), ), - // 按钮 - 渐变 CTA,大圆角 + // 按钮 - Pencil accent-primary (Gold) elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( - backgroundColor: AppColorScheme.darkPrimary, - foregroundColor: AppColorScheme.darkBackground, - minimumSize: const Size(double.infinity, 48), + backgroundColor: AppColorScheme.darkSecondary, + foregroundColor: AppColorScheme.darkOnSecondary, + minimumSize: const Size(double.infinity, 52), padding: const EdgeInsets.symmetric(vertical: 14), shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(AppRadius.xxl), + borderRadius: BorderRadius.circular(AppRadius.lg), ), elevation: 0, textStyle: GoogleFonts.inter( @@ -89,7 +89,7 @@ class AppTheme { textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( - foregroundColor: AppColorScheme.darkPrimary, + foregroundColor: AppColorScheme.darkSecondary, ), ), @@ -174,15 +174,15 @@ class AppTheme { ), ), - // 按钮 - Plasma 渐变,full 圆角 + // 按钮 - Pencil accent-primary (dark gray) elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( - backgroundColor: AppColorScheme.lightPrimary, + backgroundColor: const Color(0xFF1F2937), foregroundColor: const Color(0xFFFFFFFF), - minimumSize: const Size(double.infinity, 48), + minimumSize: const Size(double.infinity, 52), padding: const EdgeInsets.symmetric(vertical: 14), shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(AppRadius.xxl), + borderRadius: BorderRadius.circular(AppRadius.lg), ), elevation: 0, textStyle: GoogleFonts.inter( @@ -194,7 +194,7 @@ class AppTheme { textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( - foregroundColor: AppColorScheme.lightPrimary, + foregroundColor: const Color(0xFF1F2937), ), ), @@ -216,55 +216,56 @@ class AppTheme { } } -/// "The Kinetic Vault" & "The Ethereal Terminal" 文字样式系统 +/// Pencil 设计系统字体规范 /// -/// 【优化】统一使用 Inter 字体(专业金融风格,币安同款字体) +/// 对齐 Pencil 变量: Inter 字体, 明确的字号/字重层级 +/// 28px (总资产) → 24px (精选价格) → 22px (页面标题) → 16px (区块标题) +/// → 14px (卡片标题/价格) → 13px (正文) → 12px (标签/副标题) → 11px (小文字) class AppTextStyles { AppTextStyles._(); // ============================================ - // Display - 核心数字 (价格/余额) - // 参考 Binance/OKX 紧凑专业风格 + // Display - 核心数字 // ============================================ - /// D1 - 总资产余额 (22px) + /// D1 - 总资产/余额 (28px w700) — Pencil $hero-value static TextStyle displayLarge(BuildContext context) => GoogleFonts.inter( - fontSize: 22, + fontSize: 28, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface, height: 1.15, - letterSpacing: -0.01, + letterSpacing: -0.5, ); - /// D2 - 主价格 (20px) + /// D2 - 精选价格 (24px w700) — Pencil 行情卡片价格 static TextStyle displayMedium(BuildContext context) => GoogleFonts.inter( - fontSize: 20, - fontWeight: FontWeight.w600, + fontSize: 24, + fontWeight: FontWeight.w700, + color: Theme.of(context).colorScheme.onSurface, + height: 1.15, + ); + + /// D3 - 页面标题 (22px w700) — Pencil 页面大标题 + static TextStyle displaySmall(BuildContext context) => GoogleFonts.inter( + fontSize: 22, + fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface, height: 1.2, ); - /// D3 - 次要价格 (18px) - static TextStyle displaySmall(BuildContext context) => GoogleFonts.inter( - fontSize: 18, - fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurface, - height: 1.25, - ); - // ============================================ // Headline - 标题 // ============================================ - /// 区域标题 (15px) + /// 区块/导航标题 (16px w600) — Pencil $section-title static TextStyle headlineLarge(BuildContext context) => GoogleFonts.inter( - fontSize: 15, + fontSize: 16, fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.onSurface, height: 1.3, ); - /// 卡片标题 (14px) + /// 卡片标题/价格/标签页 (14px w600) — Pencil $card-title static TextStyle headlineMedium(BuildContext context) => GoogleFonts.inter( fontSize: 14, fontWeight: FontWeight.w600, @@ -272,7 +273,7 @@ class AppTextStyles { height: 1.35, ); - /// 副标题 (13px) + /// 副标题/持仓价值 (13px w500) static TextStyle headlineSmall(BuildContext context) => GoogleFonts.inter( fontSize: 13, fontWeight: FontWeight.w500, @@ -284,7 +285,7 @@ class AppTextStyles { // Body - 正文 // ============================================ - /// 主要正文 (13px) + /// 主要正文 (13px w400) static TextStyle bodyLarge(BuildContext context) => GoogleFonts.inter( fontSize: 13, fontWeight: FontWeight.w400, @@ -292,7 +293,7 @@ class AppTextStyles { height: 1.45, ); - /// 次要正文 (12px) + /// 次要正文/副标题 (12px w400) — Pencil $subtitle static TextStyle bodyMedium(BuildContext context) => GoogleFonts.inter( fontSize: 12, fontWeight: FontWeight.w400, @@ -300,7 +301,7 @@ class AppTextStyles { height: 1.45, ); - /// 辅助文字 (11px) + /// 辅助文字/币种全名 (11px w400) — Pencil $small-text static TextStyle bodySmall(BuildContext context) => GoogleFonts.inter( fontSize: 11, fontWeight: FontWeight.w400, @@ -312,26 +313,26 @@ class AppTextStyles { // Label - 标签 // ============================================ - /// 常规标签 (11px) + /// 按钮/标签页标签 (12px w500) — Pencil $tab-label static TextStyle labelLarge(BuildContext context) => GoogleFonts.inter( - fontSize: 11, + fontSize: 12, fontWeight: FontWeight.w500, color: Theme.of(context).colorScheme.onSurface, height: 1.35, ); - /// 小标签 (10px) + /// 涨跌幅标签 (11px w500) — Pencil $change-badge static TextStyle labelMedium(BuildContext context) => GoogleFonts.inter( - fontSize: 10, + fontSize: 11, fontWeight: FontWeight.w500, color: Theme.of(context).colorScheme.onSurfaceVariant, height: 1.35, ); - /// 极小标签 (9px) + /// 涨跌幅标签-粗 (11px w600) — Pencil $change-badge-bold static TextStyle labelSmall(BuildContext context) => GoogleFonts.inter( - fontSize: 9, - fontWeight: FontWeight.w500, + fontSize: 11, + fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.onSurfaceVariant, height: 1.35, ); @@ -340,108 +341,33 @@ class AppTextStyles { // 数字/金额 - Inter (等宽特性) // ============================================ - /// 大号数字 (22px) - 主价格、总资产 + /// 大号数字 (28px w700) - 总资产、余额 static TextStyle numberLarge(BuildContext context) => GoogleFonts.inter( - fontSize: 22, - fontWeight: FontWeight.w600, + fontSize: 28, + fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface, height: 1.15, + letterSpacing: -0.5, fontFeatures: const [FontFeature.tabularFigures()], ); - /// 中号数字 (16px) - 次要价格、数量 + /// 中号数字 (14px w600) - 价格、金额 static TextStyle numberMedium(BuildContext context) => GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w500, + fontSize: 14, + fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.onSurface, height: 1.25, fontFeatures: const [FontFeature.tabularFigures()], ); - /// 小号数字 (13px) - 涨跌幅、小量 + /// 小号数字 (12px w500) - 涨跌幅、数量 static TextStyle numberSmall(BuildContext context) => GoogleFonts.inter( - fontSize: 13, + fontSize: 12, fontWeight: FontWeight.w500, color: Theme.of(context).colorScheme.onSurface, height: 1.3, fontFeatures: const [FontFeature.tabularFigures()], ); - - // ============================================ - // 兼容旧代码的静态样式 (已废弃) - // ============================================ - - @Deprecated('Use displaySmall instead') - static const TextStyle heading1 = TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use headlineLarge instead') - static const TextStyle heading2 = TextStyle( - fontSize: 15, - fontWeight: FontWeight.bold, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use headlineMedium instead') - static const TextStyle heading3 = TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use headlineSmall instead') - static const TextStyle heading4 = TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use bodyLarge instead') - static const TextStyle body1 = TextStyle( - fontSize: 13, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use bodyMedium instead') - static const TextStyle body2 = TextStyle( - fontSize: 12, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use labelSmall instead') - static const TextStyle caption = TextStyle( - fontSize: 11, - color: Color(0xFFA1A1AA), - ); - - @Deprecated('Use labelSmall instead') - static const TextStyle hint = TextStyle( - fontSize: 12, - color: Color(0xFF71717A), - ); - - @Deprecated('Use numberMedium instead') - static const TextStyle price = TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: Color(0xFFFFFFFF), - ); - - @Deprecated('Use numberSmall with color instead') - static const TextStyle change = TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - ); - - @Deprecated('Use numberSmall instead') - static const TextStyle number = TextStyle( - fontSize: 13, - fontWeight: FontWeight.w500, - color: Color(0xFFFFFFFF), - ); } /// 动画时长 diff --git a/flutter_monisuo/lib/ui/pages/asset/asset_page.dart b/flutter_monisuo/lib/ui/pages/asset/asset_page.dart index 14e9778..7777e43 100644 --- a/flutter_monisuo/lib/ui/pages/asset/asset_page.dart +++ b/flutter_monisuo/lib/ui/pages/asset/asset_page.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/event/app_event_bus.dart'; import '../../../providers/asset_provider.dart'; import 'components/account_tab_switcher.dart'; @@ -81,11 +81,7 @@ class _AssetPageState extends State with AutomaticKeepAliveClientMixi padding: const EdgeInsets.only(top: 16, bottom: 8), child: Text( '资产', - style: GoogleFonts.inter( - fontSize: 22, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.displaySmall(context), ), ), const SizedBox(height: AppSpacing.sm), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart b/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart index 8fba218..2fa698f 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_spacing.dart'; /// 账户标签切换器 — .pen node UE6xC @@ -67,12 +67,12 @@ class AccountTabSwitcher extends StatelessWidget { decoration: BoxDecoration( color: isSelected ? colorScheme.surface - : Colors.transparent, + : const Color(0x00000000), borderRadius: BorderRadius.circular(AppRadius.sm), boxShadow: isSelected ? [ BoxShadow( - color: Colors.black.withValues(alpha: 0.05), + color: colorScheme.shadow.withValues(alpha: 0.05), blurRadius: 3, offset: const Offset(0, 1), ), @@ -82,11 +82,12 @@ class AccountTabSwitcher extends StatelessWidget { alignment: Alignment.center, child: Text( label, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: isSelected ? FontWeight.w600 : FontWeight.w500, - color: isSelected ? colorScheme.onSurface : colorScheme.onSurfaceVariant, - ), + style: isSelected + ? AppTextStyles.headlineMedium(context) + : AppTextStyles.headlineMedium(context).copyWith( + fontWeight: FontWeight.w500, + color: colorScheme.onSurfaceVariant, + ), ), ), ), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart b/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart index adfafb5..91b532b 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; +import '../../../../core/theme/app_theme.dart'; /// 操作按钮行 — .pen node pIpHe /// gap: 12, three buttons evenly distributed @@ -35,7 +35,7 @@ class ActionButtonsRow extends StatelessWidget { bgColor: bgColor, onTap: onDeposit, ), - const SizedBox(width: 12), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), ActionButton( icon: LucideIcons.arrowDownLeft, label: '提现', @@ -43,7 +43,7 @@ class ActionButtonsRow extends StatelessWidget { bgColor: bgColor, onTap: onWithdraw, ), - const SizedBox(width: 12), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), ActionButton( icon: LucideIcons.repeat, label: '划转', @@ -96,12 +96,10 @@ class ActionButton extends StatelessWidget { color: accentColor, ), ), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.xs + 2), Text( label, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.w500, + style: AppTextStyles.labelLarge(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart b/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart index fc353c5..fcf0eae 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; import 'package:provider/provider.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/utils/toast_utils.dart'; @@ -38,17 +38,14 @@ class InfoRow extends StatelessWidget { children: [ Text( label, - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), Text( value, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: isBold ? FontWeight.bold : FontWeight.normal, - color: colorScheme.onSurface, + style: AppTextStyles.bodyMedium(context).copyWith( + fontWeight: isBold ? FontWeight.bold : FontWeight.w400, ), ), ], @@ -88,9 +85,8 @@ class WalletAddressCard extends StatelessWidget { Expanded( child: Text( address, - style: const TextStyle( + style: AppTextStyles.bodyMedium(context).copyWith( fontFamily: 'monospace', - fontSize: 12, ), ), ), @@ -117,10 +113,7 @@ class WalletAddressCard extends StatelessWidget { const SizedBox(height: AppSpacing.sm), Text( '网络: $network', - style: GoogleFonts.inter( - fontSize: 11, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ), @@ -141,7 +134,7 @@ void showDepositDialog(BuildContext context) { showShadDialog( context: context, builder: (ctx) => Dialog( - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), child: GlassPanel( borderRadius: BorderRadius.circular(AppRadius.lg), padding: const EdgeInsets.all(AppSpacing.lg), @@ -157,17 +150,14 @@ void showDepositDialog(BuildContext context) { children: [ Text( '充值', - style: GoogleFonts.inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), const SizedBox(height: AppSpacing.xs), Text( 'Asset: USDT', - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -261,7 +251,7 @@ void showDepositResultDialog(BuildContext context, Map data) { showShadDialog( context: context, builder: (ctx) => Dialog( - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), child: GlassPanel( borderRadius: BorderRadius.circular(AppRadius.lg), padding: const EdgeInsets.all(AppSpacing.lg), @@ -279,10 +269,8 @@ void showDepositResultDialog(BuildContext context, Map data) { const SizedBox(width: AppSpacing.sm), Text( '充值申请成功', - style: GoogleFonts.inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), ], @@ -294,8 +282,7 @@ void showDepositResultDialog(BuildContext context, Map data) { const SizedBox(height: AppSpacing.lg), Text( '请向以下地址转账:', - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -318,7 +305,9 @@ void showDepositResultDialog(BuildContext context, Map data) { Expanded( child: Text( '转账完成后请点击"已打款"按钮确认', - style: GoogleFonts.inter(fontSize: 12, color: AppColorScheme.warning), + style: AppTextStyles.bodyMedium(context).copyWith( + color: AppColorScheme.warning, + ), ), ), ], @@ -372,11 +361,12 @@ void showWithdrawDialog(BuildContext context, String? balance) { final contactController = TextEditingController(); final formKey = GlobalKey(); final colorScheme = Theme.of(context).colorScheme; + final isDark = Theme.of(context).brightness == Brightness.dark; showShadDialog( context: context, builder: (ctx) => Dialog( - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), child: GlassPanel( borderRadius: BorderRadius.circular(AppRadius.lg), padding: const EdgeInsets.all(AppSpacing.lg), @@ -401,10 +391,8 @@ void showWithdrawDialog(BuildContext context, String? balance) { const SizedBox(width: AppSpacing.sm), Text( '提现', - style: GoogleFonts.inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), ], @@ -412,8 +400,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { const SizedBox(height: AppSpacing.xs), Text( '安全地将您的资产转移到外部钱包地址', - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -425,10 +412,10 @@ void showWithdrawDialog(BuildContext context, String? balance) { vertical: AppSpacing.sm, ), decoration: BoxDecoration( - color: AppColorScheme.up.withValues(alpha: 0.1), + color: AppColorScheme.getUpBackgroundColor(isDark), borderRadius: BorderRadius.circular(AppRadius.full), border: Border.all( - color: AppColorScheme.up.withValues(alpha: 0.2), + color: AppColorScheme.getUpColor(isDark).withValues(alpha: 0.2), ), ), child: Row( @@ -436,17 +423,15 @@ void showWithdrawDialog(BuildContext context, String? balance) { children: [ Text( '可用余额: ', - style: GoogleFonts.inter( - fontSize: 10, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), Text( '$balance USDT', - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.labelLarge(context).copyWith( fontWeight: FontWeight.bold, - color: AppColorScheme.up, + color: AppColorScheme.getUpColor(isDark), ), ), ], @@ -538,7 +523,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { const SizedBox(width: AppSpacing.xs), Text( 'End-to-End Encrypted Transaction', - style: GoogleFonts.inter( + style: AppTextStyles.bodySmall(context).copyWith( fontSize: 10, color: colorScheme.onSurfaceVariant.withValues(alpha: 0.5), ), @@ -560,7 +545,7 @@ void showResultDialog(BuildContext context, String title, String? message) { showShadDialog( context: context, builder: (ctx) => Dialog( - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), child: GlassPanel( borderRadius: BorderRadius.circular(AppRadius.lg), padding: const EdgeInsets.all(AppSpacing.lg), @@ -569,17 +554,17 @@ void showResultDialog(BuildContext context, String title, String? message) { children: [ Text( title, - style: GoogleFonts.inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), if (message != null) ...[ const SizedBox(height: AppSpacing.sm), Text( message, - style: GoogleFonts.inter(color: colorScheme.onSurfaceVariant), + style: AppTextStyles.bodyLarge(context).copyWith( + color: colorScheme.onSurfaceVariant, + ), textAlign: TextAlign.center, ), ], diff --git a/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart b/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart index 61d2c63..397d1d0 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../providers/asset_provider.dart'; @@ -37,28 +37,22 @@ class BalanceCard extends StatelessWidget { children: [ Text( 'USDT 余额', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w400, ), ), const SizedBox(height: 12), Text( _formatBalance(displayBalance), - style: GoogleFonts.inter( - fontSize: 28, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.numberLarge(context), ), const SizedBox(height: 12), Text( '\u2248 \$${_formatBalance(displayBalance)} USD', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: isDark ? AppColorScheme.darkOnSurfaceMuted : colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w400, ), ), ], diff --git a/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart b/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart index 9598b67..47d3f47 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../data/models/account_models.dart'; @@ -27,18 +27,13 @@ class HoldingsSection extends StatelessWidget { children: [ Text( '交易账户持仓', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), Text( '查看全部 >', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, + fontWeight: FontWeight.w400, ), ), ], @@ -50,8 +45,7 @@ class HoldingsSection extends StatelessWidget { padding: const EdgeInsets.all(AppSpacing.xl), child: Text( '暂无持仓', - style: GoogleFonts.inter( - fontSize: 13, + style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -143,8 +137,7 @@ class HoldingRow extends StatelessWidget { alignment: Alignment.center, child: Text( coinCode.substring(0, 1), - style: GoogleFonts.inter( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.w700, color: accentColor, ), @@ -159,18 +152,13 @@ class HoldingRow extends StatelessWidget { children: [ Text( coinCode, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineMedium(context), ), const SizedBox(height: 2), Text( quantity, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( + fontWeight: FontWeight.w400, color: colorScheme.onSurfaceVariant, ), ), @@ -184,18 +172,14 @@ class HoldingRow extends StatelessWidget { children: [ Text( value, - style: GoogleFonts.inter( + style: AppTextStyles.numberMedium(context).copyWith( fontSize: 13, - fontWeight: FontWeight.w500, - color: colorScheme.onSurface, ), ), const SizedBox(height: 2), Text( profitRate, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.w500, + style: AppTextStyles.numberSmall(context).copyWith( color: profitColor, ), ), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart b/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart index 40f3596..c1bcee8 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../components/glass_panel.dart'; @@ -30,10 +30,8 @@ class RecordsLinkRow extends StatelessWidget { children: [ Text( '充提记录', - style: GoogleFonts.inter( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.w500, - color: colorScheme.onSurface, ), ), Icon( diff --git a/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart b/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart index 963f82f..af1f4a6 100644 --- a/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart +++ b/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; +import '../../../core/theme/app_theme.dart'; +import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; import '../../../providers/asset_provider.dart'; import '../../../data/models/account_models.dart'; @@ -81,17 +82,6 @@ class _TransferPageState extends State { bool get _isDark => Theme.of(context).brightness == Brightness.dark; - /// 一次性获取所有主题感知颜色 - _TransferColors get _colors => _TransferColors(_isDark); - - TextStyle _inter({ - required double fontSize, - required FontWeight fontWeight, - required Color color, - }) { - return GoogleFonts.inter(fontSize: fontSize, fontWeight: fontWeight, color: color); - } - // ============================================ // 业务逻辑 // ============================================ @@ -162,37 +152,37 @@ class _TransferPageState extends State { @override Widget build(BuildContext context) { - final c = _colors; + final colorScheme = Theme.of(context).colorScheme; return Scaffold( - backgroundColor: c.bgSecondary, + backgroundColor: colorScheme.surface, appBar: AppBar( - backgroundColor: c.surfaceCard, + backgroundColor: colorScheme.surfaceContainer, elevation: 0, scrolledUnderElevation: 0, leading: IconButton( - icon: Icon(LucideIcons.arrowLeft, color: c.textPrimary, size: 20), + icon: Icon(LucideIcons.arrowLeft, color: colorScheme.onSurface, size: 20), onPressed: () => Navigator.of(context).pop(), ), title: Text( '账户划转', - style: _inter(fontSize: 16, fontWeight: FontWeight.w600, color: c.textPrimary), + style: AppTextStyles.headlineLarge(context), ), centerTitle: true, ), body: Consumer( builder: (context, provider, _) { return SingleChildScrollView( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 32), + padding: const EdgeInsets.fromLTRB(AppSpacing.md, AppSpacing.md, AppSpacing.md, AppSpacing.xl), child: Column( children: [ - _buildTransferDirectionCard(c), - const SizedBox(height: 24), - _buildAmountSection(c), - const SizedBox(height: 24), - _buildTipsCard(c), - const SizedBox(height: 24), - _buildConfirmButton(c), + _buildTransferDirectionCard(), + const SizedBox(height: AppSpacing.lg), + _buildAmountSection(), + const SizedBox(height: AppSpacing.lg), + _buildTipsCard(), + const SizedBox(height: AppSpacing.lg), + _buildConfirmButton(), ], ), ); @@ -205,14 +195,16 @@ class _TransferPageState extends State { // Transfer direction card // ============================================ - Widget _buildTransferDirectionCard(_TransferColors c) { + Widget _buildTransferDirectionCard() { + final colorScheme = Theme.of(context).colorScheme; + return Container( width: double.infinity, - padding: const EdgeInsets.all(20), + padding: const EdgeInsets.all(AppSpacing.lg), decoration: BoxDecoration( - color: c.surfaceCard, + color: colorScheme.surfaceContainer, borderRadius: BorderRadius.circular(AppRadius.xl), - border: Border.all(color: c.borderDefault.withValues(alpha: 0.6)), + border: Border.all(color: colorScheme.outlineVariant.withValues(alpha: 0.6)), ), child: Column( children: [ @@ -224,7 +216,6 @@ class _TransferPageState extends State { label: '从', accountName: _fromLabel, balance: _fromBalance, - c: c, ), ), @@ -234,13 +225,13 @@ class _TransferPageState extends State { child: Container( width: 36, height: 36, - margin: const EdgeInsets.symmetric(vertical: 16), + margin: const EdgeInsets.symmetric(vertical: AppSpacing.md), decoration: BoxDecoration( - color: c.accentPrimary, + color: colorScheme.secondary, shape: BoxShape.circle, ), child: Center( - child: Icon(LucideIcons.arrowUpDown, size: 18, color: c.textInverse), + child: Icon(LucideIcons.arrowUpDown, size: 18, color: colorScheme.onSecondary), ), ), ), @@ -253,7 +244,6 @@ class _TransferPageState extends State { label: '到', accountName: _toLabel, balance: _toBalance, - c: c, ), ), ], @@ -286,15 +276,16 @@ class _TransferPageState extends State { required String label, required String accountName, required String balance, - required _TransferColors c, }) { + final colorScheme = Theme.of(context).colorScheme; + return SizedBox( width: double.infinity, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(label, style: _inter(fontSize: 11, fontWeight: FontWeight.normal, color: c.textMuted)), - const SizedBox(height: 8), + Text(label, style: AppTextStyles.bodySmall(context)), + const SizedBox(height: AppSpacing.sm), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -303,15 +294,15 @@ class _TransferPageState extends State { Icon( label == '从' ? LucideIcons.wallet : LucideIcons.repeat, size: 18, - color: c.textSecondary, + color: colorScheme.onSurfaceVariant, ), - const SizedBox(width: 10), - Text(accountName, style: _inter(fontSize: 14, fontWeight: FontWeight.w600, color: c.textPrimary)), + const SizedBox(width: AppSpacing.sm + 2), + Text(accountName, style: AppTextStyles.headlineMedium(context)), ], ), Text( '\u00A5 ${_formatBalance(balance)}', - style: _inter(fontSize: 14, fontWeight: FontWeight.w600, color: c.textPrimary), + style: AppTextStyles.headlineMedium(context), ), ], ), @@ -324,7 +315,9 @@ class _TransferPageState extends State { // Amount input section // ============================================ - Widget _buildAmountSection(_TransferColors c) { + Widget _buildAmountSection() { + final colorScheme = Theme.of(context).colorScheme; + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -332,10 +325,13 @@ class _TransferPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('划转金额', style: _inter(fontSize: 14, fontWeight: FontWeight.w500, color: c.textSecondary)), + Text('划转金额', style: AppTextStyles.headlineSmall(context).copyWith(color: colorScheme.onSurfaceVariant)), GestureDetector( onTap: () => _setQuickAmount(1.0), - child: Text('全部划转', style: _inter(fontSize: 12, fontWeight: FontWeight.w600, color: c.goldAccent)), + child: Text('全部划转', style: AppTextStyles.labelLarge(context).copyWith( + color: colorScheme.secondary, + fontWeight: FontWeight.w600, + )), ), ], ), @@ -347,9 +343,9 @@ class _TransferPageState extends State { child: Container( width: double.infinity, height: 56, - padding: const EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md), decoration: BoxDecoration( - color: c.bgTertiary, + color: colorScheme.surfaceContainerHigh, borderRadius: BorderRadius.circular(AppRadius.lg), ), child: Row( @@ -363,10 +359,12 @@ class _TransferPageState extends State { inputFormatters: [ FilteringTextInputFormatter.allow(RegExp(r'^\d*\.?\d{0,8}')), ], - style: _inter(fontSize: 28, fontWeight: FontWeight.w700, color: c.textPrimary), + style: AppTextStyles.numberLarge(context), decoration: InputDecoration( hintText: '0.00', - hintStyle: _inter(fontSize: 28, fontWeight: FontWeight.w700, color: c.textMuted), + hintStyle: AppTextStyles.numberLarge(context).copyWith( + color: AppColorScheme.darkOnSurfaceMuted, + ), border: InputBorder.none, contentPadding: EdgeInsets.zero, isDense: true, @@ -374,8 +372,11 @@ class _TransferPageState extends State { ), ), Padding( - padding: const EdgeInsets.only(left: 8), - child: Text('USDT', style: _inter(fontSize: 14, fontWeight: FontWeight.normal, color: c.textMuted)), + padding: const EdgeInsets.only(left: AppSpacing.sm), + child: Text('USDT', style: AppTextStyles.headlineMedium(context).copyWith( + fontWeight: FontWeight.w400, + color: AppColorScheme.darkOnSurfaceMuted, + )), ), ], ), @@ -390,8 +391,8 @@ class _TransferPageState extends State { final percent = entry.value; final label = '${(percent * 100).toInt()}%'; return Padding( - padding: EdgeInsets.only(left: index > 0 ? 8 : 0), - child: _buildPercentButton(label, percent, c), + padding: EdgeInsets.only(left: index > 0 ? AppSpacing.sm : 0), + child: _buildPercentButton(label, percent), ); }).toList(), ), @@ -399,18 +400,20 @@ class _TransferPageState extends State { ); } - Widget _buildPercentButton(String label, double percent, _TransferColors c) { + Widget _buildPercentButton(String label, double percent) { + final colorScheme = Theme.of(context).colorScheme; + return Expanded( child: GestureDetector( onTap: () => _setQuickAmount(percent), child: Container( height: 36, decoration: BoxDecoration( - color: c.bgTertiary, + color: colorScheme.surfaceContainerHigh, borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Center( - child: Text(label, style: _inter(fontSize: 13, fontWeight: FontWeight.w500, color: c.textSecondary)), + child: Text(label, style: AppTextStyles.headlineSmall(context)), ), ), ), @@ -421,22 +424,24 @@ class _TransferPageState extends State { // Tips card & Confirm button // ============================================ - Widget _buildTipsCard(_TransferColors c) { + Widget _buildTipsCard() { + final upColor = AppColorScheme.getUpColor(_isDark); + return Container( width: double.infinity, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: 12), decoration: BoxDecoration( - color: c.profitGreenBg, + color: AppColorScheme.getUpBackgroundColor(_isDark), borderRadius: BorderRadius.circular(AppRadius.lg), ), child: Row( children: [ - Icon(LucideIcons.info, size: 16, color: c.profitGreen), - const SizedBox(width: 8), + Icon(LucideIcons.info, size: 16, color: upColor), + const SizedBox(width: AppSpacing.sm), Expanded( child: Text( '划转即时到账,无需手续费', - style: _inter(fontSize: 12, fontWeight: FontWeight.normal, color: c.profitGreen), + style: AppTextStyles.bodyMedium(context).copyWith(color: upColor), ), ), ], @@ -444,7 +449,9 @@ class _TransferPageState extends State { ); } - Widget _buildConfirmButton(_TransferColors c) { + Widget _buildConfirmButton() { + final colorScheme = Theme.of(context).colorScheme; + return SizedBox( width: double.infinity, height: 52, @@ -452,7 +459,7 @@ class _TransferPageState extends State { onTap: _isLoading ? null : _doTransfer, child: Container( decoration: BoxDecoration( - color: c.accentPrimary, + color: colorScheme.secondary, borderRadius: BorderRadius.circular(AppRadius.lg), ), child: Center( @@ -462,12 +469,15 @@ class _TransferPageState extends State { height: 20, child: CircularProgressIndicator( strokeWidth: 2, - valueColor: AlwaysStoppedAnimation(c.textInverse), + valueColor: AlwaysStoppedAnimation(colorScheme.onSecondary), ), ) : Text( '确认划转', - style: _inter(fontSize: 16, fontWeight: FontWeight.w700, color: c.textInverse), + style: AppTextStyles.displayMedium(context).copyWith( + color: colorScheme.onSecondary, + fontSize: 16, + ), ), ), ), @@ -485,33 +495,3 @@ class _TransferPageState extends State { return val.toStringAsFixed(2); } } - -/// 主题感知颜色集合,避免在 build() 中重复定义大量局部变量 -class _TransferColors { - final Color bgSecondary; - final Color surfaceCard; - final Color bgTertiary; - final Color borderDefault; - final Color textPrimary; - final Color textSecondary; - final Color textMuted; - final Color textInverse; - final Color accentPrimary; - final Color goldAccent; - final Color profitGreen; - final Color profitGreenBg; - - _TransferColors(bool isDark) - : bgSecondary = isDark ? const Color(0xFF0B1120) : const Color(0xFFF8FAFC), - surfaceCard = isDark ? const Color(0xFF0F172A) : const Color(0xFFFFFFFF), - bgTertiary = isDark ? const Color(0xFF1E293B) : const Color(0xFFF1F5F9), - borderDefault = isDark ? const Color(0xFF334155) : const Color(0xFFE2E8F0), - textPrimary = isDark ? const Color(0xFFF8FAFC) : const Color(0xFF0F172A), - textSecondary = isDark ? const Color(0xFF94A3B8) : const Color(0xFF475569), - textMuted = isDark ? const Color(0xFF64748B) : const Color(0xFF94A3B8), - textInverse = isDark ? const Color(0xFF0F172A) : const Color(0xFFFFFFFF), - accentPrimary = isDark ? const Color(0xFFD4AF37) : const Color(0xFF1F2937), - goldAccent = isDark ? const Color(0xFFD4AF37) : const Color(0xFFF59E0B), - profitGreen = isDark ? const Color(0xFF4ADE80) : const Color(0xFF16A34A), - profitGreenBg = isDark ? const Color(0xFF052E16) : const Color(0xFFF0FDF4); -} diff --git a/flutter_monisuo/lib/ui/pages/auth/login_page.dart b/flutter_monisuo/lib/ui/pages/auth/login_page.dart index 4c695db..6ef52f1 100644 --- a/flutter_monisuo/lib/ui/pages/auth/login_page.dart +++ b/flutter_monisuo/lib/ui/pages/auth/login_page.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/auth_provider.dart'; import '../main/main_page.dart'; import 'register_page.dart'; @@ -26,9 +27,6 @@ class _LoginPageState extends State { static const _inputHeight = 52.0; static const _buttonHeight = 52.0; - /// 设计稿 radius-lg = 14 - static const _designRadiusLg = 14.0; - @override void dispose() { _usernameController.dispose(); @@ -86,18 +84,18 @@ class _LoginPageState extends State { gradient: const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [Color(0xFF1F2937), Color(0xFF374151)], + colors: [AppColorScheme.darkSurfaceContainerHigh, AppColorScheme.darkOutline], ), ), alignment: Alignment.center, child: Text( 'M', - style: TextStyle( + style: AppTextStyles.displayLarge(context).copyWith( fontSize: 32, fontWeight: FontWeight.w800, color: isDark ? AppColorScheme.darkOnSurface - : Colors.white, + : AppColorScheme.darkOnPrimary, ), ), ), @@ -105,9 +103,7 @@ class _LoginPageState extends State { // 品牌名 "MONISUO" Text( 'MONISUO', - style: TextStyle( - fontSize: 28, - fontWeight: FontWeight.w800, + style: AppTextStyles.displayLarge(context).copyWith( letterSpacing: 3, color: isDark ? AppColorScheme.darkOnSurface @@ -119,9 +115,7 @@ class _LoginPageState extends State { // 标语 Text( '虚拟货币模拟交易平台', - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyLarge(context).copyWith( color: isDark ? AppColorScheme.darkOnSurfaceVariant : AppColorScheme.lightOnSurfaceVariant, @@ -174,11 +168,10 @@ class _LoginPageState extends State { decoration: ShadDecoration( border: ShadBorder.all( color: borderColor, - radius: BorderRadius.circular(_designRadiusLg), + radius: AppRadius.radiusLg, ), ), - style: TextStyle( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( color: isDark ? AppColorScheme.darkOnSurface : AppColorScheme.lightOnSurface, @@ -218,11 +211,10 @@ class _LoginPageState extends State { decoration: ShadDecoration( border: ShadBorder.all( color: borderColor, - radius: BorderRadius.circular(_designRadiusLg), + radius: AppRadius.radiusLg, ), ), - style: TextStyle( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( color: isDark ? AppColorScheme.darkOnSurface : AppColorScheme.lightOnSurface, @@ -235,10 +227,10 @@ class _LoginPageState extends State { // 设计稿: accent-primary = light:#1F2937 / dark:#D4AF37 final buttonColor = isDark ? AppColorScheme.darkSecondary - : const Color(0xFF1F2937); + : AppColorScheme.darkSurfaceContainerHigh; final textColor = isDark ? AppColorScheme.darkBackground - : Colors.white; + : AppColorScheme.darkOnPrimary; return Consumer( builder: (context, auth, _) { @@ -250,7 +242,7 @@ class _LoginPageState extends State { foregroundColor: textColor, decoration: ShadDecoration( border: ShadBorder.all( - radius: BorderRadius.circular(_designRadiusLg), + radius: AppRadius.radiusLg, ), ), child: auth.isLoading @@ -263,8 +255,7 @@ class _LoginPageState extends State { ) : Text( '登录', - style: TextStyle( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, color: textColor, ), @@ -283,7 +274,7 @@ class _LoginPageState extends State { // gold-accent: light=#F59E0B / dark=#D4AF37 final goldColor = isDark ? AppColorScheme.darkSecondary - : const Color(0xFFF59E0B); + : AppColorScheme.darkSecondaryFixed; final secondaryTextColor = isDark ? AppColorScheme.darkOnSurfaceVariant : AppColorScheme.lightOnSurfaceVariant; @@ -295,9 +286,7 @@ class _LoginPageState extends State { children: [ Text( '还没有账户?', - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyLarge(context).copyWith( color: secondaryTextColor, ), ), @@ -306,8 +295,7 @@ class _LoginPageState extends State { onTap: _navigateToRegister, child: Text( '立即注册', - style: TextStyle( - fontSize: 13, + style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: goldColor, ), diff --git a/flutter_monisuo/lib/ui/pages/auth/register_page.dart b/flutter_monisuo/lib/ui/pages/auth/register_page.dart index 8ba53d0..55ed9fd 100644 --- a/flutter_monisuo/lib/ui/pages/auth/register_page.dart +++ b/flutter_monisuo/lib/ui/pages/auth/register_page.dart @@ -2,10 +2,10 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:image_picker/image_picker.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/auth_provider.dart'; import '../../components/glass_panel.dart'; import '../../components/neon_glow.dart'; @@ -81,7 +81,7 @@ class _RegisterPageState extends State { return Scaffold( backgroundColor: colorScheme.background, appBar: AppBar( - backgroundColor: Colors.transparent, + backgroundColor: AppColorScheme.darkBackground.withValues(alpha: 0), elevation: 0, leading: IconButton( icon: Icon(LucideIcons.chevronLeft, color: colorScheme.onSurface), @@ -124,7 +124,7 @@ class _RegisterPageState extends State { height: 2, color: _currentStep > 0 ? AppColorScheme.up - : colorScheme.outlineVariant.withOpacity(0.2), + : colorScheme.outlineVariant.withValues(alpha: 0.2), ), ), _buildStepCircle( @@ -150,10 +150,10 @@ class _RegisterPageState extends State { if (isComplete) { circleColor = AppColorScheme.up; - textColor = Colors.white; + textColor = AppColorScheme.darkOnPrimary; } else if (isActive) { circleColor = colorScheme.primary; - textColor = Colors.white; + textColor = AppColorScheme.darkOnPrimary; } else { circleColor = colorScheme.surfaceContainerHigh; textColor = colorScheme.onSurfaceVariant; @@ -173,19 +173,17 @@ class _RegisterPageState extends State { ? Icon(LucideIcons.check, size: 16, color: textColor) : Text( number, - style: TextStyle( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.bold, color: textColor, ), ), ), ), - SizedBox(height: 4), + SizedBox(height: AppSpacing.xs), Text( label, - style: TextStyle( - fontSize: 11, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -204,14 +202,13 @@ class _RegisterPageState extends State { Center( child: Text( '创建账号', - style: GoogleFonts.spaceGrotesk( - fontSize: 18, + style: AppTextStyles.displaySmall(context).copyWith( fontWeight: FontWeight.bold, color: colorScheme.onSurface, ), ), ), - SizedBox(height: 48), + SizedBox(height: AppSpacing.xxl), // 用户名 TextFormField( @@ -228,7 +225,7 @@ class _RegisterPageState extends State { return null; }, ), - SizedBox(height: 16), + SizedBox(height: AppSpacing.md), // 密码 TextFormField( @@ -252,7 +249,7 @@ class _RegisterPageState extends State { return null; }, ), - SizedBox(height: 16), + SizedBox(height: AppSpacing.md), // 确认密码 TextFormField( @@ -276,7 +273,7 @@ class _RegisterPageState extends State { return null; }, ), - SizedBox(height: 16), + SizedBox(height: AppSpacing.md), // 推广码(可选) TextFormField( @@ -287,7 +284,7 @@ class _RegisterPageState extends State { prefixIcon: Icon(Icons.card_giftcard, color: colorScheme.onSurfaceVariant), ), ), - SizedBox(height: 32), + SizedBox(height: AppSpacing.xl), // 下一步按钮 SizedBox( @@ -304,13 +301,13 @@ class _RegisterPageState extends State { showGlow: true, ), ), - SizedBox(height: 16), + SizedBox(height: AppSpacing.md), // 登录链接 Center( child: TextButton( onPressed: () => Navigator.pop(context), - child: const Text('已有账号?立即登录', style: TextStyle(fontSize: 14)), + child: Text('已有账号?立即登录', style: AppTextStyles.headlineMedium(context)), ), ), ], @@ -334,7 +331,7 @@ class _RegisterPageState extends State { Container( padding: EdgeInsets.all(AppSpacing.sm), decoration: BoxDecoration( - color: colorScheme.primary.withOpacity(0.1), + color: colorScheme.primary.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(AppRadius.md), ), child: Icon( @@ -349,17 +346,15 @@ class _RegisterPageState extends State { children: [ Text( '身份验证', - style: GoogleFonts.spaceGrotesk( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, color: colorScheme.onSurface, ), ), - SizedBox(height: 2), + SizedBox(height: AppSpacing.xs), Text( '上传身份证正反面完成注册', - style: TextStyle( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -372,8 +367,7 @@ class _RegisterPageState extends State { // 身份证正面 Text( '身份证正面(人像面)', - style: TextStyle( - fontSize: 13, + style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: colorScheme.onSurface, ), @@ -391,8 +385,7 @@ class _RegisterPageState extends State { // 身份证反面 Text( '身份证反面(国徽面)', - style: TextStyle( - fontSize: 13, + style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: colorScheme.onSurface, ), @@ -431,9 +424,9 @@ class _RegisterPageState extends State { Container( padding: EdgeInsets.all(AppSpacing.md), decoration: BoxDecoration( - color: AppColorScheme.up.withOpacity(0.06), - borderRadius: BorderRadius.circular(AppRadius.lg), - border: Border.all(color: AppColorScheme.up.withOpacity(0.12)), + color: AppColorScheme.up.withValues(alpha: 0.06), + borderRadius: AppRadius.radiusLg, + border: Border.all(color: AppColorScheme.up.withValues(alpha: 0.12)), ), child: Row( children: [ @@ -442,9 +435,8 @@ class _RegisterPageState extends State { Expanded( child: Text( '您的身份信息将被加密存储,仅用于身份验证', - style: TextStyle( - fontSize: 11, - color: AppColorScheme.up.withOpacity(0.8), + style: AppTextStyles.bodySmall(context).copyWith( + color: AppColorScheme.up.withValues(alpha: 0.8), ), ), ), @@ -472,16 +464,16 @@ class _RegisterPageState extends State { height: 140, decoration: BoxDecoration( color: hasImage - ? AppColorScheme.up.withOpacity(0.06) - : colorScheme.surfaceContainerHigh.withOpacity(0.3), - borderRadius: BorderRadius.circular(AppRadius.xl), + ? AppColorScheme.up.withValues(alpha: 0.06) + : colorScheme.surfaceContainerHigh.withValues(alpha: 0.3), + borderRadius: AppRadius.radiusXl, border: Border.all( - color: hasImage ? AppColorScheme.up.withOpacity(0.3) : Colors.transparent, + color: hasImage ? AppColorScheme.up.withValues(alpha: 0.3) : AppColorScheme.darkBackground.withValues(alpha: 0), ), ), child: hasImage ? ClipRRect( - borderRadius: BorderRadius.circular(AppRadius.xl), + borderRadius: AppRadius.radiusXl, child: Stack( fit: StackFit.passthrough, children: [ @@ -499,7 +491,7 @@ class _RegisterPageState extends State { gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [Colors.transparent, Colors.black54], + colors: [AppColorScheme.darkBackground.withValues(alpha: 0), AppColorScheme.darkSurfaceLowest.withValues(alpha: 0.6)], ), borderRadius: BorderRadius.only( bottomLeft: Radius.circular(AppRadius.xl), @@ -511,10 +503,9 @@ class _RegisterPageState extends State { children: [ Text( '$label已选择', - style: TextStyle( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( fontWeight: FontWeight.w600, - color: Colors.white, + color: AppColorScheme.darkOnPrimary, ), ), GestureDetector( @@ -530,12 +521,12 @@ class _RegisterPageState extends State { }); }, child: Container( - padding: EdgeInsets.all(4), + padding: EdgeInsets.all(AppSpacing.xs), decoration: BoxDecoration( - color: Colors.white24, + color: AppColorScheme.darkOnPrimary.withValues(alpha: 0.15), shape: BoxShape.circle, ), - child: Icon(LucideIcons.x, size: 14, color: Colors.white), + child: Icon(LucideIcons.x, size: 14, color: AppColorScheme.darkOnPrimary), ), ), ], @@ -547,7 +538,7 @@ class _RegisterPageState extends State { ) : CustomPaint( painter: _DashedBorderPainter( - color: colorScheme.onSurfaceVariant.withOpacity(0.2), + color: colorScheme.onSurfaceVariant.withValues(alpha: 0.2), borderRadius: AppRadius.xl, ), child: Column( @@ -556,22 +547,20 @@ class _RegisterPageState extends State { Icon( LucideIcons.camera, size: 28, - color: colorScheme.onSurfaceVariant.withOpacity(0.5), + color: colorScheme.onSurfaceVariant.withValues(alpha: 0.5), ), SizedBox(height: AppSpacing.sm), Text( '点击上传$label', - style: TextStyle( - fontSize: 13, - color: colorScheme.onSurfaceVariant.withOpacity(0.6), + style: AppTextStyles.bodyLarge(context).copyWith( + color: colorScheme.onSurfaceVariant.withValues(alpha: 0.6), ), ), - SizedBox(height: 4), + SizedBox(height: AppSpacing.xs), Text( '支持 JPG、PNG 格式', - style: TextStyle( - fontSize: 11, - color: colorScheme.onSurfaceVariant.withOpacity(0.4), + style: AppTextStyles.bodySmall(context).copyWith( + color: colorScheme.onSurfaceVariant.withValues(alpha: 0.4), ), ), ], diff --git a/flutter_monisuo/lib/ui/pages/home/header_bar.dart b/flutter_monisuo/lib/ui/pages/home/header_bar.dart index 5e0da98..5138895 100644 --- a/flutter_monisuo/lib/ui/pages/home/header_bar.dart +++ b/flutter_monisuo/lib/ui/pages/home/header_bar.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; +import '../../../core/theme/app_theme.dart'; +import '../../../core/theme/app_color_scheme.dart'; +import '../../../core/theme/app_spacing.dart'; import '../../../providers/auth_provider.dart'; /// 首页顶栏 - Logo + 搜索/通知/头像 @@ -14,19 +16,17 @@ class HeaderBar extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 8, + horizontal: AppSpacing.md, + vertical: AppSpacing.sm, ), child: Row( children: [ // Logo Text( 'MONISUO', - style: GoogleFonts.inter( + style: AppTextStyles.headlineLarge(context).copyWith( fontSize: 18, - fontWeight: FontWeight.w700, letterSpacing: 1, - color: colorScheme.onSurface, ), ), const Spacer(), @@ -36,14 +36,14 @@ class HeaderBar extends StatelessWidget { colorScheme: colorScheme, onTap: () {}, ), - const SizedBox(width: 8), + const SizedBox(width: AppSpacing.sm), // Bell button _IconButton( icon: LucideIcons.bell, colorScheme: colorScheme, onTap: () {}, ), - const SizedBox(width: 8), + const SizedBox(width: AppSpacing.sm), // Avatar Consumer( builder: (context, auth, _) { @@ -59,10 +59,8 @@ class HeaderBar extends StatelessWidget { alignment: Alignment.center, child: Text( initial, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, + style: AppTextStyles.headlineMedium(context).copyWith( + color: AppColorScheme.darkOnPrimary, ), ), ); @@ -94,7 +92,7 @@ class _IconButton extends StatelessWidget { height: 32, decoration: BoxDecoration( color: colorScheme.surfaceContainerHigh, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(AppRadius.xl), ), alignment: Alignment.center, child: Icon( diff --git a/flutter_monisuo/lib/ui/pages/home/home_page.dart b/flutter_monisuo/lib/ui/pages/home/home_page.dart index 988c231..7dd8c29 100644 --- a/flutter_monisuo/lib/ui/pages/home/home_page.dart +++ b/flutter_monisuo/lib/ui/pages/home/home_page.dart @@ -4,7 +4,7 @@ import 'package:flutter/services.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; import '../../../core/utils/toast_utils.dart'; @@ -170,19 +170,14 @@ class _HomePageState extends State children: [ Text( '充值', - style: GoogleFonts.spaceGrotesk( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), SizedBox(height: AppSpacing.xs), Text( '资产: USDT', - style: TextStyle( - fontSize: 12, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodyMedium(context), ), ], ), @@ -289,10 +284,8 @@ class _HomePageState extends State SizedBox(width: AppSpacing.sm), Text( '充值申请成功', - style: GoogleFonts.spaceGrotesk( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), ], @@ -304,7 +297,7 @@ class _HomePageState extends State SizedBox(height: AppSpacing.lg), Text( '请向以下地址转账:', - style: TextStyle(fontSize: 12, color: colorScheme.onSurfaceVariant), + style: AppTextStyles.bodyMedium(context), ), SizedBox(height: AppSpacing.sm), _WalletAddressCard(address: walletAddress, network: walletNetwork), @@ -323,7 +316,9 @@ class _HomePageState extends State Expanded( child: Text( '转账完成后请点击"已打款"按钮确认', - style: TextStyle(fontSize: 12, color: AppColorScheme.warning), + style: AppTextStyles.bodyMedium(context).copyWith( + color: AppColorScheme.warning, + ), ), ), ], @@ -388,15 +383,13 @@ class _HomePageState extends State mainAxisSize: MainAxisSize.min, children: [ Text(title, - style: GoogleFonts.spaceGrotesk( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, )), if (message != null) ...[ SizedBox(height: AppSpacing.sm), Text(message, - style: TextStyle(color: colorScheme.onSurfaceVariant), + style: AppTextStyles.bodyMedium(context), textAlign: TextAlign.center), ], SizedBox(height: AppSpacing.lg), @@ -535,7 +528,7 @@ class _AssetCardState extends State<_AssetCard> { final colorScheme = Theme.of(context).colorScheme; final isDark = Theme.of(context).brightness == Brightness.dark; final upColor = AppColorScheme.getUpColor(isDark); - final downColor = AppColorScheme.down; + final downColor = AppColorScheme.getDownColor(isDark); final isProfit = _totalProfit >= 0; final todayProfit = _todayProfit; final isTodayProfit = (todayProfit ?? 0) >= 0; @@ -555,10 +548,7 @@ class _AssetCardState extends State<_AssetCard> { children: [ Text( '预估总资产(USDT)', - style: TextStyle( - color: colorScheme.onSurfaceVariant, - fontSize: 12, - ), + style: AppTextStyles.bodyMedium(context), ), GestureDetector( onTap: widget.onDeposit, @@ -576,13 +566,11 @@ class _AssetCardState extends State<_AssetCard> { mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.add, size: 14, color: colorScheme.primary), - SizedBox(width: 4), + SizedBox(width: AppSpacing.xs), Text( '充值', - style: TextStyle( + style: AppTextStyles.labelLarge(context).copyWith( color: colorScheme.primary, - fontSize: 12, - fontWeight: FontWeight.w600, ), ), ], @@ -596,10 +584,8 @@ class _AssetCardState extends State<_AssetCard> { // 总资产金额 Text( displayAsset, - style: GoogleFonts.spaceGrotesk( - fontSize: 22, + style: AppTextStyles.displaySmall(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), SizedBox(height: AppSpacing.md), @@ -651,11 +637,10 @@ class _AssetCardState extends State<_AssetCard> { ? colorScheme.primary : colorScheme.onSurfaceVariant, ), - SizedBox(width: 4), + SizedBox(width: AppSpacing.xs), Text( '盈亏分析', - style: TextStyle( - fontSize: 11, + style: AppTextStyles.labelMedium(context).copyWith( fontWeight: _calendarExpanded ? FontWeight.w600 : FontWeight.w500, color: _calendarExpanded ? colorScheme.primary @@ -739,18 +724,15 @@ class _AssetCardState extends State<_AssetCard> { children: [ Text( '${_currentMonth.year}年${_currentMonth.month}月', - style: GoogleFonts.spaceGrotesk( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), SizedBox(height: 2), if (!_isLoadingCalendar && _profitData != null) Text( '月度盈亏: ${_monthProfit >= 0 ? '+' : ''}${_monthProfit.toStringAsFixed(2)}', - style: TextStyle( - fontSize: 10, + style: AppTextStyles.bodySmall(context).copyWith( fontWeight: FontWeight.w600, color: _monthProfit >= 0 ? upColor : downColor, ), @@ -787,10 +769,9 @@ class _AssetCardState extends State<_AssetCard> { child: Center( child: Text( d, - style: TextStyle( - fontSize: 10, - color: colorScheme.onSurfaceVariant.withOpacity(0.6), + style: AppTextStyles.bodySmall(context).copyWith( fontWeight: FontWeight.w500, + color: colorScheme.onSurfaceVariant.withOpacity(0.6), ), ), ), @@ -866,7 +847,7 @@ class _AssetCardState extends State<_AssetCard> { children: [ Text( '$day', - style: TextStyle( + style: AppTextStyles.bodySmall(context).copyWith( fontSize: 10, fontWeight: isToday ? FontWeight.bold : FontWeight.w400, color: isToday @@ -969,10 +950,8 @@ class _WelfareCard extends StatelessWidget { children: [ Text( '福利中心', - style: GoogleFonts.spaceGrotesk( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), SizedBox(height: AppSpacing.xs), @@ -980,10 +959,7 @@ class _WelfareCard extends StatelessWidget { totalClaimable > 0 ? '您有 $totalClaimable 个奖励待领取' : '首充奖励 + 推广奖励', - style: TextStyle( - fontSize: 12, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodyMedium(context), ), ], ), @@ -1007,25 +983,24 @@ class _WelfareCard extends StatelessWidget { Container( padding: EdgeInsets.symmetric(horizontal: 6, vertical: 2), decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(10), + color: AppColorScheme.darkError, + borderRadius: BorderRadius.circular(AppRadius.md), ), child: Text( '$totalClaimable', - style: TextStyle( - color: Colors.white, + style: AppTextStyles.bodySmall(context).copyWith( fontSize: 10, fontWeight: FontWeight.bold, + color: AppColorScheme.darkOnPrimary, ), ), ), SizedBox(width: totalClaimable > 0 ? 6 : 0), Text( '查看', - style: TextStyle( - color: isDark ? colorScheme.background : Colors.white, - fontSize: 13, + style: AppTextStyles.headlineSmall(context).copyWith( fontWeight: FontWeight.w700, + color: isDark ? colorScheme.background : AppColorScheme.darkOnPrimary, ), ), ], @@ -1055,24 +1030,23 @@ class _HoldingsSection extends StatelessWidget { children: [ Text( '我的持仓', - style: TextStyle( - color: colorScheme.onSurface, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, - fontSize: 16, ), ), TextButton( onPressed: () {}, style: TextButton.styleFrom( foregroundColor: colorScheme.primary, - padding: const EdgeInsets.symmetric(horizontal: 8), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm), ), child: Row( children: [ Text('资产详情', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13)), - const SizedBox(width: 4), + style: AppTextStyles.headlineSmall(context).copyWith( + fontWeight: FontWeight.bold, + )), + const SizedBox(width: AppSpacing.xs), Icon(LucideIcons.chevronRight, size: 16, color: colorScheme.primary), ], @@ -1109,19 +1083,14 @@ class _EmptyHoldings extends StatelessWidget { SizedBox(height: AppSpacing.md), Text( '暂无持仓', - style: TextStyle( - color: colorScheme.onSurface, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.w600, - fontSize: 14, ), ), SizedBox(height: AppSpacing.sm), Text( '快去交易吧~', - style: TextStyle( - color: colorScheme.onSurfaceVariant, - fontSize: 13, - ), + style: AppTextStyles.bodyLarge(context), ), ], ), @@ -1186,7 +1155,7 @@ class _HoldingItem extends StatelessWidget { backgroundColor: colorScheme.primary.withOpacity(0.1), child: Text( holding.coinCode.substring(0, 1), - style: TextStyle( + style: AppTextStyles.headlineMedium(context).copyWith( color: colorScheme.primary, fontWeight: FontWeight.bold, ), @@ -1197,16 +1166,11 @@ class _HoldingItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(holding.coinCode, - style: TextStyle( - color: colorScheme.onSurface, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.bold, - fontSize: 14, )), Text(holding.quantity, - style: TextStyle( - color: colorScheme.onSurfaceVariant, - fontSize: 12, - )), + style: AppTextStyles.bodyMedium(context)), ], ), ], @@ -1215,18 +1179,14 @@ class _HoldingItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, children: [ Text('${holding.currentValue} USDT', - style: TextStyle( - color: colorScheme.onSurface, + style: AppTextStyles.headlineSmall(context).copyWith( fontWeight: FontWeight.w500, - fontSize: 13, )), Text(holding.formattedProfitRate, - style: TextStyle( + style: AppTextStyles.numberSmall(context).copyWith( color: holding.isProfit ? AppColorScheme.getUpColor(isDark) - : AppColorScheme.down, - fontSize: 12, - fontWeight: FontWeight.w500, + : AppColorScheme.getDownColor(isDark), )), ], ), @@ -1252,15 +1212,11 @@ class _InfoRow extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(label, - style: TextStyle( - fontSize: 12, - color: colorScheme.onSurfaceVariant, - )), + style: AppTextStyles.bodyMedium(context)), Text(value, - style: GoogleFonts.spaceGrotesk( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( fontWeight: isBold ? FontWeight.bold : FontWeight.normal, - color: colorScheme.onSurface, + fontFeatures: isBold ? const [FontFeature.tabularFigures()] : null, )), ], ); @@ -1293,10 +1249,8 @@ class _WalletAddressCard extends StatelessWidget { Expanded( child: Text( address, - style: TextStyle( + style: AppTextStyles.bodyMedium(context).copyWith( fontFamily: 'monospace', - fontSize: 12, - color: colorScheme.onSurface, ), ), ), @@ -1320,10 +1274,7 @@ class _WalletAddressCard extends StatelessWidget { SizedBox(height: AppSpacing.sm), Text( '网络: $network', - style: TextStyle( - fontSize: 11, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ), @@ -1380,10 +1331,9 @@ class _ProfitStatCard extends StatelessWidget { SizedBox(width: 3), Text( label, - style: TextStyle( - fontSize: 10, - color: color.withOpacity(0.8), + style: AppTextStyles.bodySmall(context).copyWith( fontWeight: FontWeight.w500, + color: color.withOpacity(0.8), ), ), ], @@ -1393,8 +1343,7 @@ class _ProfitStatCard extends StatelessWidget { hasValue ? '${isProfit ? '+' : ''}${value!.toStringAsFixed(2)}' : '--', - style: GoogleFonts.spaceGrotesk( - fontSize: 14, + style: AppTextStyles.numberMedium(context).copyWith( fontWeight: FontWeight.bold, color: color, ), diff --git a/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart b/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart index 09d059b..f525f34 100644 --- a/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart +++ b/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; @@ -17,29 +17,22 @@ class HotCoinsSection extends StatelessWidget { children: [ // Title row Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '热门币种', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), Text( '更多', - style: GoogleFonts.inter( - fontSize: 12, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodyMedium(context), ), ], ), ), - const SizedBox(height: 12), + const SizedBox(height: AppSpacing.sm + AppSpacing.xs), // Card Container( decoration: BoxDecoration( @@ -125,10 +118,10 @@ class _CoinRow extends StatelessWidget { Widget build(BuildContext context) { final changeColor = isUp ? AppColorScheme.getUpColor(isDark) - : AppColorScheme.down; + : AppColorScheme.getDownColor(isDark); return Padding( - padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 14, horizontal: AppSpacing.md), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -140,31 +133,26 @@ class _CoinRow extends StatelessWidget { backgroundColor: colorScheme.primary.withValues(alpha: 0.1), child: Text( symbol, - style: GoogleFonts.inter( + style: AppTextStyles.bodySmall(context).copyWith( fontSize: 10, fontWeight: FontWeight.w700, color: colorScheme.primary, ), ), ), - const SizedBox(width: 12), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( pair, - style: GoogleFonts.inter( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.bold, - color: colorScheme.onSurface, ), ), Text( fullName, - style: GoogleFonts.inter( - fontSize: 11, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ), @@ -176,17 +164,11 @@ class _CoinRow extends StatelessWidget { children: [ Text( price, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.numberMedium(context), ), Text( change, - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.w500, + style: AppTextStyles.labelMedium(context).copyWith( color: changeColor, ), ), diff --git a/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart b/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart index 58d9beb..847cb90 100644 --- a/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart +++ b/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_spacing.dart'; /// 首页快捷操作栏 - 充值/提现/划转/盈亏/账单 @@ -25,7 +25,7 @@ class QuickActionsRow extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; return Container( - padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 8), + padding: const EdgeInsets.symmetric(vertical: AppSpacing.md, horizontal: AppSpacing.sm), decoration: BoxDecoration( color: colorScheme.surfaceContainer, border: Border.all( @@ -99,7 +99,7 @@ class _ActionItem extends StatelessWidget { height: 40, decoration: BoxDecoration( color: colorScheme.surfaceContainerHigh, - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(AppRadius.md), ), alignment: Alignment.center, child: Icon( @@ -108,14 +108,10 @@ class _ActionItem extends StatelessWidget { color: colorScheme.onSurfaceVariant, ), ), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.xs + 2), Text( label, - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.w500, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.labelMedium(context), ), ], ), diff --git a/flutter_monisuo/lib/ui/pages/main/main_page.dart b/flutter_monisuo/lib/ui/pages/main/main_page.dart index a27c7e7..c797e07 100644 --- a/flutter_monisuo/lib/ui/pages/main/main_page.dart +++ b/flutter_monisuo/lib/ui/pages/main/main_page.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; +import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/asset_provider.dart'; import '../../../providers/market_provider.dart'; import '../home/home_page.dart'; @@ -148,7 +150,7 @@ class _BottomNavBar extends StatelessWidget { borderRadius: BorderRadius.vertical(top: Radius.circular(AppRadius.xxl + AppSpacing.sm)), border: Border( top: BorderSide( - color: colorScheme.outlineVariant.withOpacity(0.15), + color: colorScheme.outlineVariant.withValues(alpha: 0.15), ), ), ), @@ -196,8 +198,8 @@ class _NavItemWidget extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: AppSpacing.sm), decoration: isSelected ? BoxDecoration( - color: colorScheme.primary.withOpacity(0.1), - borderRadius: BorderRadius.circular(AppSpacing.md), + color: colorScheme.primary.withValues(alpha: 0.1), + borderRadius: AppRadius.radiusMd, ) : null, child: Column( @@ -211,9 +213,8 @@ class _NavItemWidget extends StatelessWidget { SizedBox(height: AppSpacing.xs), Text( item.label, - style: TextStyle( + style: AppTextStyles.bodyMedium(context).copyWith( color: color, - fontSize: 12, fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal, ), ), diff --git a/flutter_monisuo/lib/ui/pages/market/market_page.dart b/flutter_monisuo/lib/ui/pages/market/market_page.dart index 8b4b5bf..709430c 100644 --- a/flutter_monisuo/lib/ui/pages/market/market_page.dart +++ b/flutter_monisuo/lib/ui/pages/market/market_page.dart @@ -2,10 +2,9 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; -import '../../../core/theme/app_spacing.dart' show AppRadius; +import '../../../core/theme/app_theme.dart'; import '../../../data/models/coin.dart'; import '../../../providers/market_provider.dart'; import '../../components/glass_panel.dart'; @@ -55,20 +54,21 @@ class _MarketPageState extends State backgroundColor: colorScheme.surfaceContainerHighest, child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), - padding: const EdgeInsets.only(top: 16, left: 16, right: 16, bottom: 32), + padding: const EdgeInsets.only( + top: AppSpacing.md, + left: AppSpacing.md, + right: AppSpacing.md, + bottom: AppSpacing.xl, + ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // 页面标题 "行情" Padding( - padding: const EdgeInsets.only(top: 0, bottom: 8), + padding: const EdgeInsets.only(bottom: AppSpacing.sm), child: Text( '行情', - style: GoogleFonts.inter( - fontSize: 22, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.displaySmall(context), ), ), const SizedBox(height: AppSpacing.md), @@ -103,7 +103,7 @@ class _MarketPageState extends State Expanded(child: _FeaturedCard(coin: btc)) else const Expanded(child: SizedBox.shrink()), - const SizedBox(width: 12), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), if (eth != null) Expanded(child: _FeaturedCard(coin: eth)) else @@ -121,17 +121,11 @@ class _MarketPageState extends State children: [ Text( '全部币种', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), Text( '更多 >', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -157,7 +151,7 @@ class _MarketPageState extends State color: colorScheme.surfaceContainer, borderRadius: BorderRadius.circular(AppRadius.lg), border: Border.all( - color: colorScheme.outlineVariant.withOpacity(0.15), + color: colorScheme.outlineVariant.withValues(alpha: 0.15), width: 1, ), ), @@ -168,9 +162,9 @@ class _MarketPageState extends State separatorBuilder: (_, __) => Divider( height: 1, thickness: 1, - color: colorScheme.outlineVariant.withOpacity(0.5 * 0.15), - indent: 16, - endIndent: 16, + color: colorScheme.outlineVariant.withValues(alpha: 0.5 * 0.15), + indent: AppSpacing.md, + endIndent: AppSpacing.md, ), itemBuilder: (context, index) => _CoinRow(coin: coins[index]), ), @@ -223,7 +217,7 @@ class _FeaturedCard extends StatelessWidget { : AppColorScheme.getDownBackgroundColor(isDark); return GlassPanel( - padding: const EdgeInsets.all(16), + padding: const EdgeInsets.all(AppSpacing.md), height: 130, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -235,23 +229,17 @@ class _FeaturedCard extends StatelessWidget { children: [ Text( '${coin.code}/USDT', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineMedium(context), ), Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.xs + 2, vertical: 2), decoration: BoxDecoration( color: changeBgColor, - borderRadius: BorderRadius.circular(4), + borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Text( coin.formattedChange, - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.w600, + style: AppTextStyles.labelSmall(context).copyWith( color: changeColor, ), ), @@ -261,18 +249,12 @@ class _FeaturedCard extends StatelessWidget { // 第二行:价格 Text( '\$${_formatFeaturedPrice(coin)}', - style: GoogleFonts.inter( - fontSize: 24, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.displayMedium(context), ), // 第三行:币种全名 Text( coin.name, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -338,7 +320,7 @@ class _MiniBarChart extends StatelessWidget { height: h, decoration: BoxDecoration( color: barColor, - borderRadius: BorderRadius.circular(2), + borderRadius: BorderRadius.circular(AppRadius.xs), ), ), ), @@ -376,12 +358,12 @@ class _CoinRow extends StatelessWidget { onTap: () => _navigateToTrade(context), behavior: HitTestBehavior.opaque, child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: 14), child: Row( children: [ // 头像:圆形字母头像 _CoinAvatar(letter: coin.displayIcon, code: coin.code), - const SizedBox(width: 10), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), // 币种信息:交易对 + 全名 Expanded( child: Column( @@ -390,20 +372,12 @@ class _CoinRow extends StatelessWidget { children: [ Text( '${coin.code}/USDT', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.numberMedium(context), ), const SizedBox(height: 2), Text( coin.name, - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.normal, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ), @@ -415,24 +389,18 @@ class _CoinRow extends StatelessWidget { children: [ Text( '\$${coin.formattedPrice}', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.numberMedium(context), ), const SizedBox(height: 2), Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.xs + 2, vertical: 2), decoration: BoxDecoration( color: changeBgColor, - borderRadius: BorderRadius.circular(4), + borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Text( coin.formattedChange, - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.w500, + style: AppTextStyles.labelMedium(context).copyWith( color: changeColor, ), ), @@ -464,7 +432,7 @@ class _CoinAvatar extends StatelessWidget { final isDark = Theme.of(context).brightness == Brightness.dark; // 从 .pen 设计中的 accent-light 和 accent-primary - final bgColor = colorScheme.primary.withOpacity(isDark ? 0.15 : 0.1); + final bgColor = colorScheme.primary.withValues(alpha: isDark ? 0.15 : 0.1); final textColor = colorScheme.primary; return Container( @@ -477,8 +445,7 @@ class _CoinAvatar extends StatelessWidget { child: Center( child: Text( _getLetter(), - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.labelLarge(context).copyWith( fontWeight: FontWeight.w700, color: textColor, ), @@ -518,7 +485,7 @@ class _EmptyState extends StatelessWidget { child: Column( children: [ Icon(icon, size: 48, color: colorScheme.onSurfaceVariant), - const SizedBox(height: 12), + const SizedBox(height: AppSpacing.sm + AppSpacing.xs), Text( message, style: TextStyle(color: colorScheme.onSurfaceVariant), diff --git a/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart b/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart index b6b3e24..f4cee75 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; import 'avatar_circle.dart'; /// 用户资料卡片 - 头像 + 用户名 + 徽章 + chevron @@ -42,11 +42,7 @@ class ProfileCard extends StatelessWidget { children: [ Text( user?.username ?? '未登录', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 4), Text( diff --git a/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart b/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart index 373c405..822b5e0 100644 --- a/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart @@ -3,10 +3,10 @@ import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:image_picker/image_picker.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/auth_provider.dart'; import '../../components/glass_panel.dart'; import '../../components/neon_glow.dart'; @@ -61,14 +61,11 @@ class _KycPageState extends State { return Scaffold( backgroundColor: colorScheme.background, appBar: AppBar( - backgroundColor: Colors.transparent, + backgroundColor: colorScheme.surface.withOpacity(0.0), elevation: 0, title: Text( '实名认证', - style: GoogleFonts.spaceGrotesk( - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), leading: IconButton( icon: Icon(LucideIcons.chevronLeft, color: colorScheme.onSurface), @@ -111,19 +108,12 @@ class _KycPageState extends State { children: [ Text( '身份验证', - style: GoogleFonts.spaceGrotesk( - fontSize: 16, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), SizedBox(height: 2), Text( '上传身份证正反面完成实名认证', - style: TextStyle( - fontSize: 12, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodyMedium(context), ), ], ), @@ -134,11 +124,7 @@ class _KycPageState extends State { // 身份证正面上传区 Text( '身份证正面(人像面)', - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineSmall(context), ), SizedBox(height: AppSpacing.sm), _buildUploadZone( @@ -153,11 +139,7 @@ class _KycPageState extends State { // 身份证反面上传区 Text( '身份证反面(国徽面)', - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineSmall(context), ), SizedBox(height: AppSpacing.sm), _buildUploadZone( @@ -206,8 +188,7 @@ class _KycPageState extends State { Expanded( child: Text( '您的身份信息将被加密存储,仅用于身份验证', - style: TextStyle( - fontSize: 11, + style: AppTextStyles.bodySmall(context).copyWith( color: AppColorScheme.up.withOpacity(0.8), ), ), @@ -266,10 +247,10 @@ class _KycPageState extends State { if (isDone || isComplete) { circleColor = AppColorScheme.up; - textColor = Colors.white; + textColor = colorScheme.onPrimary; } else if (isActive) { circleColor = colorScheme.primary; - textColor = Colors.white; + textColor = colorScheme.onPrimary; } else { circleColor = colorScheme.surfaceContainerHigh; textColor = colorScheme.onSurfaceVariant; @@ -289,9 +270,7 @@ class _KycPageState extends State { ? Icon(LucideIcons.check, size: 16, color: textColor) : Text( number, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, + style: AppTextStyles.headlineMedium(context).copyWith( color: textColor, ), ), @@ -300,10 +279,7 @@ class _KycPageState extends State { SizedBox(height: 4), Text( label, - style: TextStyle( - fontSize: 11, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ); @@ -332,7 +308,7 @@ class _KycPageState extends State { border: Border.all( color: hasImage ? AppColorScheme.up.withOpacity(0.3) - : Colors.transparent, + : colorScheme.surface.withOpacity(0.0), ), ), child: hasImage @@ -359,8 +335,8 @@ class _KycPageState extends State { begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ - Colors.transparent, - Colors.black54, + const Color(0x00000000), + const Color(0x8A000000), ], ), borderRadius: BorderRadius.only( @@ -373,10 +349,8 @@ class _KycPageState extends State { children: [ Text( '$label已选择', - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: Colors.white, + style: AppTextStyles.labelLarge(context).copyWith( + color: colorScheme.onPrimary, ), ), GestureDetector( @@ -394,13 +368,13 @@ class _KycPageState extends State { child: Container( padding: EdgeInsets.all(4), decoration: BoxDecoration( - color: Colors.white24, + color: colorScheme.onSurface.withOpacity(0.24), shape: BoxShape.circle, ), child: Icon( LucideIcons.x, size: 14, - color: Colors.white, + color: colorScheme.onSurface, ), ), ), @@ -427,16 +401,14 @@ class _KycPageState extends State { SizedBox(height: AppSpacing.sm), Text( '点击上传$label', - style: TextStyle( - fontSize: 13, + style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant.withOpacity(0.6), ), ), SizedBox(height: 4), Text( '支持 JPG、PNG 格式', - style: TextStyle( - fontSize: 11, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant.withOpacity(0.4), ), ), diff --git a/flutter_monisuo/lib/ui/pages/mine/mine_page.dart b/flutter_monisuo/lib/ui/pages/mine/mine_page.dart index 582b9ec..e04b796 100644 --- a/flutter_monisuo/lib/ui/pages/mine/mine_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/mine_page.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/auth_provider.dart'; import '../auth/login_page.dart'; import 'components/about_dialog_helpers.dart'; @@ -57,9 +57,7 @@ class _MinePageState extends State SizedBox(height: AppSpacing.md), Text( 'System Build v1.0.0', - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant.withOpacity(0.5), ), ), diff --git a/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart b/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart index 84d4caf..9ab247f 100644 --- a/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/utils/toast_utils.dart'; import '../../../core/event/app_event_bus.dart'; import '../../../data/services/bonus_service.dart'; @@ -63,35 +63,19 @@ class _WelfareCenterPageState extends State { /// 文字静默色 ($text-muted) Color get _textMuted => - _isDark ? const Color(0xFF64748B) : const Color(0xFF94A3B8); + _isDark ? AppColorScheme.darkOnSurfaceMuted : AppColorScheme.lightOnSurfaceMuted; /// 第三级背景色 ($bg-tertiary) Color get _bgTertiary => - _isDark ? AppColorScheme.darkSurfaceContainerHigh : const Color(0xFFF1F5F9); + _isDark ? AppColorScheme.darkSurfaceContainerHigh : AppColorScheme.lightSurfaceContainer; /// 卡片表面色 ($surface-card) Color get _surfaceCard => - _isDark ? AppColorScheme.darkSurfaceContainer : Colors.white; + _isDark ? AppColorScheme.darkSurfaceContainer : AppColorScheme.lightSurfaceLowest; /// 反色文字 ($text-inverse) Color get _textInverse => - _isDark ? const Color(0xFF0F172A) : Colors.white; - - // ============================================ - // 文本样式辅助 - // ============================================ - - TextStyle _inter({ - required double fontSize, - required FontWeight fontWeight, - required Color color, - }) { - return GoogleFonts.inter( - fontSize: fontSize, - fontWeight: fontWeight, - color: color, - ); - } + _isDark ? AppColorScheme.darkInverseSurface : AppColorScheme.lightSurfaceLowest; // ============================================ // 容器样式辅助 @@ -138,7 +122,7 @@ class _WelfareCenterPageState extends State { ), child: Text( text, - style: _inter(fontSize: 11, fontWeight: FontWeight.w600, color: textColor), + style: AppTextStyles.labelSmall(context).copyWith(color: textColor), ), ); } @@ -169,7 +153,10 @@ class _WelfareCenterPageState extends State { ), child: Text( text, - style: _inter(fontSize: 14, fontWeight: FontWeight.w700, color: foregroundColor), + style: AppTextStyles.headlineMedium(context).copyWith( + fontWeight: FontWeight.w700, + color: foregroundColor, + ), ), ), ); @@ -182,22 +169,18 @@ class _WelfareCenterPageState extends State { return Scaffold( backgroundColor: _isDark ? AppColorScheme.darkBackground - : const Color(0xFFF8FAFC), + : AppColorScheme.lightBackground, appBar: AppBar( backgroundColor: _isDark ? AppColorScheme.darkBackground - : Colors.white, + : AppColorScheme.lightSurfaceLowest, elevation: 0, scrolledUnderElevation: 0, centerTitle: false, titleSpacing: 0, title: Text( '福利中心', - style: _inter( - fontSize: 17, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), leading: IconButton( icon: Icon(LucideIcons.arrowLeft, color: colorScheme.onSurface, size: 24), @@ -256,10 +239,8 @@ class _WelfareCenterPageState extends State { const SizedBox(width: 10), Text( '我的邀请码', - style: _inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), ], @@ -267,11 +248,11 @@ class _WelfareCenterPageState extends State { const SizedBox(height: 16), Text( referralCode.isEmpty ? '暂无邀请码' : referralCode, - style: _inter( - fontSize: 24, + style: AppTextStyles.displayMedium(context).copyWith( fontWeight: FontWeight.w800, color: _goldAccent, - ).copyWith(letterSpacing: 2), + letterSpacing: 2, + ), ), const SizedBox(height: 16), SizedBox( @@ -295,7 +276,7 @@ class _WelfareCenterPageState extends State { ), child: Text( '复制邀请码', - style: _inter(fontSize: 14, fontWeight: FontWeight.w600, color: _textInverse), + style: AppTextStyles.headlineMedium(context).copyWith(color: _textInverse), ), ), ), @@ -355,10 +336,8 @@ class _WelfareCenterPageState extends State { children: [ Text( '新人福利', - style: _inter( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, - color: colorScheme.onSurface, ), ), if (showAvailableBadge) @@ -368,8 +347,7 @@ class _WelfareCenterPageState extends State { const SizedBox(height: 12), Text( '+100 USDT', - style: _inter( - fontSize: 28, + style: AppTextStyles.displayLarge(context).copyWith( fontWeight: FontWeight.w800, color: claimed ? colorScheme.onSurfaceVariant : _profitGreen, ), @@ -377,9 +355,7 @@ class _WelfareCenterPageState extends State { const SizedBox(height: 8), Text( description, - style: _inter( - fontSize: 13, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -387,7 +363,7 @@ class _WelfareCenterPageState extends State { _fullWidthButton( text: buttonText, backgroundColor: _profitGreen, - foregroundColor: Colors.white, + foregroundColor: colorScheme.onPrimary, onPressed: canClaim ? () => _claimNewUserBonus() : null, ), ], @@ -410,18 +386,12 @@ class _WelfareCenterPageState extends State { // Section Header Text( '推广奖励', - style: _inter( - fontSize: 16, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 4), Text( '每邀请一位好友充值达标,奖励100 USDT', - style: _inter( - fontSize: 11, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodySmall(context).copyWith( color: _textMuted, ), ), @@ -454,9 +424,7 @@ class _WelfareCenterPageState extends State { const SizedBox(height: 8), Text( '暂无推广用户', - style: _inter( - fontSize: 13, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -505,12 +473,12 @@ class _WelfareCenterPageState extends State { const SizedBox(width: 10), Text( username, - style: _inter(fontSize: 13, fontWeight: FontWeight.w500, color: colorScheme.onSurface), + style: AppTextStyles.headlineSmall(context), ), const SizedBox(width: 10), Text( '充值: \u00A5$totalDeposit', - style: _inter(fontSize: 11, fontWeight: FontWeight.normal, color: colorScheme.onSurfaceVariant), + style: AppTextStyles.bodySmall(context), ), ], ), @@ -557,9 +525,7 @@ class _WelfareCenterPageState extends State { child: Center( child: Text( username.isNotEmpty ? username[0].toUpperCase() : '?', - style: _inter( - fontSize: 13, - fontWeight: FontWeight.w500, + style: AppTextStyles.headlineSmall(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -612,7 +578,7 @@ class _WelfareCenterPageState extends State { } return Text( '待达标', - style: _inter(fontSize: 12, fontWeight: FontWeight.w500, color: _textMuted), + style: AppTextStyles.labelLarge(context).copyWith(color: _textMuted), ); } @@ -635,11 +601,7 @@ class _WelfareCenterPageState extends State { children: [ Text( '奖励规则', - style: _inter( - fontSize: 13, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineSmall(context), ), const SizedBox(height: 8), _buildRuleItem('新用户注册完成实名认证奖励 100 USDT'), @@ -658,9 +620,7 @@ class _WelfareCenterPageState extends State { padding: const EdgeInsets.symmetric(vertical: 3), child: Text( '\u2022 $text', - style: _inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: ruleTextColor, ), ), diff --git a/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart b/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart index aeac947..f7f45b7 100644 --- a/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart +++ b/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; +import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/storage/local_storage.dart'; /// 引导页数据模型 @@ -39,25 +41,25 @@ class _OnboardingPageState extends State { title: '实时行情', description: '全球市场行情实时更新,把握每一个投资机会', imagePath: 'assets/images/onboarding_1.png', // 替换为你的图片 - gradientColors: [Color(0xFF6366F1), Color(0xFF8B5CF6)], + gradientColors: [AppColorScheme.darkPrimary, AppColorScheme.darkPrimaryContainer], ), _OnboardingItem( title: '模拟交易', description: '零风险体验真实交易,学习投资策略', imagePath: 'assets/images/onboarding_2.png', // 替换为你的图片 - gradientColors: [Color(0xFF10B981), Color(0xFF059669)], + gradientColors: [AppColorScheme.darkTertiary, AppColorScheme.darkTertiaryContainer], ), _OnboardingItem( title: '资产管理', description: '清晰的资产概览,轻松管理你的投资组合', imagePath: 'assets/images/onboarding_3.png', // 替换为你的图片 - gradientColors: [Color(0xFFF59E0B), Color(0xFFD97706)], + gradientColors: [AppColorScheme.darkSecondary, AppColorScheme.darkSecondaryFixed], ), _OnboardingItem( title: '安全可靠', description: '数据加密存储,保护你的隐私安全', imagePath: 'assets/images/onboarding_4.png', // 替换为你的图片 - gradientColors: [Color(0xFFEC4899), Color(0xFFBE185D)], + gradientColors: [AppColorScheme.darkPrimaryFixed, AppColorScheme.darkPrimaryFixedDim], ), ]; @@ -110,9 +112,8 @@ class _OnboardingPageState extends State { onPressed: _skip, child: Text( '跳过', - style: TextStyle( + style: AppTextStyles.headlineMedium(context).copyWith( color: colorScheme.onSurfaceVariant, - fontSize: 14, ), ), ), @@ -169,8 +170,7 @@ class _OnboardingPageState extends State { ), child: Text( _currentPage == _items.length - 1 ? '开始使用' : '下一步', - style: const TextStyle( - fontSize: 16, + style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w600, ), ), @@ -225,7 +225,7 @@ class _OnboardingPageState extends State { return Icon( item.icon ?? LucideIcons.image, size: 72, - color: Colors.white, + color: AppColorScheme.darkOnPrimary, ); }, ), @@ -233,7 +233,7 @@ class _OnboardingPageState extends State { : Icon( item.icon ?? LucideIcons.star, size: 72, - color: Colors.white, + color: AppColorScheme.darkOnPrimary, ), ), ), @@ -241,8 +241,7 @@ class _OnboardingPageState extends State { // 标题 Text( item.title, - style: TextStyle( - fontSize: 18, + style: AppTextStyles.displaySmall(context).copyWith( fontWeight: FontWeight.bold, color: colorScheme.onSurface, letterSpacing: -0.5, @@ -253,8 +252,7 @@ class _OnboardingPageState extends State { Text( item.description, textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14, + style: AppTextStyles.headlineMedium(context).copyWith( color: colorScheme.onSurfaceVariant, height: 1.6, ), @@ -275,7 +273,7 @@ class _OnboardingPageState extends State { height: 8, decoration: BoxDecoration( color: isActive ? colorScheme.primary : colorScheme.outlineVariant, - borderRadius: BorderRadius.circular(4), + borderRadius: BorderRadius.circular(AppRadius.sm), ), ); } diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart b/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart index 723a718..939b42b 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart @@ -3,6 +3,7 @@ import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; import '../../../core/theme/app_spacing.dart'; import '../../../core/theme/app_color_scheme.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../data/models/order_models.dart'; import '../../../providers/asset_provider.dart'; @@ -97,20 +98,20 @@ class _FundOrderCard extends StatelessWidget { children: [ Text( '${isDeposit ? '+' : '-'}${order.amount} USDT', - style: theme.textTheme.large.copyWith( + style: AppTextStyles.headlineMedium(context).copyWith( color: statusColor, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w700, ), ), Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm - AppSpacing.xs, vertical: AppSpacing.xs / 2), decoration: BoxDecoration( - color: statusColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(12), + color: statusColor.withValues(alpha: 0.1), + borderRadius: AppRadius.radiusMd, ), child: Text( _getStatusText(order.status, isDeposit), - style: theme.textTheme.small.copyWith(color: statusColor), + style: AppTextStyles.labelMedium(context).copyWith(color: statusColor), ), ), ], @@ -119,32 +120,32 @@ class _FundOrderCard extends StatelessWidget { if (!isDeposit && order.fee != null) ...[ Row( children: [ - Text('手续费(10%): ', style: theme.textTheme.muted), - Text('-${order.fee} USDT', style: theme.textTheme.small), + Text('手续费(10%): ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('-${order.fee} USDT', style: AppTextStyles.bodyMedium(context)), ], ), SizedBox(height: AppSpacing.xs), Row( children: [ - Text('应付款: ', style: theme.textTheme.muted), - Text('${order.receivableAmount ?? "0"} USDT', style: theme.textTheme.small.copyWith(fontWeight: FontWeight.bold)), + Text('应付款: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('${order.receivableAmount ?? "0"} USDT', style: AppTextStyles.bodyMedium(context).copyWith(fontWeight: FontWeight.w700)), ], ), SizedBox(height: AppSpacing.sm), ], Row( children: [ - Text('订单号: ', style: theme.textTheme.muted), - Text(order.orderNo, style: theme.textTheme.small), + Text('订单号: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text(order.orderNo, style: AppTextStyles.bodyMedium(context)), ], ), SizedBox(height: AppSpacing.xs), Row( children: [ - Text('创建时间: ', style: theme.textTheme.muted), + Text('创建时间: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text( order.createTime?.toString() ?? '无', - style: theme.textTheme.small, + style: AppTextStyles.bodyMedium(context), ), ], ), @@ -152,11 +153,11 @@ class _FundOrderCard extends StatelessWidget { SizedBox(height: AppSpacing.xs), Row( children: [ - Text('驳回原因: ', style: theme.textTheme.muted), + Text('驳回原因: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Expanded( child: Text( order.rejectReason!, - style: theme.textTheme.small.copyWith(color: AppColorScheme.error), + style: AppTextStyles.bodyMedium(context).copyWith(color: AppColorScheme.error), ), ), ], @@ -192,7 +193,7 @@ class _FundOrderCard extends StatelessWidget { if (context.mounted) { if (response.success) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: const Text('已确认打款,请等待审核')), + const SnackBar(content: Text('已确认打款,请等待审核')), ); context.read().loadFundOrders(); } else { @@ -208,7 +209,7 @@ class _FundOrderCard extends StatelessWidget { if (context.mounted) { if (response.success) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: const Text('订单已取消')), + const SnackBar(content: Text('订单已取消')), ); context.read().loadFundOrders(); } else { diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart b/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart index 381f511..3b57c13 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; +import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/asset_provider.dart'; import '../../../data/models/order_models.dart'; import 'fund_order_card.dart'; @@ -86,34 +88,36 @@ class _FundOrderCardContent extends StatelessWidget { const _FundOrderCardContent({required this.order}); + bool get _isDark => true; // 默认深色 + Color _getStatusColor(int status, bool isDeposit) { if (isDeposit) { switch (status) { case 1: - return const Color(0xFFFF9800); + return AppColorScheme.warning; case 2: - return const Color(0xFF2196F3); + return AppColorScheme.info; case 3: - return const Color(0xFFafffd1); + return AppColorScheme.success; case 4: - return const Color(0xFFff716c); + return AppColorScheme.error; case 5: - return const Color(0xFFa9abb3); + return AppColorScheme.muted; default: - return const Color(0xFFa9abb3); + return AppColorScheme.muted; } } else { switch (status) { case 1: - return const Color(0xFFFF9800); + return AppColorScheme.warning; case 2: - return const Color(0xFFafffd1); + return AppColorScheme.success; case 3: - return const Color(0xFFff716c); + return AppColorScheme.error; case 4: - return const Color(0xFFa9abb3); + return AppColorScheme.muted; default: - return const Color(0xFFa9abb3); + return AppColorScheme.muted; } } } @@ -155,6 +159,8 @@ class _FundOrderCardContent extends StatelessWidget { final theme = ShadTheme.of(context); final isDeposit = order.type == 1; final statusColor = _getStatusColor(order.status, isDeposit); + final isDark = Theme.of(context).brightness == Brightness.dark; + final onPrimaryColor = isDark ? AppColorScheme.darkOnSurface : AppColorScheme.lightOnSurface; return ShadCard( padding: AppSpacing.cardPadding, @@ -166,20 +172,20 @@ class _FundOrderCardContent extends StatelessWidget { children: [ Text( '${isDeposit ? '+' : '-'}${order.amount} USDT', - style: theme.textTheme.large.copyWith( + style: AppTextStyles.headlineMedium(context).copyWith( color: statusColor, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w700, ), ), Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm - AppSpacing.xs, vertical: AppSpacing.xs / 2), decoration: BoxDecoration( color: statusColor.withValues(alpha: 0.1), - borderRadius: BorderRadius.circular(12), + borderRadius: AppRadius.radiusMd, ), child: Text( _getStatusText(order.status, isDeposit), - style: theme.textTheme.small.copyWith(color: statusColor), + style: AppTextStyles.labelMedium(context).copyWith(color: statusColor), ), ), ], @@ -187,17 +193,17 @@ class _FundOrderCardContent extends StatelessWidget { SizedBox(height: AppSpacing.sm), Row( children: [ - Text('订单号: ', style: theme.textTheme.muted), - Text(order.orderNo, style: theme.textTheme.small), + Text('订单号: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text(order.orderNo, style: AppTextStyles.bodyMedium(context)), ], ), SizedBox(height: AppSpacing.xs), Row( children: [ - Text('创建时间: ', style: theme.textTheme.muted), + Text('创建时间: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text( order.createTime?.toString() ?? '无', - style: theme.textTheme.small, + style: AppTextStyles.bodyMedium(context), ), ], ), @@ -206,4 +212,3 @@ class _FundOrderCardContent extends StatelessWidget { ); } } - diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart b/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart index ae605fb..53e153b 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart @@ -1,12 +1,12 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:provider/provider.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../core/utils/toast_utils.dart'; import '../../../core/event/app_event_bus.dart'; import '../../../providers/asset_provider.dart'; @@ -60,14 +60,6 @@ class _FundOrdersPageState extends State { /// 一次性获取所有主题感知颜色 _OrderColors get _colors => _OrderColors(_isDark); - TextStyle _inter({ - required double fontSize, - required FontWeight fontWeight, - required Color color, - }) { - return GoogleFonts.inter(fontSize: fontSize, fontWeight: fontWeight, color: color); - } - // ============================================ // 构建 UI // ============================================ @@ -83,7 +75,7 @@ class _FundOrdersPageState extends State { icon: const Icon(LucideIcons.arrowLeft, size: 20), onPressed: () => Navigator.of(context).pop(), ), - title: Text('充提记录', style: _inter(fontSize: 16, fontWeight: FontWeight.w600, color: c.primaryText)), + title: Text('充提记录', style: AppTextStyles.headlineLarge(context).copyWith(color: c.primaryText)), backgroundColor: c.background, elevation: 0, scrolledUnderElevation: 0, @@ -108,7 +100,7 @@ class _FundOrdersPageState extends State { padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md), child: Container( height: 40, - padding: const EdgeInsets.all(3), + padding: const EdgeInsets.all(AppSpacing.xs), decoration: BoxDecoration( color: c.tabBg, borderRadius: AppRadius.radiusMd, @@ -138,17 +130,15 @@ class _FundOrdersPageState extends State { }, child: Container( decoration: BoxDecoration( - color: isActive ? c.activeTabBg : Colors.transparent, + color: isActive ? c.activeTabBg : AppColorScheme.darkSurfaceLowest.withValues(alpha: 0), borderRadius: AppRadius.radiusSm, ), child: Center( child: Text( label, - style: _inter( - fontSize: 14, - fontWeight: isActive ? FontWeight.w600 : FontWeight.w500, - color: isActive ? c.activeTabText : c.inactiveTabText, - ), + style: isActive + ? AppTextStyles.headlineMedium(context).copyWith(color: c.activeTabText) + : AppTextStyles.headlineSmall(context).copyWith(color: c.inactiveTabText), ), ), ), @@ -177,8 +167,8 @@ class _FundOrdersPageState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(LucideIcons.inbox, size: 64, color: c.mutedText), - const SizedBox(height: 16), - Text('暂无订单记录', style: _inter(fontSize: 14, fontWeight: FontWeight.normal, color: c.secondaryText)), + const SizedBox(height: AppSpacing.md), + Text('暂无订单记录', style: AppTextStyles.headlineMedium(context).copyWith(color: c.secondaryText)), ], ), ); @@ -187,9 +177,9 @@ class _FundOrdersPageState extends State { return RefreshIndicator( onRefresh: () async => _loadData(), child: ListView.separated( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 32), + padding: const EdgeInsets.fromLTRB(AppSpacing.md, AppSpacing.md, AppSpacing.md, AppSpacing.xl), itemCount: orders.length, - separatorBuilder: (_, __) => const SizedBox(height: 12), + separatorBuilder: (_, __) => const SizedBox(height: AppSpacing.sm + AppSpacing.xs), itemBuilder: (context, index) { return _buildOrderCard(orders[index]); }, @@ -206,7 +196,7 @@ class _FundOrdersPageState extends State { final c = _colors; return Container( - padding: const EdgeInsets.all(16), + padding: AppSpacing.cardPadding, decoration: BoxDecoration( color: c.cardBg, borderRadius: AppRadius.radiusLg, @@ -216,20 +206,20 @@ class _FundOrdersPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildCardHeader(order), - const SizedBox(height: 12), + const SizedBox(height: AppSpacing.sm + AppSpacing.xs), _buildAmountRow(order), - const SizedBox(height: 12), + const SizedBox(height: AppSpacing.sm + AppSpacing.xs), _buildDetailRows(order), if (order.rejectReason != null) ...[ - const SizedBox(height: 8), + const SizedBox(height: AppSpacing.sm), _buildRejectionReason(order), ], if (order.receivableAmount != null && !order.isDeposit) ...[ - const SizedBox(height: 8), + const SizedBox(height: AppSpacing.sm), _buildPayableRow(order), ], if (order.canCancel || order.canConfirmPay) ...[ - const SizedBox(height: 12), + const SizedBox(height: AppSpacing.sm + AppSpacing.xs), _buildActions(order), ], ], @@ -262,8 +252,6 @@ class _FundOrdersPageState extends State { final downColor = AppColorScheme.getDownColor(_isDark); final upBg = AppColorScheme.getUpBackgroundColor(_isDark, opacity: 0.12); final downBg = AppColorScheme.getDownBackgroundColor(_isDark, opacity: 0.12); - const amberColor = Color(0xFFD97706); - const amberBg = Color(0xFFFEF3C7); Color bgColor; Color textColor; @@ -272,8 +260,8 @@ class _FundOrdersPageState extends State { switch (order.status) { case 1: // 待付款 case 2: // 待确认 - bgColor = amberBg; - textColor = amberColor; + bgColor = AppColorScheme.warning.withValues(alpha: 0.12); + textColor = AppColorScheme.warning; break; case 3: // 已完成 bgColor = upBg; @@ -287,8 +275,8 @@ class _FundOrdersPageState extends State { switch (order.status) { case 1: // 待审批 case 5: // 待财务审核 - bgColor = amberBg; - textColor = amberColor; + bgColor = AppColorScheme.warning.withValues(alpha: 0.12); + textColor = AppColorScheme.warning; break; case 2: // 已完成 bgColor = upBg; @@ -305,12 +293,12 @@ class _FundOrdersPageState extends State { Widget _buildBadge(String text, Color textColor, Color bgColor) { return Container( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm, vertical: AppSpacing.xs), decoration: BoxDecoration( color: bgColor, - borderRadius: BorderRadius.circular(4), + borderRadius: AppRadius.radiusSm, ), - child: Text(text, style: _inter(fontSize: 11, fontWeight: FontWeight.w600, color: textColor)), + child: Text(text, style: AppTextStyles.labelSmall(context).copyWith(color: textColor)), ); } @@ -321,7 +309,7 @@ class _FundOrdersPageState extends State { final c = _colors; return Text( '${order.isDeposit ? '+' : '-'}${order.amount} USDT', - style: _inter(fontSize: 18, fontWeight: FontWeight.w700, color: c.primaryText), + style: AppTextStyles.displaySmall(context).copyWith(color: c.primaryText, height: 1.3), ); } @@ -334,14 +322,14 @@ class _FundOrdersPageState extends State { return Column( children: [ _buildDetailRow('订单号', order.orderNo, c), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.sm - AppSpacing.xs), if (order.walletAddress != null) ...[ _buildDetailRow( '网络', order.remark.isNotEmpty ? order.remark : '-', c, ), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.sm - AppSpacing.xs), _buildDetailRow( '地址', _truncateAddress(order.walletAddress!), @@ -354,14 +342,14 @@ class _FundOrdersPageState extends State { child: Icon(LucideIcons.copy, size: 14, color: c.mutedText), ), ), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ] else if (order.remark.isNotEmpty) ...[ _buildDetailRow('网络', order.remark, c), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ], if (order.fee != null && !order.isDeposit) ...[ _buildDetailRow('手续费', '${order.fee}%', c), - const SizedBox(height: 6), + const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ], _buildDetailRow( '时间', @@ -378,18 +366,18 @@ class _FundOrdersPageState extends State { _OrderColors c, { Widget? trailing, }) { - final valueStyle = _inter(fontSize: 12, fontWeight: FontWeight.normal, color: c.primaryText); + final valueStyle = AppTextStyles.bodyMedium(context).copyWith(color: c.primaryText); return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(label, style: _inter(fontSize: 12, fontWeight: FontWeight.normal, color: c.mutedText)), + Text(label, style: AppTextStyles.bodyMedium(context).copyWith(color: c.mutedText)), if (trailing != null) Row( mainAxisSize: MainAxisSize.min, children: [ Text(value, style: valueStyle), - const SizedBox(width: 4), + const SizedBox(width: AppSpacing.xs), trailing, ], ) @@ -405,7 +393,7 @@ class _FundOrdersPageState extends State { Widget _buildRejectionReason(OrderFund order) { return Text( '拒绝原因: ${order.rejectReason}', - style: _inter(fontSize: 12, fontWeight: FontWeight.normal, color: AppColorScheme.getDownColor(_isDark)), + style: AppTextStyles.bodyMedium(context).copyWith(color: AppColorScheme.getDownColor(_isDark)), ); } @@ -416,7 +404,7 @@ class _FundOrdersPageState extends State { final c = _colors; return Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm + AppSpacing.xs, vertical: AppSpacing.sm), decoration: BoxDecoration( color: c.bgTertiary, borderRadius: AppRadius.radiusSm, @@ -424,8 +412,8 @@ class _FundOrdersPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('应付金额', style: _inter(fontSize: 13, fontWeight: FontWeight.w500, color: c.secondaryText)), - Text('${order.receivableAmount} USDT', style: _inter(fontSize: 13, fontWeight: FontWeight.w600, color: c.primaryText)), + Text('应付金额', style: AppTextStyles.headlineSmall(context).copyWith(color: c.secondaryText)), + Text('${order.receivableAmount} USDT', style: AppTextStyles.headlineMedium(context).copyWith(color: c.primaryText)), ], ), ); @@ -437,6 +425,7 @@ class _FundOrdersPageState extends State { Widget _buildActions(OrderFund order) { final upColor = AppColorScheme.getUpColor(_isDark); final downColor = AppColorScheme.getDownColor(_isDark); + final c = _colors; return Row( mainAxisAlignment: MainAxisAlignment.end, @@ -445,26 +434,26 @@ class _FundOrdersPageState extends State { GestureDetector( onTap: () => _cancelOrder(order), child: Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: AppSpacing.sm), decoration: BoxDecoration( borderRadius: AppRadius.radiusSm, border: Border.all(color: downColor, width: 1), ), - child: Text('取消订单', style: _inter(fontSize: 13, fontWeight: FontWeight.w500, color: downColor)), + child: Text('取消订单', style: AppTextStyles.headlineSmall(context).copyWith(color: downColor)), ), ), if (order.canCancel && order.canConfirmPay) - const SizedBox(width: 12), + const SizedBox(width: AppSpacing.sm + AppSpacing.xs), if (order.canConfirmPay) GestureDetector( onTap: () => _confirmPay(order), child: Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: AppSpacing.sm), decoration: BoxDecoration( color: upColor, borderRadius: AppRadius.radiusSm, ), - child: Text('已打款', style: _inter(fontSize: 13, fontWeight: FontWeight.w500, color: Colors.white)), + child: Text('已打款', style: AppTextStyles.headlineSmall(context).copyWith(color: c.activeTabText)), ), ), ], @@ -573,7 +562,7 @@ class _OrderColors { : AppColorScheme.lightOnSurfaceVariant, mutedText = isDark ? AppColorScheme.darkOnSurfaceMuted : AppColorScheme.lightOnSurfaceMuted, tabBg = isDark ? AppColorScheme.darkSurfaceContainerHigh : AppColorScheme.lightSurfaceHigh, - activeTabBg = isDark ? AppColorScheme.darkOnSurface : Colors.white, + activeTabBg = isDark ? AppColorScheme.darkOnSurface : AppColorScheme.lightSurfaceLowest, activeTabText = isDark ? AppColorScheme.darkBackground : AppColorScheme.lightOnSurface, inactiveTabText = isDark ? AppColorScheme.darkOnSurfaceVariant : AppColorScheme.lightOnSurfaceVariant; } diff --git a/flutter_monisuo/lib/ui/pages/orders/orders_page.dart b/flutter_monisuo/lib/ui/pages/orders/orders_page.dart index 1dc9602..af792aa 100644 --- a/flutter_monisuo/lib/ui/pages/orders/orders_page.dart +++ b/flutter_monisuo/lib/ui/pages/orders/orders_page.dart @@ -3,6 +3,7 @@ import 'package:shadcn_ui/shadcn_ui.dart'; import 'package:provider/provider.dart'; import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; +import '../../../core/theme/app_theme.dart'; import '../../../providers/asset_provider.dart'; import 'fund_orders_list.dart'; @@ -34,6 +35,7 @@ class _OrdersPageState extends State with AutomaticKeepAliveClientMi Widget build(BuildContext context) { super.build(context); final theme = ShadTheme.of(context); + final isDark = Theme.of(context).brightness == Brightness.dark; return Scaffold( backgroundColor: theme.colorScheme.background, @@ -82,12 +84,14 @@ class TabSelector extends StatelessWidget { @override Widget build(BuildContext context) { final theme = ShadTheme.of(context); + final isDark = Theme.of(context).brightness == Brightness.dark; + final onPrimaryBg = isDark ? AppColorScheme.darkBackground : AppColorScheme.lightSurfaceLowest; return Container( - padding: EdgeInsets.all(AppSpacing.xs), + padding: const EdgeInsets.all(AppSpacing.xs), decoration: BoxDecoration( color: theme.colorScheme.card, - borderRadius: BorderRadius.circular(AppRadius.lg), + borderRadius: AppRadius.radiusLg, ), child: Row( children: tabs.asMap().entries.map((entry) { @@ -102,16 +106,20 @@ class TabSelector extends StatelessWidget { duration: const Duration(milliseconds: 200), padding: EdgeInsets.symmetric(vertical: AppSpacing.sm + AppSpacing.xs), decoration: BoxDecoration( - color: isSelected ? theme.colorScheme.primary : Colors.transparent, - borderRadius: BorderRadius.circular(AppRadius.md), + color: isSelected ? theme.colorScheme.primary : AppColorScheme.darkSurfaceLowest.withValues(alpha: 0), + borderRadius: AppRadius.radiusMd, ), child: Center( child: Text( label, - style: TextStyle( - color: isSelected ? Colors.white : theme.colorScheme.mutedForeground, - fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal, - ), + style: isSelected + ? AppTextStyles.labelLarge(context).copyWith( + color: onPrimaryBg, + ) + : AppTextStyles.labelLarge(context).copyWith( + color: theme.colorScheme.mutedForeground, + fontWeight: FontWeight.w400, + ), ), ), ), @@ -132,8 +140,6 @@ class TradeOrdersList extends StatelessWidget { @override Widget build(BuildContext context) { final theme = ShadTheme.of(context); - // Trade orders feature not yet implemented in provider - // Using tradeAccounts (holdings) as placeholder for now return Center( child: Padding( diff --git a/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart b/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart index 6482bb6..3c1d1f4 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; /// 金额输入框组件(含超额提示) /// @@ -70,17 +70,13 @@ class _AmountInputState extends State { controller: widget.amountController, keyboardType: const TextInputType.numberWithOptions(decimal: true), onChanged: (_) => _checkLimit(), - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.normal, - color: colorScheme.onSurface, - fontFeatures: [FontFeature.tabularFigures()], + style: AppTextStyles.numberMedium(context).copyWith( + fontWeight: FontWeight.w400, ), decoration: InputDecoration( hintText: '请输入金额', - hintStyle: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.normal, + hintStyle: AppTextStyles.numberMedium(context).copyWith( + fontWeight: FontWeight.w400, color: colorScheme.onSurfaceVariant.withOpacity(0.5), ), border: InputBorder.none, @@ -96,11 +92,10 @@ class _AmountInputState extends State { child: Row( children: [ Icon(Icons.error_outline, size: 13, color: warningColor), - SizedBox(width: 4), + SizedBox(width: AppSpacing.xs), Text( '超出可用USDT余额', - style: GoogleFonts.inter( - fontSize: 11, + style: AppTextStyles.bodySmall(context).copyWith( color: warningColor, ), ), diff --git a/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart b/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart index 5d7bfec..9c6c47a 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; /// 币种头像组件 /// @@ -21,10 +22,9 @@ class CoinAvatar extends StatelessWidget { ), child: Center( child: Text(icon ?? '?', - style: TextStyle( + style: AppTextStyles.displaySmall(context).copyWith( fontSize: 20, color: colorScheme.primary, - fontWeight: FontWeight.bold, )), ), ); diff --git a/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart b/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart index 5feddae..6bbf95e 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:lucide_icons_flutter/lucide_icons.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../data/models/coin.dart'; import 'coin_avatar.dart'; @@ -54,18 +54,12 @@ class CoinSelector extends StatelessWidget { selectedCoin != null ? '${selectedCoin!.code}/USDT' : '选择币种', - style: GoogleFonts.inter( - fontSize: 18, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 2), Text( selectedCoin?.name ?? '点击选择交易对', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -86,7 +80,7 @@ class CoinSelector extends StatelessWidget { showModalBottomSheet( context: context, - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), isScrollControlled: true, builder: (ctx) => Container( height: MediaQuery.of(ctx).size.height * 0.65, @@ -106,7 +100,7 @@ class CoinSelector extends StatelessWidget { height: 4, decoration: BoxDecoration( color: colorScheme.onSurfaceVariant.withOpacity(0.3), - borderRadius: BorderRadius.circular(2), + borderRadius: BorderRadius.circular(AppRadius.sm), ), ), // 标题栏 @@ -116,11 +110,7 @@ class CoinSelector extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('选择币种', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - )), + style: AppTextStyles.headlineLarge(context)), GestureDetector( onTap: () => Navigator.of(ctx).pop(), child: Icon(LucideIcons.x, @@ -163,7 +153,7 @@ class CoinSelector extends StatelessWidget { padding: EdgeInsets.symmetric( horizontal: AppSpacing.lg, vertical: AppSpacing.md), color: - isSelected ? colorScheme.primary.withOpacity(0.1) : Colors.transparent, + isSelected ? colorScheme.primary.withOpacity(0.1) : const Color(0x00000000), child: Row( children: [ CoinAvatar(icon: coin.displayIcon), @@ -176,24 +166,15 @@ class CoinSelector extends StatelessWidget { Row( children: [ Text(coin.code, - style: GoogleFonts.inter( - fontSize: 15, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - )), + style: AppTextStyles.headlineLarge(context)), SizedBox(width: AppSpacing.xs), Text('/USDT', - style: GoogleFonts.inter( - fontSize: 11, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, )), const Spacer(), Text('\$${coin.formattedPrice}', - style: GoogleFonts.inter( - fontSize: 13, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - )), + style: AppTextStyles.numberMedium(context)), SizedBox(width: AppSpacing.sm), // 涨跌幅徽章 Container( @@ -203,8 +184,7 @@ class CoinSelector extends StatelessWidget { borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Text(coin.formattedChange, - style: GoogleFonts.inter( - fontSize: 11, + style: AppTextStyles.labelMedium(context).copyWith( color: changeColor, fontWeight: FontWeight.w600, )), @@ -219,8 +199,7 @@ class CoinSelector extends StatelessWidget { SizedBox(height: 3), // 第二行:币种名称 Text(coin.name, - style: GoogleFonts.inter( - fontSize: 12, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, )), ], diff --git a/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart b/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart index 3b51e98..f083ece 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../components/glass_panel.dart'; import '../../../components/neon_glow.dart'; @@ -34,7 +34,7 @@ class ConfirmDialog extends StatelessWidget { : AppColorScheme.getDownColor(isDark); return Dialog( - backgroundColor: Colors.transparent, + backgroundColor: const Color(0x00000000), child: GlassPanel( borderRadius: BorderRadius.circular(AppRadius.lg), padding: EdgeInsets.all(AppSpacing.lg), @@ -45,11 +45,7 @@ class ConfirmDialog extends StatelessWidget { Center( child: Text( '确认${isBuy ? '买入' : '卖出'}', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), + style: AppTextStyles.headlineLarge(context), ), ), SizedBox(height: AppSpacing.lg), @@ -97,15 +93,12 @@ class ConfirmDialog extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(label, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.normal, + style: AppTextStyles.headlineMedium(context).copyWith( + fontWeight: FontWeight.w400, color: colorScheme.onSurfaceVariant, )), Text(value, - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, + style: AppTextStyles.numberMedium(context).copyWith( color: valueColor ?? colorScheme.onSurface, )), ], diff --git a/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart index 109d6f2..3968f08 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; /// 占位卡片组件 /// @@ -31,9 +31,8 @@ class PlaceholderCard extends StatelessWidget { ), child: Center( child: Text(message, - style: GoogleFonts.inter( + style: AppTextStyles.headlineMedium(context).copyWith( color: colorScheme.onSurfaceVariant, - fontSize: 14, )), ), ); diff --git a/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart index 2fdabc1..461f109 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../data/models/coin.dart'; /// 价格卡片组件 @@ -25,7 +25,7 @@ class PriceCard extends StatelessWidget { return Container( width: double.infinity, - padding: const EdgeInsets.all(20), + padding: const EdgeInsets.all(AppSpacing.md + AppSpacing.sm), decoration: BoxDecoration( color: isDark ? colorScheme.surfaceContainer @@ -43,12 +43,7 @@ class PriceCard extends StatelessWidget { children: [ Text( coin.formattedPrice, - style: GoogleFonts.inter( - fontSize: 32, - fontWeight: FontWeight.w700, - color: colorScheme.onSurface, - fontFeatures: [FontFeature.tabularFigures()], - ), + style: AppTextStyles.numberLarge(context).copyWith(fontSize: 32), ), const SizedBox(width: AppSpacing.sm), // 涨跌幅徽章 - 圆角sm,涨绿背景 @@ -61,11 +56,9 @@ class PriceCard extends StatelessWidget { ), child: Text( coin.formattedChange, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.w600, + style: AppTextStyles.numberSmall(context).copyWith( color: changeColor, - fontFeatures: [FontFeature.tabularFigures()], + fontWeight: FontWeight.w600, ), ), ), @@ -75,11 +68,7 @@ class PriceCard extends StatelessWidget { // 副标题 Text( '24h 变化', - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.normal, - color: colorScheme.onSurfaceVariant, - ), + style: AppTextStyles.bodySmall(context), ), ], ), diff --git a/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart b/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart index 9b00160..34dc651 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; /// 交易按钮组件 /// @@ -44,16 +44,14 @@ class TradeButton extends StatelessWidget { height: 20, child: CircularProgressIndicator( strokeWidth: 2, - color: Colors.white, + color: AppColorScheme.darkOnPrimary, ), ) : Text( '${isBuy ? '买入' : '卖出'} ${coinCode ?? ""}', - style: GoogleFonts.inter( - fontSize: 16, - fontWeight: FontWeight.w700, + style: AppTextStyles.headlineLarge(context).copyWith( color: enabled - ? Colors.white + ? AppColorScheme.darkOnPrimary : colorScheme.onSurface.withOpacity(0.3), ), ), diff --git a/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart index df34c84..51f39ee 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; +import '../../../../core/theme/app_theme.dart'; import '../../../../data/models/coin.dart'; import 'amount_input.dart'; @@ -51,7 +51,7 @@ class TradeFormCard extends StatelessWidget { return Container( width: double.infinity, - padding: const EdgeInsets.all(20), + padding: const EdgeInsets.all(AppSpacing.md + AppSpacing.sm), decoration: BoxDecoration( color: cardBgColor, borderRadius: BorderRadius.circular(AppRadius.lg), @@ -88,11 +88,9 @@ class TradeFormCard extends StatelessWidget { child: Center( child: Text( '买入', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, + style: AppTextStyles.headlineMedium(context).copyWith( color: isBuy - ? Colors.white + ? AppColorScheme.darkOnPrimary : colorScheme.onSurfaceVariant, ), ), @@ -120,11 +118,9 @@ class TradeFormCard extends StatelessWidget { child: Center( child: Text( '卖出', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, + style: AppTextStyles.headlineMedium(context).copyWith( color: !isBuy - ? Colors.white + ? AppColorScheme.darkOnPrimary : colorScheme.onSurfaceVariant, ), ), @@ -142,17 +138,11 @@ class TradeFormCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('交易金额', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, )), Text('USDT', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - )), + style: AppTextStyles.labelLarge(context)), ], ), const SizedBox(height: AppSpacing.sm), @@ -172,9 +162,7 @@ class TradeFormCard extends StatelessWidget { isBuy ? '可用: $availableUsdt USDT' : '可用: $availableCoinQty ${selectedCoin?.code ?? ""}', - style: GoogleFonts.inter( - fontSize: 11, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, ), ), @@ -200,19 +188,12 @@ class TradeFormCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('交易数量', - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.normal, + style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, )), Text( '$calculatedQuantity ${selectedCoin?.code ?? ''}', - style: GoogleFonts.inter( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colorScheme.onSurface, - fontFeatures: [FontFeature.tabularFigures()], - ), + style: AppTextStyles.numberMedium(context), ), ], ), @@ -234,9 +215,7 @@ class TradeFormCard extends StatelessWidget { ), child: Center( child: Text(label, - style: GoogleFonts.inter( - fontSize: 12, - fontWeight: FontWeight.w500, + style: AppTextStyles.labelLarge(context).copyWith( color: colorScheme.onSurfaceVariant, )), ), diff --git a/pencil-new.pen b/pencil-new.pen new file mode 100644 index 0000000..913d58f --- /dev/null +++ b/pencil-new.pen @@ -0,0 +1,19670 @@ +{ + "version": "2.10", + "children": [ + { + "type": "frame", + "id": "bi8Au", + "x": -118, + "y": 0, + "name": "Frame", + "clip": true, + "width": 2048, + "height": 2048, + "fill": "#FFFFFF", + "layout": "none" + }, + { + "type": "frame", + "id": "3XQoV", + "x": 0, + "y": 0, + "name": "Home - 首页", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "Y8XkR", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GYMMA", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "QNUBj", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "u4xyp", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "nRhwy", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "J07Em", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "R1hYI", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "eSG8U", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "Ii01W", + "name": "Header", + "width": "fill_container", + "padding": [ + 16, + 4, + 12, + 4 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "s1Icf", + "name": "logo", + "fill": "$text-primary", + "content": "MONISUO", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "7fo3O", + "name": "headerActions", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "sV1Uw", + "name": "searchBtn", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "51kwZ", + "name": "searchIcon", + "width": 18, + "height": 18, + "iconFontName": "search", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "AnNE3", + "name": "bellBtn2", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "5UnGp", + "name": "bellIcon2", + "width": 18, + "height": 18, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "OGZ5Y", + "name": "avatar2", + "width": 32, + "height": 32, + "fill": "$accent-primary", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "6eHAm", + "name": "avatarTxt2", + "fill": "$text-inverse", + "content": "A", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "0N0L6", + "name": "Asset Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "xGEP7", + "name": "cardHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "TCg5l", + "name": "cardHeaderLeft", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AhbIv", + "name": "cardLabel", + "fill": "$text-secondary", + "content": "预估总资产 (USDT)", + "fontFamily": "Inter", + "fontSize": 13 + }, + { + "type": "icon_font", + "id": "uKSCa", + "name": "eyeBtn3", + "width": 15, + "height": 15, + "iconFontName": "eye", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "dPEzW", + "name": "cardDepBtn", + "fill": "$accent-primary", + "cornerRadius": "$radius-sm", + "gap": 4, + "padding": [ + 5, + 10 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "w9pEr", + "name": "cardDepIcn", + "width": 13, + "height": 13, + "iconFontName": "plus", + "iconFontFamily": "lucide", + "fill": "$text-inverse" + }, + { + "type": "text", + "id": "7Mbgm", + "name": "cardDepTxt", + "fill": "$text-inverse", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "aCP8G", + "name": "valRow", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "19usq", + "name": "bigVal", + "fill": "$text-primary", + "content": "12,458.36", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700", + "letterSpacing": -0.5 + }, + { + "type": "text", + "id": "VhSoI", + "name": "cnyVal", + "fill": "$text-muted", + "content": "≈ ¥90,523.18 CNY", + "fontFamily": "Inter", + "fontSize": 12 + } + ] + }, + { + "type": "rectangle", + "id": "LhUqp", + "name": "div1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "ZBdnf", + "name": "profitRow2", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "SgRVJ", + "name": "pCol1", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "BEVou", + "name": "pLbl1", + "fill": "$text-muted", + "content": "今日盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "IEmUR", + "name": "pVal1", + "fill": "$profit-green", + "content": "+126.50 (+1.03%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "CnqEb", + "name": "divV2", + "fill": "$border-default", + "width": 1, + "height": "fill_container" + }, + { + "type": "frame", + "id": "czzCm", + "name": "pCol2", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "padding": [ + 0, + 0, + 0, + 16 + ], + "children": [ + { + "type": "text", + "id": "Z7xDD", + "name": "pLbl2", + "fill": "$text-muted", + "content": "总盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "KwLv9", + "name": "pVal2", + "fill": "$profit-green", + "content": "+2,458.36 (+24.58%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "4wpWf", + "name": "Quick Actions", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 16, + "justifyContent": "space_around", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gB6Xo", + "name": "a1", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "FMv6H", + "name": "a1Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "SOSqu", + "name": "a1IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-up-right", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "X7DIX", + "name": "a1Txt", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "UMKwT", + "name": "a2", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "nr6v4", + "name": "a2Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "sQ9aG", + "name": "a2IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-down-left", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "8lWRZ", + "name": "a2Txt", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "NzOW7", + "name": "a3", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EBxyG", + "name": "a3Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "52EhQ", + "name": "a3IconF", + "width": 18, + "height": 18, + "iconFontName": "repeat", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "jrEEU", + "name": "a3Txt", + "fill": "$text-secondary", + "content": "划转", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "9n3q9", + "name": "a4", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "l4py4", + "name": "a4Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "G9nyZ", + "name": "a4IconF", + "width": 18, + "height": 18, + "iconFontName": "pie-chart", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "W8FXd", + "name": "a4Txt", + "fill": "$text-secondary", + "content": "盈亏", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "17fPU", + "name": "a5", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "j3oiW", + "name": "a5Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "AlDJg", + "name": "a5IconF", + "width": 18, + "height": 18, + "iconFontName": "file-text", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "LgOpS", + "name": "a5Txt", + "fill": "$text-secondary", + "content": "账单", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "5gmri", + "name": "Hot Coins Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "HLdgf", + "name": "sectionHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ZcsEg", + "name": "hotTitle", + "fill": "$text-primary", + "content": "热门币种", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Q2Z9U", + "name": "hotMore", + "fill": "$text-muted", + "content": "更多", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "G1NKv", + "name": "coinList", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "6SqOJ", + "name": "coinRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "U2Rh8", + "name": "c1Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "FaK7z", + "name": "btcIcon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tBqb8", + "name": "coin1Sym", + "fill": "#FFFFFF", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Ox1fU", + "name": "c1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "grPIY", + "name": "coin1Name", + "fill": "$text-primary", + "content": "BTC/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "vsECB", + "name": "coin1Vol", + "fill": "$text-muted", + "content": "Bitcoin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "SMTmJ", + "name": "c1Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "h5Fm6", + "name": "coin1Price", + "fill": "$text-primary", + "content": "68,432.50", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "aGcNQ", + "name": "coin1Chg", + "fill": "$profit-green", + "content": "+2.35%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "oBAYx", + "name": "divCoin1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "LbuDU", + "name": "coinRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "shAWu", + "name": "c2Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "BfWMv", + "name": "ethIcon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pP0XF", + "name": "c2Sym", + "fill": "#FFFFFF", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "9XrYX", + "name": "c2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "0kH0Q", + "name": "c2Name", + "fill": "$text-primary", + "content": "ETH/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "XozO2", + "name": "c2Vol", + "fill": "$text-muted", + "content": "Ethereum", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Do6YN", + "name": "c2Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "Sm3DQ", + "name": "c2Price", + "fill": "$text-primary", + "content": "3,856.20", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "M3I96", + "name": "c2Chg", + "fill": "$profit-green", + "content": "+1.82%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "jnguk", + "name": "divCoin2", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "36L7f", + "name": "coinRow3", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "LAlGW", + "name": "c3Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "f8ZtG", + "name": "solIcon", + "width": 36, + "height": 36, + "fill": "#9945FF", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SgPIQ", + "name": "c3Sym", + "fill": "#FFFFFF", + "content": "S", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "YnN03", + "name": "c3Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "BuoHV", + "name": "c3Name", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "cmCqk", + "name": "c3Vol", + "fill": "$text-muted", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "qydyG", + "name": "c3Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "IJ8Zr", + "name": "c3Price", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "KxQCb", + "name": "c3Chg", + "fill": "$loss-red", + "content": "-0.94%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "9GAs8", + "name": "Holdings Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "i2U4V", + "name": "holdHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "5EJc7", + "name": "holdTitle", + "fill": "$text-primary", + "content": "我的持仓", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "rEv51", + "name": "holdMore", + "fill": "$text-muted", + "content": "全部", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "zslvs", + "name": "holdList", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "c39R8", + "name": "hRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "wlIad", + "name": "h1L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ExW1I", + "name": "h1Icon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rJzPi", + "name": "h1Sym", + "fill": "#FFFFFF", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Vmn0J", + "name": "h1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "nWEvx", + "name": "h1Name", + "fill": "$text-primary", + "content": "BTC", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Uz0wP", + "name": "h1Amt", + "fill": "$text-muted", + "content": "0.2356 BTC", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "kZYai", + "name": "h1R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "XZwwU", + "name": "h1Val", + "fill": "$text-primary", + "content": "¥103,427.80", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "64FJf", + "name": "h1Pnl", + "fill": "$profit-green", + "content": "+¥2,432.50", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "EdSTC", + "name": "hdiv1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "TS68l", + "name": "hRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "FDE6x", + "name": "h2L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "FjrwX", + "name": "h2Icon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "esqWr", + "name": "h2Sym", + "fill": "#FFFFFF", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "w4Evo", + "name": "h2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "FsPlB", + "name": "h2Name", + "fill": "$text-primary", + "content": "ETH", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Y0FYP", + "name": "h2Amt", + "fill": "$text-muted", + "content": "1.528 ETH", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "99eqD", + "name": "h2R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "hIAUJ", + "name": "h2Val", + "fill": "$text-primary", + "content": "¥27,867.60", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "NJjkv", + "name": "h2Pnl", + "fill": "$loss-red", + "content": "-¥412.30", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "mdhwr", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3CQtq", + "name": "tabPill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "stroke": { + "thickness": 0, + "fill": "#00000000" + }, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "DFi9C", + "name": "tab1", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "k0QWY", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "Zh9Wd", + "name": "tab1Label", + "fill": "$tab-active-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "S9vOl", + "name": "tab2", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "kUUso", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "Y1BJQ", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "zHfFM", + "name": "tab3", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Y1mcs", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "8tycv", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "Uclq3", + "name": "tab4", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "rHwoh", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "ejCX0", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "8GIDl", + "name": "tab5", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "gaKct", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "XKlNz", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "fMPS5", + "x": 813, + "y": 21, + "name": "Home - 首页 (Dark)", + "clip": true, + "width": 390, + "height": 844, + "fill": "#0B1120", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "56sQy", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "#0F172A", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "COPpo", + "name": "timeLabel", + "fill": "#F8FAFC", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "OC4QA", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "0TdVO", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "#F8FAFC" + }, + { + "type": "icon_font", + "id": "B2tC9", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "#F8FAFC" + }, + { + "type": "icon_font", + "id": "Q9DX4", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "#F8FAFC" + } + ] + } + ] + }, + { + "type": "frame", + "id": "03wvt", + "name": "Content", + "rotation": -0.06010462536139973, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "ROrHW", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "qIcdR", + "name": "Header", + "width": "fill_container", + "padding": [ + 16, + 4, + 12, + 4 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AJhTQ", + "name": "logo", + "fill": "#F8FAFC", + "content": "MONISUO", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "1sJjS", + "name": "headerActions", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Zefzv", + "name": "searchBtn", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Ic6pk", + "name": "searchIcon", + "width": 18, + "height": 18, + "iconFontName": "search", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "frame", + "id": "QE0JX", + "name": "bellBtn2", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "qUuUO", + "name": "bellIcon2", + "width": 18, + "height": 18, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "frame", + "id": "P74tx", + "name": "avatar2", + "width": 32, + "height": 32, + "fill": "#F8FAFC", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "H3Qpn", + "name": "avatarTxt2", + "fill": "#0F172A", + "content": "A", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "10hLM", + "name": "Asset Card", + "width": "fill_container", + "fill": "#0F172A", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "#1E293B" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "viz6l", + "name": "cardHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "k15oe", + "name": "cardHeaderLeft", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "QXVKk", + "name": "cardLabel", + "fill": "#94A3B8", + "content": "预估总资产 (USDT)", + "fontFamily": "Inter", + "fontSize": 13 + }, + { + "type": "icon_font", + "id": "cfDLM", + "name": "eyeBtn3", + "width": 15, + "height": 15, + "iconFontName": "eye", + "iconFontFamily": "lucide", + "fill": "#64748B" + } + ] + }, + { + "type": "frame", + "id": "nnqnz", + "name": "cardDepBtn", + "fill": "#F8FAFC", + "cornerRadius": "$radius-sm", + "gap": 4, + "padding": [ + 5, + 10 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "iwDSi", + "name": "cardDepIcn", + "width": 13, + "height": 13, + "iconFontName": "plus", + "iconFontFamily": "lucide", + "fill": "#0F172A" + }, + { + "type": "text", + "id": "25a8i", + "name": "cardDepTxt", + "fill": "#0F172A", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "EHmdb", + "name": "valRow", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "Osn6J", + "name": "bigVal", + "fill": "#F8FAFC", + "content": "12,458.36", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700", + "letterSpacing": -0.5 + }, + { + "type": "text", + "id": "saMHN", + "name": "cnyVal", + "fill": "#64748B", + "content": "≈ ¥90,523.18 CNY", + "fontFamily": "Inter", + "fontSize": 12 + } + ] + }, + { + "type": "rectangle", + "id": "uoR9c", + "name": "div1", + "fill": "#1E293B", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "x789T", + "name": "profitRow2", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "dOGIe", + "name": "pCol1", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "VWqeX", + "name": "pLbl1", + "fill": "#64748B", + "content": "今日盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "elzXC", + "name": "pVal1", + "fill": "#22C55E", + "content": "+126.50 (+1.03%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "0NBdL", + "name": "divV2", + "fill": "#334155", + "width": 1, + "height": "fill_container" + }, + { + "type": "frame", + "id": "dyo2X", + "name": "pCol2", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "padding": [ + 0, + 0, + 0, + 16 + ], + "children": [ + { + "type": "text", + "id": "iBvjA", + "name": "pLbl2", + "fill": "#64748B", + "content": "总盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "x4IcA", + "name": "pVal2", + "fill": "#22C55E", + "content": "+2,458.36 (+24.58%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "DiNNF", + "name": "Quick Actions", + "width": "fill_container", + "fill": "#0F172A", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "#1E293B" + }, + "padding": 16, + "justifyContent": "space_around", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9Vg34", + "name": "a1", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gs6ep", + "name": "a1Icon", + "width": 40, + "height": 40, + "fill": "#1E293B", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "QuHNc", + "name": "a1IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-up-right", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "text", + "id": "wOacy", + "name": "a1Txt", + "fill": "#94A3B8", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Om4Lg", + "name": "a2", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "kMagf", + "name": "a2Icon", + "width": 40, + "height": 40, + "fill": "#1E293B", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "ruL00", + "name": "a2IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-down-left", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "text", + "id": "EQHci", + "name": "a2Txt", + "fill": "#94A3B8", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "g8bcY", + "name": "a3", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "k7XaJ", + "name": "a3Icon", + "width": 40, + "height": 40, + "fill": "#1E293B", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "czAGq", + "name": "a3IconF", + "width": 18, + "height": 18, + "iconFontName": "repeat", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "text", + "id": "hZuN2", + "name": "a3Txt", + "fill": "#94A3B8", + "content": "划转", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "mElxt", + "name": "a4", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "u9gjN", + "name": "a4Icon", + "width": 40, + "height": 40, + "fill": "#1E293B", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "oPf8n", + "name": "a4IconF", + "width": 18, + "height": 18, + "iconFontName": "pie-chart", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "text", + "id": "tvOsD", + "name": "a4Txt", + "fill": "#94A3B8", + "content": "盈亏", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "OpiMS", + "name": "a5", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "uj5fA", + "name": "a5Icon", + "width": 40, + "height": 40, + "fill": "#1E293B", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "7sBKg", + "name": "a5IconF", + "width": 18, + "height": 18, + "iconFontName": "file-text", + "iconFontFamily": "lucide", + "fill": "#94A3B8" + } + ] + }, + { + "type": "text", + "id": "V8Bh7", + "name": "a5Txt", + "fill": "#94A3B8", + "content": "账单", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "l52Ra", + "name": "Hot Coins Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "nY31z", + "name": "sectionHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "nz6ur", + "name": "hotTitle", + "fill": "#F8FAFC", + "content": "热门币种", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "2iJLc", + "name": "hotMore", + "fill": "#64748B", + "content": "更多", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "IiTm7", + "name": "coinList", + "width": "fill_container", + "fill": "#0F172A", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "#1E293B" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "UTZB8", + "name": "coinRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "pFnYP", + "name": "c1Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "98wUf", + "name": "btcIcon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "iw56m", + "name": "coin1Sym", + "fill": "#FFFFFF", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "lDKyh", + "name": "c1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "4c1Ts", + "name": "coin1Name", + "fill": "#F8FAFC", + "content": "BTC/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "mY6p7", + "name": "coin1Vol", + "fill": "#64748B", + "content": "Bitcoin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "lyW41", + "name": "c1Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "vSf7z", + "name": "coin1Price", + "fill": "#F8FAFC", + "content": "68,432.50", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "rZTi2", + "name": "coin1Chg", + "fill": "#22C55E", + "content": "+2.35%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "Kd0hR", + "name": "divCoin1", + "fill": "#1E293B", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "DBw13", + "name": "coinRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "PHgzB", + "name": "c2Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tc6mx", + "name": "ethIcon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PgGpm", + "name": "c2Sym", + "fill": "#FFFFFF", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "7ZFkU", + "name": "c2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "CckRb", + "name": "c2Name", + "fill": "#F8FAFC", + "content": "ETH/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Wco49", + "name": "c2Vol", + "fill": "#64748B", + "content": "Ethereum", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "o1gVA", + "name": "c2Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "mNHYy", + "name": "c2Price", + "fill": "#F8FAFC", + "content": "3,856.20", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Pv1mS", + "name": "c2Chg", + "fill": "#22C55E", + "content": "+1.82%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "DSMZI", + "name": "divCoin2", + "fill": "#1E293B", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "39VI4", + "name": "coinRow3", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "NfZV1", + "name": "c3Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Y8SYL", + "name": "solIcon", + "width": 36, + "height": 36, + "fill": "#9945FF", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "oQGaz", + "name": "c3Sym", + "fill": "#FFFFFF", + "content": "S", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "8TOZ5", + "name": "c3Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "eF4Ps", + "name": "c3Name", + "fill": "#F8FAFC", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "KTJXP", + "name": "c3Vol", + "fill": "#64748B", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "MJN4z", + "name": "c3Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "age1o", + "name": "c3Price", + "fill": "#F8FAFC", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "gglcl", + "name": "c3Chg", + "fill": "#EF4444", + "content": "-0.94%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "VgQJY", + "name": "Holdings Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "u4wQ6", + "name": "holdHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j9kXP", + "name": "holdTitle", + "fill": "#F8FAFC", + "content": "我的持仓", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "ewO3U", + "name": "holdMore", + "fill": "#64748B", + "content": "全部", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Svd7C", + "name": "holdList", + "width": "fill_container", + "fill": "#0F172A", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "#1E293B" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "tQaIO", + "name": "hRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "vngJP", + "name": "h1L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WQtIf", + "name": "h1Icon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "6sfVH", + "name": "h1Sym", + "fill": "#FFFFFF", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Z5b7Y", + "name": "h1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "JMKgW", + "name": "h1Name", + "fill": "#F8FAFC", + "content": "BTC", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "TIZ30", + "name": "h1Amt", + "fill": "#64748B", + "content": "0.2356 BTC", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2Vc9C", + "name": "h1R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "z3yvZ", + "name": "h1Val", + "fill": "#F8FAFC", + "content": "¥103,427.80", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "YKLQh", + "name": "h1Pnl", + "fill": "#22C55E", + "content": "+¥2,432.50", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "vvWRv", + "name": "hdiv1", + "fill": "#1E293B", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "A95jU", + "name": "hRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "XcEKK", + "name": "h2L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "yP8ca", + "name": "h2Icon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9MbgX", + "name": "h2Sym", + "fill": "#FFFFFF", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Hy0yq", + "name": "h2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "JWNQl", + "name": "h2Name", + "fill": "#F8FAFC", + "content": "ETH", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Tlc30", + "name": "h2Amt", + "fill": "#64748B", + "content": "1.528 ETH", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "o2JVp", + "name": "h2R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "q6lL3", + "name": "h2Val", + "fill": "#F8FAFC", + "content": "¥27,867.60", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "T7qgK", + "name": "h2Pnl", + "fill": "#EF4444", + "content": "-¥412.30", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "f7YJR", + "name": "Tab Bar", + "width": "fill_container", + "height": 64, + "fill": "#0F172A", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "HFKoW", + "name": "tabPill", + "width": "fill_container", + "height": 48, + "fill": "#0F172A", + "cornerRadius": 24, + "stroke": { + "thickness": 0, + "fill": "#00000000" + }, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "WbZ4H", + "name": "tab1", + "width": "fill_container", + "height": "fill_container", + "fill": "#1E293B", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "BBQJe", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "#F8FAFC" + }, + { + "type": "text", + "id": "g3bqn", + "name": "tab1Label", + "fill": "#F8FAFC", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "BBVYR", + "name": "tab2", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "lx3gZ", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "#64748B" + }, + { + "type": "text", + "id": "fZMH1", + "name": "tab2Label", + "fill": "#64748B", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "S9g5D", + "name": "tab3", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Hg22f", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "#64748B" + }, + { + "type": "text", + "id": "OZ7AT", + "name": "tab3Label", + "fill": "#64748B", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "CHMPZ", + "name": "tab4", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "BGabS", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "#64748B" + }, + { + "type": "text", + "id": "JX2sW", + "name": "tab4Label", + "fill": "#64748B", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "F69yD", + "name": "tab5", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "TfAks", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "#64748B" + }, + { + "type": "text", + "id": "Peoil", + "name": "tab5Label", + "fill": "#64748B", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "8kgG1", + "x": 420, + "y": 0, + "name": "Market - 行情", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "62O7S", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "IlCiZ", + "name": "timeL", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "herpH", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "oLLiq", + "name": "sig", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "gVN5B", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "dYPg5", + "name": "bat", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2lutr", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "6kf3P", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "TmMCb", + "name": "Header", + "width": "fill_container", + "padding": [ + 16, + 0, + 8, + 0 + ], + "children": [ + { + "type": "text", + "id": "zbkzu", + "name": "htitle", + "fill": "$text-primary", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 22, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "OPpKP", + "name": "Featured Cards", + "width": "fill_container", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "xElWP", + "name": "BTC Card", + "width": "fill_container", + "height": 130, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "5zzOd", + "name": "btcLabel", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "sMR05", + "name": "btcName", + "fill": "$text-primary", + "content": "BTC/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "WOF3z", + "name": "btcBadge", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "9xcgN", + "name": "btcBadgeT", + "fill": "$profit-green", + "content": "+2.35%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "6LSa1", + "name": "btcPrice", + "fill": "$text-primary", + "content": "68,432.50", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "Uqfcc", + "name": "btcSub", + "fill": "$text-secondary", + "content": "Bitcoin", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "jkCE7", + "name": "barRow", + "width": "fill_container", + "height": 24, + "gap": 3, + "justifyContent": "end", + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "ENXdv", + "name": "bar1", + "fill": "$profit-green", + "width": "fill_container", + "height": 10 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "cxl5w", + "name": "bar2", + "fill": "$profit-green", + "width": "fill_container", + "height": 18 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "cu858", + "name": "bar3", + "fill": "$profit-green", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "j1d3m", + "name": "bar4", + "fill": "$profit-green", + "width": "fill_container", + "height": 24 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "d7EbN", + "name": "bar5", + "fill": "$profit-green", + "width": "fill_container", + "height": 16 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "VcA25", + "name": "bar6", + "fill": "$profit-green", + "width": "fill_container", + "height": 20 + } + ] + } + ] + }, + { + "type": "frame", + "id": "ISGNM", + "name": "ETH Card", + "width": "fill_container", + "height": 130, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "9hv3u", + "name": "ethLabel", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "r6o7q", + "name": "ethName", + "fill": "$text-primary", + "content": "ETH/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "vMWmW", + "name": "ethBadge", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "wN64O", + "name": "ethBadgeT", + "fill": "$profit-green", + "content": "+1.82%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "ESnIm", + "name": "ethPrice", + "fill": "$text-primary", + "content": "3,856.20", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "jtdU2", + "name": "ethSub", + "fill": "$text-secondary", + "content": "Ethereum", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "Aa9b7", + "name": "ethBarRow", + "width": "fill_container", + "height": 24, + "gap": 3, + "justifyContent": "end", + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Pfo14", + "name": "ebar1", + "fill": "$profit-green", + "width": "fill_container", + "height": 8 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "i8pbI", + "name": "ebar2", + "fill": "$profit-green", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "vGFjk", + "name": "ebar3", + "fill": "$profit-green", + "width": "fill_container", + "height": 20 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Juiil", + "name": "ebar4", + "fill": "$profit-green", + "width": "fill_container", + "height": 12 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "ohbaj", + "name": "ebar5", + "fill": "$profit-green", + "width": "fill_container", + "height": 22 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "iQsN1", + "name": "secHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dc2od", + "name": "secTitle", + "fill": "$text-primary", + "content": "全部币种", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "uzFZ5", + "name": "secMore", + "fill": "$text-secondary", + "content": "更多 >", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "bje6u", + "name": "Coin List", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "Qil0m", + "name": "SOL Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "oYwDM", + "name": "solLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "r8h2P", + "name": "SOL Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "BTpeH", + "x": 0, + "y": 0, + "name": "solEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "yqHeP", + "x": 13, + "y": 10, + "name": "solLetter", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "ZBwo9", + "name": "solInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "vQk7z", + "name": "solPair", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "5XzLJ", + "name": "solFull", + "fill": "$text-secondary", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "tG5qn", + "name": "solRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "UdODn", + "name": "solPrice", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "xfnrt", + "name": "solChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "U3z0e", + "name": "solChangeT", + "fill": "$loss-red", + "content": "-0.94%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "TvXWb", + "name": "div1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "bX5wz", + "name": "BNB Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "dzlHZ", + "name": "bnbLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "72wwN", + "name": "BNB Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "BRrdP", + "x": 0, + "y": 0, + "name": "bnbEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "gwcut", + "x": 13, + "y": 10, + "name": "bnbLetter", + "fill": "$accent-primary", + "content": "B", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "zSZ1s", + "name": "bnbInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "CmIhh", + "name": "bnbPair", + "fill": "$text-primary", + "content": "BNB/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "rnRmA", + "name": "bnbFull", + "fill": "$text-secondary", + "content": "Binance Coin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "RxUlK", + "name": "bnbRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "hlskJ", + "name": "bnbPrice", + "fill": "$text-primary", + "content": "612.30", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "f3Vlp", + "name": "bnbChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "DC1A7", + "name": "bnbCT", + "fill": "$profit-green", + "content": "+1.45%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "jpxHW", + "name": "div2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "TucQi", + "name": "XRP Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Pc5rN", + "name": "xrpLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9iFDV", + "name": "XRP Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "oEhjQ", + "x": 0, + "y": 0, + "name": "xrpEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "6PsN4", + "x": 13, + "y": 10, + "name": "xrpLetter", + "fill": "$accent-primary", + "content": "X", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "cfyWD", + "name": "xrpInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "0EOXS", + "name": "xrpPair", + "fill": "$text-primary", + "content": "XRP/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "S5gdl", + "name": "xrpFull", + "fill": "$text-secondary", + "content": "Ripple", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "LAJQ3", + "name": "xrpRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "yQnaB", + "name": "xrpPrice", + "fill": "$text-primary", + "content": "0.6234", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "iwBfT", + "name": "xrpChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "vvbZ3", + "name": "xrpCT", + "fill": "$loss-red", + "content": "-1.22%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "zm4Mp", + "name": "div3", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "OF8X5", + "name": "DOGE Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ktePy", + "name": "dogeLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "DeLuz", + "name": "DOGE Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "KymD6", + "x": 0, + "y": 0, + "name": "dogeEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "sRMR8", + "x": 13, + "y": 10, + "name": "dogeLetter", + "fill": "$accent-primary", + "content": "D", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "FyU42", + "name": "dogeInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "hTmVR", + "name": "dogePair", + "fill": "$text-primary", + "content": "DOGE/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "N5Vvs", + "name": "dogeFull", + "fill": "$text-secondary", + "content": "Dogecoin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "XXmne", + "name": "dogeRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "zyYWf", + "name": "dogePrice", + "fill": "$text-primary", + "content": "0.1523", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "3EjiH", + "name": "dogeChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "dTjUT", + "name": "dogeCT", + "fill": "$profit-green", + "content": "+5.67%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "rE2d9", + "name": "div4", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "h2FBq", + "name": "ADA Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ly2oH", + "name": "adaLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "J5bS3", + "name": "ADA Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "2Gdby", + "x": 0, + "y": 0, + "name": "adaEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "Cy4T1", + "x": 13, + "y": 10, + "name": "adaLetter", + "fill": "$accent-primary", + "content": "A", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "InCbY", + "name": "adaInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "TWP1e", + "name": "adaPair", + "fill": "$text-primary", + "content": "ADA/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "oKVCR", + "name": "adaFull", + "fill": "$text-secondary", + "content": "Cardano", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "QOOzr", + "name": "adaRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "nnfEG", + "name": "adaPrice", + "fill": "$text-primary", + "content": "0.4521", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "CB8Q5", + "name": "adaChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "RUqNR", + "name": "adaCT", + "fill": "$loss-red", + "content": "-2.13%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "Ps3Tz", + "name": "div5", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "PoJX8", + "name": "DOT Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "10PRq", + "name": "dotLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "cXxYS", + "name": "DOT Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "JaBDn", + "x": 0, + "y": 0, + "name": "dotEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "7AKlT", + "x": 13, + "y": 10, + "name": "dotLetter", + "fill": "$accent-primary", + "content": "D", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "E7XHa", + "name": "dotInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "yAja6", + "name": "dotPair", + "fill": "$text-primary", + "content": "DOT/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "kaMzc", + "name": "dotFull", + "fill": "$text-secondary", + "content": "Polkadot", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "8vefx", + "name": "dotRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "nl1kN", + "name": "dotPrice", + "fill": "$text-primary", + "content": "7.85", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "wi6Yl", + "name": "dotChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "EWyAV", + "name": "dotCT", + "fill": "$profit-green", + "content": "+0.98%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "FnNvp", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "fq3KR", + "name": "Tab Pill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "Wio0p", + "name": "Tab Home", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "cJkas", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "h6RdZ", + "name": "tab1Text", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "IXxG2", + "name": "Tab Market", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "LzF6I", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "vS7FT", + "name": "tab2Text", + "fill": "$tab-active-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "09eBE", + "name": "Tab Trade", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "hJRAp", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "FBR84", + "name": "tab3Text", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "nrMhb", + "name": "Tab Asset", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "QajB2", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "fxkoD", + "name": "tab4Text", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "v2SRK", + "name": "Tab Me", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "bZMrB", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "AV59L", + "name": "tab5Text", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "IlDw3", + "x": 840, + "y": 0, + "name": "Trade - 交易", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "nENxr", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "qddm7", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "lk8xF", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "mxonm", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "I4yc7", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "oYbs4", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "FtF5G", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "XCc7E", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "gCt7v", + "name": "Coin Selector Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 16, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "RBA7X", + "name": "coinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "sn14y", + "name": "coinPair", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "text", + "id": "JqlAW", + "name": "coinName", + "fill": "$text-secondary", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "icon_font", + "id": "ZiDg2", + "name": "chevronDown", + "width": 16, + "height": 16, + "iconFontName": "chevron-down", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "QUG7L", + "name": "Price Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 8, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "PIW2h", + "name": "priceRow", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vnGo5", + "name": "priceValue", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "sFXJc", + "name": "changeBadge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SiWuo", + "name": "changeText", + "fill": "$profit-green", + "content": "+1.45%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "WrilR", + "name": "priceSubtitle", + "fill": "$text-muted", + "content": "24h 变化", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "f6Hfh", + "name": "Buy/Sell Toggle", + "clip": true, + "width": "fill_container", + "cornerRadius": "$radius-md", + "children": [ + { + "type": "frame", + "id": "geA1l", + "name": "buyBtn", + "width": "fill_container", + "height": 40, + "fill": "$profit-green", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DtYyU", + "name": "buyLabel", + "fill": "$text-inverse", + "content": "买入", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "uBdLV", + "name": "sellBtn", + "width": "fill_container", + "height": 40, + "fill": "$surface-card", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "296zX", + "name": "sellLabel", + "fill": "$text-secondary", + "content": "卖出", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "DBNBs", + "name": "Trade Form Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "9GOVd", + "name": "amountLabelRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Lsovs", + "name": "labelLeft", + "fill": "$text-secondary", + "content": "交易金额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "eqf3x", + "name": "labelRight", + "fill": "$text-primary", + "content": "USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "XD96R", + "name": "inputField", + "width": "fill_container", + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "3Engn", + "name": "placeholder", + "fill": "$text-muted", + "content": "请输入金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "ertpF", + "name": "availText", + "fill": "$text-muted", + "content": "可用: 10,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "ejUNf", + "name": "pctRow", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "MN6vs", + "name": "pct25", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "LXl8E", + "name": "pct1t", + "fill": "$text-secondary", + "content": "25%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Yx0k9", + "name": "pct50", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "oVOgA", + "name": "pct2t", + "fill": "$text-secondary", + "content": "50%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fEHTb", + "name": "pct75", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "giEEn", + "name": "pct3t", + "fill": "$text-secondary", + "content": "75%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "huyjz", + "name": "pct100", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "eOfLu", + "name": "pct4t", + "fill": "$text-secondary", + "content": "100%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "0wBh7", + "name": "calcRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "HKImV", + "name": "calcLabel", + "fill": "$text-secondary", + "content": "交易数量", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "XlxcK", + "name": "calcValue", + "fill": "$text-primary", + "content": "56.4231 SOL", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "rbFBk", + "name": "Buy Button", + "width": "fill_container", + "height": 48, + "fill": "$profit-green", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "1cG6R", + "name": "buyCtaText", + "fill": "$text-inverse", + "content": "买入 SOL", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Kms72", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "8SNLu", + "name": "tabPill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "stroke": { + "thickness": 0, + "fill": "#00000000" + }, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "aQjUy", + "name": "tab1", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "vzTRs", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "Px785", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "Fzm3s", + "name": "tab2", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "yQV8B", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "at6zp", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "1iTYL", + "name": "tab3", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "9uVBa", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "UX687", + "name": "tab3Label", + "fill": "$tab-active-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "fp49I", + "name": "tab4", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "nJvfz", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "0knDI", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "8BvI0", + "name": "tab5", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "pos3x", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "Ta6HB", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "CMcqs", + "x": 1260, + "y": 0, + "name": "Asset - 资产", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "fKeDS", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BARLV", + "name": "statusTime", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "bXSvH", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "AJ3Mu", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "i4aQd", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "phYEC", + "name": "battIcon", + "width": 16, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "4W2hF", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "XC54i", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "CKhqq", + "name": "titleFrame", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 16, + 0, + 8, + 0 + ], + "children": [ + { + "type": "text", + "id": "apiSI", + "name": "titleText", + "fill": "$text-primary", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 22, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "UE6xC", + "name": "Account Tab Switcher", + "width": "fill_container", + "height": 40, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": 3, + "children": [ + { + "type": "frame", + "id": "lrfFL", + "name": "activeTab", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-primary", + "cornerRadius": "$radius-sm", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000D", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9l4HE", + "name": "activeTabText", + "fill": "$text-primary", + "content": "资金账户", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "agovx", + "name": "inactiveTab", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rgXZ0", + "name": "inactiveTabText", + "fill": "$text-secondary", + "content": "交易账户", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "59637", + "name": "Balance Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "text", + "id": "tLYXu", + "name": "balLabel", + "fill": "$text-secondary", + "content": "USDT 余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "XEYNj", + "name": "balAmount", + "fill": "$text-primary", + "content": "25,680.50", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "Gv8fV", + "name": "balSubRow", + "fill": "$text-muted", + "content": "≈ $25,680.50 USD", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "pIpHe", + "name": "Action Buttons", + "width": "fill_container", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "AvAll", + "name": "btn1", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "jdcr9", + "name": "btn1Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "fH001", + "name": "btn1Icon", + "width": 20, + "height": 20, + "iconFontName": "arrow-up-right", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "d4oJY", + "name": "btn1Label", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "HU0db", + "name": "btn2", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "xSq0b", + "name": "btn2Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "lv9yz", + "name": "btn2Icon", + "width": 20, + "height": 20, + "iconFontName": "arrow-down-left", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "XyeQa", + "name": "btn2Label", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "QPMYf", + "name": "btn3", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "maAt1", + "name": "btn3Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "HIjoy", + "name": "btn3Icon", + "width": 20, + "height": 20, + "iconFontName": "repeat", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "mMWqz", + "name": "btn3Label", + "fill": "$text-secondary", + "content": "划转", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "fLHtq", + "name": "Records Link", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "EA1S1", + "name": "recordsText", + "fill": "$text-primary", + "content": "充提记录", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "kCOxu", + "name": "recordsChevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "th9BG", + "name": "Holdings Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "FWkiU", + "name": "holdingsTitle", + "fill": "$text-primary", + "content": "交易账户持仓", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "duXZE", + "name": "holdingsViewAll", + "fill": "$text-secondary", + "content": "查看全部 >", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "6X6tC", + "name": "Holdings Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "dAt4j", + "name": "BTC Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ICsoT", + "name": "row1Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "SJNDJ", + "name": "row1Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Z2xNq", + "name": "row1AvatarText", + "fill": "$accent-primary", + "content": "B", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "fivxJ", + "name": "row1CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "3v1UB", + "name": "row1CoinName", + "fill": "$text-primary", + "content": "BTC", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "H8jVX", + "name": "row1CoinAmt", + "fill": "$text-secondary", + "content": "0.5000", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "vYJsU", + "name": "row1Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "4wUMy", + "name": "row1Value", + "fill": "$text-primary", + "content": "34,216.25 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "0i3Di", + "name": "row1Pnl", + "fill": "$profit-green", + "content": "+5.23%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "BCCbR", + "name": "divider1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "eK6vq", + "name": "ETH Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "SLRzk", + "name": "row2Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EjSIN", + "name": "row2Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AjVnl", + "name": "row2AvatarText", + "fill": "$accent-primary", + "content": "E", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Kxv3d", + "name": "row2CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "IKcO5", + "name": "row2CoinName", + "fill": "$text-primary", + "content": "ETH", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "BFOqG", + "name": "row2CoinAmt", + "fill": "$text-secondary", + "content": "2.1500", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2nLAg", + "name": "row2Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "CpKCf", + "name": "row2Value", + "fill": "$text-primary", + "content": "8,291.33 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "EMqjV", + "name": "row2Pnl", + "fill": "$profit-green", + "content": "+1.87%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "yejhE", + "name": "divider2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "jiSUK", + "name": "SOL Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "KdrG2", + "name": "row3Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3GQ5M", + "name": "row3Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "xrOkM", + "name": "row3AvatarText", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "5CsoQ", + "name": "row3CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "IXhrq", + "name": "row3CoinName", + "fill": "$text-primary", + "content": "SOL", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "7aIbt", + "name": "row3CoinAmt", + "fill": "$text-secondary", + "content": "120.00", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "IlWck", + "name": "row3Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "vOF03", + "name": "row3Value", + "fill": "$text-primary", + "content": "21,438.00 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "fSZRs", + "name": "row3Pnl", + "fill": "$loss-red", + "content": "-2.45%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "tQrXB", + "name": "Tab Bar", + "width": "fill_container", + "height": 83, + "fill": "$bg-primary", + "stroke": { + "thickness": { + "top": 1 + }, + "fill": "$border-default" + }, + "padding": [ + 8, + 16, + 24, + 16 + ], + "justifyContent": "space_around", + "children": [ + { + "type": "frame", + "id": "EfAeY", + "name": "tab1", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "pX5Nc", + "name": "tab1Icon", + "width": 22, + "height": 22, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "1bvxO", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Y298M", + "name": "tab2", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "dS2df", + "name": "tab2Icon", + "width": 22, + "height": 22, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "EuNdY", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "WKbhe", + "name": "tab3", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "msGZi", + "name": "tab3Icon", + "width": 22, + "height": 22, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "0kTPH", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "0XpKv", + "name": "tab4", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "c9haT", + "name": "tab4Icon", + "width": 22, + "height": 22, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + }, + { + "type": "text", + "id": "apOpf", + "name": "tab4Label", + "fill": "$accent-primary", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "p9jR2", + "name": "tab5", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "tVctw", + "name": "tab5Icon", + "width": 22, + "height": 22, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "yTnn7", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "nAG39", + "x": 0, + "y": 900, + "name": "Mine - 我的", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "eIzRC", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "irq0h", + "name": "Time", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "YV3L5", + "name": "Right Icons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "MbzpY", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "BfMdN", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "GsuB7", + "name": "batteryIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Fhlvb", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "YP9Ky", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "ABgyV", + "name": "Profile Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "dQn0m", + "name": "Top Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Z9fEg", + "name": "Left Section", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3sKSG", + "name": "Avatar", + "width": 48, + "height": 48, + "fill": "$accent-light", + "cornerRadius": 24, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "9NImh", + "name": "avatarText", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "7qeVY", + "name": "Name Column", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "twpN9", + "name": "userName", + "fill": "$text-primary", + "content": "sion123", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "gGF0d", + "name": "userBadge", + "fill": "$text-muted", + "content": "普通用户", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "icon_font", + "id": "TLieV", + "name": "chevronRight", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "UEdgT", + "name": "Divider", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "W1k1X", + "name": "Menu Group 1", + "clip": true, + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "rXQua", + "name": "Row - Welfare", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "l60jf", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "O1Qln", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "BhrLl", + "name": "row1Icon", + "width": 18, + "height": 18, + "iconFontName": "gift", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + } + ] + }, + { + "type": "text", + "id": "4S48w", + "name": "row1Label", + "fill": "$text-primary", + "content": "福利中心", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "0ZxkO", + "name": "row1Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "0ZpJF", + "name": "divider1", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "1jFeV", + "name": "Row - Verify", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "7fsKd", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WVapA", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XEhN1", + "name": "row2Icon", + "width": 18, + "height": 18, + "iconFontName": "shield-check", + "iconFontFamily": "lucide", + "fill": "$profit-green" + } + ] + }, + { + "type": "text", + "id": "fk6yj", + "name": "row2Label", + "fill": "$text-primary", + "content": "实名认证", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "AJgOv", + "name": "Right", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "CFqxt", + "name": "Verified Badge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 3, + 8 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ittTz", + "name": "badgeText", + "fill": "$profit-green", + "content": "已认证", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "MuyPO", + "name": "row2Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "t0cZV", + "name": "divider2", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "xUnjO", + "name": "Row - Security", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "UO9K3", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WNwG2", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "sUxeO", + "name": "row3Icon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "mRtSe", + "name": "row3Label", + "fill": "$text-primary", + "content": "安全设置", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "SStPc", + "name": "row3Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "DmRrH", + "name": "divider3", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "WC4eX", + "name": "Row - Notification", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "PRhmE", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "rxwzW", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "4VGr7", + "name": "row4Icon", + "width": 18, + "height": 18, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "HE89K", + "name": "row4Label", + "fill": "$text-primary", + "content": "消息通知", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "AEthh", + "name": "Right", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "DOxzc", + "name": "Red Dot", + "fill": "$loss-red", + "width": 8, + "height": 8 + }, + { + "type": "icon_font", + "id": "oyyk2", + "name": "row4Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "h5w96", + "name": "Menu Group 2", + "clip": true, + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "reQuE", + "name": "Row - Dark Mode", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "V3XTq", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "NPGZI", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "TaFL6", + "name": "mg2r1Icon", + "width": 18, + "height": 18, + "iconFontName": "moon", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "yreRz", + "name": "mg2r1Label", + "fill": "$text-primary", + "content": "深色模式", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "2WQBm", + "name": "Toggle Switch", + "width": 44, + "height": 24, + "fill": "$bg-tertiary", + "cornerRadius": 12, + "padding": 2, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "8pe2S", + "name": "Toggle Circle", + "fill": "$text-inverse", + "width": 20, + "height": 20 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "REiCr", + "name": "mg2divider1", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "3Et2r", + "name": "Row - Settings", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "6ZZhU", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "p244g", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "LWzmm", + "name": "mg2r2Icon", + "width": 18, + "height": 18, + "iconFontName": "settings", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "KjuCS", + "name": "mg2r2Label", + "fill": "$text-primary", + "content": "系统设置", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "ctMXf", + "name": "mg2r2Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "a40z1", + "name": "mg2divider2", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "FOqdo", + "name": "Row - About", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3whBP", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "3Ws02", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "oHEZZ", + "name": "mg2r3Icon", + "width": 18, + "height": 18, + "iconFontName": "info", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "DBOYq", + "name": "mg2r3Label", + "fill": "$text-primary", + "content": "关于我们", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "LI6oj", + "name": "mg2r3Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + }, + { + "type": "frame", + "id": "6ASa5", + "name": "Logout Button", + "width": "fill_container", + "height": 48, + "fill": "$loss-red-bg", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#DC262626" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "RfGX8", + "name": "logoutText", + "fill": "$loss-red", + "content": "退出登录", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "zXe1c", + "name": "Version Text", + "fill": "$text-muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "System Build v1.0.0", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "8n3Br", + "name": "Tab Bar Container", + "width": "fill_container", + "fill": "$bg-primary", + "padding": [ + 12, + 21, + 21, + 21 + ], + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "WRuVX", + "name": "Pill", + "width": "fill_container", + "height": 62, + "fill": "$surface-card", + "cornerRadius": 36, + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 4, + "justifyContent": "space_around", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "j6Oah", + "name": "Tab 1 - Home", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XZZoB", + "name": "tab1Icon", + "width": 18, + "height": 18, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "R0ZWR", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "5UBSV", + "name": "Tab 2 - Market", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "rXhyG", + "name": "tab2Icon", + "width": 18, + "height": 18, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "of96b", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "iepoP", + "name": "Tab 3 - Trade", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "1wSRf", + "name": "tab3Icon", + "width": 18, + "height": 18, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "Tr9uE", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "m3k6E", + "name": "Tab 4 - Assets", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "bmiCa", + "name": "tab4Icon", + "width": 18, + "height": 18, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "0v7TT", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "WSbHE", + "name": "Tab 5 - Mine", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "zXh5A", + "name": "tab5Icon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "V55sO", + "name": "tab5Label", + "fill": "$tab-active-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "zZ7Eo", + "x": 420, + "y": 900, + "name": "Transfer - 划转", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-primary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "aPMRA", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lEEVZ", + "name": "timeText", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "EhhRl", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "0Clvy", + "name": "sigIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "jKmTX", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "E77Rt", + "name": "batIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "qNNJc", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "BKVZA", + "name": "backBtn", + "width": 20, + "height": 20, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "s1fp5", + "name": "navTitle", + "fill": "$text-primary", + "content": "账户划转", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "0hiVv", + "name": "navSpacer", + "width": 20, + "height": 20 + } + ] + }, + { + "type": "frame", + "id": "b521w", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 24, + "padding": [ + 16, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "x0pIG", + "name": "Transfer Direction Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-xl", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "wYxHy", + "name": "Source Section", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "iMtVq", + "name": "srcLabel", + "fill": "$text-muted", + "content": "从", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "d3qNH", + "name": "Source Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "BHtIF", + "name": "srcLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "TIc74", + "name": "srcIconBg", + "fill": "#F59E0B1A", + "width": 36, + "height": 36 + }, + { + "type": "icon_font", + "id": "uBqWK", + "name": "srcWalletIcon", + "width": 20, + "height": 20, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "76bci", + "name": "srcName", + "fill": "$text-primary", + "content": "资金账户", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "y1CK9", + "name": "srcBalance", + "fill": "$text-primary", + "content": "¥ 25,680.50", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "UyCpT", + "name": "Swap Row", + "width": "fill_container", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EUoyW", + "name": "Swap Button", + "width": 36, + "height": 36, + "fill": "$accent-primary", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "SJxcm", + "name": "swapIcon", + "width": 18, + "height": 18, + "iconFontName": "arrow-up-down", + "iconFontFamily": "lucide", + "fill": "$text-inverse" + } + ] + } + ] + }, + { + "type": "frame", + "id": "NmXLn", + "name": "Destination Section", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "nusXa", + "name": "dstLabel", + "fill": "$text-muted", + "content": "到", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "lctgc", + "name": "Dest Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "W8p6K", + "name": "dstLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "DTKc8", + "name": "dstIconBg", + "fill": "#F59E0B1A", + "width": 36, + "height": 36 + }, + { + "type": "icon_font", + "id": "mhlfc", + "name": "dstTradeIcon", + "width": 20, + "height": 20, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "FzgoS", + "name": "dstName", + "fill": "$text-primary", + "content": "交易账户", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "uWQdX", + "name": "dstBalance", + "fill": "$text-primary", + "content": "¥ 0.00", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "CKQdb", + "name": "Amount Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "9Wsri", + "name": "amtLabelRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "iOSK2", + "name": "amtLabel", + "fill": "$text-secondary", + "content": "划转金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "f8BLd", + "name": "amtAllBtn", + "fill": "$gold-accent", + "content": "全部划转", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "dJfOl", + "name": "Amount Input", + "width": "fill_container", + "height": 56, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-lg", + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "U7YA4", + "name": "amtValue", + "fill": "$text-primary", + "content": "0.00", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "ZVdN7", + "name": "amtSuffix", + "fill": "$text-muted", + "content": "USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YCMzH", + "name": "Percent Buttons", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "CChhw", + "name": "pct25", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uBg6K", + "name": "pct25T", + "fill": "$text-secondary", + "content": "25%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "xdzZC", + "name": "pct50", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zPq3a", + "name": "pct50T", + "fill": "$text-secondary", + "content": "50%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "zhOSe", + "name": "pct75", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ofcz1", + "name": "pct75T", + "fill": "$text-secondary", + "content": "75%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vEMQv", + "name": "pct100", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tUi7W", + "name": "pct100T", + "fill": "$text-secondary", + "content": "100%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Bl8g2", + "name": "Tips Card", + "width": "fill_container", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-lg", + "gap": 8, + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "7ZQZc", + "name": "tipIcon", + "width": 16, + "height": 16, + "iconFontName": "info", + "iconFontFamily": "lucide", + "fill": "$profit-green" + }, + { + "type": "text", + "id": "sjoAi", + "name": "tipText", + "fill": "$profit-green", + "content": "划转即时到账,无需手续费", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "t490Z", + "name": "Confirm Button", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lWy0I", + "name": "confirmText", + "fill": "$text-inverse", + "content": "确认划转", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "OuHL8", + "x": 420, + "y": 1784, + "name": "FundOrders - 充提记录", + "theme": { + "mode": "light" + }, + "reusable": true, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "ofiKJ", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "VmB9y", + "name": "timeText", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "UwD48", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "nlold", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "eJceI", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "Y1js8", + "name": "batteryIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "OWjMF", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "v5YWq", + "name": "backIcon", + "width": 20, + "height": 20, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "FBu03", + "name": "navTitle", + "fill": "$text-primary", + "content": "充提记录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "aj8bo", + "name": "navSpacer", + "width": 20, + "height": 20 + } + ] + }, + { + "type": "frame", + "id": "DeTId", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "cIyVv", + "name": "Filter Padding", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 0, + 16 + ], + "children": [ + { + "type": "frame", + "id": "PNZSr", + "name": "Filter Tabs", + "width": "fill_container", + "height": 40, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": 3, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "MioCX", + "name": "Tab-Active", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-primary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SsWFJ", + "name": "tabAllText", + "fill": "$text-primary", + "content": "全部", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "hfcnO", + "name": "Tab-Inactive", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pAJmy", + "name": "tabDepositText", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "iwXLD", + "name": "Tab-Inactive", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "UGNtf", + "name": "tabWithdrawText", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "fQMcP", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "0ceOa", + "name": "Order Card 1 - Deposit Pending", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "iQ7IO", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "4gSqI", + "name": "c1Badge1", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "5qiTD", + "name": "c1Badge1Text", + "fill": "$profit-green", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "Dn4s3", + "name": "c1Badge2", + "fill": "#FEF3C7", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PYMLq", + "name": "c1Badge2Text", + "fill": "#D97706", + "content": "待确认", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "qOH7Z", + "name": "card1Amount", + "fill": "$text-primary", + "content": "+5,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "6vkr3", + "name": "Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "kYTHm", + "name": "c1Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "erqtu", + "name": "c1Row1Label", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "2OsJq", + "name": "c1Row1Value", + "fill": "$text-primary", + "content": "ORD20250101001", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "gIMGv", + "name": "c1Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "Hr97A", + "name": "c1Row2Label", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "6t7CT", + "name": "c1Row2Value", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "gDJXn", + "name": "c1Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "Ybo5o", + "name": "c1Row3Label", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Moq1b", + "name": "c1Row3Value", + "fill": "$text-primary", + "content": "2025-01-15 14:30", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "cozrF", + "name": "Actions", + "width": "fill_container", + "gap": 12, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "bGsxC", + "name": "c1BtnCancel", + "cornerRadius": "$radius-sm", + "stroke": { + "thickness": 1, + "fill": "$loss-red" + }, + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "jS64W", + "name": "c1BtnCancelText", + "fill": "$loss-red", + "content": "取消订单", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "YRDSl", + "name": "c1BtnPaid", + "fill": "$profit-green", + "cornerRadius": "$radius-sm", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rHHDc", + "name": "c1BtnPaidText", + "fill": "#FFFFFF", + "content": "已打款", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "dgJWv", + "name": "Order Card 2 - Deposit Completed", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "Eljps", + "name": "c2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "rUQuu", + "name": "c2Badge1", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "oZG5s", + "name": "c2Badge1Text", + "fill": "$profit-green", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "nPe6N", + "name": "c2Badge2", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "ls5OX", + "name": "c2Badge2Text", + "fill": "$profit-green", + "content": "已完成", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "4UCtZ", + "name": "c2Amount", + "fill": "$text-primary", + "content": "+10,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "AH6My", + "name": "c2Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "MBVnm", + "name": "c2Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "xXA5t", + "name": "c2Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "4t6Lz", + "name": "c2Row1V", + "fill": "$text-primary", + "content": "ORD20250102002", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "zdesT", + "name": "c2Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "WxdSE", + "name": "c2Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "yfBjo", + "name": "c2Row2V", + "fill": "$text-primary", + "content": "ERC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "3hgf3", + "name": "c2Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "oBA5N", + "name": "c2Row3L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "JY5xu", + "name": "c2Row3V", + "fill": "$text-primary", + "content": "2025-01-10 09:15", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "c2S3r", + "name": "Order Card 3 - Withdrawal Rejected", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "H8N4b", + "name": "c3Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "VeEeQ", + "name": "c3Badge1", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "aXxcg", + "name": "c3Badge1Text", + "fill": "$loss-red", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "NZlkx", + "name": "c3Badge2", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "BVB0K", + "name": "c3Badge2Text", + "fill": "$loss-red", + "content": "已拒绝", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "9Dc0z", + "name": "c3Amount", + "fill": "$text-primary", + "content": "-2,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "83NPE", + "name": "c3Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "QDEB9", + "name": "c3Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "S856r", + "name": "c3Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "uyCy8", + "name": "c3Row1V", + "fill": "$text-primary", + "content": "ORD20250103003", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "aEF90", + "name": "c3Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "q17rz", + "name": "c3Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "EDQGF", + "name": "c3Row2V", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "k9P0H", + "name": "c3Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "BmZTs", + "name": "c3Row3L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "mEt26", + "name": "c3Row3V", + "fill": "$text-primary", + "content": "2025-01-08 16:45", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "PfWw6", + "name": "c3Reason", + "fill": "$loss-red", + "content": "拒绝原因: 余额不足", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "GrLSl", + "name": "Order Card 4 - Withdrawal Processing", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "7QHk6", + "name": "c4Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "4Q7fY", + "name": "c4Badge1", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "E368B", + "name": "c4Badge1Text", + "fill": "$loss-red", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "5urSC", + "name": "c4Badge2", + "fill": "#FEF3C7", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "LE9Ee", + "name": "c4Badge2Text", + "fill": "#D97706", + "content": "审核中", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "z9JFV", + "name": "c4Amount", + "fill": "$text-primary", + "content": "-3,500.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "HoGHY", + "name": "c4Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "5UOJq", + "name": "c4Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "tl90B", + "name": "c4Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "BCxw2", + "name": "c4Row1V", + "fill": "$text-primary", + "content": "ORD20250104004", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "EcECo", + "name": "c4Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "jzD36", + "name": "c4Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "b4rkF", + "name": "c4Row2V", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "joN9L", + "name": "c4Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "aNOTL", + "name": "c4Row3L", + "fill": "$text-muted", + "content": "地址", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "zxpQr", + "name": "c4Row3V", + "fill": "$text-primary", + "content": "TJjK...x9m2", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "tPKpq", + "name": "c4Row4", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "B1yhj", + "name": "c4Row4L", + "fill": "$text-muted", + "content": "手续费", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "MqodB", + "name": "c4Row4V", + "fill": "$text-primary", + "content": "10%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "d0984", + "name": "c4Row5", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "iV4OX", + "name": "c4Row5L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "5XKng", + "name": "c4Row5V", + "fill": "$text-primary", + "content": "2025-01-12 11:20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "jQRIa", + "name": "c4Payable", + "width": "fill_container", + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "padding": [ + 8, + 12 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "gfJ6W", + "name": "c4PayableL", + "fill": "$text-secondary", + "content": "应付金额", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "76xmx", + "name": "c4PayableV", + "fill": "$text-primary", + "content": "3,150.00 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Q3Y0V", + "x": 1260, + "y": 900, + "name": "Welfare - 福利中心", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "wljX4", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "bMzFN", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "qAWJh", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "G104X", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "I7Pey", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "M52YI", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "hllhy", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "gap": 12, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "nKd2J", + "name": "backIcon", + "width": 24, + "height": 24, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "9mjCX", + "name": "navTitle", + "fill": "$text-primary", + "content": "福利中心", + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "GrT3F", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "wvnk8", + "name": "Referral Code Card", + "width": "fill_container", + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 180, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#F59E0B26", + "position": 0 + }, + { + "color": "#1F29370D", + "position": 1 + } + ] + }, + "cornerRadius": "$radius-xl", + "stroke": { + "thickness": 1, + "fill": "#F59E0B4D" + }, + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "QB4Dc", + "name": "Header Row", + "width": "fill_container", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "zQONr", + "name": "giftIcon", + "width": 24, + "height": 24, + "iconFontName": "gift", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "AoWK9", + "name": "headerTitle", + "fill": "$text-primary", + "content": "我的邀请码", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "8INL2", + "name": "refCode", + "fill": "$gold-accent", + "content": "MONI-8K3F2X", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "800", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "gYPDO", + "name": "Copy Button", + "width": "fill_container", + "height": 40, + "fill": "$gold-accent", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zuhiM", + "name": "copyBtnText", + "fill": "$text-inverse", + "content": "复制邀请码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "lexCP", + "name": "New User Bonus Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "rRllw", + "name": "Bonus Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "XBfAO", + "name": "bonusTitle", + "fill": "$text-primary", + "content": "新人福利", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "nF1hM", + "name": "Available Badge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 4, + 10 + ], + "children": [ + { + "type": "text", + "id": "urm2b", + "name": "badgeText", + "fill": "$profit-green", + "content": "可领取", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "QCzBx", + "name": "amountText", + "fill": "$profit-green", + "content": "+100 USDT", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800" + }, + { + "type": "text", + "id": "U0cDO", + "name": "descText", + "fill": "$text-secondary", + "content": "完成首次充值即可领取", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "jSSvV", + "name": "Claim Button", + "width": "fill_container", + "height": 44, + "fill": "$profit-green", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "mibsS", + "name": "claimBtnText", + "fill": "$text-inverse", + "content": "立即领取", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "mddKH", + "name": "Referral Rewards Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "pdXR9", + "name": "Section Header", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "dXRDL", + "name": "secTitle", + "fill": "$text-primary", + "content": "推广奖励", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "HrdAz", + "name": "secDesc", + "fill": "$text-muted", + "content": "每邀请一位好友充值达标,奖励100 USDT", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "FDmQu", + "name": "Referral List Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "Ovodm", + "name": "Row 1 - Achieved", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "PvBYZ", + "name": "Row1 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Edv8O", + "name": "Row1 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "pa7fg", + "name": "avatar1", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "mu0jm", + "name": "name1", + "fill": "$text-primary", + "content": "user_abc", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "13st1", + "name": "deposit1", + "fill": "$text-secondary", + "content": "充值: ¥5,000", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "cgDsh", + "name": "Claim Small", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 6, + 14 + ], + "children": [ + { + "type": "text", + "id": "tIglK", + "name": "claimSmallText", + "fill": "$profit-green", + "content": "领取", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Bdng6", + "name": "Progress 1", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "l2OzF", + "name": "fill", + "fill": "$profit-green", + "width": "fill_container", + "height": 6 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "E38xk", + "name": "Divider 1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "tT0rZ", + "name": "Row 2 - In Progress", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "rr96b", + "name": "Row2 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "lVEef", + "name": "Row2 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "PTbiS", + "name": "avatar2", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "yLSZF", + "name": "name2", + "fill": "$text-primary", + "content": "user_def", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "A4CKf", + "name": "deposit2", + "fill": "$text-secondary", + "content": "充值: ¥1,200", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "CemFu", + "name": "Progress Badge", + "fill": "#FEF3C7", + "cornerRadius": "$radius-sm", + "padding": [ + 6, + 14 + ], + "children": [ + { + "type": "text", + "id": "a5jXl", + "name": "progressBadgeText", + "fill": "#D97706", + "content": "进行中", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "FH2iK", + "name": "Progress 2", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "vKLth", + "name": "fill", + "fill": "$gold-accent", + "width": 52, + "height": 6 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "OGjAO", + "name": "Divider 2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "GVLIs", + "name": "Row 3 - New", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "Cy7ty", + "name": "Row3 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "v3yUP", + "name": "Row3 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "OCUTU", + "name": "avatar3", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "TZxRR", + "name": "name3", + "fill": "$text-primary", + "content": "user_ghi", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "C74Jx", + "name": "deposit3", + "fill": "$text-secondary", + "content": "充值: ¥0", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "br1Jx", + "name": "pendingText", + "fill": "$text-muted", + "content": "待达标", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "2XD9g", + "name": "Progress 3", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jgboa", + "name": "Rules Card", + "width": "fill_container", + "fill": "$bg-tertiary", + "cornerRadius": "$radius-lg", + "layout": "vertical", + "gap": 8, + "padding": [ + 16, + 20 + ], + "children": [ + { + "type": "text", + "id": "C3zQG", + "name": "rulesTitle", + "fill": "$text-primary", + "content": "奖励规则", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + }, + { + "type": "text", + "id": "RvjD8", + "name": "rule1", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 新用户注册完成实名认证奖励 100 USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "uWTo4", + "name": "rule2", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 邀请好友充值每达 1000 USDT,双方各获得 100 USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "LWUte", + "name": "rule3", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 奖励直接发放至资金账户", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "aJw0d", + "x": 0, + "y": 1800, + "name": "Login - 登录", + "theme": { + "mode": "light" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 48, + "padding": [ + 100, + 32, + 40, + 32 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "967mH", + "name": "spacer_top", + "width": "fill_container", + "height": 100, + "layout": "vertical" + }, + { + "type": "frame", + "id": "KBusV", + "name": "brand_section", + "layout": "vertical", + "gap": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "dRbZm", + "name": "brand_mark", + "width": 80, + "height": 80, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "Onjps", + "x": 0, + "y": 0, + "name": "logo_ellipse", + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 180, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#1F2937", + "position": 0 + }, + { + "color": "#374151", + "position": 1 + } + ] + }, + "width": 80, + "height": 80 + }, + { + "type": "text", + "id": "tveOR", + "x": 28, + "y": 22, + "name": "logo_letter", + "fill": "$text-inverse", + "content": "M", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "800" + } + ] + }, + { + "type": "text", + "id": "x1sC8", + "name": "brand_name", + "fill": "$text-primary", + "content": "MONISUO", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800", + "letterSpacing": 3 + }, + { + "type": "text", + "id": "g12RF", + "name": "tagline", + "fill": "$text-secondary", + "content": "虚拟货币模拟交易平台", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "k3MhR", + "name": "gap_frame", + "width": "fill_container", + "height": 48, + "layout": "vertical" + }, + { + "type": "frame", + "id": "akrEM", + "name": "form_section", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 32 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9siyO", + "name": "username_input", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "vQMYo", + "name": "user_icon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "C7iPH", + "name": "username_placeholder", + "fill": "$text-muted", + "content": "请输入用户名", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Wx76c", + "name": "password_input", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "9MJWO", + "name": "lock_icon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "iXGjW", + "name": "password_placeholder", + "fill": "$text-muted", + "content": "请输入密码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "reJdM", + "name": "password_spacer", + "width": "fill_container", + "height": "fit_content(0)" + }, + { + "type": "icon_font", + "id": "Rk7hO", + "name": "eye_icon", + "width": 18, + "height": 18, + "iconFontName": "eye-off", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "ZniLT", + "name": "btn_gap", + "width": "fill_container", + "height": 8, + "layout": "vertical" + }, + { + "type": "frame", + "id": "As0gi", + "name": "login_btn", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pOAW2", + "name": "login_btn_text", + "fill": "$text-inverse", + "content": "登录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "PGjjk", + "name": "bottom_spacer", + "width": "fill_container", + "height": "fit_content(0)", + "fill": "#00000000", + "layout": "vertical" + }, + { + "type": "frame", + "id": "3Udq4", + "name": "bottom_section", + "width": "fill_container", + "gap": 4, + "padding": [ + 0, + 0, + 40, + 0 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "xcWvl", + "name": "no_account_text", + "fill": "$text-secondary", + "content": "还没有账户?", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "m9irK", + "name": "register_link", + "fill": "$gold-accent", + "content": "立即注册", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "3ROpQ", + "name": "Brand", + "layout": "vertical", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QOmwS", + "name": "logoCircle", + "width": 80, + "height": 80, + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 0, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#1F2937", + "position": 0 + }, + { + "color": "#374151", + "position": 1 + } + ] + }, + "cornerRadius": 40, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Bhnw7", + "name": "logoText", + "fill": "#FFFFFF", + "content": "M", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "800" + } + ] + }, + { + "type": "text", + "id": "9oQ5q", + "name": "brandName", + "fill": "$text-primary", + "content": "MONISUO", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800", + "letterSpacing": 3 + }, + { + "type": "text", + "id": "hxBwV", + "name": "tagline", + "fill": "$text-secondary", + "content": "虚拟货币模拟交易平台", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "OwWxd", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "hauaW", + "name": "UserInput", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "3byQP", + "name": "userIcon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "irrck", + "name": "userPlaceholder", + "fill": "$text-muted", + "content": "请输入用户名", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LUlEC", + "name": "PwdInput", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gnJ7P", + "name": "pwdLeft", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "gsbWV", + "name": "pwdIcon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "z4fR0", + "name": "pwdPlaceholder", + "fill": "$text-muted", + "content": "请输入密码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "icon_font", + "id": "t1igT", + "name": "pwdEye", + "width": 18, + "height": 18, + "iconFontName": "eye-off", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "456qA", + "name": "LoginBtn", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "nyBLI", + "name": "loginText", + "fill": "$text-inverse", + "content": "登录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "3nQMS", + "name": "RegisterRow", + "gap": 4, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "Hdc4Q", + "name": "regText1", + "fill": "$text-secondary", + "content": "还没有账户?", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RSi4E", + "name": "regText2", + "fill": "$gold-accent", + "content": "立即注册", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "LUbBm", + "x": 0, + "y": 2700, + "name": "Home - 首页 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "zAZAt", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "oP5Hz", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "PI2RT", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "WaWLm", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "pxsnw", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "w7a3b", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "oiFkz", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "6J8Al", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "7YC0G", + "name": "Header", + "width": "fill_container", + "padding": [ + 16, + 4, + 12, + 4 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "3j64A", + "name": "logo", + "fill": "$text-primary", + "content": "MONISUO", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700", + "letterSpacing": 1 + }, + { + "type": "frame", + "id": "EIr2O", + "name": "headerActions", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "kEueB", + "name": "searchBtn", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "YwKBL", + "name": "searchIcon", + "width": 18, + "height": 18, + "iconFontName": "search", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "OSNE2", + "name": "bellBtn2", + "width": 32, + "height": 32, + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "cZ41Q", + "name": "bellIcon2", + "width": 18, + "height": 18, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "gineS", + "name": "avatar2", + "width": 32, + "height": 32, + "fill": "$accent-primary", + "cornerRadius": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "H53Lb", + "name": "avatarTxt2", + "fill": "$text-inverse", + "content": "A", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "zqAdk", + "name": "Asset Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "UFkqm", + "name": "cardHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "IhDa5", + "name": "cardHeaderLeft", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "T6Bwm", + "name": "cardLabel", + "fill": "$text-secondary", + "content": "预估总资产 (USDT)", + "fontFamily": "Inter", + "fontSize": 13 + }, + { + "type": "icon_font", + "id": "6a1op", + "name": "eyeBtn3", + "width": 15, + "height": 15, + "iconFontName": "eye", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "HJ3bx", + "name": "cardDepBtn", + "fill": "$accent-primary", + "cornerRadius": "$radius-sm", + "gap": 4, + "padding": [ + 5, + 10 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "3jQvl", + "name": "cardDepIcn", + "width": 13, + "height": 13, + "iconFontName": "plus", + "iconFontFamily": "lucide", + "fill": "$text-inverse" + }, + { + "type": "text", + "id": "M9u4g", + "name": "cardDepTxt", + "fill": "$text-inverse", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "ll96b", + "name": "valRow", + "width": "fill_container", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "nq0Vn", + "name": "bigVal", + "fill": "$text-primary", + "content": "12,458.36", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700", + "letterSpacing": -0.5 + }, + { + "type": "text", + "id": "Ivvov", + "name": "cnyVal", + "fill": "$text-muted", + "content": "≈ ¥90,523.18 CNY", + "fontFamily": "Inter", + "fontSize": 12 + } + ] + }, + { + "type": "rectangle", + "id": "tFLDZ", + "name": "div1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "OXk2F", + "name": "profitRow2", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "sLjUW", + "name": "pCol1", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "CPden", + "name": "pLbl1", + "fill": "$text-muted", + "content": "今日盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "1zzDX", + "name": "pVal1", + "fill": "$profit-green", + "content": "+126.50 (+1.03%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "rectangle", + "id": "iFOsc", + "name": "divV2", + "fill": "$border-default", + "width": 1, + "height": "fill_container" + }, + { + "type": "frame", + "id": "0ARzS", + "name": "pCol2", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "padding": [ + 0, + 0, + 0, + 16 + ], + "children": [ + { + "type": "text", + "id": "sZZem", + "name": "pLbl2", + "fill": "$text-muted", + "content": "总盈亏", + "fontFamily": "Inter", + "fontSize": 11 + }, + { + "type": "text", + "id": "S9kKH", + "name": "pVal2", + "fill": "$profit-green", + "content": "+2,458.36 (+24.58%)", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "cysDA", + "name": "Quick Actions", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 16, + "justifyContent": "space_around", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "YNy57", + "name": "a1", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "MMQqW", + "name": "a1Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "0jA1P", + "name": "a1IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-up-right", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "J0ljf", + "name": "a1Txt", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "nCJGO", + "name": "a2", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "fEJQK", + "name": "a2Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "gJw3v", + "name": "a2IconF", + "width": 18, + "height": 18, + "iconFontName": "arrow-down-left", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "fVkzu", + "name": "a2Txt", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "5qNOa", + "name": "a3", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "iA5dL", + "name": "a3Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "um83S", + "name": "a3IconF", + "width": 18, + "height": 18, + "iconFontName": "repeat", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "0Fj35", + "name": "a3Txt", + "fill": "$text-secondary", + "content": "划转", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hxIHE", + "name": "a4", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "MZLjR", + "name": "a4Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "ucInj", + "name": "a4IconF", + "width": 18, + "height": 18, + "iconFontName": "pie-chart", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "4Gii9", + "name": "a4Txt", + "fill": "$text-secondary", + "content": "盈亏", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "HUFBG", + "name": "a5", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5nbEn", + "name": "a5Icon", + "width": 40, + "height": 40, + "fill": "#F3F4F6", + "cornerRadius": 10, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "iNmAA", + "name": "a5IconF", + "width": 18, + "height": 18, + "iconFontName": "file-text", + "iconFontFamily": "lucide", + "fill": "#4B5563" + } + ] + }, + { + "type": "text", + "id": "b2Eyv", + "name": "a5Txt", + "fill": "$text-secondary", + "content": "账单", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "3pKtO", + "name": "Hot Coins Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "Z1UTY", + "name": "sectionHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "5hJ4E", + "name": "hotTitle", + "fill": "$text-primary", + "content": "热门币种", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "U1OEQ", + "name": "hotMore", + "fill": "$text-muted", + "content": "更多", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "xbgzR", + "name": "coinList", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "4vZwO", + "name": "coinRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "DetUG", + "name": "c1Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "CX7bz", + "name": "btcIcon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "iTZIa", + "name": "coin1Sym", + "fill": "$text-inverse", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "QkRpO", + "name": "c1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "orFe3", + "name": "coin1Name", + "fill": "$text-primary", + "content": "BTC/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "GVEmc", + "name": "coin1Vol", + "fill": "$text-muted", + "content": "Bitcoin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "h8XJ5", + "name": "c1Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "caGG5", + "name": "coin1Price", + "fill": "$text-primary", + "content": "68,432.50", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "HYqaq", + "name": "coin1Chg", + "fill": "$profit-green", + "content": "+2.35%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "zAUwf", + "name": "divCoin1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "I0FtT", + "name": "coinRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "itYGV", + "name": "c2Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "PKqQg", + "name": "ethIcon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "A3N6B", + "name": "c2Sym", + "fill": "$text-inverse", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "474kG", + "name": "c2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "4FzFw", + "name": "c2Name", + "fill": "$text-primary", + "content": "ETH/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "nVMZ9", + "name": "c2Vol", + "fill": "$text-muted", + "content": "Ethereum", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "KkjmZ", + "name": "c2Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "8rrNQ", + "name": "c2Price", + "fill": "$text-primary", + "content": "3,856.20", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "QV4Kd", + "name": "c2Chg", + "fill": "$profit-green", + "content": "+1.82%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "QV7YX", + "name": "divCoin2", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "KzU2s", + "name": "coinRow3", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5r2U4", + "name": "c3Left", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ugDg8", + "name": "solIcon", + "width": 36, + "height": 36, + "fill": "#9945FF", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "o40RW", + "name": "c3Sym", + "fill": "$text-inverse", + "content": "S", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "U0v1v", + "name": "c3Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "eZNoc", + "name": "c3Name", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "zY6jH", + "name": "c3Vol", + "fill": "$text-muted", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "ufcch", + "name": "c3Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "3DCRq", + "name": "c3Price", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "zvuBl", + "name": "c3Chg", + "fill": "$loss-red", + "content": "-0.94%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "3hrij", + "name": "Holdings Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 4, + 0, + 0, + 0 + ], + "children": [ + { + "type": "frame", + "id": "jzcDA", + "name": "holdHeader", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Wusqu", + "name": "holdTitle", + "fill": "$text-primary", + "content": "我的持仓", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "pxxZo", + "name": "holdMore", + "fill": "$text-muted", + "content": "全部", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Awa41", + "name": "holdList", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "alKLc", + "name": "hRow1", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9yGkj", + "name": "h1L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "K90is", + "name": "h1Icon", + "width": 36, + "height": 36, + "fill": "#F7931A", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "iwOpE", + "name": "h1Sym", + "fill": "$text-inverse", + "content": "₿", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "LrDM7", + "name": "h1Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "6sFgI", + "name": "h1Name", + "fill": "$text-primary", + "content": "BTC", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "SYRPe", + "name": "h1Amt", + "fill": "$text-muted", + "content": "0.2356 BTC", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "lpKaC", + "name": "h1R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "Ima7l", + "name": "h1Val", + "fill": "$text-primary", + "content": "¥103,427.80", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "XULAd", + "name": "h1Pnl", + "fill": "$profit-green", + "content": "+¥2,432.50", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "U49JW", + "name": "hdiv1", + "fill": "$border-muted", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "xq8nl", + "name": "hRow2", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "qRnIE", + "name": "h2L", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "enyPT", + "name": "h2Icon", + "width": 36, + "height": 36, + "fill": "#627EEA", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ddOyM", + "name": "h2Sym", + "fill": "$text-inverse", + "content": "Ξ", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "AGwcf", + "name": "h2Info", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "P8IqY", + "name": "h2Name", + "fill": "$text-primary", + "content": "ETH", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "OYvYW", + "name": "h2Amt", + "fill": "$text-muted", + "content": "1.528 ETH", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "mESS9", + "name": "h2R", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "SH3o1", + "name": "h2Val", + "fill": "$text-primary", + "content": "¥27,867.60", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "1URFc", + "name": "h2Pnl", + "fill": "$loss-red", + "content": "-¥412.30", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "zn9OE", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "1ZNhk", + "name": "tabPill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "stroke": { + "thickness": 0, + "fill": "#00000000" + }, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "3n1yJ", + "name": "tab1", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "elh4F", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "KTqU4", + "name": "tab1Label", + "fill": "$tab-active-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "8gdHi", + "name": "tab2", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "70sgI", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "EYvcX", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "fUmUz", + "name": "tab3", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Pt2lw", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "AJZJs", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "W3XM7", + "name": "tab4", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "VDDl5", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "C9M4I", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "V8csz", + "name": "tab5", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "H04A3", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "oeyN8", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "DFdNM", + "x": 420, + "y": 2700, + "name": "Market - 行情 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "SjODj", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "fnDQc", + "name": "timeL", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "m1he6", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "63CBU", + "name": "sig", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "OzDW8", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "lycw3", + "name": "bat", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "MU2Q5", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "vSNPf", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "nQ4E5", + "name": "Header", + "width": "fill_container", + "padding": [ + 16, + 0, + 8, + 0 + ], + "children": [ + { + "type": "text", + "id": "5vv9N", + "name": "htitle", + "fill": "$text-primary", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 22, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Bc1w1", + "name": "Featured Cards", + "width": "fill_container", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "krwOv", + "name": "BTC Card", + "width": "fill_container", + "height": 130, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "xNWze", + "name": "btcLabel", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "nqzv3", + "name": "btcName", + "fill": "$text-primary", + "content": "BTC/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "Otaz1", + "name": "btcBadge", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "btr4h", + "name": "btcBadgeT", + "fill": "$profit-green", + "content": "+2.35%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "5gupc", + "name": "btcPrice", + "fill": "$text-primary", + "content": "68,432.50", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "Cx1WA", + "name": "btcSub", + "fill": "$text-secondary", + "content": "Bitcoin", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "Met2q", + "name": "barRow", + "width": "fill_container", + "height": 24, + "gap": 3, + "justifyContent": "end", + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "1muQH", + "name": "bar1", + "fill": "$profit-green", + "width": "fill_container", + "height": 10 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Kji38", + "name": "bar2", + "fill": "$profit-green", + "width": "fill_container", + "height": 18 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "ADTwz", + "name": "bar3", + "fill": "$profit-green", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "57f0b", + "name": "bar4", + "fill": "$profit-green", + "width": "fill_container", + "height": 24 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "dWzeB", + "name": "bar5", + "fill": "$profit-green", + "width": "fill_container", + "height": 16 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "A9lHY", + "name": "bar6", + "fill": "$profit-green", + "width": "fill_container", + "height": 20 + } + ] + } + ] + }, + { + "type": "frame", + "id": "Td9jS", + "name": "ETH Card", + "width": "fill_container", + "height": 130, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "WqTuR", + "name": "ethLabel", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "CoEry", + "name": "ethName", + "fill": "$text-primary", + "content": "ETH/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "d3GK0", + "name": "ethBadge", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "S250i", + "name": "ethBadgeT", + "fill": "$profit-green", + "content": "+1.82%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "VYHvl", + "name": "ethPrice", + "fill": "$text-primary", + "content": "3,856.20", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "XBrsj", + "name": "ethSub", + "fill": "$text-secondary", + "content": "Ethereum", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "XIFOV", + "name": "ethBarRow", + "width": "fill_container", + "height": 24, + "gap": 3, + "justifyContent": "end", + "alignItems": "end", + "children": [ + { + "type": "rectangle", + "cornerRadius": 2, + "id": "6ZzNE", + "name": "ebar1", + "fill": "$profit-green", + "width": "fill_container", + "height": 8 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "jvRnI", + "name": "ebar2", + "fill": "$profit-green", + "width": "fill_container", + "height": 14 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "Gg6rc", + "name": "ebar3", + "fill": "$profit-green", + "width": "fill_container", + "height": 20 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "0xiAk", + "name": "ebar4", + "fill": "$profit-green", + "width": "fill_container", + "height": 12 + }, + { + "type": "rectangle", + "cornerRadius": 2, + "id": "4XAKq", + "name": "ebar5", + "fill": "$profit-green", + "width": "fill_container", + "height": 22 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "AAGkv", + "name": "secHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ya7e3", + "name": "secTitle", + "fill": "$text-primary", + "content": "全部币种", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "KmBEl", + "name": "secMore", + "fill": "$text-secondary", + "content": "更多 >", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "JwFRm", + "name": "Coin List", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "wgWUP", + "name": "SOL Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "m0vXu", + "name": "solLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "SQD7C", + "name": "SOL Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "9877w", + "x": 0, + "y": 0, + "name": "solEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "Aysci", + "x": 13, + "y": 10, + "name": "solLetter", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "sdCNw", + "name": "solInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "gqnR2", + "name": "solPair", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "lomH0", + "name": "solFull", + "fill": "$text-secondary", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "JNRUD", + "name": "solRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "LGDCx", + "name": "solPrice", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "D9mDe", + "name": "solChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "e6GbE", + "name": "solChangeT", + "fill": "$loss-red", + "content": "-0.94%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "ycUcz", + "name": "div1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "hDY8N", + "name": "BNB Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "M5HMn", + "name": "bnbLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ipABc", + "name": "BNB Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "4z6sG", + "x": 0, + "y": 0, + "name": "bnbEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "dDbxz", + "x": 13, + "y": 10, + "name": "bnbLetter", + "fill": "$accent-primary", + "content": "B", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Drp5f", + "name": "bnbInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "ZMwkk", + "name": "bnbPair", + "fill": "$text-primary", + "content": "BNB/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "VhwkL", + "name": "bnbFull", + "fill": "$text-secondary", + "content": "Binance Coin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "BCAp0", + "name": "bnbRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "vpJNN", + "name": "bnbPrice", + "fill": "$text-primary", + "content": "612.30", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "WfQiY", + "name": "bnbChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "vlSfz", + "name": "bnbCT", + "fill": "$profit-green", + "content": "+1.45%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "WmJ74", + "name": "div2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "r4RSt", + "name": "XRP Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "HZ8Xp", + "name": "xrpLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "w07zx", + "name": "XRP Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "pAsA5", + "x": 0, + "y": 0, + "name": "xrpEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "5jMwr", + "x": 13, + "y": 10, + "name": "xrpLetter", + "fill": "$accent-primary", + "content": "X", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "S3FHn", + "name": "xrpInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "lyUlC", + "name": "xrpPair", + "fill": "$text-primary", + "content": "XRP/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "vKKUJ", + "name": "xrpFull", + "fill": "$text-secondary", + "content": "Ripple", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "zIkjB", + "name": "xrpRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "71M4I", + "name": "xrpPrice", + "fill": "$text-primary", + "content": "0.6234", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "3FaPA", + "name": "xrpChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "p5epj", + "name": "xrpCT", + "fill": "$loss-red", + "content": "-1.22%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "x6uqf", + "name": "div3", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "3emMz", + "name": "DOGE Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5lbon", + "name": "dogeLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "RWxZb", + "name": "DOGE Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "NQwwm", + "x": 0, + "y": 0, + "name": "dogeEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "WDQXm", + "x": 13, + "y": 10, + "name": "dogeLetter", + "fill": "$accent-primary", + "content": "D", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "vU72l", + "name": "dogeInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "uA7gF", + "name": "dogePair", + "fill": "$text-primary", + "content": "DOGE/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "WBrln", + "name": "dogeFull", + "fill": "$text-secondary", + "content": "Dogecoin", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "YZkDh", + "name": "dogeRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "mXrWl", + "name": "dogePrice", + "fill": "$text-primary", + "content": "0.1523", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "965XO", + "name": "dogeChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "SJWBS", + "name": "dogeCT", + "fill": "$profit-green", + "content": "+5.67%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "1H7yy", + "name": "div4", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "yUIx9", + "name": "ADA Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "vNGUZ", + "name": "adaLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "y4qwK", + "name": "ADA Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "Bjk7E", + "x": 0, + "y": 0, + "name": "adaEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "Yu2ql", + "x": 13, + "y": 10, + "name": "adaLetter", + "fill": "$accent-primary", + "content": "A", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "dvEC8", + "name": "adaInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "VROww", + "name": "adaPair", + "fill": "$text-primary", + "content": "ADA/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "fVYLi", + "name": "adaFull", + "fill": "$text-secondary", + "content": "Cardano", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "FlVUJ", + "name": "adaRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "ExfyX", + "name": "adaPrice", + "fill": "$text-primary", + "content": "0.4521", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "9xeKF", + "name": "adaChange", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "c8KiX", + "name": "adaCT", + "fill": "$loss-red", + "content": "-2.13%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "XsTRd", + "name": "div5", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "XyT7q", + "name": "DOT Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "JxU1d", + "name": "dotLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tYBAq", + "name": "DOT Avatar", + "width": 36, + "height": 36, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "09sH1", + "x": 0, + "y": 0, + "name": "dotEllipse", + "fill": "$accent-light", + "width": 36, + "height": 36 + }, + { + "type": "text", + "id": "csdhk", + "x": 13, + "y": 10, + "name": "dotLetter", + "fill": "$accent-primary", + "content": "D", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "93Dqt", + "name": "dotInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "u5Q1V", + "name": "dotPair", + "fill": "$text-primary", + "content": "DOT/USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + }, + { + "type": "text", + "id": "d203A", + "name": "dotFull", + "fill": "$text-secondary", + "content": "Polkadot", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "czapB", + "name": "dotRight", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "Im0CQ", + "name": "dotPrice", + "fill": "$text-primary", + "content": "7.85", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "w16TU", + "name": "dotChange", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 2, + 6 + ], + "children": [ + { + "type": "text", + "id": "7mFMG", + "name": "dotCT", + "fill": "$profit-green", + "content": "+0.98%", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jfDye", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "children": [ + { + "type": "frame", + "id": "tvoZb", + "name": "Tab Pill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "OZNIt", + "name": "Tab Home", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Sd80G", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "F0ClM", + "name": "tab1Text", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "G80st", + "name": "Tab Market", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "mkBFx", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "JI6Fd", + "name": "tab2Text", + "fill": "$tab-active-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "vAHSb", + "name": "Tab Trade", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "5yMLQ", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "40z2Q", + "name": "tab3Text", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "6GPHO", + "name": "Tab Asset", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XZAcK", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "HqZDK", + "name": "tab4Text", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "wGhTG", + "name": "Tab Me", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "jOvoQ", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "q6kQL", + "name": "tab5Text", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "xFsZJ", + "x": 840, + "y": 2700, + "name": "Trade - 交易 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "8QjJz", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ywWWO", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "i2M3V", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Ij9Kn", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "wOh2l", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "qkT7m", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "HYC6j", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "HMITD", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "RLj1i", + "name": "Coin Selector Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 16, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "oPHLY", + "name": "coinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "O5BqD", + "name": "coinPair", + "fill": "$text-primary", + "content": "SOL/USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "text", + "id": "Mnfy8", + "name": "coinName", + "fill": "$text-secondary", + "content": "Solana", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "icon_font", + "id": "p2VcW", + "name": "chevronDown", + "width": 16, + "height": 16, + "iconFontName": "chevron-down", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "frame", + "id": "s3AlO", + "name": "Price Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 8, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "YOOaR", + "name": "priceRow", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AUl6z", + "name": "priceValue", + "fill": "$text-primary", + "content": "178.65", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "0WgiW", + "name": "changeBadge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "HvgEA", + "name": "changeText", + "fill": "$profit-green", + "content": "+1.45%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "tEx05", + "name": "priceSubtitle", + "fill": "$text-muted", + "content": "24h 变化", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "SieAW", + "name": "Buy/Sell Toggle", + "clip": true, + "width": "fill_container", + "cornerRadius": "$radius-md", + "children": [ + { + "type": "frame", + "id": "UuxVe", + "name": "buyBtn", + "width": "fill_container", + "height": 40, + "fill": "$profit-green", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PAuxE", + "name": "buyLabel", + "fill": "$text-inverse", + "content": "买入", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "beDjW", + "name": "sellBtn", + "width": "fill_container", + "height": 40, + "fill": "$surface-card", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "mfs2L", + "name": "sellLabel", + "fill": "$text-secondary", + "content": "卖出", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "wcIXS", + "name": "Trade Form Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "r50hs", + "name": "amountLabelRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pI5Vv", + "name": "labelLeft", + "fill": "$text-secondary", + "content": "交易金额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "J7cjL", + "name": "labelRight", + "fill": "$text-primary", + "content": "USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "soXhk", + "name": "inputField", + "width": "fill_container", + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "2lBOp", + "name": "placeholder", + "fill": "$text-muted", + "content": "请输入金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "oiKLj", + "name": "availText", + "fill": "$text-muted", + "content": "可用: 10,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "UVehx", + "name": "pctRow", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "v1iLl", + "name": "pct25", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "63AiD", + "name": "pct1t", + "fill": "$text-secondary", + "content": "25%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "T3Q1X", + "name": "pct50", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Qq0Oz", + "name": "pct2t", + "fill": "$text-secondary", + "content": "50%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "5vrZW", + "name": "pct75", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JOdyF", + "name": "pct3t", + "fill": "$text-secondary", + "content": "75%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "qsFfa", + "name": "pct100", + "width": "fill_container", + "height": 32, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "86ChL", + "name": "pct4t", + "fill": "$text-secondary", + "content": "100%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "5PD5e", + "name": "calcRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "4qW6Y", + "name": "calcLabel", + "fill": "$text-secondary", + "content": "交易数量", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "64sqe", + "name": "calcValue", + "fill": "$text-primary", + "content": "56.4231 SOL", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "u51ee", + "name": "Buy Button", + "width": "fill_container", + "height": 48, + "fill": "$profit-green", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "24fmE", + "name": "buyCtaText", + "fill": "#FFFFFF", + "content": "买入 SOL", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "PNO78", + "name": "Tab Bar", + "width": "fill_container", + "fill": "$bg-primary", + "layout": "vertical", + "padding": [ + 8, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Gxngk", + "name": "tabPill", + "width": "fill_container", + "height": 48, + "fill": "$bg-primary", + "cornerRadius": 24, + "stroke": { + "thickness": 0, + "fill": "#00000000" + }, + "padding": 2, + "children": [ + { + "type": "frame", + "id": "Icrcv", + "name": "tab1", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "v4eS1", + "name": "tab1Icon", + "width": 16, + "height": 16, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "EGmU8", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "N92fo", + "name": "tab2", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Gu2ly", + "name": "tab2Icon", + "width": 16, + "height": 16, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "cJrP8", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "0DtPy", + "name": "tab3", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Y1rF5", + "name": "tab3Icon", + "width": 16, + "height": 16, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "BEwNb", + "name": "tab3Label", + "fill": "$tab-active-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "CimPC", + "name": "tab4", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "viilP", + "name": "tab4Icon", + "width": 16, + "height": 16, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "boobt", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "WPCeu", + "name": "tab5", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 22, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "GsvzG", + "name": "tab5Icon", + "width": 16, + "height": 16, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "E3iWH", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 9, + "fontWeight": "500", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "yUPAr", + "x": 1260, + "y": 2700, + "name": "Asset - 资产 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "8zHCB", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "kAjkU", + "name": "statusTime", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "lmrZT", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "cpcSl", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "0u68q", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "tfaiK", + "name": "battIcon", + "width": 16, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "MCT8i", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "9DMx6", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "utKye", + "name": "titleFrame", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 16, + 0, + 8, + 0 + ], + "children": [ + { + "type": "text", + "id": "G3s7O", + "name": "titleText", + "fill": "$text-primary", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 22, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "EmgZe", + "name": "Account Tab Switcher", + "width": "fill_container", + "height": 40, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": 3, + "children": [ + { + "type": "frame", + "id": "u9BpW", + "name": "activeTab", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-primary", + "cornerRadius": "$radius-sm", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000D", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Q2pm4", + "name": "activeTabText", + "fill": "$text-primary", + "content": "资金账户", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "JBFvv", + "name": "inactiveTab", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "7btbr", + "name": "inactiveTabText", + "fill": "$text-secondary", + "content": "交易账户", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "mSoNU", + "name": "Balance Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "text", + "id": "XrJzN", + "name": "balLabel", + "fill": "$text-secondary", + "content": "USDT 余额", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "LN2ft", + "name": "balAmount", + "fill": "$text-primary", + "content": "25,680.50", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "7eHD4", + "name": "balSubRow", + "fill": "$text-muted", + "content": "≈ $25,680.50 USD", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "FIzzB", + "name": "Action Buttons", + "width": "fill_container", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "sjyfi", + "name": "btn1", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "J3Iqh", + "name": "btn1Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "zm5WE", + "name": "btn1Icon", + "width": 20, + "height": 20, + "iconFontName": "arrow-up-right", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "nW7sY", + "name": "btn1Label", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "m6myT", + "name": "btn2", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "CCuAe", + "name": "btn2Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Xr3pW", + "name": "btn2Icon", + "width": 20, + "height": 20, + "iconFontName": "arrow-down-left", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "se9Mt", + "name": "btn2Label", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "am5ik", + "name": "btn3", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "BKZH8", + "name": "btn3Circle", + "width": 48, + "height": 48, + "fill": "$bg-tertiary", + "cornerRadius": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XiUjp", + "name": "btn3Icon", + "width": 20, + "height": 20, + "iconFontName": "repeat", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + } + ] + }, + { + "type": "text", + "id": "FDTXB", + "name": "btn3Label", + "fill": "$text-secondary", + "content": "划转", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "eaLIn", + "name": "Records Link", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JGQMO", + "name": "recordsText", + "fill": "$text-primary", + "content": "充提记录", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon_font", + "id": "hMXYd", + "name": "recordsChevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "XDbDh", + "name": "Holdings Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "fIGON", + "name": "holdingsTitle", + "fill": "$text-primary", + "content": "交易账户持仓", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "lBXlS", + "name": "holdingsViewAll", + "fill": "$text-secondary", + "content": "查看全部 >", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ynCFg", + "name": "Holdings Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "bQ5Il", + "name": "BTC Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "6RWtV", + "name": "row1Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "GpZsz", + "name": "row1Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "6JDUN", + "name": "row1AvatarText", + "fill": "$accent-primary", + "content": "B", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "65YOf", + "name": "row1CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "hMgFx", + "name": "row1CoinName", + "fill": "$text-primary", + "content": "BTC", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "9H7XV", + "name": "row1CoinAmt", + "fill": "$text-secondary", + "content": "0.5000", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "TODB2", + "name": "row1Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "dszWV", + "name": "row1Value", + "fill": "$text-primary", + "content": "34,216.25 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "Mgg59", + "name": "row1Pnl", + "fill": "$profit-green", + "content": "+5.23%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "hnX0A", + "name": "divider1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "8y5gb", + "name": "ETH Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "bvD8S", + "name": "row2Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5MVLj", + "name": "row2Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "FD48H", + "name": "row2AvatarText", + "fill": "$accent-primary", + "content": "E", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "o6wsG", + "name": "row2CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "9bK4H", + "name": "row2CoinName", + "fill": "$text-primary", + "content": "ETH", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "OQ7lc", + "name": "row2CoinAmt", + "fill": "$text-secondary", + "content": "2.1500", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "nXmBa", + "name": "row2Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "TMURg", + "name": "row2Value", + "fill": "$text-primary", + "content": "8,291.33 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "D9rFH", + "name": "row2Pnl", + "fill": "$profit-green", + "content": "+1.87%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "NtTzh", + "name": "divider2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "NiDDL", + "name": "SOL Row", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "J4m3v", + "name": "row3Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "h0pwp", + "name": "row3Avatar", + "width": 36, + "height": 36, + "fill": "$accent-light", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gdtEJ", + "name": "row3AvatarText", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "Ijut3", + "name": "row3CoinInfo", + "layout": "vertical", + "gap": 2, + "children": [ + { + "type": "text", + "id": "Rz1LN", + "name": "row3CoinName", + "fill": "$text-primary", + "content": "SOL", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + }, + { + "type": "text", + "id": "IeXtW", + "name": "row3CoinAmt", + "fill": "$text-secondary", + "content": "120.00", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "KyLnr", + "name": "row3Right", + "layout": "vertical", + "gap": 2, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "iXiTq", + "name": "row3Value", + "fill": "$text-primary", + "content": "21,438.00 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "T5koY", + "name": "row3Pnl", + "fill": "$loss-red", + "content": "-2.45%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "kAGob", + "name": "Tab Bar", + "width": "fill_container", + "height": 83, + "fill": "$bg-primary", + "stroke": { + "thickness": { + "top": 1 + }, + "fill": "$border-default" + }, + "padding": [ + 8, + 16, + 24, + 16 + ], + "justifyContent": "space_around", + "children": [ + { + "type": "frame", + "id": "c4J3c", + "name": "tab1", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "ynJiD", + "name": "tab1Icon", + "width": 22, + "height": 22, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "sRPjP", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "RWh9O", + "name": "tab2", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "rFfpq", + "name": "tab2Icon", + "width": 22, + "height": 22, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "XxXHe", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ANqiY", + "name": "tab3", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "v37aT", + "name": "tab3Icon", + "width": 22, + "height": 22, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "Moune", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Czjzv", + "name": "tab4", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "nFWGp", + "name": "tab4Icon", + "width": 22, + "height": 22, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$accent-primary" + }, + { + "type": "text", + "id": "5ZmnM", + "name": "tab4Label", + "fill": "$accent-primary", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "hwK8b", + "name": "tab5", + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "hEdOY", + "name": "tab5Icon", + "width": 22, + "height": 22, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "6jx20", + "name": "tab5Label", + "fill": "$tab-inactive-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "UaSzl", + "x": 0, + "y": 3600, + "name": "Mine - 我的 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "iu7C7", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "w7wmm", + "name": "Time", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "2Qgbm", + "name": "Right Icons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "9Fyyj", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "2T5yf", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "eBjtH", + "name": "batteryIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "760Or", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "dAeSc", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "A3UzW", + "name": "Profile Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "6bUet", + "name": "Top Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "euG8z", + "name": "Left Section", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "lvzon", + "name": "Avatar", + "width": 48, + "height": 48, + "fill": "$accent-light", + "cornerRadius": 24, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "0rajI", + "name": "avatarText", + "fill": "$accent-primary", + "content": "S", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "bsnQf", + "name": "Name Column", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "9aflc", + "name": "userName", + "fill": "$text-primary", + "content": "sion123", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "3qT3S", + "name": "userBadge", + "fill": "$text-muted", + "content": "普通用户", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "icon_font", + "id": "4KIHg", + "name": "chevronRight", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "trD4W", + "name": "Divider", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "Fp7i1", + "name": "Menu Group 1", + "clip": true, + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "uVgCq", + "name": "Row - Welfare", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "twbop", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ARo8W", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "jdctI", + "name": "row1Icon", + "width": 18, + "height": 18, + "iconFontName": "gift", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + } + ] + }, + { + "type": "text", + "id": "mvPm0", + "name": "row1Label", + "fill": "$text-primary", + "content": "福利中心", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "3gq6N", + "name": "row1Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "UuoOG", + "name": "divider1", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "IdAsU", + "name": "Row - Verify", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "vGIz0", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "WXTgP", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "SAe7j", + "name": "row2Icon", + "width": 18, + "height": 18, + "iconFontName": "shield-check", + "iconFontFamily": "lucide", + "fill": "$profit-green" + } + ] + }, + { + "type": "text", + "id": "uIb1O", + "name": "row2Label", + "fill": "$text-primary", + "content": "实名认证", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "yVA8W", + "name": "Right", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "7gp8c", + "name": "Verified Badge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 3, + 8 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "NDkb0", + "name": "badgeText", + "fill": "$profit-green", + "content": "已认证", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "vuF2V", + "name": "row2Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "7ChxE", + "name": "divider2", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "vVkZA", + "name": "Row - Security", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "LTQpN", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gME8u", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "rYcYK", + "name": "row3Icon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "bTpDR", + "name": "row3Label", + "fill": "$text-primary", + "content": "安全设置", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "xzXCZ", + "name": "row3Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "wREJM", + "name": "divider3", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "wy8Wm", + "name": "Row - Notification", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "c8xCs", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "4yGzN", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "5LGKO", + "name": "row4Icon", + "width": 18, + "height": 18, + "iconFontName": "bell", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "DnpUZ", + "name": "row4Label", + "fill": "$text-primary", + "content": "消息通知", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "U5zwE", + "name": "Right", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "BVybs", + "name": "Red Dot", + "fill": "$loss-red", + "width": 8, + "height": 8 + }, + { + "type": "icon_font", + "id": "CEUcl", + "name": "row4Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "JK4bB", + "name": "Menu Group 2", + "clip": true, + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "yFFjb", + "name": "Row - Dark Mode", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Twg8x", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9C6bC", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "yQ2EL", + "name": "mg2r1Icon", + "width": 18, + "height": 18, + "iconFontName": "moon", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "rNp2A", + "name": "mg2r1Label", + "fill": "$text-primary", + "content": "深色模式", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "zLRmX", + "name": "Toggle Switch", + "width": 44, + "height": 24, + "fill": "$bg-tertiary", + "cornerRadius": 12, + "padding": 2, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "UchmJ", + "name": "Toggle Circle", + "fill": "$text-inverse", + "width": 20, + "height": 20 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "YG0Fs", + "name": "mg2divider1", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "x7YeQ", + "name": "Row - Settings", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "mQU1v", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "F6Ucr", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "tsv4E", + "name": "mg2r2Icon", + "width": 18, + "height": 18, + "iconFontName": "settings", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "vVjBx", + "name": "mg2r2Label", + "fill": "$text-primary", + "content": "系统设置", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "7cicf", + "name": "mg2r2Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "rectangle", + "id": "6zV4Y", + "name": "mg2divider2", + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "kLo26", + "name": "Row - About", + "width": "fill_container", + "padding": [ + 14, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "gHu0h", + "name": "Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "jq3af", + "name": "Icon Frame", + "width": 36, + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": 8, + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "1fkYQ", + "name": "mg2r3Icon", + "width": 18, + "height": 18, + "iconFontName": "info", + "iconFontFamily": "lucide", + "fill": "$text-secondary" + } + ] + }, + { + "type": "text", + "id": "V6jBh", + "name": "mg2r3Label", + "fill": "$text-primary", + "content": "关于我们", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon_font", + "id": "wmk5F", + "name": "mg2r3Chevron", + "width": 16, + "height": 16, + "iconFontName": "chevron-right", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + } + ] + }, + { + "type": "frame", + "id": "bUYq5", + "name": "Logout Button", + "width": "fill_container", + "height": 48, + "fill": "$loss-red-bg", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#DC262626" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "sa61A", + "name": "logoutText", + "fill": "$loss-red", + "content": "退出登录", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "lzMql", + "name": "Version Text", + "fill": "$text-muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "System Build v1.0.0", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "3HQfw", + "name": "Tab Bar Container", + "width": "fill_container", + "fill": "$bg-primary", + "padding": [ + 12, + 21, + 21, + 21 + ], + "justifyContent": "center", + "children": [ + { + "type": "frame", + "id": "2NpWP", + "name": "Pill", + "width": "fill_container", + "height": 62, + "fill": "$surface-card", + "cornerRadius": 36, + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": 4, + "justifyContent": "space_around", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "9O4J5", + "name": "Tab 1 - Home", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XXJ1S", + "name": "tab1Icon", + "width": 18, + "height": 18, + "iconFontName": "house", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "USpID", + "name": "tab1Label", + "fill": "$tab-inactive-text", + "content": "首页", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "7bbPl", + "name": "Tab 2 - Market", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "0bnQT", + "name": "tab2Icon", + "width": 18, + "height": 18, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "cDlae", + "name": "tab2Label", + "fill": "$tab-inactive-text", + "content": "行情", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "RgrFz", + "name": "Tab 3 - Trade", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "qyjDN", + "name": "tab3Icon", + "width": 18, + "height": 18, + "iconFontName": "arrow-left-right", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "GY3Sa", + "name": "tab3Label", + "fill": "$tab-inactive-text", + "content": "交易", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "1cbRJ", + "name": "Tab 4 - Assets", + "width": "fill_container", + "height": "fill_container", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "EohI7", + "name": "tab4Icon", + "width": 18, + "height": 18, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$tab-inactive-text" + }, + { + "type": "text", + "id": "N8UbW", + "name": "tab4Label", + "fill": "$tab-inactive-text", + "content": "资产", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + }, + { + "type": "frame", + "id": "PKYWb", + "name": "Tab 5 - Mine", + "width": "fill_container", + "height": "fill_container", + "fill": "$tab-active-bg", + "cornerRadius": 26, + "layout": "vertical", + "gap": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "2PVAi", + "name": "tab5Icon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$tab-active-text" + }, + { + "type": "text", + "id": "1c8R8", + "name": "tab5Label", + "fill": "$tab-active-text", + "content": "我的", + "fontFamily": "Inter", + "fontSize": 10, + "fontWeight": "600", + "letterSpacing": 0.5 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "ZEkUG", + "x": 420, + "y": 3600, + "name": "Transfer - 划转 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-primary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "nrtMl", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "C0RCw", + "name": "timeText", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "R4vYq", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "knJ4J", + "name": "sigIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "WJMKV", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "C6rRh", + "name": "batIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "v2slo", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "XM7tj", + "name": "backBtn", + "width": 20, + "height": 20, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "jSUXv", + "name": "navTitle", + "fill": "$text-primary", + "content": "账户划转", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "Oj0Wl", + "name": "navSpacer", + "width": 20, + "height": 20 + } + ] + }, + { + "type": "frame", + "id": "Z9Bgk", + "name": "Content", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 24, + "padding": [ + 16, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "pJbfJ", + "name": "Transfer Direction Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-xl", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "NDLAB", + "name": "Source Section", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "0YwNR", + "name": "srcLabel", + "fill": "$text-muted", + "content": "从", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "Upplj", + "name": "Source Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EU4yu", + "name": "srcLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "e7mdQ", + "name": "srcIconBg", + "fill": "#F59E0B1A", + "width": 36, + "height": 36 + }, + { + "type": "icon_font", + "id": "bAYAN", + "name": "srcWalletIcon", + "width": 20, + "height": 20, + "iconFontName": "wallet", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "F84Op", + "name": "srcName", + "fill": "$text-primary", + "content": "资金账户", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "7cmk1", + "name": "srcBalance", + "fill": "$text-primary", + "content": "¥ 25,680.50", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "hYAh3", + "name": "Swap Row", + "width": "fill_container", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Vsesh", + "name": "Swap Button", + "width": 36, + "height": 36, + "fill": "$accent-primary", + "cornerRadius": 18, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "MiYOT", + "name": "swapIcon", + "width": 18, + "height": 18, + "iconFontName": "arrow-up-down", + "iconFontFamily": "lucide", + "fill": "$text-inverse" + } + ] + } + ] + }, + { + "type": "frame", + "id": "noEG0", + "name": "Destination Section", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "gtNTy", + "name": "dstLabel", + "fill": "$text-muted", + "content": "到", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "xFV1D", + "name": "Dest Row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "OW04H", + "name": "dstLeft", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "1vANM", + "name": "dstIconBg", + "fill": "#F59E0B1A", + "width": 36, + "height": 36 + }, + { + "type": "icon_font", + "id": "Ixf7n", + "name": "dstTradeIcon", + "width": 20, + "height": 20, + "iconFontName": "trending-up", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "gKFKP", + "name": "dstName", + "fill": "$text-primary", + "content": "交易账户", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "VGHOS", + "name": "dstBalance", + "fill": "$text-primary", + "content": "¥ 0.00", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "rx95a", + "name": "Amount Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "6UX44", + "name": "amtLabelRow", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "A3nla", + "name": "amtLabel", + "fill": "$text-secondary", + "content": "划转金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "1bEne", + "name": "amtAllBtn", + "fill": "$gold-accent", + "content": "全部划转", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "piGMb", + "name": "Amount Input", + "width": "fill_container", + "height": 56, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-lg", + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "7IVuY", + "name": "amtValue", + "fill": "$text-primary", + "content": "0.00", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "700" + }, + { + "type": "text", + "id": "xj0DH", + "name": "amtSuffix", + "fill": "$text-muted", + "content": "USDT", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "t8OP5", + "name": "Percent Buttons", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "SzElx", + "name": "pct25", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ZLq76", + "name": "pct25T", + "fill": "$text-secondary", + "content": "25%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ITMx3", + "name": "pct50", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "jDQk3", + "name": "pct50T", + "fill": "$text-secondary", + "content": "50%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "WXSgr", + "name": "pct75", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "40br2", + "name": "pct75T", + "fill": "$text-secondary", + "content": "75%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "41trm", + "name": "pct100", + "width": "fill_container", + "height": 36, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "8dTG3", + "name": "pct100T", + "fill": "$text-secondary", + "content": "100%", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "35RQZ", + "name": "Tips Card", + "width": "fill_container", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-lg", + "gap": 8, + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "A5RT4", + "name": "tipIcon", + "width": 16, + "height": 16, + "iconFontName": "info", + "iconFontFamily": "lucide", + "fill": "$profit-green" + }, + { + "type": "text", + "id": "q1UTE", + "name": "tipText", + "fill": "$profit-green", + "content": "划转即时到账,无需手续费", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "vKDTj", + "name": "Confirm Button", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ra6cK", + "name": "confirmText", + "fill": "$text-inverse", + "content": "确认划转", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jUAcf", + "x": 840, + "y": 3600, + "name": "FundOrders - 充提记录 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "acAX8", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PwEgx", + "name": "timeText", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "mYnhz", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "n8bKA", + "name": "signalIcon", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "BFsrI", + "name": "wifiIcon", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "MZVAD", + "name": "batteryIcon", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "NQDfo", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "T6F3q", + "name": "backIcon", + "width": 20, + "height": 20, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "PDJkr", + "name": "navTitle", + "fill": "$text-primary", + "content": "充提记录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "W4Uwc", + "name": "navSpacer", + "width": 20, + "height": 20 + } + ] + }, + { + "type": "frame", + "id": "2hxlm", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "hSZ4q", + "name": "Filter Padding", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 0, + 16 + ], + "children": [ + { + "type": "frame", + "id": "paZ1j", + "name": "Filter Tabs", + "width": "fill_container", + "height": 40, + "fill": "$bg-tertiary", + "cornerRadius": "$radius-md", + "padding": 3, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ii3E0", + "name": "Tab-Active", + "width": "fill_container", + "height": "fill_container", + "fill": "$bg-primary", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CnCCu", + "name": "tabAllText", + "fill": "$text-primary", + "content": "全部", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "nptwv", + "name": "Tab-Inactive", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "h14W4", + "name": "tabDepositText", + "fill": "$text-secondary", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fbNro", + "name": "Tab-Inactive", + "width": "fill_container", + "height": "fill_container", + "fill": "#00000000", + "cornerRadius": "$radius-sm", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "agzLJ", + "name": "tabWithdrawText", + "fill": "$text-secondary", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "eTpAI", + "name": "Scroll Area", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 12, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "8FBRK", + "name": "Order Card 1 - Deposit Pending", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "3mNDR", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "bXhEl", + "name": "c1Badge1", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zdhR9", + "name": "c1Badge1Text", + "fill": "$profit-green", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "DVggv", + "name": "c1Badge2", + "fill": "#FEF3C7", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wczv6", + "name": "c1Badge2Text", + "fill": "#D97706", + "content": "待确认", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "sdKlD", + "name": "card1Amount", + "fill": "$text-primary", + "content": "+5,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "8zWYI", + "name": "Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "7xYFc", + "name": "c1Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "se7lJ", + "name": "c1Row1Label", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "rBKMs", + "name": "c1Row1Value", + "fill": "$text-primary", + "content": "ORD20250101001", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "EEiNC", + "name": "c1Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "kNMkC", + "name": "c1Row2Label", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "HqZra", + "name": "c1Row2Value", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ierRi", + "name": "c1Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "ERRq0", + "name": "c1Row3Label", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "nIv6u", + "name": "c1Row3Value", + "fill": "$text-primary", + "content": "2025-01-15 14:30", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "cuddv", + "name": "Actions", + "width": "fill_container", + "gap": 12, + "justifyContent": "end", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "L6B5B", + "name": "c1BtnCancel", + "cornerRadius": "$radius-sm", + "stroke": { + "thickness": 1, + "fill": "$loss-red" + }, + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dGChX", + "name": "c1BtnCancelText", + "fill": "$loss-red", + "content": "取消订单", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "2qSd8", + "name": "c1BtnPaid", + "fill": "$profit-green", + "cornerRadius": "$radius-sm", + "padding": [ + 8, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "39YtT", + "name": "c1BtnPaidText", + "fill": "#FFFFFF", + "content": "已打款", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "nwvqc", + "name": "Order Card 2 - Deposit Completed", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "3wYzX", + "name": "c2Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "TuP9J", + "name": "c2Badge1", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "orxfN", + "name": "c2Badge1Text", + "fill": "$profit-green", + "content": "充值", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "RwSdv", + "name": "c2Badge2", + "fill": "$profit-green-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "EE61Z", + "name": "c2Badge2Text", + "fill": "$profit-green", + "content": "已完成", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "hmNhX", + "name": "c2Amount", + "fill": "$text-primary", + "content": "+10,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "AdiU1", + "name": "c2Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "P8uPQ", + "name": "c2Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "vKG39", + "name": "c2Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "xGOiw", + "name": "c2Row1V", + "fill": "$text-primary", + "content": "ORD20250102002", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "larCy", + "name": "c2Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "SBhyQ", + "name": "c2Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "JhKO6", + "name": "c2Row2V", + "fill": "$text-primary", + "content": "ERC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LoRE5", + "name": "c2Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "cIAoe", + "name": "c2Row3L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "KOzOs", + "name": "c2Row3V", + "fill": "$text-primary", + "content": "2025-01-10 09:15", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "4UJQc", + "name": "Order Card 3 - Withdrawal Rejected", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "MrIrI", + "name": "c3Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EptX8", + "name": "c3Badge1", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "D8CNL", + "name": "c3Badge1Text", + "fill": "$loss-red", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "O7onP", + "name": "c3Badge2", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "iHBwR", + "name": "c3Badge2Text", + "fill": "$loss-red", + "content": "已拒绝", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "tLYYh", + "name": "c3Amount", + "fill": "$text-primary", + "content": "-2,000.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "lbgrD", + "name": "c3Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "hQioK", + "name": "c3Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "l9Ix3", + "name": "c3Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Zohtj", + "name": "c3Row1V", + "fill": "$text-primary", + "content": "ORD20250103003", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "DPYDk", + "name": "c3Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "NwTao", + "name": "c3Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "CSM4C", + "name": "c3Row2V", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "CI5gM", + "name": "c3Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "VQU54", + "name": "c3Row3L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "U1SYa", + "name": "c3Row3V", + "fill": "$text-primary", + "content": "2025-01-08 16:45", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "SmoTc", + "name": "c3Reason", + "fill": "$loss-red", + "content": "拒绝原因: 余额不足", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "F6FND", + "name": "Order Card 4 - Withdrawal Processing", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "N3pBR", + "name": "c4Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ra8NV", + "name": "c4Badge1", + "fill": "$loss-red-bg", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "4jE3Z", + "name": "c4Badge1Text", + "fill": "$loss-red", + "content": "提现", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "hRef2", + "name": "c4Badge2", + "fill": "#FEF3C7", + "cornerRadius": 4, + "padding": [ + 4, + 8 + ], + "children": [ + { + "type": "text", + "id": "igW91", + "name": "c4Badge2Text", + "fill": "#D97706", + "content": "审核中", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "s5Lub", + "name": "c4Amount", + "fill": "$text-primary", + "content": "-3,500.00 USDT", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "XR3Na", + "name": "c4Details", + "width": "fill_container", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "frame", + "id": "hOmLP", + "name": "c4Row1", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "qJVI6", + "name": "c4Row1L", + "fill": "$text-muted", + "content": "订单号", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "ypYzc", + "name": "c4Row1V", + "fill": "$text-primary", + "content": "ORD20250104004", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "exmQJ", + "name": "c4Row2", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "uDlvG", + "name": "c4Row2L", + "fill": "$text-muted", + "content": "网络", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "F4Tps", + "name": "c4Row2V", + "fill": "$text-primary", + "content": "TRC20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "aFGK3", + "name": "c4Row3", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "1aVu2", + "name": "c4Row3L", + "fill": "$text-muted", + "content": "地址", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "aJHIG", + "name": "c4Row3V", + "fill": "$text-primary", + "content": "TJjK...x9m2", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "47uJ9", + "name": "c4Row4", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "XlCPi", + "name": "c4Row4L", + "fill": "$text-muted", + "content": "手续费", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "V8WVb", + "name": "c4Row4V", + "fill": "$text-primary", + "content": "10%", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "la1UY", + "name": "c4Row5", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "KSE3L", + "name": "c4Row5L", + "fill": "$text-muted", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "YN9Hk", + "name": "c4Row5V", + "fill": "$text-primary", + "content": "2025-01-12 11:20", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "M5NS1", + "name": "c4Payable", + "width": "fill_container", + "fill": "$bg-tertiary", + "cornerRadius": "$radius-sm", + "padding": [ + 8, + 12 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "mKn3c", + "name": "c4PayableL", + "fill": "$text-secondary", + "content": "应付金额", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "FM3XN", + "name": "c4PayableV", + "fill": "$text-primary", + "content": "3,150.00 USDT", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "eQUc6", + "x": 1260, + "y": 3600, + "name": "Welfare - 福利中心 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "bbleW", + "name": "Status Bar", + "width": "fill_container", + "height": 62, + "fill": "$bg-primary", + "padding": [ + 0, + 24 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uHo13", + "name": "timeLabel", + "fill": "$text-primary", + "content": "9:41", + "fontFamily": "Inter", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "xmm85", + "name": "statusIcons", + "gap": 6, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "Mm7jI", + "name": "signal", + "width": 16, + "height": 16, + "iconFontName": "signal", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "IeBf7", + "name": "wifi", + "width": 16, + "height": 16, + "iconFontName": "wifi", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "icon_font", + "id": "0jrin", + "name": "battery", + "width": 22, + "height": 16, + "iconFontName": "battery-full", + "iconFontFamily": "lucide", + "fill": "$text-primary" + } + ] + } + ] + }, + { + "type": "frame", + "id": "aQV34", + "name": "Nav Bar", + "width": "fill_container", + "height": 44, + "fill": "$bg-primary", + "gap": 12, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "hK73W", + "name": "backIcon", + "width": 24, + "height": 24, + "iconFontName": "arrow-left", + "iconFontFamily": "lucide", + "fill": "$text-primary" + }, + { + "type": "text", + "id": "ijTw6", + "name": "navTitle", + "fill": "$text-primary", + "content": "福利中心", + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "j1bTR", + "name": "Content", + "clip": true, + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 16, + 32, + 16 + ], + "children": [ + { + "type": "frame", + "id": "NNVw8", + "name": "Referral Code Card", + "width": "fill_container", + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 180, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#F59E0B26", + "position": 0 + }, + { + "color": "#1F29370D", + "position": 1 + } + ] + }, + "cornerRadius": "$radius-xl", + "stroke": { + "thickness": 1, + "fill": "#F59E0B4D" + }, + "layout": "vertical", + "gap": 16, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "bfhfN", + "name": "Header Row", + "width": "fill_container", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "IsDoK", + "name": "giftIcon", + "width": 24, + "height": 24, + "iconFontName": "gift", + "iconFontFamily": "lucide", + "fill": "$gold-accent" + }, + { + "type": "text", + "id": "Vpz6Y", + "name": "headerTitle", + "fill": "$text-primary", + "content": "我的邀请码", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + }, + { + "type": "text", + "id": "4y5Ye", + "name": "refCode", + "fill": "$gold-accent", + "content": "MONI-8K3F2X", + "fontFamily": "Inter", + "fontSize": 24, + "fontWeight": "800", + "letterSpacing": 2 + }, + { + "type": "frame", + "id": "qRczx", + "name": "Copy Button", + "width": "fill_container", + "height": 40, + "fill": "$gold-accent", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BH9W2", + "name": "copyBtnText", + "fill": "$text-inverse", + "content": "复制邀请码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "LQfBJ", + "name": "New User Bonus Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "gap": 12, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "CTVCY", + "name": "Bonus Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "cRPtp", + "name": "bonusTitle", + "fill": "$text-primary", + "content": "新人福利", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "qCQxn", + "name": "Available Badge", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 4, + 10 + ], + "children": [ + { + "type": "text", + "id": "do53N", + "name": "badgeText", + "fill": "$profit-green", + "content": "可领取", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "text", + "id": "5bF3e", + "name": "amountText", + "fill": "$profit-green", + "content": "+100 USDT", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800" + }, + { + "type": "text", + "id": "k1qw0", + "name": "descText", + "fill": "$text-secondary", + "content": "完成首次充值即可领取", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "hMRe4", + "name": "Claim Button", + "width": "fill_container", + "height": 44, + "fill": "$profit-green", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DyAEa", + "name": "claimBtnText", + "fill": "#FFFFFF", + "content": "立即领取", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "srq5v", + "name": "Referral Rewards Section", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "WMqhp", + "name": "Section Header", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "6mQoC", + "name": "secTitle", + "fill": "$text-primary", + "content": "推广奖励", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "600" + }, + { + "type": "text", + "id": "dtTFo", + "name": "secDesc", + "fill": "$text-muted", + "content": "每邀请一位好友充值达标,奖励100 USDT", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LvQiW", + "name": "Referral List Card", + "width": "fill_container", + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "QjbYk", + "name": "Row 1 - Achieved", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "4GVRO", + "name": "Row1 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QAUGF", + "name": "Row1 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "wLcN4", + "name": "avatar1", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "Y3ovH", + "name": "name1", + "fill": "$text-primary", + "content": "user_abc", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "CnZik", + "name": "deposit1", + "fill": "$text-secondary", + "content": "充值: ¥5,000", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "d1EJz", + "name": "Claim Small", + "fill": "$profit-green-bg", + "cornerRadius": "$radius-sm", + "padding": [ + 6, + 14 + ], + "children": [ + { + "type": "text", + "id": "vCFyc", + "name": "claimSmallText", + "fill": "$profit-green", + "content": "领取", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "NmK65", + "name": "Progress 1", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "Ijuth", + "name": "fill", + "fill": "$profit-green", + "width": "fill_container", + "height": 6 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "XJNo6", + "name": "Divider 1", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "G1rlO", + "name": "Row 2 - In Progress", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "tPt8S", + "name": "Row2 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "cK7BB", + "name": "Row2 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "6EUJX", + "name": "avatar2", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "s6rrE", + "name": "name2", + "fill": "$text-primary", + "content": "user_def", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "QCHA8", + "name": "deposit2", + "fill": "$text-secondary", + "content": "充值: ¥1,200", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "GMhDx", + "name": "Progress Badge", + "fill": "#FEF3C7", + "cornerRadius": "$radius-sm", + "padding": [ + 6, + 14 + ], + "children": [ + { + "type": "text", + "id": "meRzJ", + "name": "progressBadgeText", + "fill": "#D97706", + "content": "进行中", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "600" + } + ] + } + ] + }, + { + "type": "frame", + "id": "gy5ge", + "name": "Progress 2", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3, + "children": [ + { + "type": "rectangle", + "cornerRadius": 3, + "id": "5171Q", + "name": "fill", + "fill": "$gold-accent", + "width": 52, + "height": 6 + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "mIPZM", + "name": "Divider 2", + "opacity": 0.5, + "fill": "$border-default", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "NdJxX", + "name": "Row 3 - New", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "TO6GU", + "name": "Row3 Top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tUBvJ", + "name": "Row3 Left", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "cZ7ua", + "name": "avatar3", + "fill": "$accent-light", + "width": 32, + "height": 32 + }, + { + "type": "text", + "id": "BjVtX", + "name": "name3", + "fill": "$text-primary", + "content": "user_ghi", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "500" + }, + { + "type": "text", + "id": "cUUdT", + "name": "deposit3", + "fill": "$text-secondary", + "content": "充值: ¥0", + "fontFamily": "Inter", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "4IFps", + "name": "pendingText", + "fill": "$text-muted", + "content": "待达标", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "V1pIn", + "name": "Progress 3", + "width": "fill_container", + "height": 6, + "fill": "$bg-tertiary", + "cornerRadius": 3 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "YzbD7", + "name": "Rules Card", + "width": "fill_container", + "fill": "$bg-tertiary", + "cornerRadius": "$radius-lg", + "layout": "vertical", + "gap": 8, + "padding": [ + 16, + 20 + ], + "children": [ + { + "type": "text", + "id": "7tQDi", + "name": "rulesTitle", + "fill": "$text-primary", + "content": "奖励规则", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + }, + { + "type": "text", + "id": "BQrb5", + "name": "rule1", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 新用户注册完成实名认证奖励 100 USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "DZktn", + "name": "rule2", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 邀请好友充值每达 1000 USDT,双方各获得 100 USDT", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "skAaA", + "name": "rule3", + "fill": "$text-secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "• 奖励直接发放至资金账户", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "C9G6P", + "x": 0, + "y": 4500, + "name": "Login - 登录 (Dark)", + "theme": { + "mode": "dark" + }, + "clip": true, + "width": 390, + "height": 844, + "fill": "$bg-secondary", + "layout": "vertical", + "gap": 48, + "padding": [ + 100, + 32, + 40, + 32 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "msJBN", + "name": "spacer_top", + "width": "fill_container", + "height": 100, + "layout": "vertical" + }, + { + "type": "frame", + "id": "GQdO4", + "name": "brand_section", + "layout": "vertical", + "gap": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "cMseS", + "name": "brand_mark", + "width": 80, + "height": 80, + "layout": "none", + "children": [ + { + "type": "ellipse", + "id": "mE65S", + "x": 0, + "y": 0, + "name": "logo_ellipse", + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 180, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#1F2937", + "position": 0 + }, + { + "color": "#374151", + "position": 1 + } + ] + }, + "width": 80, + "height": 80 + }, + { + "type": "text", + "id": "KJHlL", + "x": 28, + "y": 22, + "name": "logo_letter", + "fill": "$text-inverse", + "content": "M", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "800" + } + ] + }, + { + "type": "text", + "id": "wUEwU", + "name": "brand_name", + "fill": "$text-primary", + "content": "MONISUO", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800", + "letterSpacing": 3 + }, + { + "type": "text", + "id": "FjHAJ", + "name": "tagline", + "fill": "$text-secondary", + "content": "虚拟货币模拟交易平台", + "textAlign": "center", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "xN3TC", + "name": "gap_frame", + "width": "fill_container", + "height": 48, + "layout": "vertical" + }, + { + "type": "frame", + "id": "kQAfi", + "name": "form_section", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "padding": [ + 0, + 32 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "5CmpI", + "name": "username_input", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "iJNui", + "name": "user_icon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "ZWPJ2", + "name": "username_placeholder", + "fill": "$text-muted", + "content": "请输入用户名", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "RcE75", + "name": "password_input", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "wQYH3", + "name": "lock_icon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "uVgip", + "name": "password_placeholder", + "fill": "$text-muted", + "content": "请输入密码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "QYKTk", + "name": "password_spacer", + "width": "fill_container", + "height": "fit_content(0)" + }, + { + "type": "icon_font", + "id": "0n3G0", + "name": "eye_icon", + "width": 18, + "height": 18, + "iconFontName": "eye-off", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "WlPgA", + "name": "btn_gap", + "width": "fill_container", + "height": 8, + "layout": "vertical" + }, + { + "type": "frame", + "id": "WItMh", + "name": "login_btn", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "nszMT", + "name": "login_btn_text", + "fill": "$text-inverse", + "content": "登录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "2EHLU", + "name": "bottom_spacer", + "width": "fill_container", + "height": "fit_content(0)", + "fill": "#00000000", + "layout": "vertical" + }, + { + "type": "frame", + "id": "nKTCB", + "name": "bottom_section", + "width": "fill_container", + "gap": 4, + "padding": [ + 0, + 0, + 40, + 0 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "zJddx", + "name": "no_account_text", + "fill": "$text-secondary", + "content": "还没有账户?", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "mJHbC", + "name": "register_link", + "fill": "$gold-accent", + "content": "立即注册", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "nIOl7", + "name": "Brand", + "layout": "vertical", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "qrvpE", + "name": "logoCircle", + "width": 80, + "height": 80, + "fill": { + "type": "gradient", + "gradientType": "linear", + "enabled": true, + "rotation": 0, + "size": { + "height": 1 + }, + "colors": [ + { + "color": "#1F2937", + "position": 0 + }, + { + "color": "#374151", + "position": 1 + } + ] + }, + "cornerRadius": 40, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Y6lYh", + "name": "logoText", + "fill": "$text-inverse", + "content": "M", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "800" + } + ] + }, + { + "type": "text", + "id": "QXPFI", + "name": "brandName", + "fill": "$text-primary", + "content": "MONISUO", + "fontFamily": "Inter", + "fontSize": 28, + "fontWeight": "800", + "letterSpacing": 3 + }, + { + "type": "text", + "id": "RzDIr", + "name": "tagline", + "fill": "$text-secondary", + "content": "虚拟货币模拟交易平台", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "QSEYL", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "WkEPu", + "name": "UserInput", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "gap": 8, + "padding": [ + 0, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "nLzhg", + "name": "userIcon", + "width": 18, + "height": 18, + "iconFontName": "user", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "BIntl", + "name": "userPlaceholder", + "fill": "$text-muted", + "content": "请输入用户名", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "9HqH0", + "name": "PwdInput", + "width": "fill_container", + "height": 52, + "fill": "$surface-card", + "cornerRadius": "$radius-lg", + "stroke": { + "thickness": 1, + "fill": "$border-default" + }, + "padding": [ + 0, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "e5Pj9", + "name": "pwdLeft", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "icon_font", + "id": "YrzUL", + "name": "pwdIcon", + "width": 18, + "height": 18, + "iconFontName": "lock", + "iconFontFamily": "lucide", + "fill": "$text-muted" + }, + { + "type": "text", + "id": "wwJU1", + "name": "pwdPlaceholder", + "fill": "$text-muted", + "content": "请输入密码", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "icon_font", + "id": "lfBh1", + "name": "pwdEye", + "width": 18, + "height": 18, + "iconFontName": "eye-off", + "iconFontFamily": "lucide", + "fill": "$text-muted" + } + ] + }, + { + "type": "frame", + "id": "QfA37", + "name": "LoginBtn", + "width": "fill_container", + "height": 52, + "fill": "$accent-primary", + "cornerRadius": "$radius-lg", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BnIPy", + "name": "loginText", + "fill": "$text-inverse", + "content": "登录", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "700" + } + ] + } + ] + }, + { + "type": "frame", + "id": "KJ7zv", + "name": "RegisterRow", + "gap": 4, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "TvXVD", + "name": "regText1", + "fill": "$text-secondary", + "content": "还没有账户?", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Lmvmg", + "name": "regText2", + "fill": "$gold-accent", + "content": "立即注册", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ], + "themes": { + "mode": [ + "light", + "dark" + ] + }, + "variables": { + "accent-hover": { + "type": "color", + "value": [ + { + "value": "#111827", + "theme": { + "mode": "light" + } + }, + { + "value": "#1E293B", + "theme": { + "mode": "dark" + } + } + ] + }, + "accent-light": { + "type": "color", + "value": [ + { + "value": "#F3F4F6", + "theme": { + "mode": "light" + } + }, + { + "value": "#1E293B", + "theme": { + "mode": "dark" + } + } + ] + }, + "accent-primary": { + "type": "color", + "value": [ + { + "value": "#1F2937", + "theme": { + "mode": "light" + } + }, + { + "value": "#D4AF37", + "theme": { + "mode": "dark" + } + } + ] + }, + "bg-primary": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "mode": "light" + } + }, + { + "value": "#0F172A", + "theme": { + "mode": "dark" + } + } + ] + }, + "bg-secondary": { + "type": "color", + "value": [ + { + "value": "#F8FAFC", + "theme": { + "mode": "light" + } + }, + { + "value": "#0B1120", + "theme": { + "mode": "dark" + } + } + ] + }, + "bg-tertiary": { + "type": "color", + "value": [ + { + "value": "#F1F5F9", + "theme": { + "mode": "light" + } + }, + { + "value": "#1E293B", + "theme": { + "mode": "dark" + } + } + ] + }, + "border-default": { + "type": "color", + "value": [ + { + "value": "#E2E8F0", + "theme": { + "mode": "light" + } + }, + { + "value": "#334155", + "theme": { + "mode": "dark" + } + } + ] + }, + "border-muted": { + "type": "color", + "value": [ + { + "value": "#F1F5F9", + "theme": { + "mode": "light" + } + }, + { + "value": "#1E293B", + "theme": { + "mode": "dark" + } + } + ] + }, + "gold-accent": { + "type": "color", + "value": [ + { + "value": "#F59E0B", + "theme": { + "mode": "light" + } + }, + { + "value": "#D4AF37", + "theme": { + "mode": "dark" + } + } + ] + }, + "loss-red": { + "type": "color", + "value": [ + { + "value": "#DC2626", + "theme": { + "mode": "light" + } + }, + { + "value": "#FF716C", + "theme": { + "mode": "dark" + } + } + ] + }, + "loss-red-bg": { + "type": "color", + "value": [ + { + "value": "#FEF2F2", + "theme": { + "mode": "light" + } + }, + { + "value": "#2D1215", + "theme": { + "mode": "dark" + } + } + ] + }, + "profit-green": { + "type": "color", + "value": [ + { + "value": "#16A34A", + "theme": { + "mode": "light" + } + }, + { + "value": "#4ADE80", + "theme": { + "mode": "dark" + } + } + ] + }, + "profit-green-bg": { + "type": "color", + "value": [ + { + "value": "#F0FDF4", + "theme": { + "mode": "light" + } + }, + { + "value": "#052E16", + "theme": { + "mode": "dark" + } + } + ] + }, + "radius-lg": { + "type": "number", + "value": 14 + }, + "radius-md": { + "type": "number", + "value": 10 + }, + "radius-sm": { + "type": "number", + "value": 6 + }, + "radius-xl": { + "type": "number", + "value": 20 + }, + "spacing-lg": { + "type": "number", + "value": 24 + }, + "spacing-md": { + "type": "number", + "value": 16 + }, + "spacing-sm": { + "type": "number", + "value": 8 + }, + "spacing-xl": { + "type": "number", + "value": 32 + }, + "spacing-xs": { + "type": "number", + "value": 4 + }, + "surface-card": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "mode": "light" + } + }, + { + "value": "#0F172A", + "theme": { + "mode": "dark" + } + } + ] + }, + "tab-active-bg": { + "type": "color", + "value": [ + { + "value": "#F3F4F6", + "theme": { + "mode": "light" + } + }, + { + "value": "#1E293B", + "theme": { + "mode": "dark" + } + } + ] + }, + "tab-active-text": { + "type": "color", + "value": [ + { + "value": "#1F2937", + "theme": { + "mode": "light" + } + }, + { + "value": "#F8FAFC", + "theme": { + "mode": "dark" + } + } + ] + }, + "tab-inactive-text": { + "type": "color", + "value": [ + { + "value": "#9CA3AF", + "theme": { + "mode": "light" + } + }, + { + "value": "#64748B", + "theme": { + "mode": "dark" + } + } + ] + }, + "text-inverse": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "mode": "light" + } + }, + { + "value": "#0F172A", + "theme": { + "mode": "dark" + } + } + ] + }, + "text-muted": { + "type": "color", + "value": [ + { + "value": "#94A3B8", + "theme": { + "mode": "light" + } + }, + { + "value": "#64748B", + "theme": { + "mode": "dark" + } + } + ] + }, + "text-primary": { + "type": "color", + "value": [ + { + "value": "#0F172A", + "theme": { + "mode": "light" + } + }, + { + "value": "#F8FAFC", + "theme": { + "mode": "dark" + } + } + ] + }, + "text-secondary": { + "type": "color", + "value": [ + { + "value": "#475569", + "theme": { + "mode": "light" + } + }, + { + "value": "#94A3B8", + "theme": { + "mode": "dark" + } + } + ] + } + } +} \ No newline at end of file