@yyc3/music-growth 1.0.0 → 2.0.1

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/StarPowerPanel.tsx","../src/components/StarPowerShop.tsx","../src/components/LeaderboardPanel.tsx","../src/components/AchievementsPanel.tsx","../src/components/IPMatrixPanel.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X, Star, Zap, Calendar, TrendingUp, Gift, Award,\n ChevronRight, Sparkles, RefreshCw,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface StarPowerPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower: number;\n onStarPowerUpdate: (sp: number) => void;\n onOpenShop?: () => void;\n}\n\ninterface VIPLevel {\n level: number;\n label: string;\n labelEn: string;\n threshold: number;\n color: string;\n dailyReward: number;\n nextThreshold: number | null;\n nextLabel: string | null;\n}\n\ninterface Transaction {\n id: string;\n type: 'earn' | 'spend';\n amount: number;\n reason: string;\n detail: string;\n timestamp: number;\n balance: number;\n}\n\nconst REASON_LABELS: Record<string, { zh: string; en: string }> = {\n daily_checkin: { zh: '每日签到', en: 'Daily Check-in' },\n like: { zh: '歌曲点赞', en: 'Song Like' },\n annotation: { zh: '情感标注', en: 'Emotion Annotation' },\n achievement: { zh: '成就解锁', en: 'Achievement Unlocked' },\n welcome: { zh: '注册奖励', en: 'Welcome Bonus' },\n};\n\nexport const StarPowerPanel: React.FC<StarPowerPanelProps> = ({\n isOpen, onClose, user, starPower, onStarPowerUpdate, onOpenShop,\n}) => {\n const { t, lang } = useI18n();\n const [vipLevel, setVipLevel] = useState<VIPLevel | null>(null);\n const [allLevels, setAllLevels] = useState<VIPLevel[]>([]);\n const [checkedInToday, setCheckedInToday] = useState(false);\n const [streak, setStreak] = useState(0);\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [loading, setLoading] = useState(false);\n const [checkinFlash, setCheckinFlash] = useState<{ reward: number; streak: number } | null>(null);\n const [showAllLevels, setShowAllLevels] = useState(false);\n\n const fetchData = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n const [levelData, txnData] = await Promise.all([\n apiFetch<any>(`/starpower/${user.id}/level`),\n apiFetch<any>(`/starpower/${user.id}/transactions`),\n ]);\n if (levelData) {\n setVipLevel(levelData.vipLevel);\n setAllLevels(levelData.allLevels || []);\n setCheckedInToday(levelData.checkedInToday || false);\n setStreak(levelData.streak || 0);\n }\n if (txnData?.transactions) {\n setTransactions(txnData.transactions);\n }\n } catch (err) { console.error('StarPower fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n useEffect(() => {\n if (isOpen && user) fetchData();\n }, [isOpen, user, fetchData]);\n\n const handleCheckin = async () => {\n if (!user || checkedInToday) return;\n try {\n const result = await apiFetch<any>(`/starpower/${user.id}/checkin`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n });\n if (result?.success) {\n setCheckedInToday(true);\n setStreak(result.streak);\n setCheckinFlash({ reward: result.reward, streak: result.streak });\n onStarPowerUpdate(result.starPower);\n setTimeout(() => setCheckinFlash(null), 3000);\n // Refresh transactions\n fetchData();\n } else if (result?.alreadyCheckedIn) {\n setCheckedInToday(true);\n }\n } catch (err) { console.error('Check-in error:', err); }\n };\n\n const progressToNext = vipLevel?.nextThreshold\n ? ((starPower - vipLevel.threshold) / (vipLevel.nextThreshold - vipLevel.threshold)) * 100\n : 100;\n\n function timeAgo(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < 60000) return lang === 'zh' ? '刚刚' : 'just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}${lang === 'zh' ? '分钟前' : 'm ago'}`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}${lang === 'zh' ? '小时前' : 'h ago'}`;\n return `${Math.floor(diff / 86400000)}${lang === 'zh' ? '天前' : 'd ago'}`;\n }\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Star className=\"w-4.5 h-4.5 text-yellow-400 fill-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('starpower.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('starpower.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {!user ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <p className=\"text-white/30 text-sm\">{t('starpower.signInRequired')}</p>\n </div>\n ) : (\n <div className=\"flex-1 overflow-y-auto p-4\" style={{ scrollbarWidth: 'none' }}>\n {/* Balance Card */}\n <div className=\"relative p-5 rounded-2xl bg-gradient-to-br from-yellow-500/10 via-orange-500/5 to-purple-500/10 border border-yellow-500/15 mb-4 overflow-hidden\">\n {/* Glow effect */}\n <div className=\"absolute -top-10 -right-10 w-32 h-32 bg-yellow-500/10 rounded-full blur-2xl\" />\n <div className=\"relative\">\n <p className=\"text-xs text-yellow-200/50 uppercase tracking-wider mb-1\">{t('starpower.balance')}</p>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-3xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-yellow-300 to-orange-400 font-mono tabular-nums\">\n {starPower.toLocaleString()}\n </span>\n <span className=\"text-xs text-yellow-300/40\">SP</span>\n </div>\n {vipLevel && (\n <div className=\"flex items-center gap-2 mt-2\">\n <span\n className=\"text-xs font-medium px-2 py-0.5 rounded-full border\"\n style={{ color: vipLevel.color, borderColor: vipLevel.color + '40', backgroundColor: vipLevel.color + '15' }}\n >\n {lang === 'zh' ? vipLevel.label : vipLevel.labelEn}\n </span>\n <span className=\"text-[10px] text-white/20\">Lv.{vipLevel.level}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Shop Button */}\n {onOpenShop && (\n <button\n onClick={() => { onClose(); setTimeout(onOpenShop, 150); }}\n className=\"w-full mb-4 flex items-center justify-between p-3 rounded-xl bg-gradient-to-r from-amber-500/[0.06] to-orange-500/[0.06] border border-amber-500/15 hover:border-amber-500/30 transition-all group\"\n >\n <div className=\"flex items-center gap-2\">\n <Gift className=\"w-4 h-4 text-amber-400\" />\n <span className=\"text-xs text-white/60 group-hover:text-white/80 transition-colors\">\n {lang === 'zh' ? '星力商城 — 兑换虚拟好物' : 'SP Shop — Redeem virtual items'}\n </span>\n </div>\n <ChevronRight className=\"w-3.5 h-3.5 text-white/20 group-hover:text-white/40 transition-colors\" />\n </button>\n )}\n\n {/* VIP Progress */}\n {vipLevel && (\n <div className=\"mb-4 p-3 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs text-white/40\">{t('starpower.vipLevel')}</span>\n {vipLevel.nextThreshold ? (\n <span className=\"text-[10px] text-white/25\">\n {t('starpower.needMore')} {(vipLevel.nextThreshold - starPower).toLocaleString()} {t('starpower.spMore')}\n </span>\n ) : (\n <span className=\"text-[10px] text-yellow-400/50\">{t('starpower.maxLevel')}</span>\n )}\n </div>\n <div className=\"h-2 rounded-full bg-white/[0.06] overflow-hidden\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${Math.min(progressToNext, 100)}%` }}\n transition={{ duration: 0.8, ease: 'easeOut' }}\n className=\"h-full rounded-full\"\n style={{ background: `linear-gradient(90deg, ${vipLevel.color}80, ${vipLevel.color})` }}\n />\n </div>\n {/* Level markers */}\n <button\n onClick={() => setShowAllLevels(!showAllLevels)}\n className=\"flex items-center gap-1 mt-2 text-[10px] text-white/20 hover:text-white/40 transition-colors\"\n >\n <Award className=\"w-3 h-3\" />\n {t('starpower.allLevels')}\n <ChevronRight className={clsx('w-3 h-3 transition-transform', showAllLevels && 'rotate-90')} />\n </button>\n <AnimatePresence>\n {showAllLevels && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden mt-2\"\n >\n <div className=\"space-y-1\">\n {allLevels.map(lvl => (\n <div\n key={lvl.level}\n className={clsx(\n 'flex items-center justify-between px-2 py-1 rounded-lg text-[11px]',\n starPower >= lvl.threshold ? 'bg-white/[0.03]' : 'opacity-40'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2 h-2 rounded-full\" style={{ backgroundColor: lvl.color }} />\n <span className=\"text-white/60\">\n {lang === 'zh' ? lvl.label : lvl.labelEn}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-white/25 font-mono tabular-nums\">{lvl.threshold.toLocaleString()} SP</span>\n <span className=\"text-white/20\">+{lvl.dailyReward}/day</span>\n </div>\n </div>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n\n {/* Daily Check-in */}\n <div className=\"mb-4 p-3 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"w-4 h-4 text-orange-400\" />\n <div>\n <p className=\"text-xs text-white/60\">{t('starpower.checkin')}</p>\n <p className=\"text-[10px] text-white/25\">\n {t('starpower.streak')}: {streak} {lang === 'zh' ? '天' : 'days'}\n </p>\n </div>\n </div>\n <button\n onClick={handleCheckin}\n disabled={checkedInToday}\n className={clsx(\n 'px-4 py-2 rounded-xl text-xs font-medium transition-all',\n checkedInToday\n ? 'bg-emerald-500/10 text-emerald-300 border border-emerald-500/20 cursor-default'\n : 'bg-gradient-to-r from-yellow-500/20 to-orange-500/20 text-yellow-300 border border-yellow-500/20 hover:from-yellow-500/30 hover:to-orange-500/30'\n )}\n >\n {checkedInToday ? t('starpower.checkinDone') : t('starpower.checkin')}\n </button>\n </div>\n {/* Check-in reward flash */}\n <AnimatePresence>\n {checkinFlash && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"mt-3 p-2 rounded-lg bg-yellow-500/10 border border-yellow-500/15 flex items-center gap-2\">\n <Sparkles className=\"w-4 h-4 text-yellow-400 flex-shrink-0\" />\n <span className=\"text-xs text-yellow-200\">\n {t('starpower.checkinReward')} +{checkinFlash.reward} SP\n {checkinFlash.streak > 1 && (\n <span className=\"text-yellow-300/50\"> ({t('starpower.streak')} ×{checkinFlash.streak})</span>\n )}\n </span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Transactions */}\n <div>\n <h4 className=\"text-xs font-medium text-white/30 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n {t('starpower.transactions')}\n </h4>\n {transactions.length === 0 ? (\n <div className=\"text-center py-8 bg-white/[0.01] rounded-xl border border-white/[0.04]\">\n <Gift className=\"w-8 h-8 text-white/10 mx-auto mb-2\" />\n <p className=\"text-xs text-white/20\">{t('starpower.noTransactions')}</p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {transactions.slice(0, 20).map(txn => {\n const label = REASON_LABELS[txn.reason]?.[lang] || txn.reason;\n return (\n <div key={txn.id} className=\"flex items-center justify-between py-2 px-2 rounded-lg hover:bg-white/[0.02] transition-colors\">\n <div className=\"flex items-center gap-2\">\n <div className={clsx(\n 'w-6 h-6 rounded-full flex items-center justify-center',\n txn.type === 'earn' ? 'bg-emerald-500/10' : 'bg-red-500/10'\n )}>\n {txn.type === 'earn'\n ? <TrendingUp className=\"w-3 h-3 text-emerald-400\" />\n : <Zap className=\"w-3 h-3 text-red-400\" />}\n </div>\n <div>\n <p className=\"text-[11px] text-white/60\">{label}</p>\n <p className=\"text-[9px] text-white/15\">{txn.detail} · {timeAgo(txn.timestamp)}</p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className={clsx(\n 'text-xs font-mono tabular-nums font-medium',\n txn.type === 'earn' ? 'text-emerald-400' : 'text-red-400'\n )}>\n {txn.type === 'earn' ? '+' : '-'}{txn.amount}\n </p>\n <p className=\"text-[9px] text-white/15 font-mono tabular-nums\">{txn.balance} SP</p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Star, ShoppingBag, Check, Package, Sparkles, Palette, Music, Zap, Megaphone, AlertCircle } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface StarPowerShopProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower: number;\n onStarPowerUpdate: (sp: number) => void;\n}\n\ninterface ShopItem {\n id: string;\n category: string;\n nameZh: string;\n nameEn: string;\n descZh: string;\n descEn: string;\n cost: number;\n icon: string;\n rarity: string;\n}\n\ninterface InventoryItem {\n itemId: string;\n purchasedAt: number;\n expiresAt: number | null;\n}\n\nconst CATEGORY_TABS = [\n { id: 'all', labelZh: '全部', labelEn: 'All', icon: ShoppingBag },\n { id: 'theme', labelZh: '主题', labelEn: 'Themes', icon: Palette },\n { id: 'sound', labelZh: '音色', labelEn: 'Sounds', icon: Music },\n { id: 'ai', labelZh: 'AI', labelEn: 'AI', icon: Sparkles },\n { id: 'badge', labelZh: '徽章', labelEn: 'Badges', icon: Star },\n { id: 'boost', labelZh: '加速', labelEn: 'Boost', icon: Zap },\n];\n\nconst RARITY_COLORS: Record<string, { bg: string; border: string; text: string; label: string; labelEn: string }> = {\n common: { bg: 'from-gray-500/10 to-gray-600/10', border: 'border-gray-500/20', text: 'text-gray-400', label: '普通', labelEn: 'Common' },\n rare: { bg: 'from-blue-500/10 to-cyan-500/10', border: 'border-blue-500/20', text: 'text-blue-400', label: '稀有', labelEn: 'Rare' },\n epic: { bg: 'from-purple-500/10 to-pink-500/10', border: 'border-purple-500/20', text: 'text-purple-400', label: '史诗', labelEn: 'Epic' },\n legendary: { bg: 'from-amber-500/10 to-orange-500/10', border: 'border-amber-500/20', text: 'text-amber-400', label: '传说', labelEn: 'Legendary' },\n};\n\nexport const StarPowerShop: React.FC<StarPowerShopProps> = ({\n isOpen, onClose, user, starPower, onStarPowerUpdate,\n}) => {\n const { lang } = useI18n();\n const [items, setItems] = useState<ShopItem[]>([]);\n const [inventory, setInventory] = useState<InventoryItem[]>([]);\n const [category, setCategory] = useState('all');\n const [loading, setLoading] = useState(false);\n const [purchasing, setPurchasing] = useState<string | null>(null);\n const [purchaseResult, setPurchaseResult] = useState<{ success: boolean; message: string } | null>(null);\n const [confirmItem, setConfirmItem] = useState<ShopItem | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n const [shopData, invData] = await Promise.all([\n apiFetch<{ items: ShopItem[] }>('/starpower/shop/items'),\n apiFetch<{ inventory: InventoryItem[] }>(`/starpower/shop/inventory/${user.id}`),\n ]);\n if (shopData?.items) setItems(shopData.items);\n if (invData?.inventory) setInventory(invData.inventory);\n } catch (err) { console.error('Shop fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n useEffect(() => {\n if (isOpen && user) fetchData();\n }, [isOpen, user, fetchData]);\n\n const isOwned = (itemId: string) => inventory.some(i => i.itemId === itemId);\n\n const handlePurchase = async (item: ShopItem) => {\n if (!user || purchasing) return;\n setPurchasing(item.id);\n setPurchaseResult(null);\n try {\n const result = await apiFetch<any>('/starpower/shop/purchase', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ userId: user.id, itemId: item.id }),\n });\n if (result?.success) {\n onStarPowerUpdate(result.starPower);\n setInventory(prev => [...prev, { itemId: item.id, purchasedAt: Date.now(), expiresAt: null }]);\n setPurchaseResult({ success: true, message: lang === 'zh' ? '购买成功!' : 'Purchase successful!' });\n } else {\n setPurchaseResult({ success: false, message: result?.error || (lang === 'zh' ? '购买失败' : 'Purchase failed') });\n }\n } catch (err) {\n setPurchaseResult({ success: false, message: lang === 'zh' ? '网络错误' : 'Network error' });\n }\n finally {\n setPurchasing(null);\n setConfirmItem(null);\n setTimeout(() => setPurchaseResult(null), 3000);\n }\n };\n\n const filteredItems = category === 'all' ? items : items.filter(i => i.category === category);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/98 backdrop-blur-2xl border-l border-white/[0.06] flex flex-col overflow-hidden\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center\">\n <ShoppingBag className=\"w-4 h-4 text-amber-400\" />\n </div>\n <div>\n <h2 className=\"text-base font-bold text-white leading-tight\">\n {lang === 'zh' ? '星力商城' : 'Star Power Shop'}\n </h2>\n <p className=\"text-[10px] text-white/30\">\n {lang === 'zh' ? '用星力值兑换虚拟好物' : 'Exchange SP for virtual items'}\n </p>\n </div>\n </div>\n <button onClick={onClose} className=\"w-7 h-7 rounded-full bg-white/5 flex items-center justify-center hover:bg-white/10 transition-colors\">\n <X className=\"w-3.5 h-3.5 text-white/40\" />\n </button>\n </div>\n\n {/* Balance */}\n <div className=\"px-5 py-3 bg-gradient-to-r from-amber-500/[0.06] to-orange-500/[0.06] border-b border-white/[0.04]\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Star className=\"w-4 h-4 text-yellow-400 fill-yellow-400\" />\n <span className=\"text-yellow-200 font-bold text-lg tabular-nums\">{starPower}</span>\n <span className=\"text-xs text-white/30\">{lang === 'zh' ? '可用星力值' : 'SP available'}</span>\n </div>\n <div className=\"flex items-center gap-1 text-[10px] text-white/20\">\n <Package className=\"w-3 h-3\" />\n {inventory.length} {lang === 'zh' ? '件已拥有' : 'owned'}\n </div>\n </div>\n </div>\n\n {/* Category Tabs */}\n <div className=\"px-4 py-2.5 border-b border-white/[0.04] overflow-x-auto no-scrollbar\">\n <div className=\"flex items-center gap-1.5\">\n {CATEGORY_TABS.map((tab) => {\n const Icon = tab.icon;\n const isActive = category === tab.id;\n return (\n <button\n key={tab.id}\n onClick={() => setCategory(tab.id)}\n className={clsx(\n 'flex items-center gap-1.5 px-3 py-1.5 rounded-full text-xs font-medium whitespace-nowrap transition-all',\n isActive\n ? 'bg-amber-500/15 text-amber-400 border border-amber-500/30'\n : 'bg-white/[0.03] text-white/30 border border-transparent hover:bg-white/[0.06] hover:text-white/50'\n )}\n >\n <Icon className=\"w-3 h-3\" />\n {lang === 'zh' ? tab.labelZh : tab.labelEn}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Purchase Result Toast */}\n <AnimatePresence>\n {purchaseResult && (\n <motion.div\n initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -10 }}\n className={clsx(\n 'mx-4 mt-2 px-3 py-2 rounded-lg text-xs font-medium flex items-center gap-2',\n purchaseResult.success\n ? 'bg-emerald-500/15 text-emerald-400 border border-emerald-500/20'\n : 'bg-red-500/15 text-red-400 border border-red-500/20'\n )}\n >\n {purchaseResult.success ? <Check className=\"w-3.5 h-3.5\" /> : <AlertCircle className=\"w-3.5 h-3.5\" />}\n {purchaseResult.message}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Items Grid */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-amber-400/30 border-t-amber-400 rounded-full animate-spin\" />\n </div>\n ) : filteredItems.length === 0 ? (\n <div className=\"text-center py-10\">\n <ShoppingBag className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-sm text-white/30\">\n {lang === 'zh' ? '此分类暂无商品' : 'No items in this category'}\n </p>\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-3\">\n {filteredItems.map((item) => {\n const rarity = RARITY_COLORS[item.rarity] || RARITY_COLORS.common;\n const owned = isOwned(item.id);\n const affordable = starPower >= item.cost;\n return (\n <motion.button\n key={item.id}\n whileTap={{ scale: 0.97 }}\n onClick={() => !owned && setConfirmItem(item)}\n disabled={owned}\n className={clsx(\n 'relative flex flex-col p-3 rounded-xl border text-left transition-all',\n owned\n ? 'bg-white/[0.02] border-white/[0.04] opacity-60'\n : `bg-gradient-to-br ${rarity.bg} ${rarity.border} hover:brightness-110`\n )}\n >\n {/* Rarity label */}\n <span className={clsx('absolute top-2 right-2 text-[8px] font-bold uppercase tracking-wider', rarity.text)}>\n {lang === 'zh' ? rarity.label : rarity.labelEn}\n </span>\n\n {/* Icon */}\n <span className=\"text-2xl mb-2\">{item.icon}</span>\n\n {/* Name */}\n <p className=\"text-xs text-white font-semibold leading-tight\">\n {lang === 'zh' ? item.nameZh : item.nameEn}\n </p>\n\n {/* Description */}\n <p className=\"text-[10px] text-white/30 mt-0.5 leading-tight line-clamp-2\">\n {lang === 'zh' ? item.descZh : item.descEn}\n </p>\n\n {/* Price / Owned */}\n <div className=\"mt-auto pt-2 flex items-center justify-between\">\n {owned ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-400/60\">\n <Check className=\"w-3 h-3\" />\n {lang === 'zh' ? '已拥有' : 'Owned'}\n </span>\n ) : (\n <span className={clsx(\n 'flex items-center gap-1 text-xs font-bold',\n affordable ? 'text-yellow-400' : 'text-red-400/60'\n )}>\n <Star className=\"w-3 h-3 fill-current\" />\n {item.cost}\n </span>\n )}\n </div>\n </motion.button>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Confirm Purchase Modal */}\n <AnimatePresence>\n {confirmItem && (\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"absolute inset-0 z-10 bg-black/70 backdrop-blur-sm flex items-center justify-center p-6\"\n onClick={() => setConfirmItem(null)}\n >\n <motion.div\n initial={{ scale: 0.9, opacity: 0 }} animate={{ scale: 1, opacity: 1 }} exit={{ scale: 0.9, opacity: 0 }}\n onClick={(e) => e.stopPropagation()}\n className=\"w-full max-w-[280px] bg-[#0F1540] border border-white/10 rounded-2xl p-5 text-center\"\n >\n <span className=\"text-4xl block mb-3\">{confirmItem.icon}</span>\n <p className=\"text-white font-bold text-sm\">\n {lang === 'zh' ? confirmItem.nameZh : confirmItem.nameEn}\n </p>\n <p className=\"text-white/30 text-[11px] mt-1\">\n {lang === 'zh' ? confirmItem.descZh : confirmItem.descEn}\n </p>\n\n <div className=\"flex items-center justify-center gap-1 my-4 text-yellow-400 font-bold\">\n <Star className=\"w-4 h-4 fill-yellow-400\" />\n <span className=\"text-lg\">{confirmItem.cost}</span>\n <span className=\"text-xs text-yellow-400/50 ml-1\">SP</span>\n </div>\n\n {starPower < confirmItem.cost ? (\n <p className=\"text-xs text-red-400/70 mb-3\">\n {lang === 'zh' ? `星力值不足(需 ${confirmItem.cost},当前 ${starPower})` : `Insufficient SP (need ${confirmItem.cost}, have ${starPower})`}\n </p>\n ) : null}\n\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmItem(null)}\n className=\"flex-1 py-2 rounded-lg bg-white/5 text-white/50 text-xs hover:bg-white/10 transition-colors\"\n >\n {lang === 'zh' ? '取消' : 'Cancel'}\n </button>\n <button\n onClick={() => handlePurchase(confirmItem)}\n disabled={starPower < confirmItem.cost || !!purchasing}\n className={clsx(\n 'flex-1 py-2 rounded-lg text-xs font-medium transition-all',\n starPower >= confirmItem.cost\n ? 'bg-gradient-to-r from-amber-500 to-orange-500 text-white hover:brightness-110'\n : 'bg-white/5 text-white/20 cursor-not-allowed'\n )}\n >\n {purchasing ? '...' : (lang === 'zh' ? '确认购买' : 'Confirm')}\n </button>\n </div>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X,\n Trophy,\n Crown,\n Medal,\n TrendingUp,\n TrendingDown,\n Minus,\n Heart,\n Play,\n MessageCircle,\n RefreshCw,\n Info,\n Sparkles,\n ArrowUp,\n ArrowDown,\n Zap,\n Rocket,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { DEMO_PLAYLIST } from '@yyc3/music-data';\nimport { ImageWithFallback } from '@yyc3/music-ui';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface LeaderboardPanelProps {\n isOpen: boolean;\n onClose: () => void;\n onSelectTrack?: (songId: string) => void;\n user?: any;\n starPower?: number;\n onStarPowerUpdate?: (sp: number) => void;\n}\n\ninterface RankingEntry {\n songId: string;\n likes: number;\n plays: number;\n comments: number;\n wilsonScore: number;\n engagement: number;\n}\n\n// Rank change: positive = moved up, negative = moved down, 0 = same, null = new\ninterface RankingWithChange extends RankingEntry {\n rankChange: number | null;\n previousRank: number | null;\n}\n\nconst RANK_DECORATIONS = [\n { icon: Crown, color: 'text-yellow-400', bg: 'from-yellow-500/20 to-amber-500/20', border: 'border-yellow-500/30', glow: 'shadow-yellow-500/20', barColor: 'from-yellow-400 to-amber-500' },\n { icon: Medal, color: 'text-gray-300', bg: 'from-gray-400/20 to-slate-400/20', border: 'border-gray-400/20', glow: 'shadow-gray-400/10', barColor: 'from-gray-300 to-slate-400' },\n { icon: Medal, color: 'text-amber-600', bg: 'from-amber-600/20 to-orange-600/20', border: 'border-amber-600/20', glow: 'shadow-amber-600/10', barColor: 'from-amber-500 to-orange-500' },\n];\n\nconst STORAGE_KEY = 'dmusic-leaderboard-prev';\n\nfunction loadPreviousRankings(): Record<string, number> {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw) return JSON.parse(raw);\n } catch {}\n return {};\n}\n\nfunction savePreviousRankings(rankings: RankingEntry[]) {\n try {\n const map: Record<string, number> = {};\n rankings.forEach((r, i) => { map[r.songId] = i + 1; });\n localStorage.setItem(STORAGE_KEY, JSON.stringify(map));\n } catch {}\n}\n\nfunction computeRankChanges(rankings: RankingEntry[]): RankingWithChange[] {\n const prev = loadPreviousRankings();\n const hasPrev = Object.keys(prev).length > 0;\n\n return rankings.map((entry, index) => {\n const currentRank = index + 1;\n const previousRank = prev[entry.songId] ?? null;\n\n let rankChange: number | null = null;\n if (!hasPrev) {\n rankChange = null; // First load, no change data\n } else if (previousRank === null) {\n rankChange = null; // New entry\n } else {\n rankChange = previousRank - currentRank; // positive = moved up\n }\n\n return { ...entry, rankChange, previousRank };\n });\n}\n\n// Wilson score bar max value for normalization\nfunction getMaxWilson(rankings: RankingEntry[]): number {\n if (rankings.length === 0) return 1;\n return Math.max(...rankings.map(r => r.wilsonScore), 0.0001);\n}\n\nexport const LeaderboardPanel: React.FC<LeaderboardPanelProps> = ({\n isOpen,\n onClose,\n onSelectTrack,\n user,\n starPower = 0,\n onStarPowerUpdate,\n}) => {\n const [rankings, setRankings] = useState<RankingWithChange[]>([]);\n const [rawRankings, setRawRankings] = useState<RankingEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [showInfo, setShowInfo] = useState(false);\n const [boostFlash, setBoostFlash] = useState<string | null>(null);\n const isFirstLoad = useRef(true);\n const { t } = useI18n();\n\n const handleBoost = async (songId: string) => {\n if (!user || starPower < 100) return;\n try {\n const result = await apiFetch<any>('/leaderboard/boost', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ userId: user.id, songId, amount: 100 }),\n });\n if (result?.success) {\n onStarPowerUpdate?.(result.starPower);\n setBoostFlash(songId);\n setTimeout(() => setBoostFlash(null), 2000);\n // Refresh leaderboard\n if (rawRankings.length > 0) savePreviousRankings(rawRankings);\n fetchLeaderboard();\n }\n } catch (err) { console.error('Boost error:', err); }\n };\n\n const fetchLeaderboard = useCallback(async () => {\n setLoading(true);\n try {\n const result = await apiFetch<{ rankings: RankingEntry[] }>('/leaderboard');\n if (result?.rankings) {\n const withChanges = computeRankChanges(result.rankings);\n setRankings(withChanges);\n setRawRankings(result.rankings);\n\n // Save current as \"previous\" for next comparison (delay to avoid self-comparison on rapid refresh)\n if (!isFirstLoad.current) {\n savePreviousRankings(result.rankings);\n } else {\n // On first load, if no previous data exists, seed it\n const prev = loadPreviousRankings();\n if (Object.keys(prev).length === 0) {\n savePreviousRankings(result.rankings);\n }\n isFirstLoad.current = false;\n }\n }\n } catch (err) {\n console.error('Failed to fetch leaderboard:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) fetchLeaderboard();\n }, [isOpen, fetchLeaderboard]);\n\n const getTrack = (songId: string) => DEMO_PLAYLIST.find((t) => t.id === songId);\n\n const maxWilson = getMaxWilson(rawRankings);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n <motion.div\n initial={{ x: '100%', opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Trophy className=\"w-4.5 h-4.5 text-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('leaderboard.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('leaderboard.subtitle')}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setShowInfo(!showInfo)}\n className={clsx(\n 'p-2 rounded-lg border transition-all',\n showInfo\n ? 'bg-blue-500/10 border-blue-500/20 text-blue-400'\n : 'bg-white/5 border-white/[0.08] text-white/40 hover:text-white/70'\n )}\n title={t('leaderboard.aboutWilson')}\n >\n <Info className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => {\n // Save current before refreshing so next fetch shows changes\n if (rawRankings.length > 0) savePreviousRankings(rawRankings);\n fetchLeaderboard();\n }}\n disabled={loading}\n className={clsx(\n 'p-2 rounded-lg bg-white/5 hover:bg-white/10 border border-white/[0.08] text-white/60 hover:text-white transition-all',\n loading && 'animate-spin'\n )}\n >\n <RefreshCw className=\"w-4 h-4\" />\n </button>\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Wilson Score Info */}\n <AnimatePresence>\n {showInfo && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden border-b border-white/[0.04]\"\n >\n <div className=\"p-4 bg-blue-500/5\">\n <h4 className=\"text-xs font-semibold text-blue-300 mb-2 flex items-center gap-1.5\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n {t('leaderboard.wilsonAlgorithm')}\n </h4>\n <p className=\"text-xs text-white/40 leading-relaxed\">\n {t('leaderboard.wilsonInfo')}\n </p>\n <div className=\"mt-2 p-2 bg-white/[0.03] rounded-lg font-mono text-[10px] text-white/30\">\n score = (p̂ + z²/2n − z√(p̂(1−p̂)/n + z²/4n²)) / (1 + z²/n)\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Rankings */}\n <div className=\"flex-1 overflow-y-auto\" style={{ scrollbarWidth: 'none' }}>\n {loading && rankings.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <div className=\"w-6 h-6 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin\" />\n </div>\n ) : rankings.length === 0 ? (\n <div className=\"text-center py-16 px-6\">\n <Trophy className=\"w-12 h-12 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('leaderboard.noRankings')}</p>\n <p className=\"text-white/15 text-xs mt-1\">\n {t('leaderboard.buildBoard')}\n </p>\n </div>\n ) : (\n <div className=\"p-4 space-y-2\">\n {rankings.map((entry, index) => {\n const track = getTrack(entry.songId);\n const decoration = RANK_DECORATIONS[index];\n const isTop3 = index < 3;\n const RankIcon = decoration?.icon || Trophy;\n const wilsonPercent = maxWilson > 0 ? (entry.wilsonScore / maxWilson) * 100 : 0;\n const totalEngagement = entry.plays + entry.likes + entry.comments;\n\n return (\n <motion.div\n key={entry.songId}\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.08 }}\n onClick={() => onSelectTrack?.(entry.songId)}\n className={clsx(\n 'p-4 rounded-xl border transition-all cursor-pointer group relative',\n isTop3\n ? `bg-gradient-to-r ${decoration.bg} ${decoration.border} shadow-lg ${decoration.glow}`\n : 'bg-white/[0.02] border-white/[0.06] hover:bg-white/[0.04]'\n )}\n >\n {/* Rank Change Badge — top-right corner */}\n <RankChangeBadge change={entry.rankChange} />\n\n <div className=\"flex items-center gap-3\">\n {/* Rank */}\n <div className={clsx(\n 'w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0',\n isTop3\n ? `bg-white/10`\n : 'bg-white/[0.04]'\n )}>\n {isTop3 ? (\n <RankIcon className={clsx('w-4 h-4', decoration?.color)} />\n ) : (\n <span className=\"text-xs font-mono text-white/30\">{index + 1}</span>\n )}\n </div>\n\n {/* Album Art */}\n {track && (\n <div className=\"w-10 h-10 rounded-lg overflow-hidden flex-shrink-0\">\n <ImageWithFallback\n src={track.albumArt}\n alt={track.title}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Song Info */}\n <div className=\"flex-1 min-w-0\">\n <p className={clsx(\n 'text-sm font-medium truncate',\n isTop3 ? 'text-white' : 'text-white/80'\n )}>\n {track?.title || entry.songId}\n </p>\n <p className=\"text-xs text-white/30 truncate\">{track?.artist || t('leaderboard.unknown')}</p>\n </div>\n\n {/* Score */}\n <div className=\"text-right flex-shrink-0\">\n <p className={clsx(\n 'text-sm font-bold font-mono tabular-nums',\n isTop3 ? decoration?.color : 'text-white/60'\n )}>\n {entry.wilsonScore.toFixed(4)}\n </p>\n <p className=\"text-[10px] text-white/20\">{t('leaderboard.score')}</p>\n </div>\n </div>\n\n {/* Wilson Score Visualization Bar */}\n <div className=\"mt-3 ml-11\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-[10px] text-white/20 flex items-center gap-1\">\n <Zap className=\"w-2.5 h-2.5\" />\n {t('leaderboard.wilsonBar')}\n </span>\n <span className=\"text-[10px] text-white/25 font-mono tabular-nums\">\n {(wilsonPercent).toFixed(1)}%\n </span>\n </div>\n <div className=\"h-1.5 rounded-full bg-white/[0.06] overflow-hidden\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${wilsonPercent}%` }}\n transition={{ delay: index * 0.08 + 0.3, duration: 0.6, ease: 'easeOut' }}\n className={clsx(\n 'h-full rounded-full bg-gradient-to-r',\n isTop3\n ? decoration.barColor\n : 'from-indigo-400 to-purple-500'\n )}\n />\n </div>\n </div>\n\n {/* Stats Row */}\n <div className=\"flex items-center gap-4 mt-2.5 ml-11\">\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <Play className=\"w-3 h-3\" />\n {entry.plays}\n </span>\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <Heart className=\"w-3 h-3\" />\n {entry.likes}\n </span>\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <MessageCircle className=\"w-3 h-3\" />\n {entry.comments}\n </span>\n {user && starPower >= 100 && (\n <button\n onClick={(e) => { e.stopPropagation(); handleBoost(entry.songId); }}\n disabled={boostFlash === entry.songId}\n className={clsx(\n 'ml-auto flex items-center gap-1 px-2 py-0.5 rounded-full text-[9px] font-medium border transition-all',\n boostFlash === entry.songId\n ? 'bg-emerald-500/15 text-emerald-300 border-emerald-500/20'\n : 'bg-yellow-500/10 text-yellow-300/70 border-yellow-500/15 hover:bg-yellow-500/20 hover:text-yellow-300'\n )}\n title={t('starpower.boostCost')}\n >\n <Rocket className=\"w-2.5 h-2.5\" />\n {boostFlash === entry.songId ? t('starpower.boostSuccess') : `${t('starpower.boost')} 100SP`}\n </button>\n )}\n {(!user || starPower < 100) && (\n <span className=\"text-[10px] text-white/15 ml-auto flex items-center gap-1\">\n <Sparkles className=\"w-2.5 h-2.5\" />\n {totalEngagement} {t('leaderboard.totalEngagement')}\n </span>\n )}\n </div>\n </motion.div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"p-4 border-t border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-white/20\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs\">{t('leaderboard.poweredBy')}</span>\n </div>\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n\n// ==========================================\n// Rank Change Badge Component\n// ==========================================\nconst RankChangeBadge: React.FC<{ change: number | null }> = ({ change }) => {\n const { t } = useI18n();\n\n if (change === null) {\n // New entry or first load — show \"NEW\" sparkle\n return (\n <motion.div\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ delay: 0.4, type: 'spring', damping: 12 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-cyan-500/15 border border-cyan-500/20\"\n >\n <Sparkles className=\"w-2.5 h-2.5 text-cyan-400\" />\n <span className=\"text-[9px] font-semibold text-cyan-400\">{t('leaderboard.rankNew')}</span>\n </motion.div>\n );\n }\n\n if (change === 0) {\n return (\n <div className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-white/[0.04] border border-white/[0.06]\">\n <Minus className=\"w-2.5 h-2.5 text-white/25\" />\n <span className=\"text-[9px] text-white/25\">{t('leaderboard.rankSame')}</span>\n </div>\n );\n }\n\n if (change > 0) {\n return (\n <motion.div\n initial={{ y: 5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ delay: 0.3 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-emerald-500/15 border border-emerald-500/20\"\n >\n <ArrowUp className=\"w-2.5 h-2.5 text-emerald-400\" />\n <span className=\"text-[9px] font-semibold text-emerald-400\">\n {change} {t('leaderboard.rankUp')}\n </span>\n </motion.div>\n );\n }\n\n // change < 0\n return (\n <motion.div\n initial={{ y: -5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ delay: 0.3 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-red-500/15 border border-red-500/20\"\n >\n <ArrowDown className=\"w-2.5 h-2.5 text-red-400\" />\n <span className=\"text-[9px] font-semibold text-red-400\">\n {Math.abs(change)} {t('leaderboard.rankDown')}\n </span>\n </motion.div>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Trophy, Lock, Sparkles, TrendingUp, Star, Flame } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface AchievementsPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower?: number;\n}\n\ninterface Achievement {\n id: string;\n nameZh: string;\n nameEn: string;\n descZh: string;\n descEn: string;\n icon: string;\n unlocked: boolean;\n newlyUnlocked: boolean;\n}\n\ninterface AchievementStats {\n totalWorks?: number;\n streakDays?: number;\n totalLikesReceived?: number;\n totalForks?: number;\n totalPlays?: number;\n totalMessages?: number;\n totalCapsules?: number;\n peakStarPower?: number;\n locationMessages?: number;\n voiceMessages?: number;\n}\n\nexport const AchievementsPanel: React.FC<AchievementsPanelProps> = ({\n isOpen, onClose, user, starPower = 0,\n}) => {\n const { t, lang } = useI18n();\n const [achievements, setAchievements] = useState<Achievement[]>([]);\n const [stats, setStats] = useState<AchievementStats>({});\n const [totalUnlocked, setTotalUnlocked] = useState(0);\n const [totalAchievements, setTotalAchievements] = useState(12);\n const [loading, setLoading] = useState(false);\n const [showNewBadge, setShowNewBadge] = useState<string | null>(null);\n\n const fetchAchievements = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n // Track daily login + update star power\n await apiFetch(`/achievements/${user.id}/track`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'daily_login', starPower }),\n });\n\n const data = await apiFetch<{\n achievements: Achievement[];\n stats: AchievementStats;\n totalUnlocked: number;\n totalAchievements: number;\n }>(`/achievements/${user.id}`);\n\n if (data?.achievements) {\n setAchievements(data.achievements);\n setStats(data.stats || {});\n setTotalUnlocked(data.totalUnlocked);\n setTotalAchievements(data.totalAchievements);\n\n // Show celebration for newly unlocked\n const newOne = data.achievements.find(a => a.newlyUnlocked);\n if (newOne) {\n setShowNewBadge(newOne.id);\n setTimeout(() => setShowNewBadge(null), 4000);\n }\n }\n } catch (err) { console.error('Achievements fetch error:', err); }\n finally { setLoading(false); }\n }, [user, starPower]);\n\n useEffect(() => {\n if (isOpen && user) fetchAchievements();\n }, [isOpen, user, fetchAchievements]);\n\n const progressPercent = totalAchievements > 0 ? (totalUnlocked / totalAchievements) * 100 : 0;\n\n const STAT_DISPLAY: Array<{ key: keyof AchievementStats; labelZh: string; labelEn: string; icon: React.ElementType; color: string }> = [\n { key: 'totalWorks', labelZh: '总作品', labelEn: 'Works', icon: Star, color: 'text-yellow-400' },\n { key: 'streakDays', labelZh: '连续天数', labelEn: 'Streak', icon: Flame, color: 'text-orange-400' },\n { key: 'totalLikesReceived', labelZh: '获赞', labelEn: 'Likes', icon: TrendingUp, color: 'text-pink-400' },\n { key: 'totalMessages', labelZh: '喊话', labelEn: 'Messages', icon: Sparkles, color: 'text-purple-400' },\n ];\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Trophy className=\"w-4.5 h-4.5 text-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('achievements.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('achievements.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-4\" style={{ scrollbarWidth: 'none' }}>\n {!user ? (\n <div className=\"text-center py-16\">\n <Trophy className=\"w-12 h-12 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{lang === 'zh' ? '登录后查看成就' : 'Sign in to view achievements'}</p>\n </div>\n ) : loading && achievements.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <div className=\"w-6 h-6 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin\" />\n </div>\n ) : (\n <>\n {/* Progress Overview */}\n <div className=\"p-4 rounded-2xl bg-gradient-to-br from-yellow-500/[0.06] to-orange-500/[0.06] border border-yellow-500/10\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <p className=\"text-xs text-white/40 uppercase tracking-wider font-medium\">{t('achievements.progress')}</p>\n <p className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-yellow-400 to-orange-400 mt-0.5\">\n {totalUnlocked} / {totalAchievements}\n </p>\n </div>\n <div className=\"w-16 h-16 relative\">\n <svg className=\"w-16 h-16 transform -rotate-90\" viewBox=\"0 0 64 64\">\n <circle cx=\"32\" cy=\"32\" r=\"28\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" className=\"text-white/[0.04]\" />\n <circle\n cx=\"32\" cy=\"32\" r=\"28\" fill=\"none\"\n stroke=\"url(#achieveGrad)\"\n strokeWidth=\"4\"\n strokeDasharray={`${175.9 * progressPercent / 100} 175.9`}\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient id=\"achieveGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#eab308\" />\n <stop offset=\"100%\" stopColor=\"#f97316\" />\n </linearGradient>\n </defs>\n </svg>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"text-xs font-bold text-yellow-300\">{Math.round(progressPercent)}%</span>\n </div>\n </div>\n </div>\n\n {/* Quick stats */}\n <div className=\"grid grid-cols-4 gap-2 mt-3 pt-3 border-t border-white/[0.04]\">\n {STAT_DISPLAY.map(sd => {\n const Icon = sd.icon;\n return (\n <div key={sd.key} className=\"text-center\">\n <Icon className={clsx('w-3.5 h-3.5 mx-auto mb-0.5', sd.color)} />\n <p className=\"text-sm font-semibold text-white/80\">{stats[sd.key] || 0}</p>\n <p className=\"text-[9px] text-white/25\">{lang === 'zh' ? sd.labelZh : sd.labelEn}</p>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* New Badge Celebration */}\n <AnimatePresence>\n {showNewBadge && (() => {\n const badge = achievements.find(a => a.id === showNewBadge);\n if (!badge) return null;\n return (\n <motion.div\n key=\"celebration\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n className=\"p-4 rounded-2xl bg-gradient-to-br from-yellow-500/15 to-orange-500/15 border border-yellow-500/25 text-center\"\n >\n <motion.div\n animate={{ rotate: [0, -10, 10, -10, 10, 0] }}\n transition={{ duration: 0.6, delay: 0.3 }}\n className=\"text-4xl mb-2\"\n >\n {badge.icon}\n </motion.div>\n <p className=\"text-xs text-yellow-300 font-semibold uppercase tracking-wider\">\n {lang === 'zh' ? '新成就解锁!' : 'Achievement Unlocked!'}\n </p>\n <p className=\"text-sm font-bold text-white/90 mt-1\">\n {lang === 'zh' ? badge.nameZh : badge.nameEn}\n </p>\n <p className=\"text-[10px] text-white/40 mt-0.5\">\n {lang === 'zh' ? badge.descZh : badge.descEn}\n </p>\n </motion.div>\n );\n })()}\n </AnimatePresence>\n\n {/* Achievement Grid */}\n <div>\n <p className=\"text-xs text-white/40 uppercase tracking-wider font-medium mb-3\">{t('achievements.allBadges')}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {achievements.map((ach, idx) => (\n <motion.div\n key={ach.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: idx * 0.05 }}\n className={clsx(\n 'p-3 rounded-xl border transition-all relative',\n ach.unlocked\n ? 'bg-gradient-to-br from-white/[0.04] to-white/[0.02] border-yellow-500/15 hover:border-yellow-500/25'\n : 'bg-white/[0.01] border-white/[0.04] opacity-50'\n )}\n >\n {ach.newlyUnlocked && (\n <motion.div\n animate={{ scale: [1, 1.2, 1] }}\n transition={{ duration: 1.5, repeat: Infinity }}\n className=\"absolute -top-1 -right-1 w-3 h-3 rounded-full bg-yellow-400/50 border border-yellow-400/30\"\n />\n )}\n <div className=\"flex items-center gap-2 mb-1.5\">\n <span className=\"text-xl\">{ach.unlocked ? ach.icon : '🔒'}</span>\n {ach.unlocked && (\n <span className=\"text-[8px] px-1 py-0.5 rounded-full bg-yellow-500/15 text-yellow-300 border border-yellow-500/15 font-medium\">\n {lang === 'zh' ? '已解锁' : 'Unlocked'}\n </span>\n )}\n </div>\n <p className={clsx('text-xs font-medium', ach.unlocked ? 'text-white/80' : 'text-white/30')}>\n {lang === 'zh' ? ach.nameZh : ach.nameEn}\n </p>\n <p className={clsx('text-[10px] mt-0.5 leading-relaxed', ach.unlocked ? 'text-white/40' : 'text-white/15')}>\n {lang === 'zh' ? ach.descZh : ach.descEn}\n </p>\n </motion.div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"p-3 border-t border-white/[0.06] flex-shrink-0 flex items-center justify-center\">\n <div className=\"flex items-center gap-1.5 text-white/15\">\n <Trophy className=\"w-3 h-3\" />\n <span className=\"text-[10px]\">{t('achievements.subtitle')}</span>\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X, Star, Music, Heart, Play, Award,\n Calendar, Sparkles, ExternalLink, BarChart3,\n Users, ArrowLeft, ChevronRight, GitFork, GitBranch,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\nimport type { UserProfileData } from '@yyc3/music-data';\n\ninterface IPMatrixPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n profile: UserProfileData | null;\n starPower: number;\n onOpenCreationStudio: () => void;\n}\n\ninterface SharedWork {\n workId: string;\n title: string;\n theme: string;\n lyrics: string[];\n mode: string;\n createdAt: number;\n sharedAt: number;\n userName: string;\n userId?: string;\n likes: number;\n plays: number;\n forkedFrom?: { workId: string; author: string; forkedAt: number } | null;\n}\n\ninterface ForkNode {\n workId: string;\n author: string;\n forkedAt: number;\n}\n\ninterface CreatorInfo {\n userName: string;\n userId?: string;\n works: number;\n totalLikes: number;\n latestWork: number;\n}\n\nconst THEME_COLORS: Record<string, string> = {\n happy: 'from-yellow-500/20 to-amber-500/20 border-yellow-500/20',\n sad: 'from-blue-500/20 to-indigo-500/20 border-blue-500/20',\n energetic: 'from-orange-500/20 to-red-500/20 border-orange-500/20',\n calm: 'from-cyan-500/20 to-teal-500/20 border-cyan-500/20',\n love: 'from-pink-500/20 to-rose-500/20 border-pink-500/20',\n};\n\nconst THEME_EMOJIS: Record<string, string> = {\n happy: '😊', sad: '😢', energetic: '⚡', calm: '🌙', love: '❤️',\n};\n\nconst CREATOR_LEVELS = [\n { min: 0, label: '新手创作者', labelEn: 'Beginner', icon: '🌱' },\n { min: 3, label: '铜牌创作者', labelEn: 'Bronze Creator', icon: '🥉' },\n { min: 8, label: '银牌创作者', labelEn: 'Silver Creator', icon: '🥈' },\n { min: 15, label: '金牌创作者', labelEn: 'Gold Creator', icon: '🥇' },\n { min: 30, label: '星级创作者', labelEn: 'Star Creator', icon: '⭐' },\n];\n\nfunction getCreatorLevel(workCount: number) {\n let result = CREATOR_LEVELS[0];\n for (const lvl of CREATOR_LEVELS) {\n if (workCount >= lvl.min) result = lvl;\n }\n return result;\n}\n\nexport const IPMatrixPanel: React.FC<IPMatrixPanelProps> = ({\n isOpen, onClose, user, profile, starPower, onOpenCreationStudio,\n}) => {\n const { t, lang } = useI18n();\n const [tab, setTab] = useState<'profile' | 'portfolio' | 'analytics' | 'explore'>('profile');\n const [works, setWorks] = useState<SharedWork[]>([]);\n const [loading, setLoading] = useState(false);\n\n // Explore creators state\n const [creators, setCreators] = useState<CreatorInfo[]>([]);\n const [creatorsLoading, setCreatorsLoading] = useState(false);\n const [viewingCreator, setViewingCreator] = useState<string | null>(null);\n const [creatorWorks, setCreatorWorks] = useState<SharedWork[]>([]);\n const [creatorWorksLoading, setCreatorWorksLoading] = useState(false);\n\n // Fork state\n const [forkingWorkId, setForkingWorkId] = useState<string | null>(null);\n const [forkChain, setForkChain] = useState<ForkNode[]>([]);\n const [showForkTree, setShowForkTree] = useState<string | null>(null);\n const [forkTreeLoading, setForkTreeLoading] = useState(false);\n\n const fetchCreators = useCallback(async () => {\n setCreatorsLoading(true);\n try {\n const data = await apiFetch<{ creators: CreatorInfo[] }>('/creators');\n if (data?.creators) setCreators(data.creators);\n } catch (err) { console.error('Creators fetch error:', err); }\n finally { setCreatorsLoading(false); }\n }, []);\n\n const fetchCreatorWorks = useCallback(async (userName: string) => {\n setCreatorWorksLoading(true);\n try {\n const data = await apiFetch<{ works: SharedWork[] }>(`/creators/${encodeURIComponent(userName)}/works`);\n if (data?.works) setCreatorWorks(data.works);\n } catch (err) { console.error('Creator works error:', err); }\n finally { setCreatorWorksLoading(false); }\n }, []);\n\n const fetchWorks = useCallback(async () => {\n setLoading(true);\n try {\n const data = await apiFetch<{ works: SharedWork[] }>('/shared-works');\n if (data?.works) {\n // Filter to show only this user's works\n const myWorks = user\n ? data.works.filter(w => w.userName === (user.email?.split('@')[0] || '') || w.userId === user.id)\n : data.works;\n setWorks(myWorks);\n }\n } catch (err) { console.error('IP Matrix fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n const handleFork = useCallback(async (work: SharedWork) => {\n if (!user) return;\n setForkingWorkId(work.workId);\n try {\n const result = await apiFetch<{ success: boolean; forkedWork: SharedWork }>('/works/fork', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n originalWorkId: work.workId,\n originalAuthor: work.userName,\n userId: user.id,\n userName: user.email?.split('@')[0] || 'User',\n title: `${work.title} (${lang === 'zh' ? '改编' : 'Remix'})`,\n theme: work.theme,\n lyrics: work.lyrics,\n }),\n });\n if (result?.success) {\n fetchWorks();\n if (viewingCreator) fetchCreatorWorks(viewingCreator);\n // Track achievement: create_work for forker + receive_fork for original author\n apiFetch(`/achievements/${user.id}/track`, {\n method: 'POST', headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'create_work' }),\n }).catch(() => {});\n if (work.userId) {\n apiFetch(`/achievements/${work.userId}/track`, {\n method: 'POST', headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'receive_fork' }),\n }).catch(() => {});\n }\n }\n } catch (err) { console.error('Fork error:', err); }\n finally { setForkingWorkId(null); }\n }, [user, fetchWorks, viewingCreator, fetchCreatorWorks, lang]);\n\n const fetchForkChain = useCallback(async (workId: string) => {\n setForkTreeLoading(true);\n try {\n const data = await apiFetch<{ forks: ForkNode[]; count: number }>(`/works/${workId}/forks`);\n if (data?.forks) setForkChain(data.forks);\n } catch (err) { console.error('Fork chain error:', err); setForkChain([]); }\n finally { setForkTreeLoading(false); }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n fetchWorks();\n if (tab === 'explore') fetchCreators();\n }\n }, [isOpen, tab, fetchWorks, fetchCreators]);\n\n const totalLikes = works.reduce((acc, w) => acc + (w.likes || 0), 0);\n const totalPlays = works.reduce((acc, w) => acc + (w.plays || 0), 0);\n const creatorLevel = getCreatorLevel(works.length);\n const displayName = profile?.displayName || user?.email?.split('@')[0] || 'Creator';\n const joinedDate = profile?.joinedAt\n ? new Date(profile.joinedAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { year: 'numeric', month: 'short' })\n : '';\n\n // Influence score: combination of works, likes, and starPower\n const influenceScore = Math.round(\n works.length * 100 + totalLikes * 50 + totalPlays * 10 + starPower * 0.5\n );\n const engagementRate = works.length > 0\n ? Math.round(((totalLikes + totalPlays) / Math.max(works.length, 1)) * 10) / 10\n : 0;\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-lg bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-indigo-500/20 to-pink-500/20 border border-white/10 flex items-center justify-center\">\n <Sparkles className=\"w-4.5 h-4.5 text-indigo-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('ipmatrix.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('ipmatrix.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Tab bar */}\n <div className=\"flex p-2 mx-4 mt-3 bg-white/[0.03] rounded-xl border border-white/[0.06]\">\n {[\n { id: 'profile' as const, label: t('ipmatrix.creatorProfile'), icon: Star },\n { id: 'portfolio' as const, label: t('ipmatrix.portfolio'), icon: Music },\n { id: 'explore' as const, label: t('ipmatrix.explore'), icon: Users },\n { id: 'analytics' as const, label: t('ipmatrix.analytics'), icon: BarChart3 },\n ].map(tb => (\n <button\n key={tb.id}\n onClick={() => setTab(tb.id)}\n className={clsx(\n 'flex-1 py-2 px-2 rounded-lg text-[11px] font-medium transition-all flex items-center justify-center gap-1',\n tab === tb.id ? 'bg-indigo-500/20 text-indigo-300 border border-indigo-500/20' : 'text-white/40 hover:text-white/60'\n )}\n >\n <tb.icon className=\"w-3 h-3\" />\n {tb.label}\n </button>\n ))}\n </div>\n\n {!user ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.signInRequired')}</p>\n </div>\n ) : (\n <div className=\"flex-1 overflow-y-auto p-4\" style={{ scrollbarWidth: 'none' }}>\n {tab === 'profile' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {/* Creator Card */}\n <div className=\"p-5 rounded-2xl bg-gradient-to-br from-indigo-500/10 via-purple-500/5 to-pink-500/10 border border-indigo-500/15 relative overflow-hidden\">\n <div className=\"absolute -top-8 -right-8 w-24 h-24 bg-indigo-500/10 rounded-full blur-2xl\" />\n <div className=\"relative flex items-center gap-4\">\n <div className=\"w-16 h-16 rounded-full bg-gradient-to-tr from-indigo-500 via-purple-500 to-pink-500 p-0.5 flex-shrink-0\">\n <div className=\"w-full h-full rounded-full bg-[#0D1235] flex items-center justify-center\">\n <span className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-pink-400\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-lg font-bold text-white truncate\">{displayName}</h3>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs\">{creatorLevel.icon}</span>\n <span className=\"text-xs text-indigo-300/70\">\n {lang === 'zh' ? creatorLevel.label : creatorLevel.labelEn}\n </span>\n </div>\n {joinedDate && (\n <p className=\"text-[10px] text-white/20 mt-1 flex items-center gap-1\">\n <Calendar className=\"w-2.5 h-2.5\" />\n {t('ipmatrix.memberSince')} {joinedDate}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-3 gap-2\">\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Music className=\"w-4 h-4 text-indigo-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{works.length}</p>\n <p className=\"text-[10px] text-white/25\">{t('ipmatrix.totalWorks')}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Heart className=\"w-4 h-4 text-pink-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{totalLikes}</p>\n <p className=\"text-[10px] text-white/25\">{t('ipmatrix.totalLikes')}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Star className=\"w-4 h-4 text-yellow-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{starPower}</p>\n <p className=\"text-[10px] text-white/25\">SP</p>\n </div>\n </div>\n\n {/* Influence Score */}\n <div className=\"p-3 rounded-xl bg-gradient-to-r from-purple-500/5 to-indigo-500/5 border border-purple-500/10\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-xs text-white/40\">{t('ipmatrix.influence')}</p>\n <p className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-purple-300 to-indigo-300 font-mono tabular-nums\">\n {influenceScore.toLocaleString()}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs text-white/40\">{t('ipmatrix.engagementRate')}</p>\n <p className=\"text-lg font-bold text-indigo-300 font-mono tabular-nums\">{engagementRate}</p>\n </div>\n </div>\n </div>\n </motion.div>\n )}\n\n {tab === 'portfolio' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <h4 className=\"text-xs font-medium text-white/40 uppercase tracking-wider\">\n {t('ipmatrix.sharedWorks')} ({works.length})\n </h4>\n <button\n onClick={() => { onClose(); onOpenCreationStudio(); }}\n className=\"flex items-center gap-1 text-[10px] text-indigo-400/60 hover:text-indigo-400 transition-colors\"\n >\n <ExternalLink className=\"w-3 h-3\" />\n {lang === 'zh' ? '创作工坊' : 'Studio'}\n </button>\n </div>\n\n {loading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : works.length === 0 ? (\n <div className=\"text-center py-12\">\n <Music className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.noWorks')}</p>\n <p className=\"text-white/15 text-xs mt-1\">{t('ipmatrix.startCreating')}</p>\n <button\n onClick={() => { onClose(); onOpenCreationStudio(); }}\n className=\"mt-4 px-4 py-2 rounded-xl bg-indigo-500/20 text-indigo-300 text-xs font-medium border border-indigo-500/20 hover:bg-indigo-500/30 transition-colors\"\n >\n {lang === 'zh' ? '开始创作' : 'Start Creating'}\n </button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {works.map(work => {\n const themeClass = THEME_COLORS[work.theme] || THEME_COLORS.happy;\n const emoji = THEME_EMOJIS[work.theme] || '🎵';\n return (\n <motion.div\n key={work.workId}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className={clsx(\n 'p-3 rounded-xl bg-gradient-to-r border transition-colors hover:brightness-110',\n themeClass\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-white/10 flex items-center justify-center text-lg flex-shrink-0\">\n {emoji}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-white truncate\">{work.title}</p>\n <p className=\"text-[10px] text-white/25 mt-0.5\">\n {work.mode === 'quick' ? (lang === 'zh' ? '极简模式' : 'Quick') : work.mode === 'master' ? (lang === 'zh' ? '大师模式' : 'Master') : work.mode}\n {' · '}\n {work.lyrics?.length || 0} {lang === 'zh' ? '行歌词' : 'lines'}\n </p>\n <div className=\"flex items-center gap-3 mt-1.5\">\n <span className=\"flex items-center gap-0.5 text-[10px] text-white/25\">\n <Heart className=\"w-2.5 h-2.5\" /> {work.likes || 0}\n </span>\n <span className=\"text-[10px] text-white/15\">\n {new Date(work.createdAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n )}\n </motion.div>\n )}\n\n {tab === 'analytics' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {/* Creator Level Progress */}\n <div className=\"p-4 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <h4 className=\"text-xs text-white/40 mb-3\">{t('ipmatrix.creatorLevel')}</h4>\n <div className=\"space-y-2\">\n {CREATOR_LEVELS.map((lvl, idx) => {\n const isActive = works.length >= lvl.min;\n const nextMin = CREATOR_LEVELS[idx + 1]?.min || lvl.min + 10;\n const progress = isActive ? Math.min(((works.length - lvl.min) / (nextMin - lvl.min)) * 100, 100) : 0;\n return (\n <div key={lvl.min} className={clsx('flex items-center gap-2', !isActive && 'opacity-30')}>\n <span className=\"text-sm w-6 text-center\">{lvl.icon}</span>\n <div className=\"flex-1\">\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-[11px] text-white/60\">\n {lang === 'zh' ? lvl.label : lvl.labelEn}\n </span>\n <span className=\"text-[9px] text-white/20 font-mono tabular-nums\">{lvl.min}+</span>\n </div>\n <div className=\"h-1 rounded-full bg-white/[0.06] overflow-hidden\">\n {isActive && (\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ duration: 0.6 }}\n className=\"h-full rounded-full bg-gradient-to-r from-indigo-400 to-purple-500\"\n />\n )}\n </div>\n </div>\n {isActive && <Award className=\"w-3 h-3 text-indigo-400\" />}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Stats breakdown */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-indigo-500/5 to-purple-500/5 border border-indigo-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.influence')}</p>\n <p className=\"text-xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-300 to-purple-300 font-mono tabular-nums\">\n {influenceScore.toLocaleString()}\n </p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-pink-500/5 to-rose-500/5 border border-pink-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.engagementRate')}</p>\n <p className=\"text-xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-pink-300 to-rose-300 font-mono tabular-nums\">\n {engagementRate}\n </p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-yellow-500/5 to-amber-500/5 border border-yellow-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.totalLikes')}</p>\n <p className=\"text-xl font-bold text-yellow-300 font-mono tabular-nums\">{totalLikes}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-cyan-500/5 to-teal-500/5 border border-cyan-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.totalWorks')}</p>\n <p className=\"text-xl font-bold text-cyan-300 font-mono tabular-nums\">{works.length}</p>\n </div>\n </div>\n </motion.div>\n )}\n\n {tab === 'explore' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {viewingCreator ? (\n <>\n {/* Back + Creator name */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => { setViewingCreator(null); setCreatorWorks([]); }}\n className=\"flex items-center gap-1 text-xs text-white/40 hover:text-white/70 transition-colors\"\n >\n <ArrowLeft className=\"w-3.5 h-3.5\" />\n {t('ipmatrix.back')}\n </button>\n <span className=\"text-sm font-semibold text-white/80\">{viewingCreator}{t('ipmatrix.creatorPortfolio')}</span>\n </div>\n {creatorWorksLoading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : creatorWorks.length === 0 ? (\n <div className=\"text-center py-12\">\n <Music className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.noWorks')}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {creatorWorks.map(work => {\n const themeClass = THEME_COLORS[work.theme] || THEME_COLORS.happy;\n return (\n <div key={work.workId} className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] hover:bg-white/[0.04] transition-colors\">\n <div className=\"flex items-start justify-between\">\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-white/80 truncate\">{work.title}</h4>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className={clsx('text-[9px] px-1.5 py-0.5 rounded-full border', themeClass)}>\n {work.theme}\n </span>\n <span className=\"text-[10px] text-white/20\">\n {new Date(work.createdAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n {work.forkedFrom && (\n <p className=\"text-[9px] text-purple-400/50 mt-1 flex items-center gap-0.5\">\n <GitFork className=\"w-2.5 h-2.5\" /> {t('ipmatrix.forkedFrom')} {work.forkedFrom.author}\n </p>\n )}\n {work.lyrics && work.lyrics.length > 0 && (\n <p className=\"text-[10px] text-white/25 mt-1.5 italic line-clamp-2\">{work.lyrics[0]}</p>\n )}\n </div>\n <div className=\"flex flex-col items-end gap-1.5 ml-2 flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex items-center gap-0.5 text-[10px] text-pink-400/50\">\n <Heart className=\"w-2.5 h-2.5\" /> {work.likes || 0}\n </span>\n <span className=\"flex items-center gap-0.5 text-[10px] text-white/20\">\n <Play className=\"w-2.5 h-2.5\" /> {work.plays || 0}\n </span>\n </div>\n {/* Fork + Tree buttons */}\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => handleFork(work)}\n disabled={forkingWorkId === work.workId || !user}\n className=\"flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[9px] bg-purple-500/10 border border-purple-500/15 text-purple-300/70 hover:bg-purple-500/20 hover:text-purple-200 transition-all disabled:opacity-30\"\n title={t('ipmatrix.forkWork')}\n >\n <GitFork className=\"w-2.5 h-2.5\" />\n {forkingWorkId === work.workId ? t('ipmatrix.forking') : t('ipmatrix.forkWork')}\n </button>\n <button\n onClick={() => {\n if (showForkTree === work.workId) { setShowForkTree(null); setForkChain([]); }\n else { setShowForkTree(work.workId); fetchForkChain(work.workId); }\n }}\n className=\"flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[9px] bg-white/[0.04] border border-white/[0.08] text-white/30 hover:text-white/50 transition-all\"\n title={t('ipmatrix.forkTree')}\n >\n <GitBranch className=\"w-2.5 h-2.5\" />\n </button>\n </div>\n </div>\n </div>\n {/* Fork tree inline */}\n {showForkTree === work.workId && (\n <div className=\"mt-2 pt-2 border-t border-white/[0.06]\">\n <p className=\"text-[9px] text-white/30 mb-1.5 flex items-center gap-1\">\n <GitBranch className=\"w-2.5 h-2.5\" /> {t('ipmatrix.forkTree')}\n </p>\n {forkTreeLoading ? (\n <div className=\"flex justify-center py-2\">\n <div className=\"w-4 h-4 border border-purple-500/30 border-t-purple-500 rounded-full animate-spin\" />\n </div>\n ) : forkChain.length === 0 ? (\n <p className=\"text-[9px] text-white/15 text-center py-1\">{lang === 'zh' ? '暂无改编分支' : 'No forks yet'}</p>\n ) : (\n <div className=\"space-y-1 pl-2\">\n {forkChain.map((node, idx) => (\n <div key={node.workId} className=\"flex items-center gap-1.5 text-[9px]\">\n <div className=\"flex flex-col items-center w-3\">\n {idx < forkChain.length - 1 && <div className=\"w-px h-3 bg-purple-500/20\" />}\n <div className=\"w-1.5 h-1.5 rounded-full bg-purple-500/40 flex-shrink-0\" />\n {idx < forkChain.length - 1 && <div className=\"w-px h-3 bg-purple-500/20\" />}\n </div>\n <span className=\"text-white/40\">{node.author}</span>\n <span className=\"text-white/15\">\n {new Date(node.forkedAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </>\n ) : (\n <>\n <h4 className=\"text-xs font-medium text-white/40 uppercase tracking-wider\">{t('ipmatrix.allCreators')}</h4>\n {creatorsLoading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : creators.length === 0 ? (\n <div className=\"text-center py-12\">\n <Users className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{lang === 'zh' ? '暂无其他创作者' : 'No creators yet'}</p>\n <p className=\"text-white/15 text-xs mt-1\">{lang === 'zh' ? '分享作品后即可在此展示' : 'Share works to appear here'}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {creators.map((creator, idx) => (\n <button\n key={creator.userName + idx}\n onClick={() => {\n setViewingCreator(creator.userName);\n fetchCreatorWorks(creator.userName);\n }}\n className=\"w-full p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] hover:bg-white/[0.05] hover:border-indigo-500/20 transition-all text-left group\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-gradient-to-tr from-indigo-500 via-purple-500 to-pink-500 p-0.5 flex-shrink-0\">\n <div className=\"w-full h-full rounded-full bg-[#0D1235] flex items-center justify-center\">\n <span className=\"text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-pink-400\">\n {creator.userName.charAt(0).toUpperCase()}\n </span>\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-white/80 truncate\">{creator.userName}</h4>\n <div className=\"flex items-center gap-3 mt-0.5\">\n <span className=\"text-[10px] text-white/25\">\n {creator.works} {t('ipmatrix.works')}\n </span>\n <span className=\"flex items-center gap-0.5 text-[10px] text-pink-400/40\">\n <Heart className=\"w-2.5 h-2.5\" /> {creator.totalLikes}\n </span>\n </div>\n </div>\n <ChevronRight className=\"w-4 h-4 text-white/15 group-hover:text-indigo-400/50 transition-colors flex-shrink-0\" />\n </div>\n </button>\n ))}\n </div>\n )}\n </>\n )}\n </motion.div>\n )}\n </div>\n )}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};"],"names":["REASON_LABELS","StarPowerPanel","isOpen","onClose","user","starPower","onStarPowerUpdate","onOpenShop","t","lang","useI18n","vipLevel","setVipLevel","useState","allLevels","setAllLevels","checkedInToday","setCheckedInToday","streak","setStreak","transactions","setTransactions","loading","setLoading","checkinFlash","setCheckinFlash","showAllLevels","setShowAllLevels","fetchData","useCallback","levelData","txnData","apiFetch","err","useEffect","handleCheckin","result","progressToNext","timeAgo","ts","diff","jsx","AnimatePresence","jsxs","Fragment","motion","Star","X","Gift","ChevronRight","Award","clsx","lvl","Calendar","Sparkles","TrendingUp","txn","label","_a","Zap","CATEGORY_TABS","ShoppingBag","Palette","Music","RARITY_COLORS","StarPowerShop","items","setItems","inventory","setInventory","category","setCategory","purchasing","setPurchasing","purchaseResult","setPurchaseResult","confirmItem","setConfirmItem","shopData","invData","isOwned","itemId","i","handlePurchase","item","prev","filteredItems","Package","tab","Icon","isActive","Check","AlertCircle","rarity","owned","affordable","e","RANK_DECORATIONS","Crown","Medal","STORAGE_KEY","loadPreviousRankings","raw","savePreviousRankings","rankings","map","computeRankChanges","hasPrev","entry","index","currentRank","previousRank","rankChange","getMaxWilson","r","LeaderboardPanel","onSelectTrack","setRankings","rawRankings","setRawRankings","showInfo","setShowInfo","boostFlash","setBoostFlash","isFirstLoad","useRef","handleBoost","songId","fetchLeaderboard","withChanges","getTrack","DEMO_PLAYLIST","maxWilson","Trophy","Info","RefreshCw","track","decoration","isTop3","RankIcon","wilsonPercent","totalEngagement","RankChangeBadge","ImageWithFallback","Play","Heart","MessageCircle","Rocket","change","Minus","ArrowUp","ArrowDown","AchievementsPanel","achievements","setAchievements","stats","setStats","totalUnlocked","setTotalUnlocked","totalAchievements","setTotalAchievements","showNewBadge","setShowNewBadge","fetchAchievements","data","newOne","a","progressPercent","STAT_DISPLAY","Flame","sd","badge","ach","idx","THEME_COLORS","THEME_EMOJIS","CREATOR_LEVELS","getCreatorLevel","workCount","IPMatrixPanel","profile","onOpenCreationStudio","setTab","works","setWorks","creators","setCreators","creatorsLoading","setCreatorsLoading","viewingCreator","setViewingCreator","creatorWorks","setCreatorWorks","creatorWorksLoading","setCreatorWorksLoading","forkingWorkId","setForkingWorkId","forkChain","setForkChain","showForkTree","setShowForkTree","forkTreeLoading","setForkTreeLoading","fetchCreators","fetchCreatorWorks","userName","fetchWorks","myWorks","w","handleFork","work","fetchForkChain","workId","totalLikes","acc","totalPlays","creatorLevel","displayName","joinedDate","influenceScore","engagementRate","Users","BarChart3","tb","ExternalLink","themeClass","emoji","nextMin","progress","ArrowLeft","GitFork","GitBranch","node","creator"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/StarPowerPanel.tsx","../src/components/StarPowerShop.tsx","../src/components/LeaderboardPanel.tsx","../src/components/AchievementsPanel.tsx","../src/components/IPMatrixPanel.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X, Star, Zap, Calendar, TrendingUp, Gift, Award,\n ChevronRight, Sparkles, RefreshCw,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface StarPowerPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower: number;\n onStarPowerUpdate: (sp: number) => void;\n onOpenShop?: () => void;\n}\n\ninterface VIPLevel {\n level: number;\n label: string;\n labelEn: string;\n threshold: number;\n color: string;\n dailyReward: number;\n nextThreshold: number | null;\n nextLabel: string | null;\n}\n\ninterface Transaction {\n id: string;\n type: 'earn' | 'spend';\n amount: number;\n reason: string;\n detail: string;\n timestamp: number;\n balance: number;\n}\n\nconst REASON_LABELS: Record<string, { zh: string; en: string }> = {\n daily_checkin: { zh: '每日签到', en: 'Daily Check-in' },\n like: { zh: '歌曲点赞', en: 'Song Like' },\n annotation: { zh: '情感标注', en: 'Emotion Annotation' },\n achievement: { zh: '成就解锁', en: 'Achievement Unlocked' },\n welcome: { zh: '注册奖励', en: 'Welcome Bonus' },\n};\n\nexport const StarPowerPanel: React.FC<StarPowerPanelProps> = ({\n isOpen, onClose, user, starPower, onStarPowerUpdate, onOpenShop,\n}) => {\n const { t, lang } = useI18n();\n const [vipLevel, setVipLevel] = useState<VIPLevel | null>(null);\n const [allLevels, setAllLevels] = useState<VIPLevel[]>([]);\n const [checkedInToday, setCheckedInToday] = useState(false);\n const [streak, setStreak] = useState(0);\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [loading, setLoading] = useState(false);\n const [checkinFlash, setCheckinFlash] = useState<{ reward: number; streak: number } | null>(null);\n const [showAllLevels, setShowAllLevels] = useState(false);\n\n const fetchData = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n const [levelData, txnData] = await Promise.all([\n apiFetch<any>(`/starpower/${user.id}/level`),\n apiFetch<any>(`/starpower/${user.id}/transactions`),\n ]);\n if (levelData) {\n setVipLevel(levelData.vipLevel);\n setAllLevels(levelData.allLevels || []);\n setCheckedInToday(levelData.checkedInToday || false);\n setStreak(levelData.streak || 0);\n }\n if (txnData?.transactions) {\n setTransactions(txnData.transactions);\n }\n } catch (err) { console.error('StarPower fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n useEffect(() => {\n if (isOpen && user) fetchData();\n }, [isOpen, user, fetchData]);\n\n const handleCheckin = async () => {\n if (!user || checkedInToday) return;\n try {\n const result = await apiFetch<any>(`/starpower/${user.id}/checkin`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n });\n if (result?.success) {\n setCheckedInToday(true);\n setStreak(result.streak);\n setCheckinFlash({ reward: result.reward, streak: result.streak });\n onStarPowerUpdate(result.starPower);\n setTimeout(() => setCheckinFlash(null), 3000);\n // Refresh transactions\n fetchData();\n } else if (result?.alreadyCheckedIn) {\n setCheckedInToday(true);\n }\n } catch (err) { console.error('Check-in error:', err); }\n };\n\n const progressToNext = vipLevel?.nextThreshold\n ? ((starPower - vipLevel.threshold) / (vipLevel.nextThreshold - vipLevel.threshold)) * 100\n : 100;\n\n function timeAgo(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < 60000) return lang === 'zh' ? '刚刚' : 'just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}${lang === 'zh' ? '分钟前' : 'm ago'}`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}${lang === 'zh' ? '小时前' : 'h ago'}`;\n return `${Math.floor(diff / 86400000)}${lang === 'zh' ? '天前' : 'd ago'}`;\n }\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Star className=\"w-4.5 h-4.5 text-yellow-400 fill-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('starpower.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('starpower.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {!user ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <p className=\"text-white/30 text-sm\">{t('starpower.signInRequired')}</p>\n </div>\n ) : (\n <div className=\"flex-1 overflow-y-auto p-4\" style={{ scrollbarWidth: 'none' }}>\n {/* Balance Card */}\n <div className=\"relative p-5 rounded-2xl bg-gradient-to-br from-yellow-500/10 via-orange-500/5 to-purple-500/10 border border-yellow-500/15 mb-4 overflow-hidden\">\n {/* Glow effect */}\n <div className=\"absolute -top-10 -right-10 w-32 h-32 bg-yellow-500/10 rounded-full blur-2xl\" />\n <div className=\"relative\">\n <p className=\"text-xs text-yellow-200/50 uppercase tracking-wider mb-1\">{t('starpower.balance')}</p>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-3xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-yellow-300 to-orange-400 font-mono tabular-nums\">\n {starPower.toLocaleString()}\n </span>\n <span className=\"text-xs text-yellow-300/40\">SP</span>\n </div>\n {vipLevel && (\n <div className=\"flex items-center gap-2 mt-2\">\n <span\n className=\"text-xs font-medium px-2 py-0.5 rounded-full border\"\n style={{ color: vipLevel.color, borderColor: vipLevel.color + '40', backgroundColor: vipLevel.color + '15' }}\n >\n {lang === 'zh' ? vipLevel.label : vipLevel.labelEn}\n </span>\n <span className=\"text-[10px] text-white/20\">Lv.{vipLevel.level}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Shop Button */}\n {onOpenShop && (\n <button\n onClick={() => { onClose(); setTimeout(onOpenShop, 150); }}\n className=\"w-full mb-4 flex items-center justify-between p-3 rounded-xl bg-gradient-to-r from-amber-500/[0.06] to-orange-500/[0.06] border border-amber-500/15 hover:border-amber-500/30 transition-all group\"\n >\n <div className=\"flex items-center gap-2\">\n <Gift className=\"w-4 h-4 text-amber-400\" />\n <span className=\"text-xs text-white/60 group-hover:text-white/80 transition-colors\">\n {lang === 'zh' ? '星力商城 — 兑换虚拟好物' : 'SP Shop — Redeem virtual items'}\n </span>\n </div>\n <ChevronRight className=\"w-3.5 h-3.5 text-white/20 group-hover:text-white/40 transition-colors\" />\n </button>\n )}\n\n {/* VIP Progress */}\n {vipLevel && (\n <div className=\"mb-4 p-3 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs text-white/40\">{t('starpower.vipLevel')}</span>\n {vipLevel.nextThreshold ? (\n <span className=\"text-[10px] text-white/25\">\n {t('starpower.needMore')} {(vipLevel.nextThreshold - starPower).toLocaleString()} {t('starpower.spMore')}\n </span>\n ) : (\n <span className=\"text-[10px] text-yellow-400/50\">{t('starpower.maxLevel')}</span>\n )}\n </div>\n <div className=\"h-2 rounded-full bg-white/[0.06] overflow-hidden\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${Math.min(progressToNext, 100)}%` }}\n transition={{ duration: 0.8, ease: 'easeOut' }}\n className=\"h-full rounded-full\"\n style={{ background: `linear-gradient(90deg, ${vipLevel.color}80, ${vipLevel.color})` }}\n />\n </div>\n {/* Level markers */}\n <button\n onClick={() => setShowAllLevels(!showAllLevels)}\n className=\"flex items-center gap-1 mt-2 text-[10px] text-white/20 hover:text-white/40 transition-colors\"\n >\n <Award className=\"w-3 h-3\" />\n {t('starpower.allLevels')}\n <ChevronRight className={clsx('w-3 h-3 transition-transform', showAllLevels && 'rotate-90')} />\n </button>\n <AnimatePresence>\n {showAllLevels && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden mt-2\"\n >\n <div className=\"space-y-1\">\n {allLevels.map(lvl => (\n <div\n key={lvl.level}\n className={clsx(\n 'flex items-center justify-between px-2 py-1 rounded-lg text-[11px]',\n starPower >= lvl.threshold ? 'bg-white/[0.03]' : 'opacity-40'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2 h-2 rounded-full\" style={{ backgroundColor: lvl.color }} />\n <span className=\"text-white/60\">\n {lang === 'zh' ? lvl.label : lvl.labelEn}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-white/25 font-mono tabular-nums\">{lvl.threshold.toLocaleString()} SP</span>\n <span className=\"text-white/20\">+{lvl.dailyReward}/day</span>\n </div>\n </div>\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n\n {/* Daily Check-in */}\n <div className=\"mb-4 p-3 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"w-4 h-4 text-orange-400\" />\n <div>\n <p className=\"text-xs text-white/60\">{t('starpower.checkin')}</p>\n <p className=\"text-[10px] text-white/25\">\n {t('starpower.streak')}: {streak} {lang === 'zh' ? '天' : 'days'}\n </p>\n </div>\n </div>\n <button\n onClick={handleCheckin}\n disabled={checkedInToday}\n className={clsx(\n 'px-4 py-2 rounded-xl text-xs font-medium transition-all',\n checkedInToday\n ? 'bg-emerald-500/10 text-emerald-300 border border-emerald-500/20 cursor-default'\n : 'bg-gradient-to-r from-yellow-500/20 to-orange-500/20 text-yellow-300 border border-yellow-500/20 hover:from-yellow-500/30 hover:to-orange-500/30'\n )}\n >\n {checkedInToday ? t('starpower.checkinDone') : t('starpower.checkin')}\n </button>\n </div>\n {/* Check-in reward flash */}\n <AnimatePresence>\n {checkinFlash && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"mt-3 p-2 rounded-lg bg-yellow-500/10 border border-yellow-500/15 flex items-center gap-2\">\n <Sparkles className=\"w-4 h-4 text-yellow-400 flex-shrink-0\" />\n <span className=\"text-xs text-yellow-200\">\n {t('starpower.checkinReward')} +{checkinFlash.reward} SP\n {checkinFlash.streak > 1 && (\n <span className=\"text-yellow-300/50\"> ({t('starpower.streak')} ×{checkinFlash.streak})</span>\n )}\n </span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Transactions */}\n <div>\n <h4 className=\"text-xs font-medium text-white/30 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n {t('starpower.transactions')}\n </h4>\n {transactions.length === 0 ? (\n <div className=\"text-center py-8 bg-white/[0.01] rounded-xl border border-white/[0.04]\">\n <Gift className=\"w-8 h-8 text-white/10 mx-auto mb-2\" />\n <p className=\"text-xs text-white/20\">{t('starpower.noTransactions')}</p>\n </div>\n ) : (\n <div className=\"space-y-1\">\n {transactions.slice(0, 20).map(txn => {\n const label = REASON_LABELS[txn.reason]?.[lang] || txn.reason;\n return (\n <div key={txn.id} className=\"flex items-center justify-between py-2 px-2 rounded-lg hover:bg-white/[0.02] transition-colors\">\n <div className=\"flex items-center gap-2\">\n <div className={clsx(\n 'w-6 h-6 rounded-full flex items-center justify-center',\n txn.type === 'earn' ? 'bg-emerald-500/10' : 'bg-red-500/10'\n )}>\n {txn.type === 'earn'\n ? <TrendingUp className=\"w-3 h-3 text-emerald-400\" />\n : <Zap className=\"w-3 h-3 text-red-400\" />}\n </div>\n <div>\n <p className=\"text-[11px] text-white/60\">{label}</p>\n <p className=\"text-[9px] text-white/15\">{txn.detail} · {timeAgo(txn.timestamp)}</p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className={clsx(\n 'text-xs font-mono tabular-nums font-medium',\n txn.type === 'earn' ? 'text-emerald-400' : 'text-red-400'\n )}>\n {txn.type === 'earn' ? '+' : '-'}{txn.amount}\n </p>\n <p className=\"text-[9px] text-white/15 font-mono tabular-nums\">{txn.balance} SP</p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Star, ShoppingBag, Check, Package, Sparkles, Palette, Music, Zap, Megaphone, AlertCircle } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface StarPowerShopProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower: number;\n onStarPowerUpdate: (sp: number) => void;\n}\n\ninterface ShopItem {\n id: string;\n category: string;\n nameZh: string;\n nameEn: string;\n descZh: string;\n descEn: string;\n cost: number;\n icon: string;\n rarity: string;\n}\n\ninterface InventoryItem {\n itemId: string;\n purchasedAt: number;\n expiresAt: number | null;\n}\n\nconst CATEGORY_TABS = [\n { id: 'all', labelZh: '全部', labelEn: 'All', icon: ShoppingBag },\n { id: 'theme', labelZh: '主题', labelEn: 'Themes', icon: Palette },\n { id: 'sound', labelZh: '音色', labelEn: 'Sounds', icon: Music },\n { id: 'ai', labelZh: 'AI', labelEn: 'AI', icon: Sparkles },\n { id: 'badge', labelZh: '徽章', labelEn: 'Badges', icon: Star },\n { id: 'boost', labelZh: '加速', labelEn: 'Boost', icon: Zap },\n];\n\nconst RARITY_COLORS: Record<string, { bg: string; border: string; text: string; label: string; labelEn: string }> = {\n common: { bg: 'from-gray-500/10 to-gray-600/10', border: 'border-gray-500/20', text: 'text-gray-400', label: '普通', labelEn: 'Common' },\n rare: { bg: 'from-blue-500/10 to-cyan-500/10', border: 'border-blue-500/20', text: 'text-blue-400', label: '稀有', labelEn: 'Rare' },\n epic: { bg: 'from-purple-500/10 to-pink-500/10', border: 'border-purple-500/20', text: 'text-purple-400', label: '史诗', labelEn: 'Epic' },\n legendary: { bg: 'from-amber-500/10 to-orange-500/10', border: 'border-amber-500/20', text: 'text-amber-400', label: '传说', labelEn: 'Legendary' },\n};\n\nexport const StarPowerShop: React.FC<StarPowerShopProps> = ({\n isOpen, onClose, user, starPower, onStarPowerUpdate,\n}) => {\n const { lang } = useI18n();\n const [items, setItems] = useState<ShopItem[]>([]);\n const [inventory, setInventory] = useState<InventoryItem[]>([]);\n const [category, setCategory] = useState('all');\n const [loading, setLoading] = useState(false);\n const [purchasing, setPurchasing] = useState<string | null>(null);\n const [purchaseResult, setPurchaseResult] = useState<{ success: boolean; message: string } | null>(null);\n const [confirmItem, setConfirmItem] = useState<ShopItem | null>(null);\n\n const fetchData = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n const [shopData, invData] = await Promise.all([\n apiFetch<{ items: ShopItem[] }>('/starpower/shop/items'),\n apiFetch<{ inventory: InventoryItem[] }>(`/starpower/shop/inventory/${user.id}`),\n ]);\n if (shopData?.items) setItems(shopData.items);\n if (invData?.inventory) setInventory(invData.inventory);\n } catch (err) { console.error('Shop fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n useEffect(() => {\n if (isOpen && user) fetchData();\n }, [isOpen, user, fetchData]);\n\n const isOwned = (itemId: string) => inventory.some(i => i.itemId === itemId);\n\n const handlePurchase = async (item: ShopItem) => {\n if (!user || purchasing) return;\n setPurchasing(item.id);\n setPurchaseResult(null);\n try {\n const result = await apiFetch<any>('/starpower/shop/purchase', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ userId: user.id, itemId: item.id }),\n });\n if (result?.success) {\n onStarPowerUpdate(result.starPower);\n setInventory(prev => [...prev, { itemId: item.id, purchasedAt: Date.now(), expiresAt: null }]);\n setPurchaseResult({ success: true, message: lang === 'zh' ? '购买成功!' : 'Purchase successful!' });\n } else {\n setPurchaseResult({ success: false, message: result?.error || (lang === 'zh' ? '购买失败' : 'Purchase failed') });\n }\n } catch (err) {\n setPurchaseResult({ success: false, message: lang === 'zh' ? '网络错误' : 'Network error' });\n }\n finally {\n setPurchasing(null);\n setConfirmItem(null);\n setTimeout(() => setPurchaseResult(null), 3000);\n }\n };\n\n const filteredItems = category === 'all' ? items : items.filter(i => i.category === category);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/98 backdrop-blur-2xl border-l border-white/[0.06] flex flex-col overflow-hidden\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500/20 to-orange-500/20 flex items-center justify-center\">\n <ShoppingBag className=\"w-4 h-4 text-amber-400\" />\n </div>\n <div>\n <h2 className=\"text-base font-bold text-white leading-tight\">\n {lang === 'zh' ? '星力商城' : 'Star Power Shop'}\n </h2>\n <p className=\"text-[10px] text-white/30\">\n {lang === 'zh' ? '用星力值兑换虚拟好物' : 'Exchange SP for virtual items'}\n </p>\n </div>\n </div>\n <button onClick={onClose} className=\"w-7 h-7 rounded-full bg-white/5 flex items-center justify-center hover:bg-white/10 transition-colors\">\n <X className=\"w-3.5 h-3.5 text-white/40\" />\n </button>\n </div>\n\n {/* Balance */}\n <div className=\"px-5 py-3 bg-gradient-to-r from-amber-500/[0.06] to-orange-500/[0.06] border-b border-white/[0.04]\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Star className=\"w-4 h-4 text-yellow-400 fill-yellow-400\" />\n <span className=\"text-yellow-200 font-bold text-lg tabular-nums\">{starPower}</span>\n <span className=\"text-xs text-white/30\">{lang === 'zh' ? '可用星力值' : 'SP available'}</span>\n </div>\n <div className=\"flex items-center gap-1 text-[10px] text-white/20\">\n <Package className=\"w-3 h-3\" />\n {inventory.length} {lang === 'zh' ? '件已拥有' : 'owned'}\n </div>\n </div>\n </div>\n\n {/* Category Tabs */}\n <div className=\"px-4 py-2.5 border-b border-white/[0.04] overflow-x-auto no-scrollbar\">\n <div className=\"flex items-center gap-1.5\">\n {CATEGORY_TABS.map((tab) => {\n const Icon = tab.icon;\n const isActive = category === tab.id;\n return (\n <button\n key={tab.id}\n onClick={() => setCategory(tab.id)}\n className={clsx(\n 'flex items-center gap-1.5 px-3 py-1.5 rounded-full text-xs font-medium whitespace-nowrap transition-all',\n isActive\n ? 'bg-amber-500/15 text-amber-400 border border-amber-500/30'\n : 'bg-white/[0.03] text-white/30 border border-transparent hover:bg-white/[0.06] hover:text-white/50'\n )}\n >\n <Icon className=\"w-3 h-3\" />\n {lang === 'zh' ? tab.labelZh : tab.labelEn}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Purchase Result Toast */}\n <AnimatePresence>\n {purchaseResult && (\n <motion.div\n initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -10 }}\n className={clsx(\n 'mx-4 mt-2 px-3 py-2 rounded-lg text-xs font-medium flex items-center gap-2',\n purchaseResult.success\n ? 'bg-emerald-500/15 text-emerald-400 border border-emerald-500/20'\n : 'bg-red-500/15 text-red-400 border border-red-500/20'\n )}\n >\n {purchaseResult.success ? <Check className=\"w-3.5 h-3.5\" /> : <AlertCircle className=\"w-3.5 h-3.5\" />}\n {purchaseResult.message}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Items Grid */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-amber-400/30 border-t-amber-400 rounded-full animate-spin\" />\n </div>\n ) : filteredItems.length === 0 ? (\n <div className=\"text-center py-10\">\n <ShoppingBag className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-sm text-white/30\">\n {lang === 'zh' ? '此分类暂无商品' : 'No items in this category'}\n </p>\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-3\">\n {filteredItems.map((item) => {\n const rarity = RARITY_COLORS[item.rarity] || RARITY_COLORS.common;\n const owned = isOwned(item.id);\n const affordable = starPower >= item.cost;\n return (\n <motion.button\n key={item.id}\n whileTap={{ scale: 0.97 }}\n onClick={() => !owned && setConfirmItem(item)}\n disabled={owned}\n className={clsx(\n 'relative flex flex-col p-3 rounded-xl border text-left transition-all',\n owned\n ? 'bg-white/[0.02] border-white/[0.04] opacity-60'\n : `bg-gradient-to-br ${rarity.bg} ${rarity.border} hover:brightness-110`\n )}\n >\n {/* Rarity label */}\n <span className={clsx('absolute top-2 right-2 text-[8px] font-bold uppercase tracking-wider', rarity.text)}>\n {lang === 'zh' ? rarity.label : rarity.labelEn}\n </span>\n\n {/* Icon */}\n <span className=\"text-2xl mb-2\">{item.icon}</span>\n\n {/* Name */}\n <p className=\"text-xs text-white font-semibold leading-tight\">\n {lang === 'zh' ? item.nameZh : item.nameEn}\n </p>\n\n {/* Description */}\n <p className=\"text-[10px] text-white/30 mt-0.5 leading-tight line-clamp-2\">\n {lang === 'zh' ? item.descZh : item.descEn}\n </p>\n\n {/* Price / Owned */}\n <div className=\"mt-auto pt-2 flex items-center justify-between\">\n {owned ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-400/60\">\n <Check className=\"w-3 h-3\" />\n {lang === 'zh' ? '已拥有' : 'Owned'}\n </span>\n ) : (\n <span className={clsx(\n 'flex items-center gap-1 text-xs font-bold',\n affordable ? 'text-yellow-400' : 'text-red-400/60'\n )}>\n <Star className=\"w-3 h-3 fill-current\" />\n {item.cost}\n </span>\n )}\n </div>\n </motion.button>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Confirm Purchase Modal */}\n <AnimatePresence>\n {confirmItem && (\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"absolute inset-0 z-10 bg-black/70 backdrop-blur-sm flex items-center justify-center p-6\"\n onClick={() => setConfirmItem(null)}\n >\n <motion.div\n initial={{ scale: 0.9, opacity: 0 }} animate={{ scale: 1, opacity: 1 }} exit={{ scale: 0.9, opacity: 0 }}\n onClick={(e) => e.stopPropagation()}\n className=\"w-full max-w-[280px] bg-[#0F1540] border border-white/10 rounded-2xl p-5 text-center\"\n >\n <span className=\"text-4xl block mb-3\">{confirmItem.icon}</span>\n <p className=\"text-white font-bold text-sm\">\n {lang === 'zh' ? confirmItem.nameZh : confirmItem.nameEn}\n </p>\n <p className=\"text-white/30 text-[11px] mt-1\">\n {lang === 'zh' ? confirmItem.descZh : confirmItem.descEn}\n </p>\n\n <div className=\"flex items-center justify-center gap-1 my-4 text-yellow-400 font-bold\">\n <Star className=\"w-4 h-4 fill-yellow-400\" />\n <span className=\"text-lg\">{confirmItem.cost}</span>\n <span className=\"text-xs text-yellow-400/50 ml-1\">SP</span>\n </div>\n\n {starPower < confirmItem.cost ? (\n <p className=\"text-xs text-red-400/70 mb-3\">\n {lang === 'zh' ? `星力值不足(需 ${confirmItem.cost},当前 ${starPower})` : `Insufficient SP (need ${confirmItem.cost}, have ${starPower})`}\n </p>\n ) : null}\n\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmItem(null)}\n className=\"flex-1 py-2 rounded-lg bg-white/5 text-white/50 text-xs hover:bg-white/10 transition-colors\"\n >\n {lang === 'zh' ? '取消' : 'Cancel'}\n </button>\n <button\n onClick={() => handlePurchase(confirmItem)}\n disabled={starPower < confirmItem.cost || !!purchasing}\n className={clsx(\n 'flex-1 py-2 rounded-lg text-xs font-medium transition-all',\n starPower >= confirmItem.cost\n ? 'bg-gradient-to-r from-amber-500 to-orange-500 text-white hover:brightness-110'\n : 'bg-white/5 text-white/20 cursor-not-allowed'\n )}\n >\n {purchasing ? '...' : (lang === 'zh' ? '确认购买' : 'Confirm')}\n </button>\n </div>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X,\n Trophy,\n Crown,\n Medal,\n TrendingUp,\n TrendingDown,\n Minus,\n Heart,\n Play,\n MessageCircle,\n RefreshCw,\n Info,\n Sparkles,\n ArrowUp,\n ArrowDown,\n Zap,\n Rocket,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { DEMO_PLAYLIST } from '@yyc3/music-data';\nimport { ImageWithFallback } from '@yyc3/music-ui';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface LeaderboardPanelProps {\n isOpen: boolean;\n onClose: () => void;\n onSelectTrack?: (songId: string) => void;\n user?: any;\n starPower?: number;\n onStarPowerUpdate?: (sp: number) => void;\n}\n\ninterface RankingEntry {\n songId: string;\n likes: number;\n plays: number;\n comments: number;\n wilsonScore: number;\n engagement: number;\n}\n\n// Rank change: positive = moved up, negative = moved down, 0 = same, null = new\ninterface RankingWithChange extends RankingEntry {\n rankChange: number | null;\n previousRank: number | null;\n}\n\nconst RANK_DECORATIONS = [\n { icon: Crown, color: 'text-yellow-400', bg: 'from-yellow-500/20 to-amber-500/20', border: 'border-yellow-500/30', glow: 'shadow-yellow-500/20', barColor: 'from-yellow-400 to-amber-500' },\n { icon: Medal, color: 'text-gray-300', bg: 'from-gray-400/20 to-slate-400/20', border: 'border-gray-400/20', glow: 'shadow-gray-400/10', barColor: 'from-gray-300 to-slate-400' },\n { icon: Medal, color: 'text-amber-600', bg: 'from-amber-600/20 to-orange-600/20', border: 'border-amber-600/20', glow: 'shadow-amber-600/10', barColor: 'from-amber-500 to-orange-500' },\n];\n\nconst STORAGE_KEY = 'dmusic-leaderboard-prev';\n\nfunction loadPreviousRankings(): Record<string, number> {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw) return JSON.parse(raw);\n } catch {}\n return {};\n}\n\nfunction savePreviousRankings(rankings: RankingEntry[]) {\n try {\n const map: Record<string, number> = {};\n rankings.forEach((r, i) => { map[r.songId] = i + 1; });\n localStorage.setItem(STORAGE_KEY, JSON.stringify(map));\n } catch {}\n}\n\nfunction computeRankChanges(rankings: RankingEntry[]): RankingWithChange[] {\n const prev = loadPreviousRankings();\n const hasPrev = Object.keys(prev).length > 0;\n\n return rankings.map((entry, index) => {\n const currentRank = index + 1;\n const previousRank = prev[entry.songId] ?? null;\n\n let rankChange: number | null = null;\n if (!hasPrev) {\n rankChange = null; // First load, no change data\n } else if (previousRank === null) {\n rankChange = null; // New entry\n } else {\n rankChange = previousRank - currentRank; // positive = moved up\n }\n\n return { ...entry, rankChange, previousRank };\n });\n}\n\n// Wilson score bar max value for normalization\nfunction getMaxWilson(rankings: RankingEntry[]): number {\n if (rankings.length === 0) return 1;\n return Math.max(...rankings.map(r => r.wilsonScore), 0.0001);\n}\n\nexport const LeaderboardPanel: React.FC<LeaderboardPanelProps> = ({\n isOpen,\n onClose,\n onSelectTrack,\n user,\n starPower = 0,\n onStarPowerUpdate,\n}) => {\n const [rankings, setRankings] = useState<RankingWithChange[]>([]);\n const [rawRankings, setRawRankings] = useState<RankingEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [showInfo, setShowInfo] = useState(false);\n const [boostFlash, setBoostFlash] = useState<string | null>(null);\n const isFirstLoad = useRef(true);\n const { t } = useI18n();\n\n const handleBoost = async (songId: string) => {\n if (!user || starPower < 100) return;\n try {\n const result = await apiFetch<any>('/leaderboard/boost', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ userId: user.id, songId, amount: 100 }),\n });\n if (result?.success) {\n onStarPowerUpdate?.(result.starPower);\n setBoostFlash(songId);\n setTimeout(() => setBoostFlash(null), 2000);\n // Refresh leaderboard\n if (rawRankings.length > 0) savePreviousRankings(rawRankings);\n fetchLeaderboard();\n }\n } catch (err) { console.error('Boost error:', err); }\n };\n\n const fetchLeaderboard = useCallback(async () => {\n setLoading(true);\n try {\n const result = await apiFetch<{ rankings: RankingEntry[] }>('/leaderboard');\n if (result?.rankings) {\n const withChanges = computeRankChanges(result.rankings);\n setRankings(withChanges);\n setRawRankings(result.rankings);\n\n // Save current as \"previous\" for next comparison (delay to avoid self-comparison on rapid refresh)\n if (!isFirstLoad.current) {\n savePreviousRankings(result.rankings);\n } else {\n // On first load, if no previous data exists, seed it\n const prev = loadPreviousRankings();\n if (Object.keys(prev).length === 0) {\n savePreviousRankings(result.rankings);\n }\n isFirstLoad.current = false;\n }\n }\n } catch (err) {\n console.error('Failed to fetch leaderboard:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) fetchLeaderboard();\n }, [isOpen, fetchLeaderboard]);\n\n const getTrack = (songId: string) => DEMO_PLAYLIST.find((t) => t.id === songId);\n\n const maxWilson = getMaxWilson(rawRankings);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n\n <motion.div\n initial={{ x: '100%', opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Trophy className=\"w-4.5 h-4.5 text-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('leaderboard.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('leaderboard.subtitle')}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setShowInfo(!showInfo)}\n className={clsx(\n 'p-2 rounded-lg border transition-all',\n showInfo\n ? 'bg-blue-500/10 border-blue-500/20 text-blue-400'\n : 'bg-white/5 border-white/[0.08] text-white/40 hover:text-white/70'\n )}\n title={t('leaderboard.aboutWilson')}\n >\n <Info className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => {\n // Save current before refreshing so next fetch shows changes\n if (rawRankings.length > 0) savePreviousRankings(rawRankings);\n fetchLeaderboard();\n }}\n disabled={loading}\n className={clsx(\n 'p-2 rounded-lg bg-white/5 hover:bg-white/10 border border-white/[0.08] text-white/60 hover:text-white transition-all',\n loading && 'animate-spin'\n )}\n >\n <RefreshCw className=\"w-4 h-4\" />\n </button>\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Wilson Score Info */}\n <AnimatePresence>\n {showInfo && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden border-b border-white/[0.04]\"\n >\n <div className=\"p-4 bg-blue-500/5\">\n <h4 className=\"text-xs font-semibold text-blue-300 mb-2 flex items-center gap-1.5\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n {t('leaderboard.wilsonAlgorithm')}\n </h4>\n <p className=\"text-xs text-white/40 leading-relaxed\">\n {t('leaderboard.wilsonInfo')}\n </p>\n <div className=\"mt-2 p-2 bg-white/[0.03] rounded-lg font-mono text-[10px] text-white/30\">\n score = (p̂ + z²/2n − z√(p̂(1−p̂)/n + z²/4n²)) / (1 + z²/n)\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Rankings */}\n <div className=\"flex-1 overflow-y-auto\" style={{ scrollbarWidth: 'none' }}>\n {loading && rankings.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <div className=\"w-6 h-6 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin\" />\n </div>\n ) : rankings.length === 0 ? (\n <div className=\"text-center py-16 px-6\">\n <Trophy className=\"w-12 h-12 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('leaderboard.noRankings')}</p>\n <p className=\"text-white/15 text-xs mt-1\">\n {t('leaderboard.buildBoard')}\n </p>\n </div>\n ) : (\n <div className=\"p-4 space-y-2\">\n {rankings.map((entry, index) => {\n const track = getTrack(entry.songId);\n const decoration = RANK_DECORATIONS[index];\n const isTop3 = index < 3;\n const RankIcon = decoration?.icon || Trophy;\n const wilsonPercent = maxWilson > 0 ? (entry.wilsonScore / maxWilson) * 100 : 0;\n const totalEngagement = entry.plays + entry.likes + entry.comments;\n\n return (\n <motion.div\n key={entry.songId}\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.08 }}\n onClick={() => onSelectTrack?.(entry.songId)}\n className={clsx(\n 'p-4 rounded-xl border transition-all cursor-pointer group relative',\n isTop3\n ? `bg-gradient-to-r ${decoration.bg} ${decoration.border} shadow-lg ${decoration.glow}`\n : 'bg-white/[0.02] border-white/[0.06] hover:bg-white/[0.04]'\n )}\n >\n {/* Rank Change Badge — top-right corner */}\n <RankChangeBadge change={entry.rankChange} />\n\n <div className=\"flex items-center gap-3\">\n {/* Rank */}\n <div className={clsx(\n 'w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0',\n isTop3\n ? `bg-white/10`\n : 'bg-white/[0.04]'\n )}>\n {isTop3 ? (\n <RankIcon className={clsx('w-4 h-4', decoration?.color)} />\n ) : (\n <span className=\"text-xs font-mono text-white/30\">{index + 1}</span>\n )}\n </div>\n\n {/* Album Art */}\n {track && (\n <div className=\"w-10 h-10 rounded-lg overflow-hidden flex-shrink-0\">\n <ImageWithFallback\n src={track.albumArt}\n alt={track.title}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Song Info */}\n <div className=\"flex-1 min-w-0\">\n <p className={clsx(\n 'text-sm font-medium truncate',\n isTop3 ? 'text-white' : 'text-white/80'\n )}>\n {track?.title || entry.songId}\n </p>\n <p className=\"text-xs text-white/30 truncate\">{track?.artist || t('leaderboard.unknown')}</p>\n </div>\n\n {/* Score */}\n <div className=\"text-right flex-shrink-0\">\n <p className={clsx(\n 'text-sm font-bold font-mono tabular-nums',\n isTop3 ? decoration?.color : 'text-white/60'\n )}>\n {entry.wilsonScore.toFixed(4)}\n </p>\n <p className=\"text-[10px] text-white/20\">{t('leaderboard.score')}</p>\n </div>\n </div>\n\n {/* Wilson Score Visualization Bar */}\n <div className=\"mt-3 ml-11\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-[10px] text-white/20 flex items-center gap-1\">\n <Zap className=\"w-2.5 h-2.5\" />\n {t('leaderboard.wilsonBar')}\n </span>\n <span className=\"text-[10px] text-white/25 font-mono tabular-nums\">\n {(wilsonPercent).toFixed(1)}%\n </span>\n </div>\n <div className=\"h-1.5 rounded-full bg-white/[0.06] overflow-hidden\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${wilsonPercent}%` }}\n transition={{ delay: index * 0.08 + 0.3, duration: 0.6, ease: 'easeOut' }}\n className={clsx(\n 'h-full rounded-full bg-gradient-to-r',\n isTop3\n ? decoration.barColor\n : 'from-indigo-400 to-purple-500'\n )}\n />\n </div>\n </div>\n\n {/* Stats Row */}\n <div className=\"flex items-center gap-4 mt-2.5 ml-11\">\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <Play className=\"w-3 h-3\" />\n {entry.plays}\n </span>\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <Heart className=\"w-3 h-3\" />\n {entry.likes}\n </span>\n <span className=\"flex items-center gap-1 text-[11px] text-white/25\">\n <MessageCircle className=\"w-3 h-3\" />\n {entry.comments}\n </span>\n {user && starPower >= 100 && (\n <button\n onClick={(e) => { e.stopPropagation(); handleBoost(entry.songId); }}\n disabled={boostFlash === entry.songId}\n className={clsx(\n 'ml-auto flex items-center gap-1 px-2 py-0.5 rounded-full text-[9px] font-medium border transition-all',\n boostFlash === entry.songId\n ? 'bg-emerald-500/15 text-emerald-300 border-emerald-500/20'\n : 'bg-yellow-500/10 text-yellow-300/70 border-yellow-500/15 hover:bg-yellow-500/20 hover:text-yellow-300'\n )}\n title={t('starpower.boostCost')}\n >\n <Rocket className=\"w-2.5 h-2.5\" />\n {boostFlash === entry.songId ? t('starpower.boostSuccess') : `${t('starpower.boost')} 100SP`}\n </button>\n )}\n {(!user || starPower < 100) && (\n <span className=\"text-[10px] text-white/15 ml-auto flex items-center gap-1\">\n <Sparkles className=\"w-2.5 h-2.5\" />\n {totalEngagement} {t('leaderboard.totalEngagement')}\n </span>\n )}\n </div>\n </motion.div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"p-4 border-t border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-white/20\">\n <TrendingUp className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs\">{t('leaderboard.poweredBy')}</span>\n </div>\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n\n// ==========================================\n// Rank Change Badge Component\n// ==========================================\nconst RankChangeBadge: React.FC<{ change: number | null }> = ({ change }) => {\n const { t } = useI18n();\n\n if (change === null) {\n // New entry or first load — show \"NEW\" sparkle\n return (\n <motion.div\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ delay: 0.4, type: 'spring', damping: 12 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-cyan-500/15 border border-cyan-500/20\"\n >\n <Sparkles className=\"w-2.5 h-2.5 text-cyan-400\" />\n <span className=\"text-[9px] font-semibold text-cyan-400\">{t('leaderboard.rankNew')}</span>\n </motion.div>\n );\n }\n\n if (change === 0) {\n return (\n <div className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-white/[0.04] border border-white/[0.06]\">\n <Minus className=\"w-2.5 h-2.5 text-white/25\" />\n <span className=\"text-[9px] text-white/25\">{t('leaderboard.rankSame')}</span>\n </div>\n );\n }\n\n if (change > 0) {\n return (\n <motion.div\n initial={{ y: 5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ delay: 0.3 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-emerald-500/15 border border-emerald-500/20\"\n >\n <ArrowUp className=\"w-2.5 h-2.5 text-emerald-400\" />\n <span className=\"text-[9px] font-semibold text-emerald-400\">\n {change} {t('leaderboard.rankUp')}\n </span>\n </motion.div>\n );\n }\n\n // change < 0\n return (\n <motion.div\n initial={{ y: -5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ delay: 0.3 }}\n className=\"absolute top-2 right-2 flex items-center gap-0.5 px-1.5 py-0.5 rounded-full bg-red-500/15 border border-red-500/20\"\n >\n <ArrowDown className=\"w-2.5 h-2.5 text-red-400\" />\n <span className=\"text-[9px] font-semibold text-red-400\">\n {Math.abs(change)} {t('leaderboard.rankDown')}\n </span>\n </motion.div>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { X, Trophy, Lock, Sparkles, TrendingUp, Star, Flame } from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\n\ninterface AchievementsPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n starPower?: number;\n}\n\ninterface Achievement {\n id: string;\n nameZh: string;\n nameEn: string;\n descZh: string;\n descEn: string;\n icon: string;\n unlocked: boolean;\n newlyUnlocked: boolean;\n}\n\ninterface AchievementStats {\n totalWorks?: number;\n streakDays?: number;\n totalLikesReceived?: number;\n totalForks?: number;\n totalPlays?: number;\n totalMessages?: number;\n totalCapsules?: number;\n peakStarPower?: number;\n locationMessages?: number;\n voiceMessages?: number;\n}\n\nexport const AchievementsPanel: React.FC<AchievementsPanelProps> = ({\n isOpen, onClose, user, starPower = 0,\n}) => {\n const { t, lang } = useI18n();\n const [achievements, setAchievements] = useState<Achievement[]>([]);\n const [stats, setStats] = useState<AchievementStats>({});\n const [totalUnlocked, setTotalUnlocked] = useState(0);\n const [totalAchievements, setTotalAchievements] = useState(12);\n const [loading, setLoading] = useState(false);\n const [showNewBadge, setShowNewBadge] = useState<string | null>(null);\n\n const fetchAchievements = useCallback(async () => {\n if (!user) return;\n setLoading(true);\n try {\n // Track daily login + update star power\n await apiFetch(`/achievements/${user.id}/track`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'daily_login', starPower }),\n });\n\n const data = await apiFetch<{\n achievements: Achievement[];\n stats: AchievementStats;\n totalUnlocked: number;\n totalAchievements: number;\n }>(`/achievements/${user.id}`);\n\n if (data?.achievements) {\n setAchievements(data.achievements);\n setStats(data.stats || {});\n setTotalUnlocked(data.totalUnlocked);\n setTotalAchievements(data.totalAchievements);\n\n // Show celebration for newly unlocked\n const newOne = data.achievements.find(a => a.newlyUnlocked);\n if (newOne) {\n setShowNewBadge(newOne.id);\n setTimeout(() => setShowNewBadge(null), 4000);\n }\n }\n } catch (err) { console.error('Achievements fetch error:', err); }\n finally { setLoading(false); }\n }, [user, starPower]);\n\n useEffect(() => {\n if (isOpen && user) fetchAchievements();\n }, [isOpen, user, fetchAchievements]);\n\n const progressPercent = totalAchievements > 0 ? (totalUnlocked / totalAchievements) * 100 : 0;\n\n const STAT_DISPLAY: Array<{ key: keyof AchievementStats; labelZh: string; labelEn: string; icon: React.ElementType; color: string }> = [\n { key: 'totalWorks', labelZh: '总作品', labelEn: 'Works', icon: Star, color: 'text-yellow-400' },\n { key: 'streakDays', labelZh: '连续天数', labelEn: 'Streak', icon: Flame, color: 'text-orange-400' },\n { key: 'totalLikesReceived', labelZh: '获赞', labelEn: 'Likes', icon: TrendingUp, color: 'text-pink-400' },\n { key: 'totalMessages', labelZh: '喊话', labelEn: 'Messages', icon: Sparkles, color: 'text-purple-400' },\n ];\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-md bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-yellow-500/20 to-orange-500/20 border border-white/10 flex items-center justify-center\">\n <Trophy className=\"w-4.5 h-4.5 text-yellow-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('achievements.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('achievements.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-4\" style={{ scrollbarWidth: 'none' }}>\n {!user ? (\n <div className=\"text-center py-16\">\n <Trophy className=\"w-12 h-12 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{lang === 'zh' ? '登录后查看成就' : 'Sign in to view achievements'}</p>\n </div>\n ) : loading && achievements.length === 0 ? (\n <div className=\"flex justify-center py-16\">\n <div className=\"w-6 h-6 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin\" />\n </div>\n ) : (\n <>\n {/* Progress Overview */}\n <div className=\"p-4 rounded-2xl bg-gradient-to-br from-yellow-500/[0.06] to-orange-500/[0.06] border border-yellow-500/10\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <p className=\"text-xs text-white/40 uppercase tracking-wider font-medium\">{t('achievements.progress')}</p>\n <p className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-yellow-400 to-orange-400 mt-0.5\">\n {totalUnlocked} / {totalAchievements}\n </p>\n </div>\n <div className=\"w-16 h-16 relative\">\n <svg className=\"w-16 h-16 transform -rotate-90\" viewBox=\"0 0 64 64\">\n <circle cx=\"32\" cy=\"32\" r=\"28\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" className=\"text-white/[0.04]\" />\n <circle\n cx=\"32\" cy=\"32\" r=\"28\" fill=\"none\"\n stroke=\"url(#achieveGrad)\"\n strokeWidth=\"4\"\n strokeDasharray={`${175.9 * progressPercent / 100} 175.9`}\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient id=\"achieveGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#eab308\" />\n <stop offset=\"100%\" stopColor=\"#f97316\" />\n </linearGradient>\n </defs>\n </svg>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"text-xs font-bold text-yellow-300\">{Math.round(progressPercent)}%</span>\n </div>\n </div>\n </div>\n\n {/* Quick stats */}\n <div className=\"grid grid-cols-4 gap-2 mt-3 pt-3 border-t border-white/[0.04]\">\n {STAT_DISPLAY.map(sd => {\n const Icon = sd.icon;\n return (\n <div key={sd.key} className=\"text-center\">\n <Icon className={clsx('w-3.5 h-3.5 mx-auto mb-0.5', sd.color)} />\n <p className=\"text-sm font-semibold text-white/80\">{stats[sd.key] || 0}</p>\n <p className=\"text-[9px] text-white/25\">{lang === 'zh' ? sd.labelZh : sd.labelEn}</p>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* New Badge Celebration */}\n <AnimatePresence>\n {showNewBadge && (() => {\n const badge = achievements.find(a => a.id === showNewBadge);\n if (!badge) return null;\n return (\n <motion.div\n key=\"celebration\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n className=\"p-4 rounded-2xl bg-gradient-to-br from-yellow-500/15 to-orange-500/15 border border-yellow-500/25 text-center\"\n >\n <motion.div\n animate={{ rotate: [0, -10, 10, -10, 10, 0] }}\n transition={{ duration: 0.6, delay: 0.3 }}\n className=\"text-4xl mb-2\"\n >\n {badge.icon}\n </motion.div>\n <p className=\"text-xs text-yellow-300 font-semibold uppercase tracking-wider\">\n {lang === 'zh' ? '新成就解锁!' : 'Achievement Unlocked!'}\n </p>\n <p className=\"text-sm font-bold text-white/90 mt-1\">\n {lang === 'zh' ? badge.nameZh : badge.nameEn}\n </p>\n <p className=\"text-[10px] text-white/40 mt-0.5\">\n {lang === 'zh' ? badge.descZh : badge.descEn}\n </p>\n </motion.div>\n );\n })()}\n </AnimatePresence>\n\n {/* Achievement Grid */}\n <div>\n <p className=\"text-xs text-white/40 uppercase tracking-wider font-medium mb-3\">{t('achievements.allBadges')}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {achievements.map((ach, idx) => (\n <motion.div\n key={ach.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: idx * 0.05 }}\n className={clsx(\n 'p-3 rounded-xl border transition-all relative',\n ach.unlocked\n ? 'bg-gradient-to-br from-white/[0.04] to-white/[0.02] border-yellow-500/15 hover:border-yellow-500/25'\n : 'bg-white/[0.01] border-white/[0.04] opacity-50'\n )}\n >\n {ach.newlyUnlocked && (\n <motion.div\n animate={{ scale: [1, 1.2, 1] }}\n transition={{ duration: 1.5, repeat: Infinity }}\n className=\"absolute -top-1 -right-1 w-3 h-3 rounded-full bg-yellow-400/50 border border-yellow-400/30\"\n />\n )}\n <div className=\"flex items-center gap-2 mb-1.5\">\n <span className=\"text-xl\">{ach.unlocked ? ach.icon : '🔒'}</span>\n {ach.unlocked && (\n <span className=\"text-[8px] px-1 py-0.5 rounded-full bg-yellow-500/15 text-yellow-300 border border-yellow-500/15 font-medium\">\n {lang === 'zh' ? '已解锁' : 'Unlocked'}\n </span>\n )}\n </div>\n <p className={clsx('text-xs font-medium', ach.unlocked ? 'text-white/80' : 'text-white/30')}>\n {lang === 'zh' ? ach.nameZh : ach.nameEn}\n </p>\n <p className={clsx('text-[10px] mt-0.5 leading-relaxed', ach.unlocked ? 'text-white/40' : 'text-white/15')}>\n {lang === 'zh' ? ach.descZh : ach.descEn}\n </p>\n </motion.div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"p-3 border-t border-white/[0.06] flex-shrink-0 flex items-center justify-center\">\n <div className=\"flex items-center gap-1.5 text-white/15\">\n <Trophy className=\"w-3 h-3\" />\n <span className=\"text-[10px]\">{t('achievements.subtitle')}</span>\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n X, Star, Music, Heart, Play, Award,\n Calendar, Sparkles, ExternalLink, BarChart3,\n Users, ArrowLeft, ChevronRight, GitFork, GitBranch,\n} from 'lucide-react';\nimport { clsx } from 'clsx';\nimport { apiFetch } from '@yyc3/music-utils';\nimport { useI18n } from '@yyc3/music-hooks';\nimport type { UserProfileData } from '@yyc3/music-data';\n\ninterface IPMatrixPanelProps {\n isOpen: boolean;\n onClose: () => void;\n user: any;\n profile: UserProfileData | null;\n starPower: number;\n onOpenCreationStudio: () => void;\n}\n\ninterface SharedWork {\n workId: string;\n title: string;\n theme: string;\n lyrics: string[];\n mode: string;\n createdAt: number;\n sharedAt: number;\n userName: string;\n userId?: string;\n likes: number;\n plays: number;\n forkedFrom?: { workId: string; author: string; forkedAt: number } | null;\n}\n\ninterface ForkNode {\n workId: string;\n author: string;\n forkedAt: number;\n}\n\ninterface CreatorInfo {\n userName: string;\n userId?: string;\n works: number;\n totalLikes: number;\n latestWork: number;\n}\n\nconst THEME_COLORS: Record<string, string> = {\n happy: 'from-yellow-500/20 to-amber-500/20 border-yellow-500/20',\n sad: 'from-blue-500/20 to-indigo-500/20 border-blue-500/20',\n energetic: 'from-orange-500/20 to-red-500/20 border-orange-500/20',\n calm: 'from-cyan-500/20 to-teal-500/20 border-cyan-500/20',\n love: 'from-pink-500/20 to-rose-500/20 border-pink-500/20',\n};\n\nconst THEME_EMOJIS: Record<string, string> = {\n happy: '😊', sad: '😢', energetic: '⚡', calm: '🌙', love: '❤️',\n};\n\nconst CREATOR_LEVELS = [\n { min: 0, label: '新手创作者', labelEn: 'Beginner', icon: '🌱' },\n { min: 3, label: '铜牌创作者', labelEn: 'Bronze Creator', icon: '🥉' },\n { min: 8, label: '银牌创作者', labelEn: 'Silver Creator', icon: '🥈' },\n { min: 15, label: '金牌创作者', labelEn: 'Gold Creator', icon: '🥇' },\n { min: 30, label: '星级创作者', labelEn: 'Star Creator', icon: '⭐' },\n];\n\nfunction getCreatorLevel(workCount: number) {\n let result = CREATOR_LEVELS[0];\n for (const lvl of CREATOR_LEVELS) {\n if (workCount >= lvl.min) result = lvl;\n }\n return result;\n}\n\nexport const IPMatrixPanel: React.FC<IPMatrixPanelProps> = ({\n isOpen, onClose, user, profile, starPower, onOpenCreationStudio,\n}) => {\n const { t, lang } = useI18n();\n const [tab, setTab] = useState<'profile' | 'portfolio' | 'analytics' | 'explore'>('profile');\n const [works, setWorks] = useState<SharedWork[]>([]);\n const [loading, setLoading] = useState(false);\n\n // Explore creators state\n const [creators, setCreators] = useState<CreatorInfo[]>([]);\n const [creatorsLoading, setCreatorsLoading] = useState(false);\n const [viewingCreator, setViewingCreator] = useState<string | null>(null);\n const [creatorWorks, setCreatorWorks] = useState<SharedWork[]>([]);\n const [creatorWorksLoading, setCreatorWorksLoading] = useState(false);\n\n // Fork state\n const [forkingWorkId, setForkingWorkId] = useState<string | null>(null);\n const [forkChain, setForkChain] = useState<ForkNode[]>([]);\n const [showForkTree, setShowForkTree] = useState<string | null>(null);\n const [forkTreeLoading, setForkTreeLoading] = useState(false);\n\n const fetchCreators = useCallback(async () => {\n setCreatorsLoading(true);\n try {\n const data = await apiFetch<{ creators: CreatorInfo[] }>('/creators');\n if (data?.creators) setCreators(data.creators);\n } catch (err) { console.error('Creators fetch error:', err); }\n finally { setCreatorsLoading(false); }\n }, []);\n\n const fetchCreatorWorks = useCallback(async (userName: string) => {\n setCreatorWorksLoading(true);\n try {\n const data = await apiFetch<{ works: SharedWork[] }>(`/creators/${encodeURIComponent(userName)}/works`);\n if (data?.works) setCreatorWorks(data.works);\n } catch (err) { console.error('Creator works error:', err); }\n finally { setCreatorWorksLoading(false); }\n }, []);\n\n const fetchWorks = useCallback(async () => {\n setLoading(true);\n try {\n const data = await apiFetch<{ works: SharedWork[] }>('/shared-works');\n if (data?.works) {\n // Filter to show only this user's works\n const myWorks = user\n ? data.works.filter(w => w.userName === (user.email?.split('@')[0] || '') || w.userId === user.id)\n : data.works;\n setWorks(myWorks);\n }\n } catch (err) { console.error('IP Matrix fetch error:', err); }\n finally { setLoading(false); }\n }, [user]);\n\n const handleFork = useCallback(async (work: SharedWork) => {\n if (!user) return;\n setForkingWorkId(work.workId);\n try {\n const result = await apiFetch<{ success: boolean; forkedWork: SharedWork }>('/works/fork', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n originalWorkId: work.workId,\n originalAuthor: work.userName,\n userId: user.id,\n userName: user.email?.split('@')[0] || 'User',\n title: `${work.title} (${lang === 'zh' ? '改编' : 'Remix'})`,\n theme: work.theme,\n lyrics: work.lyrics,\n }),\n });\n if (result?.success) {\n fetchWorks();\n if (viewingCreator) fetchCreatorWorks(viewingCreator);\n // Track achievement: create_work for forker + receive_fork for original author\n apiFetch(`/achievements/${user.id}/track`, {\n method: 'POST', headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'create_work' }),\n }).catch(() => {});\n if (work.userId) {\n apiFetch(`/achievements/${work.userId}/track`, {\n method: 'POST', headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'receive_fork' }),\n }).catch(() => {});\n }\n }\n } catch (err) { console.error('Fork error:', err); }\n finally { setForkingWorkId(null); }\n }, [user, fetchWorks, viewingCreator, fetchCreatorWorks, lang]);\n\n const fetchForkChain = useCallback(async (workId: string) => {\n setForkTreeLoading(true);\n try {\n const data = await apiFetch<{ forks: ForkNode[]; count: number }>(`/works/${workId}/forks`);\n if (data?.forks) setForkChain(data.forks);\n } catch (err) { console.error('Fork chain error:', err); setForkChain([]); }\n finally { setForkTreeLoading(false); }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n fetchWorks();\n if (tab === 'explore') fetchCreators();\n }\n }, [isOpen, tab, fetchWorks, fetchCreators]);\n\n const totalLikes = works.reduce((acc, w) => acc + (w.likes || 0), 0);\n const totalPlays = works.reduce((acc, w) => acc + (w.plays || 0), 0);\n const creatorLevel = getCreatorLevel(works.length);\n const displayName = profile?.displayName || user?.email?.split('@')[0] || 'Creator';\n const joinedDate = profile?.joinedAt\n ? new Date(profile.joinedAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { year: 'numeric', month: 'short' })\n : '';\n\n // Influence score: combination of works, likes, and starPower\n const influenceScore = Math.round(\n works.length * 100 + totalLikes * 50 + totalPlays * 10 + starPower * 0.5\n );\n const engagementRate = works.length > 0\n ? Math.round(((totalLikes + totalPlays) / Math.max(works.length, 1)) * 10) / 10\n : 0;\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n <motion.div\n initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}\n className=\"fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <motion.div\n initial={{ x: '100%', opacity: 0 }} animate={{ x: 0, opacity: 1 }} exit={{ x: '100%', opacity: 0 }}\n transition={{ type: 'spring', damping: 28, stiffness: 300 }}\n className=\"fixed right-0 top-0 bottom-0 z-[61] w-full max-w-lg bg-[#0D1235]/95 backdrop-blur-2xl border-l border-white/10 flex flex-col shadow-2xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between p-5 border-b border-white/[0.06] flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-gradient-to-tr from-indigo-500/20 to-pink-500/20 border border-white/10 flex items-center justify-center\">\n <Sparkles className=\"w-4.5 h-4.5 text-indigo-400\" />\n </div>\n <div>\n <h3 className=\"text-white font-semibold text-sm leading-tight\">{t('ipmatrix.title')}</h3>\n <p className=\"text-white/30 text-xs\">{t('ipmatrix.subtitle')}</p>\n </div>\n </div>\n <button onClick={onClose} className=\"p-2 rounded-lg text-white/40 hover:text-white/70 hover:bg-white/5 transition-colors\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Tab bar */}\n <div className=\"flex p-2 mx-4 mt-3 bg-white/[0.03] rounded-xl border border-white/[0.06]\">\n {[\n { id: 'profile' as const, label: t('ipmatrix.creatorProfile'), icon: Star },\n { id: 'portfolio' as const, label: t('ipmatrix.portfolio'), icon: Music },\n { id: 'explore' as const, label: t('ipmatrix.explore'), icon: Users },\n { id: 'analytics' as const, label: t('ipmatrix.analytics'), icon: BarChart3 },\n ].map(tb => (\n <button\n key={tb.id}\n onClick={() => setTab(tb.id)}\n className={clsx(\n 'flex-1 py-2 px-2 rounded-lg text-[11px] font-medium transition-all flex items-center justify-center gap-1',\n tab === tb.id ? 'bg-indigo-500/20 text-indigo-300 border border-indigo-500/20' : 'text-white/40 hover:text-white/60'\n )}\n >\n <tb.icon className=\"w-3 h-3\" />\n {tb.label}\n </button>\n ))}\n </div>\n\n {!user ? (\n <div className=\"flex-1 flex items-center justify-center\">\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.signInRequired')}</p>\n </div>\n ) : (\n <div className=\"flex-1 overflow-y-auto p-4\" style={{ scrollbarWidth: 'none' }}>\n {tab === 'profile' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {/* Creator Card */}\n <div className=\"p-5 rounded-2xl bg-gradient-to-br from-indigo-500/10 via-purple-500/5 to-pink-500/10 border border-indigo-500/15 relative overflow-hidden\">\n <div className=\"absolute -top-8 -right-8 w-24 h-24 bg-indigo-500/10 rounded-full blur-2xl\" />\n <div className=\"relative flex items-center gap-4\">\n <div className=\"w-16 h-16 rounded-full bg-gradient-to-tr from-indigo-500 via-purple-500 to-pink-500 p-0.5 flex-shrink-0\">\n <div className=\"w-full h-full rounded-full bg-[#0D1235] flex items-center justify-center\">\n <span className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-pink-400\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-lg font-bold text-white truncate\">{displayName}</h3>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs\">{creatorLevel.icon}</span>\n <span className=\"text-xs text-indigo-300/70\">\n {lang === 'zh' ? creatorLevel.label : creatorLevel.labelEn}\n </span>\n </div>\n {joinedDate && (\n <p className=\"text-[10px] text-white/20 mt-1 flex items-center gap-1\">\n <Calendar className=\"w-2.5 h-2.5\" />\n {t('ipmatrix.memberSince')} {joinedDate}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-3 gap-2\">\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Music className=\"w-4 h-4 text-indigo-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{works.length}</p>\n <p className=\"text-[10px] text-white/25\">{t('ipmatrix.totalWorks')}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Heart className=\"w-4 h-4 text-pink-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{totalLikes}</p>\n <p className=\"text-[10px] text-white/25\">{t('ipmatrix.totalLikes')}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] text-center\">\n <Star className=\"w-4 h-4 text-yellow-400 mx-auto mb-1\" />\n <p className=\"text-lg font-bold text-white font-mono tabular-nums\">{starPower}</p>\n <p className=\"text-[10px] text-white/25\">SP</p>\n </div>\n </div>\n\n {/* Influence Score */}\n <div className=\"p-3 rounded-xl bg-gradient-to-r from-purple-500/5 to-indigo-500/5 border border-purple-500/10\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-xs text-white/40\">{t('ipmatrix.influence')}</p>\n <p className=\"text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-purple-300 to-indigo-300 font-mono tabular-nums\">\n {influenceScore.toLocaleString()}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs text-white/40\">{t('ipmatrix.engagementRate')}</p>\n <p className=\"text-lg font-bold text-indigo-300 font-mono tabular-nums\">{engagementRate}</p>\n </div>\n </div>\n </div>\n </motion.div>\n )}\n\n {tab === 'portfolio' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <h4 className=\"text-xs font-medium text-white/40 uppercase tracking-wider\">\n {t('ipmatrix.sharedWorks')} ({works.length})\n </h4>\n <button\n onClick={() => { onClose(); onOpenCreationStudio(); }}\n className=\"flex items-center gap-1 text-[10px] text-indigo-400/60 hover:text-indigo-400 transition-colors\"\n >\n <ExternalLink className=\"w-3 h-3\" />\n {lang === 'zh' ? '创作工坊' : 'Studio'}\n </button>\n </div>\n\n {loading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : works.length === 0 ? (\n <div className=\"text-center py-12\">\n <Music className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.noWorks')}</p>\n <p className=\"text-white/15 text-xs mt-1\">{t('ipmatrix.startCreating')}</p>\n <button\n onClick={() => { onClose(); onOpenCreationStudio(); }}\n className=\"mt-4 px-4 py-2 rounded-xl bg-indigo-500/20 text-indigo-300 text-xs font-medium border border-indigo-500/20 hover:bg-indigo-500/30 transition-colors\"\n >\n {lang === 'zh' ? '开始创作' : 'Start Creating'}\n </button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {works.map(work => {\n const themeClass = THEME_COLORS[work.theme] || THEME_COLORS.happy;\n const emoji = THEME_EMOJIS[work.theme] || '🎵';\n return (\n <motion.div\n key={work.workId}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className={clsx(\n 'p-3 rounded-xl bg-gradient-to-r border transition-colors hover:brightness-110',\n themeClass\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"w-10 h-10 rounded-lg bg-white/10 flex items-center justify-center text-lg flex-shrink-0\">\n {emoji}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-white truncate\">{work.title}</p>\n <p className=\"text-[10px] text-white/25 mt-0.5\">\n {work.mode === 'quick' ? (lang === 'zh' ? '极简模式' : 'Quick') : work.mode === 'master' ? (lang === 'zh' ? '大师模式' : 'Master') : work.mode}\n {' · '}\n {work.lyrics?.length || 0} {lang === 'zh' ? '行歌词' : 'lines'}\n </p>\n <div className=\"flex items-center gap-3 mt-1.5\">\n <span className=\"flex items-center gap-0.5 text-[10px] text-white/25\">\n <Heart className=\"w-2.5 h-2.5\" /> {work.likes || 0}\n </span>\n <span className=\"text-[10px] text-white/15\">\n {new Date(work.createdAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n </div>\n </div>\n </motion.div>\n );\n })}\n </div>\n )}\n </motion.div>\n )}\n\n {tab === 'analytics' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {/* Creator Level Progress */}\n <div className=\"p-4 rounded-xl bg-white/[0.02] border border-white/[0.06]\">\n <h4 className=\"text-xs text-white/40 mb-3\">{t('ipmatrix.creatorLevel')}</h4>\n <div className=\"space-y-2\">\n {CREATOR_LEVELS.map((lvl, idx) => {\n const isActive = works.length >= lvl.min;\n const nextMin = CREATOR_LEVELS[idx + 1]?.min || lvl.min + 10;\n const progress = isActive ? Math.min(((works.length - lvl.min) / (nextMin - lvl.min)) * 100, 100) : 0;\n return (\n <div key={lvl.min} className={clsx('flex items-center gap-2', !isActive && 'opacity-30')}>\n <span className=\"text-sm w-6 text-center\">{lvl.icon}</span>\n <div className=\"flex-1\">\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-[11px] text-white/60\">\n {lang === 'zh' ? lvl.label : lvl.labelEn}\n </span>\n <span className=\"text-[9px] text-white/20 font-mono tabular-nums\">{lvl.min}+</span>\n </div>\n <div className=\"h-1 rounded-full bg-white/[0.06] overflow-hidden\">\n {isActive && (\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ duration: 0.6 }}\n className=\"h-full rounded-full bg-gradient-to-r from-indigo-400 to-purple-500\"\n />\n )}\n </div>\n </div>\n {isActive && <Award className=\"w-3 h-3 text-indigo-400\" />}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Stats breakdown */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-indigo-500/5 to-purple-500/5 border border-indigo-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.influence')}</p>\n <p className=\"text-xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-300 to-purple-300 font-mono tabular-nums\">\n {influenceScore.toLocaleString()}\n </p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-pink-500/5 to-rose-500/5 border border-pink-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.engagementRate')}</p>\n <p className=\"text-xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-pink-300 to-rose-300 font-mono tabular-nums\">\n {engagementRate}\n </p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-yellow-500/5 to-amber-500/5 border border-yellow-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.totalLikes')}</p>\n <p className=\"text-xl font-bold text-yellow-300 font-mono tabular-nums\">{totalLikes}</p>\n </div>\n <div className=\"p-3 rounded-xl bg-gradient-to-br from-cyan-500/5 to-teal-500/5 border border-cyan-500/10\">\n <p className=\"text-[10px] text-white/25 mb-1\">{t('ipmatrix.totalWorks')}</p>\n <p className=\"text-xl font-bold text-cyan-300 font-mono tabular-nums\">{works.length}</p>\n </div>\n </div>\n </motion.div>\n )}\n\n {tab === 'explore' && (\n <motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} className=\"space-y-4\">\n {viewingCreator ? (\n <>\n {/* Back + Creator name */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => { setViewingCreator(null); setCreatorWorks([]); }}\n className=\"flex items-center gap-1 text-xs text-white/40 hover:text-white/70 transition-colors\"\n >\n <ArrowLeft className=\"w-3.5 h-3.5\" />\n {t('ipmatrix.back')}\n </button>\n <span className=\"text-sm font-semibold text-white/80\">{viewingCreator}{t('ipmatrix.creatorPortfolio')}</span>\n </div>\n {creatorWorksLoading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : creatorWorks.length === 0 ? (\n <div className=\"text-center py-12\">\n <Music className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{t('ipmatrix.noWorks')}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {creatorWorks.map(work => {\n const themeClass = THEME_COLORS[work.theme] || THEME_COLORS.happy;\n return (\n <div key={work.workId} className=\"p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] hover:bg-white/[0.04] transition-colors\">\n <div className=\"flex items-start justify-between\">\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-white/80 truncate\">{work.title}</h4>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className={clsx('text-[9px] px-1.5 py-0.5 rounded-full border', themeClass)}>\n {work.theme}\n </span>\n <span className=\"text-[10px] text-white/20\">\n {new Date(work.createdAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n {work.forkedFrom && (\n <p className=\"text-[9px] text-purple-400/50 mt-1 flex items-center gap-0.5\">\n <GitFork className=\"w-2.5 h-2.5\" /> {t('ipmatrix.forkedFrom')} {work.forkedFrom.author}\n </p>\n )}\n {work.lyrics && work.lyrics.length > 0 && (\n <p className=\"text-[10px] text-white/25 mt-1.5 italic line-clamp-2\">{work.lyrics[0]}</p>\n )}\n </div>\n <div className=\"flex flex-col items-end gap-1.5 ml-2 flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"flex items-center gap-0.5 text-[10px] text-pink-400/50\">\n <Heart className=\"w-2.5 h-2.5\" /> {work.likes || 0}\n </span>\n <span className=\"flex items-center gap-0.5 text-[10px] text-white/20\">\n <Play className=\"w-2.5 h-2.5\" /> {work.plays || 0}\n </span>\n </div>\n {/* Fork + Tree buttons */}\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => handleFork(work)}\n disabled={forkingWorkId === work.workId || !user}\n className=\"flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[9px] bg-purple-500/10 border border-purple-500/15 text-purple-300/70 hover:bg-purple-500/20 hover:text-purple-200 transition-all disabled:opacity-30\"\n title={t('ipmatrix.forkWork')}\n >\n <GitFork className=\"w-2.5 h-2.5\" />\n {forkingWorkId === work.workId ? t('ipmatrix.forking') : t('ipmatrix.forkWork')}\n </button>\n <button\n onClick={() => {\n if (showForkTree === work.workId) { setShowForkTree(null); setForkChain([]); }\n else { setShowForkTree(work.workId); fetchForkChain(work.workId); }\n }}\n className=\"flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[9px] bg-white/[0.04] border border-white/[0.08] text-white/30 hover:text-white/50 transition-all\"\n title={t('ipmatrix.forkTree')}\n >\n <GitBranch className=\"w-2.5 h-2.5\" />\n </button>\n </div>\n </div>\n </div>\n {/* Fork tree inline */}\n {showForkTree === work.workId && (\n <div className=\"mt-2 pt-2 border-t border-white/[0.06]\">\n <p className=\"text-[9px] text-white/30 mb-1.5 flex items-center gap-1\">\n <GitBranch className=\"w-2.5 h-2.5\" /> {t('ipmatrix.forkTree')}\n </p>\n {forkTreeLoading ? (\n <div className=\"flex justify-center py-2\">\n <div className=\"w-4 h-4 border border-purple-500/30 border-t-purple-500 rounded-full animate-spin\" />\n </div>\n ) : forkChain.length === 0 ? (\n <p className=\"text-[9px] text-white/15 text-center py-1\">{lang === 'zh' ? '暂无改编分支' : 'No forks yet'}</p>\n ) : (\n <div className=\"space-y-1 pl-2\">\n {forkChain.map((node, idx) => (\n <div key={node.workId} className=\"flex items-center gap-1.5 text-[9px]\">\n <div className=\"flex flex-col items-center w-3\">\n {idx < forkChain.length - 1 && <div className=\"w-px h-3 bg-purple-500/20\" />}\n <div className=\"w-1.5 h-1.5 rounded-full bg-purple-500/40 flex-shrink-0\" />\n {idx < forkChain.length - 1 && <div className=\"w-px h-3 bg-purple-500/20\" />}\n </div>\n <span className=\"text-white/40\">{node.author}</span>\n <span className=\"text-white/15\">\n {new Date(node.forkedAt).toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', { month: 'short', day: 'numeric' })}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </>\n ) : (\n <>\n <h4 className=\"text-xs font-medium text-white/40 uppercase tracking-wider\">{t('ipmatrix.allCreators')}</h4>\n {creatorsLoading ? (\n <div className=\"flex justify-center py-12\">\n <div className=\"w-6 h-6 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin\" />\n </div>\n ) : creators.length === 0 ? (\n <div className=\"text-center py-12\">\n <Users className=\"w-10 h-10 text-white/10 mx-auto mb-3\" />\n <p className=\"text-white/30 text-sm\">{lang === 'zh' ? '暂无其他创作者' : 'No creators yet'}</p>\n <p className=\"text-white/15 text-xs mt-1\">{lang === 'zh' ? '分享作品后即可在此展示' : 'Share works to appear here'}</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {creators.map((creator, idx) => (\n <button\n key={creator.userName + idx}\n onClick={() => {\n setViewingCreator(creator.userName);\n fetchCreatorWorks(creator.userName);\n }}\n className=\"w-full p-3 rounded-xl bg-white/[0.02] border border-white/[0.06] hover:bg-white/[0.05] hover:border-indigo-500/20 transition-all text-left group\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-gradient-to-tr from-indigo-500 via-purple-500 to-pink-500 p-0.5 flex-shrink-0\">\n <div className=\"w-full h-full rounded-full bg-[#0D1235] flex items-center justify-center\">\n <span className=\"text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-pink-400\">\n {creator.userName.charAt(0).toUpperCase()}\n </span>\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-white/80 truncate\">{creator.userName}</h4>\n <div className=\"flex items-center gap-3 mt-0.5\">\n <span className=\"text-[10px] text-white/25\">\n {creator.works} {t('ipmatrix.works')}\n </span>\n <span className=\"flex items-center gap-0.5 text-[10px] text-pink-400/40\">\n <Heart className=\"w-2.5 h-2.5\" /> {creator.totalLikes}\n </span>\n </div>\n </div>\n <ChevronRight className=\"w-4 h-4 text-white/15 group-hover:text-indigo-400/50 transition-colors flex-shrink-0\" />\n </div>\n </button>\n ))}\n </div>\n )}\n </>\n )}\n </motion.div>\n )}\n </div>\n )}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n};"],"names":["REASON_LABELS","StarPowerPanel","isOpen","onClose","user","starPower","onStarPowerUpdate","onOpenShop","t","lang","useI18n","vipLevel","setVipLevel","useState","allLevels","setAllLevels","checkedInToday","setCheckedInToday","streak","setStreak","transactions","setTransactions","loading","setLoading","checkinFlash","setCheckinFlash","showAllLevels","setShowAllLevels","fetchData","useCallback","levelData","txnData","apiFetch","err","useEffect","handleCheckin","result","progressToNext","timeAgo","ts","diff","jsx","AnimatePresence","jsxs","Fragment","motion","Star","X","Gift","ChevronRight","Award","clsx","lvl","Calendar","Sparkles","TrendingUp","txn","label","Zap","CATEGORY_TABS","ShoppingBag","Palette","Music","RARITY_COLORS","StarPowerShop","items","setItems","inventory","setInventory","category","setCategory","purchasing","setPurchasing","purchaseResult","setPurchaseResult","confirmItem","setConfirmItem","shopData","invData","isOwned","itemId","i","handlePurchase","item","prev","filteredItems","Package","tab","Icon","isActive","Check","AlertCircle","rarity","owned","affordable","e","RANK_DECORATIONS","Crown","Medal","STORAGE_KEY","loadPreviousRankings","raw","savePreviousRankings","rankings","map","r","computeRankChanges","hasPrev","entry","index","currentRank","previousRank","rankChange","getMaxWilson","LeaderboardPanel","onSelectTrack","setRankings","rawRankings","setRawRankings","showInfo","setShowInfo","boostFlash","setBoostFlash","isFirstLoad","useRef","handleBoost","songId","fetchLeaderboard","withChanges","getTrack","DEMO_PLAYLIST","maxWilson","Trophy","Info","RefreshCw","track","decoration","isTop3","RankIcon","wilsonPercent","totalEngagement","RankChangeBadge","ImageWithFallback","Play","Heart","MessageCircle","Rocket","change","Minus","ArrowUp","ArrowDown","AchievementsPanel","achievements","setAchievements","stats","setStats","totalUnlocked","setTotalUnlocked","totalAchievements","setTotalAchievements","showNewBadge","setShowNewBadge","fetchAchievements","data","newOne","a","progressPercent","STAT_DISPLAY","Flame","sd","badge","ach","idx","THEME_COLORS","THEME_EMOJIS","CREATOR_LEVELS","getCreatorLevel","workCount","IPMatrixPanel","profile","onOpenCreationStudio","setTab","works","setWorks","creators","setCreators","creatorsLoading","setCreatorsLoading","viewingCreator","setViewingCreator","creatorWorks","setCreatorWorks","creatorWorksLoading","setCreatorWorksLoading","forkingWorkId","setForkingWorkId","forkChain","setForkChain","showForkTree","setShowForkTree","forkTreeLoading","setForkTreeLoading","fetchCreators","fetchCreatorWorks","userName","fetchWorks","myWorks","w","handleFork","work","fetchForkChain","workId","totalLikes","acc","totalPlays","creatorLevel","displayName","joinedDate","influenceScore","engagementRate","Users","BarChart3","tb","ExternalLink","themeClass","emoji","nextMin","progress","ArrowLeft","GitFork","GitBranch","node","creator"],"mappings":";;;;;;;;;AAwCA,MAAMA,KAA4D;AAAA,EAChE,eAAe,EAAE,IAAI,QAAQ,IAAI,iBAAA;AAAA,EACjC,MAAM,EAAE,IAAI,QAAQ,IAAI,YAAA;AAAA,EACxB,YAAY,EAAE,IAAI,QAAQ,IAAI,qBAAA;AAAA,EAC9B,aAAa,EAAE,IAAI,QAAQ,IAAI,uBAAA;AAAA,EAC/B,SAAS,EAAE,IAAI,QAAQ,IAAI,gBAAA;AAC7B,GAEaC,KAAgD,CAAC;AAAA,EAC5D,QAAAC;AAAA,EAAQ,SAAAC;AAAA,EAAS,MAAAC;AAAA,EAAM,WAAAC;AAAA,EAAW,mBAAAC;AAAA,EAAmB,YAAAC;AACvD,MAAM;AACJ,QAAM,EAAE,GAAAC,GAAG,MAAAC,EAAA,IAASC,EAAA,GACd,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxD,CAACC,GAAWC,CAAY,IAAIF,EAAqB,CAAA,CAAE,GACnD,CAACG,GAAgBC,CAAiB,IAAIJ,EAAS,EAAK,GACpD,CAACK,GAAQC,CAAS,IAAIN,EAAS,CAAC,GAChC,CAACO,GAAcC,CAAe,IAAIR,EAAwB,CAAA,CAAE,GAC5D,CAACS,GAASC,CAAU,IAAIV,EAAS,EAAK,GACtC,CAACW,GAAcC,CAAe,IAAIZ,EAAoD,IAAI,GAC1F,CAACa,GAAeC,CAAgB,IAAId,EAAS,EAAK,GAElDe,IAAYC,EAAY,YAAY;AACxC,QAAKzB,GACL;AAAA,MAAAmB,EAAW,EAAI;AACf,UAAI;AACF,cAAM,CAACO,GAAWC,CAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC7CC,EAAc,cAAc5B,EAAK,EAAE,QAAQ;AAAA,UAC3C4B,EAAc,cAAc5B,EAAK,EAAE,eAAe;AAAA,QAAA,CACnD;AACD,QAAI0B,MACFlB,EAAYkB,EAAU,QAAQ,GAC9Bf,EAAae,EAAU,aAAa,EAAE,GACtCb,EAAkBa,EAAU,kBAAkB,EAAK,GACnDX,EAAUW,EAAU,UAAU,CAAC,IAE7BC,GAAS,gBACXV,EAAgBU,EAAQ,YAAY;AAAA,MAExC,SAASE,GAAK;AAAE,gBAAQ,MAAM,0BAA0BA,CAAG;AAAA,MAAG,UAAA;AACpD,QAAAV,EAAW,EAAK;AAAA,MAAG;AAAA;AAAA,EAC/B,GAAG,CAACnB,CAAI,CAAC;AAET,EAAA8B,EAAU,MAAM;AACd,IAAIhC,KAAUE,KAAMwB,EAAA;AAAA,EACtB,GAAG,CAAC1B,GAAQE,GAAMwB,CAAS,CAAC;AAE5B,QAAMO,IAAgB,YAAY;AAChC,QAAI,GAAC/B,KAAQY;AACb,UAAI;AACF,cAAMoB,IAAS,MAAMJ,EAAc,cAAc5B,EAAK,EAAE,YAAY;AAAA,UAClE,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3B,MAAM,KAAK,UAAU,CAAA,CAAE;AAAA,QAAA,CACxB;AACD,QAAIgC,GAAQ,WACVnB,EAAkB,EAAI,GACtBE,EAAUiB,EAAO,MAAM,GACvBX,EAAgB,EAAE,QAAQW,EAAO,QAAQ,QAAQA,EAAO,QAAQ,GAChE9B,EAAkB8B,EAAO,SAAS,GAClC,WAAW,MAAMX,EAAgB,IAAI,GAAG,GAAI,GAE5CG,EAAA,KACSQ,GAAQ,oBACjBnB,EAAkB,EAAI;AAAA,MAE1B,SAASgB,GAAK;AAAE,gBAAQ,MAAM,mBAAmBA,CAAG;AAAA,MAAG;AAAA,EACzD,GAEMI,IAAiB1B,GAAU,iBAC3BN,IAAYM,EAAS,cAAcA,EAAS,gBAAgBA,EAAS,aAAc,MACrF;AAEJ,WAAS2B,EAAQC,GAAoB;AACnC,UAAMC,IAAO,KAAK,IAAA,IAAQD;AAC1B,WAAIC,IAAO,MAAc/B,MAAS,OAAO,OAAO,aAC5C+B,IAAO,OAAgB,GAAG,KAAK,MAAMA,IAAO,GAAK,CAAC,GAAG/B,MAAS,OAAO,QAAQ,OAAO,KACpF+B,IAAO,QAAiB,GAAG,KAAK,MAAMA,IAAO,IAAO,CAAC,GAAG/B,MAAS,OAAO,QAAQ,OAAO,KACpF,GAAG,KAAK,MAAM+B,IAAO,KAAQ,CAAC,GAAG/B,MAAS,OAAO,OAAO,OAAO;AAAA,EACxE;AAEA,SACE,gBAAAgC,EAACC,GAAA,EACE,UAAAxC,KACC,gBAAAyC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,SAAS,EAAA;AAAA,QACnE,WAAU;AAAA,QACV,SAAS1C;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAwC;AAAA,MAACE,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC/F,YAAY,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QACtD,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF,EAAC,SAAI,WAAU,oIACb,4BAACK,GAAA,EAAK,WAAU,+CAA8C,EAAA,CAChE;AAAA,gCACC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAL,EAAC,MAAA,EAAG,WAAU,kDAAkD,UAAAjC,EAAE,iBAAiB,GAAE;AAAA,kCACpF,KAAA,EAAE,WAAU,yBAAyB,UAAAA,EAAE,oBAAoB,EAAA,CAAE;AAAA,cAAA,EAAA,CAChE;AAAA,YAAA,GACF;AAAA,YACA,gBAAAiC,EAAC,UAAA,EAAO,SAAStC,GAAS,WAAU,uFAClC,UAAA,gBAAAsC,EAACM,GAAA,EAAE,WAAU,UAAA,CAAU,EAAA,CACzB;AAAA,UAAA,GACF;AAAA,UAEE3C,IAKA,gBAAAuC,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,gBAAgB,OAAA,GAEnE,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oJAEb,UAAA;AAAA,cAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,8EAAA,CAA8E;AAAA,cAC7F,gBAAAE,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,gBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,4DAA4D,UAAAjC,EAAE,mBAAmB,GAAE;AAAA,gBAChG,gBAAAmC,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,0HACb,UAAApC,EAAU,kBACb;AAAA,kBACA,gBAAAoC,EAAC,QAAA,EAAK,WAAU,8BAA6B,UAAA,KAAA,CAAE;AAAA,gBAAA,GACjD;AAAA,gBACC9B,KACC,gBAAAgC,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,kBAAA,gBAAAF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO9B,EAAS,OAAO,aAAaA,EAAS,QAAQ,MAAM,iBAAiBA,EAAS,QAAQ,KAAA;AAAA,sBAErG,UAAAF,MAAS,OAAOE,EAAS,QAAQA,EAAS;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAE7C,gBAAAgC,EAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA;AAAA,oBAAA;AAAA,oBAAIhC,EAAS;AAAA,kBAAA,EAAA,CAAM;AAAA,gBAAA,EAAA,CACjE;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA,GACF;AAAA,YAGCJ,KACC,gBAAAoC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AAAE,kBAAAxC,EAAA,GAAW,WAAWI,GAAY,GAAG;AAAA,gBAAG;AAAA,gBACzD,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAA,gBAAAF,EAACO,IAAA,EAAK,WAAU,yBAAA,CAAyB;AAAA,sCACxC,QAAA,EAAK,WAAU,qEACb,UAAAvC,MAAS,OAAO,kBAAkB,iCAAA,CACrC;AAAA,kBAAA,GACF;AAAA,kBACA,gBAAAgC,EAACQ,IAAA,EAAa,WAAU,wEAAA,CAAwE;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAKnGtC,KACC,gBAAAgC,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,gBAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,yBAAyB,UAAAjC,EAAE,oBAAoB,GAAE;AAAA,gBAChEG,EAAS,gBACR,gBAAAgC,EAAC,QAAA,EAAK,WAAU,6BACb,UAAA;AAAA,kBAAAnC,EAAE,oBAAoB;AAAA,kBAAE;AAAA,mBAAGG,EAAS,gBAAgBN,GAAW,eAAA;AAAA,kBAAiB;AAAA,kBAAEG,EAAE,kBAAkB;AAAA,gBAAA,GACzG,IAEA,gBAAAiC,EAAC,QAAA,EAAK,WAAU,kCAAkC,UAAAjC,EAAE,oBAAoB,EAAA,CAAE;AAAA,cAAA,GAE9E;AAAA,cACA,gBAAAiC,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA,gBAAAA;AAAA,gBAACI,EAAO;AAAA,gBAAP;AAAA,kBACC,SAAS,EAAE,OAAO,EAAA;AAAA,kBAClB,SAAS,EAAE,OAAO,GAAG,KAAK,IAAIR,GAAgB,GAAG,CAAC,IAAA;AAAA,kBAClD,YAAY,EAAE,UAAU,KAAK,MAAM,UAAA;AAAA,kBACnC,WAAU;AAAA,kBACV,OAAO,EAAE,YAAY,0BAA0B1B,EAAS,KAAK,OAAOA,EAAS,KAAK,IAAA;AAAA,gBAAI;AAAA,cAAA,GAE1F;AAAA,cAEA,gBAAAgC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAMhB,EAAiB,CAACD,CAAa;AAAA,kBAC9C,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAe,EAACS,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,oBAC1B1C,EAAE,qBAAqB;AAAA,sCACvByC,IAAA,EAAa,WAAWE,EAAK,gCAAgCzB,KAAiB,WAAW,EAAA,CAAG;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE/F,gBAAAe,EAACC,KACE,UAAAhB,KACC,gBAAAe;AAAA,gBAACI,EAAO;AAAA,gBAAP;AAAA,kBACC,SAAS,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,kBAC/B,SAAS,EAAE,QAAQ,QAAQ,SAAS,EAAA;AAAA,kBACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,kBAC5B,WAAU;AAAA,kBAEV,4BAAC,OAAA,EAAI,WAAU,aACZ,UAAA/B,EAAU,IAAI,CAAAsC,MACb,gBAAAT;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,WAAWQ;AAAA,wBACT;AAAA,wBACA9C,KAAa+C,EAAI,YAAY,oBAAoB;AAAA,sBAAA;AAAA,sBAGnD,UAAA;AAAA,wBAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,0BAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,wBAAuB,OAAO,EAAE,iBAAiBW,EAAI,SAAS;AAAA,0BAC7E,gBAAAX,EAAC,UAAK,WAAU,iBACb,gBAAS,OAAOW,EAAI,QAAQA,EAAI,QAAA,CACnC;AAAA,wBAAA,GACF;AAAA,wBACA,gBAAAT,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,0BAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAA;AAAA,4BAAAS,EAAI,UAAU,eAAA;AAAA,4BAAiB;AAAA,0BAAA,GAAG;AAAA,0BAC1F,gBAAAT,EAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA;AAAA,4BAAA;AAAA,4BAAES,EAAI;AAAA,4BAAY;AAAA,0BAAA,EAAA,CAAI;AAAA,wBAAA,EAAA,CACxD;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAfKA,EAAI;AAAA,kBAAA,CAiBZ,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA,EACF,CAEJ;AAAA,YAAA,GACF;AAAA,YAIF,gBAAAT,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,kBAAA,gBAAAF,EAACY,IAAA,EAAS,WAAU,0BAAA,CAA0B;AAAA,oCAC7C,OAAA,EACC,UAAA;AAAA,oBAAA,gBAAAZ,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjC,EAAE,mBAAmB,GAAE;AAAA,oBAC7D,gBAAAmC,EAAC,KAAA,EAAE,WAAU,6BACV,UAAA;AAAA,sBAAAnC,EAAE,kBAAkB;AAAA,sBAAE;AAAA,sBAAGU;AAAA,sBAAO;AAAA,sBAAET,MAAS,OAAO,MAAM;AAAA,oBAAA,EAAA,CAC3D;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAgC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAASN;AAAA,oBACT,UAAUnB;AAAA,oBACV,WAAWmC;AAAA,sBACT;AAAA,sBACAnC,IACI,mFACA;AAAA,oBAAA;AAAA,oBAGL,UAAiBR,EAAjBQ,IAAmB,0BAA6B,mBAAN;AAAA,kBAAyB;AAAA,gBAAA;AAAA,cACtE,GACF;AAAA,cAEA,gBAAAyB,EAACC,KACE,UAAAlB,KACC,gBAAAiB;AAAA,gBAACI,EAAO;AAAA,gBAAP;AAAA,kBACC,SAAS,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,kBAC/B,SAAS,EAAE,QAAQ,QAAQ,SAAS,EAAA;AAAA,kBACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,kBAC5B,WAAU;AAAA,kBAEV,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,4FACb,UAAA;AAAA,oBAAA,gBAAAF,EAACa,GAAA,EAAS,WAAU,wCAAA,CAAwC;AAAA,oBAC5D,gBAAAX,EAAC,QAAA,EAAK,WAAU,2BACb,UAAA;AAAA,sBAAAnC,EAAE,yBAAyB;AAAA,sBAAE;AAAA,sBAAGgB,EAAa;AAAA,sBAAO;AAAA,sBACpDA,EAAa,SAAS,KACrB,gBAAAmB,EAAC,QAAA,EAAK,WAAU,sBAAqB,UAAA;AAAA,wBAAA;AAAA,wBAAGnC,EAAE,kBAAkB;AAAA,wBAAE;AAAA,wBAAGgB,EAAa;AAAA,wBAAO;AAAA,sBAAA,EAAA,CAAC;AAAA,oBAAA,EAAA,CAE1F;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA,EACF,CAEJ;AAAA,YAAA,GACF;AAAA,8BAGC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAmB,EAAC,MAAA,EAAG,WAAU,2FACZ,UAAA;AAAA,gBAAA,gBAAAF,EAACc,GAAA,EAAW,WAAU,cAAA,CAAc;AAAA,gBACnC/C,EAAE,wBAAwB;AAAA,cAAA,GAC7B;AAAA,cACCY,EAAa,WAAW,IACvB,gBAAAuB,EAAC,OAAA,EAAI,WAAU,0EACb,UAAA;AAAA,gBAAA,gBAAAF,EAACO,IAAA,EAAK,WAAU,qCAAA,CAAqC;AAAA,kCACpD,KAAA,EAAE,WAAU,yBAAyB,UAAAxC,EAAE,0BAA0B,EAAA,CAAE;AAAA,cAAA,EAAA,CACtE,IAEA,gBAAAiC,EAAC,OAAA,EAAI,WAAU,aACZ,UAAArB,EAAa,MAAM,GAAG,EAAE,EAAE,IAAI,CAAAoC,MAAO;AACpC,sBAAMC,IAAQzD,GAAcwD,EAAI,MAAM,IAAI/C,CAAI,KAAK+C,EAAI;AACvD,uBACE,gBAAAb,EAAC,OAAA,EAAiB,WAAU,kGAC1B,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAA,gBAAAF,EAAC,SAAI,WAAWU;AAAA,sBACd;AAAA,sBACAK,EAAI,SAAS,SAAS,sBAAsB;AAAA,oBAAA,GAE3C,UAAAA,EAAI,SAAS,SACV,gBAAAf,EAACc,GAAA,EAAW,WAAU,2BAAA,CAA2B,IACjD,gBAAAd,EAACiB,IAAA,EAAI,WAAU,wBAAuB,GAC5C;AAAA,sCACC,OAAA,EACC,UAAA;AAAA,sBAAA,gBAAAjB,EAAC,KAAA,EAAE,WAAU,6BAA6B,UAAAgB,GAAM;AAAA,sBAChD,gBAAAd,EAAC,KAAA,EAAE,WAAU,4BAA4B,UAAA;AAAA,wBAAAa,EAAI;AAAA,wBAAO;AAAA,wBAAIlB,EAAQkB,EAAI,SAAS;AAAA,sBAAA,EAAA,CAAE;AAAA,oBAAA,EAAA,CACjF;AAAA,kBAAA,GACF;AAAA,kBACA,gBAAAb,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAE,WAAWQ;AAAA,sBACZ;AAAA,sBACAK,EAAI,SAAS,SAAS,qBAAqB;AAAA,oBAAA,GAE1C,UAAA;AAAA,sBAAAA,EAAI,SAAS,SAAS,MAAM;AAAA,sBAAKA,EAAI;AAAA,oBAAA,GACxC;AAAA,oBACA,gBAAAb,EAAC,KAAA,EAAE,WAAU,mDAAmD,UAAA;AAAA,sBAAAa,EAAI;AAAA,sBAAQ;AAAA,oBAAA,EAAA,CAAG;AAAA,kBAAA,EAAA,CACjF;AAAA,gBAAA,EAAA,GAvBQA,EAAI,EAwBd;AAAA,cAEJ,CAAC,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,EAAA,CACF,IAhNA,gBAAAf,EAAC,OAAA,EAAI,WAAU,2CACb,UAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjC,EAAE,0BAA0B,EAAA,CAAE,EAAA,CACtE;AAAA,QA8MA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,CACF,EAAA,CAEJ;AAEJ,GC7UMmD,KAAgB;AAAA,EACpB,EAAE,IAAI,OAAO,SAAS,MAAM,SAAS,OAAO,MAAMC,GAAA;AAAA,EAClD,EAAE,IAAI,SAAS,SAAS,MAAM,SAAS,UAAU,MAAMC,GAAA;AAAA,EACvD,EAAE,IAAI,SAAS,SAAS,MAAM,SAAS,UAAU,MAAMC,EAAA;AAAA,EACvD,EAAE,IAAI,MAAM,SAAS,MAAM,SAAS,MAAM,MAAMR,EAAA;AAAA,EAChD,EAAE,IAAI,SAAS,SAAS,MAAM,SAAS,UAAU,MAAMR,EAAA;AAAA,EACvD,EAAE,IAAI,SAAS,SAAS,MAAM,SAAS,SAAS,MAAMY,GAAA;AACxD,GAEMK,KAA8G;AAAA,EAClH,QAAQ,EAAE,IAAI,mCAAmC,QAAQ,sBAAsB,MAAM,iBAAiB,OAAO,MAAM,SAAS,SAAA;AAAA,EAC5H,MAAM,EAAE,IAAI,mCAAmC,QAAQ,sBAAsB,MAAM,iBAAiB,OAAO,MAAM,SAAS,OAAA;AAAA,EAC1H,MAAM,EAAE,IAAI,qCAAqC,QAAQ,wBAAwB,MAAM,mBAAmB,OAAO,MAAM,SAAS,OAAA;AAAA,EAChI,WAAW,EAAE,IAAI,sCAAsC,QAAQ,uBAAuB,MAAM,kBAAkB,OAAO,MAAM,SAAS,YAAA;AACtI,GAEaC,KAA8C,CAAC;AAAA,EAC1D,QAAA9D;AAAA,EAAQ,SAAAC;AAAA,EAAS,MAAAC;AAAA,EAAM,WAAAC;AAAA,EAAW,mBAAAC;AACpC,MAAM;AACJ,QAAM,EAAE,MAAAG,EAAA,IAASC,EAAA,GACX,CAACuD,GAAOC,CAAQ,IAAIrD,EAAqB,CAAA,CAAE,GAC3C,CAACsD,GAAWC,CAAY,IAAIvD,EAA0B,CAAA,CAAE,GACxD,CAACwD,GAAUC,CAAW,IAAIzD,EAAS,KAAK,GACxC,CAACS,GAASC,CAAU,IAAIV,EAAS,EAAK,GACtC,CAAC0D,GAAYC,CAAa,IAAI3D,EAAwB,IAAI,GAC1D,CAAC4D,GAAgBC,CAAiB,IAAI7D,EAAuD,IAAI,GACjG,CAAC8D,GAAaC,CAAc,IAAI/D,EAA0B,IAAI,GAE9De,IAAYC,EAAY,YAAY;AACxC,QAAKzB,GACL;AAAA,MAAAmB,EAAW,EAAI;AACf,UAAI;AACF,cAAM,CAACsD,GAAUC,CAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC5C9C,EAAgC,uBAAuB;AAAA,UACvDA,EAAyC,6BAA6B5B,EAAK,EAAE,EAAE;AAAA,QAAA,CAChF;AACD,QAAIyE,GAAU,SAAOX,EAASW,EAAS,KAAK,GACxCC,GAAS,aAAWV,EAAaU,EAAQ,SAAS;AAAA,MACxD,SAAS7C,GAAK;AAAE,gBAAQ,MAAM,qBAAqBA,CAAG;AAAA,MAAG,UAAA;AAC/C,QAAAV,EAAW,EAAK;AAAA,MAAG;AAAA;AAAA,EAC/B,GAAG,CAACnB,CAAI,CAAC;AAET,EAAA8B,EAAU,MAAM;AACd,IAAIhC,KAAUE,KAAMwB,EAAA;AAAA,EACtB,GAAG,CAAC1B,GAAQE,GAAMwB,CAAS,CAAC;AAE5B,QAAMmD,IAAU,CAACC,MAAmBb,EAAU,KAAK,CAAAc,MAAKA,EAAE,WAAWD,CAAM,GAErEE,IAAiB,OAAOC,MAAmB;AAC/C,QAAI,GAAC/E,KAAQmE,IACb;AAAA,MAAAC,EAAcW,EAAK,EAAE,GACrBT,EAAkB,IAAI;AACtB,UAAI;AACF,cAAMtC,IAAS,MAAMJ,EAAc,4BAA4B;AAAA,UAC7D,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3B,MAAM,KAAK,UAAU,EAAE,QAAQ5B,EAAK,IAAI,QAAQ+E,EAAK,GAAA,CAAI;AAAA,QAAA,CAC1D;AACD,QAAI/C,GAAQ,WACV9B,EAAkB8B,EAAO,SAAS,GAClCgC,EAAa,CAAAgB,MAAQ,CAAC,GAAGA,GAAM,EAAE,QAAQD,EAAK,IAAI,aAAa,KAAK,IAAA,GAAO,WAAW,KAAA,CAAM,CAAC,GAC7FT,EAAkB,EAAE,SAAS,IAAM,SAASjE,MAAS,OAAO,UAAU,wBAAwB,KAE9FiE,EAAkB,EAAE,SAAS,IAAO,SAAStC,GAAQ,UAAU3B,MAAS,OAAO,SAAS,mBAAA,CAAoB;AAAA,MAEhH,QAAc;AACZ,QAAAiE,EAAkB,EAAE,SAAS,IAAO,SAASjE,MAAS,OAAO,SAAS,iBAAiB;AAAA,MACzF,UAAA;AAEE,QAAA+D,EAAc,IAAI,GAClBI,EAAe,IAAI,GACnB,WAAW,MAAMF,EAAkB,IAAI,GAAG,GAAI;AAAA,MAChD;AAAA;AAAA,EACF,GAEMW,IAAgBhB,MAAa,QAAQJ,IAAQA,EAAM,OAAO,CAAAgB,MAAKA,EAAE,aAAaZ,CAAQ;AAE5F,SACE,gBAAA5B,EAACC,GAAA,EACE,UAAAxC,KACC,gBAAAyC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,SAAS,EAAA;AAAA,QACnE,WAAU;AAAA,QACV,SAAS1C;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAwC;AAAA,MAACE,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC/F,YAAY,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QACtD,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,0FACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAF,EAAC,SAAI,WAAU,4GACb,4BAACmB,IAAA,EAAY,WAAU,0BAAyB,EAAA,CAClD;AAAA,gCACC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAnB,EAAC,QAAG,WAAU,gDACX,UAAAhC,MAAS,OAAO,SAAS,mBAC5B;AAAA,kCACC,KAAA,EAAE,WAAU,6BACV,UAAAA,MAAS,OAAO,eAAe,gCAAA,CAClC;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YACA,gBAAAgC,EAAC,UAAA,EAAO,SAAStC,GAAS,WAAU,wGAClC,UAAA,gBAAAsC,EAACM,GAAA,EAAE,WAAU,4BAAA,CAA4B,EAAA,CAC3C;AAAA,UAAA,GACF;AAAA,4BAGC,OAAA,EAAI,WAAU,sGACb,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF,EAACK,GAAA,EAAK,WAAU,0CAAA,CAA0C;AAAA,cAC1D,gBAAAL,EAAC,QAAA,EAAK,WAAU,kDAAkD,UAAApC,GAAU;AAAA,gCAC3E,QAAA,EAAK,WAAU,yBAAyB,UAAAI,MAAS,OAAO,UAAU,eAAA,CAAe;AAAA,YAAA,GACpF;AAAA,YACA,gBAAAkC,EAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,cAAA,gBAAAF,EAAC6C,IAAA,EAAQ,WAAU,UAAA,CAAU;AAAA,cAC5BnB,EAAU;AAAA,cAAO;AAAA,cAAE1D,MAAS,OAAO,SAAS;AAAA,YAAA,EAAA,CAC/C;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,UAGA,gBAAAgC,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAAkB,GAAc,IAAI,CAAC4B,MAAQ;AAC1B,kBAAMC,IAAOD,EAAI,MACXE,IAAWpB,MAAakB,EAAI;AAClC,mBACE,gBAAA5C;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAM2B,EAAYiB,EAAI,EAAE;AAAA,gBACjC,WAAWpC;AAAA,kBACT;AAAA,kBACAsC,IACI,8DACA;AAAA,gBAAA;AAAA,gBAGN,UAAA;AAAA,kBAAA,gBAAAhD,EAAC+C,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,kBACzB/E,MAAS,OAAO8E,EAAI,UAAUA,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,cAV9BA,EAAI;AAAA,YAAA;AAAA,UAaf,CAAC,GACH,GACF;AAAA,UAGA,gBAAA9C,EAACC,KACE,UAAA+B,KACC,gBAAA9B;AAAA,YAACE,EAAO;AAAA,YAAP;AAAA,cACC,SAAS,EAAE,SAAS,GAAG,GAAG,IAAA;AAAA,cAAO,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,cAAK,MAAM,EAAE,SAAS,GAAG,GAAG,IAAA;AAAA,cACvF,WAAWM;AAAA,gBACT;AAAA,gBACAsB,EAAe,UACX,oEACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,gBAAAA,EAAe,4BAAWiB,IAAA,EAAM,WAAU,eAAc,IAAK,gBAAAjD,EAACkD,IAAA,EAAY,WAAU,cAAA,CAAc;AAAA,gBAClGlB,EAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAGtB;AAAA,UAGA,gBAAAhC,EAAC,SAAI,WAAU,8BACZ,cACC,gBAAAA,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA,gBAAAA,EAAC,SAAI,WAAU,oFAAA,CAAoF,GACrG,IACE4C,EAAc,WAAW,IAC3B,gBAAA1C,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,YAAA,gBAAAF,EAACmB,IAAA,EAAY,WAAU,uCAAA,CAAuC;AAAA,8BAC7D,KAAA,EAAE,WAAU,yBACV,UAAAnD,MAAS,OAAO,YAAY,4BAAA,CAC/B;AAAA,UAAA,EAAA,CACF,sBAEC,OAAA,EAAI,WAAU,0BACZ,UAAA4E,EAAc,IAAI,CAACF,MAAS;AAC3B,kBAAMS,IAAS7B,GAAcoB,EAAK,MAAM,KAAKpB,GAAc,QACrD8B,IAAQd,EAAQI,EAAK,EAAE,GACvBW,IAAazF,KAAa8E,EAAK;AACrC,mBACE,gBAAAxC;AAAA,cAACE,EAAO;AAAA,cAAP;AAAA,gBAEC,UAAU,EAAE,OAAO,KAAA;AAAA,gBACnB,SAAS,MAAM,CAACgD,KAASjB,EAAeO,CAAI;AAAA,gBAC5C,UAAUU;AAAA,gBACV,WAAW1C;AAAA,kBACT;AAAA,kBACA0C,IACI,mDACA,qBAAqBD,EAAO,EAAE,IAAIA,EAAO,MAAM;AAAA,gBAAA;AAAA,gBAIrD,UAAA;AAAA,kBAAA,gBAAAnD,EAAC,QAAA,EAAK,WAAWU,EAAK,wEAAwEyC,EAAO,IAAI,GACtG,UAAAnF,MAAS,OAAOmF,EAAO,QAAQA,EAAO,SACzC;AAAA,kBAGA,gBAAAnD,EAAC,QAAA,EAAK,WAAU,iBAAiB,YAAK,MAAK;AAAA,kBAG3C,gBAAAA,EAAC,OAAE,WAAU,kDACV,gBAAS,OAAO0C,EAAK,SAASA,EAAK,OAAA,CACtC;AAAA,kBAGA,gBAAA1C,EAAC,OAAE,WAAU,+DACV,gBAAS,OAAO0C,EAAK,SAASA,EAAK,OAAA,CACtC;AAAA,kBAGA,gBAAA1C,EAAC,SAAI,WAAU,kDACZ,cACC,gBAAAE,EAAC,QAAA,EAAK,WAAU,2DACd,UAAA;AAAA,oBAAA,gBAAAF,EAACiD,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,oBAC1BjF,MAAS,OAAO,QAAQ;AAAA,kBAAA,EAAA,CAC3B,IAEA,gBAAAkC,EAAC,QAAA,EAAK,WAAWQ;AAAA,oBACf;AAAA,oBACA2C,IAAa,oBAAoB;AAAA,kBAAA,GAEjC,UAAA;AAAA,oBAAA,gBAAArD,EAACK,GAAA,EAAK,WAAU,uBAAA,CAAuB;AAAA,oBACtCqC,EAAK;AAAA,kBAAA,EAAA,CACR,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cA7CKA,EAAK;AAAA,YAAA;AAAA,UAgDhB,CAAC,GACH,GAEJ;AAAA,UAGA,gBAAA1C,EAACC,KACE,UAAAiC,KACC,gBAAAlC;AAAA,YAACI,EAAO;AAAA,YAAP;AAAA,cACC,SAAS,EAAE,SAAS,EAAA;AAAA,cAAK,SAAS,EAAE,SAAS,EAAA;AAAA,cAAK,MAAM,EAAE,SAAS,EAAA;AAAA,cACnE,WAAU;AAAA,cACV,SAAS,MAAM+B,EAAe,IAAI;AAAA,cAElC,UAAA,gBAAAjC;AAAA,gBAACE,EAAO;AAAA,gBAAP;AAAA,kBACC,SAAS,EAAE,OAAO,KAAK,SAAS,EAAA;AAAA,kBAAK,SAAS,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,kBAAK,MAAM,EAAE,OAAO,KAAK,SAAS,EAAA;AAAA,kBACrG,SAAS,CAACkD,MAAMA,EAAE,gBAAA;AAAA,kBAClB,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAtD,EAAC,QAAA,EAAK,WAAU,uBAAuB,UAAAkC,EAAY,MAAK;AAAA,oBACxD,gBAAAlC,EAAC,OAAE,WAAU,gCACV,gBAAS,OAAOkC,EAAY,SAASA,EAAY,OAAA,CACpD;AAAA,oBACA,gBAAAlC,EAAC,OAAE,WAAU,kCACV,gBAAS,OAAOkC,EAAY,SAASA,EAAY,OAAA,CACpD;AAAA,oBAEA,gBAAAhC,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,sBAAA,gBAAAF,EAACK,GAAA,EAAK,WAAU,0BAAA,CAA0B;AAAA,sBAC1C,gBAAAL,EAAC,QAAA,EAAK,WAAU,WAAW,YAAY,MAAK;AAAA,sBAC5C,gBAAAA,EAAC,QAAA,EAAK,WAAU,mCAAkC,UAAA,KAAA,CAAE;AAAA,oBAAA,GACtD;AAAA,oBAECpC,IAAYsE,EAAY,OACvB,gBAAAlC,EAAC,OAAE,WAAU,gCACV,gBAAS,OAAO,WAAWkC,EAAY,IAAI,OAAOtE,CAAS,MAAM,yBAAyBsE,EAAY,IAAI,UAAUtE,CAAS,IAAA,CAChI,IACE;AAAA,oBAEJ,gBAAAsC,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,sBAAA,gBAAAF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAMmC,EAAe,IAAI;AAAA,0BAClC,WAAU;AAAA,0BAET,UAAAnE,MAAS,OAAO,OAAO;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAE1B,gBAAAgC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAMyC,EAAeP,CAAW;AAAA,0BACzC,UAAUtE,IAAYsE,EAAY,QAAQ,CAAC,CAACJ;AAAA,0BAC5C,WAAWpB;AAAA,4BACT;AAAA,4BACA9C,KAAasE,EAAY,OACrB,kFACA;AAAA,0BAAA;AAAA,0BAGL,UAAAJ,IAAa,QAAS9D,MAAS,OAAO,SAAS;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAClD,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA,EACF,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GC/RMuF,KAAmB;AAAA,EACvB,EAAE,MAAMC,IAAO,OAAO,mBAAmB,IAAI,sCAAsC,QAAQ,wBAAwB,MAAM,wBAAwB,UAAU,+BAAA;AAAA,EAC3J,EAAE,MAAMC,IAAO,OAAO,iBAAiB,IAAI,oCAAoC,QAAQ,sBAAsB,MAAM,sBAAsB,UAAU,6BAAA;AAAA,EACnJ,EAAE,MAAMA,IAAO,OAAO,kBAAkB,IAAI,sCAAsC,QAAQ,uBAAuB,MAAM,uBAAuB,UAAU,+BAAA;AAC1J,GAEMC,KAAc;AAEpB,SAASC,KAA+C;AACtD,MAAI;AACF,UAAMC,IAAM,aAAa,QAAQF,EAAW;AAC5C,QAAIE,EAAK,QAAO,KAAK,MAAMA,CAAG;AAAA,EAChC,QAAQ;AAAA,EAAC;AACT,SAAO,CAAA;AACT;AAEA,SAASC,GAAqBC,GAA0B;AACtD,MAAI;AACF,UAAMC,IAA8B,CAAA;AACpC,IAAAD,EAAS,QAAQ,CAACE,GAAGxB,MAAM;AAAE,MAAAuB,EAAIC,EAAE,MAAM,IAAIxB,IAAI;AAAA,IAAG,CAAC,GACrD,aAAa,QAAQkB,IAAa,KAAK,UAAUK,CAAG,CAAC;AAAA,EACvD,QAAQ;AAAA,EAAC;AACX;AAEA,SAASE,GAAmBH,GAA+C;AACzE,QAAMnB,IAAOgB,GAAA,GACPO,IAAU,OAAO,KAAKvB,CAAI,EAAE,SAAS;AAE3C,SAAOmB,EAAS,IAAI,CAACK,GAAOC,MAAU;AACpC,UAAMC,IAAcD,IAAQ,GACtBE,IAAe3B,EAAKwB,EAAM,MAAM,KAAK;AAE3C,QAAII,IAA4B;AAChC,WAAKL,IAEMI,MAAiB,OAC1BC,IAAa,OAEbA,IAAaD,IAAeD,IAJ5BE,IAAa,MAOR,EAAE,GAAGJ,GAAO,YAAAI,GAAY,cAAAD,EAAA;AAAA,EACjC,CAAC;AACH;AAGA,SAASE,GAAaV,GAAkC;AACtD,SAAIA,EAAS,WAAW,IAAU,IAC3B,KAAK,IAAI,GAAGA,EAAS,IAAI,CAAAE,MAAKA,EAAE,WAAW,GAAG,IAAM;AAC7D;AAEO,MAAMS,KAAoD,CAAC;AAAA,EAChE,QAAAhH;AAAA,EACA,SAAAC;AAAA,EACA,eAAAgH;AAAA,EACA,MAAA/G;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,mBAAAC;AACF,MAAM;AACJ,QAAM,CAACiG,GAAUa,CAAW,IAAIvG,EAA8B,CAAA,CAAE,GAC1D,CAACwG,GAAaC,CAAc,IAAIzG,EAAyB,CAAA,CAAE,GAC3D,CAACS,GAASC,CAAU,IAAIV,EAAS,EAAK,GACtC,CAAC0G,GAAUC,CAAW,IAAI3G,EAAS,EAAK,GACxC,CAAC4G,GAAYC,CAAa,IAAI7G,EAAwB,IAAI,GAC1D8G,IAAcC,GAAO,EAAI,GACzB,EAAE,GAAApH,EAAA,IAAME,EAAA,GAERmH,IAAc,OAAOC,MAAmB;AAC5C,QAAI,GAAC1H,KAAQC,IAAY;AACzB,UAAI;AACF,cAAM+B,IAAS,MAAMJ,EAAc,sBAAsB;AAAA,UACvD,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3B,MAAM,KAAK,UAAU,EAAE,QAAQ5B,EAAK,IAAI,QAAA0H,GAAQ,QAAQ,IAAA,CAAK;AAAA,QAAA,CAC9D;AACD,QAAI1F,GAAQ,YACV9B,IAAoB8B,EAAO,SAAS,GACpCsF,EAAcI,CAAM,GACpB,WAAW,MAAMJ,EAAc,IAAI,GAAG,GAAI,GAEtCL,EAAY,SAAS,KAAGf,GAAqBe,CAAW,GAC5DU,EAAA;AAAA,MAEJ,SAAS9F,GAAK;AAAE,gBAAQ,MAAM,gBAAgBA,CAAG;AAAA,MAAG;AAAA,EACtD,GAEM8F,IAAmBlG,EAAY,YAAY;AAC/C,IAAAN,EAAW,EAAI;AACf,QAAI;AACF,YAAMa,IAAS,MAAMJ,EAAuC,cAAc;AAC1E,UAAII,GAAQ,UAAU;AACpB,cAAM4F,IAActB,GAAmBtE,EAAO,QAAQ;AAKtD,YAJAgF,EAAYY,CAAW,GACvBV,EAAelF,EAAO,QAAQ,GAG1B,CAACuF,EAAY;AACf,UAAArB,GAAqBlE,EAAO,QAAQ;AAAA,aAC/B;AAEL,gBAAMgD,IAAOgB,GAAA;AACb,UAAI,OAAO,KAAKhB,CAAI,EAAE,WAAW,KAC/BkB,GAAqBlE,EAAO,QAAQ,GAEtCuF,EAAY,UAAU;AAAA,QACxB;AAAA,MACF;AAAA,IACF,SAAS1F,GAAK;AACZ,cAAQ,MAAM,gCAAgCA,CAAG;AAAA,IACnD,UAAA;AACE,MAAAV,EAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,EAAAW,EAAU,MAAM;AACd,IAAIhC,KAAQ6H,EAAA;AAAA,EACd,GAAG,CAAC7H,GAAQ6H,CAAgB,CAAC;AAE7B,QAAME,IAAW,CAACH,MAAmBI,GAAc,KAAK,CAAC1H,MAAMA,EAAE,OAAOsH,CAAM,GAExEK,IAAYlB,GAAaI,CAAW;AAE1C,SACE,gBAAA5E,EAACC,GAAA,EACE,UAAAxC,KACC,gBAAAyC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QACpB,SAAS,EAAE,SAAS,EAAA;AAAA,QACpB,MAAM,EAAE,SAAS,EAAA;AAAA,QACjB,WAAU;AAAA,QACV,SAAS1C;AAAA,MAAA;AAAA,IAAA;AAAA,IAGX,gBAAAwC;AAAA,MAACE,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC/B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,QAC1B,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC5B,YAAY,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QACtD,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF,EAAC,SAAI,WAAU,oIACb,4BAAC2F,GAAA,EAAO,WAAU,+BAA8B,EAAA,CAClD;AAAA,gCACC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAA3F,EAAC,MAAA,EAAG,WAAU,kDAAkD,UAAAjC,EAAE,mBAAmB,GAAE;AAAA,kCACtF,KAAA,EAAE,WAAU,yBAAyB,UAAAA,EAAE,sBAAsB,EAAA,CAAE;AAAA,cAAA,EAAA,CAClE;AAAA,YAAA,GACF;AAAA,YACA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM+E,EAAY,CAACD,CAAQ;AAAA,kBACpC,WAAWpE;AAAA,oBACT;AAAA,oBACAoE,IACI,oDACA;AAAA,kBAAA;AAAA,kBAEN,OAAO/G,EAAE,yBAAyB;AAAA,kBAElC,UAAA,gBAAAiC,EAAC4F,IAAA,EAAK,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE5B,gBAAA5F;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AAEb,oBAAI4E,EAAY,SAAS,KAAGf,GAAqBe,CAAW,GAC5DU,EAAA;AAAA,kBACF;AAAA,kBACA,UAAUzG;AAAA,kBACV,WAAW6B;AAAA,oBACT;AAAA,oBACA7B,KAAW;AAAA,kBAAA;AAAA,kBAGb,UAAA,gBAAAmB,EAAC6F,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEjC,gBAAA7F;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAStC;AAAA,kBACT,WAAU;AAAA,kBAEV,UAAA,gBAAAsC,EAACM,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACzB,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UAGA,gBAAAN,EAACC,KACE,UAAA6E,KACC,gBAAA9E;AAAA,YAACI,EAAO;AAAA,YAAP;AAAA,cACC,SAAS,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,cAC/B,SAAS,EAAE,QAAQ,QAAQ,SAAS,EAAA;AAAA,cACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAA;AAAA,cAC5B,WAAU;AAAA,cAEV,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,sEACZ,UAAA;AAAA,kBAAA,gBAAAF,EAACc,GAAA,EAAW,WAAU,cAAA,CAAc;AAAA,kBACnC/C,EAAE,6BAA6B;AAAA,gBAAA,GAClC;AAAA,kCACC,KAAA,EAAE,WAAU,yCACV,UAAAA,EAAE,wBAAwB,GAC7B;AAAA,gBACA,gBAAAiC,EAAC,OAAA,EAAI,WAAU,2EAA0E,UAAA,8DAAA,CAEzF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA,GAGN;AAAA,UAGA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BAAyB,OAAO,EAAE,gBAAgB,OAAA,GAC9D,UAAAnB,KAAWiF,EAAS,WAAW,IAC9B,gBAAA9D,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF,GACvG,IACE8D,EAAS,WAAW,IACtB,gBAAA5D,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,YAAA,gBAAAF,EAAC2F,GAAA,EAAO,WAAU,uCAAA,CAAuC;AAAA,8BACxD,KAAA,EAAE,WAAU,yBAAyB,UAAA5H,EAAE,wBAAwB,GAAE;AAAA,8BACjE,KAAA,EAAE,WAAU,8BACV,UAAAA,EAAE,wBAAwB,EAAA,CAC7B;AAAA,UAAA,EAAA,CACF,sBAEC,OAAA,EAAI,WAAU,iBACZ,UAAA+F,EAAS,IAAI,CAACK,GAAOC,MAAU;AAC9B,kBAAM0B,IAAQN,EAASrB,EAAM,MAAM,GAC7B4B,IAAaxC,GAAiBa,CAAK,GACnC4B,IAAS5B,IAAQ,GACjB6B,IAAWF,GAAY,QAAQJ,GAC/BO,IAAgBR,IAAY,IAAKvB,EAAM,cAAcuB,IAAa,MAAM,GACxES,IAAkBhC,EAAM,QAAQA,EAAM,QAAQA,EAAM;AAE1D,mBACE,gBAAAjE;AAAA,cAACE,EAAO;AAAA,cAAP;AAAA,gBAEC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAA;AAAA,gBAC1B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,gBAC1B,YAAY,EAAE,OAAOgE,IAAQ,KAAA;AAAA,gBAC7B,SAAS,MAAMM,IAAgBP,EAAM,MAAM;AAAA,gBAC3C,WAAWzD;AAAA,kBACT;AAAA,kBACAsF,IACI,oBAAoBD,EAAW,EAAE,IAAIA,EAAW,MAAM,cAAcA,EAAW,IAAI,KACnF;AAAA,gBAAA;AAAA,gBAIN,UAAA;AAAA,kBAAA,gBAAA/F,EAACoG,IAAA,EAAgB,QAAQjC,EAAM,WAAA,CAAY;AAAA,kBAE3C,gBAAAjE,EAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,oBAAA,gBAAAF,EAAC,SAAI,WAAWU;AAAA,sBACd;AAAA,sBACAsF,IACI,gBACA;AAAA,oBAAA,GAEH,UAAAA,IACC,gBAAAhG,EAACiG,GAAA,EAAS,WAAWvF,EAAK,WAAWqF,GAAY,KAAK,EAAA,CAAG,IAEzD,gBAAA/F,EAAC,QAAA,EAAK,WAAU,mCAAmC,UAAAoE,IAAQ,GAAE,GAEjE;AAAA,oBAGC0B,KACC,gBAAA9F,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAA;AAAA,sBAACqG;AAAA,sBAAA;AAAA,wBACC,KAAKP,EAAM;AAAA,wBACX,KAAKA,EAAM;AAAA,wBACX,WAAU;AAAA,sBAAA;AAAA,oBAAA,GAEd;AAAA,oBAIF,gBAAA5F,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,OAAE,WAAWU;AAAA,wBACZ;AAAA,wBACAsF,IAAS,eAAe;AAAA,sBAAA,GAEvB,UAAAF,GAAO,SAAS3B,EAAM,OAAA,CACzB;AAAA,sBACA,gBAAAnE,EAAC,OAAE,WAAU,kCAAkC,aAAO,UAAUjC,EAAE,qBAAqB,EAAA,CAAE;AAAA,oBAAA,GAC3F;AAAA,oBAGA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,OAAE,WAAWU;AAAA,wBACZ;AAAA,wBACAsF,IAASD,GAAY,QAAQ;AAAA,sBAAA,GAE5B,UAAA5B,EAAM,YAAY,QAAQ,CAAC,EAAA,CAC9B;AAAA,wCACC,KAAA,EAAE,WAAU,6BAA6B,UAAApG,EAAE,mBAAmB,EAAA,CAAE;AAAA,oBAAA,EAAA,CACnE;AAAA,kBAAA,GACF;AAAA,kBAGA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,qDACd,UAAA;AAAA,wBAAA,gBAAAF,EAACiB,IAAA,EAAI,WAAU,cAAA,CAAc;AAAA,wBAC5BlD,EAAE,uBAAuB;AAAA,sBAAA,GAC5B;AAAA,sBACA,gBAAAmC,EAAC,QAAA,EAAK,WAAU,oDACZ,UAAA;AAAA,wBAAAgG,EAAe,QAAQ,CAAC;AAAA,wBAAE;AAAA,sBAAA,EAAA,CAC9B;AAAA,oBAAA,GACF;AAAA,oBACA,gBAAAlG,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAA;AAAA,sBAACI,EAAO;AAAA,sBAAP;AAAA,wBACC,SAAS,EAAE,OAAO,EAAA;AAAA,wBAClB,SAAS,EAAE,OAAO,GAAG8F,CAAa,IAAA;AAAA,wBAClC,YAAY,EAAE,OAAO9B,IAAQ,OAAO,KAAK,UAAU,KAAK,MAAM,UAAA;AAAA,wBAC9D,WAAW1D;AAAA,0BACT;AAAA,0BACAsF,IACID,EAAW,WACX;AAAA,wBAAA;AAAA,sBACN;AAAA,oBAAA,EACF,CACF;AAAA,kBAAA,GACF;AAAA,kBAGA,gBAAA7F,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,qDACd,UAAA;AAAA,sBAAA,gBAAAF,EAACsG,IAAA,EAAK,WAAU,UAAA,CAAU;AAAA,sBACzBnC,EAAM;AAAA,oBAAA,GACT;AAAA,oBACA,gBAAAjE,EAAC,QAAA,EAAK,WAAU,qDACd,UAAA;AAAA,sBAAA,gBAAAF,EAACuG,GAAA,EAAM,WAAU,UAAA,CAAU;AAAA,sBAC1BpC,EAAM;AAAA,oBAAA,GACT;AAAA,oBACA,gBAAAjE,EAAC,QAAA,EAAK,WAAU,qDACd,UAAA;AAAA,sBAAA,gBAAAF,EAACwG,IAAA,EAAc,WAAU,UAAA,CAAU;AAAA,sBAClCrC,EAAM;AAAA,oBAAA,GACT;AAAA,oBACCxG,KAAQC,KAAa,OACpB,gBAAAsC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS,CAACoD,OAAM;AAAE,0BAAAA,GAAE,gBAAA,GAAmB8B,EAAYjB,EAAM,MAAM;AAAA,wBAAG;AAAA,wBAClE,UAAUa,MAAeb,EAAM;AAAA,wBAC/B,WAAWzD;AAAA,0BACT;AAAA,0BACAsE,MAAeb,EAAM,SACjB,6DACA;AAAA,wBAAA;AAAA,wBAEN,OAAOpG,EAAE,qBAAqB;AAAA,wBAE9B,UAAA;AAAA,0BAAA,gBAAAiC,EAACyG,IAAA,EAAO,WAAU,cAAA,CAAc;AAAA,0BAC/BzB,MAAeb,EAAM,SAASpG,EAAE,wBAAwB,IAAI,GAAGA,EAAE,iBAAiB,CAAC;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,qBAGtF,CAACJ,KAAQC,IAAY,QACrB,gBAAAsC,EAAC,QAAA,EAAK,WAAU,6DACd,UAAA;AAAA,sBAAA,gBAAAF,EAACa,GAAA,EAAS,WAAU,cAAA,CAAc;AAAA,sBACjCsF;AAAA,sBAAgB;AAAA,sBAAEpI,EAAE,6BAA6B;AAAA,oBAAA,EAAA,CACpD;AAAA,kBAAA,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cA9HKoG,EAAM;AAAA,YAAA;AAAA,UAiIjB,CAAC,GACH,GAEJ;AAAA,UAGA,gBAAAnE,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,YAAA,gBAAAF,EAACc,GAAA,EAAW,WAAU,cAAA,CAAc;AAAA,8BACnC,QAAA,EAAK,WAAU,WAAW,UAAA/C,EAAE,uBAAuB,EAAA,CAAE;AAAA,UAAA,EAAA,CACxD,GACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GAKMqI,KAAuD,CAAC,EAAE,QAAAM,QAAa;AAC3E,QAAM,EAAE,GAAA3I,EAAA,IAAME,EAAA;AAEd,SAAIyI,MAAW,OAGX,gBAAAxG;AAAA,IAACE,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,MAC9B,SAAS,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,MAC9B,YAAY,EAAE,OAAO,KAAK,MAAM,UAAU,SAAS,GAAA;AAAA,MACnD,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAJ,EAACa,GAAA,EAAS,WAAU,4BAAA,CAA4B;AAAA,0BAC/C,QAAA,EAAK,WAAU,0CAA0C,UAAA9C,EAAE,qBAAqB,EAAA,CAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAKrF2I,MAAW,IAEX,gBAAAxG,EAAC,OAAA,EAAI,WAAU,0HACb,UAAA;AAAA,IAAA,gBAAAF,EAAC2G,IAAA,EAAM,WAAU,4BAAA,CAA4B;AAAA,sBAC5C,QAAA,EAAK,WAAU,4BAA4B,UAAA5I,EAAE,sBAAsB,EAAA,CAAE;AAAA,EAAA,GACxE,IAIA2I,IAAS,IAET,gBAAAxG;AAAA,IAACE,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,MAC1B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,MAC1B,YAAY,EAAE,OAAO,IAAA;AAAA,MACrB,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAJ,EAAC4G,IAAA,EAAQ,WAAU,+BAAA,CAA+B;AAAA,QAClD,gBAAA1G,EAAC,QAAA,EAAK,WAAU,6CACb,UAAA;AAAA,UAAAwG;AAAA,UAAO;AAAA,UAAE3I,EAAE,oBAAoB;AAAA,QAAA,EAAA,CAClC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAOJ,gBAAAmC;AAAA,IAACE,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,GAAG,IAAI,SAAS,EAAA;AAAA,MAC3B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,MAC1B,YAAY,EAAE,OAAO,IAAA;AAAA,MACrB,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAJ,EAAC6G,IAAA,EAAU,WAAU,2BAAA,CAA2B;AAAA,QAChD,gBAAA3G,EAAC,QAAA,EAAK,WAAU,yCACb,UAAA;AAAA,UAAA,KAAK,IAAIwG,CAAM;AAAA,UAAE;AAAA,UAAE3I,EAAE,sBAAsB;AAAA,QAAA,EAAA,CAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GC9ca+I,KAAsD,CAAC;AAAA,EAClE,QAAArJ;AAAA,EAAQ,SAAAC;AAAA,EAAS,MAAAC;AAAA,EAAM,WAAAC,IAAY;AACrC,MAAM;AACJ,QAAM,EAAE,GAAAG,GAAG,MAAAC,EAAA,IAASC,EAAA,GACd,CAAC8I,GAAcC,CAAe,IAAI5I,EAAwB,CAAA,CAAE,GAC5D,CAAC6I,GAAOC,CAAQ,IAAI9I,EAA2B,CAAA,CAAE,GACjD,CAAC+I,GAAeC,CAAgB,IAAIhJ,EAAS,CAAC,GAC9C,CAACiJ,GAAmBC,CAAoB,IAAIlJ,EAAS,EAAE,GACvD,CAACS,GAASC,CAAU,IAAIV,EAAS,EAAK,GACtC,CAACmJ,GAAcC,CAAe,IAAIpJ,EAAwB,IAAI,GAE9DqJ,IAAoBrI,EAAY,YAAY;AAChD,QAAKzB,GACL;AAAA,MAAAmB,EAAW,EAAI;AACf,UAAI;AAEF,cAAMS,EAAS,iBAAiB5B,EAAK,EAAE,UAAU;AAAA,UAC/C,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3B,MAAM,KAAK,UAAU,EAAE,QAAQ,eAAe,WAAAC,GAAW;AAAA,QAAA,CAC1D;AAED,cAAM8J,IAAO,MAAMnI,EAKhB,iBAAiB5B,EAAK,EAAE,EAAE;AAE7B,YAAI+J,GAAM,cAAc;AACtB,UAAAV,EAAgBU,EAAK,YAAY,GACjCR,EAASQ,EAAK,SAAS,EAAE,GACzBN,EAAiBM,EAAK,aAAa,GACnCJ,EAAqBI,EAAK,iBAAiB;AAG3C,gBAAMC,IAASD,EAAK,aAAa,KAAK,CAAAE,MAAKA,EAAE,aAAa;AAC1D,UAAID,MACFH,EAAgBG,EAAO,EAAE,GACzB,WAAW,MAAMH,EAAgB,IAAI,GAAG,GAAI;AAAA,QAEhD;AAAA,MACF,SAAShI,GAAK;AAAE,gBAAQ,MAAM,6BAA6BA,CAAG;AAAA,MAAG,UAAA;AACvD,QAAAV,EAAW,EAAK;AAAA,MAAG;AAAA;AAAA,EAC/B,GAAG,CAACnB,GAAMC,CAAS,CAAC;AAEpB,EAAA6B,EAAU,MAAM;AACd,IAAIhC,KAAUE,KAAM8J,EAAA;AAAA,EACtB,GAAG,CAAChK,GAAQE,GAAM8J,CAAiB,CAAC;AAEpC,QAAMI,IAAkBR,IAAoB,IAAKF,IAAgBE,IAAqB,MAAM,GAEtFS,IAAiI;AAAA,IACrI,EAAE,KAAK,cAAc,SAAS,OAAO,SAAS,SAAS,MAAMzH,GAAM,OAAO,kBAAA;AAAA,IAC1E,EAAE,KAAK,cAAc,SAAS,QAAQ,SAAS,UAAU,MAAM0H,IAAO,OAAO,kBAAA;AAAA,IAC7E,EAAE,KAAK,sBAAsB,SAAS,MAAM,SAAS,SAAS,MAAMjH,GAAY,OAAO,gBAAA;AAAA,IACvF,EAAE,KAAK,iBAAiB,SAAS,MAAM,SAAS,YAAY,MAAMD,GAAU,OAAO,kBAAA;AAAA,EAAkB;AAGvG,SACE,gBAAAb,EAACC,GAAA,EACE,UAAAxC,KACC,gBAAAyC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,SAAS,EAAA;AAAA,QACnE,WAAU;AAAA,QACV,SAAS1C;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAwC;AAAA,MAACE,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC/F,YAAY,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QACtD,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF,EAAC,SAAI,WAAU,oIACb,4BAAC2F,GAAA,EAAO,WAAU,+BAA8B,EAAA,CAClD;AAAA,gCACC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAA3F,EAAC,MAAA,EAAG,WAAU,kDAAkD,UAAAjC,EAAE,oBAAoB,GAAE;AAAA,kCACvF,KAAA,EAAE,WAAU,yBAAyB,UAAAA,EAAE,uBAAuB,EAAA,CAAE;AAAA,cAAA,EAAA,CACnE;AAAA,YAAA,GACF;AAAA,YACA,gBAAAiC,EAAC,UAAA,EAAO,SAAStC,GAAS,WAAU,uFAClC,UAAA,gBAAAsC,EAACM,GAAA,EAAE,WAAU,UAAA,CAAU,EAAA,CACzB;AAAA,UAAA,GACF;AAAA,UAGA,gBAAAN,EAAC,OAAA,EAAI,WAAU,wCAAuC,OAAO,EAAE,gBAAgB,OAAA,GAC5E,UAACrC,IAKEkB,KAAWkI,EAAa,WAAW,IACrC,gBAAA/G,EAAC,OAAA,EAAI,WAAU,6BACb,4BAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF,EAAA,CACvG,IAEA,gBAAAE,EAAAC,GAAA,EAEE,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6GACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,8DAA8D,UAAAjC,EAAE,uBAAuB,GAAE;AAAA,kBACtG,gBAAAmC,EAAC,KAAA,EAAE,WAAU,0GACV,UAAA;AAAA,oBAAAiH;AAAA,oBAAc;AAAA,oBAAIE;AAAA,kBAAA,EAAA,CACrB;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAnH,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,SAAQ,aACtD,UAAA;AAAA,oBAAA,gBAAAF,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,WAAU,qBAAoB;AAAA,oBAC/G,gBAAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,IAAG;AAAA,wBAAK,IAAG;AAAA,wBAAK,GAAE;AAAA,wBAAK,MAAK;AAAA,wBAC5B,QAAO;AAAA,wBACP,aAAY;AAAA,wBACZ,iBAAiB,GAAG,QAAQ6H,IAAkB,GAAG;AAAA,wBACjD,eAAc;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEhB,gBAAA7H,EAAC,QAAA,EACC,UAAA,gBAAAE,EAAC,kBAAA,EAAe,IAAG,eAAc,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KACvD,UAAA;AAAA,sBAAA,gBAAAF,EAAC,QAAA,EAAK,QAAO,MAAK,WAAU,WAAU;AAAA,sBACtC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,UAAA,CAAU;AAAA,oBAAA,EAAA,CAC1C,EAAA,CACF;AAAA,kBAAA,GACF;AAAA,oCACC,OAAA,EAAI,WAAU,qDACb,UAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,qCAAqC,UAAA;AAAA,oBAAA,KAAK,MAAM2H,CAAe;AAAA,oBAAE;AAAA,kBAAA,EAAA,CAAC,EAAA,CACpF;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,GACF;AAAA,gCAGC,OAAA,EAAI,WAAU,iEACZ,UAAAC,EAAa,IAAI,CAAAE,MAAM;AACtB,sBAAMjF,IAAOiF,EAAG;AAChB,uBACE,gBAAA9H,EAAC,OAAA,EAAiB,WAAU,eAC1B,UAAA;AAAA,kBAAA,gBAAAF,EAAC+C,KAAK,WAAWrC,EAAK,8BAA8BsH,EAAG,KAAK,GAAG;AAAA,kBAC/D,gBAAAhI,EAAC,OAAE,WAAU,uCAAuC,YAAMgI,EAAG,GAAG,KAAK,GAAE;AAAA,kBACvE,gBAAAhI,EAAC,OAAE,WAAU,4BAA4B,gBAAS,OAAOgI,EAAG,UAAUA,EAAG,QAAA,CAAQ;AAAA,gBAAA,EAAA,GAHzEA,EAAG,GAIb;AAAA,cAEJ,CAAC,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAGA,gBAAAhI,EAACC,GAAA,EACE,UAAAsH,MAAiB,MAAM;AACtB,oBAAMU,IAAQlB,EAAa,KAAK,CAAAa,MAAKA,EAAE,OAAOL,CAAY;AAC1D,qBAAKU,IAEH,gBAAA/H;AAAA,gBAACE,EAAO;AAAA,gBAAP;AAAA,kBAEC,SAAS,EAAE,OAAO,KAAK,SAAS,EAAA;AAAA,kBAChC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAA;AAAA,kBAC9B,MAAM,EAAE,OAAO,KAAK,SAAS,EAAA;AAAA,kBAC7B,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAJ;AAAA,sBAACI,EAAO;AAAA,sBAAP;AAAA,wBACC,SAAS,EAAE,QAAQ,CAAC,GAAG,KAAK,IAAI,KAAK,IAAI,CAAC,EAAA;AAAA,wBAC1C,YAAY,EAAE,UAAU,KAAK,OAAO,IAAA;AAAA,wBACpC,WAAU;AAAA,wBAET,UAAA6H,EAAM;AAAA,sBAAA;AAAA,oBAAA;AAAA,sCAER,KAAA,EAAE,WAAU,kEACV,UAAAjK,MAAS,OAAO,WAAW,yBAC9B;AAAA,oBACA,gBAAAgC,EAAC,OAAE,WAAU,wCACV,gBAAS,OAAOiI,EAAM,SAASA,EAAM,OAAA,CACxC;AAAA,oBACA,gBAAAjI,EAAC,OAAE,WAAU,oCACV,gBAAS,OAAOiI,EAAM,SAASA,EAAM,OAAA,CACxC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBArBI;AAAA,cAAA,IAHW;AAAA,YA2BrB,KAAG,CACL;AAAA,8BAGC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAjI,EAAC,KAAA,EAAE,WAAU,mEAAmE,UAAAjC,EAAE,wBAAwB,GAAE;AAAA,cAC5G,gBAAAiC,EAAC,SAAI,WAAU,0BACZ,YAAa,IAAI,CAACkI,GAAKC,MACtB,gBAAAjI;AAAA,gBAACE,EAAO;AAAA,gBAAP;AAAA,kBAEC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAA;AAAA,kBAC1B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,kBAC1B,YAAY,EAAE,OAAO+H,IAAM,KAAA;AAAA,kBAC3B,WAAWzH;AAAA,oBACT;AAAA,oBACAwH,EAAI,WACA,wGACA;AAAA,kBAAA;AAAA,kBAGL,UAAA;AAAA,oBAAAA,EAAI,iBACH,gBAAAlI;AAAA,sBAACI,EAAO;AAAA,sBAAP;AAAA,wBACC,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,EAAA;AAAA,wBAC5B,YAAY,EAAE,UAAU,KAAK,QAAQ,MAAA;AAAA,wBACrC,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGd,gBAAAF,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,UAAK,WAAU,WAAW,YAAI,WAAWkI,EAAI,OAAO,KAAA,CAAK;AAAA,sBACzDA,EAAI,YACH,gBAAAlI,EAAC,QAAA,EAAK,WAAU,gHACb,UAAAhC,MAAS,OAAO,QAAQ,WAAA,CAC3B;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAAgC,EAAC,KAAA,EAAE,WAAWU,EAAK,uBAAuBwH,EAAI,WAAW,kBAAkB,eAAe,GACvF,UAAAlK,MAAS,OAAOkK,EAAI,SAASA,EAAI,QACpC;AAAA,oBACA,gBAAAlI,EAAC,KAAA,EAAE,WAAWU,EAAK,sCAAsCwH,EAAI,WAAW,kBAAkB,eAAe,GACtG,UAAAlK,MAAS,OAAOkK,EAAI,SAASA,EAAI,OAAA,CACpC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBA/BKA,EAAI;AAAA,cAAA,CAiCZ,EAAA,CACH;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,IArIA,gBAAAhI,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,YAAA,gBAAAF,EAAC2F,GAAA,EAAO,WAAU,uCAAA,CAAuC;AAAA,8BACxD,KAAA,EAAE,WAAU,yBAAyB,UAAA3H,MAAS,OAAO,YAAY,+BAAA,CAA+B;AAAA,UAAA,GACnG,EAkIA,CAEJ;AAAA,4BAGC,OAAA,EAAI,WAAU,mFACb,UAAA,gBAAAkC,EAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,YAAA,gBAAAF,EAAC2F,GAAA,EAAO,WAAU,UAAA,CAAU;AAAA,8BAC3B,QAAA,EAAK,WAAU,eAAe,UAAA5H,EAAE,uBAAuB,EAAA,CAAE;AAAA,UAAA,EAAA,CAC5D,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GCrOMqK,KAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,KAAK;AAAA,EACL,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AACR,GAEMC,KAAuC;AAAA,EAC3C,OAAO;AAAA,EAAM,KAAK;AAAA,EAAM,WAAW;AAAA,EAAK,MAAM;AAAA,EAAM,MAAM;AAC5D,GAEMC,KAAiB;AAAA,EACrB,EAAE,KAAK,GAAG,OAAO,SAAS,SAAS,YAAY,MAAM,KAAA;AAAA,EACrD,EAAE,KAAK,GAAG,OAAO,SAAS,SAAS,kBAAkB,MAAM,KAAA;AAAA,EAC3D,EAAE,KAAK,GAAG,OAAO,SAAS,SAAS,kBAAkB,MAAM,KAAA;AAAA,EAC3D,EAAE,KAAK,IAAI,OAAO,SAAS,SAAS,gBAAgB,MAAM,KAAA;AAAA,EAC1D,EAAE,KAAK,IAAI,OAAO,SAAS,SAAS,gBAAgB,MAAM,IAAA;AAC5D;AAEA,SAASC,GAAgBC,GAAmB;AAC1C,MAAI7I,IAAS2I,GAAe,CAAC;AAC7B,aAAW3H,KAAO2H;AAChB,IAAIE,KAAa7H,EAAI,QAAKhB,IAASgB;AAErC,SAAOhB;AACT;AAEO,MAAM8I,KAA8C,CAAC;AAAA,EAC1D,QAAAhL;AAAA,EAAQ,SAAAC;AAAA,EAAS,MAAAC;AAAA,EAAM,SAAA+K;AAAA,EAAS,WAAA9K;AAAA,EAAW,sBAAA+K;AAC7C,MAAM;AACJ,QAAM,EAAE,GAAA5K,GAAG,MAAAC,EAAA,IAASC,EAAA,GACd,CAAC6E,GAAK8F,CAAM,IAAIxK,EAA4D,SAAS,GACrF,CAACyK,GAAOC,CAAQ,IAAI1K,EAAuB,CAAA,CAAE,GAC7C,CAACS,GAASC,CAAU,IAAIV,EAAS,EAAK,GAGtC,CAAC2K,GAAUC,CAAW,IAAI5K,EAAwB,CAAA,CAAE,GACpD,CAAC6K,GAAiBC,CAAkB,IAAI9K,EAAS,EAAK,GACtD,CAAC+K,GAAgBC,CAAiB,IAAIhL,EAAwB,IAAI,GAClE,CAACiL,GAAcC,CAAe,IAAIlL,EAAuB,CAAA,CAAE,GAC3D,CAACmL,GAAqBC,CAAsB,IAAIpL,EAAS,EAAK,GAG9D,CAACqL,GAAeC,CAAgB,IAAItL,EAAwB,IAAI,GAChE,CAACuL,GAAWC,CAAY,IAAIxL,EAAqB,CAAA,CAAE,GACnD,CAACyL,GAAcC,CAAe,IAAI1L,EAAwB,IAAI,GAC9D,CAAC2L,IAAiBC,EAAkB,IAAI5L,EAAS,EAAK,GAEtD6L,KAAgB7K,EAAY,YAAY;AAC5C,IAAA8J,EAAmB,EAAI;AACvB,QAAI;AACF,YAAMxB,IAAO,MAAMnI,EAAsC,WAAW;AACpE,MAAImI,GAAM,YAAUsB,EAAYtB,EAAK,QAAQ;AAAA,IAC/C,SAASlI,GAAK;AAAE,cAAQ,MAAM,yBAAyBA,CAAG;AAAA,IAAG,UAAA;AACnD,MAAA0J,EAAmB,EAAK;AAAA,IAAG;AAAA,EACvC,GAAG,CAAA,CAAE,GAECgB,KAAoB9K,EAAY,OAAO+K,MAAqB;AAChE,IAAAX,EAAuB,EAAI;AAC3B,QAAI;AACF,YAAM9B,IAAO,MAAMnI,EAAkC,aAAa,mBAAmB4K,CAAQ,CAAC,QAAQ;AACtG,MAAIzC,GAAM,SAAO4B,EAAgB5B,EAAK,KAAK;AAAA,IAC7C,SAASlI,GAAK;AAAE,cAAQ,MAAM,wBAAwBA,CAAG;AAAA,IAAG,UAAA;AAClD,MAAAgK,EAAuB,EAAK;AAAA,IAAG;AAAA,EAC3C,GAAG,CAAA,CAAE,GAECY,IAAahL,EAAY,YAAY;AACzC,IAAAN,EAAW,EAAI;AACf,QAAI;AACF,YAAM4I,IAAO,MAAMnI,EAAkC,eAAe;AACpE,UAAImI,GAAM,OAAO;AAEf,cAAM2C,IAAU1M,IACZ+J,EAAK,MAAM,OAAO,CAAA4C,MAAKA,EAAE,cAAc3M,EAAK,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,OAAO2M,EAAE,WAAW3M,EAAK,EAAE,IAC/F+J,EAAK;AACT,QAAAoB,EAASuB,CAAO;AAAA,MAClB;AAAA,IACF,SAAS7K,GAAK;AAAE,cAAQ,MAAM,0BAA0BA,CAAG;AAAA,IAAG,UAAA;AACpD,MAAAV,EAAW,EAAK;AAAA,IAAG;AAAA,EAC/B,GAAG,CAACnB,CAAI,CAAC,GAEH4M,KAAanL,EAAY,OAAOoL,MAAqB;AACzD,QAAK7M,GACL;AAAA,MAAA+L,EAAiBc,EAAK,MAAM;AAC5B,UAAI;AAcF,SAbe,MAAMjL,EAAuD,eAAe;AAAA,UACzF,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3B,MAAM,KAAK,UAAU;AAAA,YACnB,gBAAgBiL,EAAK;AAAA,YACrB,gBAAgBA,EAAK;AAAA,YACrB,QAAQ7M,EAAK;AAAA,YACb,UAAUA,EAAK,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,YACvC,OAAO,GAAG6M,EAAK,KAAK,KAAKxM,MAAS,OAAO,OAAO,OAAO;AAAA,YACvD,OAAOwM,EAAK;AAAA,YACZ,QAAQA,EAAK;AAAA,UAAA,CACd;AAAA,QAAA,CACF,IACW,YACVJ,EAAA,GACIjB,QAAkCA,CAAc,GAEpD5J,EAAS,iBAAiB5B,EAAK,EAAE,UAAU;AAAA,UACzC,QAAQ;AAAA,UAAQ,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3C,MAAM,KAAK,UAAU,EAAE,QAAQ,eAAe;AAAA,QAAA,CAC/C,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC,GACb6M,EAAK,UACPjL,EAAS,iBAAiBiL,EAAK,MAAM,UAAU;AAAA,UAC7C,QAAQ;AAAA,UAAQ,SAAS,EAAE,gBAAgB,mBAAA;AAAA,UAC3C,MAAM,KAAK,UAAU,EAAE,QAAQ,gBAAgB;AAAA,QAAA,CAChD,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MAGvB,SAAShL,GAAK;AAAE,gBAAQ,MAAM,eAAeA,CAAG;AAAA,MAAG,UAAA;AACzC,QAAAkK,EAAiB,IAAI;AAAA,MAAG;AAAA;AAAA,EACpC,GAAG,CAAC/L,GAAMyM,GAAYjB,GAAgBe,IAAmBlM,CAAI,CAAC,GAExDyM,KAAiBrL,EAAY,OAAOsL,MAAmB;AAC3D,IAAAV,GAAmB,EAAI;AACvB,QAAI;AACF,YAAMtC,IAAO,MAAMnI,EAA+C,UAAUmL,CAAM,QAAQ;AAC1F,MAAIhD,GAAM,SAAOkC,EAAalC,EAAK,KAAK;AAAA,IAC1C,SAASlI,GAAK;AAAE,cAAQ,MAAM,qBAAqBA,CAAG,GAAGoK,EAAa,CAAA,CAAE;AAAA,IAAG,UAAA;AACjE,MAAAI,GAAmB,EAAK;AAAA,IAAG;AAAA,EACvC,GAAG,CAAA,CAAE;AAEL,EAAAvK,EAAU,MAAM;AACd,IAAIhC,MACF2M,EAAA,GACItH,MAAQ,aAAWmH,GAAA;AAAA,EAE3B,GAAG,CAACxM,GAAQqF,GAAKsH,GAAYH,EAAa,CAAC;AAE3C,QAAMU,IAAa9B,EAAM,OAAO,CAAC+B,GAAKN,MAAMM,KAAON,EAAE,SAAS,IAAI,CAAC,GAC7DO,KAAahC,EAAM,OAAO,CAAC+B,GAAKN,MAAMM,KAAON,EAAE,SAAS,IAAI,CAAC,GAC7DQ,KAAevC,GAAgBM,EAAM,MAAM,GAC3CkC,KAAcrC,GAAS,eAAe/K,GAAM,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,WACpEqN,KAAatC,GAAS,WACxB,IAAI,KAAKA,EAAQ,QAAQ,EAAE,mBAAmB1K,MAAS,OAAO,UAAU,SAAS,EAAE,MAAM,WAAW,OAAO,QAAA,CAAS,IACpH,IAGEiN,KAAiB,KAAK;AAAA,IAC1BpC,EAAM,SAAS,MAAM8B,IAAa,KAAKE,KAAa,KAAKjN,IAAY;AAAA,EAAA,GAEjEsN,KAAiBrC,EAAM,SAAS,IAClC,KAAK,OAAQ8B,IAAaE,MAAc,KAAK,IAAIhC,EAAM,QAAQ,CAAC,IAAK,EAAE,IAAI,KAC3E;AAEJ,SACE,gBAAA7I,EAACC,GAAA,EACE,UAAAxC,KACC,gBAAAyC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAH;AAAA,MAACI,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,SAAS,EAAA;AAAA,QACnE,WAAU;AAAA,QACV,SAAS1C;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAwC;AAAA,MAACE,EAAO;AAAA,MAAP;AAAA,QACC,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAAK,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,QAAK,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAA;AAAA,QAC/F,YAAY,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QACtD,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAF,EAAC,SAAI,WAAU,kIACb,4BAACa,GAAA,EAAS,WAAU,+BAA8B,EAAA,CACpD;AAAA,gCACC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAb,EAAC,MAAA,EAAG,WAAU,kDAAkD,UAAAjC,EAAE,gBAAgB,GAAE;AAAA,kCACnF,KAAA,EAAE,WAAU,yBAAyB,UAAAA,EAAE,mBAAmB,EAAA,CAAE;AAAA,cAAA,EAAA,CAC/D;AAAA,YAAA,GACF;AAAA,YACA,gBAAAiC,EAAC,UAAA,EAAO,SAAStC,GAAS,WAAU,uFAClC,UAAA,gBAAAsC,EAACM,GAAA,EAAE,WAAU,UAAA,CAAU,EAAA,CACzB;AAAA,UAAA,GACF;AAAA,UAGA,gBAAAN,EAAC,OAAA,EAAI,WAAU,4EACZ,UAAA;AAAA,YACC,EAAE,IAAI,WAAoB,OAAOjC,EAAE,yBAAyB,GAAG,MAAMsC,EAAA;AAAA,YACrE,EAAE,IAAI,aAAsB,OAAOtC,EAAE,oBAAoB,GAAG,MAAMsD,EAAA;AAAA,YAClE,EAAE,IAAI,WAAoB,OAAOtD,EAAE,kBAAkB,GAAG,MAAMoN,GAAA;AAAA,YAC9D,EAAE,IAAI,aAAsB,OAAOpN,EAAE,oBAAoB,GAAG,MAAMqN,GAAA;AAAA,UAAU,EAC5E,IAAI,CAAAC,MACJ,gBAAAnL;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,SAAS,MAAM0I,EAAOyC,EAAG,EAAE;AAAA,cAC3B,WAAW3K;AAAA,gBACT;AAAA,gBACAoC,MAAQuI,EAAG,KAAK,iEAAiE;AAAA,cAAA;AAAA,cAGnF,UAAA;AAAA,gBAAA,gBAAArL,EAACqL,EAAG,MAAH,EAAQ,WAAU,UAAA,CAAU;AAAA,gBAC5BA,EAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YARCA,EAAG;AAAA,UAAA,CAUX,GACH;AAAA,UAEE1N,IAKA,gBAAAuC,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,gBAAgB,OAAA,GAClE,UAAA;AAAA,YAAA4C,MAAQ,aACP,gBAAA5C,EAACE,EAAO,KAAP,EAAW,SAAS,EAAE,SAAS,EAAA,GAAK,SAAS,EAAE,SAAS,EAAA,GAAK,WAAU,aAEtE,UAAA;AAAA,cAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,6IACb,UAAA;AAAA,gBAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,4EAAA,CAA4E;AAAA,gBAC3F,gBAAAE,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,SAAI,WAAU,2GACb,4BAAC,OAAA,EAAI,WAAU,4EACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,iGACb,aAAY,OAAO,CAAC,EAAE,YAAA,GACzB,GACF,EAAA,CACF;AAAA,kBACA,gBAAAE,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,oBAAA,gBAAAF,EAAC,MAAA,EAAG,WAAU,yCAAyC,UAAA+K,IAAY;AAAA,oBACnE,gBAAA7K,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,WAAW,UAAA8K,GAAa,MAAK;AAAA,sBAC7C,gBAAA9K,EAAC,UAAK,WAAU,8BACb,gBAAS,OAAO8K,GAAa,QAAQA,GAAa,QAAA,CACrD;AAAA,oBAAA,GACF;AAAA,oBACCE,MACC,gBAAA9K,EAAC,KAAA,EAAE,WAAU,0DACX,UAAA;AAAA,sBAAA,gBAAAF,EAACY,IAAA,EAAS,WAAU,cAAA,CAAc;AAAA,sBACjC7C,EAAE,sBAAsB;AAAA,sBAAE;AAAA,sBAAEiN;AAAA,oBAAA,EAAA,CAC/B;AAAA,kBAAA,EAAA,CAEJ;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAGA,gBAAA9K,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,kBAAA,gBAAAF,EAACqB,GAAA,EAAM,WAAU,uCAAA,CAAuC;AAAA,kBACxD,gBAAArB,EAAC,KAAA,EAAE,WAAU,uDAAuD,YAAM,QAAO;AAAA,oCAChF,KAAA,EAAE,WAAU,6BAA6B,UAAAjC,EAAE,qBAAqB,EAAA,CAAE;AAAA,gBAAA,GACrE;AAAA,gBACA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,kBAAA,gBAAAF,EAACuG,GAAA,EAAM,WAAU,qCAAA,CAAqC;AAAA,kBACtD,gBAAAvG,EAAC,KAAA,EAAE,WAAU,uDAAuD,UAAA2K,GAAW;AAAA,oCAC9E,KAAA,EAAE,WAAU,6BAA6B,UAAA5M,EAAE,qBAAqB,EAAA,CAAE;AAAA,gBAAA,GACrE;AAAA,gBACA,gBAAAmC,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,kBAAA,gBAAAF,EAACK,GAAA,EAAK,WAAU,uCAAA,CAAuC;AAAA,kBACvD,gBAAAL,EAAC,KAAA,EAAE,WAAU,uDAAuD,UAAApC,GAAU;AAAA,kBAC9E,gBAAAoC,EAAC,KAAA,EAAE,WAAU,6BAA4B,UAAA,KAAA,CAAE;AAAA,gBAAA,EAAA,CAC7C;AAAA,cAAA,GACF;AAAA,gCAGC,OAAA,EAAI,WAAU,iGACb,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjC,EAAE,oBAAoB,GAAE;AAAA,oCAC7D,KAAA,EAAE,WAAU,0HACV,UAAAkN,GAAe,iBAAe,CACjC;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAA/K,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjC,EAAE,yBAAyB,GAAE;AAAA,kBACnE,gBAAAiC,EAAC,KAAA,EAAE,WAAU,4DAA4D,UAAAkL,GAAA,CAAe;AAAA,gBAAA,EAAA,CAC1F;AAAA,cAAA,EAAA,CACF,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAGDpI,MAAQ,eACP,gBAAA5C,EAACE,EAAO,KAAP,EAAW,SAAS,EAAE,SAAS,EAAA,GAAK,SAAS,EAAE,SAAS,EAAA,GAAK,WAAU,aACtE,UAAA;AAAA,cAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,8DACX,UAAA;AAAA,kBAAAnC,EAAE,sBAAsB;AAAA,kBAAE;AAAA,kBAAG8K,EAAM;AAAA,kBAAO;AAAA,gBAAA,GAC7C;AAAA,gBACA,gBAAA3I;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AAAE,sBAAAxC,EAAA,GAAWiL,EAAA;AAAA,oBAAwB;AAAA,oBACpD,WAAU;AAAA,oBAEV,UAAA;AAAA,sBAAA,gBAAA3I,EAACsL,IAAA,EAAa,WAAU,UAAA,CAAU;AAAA,sBACjCtN,MAAS,OAAO,SAAS;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC5B,GACF;AAAA,cAECa,IACC,gBAAAmB,EAAC,OAAA,EAAI,WAAU,6BACb,4BAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF,GACvG,IACE6I,EAAM,WAAW,IACnB,gBAAA3I,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAF,EAACqB,GAAA,EAAM,WAAU,uCAAA,CAAuC;AAAA,kCACvD,KAAA,EAAE,WAAU,yBAAyB,UAAAtD,EAAE,kBAAkB,GAAE;AAAA,kCAC3D,KAAA,EAAE,WAAU,8BAA8B,UAAAA,EAAE,wBAAwB,GAAE;AAAA,gBACvE,gBAAAiC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AAAE,sBAAAtC,EAAA,GAAWiL,EAAA;AAAA,oBAAwB;AAAA,oBACpD,WAAU;AAAA,oBAET,UAAA3K,MAAS,OAAO,SAAS;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC5B,EAAA,CACF,IAEA,gBAAAgC,EAAC,OAAA,EAAI,WAAU,aACZ,UAAA6I,EAAM,IAAI,CAAA2B,MAAQ;AACjB,sBAAMe,IAAanD,GAAaoC,EAAK,KAAK,KAAKpC,GAAa,OACtDoD,IAAQnD,GAAamC,EAAK,KAAK,KAAK;AAC1C,uBACE,gBAAAxK;AAAA,kBAACI,EAAO;AAAA,kBAAP;AAAA,oBAEC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAA;AAAA,oBAC1B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,oBAC1B,WAAWM;AAAA,sBACT;AAAA,sBACA6K;AAAA,oBAAA;AAAA,oBAGF,UAAA,gBAAArL,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,2FACZ,UAAAwL,GACH;AAAA,sBACA,gBAAAtL,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,wBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,2CAA2C,UAAAwK,EAAK,OAAM;AAAA,wBACnE,gBAAAtK,EAAC,KAAA,EAAE,WAAU,oCACV,UAAA;AAAA,0BAAAsK,EAAK,SAAS,UAAWxM,MAAS,OAAO,SAAS,UAAWwM,EAAK,SAAS,WAAYxM,MAAS,OAAO,SAAS,WAAYwM,EAAK;AAAA,0BACjI;AAAA,0BACAA,EAAK,QAAQ,UAAU;AAAA,0BAAE;AAAA,0BAAExM,MAAS,OAAO,QAAQ;AAAA,wBAAA,GACtD;AAAA,wBACA,gBAAAkC,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,0BAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,uDACd,UAAA;AAAA,4BAAA,gBAAAF,EAACuG,GAAA,EAAM,WAAU,cAAA,CAAc;AAAA,4BAAE;AAAA,4BAAEiE,EAAK,SAAS;AAAA,0BAAA,GACnD;AAAA,0BACA,gBAAAxK,EAAC,UAAK,WAAU,6BACb,cAAI,KAAKwK,EAAK,SAAS,EAAE,mBAAmBxM,MAAS,OAAO,UAAU,SAAS,EAAE,OAAO,SAAS,KAAK,UAAA,CAAW,EAAA,CACpH;AAAA,wBAAA,EAAA,CACF;AAAA,sBAAA,EAAA,CACF;AAAA,oBAAA,EAAA,CACF;AAAA,kBAAA;AAAA,kBA5BKwM,EAAK;AAAA,gBAAA;AAAA,cA+BhB,CAAC,EAAA,CACH;AAAA,YAAA,GAEJ;AAAA,YAGD1H,MAAQ,eACP,gBAAA5C,EAACE,EAAO,KAAP,EAAW,SAAS,EAAE,SAAS,EAAA,GAAK,SAAS,EAAE,SAAS,EAAA,GAAK,WAAU,aAEtE,UAAA;AAAA,cAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,6DACb,UAAA;AAAA,gBAAA,gBAAAF,EAAC,MAAA,EAAG,WAAU,8BAA8B,UAAAjC,EAAE,uBAAuB,GAAE;AAAA,gBACvE,gBAAAiC,EAAC,SAAI,WAAU,aACZ,aAAe,IAAI,CAACW,GAAKwH,MAAQ;AAChC,wBAAMnF,IAAW6F,EAAM,UAAUlI,EAAI,KAC/B8K,IAAUnD,GAAeH,IAAM,CAAC,GAAG,OAAOxH,EAAI,MAAM,IACpD+K,KAAW1I,IAAW,KAAK,KAAM6F,EAAM,SAASlI,EAAI,QAAQ8K,IAAU9K,EAAI,OAAQ,KAAK,GAAG,IAAI;AACpG,yBACE,gBAAAT,EAAC,SAAkB,WAAWQ,EAAK,2BAA2B,CAACsC,KAAY,YAAY,GACrF,UAAA;AAAA,oBAAA,gBAAAhD,EAAC,QAAA,EAAK,WAAU,2BAA2B,UAAAW,EAAI,MAAK;AAAA,oBACpD,gBAAAT,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,wBAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,6BACb,UAAAhC,MAAS,OAAO2C,EAAI,QAAQA,EAAI,QAAA,CACnC;AAAA,wBACA,gBAAAT,EAAC,QAAA,EAAK,WAAU,mDAAmD,UAAA;AAAA,0BAAAS,EAAI;AAAA,0BAAI;AAAA,wBAAA,EAAA,CAAC;AAAA,sBAAA,GAC9E;AAAA,sBACA,gBAAAX,EAAC,OAAA,EAAI,WAAU,oDACZ,UAAAgD,KACC,gBAAAhD;AAAA,wBAACI,EAAO;AAAA,wBAAP;AAAA,0BACC,SAAS,EAAE,OAAO,EAAA;AAAA,0BAClB,SAAS,EAAE,OAAO,GAAGsL,EAAQ,IAAA;AAAA,0BAC7B,YAAY,EAAE,UAAU,IAAA;AAAA,0BACxB,WAAU;AAAA,wBAAA;AAAA,sBAAA,EACZ,CAEJ;AAAA,oBAAA,GACF;AAAA,oBACC1I,KAAY,gBAAAhD,EAACS,IAAA,EAAM,WAAU,0BAAA,CAA0B;AAAA,kBAAA,EAAA,GApBhDE,EAAI,GAqBd;AAAA,gBAEJ,CAAC,EAAA,CACH;AAAA,cAAA,GACF;AAAA,cAGA,gBAAAT,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kGACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,kCAAkC,UAAAjC,EAAE,oBAAoB,GAAE;AAAA,oCACtE,KAAA,EAAE,WAAU,yHACV,UAAAkN,GAAe,iBAAe,CACjC;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAA/K,EAAC,OAAA,EAAI,WAAU,4FACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,kCAAkC,UAAAjC,EAAE,yBAAyB,GAAE;AAAA,kBAC5E,gBAAAiC,EAAC,KAAA,EAAE,WAAU,qHACV,UAAAkL,GAAA,CACH;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAhL,EAAC,OAAA,EAAI,WAAU,iGACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,kCAAkC,UAAAjC,EAAE,qBAAqB,GAAE;AAAA,kBACxE,gBAAAiC,EAAC,KAAA,EAAE,WAAU,4DAA4D,UAAA2K,EAAA,CAAW;AAAA,gBAAA,GACtF;AAAA,gBACA,gBAAAzK,EAAC,OAAA,EAAI,WAAU,4FACb,UAAA;AAAA,kBAAA,gBAAAF,EAAC,KAAA,EAAE,WAAU,kCAAkC,UAAAjC,EAAE,qBAAqB,GAAE;AAAA,kBACxE,gBAAAiC,EAAC,KAAA,EAAE,WAAU,0DAA0D,YAAM,OAAA,CAAO;AAAA,gBAAA,EAAA,CACtF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAGD8C,MAAQ,aACP,gBAAA9C,EAACI,EAAO,KAAP,EAAW,SAAS,EAAE,SAAS,KAAK,SAAS,EAAE,SAAS,KAAK,WAAU,aACrE,cACC,gBAAAF,EAAAC,GAAA,EAEE,UAAA;AAAA,cAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AAAE,sBAAAkJ,EAAkB,IAAI,GAAGE,EAAgB,CAAA,CAAE;AAAA,oBAAG;AAAA,oBAC/D,WAAU;AAAA,oBAEV,UAAA;AAAA,sBAAA,gBAAAtJ,EAAC2L,IAAA,EAAU,WAAU,cAAA,CAAc;AAAA,sBAClC5N,EAAE,eAAe;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEpB,gBAAAmC,EAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA;AAAA,kBAAAiJ;AAAA,kBAAgBpL,EAAE,2BAA2B;AAAA,gBAAA,EAAA,CAAE;AAAA,cAAA,GACxG;AAAA,cACCwL,IACC,gBAAAvJ,EAAC,OAAA,EAAI,WAAU,6BACb,4BAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF,GACvG,IACEqJ,EAAa,WAAW,IAC1B,gBAAAnJ,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAF,EAACqB,GAAA,EAAM,WAAU,uCAAA,CAAuC;AAAA,kCACvD,KAAA,EAAE,WAAU,yBAAyB,UAAAtD,EAAE,kBAAkB,EAAA,CAAE;AAAA,cAAA,EAAA,CAC9D,IAEA,gBAAAiC,EAAC,OAAA,EAAI,WAAU,aACZ,UAAAqJ,EAAa,IAAI,CAAAmB,MAAQ;AACxB,sBAAMe,IAAanD,GAAaoC,EAAK,KAAK,KAAKpC,GAAa;AAC5D,uBACE,gBAAAlI,EAAC,OAAA,EAAsB,WAAU,qGAC/B,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,MAAA,EAAG,WAAU,8CAA8C,UAAAwK,EAAK,OAAM;AAAA,sBACvE,gBAAAtK,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,wBAAA,gBAAAF,EAAC,UAAK,WAAWU,EAAK,gDAAgD6K,CAAU,GAC7E,YAAK,OACR;AAAA,wBACA,gBAAAvL,EAAC,UAAK,WAAU,6BACb,cAAI,KAAKwK,EAAK,SAAS,EAAE,mBAAmBxM,MAAS,OAAO,UAAU,SAAS,EAAE,OAAO,SAAS,KAAK,UAAA,CAAW,EAAA,CACpH;AAAA,sBAAA,GACF;AAAA,sBACCwM,EAAK,cACJ,gBAAAtK,EAAC,KAAA,EAAE,WAAU,gEACX,UAAA;AAAA,wBAAA,gBAAAF,EAAC4L,IAAA,EAAQ,WAAU,cAAA,CAAc;AAAA,wBAAE;AAAA,wBAAE7N,EAAE,qBAAqB;AAAA,wBAAE;AAAA,wBAAEyM,EAAK,WAAW;AAAA,sBAAA,GAClF;AAAA,sBAEDA,EAAK,UAAUA,EAAK,OAAO,SAAS,KACnC,gBAAAxK,EAAC,KAAA,EAAE,WAAU,wDAAwD,UAAAwK,EAAK,OAAO,CAAC,EAAA,CAAE;AAAA,oBAAA,GAExF;AAAA,oBACA,gBAAAtK,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,wBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,0DACd,UAAA;AAAA,0BAAA,gBAAAF,EAACuG,GAAA,EAAM,WAAU,cAAA,CAAc;AAAA,0BAAE;AAAA,0BAAEiE,EAAK,SAAS;AAAA,wBAAA,GACnD;AAAA,wBACA,gBAAAtK,EAAC,QAAA,EAAK,WAAU,uDACd,UAAA;AAAA,0BAAA,gBAAAF,EAACsG,IAAA,EAAK,WAAU,cAAA,CAAc;AAAA,0BAAE;AAAA,0BAAEkE,EAAK,SAAS;AAAA,wBAAA,EAAA,CAClD;AAAA,sBAAA,GACF;AAAA,sBAEA,gBAAAtK,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,wBAAA,gBAAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAS,MAAMqK,GAAWC,CAAI;AAAA,4BAC9B,UAAUf,MAAkBe,EAAK,UAAU,CAAC7M;AAAA,4BAC5C,WAAU;AAAA,4BACV,OAAOI,EAAE,mBAAmB;AAAA,4BAE5B,UAAA;AAAA,8BAAA,gBAAAiC,EAAC4L,IAAA,EAAQ,WAAU,cAAA,CAAc;AAAA,8BAChCnC,MAAkBe,EAAK,SAASzM,EAAE,kBAAkB,IAAIA,EAAE,mBAAmB;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEhF,gBAAAiC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAS,MAAM;AACb,8BAAI6J,MAAiBW,EAAK,UAAUV,EAAgB,IAAI,GAAGF,EAAa,CAAA,CAAE,MACnEE,EAAgBU,EAAK,MAAM,GAAGC,GAAeD,EAAK,MAAM;AAAA,4BACjE;AAAA,4BACA,WAAU;AAAA,4BACV,OAAOzM,EAAE,mBAAmB;AAAA,4BAE5B,UAAA,gBAAAiC,EAAC6L,IAAA,EAAU,WAAU,cAAA,CAAc;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACrC,EAAA,CACF;AAAA,oBAAA,EAAA,CACF;AAAA,kBAAA,GACF;AAAA,kBAEChC,MAAiBW,EAAK,UACrB,gBAAAtK,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,2DACX,UAAA;AAAA,sBAAA,gBAAAF,EAAC6L,IAAA,EAAU,WAAU,cAAA,CAAc;AAAA,sBAAE;AAAA,sBAAE9N,EAAE,mBAAmB;AAAA,oBAAA,GAC9D;AAAA,oBACCgM,KACC,gBAAA/J,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qFAAoF,GACrG,IACE2J,EAAU,WAAW,sBACtB,KAAA,EAAE,WAAU,6CAA6C,UAAA3L,MAAS,OAAO,WAAW,eAAA,CAAe,IAEpG,gBAAAgC,EAAC,SAAI,WAAU,kBACZ,UAAA2J,EAAU,IAAI,CAACmC,GAAM3D,MACpB,gBAAAjI,EAAC,OAAA,EAAsB,WAAU,wCAC/B,UAAA;AAAA,sBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCACZ,UAAA;AAAA,wBAAAiI,IAAMwB,EAAU,SAAS,KAAK,gBAAA3J,EAAC,OAAA,EAAI,WAAU,6BAA4B;AAAA,wBAC1E,gBAAAA,EAAC,OAAA,EAAI,WAAU,0DAAA,CAA0D;AAAA,wBACxEmI,IAAMwB,EAAU,SAAS,KAAK,gBAAA3J,EAAC,OAAA,EAAI,WAAU,4BAAA,CAA4B;AAAA,sBAAA,GAC5E;AAAA,sBACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,iBAAiB,YAAK,QAAO;AAAA,sBAC7C,gBAAAA,EAAC,UAAK,WAAU,iBACb,cAAI,KAAK8L,EAAK,QAAQ,EAAE,mBAAmB9N,MAAS,OAAO,UAAU,SAAS,EAAE,OAAO,SAAS,KAAK,UAAA,CAAW,EAAA,CACnH;AAAA,oBAAA,KATQ8N,EAAK,MAUf,CACD,EAAA,CACH;AAAA,kBAAA,EAAA,CAEJ;AAAA,gBAAA,EAAA,GAnFMtB,EAAK,MAqFf;AAAA,cAEJ,CAAC,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ,IAEA,gBAAAtK,EAAAC,GAAA,EACE,UAAA;AAAA,cAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,8DAA8D,UAAAjC,EAAE,sBAAsB,GAAE;AAAA,cACrGkL,IACC,gBAAAjJ,EAAC,OAAA,EAAI,WAAU,6BACb,4BAAC,OAAA,EAAI,WAAU,sFAAA,CAAsF,GACvG,IACE+I,EAAS,WAAW,IACtB,gBAAA7I,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAA,gBAAAF,EAACmL,IAAA,EAAM,WAAU,uCAAA,CAAuC;AAAA,kCACvD,KAAA,EAAE,WAAU,yBAAyB,UAAAnN,MAAS,OAAO,YAAY,mBAAkB;AAAA,kCACnF,KAAA,EAAE,WAAU,8BAA8B,UAAAA,MAAS,OAAO,gBAAgB,6BAAA,CAA6B;AAAA,cAAA,EAAA,CAC1G,sBAEC,OAAA,EAAI,WAAU,aACZ,UAAA+K,EAAS,IAAI,CAACgD,GAAS5D,MACtB,gBAAAnI;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,SAAS,MAAM;AACb,oBAAAoJ,EAAkB2C,EAAQ,QAAQ,GAClC7B,GAAkB6B,EAAQ,QAAQ;AAAA,kBACpC;AAAA,kBACA,WAAU;AAAA,kBAEV,UAAA,gBAAA7L,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAA,gBAAAF,EAAC,SAAI,WAAU,2GACb,4BAAC,OAAA,EAAI,WAAU,4EACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,gGACb,UAAA+L,EAAQ,SAAS,OAAO,CAAC,EAAE,YAAA,GAC9B,GACF,EAAA,CACF;AAAA,oBACA,gBAAA7L,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,sBAAA,gBAAAF,EAAC,MAAA,EAAG,WAAU,8CAA8C,UAAA+L,EAAQ,UAAS;AAAA,sBAC7E,gBAAA7L,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,wBAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,6BACb,UAAA;AAAA,0BAAA6L,EAAQ;AAAA,0BAAM;AAAA,0BAAEhO,EAAE,gBAAgB;AAAA,wBAAA,GACrC;AAAA,wBACA,gBAAAmC,EAAC,QAAA,EAAK,WAAU,0DACd,UAAA;AAAA,0BAAA,gBAAAF,EAACuG,GAAA,EAAM,WAAU,cAAA,CAAc;AAAA,0BAAE;AAAA,0BAAEwF,EAAQ;AAAA,wBAAA,EAAA,CAC7C;AAAA,sBAAA,EAAA,CACF;AAAA,oBAAA,GACF;AAAA,oBACA,gBAAA/L,EAACQ,IAAA,EAAa,WAAU,uFAAA,CAAuF;AAAA,kBAAA,EAAA,CACjH;AAAA,gBAAA;AAAA,gBA3BKuL,EAAQ,WAAW5D;AAAA,cAAA,CA6B3B,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ,EAAA,CAEJ;AAAA,UAAA,EAAA,CAEJ,IAjYA,gBAAAnI,EAAC,OAAA,EAAI,WAAU,2CACb,UAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAjC,EAAE,yBAAyB,EAAA,CAAE,EAAA,CACrE;AAAA,QA+XA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,CACF,EAAA,CAEJ;AAEJ;"}