- Add CSS clamp() for fluid font-size scaling (16px to 20px based on viewport) - Apply responsive breakpoint classes to all components: * text-xs → lg:text-sm xl:text-base * text-sm → lg:text-base xl:text-lg * text-base → lg:text-lg xl:text-xl * text-lg → lg:text-xl xl:text-2xl * text-xl → lg:text-2xl xl:text-3xl * text-2xl → lg:text-3xl xl:text-4xl * text-3xl → lg:text-4xl xl:text-5xl - Apply responsive padding/spacing scaling proportionally - Updated 27 component and page files - Build verified: 6 routes, zero TypeScript errors - Fixes readability on MacBook Pro 14" and other desktop screens without browser zoom
26 lines
954 B
TypeScript
26 lines
954 B
TypeScript
import React from 'react';
|
|
import { LucideIcon } from 'lucide-react';
|
|
|
|
interface StatCardProps {
|
|
label: string;
|
|
value: number;
|
|
icon?: LucideIcon;
|
|
}
|
|
|
|
export default function StatCard({ label, value, icon: Icon }: StatCardProps) {
|
|
return (
|
|
<div className="flex justify-between items-center gap-2 p-3 lg:p-4 xl:p-5 lg:p-6 xl:p-8.5 bg-surface/70 border border-slate-800/50 rounded-2xl shadow-sm transition-all hover:bg-surface" role="status">
|
|
<div className="flex items-center gap-2.5 min-w-0">
|
|
{Icon && <Icon className="w-5 h-5 text-primary flex-shrink-0" aria-hidden="true" />}
|
|
<span className="text-base md:text-lg lg:text-xl xl:text-2xl lg:text-3xl xl:text-4xl text-secondary font-semibold truncate">
|
|
{label}
|
|
</span>
|
|
</div>
|
|
|
|
<span className="text-2xl md:text-3xl lg:text-4xl xl:text-5xl font-black text-white whitespace-nowrap tabular-nums">
|
|
{value}
|
|
</span>
|
|
</div>
|
|
);
|
|
}
|