Description
`crates/ironhtml-parser/src/validator.rs:267-279` uses a `Vec` with linear search for duplicate ID detection:
```rust
if self.seen_ids.contains(&id.to_string()) {
```
For documents with many IDs, this is O(n) per lookup. Should use `BTreeSet` (available in `alloc` for `no_std`) for O(log n) lookups.