Every visible section of the Pikanté landing page is a self-contained component file insideDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/luigitemu/pikante-landing/llms.txt
Use this file to discover all available pages before exploring further.
src/components/. Eleven of the twelve components are static Astro components; one — PrepVideo.jsx — is a React island that ships interactive JavaScript only when the user scrolls it into view.
Astro components vs. React islands
Astro components (.astro) are zero-JavaScript by default. Their script fence (---) runs at build time only; the output is pure, pre-rendered HTML. Any styling or micro-interactions in these components rely on vanilla <script> tags (inlined inline or hoisted by Astro) and CSS transitions rather than a JavaScript framework.
PrepVideo.jsx is the exception. It is a React island — a small, self-contained React component that Astro drops into the otherwise static HTML. The client:visible directive tells Astro to defer hydration of this island until the element enters the viewport:
React 19 is used here purely as a hydration vehicle for the video player controls. If the video player were refactored to a plain
<video> element with a vanilla <script>, the React and React-DOM dependencies could be dropped entirely.Component reference
Nav.astro
Fixed top navigation bar. Renders the Pikanté logo, anchor links to the
#sabores, #preparar, #vida, and #faq sections, and social icon links. Hides the link list on viewports narrower than 760 px. A scroll-spy IntersectionObserver (in index.astro) adds the .active class to the matching anchor as sections scroll into view.Hero.astro
Above-the-fold section. Full-viewport height with a radial fire gradient background. Contains the main
<h1>, a tagline, two CTA buttons, a three-stat metadata row, and the <PrepVideo client:visible /> island. The hero headline uses the .h-display and .stroke classes for the outlined letter treatment.Marquee.astro
Animated brand-attribute ticker rendered as a full-bleed
--fire-colored strip. A duplicated set of <span> elements scrolls horizontally via a CSS @keyframes scroll animation at a constant 20-second loop. No JavaScript involved.Products.astro
Product catalog section (anchor
#sabores). Displays a two-column grid of product cards, each with a product photo, name, price, spice-level chile indicators, and a variant-pill selector. The variant pills use a lightweight inline <script> to toggle the .active class on click.HowTo.astro
Three-step preparation guide (anchor
#preparar). Each step is a card with a full-bleed step photo, large outlined step number, a .mono-labeled category tag, heading, and descriptive paragraph. Cards hover-lift with a CSS transform.WhatIs.astro
Four-feature brand explainer. Renders a bordered list of feature rows, each containing an outlined large numeral, an icon tile with a fire-gradient background, and a heading + body paragraph. Rows reveal a radial accent glow on hover via a CSS
::before pseudo-element.Stores.astro
Retail locator section. Shows a
city-grid of three city cards (Tegucigalpa, Gracias, Lepaera), each with its own gradient skin and a list of named retail locations. Below the city grid, a chip cloud lists smaller independent stores (tienditas). Ends with a partner-recruitment CTA strip.Lifestyle.astro
Full-screen lifestyle image section (anchor
#vida). Uses a fixed 84vh height with a background image, heavy vignette overlay gradients, a centered headline, and a tag cloud of lifestyle keywords. Zero JavaScript.Faq.astro
Accordion FAQ. Each question is a
<button> that toggles data-open="true" on the parent .faq-item via an inline <script>. The answer panel expands via a CSS max-height transition — no layout shift, no JavaScript animation library.Footer.astro
Brand footer with a four-column grid: brand logo + tagline + social icons, two link columns (Product and Contact), and an email newsletter input. Below the grid, a massive outlined wordmark stretches the full footer width as a decorative typographic element.
PrepVideo.jsx
React island. Renders a
9:16 aspect-ratio video player card (/assets/prep-video.mp4) with custom play/pause and mute/unmute buttons. Hydrates only when the component enters the viewport (client:visible), keeping the initial page load React-free.SocialProof.astro / Offer.astro
Both components are fully implemented but currently commented out in
index.astro. SocialProof renders a stats bar and a three-column review grid. Offer renders a time-limited promotional card with a countdown. Re-enable either by uncommenting its import and element tag in index.astro.Scroll-reveal system
Elements that should animate in as the user scrolls down carry the CSS classreveal. On page load, a small IntersectionObserver script in index.astro watches every .reveal element and adds the class in the moment it crosses a 12 % visibility threshold. The in class triggers a CSS transition that fades the element up from a 28 px downward offset.
revealIO.unobserve(el) removes it from the observer so it is never re-triggered. The corresponding CSS lives in global.css:
Nav scroll-spy
A secondIntersectionObserver in index.astro watches the four anchored sections and toggles the .active class on the matching nav link as each section crosses the middle of the viewport:
rootMargin (-40% 0px -55% 0px) means a section is only considered “active” when its top edge is within the middle 5 % band of the viewport, preventing flickering between adjacent sections.