Bella Vista
Fine-dining restaurant template with 3 switchable color themes and a gallery lightbox
- Template
- Bella Vista
- Sector
- Restaurant
- Year
- 2025
- Built with
- Astro 5, React 19, CSS Modules
- Pages
- 8
Bella Vista is a fine-dining restaurant template for trattorias, bistros, and chef-led kitchens. Eight routes cover the homepage, a full menu with four courses and sixteen dishes, a filterable photo gallery with lightbox, the story page, contact with a tabbed reservation form, a 404, and two live theme-preview routes. Three complete color themes, Classic burgundy, Coastal navy and terracotta, Urban charcoal and olive, swap through a single theme prop on the layout, with a dark mode on top. The hero runs a twenty-second Ken Burns loop under a three-stop gradient with staggered entrance animations. Built on Astro 5 and React 19 with CSS Modules and a full design-token system, no animation library required, and fifty-four real photos optimized to WebP via sharp.
What’s inside
- 8 routes, Home, Menu, Gallery, About, Contact, 404, plus /demo/coastal and /demo/urban live theme previews
- 3 complete color themes switched by one
themeprop, Classic burgundy #8B2635, Coastal terracotta #D4755E, Urban olive #6B8E4E - Dark mode layered on top via data-mode=“dark”, overrides backgrounds to #1A1A1A / #242424 without touching the theme
- Ken Burns hero, 20s infinite-alternate CSS keyframe scaling the background 1 → 1.1 under a three-stop dark gradient
- Full menu section, 4 courses (Antipasti, Pasta, Secondi, Dolci), 16 dishes with prices, photos and V/GF dietary badges
- Filterable gallery, 12 captioned images with All / Interior / Food / Team filters and a lightbox with wrap-around prev/next navigation
The signature
The hero pairs a slow Ken Burns loop with a choreographed entrance. A 20-second infinite-alternate CSS keyframe scales the background photo from 1 to 1.1 while translating it -1% on both axes, so the image never sits still, all under a three-stop dark gradient (0.4 → 0.6 → 0.7 black) that keeps the type readable. On top, one fadeInUp keyframe cascades through the block: the content wrapper at 0.3s, the tagline at 0.5s, the Playfair headline with its Great Vibes accent line at 0.7s, the subtitle at 0.9s and the CTA pair at 1.1s, pure CSS, no animation library shipped to the browser.
See it live
The demo is public: https://fpsjago.github.io/restaurant-template-pro/. 8 pages, built with Astro 5, React 19, TypeScript, CSS Modules.