shopport 0.5.7 → 0.5.8
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/cli.js +1 -1
- package/dist/dashboard-ui/assets/index-DbEFJcBf.js +747 -0
- package/dist/dashboard-ui/assets/index-Dbcp2Eb1.css +1 -0
- package/dist/dashboard-ui/index.html +2 -2
- package/dist/skills/product-parse/SKILL.md +178 -73
- package/dist/skills/shopport/SKILL.md +1 -1
- package/dist/skills/sppt/SKILL.md +12 -7
- package/package.json +1 -1
- package/dist/dashboard-ui/assets/index--f3qOCFU.css +0 -1
- package/dist/dashboard-ui/assets/index-CEBCsPnn.js +0 -737
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 72 11% 95%;--foreground: 0 0% 7%;--card: 0 0% 100%;--card-foreground: 0 0% 7%;--popover: 0 0% 100%;--popover-foreground: 0 0% 7%;--border: 70 8% 86%;--muted: 70 8% 89%;--muted-foreground: 0 0% 7% / .55;--primary: 19 100% 49%;--primary-foreground: 0 0% 100%;--success: 142 71% 45%;--warning: 37 84% 55%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--radius: 8px}.dark{--background: 225 16% 13%;--foreground: 0 0% 100%;--card: 225 14% 15%;--card-foreground: 0 0% 100%;--popover: 225 14% 18%;--popover-foreground: 0 0% 100%;--border: 225 8% 22%;--muted: 225 8% 16%;--muted-foreground: 0 0% 100% / .45;--primary: 37 97% 49%;--primary-foreground: 225 16% 13%;--success: 142 63% 32%;--warning: 37 97% 49%;--destructive: 0 72% 51%;--destructive-foreground: 0 0% 100%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-1\.5{left:.375rem;right:.375rem}.inset-y-0{top:0;bottom:0}.-right-1\.5{right:-.375rem}.-top-1\.5{top:-.375rem}.-top-6{top:-1.5rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-14{bottom:3.5rem}.bottom-3{bottom:.75rem}.bottom-\[20px\]{bottom:20px}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-auto{left:auto}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3{top:.75rem}.top-8{top:2rem}.top-\[30px\]{top:30px}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1\]{z-index:1}.z-\[5\]{z-index:5}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.order-1{order:1}.col-span-2{grid-column:span 2 / span 2}.col-span-4{grid-column:span 4 / span 4}.col-span-9{grid-column:span 9 / span 9}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-0\.5{margin-left:-.125rem}.-ml-1{margin-left:-.25rem}.-ml-7{margin-left:-1.75rem}.-mr-1{margin-right:-.25rem}.-mt-0\.5{margin-top:-.125rem}.-mt-4{margin-top:-1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.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-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.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}.mt-\[3px\]{margin-top:3px}.mt-\[7px\]{margin-top:7px}.mt-px{margin-top:1px}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.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}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-2{width:.5rem;height:.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-20{width:5rem;height:5rem}.size-32{width:8rem;height:8rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-\[42px\]{width:42px;height:42px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-44{height:11rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[13px\]{height:13px}.h-\[150px\]{height:150px}.h-\[18px\]{height:18px}.h-\[24px\]{height:24px}.h-\[250px\]{height:250px}.h-\[260px\]{height:260px}.h-\[30px\]{height:30px}.h-\[380px\]{height:380px}.h-\[400px\]{height:400px}.h-\[40px\]{height:40px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-\[280px\]{max-height:280px}.max-h-\[40\%\]{max-height:40%}.max-h-\[70vh\]{max-height:70vh}.max-h-\[75vh\]{max-height:75vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-\[calc\(90vh-126px\)\]{max-height:calc(90vh - 126px)}.max-h-\[min\(620px\,calc\(100vh-6rem\)\)\]{max-height:min(620px,calc(100vh - 6rem))}.max-h-none{max-height:none}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-12{min-height:3rem}.min-h-16{min-height:4rem}.min-h-20{min-height:5rem}.min-h-8{min-height:2rem}.min-h-9{min-height:2.25rem}.min-h-\[108px\]{min-height:108px}.min-h-\[120px\]{min-height:120px}.min-h-\[320px\]{min-height:320px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.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-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[10\%\]{width:10%}.w-\[100px\]{width:100px}.w-\[11\%\]{width:11%}.w-\[110px\]{width:110px}.w-\[12\%\]{width:12%}.w-\[120px\]{width:120px}.w-\[13\%\]{width:13%}.w-\[132px\]{width:132px}.w-\[13px\]{width:13px}.w-\[14\%\]{width:14%}.w-\[15\%\]{width:15%}.w-\[160px\]{width:160px}.w-\[176px\]{width:176px}.w-\[18\%\]{width:18%}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-\[240px\]{width:240px}.w-\[28px\]{width:28px}.w-\[300px\]{width:300px}.w-\[31\%\]{width:31%}.w-\[32px\]{width:32px}.w-\[33\%\]{width:33%}.w-\[34\%\]{width:34%}.w-\[360px\]{width:360px}.w-\[36px\]{width:36px}.w-\[380px\]{width:380px}.w-\[40px\]{width:40px}.w-\[48px\]{width:48px}.w-\[5\%\]{width:5%}.w-\[50px\]{width:50px}.w-\[52px\]{width:52px}.w-\[55px\]{width:55px}.w-\[56px\]{width:56px}.w-\[6\%\]{width:6%}.w-\[60\%\]{width:60%}.w-\[60px\]{width:60px}.w-\[7\%\]{width:7%}.w-\[72px\]{width:72px}.w-\[80px\]{width:80px}.w-\[860px\]{width:860px}.w-\[88px\]{width:88px}.w-\[9\%\]{width:9%}.w-\[95vw\]{width:95vw}.w-\[96px\]{width:96px}.w-\[max\(100\%\,180px\)\]{width:max(100%,180px)}.w-\[min\(1100px\,calc\(100vw-2rem\)\)\]{width:min(1100px,calc(100vw - 2rem))}.w-\[min\(1220px\,calc\(100vw-2rem\)\)\]{width:min(1220px,calc(100vw - 2rem))}.w-\[min\(260px\,calc\(100vw-2rem\)\)\]{width:min(260px,calc(100vw - 2rem))}.w-\[min\(360px\,calc\(100vw-2rem\)\)\]{width:min(360px,calc(100vw - 2rem))}.w-\[min\(380px\,calc\(100vw-2rem\)\)\]{width:min(380px,calc(100vw - 2rem))}.w-\[min\(460px\,calc\(100vw-2rem\)\)\]{width:min(460px,calc(100vw - 2rem))}.w-\[min\(480px\,calc\(100vw-2rem\)\)\]{width:min(480px,calc(100vw - 2rem))}.w-\[min\(500px\,calc\(100vw-2rem\)\)\]{width:min(500px,calc(100vw - 2rem))}.w-\[min\(520px\,calc\(100vw-2rem\)\)\]{width:min(520px,calc(100vw - 2rem))}.w-\[min\(620px\,calc\(100vw-2rem\)\)\]{width:min(620px,calc(100vw - 2rem))}.w-\[min\(680px\,calc\(100vw-2rem\)\)\]{width:min(680px,calc(100vw - 2rem))}.w-\[min\(760px\,calc\(100vw-2rem\)\)\]{width:min(760px,calc(100vw - 2rem))}.w-\[min\(820px\,calc\(100vw-2rem\)\)\]{width:min(820px,calc(100vw - 2rem))}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-24{min-width:6rem}.min-w-40{min-width:10rem}.min-w-8{min-width:2rem}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[1120px\]{min-width:1120px}.min-w-\[124px\]{min-width:124px}.min-w-\[1280px\]{min-width:1280px}.min-w-\[132px\]{min-width:132px}.min-w-\[1470px\]{min-width:1470px}.min-w-\[150px\]{min-width:150px}.min-w-\[155px\]{min-width:155px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[190px\]{min-width:190px}.min-w-\[200px\]{min-width:200px}.min-w-\[360px\]{min-width:360px}.min-w-\[380px\]{min-width:380px}.min-w-\[560px\]{min-width:560px}.min-w-\[680px\]{min-width:680px}.min-w-\[700px\]{min-width:700px}.min-w-\[760px\]{min-width:760px}.min-w-\[800px\]{min-width:800px}.min-w-\[820px\]{min-width:820px}.min-w-\[900px\]{min-width:900px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-3{max-width:.75rem}.max-w-32{max-width:8rem}.max-w-36{max-width:9rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-\[100px\]{max-width:100px}.max-w-\[100vw\]{max-width:100vw}.max-w-\[120px\]{max-width:120px}.max-w-\[1280px\]{max-width:1280px}.max-w-\[132px\]{max-width:132px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[320px\]{max-width:320px}.max-w-\[340px\]{max-width:340px}.max-w-\[360px\]{max-width:360px}.max-w-\[370px\]{max-width:370px}.max-w-\[380px\]{max-width:380px}.max-w-\[400px\]{max-width:400px}.max-w-\[440px\]{max-width:440px}.max-w-\[480px\]{max-width:480px}.max-w-\[560px\]{max-width:560px}.max-w-\[720px\]{max-width:720px}.max-w-\[72px\]{max-width:72px}.max-w-\[760px\]{max-width:760px}.max-w-\[860px\]{max-width:860px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-\[min\(280px\,calc\(100vw-2rem\)\)\]{max-width:min(280px,calc(100vw - 2rem))}.max-w-\[min\(580px\,calc\(100\%-1\.5rem\)\)\]{max-width:min(580px,calc(100% - 1.5rem))}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-screen-xl{max-width:1280px}.flex-1{flex:1 1 0%}.flex-\[1\]{flex:1}.flex-\[2\]{flex:2}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(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%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(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(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-4{scroll-margin-top:1rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,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-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[100px_1fr\]{grid-template-columns:100px 1fr}.grid-cols-\[110px_minmax\(360px\,1\.45fr\)_minmax\(360px\,1\.35fr\)_100px_100px_100px_68px_88px_120px\]{grid-template-columns:110px minmax(360px,1.45fr) minmax(360px,1.35fr) 100px 100px 100px 68px 88px 120px}.grid-cols-\[190px_1fr\]{grid-template-columns:190px 1fr}.grid-cols-\[1fr_1fr_1fr_auto\]{grid-template-columns:1fr 1fr 1fr auto}.grid-cols-\[1fr_92px\]{grid-template-columns:1fr 92px}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[1fr_auto_auto\]{grid-template-columns:1fr auto auto}.grid-cols-\[210px_minmax\(520px\,1fr\)\]{grid-template-columns:210px minmax(520px,1fr)}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.grid-cols-\[72px_1fr_auto\]{grid-template-columns:72px 1fr auto}.grid-cols-\[90px_1fr\]{grid-template-columns:90px 1fr}.grid-cols-\[minmax\(0\,1fr\)_100px_32px\]{grid-template-columns:minmax(0,1fr) 100px 32px}.grid-cols-\[minmax\(0\,1fr\)_48px_56px_86px_52px\]{grid-template-columns:minmax(0,1fr) 48px 56px 86px 52px}.grid-cols-\[minmax\(130px\,1\.6fr\)_64px_46px_76px_80px_120px_80px\]{grid-template-columns:minmax(130px,1.6fr) 64px 46px 76px 80px 120px 80px}.grid-cols-\[minmax\(180px\,1fr\)_110px_80px_32px\]{grid-template-columns:minmax(180px,1fr) 110px 80px 32px}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.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-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-\[2px\]{gap:2px}.gap-px{gap:1px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.self-start{align-self:flex-start}.self-center{align-self:center}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-y-visible{overflow-y:visible}.overscroll-contain{overscroll-behavior:contain}.overscroll-x-contain{overscroll-behavior-x:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.rounded{border-radius:.25rem}.rounded-\[22px\]{border-radius:22px}.rounded-\[2px\]{border-radius:2px}.rounded-\[3px\]{border-radius:3px}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-b-md{border-bottom-right-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.rounded-tl-xl{border-top-left-radius:.75rem}.rounded-tr-xl{border-top-right-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-y-2{border-top-width:2px;border-bottom-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/50{border-color:#fde68a80}.border-amber-200\/60{border-color:#fde68a99}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-300\/25{border-color:#fcd34d40}.border-amber-300\/30{border-color:#fcd34d4d}.border-amber-300\/50{border-color:#fcd34d80}.border-amber-300\/60{border-color:#fcd34d99}.border-amber-400\/25{border-color:#fbbf2440}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-amber-500\/25{border-color:#f59e0b40}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/50{border-color:#f59e0b80}.border-black\/\[0\.06\]{border-color:#0000000f}.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-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/15{border-color:#67e8f926}.border-cyan-300\/20{border-color:#67e8f933}.border-cyan-300\/25{border-color:#67e8f940}.border-cyan-300\/30{border-color:#67e8f94d}.border-cyan-300\/45{border-color:#67e8f973}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-300\/25{border-color:#6ee7b740}.border-emerald-400\/20{border-color:#34d39933}.border-emerald-400\/25{border-color:#34d39940}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-600{--tw-border-opacity: 1;border-color:rgb(5 150 105 / var(--tw-border-opacity, 1))}.border-foreground{border-color:hsl(var(--foreground))}.border-foreground\/20{border-color:hsl(var(--foreground) / .2)}.border-foreground\/50{border-color:hsl(var(--foreground) / .5)}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-muted-foreground\/40{border-color:hsl(var(--muted-foreground) / .4)}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity, 1))}.border-primary{border-color:hsl(var(--primary))}.border-primary-foreground\/20{border-color:hsl(var(--primary-foreground) / .2)}.border-primary\/15{border-color:hsl(var(--primary) / .15)}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-primary\/60{border-color:hsl(var(--primary) / .6)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-300{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity, 1))}.border-sky-400\/25{border-color:#38bdf840}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-500\/25{border-color:#64748b40}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-violet-300\/15{border-color:#c4b5fd26}.border-violet-300\/20{border-color:#c4b5fd33}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:#ffffff1a}.border-white\/15{border-color:#ffffff26}.border-white\/\[0\.05\]{border-color:#ffffff0d}.border-white\/\[0\.06\]{border-color:#ffffff0f}.border-white\/\[0\.07\]{border-color:#ffffff12}.border-white\/\[0\.08\]{border-color:#ffffff14}.border-white\/\[0\.1\]{border-color:#ffffff1a}.border-t-muted-foreground{border-top-color:hsl(var(--muted-foreground))}.border-t-transparent{border-top-color:transparent}.bg-\[\#070f1c\]{--tw-bg-opacity: 1;background-color:rgb(7 15 28 / var(--tw-bg-opacity, 1))}.bg-\[\#07111e\]\/90{background-color:#07111ee6}.bg-\[\#08111f\]\/90{background-color:#08111fe6}.bg-\[\#0b1524\]{--tw-bg-opacity: 1;background-color:rgb(11 21 36 / var(--tw-bg-opacity, 1))}.bg-\[\#0b1524\]\/95{background-color:#0b1524f2}.bg-\[\#c73a55\]{--tw-bg-opacity: 1;background-color:rgb(199 58 85 / var(--tw-bg-opacity, 1))}.bg-\[\#e94765cc\]{background-color:#e94765cc}.bg-\[rgba\(184\,127\,91\,0\.85\)\]{background-color:#b87f5bd9}.bg-\[rgba\(208\,150\,108\,0\.7\)\]{background-color:#d0966cb3}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-300\/\[0\.08\]{background-color:#fcd34d14}.bg-amber-400\/10{background-color:#fbbf241a}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/50{background-color:#fffbeb80}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-amber-500\/60{background-color:#f59e0b99}.bg-background{background-color:hsl(var(--background))}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/15{background-color:#00000026}.bg-black\/40{background-color:#0006}.bg-black\/45{background-color:#00000073}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/60{background-color:#3b82f699}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-current{background-color:currentColor}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/15{background-color:#67e8f926}.bg-cyan-300\/\[0\.045\]{background-color:#67e8f90b}.bg-cyan-300\/\[0\.04\]{background-color:#67e8f90a}.bg-cyan-300\/\[0\.07\]{background-color:#67e8f912}.bg-cyan-300\/\[0\.08\]{background-color:#67e8f914}.bg-cyan-300\/\[0\.1\]{background-color:#67e8f91a}.bg-cyan-500\/10{background-color:#06b6d41a}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-300\/\[0\.07\]{background-color:#6ee7b712}.bg-emerald-400\/10{background-color:#34d3991a}.bg-emerald-400\/15{background-color:#34d39926}.bg-emerald-400\/\[0\.06\]{background-color:#34d3990f}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/50{background-color:#ecfdf580}.bg-emerald-50\/60{background-color:#ecfdf599}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/25{background-color:hsl(var(--foreground) / .25)}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50\/60{background-color:#f9fafb99}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/15{background-color:#22c55e26}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted-foreground\/15{background-color:hsl(var(--muted-foreground) / .15)}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground) / .3)}.bg-muted-foreground\/35{background-color:hsl(var(--muted-foreground) / .35)}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground) / .4)}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/15{background-color:hsl(var(--muted) / .15)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/25{background-color:hsl(var(--muted) / .25)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/35{background-color:hsl(var(--muted) / .35)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/5{background-color:hsl(var(--muted) / .05)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-muted\/\[0\.12\]{background-color:hsl(var(--muted) / .12)}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-50\/60{background-color:#fff7ed99}.bg-orange-500\/10{background-color:#f973161a}.bg-orange-500\/15{background-color:#f9731626}.bg-pink-500\/10{background-color:#ec48991a}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/40{background-color:hsl(var(--primary) / .4)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/50{background-color:hsl(var(--primary) / .5)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/70{background-color:hsl(var(--primary) / .7)}.bg-primary\/\[0\.025\]{background-color:hsl(var(--primary) / .025)}.bg-primary\/\[0\.035\]{background-color:hsl(var(--primary) / .035)}.bg-primary\/\[0\.03\]{background-color:hsl(var(--primary) / .03)}.bg-primary\/\[0\.04\]{background-color:hsl(var(--primary) / .04)}.bg-primary\/\[0\.05\]{background-color:hsl(var(--primary) / .05)}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-50\/30{background-color:#faf5ff4d}.bg-purple-50\/60{background-color:#faf5ff99}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/15{background-color:#a855f726}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / 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-50\/60{background-color:#fef2f299}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-rose-400\/70{background-color:#fb7185b3}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / 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-400\/10{background-color:#38bdf81a}.bg-sky-400\/70{background-color:#38bdf8b3}.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-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-500\/10{background-color:#64748b1a}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/25{background-color:#02061740}.bg-slate-950\/65{background-color:#020617a6}.bg-slate-950\/75{background-color:#020617bf}.bg-stone-100{--tw-bg-opacity: 1;background-color:rgb(245 245 244 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-violet-300\/\[0\.07\]{background-color:#c4b5fd12}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/\[0\.025\]{background-color:#ffffff06}.bg-white\/\[0\.02\]{background-color:#ffffff05}.bg-white\/\[0\.03\]{background-color:#ffffff08}.bg-white\/\[0\.05\]{background-color:#ffffff0d}.bg-yellow-500\/15{background-color:#eab30826}.bg-\[linear-gradient\(115deg\,rgba\(124\,58\,237\,\.15\)\,transparent_55\%\)\,linear-gradient\(25deg\,rgba\(8\,145\,178\,\.11\)\,transparent_52\%\)\]{background-image:linear-gradient(115deg,rgba(124,58,237,.15),transparent 55%),linear-gradient(25deg,rgba(8,145,178,.11),transparent 52%)}.bg-\[linear-gradient\(180deg\,rgba\(5\,11\,20\,\.1\)\,rgba\(5\,11\,20\,\.76\)_88\%\)\]{background-image:linear-gradient(180deg,#050b141a,#050b14c2 88%)}.bg-\[linear-gradient\(90deg\,rgba\(5\,11\,20\,\.96\)_0\%\,rgba\(5\,11\,20\,\.78\)_40\%\,rgba\(5\,11\,20\,\.48\)_100\%\)\]{background-image:linear-gradient(90deg,#050b14f5,#050b14c7 40%,#050b147a)}.bg-\[linear-gradient\(90deg\,transparent_24\.9\%\,hsl\(var\(--border\)\)_25\%\,transparent_25\.1\%\,transparent_49\.9\%\,hsl\(var\(--border\)\)_50\%\,transparent_50\.1\%\,transparent_74\.9\%\,hsl\(var\(--border\)\)_75\%\,transparent_75\.1\%\)\]{background-image:linear-gradient(90deg,transparent 24.9%,hsl(var(--border)) 25%,transparent 25.1%,transparent 49.9%,hsl(var(--border)) 50%,transparent 50.1%,transparent 74.9%,hsl(var(--border)) 75%,transparent 75.1%)}.bg-\[radial-gradient\(circle_at_25\%_20\%\,hsl\(var\(--primary\)\/0\.11\)\,transparent_34\%\)\,linear-gradient\(135deg\,hsl\(var\(--card\)\)\,hsl\(var\(--muted\)\/0\.25\)\)\]{background-image:radial-gradient(circle at 25% 20%,hsl(var(--primary)/.11),transparent 34%),linear-gradient(135deg,hsl(var(--card)),hsl(var(--muted)/.25))}.bg-cover{background-size:cover}.bg-center{background-position:center}.fill-amber-500{fill:#f59e0b}.fill-cyan-200{fill:#a5f3fc}.fill-cyan-300\/20{fill:#67e8f933}.fill-none{fill:none}.fill-rose-400\/70{fill:#fb7185b3}.fill-sky-400\/70{fill:#38bdf8b3}.stroke-current{stroke:currentColor}.stroke-\[1\.7\]{stroke-width:1.7}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-\[62\%_34\%\]{-o-object-position:62% 34%;object-position:62% 34%}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.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-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.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-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-3\.5{padding-left:.875rem;padding-right:.875rem}.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}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\],.py-px{padding-top:1px;padding-bottom:1px}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-3\.5{padding-bottom:.875rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-\[max\(0\.75rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.75rem,env(safe-area-inset-bottom))}.pl-0{padding-left:0}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-5{padding-right:1.25rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-3\.5{padding-top:.875rem}.pt-4{padding-top:1rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pt-\[15vh\]{padding-top:15vh}.pt-\[8vh\]{padding-top:8vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-\[-2px\]{vertical-align:-2px}.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-\[0\.85em\]{font-size:.85em}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[19px\]{font-size:19px}.text-\[7\.5px\]{font-size:7.5px}.text-\[7px\]{font-size:7px}.text-\[8\.5px\]{font-size:8.5px}.text-\[8px\]{font-size:8px}.text-\[9\.5px\]{font-size:9.5px}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.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-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-\[1\.35\]{line-height:1.35}.leading-\[14px\]{line-height:14px}.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\.04em\]{letter-spacing:-.04em}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-\[2px\]{letter-spacing:2px}.tracking-normal{letter-spacing:0em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/70{color:#fbbf24b3}.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-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-background{color:hsl(var(--background))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-border{color:hsl(var(--border))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-100{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-100{--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / 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-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/40{color:hsl(var(--foreground) / .4)}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-foreground\/60{color:hsl(var(--foreground) / .6)}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/75{color:hsl(var(--foreground) / .75)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-fuchsia-100{--tw-text-opacity: 1;color:rgb(250 232 255 / var(--tw-text-opacity, 1))}.text-fuchsia-200{--tw-text-opacity: 1;color:rgb(245 208 254 / 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-indigo-800{--tw-text-opacity: 1;color:rgb(55 48 163 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/65{color:hsl(var(--muted-foreground) / .65)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.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-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/60{color:hsl(var(--primary) / .6)}.text-primary\/70{color:hsl(var(--primary) / .7)}.text-primary\/80{color:hsl(var(--primary) / .8)}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-600\/80{color:#9333eacc}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / 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-500\/70{color:#ef4444b3}.text-red-500\/80{color:#ef4444cc}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-600\/80{color:#dc2626cc}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.text-rose-700{--tw-text-opacity: 1;color:rgb(190 18 60 / var(--tw-text-opacity, 1))}.text-rose-800{--tw-text-opacity: 1;color:rgb(159 18 57 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / 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-sky-800{--tw-text-opacity: 1;color:rgb(7 89 133 / var(--tw-text-opacity, 1))}.text-sky-900{--tw-text-opacity: 1;color:rgb(12 74 110 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / 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-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-stone-500{--tw-text-opacity: 1;color:rgb(120 113 108 / var(--tw-text-opacity, 1))}.text-stone-700{--tw-text-opacity: 1;color:rgb(68 64 60 / var(--tw-text-opacity, 1))}.text-violet-200{--tw-text-opacity: 1;color:rgb(221 214 254 / var(--tw-text-opacity, 1))}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-violet-800{--tw-text-opacity: 1;color:rgb(91 33 182 / var(--tw-text-opacity, 1))}.text-violet-900{--tw-text-opacity: 1;color:rgb(76 29 149 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.decoration-muted-foreground\/40{text-decoration-color:hsl(var(--muted-foreground) / .4)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-\[0\.22\]{opacity:.22}.mix-blend-screen{mix-blend-mode:screen}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);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 rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);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 rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);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 rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-amber-400\/60{--tw-ring-color: rgb(251 191 36 / .6)}.ring-primary\/50{--tw-ring-color: hsl(var(--primary) / .5)}.blur{--tw-blur: blur(8px);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)}.brightness-75{--tw-brightness: brightness(.75);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)}.grayscale{--tw-grayscale: grayscale(100%);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)}.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-md{--tw-backdrop-blur: blur(12px);-webkit-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-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-sm{--tw-backdrop-blur: blur(4px);-webkit-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-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)}.transition{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-duration:.15s}.transition-\[color\,background-color\,border-color\,box-shadow\,transform\]{transition-property:color,background-color,border-color,box-shadow,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[-webkit-overflow-scrolling\:touch\]{-webkit-overflow-scrolling:touch}.\[scrollbar-width\:none\]{scrollbar-width:none}.marker\:text-muted-foreground\/40 *::marker{color:hsl(var(--muted-foreground) / .4)}.marker\:text-muted-foreground\/40::marker{color:hsl(var(--muted-foreground) / .4)}.file\:mr-3::file-selector-button{margin-right:.75rem}.file\:rounded-md::file-selector-button{border-radius:calc(var(--radius) - 2px)}.file\:border::file-selector-button{border-width:1px}.file\:border-border::file-selector-button{border-color:hsl(var(--border))}.file\:bg-muted::file-selector-button{background-color:hsl(var(--muted))}.file\:px-2::file-selector-button{padding-left:.5rem;padding-right:.5rem}.file\:py-1\.5::file-selector-button{padding-top:.375rem;padding-bottom:.375rem}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground\/40::-moz-placeholder{color:hsl(var(--muted-foreground) / .4)}.placeholder\:text-muted-foreground\/40::placeholder{color:hsl(var(--muted-foreground) / .4)}.placeholder\:text-muted-foreground\/60::-moz-placeholder{color:hsl(var(--muted-foreground) / .6)}.placeholder\:text-muted-foreground\/60::placeholder{color:hsl(var(--muted-foreground) / .6)}.placeholder\:text-muted-foreground\/70::-moz-placeholder{color:hsl(var(--muted-foreground) / .7)}.placeholder\:text-muted-foreground\/70::placeholder{color:hsl(var(--muted-foreground) / .7)}.backdrop\:bg-black\/45::backdrop{background-color:#00000073}.backdrop\:bg-black\/50::backdrop{background-color:#00000080}.backdrop\:backdrop-blur-\[1px\]::backdrop{--tw-backdrop-blur: blur(1px);-webkit-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-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)}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:bottom-0:after{content:var(--tw-content);bottom:0}.after\:right-0:after{content:var(--tw-content);right:0}.after\:top-0:after{content:var(--tw-content);top:0}.after\:w-\[6px\]:after{content:var(--tw-content);width:6px}.after\:bg-gradient-to-r:after{content:var(--tw-content);background-image:linear-gradient(to right,var(--tw-gradient-stops))}.after\:from-black\/\[0\.04\]:after{content:var(--tw-content);--tw-gradient-from: rgb(0 0 0 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.after\:to-transparent:after{content:var(--tw-content);--tw-gradient-to: transparent var(--tw-gradient-to-position)}.first\:mt-0:first-child{margin-top:0}.first\:border-l-0:first-child{border-left-width:0px}.first\:border-t-0:first-child{border-top-width:0px}.first\:pl-0:first-child{padding-left:0}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.read-only\:bg-muted\/40:-moz-read-only{background-color:hsl(var(--muted) / .4)}.read-only\:bg-muted\/40:read-only{background-color:hsl(var(--muted) / .4)}.focus-within\:ring-2:focus-within{--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-within\:ring-primary\/40:focus-within{--tw-ring-color: hsl(var(--primary) / .4)}.hover\:border-border:hover{border-color:hsl(var(--border))}.hover\:border-cyan-300\/20:hover{border-color:#67e8f933}.hover\:border-foreground\/30:hover{border-color:hsl(var(--foreground) / .3)}.hover\:border-foreground\/40:hover{border-color:hsl(var(--foreground) / .4)}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/40:hover{border-color:hsl(var(--primary) / .4)}.hover\:border-primary\/70:hover{border-color:hsl(var(--primary) / .7)}.hover\:border-white\/20:hover{border-color:#fff3}.hover\:bg-amber-300\/15:hover{background-color:#fcd34d26}.hover\:bg-amber-600:hover{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50\/40:hover{background-color:#eff6ff66}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-card\/60:hover{background-color:hsl(var(--card) / .6)}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-300\/10:hover{background-color:#67e8f91a}.hover\:bg-cyan-300\/15:hover{background-color:#67e8f926}.hover\:bg-cyan-300\/\[0\.04\]:hover{background-color:#67e8f90a}.hover\:bg-cyan-300\/\[0\.14\]:hover{background-color:#67e8f924}.hover\:bg-cyan-300\/\[0\.15\]:hover{background-color:#67e8f926}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.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-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/15:hover{background-color:hsl(var(--muted) / .15)}.hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}.hover\:bg-muted\/25:hover{background-color:hsl(var(--muted) / .25)}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted) / .4)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-muted\/70:hover{background-color:hsl(var(--muted) / .7)}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/20:hover{background-color:hsl(var(--primary) / .2)}.hover\:bg-primary\/5:hover{background-color:hsl(var(--primary) / .05)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/\[0\.025\]:hover{background-color:#ffffff06}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-emerald-500:hover{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / 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\:brightness-110:hover{--tw-brightness: brightness(1.1);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-foreground:focus{border-color:hsl(var(--foreground))}.focus\:border-foreground\/30:focus{border-color:hsl(var(--foreground) / .3)}.focus\:border-primary:focus{border-color:hsl(var(--primary))}.focus\:border-primary\/50:focus{border-color:hsl(var(--primary) / .5)}.focus\:bg-muted:focus{background-color:hsl(var(--muted))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(1px + 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-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-amber-400\/40:focus{--tw-ring-color: rgb(251 191 36 / .4)}.focus\:ring-primary:focus{--tw-ring-color: hsl(var(--primary))}.focus\:ring-primary\/15:focus{--tw-ring-color: hsl(var(--primary) / .15)}.focus\:ring-primary\/20:focus{--tw-ring-color: hsl(var(--primary) / .2)}.focus\:ring-primary\/30:focus{--tw-ring-color: hsl(var(--primary) / .3)}.focus\:ring-primary\/50:focus{--tw-ring-color: hsl(var(--primary) / .5)}.focus\:ring-offset-1:focus{--tw-ring-offset-width: 1px}.focus-visible\:border-primary:focus-visible{border-color:hsl(var(--primary))}.focus-visible\:border-primary\/40:focus-visible{border-color:hsl(var(--primary) / .4)}.focus-visible\:border-primary\/50:focus-visible{border-color:hsl(var(--primary) / .5)}.focus-visible\:border-primary\/60:focus-visible{border-color:hsl(var(--primary) / .6)}.focus-visible\:bg-muted:focus-visible{background-color:hsl(var(--muted))}.focus-visible\:bg-muted\/30:focus-visible{background-color:hsl(var(--muted) / .3)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--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-visible\:ring-inset:focus-visible{--tw-ring-inset: inset}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-fuchsia-300\/30:focus-visible{--tw-ring-color: rgb(240 171 252 / .3)}.focus-visible\:ring-primary\/20:focus-visible{--tw-ring-color: hsl(var(--primary) / .2)}.focus-visible\:ring-primary\/30:focus-visible{--tw-ring-color: hsl(var(--primary) / .3)}.focus-visible\:ring-primary\/40:focus-visible{--tw-ring-color: hsl(var(--primary) / .4)}.focus-visible\:ring-red-400\/50:focus-visible{--tw-ring-color: rgb(248 113 113 / .5)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:bg-muted\/40:disabled{background-color:hsl(var(--muted) / .4)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-35:disabled{opacity:.35}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.disabled\:hover\:text-muted-foreground:hover:disabled{color:hsl(var(--muted-foreground))}.group[open] .group-open\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[open] .group-open\:border-b{border-bottom-width:1px}.group[open] .group-open\:border-border\/70{border-color:hsl(var(--border) / .7)}.group\/thumbnail:focus-within .group-focus-within\/thumbnail\:opacity-100{opacity:1}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:bg-primary\/50{background-color:hsl(var(--primary) / .5)}.group:hover .group-hover\:text-foreground\/80{color:hsl(var(--foreground) / .8)}.group\/entity:hover .group-hover\/entity\:opacity-100,.group\/pname:hover .group-hover\/pname\:opacity-100,.group\/thumbnail:hover .group-hover\/thumbnail\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-60{opacity:.6}@media(prefers-reduced-motion:no-preference){.motion-safe\:origin-center{transform-origin:center}@keyframes spin{to{transform:rotate(360deg)}}.motion-safe\:animate-\[spin_7s_linear_infinite\]{animation:spin 7s linear infinite}@keyframes pulse{50%{opacity:.5}}.motion-safe\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}}@media(prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mt-2{margin-top:.5rem}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:size-\[10px\]{width:10px;height:10px}.sm\:max-h-none{max-height:none}.sm\:min-h-0{min-height:0px}.sm\:w-64{width:16rem}.sm\:w-72{width:18rem}.sm\:w-80{width:20rem}.sm\:w-\[160px\]{width:160px}.sm\:w-\[190px\]{width:190px}.sm\:w-\[200px\]{width:200px}.sm\:w-\[70px\]{width:70px}.sm\:w-auto{width:auto}.sm\:min-w-\[1040px\]{min-width:1040px}.sm\:max-w-none{max-width:none}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xs{max-width:20rem}.sm\:flex-none{flex:none}.sm\:basis-auto{flex-basis:auto}.sm\:-translate-y-0\.5{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[110px_150px_1fr_auto\]{grid-template-columns:110px 150px 1fr auto}.sm\:grid-cols-\[140px_1fr\]{grid-template-columns:140px 1fr}.sm\:grid-cols-\[190px_1fr\]{grid-template-columns:190px 1fr}.sm\:grid-cols-\[1fr_120px_auto\]{grid-template-columns:1fr 120px auto}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-1\.5{gap:.375rem}.sm\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.sm\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px * var(--tw-divide-y-reverse))}.sm\:divide-border\/40>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .4)}.sm\:self-auto{align-self:auto}.sm\:p-0{padding:0}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.sm\:pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem,env(safe-area-inset-bottom))}.sm\:pl-\[193px\]{padding-left:193px}.sm\:pl-\[200px\]{padding-left:200px}.sm\:pr-\[72px\]{padding-right:72px}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-\[10px\]{font-size:10px}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:focus\:w-\[300px\]:focus{width:300px}}@media(min-width:768px){.md\:left-\[220px\]{left:220px}.md\:-mt-7{margin-top:-1.75rem}.md\:block{display:block}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:h-full{height:100%}.md\:max-h-\[calc\(100dvh-360px\)\]{max-height:calc(100dvh - 360px)}.md\:min-h-0{min-height:0px}.md\:min-h-\[160px\]{min-height:160px}.md\:min-h-\[720px\]{min-height:720px}.md\:flex-1{flex:1 1 0%}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.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-\[132px_minmax\(0\,1fr\)\]{grid-template-columns:132px minmax(0,1fr)}.md\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.md\:grid-cols-\[220px_minmax\(0\,1fr\)\]{grid-template-columns:220px minmax(0,1fr)}.md\:grid-cols-\[2fr_1fr\]{grid-template-columns:2fr 1fr}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:gap-0{gap:0px}.md\:divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.md\:divide-border\/40>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .4)}.md\:overflow-hidden{overflow:hidden}.md\:overflow-x-auto{overflow-x:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:overscroll-contain{overscroll-behavior:contain}.md\:rounded{border-radius:.25rem}.md\:border-b-0{border-bottom-width:0px}.md\:border-r{border-right-width:1px}.md\:bg-muted\/50{background-color:hsl(var(--muted) / .5)}.md\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.md\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:pt-7{padding-top:1.75rem}.md\:text-\[10px\]{font-size:10px}.md\:text-\[20px\]{font-size:20px}.md\:first\:pt-0:first-child{padding-top:0}.md\:last\:pb-0:last-child{padding-bottom:0}}@media(min-width:1024px){.lg\:absolute{position:absolute}.lg\:right-3{right:.75rem}.lg\:top-12{top:3rem}.lg\:z-20{z-index:20}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-start-1{grid-column-start:1}.lg\:col-start-2{grid-column-start:2}.lg\:row-start-2{grid-row-start:2}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-\[300px\]{width:300px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,0\.9fr\)_minmax\(440px\,1\.1fr\)\]{grid-template-columns:minmax(0,.9fr) minmax(440px,1.1fr)}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}}@media(min-width:1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1536px){.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.dark\:border-amber-500\/50{border-color:#f59e0b80}.dark\:border-amber-800{--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-800\/40{border-color:#92400e66}.dark\:border-amber-900\/50{border-color:#78350f80}.dark\:border-amber-900\/60{border-color:#78350f99}.dark\:border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-900\/60{border-color:#1e3a8a99}.dark\:border-emerald-400{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.dark\:border-emerald-900{--tw-border-opacity: 1;border-color:rgb(6 78 59 / var(--tw-border-opacity, 1))}.dark\:border-emerald-900\/60{border-color:#064e3b99}.dark\:border-orange-800{--tw-border-opacity: 1;border-color:rgb(154 52 18 / var(--tw-border-opacity, 1))}.dark\:border-orange-900{--tw-border-opacity: 1;border-color:rgb(124 45 18 / var(--tw-border-opacity, 1))}.dark\:border-purple-800{--tw-border-opacity: 1;border-color:rgb(107 33 168 / var(--tw-border-opacity, 1))}.dark\:border-purple-900{--tw-border-opacity: 1;border-color:rgb(88 28 135 / var(--tw-border-opacity, 1))}.dark\:border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/50{border-color:#7f1d1d80}.dark\:border-sky-800{--tw-border-opacity: 1;border-color:rgb(7 89 133 / var(--tw-border-opacity, 1))}.dark\:border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-violet-800{--tw-border-opacity: 1;border-color:rgb(91 33 182 / var(--tw-border-opacity, 1))}.dark\:border-white\/10{border-color:#ffffff1a}.dark\:bg-\[\#ff8cba\]{--tw-bg-opacity: 1;background-color:rgb(255 140 186 / var(--tw-bg-opacity, 1))}.dark\:bg-\[rgba\(230\,183\,141\,0\.78\)\]{background-color:#e6b78dc7}.dark\:bg-\[rgba\(232\,185\,144\,0\.9\)\]{background-color:#e8b990e6}.dark\:bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/10{background-color:#451a031a}.dark\:bg-amber-950\/20{background-color:#451a0333}.dark\:bg-amber-950\/30{background-color:#451a034d}.dark\:bg-amber-950\/40{background-color:#451a0366}.dark\:bg-amber-950\/50{background-color:#451a0380}.dark\:bg-amber-950\/60{background-color:#451a0399}.dark\:bg-background{background-color:hsl(var(--background))}.dark\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-950\/20{background-color:#17255433}.dark\:bg-blue-950\/40{background-color:#17255466}.dark\:bg-blue-950\/50{background-color:#17255480}.dark\:bg-card{background-color:hsl(var(--card))}.dark\:bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950{--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950\/20{background-color:#022c2233}.dark\:bg-emerald-950\/30{background-color:#022c224d}.dark\:bg-emerald-950\/40{background-color:#022c2266}.dark\:bg-emerald-950\/50{background-color:#022c2280}.dark\:bg-indigo-950{--tw-bg-opacity: 1;background-color:rgb(30 27 75 / var(--tw-bg-opacity, 1))}.dark\:bg-muted\/10{background-color:hsl(var(--muted) / .1)}.dark\:bg-muted\/5{background-color:hsl(var(--muted) / .05)}.dark\:bg-orange-950\/20{background-color:#43140733}.dark\:bg-orange-950\/40{background-color:#43140766}.dark\:bg-purple-950\/10{background-color:#3b07641a}.dark\:bg-purple-950\/20{background-color:#3b076433}.dark\:bg-purple-950\/40{background-color:#3b076466}.dark\:bg-red-950\/20{background-color:#450a0a33}.dark\:bg-rose-950{--tw-bg-opacity: 1;background-color:rgb(76 5 25 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-950\/40{background-color:#4c051966}.dark\:bg-sky-950\/40{background-color:#082f4966}.dark\:bg-sky-950\/60{background-color:#082f4999}.dark\:bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-stone-800\/40{background-color:#29252466}.dark\:bg-stone-900{--tw-bg-opacity: 1;background-color:rgb(28 25 23 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/60{background-color:#2e106599}.dark\:text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-300\/80{color:#fcd34dcc}.dark\:text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.dark\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300\/80{color:#6ee7b7cc}.dark\:text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.dark\:text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-purple-400\/80{color:#c084fccc}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-red-400\/50{color:#f8717180}.dark\:text-red-400\/70{color:#f87171b3}.dark\:text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-sky-200{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.dark\:text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-stone-300{--tw-text-opacity: 1;color:rgb(214 211 209 / var(--tw-text-opacity, 1))}.dark\:text-stone-400{--tw-text-opacity: 1;color:rgb(168 162 158 / var(--tw-text-opacity, 1))}.dark\:text-violet-200{--tw-text-opacity: 1;color:rgb(221 214 254 / var(--tw-text-opacity, 1))}.dark\:text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:after\:from-white\/\[0\.06\]:after{content:var(--tw-content);--tw-gradient-from: rgb(255 255 255 / .06) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:hover\:bg-amber-500:hover{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-emerald-500:hover{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\>tr\:nth-child\(even\)\]\:bg-muted\/20>tr:nth-child(2n){background-color:hsl(var(--muted) / .2)}.\[\&_table\]\:table-fixed table{table-layout:fixed}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>shopport</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DbEFJcBf.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dbcp2Eb1.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
|
@@ -1,128 +1,233 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sppt-product-parse
|
|
3
3
|
description: |
|
|
4
|
-
|
|
4
|
+
주문의 SourceOffering을 안전하게 해석해 기존 ProductOption 매핑을 제안·적용하고,
|
|
5
|
+
product master와 product mapping 후속 작업까지 연결하는 워크플로우.
|
|
5
6
|
Use when asked to "상품명 분석", "SKU별 정리", "미매핑 상품 확인", "매핑 설정".
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# product-parse
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
워크플로우. 클라우드 카탈로그의 권위는 현대 CatalogProduct API에 있으며, 레거시
|
|
12
|
-
`ProductCatalogEntry` 파일 임포트나 `/api/sync/products` 쓰기는 사용하지 않습니다.
|
|
11
|
+
상품 업무는 다음 세 영역으로 나눠 처리합니다.
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
| 업무 | 책임 | 대표 명령 |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `product parse` | intake·후보·기존 옵션 매핑 | `sppt product parse` |
|
|
16
|
+
| `product master` | 마스터 상품·옵션·분류 관리 | `sppt product master ...` |
|
|
17
|
+
| `product mapping` | 미매핑·연결·이력·정책 관리 | `sppt product mapping ...` |
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- 채널 옵션의 현재 CatalogProduct 매핑을 확인하고 싶을 때
|
|
19
|
+
`parse`는 마스터 CRUD나 매핑 이력 관리 명령이 아닙니다. 새 마스터나 분류를 만들어야
|
|
20
|
+
하거나 옵션 BOM을 보완해야 하는 경우에는 자동 확정하지 않고 검토 대기 상태로 남긴 뒤,
|
|
21
|
+
`product master`에서 확정하고 `product mapping`에서 연결합니다.
|
|
20
22
|
|
|
21
|
-
##
|
|
23
|
+
## 시작 전 확인
|
|
22
24
|
|
|
23
|
-
-
|
|
24
|
-
- 클라우드
|
|
25
|
+
- 주문이 임포트되어 있거나 채널 API 동기화가 완료되어 있어야 합니다.
|
|
26
|
+
- 클라우드 인증을 확인합니다.
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
```bash
|
|
29
|
+
sppt auth whoami
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- 처리할 채널·계정·상태·cursor/watermark 범위를 분명히 합니다. 범위가 불명확하면 전체를
|
|
33
|
+
재처리하지 말고 먼저 대상 건수와 scope를 확인합니다.
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
## 1. product parse: 자동 intake
|
|
36
|
+
|
|
37
|
+
### 명령
|
|
29
38
|
|
|
30
39
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
# 기본 동작은 preview run입니다. 마스터·판매채널 매핑은 변경하지 않지만
|
|
41
|
+
# 실행 기록·snapshot·후보·검토 상태는 저장합니다.
|
|
42
|
+
sppt product parse
|
|
43
|
+
sppt product parse --dry-run
|
|
44
|
+
|
|
45
|
+
# 권장 순서: preview 결과를 확인한 뒤 같은 run을 명시해 적용합니다.
|
|
46
|
+
sppt product parse status <runId>
|
|
47
|
+
sppt product parse --apply --confirm --run-id <runId>
|
|
33
48
|
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
# 새 run 생성부터 적용까지 한 번에 수행하는 사전 승인된 자동 실행
|
|
50
|
+
sppt product parse --apply --confirm
|
|
36
51
|
|
|
37
|
-
|
|
52
|
+
# 실행 결과·pending 항목·적용/충돌 상태 확인
|
|
53
|
+
sppt product parse status <runId>
|
|
54
|
+
```
|
|
38
55
|
|
|
39
|
-
|
|
56
|
+
### 처리 순서
|
|
57
|
+
|
|
58
|
+
1. 지정한 source/channel account와 state 범위의 SourceOffering을 읽습니다. 기본 state는
|
|
59
|
+
`unprocessed`이며, 미매핑만 처리하려면 `--state unmapped`를 지정합니다.
|
|
60
|
+
2. `product mapping rules publish`로 활성화된 compiled `product_rules` bundle을 source,
|
|
61
|
+
policy, master snapshot과 함께 고정합니다.
|
|
62
|
+
3. 상품명·옵션명·raw SKU를 정규화해 기존 마스터 옵션 후보를 찾습니다.
|
|
63
|
+
4. raw SKU 또는 명시 정책으로 하나의 active ProductOption이 확정되고 유효한 SKU/BOM,
|
|
64
|
+
revision 조건을 만족하는 경우에만 자동 적용 대상으로 삼습니다.
|
|
65
|
+
5. 모호한 identity, SKU 부족, BOM 미완성, 분류 충돌은 `product mapping unmapped`의
|
|
66
|
+
durable review case로 남깁니다.
|
|
67
|
+
6. 현재 매핑과 같은 대상이면 `unchanged`로 기록하고 매핑을 다시 쓰지 않습니다. 다른
|
|
68
|
+
대상이 더 강하게 검출되면 `mapping_change` 후보로 만들지만 preview 단계에서는 변경하지
|
|
69
|
+
않습니다.
|
|
70
|
+
7. 최종 적용이 승인된 매핑 변경은 서버가 하나의 `changeSetId`로 묶어 이력에 기록합니다.
|
|
71
|
+
|
|
72
|
+
기본 parse와 `--dry-run`은 마스터 상품·옵션·분류와 판매채널 매핑을 변경하지 않습니다. 대신
|
|
73
|
+
run, input manifest, 후보, action plan, review case와 SourceOffering의 parse 상태를 저장할 수
|
|
74
|
+
있습니다. `--apply --confirm` 없이는 매핑을 적용하지 않습니다. 최종 매핑 전에 확인을 받으려면
|
|
75
|
+
반드시 `parse → status → parse --apply --confirm --run-id` 순서를 사용합니다. `--run-id`를
|
|
76
|
+
지정하면 해당 run의 input manifest hash, policy hash, source mapping revision을 다시 검증하고
|
|
77
|
+
snapshot이나 revision이 달라지면 중단합니다. `--run-id`를 생략한 `--apply --confirm`은 새 run을
|
|
78
|
+
만들고 결과를 기다린 뒤 같은 명령 안에서 적용하므로, 별도 review가 끝난 뒤 적용해야 하는 경우에는
|
|
79
|
+
사용하지 않습니다.
|
|
80
|
+
|
|
81
|
+
신규 마스터 상품·ProductOption·classification node 생성, 마스터 field 수정, BOM 구성
|
|
82
|
+
변경은 parse가 자동 적용하지 않습니다. 이 결과는 pending review로 남기고 다음 순서로
|
|
83
|
+
처리합니다.
|
|
40
84
|
|
|
41
85
|
```bash
|
|
42
|
-
sppt product
|
|
86
|
+
sppt product master create --name "알텐바흐 316Ti 멀티쿠커"
|
|
87
|
+
sppt product master option create <productId> \
|
|
88
|
+
--name "20cm" --option-type variant --sku-id <skuId>
|
|
89
|
+
sppt product master classification create --kind category --name "냄비"
|
|
90
|
+
sppt product mapping map <sourceOfferingId> --product-option-id <masterOptionId>
|
|
43
91
|
```
|
|
44
92
|
|
|
45
|
-
|
|
93
|
+
`status`는 run 상태와 pending 사유를 확인하는 읽기 전용 명령입니다. parse 결과를 임의의
|
|
94
|
+
후보 선택으로 확정하지 말고, 신규 master·classification·BOM이 필요한지 먼저 판단합니다.
|
|
46
95
|
|
|
47
|
-
|
|
48
|
-
2. 상품명 정규화·동의어 규칙
|
|
49
|
-
3. 세트 구성과 수량 옵션 패턴
|
|
50
|
-
4. raw SKU와 기존 CatalogProduct option의 대응 규칙
|
|
96
|
+
### 이미 매핑된 항목의 처리
|
|
51
97
|
|
|
52
|
-
|
|
98
|
+
- 현재 매핑 대상과 parse 후보가 같으면 `unchanged`로 처리합니다. 기존 decision과 매핑을
|
|
99
|
+
덮어쓰지 않습니다.
|
|
100
|
+
- 현재 매핑과 다른 대상이 더 강하게 검출되면 `mapping_change`로 표시합니다. preview에서는
|
|
101
|
+
기존 매핑을 유지하며, `status`에서 대상과 근거를 확인한 뒤 `--apply --confirm --run-id`로
|
|
102
|
+
명시적으로 승인해야 합니다.
|
|
103
|
+
- 적용 조건은 신규 매핑과 동일하게 canonical identity, 동일한 mapping revision, active
|
|
104
|
+
ProductOption, 실행 가능한 SKU/BOM입니다. 조건이 맞지 않거나 판단이 모호하면 기존 매핑을
|
|
105
|
+
유지하고 conflict 또는 review case로 남깁니다.
|
|
106
|
+
- 재매핑이 적용되면 기존 decision을 삭제하지 않고 supersedes 관계의 새 decision과 새
|
|
107
|
+
`changeSetId`를 기록합니다. 잘못된 재매핑은 `product mapping rollback`으로 되돌립니다.
|
|
53
108
|
|
|
54
|
-
|
|
109
|
+
## 2. product master: 확정 데이터 관리
|
|
110
|
+
|
|
111
|
+
마스터 상품과 옵션은 이 영역에서 명시적으로 생성·수정합니다. 생성·수정에는 optimistic
|
|
112
|
+
revision과 idempotency를 사용합니다. 옵션 create/update CLI는 현재 product revision과 옵션
|
|
113
|
+
revision을 서버에서 읽어 내부적으로 configuration preview를 만든 뒤 즉시 적용합니다. 별도
|
|
114
|
+
review 후 confirm하는 최종 매핑 명령과는 다른 동작입니다.
|
|
55
115
|
|
|
56
116
|
```bash
|
|
57
|
-
sppt product
|
|
117
|
+
sppt product master list --query "멀티쿠커"
|
|
118
|
+
sppt product master create --name "알텐바흐 316Ti 멀티쿠커" --category-id <categoryId>
|
|
119
|
+
sppt product master update <productId> --revision <n> --name "알텐바흐 316Ti 멀티쿠커 2.0"
|
|
120
|
+
|
|
121
|
+
sppt product master option list <productId>
|
|
122
|
+
sppt product master option create <productId> \
|
|
123
|
+
--name "20cm" --option-type variant --sku-id <skuId>
|
|
124
|
+
sppt product master option update <productId> <optionId> \
|
|
125
|
+
--name "20cm 본품"
|
|
58
126
|
```
|
|
59
127
|
|
|
60
|
-
|
|
61
|
-
않고, 미매핑 SourceOffering을 대상으로 `preview` classification run만 생성합니다.
|
|
128
|
+
### 분류 관리
|
|
62
129
|
|
|
63
|
-
|
|
130
|
+
분류는 별도 최상위 업무가 아니라 `product master` 아래에서 관리합니다. 지원 kind는
|
|
131
|
+
`brand`, `category`, `productLine`입니다.
|
|
64
132
|
|
|
65
133
|
```bash
|
|
66
|
-
sppt product
|
|
134
|
+
sppt product master classification list --kind category
|
|
135
|
+
sppt product master classification create --kind category --name "냄비"
|
|
136
|
+
sppt product master classification update --kind category <id> --revision <n> \
|
|
137
|
+
--name "냄비·웍"
|
|
138
|
+
sppt product master classification archive --kind category <id> --revision <n>
|
|
139
|
+
sppt product master classification restore --kind category <id> --revision <n>
|
|
67
140
|
```
|
|
68
141
|
|
|
69
|
-
|
|
70
|
-
|
|
142
|
+
상품 분류 연결이 빠져 있으면 매핑과 별개로 분류 연결 필요 review issue로 남깁니다. parse는
|
|
143
|
+
분류 후보만 pending으로 제안하며, 분류 디렉터리와 상품 연결은 master에서 확정합니다.
|
|
71
144
|
|
|
72
|
-
|
|
73
|
-
- `new_catalog_product`: 새 CatalogProduct로 만들 후보
|
|
74
|
-
- `pending` 후보만 검토 대상입니다.
|
|
75
|
-
- 이름·SKU·옵션이 모호하면 자의적으로 승인하지 말고 사용자에게 질문합니다.
|
|
145
|
+
### 옵션과 BOM
|
|
76
146
|
|
|
77
|
-
|
|
147
|
+
단품은 direct SKU를 사용하고, 세트·프로모션은 옵션의 BOM 구성으로 관리합니다. 구성 변경은
|
|
148
|
+
현재 active 옵션을 보존한 전체 configuration preview를 확인한 뒤 적용합니다. parse가
|
|
149
|
+
BOM을 추측하거나 불완전한 BOM을 자동 확정하게 두지 않습니다.
|
|
78
150
|
|
|
79
|
-
|
|
151
|
+
## 3. product mapping: 연결·이력·정책
|
|
80
152
|
|
|
81
|
-
|
|
82
|
-
sppt product parse accept <runId> <candidateId>
|
|
83
|
-
sppt product parse reject <runId> <candidateId> --reason "상품명이 다름"
|
|
84
|
-
sppt product parse defer <runId> <candidateId> --reason "사용자 확인 필요"
|
|
85
|
-
```
|
|
153
|
+
### 미매핑과 직접 연결
|
|
86
154
|
|
|
87
|
-
|
|
155
|
+
```bash
|
|
156
|
+
sppt product mapping unmapped
|
|
88
157
|
|
|
89
|
-
|
|
158
|
+
# 첫 호출은 preview만 반환하며 변경하지 않습니다.
|
|
159
|
+
sppt product mapping map <sourceOfferingId> --product-option-id <masterOptionId>
|
|
90
160
|
|
|
91
|
-
|
|
161
|
+
# preview 결과와 대상 revision을 확인한 뒤 같은 요청에 confirm을 붙입니다.
|
|
162
|
+
sppt product mapping map <sourceOfferingId> \
|
|
163
|
+
--product-option-id <masterOptionId> --confirm
|
|
92
164
|
|
|
93
|
-
|
|
94
|
-
sppt product
|
|
165
|
+
# 해제도 동일하게 preview 후 confirm합니다.
|
|
166
|
+
sppt product mapping unmap <sourceOfferingId>
|
|
167
|
+
sppt product mapping unmap <sourceOfferingId> --confirm
|
|
95
168
|
```
|
|
96
169
|
|
|
97
|
-
|
|
98
|
-
|
|
170
|
+
map/unmap은 단건이어도 preview token과 대상 mapping revision을 검증합니다. `--confirm` 없는
|
|
171
|
+
호출은 preview만 반환하고 변경하지 않으며, 확인 시점에 source가 바뀌었거나 preview binding이
|
|
172
|
+
없으면 다시 preview를 만들고 중단합니다. 대상 ProductOption이 없으면 먼저 `product master`에서
|
|
173
|
+
생성·확정합니다.
|
|
174
|
+
|
|
175
|
+
### history와 rollback
|
|
99
176
|
|
|
100
177
|
```bash
|
|
101
|
-
sppt product
|
|
102
|
-
|
|
103
|
-
|
|
178
|
+
sppt product mapping history --from "2026-09-02 10:00" --to "2026-09-02 10:10"
|
|
179
|
+
|
|
180
|
+
# changeSetId를 명시하는 경우에도 먼저 영향 범위를 확인합니다.
|
|
181
|
+
sppt product mapping rollback --changeset <changeSetId>
|
|
182
|
+
sppt product mapping rollback --changeset <changeSetId> --confirm
|
|
104
183
|
|
|
105
|
-
|
|
184
|
+
# timestamp는 history에서 대상을 고르는 편의 selector입니다.
|
|
185
|
+
sppt product mapping rollback --at "2026-09-02 10:05"
|
|
186
|
+
sppt product mapping rollback --at "2026-09-02 10:05" --confirm
|
|
187
|
+
```
|
|
106
188
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
189
|
+
사람이 새 `changeSetId`를 만들거나 배정하지 않습니다. rollback에서는 서버가 만든 기존 ID를
|
|
190
|
+
선택할 수 있지만, map, unmap, parse 자동 적용, rollback 실행 자체의 `changeSetId`는 서버가
|
|
191
|
+
자동 생성합니다. `--at`은 해당
|
|
192
|
+
시점의 history를 찾는 selector일 뿐이며, 실제 rollback 단위는 서버가 선택한 구체적인
|
|
193
|
+
change set입니다. 시간만으로 대상이 모호하거나 현재 revision이 달라지면 자동 rollback하지
|
|
194
|
+
않고 preview 또는 conflict를 반환합니다. rollback은 기존 이력을 삭제하지 않고 보정 decision과
|
|
195
|
+
새 change set을 추가합니다.
|
|
110
196
|
|
|
111
|
-
|
|
197
|
+
### product_rules 정책 authoring
|
|
112
198
|
|
|
113
|
-
|
|
199
|
+
`product_rules`는 사람이 작성·검토하는 Markdown authoring policy입니다. 아래 lifecycle로만
|
|
200
|
+
관리하고, parse는 publish된 정책 bundle을 snapshot에 고정해 사용합니다.
|
|
114
201
|
|
|
115
202
|
```bash
|
|
116
|
-
sppt product
|
|
203
|
+
sppt product mapping rules show
|
|
204
|
+
sppt product mapping rules set ./product-rules.md
|
|
205
|
+
sppt product mapping rules publish
|
|
117
206
|
```
|
|
118
207
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
208
|
+
- `show`로 현재 draft와 active 정책을 확인합니다.
|
|
209
|
+
- `set`은 Markdown 원문을 draft로 저장합니다.
|
|
210
|
+
- `publish`는 compile·검증에 성공한 draft만 active 정책으로 교체합니다.
|
|
211
|
+
- 작성 가능한 규칙은 normalization/noise, alias, explicit SKU/source mapping, option·quantity
|
|
212
|
+
pattern, classification suggestion 중심으로 제한합니다.
|
|
213
|
+
- 자유로운 설명은 검토 참고용 context로 보존할 수 있지만 canonical mapping을 단독으로
|
|
214
|
+
결정하지 않습니다.
|
|
215
|
+
- 정책을 publish해도 기존 매핑을 자동 재작성하지 않습니다. 새 parse 실행과 별도 적용이
|
|
216
|
+
필요합니다.
|
|
217
|
+
|
|
218
|
+
`set`의 Markdown은 정책 원문을 제출하는 입력이며 상품 마스터나 매핑 데이터를 직접 가져오는
|
|
219
|
+
임포트 경로가 아닙니다. 정책이 없거나 compile되지 않으면 이름 유사도만으로 확정하지 말고
|
|
220
|
+
`policy_not_applied` 또는 pending으로 남깁니다.
|
|
221
|
+
|
|
222
|
+
## 안전 원칙
|
|
223
|
+
|
|
224
|
+
1. parse는 항상 dry-run으로 시작하고, 실제 변경은 `--apply --confirm`을 함께 지정합니다.
|
|
225
|
+
2. map/unmap은 preview 결과·대상·현재 revision을 확인한 뒤 `--confirm`합니다.
|
|
226
|
+
3. raw SKU, canonical identity, 명시 정책으로 대상이 하나로 확정되지 않으면 선택하지 않습니다.
|
|
227
|
+
4. 신규 master, classification, option, BOM 변경은 pending review로 남기고 master에서 먼저
|
|
228
|
+
확정합니다.
|
|
229
|
+
5. input manifest hash, policy hash, source mapping revision이 확인 시점과 다르면 재실행하거나
|
|
230
|
+
충돌로 보고합니다.
|
|
231
|
+
6. 자동화가 생성한 `changeSetId`와 history를 보존하고, 기존 decision을 덮어쓰지 않습니다.
|
|
232
|
+
7. 적용 후 `sppt product parse status <runId>`와 `sppt product mapping unmapped`로 pending,
|
|
233
|
+
conflict, projection 상태를 다시 확인합니다.
|
|
@@ -64,7 +64,7 @@ sppt order excluded # 제외된 주문 목록
|
|
|
64
64
|
sppt report --by category --explain # 수량 기여 분해
|
|
65
65
|
sppt analytics cafe24 visitors --period 7d # 카페24 방문자수 조회
|
|
66
66
|
sppt analytics cafe24 visitpaths --type domains --period 7d # 카페24 유입경로 조회
|
|
67
|
-
sppt product mapping
|
|
67
|
+
sppt product mapping unmapped # durable 미매핑 검토 큐 조회
|
|
68
68
|
sppt crm cafe24 groups # cafe24 회원등급 조회
|
|
69
69
|
sppt crm cafe24 customers --limit 30 # cafe24 회원목록 조회
|
|
70
70
|
sppt coupon list cafe24 --name "재구매" # 카페24 쿠폰 목록 + 다운로드 URL
|
|
@@ -88,13 +88,18 @@ sppt crm cafe24 customers # cafe24 회원목록 조회
|
|
|
88
88
|
- `sppt product seo get|set|support` — SEO 메타데이터 관리
|
|
89
89
|
- `sppt product fields get|set|apply cafe24` — Cafe24 SEO/discovery 필드 안전 조회·수정
|
|
90
90
|
- `sppt product image get|set|add|delete|support` — 이미지 관리
|
|
91
|
-
- `sppt product
|
|
92
|
-
- `sppt product
|
|
93
|
-
- `sppt product
|
|
94
|
-
- `sppt product
|
|
95
|
-
- `sppt product
|
|
96
|
-
- `sppt product
|
|
97
|
-
- `sppt product
|
|
91
|
+
- `sppt product parse` / `sppt product parse --dry-run` — 상품 intake 기본 미리보기
|
|
92
|
+
- `sppt product parse --apply --confirm [--run-id <runId>]` — 확실한 기존 옵션 매핑 적용
|
|
93
|
+
- `sppt product parse status <runId>` — 실행 결과·pending·충돌 상태 조회
|
|
94
|
+
- `sppt product master list|create|update` — 마스터 상품 관리
|
|
95
|
+
- `sppt product master option list|create|update` — 마스터 상품 옵션·BOM 관리
|
|
96
|
+
- `sppt product master classification list|create|update|archive|restore` — 분류 관리
|
|
97
|
+
- `sppt product mapping unmapped` — durable 미매핑 검토 큐 조회
|
|
98
|
+
- `sppt product mapping map|unmap <sourceOfferingId>` — preview 후 confirm하는 매핑 변경
|
|
99
|
+
- `sppt product mapping history` — 매핑 변경 이력 조회
|
|
100
|
+
- `sppt product mapping rollback` — `--changeset <changeSetId> --confirm` 또는
|
|
101
|
+
`--at <timestamp> --confirm`으로 이력 기반 rollback
|
|
102
|
+
- `sppt product mapping rules show|set|publish` — `product_rules` 정책 lifecycle
|
|
98
103
|
|
|
99
104
|
### 주문/송장
|
|
100
105
|
- `sppt order list|get|confirm|cancel|return <channel>` — 주문 관리
|