优化:UI优化

This commit is contained in:
ivan 2026-04-01 23:17:05 +08:00
parent 9ec66ff163
commit 2b84e5f01e
9 changed files with 225 additions and 196 deletions

View File

@ -118,7 +118,6 @@
<p class="crypto-info-text">{{ t('deposit.collectInlineHint') }}</p>
</div>
<div class="crypto-qr-block">
<p class="crypto-qr-caption">{{ t('deposit.qrCaption') }}</p>
<div class="crypto-qr-frame">
<img
:key="`${String(modelValue)}-${depositAddress}-qr-${cryptoQrRetryNonce}`"
@ -213,7 +212,7 @@
</template>
</template>
</v-card-text>
<!-- 加密货币底部单一检查/归集钱包入金从钱包转入 + 归集并排 -->
<!-- 加密货币底部检测与同步余额钱包入金从钱包转入 + 同步余额并排 -->
<v-card-actions v-if="step === 'crypto' || step === 'exchange'" class="deposit-footer-actions">
<div class="deposit-footer-inner">
<template v-if="step === 'crypto'">
@ -1192,17 +1191,6 @@ onUnmounted(() => {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
.crypto-qr-caption {
margin: 0;
font-size: 0.75rem;
font-weight: 500;
color: #9ca3af;
text-align: center;
line-height: 1.35;
letter-spacing: normal;
width: 100%;
}
.crypto-qr-frame {
position: relative;

View File

@ -342,7 +342,7 @@
"title": "Deposit",
"polymarketBalance": "Balance:",
"transferCrypto": "Transfer Crypto",
"transferCryptoSub": "No limits • Fast • Sync to balance after deposit",
"transferCryptoSub": "No limits • Fast • Tap below to sync balance once it arrives",
"connectExchange": "Transfer with current wallet",
"noLimit": "No limit",
"instant": "Instant",
@ -363,11 +363,10 @@
"connectingWallet": "Connecting wallet…",
"connectWalletHint": "Approve MetaMask to load your deposit address and send USDC.",
"linkMetaMask": "Connect MetaMask",
"collectInlineHint": "After sending USDC on-chain to this address, use “Collect” at the bottom to collect and sync USDC to your balance.",
"collectInlineHintExchange": "After sending USDC on-chain to this address, use “Collect” at the bottom to collect and sync USDC to your balance.",
"qrCaption": "Scan to fill the address (optional)",
"collectInlineHint": "After your USDC transfer to this address has arrived, tap \"Sync balance\" at the bottom to credit it to your trading account.",
"collectInlineHintExchange": "After your USDC transfer to this address has arrived, tap \"Sync balance\" at the bottom to credit it to your trading account.",
"qrLoadFailed": "Could not load QR code",
"checkStatus": "Collect",
"checkStatus": "Sync balance",
"checking": "Checking...",
"checkingStatus": "Checking deposit status...",
"nextCheckIn": "Next check in: {seconds}s",
@ -384,7 +383,7 @@
"amountUsdcHint": "Send USDC from this wallet to the deposit address. Keep native gas on this network.",
"sendViaMetaMask": "Send with MetaMask",
"depositFromWallet": "Deposit from wallet",
"collect": "Collect",
"collect": "Sync balance",
"sendSuccess": "Transfer confirmed on-chain",
"sendFailed": "Transfer failed",
"invalidAmount": "Enter a valid amount greater than zero",

View File

@ -342,7 +342,7 @@
"title": "入金",
"polymarketBalance": "残高:",
"transferCrypto": "暗号資産を送金",
"transferCryptoSub": "制限なし • 即時 • 着金後に下部でコレクト",
"transferCryptoSub": "制限なし • 即時 • 着金後、下のボタンで残高に反映",
"connectExchange": "現在のウォレットで送金",
"noLimit": "制限なし",
"instant": "即時",
@ -363,11 +363,10 @@
"connectingWallet": "ウォレットに接続しています…",
"connectWalletHint": "入金アドレスの表示と送金のために MetaMask の承認が必要です。",
"linkMetaMask": "MetaMask を接続",
"collectInlineHint": "このアドレスへオンチェーンで USDC を送金したら、画面下の「回収」でコレクトし、残高に反映してください。",
"collectInlineHintExchange": "このアドレスへオンチェーンで USDC を送金したら、画面下の「回収」でコレクトし、残高に反映してください。",
"qrCaption": "アドレス入力用 QR任意",
"collectInlineHint": "このアドレスへの USDC 送金が完了したら、画面下の「残高を反映」で取引用の残高に計上してください。",
"collectInlineHintExchange": "このアドレスへの USDC 送金が完了したら、画面下の「残高を反映」で取引用の残高に計上してください。",
"qrLoadFailed": "QR の読み込みに失敗しました",
"checkStatus": "回収",
"checkStatus": "残高を反映",
"checking": "確認中...",
"checkingStatus": "入金状況を確認しています...",
"nextCheckIn": "次の確認: {seconds}秒",
@ -384,7 +383,7 @@
"amountUsdcHint": "このウォレットから入金先へ USDC を送ります。ガス用にネイティブトークンを残してください。",
"sendViaMetaMask": "MetaMask で送金",
"depositFromWallet": "ウォレットから入金",
"collect": "回収",
"collect": "残高を反映",
"sendSuccess": "チェーン上で送金が確定しました",
"sendFailed": "送金に失敗しました",
"invalidAmount": "0 より大きい有効な金額を入力してください",

View File

@ -342,7 +342,7 @@
"title": "입금",
"polymarketBalance": "잔액:",
"transferCrypto": "암호화폐 전송",
"transferCryptoSub": "제한 없음 • 즉시 • 입금 후 하단에서 수집",
"transferCryptoSub": "제한 없음 • 즉시 • 입금 확인 후 하단에서 잔액 동기화",
"connectExchange": "현재 지갑으로 송금",
"noLimit": "제한 없음",
"instant": "즉시",
@ -363,11 +363,10 @@
"connectingWallet": "지갑 연결 중…",
"connectWalletHint": "입금 주소를 불러오고 전송하려면 MetaMask 승인이 필요합니다.",
"linkMetaMask": "MetaMask 연결",
"collectInlineHint": "이 주소로 온체인 USDC 전송을 마친 뒤, 화면 맨 아래「수집」으로 수집해 잔액에 반영하세요.",
"collectInlineHintExchange": "이 주소로 온체인 USDC 전송을 마친 뒤, 화면 맨 아래「수집」으로 수집해 잔액에 반영하세요.",
"qrCaption": "주소 입력용 QR (선택)",
"collectInlineHint": "이 주소로 USDC 이체가 입금 확인되면, 화면 아래「잔액 동기화」를 눌러 거래 잔액에 반영하세요.",
"collectInlineHintExchange": "이 주소로 USDC 이체가 입금 확인되면, 화면 아래「잔액 동기화」를 눌러 거래 잔액에 반영하세요.",
"qrLoadFailed": "QR 코드를 불러오지 못했습니다",
"checkStatus": "수집",
"checkStatus": "잔액 동기화",
"checking": "확인 중...",
"checkingStatus": "입금 상태 확인 중...",
"nextCheckIn": "다음 확인: {seconds}초",
@ -384,7 +383,7 @@
"amountUsdcHint": "현재 지갑에서 입금 주소로 USDC를 보냅니다. 가스비용 네이티브 토큰을 남겨 두세요.",
"sendViaMetaMask": "MetaMask로 전송",
"depositFromWallet": "지갑에서 입금",
"collect": "수집",
"collect": "잔액 동기화",
"sendSuccess": "전송이 온체인에서 확인되었습니다",
"sendFailed": "전송 실패",
"invalidAmount": "0보다 큰 유효한 금액을 입력하세요",

View File

@ -342,7 +342,7 @@
"title": "入金",
"polymarketBalance": "余额:",
"transferCrypto": "转账加密货币",
"transferCryptoSub": "无限制 • 即时 • 到账后可在底部一键归集",
"transferCryptoSub": "无限制 • 即时 • 到账后可在底部一键同步余额",
"connectExchange": "使用当前钱包转账",
"noLimit": "无限制",
"instant": "即时到账",
@ -363,11 +363,10 @@
"connectingWallet": "正在连接钱包…",
"connectWalletHint": "需要授权 MetaMask 后才能显示充值地址并转账。",
"linkMetaMask": "连接 MetaMask",
"collectInlineHint": "向该地址完成链上转账后,请点击底部「归集」,将 USDC 同步到账户余额。",
"collectInlineHintExchange": "向该地址完成链上转账后,请点击底部「归集」,将 USDC 同步到账户余额。",
"qrCaption": "扫码填入收款地址(可选)",
"collectInlineHint": "向该地址转完 USDC 并到账后,请点击底部「同步余额」,把资金记入您的交易账户。",
"collectInlineHintExchange": "向该地址转完 USDC 并到账后,请点击底部「同步余额」,把资金记入您的交易账户。",
"qrLoadFailed": "二维码加载失败",
"checkStatus": "归集",
"checkStatus": "同步余额",
"checking": "正在检测...",
"checkingStatus": "正在检测充值状态...",
"nextCheckIn": "下次检测: {seconds}秒",
@ -384,7 +383,7 @@
"amountUsdcHint": "从当前钱包将 USDC 转到入账地址,请预留主网币作为 Gas",
"sendViaMetaMask": "在 MetaMask 中转账",
"depositFromWallet": "从钱包转入",
"collect": "归集",
"collect": "同步余额",
"sendSuccess": "转账已成功上链",
"sendFailed": "转账失败",
"invalidAmount": "请输入大于 0 的有效金额",

View File

@ -342,7 +342,7 @@
"title": "入金",
"polymarketBalance": "餘額:",
"transferCrypto": "轉帳加密貨幣",
"transferCryptoSub": "無限制 • 即時 • 到帳後可在底部一鍵歸集",
"transferCryptoSub": "無限制 • 即時 • 到帳後可在底部一鍵同步餘額",
"connectExchange": "使用當前錢包轉帳",
"noLimit": "無限制",
"instant": "即時到帳",
@ -363,11 +363,10 @@
"connectingWallet": "正在連接錢包…",
"connectWalletHint": "請先授權 MetaMask才能顯示充值地址並轉帳。",
"linkMetaMask": "連接 MetaMask",
"collectInlineHint": "向該地址完成鏈上轉帳後,請點擊底部「歸集」,將 USDC 同步至帳戶餘額。",
"collectInlineHintExchange": "向該地址完成鏈上轉帳後,請點擊底部「歸集」,將 USDC 同步至帳戶餘額。",
"qrCaption": "掃碼填入收款地址(可選)",
"collectInlineHint": "向該地址轉完 USDC 並到帳後,請點擊底部「同步餘額」,把資金記入您的交易帳戶。",
"collectInlineHintExchange": "向該地址轉完 USDC 並到帳後,請點擊底部「同步餘額」,把資金記入您的交易帳戶。",
"qrLoadFailed": "二維碼載入失敗",
"checkStatus": "歸集",
"checkStatus": "同步餘額",
"checking": "正在檢測...",
"checkingStatus": "正在檢測充值狀態...",
"nextCheckIn": "下次檢測: {seconds}秒",
@ -384,7 +383,7 @@
"amountUsdcHint": "從目前錢包將 USDC 轉到入帳地址,請預留主網幣作為 Gas",
"sendViaMetaMask": "在 MetaMask 中轉帳",
"depositFromWallet": "從錢包轉入",
"collect": "歸集",
"collect": "同步餘額",
"sendSuccess": "轉帳已成功上鏈",
"sendFailed": "轉帳失敗",
"invalidAmount": "請輸入大於 0 的有效金額",

View File

@ -116,39 +116,53 @@
</v-card>
</v-dialog>
<v-dialog v-model="editNameDialogOpen" max-width="420">
<v-card class="name-dialog-card" rounded="xl" elevation="0">
<div class="name-dialog-title">{{ t('profile.editNameTitle') }}</div>
<v-text-field
v-model="editingName"
:label="t('profile.newUserName')"
variant="outlined"
density="comfortable"
hide-details="auto"
:error-messages="nameError ? [nameError] : []"
:hint="t('profile.nameFormatHint')"
persistent-hint
/>
<div class="name-dialog-actions">
<button
class="name-dialog-cancel-btn"
type="button"
:disabled="isSaving"
<v-dialog v-model="editNameDialogOpen" max-width="480" content-class="name-dialog">
<v-card class="name-dialog-card" elevation="0">
<div class="name-dialog-header">
<h2 class="name-dialog-title">{{ t('profile.editNameTitle') }}</h2>
<v-btn
icon
variant="text"
class="name-dialog-close-btn"
:aria-label="t('deposit.close')"
@click="closeEditNameDialog"
>
{{ t('profile.cancel') }}
</button>
<button class="name-dialog-save-btn" type="button" :disabled="isSaving" @click="saveName">
<v-progress-circular
v-if="isSaving"
indeterminate
size="18"
width="2"
class="save-btn-spinner"
/>
<span v-else>{{ t('profile.save') }}</span>
</button>
<v-icon size="18">mdi-close</v-icon>
</v-btn>
</div>
<v-card-text class="name-dialog-body">
<v-text-field
v-model="editingName"
:label="t('profile.newUserName')"
variant="outlined"
density="comfortable"
hide-details="auto"
:error-messages="nameError ? [nameError] : []"
:hint="t('profile.nameFormatHint')"
persistent-hint
class="name-dialog-field"
/>
<div class="name-dialog-actions">
<button
class="name-dialog-cancel-btn"
type="button"
:disabled="isSaving"
@click="closeEditNameDialog"
>
{{ t('profile.cancel') }}
</button>
<button class="name-dialog-save-btn" type="button" :disabled="isSaving" @click="saveName">
<v-progress-circular
v-if="isSaving"
indeterminate
size="18"
width="2"
class="save-btn-spinner"
/>
<span v-else>{{ t('profile.save') }}</span>
</button>
</div>
</v-card-text>
</v-card>
</v-dialog>
</div>
@ -851,26 +865,55 @@ onMounted(() => {
}
.name-dialog-card {
border: 1px solid #e5e7eb;
background: #ffffff;
padding: 14px;
display: flex;
flex-direction: column;
gap: 10px;
overflow: hidden;
border-radius: 12px !important;
border: 1px solid #f3f4f6;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
background: #ffffff;
}
.name-dialog-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 16px 24px 10px;
}
.name-dialog-title {
font-size: 1rem;
font-weight: 600;
color: #111827;
font-size: 15px;
font-weight: 700;
padding: 2px 2px 0;
margin: 0;
text-align: left;
line-height: 1.2;
letter-spacing: normal;
}
.name-dialog-close-btn {
flex-shrink: 0;
align-self: center;
margin-top: -1px;
}
.name-dialog-body {
flex: 1 1 auto;
min-height: 0;
padding: 16px 24px 24px;
letter-spacing: normal;
}
.name-dialog-field :deep(.v-field) {
border-radius: 8px;
}
.name-dialog-actions {
display: flex;
gap: 10px;
justify-content: flex-end;
padding-top: 2px;
padding-top: 16px;
}
.name-dialog-cancel-btn {

View File

@ -20,7 +20,7 @@
<v-col cols="12" class="chart-col">
<!-- 分时图卡片Polymarket 样式 -->
<v-card class="chart-card polymarket-chart" elevation="0" rounded="lg">
<!-- 顶部标题当前概率Past / 日期 -->
<!-- 顶部标题当前概率日期与图表模式 -->
<div class="chart-header">
<h1 class="chart-title">
{{ detailLoading && !eventDetail ? t('common.loading') : marketTitle }}

View File

@ -85,12 +85,16 @@
<div class="design-pos-top">
<div class="design-pos-left">
<div class="position-icon" :class="pos.iconClass">
<img
v-if="pos.imageUrl"
:src="pos.imageUrl"
alt=""
class="position-icon-img"
/>
<template v-if="pos.imageUrl">
<img
v-if="isWalletRemoteIconOk(`p-${pos.id}`)"
:src="pos.imageUrl"
alt=""
class="position-icon-img"
@error="markWalletRemoteIconFailed(`p-${pos.id}`)"
/>
<v-icon v-else size="20" class="position-icon-svg">mdi-currency-usd</v-icon>
</template>
<v-icon v-else-if="pos.icon" size="20" class="position-icon-svg">{{
pos.icon
}}</v-icon>
@ -164,7 +168,16 @@
>
<div class="design-order-top">
<div class="order-mobile-icon" :class="ord.iconClass">
<img v-if="ord.imageUrl" :src="ord.imageUrl" alt="" class="position-icon-img" />
<template v-if="ord.imageUrl">
<img
v-if="isWalletRemoteIconOk(`o-${ord.id}`)"
:src="ord.imageUrl"
alt=""
class="position-icon-img"
@error="markWalletRemoteIconFailed(`o-${ord.id}`)"
/>
<v-icon v-else size="20" class="position-icon-svg">mdi-currency-usd</v-icon>
</template>
<span v-else class="position-icon-char">{{ ord.iconChar || '•' }}</span>
</div>
<div class="order-mobile-main design-order-title-col">
@ -243,7 +256,16 @@
<div class="design-history-top">
<div class="design-history-left">
<div class="history-mobile-icon" :class="h.iconClass">
<img v-if="h.imageUrl" :src="h.imageUrl" alt="" class="position-icon-img" />
<template v-if="h.imageUrl">
<img
v-if="isWalletRemoteIconOk(`h-${h.id}`)"
:src="h.imageUrl"
alt=""
class="position-icon-img"
@error="markWalletRemoteIconFailed(`h-${h.id}`)"
/>
<v-icon v-else size="20" class="position-icon-svg">mdi-currency-usd</v-icon>
</template>
<span v-else class="position-icon-char">{{ h.iconChar || '•' }}</span>
</div>
<div class="history-mobile-main">
@ -271,9 +293,10 @@
</template>
<template v-else>
<div class="design-funding-left">
<div class="history-mobile-icon" :class="getFundingIconClass(h)">
<img v-if="h.imageUrl" :src="h.imageUrl" alt="" class="position-icon-img" />
<span v-else class="position-icon-char">{{ getFundingIconText(h) }}</span>
<div class="history-mobile-icon funding-icon-shell">
<div class="funding-icon-disc">
<v-icon size="20" class="funding-icon-usd">mdi-currency-usd</v-icon>
</div>
</div>
<div class="history-mobile-main">
<MarqueeTitle
@ -428,12 +451,16 @@
<v-card-text class="sell-dialog-body">
<div class="sell-dialog-icon-wrap">
<div class="position-icon" :class="sellPositionItem.iconClass">
<img
v-if="sellPositionItem.imageUrl"
:src="sellPositionItem.imageUrl"
alt=""
class="position-icon-img"
/>
<template v-if="sellPositionItem.imageUrl">
<img
v-if="isWalletRemoteIconOk(`s-${sellPositionItem.id}`)"
:src="sellPositionItem.imageUrl"
alt=""
class="position-icon-img"
@error="markWalletRemoteIconFailed(`s-${sellPositionItem.id}`)"
/>
<v-icon v-else size="20" class="position-icon-svg">mdi-currency-usd</v-icon>
</template>
<v-icon v-else-if="sellPositionItem.icon" size="20" class="position-icon-svg">{{
sellPositionItem.icon
}}</v-icon>
@ -513,6 +540,20 @@ import { USE_MOCK_WALLET } from '../config/mock'
import { CrossChainUSDTAuth } from '../../sdk/approve'
import { useToastStore } from '../stores/toast'
/** 远程 iconUrl 加载失败时改显示 MDI 矢量图标,与全局 Vuetify 图标体系一致 */
const walletRemoteIconFailed = ref<Set<string>>(new Set())
function isWalletRemoteIconOk(key: string): boolean {
return !walletRemoteIconFailed.value.has(key)
}
function markWalletRemoteIconFailed(key: string) {
if (walletRemoteIconFailed.value.has(key)) return
const next = new Set(walletRemoteIconFailed.value)
next.add(key)
walletRemoteIconFailed.value = next
}
const router = useRouter()
const { mobile } = useDisplay()
const userStore = useUserStore()
@ -800,14 +841,6 @@ function getFundingTitle(h: HistoryItem): string {
: t('wallet.usdtDepositHistoryLabel')
}
function getFundingIconText(h: HistoryItem): string {
return isWithdrawalHistory(h) ? t('wallet.withdrawIconText') : t('wallet.depositIconText')
}
function getFundingIconClass(h: HistoryItem): string {
return isWithdrawalHistory(h) ? 'funding-icon-withdraw' : 'funding-icon-deposit'
}
function getHistoryTagLabel(h: HistoryItem): string {
if (!h.recordType) {
return h.profitLossNegative ? t('wallet.historySideBuy') : t('wallet.historySideSell')
@ -1375,8 +1408,7 @@ function initPlChart() {
handleScale: false,
crosshair: { vertLine: { labelVisible: false }, horzLine: { labelVisible: true } },
})
const lastVal = last != null ? last[1] : 0
const color = lastVal >= 0 ? '#059669' : '#dc2626'
const color = '#4b5563'
plChartSeries = plChartInstance.addSeries(AreaSeries, {
topColor: color + '40',
bottomColor: color + '08',
@ -1545,8 +1577,8 @@ async function submitAuthorize() {
align-items: center;
gap: 4px;
font-size: 12px;
color: #059669;
background-color: #d1fae5;
color: #374151;
background-color: #f3f4f6;
padding: 4px 8px;
border-radius: 6px;
}
@ -1864,12 +1896,9 @@ async function submitAuthorize() {
width: 100%;
}
.order-value-primary {
color: #5b5bd6;
}
.order-value-primary,
.order-value-secondary {
color: #6b7280;
color: #111827;
}
.design-pos-stats,
@ -1935,26 +1964,17 @@ async function submitAuthorize() {
padding: 0 10px;
}
.side-buy {
color: #2563eb;
border: 1.5px solid #2563eb;
background: transparent;
}
.side-buy,
.side-sell {
color: #dc2626;
border: 1.5px solid #dc2626;
background: transparent;
}
.outcome-yes {
color: #16a34a;
background: #dcfce7;
color: #374151;
border: 1.5px solid #e5e7eb;
background: #f9fafb;
}
.outcome-yes,
.outcome-no {
color: #dc2626;
background: #fee2e2;
color: #374151;
background: #f3f4f6;
}
.design-history-bottom {
@ -2008,32 +2028,38 @@ async function submitAuthorize() {
gap: 12px;
}
.history-tag-sell {
color: #2563eb;
border: 1.5px solid #2563eb;
background: transparent;
}
.history-tag-buy {
color: #dc2626;
border: 1.5px solid #dc2626;
background: transparent;
}
.history-tag-sell,
.history-tag-buy,
.history-tag-type {
color: #6d28d9;
border: 1.5px solid #7c3aed;
background: rgba(124, 58, 237, 0.06);
color: #374151;
border: 1.5px solid #e5e7eb;
background: #f9fafb;
}
.funding-icon-deposit {
background: #dcfce7;
color: #16a34a;
/* 资金流水:淡蓝底 + 蓝色圆 + 白色 $(与产品参考一致) */
.history-mobile-card.design-funding-card .history-mobile-icon.funding-icon-shell {
background: #edf2ff;
padding: 8px;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
}
.funding-icon-withdraw {
background: #fee2e2;
color: #dc2626;
.funding-icon-disc {
width: 28px;
height: 28px;
border-radius: 50%;
background: #2b66ff;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
flex-shrink: 0;
}
.funding-icon-usd {
color: #ffffff !important;
}
.design-history-meta {
@ -2169,14 +2195,10 @@ async function submitAuthorize() {
font-weight: 500;
}
.pill-down {
background-color: #fee2e2;
color: #dc2626;
}
.pill-down,
.pill-yes {
background-color: #dcfce7;
color: #059669;
background-color: #f3f4f6;
color: #374151;
}
.position-shares {
@ -2202,12 +2224,9 @@ async function submitAuthorize() {
margin-top: 2px;
}
.value-loss {
color: #dc2626;
}
.value-loss,
.value-gain {
color: #059669;
color: #6b7280;
}
.cell-actions {
@ -2452,7 +2471,7 @@ async function submitAuthorize() {
}
.filter-btn-cancel {
color: #dc2626;
color: #6b7280;
}
.filter-btn-cancel .v-icon {
@ -2540,12 +2559,9 @@ async function submitAuthorize() {
font-weight: 600;
}
.pl-gain {
color: #059669;
}
.pl-gain,
.pl-loss {
color: #dc2626;
color: #111827;
}
.history-mobile-time {
@ -2593,13 +2609,9 @@ async function submitAuthorize() {
color: #6b7280;
}
.side-yes {
color: #059669;
font-weight: 500;
}
.side-yes,
.side-no {
color: #dc2626;
color: #374151;
font-weight: 500;
}
@ -2650,7 +2662,7 @@ async function submitAuthorize() {
}
.withdrawal-mobile-reason {
font-size: 12px;
color: #dc2626;
color: #6b7280;
margin-top: 8px;
}
.withdrawal-status-pill {
@ -2660,21 +2672,12 @@ async function submitAuthorize() {
border-radius: 999px;
flex-shrink: 0;
}
.withdrawal-status-pill.status-pending {
background: #fef3c7;
color: #b45309;
}
.withdrawal-status-pill.status-success {
background: #dcfce7;
color: #166534;
}
.withdrawal-status-pill.status-rejected {
background: #fee2e2;
color: #991b1b;
}
.withdrawal-status-pill.status-pending,
.withdrawal-status-pill.status-success,
.withdrawal-status-pill.status-rejected,
.withdrawal-status-pill.status-failed {
background: #fee2e2;
color: #991b1b;
background: #f3f4f6;
color: #374151;
}
.withdrawal-reason {
font-size: 12px;
@ -2849,7 +2852,7 @@ async function submitAuthorize() {
}
.sell-receive-box {
background-color: #dcfce7;
background-color: #f3f4f6;
border-radius: 12px;
padding: 16px;
text-align: left;
@ -2865,13 +2868,13 @@ async function submitAuthorize() {
gap: 8px;
font-size: 14px;
font-weight: 500;
color: #166534;
color: #374151;
}
.sell-receive-value {
font-size: 18px;
font-weight: 700;
color: #166534;
color: #111827;
}
.sell-dialog-actions {
@ -2887,7 +2890,7 @@ async function submitAuthorize() {
.sell-edit-link {
font-size: 14px;
color: #2563eb;
color: #374151;
text-decoration: none;
}