style(tipografia): adiciona fonte America Medium e padroniza pesos de texto

Adiciona os arquivos `america-medium.woff2` e `america-bold.woff2` e
registra o weight 500 no `font_index.ts`.

Padroniza o uso de `font-medium` em substituição a `font-semibold` e
`font-bold` em títulos, valores monetários e rótulos de destaque em
todos os componentes do app, landing page e componentes de UI base.

`Card` ganha `hover:border-primary/40` e `CardTitle` recebe `text-base`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-04-01 14:14:55 +00:00
parent e32fb85006
commit 0514efb1c4
85 changed files with 195 additions and 200 deletions

View File

@@ -61,7 +61,7 @@ export function CardTopExpenses({ data }: CardTopExpensesProps) {
<div className="flex min-w-0 flex-1 items-center gap-2">
{/* Rank number */}
<div className="flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted">
<span className="text-sm font-semibold text-muted-foreground">
<span className="text-sm font-medium text-muted-foreground">
{index + 1}
</span>
</div>

View File

@@ -67,11 +67,11 @@ export function CardsOverview({ data }: CardsOverviewProps) {
<p className="text-xs text-muted-foreground">{card.title}</p>
{card.isMoney ? (
<MoneyValues
className="text-2xl font-semibold"
className="text-2xl font-medium"
amount={card.value}
/>
) : (
<p className="text-2xl font-semibold">
<p className="text-2xl font-medium">
{formatPercentage(card.value, {
maximumFractionDigits: 0,
minimumFractionDigits: 0,
@@ -83,7 +83,7 @@ export function CardsOverview({ data }: CardsOverviewProps) {
))}
</div>
<p className="text-base font-bold ml-2 py-2">Meus cartões</p>
<p className="text-base font-medium ml-2 py-2">Meus cartões</p>
{/* Cards list */}
<div className="grid gap-2 grid-cols-2 lg:grid-cols-4 xl:grid-cols-4">
@@ -116,7 +116,7 @@ export function CardsOverview({ data }: CardsOverviewProps) {
</div>
<div className="min-w-0 flex-1 space-y-1">
<div className="flex items-center gap-2">
<span className="text-base font-bold truncate">
<span className="text-base font-medium truncate">
{card.name}
</span>
{brandAsset && (

View File

@@ -63,7 +63,7 @@ export function CategoryCell({
<div className="font-medium">{formatCurrency(value)}</div>
{!isFirstMonth && absoluteChange !== null && (
<>
<div className="font-bold">
<div className="font-medium">
Mês anterior: {formatCurrency(previousValue)}
</div>
<div

View File

@@ -67,11 +67,11 @@ function CategoryCard({ category, periods, periodCount }: CategoryCardProps) {
</div>
);
})}
<div className="flex items-center justify-between font-semibold text-info">
<div className="flex items-center justify-between font-medium text-info">
<span>Média mensal</span>
<span>{formatCurrency(averageMonthlyTotal)}</span>
</div>
<div className="flex items-center justify-between pt-2 font-semibold">
<div className="flex items-center justify-between pt-2 font-medium">
<span>Total</span>
<span>{formatCurrency(category.total)}</span>
</div>
@@ -111,7 +111,7 @@ function Section({
<span className="text-sm text-muted-foreground">
{formatCurrency(total)}
</span>
<span className="text-xs font-semibold text-info">
<span className="text-xs font-medium text-info">
Média: {formatCurrency(averageMonthlyTotal)}
</span>
</div>

View File

@@ -55,7 +55,7 @@ function AreaTooltip({
return (
<div className="min-w-[210px] rounded-lg border border-border/50 bg-background px-3 py-2.5 shadow-xl">
<p className="mb-2.5 border-b border-border/50 pb-1.5 text-xs font-semibold text-foreground">
<p className="mb-2.5 border-b border-border/50 pb-1.5 text-xs font-medium text-foreground">
{label}
</p>
<div className="space-y-1.5">
@@ -73,7 +73,7 @@ function AreaTooltip({
{entry.name}
</span>
</div>
<span className="shrink-0 text-xs font-semibold tabular-nums text-foreground">
<span className="shrink-0 text-xs font-medium tabular-nums text-foreground">
{currencyFormatter.format(Number(entry.value))}
</span>
</div>

View File

@@ -3,7 +3,7 @@
import {
RiDownloadLine,
RiFileExcelLine,
RiFilePdfLine,
RiFilePdf2Line,
RiFileTextLine,
} from "@remixicon/react";
import { useState } from "react";
@@ -388,7 +388,7 @@ export function CategoryReportExport({
Exportar como Excel (.xlsx)
</DropdownMenuItem>
<DropdownMenuItem onClick={exportToPDF} disabled={isExporting}>
<RiFilePdfLine className="mr-2 h-4 w-4" aria-hidden="true" />
<RiFilePdf2Line className="mr-2 h-4 w-4" aria-hidden="true" />
Exportar como PDF
</DropdownMenuItem>
</DropdownMenuContent>

View File

@@ -72,18 +72,18 @@ export function CategoryTable({
<Table>
<TableHeader>
<TableRow>
<TableHead className="w-[240px] min-w-[240px] font-bold">
<TableHead className="w-[240px] min-w-[240px] font-medium">
Categoria
</TableHead>
{periods.map((period) => (
<TableHead
key={period}
className="text-right min-w-[120px] font-bold"
className="text-right min-w-[120px] font-medium"
>
{formatPeriodLabel(period)}
</TableHead>
))}
<TableHead className="text-right min-w-[140px] font-bold">
<TableHead className="text-right min-w-[140px] font-medium">
<div className="flex items-center justify-end gap-1">
Média
<Tooltip>
@@ -100,7 +100,7 @@ export function CategoryTable({
</Tooltip>
</div>
</TableHead>
<TableHead className="text-right min-w-[120px] font-bold">
<TableHead className="text-right min-w-[120px] font-medium">
Total
</TableHead>
</TableRow>
@@ -149,7 +149,7 @@ export function CategoryTable({
</TableCell>
);
})}
<TableCell className="text-right font-semibold text-info">
<TableCell className="text-right font-medium text-info">
{(() => {
const nonZeroCount = periods.filter(
(p) => (category.monthlyData.get(p)?.amount ?? 0) > 0,
@@ -159,7 +159,7 @@ export function CategoryTable({
);
})()}
</TableCell>
<TableCell className="text-right font-semibold">
<TableCell className="text-right font-medium">
{formatCurrency(category.total)}
</TableCell>
</TableRow>
@@ -169,19 +169,19 @@ export function CategoryTable({
<TableFooter>
<TableRow>
<TableCell className="font-bold">Total</TableCell>
<TableCell className="font-medium">Total</TableCell>
{periods.map((period) => {
const periodTotal = sectionTotals.totalsMap.get(period) ?? 0;
return (
<TableCell key={period} className="text-right font-semibold">
<TableCell key={period} className="text-right font-medium">
{formatCurrency(periodTotal)}
</TableCell>
);
})}
<TableCell className="text-right font-semibold text-info">
<TableCell className="text-right font-medium text-info">
{formatCurrency(sectionTotals.averageMonthlyTotal)}
</TableCell>
<TableCell className="text-right font-semibold">
<TableCell className="text-right font-medium">
{formatCurrency(sectionTotals.grandTotal)}
</TableCell>
</TableRow>

View File

@@ -65,7 +65,7 @@ export function EstablishmentsList({
<div className="flex min-w-0 flex-1 items-center gap-2">
{/* Rank number - same size as icon containers */}
<div className="flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted">
<span className="text-sm font-semibold text-muted-foreground">
<span className="text-sm font-medium text-muted-foreground">
{index + 1}
</span>
</div>

View File

@@ -18,8 +18,8 @@ export function HighlightsCards({ summary }: HighlightsCardsProps) {
<RiTrophyLine className="size-5" />
</div>
<div className="min-w-0 flex-1">
<p className="text-xs font-bold">Mais Frequente</p>
<p className="font-bold text-2xl truncate">
<p className="text-xs font-medium">Mais Frequente</p>
<p className="font-medium text-2xl truncate">
{summary.mostFrequent || "—"}
</p>
</div>
@@ -34,8 +34,8 @@ export function HighlightsCards({ summary }: HighlightsCardsProps) {
<RiFireLine className="size-5" />
</div>
<div className="min-w-0 flex-1">
<p className="text-xs font-bold">Maior Gasto Total</p>
<p className="font-bold text-2xl truncate">
<p className="text-xs font-medium">Maior Gasto Total</p>
<p className="font-medium text-2xl truncate">
{summary.highestSpending || "—"}
</p>
</div>

View File

@@ -58,11 +58,11 @@ export function SummaryCards({ summary }: SummaryCardsProps) {
</p>
{card.isMoney ? (
<MoneyValues
className="text-2xl font-semibold"
className="text-2xl font-medium"
amount={card.value}
/>
) : (
<p className="text-2xl font-semibold">{card.value}</p>
<p className="text-2xl font-medium">{card.value}</p>
)}
<p className="text-xs text-muted-foreground">
{card.description}