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

@@ -126,7 +126,7 @@ export default async function Page() {
Projeto Open Source
</Badge>
<h1 className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">
<h1 className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-medium tracking-tight">
Suas finanças,
<span className="text-primary"> do seu jeito</span>
</h1>
@@ -207,7 +207,7 @@ export default async function Page() {
className="flex flex-col items-center text-center gap-1.5"
>
<Icon className="size-5" style={{ color: colorVar }} />
<span className="text-2xl md:text-3xl font-bold">
<span className="text-2xl md:text-3xl font-medium">
{value}
</span>
<span className="text-xs md:text-sm text-muted-foreground">
@@ -229,7 +229,7 @@ export default async function Page() {
<Badge variant="outline" className="mb-4">
Conheça as telas
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Veja o que você pode fazer
</h2>
<p className="text-base md:text-lg text-muted-foreground max-w-2xl mx-auto px-4 sm:px-0">
@@ -254,7 +254,7 @@ export default async function Page() {
<Badge variant="outline" className="mb-4">
O que tem aqui
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Funcionalidades que importam
</h2>
<p className="text-base md:text-lg text-muted-foreground max-w-2xl mx-auto px-4 sm:px-0">
@@ -282,7 +282,7 @@ export default async function Page() {
/>
</div>
<div>
<h3 className="font-semibold text-base md:text-lg mb-1.5 md:mb-2">
<h3 className="font-medium text-base md:text-lg mb-1.5 md:mb-2">
{feature.title}
</h3>
<p className="text-sm text-muted-foreground leading-relaxed">
@@ -346,7 +346,7 @@ export default async function Page() {
<RiSmartphoneLine className="size-3.5 mr-1" />
Mobile
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Use o OpenMonetis no celular sem perder o fluxo
</h2>
<p className="text-base md:text-lg text-muted-foreground max-w-2xl mx-auto px-4 sm:px-0">
@@ -384,7 +384,7 @@ export default async function Page() {
<RiSmartphoneLine className="size-3.5 mr-1" />
PWA instalável
</Badge>
<h3 className="text-2xl md:text-3xl font-bold tracking-tight mb-3">
<h3 className="text-2xl md:text-3xl font-medium tracking-tight mb-3">
Leve o OpenMonetis para a tela inicial
</h3>
<p className="text-muted-foreground mb-6 leading-relaxed">
@@ -430,7 +430,7 @@ export default async function Page() {
Companion Android
</Badge>
</div>
<h3 className="text-2xl md:text-3xl font-bold tracking-tight mb-3">
<h3 className="text-2xl md:text-3xl font-medium tracking-tight mb-3">
Capture, envie e revise no mesmo fluxo
</h3>
<p className="text-muted-foreground mb-6 leading-relaxed">
@@ -441,7 +441,7 @@ export default async function Page() {
{companionSteps.map((step, index) => (
<li key={step.title} className="flex items-start gap-3">
<span
className="mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-bold"
className="mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-medium"
style={{
backgroundColor: `color-mix(in oklch, ${step.colorVar} 14%, transparent)`,
color: step.colorVar,
@@ -529,7 +529,7 @@ export default async function Page() {
<Badge variant="outline" className="mb-4">
Stack técnica
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
O que roda por baixo
</h2>
<p className="text-base md:text-lg text-muted-foreground max-w-2xl mx-auto px-4 sm:px-0">
@@ -556,7 +556,7 @@ export default async function Page() {
/>
</div>
<div>
<h3 className="font-semibold text-base md:text-lg mb-1.5 md:mb-2">
<h3 className="font-medium text-base md:text-lg mb-1.5 md:mb-2">
{item.title}
</h3>
<p className="text-sm text-muted-foreground mb-2 md:mb-3">
@@ -582,7 +582,7 @@ export default async function Page() {
<Badge variant="outline" className="mb-4">
Como usar
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Rode no seu computador
</h2>
<p className="text-base md:text-lg text-muted-foreground px-4 sm:px-0">
@@ -617,7 +617,7 @@ export default async function Page() {
<Badge variant="outline" className="mb-4">
Para quem é?
</Badge>
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Feito para quem gosta de controle
</h2>
<p className="text-base md:text-lg text-muted-foreground px-4 sm:px-0">
@@ -644,7 +644,7 @@ export default async function Page() {
/>
</div>
<div>
<h3 className="font-semibold mb-1">{item.title}</h3>
<h3 className="font-medium mb-1">{item.title}</h3>
<p className="text-xs sm:text-sm text-muted-foreground">
{item.description}
</p>
@@ -664,7 +664,7 @@ export default async function Page() {
<div className="max-w-8xl mx-auto px-4">
<AnimateOnScroll>
<div className="mx-auto max-w-4xl rounded-2xl border bg-card px-8 py-12 md:py-16 text-center">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-bold tracking-tight mb-3 md:mb-4">
<h2 className="text-2xl sm:text-3xl md:text-4xl font-medium tracking-tight mb-3 md:mb-4">
Pronto para testar?
</h2>
<p className="text-base md:text-lg text-muted-foreground mb-6 md:mb-8">
@@ -715,7 +715,7 @@ export default async function Page() {
</div>
<div>
<h3 className="font-semibold mb-3 md:mb-4">Projeto</h3>
<h3 className="font-medium mb-3 md:mb-4">Projeto</h3>
<ul className="space-y-2.5 md:space-y-3 text-sm text-muted-foreground">
<li>
<Link
@@ -749,7 +749,7 @@ export default async function Page() {
</div>
<div>
<h3 className="font-semibold mb-3 md:mb-4">Companion</h3>
<h3 className="font-medium mb-3 md:mb-4">Companion</h3>
<ul className="space-y-2.5 md:space-y-3 text-sm text-muted-foreground">
<li>
<Link

View File

@@ -88,9 +88,7 @@ export function AccountCard({
{icon}
</div>
) : null}
<h2 className="text-lg font-semibold text-foreground">
{accountName}
</h2>
<h2 className="text-lg font-medium text-foreground">{accountName}</h2>
{(excludeFromBalance || excludeInitialBalanceFromIncome) && (
<Tooltip>

View File

@@ -68,7 +68,7 @@ export function AccountStatementCard({
</div>
) : null}
<div className="min-w-0">
<h2 className="truncate text-sm font-semibold text-foreground">
<h2 className="truncate text-sm font-medium text-foreground">
{accountName}
</h2>
<p className="text-xs text-muted-foreground">
@@ -86,12 +86,12 @@ export function AccountStatementCard({
</p>
<MoneyValues
amount={currentBalance}
className="text-3xl leading-none font-semibold tracking-tight sm:text-[2rem]"
className="text-3xl leading-none font-medium tracking-tight sm:text-[2rem]"
/>
<div className="flex items-center gap-2">
<Badge
variant={getAccountStatusBadgeVariant(status)}
className="text-[11px]"
className="text-xs"
>
{status}
</Badge>
@@ -107,7 +107,7 @@ export function AccountStatementCard({
label="Saldo inicial"
tooltip="Saldo inicial cadastrado na conta somado aos lançamentos pagos anteriores a este mês."
>
<span className="text-sm font-semibold text-foreground">
<span className="text-sm font-medium text-foreground">
{formatCurrency(openingBalance)}
</span>
</MetaItem>
@@ -116,7 +116,7 @@ export function AccountStatementCard({
label="Entradas"
tooltip="Total de receitas deste mês classificadas como pagas para esta conta."
>
<span className="text-sm font-semibold text-success">
<span className="text-sm font-medium text-success">
{formatCurrency(totalIncomes)}
</span>
</MetaItem>
@@ -125,7 +125,7 @@ export function AccountStatementCard({
label="Saídas"
tooltip="Total de despesas pagas neste mês (considerando divisão entre pagadores)."
>
<span className="text-sm font-semibold text-destructive">
<span className="text-sm font-medium text-destructive">
{formatCurrency(totalExpenses)}
</span>
</MetaItem>
@@ -136,7 +136,7 @@ export function AccountStatementCard({
>
<span
className={cn(
"text-sm font-semibold",
"text-sm font-medium",
resultado >= 0 ? "text-success" : "text-destructive",
)}
>

View File

@@ -7,8 +7,8 @@ interface AuthHeaderProps {
export function AuthHeader({ title, description }: AuthHeaderProps) {
return (
<div className={cn("flex flex-col gap-2")}>
<h1 className="text-2xl font-semibold tracking-tight text-card-foreground">
<div className={cn("flex flex-col gap-2.5")}>
<h1 className="text-2xl font-medium tracking-tight text-card-foreground">
{title}
</h1>
{description ? (

View File

@@ -240,7 +240,7 @@ export function LoginForm({ className, ...props }: DivProps) {
</a>
</FieldDescription>
<FieldDescription className="text-center text-[13px] text-muted-foreground">
<FieldDescription className="text-center text-sm text-muted-foreground">
<a href="/" className={authLinkClassName}>
Voltar para a página inicial
</a>

View File

@@ -277,7 +277,7 @@ export function SignupForm({ className, ...props }: DivProps) {
</a>
</FieldDescription>
<FieldDescription className="text-center text-[13px] text-muted-foreground">
<FieldDescription className="text-center text-sm text-muted-foreground">
<a href="/" className={authLinkClassName}>
Voltar para a página inicial
</a>

View File

@@ -52,7 +52,7 @@ export function BudgetCard({
size="lg"
/>
<div className="space-y-1">
<h3 className="text-base font-semibold leading-tight">
<h3 className="text-base font-medium leading-tight">
{formatCategoryName(budget)}
</h3>
<p className="text-xs text-muted-foreground">

View File

@@ -244,7 +244,7 @@ export function BudgetDialog({
<div className="space-y-3 rounded-md border p-3">
<div className="flex items-center justify-between text-sm">
<span className="text-muted-foreground">Limite atual</span>
<span className="font-semibold text-foreground">
<span className="font-medium text-foreground">
{formatCurrency(sliderValue)}
</span>
</div>

View File

@@ -19,7 +19,7 @@ export function CalendarGrid({
}: CalendarGridProps) {
return (
<div className="overflow-hidden rounded-lg bg-card drop-shadow-xs border-none">
<div className="grid grid-cols-7 text-sm font-semibold uppercase tracking-wide text-muted-foreground">
<div className="grid grid-cols-7 text-sm font-medium uppercase tracking-wide text-muted-foreground">
{WEEK_DAYS_SHORT.map((dayName) => (
<span key={dayName} className="px-3 py-2 text-center text-primary">
{dayName}

View File

@@ -110,9 +110,7 @@ const DayEventPreview = ({ event }: { event: CalendarEvent }) => {
<span className="truncate">{label}</span>
</div>
{complement ? (
<span
className={cn("shrink-0 font-semibold", style.accent ?? "text-xs")}
>
<span className={cn("shrink-0 font-medium", style.accent ?? "text-xs")}>
{complement}
</span>
) : null}
@@ -153,7 +151,7 @@ export function DayCell({ day, onSelect, onCreate }: DayCellProps) {
<div className="flex items-start justify-between gap-2">
<span
className={cn(
"text-sm font-semibold leading-none",
"text-sm font-medium leading-none",
day.isToday
? "text-primary-foreground bg-primary size-5 rounded-full flex items-center justify-center"
: "text-foreground/90",

View File

@@ -61,7 +61,7 @@ const renderLancamento = (
<div className="flex items-start justify-between gap-3">
<div className="flex flex-col gap-1">
<span
className={`text-sm font-semibold leading-tight ${
className={`text-sm font-medium leading-tight ${
isPagamentoFatura && "text-success"
}`}
>
@@ -74,7 +74,7 @@ const renderLancamento = (
</div>
<span
className={cn(
"text-sm font-semibold whitespace-nowrap",
"text-sm font-medium whitespace-nowrap",
isReceita ? "text-success" : "text-foreground",
)}
>
@@ -103,7 +103,7 @@ const renderBoleto = (event: Extract<CalendarEvent, { type: "boleto" }>) => {
<div className="flex items-start justify-between gap-3">
<div className="flex flex-col gap-1">
<div className="flex gap-1 items-center">
<span className="text-sm font-semibold leading-tight">
<span className="text-sm font-medium leading-tight">
{event.transaction.name}
</span>
@@ -116,7 +116,7 @@ const renderBoleto = (event: Extract<CalendarEvent, { type: "boleto" }>) => {
<Badge variant={"outline"}>{isPaid ? "Pago" : "Pendente"}</Badge>
</div>
<span className="font-semibold">
<span className="font-medium">
<MoneyValues amount={event.transaction.amount} />
</span>
</div>
@@ -129,7 +129,7 @@ const renderCard = (event: Extract<CalendarEvent, { type: "card" }>) => (
<div className="flex items-start justify-between gap-3">
<div className="flex flex-col gap-1">
<div className="flex gap-1 items-center">
<span className="text-sm font-semibold leading-tight">
<span className="text-sm font-medium leading-tight">
Vencimento Invoice - {event.card.name}
</span>
</div>
@@ -137,7 +137,7 @@ const renderCard = (event: Extract<CalendarEvent, { type: "card" }>) => (
<Badge variant={"outline"}>{event.card.status ?? "Invoice"}</Badge>
</div>
{event.card.totalDue !== null ? (
<span className="font-semibold">
<span className="font-medium">
<MoneyValues amount={event.card.totalDue} />
</span>
) : null}

View File

@@ -136,7 +136,7 @@ export function CardItem({
<div className="min-w-0">
<div className="flex items-center gap-1.5">
<h3 className="truncate text-sm font-semibold text-foreground sm:text-base">
<h3 className="truncate text-sm font-medium text-foreground sm:text-base">
{name}
</h3>
{note ? (
@@ -188,13 +188,13 @@ export function CardItem({
<div className="flex items-center justify-between border-y py-3 text-xs font-medium text-muted-foreground sm:text-sm">
<span>
Fecha dia{" "}
<span className="font-semibold text-foreground">
<span className="font-medium text-foreground">
{formatDay(closingDay)}
</span>
</span>
<span>
Vence dia{" "}
<span className="font-semibold text-foreground">
<span className="font-medium text-foreground">
{formatDay(dueDay)}
</span>
</span>
@@ -206,7 +206,7 @@ export function CardItem({
<>
<div className="grid grid-cols-3 gap-4">
<div className="flex flex-col items-start gap-1">
<p className="text-sm font-semibold text-foreground">
<p className="text-sm font-medium text-foreground">
<MoneyValues amount={metrics[0].value} />
</p>
<span className="text-xs font-medium text-muted-foreground">
@@ -215,7 +215,7 @@ export function CardItem({
</div>
<div className="flex flex-col items-center gap-1">
<p className="flex items-center gap-1.5 text-sm font-semibold text-foreground">
<p className="flex items-center gap-1.5 text-sm font-medium text-foreground">
<span className="size-2 rounded-full bg-primary" />
<MoneyValues amount={metrics[1].value} />
</p>
@@ -225,7 +225,7 @@ export function CardItem({
</div>
<div className="flex flex-col items-end gap-1">
<p className="text-sm font-semibold text-foreground">
<p className="text-sm font-medium text-foreground">
<MoneyValues amount={metrics[2].value} />
</p>
<span className="text-xs font-medium text-muted-foreground">

View File

@@ -80,7 +80,7 @@ export function CategoryDetailHeader({
size="lg"
/>
<div className="space-y-2">
<h1 className="text-xl font-semibold leading-tight">
<h1 className="text-xl font-medium leading-tight">
{category.name}
</h1>
<div className="flex flex-wrap items-center gap-2 text-sm text-muted-foreground">
@@ -99,7 +99,7 @@ export function CategoryDetailHeader({
<p className="text-xs font-medium uppercase tracking-wide text-muted-foreground">
Total em {currentPeriodLabel}
</p>
<p className="mt-1 text-2xl font-semibold">
<p className="mt-1 text-2xl font-medium">
{currencyFormatter.format(currentTotal)}
</p>
</div>
@@ -117,7 +117,7 @@ export function CategoryDetailHeader({
</p>
<div
className={cn(
"mt-1 flex items-center gap-1 text-xl font-semibold",
"mt-1 flex items-center gap-1 text-xl font-medium",
variationColor,
)}
>

View File

@@ -97,7 +97,7 @@ export function BillPaymentDialog({
<p className="mb-1 text-xs font-medium text-muted-foreground uppercase tracking-wide">
Boleto
</p>
<p className="text-base font-semibold text-foreground">
<p className="text-base font-medium text-foreground">
{bill.name}
</p>
</div>
@@ -107,24 +107,24 @@ export function BillPaymentDialog({
<div className="rounded-xl border p-3">
<div className="mb-1.5 flex items-center gap-1.5 text-muted-foreground">
<RiMoneyDollarCircleLine className="size-3.5" />
<span className="text-[11px] font-semibold uppercase tracking-wide">
<span className="text-xs font-medium uppercase tracking-wide">
Valor
</span>
</div>
<MoneyValues
amount={bill.amount}
className="text-lg font-bold"
className="text-lg font-medium"
/>
</div>
<div className="rounded-xl border p-3">
<div className="mb-1.5 flex items-center gap-1.5 text-muted-foreground">
<RiCalendarLine className="size-3.5" />
<span className="text-[11px] font-semibold uppercase tracking-wide">
<span className="text-xs font-medium uppercase tracking-wide">
Vencimento
</span>
</div>
<p className="text-sm font-semibold text-foreground">
<p className="text-sm font-medium text-foreground">
{dueLabel?.replace("Vencimento: ", "") ?? "—"}
</p>
</div>

View File

@@ -343,10 +343,10 @@ export function CategoryBreakdownWidgetView({
<div className="rounded-lg border bg-background p-2 shadow-sm">
<div className="grid gap-2">
<div className="flex flex-col">
<span className="text-[0.70rem] uppercase text-muted-foreground">
<span className="text-xs uppercase text-muted-foreground">
{entry.name}
</span>
<span className="font-bold text-foreground">
<span className="font-medium text-foreground">
{formatCurrency(entry.value)}
</span>
<span className="text-xs text-muted-foreground">

View File

@@ -337,7 +337,7 @@ export function DashboardGridEditable({
<div className="absolute inset-0 z-10 bg-background/50 backdrop-blur-[1px] rounded-lg border-2 border-dashed border-primary/50 flex items-center justify-center">
<div className="flex flex-col items-center gap-2">
<RiDragMove2Line className="size-8 text-primary" />
<span className="text-xs font-bold">
<span className="text-xs font-medium">
Arraste para mover
</span>
<Button

View File

@@ -134,12 +134,12 @@ export function DashboardMetricsCards({ metrics }: DashboardMetricsCardsProps) {
<CardContent className="flex flex-col gap-3">
<div className="flex flex-wrap items-center justify-between gap-2 mt-1">
<MoneyValues
className="text-[1.55rem] leading-none font-medium"
className="text-2xl leading-none"
amount={metric.current}
/>
<div
className={cn(
"inline-flex items-center gap-1 text-xs font-medium",
"inline-flex items-center gap-1 text-xs ",
trendBadgeClass,
)}
>
@@ -150,7 +150,7 @@ export function DashboardMetricsCards({ metrics }: DashboardMetricsCardsProps) {
<div className="text-xs text-muted-foreground">
<MoneyValues
className="inline text-xs font-medium text-muted-foreground"
className="inline text-xs text-muted-foreground"
amount={metric.previous}
/>
<span className="ml-1">no mês anterior</span>

View File

@@ -8,7 +8,7 @@ export function DashboardWelcome({ name }: { name?: string | null }) {
return (
<section className="py-4">
<div className="tracking-tight">
<h1 className="text-xl">
<h1 className="text-xl font-medium">
{greeting}, {displayName}
</h1>
<h2 className="text-sm mt-1 text-muted-foreground">{formattedDate}</h2>

View File

@@ -137,7 +137,7 @@ export function InstallmentAnalysisPage({
</p>
<MoneyValues
amount={grandTotal}
className="text-3xl font-bold text-primary"
className="text-3xl font-medium text-primary"
/>
<p className="text-sm text-muted-foreground">
{selectedCount} {selectedCount === 1 ? "parcela" : "parcelas"}{" "}

View File

@@ -95,7 +95,7 @@ export function InstallmentGroupCard({
<span className="text-xs text-muted-foreground">Total:</span>
<MoneyValues
amount={totalAmount}
className="text-base font-bold"
className="text-base font-medium"
/>
</div>
<div className="flex items-center gap-1">

View File

@@ -100,7 +100,7 @@ export function InvoiceListItem({ invoice, onPay }: InvoiceListItemProps) {
)}
</p>
</div>
<div className="text-sm font-semibold text-foreground">
<div className="text-sm font-medium text-foreground">
<MoneyValues amount={share.amount} />
</div>
</li>

View File

@@ -46,7 +46,7 @@ export function InvoiceLogo({
) : (
<span
className={cn(
"text-sm font-semibold uppercase text-muted-foreground",
"text-sm font-medium uppercase text-muted-foreground",
tone === "accent" && "text-primary",
fallbackClassName,
)}

View File

@@ -110,10 +110,10 @@ export function InvoicePaymentDialog({
fallbackClassName="text-xs"
/>
<div className="min-w-0">
<p className="text-[11px] font-medium text-muted-foreground uppercase tracking-wide">
<p className="text-xs font-medium text-muted-foreground uppercase tracking-wide">
Cartão
</p>
<p className="truncate text-base font-semibold text-foreground">
<p className="truncate text-base font-medium text-foreground">
{invoice.cardName}
</p>
</div>
@@ -124,26 +124,26 @@ export function InvoicePaymentDialog({
<div className="rounded-xl border p-3">
<div className="mb-1.5 flex items-center gap-1.5 text-muted-foreground">
<RiMoneyDollarCircleLine className="size-3.5" />
<span className="text-[11px] font-semibold uppercase tracking-wide">
<span className="text-xs font-medium uppercase tracking-wide">
Total da fatura
</span>
</div>
<MoneyValues
amount={Math.abs(invoice.totalAmount)}
className="text-lg font-bold"
className="text-lg font-medium"
/>
</div>
<div className="rounded-xl border p-3">
<div className="mb-1.5 flex items-center gap-1.5 text-muted-foreground">
<RiCalendarLine className="size-3.5" />
<span className="text-[11px] font-semibold uppercase tracking-wide">
<span className="text-xs font-medium uppercase tracking-wide">
{invoice.paymentStatus === INVOICE_PAYMENT_STATUS.PAID
? "Pago em"
: "Vencimento"}
</span>
</div>
<p className="text-sm font-semibold text-foreground">
<p className="text-sm font-medium text-foreground">
{invoice.paymentStatus === INVOICE_PAYMENT_STATUS.PAID
? (paymentInfo?.label ?? "—")
: (dueInfo?.label ?? "—")}

View File

@@ -33,7 +33,7 @@ export function NoteListItem({
{getNoteTasksSummary(note)}
</Badge>
{createdAtLabel ? (
<p className="truncate text-[11px] text-muted-foreground">
<p className="truncate text-xs text-muted-foreground">
{createdAtLabel}
</p>
) : null}

View File

@@ -130,7 +130,7 @@ export function PurchasesByCategoryWidget({
<SelectContent>
{Object.entries(categoriesByType).map(([type, categories]) => (
<div key={type}>
<div className="px-2 py-1.5 text-xs font-semibold text-muted-foreground">
<div className="px-2 py-1.5 text-xs font-medium text-muted-foreground">
{CATEGORY_TYPE_LABEL[
type as keyof typeof CATEGORY_TYPE_LABEL
] ?? type}

View File

@@ -144,7 +144,7 @@ export const InboxCard = memo(function InboxCard({
<CardContent className="flex-1 py-2">
{item.originalTitle && (
<p className="mb-1 text-sm font-bold">{item.originalTitle}</p>
<p className="mb-1 text-sm font-medium">{item.originalTitle}</p>
)}
<p className="line-clamp-4 whitespace-pre-wrap text-sm text-muted-foreground">
{item.originalText}

View File

@@ -82,7 +82,7 @@ export function InsightsGrid({ insights }: InsightsGridProps) {
<CardHeader>
<div className="flex items-center gap-2">
<Icon className={cn("size-5", colors.chatAiIcon)} />
<CardTitle className={cn("font-semibold", colors.titleText)}>
<CardTitle className={cn("font-medium", colors.titleText)}>
{categoryConfig.title}
</CardTitle>
</div>

View File

@@ -267,7 +267,7 @@ function ErrorState({
return (
<div className="flex flex-col items-center justify-center gap-4 py-12 px-4 text-center">
<div className="flex flex-col gap-2">
<h3 className="text-lg font-semibold text-destructive">
<h3 className="text-lg font-medium text-destructive">
Erro ao gerar insights
</h3>
<p className="text-sm text-muted-foreground max-w-md">{error}</p>

View File

@@ -133,7 +133,7 @@ export function ModelSelector({
<Card className="grid grid-cols-1 lg:grid-cols-[1fr,auto] gap-6 items-start p-6">
{/* Descrição */}
<div className="space-y-2">
<h3 className="text-lg font-semibold">Definir modelo de análise</h3>
<h3 className="text-lg font-medium">Definir modelo de análise</h3>
<p className="text-sm text-muted-foreground leading-relaxed">
Escolha o provedor de IA e o modelo específico que será utilizado para
gerar insights sobre seus dados financeiros. <br />

View File

@@ -171,12 +171,12 @@ export function InvoiceSummaryCard({
/>
</div>
) : cardBrand ? (
<span className="flex size-10 shrink-0 items-center justify-center rounded-full border bg-background text-xs font-semibold text-muted-foreground">
<span className="flex size-10 shrink-0 items-center justify-center rounded-full border bg-background text-xs font-medium text-muted-foreground">
{cardBrand.slice(0, 2).toUpperCase()}
</span>
) : null}
<div className="min-w-0">
<h2 className="truncate text-sm font-semibold text-foreground">
<h2 className="truncate text-sm font-medium text-foreground">
{cardName}
</h2>
<p className="text-xs text-muted-foreground">
@@ -195,14 +195,14 @@ export function InvoiceSummaryCard({
<MoneyValues
amount={totalAmount}
className={cn(
"text-3xl leading-none font-semibold tracking-tight sm:text-[2rem]",
"text-3xl leading-none font-medium tracking-tight sm:text-[2rem]",
isPaid ? "text-success" : "text-foreground",
)}
/>
<div className="flex items-center gap-2">
<Badge
variant={INVOICE_STATUS_BADGE_VARIANT[invoiceStatus]}
className="text-[11px]"
className="text-xs"
>
{INVOICE_STATUS_LABEL[invoiceStatus]}
</Badge>
@@ -218,20 +218,20 @@ export function InvoiceSummaryCard({
{/* Linha 3 — metadados do cartão */}
<div className="grid grid-cols-2 gap-2 sm:grid-cols-4">
<MetaItem label="Vencimento">
<span className="text-sm font-semibold text-foreground">
<span className="text-sm font-medium text-foreground">
Dia {formatDay(dueDay)}
</span>
</MetaItem>
<MetaItem label="Fechamento">
<span className="text-sm font-semibold text-foreground">
<span className="text-sm font-medium text-foreground">
Dia {formatDay(closingDay)}
</span>
</MetaItem>
{typeof limitAmount === "number" ? (
<MetaItem label="Limite">
<span className="text-sm font-semibold text-foreground">
<span className="text-sm font-medium text-foreground">
{formatCurrency(limitAmount)}
</span>
</MetaItem>
@@ -249,7 +249,7 @@ export function InvoiceSummaryCard({
className="h-4 w-auto shrink-0"
/>
) : null}
<span className="text-sm font-semibold text-foreground truncate">
<span className="text-sm font-medium text-foreground truncate">
{cardBrand}
</span>
</div>

View File

@@ -99,11 +99,11 @@ function StepCard({
<Card className="border">
<CardContent>
<div className="flex gap-3 md:gap-4">
<div className="flex h-9 w-9 md:h-10 md:w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground font-bold text-sm md:text-base">
<div className="flex h-9 w-9 md:h-10 md:w-10 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground font-medium text-sm md:text-base">
{step}
</div>
<div className="min-w-0">
<h3 className="font-semibold mb-1.5 md:mb-2">{title}</h3>
<h3 className="font-medium mb-1.5 md:mb-2">{title}</h3>
{children}
</div>
</div>

View File

@@ -77,7 +77,7 @@ export function NoteCard({
<CardContent className="flex min-h-0 flex-1 flex-col gap-4">
<div className="flex shrink-0 items-start justify-between gap-3">
<div className="flex min-w-0 flex-col gap-1">
<h3 className="text-lg font-semibold leading-tight text-foreground wrap-break-word">
<h3 className="text-lg font-medium leading-tight text-foreground wrap-break-word">
{displayTitle}
</h3>
{createdAtLabel && (

View File

@@ -43,7 +43,7 @@ export function PayerCardUsageCard({ items }: PagadorCardUsageCardProps) {
className="h-full w-full object-contain"
/>
) : (
<span className="text-sm font-semibold uppercase text-muted-foreground">
<span className="text-sm font-medium uppercase text-muted-foreground">
{initials}
</span>
)}

View File

@@ -118,7 +118,7 @@ export function PayerHeaderCard({
<div className="flex flex-1 flex-col gap-2">
<div className="flex flex-wrap items-center gap-2">
<CardTitle className="text-xl font-semibold text-foreground">
<CardTitle className="text-xl font-medium text-foreground">
{payer.name}
</CardTitle>
{isAdmin ? (
@@ -197,11 +197,11 @@ export function PayerHeaderCard({
<DialogTitle>Confirmar envio do resumo</DialogTitle>
<DialogDescription>
Resumo de{" "}
<span className="font-semibold text-foreground">
<span className="font-medium text-foreground">
{summary.periodLabel}
</span>{" "}
para{" "}
<span className="font-semibold text-foreground">
<span className="font-medium text-foreground">
{payer.email}
</span>
</DialogDescription>
@@ -218,7 +218,7 @@ export function PayerHeaderCard({
<p className="text-sm font-medium text-muted-foreground">
Total de Despesas
</p>
<p className="text-2xl font-bold text-foreground">
<p className="text-2xl font-medium text-foreground">
{formatCurrency(summary.totalExpenses)}
</p>
</div>
@@ -235,11 +235,11 @@ export function PayerHeaderCard({
<div className="rounded-lg border p-3">
<div className="mb-2 flex items-center gap-2 text-muted-foreground">
<RiBankCard2Line className="size-4" />
<span className="text-xs font-semibold uppercase">
<span className="text-xs font-medium uppercase">
Cartões
</span>
</div>
<p className="text-lg font-bold text-foreground">
<p className="text-lg font-medium text-foreground">
{formatCurrency(summary.paymentSplits.card)}
</p>
</div>
@@ -247,11 +247,11 @@ export function PayerHeaderCard({
<div className="rounded-lg border p-3">
<div className="mb-2 flex items-center gap-2 text-muted-foreground">
<RiBillLine className="size-4" />
<span className="text-xs font-semibold uppercase">
<span className="text-xs font-medium uppercase">
Boletos
</span>
</div>
<p className="text-lg font-bold text-foreground">
<p className="text-lg font-medium text-foreground">
{formatCurrency(summary.paymentSplits.boleto)}
</p>
</div>
@@ -259,11 +259,11 @@ export function PayerHeaderCard({
<div className="rounded-lg border p-3">
<div className="mb-2 flex items-center gap-2 text-muted-foreground">
<RiExchangeDollarLine className="size-4" />
<span className="text-xs font-semibold uppercase">
<span className="text-xs font-medium uppercase">
Pix/Débito
</span>
</div>
<p className="text-lg font-bold text-foreground">
<p className="text-lg font-medium text-foreground">
{formatCurrency(summary.paymentSplits.instant)}
</p>
</div>
@@ -274,7 +274,7 @@ export function PayerHeaderCard({
<div className="rounded-lg border p-3">
<div className="mb-2 flex items-center gap-2">
<RiBankCard2Line className="size-4 text-muted-foreground" />
<span className="text-xs font-semibold uppercase text-muted-foreground">
<span className="text-xs font-medium uppercase text-muted-foreground">
Cartões Utilizados
</span>
</div>
@@ -299,14 +299,14 @@ export function PayerHeaderCard({
<div className="rounded-lg border p-3">
<div className="mb-2 flex items-center gap-2">
<RiBillLine className="size-4 text-muted-foreground" />
<span className="text-xs font-semibold uppercase text-muted-foreground">
<span className="text-xs font-medium uppercase text-muted-foreground">
Status de Boletos
</span>
</div>
<div className="grid gap-2 sm:grid-cols-2">
<div>
<p className="text-xs text-muted-foreground">Pagos</p>
<p className="text-sm font-semibold text-success">
<p className="text-sm font-medium text-success">
{formatCurrency(summary.boletoStats.paidAmount)}{" "}
<span className="text-xs font-normal">
({summary.boletoStats.paidCount})
@@ -317,7 +317,7 @@ export function PayerHeaderCard({
<p className="text-xs text-muted-foreground">
Pendentes
</p>
<p className="text-sm font-semibold text-warning">
<p className="text-sm font-medium text-warning">
{formatCurrency(summary.boletoStats.pendingAmount)}{" "}
<span className="text-xs font-normal">
({summary.boletoStats.pendingCount})

View File

@@ -50,7 +50,7 @@ const ValueLabel = (props: LabelProps) => {
y={labelY}
fill="currentColor"
textAnchor="middle"
className="text-[11px] font-semibold text-muted-foreground"
className="text-xs font-medium text-muted-foreground"
>
{amount}
</text>
@@ -63,7 +63,7 @@ export function PayerHistoryCard({ data }: PagadorHistoryCardProps) {
return (
<Card className="border">
<CardHeader className="gap-1.5 pb-3">
<CardTitle className="text-lg font-semibold">
<CardTitle className="text-lg font-medium">
Evolução (últimos 6 meses)
</CardTitle>
<p className="text-xs text-muted-foreground">

View File

@@ -31,7 +31,7 @@ export function PagadorInfoCard({ payer }: PayerInfoCardProps) {
return (
<Card className="border gap-4">
<CardHeader className="gap-1.5">
<CardTitle className="text-lg font-semibold">
<CardTitle className="text-lg font-medium">
Detalhes do pagador
</CardTitle>
<CardDescription>
@@ -79,7 +79,7 @@ export function PagadorInfoCard({ payer }: PayerInfoCardProps) {
<InfoItem
label="Aviso"
value={
<span className="text-[13px] text-warning">
<span className="text-sm text-warning">
Cadastre um e-mail para permitir o envio automático.
</span>
}
@@ -118,7 +118,7 @@ type InfoItemProps = {
function InfoItem({ label, value, className }: InfoItemProps) {
return (
<div className={cn("space-y-1", className)}>
<span className="text-xs font-semibold uppercase tracking-wide text-muted-foreground/80">
<span className="text-xs font-medium uppercase tracking-wide text-muted-foreground/80">
{label}
</span>
<div className="text-base text-foreground">{value}</div>

View File

@@ -53,7 +53,7 @@ export function PayerLeaveShareCard({
return (
<Card className="border">
<CardHeader>
<CardTitle className="text-base font-semibold">
<CardTitle className="text-base font-medium">
Acesso Compartilhado
</CardTitle>
<p className="text-sm text-muted-foreground">
@@ -63,7 +63,7 @@ export function PayerLeaveShareCard({
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-col gap-2 rounded-lg border border-dashed p-4 text-sm">
<span className="text-xs font-semibold uppercase text-muted-foreground/80">
<span className="text-xs font-medium uppercase text-muted-foreground/80">
Informações do compartilhamento
</span>
<div className="flex flex-col gap-1">

View File

@@ -51,7 +51,7 @@ export function PayerMonthlySummaryCard({
return (
<Card>
<CardHeader className="flex flex-col gap-1.5">
<CardTitle className="text-lg font-semibold">Totais do mês</CardTitle>
<CardTitle className="text-lg font-medium">Totais do mês</CardTitle>
<p className="text-xs text-muted-foreground">
{periodLabel} - Despesas por forma de pagamento
</p>
@@ -65,7 +65,7 @@ export function PayerMonthlySummaryCard({
</span>
<MoneyValues
amount={breakdown.totalExpenses}
className="block text-2xl font-semibold text-foreground"
className="block text-2xl font-medium text-foreground"
/>
</div>
@@ -100,7 +100,7 @@ export function PayerMonthlySummaryCard({
totalBase > 0 ? Math.round((entry.value / totalBase) * 100) : 0;
return (
<div key={entry.key} className="space-y-1 rounded-lg border p-3">
<span className="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground/70">
<span className="flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground/70">
<span
className={cn("size-2 rounded-full", entry.color)}
aria-hidden
@@ -109,7 +109,7 @@ export function PayerMonthlySummaryCard({
</span>
<MoneyValues
amount={entry.value}
className="block text-lg font-semibold text-foreground"
className="block text-lg font-medium text-foreground"
/>
<span className="text-xs text-muted-foreground">
{percent}% das despesas

View File

@@ -84,9 +84,7 @@ export function PayerSharingCard({
return (
<Card className="border">
<CardHeader>
<CardTitle className="text-lg font-semibold">
Compartilhamentos
</CardTitle>
<CardTitle className="text-lg font-medium">Compartilhamentos</CardTitle>
<p className="text-sm text-muted-foreground">
Compartilhe o código abaixo com outra pessoa. Ela poderá adicioná-lo
na página de pagadores usando a opção Adicionar por código para ter
@@ -95,7 +93,7 @@ export function PayerSharingCard({
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-col gap-2 rounded-lg border border-dashed p-4 text-sm">
<span className="text-xs font-semibold uppercase text-muted-foreground/80">
<span className="text-xs font-medium uppercase text-muted-foreground/80">
Código de compartilhamento
</span>
<div className="flex flex-wrap items-center gap-2">

View File

@@ -42,7 +42,7 @@ export function PayerCard({ payer, onEdit, onRemove }: PayerCardProps) {
{/* Nome e badges */}
<div className="flex items-center gap-1.5">
<h3 className="text-base font-semibold text-foreground">
<h3 className="text-base font-medium text-foreground">
{payer.name}
</h3>
{isAdmin ? (

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}

View File

@@ -272,7 +272,7 @@ export function ApiTokensForm({ tokens }: ApiTokensFormProps) {
</div>
<div>
<div className="flex items-center gap-2">
<span className="text-sm font-bold">{token.name}</span>
<span className="text-sm font-medium">{token.name}</span>
<Badge variant="outline" className="text-xs font-mono">
{token.tokenPrefix}...
</Badge>

View File

@@ -32,7 +32,7 @@ export function ChangelogTab({ versions }: { versions: ChangelogVersion[] }) {
{versions.map((version) => (
<Card key={version.version} className="p-6">
<div className="flex items-baseline gap-3">
<h3 className="text-lg font-bold">v{version.version}</h3>
<h3 className="text-lg font-medium">v{version.version}</h3>
<span className="text-sm text-muted-foreground">
{version.date}
</span>

View File

@@ -84,7 +84,7 @@ export function DeleteAccountForm() {
<div className="rounded-lg border p-4">
<div className="space-y-4">
<div>
<h3 className="font-semibold">Zerar conta</h3>
<h3 className="font-medium">Zerar conta</h3>
<p className="text-sm text-muted-foreground">
Apaga todos os dados do OpenMonetis e deixa sua conta no estado
inicial, mantendo seu login e credenciais de acesso.
@@ -120,7 +120,7 @@ export function DeleteAccountForm() {
<div className="rounded-lg border border-destructive/30 bg-destructive/5 p-4">
<div className="space-y-4">
<div>
<h3 className="font-semibold text-destructive">Deletar conta</h3>
<h3 className="font-medium text-destructive">Deletar conta</h3>
<p className="text-sm text-muted-foreground">
Remove seu usuário e todos os dados associados de forma
permanente.
@@ -131,7 +131,7 @@ export function DeleteAccountForm() {
<li>Lançamentos, orçamentos e anotações</li>
<li>Contas, cartões e categorias</li>
<li>Pagadores, credenciais e configurações</li>
<li className="font-bold">
<li className="font-medium">
Resumindo tudo, sua conta será permanentemente removida
</li>
</ul>

View File

@@ -348,7 +348,7 @@ export function PasskeysForm() {
) : (
<>
<div className="flex items-center gap-2">
<span className="text-sm font-bold truncate">
<span className="text-sm font-medium truncate">
{pk.name || "Passkey sem nome"}
</span>
<Button

View File

@@ -145,7 +145,7 @@ export function PreferencesForm({
{/* Seção: Lançamentos */}
<section className="space-y-4">
<div>
<h3 className="text-base font-semibold">Lançamentos</h3>
<h3 className="text-base font-medium">Lançamentos</h3>
<p className="text-sm text-muted-foreground">
Configurações de exibição da tabela de movimentações.
</p>

View File

@@ -342,7 +342,7 @@ export function AnticipateInstallmentsDialog({
{/* Seção 3: Resumo */}
{selectedIds.length > 0 && (
<div className="rounded-lg border bg-muted/20 p-3">
<h4 className="text-sm font-semibold mb-2">Resumo</h4>
<h4 className="text-sm font-medium mb-2">Resumo</h4>
<dl className="space-y-1.5 text-sm">
<div className="flex items-center justify-between">
<dt className="text-muted-foreground">
@@ -367,7 +367,7 @@ export function AnticipateInstallmentsDialog({
)}
<div className="flex items-center justify-between border-t pt-1.5">
<dt className="font-medium">Total</dt>
<dd className="text-base font-semibold tabular-nums text-primary">
<dd className="text-base font-medium tabular-nums text-primary">
<MoneyValues amount={finalAmount} className="text-sm" />
</dd>
</div>

View File

@@ -116,7 +116,7 @@ export function InstallmentSelectionTable({
<TableCell className="text-muted-foreground">
{formatDate(inst.dueDate)}
</TableCell>
<TableCell className="text-right font-semibold tabular-nums">
<TableCell className="text-right font-medium tabular-nums">
<MoneyValues amount={Number(inst.amount)} />
</TableCell>
</TableRow>
@@ -134,7 +134,7 @@ export function InstallmentSelectionTable({
? "parcela selecionada"
: "parcelas selecionadas"}
</span>
<span className="font-semibold">
<span className="font-medium">
Total:{" "}
<MoneyValues
amount={installments

View File

@@ -272,14 +272,14 @@ export function MassAddDialog({
<DialogDescription>
Configure os valores padrão e adicione várias transações de uma vez.
Todos os lançamentos adicionados aqui são{" "}
<span className="font-bold">sempre à vista</span>.
<span className="font-medium">sempre à vista</span>.
</DialogDescription>
</DialogHeader>
<div className="space-y-4">
{/* Fixed Fields Section */}
<div className="space-y-4">
<h3 className="text-sm font-semibold">Valores Padrão</h3>
<h3 className="text-sm font-medium">Valores Padrão</h3>
<div className="grid gap-3 grid-cols-1 sm:grid-cols-3">
{/* Transaction Type */}
<div className="space-y-2">
@@ -452,7 +452,7 @@ export function MassAddDialog({
{/* Transactions Section */}
<div className="space-y-4">
<h3 className="text-sm font-semibold">Lançamentos</h3>
<h3 className="text-sm font-medium">Lançamentos</h3>
<div className="space-y-3">
{transactions.map((transaction, index) => (

View File

@@ -110,7 +110,7 @@ export function AnticipationCard({
? "Valor Final"
: "Valor Total"}
</dt>
<dd className="mt-1 text-lg font-semibold tabular-nums text-primary">
<dd className="mt-1 text-lg font-medium tabular-nums text-primary">
<MoneyValues
amount={
Number(anticipation.totalAmount) < 0

View File

@@ -104,7 +104,7 @@ export function EstabelecimentoInput({
className="cursor-pointer"
>
<span
className={`truncate flex-1 ${value === item ? "font-semibold" : ""}`}
className={`truncate flex-1 ${value === item ? "font-medium" : ""}`}
>
{item}
</span>

View File

@@ -223,7 +223,7 @@ const buildColumns = ({
<span className="flex items-center gap-1">
<Tooltip>
<TooltipTrigger asChild>
<span className="line-clamp-2 max-w-[180px] font-bold truncate">
<span className="line-clamp-2 max-w-[180px] font-medium truncate">
{name}
</span>
</TooltipTrigger>

View File

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

View File

@@ -34,7 +34,7 @@ export function CalculatorDisplay({
<div className="mt-auto flex items-end justify-end gap-2">
<div
className={cn(
"truncate text-right font-semibold tracking-tight tabular-nums leading-none transition-all",
"truncate text-right font-medium tracking-tight tabular-nums leading-none transition-all",
isResultView ? "text-2xl" : "text-3xl",
)}
>

View File

@@ -32,7 +32,7 @@ export function CalculatorKeypad({
variant={isActive ? "default" : (btn.variant ?? "outline")}
onClick={btn.onClick}
className={cn(
"h-12 text-base font-semibold",
"h-12 text-base font-medium",
btn.colSpan === 2 && "col-span-2",
btn.colSpan === 3 && "col-span-3",
isActive &&

View File

@@ -23,7 +23,7 @@ export function EstablishmentLogo({
return (
<div
className={cn(
"flex shrink-0 items-center justify-center rounded-full font-bold",
"flex shrink-0 items-center justify-center rounded-full font-medium",
className,
)}
style={{

View File

@@ -47,7 +47,7 @@ export default function MonthNavigation() {
<div className="flex items-center">
<div
className="mx-1 space-x-1 capitalize font-semibold"
className="mx-1 space-x-1 capitalize font-medium"
aria-current={!isDifferentFromCurrent ? "date" : undefined}
aria-label={`Período selecionado: ${currentMonthLabel}`}
>

View File

@@ -96,7 +96,7 @@ export function FeedbackDialogBody({ onClose }: { onClose?: () => void }) {
<Icon className={cn("h-5 w-5", item.color)} />
</div>
<div className="flex-1 text-left space-y-1">
<h3 className="font-semibold text-sm flex items-center gap-2">
<h3 className="font-medium text-sm flex items-center gap-2">
{item.title}
<RiExternalLinkLine className="h-3.5 w-3.5 text-muted-foreground" />
</h3>

View File

@@ -53,7 +53,7 @@ export function MobileLink({
<span className="flex-1 flex flex-col gap-0.5">
<span>{children}</span>
{description && (
<span className="text-[11px] text-muted-foreground leading-snug">
<span className="text-xs text-muted-foreground leading-snug">
{description}
</span>
)}
@@ -69,7 +69,7 @@ export function MobileLink({
export function MobileSectionLabel({ label }: { label: string }) {
return (
<p className="mt-3 mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">
<p className="mt-3 mb-1 px-3 text-xs font-medium uppercase tracking-wider text-muted-foreground">
{label}
</p>
);

View File

@@ -42,11 +42,7 @@ export function NavDropdown({ items }: NavDropdownProps) {
{item.icon}
</span>
<span className="flex flex-col min-w-0">
<span
className={cn("font-medium", isActive && "font-semibold")}
>
{item.label}
</span>
<span className="font-medium">{item.label}</span>
{item.description && (
<span className="text-xs text-muted-foreground truncate lowercase">
{item.description}

View File

@@ -47,7 +47,7 @@ export function NavToolsDropdown({ onOpenCalculator }: NavToolsDropdownProps) {
{privacyMode && (
<Badge
variant="secondary"
className="text-[10px] px-1.5 py-0 h-4 text-success"
className="text-xs px-1.5 py-0 h-4 text-success"
>
Ativo
</Badge>
@@ -100,7 +100,7 @@ export function MobileTools({ onClose, onOpenCalculator }: MobileToolsProps) {
{privacyMode && (
<Badge
variant="secondary"
className="text-[10px] px-1.5 py-0 h-4 text-success"
className="text-xs px-1.5 py-0 h-4 text-success"
>
Ativo
</Badge>

View File

@@ -91,7 +91,7 @@ function SectionLabel({
return (
<div className="flex items-center gap-1.5 p-2 first:pt-1">
<span className="text-muted-foreground">{icon}</span>
<span className="text-[11px] font-semibold uppercase tracking-wide text-muted-foreground">
<span className="text-xs font-medium uppercase tracking-wide text-muted-foreground">
{title}
</span>
</div>

View File

@@ -28,7 +28,7 @@ export function NotificationBellHeader({
}: NotificationBellHeaderProps) {
return (
<div className="border-b px-3 py-2.5">
<div className="flex items-center justify-between gap-2 text-sm font-semibold">
<div className="flex items-center justify-between gap-2 text-sm font-medium">
<span>Notificações</span>
{hasAnySourceItems ? (
<Badge variant="outline" className="text-xs font-medium">

View File

@@ -9,11 +9,11 @@ export default function PageDescription({
}) {
return (
<div>
<h1 className="text-2xl font-semibold flex items-center gap-1 tracking-tighter">
<h1 className="text-xl font-medium flex items-center gap-1 tracking-tight">
<span className="text-primary">{icon}</span>
{title}
</h1>
<h2 className="text-sm max-w-2xl text-muted-foreground leading-relaxed mt-2">
<h2 className="text-sm max-w-2xl text-muted-foreground leading-relaxed mt-1.5">
{subtitle}
</h2>
</div>

View File

@@ -89,7 +89,7 @@ export function PaymentSuccess({
</div>
<div className="space-y-2">
<DialogTitle className="text-xl font-bold">{title}</DialogTitle>
<DialogTitle className="text-xl font-medium">{title}</DialogTitle>
<DialogDescription className="text-sm leading-relaxed">
{description}
</DialogDescription>

View File

@@ -172,7 +172,7 @@ function CategoryReportTableSkeleton() {
<TableFooter>
<TableRow>
{/* Total label */}
<TableCell className="font-bold">
<TableCell className="font-medium">
<Skeleton className="h-5 w-16 rounded-md bg-foreground/10" />
</TableCell>
{/* Period totals */}

View File

@@ -98,7 +98,7 @@ function AlertDialogTitle({
return (
<AlertDialogPrimitive.Title
data-slot="alert-dialog-title"
className={cn("text-lg font-semibold", className)}
className={cn("text-lg font-medium", className)}
{...props}
/>
);

View File

@@ -7,7 +7,7 @@ function Card({ className, ...props }: React.ComponentProps<"div">) {
<div
data-slot="card"
className={cn(
"bg-card text-card-foreground flex flex-col gap-4 border py-6 rounded-lg",
"bg-card text-card-foreground flex flex-col gap-4 border py-6 rounded-lg hover:border-primary/40",
className,
)}
{...props}
@@ -32,7 +32,7 @@ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-title"
className={cn("leading-none font-semibold", className)}
className={cn("text-base leading-none font-medium", className)}
{...props}
/>
);

View File

@@ -106,7 +106,7 @@ function DialogTitle({
return (
<DialogPrimitive.Title
data-slot="dialog-title"
className={cn("text-lg leading-none font-semibold", className)}
className={cn("text-lg leading-none font-medium", className)}
{...props}
/>
);

View File

@@ -102,7 +102,7 @@ function DrawerTitle({
return (
<DrawerPrimitive.Title
data-slot="drawer-title"
className={cn("text-foreground font-semibold", className)}
className={cn("text-foreground font-medium", className)}
{...props}
/>
);

View File

@@ -123,7 +123,7 @@ function MonthCal({
return (
<>
<div className="flex justify-center pt-1 relative items-center">
<div className="text-sm font-bold">
<div className="text-sm font-medium">
{callbacks?.yearLabel ? callbacks?.yearLabel(menuYear) : menuYear}
</div>
<div className="space-x-1 flex items-center">

View File

@@ -107,7 +107,7 @@ function SheetTitle({
return (
<SheetPrimitive.Title
data-slot="sheet-title"
className={cn("text-foreground font-semibold", className)}
className={cn("text-foreground font-medium", className)}
{...props}
/>
);

View File

@@ -42,7 +42,7 @@ function TabsTrigger({
<TabsPrimitive.Trigger
data-slot="tabs-trigger"
className={cn(
"ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background text-muted-foreground data-[state=active]:border-b-primary data-[state=active]:text-foreground relative inline-flex h-9 items-center justify-center rounded-none border-b-2 border-b-transparent bg-transparent px-4 py-1 pt-2 pb-3 text-sm font-semibold whitespace-nowrap shadow-none transition-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-none",
"ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background text-muted-foreground data-[state=active]:border-b-primary data-[state=active]:text-foreground relative inline-flex h-9 items-center justify-center rounded-none border-b-2 border-b-transparent bg-transparent px-4 py-1 pt-2 pb-3 text-sm font-medium whitespace-nowrap shadow-none transition-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-none",
className,
)}
{...props}