fix(projects): reveal individual cards on small screens
This commit is contained in:
1 parent
673f3c1843
commit
229280d519
2 files changed
+8
-22
No files matched your search
@@ -92,6 +92,8 @@ Em produção, a renderização só lê o snapshot versionado e não consulta de
|
|||||||
|
|
||||||
A comunicação apresenta Evandro como responsável direto pelo projeto, sem sugerir equipe, disponibilidade garantida, prazo fixo ou certificação. Os cards de projetos reutilizam os desafios e resumos dos cases quando disponíveis. O antigo painel de telemetria fictícia foi removido; os critérios de qualidade não representam notas de auditoria.
|
A comunicação apresenta Evandro como responsável direto pelo projeto, sem sugerir equipe, disponibilidade garantida, prazo fixo ou certificação. Os cards de projetos reutilizam os desafios e resumos dos cases quando disponíveis. O antigo painel de telemetria fictícia foi removido; os critérios de qualidade não representam notas de auditoria.
|
||||||
|
|
||||||
|
Cada card de projeto aparece ao entrar na tela, observado individualmente e sem recorte por `clip-path`. A revelação não depende de uma porcentagem visível do grid inteiro: em celulares, a lista de uma coluna pode ser várias vezes mais alta que a tela e tornar esse gatilho inalcançável.
|
||||||
|
|
||||||
`app/components/EngineeringWithAI.tsx` explica arquitetura, permissões, validação e recuperação de dados, com três relatos históricos de 2025 e links junto de cada afirmação:
|
`app/components/EngineeringWithAI.tsx` explica arquitetura, permissões, validação e recuperação de dados, com três relatos históricos de 2025 e links junto de cada afirmação:
|
||||||
|
|
||||||
- Lovable: exposição relatada pela Semafor e CVE-2025-48757, incluindo a contestação do fornecedor no NVD; exposição não é apresentada como roubo comprovado.
|
- Lovable: exposição relatada pela Semafor e CVE-2025-48757, incluindo a contestação do fornecedor no NVD; exposição não é apresentada como roubo comprovado.
|
||||||
|
|||||||
@@ -15,24 +15,11 @@ export default function Projects({
|
|||||||
}) {
|
}) {
|
||||||
const shouldReduceMotion = useReducedMotion();
|
const shouldReduceMotion = useReducedMotion();
|
||||||
|
|
||||||
const gridVariants: Variants = {
|
|
||||||
hidden: {},
|
|
||||||
visible: {
|
|
||||||
transition: {
|
|
||||||
delayChildren: 0.08,
|
|
||||||
staggerChildren: 0.08,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const cardVariants: Variants = {
|
const cardVariants: Variants = {
|
||||||
hidden: shouldReduceMotion
|
hidden: shouldReduceMotion ? { opacity: 0 } : { opacity: 0, y: 24 },
|
||||||
? { opacity: 0 }
|
|
||||||
: { opacity: 0, y: 24, clipPath: "inset(100% 0 0 0)" },
|
|
||||||
visible: {
|
visible: {
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
y: 0,
|
y: 0,
|
||||||
clipPath: "inset(0% 0 0 0)",
|
|
||||||
transition: shouldReduceMotion
|
transition: shouldReduceMotion
|
||||||
? { duration: 0.25 }
|
? { duration: 0.25 }
|
||||||
: { duration: 0.8, ease: [0.16, 1, 0.3, 1] },
|
: { duration: 0.8, ease: [0.16, 1, 0.3, 1] },
|
||||||
@@ -48,13 +35,7 @@ export default function Projects({
|
|||||||
dark
|
dark
|
||||||
disableChildrenAnimation
|
disableChildrenAnimation
|
||||||
>
|
>
|
||||||
<motion.div
|
<div className="ds-grid-2">
|
||||||
className="ds-grid-2"
|
|
||||||
initial="hidden"
|
|
||||||
whileInView="visible"
|
|
||||||
viewport={{ once: true, amount: 0.2 }}
|
|
||||||
variants={gridVariants}
|
|
||||||
>
|
|
||||||
{projects.map((project) => {
|
{projects.map((project) => {
|
||||||
const caseStudy = caseStudies.find(
|
const caseStudy = caseStudies.find(
|
||||||
(entry) => entry.id === project.id,
|
(entry) => entry.id === project.id,
|
||||||
@@ -63,6 +44,9 @@ export default function Projects({
|
|||||||
<motion.article
|
<motion.article
|
||||||
key={project.id}
|
key={project.id}
|
||||||
className="ds-card h-full"
|
className="ds-card h-full"
|
||||||
|
initial="hidden"
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true, amount: "some" }}
|
||||||
variants={cardVariants}
|
variants={cardVariants}
|
||||||
whileHover={
|
whileHover={
|
||||||
shouldReduceMotion
|
shouldReduceMotion
|
||||||
@@ -166,7 +150,7 @@ export default function Projects({
|
|||||||
</motion.article>
|
</motion.article>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</motion.div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-sp-8 flex flex-wrap gap-sp-3" data-reel-stagger="left">
|
<div className="mt-sp-8 flex flex-wrap gap-sp-3" data-reel-stagger="left">
|
||||||
<MagneticButton
|
<MagneticButton
|
||||||
|
|||||||
Reference in new issue
Block a user