- brandMatcher: split keywords into includes/startsWith/segment/boundary
modes to align with frontend BrandIcon.tsx matching semantics, preventing
false-positive blocking from short keywords like o1, tts, command
- handleSiteBlockModel: reject wildcard route patterns (e.g. gpt-*) from
being written to site disabled list; only allow exact model names
- Sites.tsx: extract brand grouping to useMemo, convert disabledModels
to Set for O(1) lookup, remove duplicate IIFE computations in JSX
- handleSiteBlockModel: replace window.confirm with project-style DOM
dialog for visual consistency
- enabledCounts: compute from filtered scope (excluding enabled filter
itself) so counts reflect current brand/site/search filters
- Fix declaration order: move enabledCounts after sortedRoutes to avoid
ReferenceError