+```
+
+## Window virtualisation
+
+Use `` when the entire page scrolls rather than a container:
+
+```marko
+ 35
+>
+
+
+
+ Row ${item.index}
+
+
+
+
+```
+
+## Dynamic / variable item sizes
+
+For items with unknown heights, use `measureElement` as a script-driven ref
+to measure each element after render:
+
+```marko
+
+ 50
+ getScrollElement=scrollEl
+ >
+
+
+
+
+ ${data[item.index].text}
+
+
+
+
+
+```
+
+## Tag variable reference
+
+Both tags expose the same tag variable shape:
+
+| Property | Type | Description |
+|---|---|---|
+| `virtualItems` | `VirtualItem[]` | The currently visible virtual items |
+| `totalSize` | `number` | Total scrollable size in px — set as the inner container's `height` (or `width` for columns) |
+| `measureElement` | `(el: Element \| null) => void` | Ref callback for dynamic item sizing |
+| `scrollToIndex` | `(index: number, options?: ScrollToIndexOptions) => void` | Imperatively scroll to an item by index |
+| `scrollToOffset` | `(offset: number, options?: ScrollToOffsetOptions) => void` | Imperatively scroll to a pixel offset |
+
+## `` input reference
+
+| Prop | Type | Default | Description |
+|---|---|---|---|
+| `count` | `number` | required | Number of items |
+| `getScrollElement` | `() => Element \| null` | required | Returns the scroll container |
+| `estimateSize` | `(index: number) => number` | `() => 50` | Estimated item size in px |
+| `overscan` | `number` | `5` | Items to render beyond the visible area |
+| `horizontal` | `boolean` | `false` | Virtualise horizontally (columns) |
+| `paddingStart` | `number` | — | Padding before first item |
+| `paddingEnd` | `number` | — | Padding after last item |
+| `scrollPaddingStart` | `number` | — | Scroll padding for `scrollToIndex` |
+| `scrollPaddingEnd` | `number` | — | Scroll padding for `scrollToIndex` |
+| `gap` | `number` | — | Gap between items in px |
+| `lanes` | `number` | `1` | Lanes for masonry layouts |
+| `initialOffset` | `number \| (() => number)` | — | Initial scroll offset |
+
+## `` input reference
+
+Same as `` except `getScrollElement` and `horizontal` are not
+accepted (window scroll is always vertical, element is always `window`).
+
+## SSR note
+
+`` and `` are client-only tags. The
+`` tag inside them never runs during SSR, so the tag variable
+will be empty (`virtualItems: []`, `totalSize: 0`) on the server.
+
+Wrap the tag in `` (where `mounted` is set by `
+
+
+