45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div class="bg-transparent pb-24 pt-24">
 | |
|     <div class="mx-auto max-w-7xl px-6 lg:px-8">
 | |
|       <dl class="grid grid-cols-1 gap-x-8 gap-y-16 text-center lg:grid-cols-3">
 | |
|         <div class="mx-auto flex max-w-xs flex-col gap-y-4">
 | |
|           <dd class="fade-in order-first text-3xl font-semibold tracking-tight text-black sm:text-4xl opacity-0 transition-opacity duration-1000" data-observer>
 | |
|             Open Source.
 | |
|           </dd>
 | |
|         </div>
 | |
|         <div class="mx-auto flex max-w-xs flex-col gap-y-4">
 | |
|           <dd class="fade-in order-first text-3xl font-semibold tracking-tight text-black sm:text-4xl opacity-0 transition-opacity duration-1000" data-observer>
 | |
|             Authenticity.
 | |
|           </dd>
 | |
|         </div>
 | |
|         <div class="mx-auto flex max-w-xs flex-col gap-y-4">
 | |
|           <dd class="fade-in order-first text-3xl font-semibold tracking-tight text-black sm:text-4xl opacity-0 transition-opacity duration-1000" data-observer>
 | |
|             Simplicity.
 | |
|           </dd>
 | |
|         </div>
 | |
|       </dl>
 | |
|     </div>
 | |
|   </div>
 | |
|   
 | |
|   <script>
 | |
|     // JavaScript to handle Intersection Observer
 | |
|     document.addEventListener("DOMContentLoaded", () => {
 | |
|       const elementsToObserve = document.querySelectorAll("[data-observer]");
 | |
|       const observerOptions = {
 | |
|         root: null, // Observes relative to the viewport
 | |
|         threshold: 0.1, // Trigger when 10% of the element is visible
 | |
|       };
 | |
|   
 | |
|       const observerCallback = (entries, observer) => {
 | |
|         entries.forEach((entry) => {
 | |
|           if (entry.isIntersecting) {
 | |
|             entry.target.classList.add("opacity-100"); // Make element fully visible
 | |
|             observer.unobserve(entry.target); // Stop observing once it's visible
 | |
|           }
 | |
|         });
 | |
|       };
 | |
|   
 | |
|       const observer = new IntersectionObserver(observerCallback, observerOptions);
 | |
|       elementsToObserve.forEach((el) => observer.observe(el));
 | |
|     });
 | |
|   </script>
 | |
|    |