/* ucparts.jsx — 穿山甲 Web 用户中心 · atoms + i18n */ const UCLUCIDE = { 'layout-dashboard':'', link:'', ticket:'', users:'', copy:'', 'refresh-cw':'', 'qr-code':'', download:'', check:'', 'check-circle':'', zap:'', clock:'', 'shield-check':'', crown:'', 'credit-card':'', send:'', 'message-circle':'', mail:'', 'shopping-bag':'', 'log-out':'', 'external-link':'', gift:'', smartphone:'', lock:'', 'chevron-right':'', 'arrow-down':'', }; function UCIcon({ name, size=18, stroke=2, color='currentColor', style={} }) { return ; } function UCMark({ size=30, color='var(--accent)' }) { return ( ); } const UCSTRINGS = { navOverview:{zh:'概览',en:'Overview'}, navSub:{zh:'订阅',en:'Subscription'}, navRedeem:{zh:'兑换 & 购买',en:'Redeem & buy'}, navInvite:{zh:'邀请返利',en:'Referral'}, signOut:{zh:'退出',en:'Sign out'}, /* login */ loginTitle:{zh:'登录用户中心',en:'Log in to your account'}, loginSub:{zh:'管理订阅、兑换激活码、查看用量',en:'Manage subscription, redeem codes, track usage'}, emailLabel:{zh:'邮箱',en:'Email'}, emailPh:{zh:'你的邮箱地址',en:'your@email.com'}, pwLabel:{zh:'密码',en:'Password'}, pwPh:{zh:'输入密码',en:'Enter password'}, doLogin:{zh:'登录',en:'Log in'}, forgotPw:{zh:'忘记密码?',en:'Forgot password?'}, noAccount:{zh:'没有账户?在 App 内注册',en:'No account? Sign up in the app'}, /* overview */ greeting:{zh:'欢迎回来',en:'Welcome back'}, curPlan:{zh:'当前套餐',en:'Current plan'}, freePlan:{zh:'免费版',en:'Free'}, proMember:{zh:'PRO 会员',en:'PRO member'}, expires:{zh:'有效期至',en:'Expires'}, renew:{zh:'续费 / 升级',en:'Renew / Upgrade'}, quotaToday:{zh:'今日剩余时长',en:'Time left today'}, dataToday:{zh:'今日已用流量',en:'Data used today'}, devices:{zh:'在线设备',en:'Devices online'}, quotaFree:{zh:'免费版 · 每日 10 分钟',en:'Free · 10 min/day'}, usageTitle:{zh:'近 7 日流量 (GB)',en:'Last 7 days (GB)'}, quickSub:{zh:'快速操作',en:'Quick actions'}, qaSub:{zh:'获取订阅链接',en:'Get subscription'}, qaRedeem:{zh:'兑换激活码',en:'Redeem a code'}, qaApp:{zh:'下载 App',en:'Download apps'}, /* subscription */ subTitle:{zh:'我的订阅',en:'My subscription'}, subDesc:{zh:'订阅链接是你的专属凭证,泄露后他人可使用你的额度。请勿分享。',en:'Your subscription link is a private credential. Never share it.'}, subCopy:{zh:'复制链接',en:'Copy link'}, subCopied:{zh:'已复制',en:'Copied'}, subReset:{zh:'重置链接',en:'Reset link'}, subResetSub:{zh:'旧链接立即失效,所有设备需重新导入',en:'Old link stops working; re-import on all devices'}, subResetOk:{zh:'已重置,请重新导入',en:'Reset — re-import on your devices'}, scanTitle:{zh:'扫码导入',en:'Scan to import'}, scanSub:{zh:'用穿山甲 App 或三方客户端扫码',en:'Scan with the Pangolin app or a 3rd-party client'}, importTitle:{zh:'一键导入三方客户端',en:'One-tap import'}, importSub:{zh:'已安装对应客户端时,点击即自动导入订阅。',en:'If the client is installed, tapping imports the subscription automatically.'}, fmtNote:{zh:'同一链接同时兼容 sing-box / Clash.Meta / v2ray 格式。',en:'One link serves sing-box / Clash.Meta / v2ray formats.'}, /* redeem */ redeemTitle:{zh:'兑换激活码',en:'Redeem a code'}, redeemPh:{zh:'输入激活码',en:'Enter activation code'}, redeemBtn:{zh:'激活',en:'Redeem'}, redeemOk:{zh:'激活成功 · 套餐已到账',en:'Activated — plan applied'}, buyTitle:{zh:'购买渠道',en:'Where to buy'}, buySub:{zh:'本站不直接收款。通过以下渠道购买激活码,回到本页兑换即可:',en:'We never take payment on this site. Buy a code via a channel below, then redeem here:'}, chStore:{zh:'自助发卡商店',en:'Self-serve store'}, chStoreSub:{zh:'支付宝 / 微信 · 自动发码',en:'Alipay / WeChat · instant code'}, chUsdtSub:{zh:'链上转账 · 最隐私 · 自动发码',en:'On-chain · most private · instant code'}, chEmail:{zh:'邮箱客服',en:'Email support'}, /* invite */ inviteTitle:{zh:'邀请返利',en:'Referral'}, inviteSub:{zh:'好友通过你的链接注册并付费,你获得其首单 20% 余额返利,可抵扣续费。',en:'When a friend signs up and pays via your link, you earn 20% of their first order as credit.'}, inviteLink:{zh:'我的邀请链接',en:'My invite link'}, invited:{zh:'已邀请',en:'Invited'}, paidUsers:{zh:'已付费',en:'Converted'}, earned:{zh:'累计返利',en:'Credit earned'}, inviteRecord:{zh:'邀请记录',en:'History'}, recEmpty:{zh:'暂无邀请记录',en:'No referrals yet'}, recRegistered:{zh:'已注册',en:'Registered'}, recPaid:{zh:'已付费',en:'Paid'}, /* 2FA */ twoFATitle:{zh:'双重认证',en:'Two-factor auth'}, twoFAHint:{zh:'你的账户已开启双重认证。请输入身份验证器 App 中的 6 位动态码。',en:'Two-factor auth is on for this account. Enter the 6-digit code from your authenticator app.'}, twoFAConfirm:{zh:'验证并登录',en:'Verify & log in'}, twoFABack:{zh:'返回上一步',en:'Back'}, }; function ucT(lang){ return k => { const v=UCSTRINGS[k]; return v?(v[lang]||k):k; }; } Object.assign(window, { UCIcon, UCMark, UCSTRINGS, ucT });