feat: chat integration, tenant admin spec, backend chat service, miniprogram updates, DEMO moved to tmp, XCX-TEST removed, migrations & docs

This commit is contained in:
Neo
2026-03-20 09:02:10 +08:00
parent 3d2e5f8165
commit beb88d5bea
388 changed files with 6436 additions and 25458 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#1a6dd9"/>
<stop offset="15%" stop-color="#1a6dd9"/>
<stop offset="40%" stop-color="#4087e9"/>
<stop offset="60%" stop-color="#4087e9"/>
<stop offset="85%" stop-color="#6ba8f8"/>
<stop offset="100%" stop-color="#6ba8f8"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,103 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<!-- 主渐变 theme-blue -->
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#002d80"/>
<stop offset="15%" stop-color="#002d80"/>
<stop offset="40%" stop-color="#0052d9"/>
<stop offset="60%" stop-color="#0052d9"/>
<stop offset="85%" stop-color="#2b7de9"/>
<stop offset="100%" stop-color="#2b7de9"/>
</linearGradient>
<!-- 丝绸光带 -->
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<!-- 左上角深色 -->
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<!-- 顶部深色 -->
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<!-- 左侧光晕 -->
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<!-- 右下角光晕 -->
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<!-- 底部高光 -->
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<!-- 右上角光晕 -->
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<!-- Aurora 丝带渐变 -->
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<!-- 主渐变 -->
<rect width="750" height="580" fill="url(#main)"/>
<!-- 丝绸光带 -->
<rect width="750" height="580" fill="url(#silk)"/>
<!-- 左上角深色 -->
<rect width="750" height="580" fill="url(#darkTL)"/>
<!-- 顶部深色 -->
<rect width="750" height="580" fill="url(#darkTop)"/>
<!-- 左侧光晕 -->
<rect width="750" height="580" fill="url(#glowL)"/>
<!-- 右下角光晕 -->
<rect width="750" height="580" fill="url(#glowBR)"/>
<!-- 底部高光 -->
<rect width="750" height="580" fill="url(#edgeHL)"/>
<!-- 右上角光晕 -->
<rect width="750" height="580" fill="url(#glowTR)"/>
<!-- Aurora 丝带
原始 CSS: viewBox 400×200, background-size:480px 160px, background-position:center 40px, opacity:0.5
H5 画布 412px 宽 → 小程序 750rpx 宽,缩放比 750/412=1.820
x: (412-480)/2=-34 → -34×1.820=-61.9
y: 40px → 40×1.820=72.8
scale.x: 1.2×1.820=2.184
scale.y: 0.8×1.820=1.456
-->
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#be4a62"/>
<stop offset="15%" stop-color="#be4a62"/>
<stop offset="40%" stop-color="#d4617a"/>
<stop offset="60%" stop-color="#d4617a"/>
<stop offset="85%" stop-color="#e8899a"/>
<stop offset="100%" stop-color="#e8899a"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,78 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<!-- theme-dark-gold: 深色黑金,右下角金色光晕 -->
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#1a1a1a"/>
<stop offset="40%" stop-color="#2a2520"/>
<stop offset="100%" stop-color="#1f1c18"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.03"/>
<stop offset="45%" stop-color="white" stop-opacity="0.08"/>
<stop offset="55%" stop-color="white" stop-opacity="0.08"/>
<stop offset="80%" stop-color="white" stop-opacity="0.03"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.3"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.2"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.06"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<!-- 金色右下光晕 (::after dark-gold 特殊处理) -->
<radialGradient id="glowGold" cx="0.6" cy="0.7" r="0.6" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="#ffc400" stop-opacity="0.25"/>
<stop offset="50%" stop-color="#ffbb00" stop-opacity="0"/>
</radialGradient>
<linearGradient id="goldDiag" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#ffbb00" stop-opacity="0"/>
<stop offset="30%" stop-color="#ffbb00" stop-opacity="0.15"/>
<stop offset="60%" stop-color="#ffb700" stop-opacity="0.2"/>
<stop offset="100%" stop-color="#ffb700" stop-opacity="0"/>
</linearGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="#ffc400" stop-opacity="0.1"/>
<stop offset="25%" stop-color="#ffc400" stop-opacity="0"/>
</linearGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.3"/>
<stop offset="50%" stop-color="white" stop-opacity="0.1"/>
<stop offset="100%" stop-color="white" stop-opacity="0.2"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.2"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.25"/>
<stop offset="70%" stop-color="white" stop-opacity="0.25"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<!-- 金色光晕 -->
<rect width="750" height="580" fill="url(#glowGold)"/>
<rect width="750" height="580" fill="url(#goldDiag)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<!-- Aurora 丝带opacity 降低,配合深色主题) -->
<g opacity="0.35" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.15" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#9a3412"/>
<stop offset="15%" stop-color="#9a3412"/>
<stop offset="40%" stop-color="#ea580c"/>
<stop offset="60%" stop-color="#ea580c"/>
<stop offset="85%" stop-color="#f97316"/>
<stop offset="100%" stop-color="#f97316"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#9d174d"/>
<stop offset="15%" stop-color="#9d174d"/>
<stop offset="40%" stop-color="#db2777"/>
<stop offset="60%" stop-color="#db2777"/>
<stop offset="85%" stop-color="#ec4899"/>
<stop offset="100%" stop-color="#ec4899"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#991b1b"/>
<stop offset="15%" stop-color="#991b1b"/>
<stop offset="40%" stop-color="#dc2626"/>
<stop offset="60%" stop-color="#dc2626"/>
<stop offset="85%" stop-color="#ef4444"/>
<stop offset="100%" stop-color="#ef4444"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,76 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 580" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="main" x1="0" y1="1" x2="0.8" y2="0">
<stop offset="0%" stop-color="#0f766e"/>
<stop offset="15%" stop-color="#0f766e"/>
<stop offset="40%" stop-color="#14b8a6"/>
<stop offset="60%" stop-color="#14b8a6"/>
<stop offset="85%" stop-color="#2dd4bf"/>
<stop offset="100%" stop-color="#2dd4bf"/>
</linearGradient>
<linearGradient id="silk" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="20%" stop-color="white" stop-opacity="0.04"/>
<stop offset="45%" stop-color="white" stop-opacity="0.12"/>
<stop offset="55%" stop-color="white" stop-opacity="0.12"/>
<stop offset="80%" stop-color="white" stop-opacity="0.04"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="darkTL" cx="-0.1" cy="-0.05" r="0.75" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="black" stop-opacity="0.25"/>
<stop offset="45%" stop-color="black" stop-opacity="0"/>
</radialGradient>
<linearGradient id="darkTop" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="black" stop-opacity="0.18"/>
<stop offset="40%" stop-color="black" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowL" cx="0.05" cy="0.4" r="0.65" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.12"/>
<stop offset="50%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<radialGradient id="glowBR" cx="0.85" cy="0.95" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.25"/>
<stop offset="55%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="edgeHL" x1="0" y1="1" x2="0" y2="0">
<stop offset="0%" stop-color="white" stop-opacity="0.15"/>
<stop offset="25%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<radialGradient id="glowTR" cx="0.85" cy="0.1" r="0.55" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="40%" stop-color="white" stop-opacity="0.1"/>
<stop offset="65%" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="r1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="white" stop-opacity="0.4"/>
<stop offset="50%" stop-color="white" stop-opacity="0.15"/>
<stop offset="100%" stop-color="white" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="r2" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" stop-color="black" stop-opacity="0.15"/>
<stop offset="50%" stop-color="white" stop-opacity="0.2"/>
<stop offset="100%" stop-color="black" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="r3" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="30%" stop-color="white" stop-opacity="0.35"/>
<stop offset="70%" stop-color="white" stop-opacity="0.35"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="aBlur"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<rect width="750" height="580" fill="url(#main)"/>
<rect width="750" height="580" fill="url(#silk)"/>
<rect width="750" height="580" fill="url(#darkTL)"/>
<rect width="750" height="580" fill="url(#darkTop)"/>
<rect width="750" height="580" fill="url(#glowL)"/>
<rect width="750" height="580" fill="url(#glowBR)"/>
<rect width="750" height="580" fill="url(#edgeHL)"/>
<rect width="750" height="580" fill="url(#glowTR)"/>
<g opacity="0.5" transform="translate(-62,73) scale(2.184,1.456)">
<path d="M-50 180 Q80 100 180 140 T350 100 T500 140" fill="none" stroke="url(#r2)" stroke-width="60" stroke-linecap="round" filter="url(#aBlur)"/>
<path d="M-30 50 Q100 120 200 70 T380 110 T520 60" fill="none" stroke="url(#r1)" stroke-width="45" stroke-linecap="round"/>
<path d="M0 120 Q120 60 220 100 T420 70" fill="none" stroke="url(#r3)" stroke-width="25" stroke-linecap="round"/>
<path d="M50 90 Q150 150 280 90 T450 120" fill="none" stroke="white" stroke-opacity="0.25" stroke-width="8" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -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

View File

@@ -0,0 +1,69 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 95 95" width="95" height="95">
<defs>
<filter id="textBlur">
<feGaussianBlur stdDeviation="0.73"/>
</filter>
<!-- 内圆填充:从边框向圆心的单向光路,边缘不透明→圆心透明 -->
<radialGradient id="innerLight" cx="50%" cy="50%" r="50%" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="white" stop-opacity="0"/>
<stop offset="60%" stop-color="white" stop-opacity="0.18"/>
<stop offset="82%" stop-color="white" stop-opacity="0.38"/>
<stop offset="95%" stop-color="white" stop-opacity="0.75"/>
<stop offset="100%" stop-color="white" stop-opacity="0.95"/>
</radialGradient>
</defs>
<rect width="95" height="95" fill="transparent"/>
<!-- 外圆:更鲜艳红色 -->
<circle cx="47.5" cy="47.5" r="44.75"
fill="transparent"
stroke="rgb(255, 45, 45)"
stroke-width="5.5"/>
<!-- 内圆填充:从边框向圆心的光路渐变 -->
<circle cx="47.5" cy="47.5" r="40.25"
fill="url(#innerLight)"/>
<!-- 内圆:纯白描边,无发光 -->
<circle cx="47.5" cy="47.5" r="40.25"
fill="none"
stroke="rgb(255, 255, 255)"
stroke-width="3.65"/>
<!-- 👍 Emoji -->
<text x="47.5" y="33"
font-size="33"
text-anchor="middle"
dominant-baseline="middle"
fill="#000">👍</text>
<!-- 白色描边层 -->
<text x="47.5" y="72"
font-family="sans-serif, -apple-system, BlinkMacSystemFont"
font-size="20"
font-weight="bold"
text-anchor="middle"
fill="rgba(255,255,255,0.95)"
stroke="rgba(255,255,255,0.95)"
stroke-width="4"
paint-order="stroke">已完成</text>
<!-- 模糊白色光晕层 -->
<text x="47.5" y="72"
font-family="sans-serif, -apple-system, BlinkMacSystemFont"
font-size="20"
font-weight="bold"
text-anchor="middle"
fill="rgba(255,255,255,0.9)"
opacity="0.9"
filter="url(#textBlur)">已完成</text>
<!-- 红色文字主体:更鲜艳 -->
<text x="47.5" y="72"
font-family="sans-serif, -apple-system, BlinkMacSystemFont"
font-size="20"
font-weight="bold"
text-anchor="middle"
fill="rgb(235, 25, 25)">已完成</text>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB