feat(branding): 全平台品牌Logo替换 — 新双色渐变券印标识

## 概述
将全平台(5个前端应用)的品牌Logo从旧版钻石图标统一替换为新设计的
双色渐变券印标识(紫色#9B5CF6 + 品红#D946EF),体现券金融平台定位。

## 新Logo资源
- logo/genex-icon.svg: 纯图标(72x72),用于App图标和favicon
- logo/genex-04.svg: 带品牌名(380x72),用于启动画面和品牌展示

## 替换范围

### Flutter Apps(genex-mobile / admin-app / mobile)
- Android: 5个密度mipmap ic_launcher.png (48~192px)
- iOS: 15个AppIcon尺寸 (20~1024px) + 3个LaunchImage尺寸
- assets/images/: 新增 logo.png(760x144) + logo_icon.png(192x192)
- pubspec.yaml: 新增 assets 声明
- welcome_page.dart: Icons.diamond_rounded → Image.asset('logo_icon.png')
- issuer_login_page.dart: Icons.storefront_rounded → Image.asset('logo_icon.png')
- issuer_dashboard_page.dart: 同上
- settings_page.dart: 同上

### admin-web(Next.js 15)
- public/: favicon.ico/png, logo.png, logo_icon.png, icon-512.png, SVG源文件
- layout.tsx: 更新metadata icons配置
- AdminLayout.tsx: 侧栏inline "G"文字 → <img src="/logo_icon.png">

### miniapp(Taro/React 小程序)
- login/index.tsx: "G"文字Logo → CSS双色分割旋转方块
- share-card/index.tsx: 同上 + 品牌色从#6C5CE7更新为#9B5CF6/#D946EF

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-02-22 04:07:46 -08:00
parent 9fdb5acaa8
commit 295ebcdac7
96 changed files with 179 additions and 64 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -31,14 +31,13 @@ class _IssuerLoginPageState extends State<IssuerLoginPage> {
const SizedBox(height: 60), const SizedBox(height: 60),
// Logo // Logo
Container( ClipRRect(
width: 56, borderRadius: BorderRadius.circular(14),
height: 56, child: Image.asset(
decoration: BoxDecoration( 'assets/images/logo_icon.png',
gradient: AppColors.primaryGradient, width: 56,
borderRadius: BorderRadius.circular(14), height: 56,
), ),
child: const Icon(Icons.storefront_rounded, color: Colors.white, size: 28),
), ),
const SizedBox(height: 24), const SizedBox(height: 24),

View File

@ -73,7 +73,10 @@ class IssuerDashboardPage extends StatelessWidget {
color: Colors.white.withValues(alpha: 0.2), color: Colors.white.withValues(alpha: 0.2),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
child: const Icon(Icons.storefront_rounded, color: Colors.white, size: 24), child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.asset('assets/images/logo_icon.png', width: 48, height: 48),
),
), ),
const SizedBox(width: 14), const SizedBox(width: 14),
Expanded( Expanded(

View File

@ -120,14 +120,13 @@ class _SettingsPageState extends State<SettingsPage> {
color: AppColors.surface, color: AppColors.surface,
child: Row( child: Row(
children: [ children: [
Container( ClipRRect(
width: 56, borderRadius: BorderRadius.circular(14),
height: 56, child: Image.asset(
decoration: BoxDecoration( 'assets/images/logo_icon.png',
gradient: AppColors.primaryGradient, width: 56,
borderRadius: BorderRadius.circular(14), height: 56,
), ),
child: const Icon(Icons.storefront_rounded, color: Colors.white, size: 28),
), ),
const SizedBox(width: 14), const SizedBox(width: 14),
Expanded( Expanded(

View File

@ -29,3 +29,6 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
assets:
- assets/images/logo.png
- assets/images/logo_icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,30 @@
<svg viewBox="0 0 380 72" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="L" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#9B5CF6"/>
<stop offset="100%" stop-color="#A855F7"/>
</linearGradient>
<linearGradient id="R" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<linearGradient id="EX" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<mask id="notch">
<rect x="-40" y="-40" width="80" height="80" fill="white"/>
<circle cx="0" cy="-26" r="3.5" fill="black"/>
<circle cx="0" cy="26" r="3.5" fill="black"/>
</mask>
</defs>
<g transform="translate(36,36)">
<g transform="rotate(45)" mask="url(#notch)">
<path d="M-20 -26 L0 -26 L-4.5 -1.5 L4.5 1.5 L0 26 L-20 26 Q-26 26 -26 20 L-26 -20 Q-26 -26 -20 -26 Z" fill="url(#L)"/>
<path d="M0 -26 L20 -26 Q26 -26 26 -20 L26 20 Q26 26 20 26 L0 26 L4.5 1.5 L-4.5 -1.5 Z" fill="url(#R)"/>
</g>
</g>
<text x="84" y="48" font-family="Sora, sans-serif" font-weight="800" font-size="34" letter-spacing="-1">
<tspan fill="#1A103A">GEN</tspan><tspan fill="url(#EX)">EX</tspan>
</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -0,0 +1,23 @@
<svg viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="L" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#9B5CF6"/>
<stop offset="100%" stop-color="#A855F7"/>
</linearGradient>
<linearGradient id="R" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<mask id="notch">
<rect x="-40" y="-40" width="80" height="80" fill="white"/>
<circle cx="0" cy="-26" r="3.5" fill="black"/>
<circle cx="0" cy="26" r="3.5" fill="black"/>
</mask>
</defs>
<g transform="translate(36,36)">
<g transform="rotate(45)" mask="url(#notch)">
<path d="M-20 -26 L0 -26 L-4.5 -1.5 L4.5 1.5 L0 26 L-20 26 Q-26 26 -26 20 L-26 -20 Q-26 -26 -20 -26 Z" fill="url(#L)"/>
<path d="M0 -26 L20 -26 Q26 -26 26 -20 L26 20 Q26 26 20 26 L0 26 L4.5 1.5 L-4.5 -1.5 Z" fill="url(#R)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 994 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -6,7 +6,8 @@ export const metadata: Metadata = {
title: 'Genex Admin - 券金融平台管理后台', title: 'Genex Admin - 券金融平台管理后台',
description: 'Genex 券金融平台运营管理系统', description: 'Genex 券金融平台运营管理系统',
icons: { icons: {
icon: '/favicon.ico', icon: '/favicon.png',
apple: '/logo_icon.png',
}, },
}; };

View File

@ -139,19 +139,11 @@ export const AdminLayout: React.FC<{ children: React.ReactNode }> = ({ children
padding: '0 20px', padding: '0 20px',
borderBottom: '1px solid var(--color-border-light)', borderBottom: '1px solid var(--color-border-light)',
}}> }}>
<div style={{ <img
width: 32, height: 32, src="/logo_icon.png"
background: 'linear-gradient(135deg, #6C5CE7, #9B8FFF)', alt="Genex"
borderRadius: 'var(--radius-sm)', style={{ width: 32, height: 32, borderRadius: 'var(--radius-sm)' }}
display: 'flex', />
alignItems: 'center',
justifyContent: 'center',
color: 'white',
fontWeight: 700,
fontSize: 16,
}}>
G
</div>
{!collapsed && ( {!collapsed && (
<span style={{ <span style={{
marginLeft: 12, marginLeft: 12,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -22,18 +22,12 @@ class WelcomePage extends StatelessWidget {
const Spacer(flex: 2), const Spacer(flex: 2),
// Brand Logo // Brand Logo
Container( ClipRRect(
width: 80, borderRadius: AppSpacing.borderRadiusXl,
height: 80, child: Image.asset(
decoration: BoxDecoration( 'assets/images/logo_icon.png',
gradient: AppColors.primaryGradient, width: 80,
borderRadius: AppSpacing.borderRadiusXl, height: 80,
boxShadow: AppSpacing.shadowPrimary,
),
child: const Icon(
Icons.diamond_rounded,
color: Colors.white,
size: 40,
), ),
), ),
const SizedBox(height: 24), const SizedBox(height: 24),

View File

@ -30,3 +30,6 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
assets:
- assets/images/logo.png
- assets/images/logo_icon.png

View File

@ -25,9 +25,10 @@ const ShareCard: React.FC<ShareCardProps> = ({
{/* Header */} {/* Header */}
<view className="share-header"> <view className="share-header">
<view className="share-logo"> <view className="share-logo">
<text className="share-logo-text">G</text> <view className="share-logo-left" />
<view className="share-logo-right" />
</view> </view>
<text className="share-brand">Genex · {brand}</text> <text className="share-brand">GENEX · {brand}</text>
</view> </view>
{/* Coupon Info */} {/* Coupon Info */}
@ -69,24 +70,33 @@ CSS:
.share-header { .share-header {
display: flex; align-items: center; display: flex; align-items: center;
padding: 24rpx 28rpx; padding: 24rpx 28rpx;
background: linear-gradient(135deg, #6C5CE7, #9B8FFF); background: linear-gradient(135deg, #9B5CF6, #D946EF);
} }
.share-logo { .share-logo {
width: 48rpx; height: 48rpx; background: rgba(255,255,255,0.2); width: 48rpx; height: 48rpx;
border-radius: 10rpx; display: flex; border-radius: 10rpx; display: flex;
align-items: center; justify-content: center; align-items: center; justify-content: center;
overflow: hidden; position: relative;
transform: rotate(45deg);
}
.share-logo-left {
width: 50%; height: 100%;
background: linear-gradient(135deg, #9B5CF6, #A855F7);
}
.share-logo-right {
width: 50%; height: 100%;
background: linear-gradient(135deg, #D946EF, #E11D89);
} }
.share-logo-text { color: white; font-weight: 700; font-size: 24rpx; }
.share-brand { color: white; font-size: 26rpx; font-weight: 600; margin-left: 12rpx; } .share-brand { color: white; font-size: 26rpx; font-weight: 600; margin-left: 12rpx; }
.share-body { padding: 28rpx; } .share-body { padding: 28rpx; }
.share-name { font-size: 32rpx; font-weight: 600; color: #141723; } .share-name { font-size: 32rpx; font-weight: 600; color: #141723; }
.share-price-row { display: flex; align-items: flex-end; margin-top: 16rpx; } .share-price-row { display: flex; align-items: flex-end; margin-top: 16rpx; }
.share-price { font-size: 40rpx; font-weight: 700; color: #6C5CE7; } .share-price { font-size: 40rpx; font-weight: 700; color: #9B5CF6; }
.share-face { font-size: 24rpx; color: #A0A8BE; text-decoration: line-through; margin-left: 12rpx; } .share-face { font-size: 24rpx; color: #A0A8BE; text-decoration: line-through; margin-left: 12rpx; }
.share-discount { .share-discount {
margin-left: 12rpx; padding: 4rpx 12rpx; margin-left: 12rpx; padding: 4rpx 12rpx;
background: linear-gradient(135deg, #6C5CE7, #9B8FFF); background: linear-gradient(135deg, #9B5CF6, #D946EF);
border-radius: 999rpx; border-radius: 999rpx;
} }
.share-discount-text { color: white; font-size: 22rpx; font-weight: 700; } .share-discount-text { color: white; font-size: 22rpx; font-weight: 700; }

View File

@ -15,9 +15,10 @@ const LoginPage: React.FC = () => {
{/* Logo */} {/* Logo */}
<view className="logo-section"> <view className="logo-section">
<view className="logo-box"> <view className="logo-box">
<text className="logo-text">G</text> <view className="logo-left" />
<view className="logo-right" />
</view> </view>
<text className="app-name">Genex</text> <text className="app-name">GENEX</text>
<text className="app-slogan">{t('app_slogan')}</text> <text className="app-slogan">{t('app_slogan')}</text>
</view> </view>
@ -83,11 +84,18 @@ CSS:
} }
.logo-box { .logo-box {
width: 120rpx; height: 120rpx; width: 120rpx; height: 120rpx;
background: linear-gradient(135deg, #6C5CE7, #9B8FFF);
border-radius: 28rpx; border-radius: 28rpx;
display: flex; align-items: center; justify-content: center; display: flex; align-items: center; justify-content: center;
overflow: hidden; transform: rotate(45deg);
}
.logo-left {
width: 50%; height: 100%;
background: linear-gradient(135deg, #9B5CF6, #A855F7);
}
.logo-right {
width: 50%; height: 100%;
background: linear-gradient(135deg, #D946EF, #E11D89);
} }
.logo-text { color: white; font-size: 48rpx; font-weight: 700; }
.app-name { font-size: 40rpx; font-weight: 700; color: #141723; margin-top: 24rpx; } .app-name { font-size: 40rpx; font-weight: 700; color: #141723; margin-top: 24rpx; }
.app-slogan { font-size: 26rpx; color: #A0A8BE; margin-top: 8rpx; } .app-slogan { font-size: 26rpx; color: #A0A8BE; margin-top: 8rpx; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -22,18 +22,12 @@ class WelcomePage extends StatelessWidget {
const Spacer(flex: 2), const Spacer(flex: 2),
// Brand Logo // Brand Logo
Container( ClipRRect(
width: 80, borderRadius: AppSpacing.borderRadiusXl,
height: 80, child: Image.asset(
decoration: BoxDecoration( 'assets/images/logo_icon.png',
gradient: AppColors.primaryGradient, width: 80,
borderRadius: AppSpacing.borderRadiusXl, height: 80,
boxShadow: AppSpacing.shadowPrimary,
),
child: const Icon(
Icons.diamond_rounded,
color: Colors.white,
size: 40,
), ),
), ),
const SizedBox(height: 24), const SizedBox(height: 24),

View File

@ -29,3 +29,6 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
assets:
- assets/images/logo.png
- assets/images/logo_icon.png

30
logo/genex-04.svg Normal file
View File

@ -0,0 +1,30 @@
<svg viewBox="0 0 380 72" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="L" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#9B5CF6"/>
<stop offset="100%" stop-color="#A855F7"/>
</linearGradient>
<linearGradient id="R" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<linearGradient id="EX" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<mask id="notch">
<rect x="-40" y="-40" width="80" height="80" fill="white"/>
<circle cx="0" cy="-26" r="3.5" fill="black"/>
<circle cx="0" cy="26" r="3.5" fill="black"/>
</mask>
</defs>
<g transform="translate(36,36)">
<g transform="rotate(45)" mask="url(#notch)">
<path d="M-20 -26 L0 -26 L-4.5 -1.5 L4.5 1.5 L0 26 L-20 26 Q-26 26 -26 20 L-26 -20 Q-26 -26 -20 -26 Z" fill="url(#L)"/>
<path d="M0 -26 L20 -26 Q26 -26 26 -20 L26 20 Q26 26 20 26 L0 26 L4.5 1.5 L-4.5 -1.5 Z" fill="url(#R)"/>
</g>
</g>
<text x="84" y="48" font-family="Sora, sans-serif" font-weight="800" font-size="34" letter-spacing="-1">
<tspan fill="#1A103A">GEN</tspan><tspan fill="url(#EX)">EX</tspan>
</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

23
logo/genex-icon.svg Normal file
View File

@ -0,0 +1,23 @@
<svg viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="L" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#9B5CF6"/>
<stop offset="100%" stop-color="#A855F7"/>
</linearGradient>
<linearGradient id="R" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#D946EF"/>
<stop offset="100%" stop-color="#E11D89"/>
</linearGradient>
<mask id="notch">
<rect x="-40" y="-40" width="80" height="80" fill="white"/>
<circle cx="0" cy="-26" r="3.5" fill="black"/>
<circle cx="0" cy="26" r="3.5" fill="black"/>
</mask>
</defs>
<g transform="translate(36,36)">
<g transform="rotate(45)" mask="url(#notch)">
<path d="M-20 -26 L0 -26 L-4.5 -1.5 L4.5 1.5 L0 26 L-20 26 Q-26 26 -26 20 L-26 -20 Q-26 -26 -20 -26 Z" fill="url(#L)"/>
<path d="M0 -26 L20 -26 Q26 -26 26 -20 L26 20 Q26 26 20 26 L0 26 L4.5 1.5 L-4.5 -1.5 Z" fill="url(#R)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 994 B