/* global React */ const { useState, useEffect, useRef } = React; /* ====================================================== ABOUT ====================================================== */ function About() { const clients = [ 'Marcas em crescimento', 'Startups e produtos digitais', 'Instituições culturais', 'Editoras', 'Universidades', 'Organizações de impacto', 'Empresas de capital aberto', 'Organizações ESG', ]; return (
/01
Studio positioning

Estratégia antes da estética. Significado antes de visibilidade. Sistema antes da arte.

Acreditamos que o design vai além da estética. Como ferramenta de pensamento, estratégia e construção de valor, ele conecta criatividade, cultura e inovação para desenvolver marcas e sistemas de comunicação com consistência, relevância e impacto duradouro.

Who we work with

Organizações que acreditam no poder do design para construir valor, relevância e legado.

); } /* ====================================================== CASES ====================================================== */ const CASES = [ { num: '/01', title: 'Empório da Terra', meta: ['Strategy', 'Brand Design', 'Digital Experience'], year: '2025', sw: '#C9C2B2', swFg: '#0A0A0A', kind: 'poster', short: 'Empório', subtitle: 'da Terra', tag: 'BRAND / 2025', img: 'assets/case-emporio.jpg' }, { num: '/02', title: 'Black Fish Brasil', meta: ['Strategy', 'Brand Design', 'Digital Experience', 'Content & Social Systems'], year: '2024', sw: '#0F1B2A', swFg: '#FAFAFA', kind: 'poster', short: 'Black Fish', subtitle: 'Brasil', tag: 'BRAND / 2024', img: 'assets/case-blackfish.jpg' }, { num: '/03', title: 'Rancho Thands', meta: ['Strategy', 'Brand Design', 'Digital Experience', 'Content & Social Systems'], year: '2025', sw: '#E2D3BD', swFg: '#0A0A0A', kind: 'type', short: 'Rancho', subtitle: 'Thands', tag: 'BRAND / 2025', img: 'assets/case-rancho.jpg' }, { num: '/04', title: 'Engenho de Ideias', meta: ['Digital Experience'], year: '2024', sw: '#1A1A1A', swFg: '#FAFAFA', kind: 'grid', short: 'Engenho', subtitle: 'de Ideias', tag: 'DIGITAL', img: 'assets/case-engenho.jpg' }, ]; function Cases() { return (
/04
Work

Projetos
selecionados

que mostram como estratégia, design e comunicação se conectam para gerar valor.

{CASES.map((c, i) => (

{c.title}

{c.meta.map((m, j) => {m})}
Coming soon
))}
); } function PreviewArt({ c }) { const metaRow = (
{c.tag} {c.year}
); switch (c.kind) { case 'type': return ( <>
— {c.subtitle}
{c.short}.
{metaRow} ); case 'grid': return ( <>
/01
/02
/03
/04
/05
/06
/07
/08
/09
{metaRow} ); case 'spread': return ( <>
{c.short}_
{metaRow} ); case 'app': return ( <>
{c.short}●●●
Saldo disponível
R$ 12.480,00
Pix
Cartão
Investir
{metaRow} ); case 'poster': return ( <>
— {c.subtitle}
{c.short}.
{metaRow} ); case 'circle': return ( <>
{c.subtitle}{c.tag}
{c.short}.
{metaRow} ); default: return null; } } /* ====================================================== FOUNDER ====================================================== */ function Founder() { return (
/06
About the founder
Thiago Dalmas Affonso

Thiago Dalmas Affonso é fundador da Morse e atua há mais de 25 anos na construção de marcas, narrativas e sistemas de comunicação.

Formado em Publicidade e Propaganda pela PUCRS, desenvolveu projetos para empresas do varejo, indústria e serviços, além de instituições públicas e governamentais de diferentes portes e contextos.

Sua trajetória foi construída conectando estratégia, comunicação e design para transformar complexidade em clareza, posicionamentos em significado e ideias em experiências capazes de gerar valor duradouro.

Hoje, lidera a Morse com a mesma convicção que orienta sua prática: o design é uma ferramenta de pensamento, capaz de construir relevância, fortalecer conexões e ampliar o impacto de organizações e iniciativas.

LinkedIn /thiago-dalmas-affonso
); } /* ====================================================== CONTACT ====================================================== */ function ContactTransmit() { // M O R S E — real Morse timing, identical to the hero signal const WORD = [ ['dash', 'dash'], // M ['dash', 'dash', 'dash'], // O ['dot', 'dash', 'dot'], // R ['dot', 'dot', 'dot'], // S ['dot'], // E ]; const symbols = []; WORD.forEach((letter, li) => letter.forEach((t) => symbols.push({ type: t, li }))); const [active, setActive] = React.useState(-1); React.useEffect(() => { const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (reduce) { setActive(-1); return; } const unit = 135; let idx = 0; let timer; const run = () => { const sym = symbols[idx]; setActive(idx); const onDur = sym.type === 'dash' ? unit * 3 : unit; timer = setTimeout(() => { setActive(-1); const next = symbols[idx + 1]; let gap = unit; // inter-symbol if (!next) gap = unit * 7; // word reset else if (next.li !== sym.li) gap = unit * 3; // inter-letter timer = setTimeout(() => { idx = (idx + 1) % symbols.length; run(); }, gap); }, onDur); }; run(); return () => clearTimeout(timer); }, []); let gi = -1; return ( ); } function Contact() { return (
/07
Let's build something with intention

Está construindo
algo relevante?

Queremos conhecer.

Iniciar uma conversa contato@morsestudio.com.br
); } /* ====================================================== OUTRO + FOOTER ====================================================== */ function Outro() { const wordRef = useRef(null); useEffect(() => { const word = wordRef.current; if (!word) return; const wrap = word.closest('.wrap'); let inkRatio = null; const measureInkRatio = () => { const cs = getComputedStyle(word); const probe = 300; const ls = -0.06 * probe; const c = document.createElement('canvas'); c.width = Math.ceil(probe * 5.5); c.height = Math.ceil(probe * 1.4); const ctx = c.getContext('2d'); ctx.fillStyle = '#000'; ctx.fillRect(0, 0, c.width, c.height); ctx.fillStyle = '#fff'; ctx.textBaseline = 'middle'; ctx.font = `${cs.fontWeight} ${probe}px ${cs.fontFamily}`; let x = 0; for (const ch of 'MORSE') { ctx.fillText(ch, x, c.height / 2); x += ctx.measureText(ch).width + ls; } const img = ctx.getImageData(0, 0, c.width, c.height).data; let minX = c.width, maxX = 0; for (let y = 0; y < c.height; y++) for (let xx = 0; xx < c.width; xx++) if (img[(y * c.width + xx) * 4] > 40) { if (xx < minX) minX = xx; if (xx > maxX) maxX = xx; } return (maxX - minX) / probe; }; const fit = () => { if (!inkRatio) inkRatio = measureInkRatio(); if (!inkRatio || inkRatio < 0.1) return; const cs = getComputedStyle(wrap); const inner = wrap.clientWidth - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight); word.style.fontSize = (inner / inkRatio) + 'px'; }; const ro = new ResizeObserver(fit); ro.observe(wrap); if (document.fonts && document.fonts.ready) document.fonts.ready.then(() => { inkRatio = null; fit(); }); fit(); return () => ro.disconnect(); }, []); return (

MORSE

—— ——— ·—· ··· · Craft Design
); } function Footer() { return ( ); } window.About = About; window.Cases = Cases; window.Founder = Founder; window.Contact = Contact; window.Outro = Outro; window.Footer = Footer;