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

View File

@@ -0,0 +1,13 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 白色填充版机器人(用于 ai-inline-icon 渐变背景上) -->
<rect x="5" y="7" width="14" height="12" rx="4" fill="white"/>
<path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/>
<circle cx="12" cy="3" r="1.5" fill="white"/>
<circle cx="9" cy="11.5" r="2" fill="white" opacity="0.5"/>
<circle cx="15" cy="11.5" r="2" fill="white" opacity="0.5"/>
<circle cx="9.5" cy="11" r="0.7" fill="white"/>
<circle cx="15.5" cy="11" r="0.7" fill="white"/>
<path d="M9.5 15C10 16 14 16 14.5 15" stroke="white" stroke-width="1.5" stroke-linecap="round" opacity="0.7"/>
<rect x="3" y="10" width="2" height="4" rx="1" fill="white"/>
<rect x="19" y="10" width="2" height="4" rx="1" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 840 B

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none">
<!-- AI 机器人 title badge icon — indigo 配色,用于标题徽章 -->
<!-- 对齐 H5 ai-icons.css .ai-title-badge-icon, 默认 indigo: #667eea → #a78bfa -->
<rect x="5" y="7" width="14" height="12" rx="4" fill="white" stroke="currentColor" stroke-width="0.8"/>
<path d="M12 7V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
<circle cx="12" cy="3" r="1.5" fill="white" stroke="currentColor" stroke-width="0.7"/>
<circle cx="9" cy="11.5" r="2" fill="#667eea"/>
<circle cx="15" cy="11.5" r="2" fill="#667eea"/>
<circle cx="9.5" cy="11" r="0.7" fill="white"/>
<circle cx="15.5" cy="11" r="0.7" fill="white"/>
<path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/>
<circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<rect x="3" y="10" width="2" height="4" rx="1" fill="white" stroke="currentColor" stroke-width="0.7"/>
<rect x="19" y="10" width="2" height="4" rx="1" fill="white" stroke="currentColor" stroke-width="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#4b4b4b" stroke-width="2">
<polyline points="15 18 9 12 15 6"/>
</svg>

After

Width:  |  Height:  |  Size: 153 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#00a870">
<path d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#a6a6a6">
<path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/>
</svg>

After

Width:  |  Height:  |  Size: 185 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#ed7b2f">
<path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/>
</svg>

After

Width:  |  Height:  |  Size: 185 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="3">
<polyline points="20 6 9 17 4 12"/>
</svg>

After

Width:  |  Height:  |  Size: 150 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
</svg>

After

Width:  |  Height:  |  Size: 213 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<polyline points="12 6 12 12 16 14"/>
</svg>

After

Width:  |  Height:  |  Size: 187 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/>
</svg>

After

Width:  |  Height:  |  Size: 199 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#a6a6a6">
<path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/>
</svg>

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#0052d9">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
</svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#e34d59">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
</svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#ed7b2f">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
</svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#5e5e5e" stroke-width="2">
<path d="M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"/>
<polyline points="16 17 21 12 16 7"/>
<line x1="21" y1="12" x2="9" y2="12"/>
</svg>

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#0052d9">
<path d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
</svg>

After

Width:  |  Height:  |  Size: 238 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white">
<path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.32.32 0 0 0 .165-.054l1.9-1.106a.96.96 0 0 1 .465-.116.94.94 0 0 1 .272.04 10.6 10.6 0 0 0 2.822.384c.136 0 .271-.002.405-.009a6.9 6.9 0 0 1-.315-2.053c0-3.694 3.614-6.69 8.076-6.69.233 0 .463.01.691.027C16.964 4.837 13.132 2.188 8.691 2.188zm-2.97 5.28a1.03 1.03 0 1 1 0-2.06 1.03 1.03 0 0 1 0 2.06zm5.96 0a1.03 1.03 0 1 1 0-2.06 1.03 1.03 0 0 1 0 2.06zM24 14.2c0-3.355-3.4-6.08-7.59-6.08s-7.59 2.725-7.59 6.08c0 3.356 3.4 6.08 7.59 6.08.772 0 1.515-.094 2.215-.268a.77.77 0 0 1 .224-.033.79.79 0 0 1 .382.095l1.565.912a.26.26 0 0 0 .135.044c.13 0 .238-.108.238-.242 0-.06-.024-.117-.04-.175l-.32-1.218a.48.48 0 0 1 .175-.547C22.95 17.89 24 16.165 24 14.2zm-10.14-.426a.85.85 0 1 1 0-1.7.85.85 0 0 1 0 1.7zm5.1 0a.85.85 0 1 1 0-1.7.85.85 0 0 1 0 1.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 998 B

View File

@@ -0,0 +1,28 @@
<svg width="30" height="30" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- ????? - ???? + ????? -->
<rect x="5" y="7" width="14" height="12" rx="4" fill="white" stroke="#1e3a5f" stroke-width="1.8" stroke-opacity="0.5"/>
<!-- ?? - ?? + ????? -->
<path d="M12 7V4" stroke="white" stroke-width="2.8" stroke-linecap="round"/>
<path d="M12 7V4" stroke="#1e3a5f" stroke-width="1.4" stroke-linecap="round" stroke-opacity="0.5"/>
<circle cx="12" cy="3" r="1.5" fill="white" stroke="#1e3a5f" stroke-width="1.2" stroke-opacity="0.5"/>
<!-- ?? -->
<circle cx="9" cy="11.5" r="2" fill="#667eea"/>
<circle cx="15" cy="11.5" r="2" fill="#667eea"/>
<!-- ???? -->
<circle cx="9.5" cy="11" r="0.7" fill="white"/>
<circle cx="15.5" cy="11" r="0.7" fill="white"/>
<!-- ???? -->
<path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/>
<!-- ?? -->
<circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.5"/>
<circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.5"/>
<!-- ?? - ?? + ????? -->
<rect x="3" y="10" width="2" height="4" rx="1" fill="white" stroke="#1e3a5f" stroke-width="1.2" stroke-opacity="0.5"/>
<rect x="19" y="10" width="2" height="4" rx="1" fill="white" stroke="#1e3a5f" stroke-width="1.2" stroke-opacity="0.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none">
<!-- AI 机器人 inline icon — 白色版,用于深色背景行首 -->
<!-- 对齐 H5 task-list 中内联 SVG 结构 -->
<rect x="5" y="7" width="14" height="12" rx="4" fill="white"/>
<path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/>
<circle cx="12" cy="3" r="1.5" fill="white"/>
<circle cx="9" cy="11.5" r="2" fill="#667eea"/>
<circle cx="15" cy="11.5" r="2" fill="#667eea"/>
<circle cx="9.5" cy="11" r="0.7" fill="white"/>
<circle cx="15.5" cy="11" r="0.7" fill="white"/>
<path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/>
<circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<rect x="3" y="10" width="2" height="4" rx="1" fill="white"/>
<rect x="19" y="10" width="2" height="4" rx="1" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 983 B

View File

@@ -0,0 +1,21 @@
<svg width="30" height="30" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 机器人头部 -->
<rect x="5" y="7" width="14" height="12" rx="4" fill="white"/>
<!-- 天线 -->
<path d="M12 7V4" stroke="white" stroke-width="2" stroke-linecap="round"/>
<circle cx="12" cy="3" r="1.5" fill="white"/>
<!-- 眼睛 -->
<circle cx="9" cy="11.5" r="2" fill="#667eea"/>
<circle cx="15" cy="11.5" r="2" fill="#667eea"/>
<!-- 眼睛高光 -->
<circle cx="9.5" cy="11" r="0.7" fill="white"/>
<circle cx="15.5" cy="11" r="0.7" fill="white"/>
<!-- 微笑嘴巴 -->
<path d="M9.5 15C10 16 14 16 14.5 15" stroke="#667eea" stroke-width="1.5" stroke-linecap="round"/>
<!-- 腮红 -->
<circle cx="7" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<circle cx="17" cy="13.5" r="1" fill="#f5a0c0" opacity="0.6"/>
<!-- 耳朵 -->
<rect x="3" y="10" width="2" height="4" rx="1" fill="white"/>
<rect x="19" y="10" width="2" height="4" rx="1" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1001 B

View File

@@ -0,0 +1,18 @@
<!-- 黑色台球 - 大号8 -->
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="ballGradient" cx="35%" cy="35%">
<stop offset="0%" style="stop-color:#3a3a3a;stop-opacity:1" />
<stop offset="70%" style="stop-color:#1f2937;stop-opacity:1" />
<stop offset="100%" style="stop-color:#0f0f0f;stop-opacity:1" />
</radialGradient>
</defs>
<!-- 球体 -->
<circle cx="24" cy="24" r="18" fill="url(#ballGradient)"/>
<!-- 高光 -->
<ellipse cx="18" cy="16" rx="6" ry="4" fill="white" opacity="0.3"/>
<!-- 白色圆圈 -->
<circle cx="24" cy="24" r="8" fill="white"/>
<!-- 数字8 -->
<text x="24" y="29" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#1f2937" text-anchor="middle">8</text>
</svg>

After

Width:  |  Height:  |  Size: 833 B

View File

@@ -0,0 +1,18 @@
<!-- 灰色台球 - 大号8 -->
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="ballGrayGradient" cx="35%" cy="35%">
<stop offset="0%" style="stop-color:#d0d0d0;stop-opacity:1" />
<stop offset="70%" style="stop-color:#c5c5c5;stop-opacity:1" />
<stop offset="100%" style="stop-color:#a6a6a6;stop-opacity:1" />
</radialGradient>
</defs>
<!-- 球体 -->
<circle cx="24" cy="24" r="18" fill="url(#ballGrayGradient)" opacity="0.5"/>
<!-- 高光 -->
<ellipse cx="18" cy="16" rx="6" ry="4" fill="white" opacity="0.3"/>
<!-- 白色圆圈 -->
<circle cx="24" cy="24" r="8" fill="white" opacity="0.6"/>
<!-- 数字8 -->
<text x="24" y="29" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#a6a6a6" text-anchor="middle" opacity="0.6">8</text>
</svg>

After

Width:  |  Height:  |  Size: 883 B

View File

@@ -0,0 +1,97 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" fill="none">
<defs>
<!-- 主背景渐变:橙色 -->
<linearGradient id="ag" x1="0" y1="0" x2="80" y2="80" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#ffab5e"/>
<stop offset="100%" stop-color="#e05a00"/>
</linearGradient>
<!-- 头部面板渐变 -->
<linearGradient id="head" x1="20" y1="26" x2="60" y2="66" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#fff3e0"/>
<stop offset="100%" stop-color="#ffe0b2"/>
</linearGradient>
<!-- 眼睛渐变 -->
<linearGradient id="eye" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#ff8c42"/>
<stop offset="100%" stop-color="#c94f00"/>
</linearGradient>
<!-- 口部渐变 -->
<linearGradient id="mouth" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#ff8c42"/>
<stop offset="100%" stop-color="#e05a00"/>
</linearGradient>
<!-- 投影 -->
<filter id="as" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="3" stdDeviation="3" flood-color="#c94f00" flood-opacity="0.32"/>
</filter>
<!-- 头部光泽 -->
<filter id="hs" x="-10%" y="-10%" width="120%" height="120%">
<feDropShadow dx="0" dy="2" stdDeviation="2" flood-color="#ffab5e" flood-opacity="0.5"/>
</filter>
<!-- 眼睛外发光 -->
<filter id="eyeglow" x="-60%" y="-60%" width="220%" height="220%">
<feGaussianBlur stdDeviation="1.5" result="blur"/>
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
<!-- 天线发光 -->
<filter id="antglow" x="-80%" y="-80%" width="360%" height="360%">
<feGaussianBlur stdDeviation="2" result="blur"/>
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<!-- ── 外层背景圆角面板 ── -->
<rect x="8" y="8" width="64" height="64" rx="18" fill="url(#ag)" filter="url(#as)"/>
<!-- ── 顶部高光条 ── -->
<rect x="8" y="8" width="64" height="22" rx="18" fill="white" opacity="0.10"/>
<!-- ── 天线(高对比度,纯白单杆,辨识度优先) ── -->
<line x1="40" y1="23" x2="40" y2="10" stroke="white" stroke-width="5" stroke-linecap="round"/>
<!-- 天线球:白色大球 + 橙色芯 + 高光 -->
<circle cx="40" cy="7" r="6" fill="white"/>
<circle cx="40" cy="7" r="3.2" fill="#ff8c42"/>
<circle cx="38.8" cy="5.8" r="1.1" fill="white" opacity="0.9"/>
<!-- ── 机器人头部主体 ── -->
<rect x="18" y="24" width="44" height="36" rx="10" fill="url(#head)" filter="url(#hs)"/>
<!-- 头部顶部高光线 -->
<rect x="24" y="25" width="32" height="3" rx="1.5" fill="white" opacity="0.55"/>
<!-- ── 耳朵(只保留外轮廓三面,内侧开口贴合头部无边界线) ── -->
<!-- 左耳:填充先铺,再用外轮廓 path 三面描边(左/上/下弧),右侧开口不画线 -->
<rect x="11" y="33" width="8" height="14" rx="4" fill="#ffd4a8"/>
<!-- 用头部同色覆盖右侧接缝描边区域 -->
<rect x="17" y="33" width="3" height="14" fill="#ffd4a8"/>
<path d="M19 33 Q11 33 11 37 L11 43 Q11 47 19 47" stroke="#ffab5e" stroke-width="1.8" fill="none" stroke-linecap="round"/>
<!-- 右耳:同理,左侧开口不画线 -->
<rect x="61" y="33" width="8" height="14" rx="4" fill="#ffd4a8"/>
<rect x="61" y="33" width="3" height="14" fill="#ffd4a8"/>
<path d="M61 33 Q69 33 69 37 L69 43 Q69 47 61 47" stroke="#ffab5e" stroke-width="1.8" fill="none" stroke-linecap="round"/>
<!-- ── 眼睛(渐变 + 双高光 + 发光) ── -->
<!-- 左眼 -->
<circle cx="31" cy="37" r="5.5" fill="url(#eye)" filter="url(#eyeglow)"/>
<circle cx="31" cy="37" r="4.5" fill="url(#eye)"/>
<circle cx="29.5" cy="35.5" r="1.6" fill="white" opacity="0.9"/>
<circle cx="33" cy="38.5" r="0.8" fill="white" opacity="0.5"/>
<!-- 右眼 -->
<circle cx="49" cy="37" r="5.5" fill="url(#eye)" filter="url(#eyeglow)"/>
<circle cx="49" cy="37" r="4.5" fill="url(#eye)"/>
<circle cx="47.5" cy="35.5" r="1.6" fill="white" opacity="0.9"/>
<circle cx="51" cy="38.5" r="0.8" fill="white" opacity="0.5"/>
<!-- ── 腮红(红色系,更明显) ── -->
<ellipse cx="23.5" cy="46" rx="5" ry="3.2" fill="#f4756a" opacity="0.65"/>
<ellipse cx="56.5" cy="46" rx="5" ry="3.2" fill="#f4756a" opacity="0.65"/>
<!-- ── 微笑嘴巴 ── -->
<path d="M30 49 Q40 56 50 49" stroke="url(#mouth)" stroke-width="2.2" stroke-linecap="round" fill="none"/>
<path d="M34 50.5 Q40 55 46 50.5" fill="white" opacity="0.55"/>
<!-- ── 右上角单颗星形闪光 ── -->
<path d="M65 13 L66.2 16 L69.5 16 L67 18 L68 21 L65 19.2 L62 21 L63 18 L60.5 16 L63.8 16 Z"
fill="#fff3e0" opacity="0.65"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,40 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" fill="none">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="80" y2="80" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#00c896"/>
<stop offset="100%" stop-color="#008c6a"/>
</linearGradient>
<linearGradient id="bar1" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#6fffd4"/>
<stop offset="100%" stop-color="#00c896"/>
</linearGradient>
<linearGradient id="bar2" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#fff" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#a0ffe0"/>
</linearGradient>
<linearGradient id="bar3" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#6fffd4"/>
<stop offset="100%" stop-color="#00a870"/>
</linearGradient>
<filter id="bs" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="3" stdDeviation="3" flood-color="#008c6a" flood-opacity="0.35"/>
</filter>
</defs>
<!-- background panel -->
<rect x="10" y="10" width="60" height="60" rx="14" fill="url(#bg)" filter="url(#bs)"/>
<!-- grid lines -->
<line x1="18" y1="55" x2="62" y2="55" stroke="white" stroke-opacity="0.2" stroke-width="1"/>
<line x1="18" y1="45" x2="62" y2="45" stroke="white" stroke-opacity="0.15" stroke-width="1"/>
<line x1="18" y1="35" x2="62" y2="35" stroke="white" stroke-opacity="0.1" stroke-width="1"/>
<!-- bars -->
<rect x="20" y="38" width="10" height="17" rx="3" fill="url(#bar2)" opacity="0.85"/>
<rect x="34" y="28" width="10" height="27" rx="3" fill="white" opacity="0.95"/>
<rect x="48" y="33" width="10" height="22" rx="3" fill="url(#bar2)" opacity="0.85"/>
<!-- trend line -->
<polyline points="25,37 39,25 53,30" stroke="#ffffcc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.7"/>
<circle cx="25" cy="37" r="2.5" fill="#fff" opacity="0.9"/>
<circle cx="39" cy="25" r="2.5" fill="#fff" opacity="0.9"/>
<circle cx="53" cy="30" r="2.5" fill="#fff" opacity="0.9"/>
<!-- bottom axis -->
<line x1="18" y1="57" x2="62" y2="57" stroke="white" stroke-opacity="0.4" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" fill="none">
<defs>
<linearGradient id="tg" x1="0" y1="0" x2="80" y2="80" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#4f8ef7"/>
<stop offset="100%" stop-color="#1a5fd8"/>
</linearGradient>
<linearGradient id="tg2" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#7ab4ff"/>
<stop offset="100%" stop-color="#4f8ef7"/>
</linearGradient>
<filter id="ts" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="3" stdDeviation="3" flood-color="#1a5fd8" flood-opacity="0.35"/>
</filter>
</defs>
<!-- clipboard body -->
<rect x="16" y="14" width="48" height="56" rx="8" fill="url(#tg)" filter="url(#ts)"/>
<!-- clip top tab -->
<rect x="28" y="10" width="24" height="12" rx="6" fill="#7ab4ff"/>
<!-- white card shine -->
<rect x="22" y="28" width="36" height="5" rx="2.5" fill="white" opacity="0.9"/>
<rect x="22" y="38" width="28" height="4" rx="2" fill="white" opacity="0.6"/>
<rect x="22" y="47" width="32" height="4" rx="2" fill="white" opacity="0.6"/>
<rect x="22" y="56" width="20" height="4" rx="2" fill="white" opacity="0.4"/>
<!-- check circle -->
<circle cx="60" cy="58" r="12" fill="#fff" opacity="0.15"/>
<circle cx="60" cy="58" r="9" fill="#e8f1ff" stroke="#7ab4ff" stroke-width="1.5"/>
<polyline points="55.5,58 58.5,61 64.5,55" stroke="#1a5fd8" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,11 @@
<!-- 空心爱心 - 华丽版 -->
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="heartStroke" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b9d;stop-opacity:1" />
<stop offset="50%" style="stop-color:#e34d59;stop-opacity:1" />
<stop offset="100%" style="stop-color:#c9184a;stop-opacity:1" />
</linearGradient>
</defs>
<path d="M24 42L20.55 38.85C11.4 30.48 5.25 24.87 5.25 18C5.25 12.39 9.39 8.25 15 8.25C18.09 8.25 21.06 9.69 23.25 12C25.44 9.69 28.41 8.25 31.5 8.25C37.11 8.25 41.25 12.39 41.25 18C41.25 24.87 35.1 30.48 25.95 38.85L24 42Z" stroke="url(#heartStroke)" stroke-width="2.5" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 749 B

View File

@@ -0,0 +1,22 @@
<!-- 实心爱心 - 华丽版 -->
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- 外发光 -->
<defs>
<filter id="glow">
<feGaussianBlur stdDeviation="2" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<linearGradient id="heartGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b9d;stop-opacity:1" />
<stop offset="50%" style="stop-color:#e34d59;stop-opacity:1" />
<stop offset="100%" style="stop-color:#c9184a;stop-opacity:1" />
</linearGradient>
</defs>
<!-- 主体爱心 -->
<path d="M24 42L20.55 38.85C11.4 30.48 5.25 24.87 5.25 18C5.25 12.39 9.39 8.25 15 8.25C18.09 8.25 21.06 9.69 23.25 12C25.44 9.69 28.41 8.25 31.5 8.25C37.11 8.25 41.25 12.39 41.25 18C41.25 24.87 35.1 30.48 25.95 38.85L24 42Z" fill="url(#heartGradient)" filter="url(#glow)"/>
<!-- 高光 -->
<path d="M15 8.25C12.5 8.25 10.3 9.2 8.8 10.8C10.5 9.5 12.6 8.8 15 8.8C17.5 8.8 19.8 9.8 21.5 11.5C20 9.5 17.7 8.25 15 8.25Z" fill="white" opacity="0.4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<polyline points="12 6 12 12 16 14"/>
</svg>

After

Width:  |  Height:  |  Size: 187 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/>
</svg>

After

Width:  |  Height:  |  Size: 199 B

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white">
<path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.32.32 0 0 0 .165-.054l1.9-1.106a.96.96 0 0 1 .465-.116.94.94 0 0 1 .272.04 10.6 10.6 0 0 0 2.822.384c.136 0 .271-.002.405-.009a6.9 6.9 0 0 1-.315-2.053c0-3.694 3.614-6.69 8.076-6.69.233 0 .463.01.691.027C16.964 4.837 13.132 2.188 8.691 2.188zm-2.97 5.28a1.03 1.03 0 1 1 0-2.06 1.03 1.03 0 0 1 0 2.06zm5.96 0a1.03 1.03 0 1 1 0-2.06 1.03 1.03 0 0 1 0 2.06zM24 14.2c0-3.355-3.4-6.08-7.59-6.08s-7.59 2.725-7.59 6.08c0 3.356 3.4 6.08 7.59 6.08.772 0 1.515-.094 2.215-.268a.77.77 0 0 1 .224-.033.79.79 0 0 1 .382.095l1.565.912a.26.26 0 0 0 .135.044c.13 0 .238-.108.238-.242 0-.06-.024-.117-.04-.175l-.32-1.218a.48.48 0 0 1 .175-.547C22.95 17.89 24 16.165 24 14.2zm-10.14-.426a.85.85 0 1 1 0-1.7.85.85 0 0 1 0 1.7zm5.1 0a.85.85 0 1 1 0-1.7.85.85 0 0 1 0 1.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 998 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white">
<circle cx="12" cy="12" r="10" fill="white" opacity="0.3"/>
<circle cx="12" cy="12" r="6" fill="white"/>
<circle cx="12" cy="12" r="2" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 237 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36" fill="none"><path d="M6 9a3 3 0 013-3h14a3 3 0 013 3v11a3 3 0 01-3 3h-5l-5 4v-4H9a3 3 0 01-3-3V9z" stroke="#00a870" stroke-width="2" fill="none"/><path d="M10.5 12.5h11" stroke="#00a870" stroke-width="1.6" stroke-linecap="round" opacity="0.6"/><path d="M10.5 16h7" stroke="#00a870" stroke-width="1.6" stroke-linecap="round" opacity="0.6"/><path d="M27 5l1 2.5 2.5 1-2.5 1L27 12l-1-2.5L23.5 8.5l2.5-1L27 5z" fill="#00a870"/></svg>

After

Width:  |  Height:  |  Size: 513 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36" fill="none"><path d="M12.5 10.5A11 11 0 1023.5 10.5" stroke="#e34d59" stroke-width="2.2" stroke-linecap="round" fill="none"/><path d="M18 7v10" stroke="#e34d59" stroke-width="2.4" stroke-linecap="round"/><circle cx="18" cy="23" r="2" fill="#e34d59" opacity="0.25"/></svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36" fill="none"><rect x="6" y="8" width="18" height="22" rx="3" stroke="#0052d9" stroke-width="2" fill="none"/><path d="M10 14h10" stroke="#0052d9" stroke-width="1.8" stroke-linecap="round"/><path d="M10 18h10" stroke="#0052d9" stroke-width="1.8" stroke-linecap="round"/><path d="M10 22h6" stroke="#0052d9" stroke-width="1.8" stroke-linecap="round"/><path d="M22 6l4 4-9 9-5 1 1-5 9-9z" fill="#0052d9" opacity="0.9"/><path d="M22 6l4 4" stroke="white" stroke-width="1" opacity="0.4"/><rect x="24.5" y="4" width="3" height="3" rx="1" fill="#60a5fa" transform="rotate(45 26 5.5)"/></svg>

After

Width:  |  Height:  |  Size: 665 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><path d="M6 20L34 8 22 34 18 22 6 20z" fill="#bbbbbb"/></svg>

After

Width:  |  Height:  |  Size: 156 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><path d="M6 20L34 8 22 34 18 22 6 20z" fill="#ffffff"/></svg>

After

Width:  |  Height:  |  Size: 156 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none"><path d="M6 20L34 8 22 34 18 22 6 20z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 162 B

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="4" y="13" width="4" height="8" rx="1" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
<rect x="10" y="8" width="4" height="13" rx="1" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
<rect x="16" y="3" width="4" height="18" rx="1" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 405 B

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="4" y="13" width="4" height="8" rx="1" stroke="#8b8b8b" stroke-width="1.5"/>
<rect x="10" y="8" width="4" height="13" rx="1" stroke="#8b8b8b" stroke-width="1.5"/>
<rect x="16" y="3" width="4" height="18" rx="1" stroke="#8b8b8b" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View File

@@ -0,0 +1,4 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="7" r="4" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
<path d="M5.5 21a6.5 6.5 0 0113 0h-13z" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 278 B

View File

@@ -0,0 +1,4 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="7" r="4" stroke="#8b8b8b" stroke-width="1.5"/>
<path d="M5.5 21a6.5 6.5 0 0113 0h-13z" stroke="#8b8b8b" stroke-width="1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="5" y="4" width="14" height="17" rx="2" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
<rect x="8" y="2" width="8" height="4" rx="1" fill="#0052d9" stroke="#0052d9" stroke-width="1"/>
<path d="M9 12l2 2 4-4" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="5" y="4" width="14" height="17" rx="2" stroke="#8b8b8b" stroke-width="1.5"/>
<rect x="8" y="2" width="8" height="4" rx="1" stroke="#8b8b8b" stroke-width="1.5"/>
<path d="M9 12l2 2 4-4" stroke="#8b8b8b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 386 B

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