# Deferred Regions

poetry_deferred(src:) — Turbo owns the loading physics (lazy fetches on visibility, so hidden Tabs panels and HoverCards defer for free); Poetry owns the states: a Skeleton placeholder and a retryable error card.

## Error retry

```erb
<%# The src 404s: poetry--core--deferred turns Turbo's silent failure into
    data-error + a visible card with a real Retry button. %>
<div class="w-full max-w-md">
  <%= poetry_deferred(src: "/deferred/missing", id: "demo-broken") %>
</div>
```

## In tabs

```erb
<%# A hidden panel is not visible - so a deferred panel loads on FIRST
    ACTIVATION with zero extra wiring (with_tab defer:). Switch to
    Activity and watch the fragment arrive. %>
<div class="w-full max-w-md">
  <%= poetry_tabs(label: "Deferred panel demo") do |tabs| %>
    <% tabs.with_tab("Overview", value: "overview") do %>
      <p class="text-sm text-muted-foreground">
        The Activity panel below is a lazy frame - it has not been fetched yet.
      </p>
    <% end %>
    <% tabs.with_tab("Activity", value: "activity", defer: deferred_fragment_path) %>
  <% end %>
</div>
```

## Lazy

```erb
<%# The frame fetches when it becomes visible; until then the Skeleton
    placeholder holds the box. The endpoint echoes the requesting frame id
    (the standard Turbo pattern), so one fragment route serves any region. %>
<div class="w-full max-w-md">
  <%= poetry_deferred(src: deferred_fragment_path, id: "demo-activity") %>
</div>
```
