<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Duark — Blog</title>
    <link>https://www.duark.com.br/blog</link>
    <description>Textos sobre processo, ritmo, tipografia e o que aprendo construindo imagens que se movem.</description>
    <language>pt-br</language>
    <lastBuildDate>Mon, 28 Sep 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://www.duark.com.br/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>O ritmo antes da forma: notas sobre timing em motion design</title>
      <link>https://www.duark.com.br/blog/o-ritmo-antes-da-forma</link>
      <guid isPermaLink="true">https://www.duark.com.br/blog/o-ritmo-antes-da-forma</guid>
      <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
      <description>Por que eu começo uma animação pela trilha e pela curva de velocidade, e só depois penso no desenho.</description>
      <category>motion design</category>
      <category>processo</category>
      <category>timing</category>
      <content:encoded><![CDATA[<p>Durante anos eu abri o After Effects pelo desenho. Primeiro a composição, depois a tipografia, e só no fim, com tudo bonito e parado, eu pensava em como aquilo ia se mexer. O resultado era sempre o mesmo: peças que funcionavam como pôster e tropeçavam como filme.</p>
<p>Hoje faço o contrário. <strong>Antes de qualquer forma, decido o ritmo.</strong></p>
<h2 id="comecar-pela-trilha">Começar pela trilha</h2>
<p>Toda peça que faço começa com um arquivo de áudio, mesmo quando o vídeo final vai ser mudo. A trilha dá três coisas que nenhum moodboard dá:</p>
<ol>
<li><strong>Andamento.</strong> Um BPM define quanto tempo cada ideia tem para respirar.</li>
<li><strong>Acentos.</strong> Os pontos onde algo <em>precisa</em> acontecer.</li>
<li><strong>Silêncios.</strong> Os pontos onde nada deve acontecer, e que são tão importantes quanto os acentos.</li>
</ol>
<p>Com a trilha marcada, eu desenho blocos cinza na timeline. Nada de design ainda: só retângulos entrando e saindo no tempo certo. Se essa versão feia já tem pulso, o resto é acabamento.</p>
<h2 id="a-curva-e-o-desenho">A curva é o desenho</h2>
<p>A curva de velocidade é onde mora a personalidade de uma animação. A mesma caixa indo de A para B pode parecer pesada, nervosa, elegante ou cômica dependendo só do <em>easing</em>.</p>
<blockquote>
<p>Linear é a ausência de intenção. Toda curva é uma opinião.</p>
</blockquote>
<p>Uso três famílias quase sempre:</p>
<ul>
<li><strong>Saída rápida, chegada lenta</strong> (<code>ease-out</code>) para elementos que entram e precisam assentar.</li>
<li><strong>Saída lenta, chegada rápida</strong> (<code>ease-in</code>) para elementos que saem de cena.</li>
<li><strong>Overshoot leve</strong> para o que precisa de energia, como logos e chamadas.</li>
</ul>
<p>No código, a mesma lógica vale. Quando animo interfaces, escrevo as curvas como variáveis para manter o vocabulário consistente:</p>
<pre><code class="hljs language-css"><span class="hljs-selector-pseudo">:root</span> {
  <span class="hljs-attr">--ease-out</span>: <span class="hljs-built_in">cubic-bezier</span>(<span class="hljs-number">0.22</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0.36</span>, <span class="hljs-number">1</span>);
  <span class="hljs-attr">--ease-in</span>: <span class="hljs-built_in">cubic-bezier</span>(<span class="hljs-number">0.64</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.78</span>, <span class="hljs-number">0</span>);
  <span class="hljs-attr">--ease-overshoot</span>: <span class="hljs-built_in">cubic-bezier</span>(<span class="hljs-number">0.34</span>, <span class="hljs-number">1.56</span>, <span class="hljs-number">0.64</span>, <span class="hljs-number">1</span>);
}

<span class="hljs-selector-class">.card</span> {
  <span class="hljs-attribute">transition</span>: transform <span class="hljs-number">480ms</span> <span class="hljs-built_in">var</span>(--ease-out);
}
</code></pre><h2 id="escalonar-e-compor-no-tempo">Escalonar é compor no tempo</h2>
<p>Quando vários elementos entram juntos, o atraso entre eles (o <em>stagger</em>) faz o papel que o espaçamento faz no layout. Um atraso de 40 ms parece uma onda; 120 ms parece uma lista; 300 ms parece uma conversa.</p>
<pre><code class="hljs language-js"><span class="hljs-keyword">const</span> items = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelectorAll</span>(<span class="hljs-string">&#x27;.word&#x27;</span>);
items.<span class="hljs-title function_">forEach</span>(<span class="hljs-function">(<span class="hljs-params">el, i</span>) =&gt;</span> {
  el.<span class="hljs-title function_">animate</span>(
    [{ <span class="hljs-attr">opacity</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">transform</span>: <span class="hljs-string">&#x27;translateY(0.6em)&#x27;</span> }, { <span class="hljs-attr">opacity</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">transform</span>: <span class="hljs-string">&#x27;none&#x27;</span> }],
    { <span class="hljs-attr">duration</span>: <span class="hljs-number">600</span>, <span class="hljs-attr">delay</span>: i * <span class="hljs-number">60</span>, <span class="hljs-attr">easing</span>: <span class="hljs-string">&#x27;cubic-bezier(0.22, 1, 0.36, 1)&#x27;</span>, <span class="hljs-attr">fill</span>: <span class="hljs-string">&#x27;both&#x27;</span> }
  );
});
</code></pre><h2 id="o-teste-do-olho-fechado">O teste do olho fechado</h2>
<p>Meu último teste antes de entregar qualquer peça: assisto de olhos semicerrados. Sem conseguir ler nada, sobra só o movimento. Se ainda dá para sentir onde estão os acentos, a peça está pronta.</p>
<p>O desenho convence o olho. O ritmo convence o corpo.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
