diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 65f74cc..5cbecae 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,6 +29,9 @@ jobs:
- name: Verify accessible SVG contract
run: python3 scripts/test-lint-a11y.py
+ - name: Verify Devicon normalization
+ run: python3 scripts/test-build-icons-devicon.py
+
- name: Run skin linter
run: python3 scripts/lint-skin.py --all --baseline
diff --git a/scripts/build-icons.py b/scripts/build-icons.py
index b191b2a..e78045b 100644
--- a/scripts/build-icons.py
+++ b/scripts/build-icons.py
@@ -292,6 +292,10 @@ def normalize_url(raw: str) -> str:
def normalize_devicon(raw: str) -> str:
"""Devicon SVGs have colored fills and a 128x128 or 32x32 viewBox.
Strip fills/classes and rewrite to 24x24 currentColor."""
+ viewbox_match = re.search(
+ r'\bviewBox\s*=\s*(["\'])(.*?)\1', raw, flags=re.IGNORECASE
+ )
+ viewbox = viewbox_match.group(2).strip() if viewbox_match else "0 0 128 128"
inner = re.search(r"", raw, flags=re.DOTALL | re.IGNORECASE)
if not inner:
raise ValueError("no