feat: complete NutriScan redesign

This commit is contained in:
evandrodevbr committed 2026-07-16 16:31:50 -03:00
1 parent c1fe4af997
commit f71cd167b3
163 files changed
+30802 -14169

No files matched your search

+81 -126
View File
@@ -1,8 +1,7 @@
"use client";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Heart, Check, Code } from "lucide-react";
import { Heart, Check } from "lucide-react";
import { cn } from "@/lib/utils";
interface DonateCardProps {
className?: string;
@@ -10,141 +9,97 @@ interface DonateCardProps {
}
export function DonateCard({ className = "", variant = "default" }: DonateCardProps) {
// Layout mobile horizontal
/* ── Mobile horizontal ───────────────────────────────────────────────── */
if (variant === "mobile") {
return (
<Card
className={`donate-card group relative overflow-hidden hover:shadow-lg transition-all duration-200 bg-gradient-to-r from-blue-50 to-green-50 dark:from-blue-900/20 dark:to-green-900/20 border border-blue-200 dark:border-blue-800 ${className}`}
<article
className={cn(
"card-warm rounded-xl overflow-hidden flex",
"border-t-2 border-t-[var(--accent)]",
className
)}
>
<div className="flex gap-3 p-3">
{/* Ícone - tamanho ajustado */}
<div className="w-16 h-16 flex-shrink-0 relative bg-gradient-to-br from-blue-500 to-green-500 rounded-lg overflow-hidden flex items-center justify-center">
<Heart className="w-8 h-8 text-white animate-pulse" />
</div>
{/* Conteúdo - melhor espaçamento */}
<div className="flex-1 min-w-0 flex flex-col">
<div className="flex-1">
{/* Título */}
<h3 className="font-bold text-sm text-gray-900 dark:text-white mb-1">
Ajude o Projeto
</h3>
{/* Texto persuasivo */}
<p className="text-xs text-gray-600 dark:text-gray-300 mb-2">
Mantenha este serviço gratuito e acessível para todos
</p>
{/* Benefício rápido */}
<div className="flex items-center gap-1 text-xs text-green-600 dark:text-green-400">
<Check className="w-3 h-3" />
<span>Qualquer valor faz diferença</span>
</div>
</div>
{/* Botão CTA - menor */}
<a
href="https://buymeacoffee.com/evandrotruuta"
target="_blank"
rel="noopener noreferrer"
className="mt-2 inline-block"
>
<Button
size="sm"
className="w-full bg-gradient-to-r from-blue-600 to-green-600 hover:from-blue-700 hover:to-green-700 text-white text-xs font-medium h-8"
>
<Heart className="w-3 h-3 mr-1" />
Doar
</Button>
</a>
<div className="flex-1 p-4 flex flex-col justify-between gap-3">
<div>
<h3 className="font-sans font-semibold text-[var(--fg-primary)] text-sm mb-1">
Apoie o Projeto
</h3>
<p className="label text-[var(--fg-muted)]">
Mantenha o NutriScan gratuito e independente.
</p>
</div>
<a
href="https://buymeacoffee.com/evandrotruuta"
target="_blank"
rel="noopener noreferrer"
className="btn-accent self-start py-2 px-4 text-xs"
>
<Heart className="w-3 h-3" strokeWidth={1.5} />
Contribuir
</a>
</div>
</Card>
</article>
);
}
// Layout desktop padrão
/* ── Desktop card ────────────────────────────────────────────────────── */
return (
<Card
className={`donate-card group relative overflow-hidden hover:shadow-2xl transition-all duration-300 hover:-translate-y-1 bg-gradient-to-br from-blue-50 to-green-50 dark:from-blue-900/20 dark:to-green-900/20 border border-blue-200 dark:border-blue-800 ${className}`}
<article
className={cn(
"card-warm hover-lift rounded-xl overflow-hidden flex flex-col h-full",
"border-t-2 border-t-[var(--accent)]",
className
)}
>
{/* Header com ícone animado */}
<div className="relative h-32 bg-gradient-to-br from-blue-500 to-green-500 overflow-hidden">
<div className="absolute inset-0 flex items-center justify-center">
<Heart className="w-16 h-16 text-white animate-pulse" />
<div className="p-8 flex flex-col flex-1 gap-6">
{/* Eyebrow */}
<span className="label text-[var(--accent)]">Apoie o Projeto</span>
{/* Headline */}
<div>
<h3 className="font-display text-display-sm text-[var(--fg-primary)] leading-tight mb-2">
Transparência alimentar,{" "}
<em className="font-display-i">para todos.</em>
</h3>
<p className="text-sm text-[var(--fg-secondary)] leading-relaxed">
O NutriScan opera sem anúncios e sem venda de dados. Sua
contribuição mantém o projeto vivo.
</p>
</div>
{/* Overlay sutil */}
<div className="absolute inset-0 bg-gradient-to-t from-black/10 to-transparent" />
{/* Badge de destaque */}
<div className="absolute top-3 right-3">
<div className="bg-white/90 dark:bg-gray-800/90 text-blue-600 dark:text-blue-400 rounded-full px-3 py-1 text-xs font-bold">
💛 Apoie
</div>
{/* Benefits */}
<ul className="space-y-2.5">
{[
"Servidores sempre disponíveis",
"Novas funcionalidades",
"Acesso gratuito para todos",
].map((item) => (
<li key={item} className="flex items-center gap-2.5">
<Check
className="w-3.5 h-3.5 text-[var(--accent)] shrink-0"
strokeWidth={2}
/>
<span className="text-sm text-[var(--fg-secondary)]">{item}</span>
</li>
))}
</ul>
{/* CTA */}
<div className="mt-auto pt-2">
<a
href="https://buymeacoffee.com/evandrotruuta"
target="_blank"
rel="noopener noreferrer"
className="btn-accent w-full justify-center py-3.5 text-sm"
>
<Heart className="w-4 h-4" strokeWidth={1.5} />
Contribuir agora
</a>
<p className="label text-center text-[var(--fg-faint)] mt-3">
Qualquer valor ajuda
</p>
</div>
</div>
<CardContent className="p-5 space-y-4">
{/* Título principal */}
<div className="space-y-2">
<h3 className="font-bold text-lg leading-tight text-gray-900 dark:text-white">
Apoie a Transparência Alimentar
</h3>
<p className="text-sm text-gray-600 dark:text-gray-400">
Projeto mantido por um estudante dedicado
</p>
</div>
{/* Benefícios */}
<div className="space-y-2">
<div className="flex items-center gap-2 text-xs">
<Check className="w-4 h-4 text-green-500 flex-shrink-0" />
<span className="text-gray-600 dark:text-gray-400">Servidores sempre disponíveis</span>
</div>
<div className="flex items-center gap-2 text-xs">
<Check className="w-4 h-4 text-green-500 flex-shrink-0" />
<span className="text-gray-600 dark:text-gray-400">Novas funcionalidades</span>
</div>
<div className="flex items-center gap-2 text-xs">
<Check className="w-4 h-4 text-green-500 flex-shrink-0" />
<span className="text-gray-600 dark:text-gray-400">Acesso gratuito para todos</span>
</div>
</div>
{/* Mensagem humanizada */}
<div className="bg-white/50 dark:bg-gray-800/50 rounded-lg p-3">
<div className="flex items-center gap-2 mb-2">
<Code className="w-4 h-4 text-blue-500" />
<span className="text-xs font-medium text-gray-700 dark:text-gray-300">
Desenvolvido com amor
</span>
</div>
<p className="text-xs text-gray-600 dark:text-gray-400">
Cada doação ajuda a manter este projeto vivo e acessível
</p>
</div>
{/* Botão CTA principal */}
<a
href="https://buymeacoffee.com/evandrotruuta"
target="_blank"
rel="noopener noreferrer"
className="block"
>
<Button
className="w-full bg-gradient-to-r from-blue-600 to-green-600 hover:from-blue-700 hover:to-green-700 text-white font-medium h-12 text-base"
>
<Heart className="w-5 h-5 mr-2" />
Doar Qualquer Valor
</Button>
</a>
{/* Texto de incentivo */}
<p className="text-center text-xs text-gray-500 dark:text-gray-400">
Qualquer valor faz diferença 💛
</p>
</CardContent>
</Card>
</article>
);
}