Demystifying Web Components: Custom HTML Tags and Shadow DOM