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>
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 13 KiB |
|
|
@ -31,14 +31,13 @@ class _IssuerLoginPageState extends State<IssuerLoginPage> {
|
|||
const SizedBox(height: 60),
|
||||
|
||||
// Logo
|
||||
Container(
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
child: Image.asset(
|
||||
'assets/images/logo_icon.png',
|
||||
width: 56,
|
||||
height: 56,
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.primaryGradient,
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
),
|
||||
child: const Icon(Icons.storefront_rounded, color: Colors.white, size: 28),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
|
||||
|
|
|
|||
|
|
@ -73,7 +73,10 @@ class IssuerDashboardPage extends StatelessWidget {
|
|||
color: Colors.white.withValues(alpha: 0.2),
|
||||
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),
|
||||
Expanded(
|
||||
|
|
|
|||
|
|
@ -120,14 +120,13 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||
color: AppColors.surface,
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
child: Image.asset(
|
||||
'assets/images/logo_icon.png',
|
||||
width: 56,
|
||||
height: 56,
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.primaryGradient,
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
),
|
||||
child: const Icon(Icons.storefront_rounded, color: Colors.white, size: 28),
|
||||
),
|
||||
const SizedBox(width: 14),
|
||||
Expanded(
|
||||
|
|
|
|||
|
|
@ -29,3 +29,6 @@ dev_dependencies:
|
|||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- assets/images/logo.png
|
||||
- assets/images/logo_icon.png
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -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 |
|
After Width: | Height: | Size: 8.6 KiB |
|
|
@ -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 |
|
After Width: | Height: | Size: 4.8 KiB |
|
|
@ -6,7 +6,8 @@ export const metadata: Metadata = {
|
|||
title: 'Genex Admin - 券金融平台管理后台',
|
||||
description: 'Genex 券金融平台运营管理系统',
|
||||
icons: {
|
||||
icon: '/favicon.ico',
|
||||
icon: '/favicon.png',
|
||||
apple: '/logo_icon.png',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -139,19 +139,11 @@ export const AdminLayout: React.FC<{ children: React.ReactNode }> = ({ children
|
|||
padding: '0 20px',
|
||||
borderBottom: '1px solid var(--color-border-light)',
|
||||
}}>
|
||||
<div style={{
|
||||
width: 32, height: 32,
|
||||
background: 'linear-gradient(135deg, #6C5CE7, #9B8FFF)',
|
||||
borderRadius: 'var(--radius-sm)',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
color: 'white',
|
||||
fontWeight: 700,
|
||||
fontSize: 16,
|
||||
}}>
|
||||
G
|
||||
</div>
|
||||
<img
|
||||
src="/logo_icon.png"
|
||||
alt="Genex"
|
||||
style={{ width: 32, height: 32, borderRadius: 'var(--radius-sm)' }}
|
||||
/>
|
||||
{!collapsed && (
|
||||
<span style={{
|
||||
marginLeft: 12,
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 13 KiB |
|
|
@ -22,18 +22,12 @@ class WelcomePage extends StatelessWidget {
|
|||
const Spacer(flex: 2),
|
||||
|
||||
// Brand Logo
|
||||
Container(
|
||||
ClipRRect(
|
||||
borderRadius: AppSpacing.borderRadiusXl,
|
||||
child: Image.asset(
|
||||
'assets/images/logo_icon.png',
|
||||
width: 80,
|
||||
height: 80,
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.primaryGradient,
|
||||
borderRadius: AppSpacing.borderRadiusXl,
|
||||
boxShadow: AppSpacing.shadowPrimary,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.diamond_rounded,
|
||||
color: Colors.white,
|
||||
size: 40,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
|
|
|
|||
|
|
@ -30,3 +30,6 @@ dev_dependencies:
|
|||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- assets/images/logo.png
|
||||
- assets/images/logo_icon.png
|
||||
|
|
|
|||
|
|
@ -25,9 +25,10 @@ const ShareCard: React.FC<ShareCardProps> = ({
|
|||
{/* Header */}
|
||||
<view className="share-header">
|
||||
<view className="share-logo">
|
||||
<text className="share-logo-text">G</text>
|
||||
<view className="share-logo-left" />
|
||||
<view className="share-logo-right" />
|
||||
</view>
|
||||
<text className="share-brand">Genex · {brand}</text>
|
||||
<text className="share-brand">GENEX · {brand}</text>
|
||||
</view>
|
||||
|
||||
{/* Coupon Info */}
|
||||
|
|
@ -69,24 +70,33 @@ CSS:
|
|||
.share-header {
|
||||
display: flex; align-items: center;
|
||||
padding: 24rpx 28rpx;
|
||||
background: linear-gradient(135deg, #6C5CE7, #9B8FFF);
|
||||
background: linear-gradient(135deg, #9B5CF6, #D946EF);
|
||||
}
|
||||
.share-logo {
|
||||
width: 48rpx; height: 48rpx; background: rgba(255,255,255,0.2);
|
||||
width: 48rpx; height: 48rpx;
|
||||
border-radius: 10rpx; display: flex;
|
||||
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-body { padding: 28rpx; }
|
||||
.share-name { font-size: 32rpx; font-weight: 600; color: #141723; }
|
||||
.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-discount {
|
||||
margin-left: 12rpx; padding: 4rpx 12rpx;
|
||||
background: linear-gradient(135deg, #6C5CE7, #9B8FFF);
|
||||
background: linear-gradient(135deg, #9B5CF6, #D946EF);
|
||||
border-radius: 999rpx;
|
||||
}
|
||||
.share-discount-text { color: white; font-size: 22rpx; font-weight: 700; }
|
||||
|
|
|
|||
|
|
@ -15,9 +15,10 @@ const LoginPage: React.FC = () => {
|
|||
{/* Logo */}
|
||||
<view className="logo-section">
|
||||
<view className="logo-box">
|
||||
<text className="logo-text">G</text>
|
||||
<view className="logo-left" />
|
||||
<view className="logo-right" />
|
||||
</view>
|
||||
<text className="app-name">Genex</text>
|
||||
<text className="app-name">GENEX</text>
|
||||
<text className="app-slogan">{t('app_slogan')}</text>
|
||||
</view>
|
||||
|
||||
|
|
@ -83,11 +84,18 @@ CSS:
|
|||
}
|
||||
.logo-box {
|
||||
width: 120rpx; height: 120rpx;
|
||||
background: linear-gradient(135deg, #6C5CE7, #9B8FFF);
|
||||
border-radius: 28rpx;
|
||||
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-slogan { font-size: 26rpx; color: #A0A8BE; margin-top: 8rpx; }
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 13 KiB |
|
|
@ -22,18 +22,12 @@ class WelcomePage extends StatelessWidget {
|
|||
const Spacer(flex: 2),
|
||||
|
||||
// Brand Logo
|
||||
Container(
|
||||
ClipRRect(
|
||||
borderRadius: AppSpacing.borderRadiusXl,
|
||||
child: Image.asset(
|
||||
'assets/images/logo_icon.png',
|
||||
width: 80,
|
||||
height: 80,
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.primaryGradient,
|
||||
borderRadius: AppSpacing.borderRadiusXl,
|
||||
boxShadow: AppSpacing.shadowPrimary,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.diamond_rounded,
|
||||
color: Colors.white,
|
||||
size: 40,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
|
|
|
|||
|
|
@ -29,3 +29,6 @@ dev_dependencies:
|
|||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- assets/images/logo.png
|
||||
- assets/images/logo_icon.png
|
||||
|
|
|
|||
|
|
@ -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 |
|
|
@ -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 |