Compare commits

..

7 Commits

Author SHA1 Message Date
b0dd929427 Update README.md
A note has been added to acknowledge the discrepancies between the README.md document and the current state of the Bloom Valley Nursery Demo.
2025-09-20 14:34:29 +00:00
dereklseitz
504333d086 Updates to .gitignore 2025-09-20 09:21:57 -05:00
dereklseitz
1ad601c943 Update first-visit modal: clarify desktop recommendation and demo-only notice 2025-09-11 17:52:07 -05:00
dereklseitz
2805c14e56 refactor: Adjust HTML/CSS across content pages for a more cohesive UX 2025-09-10 12:52:53 -05:00
dereklseitz
3bf8446c61 feat: Redesign About Us page with new content and video integration
Refactored about.njk to a new two-column layout.
    - Added a video component to the top of the story section to provide a more engaging narrative.
    - Updated CSS (about.css) to reflect the new layout and styling.
    - Integrated the contact and hours information into the feedback form section at the bottom of the page.
2025-09-10 11:24:29 -05:00
dereklseitz
d357d6fec3 fix: Fix infinite loop in 11ty by adding 'eleventyConfig.watchIgnores.add("./src/_data/eventsJson.js");' to .eleventy.js 2025-09-09 14:54:40 -05:00
dereklseitz
5477191d39 feat: Refactor Community Events page
Refactored Community Events page to be dynamic and API-driven.

Implemented a vertical carousel with category filtering and color-coded event cards.

Added new data pipeline to fetch event details from Zoho Calendar API at build time.

Fixed infinite rebuild loop in Eleventy by configuring the file watcher to ignore the intermediary data file.
2025-09-09 14:52:48 -05:00
30 changed files with 1220 additions and 738 deletions

View File

@@ -3,6 +3,7 @@ module.exports = function (eleventyConfig) {
eleventyConfig.addPassthroughCopy({ "src/styles": "styles" });
eleventyConfig.addPassthroughCopy({ "src/scripts": "scripts" });
eleventyConfig.addPassthroughCopy({ "src/robots.txt": "robots.txt"});
eleventyConfig.watchIgnores.add("./src/_data/eventsJson.js");
return {
dir: {
input: "src",

3
.gitignore vendored
View File

@@ -1,3 +1,6 @@
node_modules/
_site/
.env
.env.*
Image_Credits.txt
_data\communityEvents.js

View File

@@ -1,6 +1,7 @@
# **Bloom Valley Nursery Web Design**
**Note:** This README is the writeup for the original project which was written in HTML, CSS, and vanilla JS. It does not reflect changes made while refactoring and modularizing the demo. This file will be updated with those reflections soon.
### **Table of Contents**
- [Introduction](#introduction)

View File

@@ -1,5 +1,6 @@
/**
* @fileoverview This data file contains all community events for Bloom Valley Nursery Demo.
*
*/
const communityEvents = [

54
src/_data/eventsJson.js Normal file
View File

@@ -0,0 +1,54 @@
module.exports = { normalizedEvents: [
{
"calid": "3521964000000010003",
"title": "Gardening 101 with Bethany Bloom",
"uid": "6788b6fe00ef48d18749a55366207c76@zoho.com",
"start": "20250909T183000-0500",
"end": "20250909T203000-0500",
"isallday": false,
"location": "Bloom Valley Nursery",
"displayDate": "Tuesday, September 9, 2025 • 6:30 PM 8:30 PM",
"color": "#FC6060",
"description": "Join Bethany Bloom as she shares her tips for creating a themed decor through-out the home that you will be delighted to share with your guests!\n\n\n\n**This is a demo event for demonstration purposes only.**\n\n",
"category": "workshop"
},
{
"calid": "3521964000000010003",
"title": "Labor Day Sale",
"uid": "1ae512d837304fcc91c8920aa90a1f44@zoho.com",
"start": "20250901",
"end": "20250902",
"isallday": true,
"location": "Bloom Valley Nursery",
"displayDate": "Monday, September 1, 2025",
"color": "#7CAA56",
"description": "Celebrate Labor Day with Bloom Valley Nursery! Enjoy special discounts on select plants, gardening tools, and seasonal decor. This one-day event is a perfect opportunity to stock up on everything you need to make your home and garden thrive. \n\n**This is a demo event for demonstration purposes only—no actual sales will take place.**\n\n",
"category": "sales"
},
{
"calid": "3521964000000010003",
"title": "Landscaping 101 with Vincent Bloom",
"uid": "60085fc27f5045a5bf462c38c02677b0@zoho.com",
"start": "20250916T183000-0500",
"end": "20250916T203000-0500",
"isallday": false,
"location": "Bloom Valley Nursery",
"displayDate": "Tuesday, September 16, 2025 • 6:30 PM 8:30 PM",
"color": "#FC6060",
"description": "Come learn from Vincent Bloom, one of Bloom Valley Nursery's family owners, as he guides you through the art and science of landscaping. This workshop is designed for community members who want to create beautiful, sustainable outdoor spaces. We'll explore local plant varieties, discuss eco-friendly landscaping methods, and share tips for a garden that not only looks great but also supports our local ecosystem.\n\n",
"category": "workshop"
},
{
"calid": "3521964000000010003",
"title": "Johnny Appleseed Day",
"uid": "e0394985af2845fd8c1de4b782c139fb@zoho.com",
"start": "20250926T173000-0500",
"end": "20250926T193000-0500",
"isallday": false,
"location": "Bloom Valley Nursery",
"displayDate": "Friday, September 26, 2025 • 5:30 PM 7:30 PM",
"color": "#FFC464",
"description": "Celebrate the legacy of Johnny Appleseed with us! Join our hands-on workshop where you'll get to pick fresh, crisp apples right from our orchard and then learn how to properly plant your very own apple tree sapling. Our expert growers will share tips on nurturing your tree so it can thrive for years to come. This is a wonderful, educational event for the whole family to connect with nature and grow something beautiful.\n\n",
"category": "community"
}
] };

View File

@@ -21,7 +21,7 @@ const TESTIMONIALS = [
{
"id": "T02",
"clientName": "Morris F.",
"testimonial": "Thanks to the Gardening 101 Workshop with Bethany and Bloom Valley Nursery's amazing line of products, I won 'Best Azaleas' at the 2024 Royal Horticultural Society's American Cup!",
"testimonial": "Thanks to BVN's Workshops and amazing line of products, I won 'Best Azaleas' at the 2024 Royal Horticultural Society's American Cup!",
"dateObtained": "2024-12-03"
},
{

View File

@@ -115,10 +115,10 @@ module.exports = async function() {
isallday: event.isallday,
location: event.location,
displayDate: formatEventDate(event.dateandtime.start, event.dateandtime.end, event.isallday),
color: event.color,
};
console.log(`Processing event with UID: ${basicEvent.uid}`);
// This logic is necessary to get the description from a second API call
if (basicEvent.uid) {
const eventDetailsUrl = `${zohoApiUrl}/events/${basicEvent.uid}`;
console.log(`Making details API call to: ${eventDetailsUrl}`);
@@ -129,22 +129,41 @@ module.exports = async function() {
if (detailsResponse.ok) {
const detailsData = await detailsResponse.json();
console.log(`Details API call for UID ${basicEvent.uid} successful. Received data:`, detailsData);
if (detailsData.events && detailsData.events.length > 0) {
basicEvent.description = detailsData.events[0].description;
console.log(`Description added for event UID: ${basicEvent.uid}`);
}
} else {
console.warn(`Failed to fetch details for event UID: ${basicEvent.uid}`);
console.log(`Details response status: ${detailsResponse.status}`);
}
}
// Assign category based on color
switch (basicEvent.color) {
case '#7CAA56':
basicEvent.category = 'sales';
break;
case '#FC6060':
basicEvent.category = 'workshop';
break;
case '#FFC464':
basicEvent.category = 'community';
break;
default:
basicEvent.category = 'uncategorized';
}
return basicEvent;
});
const normalizedEvents = await Promise.all(normalizedEventsPromises);
console.log("All events processed. Final normalized events array:", normalizedEvents);
const filePath = path.resolve(__dirname, '..', '_data', 'eventsJson.js');
const fileContents = `module.exports = { normalizedEvents: ${JSON.stringify(normalizedEvents, null, 2)} };`;
fs.writeFileSync(filePath, fileContents, 'utf-8');
console.log(`Data successfully written to ${filePath}`);
return normalizedEvents;
} catch (error) {

View File

@@ -10,6 +10,11 @@
<title>{{title}}</title>
<link rel="stylesheet" href="/styles/variables.css">
<link rel="stylesheet" href="/styles/base.css">
<link rel="stylesheet" href="/styles/header.css">
<link rel="stylesheet" href="/styles/footer.css">
<link rel="stylesheet" href="/styles/modals.css">
{% if stylesheet %}
{% for style in stylesheet %}
<link rel="stylesheet" href="{{ style }}">
@@ -19,7 +24,6 @@
{% if hCAPTCHA %}
<script src="{{ hCAPTCHA }}" async defer></script>
{% endif %}
{% if fontAwesome %}
<script src="{{ fontAwesome }}" crossorigin="anonymous"></script>
{% endif %}
@@ -30,7 +34,7 @@
{% include "header.njk" %}
<main>
<main class="main-content-container">
{{ content | safe }}
@@ -40,11 +44,14 @@
{% include "modals.njk" %}
<script src="/scripts/demo-modal.js"></script>
{% if pageScripts %}
{% for script in pageScripts %}
<script src="{{ script }}"></script>
{% endfor %}
{% endif %}
<script src="/scripts/cart.js"></script>
<script src="/scripts/newsletter.js">
</body>
</html>

View File

@@ -1,7 +1,8 @@
<div id="right-side">
<nav id="category-nav">
<div id="category-nav-container">
<h2>Shop by Category</h2>
<h2>Categories</h2>
<hr>
<div class="categories">
<ul>
<li><a href="/gallery/?category=trees#" class="cat-btn">Trees</a></li>

View File

@@ -1,17 +1,20 @@
<header role="banner">
<div class="header-container">
<div class="header-left">
<div class="logo">
<img
src="/images/Client1_LogoPalette2_F0C06D.png"
<div class="logo-name-cart">
<div class="logo-box">
<img class="logo" src="/images/Client1_LogoPalette2_F0C06D.png"
alt="Bloom Valley Nursery Logo">
</div>
<div class="name-box">
<p class="business-name">Bloom Valley Nursery</p>
</div>
<div class="cart-box">
<button id="shopping-cart" aria-label="Shopping Cart">
<i class="fa-solid fa-cart-shopping fa-2xl"></i>
</button>
</div>
</div>
<div class="header-center">
<div class="business-name-container">
<p class="business-name">Bloom Valley Nursery</p>
</div>
<div class="nav-container">
<nav role="navigation" aria-label="Main Navigation">
<ul>
@@ -31,14 +34,4 @@
</nav>
</div>
</div>
<div class="header-right">
<button id="menu-toggle" class="menu-toggle" aria-label="Open navigation menu" aria-expanded="false">
<i class="fa-solid fa-bars fa-2xl"></i>
</button>
<button id="shopping-cart" aria-label="Shopping Cart">
<i class="fa-solid fa-cart-shopping fa-2xl"></i>
</button>
</div>
</div>
</header>

View File

@@ -4,73 +4,63 @@ metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
seoIndexing: false
title: "About - Bloom Valley Nursery Demo"
stylesheet:
- "/styles/variables.css"
- "/styles/base.css"
- "/styles/header.css"
- "/styles/about.css"
- "/styles/footer.css"
- "/styles/modals.css"
fontAwesome: "https://kit.fontawesome.com/c42448086d.js"
currentPage: "about"
pageScripts:
- "/scripts/feedback.js"
- "/scripts/cart.js"
- "/scripts/newsletter.js"
---
<div class="about">
<div id="main-top">
<div id="top" aria-labelledby="bvn-story">
<section class="story-section">
<h2 id="bvn-story">The Story of Bloom Valley</h2>
<div class="video-border">
<div class="bvn-video" style="left: 0px; width: 600px; height: 338px; position: relative; border-radius: 15px">
<iframe src="https://video.pictory.ai/embed/202509100421159152ab7b3c7e5dc46a29dec7057c108b158/20250910051954092q4MZ6z6NHgYUlrP" class="iframe"
title="The Story of Bloom Valley" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0; border-radus: 15px;" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>
</iframe>
</div>
</div>
<div class="story">
<p> Legend has it that in 1822, Benjamin Bloom, his wife Violet, and their young daughter Nora embarked on a journey westward, driven by dreams of new opportunities in California. Along the way, they wandered through rolling hills, dense forests, and sparkling streams, until one fateful day, they stumbled upon a hidden valley unlike anything they had ever seen.
</p>
<p>
The valley was a riot of color, alive with flowers of every hue imaginable—delicate bluebells swaying in the breeze, golden sunflowers turning toward the sun, and rare, exotic blooms that seemed to glow with an otherworldly light. Birds of vibrant plumage sang from the trees, and a gentle stream wove through the meadow, reflecting the kaleidoscope of colors around it.
</p>
<p>
Benjamin, Violet, and little Nora were spellbound. They knew instantly that this magical place was meant to be their home. Abandoning their original plans, they settled in the valley, tending the land and nurturing its natural beauty. Over time, the area became known as Bloom Valley, a name that honored both the family who called it home and the flowers that had captured their hearts.
</p>
<p>
Generations later, the Bloom family's reverence for the valley's splendor continues to flourish. Today, on the very land where Benjamin and Violet first marveled at the blooms, stands Bloom Valley Nursery. Still family-owned and operated, siblings Bethany, Vincent, and Nathaniel Bloom carry forward a tradition of cultivating and sharing the natural beauty that enchanted their ancestors more than two centuries ago.
</p>
<p>
Each plant in the nursery is chosen with care, echoing the Bloom family's historic love for vibrant, rare, and enduring flora. Though the world around them has changed, the heart of Bloom Valley Nursery remains the same: a place where beauty, nature, and community grow hand in hand. From the first seed to the full bloom, the nursery is a celebration of life's simple joys. Let us help you cultivate joy, one bloom at a time.</p>
</p>
</div>
</section>
</div>
<div id="bottom">
<section
id="business-info"
aria-label="Hours of operation and contact info"
>
<h3>Contact Us</h3>
<div id="phone">
<h4><strong>Phone:</strong></h4>
<p>(555) 123-4567</p>
</div>
<h3>Hours of Operation</h3>
<div id="hours">
<h4><strong>Monday - Friday:</strong></h4>
<p>9:00 AM - 6:00 PM</p>
<h4><strong>Saturday & Sunday:</strong></h4>
<p>10:00 AM - 5:00 PM</p>
</div>
aria-label="Contact and Hours of Operation">
<h3>Contact & Hours</h3>
<p><strong>Phone:</strong><br> (555) 123-4567</p>
<p><strong>Monday - Friday:</strong><br> 9:00 AM - 6:00 PM</p>
<p><strong>Saturday & Sunday:</strong><br> 10:00 AM - 5:00 PM</p>
</section>
<section class="story-section">
<div id="story" aria-label="History of Bloom Valley Nursery">
<h2>The Story of Bloom Valley</h2>
<p>
Legend has it that in 1822, Benjamin Bloom, his wife Violet, and
their young daughter Nora stumbled upon a breathtaking valley
brimming with vibrant, rare flowers during their journey westward.
Enchanted by its beauty, they decided to settle there, abandoning
their plans to reach California. This picturesque haven became known
as Bloom Valley.
</p>
<p>
Today, on the very land where the Bloom family found their paradise,
stands Bloom Valley Nursery. Still family-owned and operated,
siblings Bethany, Vincent, and Nathaniel Bloom carry forward a
legacy of preserving and sharing the natural beauty that captivated
the hearts of their ancestors over two centuries ago.
</p>
<p>Though many things have changed through the years, our commitment to serving our community has remained the same. Let us help you cultivate joy, one bloom at a time!</p>
</div>
</section>
</div>
<div id="main-bottom">
<div id="feedback" aria-label="Feedback form">
<section id="feedback" aria-label="Feedback form">
<div id="feedback-intro">
<h2>We Want to Hear From You!</h2>
<h3>Your feedback provides us with valuable insight into where we stand in our commitment to our neighbors, friends, and the entire Bloom Valley community.</h3>
<p class="special">Your feedback provides us with valuable insight into where we stand in our commitment to our neighbors, friends, and the entire Bloom Valley community.</p>
<p>Feel free to contact us by filling out the form below if you have any questions, concerns, or simply want to tell us how we can better serve you in the future. You are also welcome to give us a call at the number above if you need to speak with someone directly. Our friendly staff can help answer your questions or guide you in placing custom orders as well!</p>
</div>
<div id="feedback-form">
<form action="#" method="POST">
<div class="inputs">
<div id="customer-info">
<div id="name-field">
<label for="name">Name:</label>
<label for="name">Name: </label>
<input
type="text"
id="name"
@@ -79,7 +69,7 @@ pageScripts:
required/>
</div>
<div id="phone-field">
<label for="tel">Phone Number:</label>
<label for="tel">Phone: </label>
<input
type="tel"
id="tel"
@@ -88,7 +78,7 @@ pageScripts:
required/>
</div>
<div id="email-field">
<label for="email">Email:</label>
<label for="email">Email: </label>
<input
type="email"
id="email"
@@ -97,6 +87,7 @@ pageScripts:
required/>
</div>
</div>
<div class="message-box">
<div id="customer-message">
<div id="message-field">
<label for="message">Message:</label>
@@ -108,7 +99,7 @@ pageScripts:
required>
</textarea>
</div>
<div id="form-submit-btn">
</div>
<button
id="form-submit"
type="submit"
@@ -119,5 +110,6 @@ pageScripts:
</div>
</form>
</div>
</div>
</section>
</div>

View File

@@ -4,47 +4,67 @@ metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
seoIndexing: false
title: "Community Events - Bloom Valley Nursery Demo"
stylesheet:
- "/styles/variables.css"
- "/styles/base.css"
- "/styles/header.css"
- "/styles/community.css"
- "/styles/footer.css"
- "/styles/modals.css"
fontAwesome: "https://kit.fontawesome.com/c42448086d.js"
currentPage: "community"
pageScripts:
- "/scripts/cart.js"
- "/scripts/newsletter.js"
- "/scripts/events-carousel.js"
---
<div class="community">
<h1>Mark Your Calendars!</h1>
<div id="calendar-events-container">
<section class="events" aria-label="List of upcoming local events">
<div class="upcoming-events">
<h2>Upcoming Events</h2>
{% for event in zohoCalendarEvents %}
<div id="{{ event.uid }}" class="zoho-event">
{% if event.title %}
<h3 class="title">{{ event.title }}</h3>
{% endif %}
<p class="display-date">{{ event.displayDate }}</p>
{% if event.location %}
<p class="location">Location: {{ event.location }}</p>
{% endif %}
{% if event.description %}
<p class="description">{{ event.description }}</p>
{% endif %}
</div>
{% endfor %}
<p class="notice">Check out the Upcoming Events at Bloom Valley Nursery and around the community!<br> Our BVN Workshops are for all ages and free of charge. We ask that you use our <a class="com-link" href="../about/#feedback" target="_blank" rel="noopener noreferrer">contact form here</a> to sign up for BVN Workshops in advance. Reservations are not required, though, and we will make space for all who attend.</p>
<div id="events-navigation">
<ul class="event-categories">
<li class="workshops-btn enav"><a href="/community/?category=workshop#" class="cat-btn">Workshops</a></li>
<li class="celebrations-btn enav"><a href="/community/?category=community#" class="cat-btn ">Community Celebrations</a></li>
<li class="sales-btn enav"><a href="/community/?category=sales#" class="cat-btn">Plant Sales</a></li>
<li class="all-btn enav"><a href="/community/?category=all#" class="cat-btn">All Events</a></li>
</ul>
</div>
<div class="interactive-events">
<div class="events-left">
<div class="calendar">
<iframe src="https://calendar.zoho.com/zc/ui/embed/#calendar=zz0801123006fa33fd29e1610f845b1a39bac3a52e92215b45d6a6f982e3a69c351d4e7b0be038133d1988f6ed212d5f2bd86e7bef&title=Bloom%20Valley%20Nursery&type=1&language=en&timezone=America%2FChicago&showTitle=1&showTimezone=1&startingDayOfWeek=0&timeFormat=0&view=month&showDetail=1&theme=1&showAttendee=0&showSwitchingViews=0&expandAllday=0&eventColorType=light&showAllEvents=0" title="Bloom Valley Nursery"width=650 height=500 frameBorder="0" scrolling="no"></iframe>
</div>
</div>
<div class="events-right">
<div class="scroll-direction">
<button
id="scroll-up"
aria-label="Scroll events up"
aria-controls="event-carousel"
class="fa-solid fa-chevron-up"
>
</button>
</div>
<div id="event-list">
<!-- Event List will be populated here -->
</div>
<div class="scroll-direction">
<button
id="scroll-down"
aria-label="Scroll events down"
aria-controls="event-carousel"
class="fa-solid fa-chevron-down"
>
</button>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="add-events">
<p>
For more details, to add events to this page, or to leave feedback,
<a
<a class="com-link"
href="/about/#feedback"
aria-label="Go to the feedback form on the About Us page to leave feedback or inquiries."
>click here</a

View File

@@ -4,29 +4,35 @@ metaDesc: "Credit & attribution for the contributors of this demo eCommerce webs
seoIndexing: true
title: "Credits & Attribution - Bloom Valley Nursery Demo"
stylesheet:
- "/styles/variables.css"
- "/styles/base.css"
- "/styles/header.css"
- "/styles/credits.css"
- "/styles/footer.css"
- "/styles/modals.css"
fontAwesome: "https://kit.fontawesome.com/c42448086d.js"
isLandingPage: false
pageScripts:
- "/scripts/tooltips.js"
- "/scripts/script.js"
- "/scripts/cart.js"
- "/scripts/newsletter.js"
---
<div class="credits-container">
<div class="content">
<div class="intro">
<h1>Credits & Attributions</h1>
<p>A heartfelt <strong>Thank You</strong> is extended to these creators and the platforms that host their work. Their royalty-free contributions to the public helped make this demo possible.</p>
<h1 class="cred-attr">Credits & Attributions</h1>
<p class="thanks">A heartfelt <strong class="strong-thanks">Thank You</strong> is extended to these creators and the platforms that host their work.<br> Their royalty-free contributions to the public helped make this demo possible.</p>
<p id="tip-desc" class="visually-hidden">Preview shows a small version of the linked image.</p>
<div>
<ul class="credits-list">
<div class="video-box">
<h2 class="videos">Video Content</h2>
<ul class="videos-credits-list">
<li class="credit" data-tooltip="https://video.pictory.ai/202509100421159152ab7b3c7e5dc46a29dec7057c108b158/20250910051954092q4MZ6z6NHgYUlrP">
<div class="meta">
<p>
<a href="https://video.pictory.ai/202509100421159152ab7b3c7e5dc46a29dec7057c108b158/20250910051954092q4MZ6z6NHgYUlrP">The Story of Bloom Valley</a> was created by <a class="creator" href="https://dlseitz.dev" target="_blank" rel="noopener noreferrer">Derek L. Seitz</a> with <a class="source" href="https://pictory.ai/" target="_blank" rel="noopener noreferrer">Pictory.AI</a> under the <a class="license" href="https://pictory.ai/terms-of-service#:~:text=(c).%20Third%2DParty,new%20Pictoried%20Content." target="_blank" rel="noopener noreferrer">Pictory.AI Terms of Service</a>.
</p>
</div>
</li>
</ul>
</div>
<div class="images-box">
<h2 class="images">Image Content</h2>
<ul class="images-credits-list">
{% for credit in credits.CREDITS %}
<li class="credit" data-tooltip="../images/_m-thumbs/{{ credit.category }}/{{ credit.fileName }}">
<div class="thumb">
@@ -37,7 +43,7 @@ pageScripts:
loading="lazy" decoding="async">
</div>
<div class="meta" >
<div class="meta">
<p>
Photo by <a class="creator" href="{{ credit.creatorUrl }}" target="_blank"
rel="noopener noreferrer">{{ credit.creator }}</a> at <a class="source" href="{{ credit.sourceUrl }}" target="_blank" rel="noopener noreferrer">{{ credit.host }}</a> under the <a class="license" href="{{ credit.licenseUrl }}" target="_blank" rel="noopener noreferrer">{{ credit.license }}</a> .
@@ -47,4 +53,5 @@ pageScripts:
{% endfor %}
</ul>
</div>
</div>
</div>

4
src/events.json.njk Normal file
View File

@@ -0,0 +1,4 @@
---
permalink: /data/events.json
---
{{ eventsJson.normalizedEvents | dump | safe}}

View File

@@ -4,23 +4,16 @@ metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
seoIndexing: false
title: "Gallery - Bloom Valley Nursery Demo"
stylesheet:
- "/styles/variables.css"
- "/styles/base.css"
- "/styles/header.css"
- "/styles/gallery.css"
- "/styles/category-nav.css"
- "/styles/footer.css"
- "/styles/modals.css"
fontAwesome: "https://kit.fontawesome.com/c42448086d.js"
currentPage: "gallery"
pageScripts:
- "/scripts/gallery-carousel.js"
- "/scripts/script.js"
- "/scripts/cart.js"
- "/scripts/newsletter.js"
---
<div id="gallery-top">
<div class="left-side">
<section id="product-carousel-feature" aria-label="Interactive Carousel of Available Products by Category.">
<h2>Products by Category</h2>
<div id="product-category-card">
@@ -46,7 +39,8 @@ pageScripts:
<button id="cart-details">View Shopping Cart</button>
</div>
</section>
</div>
<div class="right-side">
{% include "category-nav.njk" %}
</div>
</div>

View File

@@ -4,19 +4,12 @@ metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
seoIndexing: false
title: "Landing - Bloom Valley Nursery Demo"
stylesheet:
- "/styles/variables.css"
- "/styles/base.css"
- "/styles/header.css"
- "/styles/index.css"
- "/styles/category-nav.css"
- "/styles/footer.css"
- "/styles/modal.css"
fontAwesome: "https://kit.fontawesome.com/c42448086d.js"
currentPage: "index"
pageScripts:
- "/scripts/script.js"
- "/scripts/cart.js"
- "/scripts/newsletter.js"
---
<!-- Main Content Section -->
@@ -40,7 +33,7 @@ pageScripts:
<h2 id="testimonials-heading">What Others Say</h2>
{% for item in testimonials.TESTIMONIALS %}
<div id="{{ id }}" class="testimonial-item">
<h3 class="client-name">{{ item.clientName }} said<h3>
<h3 class="client-name">{{ item.clientName }} said</h3>
<p class="client-quote">"{{ item.testimonial }}"</p>
</div>
{% endfor %}
@@ -58,7 +51,7 @@ pageScripts:
<a href="/gallery/">
<h3 class="product-name">{{ item.productName }}</h3>
<figure>
<img src="images/_m-thumbs/{{ item.category }}/{{ item.imageFile }}" alt="{{ item.altText }}" class="featured-item">
<img src="images/_m-thumbs/{{ item.category }}/{{ item.imageFile }}" alt="{{ item.altText }}" width="480" height="320" class="featured-item">
<figcaption class="short-description">{{ item.shortDescription }}</figcaption>
</figure>
<p class="price">${{ item.price }}</p>

54
src/scripts/demo-modal.js Normal file
View File

@@ -0,0 +1,54 @@
document.addEventListener("DOMContentLoaded", () => {
// ================== DEMO NOTICE MODAL ==================
if (!sessionStorage.getItem("demoNoticeAcknowledged")) {
let modal = document.createElement("div");
modal.id = "demoModal";
modal.style.position = "fixed";
modal.style.left = "0";
modal.style.top = "0";
modal.style.width = "100%";
modal.style.height = "100%";
modal.style.background = "rgba(0, 0, 0, 0.7)";
modal.style.display = "flex";
modal.style.alignItems = "center";
modal.style.justifyContent = "center";
modal.style.zIndex = "1000";
let modalContent = document.createElement("div");
modalContent.style.background = "white";
modalContent.style.padding = "20px";
modalContent.style.borderRadius = "10px";
modalContent.style.textAlign = "center";
modalContent.style.width = "80%";
modalContent.style.maxWidth = "400px";
let heading = document.createElement("h2");
heading.innerText = "Demo Notice";
let message = document.createElement("p");
message.innerText =
"This site is best viewed using a desktop browser. It is for demonstration purposes only and is not a real e-commerce store. No purchases can be made.";
let closeButton = document.createElement("button");
closeButton.innerText = "I Understand";
closeButton.style.padding = "10px 20px";
closeButton.style.marginTop = "15px";
closeButton.style.border = "none";
closeButton.style.background = "#007bff";
closeButton.style.color = "white";
closeButton.style.fontSize = "16px";
closeButton.style.cursor = "pointer";
closeButton.style.borderRadius = "5px";
closeButton.addEventListener("click", function () {
modal.style.display = "none";
sessionStorage.setItem("demoNoticeAcknowledged", "true");
});
modalContent.appendChild(heading);
modalContent.appendChild(message);
modalContent.appendChild(closeButton);
modal.appendChild(modalContent);
document.body.appendChild(modal);
}
});

View File

@@ -0,0 +1,201 @@
// events-carousel.js
// --- State Variables ---
let allEvents = [];
let selectedEvents = [];
let currentIndex = 0;
// --- Helpers ---
const parseZohoTimestamp = (raw) => {
if (!raw && raw !== 0) return new Date(0);
const s = String(raw).trim();
let m = s.match(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})([+-]\d{4}|Z)?$/i);
if (m) {
const [, Y, Mo, D, hh, mm, ss, tz] = m;
let tzPart = '';
if (tz && tz.toUpperCase() !== 'Z') tzPart = tz.slice(0,3) + ':' + tz.slice(3);
else if (tz && tz.toUpperCase() === 'Z') tzPart = 'Z';
const iso = `${Y}-${Mo}-${D}T${hh}:${mm}:${ss}${tzPart}`;
const d = new Date(iso);
if (!isNaN(d)) return d;
}
m = s.match(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})([+-]\d{4}|Z)?$/i);
if (m) {
const [, Y, Mo, D, hh, mm, tz] = m;
let tzPart = '';
if (tz && tz.toUpperCase() !== 'Z') tzPart = tz.slice(0,3) + ':' + tz.slice(3);
else if (tz && tz.toUpperCase() === 'Z') tzPart = 'Z';
const iso = `${Y}-${Mo}-${D}T${hh}:${mm}:00${tzPart}`;
const d = new Date(iso);
if (!isNaN(d)) return d;
}
m = s.match(/^(\d{4})(\d{2})(\d{2})$/);
if (m) {
const [, Y, Mo, D] = m;
return new Date(Number(Y), Number(Mo) - 1, Number(D));
}
const tryDate = new Date(s);
if (!isNaN(tryDate)) return tryDate;
const mmdd = s.match(/^(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2,4})$/);
if (mmdd) {
let month = parseInt(mmdd[1], 10);
let day = parseInt(mmdd[2], 10);
let year = parseInt(mmdd[3], 10);
if (year < 100) year += 2000;
return new Date(year, month - 1, day);
}
return new Date(0);
};
const eventTimestamp = (ev) => {
if (!ev) return 0;
const candidate = ev.start || ev.displayDate || ev.date || ev.eventDate || ev.createdAt || ev.created;
return parseZohoTimestamp(candidate).getTime();
};
// --- Render the visible items ---
const renderEvents = () => {
const eventList = document.getElementById("event-list");
if (!eventList) return;
eventList.innerHTML = "";
if (selectedEvents.length === 0) {
eventList.innerHTML = `<p class="no-events-message">No events found for this category.</p>`;
return;
}
const lastIndex = selectedEvents.length - 1;
let visibleIndexes = [];
if (selectedEvents.length <= 3) {
visibleIndexes = Array.from({ length: selectedEvents.length }, (_, i) => i);
} else if (currentIndex === 0) {
visibleIndexes = [0, 1, 2];
} else if (currentIndex === lastIndex) {
visibleIndexes = [lastIndex - 2, lastIndex - 1, lastIndex];
} else {
visibleIndexes = [currentIndex - 1, currentIndex, currentIndex + 1];
}
visibleIndexes = visibleIndexes.filter(i => i >= 0 && i <= lastIndex);
visibleIndexes.forEach((index) => {
const event = selectedEvents[index];
if (!event) return;
const card = document.createElement("div");
card.className = "event-card";
card.addEventListener('click', () => {
if (index !== currentIndex) {
currentIndex = index;
renderEvents();
}
});
if (index === currentIndex) {
card.classList.add("is-expanded");
card.innerHTML = `
<h3 class="event-title ${event.category}">${event.title || ''}</h3>
<p class="event-date">${event.displayDate || event.start || ''}</p>
<p class="event-location">${event.location ? `Location: ${event.location}` : ''}</p>
<p class="event-description">${event.description ? event.description : ''}</p>
`;
} else {
card.classList.add("is-collapsed");
card.innerHTML = `
<h3 class="event-title ${event.category}">${event.title || ''}</h3>
<p class="event-date">${event.displayDate || event.start || ''}</p>
`;
card.style.cursor = 'pointer';
}
eventList.appendChild(card);
});
};
// --- Navigation Functions ---
const scrollUp = () => {
if (currentIndex > 0) {
currentIndex--;
renderEvents();
}
};
const scrollDown = () => {
if (currentIndex < selectedEvents.length - 1) {
currentIndex++;
renderEvents();
}
};
// --- Category Update and Filtering ---
const updateEventList = (category) => {
const scrollUpButton = document.getElementById('scroll-up');
const scrollDownButton = document.getElementById('scroll-down');
if (scrollUpButton) scrollUpButton.removeEventListener('click', scrollUp);
if (scrollDownButton) scrollDownButton.removeEventListener('click', scrollDown);
if (category === 'all') {
selectedEvents = allEvents.slice();
} else {
selectedEvents = allEvents.filter(event => event.category === category);
}
selectedEvents.sort((a, b) => eventTimestamp(a) - eventTimestamp(b));
currentIndex = 0;
renderEvents();
if (scrollUpButton) scrollUpButton.addEventListener('click', scrollUp);
if (scrollDownButton) scrollDownButton.addEventListener('click', scrollDown);
};
// --- Initialization ---
document.addEventListener('DOMContentLoaded', () => {
fetch("../data/events.json")
.then(response => {
if (!response.ok) throw new Error(`HTTP error! Status: ${response.status}`);
return response.json();
})
.then(data => {
allEvents = Array.isArray(data) ? data : (data.normalizedEvents || []);
console.log("Events data loaded successfully:", allEvents);
const categoryButtons = document.querySelectorAll(".cat-btn");
categoryButtons.forEach(button => {
button.addEventListener('click', (event) => {
event.preventDefault();
// --- Active button logic ---
categoryButtons.forEach(btn => btn.parentElement.classList.remove('active'));
button.parentElement.classList.add('active');
const url = new URL(button.href);
const category = url.searchParams.get('category');
updateEventList(category);
});
});
// Set default category and active button
const currentUrl = new URL(window.location.href);
const defaultCategory = currentUrl.searchParams.get('category') || 'all';
updateEventList(defaultCategory);
categoryButtons.forEach(btn => {
const url = new URL(btn.href);
const btnCategory = url.searchParams.get('category');
if (btnCategory === defaultCategory) btn.parentElement.classList.add('active');
});
})
.catch(error => {
console.error('Problem fetching events data:', error);
const eventList = document.getElementById("event-list");
if (eventList) eventList.innerHTML = `<p class="error-message">Failed to load events. Please try again later.</p>`;
});
});

View File

@@ -71,6 +71,20 @@ const updateProductList = (category) => {
const productList = document.getElementById("product-list");
if (!productList) return console.error("Element with ID 'product-list' not found.");
// Remove active class from all buttons
document.querySelectorAll(".categories ul li").forEach(li => {
li.classList.remove('active');
});
// Add active class to the button for the current category
document.querySelectorAll(".cat-btn").forEach(button => {
const url = new URL(button.href);
const btnCategory = url.searchParams.get('category');
if (btnCategory === category) {
button.parentElement.classList.add('active');
}
});
selectedProducts = allProducts.filter(product => product.category === category);
currentIndex = 0;

View File

@@ -1,58 +1,6 @@
document.addEventListener("DOMContentLoaded", () => {
// ================== DEMO NOTICE MODAL ==================
if (!sessionStorage.getItem("demoNoticeAcknowledged")) {
let modal = document.createElement("div");
modal.id = "demoModal";
modal.style.position = "fixed";
modal.style.left = "0";
modal.style.top = "0";
modal.style.width = "100%";
modal.style.height = "100%";
modal.style.background = "rgba(0, 0, 0, 0.7)";
modal.style.display = "flex";
modal.style.alignItems = "center";
modal.style.justifyContent = "center";
modal.style.zIndex = "1000";
let modalContent = document.createElement("div");
modalContent.style.background = "white";
modalContent.style.padding = "20px";
modalContent.style.borderRadius = "10px";
modalContent.style.textAlign = "center";
modalContent.style.width = "80%";
modalContent.style.maxWidth = "400px";
let heading = document.createElement("h2");
heading.innerText = "Demo Notice";
let message = document.createElement("p");
message.innerText =
"This site is for demonstration purposes only and is not a real e-commerce store. No purchases can be made.";
let closeButton = document.createElement("button");
closeButton.innerText = "I Understand";
closeButton.style.padding = "10px 20px";
closeButton.style.marginTop = "15px";
closeButton.style.border = "none";
closeButton.style.background = "#007bff";
closeButton.style.color = "white";
closeButton.style.fontSize = "16px";
closeButton.style.cursor = "pointer";
closeButton.style.borderRadius = "5px";
closeButton.addEventListener("click", function () {
modal.style.display = "none";
sessionStorage.setItem("demoNoticeAcknowledged", "true");
});
modalContent.appendChild(heading);
modalContent.appendChild(message);
modalContent.appendChild(closeButton);
modal.appendChild(modalContent);
document.body.appendChild(modal);
}
// ================== SHOPPER PROMO CAROUSEL ==================
// ================== PROMOS CAROUSEL ==================
const promo = document.querySelectorAll(".promo-item");
let currentIndexPromo = 0;
@@ -71,7 +19,7 @@ document.addEventListener("DOMContentLoaded", () => {
showNextPromo();
setInterval(showNextPromo, 2250);
// ================== CUSTOMER HIGHLIGHTS CAROUSEL ==================
// ================== TESTIMONIALS CAROUSEL ==================
const testimonials = document.querySelectorAll(".testimonial-item");
let currentIndexTestimonials = 0;
@@ -91,19 +39,6 @@ document.addEventListener("DOMContentLoaded", () => {
setInterval(showNextTestimonial, 3500);
// ================== FEATURED ITEMS CAROUSEL ==================
/*const featuredItems = document.querySelectorAll("#featured-images .featured-item");
let currentIndex = 0;
function showNextItem() {
featuredItems[currentIndex].classList.remove("active");
currentIndex = (currentIndex + 1) % featuredItems.length;
featuredItems[currentIndex].classList.add("active");
}
featuredItems[currentIndex].classList.add("active");
setInterval(showNextItem, 3000);*/
// ================== UPDATED FEATURED ITEMS CAROUSEL ==================
const featuredItems = document.querySelectorAll(".featured-card");
let currentIndexFeatured = 0;

View File

@@ -1,212 +1,255 @@
/* |--↓-↓-↓ Start about.html ↓-↓-↓--| */
.about {
#top {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
background-color: var(--color-soft-golden);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
box-shadow: var(--shadow-medium);
}
#main-top {
.story-section {
display: flex;
flex-direction: row;
gap: 30px;
width: 90vw;
flex-direction: column;
align-items: center;
justify-content: center;
width: 95%;
margin: 20px 0;
height: auto;
background-color: var(--color-pale-green);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
box-shadow: var(--shadow-medium);
}
#business-info {
.video-border {
border-bottom: solid 3px var(--color-destin-sand);
padding: 20px;
margin-bottom: 20px;
}
.bvn-video {
display: block;
align-items: center;
width: 25vw;
background-color: var(--color-soft-golden);
border: solid var(--color-destin-sand);
border-radius: 10px;
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
box-shadow: var(--shadow-medium);
margin: 10px auto;
}
#phone,
#hours {
background-color: var(--color-destin-sand);
border: solid var(--color-light-teal);
border-radius: 10px;
margin: 5px 10px;
.iframe {
border-radius: 15px;
}
#business-info h3,
#feedback-intro h2 {
font-size: 1.875rem;
text-align: center;
text-shadow: 0.5px 0.5px 2px var(--color-dark-green),
-0.5px -0.5px 2px var(--color-dark-green),
-0.5px 0.5px 2px var(--color-dark-green),
0.5px -0.5px 2px var(--color-dark-green);
color: var(--color-destin-sand);
h2#bvn-story {
font-size: 2.25rem;
background-color: var(--color-mid-green);
border: solid var(--color-destin-sand);
max-width: 75vw;
border-radius: 10px;
padding-left: 10px;
transform: translateX(0px);
box-shadow: var(--shadow-medium);
}
#business-info p {
text-align: center;
font-size: 14pt;
}
#business-info h4 {
text-align: center;
background-color: var(--color-light-teal);
color: var(--color-destin-sand);
border: solid var(--color-destin-sand);
border-radius: 15px;
padding: 0 10px;
width: 50%;
margin-left: 22.5%;
box-shadow: var(--shadow-subtle);
padding: 0 100px;
margin-top: 20px;
margin-bottom: 20px;
width: fit-content;
text-align: center;
text-shadow: var(--text-outline-heading);
box-shadow: var(--shadow-medium);
align-self: center;
}
#story {
.story {
display: flex;
flex-direction: column;
width: 95%;
padding: 20px 10px;
margin: 20px 0px;
text-align: left;
justify-content: center;
align-items: center;
justify-content: left;
width: 70vw;
margin-left: 30px;
}
#story h2 {
background-color: var(--color-mid-green);
color: var(--color-destin-sand);
border: solid var(--color-destin-sand);
background-color: var(--color-destin-sand);
border: solid 3px var(--color-mid-green);
border-radius: 15px;
text-shadow: 0.5px 0.5px 2px var(--color-dark-green),
-0.5px -0.5px 2px var(--color-dark-green),
-0.5px 0.5px 2px var(--color-dark-green),
0.5px -0.5px 2px var(--color-dark-green);
width: 50%;
padding: 5px 10px;
text-align: center;
margin-right: 12.5%;
box-shadow: var(--shadow-medium);
}
#story p {
.story p {
color: var(--color-dark-green);
font-size: 1.25rem;
font-weight: bold;
text-indent: 1.75rem;
margin: 5px auto;
padding: 0 50px;
}
#bottom {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 20px;
background-color: var(--color-pale-green);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
width: 95%;
padding: 20px;
margin: 30px auto;
box-shadow: var(--shadow-medium);
}
#business-info {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: fit-content;
background-color: var(--color-destin-sand);
color: var(--color-dark-green);
border: solid 2px var(--color-pale-green);
padding: 0 10px;
margin-left: 10px;
border-radius: 15px;
white-space: nowrap;
box-shadow: var(--shadow-medium);
}
#business-info h3 {
font-size: 1.3rem;
text-decoration: underline;
margin-top: 10px;
margin-left: 20px;
margin-right: 20px;
margin-bottom: 0;
}
strong {
font-size: 1.2rem;
}
#business-info p {
font-size: 1.1rem;
margin-top: 0;
}
#feedback {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
justify-content: space-between;
background-color: var(--color-mid-green);
border: solid var(--color-destin-sand);
border-radius: 15px;
width: 90vw;
margin-top: 30px;
box-shadow: var(--shadow-medium);
width:fit-content;
margin: auto;
}
#feedback h2 {
background-color: var(--color-light-teal);
border: solid var(--color-destin-sand);
border-radius: 10px;
width: 50vw;
padding: 5px 10px;
margin-top: 5px;
margin-bottom: 20px;
margin-left: auto;
margin-right: auto;
text-align: center;
margin-left: 25vw;
margin-right: 25vw;
text-shadow: 0.5px 0.5px 2px var(--color-dark-green),
-0.5px -0.5px 2px var(--color-dark-green),
-0.5px 0.5px 2px var(--color-dark-green),
0.5px -0.5px 2px var(--color-dark-green);
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
background-color: var(--color-mid-green);
border: solid 2px var(--color-destin-sand);
text-shadow: var(--text-outline-heading);
border-radius: 15px;
font-size: 1.6rem;
color: var(--color-destin-sand);
width: fit-content;
padding: 0 50px;
box-shadow: var(--shadow-medium);
}
#feedback h3 {
color: #00231c;
font-weight: bold;
width: 85vw;
text-align: center;
margin-left: 7.5vw;
margin-right: 7.5vw;
.special {
font-size: 1.3rem;
font-weight: 500px;
}
#feedback p {
color: #00231c;
width: 85vw;
font-size: 1.2rem;
color: var(--color-dark-green);
text-align: center;
margin-left: 7.5vw;
margin-right: 7.5vw;
font-weight: bold;
margin: 0 20px;
padding: 0 20px;
}
#feedback-form form {
.inputs {
display: flex;
flex-direction: row;
gap: 20px;
align-items: baseline;
width: 95%;
margin-top: 20px; /* Adds some spacing above the form */
justify-content: space-between;
align-items: center;
}
#customer-info {
display: flex;
flex-direction: column;
align-content: center;
width: 95%; /* Adjusted width */
gap: 25px; /* Adds spacing between input fields */
align-items: center;
gap: 10px;
width: 500px; /* Adjusted width */
text-align: center;
}
#customer-info input {
background-color: var(--color-destin-sand);
border: solid var(--color-dark-green);
border-radius: 15px;
width: 90%; /* Ensures the input fields fill the section width */
height: 30px; /* Adjusts height to match the textarea */
text-align: center;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
}
#customer-message {
#name-field,
#phone-field,
#email-field {
display: flex;
flex-direction: column;
align-items: center;
width: 90%; /* Adjusted width */
font-size: 1.2rem;
color: var(--color-dark-green);
width: fit-content;
}
#customer-message #message-field textarea {
width: 50vw; /* Takes full width of the section */
height: 30vh; /* Adjust height as needed */
background-color: var(--color-destin-sand);
border: solid var(--color-dark-green);
border-radius: 15px;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
#name-field input,
#phone-field input,
#email-field input {
width: 300px;
height: 30px;
border: solid 2px var(--color-dark-green);
border-radius: 10px;
font-size: 1.2rem;
padding: 0 10px;
box-shadow: var(--shadow-medium);
}
#form-submit-btn {
.message-box {
display: flex;
flex-direction: column;
justify-content: center;
margin-top: 10px;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
align-items: center;
margin: auto;
}
#message-field {
display: flex;
flex-direction: column;
width: 500px;
font-size: 1.2rem;
color: var(--color-dark-green);
text-align: center;
}
#message {
border: solid 2px var(--color-dark-green);
border-radius: 15px;
padding: 10px;
font-size: 1.2rem;
box-shadow: var(--shadow-medium);
}
#form-submit {
padding: 10px 20px;
background-color: var(--color-light-teal);
border: solid var(--color-destin-sand);
border-radius: 10px;
font-size: 1.4rem;
background-color: var(--color-destin-sand);
border: var(--color-dark-green);
color: var(--color-dark-green);
font-size: 1rem;
cursor: pointer;
margin-bottom: 10px;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
margin-top: 10px;
border-radius: 10px;
padding: 5px 10px;
box-shadow: var(--shadow-medium);
}
#form-submit:hover {
background-color: var(--color-destin-sand);
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
}

View File

@@ -1,4 +1,13 @@
/* Global Styles */
/* Override Font Awesome font-face globally to prevent CLS */
@font-face {
font-family: "Font Awesome 6 Brands";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://ka-f.fontawesome.com/releases/v7.0.1/webfonts/free-fa-brands-400.woff2") format("woff2");
}
html {
font-size: 17px; /* Base font size for scaling */
scroll-behavior: smooth;
@@ -9,7 +18,7 @@ body {
flex-direction: column;
align-items: center;
font-family: 'Calibri', sans-serif;
font-size: 1rem; /* Default font size based on 16px */
font-size: 1rem; /* Default font size based on 17px */
line-height: 1.5;
margin: 0;
padding: 0;
@@ -17,56 +26,53 @@ body {
}
body h1 {
text-shadow: 0.5px 0.5px .5px var(--color-destin-sand), /* Bottom-right top shadow */
-0.5px -0.5px .5px var(--color-destin-sand), /* Top-left top shadow */
-0.5px 0.5px .5px var(--color-destin-sand), /* Bottom-left top shadow */
0.5px -0.5px .5px var(--color-destin-sand); /* Top-right top shadow */
text-shadow: var(--text-outline-light);
}
/* Title Large (Arial Bold 30px) */
/* Title Large (Arial Bold ~32px) */
h1 {
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 1.875rem; /* 30px for title */
font-size: 1.875rem;
}
/* Title (Arial Bold 25px) */
/* Title (Arial Bold ~27px) */
h2 {
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 1.5625rem;
}
/* Subtitle (Comfortaa Normal 15px) */
/* Subtitle (Comfortaa Normal ~16px) */
h3 {
font-family: 'Comfortaa', sans-serif;
font-size: .9375rem ; /* 15px for subtitle */
font-size: .9375rem ;
}
/* Body Large (Calibri Normal 20px) */
/* Body Large (Calibri Normal ~21px) */
p.body-large {
font-family: 'Calibri', sans-serif;
font-size: 1.25rem; /* 20px for body large */
font-size: 1.25rem;
}
/* Body Strong (Calibri Bold 16px) */
/* Body Strong (Calibri Bold 17px) */
strong {
font-family: 'Calibri', sans-serif;
font-weight: bold;
font-size: 1rem; /* 16px for body strong */
font-size: 1rem;
}
/* Body (Calibri Normal 16px) */
/* Body (Calibri Normal 17px) */
p.body {
font-family: 'Calibri', sans-serif;
font-size: 1rem; /* 16px for regular body text */
font-size: 1rem;
}
/* Captions (Arial Bold 11px) */
/* Captions (Arial Bold ~12px) */
figcaption {
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: .6875rem; /* 11px for captions */
font-size: .6875rem;
}
@media (max-width: 780px) {
@@ -75,10 +81,11 @@ figcaption {
}
}
main {
.main-content-container {
display: flex;
flex-direction: row;
flex-direction: column;
align-items: flex-start;
justify-content: space-between;
max-width: 1440px;
padding: 20px;
}

View File

@@ -13,7 +13,7 @@
padding: 5px 10px;
margin-top: 10px;
box-shadow: var(--shadow-strong);
max-width: 325px;
max-width: 225px;
border: solid var(--color-destin-sand);
border-radius: 10px;
}
@@ -79,3 +79,9 @@
box-shadow: none;
color: inherit;
}
.categories ul li.active {
background-color: var(--color-destin-sand);
color: var(--color-dark-green);
box-shadow: var(--shadow-medium);
}

View File

@@ -2,9 +2,10 @@
.community {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
max-width: 900px;
max-width: 1000px;
}
h1 {
@@ -14,27 +15,47 @@ h1 {
border: solid var(--color-mid-green);
border-radius: 15px;
color: var(--color-dark-green);
text-decoration: underline;
text-shadow: var(--text-outline-heading);
padding: 5px 100px;
box-shadow: var(--shadow-subtle);
}
#calendar-events-container {
flex-direction: column;
align-items: center;
gap: 20px;
border: none;
.notice, .com-link {
font-size: 1.3rem;
color: var(--color-dark-green);
}
.calendar iframe {
width: 975px;
height: 750px;
margin-top: 25px;
margin-bottom: 20px;
background-color: var(--color-light-teal);
.com-link {
text-decoration: none;
font-weight: 600;
}
.com-link:hover {
color: var(--color-soft-golden);
}
#calendar-events-container {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
justify-content: center;
border: none;
background-color: var(--color-soft-golden);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
box-shadow: var(--shadow-subtle);
padding: 10px;
box-shadow: var(--shadow-medium);
}
.events {
display: flex;
justify-content: center;
align-items: center;
margin: 0;
padding-left: 0;
padding-right: 0;
padding-bottom: 10px;
}
.upcoming-events {
@@ -43,20 +64,157 @@ h1 {
gap: 25px;
}
.events {
#events-navigation {
display: flex;
flex-direction: row;
text-align: center;
align-items: center;
margin: 0;
padding: 0;
}
ul.event-categories {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
text-align: center;
list-style-type: none;
gap: 50px;
margin: 10px auto;
}
li.enav {
display: flex;
width: auto;
margin: 0;
border: solid 1px var(--color-dark-green);
background-color: var(--color-destin-sand);
border-radius: 10px;
white-space: nowrap;
box-shadow: var(--shadow-medium);
transition: background-color 0.3s ease, color 0.3s ease;
}
.cat-btn {
display: block;
justify-content: center;
align-items: center;
margin: 0;
padding: 2px 50px;
width: 100%;
height: 100%;
color: var(--color-dark-green);
font-size: 1.4rem;
text-decoration: none;
font-weight: 600;
}
.sales-btn:hover {
background-color: rgba(124, 170, 86, 0.5); /*#7CAA56*/
}
.celebrations-btn:hover {
background: rgba(255, 196, 100, 0.5); /*#FFC464*/
}
.workshops-btn:hover {
background: rgba(252, 96, 96, 0.5); /*#FC6060*/
}
.all-btn:hover {
background: var(--color-light-teal);
}
/* --- Active button states --- */
.event-categories li.enav.active {}
.workshops-btn.active {
background-color: rgba(252, 96, 96, 0.5);
}
.celebrations-btn.active {
background-color: rgba(255, 196, 100, 0.5);
}
.sales-btn.active {
background-color: rgba(124, 170, 86, 0.5);
}
.all-btn.active {
background-color: var(--color-light-teal);
}
.interactive-events {
display:flex;
flex-direction: row;
align-items: center;
gap: 30px;
}
.events-left {
width: 50%;
align-items: center;
justify-content: center;
}
.calendar iframe {
width: 600px;
height: 550px;
margin-top: 25px;
margin-bottom: 20px;
background-color: var(--color-light-teal);
border-radius: 15px;
box-shadow: var(--shadow-subtle);
}
.events-right {
width: 50%;
align-items: center;
justify-content: center;
}
.scroll-direction {
display: flex;
justify-content: center;
width: 100%;
padding: 10px 0;
}
#scroll-up, #scroll-down {
cursor: pointer;
background-color: var(--color-dark-green);
color: white;
border: none;
padding: 10px;
border-radius: 50%;
font-size: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
}
#event-list {
display: flex;
flex-direction: column;
gap: 20px;
width: auto;
height: 450px;
overflow-y: hidden;
justify-content: center;
}
.event-card {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
background-color: var(--color-soft-golden);
background-color: var(--color-destin-sand);
border: solid var(--color-dark-green);
border-radius: 15px;
padding: 10px;
width: 80vw;
width: 600px;
box-shadow: var(--shadow-subtle);
}
.events h2 {
.upcoming-events h2 {
font-size: 1.875rem;
text-align: center;
text-shadow: 0.5px 0.5px .5px var(--color-dark-green),
@@ -67,6 +225,8 @@ h1 {
background-color: var(--color-mid-green);
border: solid var(--color-destin-sand);
border-radius: 10px;
margin-top: 20px;
margin-bottom: 0;
margin-left: auto;
margin-right: auto;
width: fit-content;
@@ -80,7 +240,7 @@ h1 {
align-items: center;
text-align: center;
background-color: var(--color-pale-green);
border: solid var(--color-dark-green);
border: solid var(--color-destin-sand);
border-radius: 15px;
padding: 0px 20px 10px 20px;
width: 95%;
@@ -88,65 +248,39 @@ h1 {
box-shadow: var(--shadow-subtle);
}
.zoho-event {
background-color: var(--color-destin-sand);
border: solid var(--color-dark-green) 2px;
border-radius: 15px;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.8);
max-width: 1200px;
.event-card h3,
.event-card p {
padding: 0;
margin: 0;
}
.zoho-event h3 {
font-size: 1.875rem;
text-align: center;
text-shadow: 0.5px 0.5px .5px var(--color-destin-sand),
-0.5px -0.5px .5px var(--color-destin-sand),
-0.5px 0.5px .5px var(--color-destin-sand),
0.5px -0.5px .5px var(--color-destin-sand);
color: var(--color-dark-green);
background-color: var(--color-light-teal);
border: solid var(--color-destin-sand);
.event-card h3 {
border: solid 0.5px var(--color-dark-green);
border-radius: 10px;
margin-left: auto;
margin-right: auto;
width: fit-content;
padding: 0 50px;
box-shadow: var(--shadow-medium);
}
.zoho-event p {
margin-left: auto;
margin-right: auto;
}
.display-date, .location, .add-events {
font-weight: heavy;
font-size: 1.5rem;
}
.description {
font-size: 1.3rem;
width: 80%;
height: auto;
}
.event-list ul {
list-style-type: none;
}
.event-list li {
background-color: var(--color-destin-sand);
border: solid var(--color-light-teal);
border-radius: 15px;
text-align: center;
padding: 5px 10px;
margin-bottom: 10px;
padding: 2px 20px;
box-shadow: var(--shadow-subtle);
}
.events strong {
color: var(--color-dark-green);
font-size: 1.1rem;
.event-card h3.workshop {
background-color: rgba(252, 96, 96, 0.5);
}
/* | ↑-↑-↑ End Community.html ↑-↑-↑--| */
.event-card h3.community {
background-color: rgba(255, 196, 100, 0.5);
}
.event-card h3.sales {
background-color: rgba(124, 170, 86, 0.5);
}
.event-card.is-collapsed:hover {
cursor: pointer;
transform: translateY(-2px);
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.add-events p {
font-size: 1.2rem;
}

View File

@@ -1,6 +1,80 @@
/* CSS Style Rules for "Credits & Attributions" */
.credits-container {
display: flex;
font-size: 1.2rem;
background-color: var(--color-soft-golden);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
margin-left: auto;
margin-right: auto;
margin-bottom: 30px;
padding: 10px;
width: auto;
}
.credits-container a {
text-decoration: none;
color: var(--color-dark-green);
font-weight: 600;
}
.content {
display: flex;
flex-direction: column;
background-color: var(--color-pale-green);
border: solid 3px var(--color-destin-sand);
border-radius: 15px;
margin: 20px;
padding: 20px;
gap: 20px;
}
.cred-attr {
font-size: 2.25rem;
background-color: var(--color-mid-green);
color: var(--color-destin-sand);
border: solid var(--color-destin-sand);
border-radius: 15px;
padding: 0 100px;
margin-top: 20px;
margin-bottom: 20px;
width: fit-content;
text-align: center;
text-shadow: var(--text-outline-heading);
box-shadow: var(--shadow-medium);
align-self: center;
}
.video-box, .images-box {
display: flex;
flex-direction: column;
background-color: var(--color-destin-sand);
border: solid 3px var(--color-mid-green);
border-radius: 15px;
}
.video-box {
margin-bottom: 30px;
}
.videos, .images {
font-size: 1.85rem;
background-color: var(--color-light-teal);
color: var(--color-dark-green);
border: solid var(--color-destin-sand);
border-radius: 15px;
padding: 0 50px;
margin-left: auto;
margin-right: auto;
margin-top: 20px;
margin-bottom: 10px;
width: fit-content;
text-align: center;
text-shadow: var(--text-outline-light);
box-shadow: var(--shadow-medium);
align-self: center;
}
.intro {
@@ -10,13 +84,22 @@
text-align: center;
}
.thanks {
font-size: 1.3rem;
}
.strong-thanks {
font-size: 1.5rem;
}
#tip-desc {
display: none;
}
.credits-list {
.videos-credits-list,
.images-credits-list {
list-style: none;
margin: 0;
margin: 0 30px;
padding: 0;
}
@@ -25,6 +108,7 @@
align-items: flex-start;
gap: 0.5rem; /* spacing between thumb and text */
margin-bottom: 1rem;
margin: auto;
}
.thumb {
@@ -65,3 +149,4 @@
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
z-index: 9999;
}

View File

@@ -5,6 +5,7 @@
}
#footer-nav {
padding: 0;
margin-top: 10px;
}
nav ul, #footer-nav ul {
@@ -19,7 +20,6 @@ nav ul, #footer-nav ul {
position: relative;
list-style-type: none;
flex-direction: row;
margin-top: 20px;
background-color: var(--color-destin-sand);
border-radius: 5px;
width: fit-content;
@@ -145,4 +145,17 @@ footer div label {
#copyright {
text-align: center;
margin-bottom: 20px;
font-size: 1.1rem;
color: var(--color-dark-green);
}
#copyright a {
color: var(--color-dark-green);
font-weight: 600;
font-size: 1.1rem;
text-decoration: one;
}
#copyright a:hover {
color: var(--color-destin-white);
}

View File

@@ -8,15 +8,23 @@
#gallery-top {
display: flex;
flex-direction: row;
align-items: top;
gap: 10px;
margin-bottom: 50px;
}
.left-side {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 95vw;
gap: 20px;
}
#product-carousel-feature {
align-items: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
#product-carousel-feature h2 {
@@ -29,7 +37,6 @@
border: solid var(--color-destin-sand);
border-radius: 10px;
padding-left: 20px;
transform: translateX(30px);
box-shadow: var(--shadow-medium);
}
@@ -38,27 +45,26 @@
flex-direction: row;
align-items: center;
text-align: center;
width: 65vw;
width: 60vw;
}
#product-carousel {
display: flex;
flex-direction: row; /* Flexbox layout for horizontal row */
gap: 20px; /* Space between product cards */
gap: 10px; /* Space between product cards */
overflow-x: hidden; /* Changed from 'auto' to 'hidden' */
scroll-behavior: smooth; /* Smooth scrolling for buttons */
padding: 10px; /* Optional padding inside the carousel */
white-space: nowrap; /* Prevent wrapping to a new row */
transform: translateX(4vw);
min-height: 600px;
min-height: 550px;
align-items: center;
}
.product-card {
display: flex;
flex-direction: column;
width: 300px;
min-width: 300px;
width: 250px;
min-width: 250px;
max-height: 350px;
flex: 0 0 auto; /* Prevent resizing of cards */
border: 1px solid var(--color-dark-green);
@@ -67,6 +73,7 @@
margin-left: 20px;
align-items: center;
text-align: center;
white-space: normal;
background-color: var(--color-destin-sand);
box-shadow: var(--shadow-subtle);
transition: all 0.5s ease-in-out; /* Added for smooth transitions */
@@ -93,10 +100,9 @@
align-items: center;
}
/* New style for the centered card */
.product-card.is-centered {
width: 340px;
transform: scale(1.4);
transform: scale(1.2);
box-shadow: var(--shadow-strong);
background-color: var(--color-destin-sand);
white-space: normal;
@@ -105,12 +111,11 @@
#scroll-left, #scroll-right {
cursor: pointer;
background-color: var(--color-dark-green);
color: white;
color: var(--color-destin-sand);
border: none;
padding: 10px;
border-radius: 50%;
font-size: 1.5rem;
transform: translateX(4.5vw);
}
@media (max-width: 768px) {
@@ -163,4 +168,8 @@
color: var(--color-destin-sand);
box-shadow: var(--shadow-medium);
}
/* |--↑-↑-↑ End gallery.html ↑-↑-↑--| */
.right-side {
margin-left: 48px;
margin-top: 52px;
}

View File

@@ -1,79 +1,70 @@
/* |--↓-↓-↓ Start Header ↓-↓-↓--| */
header {
padding: 20px;
padding-top: 20px;
background-color: var(--color-light-teal);
border-bottom: 3px solid var(--color-mid-green);
width: 100%;
}
.header-container {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
max-width: 1400px;
align-items: center;
max-width: 1440px;
margin: 0 auto;
position: relative;
width: 100%;
gap: 20px; /* Adds space between columns */
gap: 20px;
}
/* Left column - Logo */
.header-left {
flex: 0 0 150px; /* Fixed width for logo */
position: relative;
z-index: 1;
}
/* Center column - Business name and navigation */
.header-center {
flex: 1;
min-width: 0; /* Prevents flex item from overflowing */
max-width: 800px;
margin: 0;
.logo-name-cart {
display: flex;
flex-direction: column;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 30px;
}
/* Right column - Shopping cart */
.header-right {
flex: 0 0 150px; /* Fixed width for shopping cart */
.logo-box {
display: flex;
justify-content: flex-end;
position: relative;
z-index: 1;
justify-content: flex-start;
}
/* Logo styles */
header .logo {
width: 100%;
max-width: 180px;
height: auto;
}
header .logo img {
img.logo {
display: block;
width: 100%;
height: auto;
margin-left: 50px;
width: 180px;
height: 180px;
filter: drop-shadow(0 0 2px var(--color-soft-golden)) drop-shadow(0 0 0px var(--color-dark-green));
}
/* Business name and navigation container */
.business-name-container {
width: 100%;
.name-box {
display: flex;
align-items: center;
justify-content: center;
max-width: 700px;
}
.business-name {
font-family: 'Georgia', serif;
display: block;
font-size: 4rem;
color: var(--color-dark-green);
margin: 10px 0;
text-align: center;
margin-bottom: 15px;
text-shadow: var(--text-outline-business);
}
.nav-container {
width: 100%;
.cart-box {
display: flex;
justify-content: flex-end;
z-index: 1;
align-self: flex-end;
}
/* Shopping cart button */
#shopping-cart {
position: static;
position: block;
padding: 15px;
margin-left: 75px;
border-radius: 10px;
background-color: var(--color-destin-sand);
color: var(--color-dark-green);
@@ -82,149 +73,8 @@ header .logo img {
transition: all 0.3s ease;
box-shadow: var(--shadow-strong);
border: none;
display: flex;
justify-content: center;
align-items: center;
}
.business-name {
font-family: 'Georgia', serif;
display: block;
font-size: 3.6rem;
color: var(--color-dark-green); /* Dark green for the title */
margin: 10px 0;
text-align: center;
text-shadow: var(--text-outline-business);
}
header p.tagline {
font-family: 'Arial', sans-serif;
font-size: 1.4rem;
color: var(--color-mid-green); /* Pale green for the tagline */
margin: 0;
text-align: center;
}
.menu-toggle {
display: none;
}
@media (max-width: 780px) {
/* --- Main Header Container --- */
header {
flex-direction: column;
padding: 10px;
}
.header-main {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
}
.logo-and-title {
display: flex;
align-items: center;
gap: 15px;
}
/* --- Logo --- */
header .logo {
position: static;
width: 100px; /* Smaller logo for compact header */
}
header .logo img {
width: 100%;
}
/* --- Business Name --- */
.business-name {
font-size: 1.8rem; /* Smaller name for mobile */
margin: 0;
}
/* --- Header Icons --- */
.header-icons {
display: flex;
align-items: center;
gap: 15px;
}
#shopping-cart {
position: static;
padding: 0;
background: none;
box-shadow: none;
font-size: 1.5rem;
}
.menu-toggle {
display: block;
background: none;
border: none;
color: var(--color-dark-green);
cursor: pointer;
}
/* --- Compact Navigation Menu --- */
nav {
display: none;
width: 100%;
margin-top: 10px;
background-color: var(--color-destin-sand);
border-radius: 5px;
box-shadow: var(--shadow-subtle);
}
nav.is-open {
display: block;
}
nav ul {
flex-direction: column;
padding: 5px 0; /* Reduced vertical padding */
}
nav ul li a {
padding: 10px 0; /* Reduced padding for each link */
font-size: 1rem; /* Smaller font size for links */
text-align: center;
border: none;
}
nav ul li a.current-page {
background: none;
text-decoration: underline;
}
}
nav {
margin-top: 20px;
background-color: var(--color-destin-sand);
padding: 10px 20px;
border-radius: 5px;
width: 100%;
box-shadow: var(--shadow-subtle);
}
#shopping-cart {
position: absolute;
top: 100px;
right: 100px;
padding: 20px;
border-radius: 10px;
background-color: var(--color-destin-sand);
color: var(--color-dark-green);
cursor: pointer;
z-index: 5;
transition: background-color 0.3s ease, color 0.3s ease;
box-shadow: var(--shadow-strong);
border: none;
display: flex;
justify-content: center;
align-items: center;
width: 60px;
height: 55px;
}
#shopping-cart:hover {
@@ -234,16 +84,38 @@ nav {
box-shadow: var(--shadow-medium);
}
.nav-container {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding-left: 20px;
padding-right: 20px;
padding-bottom: 20px;
border-bottom: solid var(--color-dark-green);
}
nav {
display: flex;
flex-direction: row;
background-color: var(--color-destin-sand);
padding: 2px 50px;
border-radius: 5px;
width: 100%;
box-shadow: var(--shadow-subtle);
}
nav ul {
display: flex;
flex-direction: row;
justify-content: center;
list-style: none;
padding: 0;
margin: 0;
}
nav ul {
gap: 40px;
}
nav ul li {
@@ -264,7 +136,7 @@ nav ul li {
}
.community-link {
font-size: 0.9em;
font-size: 1.2rem;
}
nav ul li a {

View File

@@ -2,8 +2,8 @@
.main-content-container {
display: flex;
flex-direction: row;
align-items: center;
gap: 50px;
align-items: flex-start;
gap: 35px;
}
.promo-item,
@@ -15,14 +15,21 @@
.promo-item.visible,
.testimonial-item.visible,
.featured-item.active {
display: block; /* Show visible or active items */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center; /* Show visible or active items */
}
.testimonial-item:active {
}
#left-side,
#category-nav {
flex: 1;
box-shadow: var(--shadow-strong);
max-width: 325px;
max-width: 300px;
}
#left-side {
@@ -60,8 +67,8 @@
border-radius: 10px;
padding: 5px 10px;
white-space: normal;
max-height: 200px;
min-height: 200px;
max-height: 250px;
min-height: 250px;
max-width: 350px;
box-shadow: var(--shadow-strong);
text-align: center;
@@ -93,19 +100,23 @@
}
.testimonial-item {
display: flex;
flex-direction: column;
justify-content: center;
background-color: var(--color-destin-sand);
color: var(--color-dark-green);
border: solid var(--color-dark-green);
border-radius: 5px;
padding: 5px 10px;
white-space: normal;
max-height: 200px;
max-height: 275px;
max-width: 350px;
min-height: 200px;
min-height: 275px;
box-shadow: var(--shadow-strong);
text-align: center;
}
/* FEATURED ITEMS */
#featured-container {
display: flex;
@@ -125,7 +136,7 @@
color: var(--color-destin-sand);
background-color: var(--color-mid-green);
border: solid var(--color-destin-sand);
border-radius: 10px;
border-radius: 15px;
width: fit-content;
padding: 0 50px;
margin: 0px;
@@ -170,6 +181,8 @@
margin: 0 auto;
margin-bottom: 10px;
box-shadow: var(--shadow-strong);
width: 480px;
height: 320px;
}
#featured-list {

View File

@@ -25,6 +25,12 @@
-0.5px 0.5px 1px var(--color-destin-sand),
0.5px -0.5px 1px var(--color-destin-sand);
--text-outline-light:
0.5px 0.5px .5px var(--color-destin-sand),
-0.5px -0.5px .5px var(--color-destin-sand),
-0.5px 0.5px .5px var(--color-destin-sand),
0.5px -0.5px .5px var(--color-destin-sand);
/* Layered Text Shadow */
--text-shadow-layered:
0.5px 0.5px 1px var(--color-dark-green),