feat: batch update - gift card breakdown spec, backend APIs, miniprogram pages, ETL finance recharge, docs & migrations
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="750" height="1334" viewBox="0 0 750 1334" fill="none">
|
||||
<defs>
|
||||
<linearGradient id="bgGrad" x1="0" y1="0" x2="750" y2="1334" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0%" stop-color="#dbeafe"/>
|
||||
<stop offset="50%" stop-color="#eff6ff"/>
|
||||
<stop offset="100%" stop-color="#dbeafe"/>
|
||||
</linearGradient>
|
||||
<!-- orb gradients -->
|
||||
<radialGradient id="orb1" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#93c5fd" stop-opacity="0.55"/>
|
||||
<stop offset="100%" stop-color="#3b82f6" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="orb2" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#67e8f9" stop-opacity="0.45"/>
|
||||
<stop offset="100%" stop-color="#06b6d4" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="orb3" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#a5b4fc" stop-opacity="0.4"/>
|
||||
<stop offset="100%" stop-color="#6366f1" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="orb4" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#bfdbfe" stop-opacity="0.5"/>
|
||||
<stop offset="100%" stop-color="#2563eb" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<!-- base gradient fill -->
|
||||
<rect width="750" height="1334" fill="url(#bgGrad)"/>
|
||||
|
||||
<!-- mesh grid (subtle) -->
|
||||
<g opacity="0.06" stroke="#3b82f6" stroke-width="1">
|
||||
<line x1="0" y1="133" x2="750" y2="133"/>
|
||||
<line x1="0" y1="267" x2="750" y2="267"/>
|
||||
<line x1="0" y1="400" x2="750" y2="400"/>
|
||||
<line x1="0" y1="534" x2="750" y2="534"/>
|
||||
<line x1="0" y1="667" x2="750" y2="667"/>
|
||||
<line x1="0" y1="800" x2="750" y2="800"/>
|
||||
<line x1="0" y1="934" x2="750" y2="934"/>
|
||||
<line x1="0" y1="1067" x2="750" y2="1067"/>
|
||||
<line x1="0" y1="1200" x2="750" y2="1200"/>
|
||||
<line x1="75" y1="0" x2="75" y2="1334"/>
|
||||
<line x1="150" y1="0" x2="150" y2="1334"/>
|
||||
<line x1="225" y1="0" x2="225" y2="1334"/>
|
||||
<line x1="300" y1="0" x2="300" y2="1334"/>
|
||||
<line x1="375" y1="0" x2="375" y2="1334"/>
|
||||
<line x1="450" y1="0" x2="450" y2="1334"/>
|
||||
<line x1="525" y1="0" x2="525" y2="1334"/>
|
||||
<line x1="600" y1="0" x2="600" y2="1334"/>
|
||||
<line x1="675" y1="0" x2="675" y2="1334"/>
|
||||
</g>
|
||||
|
||||
<!-- floating orb 1 (top-left) -->
|
||||
<ellipse cx="120" cy="220" rx="200" ry="200" fill="url(#orb1)">
|
||||
<animateTransform attributeName="transform" type="translate" values="0,0; 30,25; -15,40; 0,0" dur="8s" repeatCount="indefinite" calcMode="spline" keySplines="0.4 0 0.6 1;0.4 0 0.6 1;0.4 0 0.6 1"/>
|
||||
<animate attributeName="opacity" values="0.7;1;0.6;0.7" dur="8s" repeatCount="indefinite"/>
|
||||
</ellipse>
|
||||
|
||||
<!-- floating orb 2 (top-right) -->
|
||||
<ellipse cx="650" cy="300" rx="180" ry="180" fill="url(#orb2)">
|
||||
<animateTransform attributeName="transform" type="translate" values="0,0; -25,20; 10,-30; 0,0" dur="9s" begin="-2s" repeatCount="indefinite" calcMode="spline" keySplines="0.4 0 0.6 1;0.4 0 0.6 1;0.4 0 0.6 1"/>
|
||||
<animate attributeName="opacity" values="0.6;0.9;0.5;0.6" dur="9s" begin="-2s" repeatCount="indefinite"/>
|
||||
</ellipse>
|
||||
|
||||
<!-- floating orb 3 (mid) -->
|
||||
<ellipse cx="375" cy="700" rx="240" ry="160" fill="url(#orb3)">
|
||||
<animateTransform attributeName="transform" type="translate" values="0,0; 20,-20; -20,15; 0,0" dur="11s" begin="-4s" repeatCount="indefinite" calcMode="spline" keySplines="0.4 0 0.6 1;0.4 0 0.6 1;0.4 0 0.6 1"/>
|
||||
<animate attributeName="opacity" values="0.5;0.8;0.4;0.5" dur="11s" begin="-4s" repeatCount="indefinite"/>
|
||||
</ellipse>
|
||||
|
||||
<!-- floating orb 4 (bottom) -->
|
||||
<ellipse cx="200" cy="1100" rx="220" ry="220" fill="url(#orb4)">
|
||||
<animateTransform attributeName="transform" type="translate" values="0,0; 35,-15; -10,25; 0,0" dur="10s" begin="-6s" repeatCount="indefinite" calcMode="spline" keySplines="0.4 0 0.6 1;0.4 0 0.6 1;0.4 0 0.6 1"/>
|
||||
<animate attributeName="opacity" values="0.6;0.9;0.5;0.6" dur="10s" begin="-6s" repeatCount="indefinite"/>
|
||||
</ellipse>
|
||||
|
||||
<!-- floating orb 5 (bottom-right) -->
|
||||
<ellipse cx="600" cy="1050" rx="170" ry="170" fill="url(#orb2)">
|
||||
<animateTransform attributeName="transform" type="translate" values="0,0; -20,30; 15,-20; 0,0" dur="7s" begin="-3s" repeatCount="indefinite" calcMode="spline" keySplines="0.4 0 0.6 1;0.4 0 0.6 1;0.4 0 0.6 1"/>
|
||||
<animate attributeName="opacity" values="0.5;0.8;0.45;0.5" dur="7s" begin="-3s" repeatCount="indefinite"/>
|
||||
</ellipse>
|
||||
|
||||
<!-- decorative ring 1 -->
|
||||
<circle cx="100" cy="450" r="60" stroke="#3b82f6" stroke-width="1.5" fill="none" opacity="0.12">
|
||||
<animate attributeName="r" values="60;72;60" dur="6s" repeatCount="indefinite"/>
|
||||
<animate attributeName="opacity" values="0.12;0.22;0.12" dur="6s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="100" cy="450" r="40" stroke="#3b82f6" stroke-width="1" fill="none" opacity="0.08">
|
||||
<animate attributeName="r" values="40;50;40" dur="6s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- decorative ring 2 -->
|
||||
<circle cx="660" cy="900" r="55" stroke="#06b6d4" stroke-width="1.5" fill="none" opacity="0.12">
|
||||
<animate attributeName="r" values="55;67;55" dur="7s" begin="-2s" repeatCount="indefinite"/>
|
||||
<animate attributeName="opacity" values="0.12;0.2;0.12" dur="7s" begin="-2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- floating particles -->
|
||||
<circle cx="180" cy="580" r="4" fill="#3b82f6" opacity="0.3">
|
||||
<animate attributeName="cy" values="580;555;580" dur="5s" repeatCount="indefinite"/>
|
||||
<animate attributeName="opacity" values="0.3;0.6;0.3" dur="5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="560" cy="480" r="3" fill="#06b6d4" opacity="0.25">
|
||||
<animate attributeName="cy" values="480;460;480" dur="6s" begin="-1s" repeatCount="indefinite"/>
|
||||
<animate attributeName="opacity" values="0.25;0.5;0.25" dur="6s" begin="-1s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="330" cy="900" r="3.5" fill="#6366f1" opacity="0.25">
|
||||
<animate attributeName="cy" values="900;880;900" dur="7s" begin="-3s" repeatCount="indefinite"/>
|
||||
<animate attributeName="opacity" values="0.25;0.5;0.25" dur="7s" begin="-3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="500" cy="750" r="2.5" fill="#3b82f6" opacity="0.2">
|
||||
<animate attributeName="cy" values="750;732;750" dur="4.5s" begin="-2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="80" cy="830" r="3" fill="#93c5fd" opacity="0.3">
|
||||
<animate attributeName="cy" values="830;812;830" dur="8s" begin="-5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- diamond sparkles -->
|
||||
<g opacity="0.18">
|
||||
<polygon points="420,150 425,160 420,170 415,160" fill="#3b82f6">
|
||||
<animate attributeName="opacity" values="0.18;0.4;0.18" dur="3s" repeatCount="indefinite"/>
|
||||
</polygon>
|
||||
<polygon points="670,550 674,558 670,566 666,558"
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
Reference in New Issue
Block a user