diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..e326c1a --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,176 @@ +/* +Global Styles +*/ +body { + font-family: 'Lato', sans-serif; + color: #2c3e50; /* Midnight Blue */ + background-color: #ecf0f1; /* Light Gray */ +} + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: 'Montserrat', sans-serif; + font-weight: 700; +} + +.page-section { + padding: 6rem 0; +} + +.divider { + height: 0.2rem; + max-width: 3.25rem; + margin: 1.5rem auto; + background-color: #18bc9c; /* Turquoise */ + opacity: 1; +} + +.btn-xl { + padding: 1.25rem 2.25rem; + font-size: 0.85rem; + font-weight: 700; + text-transform: uppercase; + border: none; + border-radius: 10rem; +} + +/* Navigation */ +#mainNav { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + background-color: #fff; + transition: background-color 0.2s ease; +} + +#mainNav .navbar-brand { + font-family: 'Montserrat', sans-serif; + font-weight: 700; + color: #2c3e50; +} + +#mainNav .nav-link { + color: #2c3e50; + font-weight: 700; + padding: 0.75rem 1rem; + letter-spacing: 0.05em; +} + +#mainNav .nav-link:hover, #mainNav .nav-link.active { + color: #18bc9c; +} + + +/* Hero Section */ +.hero-section { + padding: 10rem 0; + background-color: #2c3e50; /* Midnight Blue */ + background-image: linear-gradient(135deg, #34495e 0%, #2c3e50 100%); + color: white; + position: relative; +} + +.hero-heading { + font-size: 2.8rem; + font-weight: 700; +} + +.hero-subheading { + font-size: 1.25rem; + font-weight: 300; + max-width: 700px; +} + +.btn-accent { + background-color: #18bc9c; /* Turquoise */ + color: white; + border-radius: 0.25rem; + transition: all 0.3s ease; +} + +.btn-accent:hover { + background-color: #15a589; + color: white; + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0,0,0,0.1); +} + +/* Why Us Section */ +#why-us .fs-1 { + color: #2c3e50 !important; +} + +/* Offers Section */ +.card { + border-radius: 0.5rem; + transition: all 0.3s ease; +} + +.card:hover { + transform: translateY(-5px); + box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.1) !important; +} + +.card-featured { + border: 2px solid #18bc9c; +} + +/* Products Section */ +.product-placeholder { + background-color: #fff; + border: 1px dashed #bdc3c7; + color: #7f8c8d; + display: flex; + align-items: center; + justify-content: center; + height: 150px; + border-radius: 0.5rem; + font-weight: 500; + font-family: 'Montserrat', sans-serif; +} + +/* FAQ Section */ +.accordion-item { + background-color: #fff; + border: 0; + border-radius: 0.5rem; + margin-bottom: 1rem; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} +.accordion-button { + border-radius: 0.5rem; + font-weight: 500; + font-family: 'Montserrat', sans-serif; +} +.accordion-button:not(.collapsed) { + color: #18bc9c; + background-color: #ecf0f1; + box-shadow: none; +} +.accordion-button:focus { + box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.25); +} + + +/* Contact Section */ +#contact .form-control { + border-radius: 0.25rem; +} +#contact .form-control:focus { + border-color: #18bc9c; + box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.25); +} + +.btn-primary { + background-color: #2c3e50; + border-color: #2c3e50; + border-radius: 0.25rem; +} + +.btn-primary:hover { + background-color: #1a252f; + border-color: #1a252f; +} + +/* Footer */ +footer.bg-light { + background-color: #ffffff !important; + border-top: 1px solid #e9ecef; +} diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..830c6df --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,54 @@ +/*! +* Start Bootstrap - Agency v7.0.11 (https://startbootstrap.com/theme/agency) +* Copyright 2013-2022 Start Bootstrap +* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-agency/blob/master/LICENSE) +*/ +// +// Scripts +// + +window.addEventListener('DOMContentLoaded', event => { + + // Navbar shrink function + var navbarShrink = function () { + const navbarCollapsible = document.body.querySelector('#mainNav'); + if (!navbarCollapsible) { + return; + } + if (window.scrollY === 0) { + navbarCollapsible.classList.remove('navbar-shrink') + } else { + navbarCollapsible.classList.add('navbar-shrink') + } + + }; + + // Shrink the navbar + navbarShrink(); + + // Shrink the navbar when page is scrolled + document.addEventListener('scroll', navbarShrink); + + // Activate Bootstrap scrollspy on the main nav element + const mainNav = document.body.querySelector('#mainNav'); + if (mainNav) { + new bootstrap.ScrollSpy(document.body, { + target: '#mainNav', + offset: 74, + }); + }; + + // Collapse responsive navbar when toggler is visible + const navbarToggler = document.body.querySelector('.navbar-toggler'); + const responsiveNavItems = [].slice.call( + document.querySelectorAll('#navbarResponsive .nav-link') + ); + responsiveNavItems.map(function (responsiveNavItem) { + responsiveNavItem.addEventListener('click', () => { + if (window.getComputedStyle(navbarToggler).display !== 'none') { + navbarToggler.click(); + } + }); + }); + +}); diff --git a/assets/pasted-20251210-201942-d2c32489.jpg b/assets/pasted-20251210-201942-d2c32489.jpg new file mode 100644 index 0000000..f337bf1 Binary files /dev/null and b/assets/pasted-20251210-201942-d2c32489.jpg differ diff --git a/index.php b/index.php index 7205f3d..23fc552 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,297 @@ "; + $email_body .= "Email: {$email}

"; + $email_body .= "Message:
{$message}"; + + $text_body = "Name: {$name}\n"; + $text_body .= "Email: {$email}\n\n"; + $text_body .= "Message:\n{$message}"; + + $result = MailService::sendMail($to, $subject, $email_body, $text_body, ['reply_to' => $email]); + + if (!empty($result['success'])) { + $message_sent = true; + } else { + $error_message = "Sorry, there was an error sending your message. Please try again later."; + // error_log("MailService Error: " . ($result['error'] ?? 'Unknown error')); + } + } +} ?> - + - - - New Style - - - - - - - - - - - - - - - - - - - + + + <?php echo htmlspecialchars($_SERVER['PROJECT_NAME'] ?? 'Packaging Solutions'); ?> + + + + + + + + + + + + + + + - -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + + + + +
+
+

Innovative Packaging, Perfectly Crafted

+

From concept to creation, we deliver custom packaging solutions that protect your products and elevate your brand.

+ Request a Free Quote +
+
+ + +
+
+

Why Choose Us?

+
+
+
+
+
+

Dynamic Design

+

Use our tools to design your vision or work with our team for something unique.

+
+
+
+
+
+

Precision Engineering

+

Every fold, cut, and print is managed with state-of-the-art precision.

+
+
+
+
+
+

Reliable Delivery

+

Instant lead times and transparent tracking, from our factory to your door.

+
+
+
+
+
+

Dedicated Support

+

Our sales and support teams are here to ensure your success.

+
+
+
+
+
+ + +
+
+

Our Partnership Offers

+
+

We also build websites for companies, with unique partnership models.

+
+
+
+
+
Option A: Freemium
+
+

50% de économies et 50% des bénéfices sur le chiffre d'affaire qui vient de notre réseau.

+
+
+
+
+ +
+
+
+
+
Option C: Subscription
+
+

1,2% de X + variable sur la performance 30% sur le bénéfice généré.

+
+
+
+
+
+
+ + +
+
+

Our Products

+
+

A glimpse into the customizable packaging solutions we offer. The full interactive catalog is coming soon.

+
+
Carton
+
Plastique
+
Print sur Carton
+
Étiquette
+
+
+
+ + +
+
+

Frequently Asked Questions

+
+
+
+

+ +

+
+
Our minimum order quantity varies depending on the product complexity and material. Please contact us for a specific quote.
+
+
+
+

+ +

+
+
Yes! Our upcoming online design tool will allow you to upload artwork, position it on a 3D mockup, and see a live preview before you order.
+
+
+
+

+ +

+
+
Lead times are calculated instantly based on your design, materials, and quantity. You will see an estimated delivery date before you finalize your order.
+
+
+
+
+
+ + +
+
+
+
+

Let's Get In Touch!

+
+

Ready to start your next project with us? Send us a messages and we will get back to you as soon as possible!

+
+
+
+
+ + + + + + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+
+
+ + + + + + + + + - + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..235eb80 --- /dev/null +++ b/login.php @@ -0,0 +1,116 @@ +prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password_hash'])) { + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['role'] = $user['role']; + header("Location: index.php"); + exit; + } else { + $error = 'Invalid username or password.'; + } + } catch (PDOException $e) { + $error = "Database error: " . $e->getMessage(); + } + } +} +?> + + + + + + Login + + + + + +
+

Login

+
+
+ + +
+
+ + +
+ + +

+ +
+
+ + diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..766a593 --- /dev/null +++ b/logout.php @@ -0,0 +1,6 @@ +