| class CustomFooter extends HTMLElement { |
| connectedCallback() { |
| this.attachShadow({ mode: 'open' }); |
| this.shadowRoot.innerHTML = ` |
| <style> |
| .footer-link { |
| transition: color 0.2s ease; |
| } |
| |
| .footer-link:hover { |
| color: var(--primary-500); |
| } |
| </style> |
| <footer class="bg-gray-50 border-t border-gray-200 py-12"> |
| <div class="container mx-auto px-4"> |
| <div class="grid grid-cols-1 md:grid-cols-4 gap-8"> |
| <div> |
| <h3 class="text-lg font-semibold mb-4">PixelPerfect</h3> |
| <p class="text-gray-600">Solving UI challenges one pixel at a time.</p> |
| </div> |
| <div> |
| <h4 class="text-lg font-semibold mb-4">Solutions</h4> |
| <ul class="space-y-2"> |
| <li><a href="#" class="footer-link text-gray-600">Responsive Design</a></li> |
| <li><a href="#" class="footer-link text-gray-600">User Experience</a></li> |
| <li><a href="#" class="footer-link text-gray-600">Clean Code</a></li> |
| </ul> |
| </div> |
| <div> |
| <h4 class="text-lg font-semibold mb-4">Company</h4> |
| <ul class="space-y-2"> |
| <li><a href="#" class="footer-link text-gray-600">About</a></li> |
| <li><a href="#" class="footer-link text-gray-600">Blog</a></li> |
| <li><a href="#" class="footer-link text-gray-600">Careers</a></li> |
| </ul> |
| </div> |
| <div> |
| <h4 class="text-lg font-semibold mb-4">Connect</h4> |
| <div class="flex space-x-4"> |
| <a href="#" class="text-gray-600 hover:text-primary-500"> |
| <i data-feather="twitter"></i> |
| </a> |
| <a href="#" class="text-gray-600 hover:text-primary-500"> |
| <i data-feather="github"></i> |
| </a> |
| <a href="#" class="text-gray-600 hover:text-primary-500"> |
| <i data-feather="linkedin"></i> |
| </a> |
| </div> |
| </div> |
| </div> |
| <div class="border-t border-gray-200 mt-8 pt-8 text-center text-gray-500"> |
| <p>© ${new Date().getFullYear()} PixelPerfect UI Wizard. All rights reserved.</p> |
| </div> |
| </div> |
| </footer> |
| `; |
| } |
| } |
|
|
| customElements.define('custom-footer', CustomFooter); |