cinqcinqdev-seo 0.1.66 → 0.1.68

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.
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.0.0"
6
6
  },
7
- "version": "0.1.66",
7
+ "version": "0.1.68",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "unknown"
@@ -1 +1 @@
1
- .pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.-right-1\.5{right:-.375rem}.-right-2{right:-.5rem}.-top-1{top:-.25rem}.-top-1\.5{top:-.375rem}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.-top-6{top:-1.5rem}.bottom-0{bottom:0}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.left-5{left:1.25rem}.right-0{right:0}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-5{top:1.25rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.z-\[60\]{z-index:60}.col-span-1{grid-column:span 1/span 1}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.m-auto{margin:auto}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.-mr-16{margin-right:-4rem}.-mt-16{margin-top:-4rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.line-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}.line-clamp-2{-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[2px\]{height:2px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-48{max-height:12rem}.max-h-96{max-height:24rem}.max-h-\[88vh\]{max-height:88vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[95vh\]{max-height:95vh}.max-h-\[calc\(90vh-200px\)\]{max-height:calc(90vh - 200px)}.min-h-\[120px\]{min-height:120px}.min-h-\[140px\]{min-height:140px}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[360px\]{min-height:360px}.min-h-\[88vh\]{min-height:88vh}.min-h-\[90vh\]{min-height:90vh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[220px\]{width:220px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[14px\]{min-width:14px}.min-w-\[2rem\]{min-width:2rem}.min-w-\[400px\]{min-width:400px}.min-w-\[540px\]{min-width:540px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[360px\]{max-width:360px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-0\.5,.translate-x-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x:1rem}.translate-y-2{--tw-translate-y:0.5rem}.translate-y-2,.translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-full{--tw-translate-y:100%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.scale-\[1\.03\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.03\]{--tw-scale-x:1.03;--tw-scale-y:1.03}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.columns-1{-moz-columns:1;-moz-column-count:1;column-count:1}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-px{gap:1px}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.75rem*var(--tw-space-y-reverse));margin-top:calc(1.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(249 250 251/var(--tw-divide-opacity,1))}.divide-slate-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(241 245 249/var(--tw-divide-opacity,1))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity,1))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[24px\]{border-radius:24px}.rounded-\[2rem\]{border-radius:2rem}.rounded-\[32px\]{border-radius:32px}.rounded-\[36px\]{border-radius:36px}.rounded-\[3rem\]{border-radius:3rem}.rounded-\[40px\]{border-radius:40px}.rounded-\[48px\]{border-radius:48px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-full{border-bottom-right-radius:9999px;border-top-right-radius:9999px}.rounded-t-\[28px\]{border-top-left-radius:28px;border-top-right-radius:28px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#3d35ff\]{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.border-\[\#3d35ff\]\/20{border-color:rgba(61,53,255,.2)}.border-\[\#3d35ff\]\/30{border-color:rgba(61,53,255,.3)}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-black\/5{border-color:rgba(0,0,0,.05)}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-current{border-color:currentColor}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity,1))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/40{border-color:hsla(0,0%,100%,.4)}.border-white\/\[0\.06\]{border-color:hsla(0,0%,100%,.06)}.border-l-amber-500{--tw-border-opacity:1;border-left-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-l-red-500{--tw-border-opacity:1;border-left-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-l-red-600{--tw-border-opacity:1;border-left-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-l-slate-300{--tw-border-opacity:1;border-left-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-l-slate-400{--tw-border-opacity:1;border-left-color:rgb(148 163 184/var(--tw-border-opacity,1))}.bg-\[\#0d0d0d\]{--tw-bg-opacity:1;background-color:rgb(13 13 13/var(--tw-bg-opacity,1))}.bg-\[\#3d35ff\]{--tw-bg-opacity:1;background-color:rgb(61 53 255/var(--tw-bg-opacity,1))}.bg-\[\#3d35ff\]\/10{background-color:rgba(61,53,255,.1)}.bg-\[\#3d35ff\]\/5{background-color:rgba(61,53,255,.05)}.bg-\[\#EBEBEF\]{--tw-bg-opacity:1;background-color:rgb(235 235 239/var(--tw-bg-opacity,1))}.bg-\[\#F0F0F5\]{--tw-bg-opacity:1;background-color:rgb(240 240 245/var(--tw-bg-opacity,1))}.bg-\[\#F5F5F7\]{--tw-bg-opacity:1;background-color:rgb(245 245 247/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\/5{background-color:rgba(0,0,0,.05)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-black\/90{background-color:rgba(0,0,0,.9)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-50\/50{background-color:rgba(239,246,255,.5)}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-50\/50{background-color:rgba(249,250,251,.5)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-900\/40{background-color:rgba(15,23,42,.4)}.bg-slate-900\/60{background-color:rgba(15,23,42,.6)}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/20{background-color:hsla(0,0%,100%,.2)}.bg-white\/80{background-color:hsla(0,0%,100%,.8)}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,246,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-400{--tw-gradient-from:#c084fc var(--tw-gradient-from-position);--tw-gradient-to:rgba(192,132,252,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-slate-900{--tw-gradient-from:#0f172a var(--tw-gradient-from-position);--tw-gradient-to:rgba(15,23,42,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-800{--tw-gradient-to:#1e40af var(--tw-gradient-to-position)}.to-pink-400{--tw-gradient-to:#f472b6 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.to-sky-50{--tw-gradient-to:#f0f9ff var(--tw-gradient-to-position)}.to-slate-800{--tw-gradient-to:#1e293b var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-20{padding:5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-14{padding-bottom:3.5rem;padding-top:3.5rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-20{padding-bottom:5rem;padding-top:5rem}.py-24{padding-bottom:6rem;padding-top:6rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-7{padding-bottom:1.75rem;padding-top:1.75rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-12{padding-bottom:3rem}.pb-14{padding-bottom:3.5rem}.pb-16{padding-bottom:4rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-40{padding-bottom:10rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-7{padding-bottom:1.75rem}.pb-8{padding-bottom:2rem}.pl-12{padding-left:3rem}.pl-3{padding-left:.75rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-4{padding-right:1rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-40{padding-top:10rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-8xl{font-size:6rem;line-height:1}.text-\[100px\]{font-size:100px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[6px\]{font-size:6px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.leading-\[0\.85\]{line-height:.85}.leading-\[0\.88\]{line-height:.88}.leading-\[0\.92\]{line-height:.92}.leading-\[0\.9\]{line-height:.9}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.35em\]{letter-spacing:.35em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-\[0\.4em\]{letter-spacing:.4em}.tracking-\[0\.5em\]{letter-spacing:.5em}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#3d35ff\]{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.text-\[\#3d35ff\]\/40{color:rgba(61,53,255,.4)}.text-\[\#3d35ff\]\/60{color:rgba(61,53,255,.6)}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-black\/40{color:rgba(0,0,0,.4)}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/20{color:hsla(0,0%,100%,.2)}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.placeholder-gray-300::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(209 213 219/var(--tw-placeholder-opacity,1))}.placeholder-gray-300::placeholder{--tw-placeholder-opacity:1;color:rgb(209 213 219/var(--tw-placeholder-opacity,1))}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-\[0\.04\]{opacity:.04}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-\[\#3d35ff\]\/20{--tw-shadow-color:rgba(61,53,255,.2);--tw-shadow:var(--tw-shadow-colored)}.shadow-\[\#3d35ff\]\/30{--tw-shadow-color:rgba(61,53,255,.3);--tw-shadow:var(--tw-shadow-colored)}.shadow-blue-200{--tw-shadow-color:#bfdbfe;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-\[\#3d35ff\]{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.ring-\[\#3d35ff\]\/20{--tw-ring-color:rgba(61,53,255,.2)}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity,1))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.blur-3xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-3xl{--tw-blur:blur(64px)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-lg,.backdrop-blur-md{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-sm,.backdrop-blur-xl{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.placeholder\:text-slate-300::-moz-placeholder{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.placeholder\:text-slate-300::placeholder{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:ring-\[\#3d35ff\]:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem}.hover\:-translate-y-0\.5:hover,.hover\:-translate-y-1:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-1:hover{--tw-translate-y:-0.25rem}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:scale-105:hover,.hover\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}.hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:gap-3:hover{gap:.75rem}.hover\:gap-4:hover{gap:1rem}.hover\:gap-5:hover{gap:1.25rem}.hover\:border-\[\#3d35ff\]:hover{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.hover\:border-\[\#3d35ff\]\/30:hover{border-color:rgba(61,53,255,.3)}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity,1))}.hover\:border-purple-400:hover{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity,1))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.hover\:bg-\[\#2f28cc\]:hover{--tw-bg-opacity:1;background-color:rgb(47 40 204/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3d35ff\]:hover{--tw-bg-opacity:1;background-color:rgb(61 53 255/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3d35ff\]\/5:hover{background-color:rgba(61,53,255,.05)}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.hover\:bg-black\/\[0\.02\]:hover{background-color:rgba(0,0,0,.02)}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-50\/50:hover{background-color:rgba(239,246,255,.5)}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-50\/60:hover{background-color:rgba(249,250,251,.6)}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.hover\:bg-purple-50\/50:hover{background-color:rgba(250,245,255,.5)}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/\[0\.08\]:hover{background-color:rgba(239,68,68,.08)}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-slate-50\/50:hover{background-color:rgba(248,250,252,.5)}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}.hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}.hover\:bg-white\/30:hover{background-color:hsla(0,0%,100%,.3)}.hover\:bg-white\/\[0\.08\]:hover{background-color:hsla(0,0%,100%,.08)}.hover\:pl-2:hover{padding-left:.5rem}.hover\:text-\[\#3d35ff\]:hover{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.hover\:shadow-lg:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.hover\:shadow-sm:hover,.hover\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.hover\:ring-\[\#3d35ff\]:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-\[\#3d35ff\]:focus{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:border-slate-400:focus{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-\[\#3d35ff\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-1{--tw-translate-x:-0.25rem}.group:hover .group-hover\:-translate-x-1,.group:hover .group-hover\:translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x:0.25rem}.group:hover .group-hover\:translate-y-0{--tw-translate-y:0px}.group:hover .group-hover\:scale-105,.group:hover .group-hover\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:gap-2{gap:.5rem}.group:hover .group-hover\:gap-2\.5{gap:.625rem}.group:hover .group-hover\:gap-3{gap:.75rem}.group:hover .group-hover\:bg-\[\#3d35ff\]\/10{background-color:rgba(61,53,255,.1)}.group:hover .group-hover\:text-\[\#3d35ff\]{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-10{gap:2.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-7{grid-column:span 7/span 7}.md\:mb-20{margin-bottom:5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:min-h-0{min-height:0}.md\:min-h-\[320px\]{min-height:320px}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-48{width:12rem}.md\:w-56{width:14rem}.md\:w-auto{width:auto}.md\:max-w-3xl{max-width:48rem}.md\:shrink-0{flex-shrink:0}.md\:-translate-y-4{--tw-translate-y:-1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:columns-2{-moz-columns:2;-moz-column-count:2;column-count:2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:gap-16{gap:4rem}.md\:gap-20{gap:5rem}.md\:gap-4{gap:1rem}.md\:rounded-\[28px\]{border-radius:28px}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:px-14{padding-left:3.5rem;padding-right:3.5rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-16{padding-bottom:4rem;padding-top:4rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1024px){.lg\:columns-3{-moz-columns:3;-moz-column-count:3;column-count:3}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}
1
+ .pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.-right-1\.5{right:-.375rem}.-right-2{right:-.5rem}.-top-1{top:-.25rem}.-top-1\.5{top:-.375rem}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.-top-6{top:-1.5rem}.bottom-0{bottom:0}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.left-5{left:1.25rem}.right-0{right:0}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-5{top:1.25rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.z-\[60\]{z-index:60}.col-span-1{grid-column:span 1/span 1}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.m-auto{margin:auto}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-8{margin-left:-2rem}.-mr-16{margin-right:-4rem}.-mr-8{margin-right:-2rem}.-mt-16{margin-top:-4rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.line-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}.line-clamp-2{-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.size-full{height:100%;width:100%}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[2px\]{height:2px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-48{max-height:12rem}.max-h-96{max-height:24rem}.max-h-\[90vh\]{max-height:90vh}.max-h-\[95vh\]{max-height:95vh}.max-h-\[calc\(90vh-200px\)\]{max-height:calc(90vh - 200px)}.min-h-\[120px\]{min-height:120px}.min-h-\[140px\]{min-height:140px}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[360px\]{min-height:360px}.min-h-\[88vh\]{min-height:88vh}.min-h-\[90vh\]{min-height:90vh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[220px\]{width:220px}.w-\[38\%\]{width:38%}.w-\[42\%\]{width:42%}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[14px\]{min-width:14px}.min-w-\[2rem\]{min-width:2rem}.min-w-\[400px\]{min-width:400px}.min-w-\[540px\]{min-width:540px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[360px\]{max-width:360px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-0\.5,.translate-x-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x:1rem}.translate-y-2{--tw-translate-y:0.5rem}.translate-y-2,.translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-full{--tw-translate-y:100%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.scale-\[1\.03\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.03\]{--tw-scale-x:1.03;--tw-scale-y:1.03}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.columns-1{-moz-columns:1;-moz-column-count:1;column-count:1}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-px{gap:1px}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-3{row-gap:.75rem}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(249 250 251/var(--tw-divide-opacity,1))}.divide-slate-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(241 245 249/var(--tw-divide-opacity,1))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity,1))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[24px\]{border-radius:24px}.rounded-\[2rem\]{border-radius:2rem}.rounded-\[32px\]{border-radius:32px}.rounded-\[36px\]{border-radius:36px}.rounded-\[3rem\]{border-radius:3rem}.rounded-\[40px\]{border-radius:40px}.rounded-\[48px\]{border-radius:48px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-full{border-bottom-right-radius:9999px;border-top-right-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#3d35ff\]{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.border-\[\#3d35ff\]\/20{border-color:rgba(61,53,255,.2)}.border-\[\#3d35ff\]\/30{border-color:rgba(61,53,255,.3)}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-black\/5{border-color:rgba(0,0,0,.05)}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-current{border-color:currentColor}.border-cyan-200{--tw-border-opacity:1;border-color:rgb(165 243 252/var(--tw-border-opacity,1))}.border-emerald-200{--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/40{border-color:hsla(0,0%,100%,.4)}.border-white\/\[0\.06\]{border-color:hsla(0,0%,100%,.06)}.border-l-amber-500{--tw-border-opacity:1;border-left-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-l-red-500{--tw-border-opacity:1;border-left-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-l-red-600{--tw-border-opacity:1;border-left-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-l-slate-300{--tw-border-opacity:1;border-left-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-l-slate-400{--tw-border-opacity:1;border-left-color:rgb(148 163 184/var(--tw-border-opacity,1))}.bg-\[\#0d0d0d\]{--tw-bg-opacity:1;background-color:rgb(13 13 13/var(--tw-bg-opacity,1))}.bg-\[\#3d35ff\]{--tw-bg-opacity:1;background-color:rgb(61 53 255/var(--tw-bg-opacity,1))}.bg-\[\#3d35ff\]\/10{background-color:rgba(61,53,255,.1)}.bg-\[\#3d35ff\]\/5{background-color:rgba(61,53,255,.05)}.bg-\[\#EBEBEF\]{--tw-bg-opacity:1;background-color:rgb(235 235 239/var(--tw-bg-opacity,1))}.bg-\[\#F0F0F5\]{--tw-bg-opacity:1;background-color:rgb(240 240 245/var(--tw-bg-opacity,1))}.bg-\[\#F5F5F7\]{--tw-bg-opacity:1;background-color:rgb(245 245 247/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\/5{background-color:rgba(0,0,0,.05)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/90{background-color:rgba(0,0,0,.9)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-50\/50{background-color:rgba(239,246,255,.5)}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-50\/50{background-color:rgba(249,250,251,.5)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-slate-900\/40{background-color:rgba(15,23,42,.4)}.bg-slate-900\/60{background-color:rgba(15,23,42,.6)}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/20{background-color:hsla(0,0%,100%,.2)}.bg-white\/80{background-color:hsla(0,0%,100%,.8)}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,246,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from:#2563eb var(--tw-gradient-from-position);--tw-gradient-to:rgba(37,99,235,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-400{--tw-gradient-from:#c084fc var(--tw-gradient-from-position);--tw-gradient-to:rgba(192,132,252,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-slate-900{--tw-gradient-from:#0f172a var(--tw-gradient-from-position);--tw-gradient-to:rgba(15,23,42,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-800{--tw-gradient-to:#1e40af var(--tw-gradient-to-position)}.to-pink-400{--tw-gradient-to:#f472b6 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.to-sky-50{--tw-gradient-to:#f0f9ff var(--tw-gradient-to-position)}.to-slate-800{--tw-gradient-to:#1e293b var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-20{padding:5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-14{padding-bottom:3.5rem;padding-top:3.5rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-20{padding-bottom:5rem;padding-top:5rem}.py-24{padding-bottom:6rem;padding-top:6rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-7{padding-bottom:1.75rem;padding-top:1.75rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-12{padding-bottom:3rem}.pb-14{padding-bottom:3.5rem}.pb-16{padding-bottom:4rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-40{padding-bottom:10rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-7{padding-bottom:1.75rem}.pb-8{padding-bottom:2rem}.pl-12{padding-left:3rem}.pl-3{padding-left:.75rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-4{padding-right:1rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-40{padding-top:10rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-8xl{font-size:6rem;line-height:1}.text-\[100px\]{font-size:100px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[6px\]{font-size:6px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[0\.85\]{line-height:.85}.leading-\[0\.88\]{line-height:.88}.leading-\[0\.92\]{line-height:.92}.leading-\[0\.9\]{line-height:.9}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-\[0\.35em\]{letter-spacing:.35em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-\[0\.4em\]{letter-spacing:.4em}.tracking-\[0\.5em\]{letter-spacing:.5em}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#3d35ff\]{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.text-\[\#3d35ff\]\/40{color:rgba(61,53,255,.4)}.text-\[\#3d35ff\]\/60{color:rgba(61,53,255,.6)}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-black\/40{color:rgba(0,0,0,.4)}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-cyan-900{--tw-text-opacity:1;color:rgb(22 78 99/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/20{color:hsla(0,0%,100%,.2)}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/70{color:hsla(0,0%,100%,.7)}.text-white\/80{color:hsla(0,0%,100%,.8)}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-\[0\.04\]{opacity:.04}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-\[\#3d35ff\]\/20{--tw-shadow-color:rgba(61,53,255,.2);--tw-shadow:var(--tw-shadow-colored)}.shadow-\[\#3d35ff\]\/30{--tw-shadow-color:rgba(61,53,255,.3);--tw-shadow:var(--tw-shadow-colored)}.shadow-blue-200{--tw-shadow-color:#bfdbfe;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-\[\#3d35ff\]{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.ring-\[\#3d35ff\]\/20{--tw-ring-color:rgba(61,53,255,.2)}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity,1))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.blur-3xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-3xl{--tw-blur:blur(64px)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-lg,.backdrop-blur-md{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-sm,.backdrop-blur-xl{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[appearance\:textfield\]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.placeholder\:text-slate-300::-moz-placeholder{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.placeholder\:text-slate-300::placeholder{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:ring-\[\#3d35ff\]:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem}.hover\:-translate-y-0\.5:hover,.hover\:-translate-y-1:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-1:hover{--tw-translate-y:-0.25rem}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:scale-105:hover,.hover\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}.hover\:scale-\[1\.02\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:gap-3:hover{gap:.75rem}.hover\:gap-4:hover{gap:1rem}.hover\:gap-5:hover{gap:1.25rem}.hover\:border-\[\#3d35ff\]:hover{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.hover\:border-\[\#3d35ff\]\/30:hover{border-color:rgba(61,53,255,.3)}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:border-pink-300:hover{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity,1))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.hover\:bg-\[\#2f28cc\]:hover{--tw-bg-opacity:1;background-color:rgb(47 40 204/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3d35ff\]:hover{--tw-bg-opacity:1;background-color:rgb(61 53 255/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3d35ff\]\/5:hover{background-color:rgba(61,53,255,.05)}.hover\:bg-amber-100:hover{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.hover\:bg-black\/\[0\.02\]:hover{background-color:rgba(0,0,0,.02)}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-50\/50:hover{background-color:rgba(239,246,255,.5)}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-50\/60:hover{background-color:rgba(249,250,251,.6)}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.hover\:bg-purple-50:hover{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/\[0\.08\]:hover{background-color:rgba(239,68,68,.08)}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-slate-50\/50:hover{background-color:rgba(248,250,252,.5)}.hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-slate-900:hover{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}.hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}.hover\:bg-white\/30:hover{background-color:hsla(0,0%,100%,.3)}.hover\:bg-white\/\[0\.08\]:hover{background-color:hsla(0,0%,100%,.08)}.hover\:pl-2:hover{padding-left:.5rem}.hover\:text-\[\#3d35ff\]:hover{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.hover\:shadow-lg:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.hover\:shadow-sm:hover,.hover\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.hover\:ring-\[\#3d35ff\]:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-\[\#3d35ff\]:focus{--tw-border-opacity:1;border-color:rgb(61 53 255/var(--tw-border-opacity,1))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:border-slate-400:focus{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-\[\#3d35ff\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(61 53 255/var(--tw-ring-opacity,1))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:-translate-x-1{--tw-translate-x:-0.25rem}.group:hover .group-hover\:-translate-x-1,.group:hover .group-hover\:translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x:0.25rem}.group:hover .group-hover\:translate-y-0{--tw-translate-y:0px}.group:hover .group-hover\:scale-105,.group:hover .group-hover\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:gap-2{gap:.5rem}.group:hover .group-hover\:gap-2\.5{gap:.625rem}.group:hover .group-hover\:gap-3{gap:.75rem}.group:hover .group-hover\:bg-\[\#3d35ff\]\/10{background-color:rgba(61,53,255,.1)}.group:hover .group-hover\:text-\[\#3d35ff\]{--tw-text-opacity:1;color:rgb(61 53 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-10{gap:2.5rem}.sm\:gap-8{gap:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-20{padding-bottom:5rem;padding-top:5rem}.sm\:py-28{padding-bottom:7rem;padding-top:7rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-7{grid-column:span 7/span 7}.md\:mb-20{margin-bottom:5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:min-h-0{min-height:0}.md\:min-h-\[320px\]{min-height:320px}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-48{width:12rem}.md\:w-56{width:14rem}.md\:w-auto{width:auto}.md\:shrink-0{flex-shrink:0}.md\:-translate-y-4{--tw-translate-y:-1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:columns-2{-moz-columns:2;-moz-column-count:2;column-count:2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:gap-16{gap:4rem}.md\:gap-20{gap:5rem}.md\:gap-4{gap:1rem}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:px-14{padding-left:3.5rem;padding-right:3.5rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-16{padding-bottom:4rem;padding-top:4rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1024px){.lg\:columns-3{-moz-columns:3;-moz-column-count:3;column-count:3}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button,.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none}.\[\&\>svg\]\:h-full>svg{height:100%}.\[\&\>svg\]\:w-full>svg{width:100%}
@@ -0,0 +1,3 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: any;
@@ -0,0 +1,165 @@
1
+ <template>
2
+ <section
3
+ ref="rootEl"
4
+ class="relative overflow-hidden"
5
+ :dir="textDirection"
6
+ :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]"
7
+ >
8
+ <div :class="['relative mx-auto flex flex-col items-center px-6 text-center', containerClass, variantStyles.section]">
9
+
10
+ <!-- Title + description -->
11
+ <div :class="['flex w-full max-w-2xl flex-col items-center', variantStyles.header, revealClass(0)]">
12
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.9] text-balance', variantStyles.title]">
13
+ {{ title }}
14
+ <template v-if="titleLine2Prefix || titleHighlight">
15
+ <br />
16
+ <span v-if="titleLine2Prefix">{{ titleLine2Prefix }} </span>
17
+ <span v-if="titleHighlight" :style="{ color: highlightColor }">{{ titleHighlight }}</span>
18
+ </template>
19
+ </component>
20
+
21
+ <p v-if="description" :class="['leading-relaxed', variantStyles.description, revealClass(1)]" :style="{ opacity: 0.6 }">
22
+ {{ description }}
23
+ </p>
24
+ </div>
25
+
26
+ <!-- CTAs + social proof -->
27
+ <div :class="['flex flex-col items-center gap-4', revealClass(2)]">
28
+ <div v-if="primaryCtaText || secondaryCtaText" class="flex flex-wrap items-center justify-center gap-x-4 gap-y-3">
29
+ <NuxtLink
30
+ v-if="primaryCtaText"
31
+ :to="primaryCtaLink || '#'"
32
+ class="inline-flex items-center gap-2.5 px-7 py-3.5 text-[11px] font-black uppercase tracking-widest rounded-full transition-all hover:opacity-90 active:scale-95"
33
+ :style="{ backgroundColor: textColor, color: bgColor }"
34
+ >{{ primaryCtaText }}</NuxtLink>
35
+ <NuxtLink
36
+ v-if="secondaryCtaText"
37
+ :to="secondaryCtaLink || '#'"
38
+ class="inline-flex items-center gap-2.5 px-7 py-3.5 border text-[11px] font-black uppercase tracking-widest rounded-full transition-all hover:opacity-70 active:scale-95"
39
+ :style="{ borderColor: ca(textColor, '30'), color: textColor }"
40
+ >{{ secondaryCtaText }}</NuxtLink>
41
+ </div>
42
+ <p v-if="socialProof" class="text-xs font-medium" :style="{ opacity: 0.45 }">{{ socialProof }}</p>
43
+ </div>
44
+
45
+ <!-- Fan image layout — up to 3 images -->
46
+ <div v-if="images?.length" :class="['mx-auto w-full', variantStyles.fan, revealClass(3)]">
47
+ <div class="relative flex w-full items-center justify-center">
48
+ <div
49
+ v-for="(img, i) in images.slice(0, 3)"
50
+ :key="i"
51
+ :class="['relative shrink-0 overflow-hidden rounded-2xl shadow-xl', fanSlots[i].width, fanSlots[i].layout]"
52
+ :style="{ transform: `rotate(${fanSlots[i].rotate}deg) translateY(${fanSlots[i].ty}px)`, outline: `1px solid ${ca(textColor, '15')}` }"
53
+ >
54
+ <img
55
+ :src="typeof img === 'object' ? img.url : img"
56
+ :alt="typeof img === 'object' ? (img.alt || '') : ''"
57
+ decoding="async"
58
+ class="size-full object-cover"
59
+ :class="variantStyles.fanCard"
60
+ />
61
+ </div>
62
+ </div>
63
+ </div>
64
+
65
+ </div>
66
+ </section>
67
+ </template>
68
+
69
+ <script setup>
70
+ import { ref, computed, onMounted } from "vue";
71
+ const ca = (c, h) => {
72
+ if (!c) return "#000" + h;
73
+ const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
74
+ return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
75
+ };
76
+ const props = defineProps({
77
+ titleTag: { type: String, default: "h1" },
78
+ title: { type: String, default: "The Headline" },
79
+ titleLine2Prefix: { type: String, default: "" },
80
+ titleHighlight: { type: String, default: "Highlighted" },
81
+ highlightColor: { type: String, default: "rgba(var(--primary-color), 1)" },
82
+ description: { type: String, default: "A compelling subtitle that explains your value proposition clearly." },
83
+ socialProof: { type: String, default: "" },
84
+ primaryCtaText: { type: String, default: "Get Started" },
85
+ primaryCtaLink: { type: String, default: "#" },
86
+ secondaryCtaText: { type: String, default: "" },
87
+ secondaryCtaLink: { type: String, default: "#" },
88
+ images: { type: Array, default: () => [] },
89
+ variant: { type: String, default: "standard" },
90
+ // standard | compact
91
+ animation: { type: String, default: "subtle" },
92
+ // subtle | none
93
+ bgColor: { type: String, default: "rgba(var(--body-bg), 1)" },
94
+ textColor: { type: String, default: "rgba(var(--text-color), 1)" },
95
+ contentWidth: { type: String, default: "normal" },
96
+ textSize: { type: String, default: "md" },
97
+ textDirection: { type: String, default: "ltr" },
98
+ paddingTop: { type: String, default: "" },
99
+ paddingBottom: { type: String, default: "" },
100
+ marginTop: { type: String, default: "" },
101
+ marginBottom: { type: String, default: "" }
102
+ });
103
+ const rootEl = ref(null);
104
+ const isVisible = ref(false);
105
+ onMounted(() => {
106
+ if (props.animation === "none") {
107
+ isVisible.value = true;
108
+ return;
109
+ }
110
+ if (!rootEl.value) return;
111
+ const obs = new IntersectionObserver(
112
+ ([e]) => {
113
+ if (e.isIntersecting) {
114
+ isVisible.value = true;
115
+ obs.disconnect();
116
+ }
117
+ },
118
+ { threshold: 0.1, rootMargin: "-40px" }
119
+ );
120
+ obs.observe(rootEl.value);
121
+ setTimeout(() => {
122
+ if (!isVisible.value) isVisible.value = true;
123
+ }, 500);
124
+ });
125
+ const DELAYS = ["0s", "0.1s", "0.2s", "0.4s"];
126
+ const revealClass = (i) => isVisible.value ? `hf-visible` : `hf-hidden hf-delay-${i}`;
127
+ const fanSlots = [
128
+ { width: "w-[38%]", layout: "-mr-8 z-10", rotate: -6, ty: 24 },
129
+ { width: "w-[42%]", layout: "z-20", rotate: 0, ty: -8 },
130
+ { width: "w-[38%]", layout: "-ml-8 z-10", rotate: 6, ty: 24 }
131
+ ];
132
+ const VARIANTS = {
133
+ standard: {
134
+ section: "py-20 sm:py-28 gap-8 sm:gap-10",
135
+ title: "text-3xl sm:text-4xl md:text-5xl mb-5",
136
+ description: "max-w-lg text-sm sm:text-base",
137
+ header: "gap-5",
138
+ fan: "max-w-3xl",
139
+ fanCard: "aspect-[4/5]"
140
+ },
141
+ compact: {
142
+ section: "py-14 sm:py-20 gap-6 sm:gap-8",
143
+ title: "text-2xl sm:text-3xl md:text-4xl mb-4",
144
+ description: "max-w-md text-sm",
145
+ header: "gap-4",
146
+ fan: "max-w-2xl",
147
+ fanCard: "aspect-[4/5]"
148
+ }
149
+ };
150
+ const variantStyles = computed(() => VARIANTS[props.variant] || VARIANTS.standard);
151
+ const containerClass = computed(() => ({ narrow: "max-w-3xl", normal: "max-w-6xl", wide: "max-w-7xl", full: "max-w-full" })[props.contentWidth] || "max-w-6xl");
152
+ const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px", "-xs": "-8px", "-sm": "-24px", "-md": "-48px", "-lg": "-80px", "-xl": "-128px" };
153
+ const spacingStyle = computed(() => {
154
+ const s = {};
155
+ if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
156
+ if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
157
+ if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
158
+ if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
159
+ return s;
160
+ });
161
+ </script>
162
+
163
+ <style scoped>
164
+ .hf-hidden{filter:blur(4px);opacity:0;transform:translateY(16px)}.hf-hidden,.hf-visible{transition:opacity .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1),filter .55s cubic-bezier(.22,1,.36,1)}.hf-visible{filter:blur(0);opacity:1;transform:translateY(0)}.hf-delay-0{transition-delay:0s}.hf-delay-1{transition-delay:.1s}.hf-delay-2{transition-delay:.2s}.hf-delay-3{transition-delay:.4s}
165
+ </style>
@@ -0,0 +1,3 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: any;
@@ -1,16 +1,16 @@
1
1
  <template>
2
- <section class="relative overflow-hidden" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" class="relative overflow-hidden" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
3
3
 
4
4
  <!-- CENTERED -->
5
5
  <div v-if="layout === 'centered'" class="px-6 md:px-12 pt-20 pb-16 text-center">
6
6
  <div :class="[containerClass]">
7
- <span v-if="badge" class="inline-flex items-center gap-1.5 text-[10px] font-bold tracking-[0.4em] uppercase px-4 py-1.5 rounded-full border mb-8" :style="{ borderColor: ca(textColor, '30'), color: ca(textColor, '80') }">
7
+ <span v-if="badge" :class="['inline-flex items-center gap-1.5 text-[10px] font-bold tracking-[0.4em] uppercase px-4 py-1.5 rounded-full border mb-8', ac()]" :style="[{ borderColor: ca(textColor, '30'), color: ca(textColor, '80') }, as_(0)]">
8
8
  <span class="w-1.5 h-1.5 rounded-full inline-block" :style="{ backgroundColor: ca(textColor, '60') }"></span>{{ badge }}
9
9
  </span>
10
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-6" :style="{ fontSize: titleSize === 'sm' ? 'clamp(2.5rem,5vw,4rem)' : titleSize === 'lg' ? 'clamp(3.5rem,9vw,8rem)' : 'clamp(3rem,7vw,6rem)' }">{{ title }}</component>
11
- <p :class="[bodyClass, 'leading-relaxed max-w-lg mx-auto mb-10']" :style="{ opacity: 0.5 }">{{ subtitle }}</p>
12
- <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-8 py-3.5 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
13
- <div v-if="image" :class="['mt-14 mx-auto aspect-video overflow-hidden max-w-3xl', cardRound]">
10
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.88] mb-6', animation === 'typewriter' ? 'hs-typewriter' : ac()]" :style="[{ fontSize: titleSize === 'sm' ? 'clamp(2.5rem,5vw,4rem)' : titleSize === 'lg' ? 'clamp(3.5rem,9vw,8rem)' : 'clamp(3rem,7vw,6rem)' }, animation !== 'typewriter' ? as_(badge ? 1 : 0) : {}]">{{ title }}</component>
11
+ <p :class="[bodyClass, 'leading-relaxed max-w-lg mx-auto mb-10', ac()]" :style="[{ opacity: 0.5 }, as_(badge ? 2 : 1)]">{{ subtitle }}</p>
12
+ <NuxtLink :to="ctaLink || '#'" :class="['inline-flex items-center gap-2.5 px-8 py-3.5 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95', ac()]" :style="[{ backgroundColor: textColor, color: bgColor }, as_(badge ? 3 : 2)]">{{ ctaText }}<span>→</span></NuxtLink>
13
+ <div v-if="image" :class="['mt-14 mx-auto aspect-video overflow-hidden max-w-3xl', cardRound, ac()]" :style="as_(badge ? 4 : 3)">
14
14
  <img :src="image" class="w-full h-full object-cover" />
15
15
  </div>
16
16
  </div>
@@ -20,12 +20,12 @@
20
20
  <div v-else-if="layout === 'split'" class="px-6 md:px-12 py-16">
21
21
  <div :class="[containerClass, 'grid md:grid-cols-2 gap-12 md:gap-20 items-center']">
22
22
  <div>
23
- <span v-if="badge" class="inline-block text-[9px] font-black tracking-[0.5em] uppercase mb-6 opacity-35">{{ badge }}</span>
24
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-6" :style="{ fontSize: 'clamp(2.2rem,5vw,4.5rem)' }">{{ title }}</component>
25
- <p :class="[bodyClass, 'leading-relaxed mb-10 max-w-sm']" :style="{ opacity: 0.5 }">{{ subtitle }}</p>
26
- <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
23
+ <span v-if="badge" :class="['inline-block text-[9px] font-black tracking-[0.5em] uppercase mb-6 opacity-35', ac()]" :style="as_(0)">{{ badge }}</span>
24
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.88] mb-6', animation === 'typewriter' ? 'hs-typewriter' : ac()]" :style="[{ fontSize: 'clamp(2.2rem,5vw,4.5rem)' }, animation !== 'typewriter' ? as_(badge ? 1 : 0) : {}]">{{ title }}</component>
25
+ <p :class="[bodyClass, 'leading-relaxed mb-10 max-w-sm', ac()]" :style="[{ opacity: 0.5 }, as_(badge ? 2 : 1)]">{{ subtitle }}</p>
26
+ <NuxtLink :to="ctaLink || '#'" :class="['inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95', ac()]" :style="[{ backgroundColor: textColor, color: bgColor }, as_(badge ? 3 : 2)]">{{ ctaText }}<span>→</span></NuxtLink>
27
27
  </div>
28
- <div :class="['aspect-[4/3] overflow-hidden', cardRound]">
28
+ <div :class="['aspect-[4/3] overflow-hidden', cardRound, animation === 'float' ? 'hs-float' : ac()]" :style="animation === 'float' ? {} : as_(badge ? 4 : 3)">
29
29
  <img v-if="image" :src="image" class="w-full h-full object-cover" />
30
30
  <div v-else class="w-full h-full" :style="{ backgroundColor: ca(textColor, '06') }"></div>
31
31
  </div>
@@ -35,7 +35,7 @@
35
35
  <!-- BENTO -->
36
36
  <div v-else-if="layout === 'bento'" class="p-3 md:p-5">
37
37
  <div :class="[containerClass, 'grid grid-cols-12 gap-3']">
38
- <div :class="['col-span-12 md:col-span-7 p-8 md:p-10 border flex flex-col justify-between min-h-[320px]', cardRound]" :style="{ borderColor: ca(textColor, '10'), backgroundColor: ca(textColor, '04') }">
38
+ <div :class="['col-span-12 md:col-span-7 p-8 md:p-10 border flex flex-col justify-between min-h-[320px]', cardRound, ac()]" :style="[{ borderColor: ca(textColor, '10'), backgroundColor: ca(textColor, '04') }, as_(0)]">
39
39
  <span v-if="badge" class="text-[9px] font-black uppercase tracking-[0.4em] opacity-30">{{ badge }}</span>
40
40
  <div>
41
41
  <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-4" :style="{ fontSize: 'clamp(2rem,4.5vw,3.8rem)' }">{{ title }}</component>
@@ -43,7 +43,7 @@
43
43
  <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-6 py-3 rounded-full text-[10px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
44
44
  </div>
45
45
  </div>
46
- <div :class="['col-span-12 md:col-span-5 overflow-hidden min-h-[260px] md:min-h-[320px]', cardRound]">
46
+ <div :class="['col-span-12 md:col-span-5 overflow-hidden min-h-[260px] md:min-h-[320px]', cardRound, animation === 'float' ? 'hs-float' : ac()]" :style="animation === 'float' ? {} : as_(1)">
47
47
  <img v-if="image" :src="image" class="w-full h-full object-cover" />
48
48
  <div v-else class="w-full h-full" :style="{ backgroundColor: ca(textColor, '08') }"></div>
49
49
  </div>
@@ -58,11 +58,11 @@
58
58
  <div class="absolute inset-0" :style="{ background: `linear-gradient(to top, ${bgColor} 20%, ${ca(bgColor, 'cc')} 40%, ${ca(bgColor, '44')} 65%, transparent 100%)` }"></div>
59
59
  </div>
60
60
  <div :class="[containerClass, 'relative z-10 w-full px-6 md:px-12 pb-14']">
61
- <span v-if="badge" class="inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4">{{ badge }}</span>
62
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-6" :style="{ fontSize: 'clamp(3rem,8vw,7rem)' }">{{ title }}</component>
61
+ <span v-if="badge" :class="['inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4', ac()]" :style="as_(0)">{{ badge }}</span>
62
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.88] mb-6', ac()]" :style="[{ fontSize: 'clamp(3rem,8vw,7rem)' }, as_(badge ? 1 : 0)]">{{ title }}</component>
63
63
  <div class="flex flex-col sm:flex-row sm:items-center gap-6 sm:gap-10">
64
- <p :class="[bodyClass, 'leading-relaxed max-w-xs']" :style="{ opacity: 0.6 }">{{ subtitle }}</p>
65
- <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest border transition-all hover:gap-5 shrink-0" :style="{ borderColor: ca(textColor, '50'), color: textColor }">{{ ctaText }}<span>→</span></NuxtLink>
64
+ <p :class="[bodyClass, 'leading-relaxed max-w-xs', ac()]" :style="[{ opacity: 0.6 }, as_(badge ? 2 : 1)]">{{ subtitle }}</p>
65
+ <NuxtLink :to="ctaLink || '#'" :class="['inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest border transition-all hover:gap-5 shrink-0', ac()]" :style="[{ borderColor: ca(textColor, '50'), color: textColor }, as_(badge ? 3 : 2)]">{{ ctaText }}<span>→</span></NuxtLink>
66
66
  </div>
67
67
  </div>
68
68
  </div>
@@ -70,16 +70,16 @@
70
70
  <!-- MINIMAL -->
71
71
  <div v-else-if="layout === 'minimal'" class="px-6 md:px-12 py-14">
72
72
  <div :class="[containerClass]">
73
- <div class="flex items-center gap-4 mb-10 border-b pb-5" :style="{ borderColor: ca(textColor, '10') }">
73
+ <div :class="['flex items-center gap-4 mb-10 border-b pb-5', ac()]" :style="[{ borderColor: ca(textColor, '10') }, as_(0)]">
74
74
  <span v-if="badge" class="text-[9px] font-black uppercase tracking-[0.5em] opacity-30">{{ badge }}</span>
75
75
  <div class="flex-1 h-px" :style="{ backgroundColor: ca(textColor, '08') }"></div>
76
76
  <span class="text-[9px] font-black uppercase tracking-[0.5em] opacity-20">{{ ctaText }}</span>
77
77
  </div>
78
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.85] mb-10" :style="{ fontSize: 'clamp(3.5rem,10vw,9rem)' }">{{ title }}</component>
79
- <div v-if="image" :class="['mb-10 overflow-hidden aspect-video', cardRound]">
78
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.85] mb-10', animation === 'typewriter' ? 'hs-typewriter' : ac()]" :style="[{ fontSize: 'clamp(3.5rem,10vw,9rem)' }, animation !== 'typewriter' ? as_(1) : {}]">{{ title }}</component>
79
+ <div v-if="image" :class="['mb-10 overflow-hidden aspect-video', cardRound, ac()]" :style="as_(2)">
80
80
  <img :src="image" class="w-full h-full object-cover" />
81
81
  </div>
82
- <div class="flex flex-col md:flex-row items-start md:items-end justify-between gap-6 border-t pt-8" :style="{ borderColor: ca(textColor, '10') }">
82
+ <div :class="['flex flex-col md:flex-row items-start md:items-end justify-between gap-6 border-t pt-8', ac()]" :style="[{ borderColor: ca(textColor, '10') }, as_(3)]">
83
83
  <p :class="[bodyClass, 'leading-relaxed max-w-xs']" :style="{ opacity: 0.5 }">{{ subtitle }}</p>
84
84
  <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 shrink-0">{{ ctaText }}<span>→</span></NuxtLink>
85
85
  </div>
@@ -88,23 +88,14 @@
88
88
 
89
89
  <!-- PARALLAX -->
90
90
  <div v-else-if="layout === 'parallax'" class="relative min-h-[90vh] flex flex-col justify-end">
91
- <div
92
- class="absolute inset-0"
93
- :style="{
94
- backgroundImage: image ? `url(${image})` : undefined,
95
- backgroundSize: 'cover',
96
- backgroundPosition: 'center',
97
- backgroundAttachment: 'fixed',
98
- backgroundColor: !image ? ca(textColor, '08') : undefined,
99
- }"
100
- ></div>
91
+ <div class="absolute inset-0" :style="{ backgroundImage: image ? `url(${image})` : undefined, backgroundSize: 'cover', backgroundPosition: 'center', backgroundAttachment: 'fixed', backgroundColor: !image ? ca(textColor, '08') : undefined }"></div>
101
92
  <div class="absolute inset-0" :style="{ background: `linear-gradient(to top, ${bgColor} 20%, ${ca(bgColor, 'cc')} 45%, ${ca(bgColor, '22')} 70%, transparent 100%)` }"></div>
102
93
  <div :class="[containerClass, 'relative z-10 w-full px-6 md:px-12 pb-16']">
103
- <span v-if="badge" class="inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4">{{ badge }}</span>
104
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-6" :style="{ fontSize: 'clamp(3rem,8vw,7rem)' }">{{ title }}</component>
94
+ <span v-if="badge" :class="['inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4', ac()]" :style="as_(0)">{{ badge }}</span>
95
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.88] mb-6', ac()]" :style="[{ fontSize: 'clamp(3rem,8vw,7rem)' }, as_(badge ? 1 : 0)]">{{ title }}</component>
105
96
  <div class="flex flex-col sm:flex-row sm:items-center gap-6 sm:gap-10">
106
- <p :class="[bodyClass, 'leading-relaxed max-w-xs']" :style="{ opacity: 0.65 }">{{ subtitle }}</p>
107
- <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest border transition-all hover:gap-5 shrink-0" :style="{ borderColor: ca(textColor, '50'), color: textColor }">{{ ctaText }}<span>→</span></NuxtLink>
97
+ <p :class="[bodyClass, 'leading-relaxed max-w-xs', ac()]" :style="[{ opacity: 0.65 }, as_(badge ? 2 : 1)]">{{ subtitle }}</p>
98
+ <NuxtLink :to="ctaLink || '#'" :class="['inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest border transition-all hover:gap-5 shrink-0', ac()]" :style="[{ borderColor: ca(textColor, '50'), color: textColor }, as_(badge ? 3 : 2)]">{{ ctaText }}<span>→</span></NuxtLink>
108
99
  </div>
109
100
  </div>
110
101
  </div>
@@ -117,11 +108,11 @@
117
108
  <div class="absolute inset-0" :style="{ background: `linear-gradient(to top, ${bgColor} 15%, ${ca(bgColor, 'bb')} 40%, ${ca(bgColor, '33')} 65%, transparent 100%)` }"></div>
118
109
  </div>
119
110
  <div :class="[containerClass, 'relative z-10 w-full px-6 md:px-12 pb-14']">
120
- <span v-if="badge" class="inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4">{{ badge }}</span>
121
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88] mb-6" :style="{ fontSize: titleSize === 'sm' ? 'clamp(2.5rem,5vw,4rem)' : titleSize === 'lg' ? 'clamp(3.5rem,9vw,8rem)' : 'clamp(3rem,7vw,6rem)' }">{{ title }}</component>
111
+ <span v-if="badge" :class="['inline-block text-[9px] font-black uppercase tracking-[0.5em] opacity-40 mb-4', ac()]" :style="as_(0)">{{ badge }}</span>
112
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.88] mb-6', ac()]" :style="[{ fontSize: titleSize === 'sm' ? 'clamp(2.5rem,5vw,4rem)' : titleSize === 'lg' ? 'clamp(3.5rem,9vw,8rem)' : 'clamp(3rem,7vw,6rem)' }, as_(badge ? 1 : 0)]">{{ title }}</component>
122
113
  <div class="flex flex-col sm:flex-row sm:items-center gap-6 sm:gap-10">
123
- <p :class="[bodyClass, 'leading-relaxed max-w-sm']" :style="{ opacity: 0.65 }">{{ subtitle }}</p>
124
- <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-8 py-3.5 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95 shrink-0" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
114
+ <p :class="[bodyClass, 'leading-relaxed max-w-sm', ac()]" :style="[{ opacity: 0.65 }, as_(badge ? 2 : 1)]">{{ subtitle }}</p>
115
+ <NuxtLink :to="ctaLink || '#'" :class="['inline-flex items-center gap-2.5 px-8 py-3.5 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95 shrink-0', ac()]" :style="[{ backgroundColor: textColor, color: bgColor }, as_(badge ? 3 : 2)]">{{ ctaText }}<span>→</span></NuxtLink>
125
116
  </div>
126
117
  </div>
127
118
  </div>
@@ -129,8 +120,7 @@
129
120
  <!-- MAGAZINE -->
130
121
  <div v-else-if="layout === 'magazine'" class="p-3 md:p-4">
131
122
  <div :class="[containerClass, 'grid grid-cols-12 gap-3 md:gap-4']" style="min-height:520px">
132
- <!-- Big image (left) -->
133
- <div :class="['col-span-12 md:col-span-7 relative overflow-hidden min-h-[360px] md:min-h-0', cardRound]">
123
+ <div :class="['col-span-12 md:col-span-7 relative overflow-hidden min-h-[360px] md:min-h-0', cardRound, ac()]" :style="as_(0)">
134
124
  <img v-if="image" :src="image" class="absolute inset-0 w-full h-full object-cover" />
135
125
  <div v-else class="absolute inset-0" :style="{ backgroundColor: ca(textColor, '10') }"></div>
136
126
  <div class="absolute inset-0 flex flex-col justify-end p-8 md:p-10" :style="{ background: `linear-gradient(to top, ${bgColor}ee 15%, ${ca(bgColor, '88')} 45%, transparent 85%)` }">
@@ -138,8 +128,7 @@
138
128
  <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.88]" :style="{ fontSize: 'clamp(2rem,4vw,3.5rem)' }">{{ title }}</component>
139
129
  </div>
140
130
  </div>
141
- <!-- Content column (right) -->
142
- <div :class="['col-span-12 md:col-span-5 border flex flex-col justify-between p-8 md:p-10 min-h-[260px]', cardRound]" :style="{ borderColor: ca(textColor, '10'), backgroundColor: ca(textColor, '03') }">
131
+ <div :class="['col-span-12 md:col-span-5 border flex flex-col justify-between p-8 md:p-10 min-h-[260px]', cardRound, ac()]" :style="[{ borderColor: ca(textColor, '10'), backgroundColor: ca(textColor, '03') }, as_(1)]">
143
132
  <p :class="[bodyClass, 'leading-relaxed']" :style="{ opacity: 0.55 }">{{ subtitle }}</p>
144
133
  <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 active:scale-95 self-start mt-8" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
145
134
  </div>
@@ -149,17 +138,17 @@
149
138
  <!-- EDITORIAL -->
150
139
  <div v-else class="px-6 md:px-12 py-14">
151
140
  <div :class="[containerClass]">
152
- <div class="flex items-center gap-4 mb-8">
141
+ <div :class="['flex items-center gap-4 mb-8', ac()]" :style="as_(0)">
153
142
  <div class="w-8 h-px" :style="{ backgroundColor: ca(textColor, '30') }"></div>
154
143
  <span class="text-[9px] font-black uppercase tracking-[0.5em] opacity-30">{{ badge || '—' }}</span>
155
144
  </div>
156
145
  <div class="flex flex-col md:flex-row md:items-end gap-8 mb-8">
157
- <component :is="titleTag" class="font-black uppercase tracking-tighter leading-[0.85] flex-1" :style="{ fontSize: 'clamp(3rem,9vw,9rem)' }">{{ title }}</component>
158
- <div v-if="image" :class="['md:w-56 md:shrink-0 aspect-[3/4] overflow-hidden', cardRound]">
146
+ <component :is="titleTag" :class="['font-black uppercase tracking-tighter leading-[0.85] flex-1', animation === 'typewriter' ? 'hs-typewriter' : ac()]" :style="[{ fontSize: 'clamp(3rem,9vw,9rem)' }, animation !== 'typewriter' ? as_(1) : {}]">{{ title }}</component>
147
+ <div v-if="image" :class="['md:w-56 md:shrink-0 aspect-[3/4] overflow-hidden', cardRound, animation === 'float' ? 'hs-float' : ac()]" :style="animation === 'float' ? {} : as_(2)">
159
148
  <img :src="image" class="w-full h-full object-cover" />
160
149
  </div>
161
150
  </div>
162
- <div class="flex flex-col md:flex-row items-start md:items-center justify-between gap-6 border-t pt-8" :style="{ borderColor: ca(textColor, '10') }">
151
+ <div :class="['flex flex-col md:flex-row items-start md:items-center justify-between gap-6 border-t pt-8', ac()]" :style="[{ borderColor: ca(textColor, '10') }, as_(3)]">
163
152
  <p :class="[bodyClass, 'leading-relaxed max-w-sm']" :style="{ opacity: 0.5 }">{{ subtitle }}</p>
164
153
  <NuxtLink :to="ctaLink || '#'" class="inline-flex items-center gap-2.5 px-7 py-3 rounded-full text-[11px] font-black uppercase tracking-widest transition-all hover:gap-5 shrink-0 active:scale-95" :style="{ backgroundColor: textColor, color: bgColor }">{{ ctaText }}<span>→</span></NuxtLink>
165
154
  </div>
@@ -171,10 +160,10 @@
171
160
 
172
161
  <script setup>
173
162
  const ca = (c, h) => {
174
- const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
175
- return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
163
+ const m = c?.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
164
+ return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : (c || "") + h;
176
165
  };
177
- import { computed } from "vue";
166
+ import { ref, computed, onMounted } from "vue";
178
167
  const props = defineProps({
179
168
  layout: { type: String, default: "centered" },
180
169
  animation: { type: String, default: "fadeUp" },
@@ -201,6 +190,33 @@ const props = defineProps({
201
190
  marginTop: { type: String, default: "" },
202
191
  marginBottom: { type: String, default: "" }
203
192
  });
193
+ const sectionEl = ref(null);
194
+ const isVisible = ref(false);
195
+ onMounted(() => {
196
+ if (!sectionEl.value) return;
197
+ const obs = new IntersectionObserver(
198
+ ([e]) => {
199
+ if (e.isIntersecting) {
200
+ isVisible.value = true;
201
+ obs.disconnect();
202
+ }
203
+ },
204
+ { threshold: 0.05 }
205
+ );
206
+ obs.observe(sectionEl.value);
207
+ setTimeout(() => {
208
+ if (!isVisible.value) isVisible.value = true;
209
+ }, 400);
210
+ });
211
+ const ac = () => {
212
+ if (!isVisible.value || props.animation === "none" || props.animation === "typewriter") return "";
213
+ if (props.animation === "float") return "hs-fadeUp";
214
+ return `hs-${props.animation}`;
215
+ };
216
+ const as_ = (n) => {
217
+ if (!isVisible.value || props.animation === "none" || props.animation === "typewriter" || props.animation === "float") return {};
218
+ return { animationDelay: `${n * 0.1}s`, animationFillMode: "both" };
219
+ };
204
220
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
205
221
  const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
206
222
  const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
@@ -214,3 +230,7 @@ const spacingStyle = computed(() => {
214
230
  return s;
215
231
  });
216
232
  </script>
233
+
234
+ <style scoped>
235
+ @keyframes hsFadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.hs-fadeUp{animation:hsFadeUp .65s cubic-bezier(.16,1,.3,1) both}@keyframes hsBlur{0%{filter:blur(20px);opacity:0;transform:scale(1.03)}to{filter:blur(0);opacity:1;transform:scale(1)}}.hs-blur{animation:hsBlur .9s cubic-bezier(.16,1,.3,1) both}@keyframes hsReveal{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}.hs-reveal{animation:hsReveal .9s cubic-bezier(.77,0,.175,1) both}@keyframes hsSlideLeft{0%{opacity:0;transform:translateX(-28px)}to{opacity:1;transform:translateX(0)}}.hs-slideLeft{animation:hsSlideLeft .65s cubic-bezier(.16,1,.3,1) both}@keyframes hsTypewriter{0%{width:0}to{width:100%}}.hs-typewriter{animation:hsTypewriter 1.6s steps(30) forwards;display:block;overflow:hidden;white-space:nowrap}@keyframes hsFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-12px)}}.hs-float{animation:hsFloat 5s ease-in-out infinite}
236
+ </style>
@@ -226,6 +226,69 @@ export const DEFAULT_SECTIONS = {
226
226
  marginBottom: { type: "select", label: "Margin Bottom", options: marginOptions }
227
227
  }
228
228
  },
229
+ HeroFan: {
230
+ label: "Hero Fan",
231
+ icon: "hero",
232
+ defaultProps: {
233
+ titleTag: "h1",
234
+ title: i18n0("The Headline"),
235
+ titleLine2Prefix: i18n0(""),
236
+ titleHighlight: i18n0("Highlighted"),
237
+ highlightColor: "rgba(var(--primary-color), 1)",
238
+ description: i18n0("A compelling subtitle that explains your value proposition clearly."),
239
+ socialProof: i18n0(""),
240
+ primaryCtaText: i18n0("Get Started"),
241
+ primaryCtaLink: "/",
242
+ secondaryCtaText: i18n0(""),
243
+ secondaryCtaLink: "/",
244
+ images: [],
245
+ variant: "standard",
246
+ animation: "subtle",
247
+ bgColor: "rgba(var(--body-bg), 1)",
248
+ textColor: "rgba(var(--text-color), 1)",
249
+ contentWidth: "normal",
250
+ textSize: "md",
251
+ textDirection: "ltr",
252
+ paddingTop: "",
253
+ paddingBottom: "",
254
+ marginTop: "",
255
+ marginBottom: ""
256
+ },
257
+ fields: {
258
+ titleTag: { type: "select", label: "SEO Tag", options: tagOptions },
259
+ title: { type: "text", label: "Title", i18n: true },
260
+ titleLine2Prefix: { type: "text", label: "Line 2 Prefix", i18n: true },
261
+ titleHighlight: { type: "text", label: "Highlight Text", i18n: true },
262
+ highlightColor: { type: "color", label: "Highlight Color" },
263
+ description: { type: "textarea", label: "Description", i18n: true },
264
+ socialProof: { type: "text", label: "Social Proof", i18n: true },
265
+ primaryCtaText: { type: "text", label: "Primary CTA", i18n: true },
266
+ primaryCtaLink: { type: "text", label: "Primary CTA URL" },
267
+ secondaryCtaText: { type: "text", label: "Secondary CTA", i18n: true },
268
+ secondaryCtaLink: { type: "text", label: "Secondary CTA URL" },
269
+ images: { type: "list", label: "Fan Images (max 3)", itemFields: {
270
+ url: { type: "image", label: "Image" },
271
+ alt: { type: "text", label: "Alt text", i18n: true }
272
+ } },
273
+ variant: { type: "cards", label: "Variant", options: [
274
+ { value: "standard", label: "Standard", icon: "\u25A3" },
275
+ { value: "compact", label: "Compact", icon: "\u25AC" }
276
+ ] },
277
+ animation: { type: "cards", label: "Animation", options: [
278
+ { value: "subtle", label: "Subtle", icon: "\u2191" },
279
+ { value: "none", label: "None", icon: "\u2715" }
280
+ ] },
281
+ bgColor: { type: "color", label: "Background" },
282
+ textColor: { type: "color", label: "Text Color" },
283
+ contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
284
+ textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
285
+ textDirection: { type: "cards", label: "Direction", options: directionOptions },
286
+ paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
287
+ paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
288
+ marginTop: { type: "select", label: "Margin Top", options: marginOptions },
289
+ marginBottom: { type: "select", label: "Margin Bottom", options: marginOptions }
290
+ }
291
+ },
229
292
  TextVisual: {
230
293
  label: "Text & Image",
231
294
  icon: "image",
@@ -80,7 +80,7 @@ const showAddModal = ref(false);
80
80
  const sectionSearch = ref("");
81
81
  const selectedFieldGroup = ref("contenu");
82
82
  const SECTION_GROUPS = [
83
- { label: "Hero", icon: "hero", types: ["HeroSection", "HeroSlider", "BlogHero"] },
83
+ { label: "Hero", icon: "hero", types: ["HeroSection", "HeroSlider", "HeroFan", "BlogHero"] },
84
84
  { label: "Content", icon: "text", types: ["TextVisual", "RichText", "Quote"] },
85
85
  { label: "Showcase", icon: "grid", types: ["Features", "ServiceGrid", "Process", "Testimonials"] },
86
86
  { label: "Pricing & Info", icon: "pricing", types: ["Pricing", "FAQ"] },
@@ -105,6 +105,86 @@ const SVG_ICONS = {
105
105
  settings: `<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>`
106
106
  };
107
107
  const sectionIcon = (key) => SVG_ICONS[key] || SVG_ICONS.settings;
108
+ const selectedGroup = ref(SECTION_GROUPS[0]?.label ?? "Hero");
109
+ const THUMBS = {
110
+ // ── Hero variants ──
111
+ "HeroSection:centered": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="60" y="38" width="160" height="12" rx="3" fill="#1a1a2e"/><rect x="80" y="56" width="120" height="7" rx="2" fill="#c0c4cc"/><rect x="90" y="70" width="100" height="6" rx="2" fill="#c0c4cc"/><rect x="100" y="88" width="36" height="14" rx="7" fill="#3d35ff"/><rect x="144" y="88" width="36" height="14" rx="7" fill="none" stroke="#3d35ff" stroke-width="1.5"/></svg>`,
112
+ "HeroSection:split": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="16" y="30" width="110" height="9" rx="2" fill="#1a1a2e"/><rect x="16" y="46" width="90" height="6" rx="2" fill="#c0c4cc"/><rect x="16" y="58" width="80" height="6" rx="2" fill="#c0c4cc"/><rect x="16" y="74" width="30" height="12" rx="6" fill="#3d35ff"/><rect x="152" y="20" width="112" height="118" rx="8" fill="#e0e4ef"/><rect x="175" y="55" width="66" height="42" rx="4" fill="#c0c4cc"/></svg>`,
113
+ "HeroSection:bento": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="12" y="12" width="160" height="90" rx="6" fill="#e0e4ef"/><rect x="30" y="30" width="100" height="10" rx="3" fill="#1a1a2e"/><rect x="30" y="47" width="80" height="6" rx="2" fill="#c0c4cc"/><rect x="30" y="60" width="35" height="12" rx="6" fill="#3d35ff"/><rect x="180" y="12" width="88" height="42" rx="6" fill="#3d35ff" opacity=".15"/><rect x="180" y="60" width="88" height="42" rx="6" fill="#e0e4ef"/><rect x="12" y="110" width="256" height="36" rx="6" fill="#e0e4ef"/></svg>`,
114
+ "HeroSection:fullscreen": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#1a1a2e"/><rect x="16" y="40" width="248" height="18" rx="3" fill="#ffffff" opacity=".9"/><rect x="16" y="64" width="200" height="16" rx="3" fill="#ffffff" opacity=".9"/><rect x="16" y="96" width="100" height="6" rx="2" fill="#ffffff" opacity=".4"/><rect x="16" y="108" width="120" height="6" rx="2" fill="#ffffff" opacity=".4"/><rect x="16" y="130" width="36" height="14" rx="7" fill="#3d35ff"/></svg>`,
115
+ "HeroSection:minimal": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="80" y="52" width="120" height="10" rx="2" fill="#1a1a2e"/><rect x="90" y="68" width="100" height="6" rx="2" fill="#c0c4cc"/><rect x="95" y="80" width="90" height="6" rx="2" fill="#c0c4cc"/><rect x="110" y="98" width="60" height="14" rx="7" fill="none" stroke="#1a1a2e" stroke-width="1.5"/></svg>`,
116
+ "HeroSection:editorial": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="12" y="20" width="180" height="22" rx="3" fill="#1a1a2e"/><rect x="12" y="48" width="220" height="16" rx="3" fill="#1a1a2e" opacity=".7"/><rect x="12" y="76" width="120" height="5" rx="2" fill="#c0c4cc"/><rect x="12" y="86" width="100" height="5" rx="2" fill="#c0c4cc"/><rect x="12" y="104" width="36" height="14" rx="7" fill="#3d35ff"/><rect x="200" y="60" width="68" height="86" rx="4" fill="#e0e4ef"/></svg>`,
117
+ "HeroSection:parallax": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#2d3748"/><rect x="0" y="0" width="280" height="158" fill="url(#pg)" opacity=".5"/><defs><linearGradient id="pg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#1a1a2e" stop-opacity=".3"/><stop offset="1" stop-color="#1a1a2e" stop-opacity=".8"/></linearGradient></defs><rect x="60" y="40" width="160" height="12" rx="3" fill="#ffffff" opacity=".9"/><rect x="80" y="58" width="120" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="100" y="76" width="80" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="100" y="96" width="36" height="14" rx="7" fill="#3d35ff"/><rect x="2" y="2" width="276" height="154" rx="4" fill="none" stroke="#ffffff" stroke-width="1" stroke-dasharray="4 4" opacity=".2"/></svg>`,
118
+ "HeroSection:video": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#1a1a2e"/><circle cx="240" cy="20" r="12" fill="#3d35ff" opacity=".6"/><polygon points="236,14 236,26 248,20" fill="#ffffff"/><rect x="60" y="40" width="160" height="12" rx="3" fill="#ffffff" opacity=".9"/><rect x="80" y="58" width="120" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="100" y="76" width="80" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="100" y="96" width="36" height="14" rx="7" fill="#3d35ff"/></svg>`,
119
+ "HeroSection:magazine": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="12" y="12" width="164" height="134" rx="6" fill="#e0e4ef"/><rect x="24" y="96" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="24" y="110" width="90" height="5" rx="2" fill="#c0c4cc"/><rect x="24" y="121" width="36" height="12" rx="6" fill="#3d35ff"/><rect x="184" y="12" width="84" height="64" rx="6" fill="#3d35ff" opacity=".15"/><rect x="184" y="82" width="84" height="64" rx="6" fill="#e0e4ef"/></svg>`,
120
+ // ── Other Hero types ──
121
+ "HeroSlider": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#1a1a2e"/><rect x="0" y="0" width="280" height="158" fill="url(#sg)"/><defs><linearGradient id="sg" x1="0" y1="1" x2="0" y2="0"><stop offset="0" stop-color="#1a1a2e"/><stop offset="1" stop-color="#2d3748"/></linearGradient></defs><rect x="16" y="90" width="160" height="14" rx="3" fill="#ffffff" opacity=".9"/><rect x="16" y="110" width="120" height="7" rx="2" fill="#ffffff" opacity=".4"/><rect x="16" y="124" width="30" height="10" rx="5" fill="#3d35ff"/><circle cx="120" cy="148" r="4" fill="#ffffff"/><circle cx="132" cy="148" r="3" fill="#ffffff" opacity=".4"/><circle cx="142" cy="148" r="3" fill="#ffffff" opacity=".4"/><rect x="6" y="69" width="16" height="16" rx="8" fill="none" stroke="#ffffff" stroke-width="1.5" opacity=".5"/><text x="10" y="81" fill="#ffffff" font-size="9" opacity=".5">\u2190</text><rect x="258" y="69" width="16" height="16" rx="8" fill="none" stroke="#ffffff" stroke-width="1.5" opacity=".5"/><text x="262" y="81" fill="#ffffff" font-size="9" opacity=".5">\u2192</text></svg>`,
122
+ "HeroFan": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="70" y="16" width="140" height="10" rx="2" fill="#1a1a2e"/><rect x="90" y="32" width="100" height="6" rx="2" fill="#c0c4cc"/><rect x="100" y="44" width="80" height="6" rx="2" fill="#c0c4cc"/><rect x="105" y="58" width="28" height="10" rx="5" fill="#3d35ff"/><rect x="139" y="58" width="28" height="10" rx="5" fill="none" stroke="#3d35ff" stroke-width="1.5"/><g transform="translate(140,110)"><rect x="-60" y="-35" width="48" height="60" rx="4" fill="#e0e4ef" transform="rotate(-6)"/><rect x="-24" y="-42" width="52" height="66" rx="4" fill="#d0d4df" transform="rotate(0) translate(0,-4)"/><rect x="12" y="-35" width="48" height="60" rx="4" fill="#e0e4ef" transform="rotate(6)"/></g></svg>`,
123
+ "BlogHero": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="16" y="16" width="248" height="90" rx="6" fill="#e0e4ef"/><rect x="16" y="114" width="60" height="6" rx="2" fill="#3d35ff"/><rect x="16" y="126" width="180" height="10" rx="2" fill="#1a1a2e"/><rect x="16" y="142" width="120" height="6" rx="2" fill="#c0c4cc"/></svg>`,
124
+ // ── TextVisual layouts ──
125
+ "TextVisual:split": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="16" y="30" width="110" height="8" rx="2" fill="#1a1a2e"/><rect x="16" y="44" width="95" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="54" width="85" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="64" width="90" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="82" width="28" height="10" rx="5" fill="#3d35ff"/><rect x="148" y="20" width="116" height="118" rx="8" fill="#e0e4ef"/></svg>`,
126
+ "TextVisual:stacked": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="16" y="16" width="248" height="62" rx="6" fill="#e0e4ef"/><rect x="16" y="88" width="130" height="8" rx="2" fill="#1a1a2e"/><rect x="16" y="102" width="110" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="112" width="100" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="130" width="30" height="10" rx="5" fill="#3d35ff"/></svg>`,
127
+ "TextVisual:wide": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="16" y="16" width="248" height="76" rx="6" fill="#e0e4ef"/><rect x="30" y="104" width="140" height="9" rx="2" fill="#1a1a2e"/><rect x="30" y="119" width="110" height="5" rx="2" fill="#c0c4cc"/><rect x="30" y="129" width="95" height="5" rx="2" fill="#c0c4cc"/></svg>`,
128
+ // ── Content ──
129
+ "RichText": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="40" y="24" width="200" height="10" rx="2" fill="#1a1a2e"/><rect x="40" y="42" width="200" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="52" width="185" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="62" width="190" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="78" width="200" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="88" width="160" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="98" width="175" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="114" width="200" height="5" rx="2" fill="#c0c4cc"/><rect x="40" y="124" width="140" height="5" rx="2" fill="#c0c4cc"/></svg>`,
130
+ "Quote": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><text x="30" y="70" font-size="60" fill="#3d35ff" opacity=".15" font-family="serif">"</text><rect x="50" y="50" width="180" height="8" rx="2" fill="#1a1a2e"/><rect x="60" y="65" width="160" height="6" rx="2" fill="#c0c4cc"/><rect x="70" y="76" width="140" height="6" rx="2" fill="#c0c4cc"/><rect x="90" y="100" width="80" height="5" rx="2" fill="#3d35ff" opacity=".6"/><rect x="108" y="112" width="64" height="4" rx="2" fill="#c0c4cc"/></svg>`,
131
+ // ── Showcase ──
132
+ "Features": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="80" y="16" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="90" y="30" width="100" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="54" width="74" height="74" rx="8" fill="#f0f1ff"/><rect x="30" y="68" width="46" height="6" rx="2" fill="#3d35ff"/><rect x="30" y="80" width="36" height="4" rx="2" fill="#c0c4cc"/><rect x="30" y="88" width="40" height="4" rx="2" fill="#c0c4cc"/><rect x="103" y="54" width="74" height="74" rx="8" fill="#f0f1ff"/><rect x="117" y="68" width="46" height="6" rx="2" fill="#3d35ff"/><rect x="117" y="80" width="36" height="4" rx="2" fill="#c0c4cc"/><rect x="117" y="88" width="40" height="4" rx="2" fill="#c0c4cc"/><rect x="190" y="54" width="74" height="74" rx="8" fill="#f0f1ff"/><rect x="204" y="68" width="46" height="6" rx="2" fill="#3d35ff"/><rect x="204" y="80" width="36" height="4" rx="2" fill="#c0c4cc"/><rect x="204" y="88" width="40" height="4" rx="2" fill="#c0c4cc"/></svg>`,
133
+ "ServiceGrid:grid": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="16" y="60" width="116" height="80" rx="6" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="28" y="74" width="60" height="6" rx="2" fill="#1a1a2e"/><rect x="28" y="86" width="80" height="4" rx="2" fill="#c0c4cc"/><rect x="28" y="94" width="70" height="4" rx="2" fill="#c0c4cc"/><rect x="148" y="60" width="116" height="80" rx="6" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="160" y="74" width="60" height="6" rx="2" fill="#1a1a2e"/><rect x="160" y="86" width="80" height="4" rx="2" fill="#c0c4cc"/><rect x="160" y="94" width="70" height="4" rx="2" fill="#c0c4cc"/><rect x="80" y="16" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="90" y="30" width="100" height="4" rx="2" fill="#c0c4cc"/></svg>`,
134
+ "ServiceGrid:list": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="80" y="16" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="16" y="46" width="248" height="26" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="55" width="80" height="6" rx="2" fill="#1a1a2e"/><rect x="26" y="63" width="60" height="4" rx="2" fill="#c0c4cc"/><rect x="16" y="78" width="248" height="26" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="87" width="80" height="6" rx="2" fill="#1a1a2e"/><rect x="26" y="95" width="60" height="4" rx="2" fill="#c0c4cc"/><rect x="16" y="110" width="248" height="26" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="119" width="80" height="6" rx="2" fill="#1a1a2e"/><rect x="26" y="127" width="60" height="4" rx="2" fill="#c0c4cc"/></svg>`,
135
+ "ServiceGrid:cards": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="80" y="14" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="14" y="38" width="78" height="102" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="22" y="48" width="30" height="30" rx="6" fill="#e0e4ef"/><rect x="22" y="86" width="52" height="6" rx="2" fill="#1a1a2e"/><rect x="22" y="98" width="40" height="4" rx="2" fill="#c0c4cc"/><rect x="101" y="38" width="78" height="102" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="109" y="48" width="30" height="30" rx="6" fill="#e0e4ef"/><rect x="109" y="86" width="52" height="6" rx="2" fill="#1a1a2e"/><rect x="109" y="98" width="40" height="4" rx="2" fill="#c0c4cc"/><rect x="188" y="38" width="78" height="102" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="196" y="48" width="30" height="30" rx="6" fill="#e0e4ef"/><rect x="196" y="86" width="52" height="6" rx="2" fill="#1a1a2e"/><rect x="196" y="98" width="40" height="4" rx="2" fill="#c0c4cc"/></svg>`,
136
+ "ServiceGrid:minimal": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="16" y="38" width="248" height="1" fill="#e5e7eb"/><rect x="16" y="54" width="80" height="6" rx="2" fill="#1a1a2e"/><rect x="16" y="65" width="140" height="4" rx="2" fill="#c0c4cc"/><rect x="16" y="80" width="248" height="1" fill="#e5e7eb"/><rect x="16" y="96" width="80" height="6" rx="2" fill="#1a1a2e"/><rect x="16" y="107" width="140" height="4" rx="2" fill="#c0c4cc"/><rect x="16" y="122" width="248" height="1" fill="#e5e7eb"/><rect x="16" y="138" width="80" height="6" rx="2" fill="#1a1a2e"/></svg>`,
137
+ "Process": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="80" y="14" width="120" height="8" rx="2" fill="#1a1a2e"/><circle cx="38" cy="90" r="14" fill="#3d35ff"/><text x="33" y="95" font-size="11" fill="#ffffff" font-weight="bold">1</text><rect x="58" y="84" width="60" height="6" rx="2" fill="#1a1a2e"/><rect x="58" y="95" width="48" height="4" rx="2" fill="#c0c4cc"/><rect x="58" y="103" width="52" height="4" rx="2" fill="#c0c4cc"/><circle cx="148" cy="90" r="14" fill="#3d35ff" opacity=".5"/><text x="143" y="95" font-size="11" fill="#ffffff" font-weight="bold">2</text><rect x="168" y="84" width="60" height="6" rx="2" fill="#1a1a2e"/><rect x="168" y="95" width="48" height="4" rx="2" fill="#c0c4cc"/><rect x="168" y="103" width="52" height="4" rx="2" fill="#c0c4cc"/><line x1="52" y1="90" x2="134" y2="90" stroke="#3d35ff" stroke-width="1.5" stroke-dasharray="4 3" opacity=".4"/></svg>`,
138
+ "Testimonials": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="80" y="14" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="14" y="40" width="120" height="100" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="24" y="52" width="80" height="5" rx="2" fill="#c0c4cc"/><rect x="24" y="62" width="90" height="5" rx="2" fill="#c0c4cc"/><rect x="24" y="72" width="70" height="5" rx="2" fill="#c0c4cc"/><circle cx="34" cy="116" r="10" fill="#e0e4ef"/><rect x="50" y="112" width="50" height="5" rx="2" fill="#1a1a2e"/><rect x="50" y="121" width="35" height="4" rx="2" fill="#c0c4cc"/><rect x="146" y="40" width="120" height="100" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="156" y="52" width="80" height="5" rx="2" fill="#c0c4cc"/><rect x="156" y="62" width="90" height="5" rx="2" fill="#c0c4cc"/><rect x="156" y="72" width="70" height="5" rx="2" fill="#c0c4cc"/><circle cx="166" cy="116" r="10" fill="#e0e4ef"/><rect x="182" y="112" width="50" height="5" rx="2" fill="#1a1a2e"/><rect x="182" y="121" width="35" height="4" rx="2" fill="#c0c4cc"/></svg>`,
139
+ // ── Pricing & Info ──
140
+ "Pricing": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="80" y="12" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="14" y="34" width="78" height="108" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="24" y="46" width="50" height="6" rx="2" fill="#1a1a2e"/><rect x="24" y="58" width="40" height="10" rx="2" fill="#c0c4cc"/><rect x="24" y="76" width="55" height="4" rx="2" fill="#c0c4cc"/><rect x="24" y="85" width="45" height="4" rx="2" fill="#c0c4cc"/><rect x="24" y="94" width="50" height="4" rx="2" fill="#c0c4cc"/><rect x="24" y="128" width="56" height="10" rx="5" fill="none" stroke="#c0c4cc" stroke-width="1.5"/><rect x="101" y="26" width="78" height="116" rx="8" fill="#3d35ff"/><rect x="111" y="38" width="50" height="6" rx="2" fill="#ffffff" opacity=".9"/><rect x="111" y="50" width="40" height="12" rx="2" fill="#ffffff" opacity=".9"/><rect x="111" y="70" width="55" height="4" rx="2" fill="#ffffff" opacity=".6"/><rect x="111" y="79" width="45" height="4" rx="2" fill="#ffffff" opacity=".6"/><rect x="111" y="88" width="50" height="4" rx="2" fill="#ffffff" opacity=".6"/><rect x="111" y="128" width="56" height="10" rx="5" fill="#ffffff"/><rect x="188" y="34" width="78" height="108" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="198" y="46" width="50" height="6" rx="2" fill="#1a1a2e"/><rect x="198" y="58" width="40" height="10" rx="2" fill="#c0c4cc"/><rect x="198" y="76" width="55" height="4" rx="2" fill="#c0c4cc"/><rect x="198" y="85" width="45" height="4" rx="2" fill="#c0c4cc"/><rect x="198" y="94" width="50" height="4" rx="2" fill="#c0c4cc"/><rect x="198" y="128" width="56" height="10" rx="5" fill="none" stroke="#c0c4cc" stroke-width="1.5"/></svg>`,
141
+ "FAQ": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="80" y="14" width="120" height="8" rx="2" fill="#1a1a2e"/><rect x="16" y="38" width="248" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="46" width="100" height="6" rx="2" fill="#1a1a2e"/><text x="248" y="53" font-size="12" fill="#c0c4cc">+</text><rect x="16" y="68" width="248" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="76" width="120" height="6" rx="2" fill="#1a1a2e"/><text x="248" y="83" font-size="12" fill="#c0c4cc">+</text><rect x="16" y="98" width="248" height="24" rx="6" fill="#f0f1ff" stroke="#3d35ff" stroke-width="1.5"/><rect x="26" y="106" width="140" height="6" rx="2" fill="#3d35ff"/><text x="248" y="113" font-size="12" fill="#3d35ff">\u2212</text><rect x="16" y="128" width="248" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1"/><rect x="26" y="136" width="90" height="6" rx="2" fill="#1a1a2e"/></svg>`,
142
+ // ── Conversion ──
143
+ "CallToAction": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#3d35ff"/><rect x="40" y="44" width="200" height="14" rx="3" fill="#ffffff" opacity=".95"/><rect x="60" y="64" width="160" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="80" y="78" width="120" height="7" rx="2" fill="#ffffff" opacity=".5"/><rect x="90" y="100" width="100" height="20" rx="10" fill="#ffffff"/><rect x="96" y="108" width="88" height="6" rx="2" fill="#3d35ff"/></svg>`,
144
+ "Newsletter": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="60" y="28" width="160" height="10" rx="2" fill="#1a1a2e"/><rect x="70" y="44" width="140" height="6" rx="2" fill="#c0c4cc"/><rect x="80" y="56" width="120" height="6" rx="2" fill="#c0c4cc"/><rect x="40" y="80" width="148" height="30" rx="8" fill="#ffffff" stroke="#e5e7eb" stroke-width="1.5"/><rect x="52" y="93" width="80" height="5" rx="2" fill="#c0c4cc"/><rect x="196" y="80" width="44" height="30" rx="8" fill="#3d35ff"/><rect x="202" y="93" width="32" height="5" rx="2" fill="#ffffff"/><rect x="100" y="126" width="80" height="4" rx="2" fill="#c0c4cc"/></svg>`,
145
+ "ContactForm": `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#ffffff"/><rect x="60" y="16" width="160" height="9" rx="2" fill="#1a1a2e"/><rect x="16" y="40" width="116" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1.5"/><rect x="26" y="50" width="60" height="5" rx="2" fill="#c0c4cc"/><rect x="148" y="40" width="116" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1.5"/><rect x="158" y="50" width="60" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="72" width="248" height="24" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1.5"/><rect x="26" y="82" width="80" height="5" rx="2" fill="#c0c4cc"/><rect x="16" y="104" width="248" height="32" rx="6" fill="#f8f9fa" stroke="#e5e7eb" stroke-width="1.5"/><rect x="26" y="113" width="100" height="5" rx="2" fill="#c0c4cc"/><rect x="26" y="123" width="80" height="5" rx="2" fill="#c0c4cc"/><rect x="90" y="144" width="100" height="10" rx="5" fill="#3d35ff"/></svg>`
146
+ };
147
+ const sectionThumbnail = (type, layoutKey) => {
148
+ const k = layoutKey ? `${type}:${layoutKey}` : type;
149
+ return THUMBS[k] ?? THUMBS[type] ?? `<svg viewBox="0 0 280 158" xmlns="http://www.w3.org/2000/svg"><rect width="280" height="158" fill="#f8f9fa"/><rect x="40" y="60" width="200" height="8" rx="2" fill="#c0c4cc"/><rect x="60" y="74" width="160" height="6" rx="2" fill="#e0e4ef"/></svg>`;
150
+ };
151
+ const modalVariants = computed(() => {
152
+ const q = sectionSearch.value.toLowerCase();
153
+ if (selectedGroup.value === "__saved__") {
154
+ return savedComponents.value.filter((c) => !q || c.name.toLowerCase().includes(q)).map((c) => ({ key: c.id, fullName: c.name, shortName: c.name, type: c.type, layoutKey: null, props: c.props, isSaved: true, savedId: c.id }));
155
+ }
156
+ const group = SECTION_GROUPS.find((g) => g.label === selectedGroup.value);
157
+ if (!group) return [];
158
+ const variants = [];
159
+ for (const type of group.types) {
160
+ const conf = CMS_COMPONENTS[type];
161
+ if (!conf) continue;
162
+ const layoutField = conf.fields?.layout;
163
+ if (layoutField?.options?.length) {
164
+ for (const opt of layoutField.options) {
165
+ const fullName = `${conf.label} \u2014 ${opt.label}`;
166
+ if (!q || fullName.toLowerCase().includes(q)) {
167
+ variants.push({ key: `${type}:${opt.value}`, fullName, shortName: opt.label, type, layoutKey: opt.value, props: { ...conf.defaultProps, layout: opt.value }, isSaved: false });
168
+ }
169
+ }
170
+ } else {
171
+ if (!q || conf.label.toLowerCase().includes(q)) {
172
+ variants.push({ key: type, fullName: conf.label, shortName: conf.label, type, layoutKey: null, props: conf.defaultProps, isSaved: false });
173
+ }
174
+ }
175
+ }
176
+ return variants;
177
+ });
178
+ const addVariant = (v) => {
179
+ if (v.isSaved) {
180
+ page.value.content.push({ type: v.type, props: JSON.parse(JSON.stringify(v.props)) });
181
+ } else {
182
+ page.value.content.push({ type: v.type, props: JSON.parse(JSON.stringify(adminSettings.applyPresets(v.type, v.props))) });
183
+ }
184
+ showAddModal.value = false;
185
+ sectionSearch.value = "";
186
+ selectedBlockIndex.value = page.value.content.length - 1;
187
+ };
108
188
  const rightPanelMode = ref("seo");
109
189
  const savedSnapshot = ref(JSON.stringify(page.value?.content ?? []));
110
190
  const readableVal = (v) => {
@@ -1128,105 +1208,71 @@ const savePage = async () => {
1128
1208
  </div>
1129
1209
 
1130
1210
  <!-- ── Add Section Modal ── -->
1131
- <div v-if="showAddModal" class="fixed inset-0 bg-black/80 backdrop-blur-md z-[100] flex items-end md:items-center justify-center" @click.self="showAddModal = false">
1132
- <div class="bg-white w-full md:max-w-3xl md:rounded-[28px] rounded-t-[28px] shadow-2xl flex flex-col max-h-[88vh]">
1211
+ <div v-if="showAddModal" class="fixed inset-0 bg-black/60 backdrop-blur-sm z-[100] flex items-center justify-center p-4" @click.self="showAddModal = false;
1212
+ sectionSearch = ''">
1213
+ <div class="bg-white w-full max-w-5xl rounded-2xl shadow-2xl flex overflow-hidden" style="height:min(85vh,720px)">
1133
1214
 
1134
- <!-- Header -->
1135
- <div class="flex items-center justify-between px-7 pt-6 pb-4 border-b border-gray-100 shrink-0">
1136
- <div>
1137
- <h2 class="text-sm font-black uppercase tracking-[0.2em] text-gray-900">Ajouter une section</h2>
1138
- <p class="text-[11px] text-gray-400 mt-0.5">{{ Object.keys(CMS_COMPONENTS).length }} sections disponibles<template v-if="savedComponents.length"> · <span class="text-purple-400">{{ savedComponents.length }} composant{{ savedComponents.length > 1 ? "s" : "" }} réutilisable{{ savedComponents.length > 1 ? "s" : "" }}</span></template></p>
1215
+ <!-- Left sidebar -->
1216
+ <div class="w-56 shrink-0 border-r border-gray-100 flex flex-col bg-gray-50/50">
1217
+ <div class="p-3 border-b border-gray-100">
1218
+ <input v-model="sectionSearch" type="text" placeholder="Search sections..." class="w-full text-xs bg-white rounded-lg px-3 py-2 outline-none border border-gray-100 focus:border-[#3d35ff] transition-colors" />
1139
1219
  </div>
1140
- <button @click="showAddModal = false;
1141
- sectionSearch = ''" class="w-8 h-8 flex items-center justify-center rounded-lg text-gray-300 hover:text-gray-600 hover:bg-gray-100 transition-all text-lg">✕</button>
1142
- </div>
1143
-
1144
- <!-- Search -->
1145
- <div class="px-7 py-3 border-b border-gray-50 shrink-0">
1146
- <input v-model="sectionSearch" type="text" placeholder="Rechercher une section..." class="w-full text-sm text-gray-900 placeholder-gray-300 outline-none bg-gray-50 rounded-xl px-4 py-2.5 focus:bg-gray-100 transition-colors" />
1147
- </div>
1148
-
1149
- <!-- Groups -->
1150
- <div class="overflow-y-auto px-7 py-5 space-y-7">
1151
- <template v-for="group in SECTION_GROUPS" :key="group.label">
1152
- <!-- Filter: only show group if at least one type matches search and exists in CMS_COMPONENTS -->
1153
- <div v-if="group.types.some((t) => CMS_COMPONENTS[t] && (!sectionSearch || CMS_COMPONENTS[t].label.toLowerCase().includes(sectionSearch.toLowerCase())))">
1154
- <div class="flex items-center gap-2 mb-3">
1155
- <span class="text-gray-400" v-html="sectionIcon(group.icon)"></span>
1156
- <span class="text-[10px] font-black uppercase tracking-[0.2em] text-gray-400">{{ group.label }}</span>
1157
- <div class="flex-1 h-px bg-gray-100 ml-1"></div>
1158
- </div>
1159
- <div class="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 gap-2.5">
1160
- <template v-for="type in group.types" :key="type">
1161
- <button
1162
- v-if="CMS_COMPONENTS[type] && (!sectionSearch || CMS_COMPONENTS[type].label.toLowerCase().includes(sectionSearch.toLowerCase()))"
1163
- @click="page.content.push({ type, props: JSON.parse(JSON.stringify(adminSettings.applyPresets(type, CMS_COMPONENTS[type].defaultProps))) });
1164
- showAddModal = false;
1165
- sectionSearch = '';
1166
- selectedBlockIndex = page.content.length - 1"
1167
- class="flex flex-col items-center gap-2.5 p-4 border-2 border-gray-100 rounded-2xl hover:border-[#3d35ff] hover:bg-[#3d35ff]/5 transition-all group active:scale-95 text-center">
1168
- <span class="text-gray-400 group-hover:text-[#3d35ff] group-hover:scale-110 transition-all duration-150 flex items-center justify-center" v-html="sectionIcon(CMS_COMPONENTS[type].icon)"></span>
1169
- <span class="text-[10px] font-black uppercase tracking-wide text-gray-700 group-hover:text-[#3d35ff] leading-tight">{{ CMS_COMPONENTS[type].label }}</span>
1170
- </button>
1171
- </template>
1220
+ <div class="flex-1 overflow-y-auto py-2 px-2 space-y-0.5">
1221
+ <button
1222
+ v-for="group in SECTION_GROUPS" :key="group.label"
1223
+ @click="selectedGroup = group.label;
1224
+ sectionSearch = ''"
1225
+ :class="['w-full flex items-center justify-between px-3 py-2 text-xs font-medium transition-all rounded-lg text-left', selectedGroup === group.label ? 'bg-[#3d35ff] text-white' : 'text-gray-600 hover:bg-gray-100']">
1226
+ <div class="flex items-center gap-2">
1227
+ <span :class="selectedGroup === group.label ? 'opacity-90' : 'opacity-50'" v-html="sectionIcon(group.icon)"></span>
1228
+ <span class="font-semibold">{{ group.label }}</span>
1172
1229
  </div>
1173
- </div>
1174
- </template>
1175
-
1176
- <!-- Any extra sections not in groups (custom/extraSections) -->
1177
- <div v-if="Object.keys(CMS_COMPONENTS).some((t) => !SECTION_GROUPS.flatMap((g) => g.types).includes(t) && (!sectionSearch || CMS_COMPONENTS[t].label.toLowerCase().includes(sectionSearch.toLowerCase())))">
1178
- <div class="flex items-center gap-2 mb-3">
1179
- <span class="text-gray-400" v-html="sectionIcon('settings')"></span>
1180
- <span class="text-[10px] font-black uppercase tracking-[0.2em] text-gray-400">Personnalisé</span>
1181
- <div class="flex-1 h-px bg-gray-100 ml-1"></div>
1182
- </div>
1183
- <div class="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 gap-2.5">
1184
- <template v-for="(conf, type) in CMS_COMPONENTS" :key="type">
1185
- <button
1186
- v-if="!SECTION_GROUPS.flatMap((g) => g.types).includes(type) && (!sectionSearch || conf.label.toLowerCase().includes(sectionSearch.toLowerCase()))"
1187
- @click="page.content.push({ type, props: JSON.parse(JSON.stringify(adminSettings.applyPresets(type, conf.defaultProps))) });
1188
- showAddModal = false;
1189
- sectionSearch = '';
1190
- selectedBlockIndex = page.content.length - 1"
1191
- class="flex flex-col items-center gap-2.5 p-4 border-2 border-gray-100 rounded-2xl hover:border-[#3d35ff] hover:bg-[#3d35ff]/5 transition-all group active:scale-95 text-center">
1192
- <span class="text-gray-400 group-hover:text-[#3d35ff] group-hover:scale-110 transition-all duration-150 flex items-center justify-center" v-html="sectionIcon(conf.icon)"></span>
1193
- <span class="text-[10px] font-black uppercase tracking-wide text-gray-700 group-hover:text-[#3d35ff] leading-tight">{{ conf.label }}</span>
1194
- </button>
1195
- </template>
1196
- </div>
1230
+ <span class="opacity-40 text-[10px] tabular-nums">{{ group.types.filter((t) => CMS_COMPONENTS[t]).length }}</span>
1231
+ </button>
1232
+ <button
1233
+ v-if="savedComponents.length"
1234
+ @click="selectedGroup = '__saved__';
1235
+ sectionSearch = ''"
1236
+ :class="['w-full flex items-center gap-2 px-3 py-2 text-xs font-semibold rounded-lg transition-all', selectedGroup === '__saved__' ? 'bg-purple-600 text-white' : 'text-purple-600 hover:bg-purple-50']">
1237
+ <span class="text-sm leading-none">★</span>
1238
+ <span>Saved</span>
1239
+ <span class="ml-auto opacity-50 text-[10px] tabular-nums">{{ savedComponents.length }}</span>
1240
+ </button>
1197
1241
  </div>
1242
+ </div>
1198
1243
 
1199
- <!-- Saved / Reusable Components -->
1200
- <div v-if="savedComponents.length && (!sectionSearch || savedComponents.some((c2) => c2.name.toLowerCase().includes(sectionSearch.toLowerCase())))">
1201
- <div class="flex items-center gap-2 mb-3">
1202
- <span class="text-purple-400 text-base leading-none">★</span>
1203
- <span class="text-[10px] font-black uppercase tracking-[0.2em] text-purple-400">Composants réutilisables</span>
1204
- <div class="flex-1 h-px bg-purple-100 ml-1"></div>
1205
- </div>
1206
- <div class="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 gap-2.5">
1207
- <template v-for="comp in savedComponents" :key="comp.id">
1208
- <div
1209
- v-if="!sectionSearch || comp.name.toLowerCase().includes(sectionSearch.toLowerCase())"
1210
- class="relative flex flex-col items-center gap-2.5 p-4 border-2 border-purple-100 rounded-2xl hover:border-purple-400 hover:bg-purple-50/50 transition-all group active:scale-95 text-center cursor-pointer"
1211
- @click="page.content.push({ type: comp.type, props: JSON.parse(JSON.stringify(comp.props)) });
1212
- showAddModal = false;
1213
- sectionSearch = '';
1214
- selectedBlockIndex = page.content.length - 1">
1215
- <span class="text-purple-300 group-hover:text-purple-500 transition-all text-base leading-none">★</span>
1216
- <span class="text-[10px] font-black uppercase tracking-wide text-gray-700 group-hover:text-purple-600 leading-tight">{{ comp.name }}</span>
1217
- <span class="text-[8px] text-gray-300 leading-none">{{ comp.type }}</span>
1244
+ <!-- Main panel -->
1245
+ <div class="flex-1 flex flex-col overflow-hidden">
1246
+ <div class="px-5 py-3.5 border-b border-gray-100 flex items-center justify-between shrink-0">
1247
+ <h2 class="text-[11px] font-black uppercase tracking-widest text-gray-700">
1248
+ {{ selectedGroup === "__saved__" ? "Saved Components" : selectedGroup }}
1249
+ </h2>
1250
+ <button @click="showAddModal = false;
1251
+ sectionSearch = ''" class="w-7 h-7 flex items-center justify-center rounded-lg text-gray-300 hover:text-gray-600 hover:bg-gray-100 text-sm transition-all">✕</button>
1252
+ </div>
1253
+ <div class="flex-1 overflow-y-auto p-4">
1254
+ <div class="grid grid-cols-3 gap-3">
1255
+ <button
1256
+ v-for="v in modalVariants" :key="v.key"
1257
+ @click="addVariant(v)"
1258
+ class="group text-left border border-gray-100 rounded-xl overflow-hidden hover:border-[#3d35ff] hover:shadow-md transition-all active:scale-95">
1259
+ <div class="bg-gray-50 relative overflow-hidden" style="aspect-ratio:16/9">
1260
+ <div class="absolute inset-0 flex items-center justify-center [&>svg]:w-full [&>svg]:h-full" v-html="sectionThumbnail(v.type, v.layoutKey)"></div>
1261
+ <!-- Saved delete button -->
1218
1262
  <button
1219
- @click.stop="deleteComponent(comp.id)"
1220
- title="Supprimer ce composant"
1221
- class="absolute top-1.5 right-1.5 w-4 h-4 flex items-center justify-center rounded-full bg-red-100 text-red-400 hover:bg-red-200 opacity-0 group-hover:opacity-100 transition-opacity text-[9px] font-black">✕</button>
1263
+ v-if="v.isSaved"
1264
+ @click.stop="deleteComponent(v.savedId)"
1265
+ class="absolute top-1.5 right-1.5 w-5 h-5 flex items-center justify-center rounded-full bg-red-100 text-red-400 hover:bg-red-200 opacity-0 group-hover:opacity-100 transition-opacity text-[9px] font-black">✕</button>
1222
1266
  </div>
1223
- </template>
1267
+ <div class="px-3 py-2 border-t border-gray-100">
1268
+ <p class="text-[10px] font-black uppercase tracking-wide text-gray-700 group-hover:text-[#3d35ff] leading-tight truncate transition-colors">{{ v.shortName }}</p>
1269
+ <p v-if="v.fullName !== v.shortName" class="text-[9px] text-gray-400 leading-tight truncate mt-0.5">{{ v.fullName }}</p>
1270
+ </div>
1271
+ </button>
1272
+ </div>
1273
+ <div v-if="modalVariants.length === 0" class="text-center py-16">
1274
+ <p class="text-sm text-gray-400">No sections found</p>
1224
1275
  </div>
1225
- </div>
1226
-
1227
- <!-- Empty search state -->
1228
- <div v-if="sectionSearch && !Object.values(CMS_COMPONENTS).some((c2) => c2.label.toLowerCase().includes(sectionSearch.toLowerCase())) && !savedComponents.some((c2) => c2.name.toLowerCase().includes(sectionSearch.toLowerCase()))" class="text-center py-10">
1229
- <p class="text-sm text-gray-400">Aucune section trouvée pour « {{ sectionSearch }} »</p>
1230
1276
  </div>
1231
1277
  </div>
1232
1278
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cinqcinqdev-seo",
3
- "version": "0.1.66",
3
+ "version": "0.1.68",
4
4
  "description": "A reusable Nuxt 3 admin CMS module with visual page editor powered by Supabase",
5
5
  "license": "MIT",
6
6
  "module": "./dist/module.mjs",