queen-mq 0.1.0 → 0.1.2

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 (160) hide show
  1. package/API.md +862 -752
  2. package/AUTH.md +2044 -0
  3. package/LICENSE.md +202 -0
  4. package/README.md +1705 -1051
  5. package/WEBAPP.md +1889 -0
  6. package/assets/dashboard-01.png +0 -0
  7. package/assets/queen-logo-blue.svg +210 -0
  8. package/assets/queen-logo-cyan.svg +210 -0
  9. package/assets/queen-logo-indigo.svg +210 -0
  10. package/assets/queen-logo-orange.svg +210 -0
  11. package/assets/queen-logo-pink.svg +210 -0
  12. package/assets/queen-logo-purple.svg +210 -0
  13. package/assets/queen-logo-rose.svg +239 -0
  14. package/assets/queen-logo.svg +263 -0
  15. package/examples/batch-processing.js +58 -0
  16. package/examples/test-complete-client.js +260 -0
  17. package/examples/test-dashboard-api.js +200 -0
  18. package/examples/test-traceid.js +147 -0
  19. package/package.json +17 -4
  20. package/server.log +1 -0
  21. package/src/benchmark/consumer.js +207 -0
  22. package/src/benchmark/consumer_multi.js +216 -0
  23. package/src/benchmark/producer.js +75 -0
  24. package/src/benchmark/producer_multi.js +115 -0
  25. package/src/client/client.js +300 -31
  26. package/src/client/queenClient.js +5 -0
  27. package/src/cluster-server.js +242 -0
  28. package/src/config.js +19 -5
  29. package/src/database/connection.js +42 -16
  30. package/src/database/poolManager.js +7 -0
  31. package/src/database/schema-v2.sql +194 -130
  32. package/src/managers/queueManagerOptimized.js +823 -933
  33. package/src/managers/systemEventManager.js +8 -3
  34. package/src/routes/messages.js +127 -57
  35. package/src/routes/pop.js +27 -43
  36. package/src/routes/resources.js +61 -27
  37. package/src/routes/status.js +1037 -0
  38. package/src/server.js +308 -272
  39. package/src/services/evictionService.js +57 -28
  40. package/src/services/retentionService.js +44 -11
  41. package/src/test/MIGRATION_ISSUES.md +174 -0
  42. package/src/test/README.md +203 -0
  43. package/src/test/advanced-pattern-tests.js +1137 -0
  44. package/src/test/bus-mode-tests.js +361 -0
  45. package/src/test/core-tests.js +342 -0
  46. package/src/test/edge-case-tests.js +561 -0
  47. package/src/test/enterprise-tests.js +637 -0
  48. package/src/test/partition-locking-tests.js +545 -0
  49. package/src/test/test-new.js +278 -0
  50. package/src/test/test.js +6 -3
  51. package/src/test/utils.js +169 -0
  52. package/src/utils/streaming.js +231 -0
  53. package/src/utils/uuid.js +2 -2
  54. package/src/websocket/wsServer.js +10 -3
  55. package/test-keepalive-v2.sh +22 -0
  56. package/webapp/COLOR_GUIDE.md +118 -0
  57. package/webapp/README.md +143 -0
  58. package/webapp/index.html +14 -0
  59. package/webapp/package-lock.json +3184 -0
  60. package/webapp/package.json +25 -0
  61. package/webapp/postcss.config.js +7 -0
  62. package/webapp/public/assets/queen-logo-blue.svg +210 -0
  63. package/webapp/public/assets/queen-logo-cyan.svg +210 -0
  64. package/webapp/public/assets/queen-logo-indigo.svg +210 -0
  65. package/webapp/public/assets/queen-logo-orange.svg +210 -0
  66. package/webapp/public/assets/queen-logo-pink.svg +210 -0
  67. package/webapp/public/assets/queen-logo-purple.svg +210 -0
  68. package/webapp/public/assets/queen-logo-rose.svg +239 -0
  69. package/webapp/public/assets/queen-logo.svg +263 -0
  70. package/webapp/src/App.vue +19 -0
  71. package/webapp/src/api/analytics.js +10 -0
  72. package/webapp/src/api/client.js +29 -0
  73. package/webapp/src/api/consumers.js +52 -0
  74. package/webapp/src/api/health.js +7 -0
  75. package/webapp/src/api/messages.js +26 -0
  76. package/webapp/src/api/queues.js +14 -0
  77. package/webapp/src/api/resources.js +8 -0
  78. package/webapp/src/assets/styles/main.css +357 -0
  79. package/webapp/src/components/analytics/AnalyticsFilters.vue +87 -0
  80. package/webapp/src/components/analytics/AnalyticsMetrics.vue +57 -0
  81. package/webapp/src/components/analytics/MessageDistributionChart.vue +111 -0
  82. package/webapp/src/components/analytics/MessageFlowChart.vue +173 -0
  83. package/webapp/src/components/analytics/TimeRangeSelector.vue +27 -0
  84. package/webapp/src/components/analytics/TopQueuesChart.vue +132 -0
  85. package/webapp/src/components/common/ConfirmDialog.vue +56 -0
  86. package/webapp/src/components/common/LoadingSpinner.vue +6 -0
  87. package/webapp/src/components/common/MetricCard.vue +43 -0
  88. package/webapp/src/components/common/StatusBadge.vue +45 -0
  89. package/webapp/src/components/dashboard/MessageStatusCard.vue +50 -0
  90. package/webapp/src/components/dashboard/PerformanceCard.vue +38 -0
  91. package/webapp/src/components/dashboard/ThroughputChart.vue +182 -0
  92. package/webapp/src/components/dashboard/TopQueuesTable.vue +53 -0
  93. package/webapp/src/components/layout/AppLayout.vue +110 -0
  94. package/webapp/src/components/layout/AppSidebar.vue +304 -0
  95. package/webapp/src/components/messages/MessageDetailPanel.vue +242 -0
  96. package/webapp/src/components/messages/MessageFilters.vue +114 -0
  97. package/webapp/src/components/queue-detail/PartitionList.vue +79 -0
  98. package/webapp/src/components/queue-detail/PushMessageModal.vue +175 -0
  99. package/webapp/src/components/queue-detail/QueueConfig.vue +63 -0
  100. package/webapp/src/components/queue-detail/QueueDetailHeader.vue +53 -0
  101. package/webapp/src/components/queue-detail/RecentMessages.vue +76 -0
  102. package/webapp/src/components/queues/CreateQueueModal.vue +193 -0
  103. package/webapp/src/components/queues/QueueFilters.vue +90 -0
  104. package/webapp/src/composables/useApi.js +34 -0
  105. package/webapp/src/composables/useTheme.js +36 -0
  106. package/webapp/src/main.js +11 -0
  107. package/webapp/src/router/index.js +42 -0
  108. package/webapp/src/utils/colors.js +96 -0
  109. package/webapp/src/utils/formatters.js +49 -0
  110. package/webapp/src/views/Analytics.vue +377 -0
  111. package/webapp/src/views/ConsumerGroups.vue +433 -0
  112. package/webapp/src/views/Dashboard.vue +418 -0
  113. package/webapp/src/views/Messages.vue +361 -0
  114. package/webapp/src/views/QueueDetail.vue +582 -0
  115. package/webapp/src/views/Queues.vue +496 -0
  116. package/webapp/tailwind.config.js +25 -0
  117. package/webapp/vite.config.js +10 -0
  118. package/CACHE.md +0 -519
  119. package/DASHBOARD-V3.md +0 -478
  120. package/DASHBOARD.md +0 -382
  121. package/MOD_QUEUE.md +0 -453
  122. package/PARTITION_LOCKING_DESIGN.md +0 -989
  123. package/PLAN.md +0 -707
  124. package/QUERY_ANALSYS.md +0 -72
  125. package/QUEUE_BUS.md +0 -334
  126. package/V2-PLAN.md +0 -236
  127. package/dashboard/.vscode/extensions.json +0 -3
  128. package/dashboard/README.md +0 -5
  129. package/dashboard/index.html +0 -14
  130. package/dashboard/package-lock.json +0 -1458
  131. package/dashboard/package.json +0 -25
  132. package/dashboard/public/vite.svg +0 -1
  133. package/dashboard/src/App.vue +0 -29
  134. package/dashboard/src/assets/styles/main.css +0 -908
  135. package/dashboard/src/assets/vue.svg +0 -1
  136. package/dashboard/src/components/cards/MetricCard.vue +0 -298
  137. package/dashboard/src/components/charts/QueueDepthChart.vue +0 -276
  138. package/dashboard/src/components/charts/QueueLagChart.vue +0 -436
  139. package/dashboard/src/components/charts/ThroughputChart.vue +0 -302
  140. package/dashboard/src/components/common/ActivityFeed.vue +0 -251
  141. package/dashboard/src/components/layout/AppHeader.vue +0 -208
  142. package/dashboard/src/components/layout/AppLayout.vue +0 -88
  143. package/dashboard/src/components/layout/AppSidebar.vue +0 -261
  144. package/dashboard/src/main.js +0 -44
  145. package/dashboard/src/router.js +0 -54
  146. package/dashboard/src/services/api.js +0 -187
  147. package/dashboard/src/services/websocket.js +0 -167
  148. package/dashboard/src/utils/constants.js +0 -56
  149. package/dashboard/src/utils/helpers.js +0 -118
  150. package/dashboard/src/views/Analytics.vue +0 -912
  151. package/dashboard/src/views/Dashboard.vue +0 -906
  152. package/dashboard/src/views/Messages.vue +0 -437
  153. package/dashboard/src/views/QueueDetail.vue +0 -501
  154. package/dashboard/src/views/Queues.vue +0 -333
  155. package/dashboard/vite.config.js +0 -30
  156. package/debug-namespace.js +0 -110
  157. package/docs/long-polling.md +0 -159
  158. package/docs/multi-server-cache-solutions.md +0 -185
  159. package/docs/performance-tuning.md +0 -222
  160. package/src/routes/analytics.js +0 -812
@@ -0,0 +1,210 @@
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="#6366f1" 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="#818cf8" stroke-width="0.4"/>
77
+ <circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#4f46e5" stroke-width="0.4"/>
78
+ <circle cx="-3" cy="-4" r="1" fill="#a5b4fc" opacity="0.9"/>
79
+ <circle cx="3" cy="-4" r="1" fill="#a5b4fc" 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:#818cf8;stop-opacity:1" />
95
+ <stop offset="100%" style="stop-color:#a5b4fc;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:#6366f1;stop-opacity:0.3" />
100
+ <stop offset="50%" style="stop-color:#6366f1;stop-opacity:1" />
101
+ <stop offset="100%" style="stop-color:#6366f1;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:#c7d2fe;stop-opacity:1" />
118
+ <stop offset="70%" style="stop-color:#a5b4fc;stop-opacity:1" />
119
+ <stop offset="100%" style="stop-color:#6366f1;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:#818cf8;stop-opacity:1" />
124
+ <stop offset="100%" style="stop-color:#4f46e5;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:#eef2ff;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:#a5b4fc;stop-opacity:1" />
134
+ <stop offset="100%" style="stop-color:#4f46e5;stop-opacity:1" />
135
+ </linearGradient>
136
+
137
+ <linearGradient id="wingStroke">
138
+ <stop offset="0%" style="stop-color:#6366f1;stop-opacity:1" />
139
+ <stop offset="100%" style="stop-color:#4338ca;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:#a5b4fc;stop-opacity:1" />
144
+ <stop offset="100%" style="stop-color:#c7d2fe;stop-opacity:1" />
145
+ </linearGradient>
146
+
147
+ <radialGradient id="headGradient" cx="40%" cy="40%">
148
+ <stop offset="0%" style="stop-color:#e0e7ff;stop-opacity:1" />
149
+ <stop offset="60%" style="stop-color:#c7d2fe;stop-opacity:1" />
150
+ <stop offset="100%" style="stop-color:#818cf8;stop-opacity:1" />
151
+ </radialGradient>
152
+
153
+ <linearGradient id="headStroke">
154
+ <stop offset="0%" style="stop-color:#818cf8;stop-opacity:1" />
155
+ <stop offset="100%" style="stop-color:#6366f1;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:#eef2ff;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:#e0e7ff;stop-opacity:1" />
186
+ <stop offset="100%" style="stop-color:#6366f1;stop-opacity:1" />
187
+ </radialGradient>
188
+
189
+ <radialGradient id="leftJewelGradient">
190
+ <stop offset="0%" style="stop-color:#c7d2fe;stop-opacity:1" />
191
+ <stop offset="100%" style="stop-color:#4f46e5;stop-opacity:1" />
192
+ </radialGradient>
193
+
194
+ <radialGradient id="rightJewelGradient">
195
+ <stop offset="0%" style="stop-color:#e0e7ff;stop-opacity:1" />
196
+ <stop offset="100%" style="stop-color:#4338ca;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:#818cf8;stop-opacity:1" />
206
+ <stop offset="100%" style="stop-color:#4f46e5;stop-opacity:1" />
207
+ </linearGradient>
208
+ </defs>
209
+ </svg>
210
+
@@ -0,0 +1,210 @@
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
+
@@ -0,0 +1,210 @@
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
+