import re # Extract all class names from HTML with open("index.html", encoding="utf-8") as f: html = f.read() html_classes = set() for m in re.finditer(r'class="([^"]+)"', html): for c in m.group(1).split(): html_classes.add(c) # Extract all class selectors from CSS with open("styles.css", encoding="utf-8") as f: css = f.read() css_classes = set() for m in re.finditer(r"\.([\w-]+)", css): css_classes.add(m.group(1)) # Also check app.js for dynamically-generated classes with open("app.js", encoding="utf-8") as f: js = f.read() for m in re.finditer(r'class="([^"]+)"', js): for c in m.group(1).split(): html_classes.add(c) for m in re.finditer(r"class=\"([^\"]+)\"", js): for c in m.group(1).split(): html_classes.add(c) for m in re.finditer(r'classList\.add\("([^"]+)"\)', js): html_classes.add(m.group(1)) for m in re.finditer(r"classList\.add\(\"([^\"]+)\"\)", js): html_classes.add(m.group(1)) for m in re.finditer(r'className\s*=\s*[`"\']([^`"\']+)[`"\']', js): for c in m.group(1).split(): if not c.startswith("$"): html_classes.add(c) missing = sorted(html_classes - css_classes) print("HTML/JS classes NOT found in CSS:") for c in missing: print(f" .{c}") print(f"\nTotal missing: {len(missing)}")