@@ -93,7 +93,7 @@ export function RealTimeBalanceSync({
9393
9494 return (
9595 < motion . section
96- className = { `w-full rounded-3xl border border-slate-200 bg-white p-4 shadow-sm transition-all duration-200 ease-out dark:border-slate-700 dark:bg-slate-900 ${ isLoading ? "ring-2 ring-sky-200 dark:ring-sky-800" : "" } ${ className } ` }
96+ className = { `w-full rounded-3xl border border-slate-200 bg-white p-5 shadow-sm transition-all duration-200 ease-out dark:border-slate-700 dark:bg-slate-900 ${ isLoading ? "ring-2 ring-sky-200 dark:ring-sky-800" : "" } ${ className } ` }
9797 aria-label = { t ( "sectionAriaLabel" ) }
9898 aria-busy = { isLoading }
9999 { ...animProps }
@@ -108,9 +108,9 @@ export function RealTimeBalanceSync({
108108 { liveRegionText }
109109 </ div >
110110
111- < div className = "mb-3 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between" >
112- < div className = "flex items-center gap-2" >
113- < h2 className = "text-sm font-semibold text-slate-900 dark:text-slate-100 " >
111+ < div className = "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between" >
112+ < div className = "flex items-center gap-2.5 " >
113+ < h2 className = "text-base font-bold tracking-tight text-slate-900 dark:text-white " >
114114 { t ( "title" ) }
115115 </ h2 >
116116 < AnimatePresence mode = "wait" >
@@ -159,7 +159,7 @@ export function RealTimeBalanceSync({
159159 }
160160 aria-label = { t ( "refreshButton" ) }
161161 aria-describedby = { liveId }
162- className = "group relative inline-flex items-center justify-center overflow-hidden rounded-xl border border-slate-200 bg-gradient-to-br from-sky-50 to-white px-3 py-1.5 text-xs font-semibold text-sky-600 shadow-sm transition-all duration-200 hover:border-sky-300 hover:from-sky-100 hover:to-sky-50 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-sky-400 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:scale-100 dark:border-slate-700 dark:from-slate-800 dark:to-slate-900 dark:text-sky-400 dark:hover:border-sky-600 dark:hover:from-slate-700 dark:hover:to-slate-800"
162+ className = "group relative inline-flex items-center justify-center overflow-hidden rounded-xl border border-slate-200 bg-gradient-to-br from-sky-50 to-white px-3.5 py-2 text-sm font-semibold text-sky-600 shadow-sm transition-all duration-200 hover:border-sky-300 hover:from-sky-100 hover:to-sky-50 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-sky-400 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:scale-100 dark:border-slate-700 dark:from-slate-800 dark:to-slate-900 dark:text-sky-400 dark:hover:border-sky-600 dark:hover:from-slate-700 dark:hover:to-slate-800"
163163 >
164164 < motion . span
165165 className = "relative z-10 flex items-center gap-1.5"
@@ -220,19 +220,19 @@ export function RealTimeBalanceSync({
220220 animate = { shouldReduceMotion ? undefined : { opacity : 1 , y : 0 } }
221221 exit = { shouldReduceMotion ? undefined : { opacity : 0 } }
222222 transition = { { duration : 0.2 } }
223- className = "mb-2 text-xs text-red-600"
223+ className = "mb-3 text-sm font-medium text-red-600 dark:text-red-400 "
224224 >
225225 { error }
226226 </ motion . p >
227227 ) : null }
228228 </ AnimatePresence >
229229
230- { balances . length === 0 && ! isLoading ? (
230+ { ! error && balances . length === 0 && ! isLoading ? (
231231 < motion . div
232232 key = "empty"
233233 initial = { shouldReduceMotion ? undefined : { opacity : 0 , y : 10 } }
234234 animate = { shouldReduceMotion ? undefined : { opacity : 1 , y : 0 } }
235- className = "group relative overflow-hidden rounded-2xl border border-slate-100 bg-gradient-to-br from-slate-50 to-slate-100/50 px-4 py-6 transition-all duration-300 hover:border-slate-200 hover:shadow-sm dark:border-slate-800 dark:from-slate-800 dark:to-slate-900/50"
235+ className = "group relative overflow-hidden rounded-2xl border border-slate-100 bg-gradient-to-br from-slate-50 to-slate-100/50 px-4 py-8 transition-all duration-300 hover:border-slate-200 hover:shadow-sm dark:border-slate-800 dark:from-slate-800 dark:to-slate-900/50"
236236 aria-live = "polite"
237237 >
238238 < motion . div
@@ -257,7 +257,7 @@ export function RealTimeBalanceSync({
257257 />
258258 < div className = "relative" >
259259 < svg
260- className = "mx-auto mb-2 h-8 w-8 text-slate-300 dark:text-slate-600"
260+ className = "mx-auto mb-3 h-10 w-10 text-slate-300 dark:text-slate-600"
261261 fill = "none"
262262 stroke = "currentColor"
263263 viewBox = "0 0 24 24"
@@ -270,7 +270,7 @@ export function RealTimeBalanceSync({
270270 d = "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4"
271271 />
272272 </ svg >
273- < p className = "text-center text-xs font-medium text-slate-500 dark:text-slate-400" >
273+ < p className = "text-center text-sm font-medium text-slate-500 dark:text-slate-400" >
274274 { t ( "emptyState" ) }
275275 </ p >
276276 </ div >
@@ -280,7 +280,7 @@ export function RealTimeBalanceSync({
280280 key = "skeleton"
281281 initial = { shouldReduceMotion ? undefined : { opacity : 0 } }
282282 animate = { shouldReduceMotion ? undefined : { opacity : 1 } }
283- className = "space-y-2 rounded-2xl border border-slate-100 bg-slate-50 p-3 dark:border-slate-800 dark:bg-slate-800/50"
283+ className = "space-y-3 rounded-2xl border border-slate-100 bg-slate-50 p-4 dark:border-slate-800 dark:bg-slate-800/50"
284284 >
285285 { [ 1 , 2 , 3 ] . map ( ( i ) => (
286286 < div key = { i } className = "flex items-center justify-between" >
@@ -331,7 +331,7 @@ export function RealTimeBalanceSync({
331331 < motion . ul
332332 role = "list"
333333 aria-label = { t ( "balancesListAriaLabel" ) }
334- className = "overflow-hidden rounded-2xl border border-slate-100 bg-slate-50 divide-y divide-slate-100 dark:border-slate-800 dark:bg-slate-800/50 dark:divide-slate-800 "
334+ className = "overflow-hidden rounded-2xl border border-slate-100 bg-slate-50 divide-y divide-slate-100 dark:border-slate-800 dark:bg-slate-800/50 dark:divide-slate-700 "
335335 variants = { shouldReduceMotion ? undefined : listVariants }
336336 initial = "hidden"
337337 animate = "visible"
@@ -355,22 +355,22 @@ export function RealTimeBalanceSync({
355355 animate = "visible"
356356 exit = "exit"
357357 transition = { { duration : 0.25 , ease : "easeOut" } }
358- className = "group relative flex items-center justify-between gap-4 py-3 px-3 transition-colors hover:bg-white/50 dark:hover:bg-slate-700/30"
358+ className = "group relative flex items-center justify-between gap-4 py-3.5 px-4 transition-colors hover:bg-white/50 dark:hover:bg-slate-700/30"
359359 aria-label = { t ( "balanceItemAriaLabel" , {
360360 asset : b . code ,
361361 balance : formattedBalance ,
362362 } ) }
363363 >
364364 < div className = "flex items-center gap-2" >
365- < div className = "flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-sky-100 to-blue-100 text-xs font-bold text-sky-700 dark:from-sky-900/30 dark:to-blue-900/30 dark:text-sky-400" >
365+ < div className = "flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-sky-100 to-blue-100 text-xs font-bold text-sky-700 dark:from-sky-900/30 dark:to-blue-900/30 dark:text-sky-400" >
366366 { b . code . slice ( 0 , 2 ) }
367367 </ div >
368- < span className = "text-sm font-medium text-slate-700 dark:text-slate-300" >
368+ < span className = "text-sm font-semibold text-slate-700 dark:text-slate-300" >
369369 { b . code }
370370 </ span >
371371 </ div >
372372 < motion . span
373- className = "text-sm tabular-nums font-semibold text-slate-900 dark:text-slate-100 "
373+ className = "text-base tabular-nums font-bold text-slate-900 dark:text-white "
374374 key = { `${ b . code } -${ b . balance } ` }
375375 initial = {
376376 shouldReduceMotion
@@ -401,7 +401,7 @@ export function RealTimeBalanceSync({
401401
402402 { lastUpdated && (
403403 < motion . div
404- className = "mt-3 flex items-center gap-2"
404+ className = "mt-4 flex items-center gap-2"
405405 initial = { shouldReduceMotion ? undefined : { opacity : 0 , y : 5 } }
406406 animate = { shouldReduceMotion ? undefined : { opacity : 1 , y : 0 } }
407407 transition = { { delay : 0.2 , duration : 0.3 } }
@@ -429,10 +429,10 @@ export function RealTimeBalanceSync({
429429 />
430430 </ div >
431431 < p className = "text-xs text-slate-400 dark:text-slate-500" >
432- < span className = "font-medium text-slate-500 dark:text-slate-400" >
432+ < span className = "font-semibold text-slate-500 dark:text-slate-400" >
433433 { t ( "updatedLabel" ) }
434434 </ span > { " " }
435- < time dateTime = { lastUpdated . toISOString ( ) } >
435+ < time dateTime = { lastUpdated . toISOString ( ) } className = "tabular-nums" >
436436 { lastUpdated . toLocaleTimeString ( locale , {
437437 hour : "numeric" ,
438438 minute : "2-digit" ,
0 commit comments