@bg-effects/shared 1.0.3 → 1.0.5
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/index.d.ts +309 -0
- package/dist/index.js +469 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.cjs +3 -0
- package/dist/index.umd.cjs.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/number.ts","../src/utils/random.ts","../src/utils/color.ts","../src/components/form/Slider.vue","../src/components/form/ColorPicker.vue","../src/components/form/Select.vue","../src/components/form/ButtonGroup.vue","../src/components/form/Toggle.vue","../src/components/form/SubTabs.vue","../src/components/layout/Panel.vue","../src/components/layout/Section.vue","../src/composables/useI18n.ts"],"sourcesContent":["export const clampNumber = (value: number, min: number, max: number) => {\n if (isNaN(value)) return min\n return Math.min(max, Math.max(min, value))\n}\n\nexport const normalizeIntRange = (value: number | undefined, min: number, max: number, fallback: number) => {\n const resolved = typeof value === 'number' ? value : fallback\n return clampNumber(Math.round(resolved), min, max)\n}\n","/**\n * 随机数处理工具库\n */\n\nexport function rand(min: number, max: number, precision = 2): number {\n const val = Math.random() * (max - min) + min\n return Number(val.toFixed(precision))\n}\n\nexport function randInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport function sample<T>(array: T[]): T {\n return array[Math.floor(Math.random() * array.length)]\n}\n\nexport function hit(chance: number): boolean {\n return Math.random() < chance\n}\n\nexport function shortId(length = 8): string {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\n let result = ''\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n return result\n}\n","/**\n * 颜色处理库\n */\n\nimport { hit, sample } from './random'\n\n/**\n * 预设的活力配色方案(10种)\n */\nexport const VIBRANT_PALETTES = [\n ['#7aa2f7', '#1a1b26', '#bb9af7'], // Tokyo Night\n ['#ff5f6d', '#ffc371', '#2193b0'], // Sunset\n ['#020617', '#1e293b', '#3b82f6'], // Deep Ocean\n ['#f43f5e', '#fbbf24', '#22c55e'], // Vibrant\n ['#a855f7', '#ec4899', '#3b82f6'], // Sweet Candy\n ['#10b981', '#064e3b', '#34d399'], // Emerald Forest\n ['#88c0d0', '#2e3440', '#5e81ac'], // Nord\n ['#f97316', '#7c3aed', '#06b6d4'], // Cyberpunk\n ['#9a4c78', '#f5cc36', '#d2d283'], // Purple Gold\n ['#f4cb37', '#5a3f5f', '#f5cc36'], // Golden Purple\n]\n\nexport function hexToRgb(hex: string): [number, number, number] {\n const r = Number.parseInt(hex.slice(1, 3), 16)\n const g = Number.parseInt(hex.slice(3, 5), 16)\n const b = Number.parseInt(hex.slice(5, 7), 16)\n return [r, g, b]\n}\n\n/**\n * 将十六进制颜色转换为归一化的RGB数组(0-1范围)\n * 用于WebGL shader\n */\nexport function hexToRgbNormalized(hex: string): [number, number, number] {\n const [r, g, b] = hexToRgb(hex)\n return [r / 255, g / 255, b / 255]\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return `#${[r, g, b].map(x => Math.max(0, Math.min(255, x)).toString(16).padStart(2, '0')).join('')}`\n}\n\nexport function adjustColor(\n hex: string,\n options: {\n brightness?: number\n offset?: [number, number, number]\n alpha?: number\n } = {},\n) {\n const { brightness = 1, offset = [0, 0, 0], alpha } = options\n const [r, g, b] = hexToRgb(hex)\n\n const nr = Math.floor(r * brightness + offset[0])\n const ng = Math.floor(g * brightness + offset[1])\n const nb = Math.floor(b * brightness + offset[2])\n\n let res = rgbToHex(nr, ng, nb)\n\n if (alpha !== undefined) {\n const a = Math.max(0, Math.min(255, Math.floor(alpha * 255)))\n .toString(16)\n .padStart(2, '0')\n res += a\n }\n\n return res\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n l /= 100\n const a = (s * Math.min(l, 1 - l)) / 100\n const f = (n: number) => {\n const k = (n + h / 30) % 12\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n return Math.round(255 * color)\n .toString(16)\n .padStart(2, '0')\n }\n return `#${f(0)}${f(8)}${f(4)}`\n}\n\nexport function generateHarmoniousPalette(\n count: number,\n options: {\n baseHue?: number\n saturation?: number\n lightness?: number\n } = {},\n): string[] {\n const {\n baseHue = Math.random() * 360,\n saturation = Math.random() * 40 + 40,\n lightness = Math.random() * 30 + 30,\n } = options\n\n const colors: string[] = []\n for (let i = 0; i < count; i++) {\n const h = (baseHue + (i * (360 / count))) % 360\n colors.push(hslToHex(h, saturation, lightness))\n }\n return colors\n}\n\n/**\n * 生成随机颜色数组\n * 30% 概率从预设配色中选取,70% 概率生成和谐配色\n * @param count 颜色数量\n * @param options 配置选项\n * @returns 颜色数组\n */\nexport function generateRandomPalette(\n count: number,\n options?: {\n baseHue?: number\n saturation?: number\n lightness?: number\n },\n): string[] {\n // 30% 概率从预设中选取,70% 概率生成谐波色\n if (hit(0.3)) {\n const palette = sample(VIBRANT_PALETTES)\n // 如果颜色数量匹配,直接返回;否则截取或重复\n if (palette.length >= count) {\n return palette.slice(0, count)\n }\n // 如果预设颜色不足,用和谐色补充\n const additional = generateHarmoniousPalette(count - palette.length, options)\n return [...palette, ...additional]\n }\n return generateHarmoniousPalette(count, options)\n}\n\nconst HEX_COLOR_RE = /^#([0-9a-fA-F]{6})$/\n\nexport function normalizeHexColor(value: string | undefined, fallback: string) {\n if (typeof value !== 'string') return fallback\n const trimmed = value.trim()\n return HEX_COLOR_RE.test(trimmed) ? trimmed : fallback\n}\n\nexport function safeHexToRgbNormalized(value: string, fallback: string): [number, number, number] {\n const color = normalizeHexColor(value, fallback)\n return hexToRgbNormalized(color)\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n modelValue: number\n label: string\n min?: number\n max?: number\n step?: number\n suffix?: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n min: 0,\n max: 100,\n step: 1,\n suffix: '',\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n}>()\n\nconst displayValue = computed(() => {\n const decimals = props.step < 1 ? Math.max(0, -Math.floor(Math.log10(props.step))) : 0\n const value = props.modelValue.toFixed(decimals)\n return props.suffix ? value + props.suffix : value\n})\n\nconst handleInput = (event: Event) => {\n const value = Number((event.target as HTMLInputElement).value)\n emit('update:modelValue', value)\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <div class=\"flex justify-between items-center px-1\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors\">\n {{ label }}\n </label>\n <span class=\"text-[11px] font-black font-mono text-white/40 group-hover/item:text-blue-400 transition-colors\">\n {{ displayValue }}\n </span>\n </div>\n <input\n type=\"range\"\n class=\"w-full accent-blue-500 bg-white/5 hover:bg-white/10 h-1.5 rounded-full appearance-none cursor-pointer transition-all border border-white/5\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n >\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles, minimal custom CSS */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.h-1\\.5{height:0.375rem;}\n.w-full{width:100%;}\n.flex{display:flex;}\n.flex-col{flex-direction:column;}\n.cursor-pointer{cursor:pointer;}\n.appearance-none{-webkit-appearance:none;appearance:none;}\n.items-center{align-items:center;}\n.justify-between{justify-content:space-between;}\n.gap-3{gap:0.75rem;}\n.border{border-width:1px;}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.rounded-full{border-radius:9999px;}\n.bg-white\\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-\\[11px\\]{font-size:11px;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/40,\n.group\\/item:hover .group-hover\\/item\\:text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.group\\/item:hover .group-hover\\/item\\:text-blue-400{--un-text-opacity:1;color:rgb(96 165 250 / var(--un-text-opacity)) /* #60a5fa */;}\n.font-black{font-weight:900;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}\n.uppercase{text-transform:uppercase;}\n.accent-blue-500{--un-accent-opacity:1;accent-color:rgb(59 130 246 / var(--un-accent-opacity)) /* #3b82f6 */;}\n.opacity-50{opacity:0.5;}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ninterface Props {\n modelValue: string\n label: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nconst handleChange = (event: Event) => {\n const value = (event.target as HTMLInputElement).value\n emit('update:modelValue', value)\n}\n\nconst openPicker = () => {\n if (!props.disabled && inputRef.value) {\n inputRef.value.click()\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1\">{{ label }}</label>\n <div class=\"flex gap-4 items-center\">\n <div \n class=\"relative w-10 h-10 rounded-lg overflow-hidden border border-white/10 shadow-lg cursor-pointer hover:border-white/20 transition-all\"\n @click=\"openPicker\"\n >\n <input\n ref=\"inputRef\"\n type=\"color\"\n class=\"absolute inset-0 w-[150%] h-[150%] -translate-x-1/4 -translate-y-1/4 cursor-pointer scale-125\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @input=\"handleChange\"\n >\n </div>\n <span class=\"text-xs font-mono font-bold text-white/40 bg-white/5 px-3 py-1.5 rounded-lg border border-white/5\">{{ modelValue }}</span>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-0{inset:0;}\n.h-\\[150\\%\\]{height:150%;}\n.h-10{height:2.5rem;}\n.w-\\[150\\%\\]{width:150%;}\n.w-10{width:2.5rem;}\n.flex{display:flex;}\n.flex-col{flex-direction:column;}\n.-translate-x-1\\/4{--un-translate-x:-25%;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.-translate-y-1\\/4{--un-translate-y:-25%;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.scale-125{--un-scale-x:1.25;--un-scale-y:1.25;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.cursor-pointer{cursor:pointer;}\n.items-center{align-items:center;}\n.gap-3{gap:0.75rem;}\n.gap-4{gap:1rem;}\n.overflow-hidden{overflow:hidden;}\n.border{border-width:1px;}\n.border-white\\/10{border-color:rgb(255 255 255 / 0.1);}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.hover\\:border-white\\/20:hover{border-color:rgb(255 255 255 / 0.2);}\n.rounded-lg{border-radius:0.5rem;}\n.bg-white\\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.px-3{padding-left:0.75rem;padding-right:0.75rem;}\n.py-1\\.5{padding-top:0.375rem;padding-bottom:0.375rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-xs{font-size:0.75rem;line-height:1rem;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string | number\">\nexport interface Option<V extends string | number = string | number> {\n value: V\n label: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n modelValue: T\n options: Option<T>[]\n label?: string\n disabled?: boolean\n className?: string\n}>(), {\n label: '',\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst handleChange = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value as T\n emit('update:modelValue', value)\n}\n</script>\n\n<template>\n <div class=\"select-control\" :class=\"[{ 'is-disabled': disabled }, className]\">\n <label v-if=\"label\" class=\"label-base select-label\">{{ label }}</label>\n <select\n class=\"select-input\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @change=\"handleChange\"\n >\n <option\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n</template>\n\n<style scoped>\n.select-control {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n transition: var(--transition-base);\n}\n\n.select-control.is-disabled {\n opacity: var(--opacity-disabled);\n pointer-events: none;\n}\n\n.select-label {\n padding: 0 var(--spacing-xs);\n}\n\n.select-input {\n width: 100%;\n padding: var(--spacing-sm) var(--spacing-md);\n border-radius: var(--radius-md);\n border: var(--border-width) solid var(--border-color-base);\n background: rgba(255, 255, 255, 0.05);\n color: rgba(255, 255, 255, 0.9);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n cursor: pointer;\n transition: var(--transition-all);\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='rgba(255,255,255,0.6)' d='M6 9L1 4h10z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right var(--spacing-sm) center;\n padding-right: calc(var(--spacing-md) + 16px);\n}\n\n.select-input:hover {\n background-color: rgba(255, 255, 255, 0.1);\n border-color: var(--border-color-hover);\n}\n\n.select-input:focus {\n outline: none;\n border-color: var(--border-color-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.select-input option {\n background: rgba(0, 0, 0, 0.95);\n color: white;\n padding: var(--spacing-sm);\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.border{border-width:1px;}\n.outline{outline-style:solid;}\n.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(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string | number\">\n/**\n * ButtonGroup - Multiple choice button group\n * Used as replacement for Select dropdown when options are limited\n */\nexport interface ButtonOption<V extends string | number = string | number> {\n value: V\n label: string\n disabled?: boolean\n}\n\n// Export alias for backward compatibility\nexport type Option<V extends string | number = string | number> = ButtonOption<V>\n\nconst props = withDefaults(defineProps<{\n modelValue: T\n options: ButtonOption<T>[]\n label?: string\n disabled?: boolean\n columns?: number\n layout?: 'horizontal' | 'vertical'\n className?: string\n}>(), {\n label: '',\n disabled: false,\n columns: 3,\n layout: 'vertical',\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst handleClick = (value: T, optionDisabled?: boolean) => {\n if (!props.disabled && !optionDisabled) {\n emit('update:modelValue', value)\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label v-if=\"label\" class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1\">\n {{ label }}\n </label>\n <div \n class=\"gap-2\"\n :class=\"[\n layout === 'vertical' ? 'flex flex-col' : 'flex flex-row'\n ]\"\n >\n <button\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n type=\"button\"\n class=\"py-2.5 text-[8px] font-bold border rounded-lg transition-all truncate px-1 shadow-sm cursor-pointer flex-1\"\n :class=\"[\n modelValue === option.value\n ? 'bg-blue-600 text-white border-blue-400/50 ring-1 ring-blue-400/30'\n : 'bg-white/[0.03] text-white/25 border-white/5 hover:bg-white/10 hover:text-white/60',\n { 'opacity-50 cursor-not-allowed': option.disabled }\n ]\"\n :disabled=\"option.disabled || disabled\"\n @click=\"handleClick(option.value, option.disabled)\"\n >\n {{ option.label }}\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.flex{display:flex;}\n.flex-1{flex:1 1 0%;}\n.flex-row{flex-direction:row;}\n.flex-col{flex-direction:column;}\n.cursor-pointer{cursor:pointer;}\n.cursor-not-allowed{cursor:not-allowed;}\n.gap-2{gap:0.5rem;}\n.gap-3{gap:0.75rem;}\n.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n.border{border-width:1px;}\n.border-blue-400\\/50{border-color:rgb(96 165 250 / 0.5);}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.rounded-lg{border-radius:0.5rem;}\n.bg-blue-600{--un-bg-opacity:1;background-color:rgb(37 99 235 / var(--un-bg-opacity)) /* #2563eb */;}\n.bg-white\\/\\[0\\.03\\]{background-color:rgb(255 255 255 / 0.03) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.py-2\\.5{padding-top:0.625rem;padding-bottom:0.625rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-\\[8px\\]{font-size:8px;}\n.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/25{color:rgb(255 255 255 / 0.25) /* #fff */;}\n.hover\\:text-white\\/60:hover{color:rgb(255 255 255 / 0.6) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-sm{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.ring-1{--un-ring-width:1px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.ring-blue-400\\/30{--un-ring-color:rgb(96 165 250 / 0.3) /* #60a5fa */;}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n modelValue: boolean\n label: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst handleToggle = () => {\n if (!props.disabled) {\n emit('update:modelValue', !props.modelValue)\n }\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-1 py-2 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors cursor-pointer\" @click=\"handleToggle\">\n {{ label }}\n </label>\n <button\n type=\"button\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n class=\"relative w-11 h-6 rounded-full border-0 transition-all duration-300 cursor-pointer backdrop-blur-md\"\n :class=\"modelValue \n ? 'bg-gradient-to-r from-blue-500 to-blue-600 shadow-lg shadow-blue-500/30' \n : 'bg-white/10 hover:bg-white/15 border border-white/10'\"\n :disabled=\"disabled\"\n @click=\"handleToggle\"\n >\n <!-- 内部阴影效果 -->\n <span class=\"absolute inset-0 rounded-full\" :class=\"modelValue ? 'shadow-inner' : ''\" />\n \n <!-- 滑动圆点 -->\n <span\n class=\"absolute top-[2px] left-[2px] w-5 h-5 bg-white rounded-full shadow-lg transition-all duration-300 flex items-center justify-center\"\n :class=\"modelValue ? 'translate-x-5' : 'translate-x-0'\"\n >\n <!-- 圆点内部渐变 -->\n <span class=\"absolute inset-[2px] rounded-full bg-gradient-to-br from-white to-gray-100\" />\n </span>\n </button>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-\\[2px\\]{inset:2px;}\n.inset-0{inset:0;}\n.left-\\[2px\\]{left:2px;}\n.top-\\[2px\\]{top:2px;}\n.h-5{height:1.25rem;}\n.h-6{height:1.5rem;}\n.w-11{width:2.75rem;}\n.w-5{width:1.25rem;}\n.flex{display:flex;}\n.translate-x-0{--un-translate-x:0;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.translate-x-5{--un-translate-x:1.25rem;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.cursor-pointer{cursor:pointer;}\n.items-center{align-items:center;}\n.justify-center{justify-content:center;}\n.justify-between{justify-content:space-between;}\n.border{border-width:1px;}\n.border-0{border-width:0px;}\n.border-white\\/10{border-color:rgb(255 255 255 / 0.1);}\n.rounded-full{border-radius:9999px;}\n.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity)) /* #fff */;}\n.bg-white\\/10{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.hover\\:bg-white\\/15:hover{background-color:rgb(255 255 255 / 0.15) /* #fff */;}\n.from-blue-500{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-white{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.to-blue-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.to-gray-100{--un-gradient-to-position:100%;--un-gradient-to:rgb(243 244 246 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.group\\/item:hover .group-hover\\/item\\:text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-blue-500\\/30{--un-shadow-color:rgb(59 130 246 / 0.3) /* #3b82f6 */;}\n.shadow-inner{--un-shadow:inset 0 2px 4px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.duration-300{transition-duration:300ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string\">\nimport { computed } from 'vue'\n\nexport interface SubTabItem<T> {\n id: T\n label: string\n}\n\nconst props = defineProps<{\n tabs: SubTabItem<T>[]\n modelValue: T\n rows?: number\n className?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst normalizedRows = computed(() => {\n const r = Math.floor(props.rows || 1)\n return r > 1 ? r : 1\n})\n\nconst columns = computed(() => {\n const r = normalizedRows.value\n return r > 1 ? Math.ceil(props.tabs.length / r) : 0\n})\n\nconst containerStyle = computed(() => {\n const r = normalizedRows.value\n if (r <= 1) return undefined\n return {\n gridTemplateColumns: `repeat(${columns.value}, minmax(0, 1fr))`,\n }\n})\n\nconst handleTabClick = (tabId: T) => {\n emit('update:modelValue', tabId)\n}\n</script>\n\n<template>\n <div class=\"p-1 bg-gradient-to-b from-black/40 to-black/20 rounded-xl border border-white/8 shadow-lg backdrop-blur-md relative overflow-hidden\" :class=\"className\">\n <div class=\"absolute inset-0 bg-gradient-to-r from-blue-500/5 via-purple-500/5 to-blue-500/5 opacity-50\" />\n <div\n class=\"relative z-10 gap-1\"\n :class=\"normalizedRows > 1 ? 'grid' : 'flex'\"\n :style=\"containerStyle\"\n >\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n class=\"py-2 text-[9px] font-black uppercase tracking-[0.12em] rounded-lg transition-all duration-300 cursor-pointer relative overflow-hidden group\"\n :class=\"[\n normalizedRows > 1 ? '' : 'flex-1',\n modelValue === tab.id\n ? 'bg-gradient-to-br from-blue-500 to-blue-600 text-white shadow-md shadow-blue-500/20'\n : 'bg-white/[0.04] text-white/45 hover:text-white/80 hover:bg-white/10 border border-white/5',\n ]\"\n @click=\"handleTabClick(tab.id)\"\n >\n <div\n v-if=\"modelValue === tab.id\"\n class=\"absolute inset-0 bg-gradient-to-br from-white/25 via-transparent to-transparent\"\n />\n <span class=\"relative z-10\">{{ tab.label }}</span>\n <div\n class=\"absolute inset-0 bg-gradient-to-t from-blue-400/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-0{inset:0;}\n.z-10{z-index:10;}\n.grid{display:grid;}\n.flex{display:flex;}\n.flex-1{flex:1 1 0%;}\n.cursor-pointer{cursor:pointer;}\n.gap-1{gap:0.25rem;}\n.overflow-hidden{overflow:hidden;}\n.border{border-width:1px;}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.border-white\\/8{border-color:rgb(255 255 255 / 0.08);}\n.rounded-lg{border-radius:0.5rem;}\n.rounded-xl{border-radius:0.75rem;}\n.bg-white\\/\\[0\\.04\\]{background-color:rgb(255 255 255 / 0.04) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.from-black\\/40{--un-gradient-from-position:0%;--un-gradient-from:rgb(0 0 0 / 0.4) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-400\\/10{--un-gradient-from-position:0%;--un-gradient-from:rgb(96 165 250 / 0.1) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(96 165 250 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-500{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-500\\/5{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / 0.05) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-white\\/25{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / 0.25) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.via-purple-500\\/5{--un-gradient-via-position:50%;--un-gradient-to:rgb(168 85 247 / 0);--un-gradient-stops:var(--un-gradient-from), rgb(168 85 247 / 0.05) var(--un-gradient-via-position), var(--un-gradient-to);}\n.via-transparent{--un-gradient-via-position:50%;--un-gradient-to:rgb(255 255 255 / 0);--un-gradient-stops:var(--un-gradient-from), transparent var(--un-gradient-via-position), var(--un-gradient-to);}\n.to-black\\/20{--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0.2) var(--un-gradient-to-position);}\n.to-blue-500\\/5{--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0.05) var(--un-gradient-to-position);}\n.to-blue-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.to-transparent{--un-gradient-to-position:100%;--un-gradient-to:transparent var(--un-gradient-to-position);}\n.bg-gradient-to-b{--un-gradient-shape:to bottom in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-t{--un-gradient-shape:to top in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.p-1{padding:0.25rem;}\n.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}\n.text-\\[9px\\]{font-size:9px;}\n.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}\n.text-white\\/45{color:rgb(255 255 255 / 0.45) /* #fff */;}\n.hover\\:text-white\\/80:hover{color:rgb(255 255 255 / 0.8) /* #fff */;}\n.font-black{font-weight:900;}\n.tracking-\\[0\\.12em\\]{letter-spacing:0.12em;}\n.uppercase{text-transform:uppercase;}\n.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4;}\n.opacity-0{opacity:0;}\n.opacity-50{opacity:0.5;}\n.group:hover .group-hover\\:opacity-100{opacity:1;}\n.shadow-blue-500\\/20{--un-shadow-color:rgb(59 130 246 / 0.2) /* #3b82f6 */;}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.shadow-md{--un-shadow:var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.duration-300{transition-duration:300ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n title?: string\n collapsible?: boolean\n collapsed?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n collapsible: false,\n collapsed: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean]\n}>()\n\nconst toggleCollapse = () => {\n if (props.collapsible) {\n emit('update:collapsed', !props.collapsed)\n }\n}\n</script>\n\n<template>\n <div class=\"panel-container panel-base\" :class=\"className\">\n <div\n v-if=\"title || $slots.header\"\n class=\"panel-header\"\n :class=\"{ 'collapsible': collapsible }\"\n @click=\"toggleCollapse\"\n >\n <slot name=\"header\">\n <h3 class=\"panel-title\">{{ title }}</h3>\n </slot>\n <span v-if=\"collapsible\" class=\"collapse-icon\" :class=\"{ 'collapsed': collapsed }\">\n ▼\n </span>\n </div>\n <div v-show=\"!collapsed\" class=\"panel-content\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.panel-container {\n width: 100%;\n color: white;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--spacing-md);\n border-bottom: var(--border-width) solid var(--border-color-base);\n}\n\n.panel-header.collapsible {\n cursor: pointer;\n user-select: none;\n transition: var(--transition-base);\n}\n\n.panel-header.collapsible:hover {\n background: rgba(255, 255, 255, 0.03);\n}\n\n.panel-title {\n margin: 0;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: rgba(255, 255, 255, 0.9);\n}\n\n.collapse-icon {\n font-size: var(--font-size-xs);\n color: rgba(255, 255, 255, 0.5);\n transition: transform var(--transition-base);\n}\n\n.collapse-icon.collapsed {\n transform: rotate(-90deg);\n}\n\n.panel-content {\n padding: var(--spacing-md);\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.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(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n title?: string\n spacing?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n spacing: 'md',\n className: '',\n})\n\nconst spacingClass = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n</script>\n\n<template>\n <div class=\"section-container\" :class=\"[spacingClass[spacing], className]\">\n <h4 v-if=\"title\" class=\"section-title label-base\">\n {{ title }}\n </h4>\n <div class=\"section-content\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.section-container {\n display: flex;\n flex-direction: column;\n}\n\n.gap-2 {\n gap: var(--spacing-sm);\n}\n\n.gap-4 {\n gap: var(--spacing-md);\n}\n\n.gap-6 {\n gap: var(--spacing-lg);\n}\n\n.section-title {\n padding: 0 var(--spacing-xs);\n margin: 0;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: inherit;\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.gap-2{gap:0.5rem;}\n.gap-4{gap:1rem;}\n.gap-6{gap:1.5rem;}</style>","/**\n * useI18n - 国际化Hook\n * 提供统一的国际化访问方法\n */\n\nimport { computed, type ComputedRef } from 'vue'\n\nexport interface I18nMessages {\n [key: string]: any\n}\n\nexport interface UseI18nOptions {\n messages: Record<string, I18nMessages>\n locale: ComputedRef<string> | string\n fallbackLocale?: string\n}\n\nexport function useI18n(options: UseI18nOptions) {\n const { messages, fallbackLocale = 'en' } = options\n \n const currentLocale = computed(() => {\n const locale = typeof options.locale === 'string' ? options.locale : options.locale.value\n return locale || fallbackLocale\n })\n\n /**\n * 翻译函数 - 支持路径访问\n * @param path - 翻译键路径,如 'tabs.settings'\n * @returns 翻译后的文本\n */\n const t = (path: string): string => {\n const locale = currentLocale.value\n const dict = messages[locale] || messages[fallbackLocale]\n \n if (!dict) {\n console.warn(`[useI18n] No messages found for locale: ${locale}`)\n return path\n }\n \n const keys = path.split('.')\n let result: any = dict\n \n for (const key of keys) {\n if (result && typeof result === 'object' && key in result) {\n result = result[key]\n } else {\n console.warn(`[useI18n] Translation not found: ${path} (locale: ${locale})`)\n return path\n }\n }\n \n return typeof result === 'string' ? result : path\n }\n\n /**\n * 翻译对象 - 用于元数据中的多语言对象\n * @param item - 包含多语言的对象,如 { en: 'Hello', 'zh-CN': '你好' }\n * @returns 当前语言的文本\n */\n const tObj = (item: Record<string, string>): string => {\n const locale = currentLocale.value\n return item[locale] || item[fallbackLocale] || item.en || ''\n }\n\n return {\n t,\n tObj,\n locale: currentLocale,\n }\n}\n"],"names":["clampNumber","value","min","max","normalizeIntRange","fallback","rand","precision","val","randInt","sample","array","hit","chance","shortId","length","chars","result","i","VIBRANT_PALETTES","hexToRgb","hex","r","g","b","hexToRgbNormalized","rgbToHex","x","adjustColor","options","brightness","offset","alpha","nr","ng","nb","res","a","hslToHex","h","s","l","f","n","k","color","generateHarmoniousPalette","count","baseHue","saturation","lightness","colors","generateRandomPalette","palette","additional","HEX_COLOR_RE","normalizeHexColor","trimmed","safeHexToRgbNormalized","props","__props","emit","__emit","displayValue","computed","decimals","handleInput","event","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","inputRef","ref","handleChange","openPicker","_hoisted_4","_Fragment","_renderList","option","handleClick","optionDisabled","$event","handleToggle","normalizedRows","columns","containerStyle","handleTabClick","tabId","tab","_openBlock","toggleCollapse","$slots","_renderSlot","_ctx","_withDirectives","spacingClass","useI18n","messages","fallbackLocale","currentLocale","path","locale","dict","keys","key","item"],"mappings":";AAAO,MAAMA,IAAc,CAACC,GAAeC,GAAaC,MAClD,MAAMF,CAAK,IAAUC,IAClB,KAAK,IAAIC,GAAK,KAAK,IAAID,GAAKD,CAAK,CAAC,GAG9BG,KAAoB,CAACH,GAA2BC,GAAaC,GAAaE,MAE9EL,EAAY,KAAK,MADP,OAAOC,KAAU,WAAWA,IAAQI,CACf,GAAGH,GAAKC,CAAG;ACH5C,SAASG,GAAKJ,GAAaC,GAAaI,IAAY,GAAW;AACpE,QAAMC,IAAM,KAAK,OAAA,KAAYL,IAAMD,KAAOA;AAC1C,SAAO,OAAOM,EAAI,QAAQD,CAAS,CAAC;AACtC;AAEO,SAASE,GAAQP,GAAaC,GAAqB;AACxD,SAAO,KAAK,MAAM,KAAK,OAAA,KAAYA,IAAMD,IAAM,EAAE,IAAIA;AACvD;AAEO,SAASQ,EAAUC,GAAe;AACvC,SAAOA,EAAM,KAAK,MAAM,KAAK,WAAWA,EAAM,MAAM,CAAC;AACvD;AAEO,SAASC,EAAIC,GAAyB;AAC3C,SAAO,KAAK,WAAWA;AACzB;AAEO,SAASC,GAAQC,IAAS,GAAW;AAC1C,QAAMC,IAAQ;AACd,MAAIC,IAAS;AACb,WAASC,IAAI,GAAGA,IAAIH,GAAQG;AAC1B,IAAAD,KAAUD,EAAM,OAAO,KAAK,MAAM,KAAK,OAAA,IAAWA,EAAM,MAAM,CAAC;AAEjE,SAAOC;AACT;ACnBO,MAAME,IAAmB;AAAA,EAC9B,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAAA,EAChC,CAAC,WAAW,WAAW,SAAS;AAAA;AAClC;AAEO,SAASC,EAASC,GAAuC;AAC9D,QAAMC,IAAI,OAAO,SAASD,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE,GACvCE,IAAI,OAAO,SAASF,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE,GACvCG,IAAI,OAAO,SAASH,EAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AAC7C,SAAO,CAACC,GAAGC,GAAGC,CAAC;AACjB;AAMO,SAASC,EAAmBJ,GAAuC;AACxE,QAAM,CAACC,GAAGC,GAAGC,CAAC,IAAIJ,EAASC,CAAG;AAC9B,SAAO,CAACC,IAAI,KAAKC,IAAI,KAAKC,IAAI,GAAG;AACnC;AAEO,SAASE,EAASJ,GAAWC,GAAWC,GAAmB;AAChE,SAAO,IAAI,CAACF,GAAGC,GAAGC,CAAC,EAAE,IAAI,CAAAG,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKA,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACrG;AAEO,SAASC,GACdP,GACAQ,IAII,IACJ;AACA,QAAM,EAAE,YAAAC,IAAa,GAAG,QAAAC,IAAS,CAAC,GAAG,GAAG,CAAC,GAAG,OAAAC,EAAA,IAAUH,GAChD,CAAC,GAAGN,GAAGC,CAAC,IAAIJ,EAASC,CAAG,GAExBY,IAAK,KAAK,MAAM,IAAIH,IAAaC,EAAO,CAAC,CAAC,GAC1CG,IAAK,KAAK,MAAMX,IAAIO,IAAaC,EAAO,CAAC,CAAC,GAC1CI,IAAK,KAAK,MAAMX,IAAIM,IAAaC,EAAO,CAAC,CAAC;AAEhD,MAAIK,IAAMV,EAASO,GAAIC,GAAIC,CAAE;AAE7B,MAAIH,MAAU,QAAW;AACvB,UAAMK,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAML,IAAQ,GAAG,CAAC,CAAC,EACzD,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAClB,IAAAI,KAAOC;AAAA,EACT;AAEA,SAAOD;AACT;AAEO,SAASE,EAASC,GAAWC,GAAWC,GAAmB;AAChE,EAAAA,KAAK;AACL,QAAMJ,IAAKG,IAAI,KAAK,IAAIC,GAAG,IAAIA,CAAC,IAAK,KAC/BC,IAAI,CAACC,MAAc;AACvB,UAAMC,KAAKD,IAAIJ,IAAI,MAAM,IACnBM,IAAQJ,IAAIJ,IAAI,KAAK,IAAI,KAAK,IAAIO,IAAI,GAAG,IAAIA,GAAG,CAAC,GAAG,EAAE;AAC5D,WAAO,KAAK,MAAM,MAAMC,CAAK,EAC1B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAAA,EACpB;AACA,SAAO,IAAIH,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC;AAC/B;AAEO,SAASI,EACdC,GACAlB,IAII,IACM;AACV,QAAM;AAAA,IACJ,SAAAmB,IAAU,KAAK,OAAA,IAAW;AAAA,IAC1B,YAAAC,IAAa,KAAK,OAAA,IAAW,KAAK;AAAA,IAClC,WAAAC,IAAY,KAAK,OAAA,IAAW,KAAK;AAAA,EAAA,IAC/BrB,GAEEsB,IAAmB,CAAA;AACzB,WAASjC,IAAI,GAAGA,IAAI6B,GAAO7B,KAAK;AAC9B,UAAMqB,KAAKS,IAAW9B,KAAK,MAAM6B,MAAW;AAC5C,IAAAI,EAAO,KAAKb,EAASC,GAAGU,GAAYC,CAAS,CAAC;AAAA,EAChD;AACA,SAAOC;AACT;AASO,SAASC,GACdL,GACAlB,GAKU;AAEV,MAAIjB,EAAI,GAAG,GAAG;AACZ,UAAMyC,IAAU3C,EAAOS,CAAgB;AAEvC,QAAIkC,EAAQ,UAAUN;AACpB,aAAOM,EAAQ,MAAM,GAAGN,CAAK;AAG/B,UAAMO,IAAaR,EAA0BC,IAAQM,EAAQ,QAAQxB,CAAO;AAC5E,WAAO,CAAC,GAAGwB,GAAS,GAAGC,CAAU;AAAA,EACnC;AACA,SAAOR,EAA0BC,GAAOlB,CAAO;AACjD;AAEA,MAAM0B,IAAe;AAEd,SAASC,EAAkBvD,GAA2BI,GAAkB;AAC7E,MAAI,OAAOJ,KAAU,SAAU,QAAOI;AACtC,QAAMoD,IAAUxD,EAAM,KAAA;AACtB,SAAOsD,EAAa,KAAKE,CAAO,IAAIA,IAAUpD;AAChD;AAEO,SAASqD,GAAuBzD,GAAeI,GAA4C;AAChG,QAAMwC,IAAQW,EAAkBvD,GAAOI,CAAQ;AAC/C,SAAOoB,EAAmBoB,CAAK;AACjC;;;;;;;;;;;;;;;AClIA,UAAMc,IAAQC,GASRC,IAAOC,GAIPC,IAAeC,EAAS,MAAM;AAClC,YAAMC,IAAWN,EAAM,OAAO,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMA,EAAM,IAAI,CAAC,CAAC,IAAI,GAC/E1D,IAAQ0D,EAAM,WAAW,QAAQM,CAAQ;AAC/C,aAAON,EAAM,SAAS1D,IAAQ0D,EAAM,SAAS1D;AAAA,IAC/C,CAAC,GAEKiE,IAAc,CAACC,MAAiB;AACpC,YAAMlE,IAAQ,OAAQkE,EAAM,OAA4B,KAAK;AAC7D,MAAAN,EAAK,qBAAqB5D,CAAK;AAAA,IACjC;2BAIEmE,EAmBM,OAAA;AAAA,MAnBD,OAAKC,EAAA,CAAC,kCAAgC,CAAA,EAAA,kCAA8CT,EAAA,SAAA,GAAYA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MAC5GU,EAOM,OAPNC,GAOM;AAAA,QANJD,EAEQ,SAFRE,GAEQC,EADHb,EAAA,KAAK,GAAA,CAAA;AAAA,QAEVU,EAEO,QAFPI,GAEOD,EADFV,EAAA,KAAY,GAAA,CAAA;AAAA,MAAA;MAGnBO,EASC,SAAA;AAAA,QARC,MAAK;AAAA,QACL,OAAM;AAAA,QACL,KAAKV,EAAA;AAAA,QACL,KAAKA,EAAA;AAAA,QACL,MAAMA,EAAA;AAAA,QACN,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,SAAOM;AAAA,MAAA;;;;;;;;;;;;;;;;;;AC/Cd,UAAMP,IAAQC,GAKRC,IAAOC,GAIPa,IAAWC,EAA6B,IAAI,GAE5CC,IAAe,CAACV,MAAiB;AACrC,YAAMlE,IAASkE,EAAM,OAA4B;AACjD,MAAAN,EAAK,qBAAqB5D,CAAK;AAAA,IACjC,GAEM6E,IAAa,MAAM;AACvB,MAAI,CAACnB,EAAM,YAAYgB,EAAS,SAC9BA,EAAS,MAAM,MAAA;AAAA,IAEnB;2BAIEP,EAkBM,OAAA;AAAA,MAlBD,OAAKC,EAAA,CAAC,kCAAgC,CAAA,EAAA,kCAA8CT,EAAA,SAAA,GAAYA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MAC5GU,EAAsG,SAAtGC,GAAsGE,EAAhBb,EAAA,KAAK,GAAA,CAAA;AAAA,MAC3FU,EAeM,OAfNE,GAeM;AAAA,QAdJF,EAYM,OAAA;AAAA,UAXJ,OAAM;AAAA,UACL,SAAOQ;AAAA,QAAA;UAERR,EAOC,SAAA;AAAA,qBANK;AAAA,YAAJ,KAAIK;AAAA,YACJ,MAAK;AAAA,YACL,OAAM;AAAA,YACL,OAAOf,EAAA;AAAA,YACP,UAAUA,EAAA;AAAA,YACV,SAAOiB;AAAA,UAAA;;QAGZP,EAAuI,QAAvIS,GAAuIN,EAApBb,EAAA,UAAU,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;AC/BnI,UAAMC,IAAOC,GAIPe,IAAe,CAACV,MAAiB;AACrC,YAAMlE,IAASkE,EAAM,OAA6B;AAClD,MAAAN,EAAK,qBAAqB5D,CAAK;AAAA,IACjC;2BAIEmE,EAiBM,OAAA;AAAA,MAjBD,OAAKC,EAAA,CAAC,kBAAgB,CAAA,EAAA,eAA2BT,EAAA,SAAA,GAAYA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MAC5DA,EAAA,cAAbQ,EAAuE,SAAvEG,GAAuEE,EAAhBb,EAAA,KAAK,GAAA,CAAA;MAC5DU,EAcS,UAAA;AAAA,QAbP,OAAM;AAAA,QACL,OAAOV,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,UAAQiB;AAAA,MAAA;gBAETT,EAOSY,GAAA,MAAAC,EANUrB,EAAA,SAAO,CAAjBsB,YADTd,EAOS,UAAA;AAAA,UALN,KAAK,OAAOc,EAAO,KAAK;AAAA,UACxB,OAAOA,EAAO;AAAA,UACd,UAAUA,EAAO;AAAA,QAAA,GAEfT,EAAAS,EAAO,KAAK,GAAA,GAAAR,CAAA;;;;;;;;;;;;;;;;;;;;AC9BvB,UAAMf,IAAQC,GAgBRC,IAAOC,GAIPqB,IAAc,CAAClF,GAAUmF,MAA6B;AAC1D,MAAI,CAACzB,EAAM,YAAY,CAACyB,KACtBvB,EAAK,qBAAqB5D,CAAK;AAAA,IAEnC;2BAIEmE,EA2BM,OAAA;AAAA,MA3BD,OAAKC,EAAA,CAAC,uBAAqB,CAAA,EAAA,kCAA8CT,EAAA,SAAA,GAAYA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MACpFA,EAAA,cAAbQ,EAEQ,SAFRG,IAEQE,EADHb,EAAA,KAAK,GAAA,CAAA;MAEVU,EAsBM,OAAA;AAAA,QArBJ,UAAM,SAAO;AAAA,UACKV,EAAA,WAAM,aAAA,kBAAA;AAAA,QAAA;;gBAIxBQ,EAeSY,GAAA,MAAAC,EAdUrB,EAAA,SAAO,CAAjBsB,YADTd,EAeS,UAAA;AAAA,UAbN,KAAK,OAAOc,EAAO,KAAK;AAAA,UACzB,MAAK;AAAA,UACL,UAAM,8GAA4G;AAAA,YAC9FtB,EAAA,eAAesB,EAAO;YAAyO,EAAA,iCAAAA,EAAO,SAAA;AAAA,UAAQ;UAMjS,UAAUA,EAAO,YAAYtB,EAAA;AAAA,UAC7B,SAAK,CAAAyB,MAAEF,EAAYD,EAAO,OAAOA,EAAO,QAAQ;AAAA,QAAA,GAE9CT,EAAAS,EAAO,KAAK,GAAA,IAAAV,EAAA;;;;;;;;;;;;;;AC1DvB,UAAMb,IAAQC,GAKRC,IAAOC,GAIPwB,IAAe,MAAM;AACzB,MAAK3B,EAAM,YACTE,EAAK,qBAAqB,CAACF,EAAM,UAAU;AAAA,IAE/C;2BAIES,EA2BM,OAAA;AAAA,MA3BD,OAAKC,EAAA,CAAC,0DAAwD,CAAA,EAAA,kCAA8CT,EAAA,SAAA,GAAYA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MACpIU,EAEQ,SAAA;AAAA,QAFD,OAAM;AAAA,QAAkI,SAAOgB;AAAA,MAAA,KACjJ1B,EAAA,KAAK,GAAA,CAAA;AAAA,MAEVU,EAsBS,UAAA;AAAA,QArBP,MAAK;AAAA,QACL,MAAK;AAAA,QACJ,gBAAcV,EAAA;AAAA,QACf,OAAKS,EAAA,CAAC,uGACET,EAAA;QAGP,UAAUA,EAAA;AAAA,QACV,SAAO0B;AAAA,MAAA;QAGRhB,EAAwF,QAAA;AAAA,UAAlF,OAAKD,EAAA,CAAC,iCAAwCT,EAAA,aAAU,iBAAA,EAAA,CAAA;AAAA,QAAA;QAG9DU,EAMO,QAAA;AAAA,UALL,OAAKD,EAAA,CAAC,sIACET,EAAA,aAAU,kBAAA,eAAA,CAAA;AAAA,QAAA;UAGlBU,EAA2F,QAAA,EAArF,OAAM,6EAAA,GAA4E,MAAA,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;ACzChG,UAAMX,IAAQC,GAORC,IAAOC,GAIPyB,IAAiBvB,EAAS,MAAM;AACpC,YAAM1C,IAAI,KAAK,MAAMqC,EAAM,QAAQ,CAAC;AACpC,aAAOrC,IAAI,IAAIA,IAAI;AAAA,IACrB,CAAC,GAEKkE,IAAUxB,EAAS,MAAM;AAC7B,YAAM1C,IAAIiE,EAAe;AACzB,aAAOjE,IAAI,IAAI,KAAK,KAAKqC,EAAM,KAAK,SAASrC,CAAC,IAAI;AAAA,IACpD,CAAC,GAEKmE,IAAiBzB,EAAS,MAAM;AAEpC,UAAI,EADMuB,EAAe,SAChB;AACT,eAAO;AAAA,UACL,qBAAqB,UAAUC,EAAQ,KAAK;AAAA,QAAA;AAAA,IAEhD,CAAC,GAEKE,IAAiB,CAACC,MAAa;AACnC,MAAA9B,EAAK,qBAAqB8B,CAAK;AAAA,IACjC;2BAIEvB,EA6BM,OAAA;AAAA,MA7BD,OAAKC,EAAA,CAAC,uIAA8IT,EAAA,SAAS,CAAA;AAAA,IAAA;sBAChKU,EAA2G,OAAA,EAAtG,OAAM,8FAAA,GAA6F,MAAA,EAAA;AAAA,MACxGA,EA0BM,OAAA;AAAA,QAzBJ,OAAKD,EAAA,CAAC,uBACEkB,EAAA,QAAc,IAAA,SAAA,MAAA,CAAA;AAAA,QACrB,SAAOE,EAAA,KAAc;AAAA,MAAA;gBAEtBrB,EAoBSY,GAAA,MAAAC,EAnBOrB,EAAA,MAAI,CAAXgC,YADTxB,EAoBS,UAAA;AAAA,UAlBN,KAAKwB,EAAI;AAAA,UACV,UAAM,+IAA6I;AAAA,YAC/HL,EAAA,QAAc,IAAA,KAAA;AAAA,YAAgC3B,EAAA,eAAegC,EAAI;;UAMpF,SAAK,CAAAP,MAAEK,EAAeE,EAAI,EAAE;AAAA,QAAA;UAGrBhC,EAAA,eAAegC,EAAI,MAD3BC,EAAA,GAAAzB,EAGE,OAHFI,EAGE;UACFF,EAAkD,QAAlDI,IAAkDD,EAAnBmB,EAAI,KAAK,GAAA,CAAA;AAAA,0BACxCtB,EAEE,OAAA,EADA,OAAM,yIAAqI,MAAA,EAAA;AAAA,QAAA;;;;;;;;;;;;;;AC5DrJ,UAAMX,IAAQC,GAORC,IAAOC,GAIPgC,IAAiB,MAAM;AAC3B,MAAInC,EAAM,eACRE,EAAK,oBAAoB,CAACF,EAAM,SAAS;AAAA,IAE7C;2BAIES,EAiBM,OAAA;AAAA,MAjBD,OAAKC,EAAA,CAAC,8BAAqCT,EAAA,SAAS,CAAA;AAAA,IAAA;MAE/CA,EAAA,SAASmC,EAAAA,OAAO,eADxB3B,EAYM,OAAA;AAAA;QAVJ,OAAKC,EAAA,CAAC,gBAAc,EAAA,aACKT,EAAA,YAAA,CAAW,CAAA;AAAA,QACnC,SAAOkC;AAAA,MAAA;QAERE,EAEOC,wBAFP,MAEO;AAAA,UADL3B,EAAwC,MAAxCC,IAAwCE,EAAbb,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;QAEtBA,EAAA,oBAAZQ,EAEO,QAAA;AAAA;UAFkB,OAAKC,EAAA,CAAC,iBAAe,EAAA,WAAwBT,EAAA,WAAS,CAAA;AAAA,QAAA,GAAI,OAEnF,CAAA;;MAEFsC,EAAA5B,EAEM,OAFNE,IAEM;AAAA,QADJwB,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;aADIrC,EAAA,SAAS;AAAA,MAAA;;;;;;;;;;;;;;AC5B3B,UAAMuC,IAAe;AAAA,MACnB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;2BAKJ/B,EAOM,OAAA;AAAA,MAPD,UAAM,qBAAmB,CAAU+B,EAAavC,EAAA,OAAO,GAAGA,EAAA,SAAS,CAAA,CAAA;AAAA,IAAA;MAC5DA,EAAA,cAAVQ,EAEK,MAFLG,IAEKE,EADAb,EAAA,KAAK,GAAA,CAAA;MAEVU,EAEM,OAFNE,IAEM;AAAA,QADJwB,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;;;;ACTP,SAASG,GAAQvE,GAAyB;AAC/C,QAAM,EAAE,UAAAwE,GAAU,gBAAAC,IAAiB,KAAA,IAASzE,GAEtC0E,IAAgBvC,EAAS,OACd,OAAOnC,EAAQ,UAAW,WAAWA,EAAQ,SAASA,EAAQ,OAAO,UACnEyE,CAClB;AAyCD,SAAO;AAAA,IACL,GAnCQ,CAACE,MAAyB;AAClC,YAAMC,IAASF,EAAc,OACvBG,IAAOL,EAASI,CAAM,KAAKJ,EAASC,CAAc;AAExD,UAAI,CAACI;AACH,uBAAQ,KAAK,2CAA2CD,CAAM,EAAE,GACzDD;AAGT,YAAMG,IAAOH,EAAK,MAAM,GAAG;AAC3B,UAAIvF,IAAcyF;AAElB,iBAAWE,KAAOD;AAChB,YAAI1F,KAAU,OAAOA,KAAW,YAAY2F,KAAO3F;AACjD,UAAAA,IAASA,EAAO2F,CAAG;AAAA;AAEnB,yBAAQ,KAAK,oCAAoCJ,CAAI,aAAaC,CAAM,GAAG,GACpED;AAIX,aAAO,OAAOvF,KAAW,WAAWA,IAASuF;AAAA,IAC/C;AAAA,IAcE,MAPW,CAACK,MAAyC;AACrD,YAAMJ,IAASF,EAAc;AAC7B,aAAOM,EAAKJ,CAAM,KAAKI,EAAKP,CAAc,KAAKO,EAAK,MAAM;AAAA,IAC5D;AAAA,IAKE,QAAQN;AAAA,EAAA;AAEZ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var a=document.createElement("style");a.appendChild(document.createTextNode(`[data-v-518e4603],[data-v-518e4603]:before,[data-v-518e4603]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-518e4603]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.pointer-events-none[data-v-518e4603]{pointer-events:none}.h-1\\.5[data-v-518e4603]{height:.375rem}.w-full[data-v-518e4603]{width:100%}.flex[data-v-518e4603]{display:flex}.flex-col[data-v-518e4603]{flex-direction:column}.cursor-pointer[data-v-518e4603]{cursor:pointer}.appearance-none[data-v-518e4603]{-webkit-appearance:none;-moz-appearance:none;appearance:none}.items-center[data-v-518e4603]{align-items:center}.justify-between[data-v-518e4603]{justify-content:space-between}.gap-3[data-v-518e4603]{gap:.75rem}.border[data-v-518e4603]{border-width:1px}.border-white\\/5[data-v-518e4603]{border-color:#ffffff0d}.rounded-full[data-v-518e4603]{border-radius:9999px}.bg-white\\/5[data-v-518e4603]{background-color:#ffffff0d}.hover\\:bg-white\\/10[data-v-518e4603]:hover{background-color:#ffffff1a}.px-1[data-v-518e4603]{padding-left:.25rem;padding-right:.25rem}.text-\\[10px\\][data-v-518e4603]{font-size:10px}.text-\\[11px\\][data-v-518e4603]{font-size:11px}.text-white\\/20[data-v-518e4603]{color:#fff3}.text-white\\/40[data-v-518e4603],.group\\/item:hover .group-hover\\/item\\:text-white\\/40[data-v-518e4603]{color:#fff6}.group\\/item:hover .group-hover\\/item\\:text-blue-400[data-v-518e4603]{--un-text-opacity:1;color:rgb(96 165 250 / var(--un-text-opacity))}.font-black[data-v-518e4603]{font-weight:900}.font-bold[data-v-518e4603]{font-weight:700}.tracking-\\[0\\.2em\\][data-v-518e4603]{letter-spacing:.2em}.font-mono[data-v-518e4603]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.uppercase[data-v-518e4603]{text-transform:uppercase}.accent-blue-500[data-v-518e4603]{--un-accent-opacity:1;accent-color:rgb(59 130 246 / var(--un-accent-opacity))}.opacity-50[data-v-518e4603]{opacity:.5}.transition-all[data-v-518e4603]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors[data-v-518e4603]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}[data-v-eebdf2f8],[data-v-eebdf2f8]:before,[data-v-eebdf2f8]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-eebdf2f8]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.pointer-events-none[data-v-eebdf2f8]{pointer-events:none}.absolute[data-v-eebdf2f8]{position:absolute}.relative[data-v-eebdf2f8]{position:relative}.inset-0[data-v-eebdf2f8]{top:0;right:0;bottom:0;left:0}.h-\\[150\\%\\][data-v-eebdf2f8]{height:150%}.h-10[data-v-eebdf2f8]{height:2.5rem}.w-\\[150\\%\\][data-v-eebdf2f8]{width:150%}.w-10[data-v-eebdf2f8]{width:2.5rem}.flex[data-v-eebdf2f8]{display:flex}.flex-col[data-v-eebdf2f8]{flex-direction:column}.-translate-x-1\\/4[data-v-eebdf2f8]{--un-translate-x:-25%;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.-translate-y-1\\/4[data-v-eebdf2f8]{--un-translate-y:-25%;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.scale-125[data-v-eebdf2f8]{--un-scale-x:1.25;--un-scale-y:1.25;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer[data-v-eebdf2f8]{cursor:pointer}.items-center[data-v-eebdf2f8]{align-items:center}.gap-3[data-v-eebdf2f8]{gap:.75rem}.gap-4[data-v-eebdf2f8]{gap:1rem}.overflow-hidden[data-v-eebdf2f8]{overflow:hidden}.border[data-v-eebdf2f8]{border-width:1px}.border-white\\/10[data-v-eebdf2f8]{border-color:#ffffff1a}.border-white\\/5[data-v-eebdf2f8]{border-color:#ffffff0d}.hover\\:border-white\\/20[data-v-eebdf2f8]:hover{border-color:#fff3}.rounded-lg[data-v-eebdf2f8]{border-radius:.5rem}.bg-white\\/5[data-v-eebdf2f8]{background-color:#ffffff0d}.px-1[data-v-eebdf2f8]{padding-left:.25rem;padding-right:.25rem}.px-3[data-v-eebdf2f8]{padding-left:.75rem;padding-right:.75rem}.py-1\\.5[data-v-eebdf2f8]{padding-top:.375rem;padding-bottom:.375rem}.text-\\[10px\\][data-v-eebdf2f8]{font-size:10px}.text-xs[data-v-eebdf2f8]{font-size:.75rem;line-height:1rem}.text-white\\/20[data-v-eebdf2f8]{color:#fff3}.text-white\\/40[data-v-eebdf2f8]{color:#fff6}.font-bold[data-v-eebdf2f8]{font-weight:700}.tracking-\\[0\\.2em\\][data-v-eebdf2f8]{letter-spacing:.2em}.font-mono[data-v-eebdf2f8]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.uppercase[data-v-eebdf2f8]{text-transform:uppercase}.opacity-50[data-v-eebdf2f8]{opacity:.5}.shadow-lg[data-v-eebdf2f8]{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.transition-all[data-v-eebdf2f8]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.select-control[data-v-b022a6dd]{display:flex;flex-direction:column;gap:var(--spacing-sm);transition:var(--transition-base)}.select-control.is-disabled[data-v-b022a6dd]{opacity:var(--opacity-disabled);pointer-events:none}.select-label[data-v-b022a6dd]{padding:0 var(--spacing-xs)}.select-input[data-v-b022a6dd]{width:100%;padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);border:var(--border-width) solid var(--border-color-base);background:#ffffff0d;color:#ffffffe6;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:var(--transition-all);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='rgba(255,255,255,0.6)' d='M6 9L1 4h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--spacing-sm) center;padding-right:calc(var(--spacing-md) + 16px)}.select-input[data-v-b022a6dd]:hover{background-color:#ffffff1a;border-color:var(--border-color-hover)}.select-input[data-v-b022a6dd]:focus{outline:none;border-color:var(--border-color-focus);box-shadow:0 0 0 3px #3b82f61a}.select-input option[data-v-b022a6dd]{background:#000000f2;color:#fff;padding:var(--spacing-sm)}[data-v-b022a6dd],[data-v-b022a6dd]:before,[data-v-b022a6dd]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-b022a6dd]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.flex[data-v-b022a6dd]{display:flex}.border[data-v-b022a6dd]{border-width:1px}.outline[data-v-b022a6dd]{outline-style:solid}.transition[data-v-b022a6dd]{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}[data-v-abada5c9],[data-v-abada5c9]:before,[data-v-abada5c9]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-abada5c9]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.pointer-events-none[data-v-abada5c9]{pointer-events:none}.flex[data-v-abada5c9]{display:flex}.flex-1[data-v-abada5c9]{flex:1 1 0%}.flex-row[data-v-abada5c9]{flex-direction:row}.flex-col[data-v-abada5c9]{flex-direction:column}.cursor-pointer[data-v-abada5c9]{cursor:pointer}.cursor-not-allowed[data-v-abada5c9]{cursor:not-allowed}.gap-2[data-v-abada5c9]{gap:.5rem}.gap-3[data-v-abada5c9]{gap:.75rem}.truncate[data-v-abada5c9]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border[data-v-abada5c9]{border-width:1px}.border-blue-400\\/50[data-v-abada5c9]{border-color:#60a5fa80}.border-white\\/5[data-v-abada5c9]{border-color:#ffffff0d}.rounded-lg[data-v-abada5c9]{border-radius:.5rem}.bg-blue-600[data-v-abada5c9]{--un-bg-opacity:1;background-color:rgb(37 99 235 / var(--un-bg-opacity))}.bg-white\\/\\[0\\.03\\][data-v-abada5c9]{background-color:#ffffff08}.hover\\:bg-white\\/10[data-v-abada5c9]:hover{background-color:#ffffff1a}.px-1[data-v-abada5c9]{padding-left:.25rem;padding-right:.25rem}.py-2\\.5[data-v-abada5c9]{padding-top:.625rem;padding-bottom:.625rem}.text-\\[10px\\][data-v-abada5c9]{font-size:10px}.text-\\[8px\\][data-v-abada5c9]{font-size:8px}.text-white[data-v-abada5c9]{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.text-white\\/20[data-v-abada5c9]{color:#fff3}.text-white\\/25[data-v-abada5c9]{color:#ffffff40}.hover\\:text-white\\/60[data-v-abada5c9]:hover{color:#fff9}.font-bold[data-v-abada5c9]{font-weight:700}.tracking-\\[0\\.2em\\][data-v-abada5c9]{letter-spacing:.2em}.uppercase[data-v-abada5c9]{text-transform:uppercase}.opacity-50[data-v-abada5c9]{opacity:.5}.shadow-sm[data-v-abada5c9]{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.ring-1[data-v-abada5c9]{--un-ring-width:1px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.ring-blue-400\\/30[data-v-abada5c9]{--un-ring-color:rgb(96 165 250 / .3) }.transition-all[data-v-abada5c9]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}[data-v-2fc0bb08],[data-v-2fc0bb08]:before,[data-v-2fc0bb08]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-2fc0bb08]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.pointer-events-none[data-v-2fc0bb08]{pointer-events:none}.absolute[data-v-2fc0bb08]{position:absolute}.relative[data-v-2fc0bb08]{position:relative}.inset-\\[2px\\][data-v-2fc0bb08]{top:2px;right:2px;bottom:2px;left:2px}.inset-0[data-v-2fc0bb08]{top:0;right:0;bottom:0;left:0}.left-\\[2px\\][data-v-2fc0bb08]{left:2px}.top-\\[2px\\][data-v-2fc0bb08]{top:2px}.h-5[data-v-2fc0bb08]{height:1.25rem}.h-6[data-v-2fc0bb08]{height:1.5rem}.w-11[data-v-2fc0bb08]{width:2.75rem}.w-5[data-v-2fc0bb08]{width:1.25rem}.flex[data-v-2fc0bb08]{display:flex}.translate-x-0[data-v-2fc0bb08]{--un-translate-x:0;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.translate-x-5[data-v-2fc0bb08]{--un-translate-x:1.25rem;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer[data-v-2fc0bb08]{cursor:pointer}.items-center[data-v-2fc0bb08]{align-items:center}.justify-center[data-v-2fc0bb08]{justify-content:center}.justify-between[data-v-2fc0bb08]{justify-content:space-between}.border[data-v-2fc0bb08]{border-width:1px}.border-0[data-v-2fc0bb08]{border-width:0px}.border-white\\/10[data-v-2fc0bb08]{border-color:#ffffff1a}.rounded-full[data-v-2fc0bb08]{border-radius:9999px}.bg-white[data-v-2fc0bb08]{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity))}.bg-white\\/10[data-v-2fc0bb08]{background-color:#ffffff1a}.hover\\:bg-white\\/15[data-v-2fc0bb08]:hover{background-color:#ffffff26}.from-blue-500[data-v-2fc0bb08]{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.from-white[data-v-2fc0bb08]{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.to-blue-600[data-v-2fc0bb08]{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position)}.to-gray-100[data-v-2fc0bb08]{--un-gradient-to-position:100%;--un-gradient-to:rgb(243 244 246 / var(--un-to-opacity, 1)) var(--un-gradient-to-position)}.bg-gradient-to-br[data-v-2fc0bb08]{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.bg-gradient-to-r[data-v-2fc0bb08]{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.px-1[data-v-2fc0bb08]{padding-left:.25rem;padding-right:.25rem}.py-2[data-v-2fc0bb08]{padding-top:.5rem;padding-bottom:.5rem}.text-\\[10px\\][data-v-2fc0bb08]{font-size:10px}.text-white\\/20[data-v-2fc0bb08]{color:#fff3}.group\\/item:hover .group-hover\\/item\\:text-white\\/40[data-v-2fc0bb08]{color:#fff6}.font-bold[data-v-2fc0bb08]{font-weight:700}.tracking-\\[0\\.2em\\][data-v-2fc0bb08]{letter-spacing:.2em}.uppercase[data-v-2fc0bb08]{text-transform:uppercase}.opacity-50[data-v-2fc0bb08]{opacity:.5}.shadow-blue-500\\/30[data-v-2fc0bb08]{--un-shadow-color:rgb(59 130 246 / .3) }.shadow-inner[data-v-2fc0bb08]{--un-shadow:inset 0 2px 4px 0 var(--un-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-lg[data-v-2fc0bb08]{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.backdrop-blur-md[data-v-2fc0bb08]{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)}.transition-all[data-v-2fc0bb08]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors[data-v-2fc0bb08]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300[data-v-2fc0bb08]{transition-duration:.3s}[data-v-994f0c5c],[data-v-994f0c5c]:before,[data-v-994f0c5c]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-994f0c5c]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.absolute[data-v-994f0c5c]{position:absolute}.relative[data-v-994f0c5c]{position:relative}.inset-0[data-v-994f0c5c]{top:0;right:0;bottom:0;left:0}.z-10[data-v-994f0c5c]{z-index:10}.grid[data-v-994f0c5c]{display:grid}.flex[data-v-994f0c5c]{display:flex}.flex-1[data-v-994f0c5c]{flex:1 1 0%}.cursor-pointer[data-v-994f0c5c]{cursor:pointer}.gap-1[data-v-994f0c5c]{gap:.25rem}.overflow-hidden[data-v-994f0c5c]{overflow:hidden}.border[data-v-994f0c5c]{border-width:1px}.border-white\\/5[data-v-994f0c5c]{border-color:#ffffff0d}.border-white\\/8[data-v-994f0c5c]{border-color:#ffffff14}.rounded-lg[data-v-994f0c5c]{border-radius:.5rem}.rounded-xl[data-v-994f0c5c]{border-radius:.75rem}.bg-white\\/\\[0\\.04\\][data-v-994f0c5c]{background-color:#ffffff0a}.hover\\:bg-white\\/10[data-v-994f0c5c]:hover{background-color:#ffffff1a}.from-black\\/40[data-v-994f0c5c]{--un-gradient-from-position:0%;--un-gradient-from:rgb(0 0 0 / .4) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.from-blue-400\\/10[data-v-994f0c5c]{--un-gradient-from-position:0%;--un-gradient-from:rgb(96 165 250 / .1) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(96 165 250 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.from-blue-500[data-v-994f0c5c]{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.from-blue-500\\/5[data-v-994f0c5c]{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / .05) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.from-white\\/25[data-v-994f0c5c]{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / .25) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to)}.via-purple-500\\/5[data-v-994f0c5c]{--un-gradient-via-position:50%;--un-gradient-to:rgb(168 85 247 / 0);--un-gradient-stops:var(--un-gradient-from), rgb(168 85 247 / .05) var(--un-gradient-via-position), var(--un-gradient-to)}.via-transparent[data-v-994f0c5c]{--un-gradient-via-position:50%;--un-gradient-to:rgb(255 255 255 / 0);--un-gradient-stops:var(--un-gradient-from), transparent var(--un-gradient-via-position), var(--un-gradient-to)}.to-black\\/20[data-v-994f0c5c]{--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / .2) var(--un-gradient-to-position)}.to-blue-500\\/5[data-v-994f0c5c]{--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / .05) var(--un-gradient-to-position)}.to-blue-600[data-v-994f0c5c]{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position)}.to-transparent[data-v-994f0c5c]{--un-gradient-to-position:100%;--un-gradient-to:transparent var(--un-gradient-to-position)}.bg-gradient-to-b[data-v-994f0c5c]{--un-gradient-shape:to bottom in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.bg-gradient-to-br[data-v-994f0c5c]{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.bg-gradient-to-r[data-v-994f0c5c]{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.bg-gradient-to-t[data-v-994f0c5c]{--un-gradient-shape:to top in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient))}.p-1[data-v-994f0c5c]{padding:.25rem}.py-2[data-v-994f0c5c]{padding-top:.5rem;padding-bottom:.5rem}.text-\\[9px\\][data-v-994f0c5c]{font-size:9px}.text-white[data-v-994f0c5c]{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.text-white\\/45[data-v-994f0c5c]{color:#ffffff73}.hover\\:text-white\\/80[data-v-994f0c5c]:hover{color:#fffc}.font-black[data-v-994f0c5c]{font-weight:900}.tracking-\\[0\\.12em\\][data-v-994f0c5c]{letter-spacing:.12em}.uppercase[data-v-994f0c5c]{text-transform:uppercase}.tab[data-v-994f0c5c]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.opacity-0[data-v-994f0c5c]{opacity:0}.opacity-50[data-v-994f0c5c]{opacity:.5}.group:hover .group-hover\\:opacity-100[data-v-994f0c5c]{opacity:1}.shadow-blue-500\\/20[data-v-994f0c5c]{--un-shadow-color:rgb(59 130 246 / .2) }.shadow-lg[data-v-994f0c5c]{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.shadow-md[data-v-994f0c5c]{--un-shadow:var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgb(0 0 0 / .1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.backdrop-blur-md[data-v-994f0c5c]{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)}.transition-all[data-v-994f0c5c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity[data-v-994f0c5c]{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300[data-v-994f0c5c]{transition-duration:.3s}.panel-container[data-v-37c62bcb]{width:100%;color:#fff}.panel-header[data-v-37c62bcb]{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-md);border-bottom:var(--border-width) solid var(--border-color-base)}.panel-header.collapsible[data-v-37c62bcb]{cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition-base)}.panel-header.collapsible[data-v-37c62bcb]:hover{background:#ffffff08}.panel-title[data-v-37c62bcb]{margin:0;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:#ffffffe6}.collapse-icon[data-v-37c62bcb]{font-size:var(--font-size-xs);color:#ffffff80;transition:transform var(--transition-base)}.collapse-icon.collapsed[data-v-37c62bcb]{transform:rotate(-90deg)}.panel-content[data-v-37c62bcb]{padding:var(--spacing-md)}[data-v-37c62bcb],[data-v-37c62bcb]:before,[data-v-37c62bcb]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-37c62bcb]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.flex[data-v-37c62bcb]{display:flex}.transform[data-v-37c62bcb]{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.transition[data-v-37c62bcb]{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}.section-container[data-v-997297d7]{display:flex;flex-direction:column}.gap-2[data-v-997297d7]{gap:var(--spacing-sm)}.gap-4[data-v-997297d7]{gap:var(--spacing-md)}.gap-6[data-v-997297d7]{gap:var(--spacing-lg)}.section-title[data-v-997297d7]{padding:0 var(--spacing-xs);margin:0}.section-content[data-v-997297d7]{display:flex;flex-direction:column;gap:inherit}[data-v-997297d7],[data-v-997297d7]:before,[data-v-997297d7]:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }[data-v-997297d7]::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.flex[data-v-997297d7]{display:flex}.gap-2[data-v-997297d7]{gap:.5rem}.gap-4[data-v-997297d7]{gap:1rem}.gap-6[data-v-997297d7]{gap:1.5rem}:root{--color-primary: #3b82f6;--color-primary-hover: #2563eb;--color-primary-active: #1d4ed8;--color-success: #10b981;--color-warning: #f59e0b;--color-error: #ef4444;--color-info: #06b6d4;--opacity-disabled: .4;--opacity-secondary: .6;--opacity-tertiary: .3;--opacity-primary: .9;--opacity-full: 1;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--radius-sm: .25rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-full: 9999px;--border-width: 1px;--border-color-base: rgba(255, 255, 255, .05);--border-color-hover: rgba(255, 255, 255, .2);--border-color-focus: rgba(59, 130, 246, .5);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px rgba(0, 0, 0, .15);--transition-fast: .15s ease;--transition-base: .2s ease;--transition-slow: .3s ease;--transition-all: all var(--transition-base);--font-size-xs: .625rem;--font-size-sm: .75rem;--font-size-base: .875rem;--font-size-lg: 1rem;--font-size-xl: 1.25rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-black: 900;--letter-spacing-tight: -.01em;--letter-spacing-normal: 0;--letter-spacing-wide: .05em;--letter-spacing-wider: .1em;--letter-spacing-widest: .2em;--z-dropdown: 1000;--z-sticky: 1020;--z-fixed: 1030;--z-modal-backdrop: 1040;--z-modal: 1050;--z-popover: 1060;--z-tooltip: 1070}.control-base{border-radius:var(--radius-md);transition:var(--transition-all);border:var(--border-width) solid var(--border-color-base);background:#ffffff08}.control-hover:hover{background:#ffffff1a;border-color:var(--border-color-hover)}.control-focus:focus{outline:none;border-color:var(--border-color-focus);box-shadow:0 0 0 3px #3b82f61a}.control-disabled{opacity:var(--opacity-disabled);cursor:not-allowed;pointer-events:none}.label-base{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:var(--letter-spacing-widest);color:rgba(255,255,255,var(--opacity-secondary))}.label-primary{color:rgba(255,255,255,var(--opacity-primary))}.value-display{font-size:var(--font-size-sm);font-weight:var(--font-weight-black);font-family:ui-monospace,monospace;color:rgba(255,255,255,var(--opacity-secondary))}.value-display-active{color:var(--color-primary)}.flex-between{display:flex;justify-content:space-between;align-items:center}.flex-col-gap{display:flex;flex-direction:column;gap:var(--spacing-sm)}.btn-base{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);border:var(--border-width) solid var(--border-color-base);background:#ffffff08;color:#fff9;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);cursor:pointer;transition:var(--transition-all);text-align:center}.btn-base:hover:not(:disabled){background:#ffffff1a;color:#ffffffe6}.btn-primary{background:var(--color-primary);color:#fff;border-color:#3b82f680}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-active{background:var(--color-primary);color:#fff;border-color:#3b82f680;box-shadow:0 0 0 1px #3b82f64d}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.2) transparent}.custom-scrollbar::-webkit-scrollbar{width:6px;height:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:#fff3;border-radius:var(--radius-full)}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.input-base{width:100%;padding:var(--spacing-sm);border-radius:var(--radius-md);border:var(--border-width) solid var(--border-color-base);background:#ffffff0d;color:#fff;font-size:var(--font-size-sm);transition:var(--transition-all)}.input-base:hover{background:#ffffff14;border-color:var(--border-color-hover)}.input-base:focus{outline:none;background:#ffffff1a;border-color:var(--border-color-focus)}.panel-base{background:#000c;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:var(--radius-lg);border:var(--border-width) solid var(--border-color-base);box-shadow:var(--shadow-xl)}.panel-header{padding:var(--spacing-md);border-bottom:var(--border-width) solid var(--border-color-base);cursor:move}.panel-content{padding:var(--spacing-md)}*{box-sizing:border-box}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:#3b82f64d;color:#fff}`)),document.head.appendChild(a)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
|
|
2
|
+
(function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c.BgEffectsShared={},c.Vue))})(this,function(c,e){"use strict";const p=(t,a,l)=>isNaN(t)?a:Math.min(l,Math.max(a,t)),B=(t,a,l,o)=>p(Math.round(typeof t=="number"?t:o),a,l);function E(t,a,l=2){const o=Math.random()*(a-t)+t;return Number(o.toFixed(l))}function $(t,a){return Math.floor(Math.random()*(a-t+1))+t}function k(t){return t[Math.floor(Math.random()*t.length)]}function y(t){return Math.random()<t}function S(t=8){const a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";let l="";for(let o=0;o<t;o++)l+=a.charAt(Math.floor(Math.random()*a.length));return l}const x=[["#7aa2f7","#1a1b26","#bb9af7"],["#ff5f6d","#ffc371","#2193b0"],["#020617","#1e293b","#3b82f6"],["#f43f5e","#fbbf24","#22c55e"],["#a855f7","#ec4899","#3b82f6"],["#10b981","#064e3b","#34d399"],["#88c0d0","#2e3440","#5e81ac"],["#f97316","#7c3aed","#06b6d4"],["#9a4c78","#f5cc36","#d2d283"],["#f4cb37","#5a3f5f","#f5cc36"]];function h(t){const a=Number.parseInt(t.slice(1,3),16),l=Number.parseInt(t.slice(3,5),16),o=Number.parseInt(t.slice(5,7),16);return[a,l,o]}function V(t){const[a,l,o]=h(t);return[a/255,l/255,o/255]}function w(t,a,l){return`#${[t,a,l].map(o=>Math.max(0,Math.min(255,o)).toString(16).padStart(2,"0")).join("")}`}function M(t,a={}){const{brightness:l=1,offset:o=[0,0,0],alpha:s}=a,[i,n,r]=h(t),d=Math.floor(i*l+o[0]),f=Math.floor(n*l+o[1]),m=Math.floor(r*l+o[2]);let b=w(d,f,m);if(s!==void 0){const de=Math.max(0,Math.min(255,Math.floor(s*255))).toString(16).padStart(2,"0");b+=de}return b}function N(t,a,l){l/=100;const o=a*Math.min(l,1-l)/100,s=i=>{const n=(i+t/30)%12,r=l-o*Math.max(Math.min(n-3,9-n,1),-1);return Math.round(255*r).toString(16).padStart(2,"0")};return`#${s(0)}${s(8)}${s(4)}`}function g(t,a={}){const{baseHue:l=Math.random()*360,saturation:o=Math.random()*40+40,lightness:s=Math.random()*30+30}=a,i=[];for(let n=0;n<t;n++){const r=(l+n*(360/t))%360;i.push(N(r,o,s))}return i}function z(t,a){if(y(.3)){const l=k(x);if(l.length>=t)return l.slice(0,t);const o=g(t-l.length,a);return[...l,...o]}return g(t,a)}const T=/^#([0-9a-fA-F]{6})$/;function C(t,a){if(typeof t!="string")return a;const l=t.trim();return T.test(l)?l:a}function I(t,a){const l=C(t,a);return V(l)}const _={class:"flex justify-between items-center px-1"},R={class:"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors"},P={class:"text-[11px] font-black font-mono text-white/40 group-hover/item:text-blue-400 transition-colors"},D=["min","max","step","value","disabled"],H=e.defineComponent({__name:"Slider",props:{modelValue:{},label:{},min:{default:0},max:{default:100},step:{default:1},suffix:{default:""},disabled:{type:Boolean,default:!1},className:{default:""}},emits:["update:modelValue"],setup(t,{emit:a}){const l=t,o=a,s=e.computed(()=>{const n=l.step<1?Math.max(0,-Math.floor(Math.log10(l.step))):0,r=l.modelValue.toFixed(n);return l.suffix?r+l.suffix:r}),i=n=>{const r=Number(n.target.value);o("update:modelValue",r)};return(n,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex flex-col gap-3 group/item",[{"opacity-50 pointer-events-none":t.disabled},t.className]])},[e.createElementVNode("div",_,[e.createElementVNode("label",R,e.toDisplayString(t.label),1),e.createElementVNode("span",P,e.toDisplayString(s.value),1)]),e.createElementVNode("input",{type:"range",class:"w-full accent-blue-500 bg-white/5 hover:bg-white/10 h-1.5 rounded-full appearance-none cursor-pointer transition-all border border-white/5",min:t.min,max:t.max,step:t.step,value:t.modelValue,disabled:t.disabled,onInput:i},null,40,D)],2))}}),u=(t,a)=>{const l=t.__vccOpts||t;for(const[o,s]of a)l[o]=s;return l},j=u(H,[["__scopeId","data-v-518e4603"]]),L={class:"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1"},A={class:"flex gap-4 items-center"},F=["value","disabled"],O={class:"text-xs font-mono font-bold text-white/40 bg-white/5 px-3 py-1.5 rounded-lg border border-white/5"},G=u(e.defineComponent({__name:"ColorPicker",props:{modelValue:{},label:{},disabled:{type:Boolean,default:!1},className:{default:""}},emits:["update:modelValue"],setup(t,{emit:a}){const l=t,o=a,s=e.ref(null),i=r=>{const d=r.target.value;o("update:modelValue",d)},n=()=>{!l.disabled&&s.value&&s.value.click()};return(r,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex flex-col gap-3 group/item",[{"opacity-50 pointer-events-none":t.disabled},t.className]])},[e.createElementVNode("label",L,e.toDisplayString(t.label),1),e.createElementVNode("div",A,[e.createElementVNode("div",{class:"relative w-10 h-10 rounded-lg overflow-hidden border border-white/10 shadow-lg cursor-pointer hover:border-white/20 transition-all",onClick:n},[e.createElementVNode("input",{ref_key:"inputRef",ref:s,type:"color",class:"absolute inset-0 w-[150%] h-[150%] -translate-x-1/4 -translate-y-1/4 cursor-pointer scale-125",value:t.modelValue,disabled:t.disabled,onInput:i},null,40,F)]),e.createElementVNode("span",O,e.toDisplayString(t.modelValue),1)])],2))}}),[["__scopeId","data-v-eebdf2f8"]]),q={key:0,class:"label-base select-label"},X=["value","disabled"],J=["value","disabled"],K=u(e.defineComponent({__name:"Select",props:{modelValue:{},options:{},label:{default:""},disabled:{type:Boolean,default:!1},className:{default:""}},emits:["update:modelValue"],setup(t,{emit:a}){const l=a,o=s=>{const i=s.target.value;l("update:modelValue",i)};return(s,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["select-control",[{"is-disabled":t.disabled},t.className]])},[t.label?(e.openBlock(),e.createElementBlock("label",q,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0),e.createElementVNode("select",{class:"select-input",value:t.modelValue,disabled:t.disabled,onChange:o},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,n=>(e.openBlock(),e.createElementBlock("option",{key:String(n.value),value:n.value,disabled:n.disabled},e.toDisplayString(n.label),9,J))),128))],40,X)],2))}}),[["__scopeId","data-v-b022a6dd"]]),Q={key:0,class:"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1"},U=["disabled","onClick"],W=u(e.defineComponent({__name:"ButtonGroup",props:{modelValue:{},options:{},label:{default:""},disabled:{type:Boolean,default:!1},columns:{default:3},layout:{default:"vertical"},className:{default:""}},emits:["update:modelValue"],setup(t,{emit:a}){const l=t,o=a,s=(i,n)=>{!l.disabled&&!n&&o("update:modelValue",i)};return(i,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex flex-col gap-3",[{"opacity-50 pointer-events-none":t.disabled},t.className]])},[t.label?(e.openBlock(),e.createElementBlock("label",Q,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["gap-2",[t.layout==="vertical"?"flex flex-col":"flex flex-row"]])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,r=>(e.openBlock(),e.createElementBlock("button",{key:String(r.value),type:"button",class:e.normalizeClass(["py-2.5 text-[8px] font-bold border rounded-lg transition-all truncate px-1 shadow-sm cursor-pointer flex-1",[t.modelValue===r.value?"bg-blue-600 text-white border-blue-400/50 ring-1 ring-blue-400/30":"bg-white/[0.03] text-white/25 border-white/5 hover:bg-white/10 hover:text-white/60",{"opacity-50 cursor-not-allowed":r.disabled}]]),disabled:r.disabled||t.disabled,onClick:d=>s(r.value,r.disabled)},e.toDisplayString(r.label),11,U))),128))],2)],2))}}),[["__scopeId","data-v-abada5c9"]]),Y=["aria-checked","disabled"],Z=u(e.defineComponent({__name:"Toggle",props:{modelValue:{type:Boolean},label:{},disabled:{type:Boolean,default:!1},className:{default:""}},emits:["update:modelValue"],setup(t,{emit:a}){const l=t,o=a,s=()=>{l.disabled||o("update:modelValue",!l.modelValue)};return(i,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex items-center justify-between px-1 py-2 group/item",[{"opacity-50 pointer-events-none":t.disabled},t.className]])},[e.createElementVNode("label",{class:"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors cursor-pointer",onClick:s},e.toDisplayString(t.label),1),e.createElementVNode("button",{type:"button",role:"switch","aria-checked":t.modelValue,class:e.normalizeClass(["relative w-11 h-6 rounded-full border-0 transition-all duration-300 cursor-pointer backdrop-blur-md",t.modelValue?"bg-gradient-to-r from-blue-500 to-blue-600 shadow-lg shadow-blue-500/30":"bg-white/10 hover:bg-white/15 border border-white/10"]),disabled:t.disabled,onClick:s},[e.createElementVNode("span",{class:e.normalizeClass(["absolute inset-0 rounded-full",t.modelValue?"shadow-inner":""])},null,2),e.createElementVNode("span",{class:e.normalizeClass(["absolute top-[2px] left-[2px] w-5 h-5 bg-white rounded-full shadow-lg transition-all duration-300 flex items-center justify-center",t.modelValue?"translate-x-5":"translate-x-0"])},[...n[0]||(n[0]=[e.createElementVNode("span",{class:"absolute inset-[2px] rounded-full bg-gradient-to-br from-white to-gray-100"},null,-1)])],2)],10,Y)],2))}}),[["__scopeId","data-v-2fc0bb08"]]),v=["onClick"],ee={key:0,class:"absolute inset-0 bg-gradient-to-br from-white/25 via-transparent to-transparent"},te={class:"relative z-10"},le=u(e.defineComponent({__name:"SubTabs",props:{tabs:{},modelValue:{},rows:{},className:{}},emits:["update:modelValue"],setup(t,{emit:a}){const l=t,o=a,s=e.computed(()=>{const d=Math.floor(l.rows||1);return d>1?d:1}),i=e.computed(()=>{const d=s.value;return d>1?Math.ceil(l.tabs.length/d):0}),n=e.computed(()=>{if(!(s.value<=1))return{gridTemplateColumns:`repeat(${i.value}, minmax(0, 1fr))`}}),r=d=>{o("update:modelValue",d)};return(d,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["p-1 bg-gradient-to-b from-black/40 to-black/20 rounded-xl border border-white/8 shadow-lg backdrop-blur-md relative overflow-hidden",t.className])},[f[1]||(f[1]=e.createElementVNode("div",{class:"absolute inset-0 bg-gradient-to-r from-blue-500/5 via-purple-500/5 to-blue-500/5 opacity-50"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["relative z-10 gap-1",s.value>1?"grid":"flex"]),style:e.normalizeStyle(n.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,m=>(e.openBlock(),e.createElementBlock("button",{key:m.id,class:e.normalizeClass(["py-2 text-[9px] font-black uppercase tracking-[0.12em] rounded-lg transition-all duration-300 cursor-pointer relative overflow-hidden group",[s.value>1?"":"flex-1",t.modelValue===m.id?"bg-gradient-to-br from-blue-500 to-blue-600 text-white shadow-md shadow-blue-500/20":"bg-white/[0.04] text-white/45 hover:text-white/80 hover:bg-white/10 border border-white/5"]]),onClick:b=>r(m.id)},[t.modelValue===m.id?(e.openBlock(),e.createElementBlock("div",ee)):e.createCommentVNode("",!0),e.createElementVNode("span",te,e.toDisplayString(m.label),1),f[0]||(f[0]=e.createElementVNode("div",{class:"absolute inset-0 bg-gradient-to-t from-blue-400/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"},null,-1))],10,v))),128))],6)],2))}}),[["__scopeId","data-v-994f0c5c"]]),ae={class:"panel-title"},oe={class:"panel-content"},ne=u(e.defineComponent({__name:"Panel",props:{title:{default:""},collapsible:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},className:{default:""}},emits:["update:collapsed"],setup(t,{emit:a}){const l=t,o=a,s=()=>{l.collapsible&&o("update:collapsed",!l.collapsed)};return(i,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["panel-container panel-base",t.className])},[t.title||i.$slots.header?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["panel-header",{collapsible:t.collapsible}]),onClick:s},[e.renderSlot(i.$slots,"header",{},()=>[e.createElementVNode("h3",ae,e.toDisplayString(t.title),1)],!0),t.collapsible?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["collapse-icon",{collapsed:t.collapsed}])}," ▼ ",2)):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("div",oe,[e.renderSlot(i.$slots,"default",{},void 0,!0)],512),[[e.vShow,!t.collapsed]])],2))}}),[["__scopeId","data-v-37c62bcb"]]),se={key:0,class:"section-title label-base"},ce={class:"section-content"},re=u(e.defineComponent({__name:"Section",props:{title:{default:""},spacing:{default:"md"},className:{default:""}},setup(t){const a={sm:"gap-2",md:"gap-4",lg:"gap-6"};return(l,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["section-container",[a[t.spacing],t.className]])},[t.title?(e.openBlock(),e.createElementBlock("h4",se,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",ce,[e.renderSlot(l.$slots,"default",{},void 0,!0)])],2))}}),[["__scopeId","data-v-997297d7"]]);function ie(t){const{messages:a,fallbackLocale:l="en"}=t,o=e.computed(()=>(typeof t.locale=="string"?t.locale:t.locale.value)||l);return{t:n=>{const r=o.value,d=a[r]||a[l];if(!d)return console.warn(`[useI18n] No messages found for locale: ${r}`),n;const f=n.split(".");let m=d;for(const b of f)if(m&&typeof m=="object"&&b in m)m=m[b];else return console.warn(`[useI18n] Translation not found: ${n} (locale: ${r})`),n;return typeof m=="string"?m:n},tObj:n=>{const r=o.value;return n[r]||n[l]||n.en||""},locale:o}}c.ButtonGroup=W,c.ColorPicker=G,c.Panel=ne,c.Section=re,c.Select=K,c.Slider=j,c.SubTabs=le,c.Toggle=Z,c.VIBRANT_PALETTES=x,c.adjustColor=M,c.clampNumber=p,c.generateHarmoniousPalette=g,c.generateRandomPalette=z,c.hexToRgb=h,c.hexToRgbNormalized=V,c.hit=y,c.hslToHex=N,c.normalizeHexColor=C,c.normalizeIntRange=B,c.rand=E,c.randInt=$,c.rgbToHex=w,c.safeHexToRgbNormalized=I,c.sample=k,c.shortId=S,c.useI18n=ie,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
3
|
+
//# sourceMappingURL=index.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/utils/number.ts","../src/utils/random.ts","../src/utils/color.ts","../src/components/form/Slider.vue","../src/components/form/ColorPicker.vue","../src/components/form/Select.vue","../src/components/form/ButtonGroup.vue","../src/components/form/Toggle.vue","../src/components/form/SubTabs.vue","../src/components/layout/Panel.vue","../src/components/layout/Section.vue","../src/composables/useI18n.ts"],"sourcesContent":["export const clampNumber = (value: number, min: number, max: number) => {\n if (isNaN(value)) return min\n return Math.min(max, Math.max(min, value))\n}\n\nexport const normalizeIntRange = (value: number | undefined, min: number, max: number, fallback: number) => {\n const resolved = typeof value === 'number' ? value : fallback\n return clampNumber(Math.round(resolved), min, max)\n}\n","/**\n * 随机数处理工具库\n */\n\nexport function rand(min: number, max: number, precision = 2): number {\n const val = Math.random() * (max - min) + min\n return Number(val.toFixed(precision))\n}\n\nexport function randInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport function sample<T>(array: T[]): T {\n return array[Math.floor(Math.random() * array.length)]\n}\n\nexport function hit(chance: number): boolean {\n return Math.random() < chance\n}\n\nexport function shortId(length = 8): string {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\n let result = ''\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n return result\n}\n","/**\n * 颜色处理库\n */\n\nimport { hit, sample } from './random'\n\n/**\n * 预设的活力配色方案(10种)\n */\nexport const VIBRANT_PALETTES = [\n ['#7aa2f7', '#1a1b26', '#bb9af7'], // Tokyo Night\n ['#ff5f6d', '#ffc371', '#2193b0'], // Sunset\n ['#020617', '#1e293b', '#3b82f6'], // Deep Ocean\n ['#f43f5e', '#fbbf24', '#22c55e'], // Vibrant\n ['#a855f7', '#ec4899', '#3b82f6'], // Sweet Candy\n ['#10b981', '#064e3b', '#34d399'], // Emerald Forest\n ['#88c0d0', '#2e3440', '#5e81ac'], // Nord\n ['#f97316', '#7c3aed', '#06b6d4'], // Cyberpunk\n ['#9a4c78', '#f5cc36', '#d2d283'], // Purple Gold\n ['#f4cb37', '#5a3f5f', '#f5cc36'], // Golden Purple\n]\n\nexport function hexToRgb(hex: string): [number, number, number] {\n const r = Number.parseInt(hex.slice(1, 3), 16)\n const g = Number.parseInt(hex.slice(3, 5), 16)\n const b = Number.parseInt(hex.slice(5, 7), 16)\n return [r, g, b]\n}\n\n/**\n * 将十六进制颜色转换为归一化的RGB数组(0-1范围)\n * 用于WebGL shader\n */\nexport function hexToRgbNormalized(hex: string): [number, number, number] {\n const [r, g, b] = hexToRgb(hex)\n return [r / 255, g / 255, b / 255]\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return `#${[r, g, b].map(x => Math.max(0, Math.min(255, x)).toString(16).padStart(2, '0')).join('')}`\n}\n\nexport function adjustColor(\n hex: string,\n options: {\n brightness?: number\n offset?: [number, number, number]\n alpha?: number\n } = {},\n) {\n const { brightness = 1, offset = [0, 0, 0], alpha } = options\n const [r, g, b] = hexToRgb(hex)\n\n const nr = Math.floor(r * brightness + offset[0])\n const ng = Math.floor(g * brightness + offset[1])\n const nb = Math.floor(b * brightness + offset[2])\n\n let res = rgbToHex(nr, ng, nb)\n\n if (alpha !== undefined) {\n const a = Math.max(0, Math.min(255, Math.floor(alpha * 255)))\n .toString(16)\n .padStart(2, '0')\n res += a\n }\n\n return res\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n l /= 100\n const a = (s * Math.min(l, 1 - l)) / 100\n const f = (n: number) => {\n const k = (n + h / 30) % 12\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n return Math.round(255 * color)\n .toString(16)\n .padStart(2, '0')\n }\n return `#${f(0)}${f(8)}${f(4)}`\n}\n\nexport function generateHarmoniousPalette(\n count: number,\n options: {\n baseHue?: number\n saturation?: number\n lightness?: number\n } = {},\n): string[] {\n const {\n baseHue = Math.random() * 360,\n saturation = Math.random() * 40 + 40,\n lightness = Math.random() * 30 + 30,\n } = options\n\n const colors: string[] = []\n for (let i = 0; i < count; i++) {\n const h = (baseHue + (i * (360 / count))) % 360\n colors.push(hslToHex(h, saturation, lightness))\n }\n return colors\n}\n\n/**\n * 生成随机颜色数组\n * 30% 概率从预设配色中选取,70% 概率生成和谐配色\n * @param count 颜色数量\n * @param options 配置选项\n * @returns 颜色数组\n */\nexport function generateRandomPalette(\n count: number,\n options?: {\n baseHue?: number\n saturation?: number\n lightness?: number\n },\n): string[] {\n // 30% 概率从预设中选取,70% 概率生成谐波色\n if (hit(0.3)) {\n const palette = sample(VIBRANT_PALETTES)\n // 如果颜色数量匹配,直接返回;否则截取或重复\n if (palette.length >= count) {\n return palette.slice(0, count)\n }\n // 如果预设颜色不足,用和谐色补充\n const additional = generateHarmoniousPalette(count - palette.length, options)\n return [...palette, ...additional]\n }\n return generateHarmoniousPalette(count, options)\n}\n\nconst HEX_COLOR_RE = /^#([0-9a-fA-F]{6})$/\n\nexport function normalizeHexColor(value: string | undefined, fallback: string) {\n if (typeof value !== 'string') return fallback\n const trimmed = value.trim()\n return HEX_COLOR_RE.test(trimmed) ? trimmed : fallback\n}\n\nexport function safeHexToRgbNormalized(value: string, fallback: string): [number, number, number] {\n const color = normalizeHexColor(value, fallback)\n return hexToRgbNormalized(color)\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n modelValue: number\n label: string\n min?: number\n max?: number\n step?: number\n suffix?: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n min: 0,\n max: 100,\n step: 1,\n suffix: '',\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n}>()\n\nconst displayValue = computed(() => {\n const decimals = props.step < 1 ? Math.max(0, -Math.floor(Math.log10(props.step))) : 0\n const value = props.modelValue.toFixed(decimals)\n return props.suffix ? value + props.suffix : value\n})\n\nconst handleInput = (event: Event) => {\n const value = Number((event.target as HTMLInputElement).value)\n emit('update:modelValue', value)\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <div class=\"flex justify-between items-center px-1\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors\">\n {{ label }}\n </label>\n <span class=\"text-[11px] font-black font-mono text-white/40 group-hover/item:text-blue-400 transition-colors\">\n {{ displayValue }}\n </span>\n </div>\n <input\n type=\"range\"\n class=\"w-full accent-blue-500 bg-white/5 hover:bg-white/10 h-1.5 rounded-full appearance-none cursor-pointer transition-all border border-white/5\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n >\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles, minimal custom CSS */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.h-1\\.5{height:0.375rem;}\n.w-full{width:100%;}\n.flex{display:flex;}\n.flex-col{flex-direction:column;}\n.cursor-pointer{cursor:pointer;}\n.appearance-none{-webkit-appearance:none;appearance:none;}\n.items-center{align-items:center;}\n.justify-between{justify-content:space-between;}\n.gap-3{gap:0.75rem;}\n.border{border-width:1px;}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.rounded-full{border-radius:9999px;}\n.bg-white\\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-\\[11px\\]{font-size:11px;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/40,\n.group\\/item:hover .group-hover\\/item\\:text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.group\\/item:hover .group-hover\\/item\\:text-blue-400{--un-text-opacity:1;color:rgb(96 165 250 / var(--un-text-opacity)) /* #60a5fa */;}\n.font-black{font-weight:900;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}\n.uppercase{text-transform:uppercase;}\n.accent-blue-500{--un-accent-opacity:1;accent-color:rgb(59 130 246 / var(--un-accent-opacity)) /* #3b82f6 */;}\n.opacity-50{opacity:0.5;}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ninterface Props {\n modelValue: string\n label: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nconst handleChange = (event: Event) => {\n const value = (event.target as HTMLInputElement).value\n emit('update:modelValue', value)\n}\n\nconst openPicker = () => {\n if (!props.disabled && inputRef.value) {\n inputRef.value.click()\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1\">{{ label }}</label>\n <div class=\"flex gap-4 items-center\">\n <div \n class=\"relative w-10 h-10 rounded-lg overflow-hidden border border-white/10 shadow-lg cursor-pointer hover:border-white/20 transition-all\"\n @click=\"openPicker\"\n >\n <input\n ref=\"inputRef\"\n type=\"color\"\n class=\"absolute inset-0 w-[150%] h-[150%] -translate-x-1/4 -translate-y-1/4 cursor-pointer scale-125\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @input=\"handleChange\"\n >\n </div>\n <span class=\"text-xs font-mono font-bold text-white/40 bg-white/5 px-3 py-1.5 rounded-lg border border-white/5\">{{ modelValue }}</span>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-0{inset:0;}\n.h-\\[150\\%\\]{height:150%;}\n.h-10{height:2.5rem;}\n.w-\\[150\\%\\]{width:150%;}\n.w-10{width:2.5rem;}\n.flex{display:flex;}\n.flex-col{flex-direction:column;}\n.-translate-x-1\\/4{--un-translate-x:-25%;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.-translate-y-1\\/4{--un-translate-y:-25%;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.scale-125{--un-scale-x:1.25;--un-scale-y:1.25;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.cursor-pointer{cursor:pointer;}\n.items-center{align-items:center;}\n.gap-3{gap:0.75rem;}\n.gap-4{gap:1rem;}\n.overflow-hidden{overflow:hidden;}\n.border{border-width:1px;}\n.border-white\\/10{border-color:rgb(255 255 255 / 0.1);}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.hover\\:border-white\\/20:hover{border-color:rgb(255 255 255 / 0.2);}\n.rounded-lg{border-radius:0.5rem;}\n.bg-white\\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.px-3{padding-left:0.75rem;padding-right:0.75rem;}\n.py-1\\.5{padding-top:0.375rem;padding-bottom:0.375rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-xs{font-size:0.75rem;line-height:1rem;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string | number\">\nexport interface Option<V extends string | number = string | number> {\n value: V\n label: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n modelValue: T\n options: Option<T>[]\n label?: string\n disabled?: boolean\n className?: string\n}>(), {\n label: '',\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst handleChange = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value as T\n emit('update:modelValue', value)\n}\n</script>\n\n<template>\n <div class=\"select-control\" :class=\"[{ 'is-disabled': disabled }, className]\">\n <label v-if=\"label\" class=\"label-base select-label\">{{ label }}</label>\n <select\n class=\"select-input\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n @change=\"handleChange\"\n >\n <option\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n</template>\n\n<style scoped>\n.select-control {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n transition: var(--transition-base);\n}\n\n.select-control.is-disabled {\n opacity: var(--opacity-disabled);\n pointer-events: none;\n}\n\n.select-label {\n padding: 0 var(--spacing-xs);\n}\n\n.select-input {\n width: 100%;\n padding: var(--spacing-sm) var(--spacing-md);\n border-radius: var(--radius-md);\n border: var(--border-width) solid var(--border-color-base);\n background: rgba(255, 255, 255, 0.05);\n color: rgba(255, 255, 255, 0.9);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n cursor: pointer;\n transition: var(--transition-all);\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='rgba(255,255,255,0.6)' d='M6 9L1 4h10z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right var(--spacing-sm) center;\n padding-right: calc(var(--spacing-md) + 16px);\n}\n\n.select-input:hover {\n background-color: rgba(255, 255, 255, 0.1);\n border-color: var(--border-color-hover);\n}\n\n.select-input:focus {\n outline: none;\n border-color: var(--border-color-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.select-input option {\n background: rgba(0, 0, 0, 0.95);\n color: white;\n padding: var(--spacing-sm);\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.border{border-width:1px;}\n.outline{outline-style:solid;}\n.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(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string | number\">\n/**\n * ButtonGroup - Multiple choice button group\n * Used as replacement for Select dropdown when options are limited\n */\nexport interface ButtonOption<V extends string | number = string | number> {\n value: V\n label: string\n disabled?: boolean\n}\n\n// Export alias for backward compatibility\nexport type Option<V extends string | number = string | number> = ButtonOption<V>\n\nconst props = withDefaults(defineProps<{\n modelValue: T\n options: ButtonOption<T>[]\n label?: string\n disabled?: boolean\n columns?: number\n layout?: 'horizontal' | 'vertical'\n className?: string\n}>(), {\n label: '',\n disabled: false,\n columns: 3,\n layout: 'vertical',\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst handleClick = (value: T, optionDisabled?: boolean) => {\n if (!props.disabled && !optionDisabled) {\n emit('update:modelValue', value)\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col gap-3\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label v-if=\"label\" class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 px-1\">\n {{ label }}\n </label>\n <div \n class=\"gap-2\"\n :class=\"[\n layout === 'vertical' ? 'flex flex-col' : 'flex flex-row'\n ]\"\n >\n <button\n v-for=\"option in options\"\n :key=\"String(option.value)\"\n type=\"button\"\n class=\"py-2.5 text-[8px] font-bold border rounded-lg transition-all truncate px-1 shadow-sm cursor-pointer flex-1\"\n :class=\"[\n modelValue === option.value\n ? 'bg-blue-600 text-white border-blue-400/50 ring-1 ring-blue-400/30'\n : 'bg-white/[0.03] text-white/25 border-white/5 hover:bg-white/10 hover:text-white/60',\n { 'opacity-50 cursor-not-allowed': option.disabled }\n ]\"\n :disabled=\"option.disabled || disabled\"\n @click=\"handleClick(option.value, option.disabled)\"\n >\n {{ option.label }}\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.flex{display:flex;}\n.flex-1{flex:1 1 0%;}\n.flex-row{flex-direction:row;}\n.flex-col{flex-direction:column;}\n.cursor-pointer{cursor:pointer;}\n.cursor-not-allowed{cursor:not-allowed;}\n.gap-2{gap:0.5rem;}\n.gap-3{gap:0.75rem;}\n.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n.border{border-width:1px;}\n.border-blue-400\\/50{border-color:rgb(96 165 250 / 0.5);}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.rounded-lg{border-radius:0.5rem;}\n.bg-blue-600{--un-bg-opacity:1;background-color:rgb(37 99 235 / var(--un-bg-opacity)) /* #2563eb */;}\n.bg-white\\/\\[0\\.03\\]{background-color:rgb(255 255 255 / 0.03) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.py-2\\.5{padding-top:0.625rem;padding-bottom:0.625rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-\\[8px\\]{font-size:8px;}\n.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.text-white\\/25{color:rgb(255 255 255 / 0.25) /* #fff */;}\n.hover\\:text-white\\/60:hover{color:rgb(255 255 255 / 0.6) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-sm{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.ring-1{--un-ring-width:1px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.ring-blue-400\\/30{--un-ring-color:rgb(96 165 250 / 0.3) /* #60a5fa */;}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n modelValue: boolean\n label: string\n disabled?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n disabled: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst handleToggle = () => {\n if (!props.disabled) {\n emit('update:modelValue', !props.modelValue)\n }\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-1 py-2 group/item\" :class=\"[{ 'opacity-50 pointer-events-none': disabled }, className]\">\n <label class=\"text-[10px] font-bold uppercase tracking-[0.2em] text-white/20 group-hover/item:text-white/40 transition-colors cursor-pointer\" @click=\"handleToggle\">\n {{ label }}\n </label>\n <button\n type=\"button\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n class=\"relative w-11 h-6 rounded-full border-0 transition-all duration-300 cursor-pointer backdrop-blur-md\"\n :class=\"modelValue \n ? 'bg-gradient-to-r from-blue-500 to-blue-600 shadow-lg shadow-blue-500/30' \n : 'bg-white/10 hover:bg-white/15 border border-white/10'\"\n :disabled=\"disabled\"\n @click=\"handleToggle\"\n >\n <!-- 内部阴影效果 -->\n <span class=\"absolute inset-0 rounded-full\" :class=\"modelValue ? 'shadow-inner' : ''\" />\n \n <!-- 滑动圆点 -->\n <span\n class=\"absolute top-[2px] left-[2px] w-5 h-5 bg-white rounded-full shadow-lg transition-all duration-300 flex items-center justify-center\"\n :class=\"modelValue ? 'translate-x-5' : 'translate-x-0'\"\n >\n <!-- 圆点内部渐变 -->\n <span class=\"absolute inset-[2px] rounded-full bg-gradient-to-br from-white to-gray-100\" />\n </span>\n </button>\n </div>\n</template>\n\n<style scoped>\n/* Tailwind handles all styles */\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.pointer-events-none{pointer-events:none;}\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-\\[2px\\]{inset:2px;}\n.inset-0{inset:0;}\n.left-\\[2px\\]{left:2px;}\n.top-\\[2px\\]{top:2px;}\n.h-5{height:1.25rem;}\n.h-6{height:1.5rem;}\n.w-11{width:2.75rem;}\n.w-5{width:1.25rem;}\n.flex{display:flex;}\n.translate-x-0{--un-translate-x:0;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.translate-x-5{--un-translate-x:1.25rem;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.cursor-pointer{cursor:pointer;}\n.items-center{align-items:center;}\n.justify-center{justify-content:center;}\n.justify-between{justify-content:space-between;}\n.border{border-width:1px;}\n.border-0{border-width:0px;}\n.border-white\\/10{border-color:rgb(255 255 255 / 0.1);}\n.rounded-full{border-radius:9999px;}\n.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity)) /* #fff */;}\n.bg-white\\/10{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.hover\\:bg-white\\/15:hover{background-color:rgb(255 255 255 / 0.15) /* #fff */;}\n.from-blue-500{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-white{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.to-blue-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.to-gray-100{--un-gradient-to-position:100%;--un-gradient-to:rgb(243 244 246 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.px-1{padding-left:0.25rem;padding-right:0.25rem;}\n.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}\n.text-\\[10px\\]{font-size:10px;}\n.text-white\\/20{color:rgb(255 255 255 / 0.2) /* #fff */;}\n.group\\/item:hover .group-hover\\/item\\:text-white\\/40{color:rgb(255 255 255 / 0.4) /* #fff */;}\n.font-bold{font-weight:700;}\n.tracking-\\[0\\.2em\\]{letter-spacing:0.2em;}\n.uppercase{text-transform:uppercase;}\n.opacity-50{opacity:0.5;}\n.shadow-blue-500\\/30{--un-shadow-color:rgb(59 130 246 / 0.3) /* #3b82f6 */;}\n.shadow-inner{--un-shadow:inset 0 2px 4px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.duration-300{transition-duration:300ms;}</style>","<script setup lang=\"ts\" generic=\"T extends string\">\nimport { computed } from 'vue'\n\nexport interface SubTabItem<T> {\n id: T\n label: string\n}\n\nconst props = defineProps<{\n tabs: SubTabItem<T>[]\n modelValue: T\n rows?: number\n className?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: T]\n}>()\n\nconst normalizedRows = computed(() => {\n const r = Math.floor(props.rows || 1)\n return r > 1 ? r : 1\n})\n\nconst columns = computed(() => {\n const r = normalizedRows.value\n return r > 1 ? Math.ceil(props.tabs.length / r) : 0\n})\n\nconst containerStyle = computed(() => {\n const r = normalizedRows.value\n if (r <= 1) return undefined\n return {\n gridTemplateColumns: `repeat(${columns.value}, minmax(0, 1fr))`,\n }\n})\n\nconst handleTabClick = (tabId: T) => {\n emit('update:modelValue', tabId)\n}\n</script>\n\n<template>\n <div class=\"p-1 bg-gradient-to-b from-black/40 to-black/20 rounded-xl border border-white/8 shadow-lg backdrop-blur-md relative overflow-hidden\" :class=\"className\">\n <div class=\"absolute inset-0 bg-gradient-to-r from-blue-500/5 via-purple-500/5 to-blue-500/5 opacity-50\" />\n <div\n class=\"relative z-10 gap-1\"\n :class=\"normalizedRows > 1 ? 'grid' : 'flex'\"\n :style=\"containerStyle\"\n >\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n class=\"py-2 text-[9px] font-black uppercase tracking-[0.12em] rounded-lg transition-all duration-300 cursor-pointer relative overflow-hidden group\"\n :class=\"[\n normalizedRows > 1 ? '' : 'flex-1',\n modelValue === tab.id\n ? 'bg-gradient-to-br from-blue-500 to-blue-600 text-white shadow-md shadow-blue-500/20'\n : 'bg-white/[0.04] text-white/45 hover:text-white/80 hover:bg-white/10 border border-white/5',\n ]\"\n @click=\"handleTabClick(tab.id)\"\n >\n <div\n v-if=\"modelValue === tab.id\"\n class=\"absolute inset-0 bg-gradient-to-br from-white/25 via-transparent to-transparent\"\n />\n <span class=\"relative z-10\">{{ tab.label }}</span>\n <div\n class=\"absolute inset-0 bg-gradient-to-t from-blue-400/10 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.absolute{position:absolute;}\n.relative{position:relative;}\n.inset-0{inset:0;}\n.z-10{z-index:10;}\n.grid{display:grid;}\n.flex{display:flex;}\n.flex-1{flex:1 1 0%;}\n.cursor-pointer{cursor:pointer;}\n.gap-1{gap:0.25rem;}\n.overflow-hidden{overflow:hidden;}\n.border{border-width:1px;}\n.border-white\\/5{border-color:rgb(255 255 255 / 0.05);}\n.border-white\\/8{border-color:rgb(255 255 255 / 0.08);}\n.rounded-lg{border-radius:0.5rem;}\n.rounded-xl{border-radius:0.75rem;}\n.bg-white\\/\\[0\\.04\\]{background-color:rgb(255 255 255 / 0.04) /* #fff */;}\n.hover\\:bg-white\\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}\n.from-black\\/40{--un-gradient-from-position:0%;--un-gradient-from:rgb(0 0 0 / 0.4) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-400\\/10{--un-gradient-from-position:0%;--un-gradient-from:rgb(96 165 250 / 0.1) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(96 165 250 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-500{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-blue-500\\/5{--un-gradient-from-position:0%;--un-gradient-from:rgb(59 130 246 / 0.05) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.from-white\\/25{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / 0.25) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}\n.via-purple-500\\/5{--un-gradient-via-position:50%;--un-gradient-to:rgb(168 85 247 / 0);--un-gradient-stops:var(--un-gradient-from), rgb(168 85 247 / 0.05) var(--un-gradient-via-position), var(--un-gradient-to);}\n.via-transparent{--un-gradient-via-position:50%;--un-gradient-to:rgb(255 255 255 / 0);--un-gradient-stops:var(--un-gradient-from), transparent var(--un-gradient-via-position), var(--un-gradient-to);}\n.to-black\\/20{--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0.2) var(--un-gradient-to-position);}\n.to-blue-500\\/5{--un-gradient-to-position:100%;--un-gradient-to:rgb(59 130 246 / 0.05) var(--un-gradient-to-position);}\n.to-blue-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(37 99 235 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}\n.to-transparent{--un-gradient-to-position:100%;--un-gradient-to:transparent var(--un-gradient-to-position);}\n.bg-gradient-to-b{--un-gradient-shape:to bottom in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.bg-gradient-to-t{--un-gradient-shape:to top in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}\n.p-1{padding:0.25rem;}\n.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}\n.text-\\[9px\\]{font-size:9px;}\n.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}\n.text-white\\/45{color:rgb(255 255 255 / 0.45) /* #fff */;}\n.hover\\:text-white\\/80:hover{color:rgb(255 255 255 / 0.8) /* #fff */;}\n.font-black{font-weight:900;}\n.tracking-\\[0\\.12em\\]{letter-spacing:0.12em;}\n.uppercase{text-transform:uppercase;}\n.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4;}\n.opacity-0{opacity:0;}\n.opacity-50{opacity:0.5;}\n.group:hover .group-hover\\:opacity-100{opacity:1;}\n.shadow-blue-500\\/20{--un-shadow-color:rgb(59 130 246 / 0.2) /* #3b82f6 */;}\n.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.shadow-md{--un-shadow:var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}\n.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}\n.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}\n.duration-300{transition-duration:300ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n title?: string\n collapsible?: boolean\n collapsed?: boolean\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n collapsible: false,\n collapsed: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n 'update:collapsed': [value: boolean]\n}>()\n\nconst toggleCollapse = () => {\n if (props.collapsible) {\n emit('update:collapsed', !props.collapsed)\n }\n}\n</script>\n\n<template>\n <div class=\"panel-container panel-base\" :class=\"className\">\n <div\n v-if=\"title || $slots.header\"\n class=\"panel-header\"\n :class=\"{ 'collapsible': collapsible }\"\n @click=\"toggleCollapse\"\n >\n <slot name=\"header\">\n <h3 class=\"panel-title\">{{ title }}</h3>\n </slot>\n <span v-if=\"collapsible\" class=\"collapse-icon\" :class=\"{ 'collapsed': collapsed }\">\n ▼\n </span>\n </div>\n <div v-show=\"!collapsed\" class=\"panel-content\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.panel-container {\n width: 100%;\n color: white;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--spacing-md);\n border-bottom: var(--border-width) solid var(--border-color-base);\n}\n\n.panel-header.collapsible {\n cursor: pointer;\n user-select: none;\n transition: var(--transition-base);\n}\n\n.panel-header.collapsible:hover {\n background: rgba(255, 255, 255, 0.03);\n}\n\n.panel-title {\n margin: 0;\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-semibold);\n color: rgba(255, 255, 255, 0.9);\n}\n\n.collapse-icon {\n font-size: var(--font-size-xs);\n color: rgba(255, 255, 255, 0.5);\n transition: transform var(--transition-base);\n}\n\n.collapse-icon.collapsed {\n transform: rotate(-90deg);\n}\n\n.panel-content {\n padding: var(--spacing-md);\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}\n.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(0.4, 0, 0.2, 1);transition-duration:150ms;}</style>","<script setup lang=\"ts\">\ninterface Props {\n title?: string\n spacing?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n spacing: 'md',\n className: '',\n})\n\nconst spacingClass = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n}\n</script>\n\n<template>\n <div class=\"section-container\" :class=\"[spacingClass[spacing], className]\">\n <h4 v-if=\"title\" class=\"section-title label-base\">\n {{ title }}\n </h4>\n <div class=\"section-content\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.section-container {\n display: flex;\n flex-direction: column;\n}\n\n.gap-2 {\n gap: var(--spacing-sm);\n}\n\n.gap-4 {\n gap: var(--spacing-md);\n}\n\n.gap-6 {\n gap: var(--spacing-lg);\n}\n\n.section-title {\n padding: 0 var(--spacing-xs);\n margin: 0;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: inherit;\n}\n</style>\n\n<style scoped>/* layer: preflights */\n*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}\n/* layer: default */\n.flex{display:flex;}\n.gap-2{gap:0.5rem;}\n.gap-4{gap:1rem;}\n.gap-6{gap:1.5rem;}</style>","/**\n * useI18n - 国际化Hook\n * 提供统一的国际化访问方法\n */\n\nimport { computed, type ComputedRef } from 'vue'\n\nexport interface I18nMessages {\n [key: string]: any\n}\n\nexport interface UseI18nOptions {\n messages: Record<string, I18nMessages>\n locale: ComputedRef<string> | string\n fallbackLocale?: string\n}\n\nexport function useI18n(options: UseI18nOptions) {\n const { messages, fallbackLocale = 'en' } = options\n \n const currentLocale = computed(() => {\n const locale = typeof options.locale === 'string' ? options.locale : options.locale.value\n return locale || fallbackLocale\n })\n\n /**\n * 翻译函数 - 支持路径访问\n * @param path - 翻译键路径,如 'tabs.settings'\n * @returns 翻译后的文本\n */\n const t = (path: string): string => {\n const locale = currentLocale.value\n const dict = messages[locale] || messages[fallbackLocale]\n \n if (!dict) {\n console.warn(`[useI18n] No messages found for locale: ${locale}`)\n return path\n }\n \n const keys = path.split('.')\n let result: any = dict\n \n for (const key of keys) {\n if (result && typeof result === 'object' && key in result) {\n result = result[key]\n } else {\n console.warn(`[useI18n] Translation not found: ${path} (locale: ${locale})`)\n return path\n }\n }\n \n return typeof result === 'string' ? result : path\n }\n\n /**\n * 翻译对象 - 用于元数据中的多语言对象\n * @param item - 包含多语言的对象,如 { en: 'Hello', 'zh-CN': '你好' }\n * @returns 当前语言的文本\n */\n const tObj = (item: Record<string, string>): string => {\n const locale = currentLocale.value\n return item[locale] || item[fallbackLocale] || item.en || ''\n }\n\n return {\n t,\n tObj,\n locale: currentLocale,\n }\n}\n"],"names":["clampNumber","value","min","max","normalizeIntRange","fallback","rand","precision","val","randInt","sample","array","hit","chance","shortId","length","chars","result","i","VIBRANT_PALETTES","hexToRgb","hex","r","g","b","hexToRgbNormalized","rgbToHex","x","adjustColor","options","brightness","offset","alpha","nr","ng","nb","res","a","hslToHex","h","s","f","n","k","color","generateHarmoniousPalette","count","baseHue","saturation","lightness","colors","generateRandomPalette","palette","additional","HEX_COLOR_RE","normalizeHexColor","trimmed","safeHexToRgbNormalized","props","__props","emit","__emit","displayValue","computed","decimals","handleInput","event","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","inputRef","ref","handleChange","openPicker","_hoisted_4","_Fragment","_renderList","option","handleClick","optionDisabled","$event","handleToggle","normalizedRows","columns","containerStyle","handleTabClick","tabId","tab","_openBlock","toggleCollapse","$slots","_renderSlot","_ctx","_withDirectives","spacingClass","useI18n","messages","fallbackLocale","currentLocale","path","locale","dict","keys","key","item"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bg-effects/shared",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"vite-plugin-css-injected-by-js": "^3.5.1",
|
|
31
31
|
"vite-plugin-dts": "^4.0.0",
|
|
32
32
|
"vue": "^3.5.13",
|
|
33
|
-
"@bg-effects/configs": "1.0.
|
|
33
|
+
"@bg-effects/configs": "1.0.2"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "vite build",
|