diff --git a/client/src/components/Item/Description/Description.css b/client/src/components/Item/Description/Description.css index d7143adf..4999159a 100644 --- a/client/src/components/Item/Description/Description.css +++ b/client/src/components/Item/Description/Description.css @@ -112,8 +112,8 @@ } .highlights li { - background-color: #fff3e6; - color: #000000; + background-color: #2c3e50; + color: #FFE26E; padding: 0.5rem 0.9rem; border-radius: 1.2rem; display: flex; @@ -121,10 +121,11 @@ gap: 0.4rem; font-size: 0.95rem; transition: all 0.2s ease; + font-weight: 500; } .highlights li:hover { - background-color: #ffe26e; + background-color: #34495e; transform: translateY(-2px); } @@ -323,382 +324,48 @@ } } -/* Enterprise Description Styles with Theme Support */ -.enterprise-description-container { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - transition: all 0.3s ease; -} - -/* Main Description Card with Theme Support */ -.description-main-card { - margin-bottom: 2rem !important; - border-radius: 16px !important; - box-shadow: var(--shadow) !important; - border: 1px solid var(--border-color) !important; - background: var(--bg-primary) !important; - transition: all 0.3s ease !important; -} - -/* Dark Mode Card Support */ -.dark-mode .description-main-card { - background: var(--bg-secondary) !important; - border-color: var(--border-color) !important; - box-shadow: 0 4px 24px rgba(255, 255, 255, 0.05) !important; -} - -.description-title { - font-weight: 700 !important; - color: var(--text-primary) !important; - margin-bottom: 1rem !important; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - -webkit-background-clip: text !important; - -webkit-text-fill-color: transparent !important; - background-clip: text; - transition: all 0.3s ease; -} - -.description-text { - color: var(--text-secondary) !important; - line-height: 1.7 !important; - font-size: 1.1rem !important; - transition: color 0.3s ease; -} - -/* Dark Mode Title Support */ -.dark-mode .description-title { - background: linear-gradient(135deg, var(--accent-color) 0%, #f093fb 100%); - -webkit-background-clip: text !important; - -webkit-text-fill-color: transparent !important; - background-clip: text; -} - -.dark-mode .description-text { - color: var(--text-secondary) !important; -} - -/* Accordions */ -.description-accordions { - margin: 2rem 0; -} - -.description-accordion { - margin-bottom: 1rem !important; - border-radius: 12px !important; - border: 1px solid var(--border-color) !important; - box-shadow: var(--shadow) !important; - transition: all 0.2s ease !important; - background: var(--bg-primary) !important; -} - -.description-accordion:hover { - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08) !important; - transform: translateY(-1px); -} - -.description-accordion:before { - display: none !important; -} - -.accordion-header { - background: var(--bg-secondary) !important; - border-radius: 12px !important; - padding: 1rem 1.5rem !important; - transition: background-color 0.3s ease !important; -} - -/* Dark Mode Accordion Support */ -.dark-mode .description-accordion { - background: var(--bg-secondary) !important; - border-color: var(--border-color) !important; - box-shadow: 0 2px 8px rgba(255, 255, 255, 0.05) !important; -} - -.dark-mode .description-accordion:hover { - box-shadow: 0 4px 16px rgba(255, 255, 255, 0.1) !important; -} - -.dark-mode .accordion-header { - background: var(--bg-tertiary) !important; -} - -.accordion-header .MuiAccordionSummary-content { - display: flex !important; - align-items: center !important; - gap: 0.75rem !important; -} - -.accordion-icon { - color: #667eea !important; - width: 24px !important; - height: 24px !important; - transition: color 0.3s ease !important; -} - -.accordion-header h6 { - font-weight: 600 !important; - color: var(--text-primary) !important; - margin: 0 !important; - transition: color 0.3s ease !important; -} - -/* Dark Mode Accordion Content */ -.dark-mode .accordion-icon { - color: var(--accent-color) !important; -} - -.dark-mode .accordion-header h6 { - color: var(--text-primary) !important; -} - -/* Specifications Grid */ -.specifications-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1rem; - margin-top: 1rem; -} - -.specification-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.75rem; +.review-form { background: var(--bg-secondary); + padding: 20px; border-radius: 8px; + margin-bottom: 20px; border: 1px solid var(--border-color); - transition: all 0.3s ease; } -.spec-label { - font-weight: 600; +.review-form h5 { + margin-bottom: 15px; color: var(--text-primary); } -.spec-value { - color: var(--text-secondary); - text-align: right; -} - -/* Dark Mode Specifications */ -.dark-mode .specification-item { - background: var(--bg-tertiary); - border-color: var(--border-color); +.rating-input { + margin-bottom: 15px; } -.dark-mode .spec-label { +.rating-input label { + display: block; + margin-bottom: 5px; color: var(--text-primary); + font-weight: 500; } -.dark-mode .spec-value { - color: var(--text-secondary); -} - -/* Highlights */ -.highlights-container { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1rem; - margin-top: 1rem; -} - -.highlight-item { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 0.75rem; - background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%); - border-radius: 8px; - border: 1px solid #bae6fd; -} - -.highlight-icon { - color: #0284c7 !important; - width: 20px !important; - height: 20px !important; - flex-shrink: 0; -} - -.highlight-item .MuiTypography-body2 { - color: #0369a1 !important; - font-weight: 500 !important; -} - -.product-details h4 { - color: #000000; -} - -/* Shipping Info */ -.shipping-info { - display: flex; - flex-direction: column; - gap: 1.5rem; - margin-top: 1rem; -} - -.shipping-item { - display: flex; - align-items: flex-start; - gap: 1rem; - padding: 1rem; - background: var(--bg-secondary); - border-radius: 12px; +.comment-input textarea { + width: 100%; + padding: 12px; border: 1px solid var(--border-color); - transition: all 0.2s ease; -} - -.shipping-item:hover { - background: var(--bg-tertiary); - transform: translateY(-1px); - box-shadow: var(--shadow); -} - -.shipping-icon { - color: #667eea !important; - width: 24px !important; - height: 24px !important; - flex-shrink: 0; - margin-top: 0.25rem; - transition: color 0.3s ease !important; -} - -.shipping-item .MuiTypography-subtitle2 { - font-weight: 600 !important; - color: var(--text-primary) !important; - margin-bottom: 0.25rem !important; - transition: color 0.3s ease !important; -} - -/* Dark Mode Shipping */ -.dark-mode .shipping-item { - background: var(--bg-tertiary); - border-color: var(--border-color); -} - -.dark-mode .shipping-item:hover { + border-radius: 4px; background: var(--bg-primary); - box-shadow: 0 2px 8px rgba(255, 255, 255, 0.1); -} - -.dark-mode .shipping-icon { - color: var(--accent-color) !important; -} - -.dark-mode .shipping-item .MuiTypography-subtitle2 { - color: var(--text-primary) !important; -} - -/* Trust Badges */ -.trust-badges { - display: flex; - justify-content: center; - gap: 1rem; - margin: 3rem 0; - flex-wrap: wrap; -} - -.trust-badge { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important; - color: white !important; - font-weight: 600 !important; - padding: 0.75rem 1.5rem !important; - border-radius: 24px !important; - box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3) !important; - transition: all 0.2s ease !important; + color: var(--text-primary); + font-family: inherit; + resize: vertical; + margin-bottom: 15px; } -.trust-badge:hover { - transform: translateY(-2px) !important; - box-shadow: 0 4px 16px rgba(102, 126, 234, 0.4) !important; +.comment-input textarea:focus { + outline: none; + border-color: var(--primary-color); } -.trust-badge .MuiChip-icon { +.submit-review-btn { + background: #ff8008 !important; color: white !important; -} - -/* Responsive Design */ -@media (max-width: 768px) { - .enterprise-description-container { - padding: 1rem; - } - - .specifications-grid, - .highlights-container { - grid-template-columns: 1fr; - } - - .trust-badges { - flex-direction: column; - align-items: center; - } - - .shipping-item { - flex-direction: column; - text-align: center; - gap: 0.75rem; - } - - .specification-item { - flex-direction: column; - text-align: center; - gap: 0.5rem; - } - - .spec-value { - text-align: center; - } -} - -@media (max-width: 480px) { - .description-title { - font-size: 1.75rem !important; - } - - .description-text { - font-size: 1rem !important; - } - - .accordion-header { - padding: 0.75rem 1rem !important; - } - - .accordion-header h6 { - font-size: 0.95rem !important; - } -} - -/* Animation for accordion transitions */ -.MuiAccordionDetails-root { - padding: 1.5rem !important; -} - -.MuiCollapse-root { - transition: height 0.3s ease !important; -} - -/* Focus states for accessibility */ -.description-accordion .MuiAccordionSummary-root:focus { - outline: 2px solid #3b82f6; - outline-offset: 2px; -} - -/* Custom scrollbar for long content */ -.MuiAccordionDetails-root::-webkit-scrollbar { - width: 6px; -} - -.MuiAccordionDetails-root::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 3px; -} - -.MuiAccordionDetails-root::-webkit-scrollbar-thumb { - background: #c1c1c1; - border-radius: 3px; -} - -.MuiAccordionDetails-root::-webkit-scrollbar-thumb:hover { - background: #a8a8a8; } \ No newline at end of file diff --git a/client/src/components/Item/Description/Description.js b/client/src/components/Item/Description/Description.js index 2d94acb9..5b704144 100644 --- a/client/src/components/Item/Description/Description.js +++ b/client/src/components/Item/Description/Description.js @@ -7,6 +7,67 @@ import CheckCircleIcon from "@mui/icons-material/CheckCircle"; import { CartItemsContext } from "../../../Context/CartItemsContext"; import { WishItemsContext } from "../../../Context/WishItemsContext"; +/* 🔹 Review Form Component */ +const ReviewForm = ({ item, onReviewAdded }) => { + const [rating, setRating] = useState(0); + const [comment, setComment] = useState(""); + const [isSubmitting, setIsSubmitting] = useState(false); + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!rating || !comment.trim()) return; + + setIsSubmitting(true); + const newReview = { + user: localStorage.getItem('userName') || 'Anonymous', + rating, + comment: comment.trim(), + date: new Date().toISOString() + }; + + // Add to local state immediately + onReviewAdded(newReview); + + // Reset form + setRating(0); + setComment(""); + setIsSubmitting(false); + }; + + return ( +
No reviews yet.
+No reviews yet. Be the first to review!
)} )} diff --git a/client/src/routes/ContactUs.css b/client/src/routes/ContactUs.css index 84b768e8..a8ae7d40 100644 --- a/client/src/routes/ContactUs.css +++ b/client/src/routes/ContactUs.css @@ -1,8 +1,8 @@ .contact__page__container { min-height: 100vh; - background: linear-gradient(135deg, #ffffff 0%, #f5f5f5 40%, #ececec 100%); + background-color: var(--bg-primary); padding: 5rem 2rem; - color: #111; + color: var(--text-primary); font-family: 'Poppins', sans-serif; overflow: hidden; position: relative; @@ -630,18 +630,11 @@ } } -/* ========================= - MODERN CONTACT PAGE -========================= */ -.contact__page__container { - min-height: 100vh; - background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%); - transition: all 0.3s ease; -} + /* ========== HERO SECTION ========== */ .contact__hero { - background: linear-gradient(135deg, #ffe26e 0%, #ffd700 100%); + background: linear-gradient(135deg, var(--accent-color) 0%, #FFB347 100%); padding: 180px 2rem 100px; text-align: center; position: relative; diff --git a/server/server.js b/server/server.js index 22116336..1de7c554 100644 --- a/server/server.js +++ b/server/server.js @@ -2,7 +2,7 @@ const express = require("express"); const app = express(); const path = require("path"); const cors = require("cors"); -require('dotenv').config({ path: path.resolve(__dirname, '.env.local') }); +require('dotenv').config(); const connectDB = require("./config/db"); const PORT = process.env.PORT || 3000;