queen-mq 0.2.0 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +165 -769
  2. package/{src → client-js}/benchmark/consumer.js +5 -3
  3. package/{src → client-js}/benchmark/producer.js +9 -4
  4. package/{src → client-js}/client/client.js +272 -6
  5. package/{src → client-js}/client/index.js +1 -4
  6. package/{src → client-js}/client/utils/http.js +3 -2
  7. package/{src → client-js}/client/utils/retry.js +7 -1
  8. package/{src → client-js}/test/core-tests.js +7 -2
  9. package/{src → client-js}/test/edge-case-tests.js +2 -1
  10. package/client-js/test/human.js +162 -0
  11. package/client-js/test/qos0-tests.js +334 -0
  12. package/{src → client-js}/test/test-new.js +42 -0
  13. package/package.json +8 -17
  14. package/init-db.js +0 -20
  15. package/src/cluster-server.js +0 -242
  16. package/src/config.js +0 -229
  17. package/src/database/connection.js +0 -129
  18. package/src/database/poolManager.js +0 -199
  19. package/src/database/schema-v2.sql +0 -278
  20. package/src/managers/eventManager.js +0 -59
  21. package/src/managers/queueManagerOptimized.js +0 -1634
  22. package/src/managers/resourceCache.js +0 -96
  23. package/src/managers/systemEventManager.js +0 -132
  24. package/src/routes/ack.js +0 -26
  25. package/src/routes/configure.js +0 -46
  26. package/src/routes/messages.js +0 -368
  27. package/src/routes/pop.js +0 -69
  28. package/src/routes/push.js +0 -28
  29. package/src/routes/resources.js +0 -330
  30. package/src/routes/status.js +0 -1037
  31. package/src/server.js +0 -1633
  32. package/src/test/MIGRATION_ISSUES.md +0 -174
  33. package/src/test/test.js +0 -4524
  34. package/src/utils/streaming.js +0 -231
  35. package/src/webapp-dist/assets/Analytics-DJrE4Rz2.css +0 -1
  36. package/src/webapp-dist/assets/Analytics-HEMXKmfJ.js +0 -1
  37. package/src/webapp-dist/assets/ConfirmDialog-YEoCdE7x.js +0 -1
  38. package/src/webapp-dist/assets/ConsumerGroups-CC5VJywp.css +0 -1
  39. package/src/webapp-dist/assets/ConsumerGroups-D8Z20HhZ.js +0 -1
  40. package/src/webapp-dist/assets/Dashboard-BRFOz6it.css +0 -1
  41. package/src/webapp-dist/assets/Dashboard-Bpx9I32h.js +0 -1
  42. package/src/webapp-dist/assets/LoadingSpinner-BPttXcbs.js +0 -1
  43. package/src/webapp-dist/assets/Messages-BOfVHKma.css +0 -1
  44. package/src/webapp-dist/assets/Messages-EKURCbLl.js +0 -1
  45. package/src/webapp-dist/assets/QueueDetail-BXXA7xoZ.css +0 -1
  46. package/src/webapp-dist/assets/QueueDetail-Bmxg0KiA.js +0 -1
  47. package/src/webapp-dist/assets/Queues-CvrJkrZT.css +0 -1
  48. package/src/webapp-dist/assets/Queues-yUx9_3-9.js +0 -1
  49. package/src/webapp-dist/assets/StatusBadge-C1bBtXHh.css +0 -1
  50. package/src/webapp-dist/assets/StatusBadge-C6N84XmO.js +0 -1
  51. package/src/webapp-dist/assets/analytics-BapTekLM.js +0 -1
  52. package/src/webapp-dist/assets/colors-5z6Q_kUr.js +0 -18
  53. package/src/webapp-dist/assets/index-B7w2bKT6.css +0 -1
  54. package/src/webapp-dist/assets/index-CUSnwYTH.js +0 -31
  55. package/src/webapp-dist/assets/messages-CRV6E-xU.js +0 -1
  56. package/src/webapp-dist/assets/queen-logo-blue.svg +0 -210
  57. package/src/webapp-dist/assets/queen-logo-cyan.svg +0 -210
  58. package/src/webapp-dist/assets/queen-logo-indigo.svg +0 -210
  59. package/src/webapp-dist/assets/queen-logo-orange.svg +0 -210
  60. package/src/webapp-dist/assets/queen-logo-pink.svg +0 -210
  61. package/src/webapp-dist/assets/queen-logo-purple.svg +0 -210
  62. package/src/webapp-dist/assets/queen-logo-rose.svg +0 -239
  63. package/src/webapp-dist/assets/queen-logo.svg +0 -263
  64. package/src/webapp-dist/assets/queues-BdUbxfBC.js +0 -1
  65. package/src/webapp-dist/assets/resources-Bs9U-ceF.js +0 -1
  66. package/src/webapp-dist/index.html +0 -15
  67. package/src/websocket/wsServer.js +0 -228
  68. /package/{src → client-js}/benchmark/consumer_multi.js +0 -0
  69. /package/{src → client-js}/benchmark/producer_multi.js +0 -0
  70. /package/{src → client-js}/client/utils/loadBalancer.js +0 -0
  71. /package/{src → client-js}/services/encryptionService.js +0 -0
  72. /package/{src → client-js}/services/evictionService.js +0 -0
  73. /package/{src → client-js}/services/retentionService.js +0 -0
  74. /package/{src → client-js}/services/startupSync.js +0 -0
  75. /package/{src → client-js}/test/README.md +0 -0
  76. /package/{src → client-js}/test/advanced-client-tests.js +0 -0
  77. /package/{src → client-js}/test/advanced-pattern-tests.js +0 -0
  78. /package/{src → client-js}/test/bus-mode-tests.js +0 -0
  79. /package/{src → client-js}/test/enterprise-tests.js +0 -0
  80. /package/{src → client-js}/test/partition-locking-tests.js +0 -0
  81. /package/{src → client-js}/test/utils.js +0 -0
  82. /package/{src → client-js}/test/window-buffer-test.js +0 -0
  83. /package/{src → client-js}/utils/logger.js +0 -0
  84. /package/{src → client-js}/utils/uuid.js +0 -0
@@ -1,210 +0,0 @@
1
- <svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
2
-
3
- <!-- Decorative sparkles -->
4
- <g id="sparkles">
5
- <circle cx="25" cy="30" r="1" fill="url(#sparkleGradient)" opacity="0.8">
6
- <animate attributeName="opacity" values="0.8;0.3;0.8" dur="3s" repeatCount="indefinite"/>
7
- </circle>
8
- <circle cx="95" cy="35" r="1.5" fill="url(#sparkleGradient)" opacity="0.6">
9
- <animate attributeName="opacity" values="0.6;1;0.6" dur="2.5s" repeatCount="indefinite"/>
10
- </circle>
11
- <circle cx="90" cy="85" r="1" fill="url(#sparkleGradient)" opacity="0.7">
12
- <animate attributeName="opacity" values="0.7;0.4;0.7" dur="2s" repeatCount="indefinite"/>
13
- </circle>
14
- <circle cx="30" cy="90" r="1.2" fill="url(#sparkleGradient)" opacity="0.5">
15
- <animate attributeName="opacity" values="0.5;0.9;0.5" dur="2.8s" repeatCount="indefinite"/>
16
- </circle>
17
- </g>
18
-
19
- <!-- Queue lines flowing -->
20
- <g id="queue-lines">
21
- <g opacity="0.8">
22
- <rect x="15" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
23
- <animate attributeName="x" values="15;20;15" dur="4s" repeatCount="indefinite"/>
24
- </rect>
25
- <rect x="18" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
26
- <animate attributeName="x" values="18;23;18" dur="3.5s" repeatCount="indefinite"/>
27
- </rect>
28
- <rect x="12" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
29
- <animate attributeName="x" values="12;17;12" dur="4.5s" repeatCount="indefinite"/>
30
- </rect>
31
- </g>
32
- <g opacity="0.8">
33
- <rect x="85" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
34
- <animate attributeName="x" values="85;80;85" dur="4s" repeatCount="indefinite"/>
35
- </rect>
36
- <rect x="87" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
37
- <animate attributeName="x" values="87;82;87" dur="3.5s" repeatCount="indefinite"/>
38
- </rect>
39
- <rect x="83" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
40
- <animate attributeName="x" values="83;78;83" dur="4.5s" repeatCount="indefinite"/>
41
- </rect>
42
- </g>
43
- </g>
44
-
45
- <!-- Main duck -->
46
- <g id="queen-duck" transform="translate(60, 60)">
47
- <ellipse cx="0" cy="35" rx="25" ry="8" fill="#000000" opacity="0.15"/>
48
- <path d="M -20 5 Q -25 15 -22 28 Q -18 38 -5 40 L 5 40 Q 18 38 22 28 Q 25 15 20 5 Q 15 -2 8 -3 L -8 -3 Q -15 -2 -20 5 Z"
49
- fill="url(#bodyGradient)" stroke="url(#bodyStroke)" stroke-width="1.5"/>
50
- <ellipse cx="0" cy="15" rx="12" ry="15" fill="url(#chestHighlight)" opacity="0.6"/>
51
- <path d="M -18 8 Q -23 12 -22 20 Q -20 25 -15 22 Q -12 18 -13 12 Z"
52
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
53
- <path d="M 18 8 Q 23 12 22 20 Q 20 25 15 22 Q 12 18 13 12 Z"
54
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
55
- <path d="M -5 -3 Q -6 -8 -5 -12 L 5 -12 Q 6 -8 5 -3" fill="url(#neckGradient)" stroke="none"/>
56
- <ellipse cx="0" cy="-18" rx="12" ry="13" fill="url(#headGradient)" stroke="url(#headStroke)" stroke-width="1.2"/>
57
- <ellipse cx="-2" cy="-20" rx="6" ry="7" fill="url(#headHighlight)" opacity="0.5"/>
58
- <path d="M 8 -18 Q 14 -18 15 -17 Q 15 -15 14 -14 Q 13 -13 8 -14 Z"
59
- fill="url(#beakGradient)" stroke="#FCD34D" stroke-width="0.8"/>
60
- <ellipse cx="4" cy="-19" rx="3" ry="3.5" fill="white"/>
61
- <ellipse cx="4.5" cy="-19" rx="2" ry="2.5" fill="url(#eyeGradient)"/>
62
- <circle cx="5" cy="-19.5" r="1" fill="#1F2937"/>
63
- <circle cx="5.5" cy="-20" r="0.4" fill="white"/>
64
- <path d="M 6 -22 L 7 -23.5 M 7 -21.5 L 8.5 -22.5 M 7.5 -21 L 9 -21.5"
65
- stroke="#1F2937" stroke-width="0.4" fill="none" stroke-linecap="round"/>
66
- <ellipse cx="1" cy="-15" rx="2.5" ry="1.5" fill="#FFB6C1" opacity="0.4"/>
67
-
68
- <g id="crown" transform="translate(0, -32)">
69
- <ellipse cx="0" cy="2" rx="12" ry="3" fill="#000000" opacity="0.1"/>
70
- <path d="M -12 0 L -10 -8 L -6 -3 L -3 -10 L 0 -5 L 3 -10 L 6 -3 L 10 -8 L 12 0 Q 10 2 0 2 Q -10 2 -12 0 Z"
71
- fill="url(#crownGradient)" stroke="url(#crownStroke)" stroke-width="1.2" stroke-linejoin="round"/>
72
- <path d="M -10 0 L -8 -6 L -5 -2 L -2 -8 L 0 -4 L 2 -8 L 5 -2 L 8 -6 L 10 0"
73
- fill="none" stroke="#FEF3C7" stroke-width="0.5" opacity="0.6"/>
74
- <circle cx="0" cy="-2" r="2.5" fill="url(#centerJewelGradient)" stroke="#f97316" stroke-width="0.5"/>
75
- <circle cx="0" cy="-2" r="1.5" fill="url(#jewelSparkle)" opacity="0.8"/>
76
- <circle cx="-6" cy="-1" r="1.8" fill="url(#leftJewelGradient)" stroke="#fb923c" stroke-width="0.4"/>
77
- <circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#ea580c" stroke-width="0.4"/>
78
- <circle cx="-3" cy="-4" r="1" fill="#fdba74" opacity="0.9"/>
79
- <circle cx="3" cy="-4" r="1" fill="#fdba74" opacity="0.9"/>
80
- <circle cx="0" cy="-10" r="1.2" fill="#FEF3C7"/>
81
- <circle cx="-6" cy="-8" r="1" fill="#FEF3C7"/>
82
- <circle cx="6" cy="-8" r="1" fill="#FEF3C7"/>
83
- </g>
84
-
85
- <g id="tail" transform="translate(-22, 25)">
86
- <path d="M 0 0 Q -3 3 -2 7 Q -1 9 1 8 Q 2 5 0 0" fill="url(#tailGradient)" opacity="0.8"/>
87
- <path d="M 2 -1 Q -1 2 0 6 Q 1 8 3 7 Q 4 4 2 -1" fill="url(#tailGradient)" opacity="0.7"/>
88
- <path d="M 4 -2 Q 1 1 2 5 Q 3 7 5 6 Q 6 3 4 -2" fill="url(#tailGradient)" opacity="0.6"/>
89
- </g>
90
- </g>
91
-
92
- <defs>
93
- <radialGradient id="sparkleGradient">
94
- <stop offset="0%" style="stop-color:#fb923c;stop-opacity:1" />
95
- <stop offset="100%" style="stop-color:#fdba74;stop-opacity:0" />
96
- </radialGradient>
97
-
98
- <linearGradient id="queueGradient1" x1="0%" y1="0%" x2="100%" y2="0%">
99
- <stop offset="0%" style="stop-color:#f97316;stop-opacity:0.3" />
100
- <stop offset="50%" style="stop-color:#f97316;stop-opacity:1" />
101
- <stop offset="100%" style="stop-color:#f97316;stop-opacity:0.3" />
102
- </linearGradient>
103
-
104
- <linearGradient id="queueGradient2" x1="0%" y1="0%" x2="100%" y2="0%">
105
- <stop offset="0%" style="stop-color:#3B82F6;stop-opacity:0.3" />
106
- <stop offset="50%" style="stop-color:#3B82F6;stop-opacity:1" />
107
- <stop offset="100%" style="stop-color:#3B82F6;stop-opacity:0.3" />
108
- </linearGradient>
109
-
110
- <linearGradient id="queueGradient3" x1="0%" y1="0%" x2="100%" y2="0%">
111
- <stop offset="0%" style="stop-color:#F59E0B;stop-opacity:0.3" />
112
- <stop offset="50%" style="stop-color:#F59E0B;stop-opacity:1" />
113
- <stop offset="100%" style="stop-color:#F59E0B;stop-opacity:0.3" />
114
- </linearGradient>
115
-
116
- <radialGradient id="bodyGradient" cx="50%" cy="30%">
117
- <stop offset="0%" style="stop-color:#fed7aa;stop-opacity:1" />
118
- <stop offset="70%" style="stop-color:#fdba74;stop-opacity:1" />
119
- <stop offset="100%" style="stop-color:#f97316;stop-opacity:1" />
120
- </radialGradient>
121
-
122
- <linearGradient id="bodyStroke" x1="0%" y1="0%" x2="0%" y2="100%">
123
- <stop offset="0%" style="stop-color:#fb923c;stop-opacity:1" />
124
- <stop offset="100%" style="stop-color:#ea580c;stop-opacity:1" />
125
- </linearGradient>
126
-
127
- <radialGradient id="chestHighlight">
128
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8" />
129
- <stop offset="100%" style="stop-color:#fff7ed;stop-opacity:0.2" />
130
- </radialGradient>
131
-
132
- <linearGradient id="wingGradient" x1="0%" y1="0%" x2="100%" y2="100%">
133
- <stop offset="0%" style="stop-color:#fdba74;stop-opacity:1" />
134
- <stop offset="100%" style="stop-color:#ea580c;stop-opacity:1" />
135
- </linearGradient>
136
-
137
- <linearGradient id="wingStroke">
138
- <stop offset="0%" style="stop-color:#f97316;stop-opacity:1" />
139
- <stop offset="100%" style="stop-color:#c2410c;stop-opacity:1" />
140
- </linearGradient>
141
-
142
- <linearGradient id="neckGradient" x1="0%" y1="100%" x2="0%" y2="0%">
143
- <stop offset="0%" style="stop-color:#fdba74;stop-opacity:1" />
144
- <stop offset="100%" style="stop-color:#fed7aa;stop-opacity:1" />
145
- </linearGradient>
146
-
147
- <radialGradient id="headGradient" cx="40%" cy="40%">
148
- <stop offset="0%" style="stop-color:#ffedd5;stop-opacity:1" />
149
- <stop offset="60%" style="stop-color:#fed7aa;stop-opacity:1" />
150
- <stop offset="100%" style="stop-color:#fb923c;stop-opacity:1" />
151
- </radialGradient>
152
-
153
- <linearGradient id="headStroke">
154
- <stop offset="0%" style="stop-color:#fb923c;stop-opacity:1" />
155
- <stop offset="100%" style="stop-color:#f97316;stop-opacity:1" />
156
- </linearGradient>
157
-
158
- <radialGradient id="headHighlight">
159
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
160
- <stop offset="100%" style="stop-color:#fff7ed;stop-opacity:0" />
161
- </radialGradient>
162
-
163
- <linearGradient id="beakGradient" x1="0%" y1="0%" x2="100%" y2="0%">
164
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
165
- <stop offset="100%" style="stop-color:#FCD34D;stop-opacity:1" />
166
- </linearGradient>
167
-
168
- <radialGradient id="eyeGradient">
169
- <stop offset="0%" style="stop-color:#92400E;stop-opacity:1" />
170
- <stop offset="100%" style="stop-color:#451A03;stop-opacity:1" />
171
- </radialGradient>
172
-
173
- <linearGradient id="crownGradient" x1="0%" y1="100%" x2="0%" y2="0%">
174
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
175
- <stop offset="50%" style="stop-color:#FCD34D;stop-opacity:1" />
176
- <stop offset="100%" style="stop-color:#FEF3C7;stop-opacity:1" />
177
- </linearGradient>
178
-
179
- <linearGradient id="crownStroke">
180
- <stop offset="0%" style="stop-color:#FCD34D;stop-opacity:1" />
181
- <stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
182
- </linearGradient>
183
-
184
- <radialGradient id="centerJewelGradient">
185
- <stop offset="0%" style="stop-color:#ffedd5;stop-opacity:1" />
186
- <stop offset="100%" style="stop-color:#f97316;stop-opacity:1" />
187
- </radialGradient>
188
-
189
- <radialGradient id="leftJewelGradient">
190
- <stop offset="0%" style="stop-color:#fed7aa;stop-opacity:1" />
191
- <stop offset="100%" style="stop-color:#ea580c;stop-opacity:1" />
192
- </radialGradient>
193
-
194
- <radialGradient id="rightJewelGradient">
195
- <stop offset="0%" style="stop-color:#ffedd5;stop-opacity:1" />
196
- <stop offset="100%" style="stop-color:#c2410c;stop-opacity:1" />
197
- </radialGradient>
198
-
199
- <radialGradient id="jewelSparkle">
200
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
201
- <stop offset="100%" style="stop-color:#FFFFFF;stop-opacity:0" />
202
- </radialGradient>
203
-
204
- <linearGradient id="tailGradient" x1="0%" y1="0%" x2="100%" y2="100%">
205
- <stop offset="0%" style="stop-color:#fb923c;stop-opacity:1" />
206
- <stop offset="100%" style="stop-color:#ea580c;stop-opacity:1" />
207
- </linearGradient>
208
- </defs>
209
- </svg>
210
-
@@ -1,210 +0,0 @@
1
- <svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
2
-
3
- <!-- Decorative sparkles -->
4
- <g id="sparkles">
5
- <circle cx="25" cy="30" r="1" fill="url(#sparkleGradient)" opacity="0.8">
6
- <animate attributeName="opacity" values="0.8;0.3;0.8" dur="3s" repeatCount="indefinite"/>
7
- </circle>
8
- <circle cx="95" cy="35" r="1.5" fill="url(#sparkleGradient)" opacity="0.6">
9
- <animate attributeName="opacity" values="0.6;1;0.6" dur="2.5s" repeatCount="indefinite"/>
10
- </circle>
11
- <circle cx="90" cy="85" r="1" fill="url(#sparkleGradient)" opacity="0.7">
12
- <animate attributeName="opacity" values="0.7;0.4;0.7" dur="2s" repeatCount="indefinite"/>
13
- </circle>
14
- <circle cx="30" cy="90" r="1.2" fill="url(#sparkleGradient)" opacity="0.5">
15
- <animate attributeName="opacity" values="0.5;0.9;0.5" dur="2.8s" repeatCount="indefinite"/>
16
- </circle>
17
- </g>
18
-
19
- <!-- Queue lines -->
20
- <g id="queue-lines">
21
- <g opacity="0.8">
22
- <rect x="15" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
23
- <animate attributeName="x" values="15;20;15" dur="4s" repeatCount="indefinite"/>
24
- </rect>
25
- <rect x="18" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
26
- <animate attributeName="x" values="18;23;18" dur="3.5s" repeatCount="indefinite"/>
27
- </rect>
28
- <rect x="12" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
29
- <animate attributeName="x" values="12;17;12" dur="4.5s" repeatCount="indefinite"/>
30
- </rect>
31
- </g>
32
- <g opacity="0.8">
33
- <rect x="85" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
34
- <animate attributeName="x" values="85;80;85" dur="4s" repeatCount="indefinite"/>
35
- </rect>
36
- <rect x="87" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
37
- <animate attributeName="x" values="87;82;87" dur="3.5s" repeatCount="indefinite"/>
38
- </rect>
39
- <rect x="83" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
40
- <animate attributeName="x" values="83;78;83" dur="4.5s" repeatCount="indefinite"/>
41
- </rect>
42
- </g>
43
- </g>
44
-
45
- <!-- Main duck -->
46
- <g id="queen-duck" transform="translate(60, 60)">
47
- <ellipse cx="0" cy="35" rx="25" ry="8" fill="#000000" opacity="0.15"/>
48
- <path d="M -20 5 Q -25 15 -22 28 Q -18 38 -5 40 L 5 40 Q 18 38 22 28 Q 25 15 20 5 Q 15 -2 8 -3 L -8 -3 Q -15 -2 -20 5 Z"
49
- fill="url(#bodyGradient)" stroke="url(#bodyStroke)" stroke-width="1.5"/>
50
- <ellipse cx="0" cy="15" rx="12" ry="15" fill="url(#chestHighlight)" opacity="0.6"/>
51
- <path d="M -18 8 Q -23 12 -22 20 Q -20 25 -15 22 Q -12 18 -13 12 Z"
52
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
53
- <path d="M 18 8 Q 23 12 22 20 Q 20 25 15 22 Q 12 18 13 12 Z"
54
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
55
- <path d="M -5 -3 Q -6 -8 -5 -12 L 5 -12 Q 6 -8 5 -3" fill="url(#neckGradient)" stroke="none"/>
56
- <ellipse cx="0" cy="-18" rx="12" ry="13" fill="url(#headGradient)" stroke="url(#headStroke)" stroke-width="1.2"/>
57
- <ellipse cx="-2" cy="-20" rx="6" ry="7" fill="url(#headHighlight)" opacity="0.5"/>
58
- <path d="M 8 -18 Q 14 -18 15 -17 Q 15 -15 14 -14 Q 13 -13 8 -14 Z"
59
- fill="url(#beakGradient)" stroke="#FCD34D" stroke-width="0.8"/>
60
- <ellipse cx="4" cy="-19" rx="3" ry="3.5" fill="white"/>
61
- <ellipse cx="4.5" cy="-19" rx="2" ry="2.5" fill="url(#eyeGradient)"/>
62
- <circle cx="5" cy="-19.5" r="1" fill="#1F2937"/>
63
- <circle cx="5.5" cy="-20" r="0.4" fill="white"/>
64
- <path d="M 6 -22 L 7 -23.5 M 7 -21.5 L 8.5 -22.5 M 7.5 -21 L 9 -21.5"
65
- stroke="#1F2937" stroke-width="0.4" fill="none" stroke-linecap="round"/>
66
- <ellipse cx="1" cy="-15" rx="2.5" ry="1.5" fill="#FFB6C1" opacity="0.4"/>
67
-
68
- <g id="crown" transform="translate(0, -32)">
69
- <ellipse cx="0" cy="2" rx="12" ry="3" fill="#000000" opacity="0.1"/>
70
- <path d="M -12 0 L -10 -8 L -6 -3 L -3 -10 L 0 -5 L 3 -10 L 6 -3 L 10 -8 L 12 0 Q 10 2 0 2 Q -10 2 -12 0 Z"
71
- fill="url(#crownGradient)" stroke="url(#crownStroke)" stroke-width="1.2" stroke-linejoin="round"/>
72
- <path d="M -10 0 L -8 -6 L -5 -2 L -2 -8 L 0 -4 L 2 -8 L 5 -2 L 8 -6 L 10 0"
73
- fill="none" stroke="#FEF3C7" stroke-width="0.5" opacity="0.6"/>
74
- <circle cx="0" cy="-2" r="2.5" fill="url(#centerJewelGradient)" stroke="#ec4899" stroke-width="0.5"/>
75
- <circle cx="0" cy="-2" r="1.5" fill="url(#jewelSparkle)" opacity="0.8"/>
76
- <circle cx="-6" cy="-1" r="1.8" fill="url(#leftJewelGradient)" stroke="#f472b6" stroke-width="0.4"/>
77
- <circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#db2777" stroke-width="0.4"/>
78
- <circle cx="-3" cy="-4" r="1" fill="#f9a8d4" opacity="0.9"/>
79
- <circle cx="3" cy="-4" r="1" fill="#f9a8d4" opacity="0.9"/>
80
- <circle cx="0" cy="-10" r="1.2" fill="#FEF3C7"/>
81
- <circle cx="-6" cy="-8" r="1" fill="#FEF3C7"/>
82
- <circle cx="6" cy="-8" r="1" fill="#FEF3C7"/>
83
- </g>
84
-
85
- <g id="tail" transform="translate(-22, 25)">
86
- <path d="M 0 0 Q -3 3 -2 7 Q -1 9 1 8 Q 2 5 0 0" fill="url(#tailGradient)" opacity="0.8"/>
87
- <path d="M 2 -1 Q -1 2 0 6 Q 1 8 3 7 Q 4 4 2 -1" fill="url(#tailGradient)" opacity="0.7"/>
88
- <path d="M 4 -2 Q 1 1 2 5 Q 3 7 5 6 Q 6 3 4 -2" fill="url(#tailGradient)" opacity="0.6"/>
89
- </g>
90
- </g>
91
-
92
- <defs>
93
- <radialGradient id="sparkleGradient">
94
- <stop offset="0%" style="stop-color:#f472b6;stop-opacity:1" />
95
- <stop offset="100%" style="stop-color:#f9a8d4;stop-opacity:0" />
96
- </radialGradient>
97
-
98
- <linearGradient id="queueGradient1" x1="0%" y1="0%" x2="100%" y2="0%">
99
- <stop offset="0%" style="stop-color:#ec4899;stop-opacity:0.3" />
100
- <stop offset="50%" style="stop-color:#ec4899;stop-opacity:1" />
101
- <stop offset="100%" style="stop-color:#ec4899;stop-opacity:0.3" />
102
- </linearGradient>
103
-
104
- <linearGradient id="queueGradient2" x1="0%" y1="0%" x2="100%" y2="0%">
105
- <stop offset="0%" style="stop-color:#3B82F6;stop-opacity:0.3" />
106
- <stop offset="50%" style="stop-color:#3B82F6;stop-opacity:1" />
107
- <stop offset="100%" style="stop-color:#3B82F6;stop-opacity:0.3" />
108
- </linearGradient>
109
-
110
- <linearGradient id="queueGradient3" x1="0%" y1="0%" x2="100%" y2="0%">
111
- <stop offset="0%" style="stop-color:#F59E0B;stop-opacity:0.3" />
112
- <stop offset="50%" style="stop-color:#F59E0B;stop-opacity:1" />
113
- <stop offset="100%" style="stop-color:#F59E0B;stop-opacity:0.3" />
114
- </linearGradient>
115
-
116
- <radialGradient id="bodyGradient" cx="50%" cy="30%">
117
- <stop offset="0%" style="stop-color:#fbcfe8;stop-opacity:1" />
118
- <stop offset="70%" style="stop-color:#f9a8d4;stop-opacity:1" />
119
- <stop offset="100%" style="stop-color:#ec4899;stop-opacity:1" />
120
- </radialGradient>
121
-
122
- <linearGradient id="bodyStroke" x1="0%" y1="0%" x2="0%" y2="100%">
123
- <stop offset="0%" style="stop-color:#f472b6;stop-opacity:1" />
124
- <stop offset="100%" style="stop-color:#db2777;stop-opacity:1" />
125
- </linearGradient>
126
-
127
- <radialGradient id="chestHighlight">
128
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8" />
129
- <stop offset="100%" style="stop-color:#fdf2f8;stop-opacity:0.2" />
130
- </radialGradient>
131
-
132
- <linearGradient id="wingGradient" x1="0%" y1="0%" x2="100%" y2="100%">
133
- <stop offset="0%" style="stop-color:#f9a8d4;stop-opacity:1" />
134
- <stop offset="100%" style="stop-color:#db2777;stop-opacity:1" />
135
- </linearGradient>
136
-
137
- <linearGradient id="wingStroke">
138
- <stop offset="0%" style="stop-color:#ec4899;stop-opacity:1" />
139
- <stop offset="100%" style="stop-color:#be185d;stop-opacity:1" />
140
- </linearGradient>
141
-
142
- <linearGradient id="neckGradient" x1="0%" y1="100%" x2="0%" y2="0%">
143
- <stop offset="0%" style="stop-color:#f9a8d4;stop-opacity:1" />
144
- <stop offset="100%" style="stop-color:#fbcfe8;stop-opacity:1" />
145
- </linearGradient>
146
-
147
- <radialGradient id="headGradient" cx="40%" cy="40%">
148
- <stop offset="0%" style="stop-color:#fce7f3;stop-opacity:1" />
149
- <stop offset="60%" style="stop-color:#fbcfe8;stop-opacity:1" />
150
- <stop offset="100%" style="stop-color:#f472b6;stop-opacity:1" />
151
- </radialGradient>
152
-
153
- <linearGradient id="headStroke">
154
- <stop offset="0%" style="stop-color:#f472b6;stop-opacity:1" />
155
- <stop offset="100%" style="stop-color:#ec4899;stop-opacity:1" />
156
- </linearGradient>
157
-
158
- <radialGradient id="headHighlight">
159
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
160
- <stop offset="100%" style="stop-color:#fdf2f8;stop-opacity:0" />
161
- </radialGradient>
162
-
163
- <linearGradient id="beakGradient" x1="0%" y1="0%" x2="100%" y2="0%">
164
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
165
- <stop offset="100%" style="stop-color:#FCD34D;stop-opacity:1" />
166
- </linearGradient>
167
-
168
- <radialGradient id="eyeGradient">
169
- <stop offset="0%" style="stop-color:#92400E;stop-opacity:1" />
170
- <stop offset="100%" style="stop-color:#451A03;stop-opacity:1" />
171
- </radialGradient>
172
-
173
- <linearGradient id="crownGradient" x1="0%" y1="100%" x2="0%" y2="0%">
174
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
175
- <stop offset="50%" style="stop-color:#FCD34D;stop-opacity:1" />
176
- <stop offset="100%" style="stop-color:#FEF3C7;stop-opacity:1" />
177
- </linearGradient>
178
-
179
- <linearGradient id="crownStroke">
180
- <stop offset="0%" style="stop-color:#FCD34D;stop-opacity:1" />
181
- <stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
182
- </linearGradient>
183
-
184
- <radialGradient id="centerJewelGradient">
185
- <stop offset="0%" style="stop-color:#fce7f3;stop-opacity:1" />
186
- <stop offset="100%" style="stop-color:#ec4899;stop-opacity:1" />
187
- </radialGradient>
188
-
189
- <radialGradient id="leftJewelGradient">
190
- <stop offset="0%" style="stop-color:#fbcfe8;stop-opacity:1" />
191
- <stop offset="100%" style="stop-color:#db2777;stop-opacity:1" />
192
- </radialGradient>
193
-
194
- <radialGradient id="rightJewelGradient">
195
- <stop offset="0%" style="stop-color:#fce7f3;stop-opacity:1" />
196
- <stop offset="100%" style="stop-color:#be185d;stop-opacity:1" />
197
- </radialGradient>
198
-
199
- <radialGradient id="jewelSparkle">
200
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
201
- <stop offset="100%" style="stop-color:#FFFFFF;stop-opacity:0" />
202
- </radialGradient>
203
-
204
- <linearGradient id="tailGradient" x1="0%" y1="0%" x2="100%" y2="100%">
205
- <stop offset="0%" style="stop-color:#f472b6;stop-opacity:1" />
206
- <stop offset="100%" style="stop-color:#db2777;stop-opacity:1" />
207
- </linearGradient>
208
- </defs>
209
- </svg>
210
-
@@ -1,210 +0,0 @@
1
- <svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
2
-
3
- <!-- Decorative sparkles -->
4
- <g id="sparkles">
5
- <circle cx="25" cy="30" r="1" fill="url(#sparkleGradient)" opacity="0.8">
6
- <animate attributeName="opacity" values="0.8;0.3;0.8" dur="3s" repeatCount="indefinite"/>
7
- </circle>
8
- <circle cx="95" cy="35" r="1.5" fill="url(#sparkleGradient)" opacity="0.6">
9
- <animate attributeName="opacity" values="0.6;1;0.6" dur="2.5s" repeatCount="indefinite"/>
10
- </circle>
11
- <circle cx="90" cy="85" r="1" fill="url(#sparkleGradient)" opacity="0.7">
12
- <animate attributeName="opacity" values="0.7;0.4;0.7" dur="2s" repeatCount="indefinite"/>
13
- </circle>
14
- <circle cx="30" cy="90" r="1.2" fill="url(#sparkleGradient)" opacity="0.5">
15
- <animate attributeName="opacity" values="0.5;0.9;0.5" dur="2.8s" repeatCount="indefinite"/>
16
- </circle>
17
- </g>
18
-
19
- <!-- Queue lines -->
20
- <g id="queue-lines">
21
- <g opacity="0.8">
22
- <rect x="15" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
23
- <animate attributeName="x" values="15;20;15" dur="4s" repeatCount="indefinite"/>
24
- </rect>
25
- <rect x="18" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
26
- <animate attributeName="x" values="18;23;18" dur="3.5s" repeatCount="indefinite"/>
27
- </rect>
28
- <rect x="12" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
29
- <animate attributeName="x" values="12;17;12" dur="4.5s" repeatCount="indefinite"/>
30
- </rect>
31
- </g>
32
- <g opacity="0.8">
33
- <rect x="85" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
34
- <animate attributeName="x" values="85;80;85" dur="4s" repeatCount="indefinite"/>
35
- </rect>
36
- <rect x="87" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
37
- <animate attributeName="x" values="87;82;87" dur="3.5s" repeatCount="indefinite"/>
38
- </rect>
39
- <rect x="83" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
40
- <animate attributeName="x" values="83;78;83" dur="4.5s" repeatCount="indefinite"/>
41
- </rect>
42
- </g>
43
- </g>
44
-
45
- <!-- Main duck -->
46
- <g id="queen-duck" transform="translate(60, 60)">
47
- <ellipse cx="0" cy="35" rx="25" ry="8" fill="#000000" opacity="0.15"/>
48
- <path d="M -20 5 Q -25 15 -22 28 Q -18 38 -5 40 L 5 40 Q 18 38 22 28 Q 25 15 20 5 Q 15 -2 8 -3 L -8 -3 Q -15 -2 -20 5 Z"
49
- fill="url(#bodyGradient)" stroke="url(#bodyStroke)" stroke-width="1.5"/>
50
- <ellipse cx="0" cy="15" rx="12" ry="15" fill="url(#chestHighlight)" opacity="0.6"/>
51
- <path d="M -18 8 Q -23 12 -22 20 Q -20 25 -15 22 Q -12 18 -13 12 Z"
52
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
53
- <path d="M 18 8 Q 23 12 22 20 Q 20 25 15 22 Q 12 18 13 12 Z"
54
- fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
55
- <path d="M -5 -3 Q -6 -8 -5 -12 L 5 -12 Q 6 -8 5 -3" fill="url(#neckGradient)" stroke="none"/>
56
- <ellipse cx="0" cy="-18" rx="12" ry="13" fill="url(#headGradient)" stroke="url(#headStroke)" stroke-width="1.2"/>
57
- <ellipse cx="-2" cy="-20" rx="6" ry="7" fill="url(#headHighlight)" opacity="0.5"/>
58
- <path d="M 8 -18 Q 14 -18 15 -17 Q 15 -15 14 -14 Q 13 -13 8 -14 Z"
59
- fill="url(#beakGradient)" stroke="#FCD34D" stroke-width="0.8"/>
60
- <ellipse cx="4" cy="-19" rx="3" ry="3.5" fill="white"/>
61
- <ellipse cx="4.5" cy="-19" rx="2" ry="2.5" fill="url(#eyeGradient)"/>
62
- <circle cx="5" cy="-19.5" r="1" fill="#1F2937"/>
63
- <circle cx="5.5" cy="-20" r="0.4" fill="white"/>
64
- <path d="M 6 -22 L 7 -23.5 M 7 -21.5 L 8.5 -22.5 M 7.5 -21 L 9 -21.5"
65
- stroke="#1F2937" stroke-width="0.4" fill="none" stroke-linecap="round"/>
66
- <ellipse cx="1" cy="-15" rx="2.5" ry="1.5" fill="#FFB6C1" opacity="0.4"/>
67
-
68
- <g id="crown" transform="translate(0, -32)">
69
- <ellipse cx="0" cy="2" rx="12" ry="3" fill="#000000" opacity="0.1"/>
70
- <path d="M -12 0 L -10 -8 L -6 -3 L -3 -10 L 0 -5 L 3 -10 L 6 -3 L 10 -8 L 12 0 Q 10 2 0 2 Q -10 2 -12 0 Z"
71
- fill="url(#crownGradient)" stroke="url(#crownStroke)" stroke-width="1.2" stroke-linejoin="round"/>
72
- <path d="M -10 0 L -8 -6 L -5 -2 L -2 -8 L 0 -4 L 2 -8 L 5 -2 L 8 -6 L 10 0"
73
- fill="none" stroke="#FEF3C7" stroke-width="0.5" opacity="0.6"/>
74
- <circle cx="0" cy="-2" r="2.5" fill="url(#centerJewelGradient)" stroke="#a855f7" stroke-width="0.5"/>
75
- <circle cx="0" cy="-2" r="1.5" fill="url(#jewelSparkle)" opacity="0.8"/>
76
- <circle cx="-6" cy="-1" r="1.8" fill="url(#leftJewelGradient)" stroke="#c084fc" stroke-width="0.4"/>
77
- <circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#9333ea" stroke-width="0.4"/>
78
- <circle cx="-3" cy="-4" r="1" fill="#d8b4fe" opacity="0.9"/>
79
- <circle cx="3" cy="-4" r="1" fill="#d8b4fe" opacity="0.9"/>
80
- <circle cx="0" cy="-10" r="1.2" fill="#FEF3C7"/>
81
- <circle cx="-6" cy="-8" r="1" fill="#FEF3C7"/>
82
- <circle cx="6" cy="-8" r="1" fill="#FEF3C7"/>
83
- </g>
84
-
85
- <g id="tail" transform="translate(-22, 25)">
86
- <path d="M 0 0 Q -3 3 -2 7 Q -1 9 1 8 Q 2 5 0 0" fill="url(#tailGradient)" opacity="0.8"/>
87
- <path d="M 2 -1 Q -1 2 0 6 Q 1 8 3 7 Q 4 4 2 -1" fill="url(#tailGradient)" opacity="0.7"/>
88
- <path d="M 4 -2 Q 1 1 2 5 Q 3 7 5 6 Q 6 3 4 -2" fill="url(#tailGradient)" opacity="0.6"/>
89
- </g>
90
- </g>
91
-
92
- <defs>
93
- <radialGradient id="sparkleGradient">
94
- <stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
95
- <stop offset="100%" style="stop-color:#d8b4fe;stop-opacity:0" />
96
- </radialGradient>
97
-
98
- <linearGradient id="queueGradient1" x1="0%" y1="0%" x2="100%" y2="0%">
99
- <stop offset="0%" style="stop-color:#a855f7;stop-opacity:0.3" />
100
- <stop offset="50%" style="stop-color:#a855f7;stop-opacity:1" />
101
- <stop offset="100%" style="stop-color:#a855f7;stop-opacity:0.3" />
102
- </linearGradient>
103
-
104
- <linearGradient id="queueGradient2" x1="0%" y1="0%" x2="100%" y2="0%">
105
- <stop offset="0%" style="stop-color:#3B82F6;stop-opacity:0.3" />
106
- <stop offset="50%" style="stop-color:#3B82F6;stop-opacity:1" />
107
- <stop offset="100%" style="stop-color:#3B82F6;stop-opacity:0.3" />
108
- </linearGradient>
109
-
110
- <linearGradient id="queueGradient3" x1="0%" y1="0%" x2="100%" y2="0%">
111
- <stop offset="0%" style="stop-color:#F59E0B;stop-opacity:0.3" />
112
- <stop offset="50%" style="stop-color:#F59E0B;stop-opacity:1" />
113
- <stop offset="100%" style="stop-color:#F59E0B;stop-opacity:0.3" />
114
- </linearGradient>
115
-
116
- <radialGradient id="bodyGradient" cx="50%" cy="30%">
117
- <stop offset="0%" style="stop-color:#e9d5ff;stop-opacity:1" />
118
- <stop offset="70%" style="stop-color:#d8b4fe;stop-opacity:1" />
119
- <stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
120
- </radialGradient>
121
-
122
- <linearGradient id="bodyStroke" x1="0%" y1="0%" x2="0%" y2="100%">
123
- <stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
124
- <stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
125
- </linearGradient>
126
-
127
- <radialGradient id="chestHighlight">
128
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8" />
129
- <stop offset="100%" style="stop-color:#faf5ff;stop-opacity:0.2" />
130
- </radialGradient>
131
-
132
- <linearGradient id="wingGradient" x1="0%" y1="0%" x2="100%" y2="100%">
133
- <stop offset="0%" style="stop-color:#d8b4fe;stop-opacity:1" />
134
- <stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
135
- </linearGradient>
136
-
137
- <linearGradient id="wingStroke">
138
- <stop offset="0%" style="stop-color:#a855f7;stop-opacity:1" />
139
- <stop offset="100%" style="stop-color:#7e22ce;stop-opacity:1" />
140
- </linearGradient>
141
-
142
- <linearGradient id="neckGradient" x1="0%" y1="100%" x2="0%" y2="0%">
143
- <stop offset="0%" style="stop-color:#d8b4fe;stop-opacity:1" />
144
- <stop offset="100%" style="stop-color:#e9d5ff;stop-opacity:1" />
145
- </linearGradient>
146
-
147
- <radialGradient id="headGradient" cx="40%" cy="40%">
148
- <stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
149
- <stop offset="60%" style="stop-color:#e9d5ff;stop-opacity:1" />
150
- <stop offset="100%" style="stop-color:#c084fc;stop-opacity:1" />
151
- </radialGradient>
152
-
153
- <linearGradient id="headStroke">
154
- <stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
155
- <stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
156
- </linearGradient>
157
-
158
- <radialGradient id="headHighlight">
159
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
160
- <stop offset="100%" style="stop-color:#faf5ff;stop-opacity:0" />
161
- </radialGradient>
162
-
163
- <linearGradient id="beakGradient" x1="0%" y1="0%" x2="100%" y2="0%">
164
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
165
- <stop offset="100%" style="stop-color:#FCD34D;stop-opacity:1" />
166
- </linearGradient>
167
-
168
- <radialGradient id="eyeGradient">
169
- <stop offset="0%" style="stop-color:#92400E;stop-opacity:1" />
170
- <stop offset="100%" style="stop-color:#451A03;stop-opacity:1" />
171
- </radialGradient>
172
-
173
- <linearGradient id="crownGradient" x1="0%" y1="100%" x2="0%" y2="0%">
174
- <stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
175
- <stop offset="50%" style="stop-color:#FCD34D;stop-opacity:1" />
176
- <stop offset="100%" style="stop-color:#FEF3C7;stop-opacity:1" />
177
- </linearGradient>
178
-
179
- <linearGradient id="crownStroke">
180
- <stop offset="0%" style="stop-color:#FCD34D;stop-opacity:1" />
181
- <stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
182
- </linearGradient>
183
-
184
- <radialGradient id="centerJewelGradient">
185
- <stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
186
- <stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
187
- </radialGradient>
188
-
189
- <radialGradient id="leftJewelGradient">
190
- <stop offset="0%" style="stop-color:#e9d5ff;stop-opacity:1" />
191
- <stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
192
- </radialGradient>
193
-
194
- <radialGradient id="rightJewelGradient">
195
- <stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
196
- <stop offset="100%" style="stop-color:#7e22ce;stop-opacity:1" />
197
- </radialGradient>
198
-
199
- <radialGradient id="jewelSparkle">
200
- <stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
201
- <stop offset="100%" style="stop-color:#FFFFFF;stop-opacity:0" />
202
- </radialGradient>
203
-
204
- <linearGradient id="tailGradient" x1="0%" y1="0%" x2="100%" y2="100%">
205
- <stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
206
- <stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
207
- </linearGradient>
208
- </defs>
209
- </svg>
210
-