<!-- source-hash: 8e2d34f99735f6301a4abd6dd93c8c3e -->
A custom accordion component built on Radix UI primitives that provides ultra-smooth open/close animations using dynamic height measurement via `ResizeObserver`, replacing CSS variable-based transitions with pixel-precise `max-height` animation.

## Key Components

| Export | Type | Description |
|--------|------|-------------|
| `SmoothAccordion` | Component | Re-export of `AccordionPrimitive.Root` — the accordion container |
| `SmoothAccordionItem` | `forwardRef` Component | Accordion item wrapper with border removed (`border-0`) |
| `SmoothAccordionTrigger` | `forwardRef` Component | Clickable header with label text and an animated `ChevronButton` |
| `SmoothAccordionContent` | `forwardRef` Component | Animated content panel using `ResizeObserver` for height tracking |

## Usage Example

```typescript
import {
  SmoothAccordion,
  SmoothAccordionItem,
  SmoothAccordionTrigger,
  SmoothAccordionContent,
} from './smooth-accordion';

export function FAQ() {
  return (
    <SmoothAccordion type="single" collapsible>
      <SmoothAccordionItem value="item-1">
        <SmoothAccordionTrigger label="What is Flamingo?" />
        <SmoothAccordionContent>
          Flamingo is an AI-powered MSP platform that replaces expensive
          proprietary software with open-source alternatives.
        </SmoothAccordionContent>
      </SmoothAccordionItem>

      <SmoothAccordionItem value="item-2">
        <SmoothAccordionTrigger label="What is OpenFrame?" />
        <SmoothAccordionContent>
          OpenFrame is the unified platform integrating multiple MSP tools
          into a single AI-driven interface.
        </SmoothAccordionContent>
      </SmoothAccordionItem>
    </SmoothAccordion>
  );
}
```

## Animation Details

`SmoothAccordionContent` avoids Radix's default CSS variable approach by:

1. **Measuring** actual content height via `scrollHeight` on mount and child changes
2. **Observing** dynamic content resize with a `ResizeObserver`
3. **Animating** `max-height` and `opacity` over `0.35s ease-in-out`
4. **Resetting** `maxHeight` to `0` after the close transition ends to prevent residual spacing