# Exactly
URL: https://remocn.dev/docs/typography/exactly

A yellow "Exactly." lands first, then "It's just code." completes the answer

- Install: `npx shadcn@latest add @remocn/exactly`
- Vibe: playful
- Natural length: 132f @ 30fps

## Installation

```bash
npx shadcn@latest add @remocn/exactly
```

## Usage

```tsx
// src/Root.tsx
import { Composition } from "remotion";
import { Exactly } from "@/components/remocn/exactly";

const ExactlyScene = () => <Exactly rounds={[{ objection: "It’s just code.", reply: "Exactly." }]} />;

export const RemotionRoot = () => (
  <Composition
    id="Exactly"
    component={ExactlyScene}
    durationInFrames={165}
    fps={30}
    width={1280}
    height={720}
  />
);
```

Each round types an objection, which drops away as the reply lands beside it and reflows into the final answer; the next round follows. Pass `rounds` (objection and reply pairs); it compresses to fit the composition length.

## Props

| Prop | Type | Default | Description |
|---|---|---|---|
| `rounds` | `ExactlyRound[]` | `DEFAULT_ROUNDS` | Objection and reply pairs, played in order. |
| `accent` | `string` | — | Color of the reply; defaults to the theme accent. |
| `background` | `string` | — | Stage fill color; pass "transparent" to overlay your own footage. |
| `speed` | `number` | `1` | Playback multiplier for the whole timeline. |
| `theme` | `"dark" \| "light"` | `"dark"` | Color scheme; ships dark and light. |

## Use when
- A beat that answers common objections with a one-word agreement.
- A short back-and-forth where the reply turns the objection into a selling point.
- A two-round sequence of doubt followed by confirmation.

## Don't use when
- You want the answer to appear before the question — use `answer-first`.
- The reply is a hard cut over the objection — use `cut-off`.
- The objections are small and the answer is one big sentence — use `in-proportion`.