+
+// Merge class lists through the configured merger (plain join by
+// default; conflict-aware once you call WithClassMerger).
+
+```
+
+| Function | Description |
+|----------|-------------|
+| `attrs` | Renders a `gastro.Attrs` bag as HTML attributes. Optional second `dict` of base defaults; `class` is merged, other keys are overridable defaults. Escapes values (safe-typed values pass through), `bool` → bare/omitted, names validated. |
+| `twJoin` | Concatenates class lists with single spaces, dropping empties. Never resolves conflicts. |
+| `twMerge` | Same as `twJoin` until you call `gastro.WithClassMerger` — then it delegates to your merger (e.g. tailwind-merge-go) for conflict-aware merging. |
+
+By default `twMerge` and `attrs`'s class handling only concatenate. Plug a
+Tailwind-aware merger to get conflict resolution; the dependency lives in
+your module, not gastro's:
+
+```go
+import twmerge "github.com/Oudwins/tailwind-merge-go"
+
+router := gastro.New(gastro.WithClassMerger(twmerge.Merge))
+```
+
## Custom Helpers
Register custom template functions in your `main.go` using `gastro.WithFuncs()`: