| class CustomTestimonials extends HTMLElement { | |
| connectedCallback() { | |
| this.attachShadow({ mode: 'open' }); | |
| this.shadowRoot.innerHTML = ` | |
| <style> | |
| :host { | |
| display: block; | |
| padding: 6rem 0; | |
| background-color: white; | |
| } | |
| .container { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 0 2rem; | |
| } | |
| .header { | |
| text-align: center; | |
| margin-bottom: 4rem; | |
| } | |
| .section-title { | |
| font-size: 2.25rem; | |
| font-weight: 700; | |
| color: #1f2937; | |
| margin-bottom: 1rem; | |
| } | |
| .section-subtitle { | |
| color: #6b7280; | |
| max-width: 600px; | |
| margin: 0 auto; | |
| } | |
| .testimonials-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
| gap: 2rem; | |
| } | |
| .testimonial-card { | |
| background-color: #f9fafb; | |
| border-radius: 0.5rem; | |
| padding: 2rem; | |
| position: relative; | |
| } | |
| .testimonial-quote { | |
| position: absolute; | |
| top: 1.5rem; | |
| left: 1.5rem; | |
| opacity: 0.1; | |
| font-size: 3rem; | |
| line-height: 1; | |
| color: var(--primary); | |
| } | |
| .testimonial-content { | |
| margin-top: 2rem; | |
| margin-bottom: 1.5rem; | |
| color: #4b5563; | |
| line-height: 1.6; | |
| font-style: italic; | |
| } | |
| .testimonial-author { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| } | |
| .author-avatar { | |
| width: 3rem; | |
| height: 3rem; | |
| border-radius: 50%; | |
| object-fit: cover; | |
| } | |
| .author-info { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .author-name { | |
| font-weight: 600; | |
| color: #1f2937; | |
| } | |
| .author-title { | |
| font-size: 0.875rem; | |
| color: #6b7280; | |
| } | |
| </style> | |
| <div class="container" id="testimonials"> | |
| <div class="header observe-me"> | |
| <h2 class="section-title">Client <span class="gradient-text">Testimonials</span></h2> | |
| <p class="section-subtitle">Don't just take our word for it. Here's what our clients have to say about working with us.</p> | |
| </div> | |
| <div class="testimonials-grid"> | |
| <div class="testimonial-card observe-me delay-100"> | |
| <div class="testimonial-quote">"</div> | |
| <p class="testimonial-content">Working with PixelPulse was a game-changer for our business. Their web design expertise helped us triple our online conversions in just three months.</p> | |
| <div class="testimonial-author"> | |
| <img src="http://static.photos/people/200x200/1" alt="Sarah Johnson" class="author-avatar"> | |
| <div class="author-info"> | |
| <span class="author-name">Sarah Johnson</span> | |
| <span class="author-title">CEO, TechStart Inc.</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="testimonial-card observe-me delay-200"> | |
| <div class="testimonial-quote">"</div> | |
| <p class="testimonial-content">The mobile app they developed for us exceeded all expectations. The user experience is flawless, and our customer engagement has never been higher.</p> | |
| <div class="testimonial-author"> | |
| <img src="http://static.photos/people/200x200/2" alt="Michael Chen" class="author-avatar"> | |
| <div class="author-info"> | |
| <span class="author-name">Michael Chen</span> | |
| <span class="author-title">Founder, FitTrack</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="testimonial-card observe-me delay-300"> | |
| <div class="testimonial-quote">"</div> | |
| <p class="testimonial-content">Their attention to detail and creative approach transformed our outdated website into a modern, high-performing digital asset that truly represents our brand.</p> | |
| <div class="testimonial-author"> | |
| <img src="http://static.photos/people/200x200/3" alt="Emily Rodriguez" class="author-avatar"> | |
| <div class="author-info"> | |
| <span class="author-name">Emily Rodriguez</span> | |
| <span class="author-title">Marketing Director, LuxeLiving</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| `; | |
| } | |
| } | |
| customElements.define('custom-testimonials', CustomTestimonials); |