// LinksPage.jsx — Shared page content. Renders both mobile & desktop variants. // Mobile: single column, cards stacked. Desktop: split — photo left, content right. const RED = '#710014'; const CREAM = '#f2f1ed'; const PEACH = '#eee9e2'; const RED_DEEP = '#5a0010'; const RED_SOFT = '#8a1a2e'; // Links content const LINKS = [ { title: (<>Mapa de Sessão), plainTitle: 'Mapa de Sessão', desc: 'Conduza sessões em ACT com mais clareza, sem depender de improviso.', kicker: 'Material', href: 'https://ingrydsimoes.com.br/mapa-de-sessao-act-v2/', }, { title: (<>Supervisão Individual), plainTitle: 'Supervisão Individual', desc: 'Supervisão clínica 1:1 em Terapia de Aceitação e Compromisso.', kicker: 'Atendimento', href: 'https://docs.google.com/forms/d/e/1FAIpQLSfWXsLWJFTHvqu8F0YNirtSHs6z4j7krOX6xbNAOhIgnst8gQ/viewform', }, { title: (<>Cartas às Valentes), plainTitle: 'Cartas às Valentes', desc: 'Minha newsletter gratuita — cartas mensais sobre clínica, ACT e coragem.', kicker: 'Newsletter', href: 'https://ingrydsimoes.substack.com/', }, { title: (<>Canal no YouTube), plainTitle: 'YouTube', desc: '', kicker: 'Vídeos', href: 'https://www.youtube.com/@IngrydSimoes', }, ]; const SOCIAL = [ { name: 'Instagram', href: 'https://www.instagram.com/ingrydsimoes/' }, { name: 'YouTube', href: 'https://www.youtube.com/@IngrydSimoes' }, { name: 'Spotify', href: 'https://open.spotify.com/show/0t9hCojdwbtqfolzcneLHk' }, { name: 'Substack', href: 'https://ingrydsimoes.substack.com/' }, ]; // Credentials pulled from current site const CREDENTIALS = [ <>Pós-graduada em ACT (Terapia de Aceitação e Compromisso), <>Pós-graduada em Avaliação Psicológica e Psicodiagnóstico, <>Aprofundamento clínico avançado em ACT com Steven C. Hayes, <>Membro da comunidade internacional ACBS, ]; // ───────────────────────────────────────────────────────────── // Arrow icon (hand-drawn feel, thin stroke) // ───────────────────────────────────────────────────────────── function Arrow({ size = 18, color = 'currentColor' }) { return ( ); } // ───────────────────────────────────────────────────────────── // Small round avatar // ───────────────────────────────────────────────────────────── function Avatar({ size = 96, border = CREAM, src = 'assets/ingryd.webp' }) { return (
Ingryd Simões
); } // ───────────────────────────────────────────────────────────── // Scrolling marquee — "@ingrydsimoes · psicóloga · ..." strip // ───────────────────────────────────────────────────────────── function Marquee({ items, speed = 40, color = CREAM, bg = 'transparent', border = false, italic = true, size = 13 }) { const line = items.join(' · '); return (
{Array.from({ length: 6 }).map((_, i) => ( {line} · ))}
); } // ───────────────────────────────────────────────────────────── // Editorial hero headline — the "O que considero indispensável" vibe // Mix of regular + italic + bold. Tight line-height, big sizes. // ───────────────────────────────────────────────────────────── function EditorialTitle({ size = 64, color = CREAM, align = 'left', maxWidth = 'none' }) { return (

Psicóloga{' '} que acredita
em ciência,{' '} raciocínio clínico
e{' '} responsabilidade.

); } // ───────────────────────────────────────────────────────────── // LinkCard — creme card with kicker label + editorial title + description + arrow // On hover: subtle slide of arrow + card lift // ───────────────────────────────────────────────────────────── function LinkCard({ link, index, size = 'md' }) { const [hover, setHover] = React.useState(false); const pad = size === 'sm' ? '18px 20px' : '22px 24px'; const titleSize = size === 'sm' ? 22 : 28; return ( setHover(true)} onMouseLeave={() => setHover(false)} style={{ display: 'block', position: 'relative', padding: pad, borderRadius: 14, background: CREAM, color: RED, textDecoration: 'none', border: `1px solid ${RED}10`, transform: hover ? 'translateY(-2px)' : 'translateY(0)', boxShadow: hover ? '0 14px 30px rgba(0,0,0,0.22)' : '0 4px 14px rgba(0,0,0,0.14)', transition: 'transform .25s cubic-bezier(.2,.7,.3,1), box-shadow .25s', overflow: 'hidden', }}>
{String(index + 1).padStart(2, '0')} — {link.kicker}
{link.title}
{link.desc &&
{link.desc}
}
); } // ───────────────────────────────────────────────────────────── // Credentials block (italic + bold mix) // ───────────────────────────────────────────────────────────── function Credentials({ align = 'center', size = 13 }) { return (
{CREDENTIALS.map((c, i) => (
{c}
))}
); } // ───────────────────────────────────────────────────────────── // CRP line // ───────────────────────────────────────────────────────────── function CRP({ color = PEACH }) { return (
CRP 06/206396
); } // ────────────────────────────────────────────────────────────── // Social icons // ────────────────────────────────────────────────────────────── function SocialIcon({ name, size = 22, color = 'currentColor' }) { const s = size; if (name === 'Instagram') { return ( ); } if (name === 'YouTube') { return ( ); } if (name === 'Spotify') { return ( ); } if (name === 'Substack') { return ( ); } return null; } function SocialButton({ name, href, color = CREAM }) { const [hover, setHover] = React.useState(false); return ( setHover(true)} onMouseLeave={() => setHover(false)} aria-label={name} style={{ display: 'inline-flex', alignItems: 'center', gap: 8, padding: '10px 16px', borderRadius: 999, border: `1px solid ${color}${hover ? '80' : '40'}`, color, textDecoration: 'none', background: hover ? `${color}14` : 'transparent', transition: 'background .2s, border-color .2s, transform .2s', transform: hover ? 'translateY(-1px)' : 'translateY(0)', fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif', fontSize: 12, letterSpacing: '0.18em', textTransform: 'uppercase', fontWeight: 500, }}> {name} ); } function SocialRow({ color = CREAM, align = 'flex-start' }) { return (
{SOCIAL.map((s, i) => ( ))}
); } // ───────────────────────────────────────────────────────────── // MOBILE PAGE — designed for a 390×844 iPhone // ───────────────────────────────────────────────────────────── function MobileLinksPage() { return (
{/* Top marquee */}
{/* Hero image (editorial) */}
{/* overlay gradient */}
{/* overlay name */}
psicóloga · crp 06/206396
Ingryd{' '} Simões
{/* Editorial tagline */}
O que{' '} considero
indispensável
para uma{' '} clínica
responsável.
{/* Credentials */}
{/* Links */}
{LINKS.map((l, i) => )}
{/* Social */}
{/* Bottom marquee */} {/* Footer */}
Ingryd Simões
© Todos os direitos reservados 2026.
); } // ───────────────────────────────────────────────────────────── // DESKTOP PAGE — 1280 wide, editorial split layout // ───────────────────────────────────────────────────────────── function DesktopLinksPage() { return (
{/* Top bar marquee */} {/* Main split */}
{/* LEFT — editorial photo + headline */}
{/* Kicker */}
psicóloga · crp 06/206396
{/* Big name */}
Ingryd
Simões
{/* Photo */}
Ingryd Simões
{/* frame caption */}
retrato — 2026
@ingrydsimoes
{/* Editorial tagline */}
O que considero{' '} indispensável{' '} para uma clínica{' '} responsável.
{/* RIGHT — credentials + links */}
{/* Section label */}
sobre — formação
{/* Credentials */}
{CREDENTIALS.map((c, i) => (
{c}
))}
{/* Social */} {/* Section label 2 */}
acesse — todos os links
{/* Links */}
{LINKS.map((l, i) => )}
{/* Big editorial footer quote */}
ciência,{' '} raciocínio clínico
& responsabilidade na clínica.
{/* Bottom marquee */} {/* Footer */}
Ingryd Simões
© Todos os direitos reservados 2026.
); } // Export to window for multi-script use Object.assign(window, { MobileLinksPage, DesktopLinksPage, LinkCard, Credentials, CRP, Marquee, Avatar, Arrow, SocialIcon, SocialButton, SocialRow, LINKS_COLORS: { RED, CREAM, PEACH, RED_DEEP, RED_SOFT }, });