+ <>
+
-
-
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
-
-
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
-
-
-
-
- >
+
+
+
+
+ >
+
);
}
diff --git a/parfum-shop/src/components/ProductDetailPage.css b/parfum-shop/src/components/ProductDetailPage.css
index 6777385..36cfbb8 100644
--- a/parfum-shop/src/components/ProductDetailPage.css
+++ b/parfum-shop/src/components/ProductDetailPage.css
@@ -2,7 +2,7 @@
.detail-page {
min-height: 100vh;
- color: #1f1f1f;
+ color: var(--theme-text);
padding: 26px 38px 0;
background:
linear-gradient(to right, rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.1)),
@@ -10,8 +10,8 @@
}
.detail-shell {
- background: #f5f5f5;
- border: 1px solid #d9d9d9;
+ background: var(--theme-surface);
+ border: 1px solid var(--theme-border);
border-radius: 0px;
width: 100%;
max-width: 1680px;
@@ -30,7 +30,7 @@
gap: 20px;
min-height: 72px;
padding: 18px 0;
- border-bottom: 1px solid #dddddd;
+ border-bottom: 1px solid var(--theme-border);
margin-bottom: 28px;
}
@@ -45,13 +45,13 @@
.detail-topbar-label {
font-size: 11px;
letter-spacing: 0.22em;
- color: #777;
+ color: var(--theme-text-muted);
}
.detail-topbar-name {
font-size: 13px;
letter-spacing: 0.16em;
- color: #1f1f1f;
+ color: var(--theme-text);
}
/* --- Topbar End --- */
@@ -67,7 +67,7 @@
padding: 0;
font-size: 14px;
cursor: pointer;
- color: #1f1f1f;
+ color: var(--theme-text);
letter-spacing: 0.01em;
transition: opacity 0.2s ease, transform 0.2s ease;
}
@@ -132,7 +132,7 @@
height: 92px;
border: none;
border-radius: 0px;
- background: #fff;
+ background: var(--theme-paper);
padding: 0;
cursor: pointer;
flex-shrink: 0;
@@ -171,7 +171,7 @@
.detail-meta-grid > div {
padding: 14px 0 0;
- border-top: 1px solid #dfdfdf;
+ border-top: 1px solid var(--theme-border);
}
.detail-meta-grid span {
@@ -179,7 +179,7 @@
margin-bottom: 8px;
font-size: 11px;
letter-spacing: 0.22em;
- color: #666;
+ color: var(--theme-text-muted);
}
.detail-meta-grid p {
@@ -205,8 +205,8 @@
flex-direction: column;
gap: 16px;
padding: 22px;
- background: #f1f1f1;
- border: 1px solid #dddddd;
+ background: var(--theme-surface-soft);
+ border: 1px solid var(--theme-border);
}
.detail-structure h3 {
@@ -214,7 +214,7 @@
letter-spacing: 0.24em;
font-weight: 500;
margin: 0;
- color: #1f1f1f;
+ color: var(--theme-text);
}
.structure-block {
@@ -224,7 +224,7 @@
gap: 10px;
padding: 14px 14px 14px 16px;
background: rgba(255, 255, 255, 0.42);
- border: 1px solid #e1e1e1;
+ border: 1px solid var(--theme-border);
}
.structure-block::before {
@@ -253,7 +253,7 @@
margin-bottom: 0;
font-size: 11px;
letter-spacing: 0.18em;
- color: #555;
+ color: var(--theme-text-muted);
}
.structure-block:nth-of-type(1) .structure-phase {
@@ -289,26 +289,26 @@
box-sizing: border-box;
overflow-wrap: break-word;
word-break: break-word;
- border: 1px solid #d6d6d6;
- background: #f8f8f8;
+ border: 1px solid var(--theme-border);
+ background: var(--theme-surface-soft);
}
.structure-block:nth-of-type(1) .structure-tag {
- background: #ffffff;
+ background: var(--theme-paper);
border-color: #f0e6df;
- color: #555;
+ color: var(--theme-text-muted);
}
.structure-block:nth-of-type(2) .structure-tag {
background: #fff5ed;
border-color: #ffdecc;
- color: #444;
+ color: var(--theme-text-muted);
}
.structure-block:nth-of-type(3) .structure-tag {
background: #ffece0;
border-color: #ffad80;
- color: #1f1f1f;
+ color: var(--theme-text);
}
/* --- Duftstruktur End --- */
@@ -327,14 +327,14 @@
.structure-info-label {
font-size: 11px;
letter-spacing: 0.24em;
- color: #666;
+ color: var(--theme-text-muted);
}
.structure-info-box p {
margin: 0;
font-size: 15px;
line-height: 1.7;
- color: #3f3f3f;
+ color: var(--theme-text-muted);
}
.structure-info-legend {
@@ -351,7 +351,7 @@
gap: 10px;
font-size: 13px;
letter-spacing: 0.08em;
- color: #666;
+ color: var(--theme-text-muted);
}
.structure-info-dot {
@@ -388,14 +388,14 @@
margin-bottom: 10px;
font-size: 11px;
letter-spacing: 0.2em;
- color: #555;
+ color: var(--theme-text-muted);
}
.mood-box p {
font-size: 16px;
line-height: 1.65;
margin: 0;
- color: #1f1f1f;
+ color: var(--theme-text);
}
/* --- Mood Box End --- */
@@ -410,8 +410,8 @@
}
.accordion-item {
- background: #f5f5f5;
- border: 1px solid #d9d9d9;
+ background: var(--theme-surface);
+ border: 1px solid var(--theme-border);
border-left: 3px solid #d9d9d9; /* Subtiler Rahmen im Normalzustand */
transition: border-color 0.2s ease, background 0.2s ease;
}
@@ -433,7 +433,7 @@
font-size: 12px;
letter-spacing: 0.24em;
font-weight: 500;
- color: #1f1f1f;
+ color: var(--theme-text);
transition: opacity 0.2s ease;
}
@@ -467,7 +467,7 @@
font-size: 16px;
line-height: 1.65;
margin: 0;
- color: #1f1f1f;
+ color: var(--theme-text);
padding-top: 6px;
}
@@ -488,7 +488,7 @@
flex-direction: column;
gap: 10px;
padding-bottom: 6px;
- border-bottom: 1px solid #e2e2e2;
+ border-bottom: 1px solid var(--theme-border);
}
.detail-heading-copy {
@@ -501,7 +501,7 @@
display: inline-block;
font-size: 11px;
letter-spacing: 0.24em;
- color: #777;
+ color: var(--theme-text-muted);
}
.detail-heading h1 {
@@ -510,14 +510,14 @@
line-height: 0.92;
font-weight: 300;
letter-spacing: -0.045em;
- color: #131313;
+ color: var(--theme-text);
}
.detail-heading p {
max-width: 640px;
font-size: 18px;
line-height: 1.45;
- color: #5f5f5f;
+ color: var(--theme-text-muted);
margin: 0;
}
@@ -532,7 +532,7 @@
margin-bottom: 0;
font-size: 11px;
letter-spacing: 0.24em;
- color: #666;
+ color: var(--theme-text-muted);
}
/* --- Description Section Start --- */
@@ -553,7 +553,7 @@
.detail-copy-block {
padding-top: 14px;
- border-top: 1px solid #dfdfdf;
+ border-top: 1px solid var(--theme-border);
}
.detail-copy-label {
@@ -561,7 +561,7 @@
margin-bottom: 10px;
font-size: 11px;
letter-spacing: 0.24em;
- color: #666;
+ color: var(--theme-text-muted);
}
.detail-copy-block p {
@@ -569,7 +569,7 @@
line-height: 1.6;
margin: 0;
font-size: 16px;
- color: #1f1f1f;
+ color: var(--theme-text);
}
/* --- Description Section End --- */
@@ -579,8 +579,8 @@
.delivery-box {
margin-top: 4px;
padding: 20px;
- border: 1px solid #d9d9d9;
- background: #efefef;
+ border: 1px solid var(--theme-border);
+ background: var(--theme-bg);
display: flex;
flex-direction: column;
gap: 16px;
@@ -621,20 +621,20 @@
.delivery-item--full {
grid-column: 1 / -1;
padding-top: 4px;
- border-top: 1px solid #d9d9d9;
+ border-top: 1px solid var(--theme-border);
}
.delivery-item-label {
font-size: 11px;
letter-spacing: 0.2em;
- color: #666;
+ color: var(--theme-text-muted);
}
.delivery-item p {
margin: 0;
font-size: 16px;
line-height: 1.45;
- color: #1f1f1f;
+ color: var(--theme-text);
}
/* --- Delivery Box End --- */
@@ -680,7 +680,7 @@
}
.comment-card {
- border: 1px solid #d9d9d9;
+ border: 1px solid var(--theme-border);
background: #ff6a0023;
padding: 18px;
display: flex;
@@ -692,21 +692,21 @@
.comment-card-title {
font-size: 12px;
letter-spacing: 0.18em;
- color: #666;
+ color: var(--theme-text-muted);
}
.comment-card p {
margin: 0;
font-size: 16px;
line-height: 1.55;
- color: #1f1f1f;
+ color: var(--theme-text);
flex: 1;
}
.comment-card-author {
font-size: 13px;
letter-spacing: 0.08em;
- color: #777;
+ color: var(--theme-text-muted);
}
/* --- Comment Spotlight End --- */
@@ -737,7 +737,7 @@
margin: 0;
font-size: 16px;
line-height: 1.55;
- color: #5f5f5f;
+ color: var(--theme-text-muted);
}
.review-section-main {
@@ -752,7 +752,7 @@
line-height: 1;
font-weight: 300;
letter-spacing: -0.04em;
- color: #131313;
+ color: var(--theme-text);
}
.review-summary-copy {
@@ -771,7 +771,7 @@
.review-count {
font-size: 12px;
letter-spacing: 0.08em;
- color: #666;
+ color: var(--theme-text-muted);
}
.review-panel {
@@ -792,23 +792,23 @@
align-items: center;
gap: 14px;
width: 100%;
- border: 1px solid #d9d9d9;
+ border: 1px solid var(--theme-border);
background: transparent;
padding: 12px 14px;
font-size: 13px;
letter-spacing: 0.08em;
- color: #1f1f1f;
+ color: var(--theme-text);
cursor: pointer;
transition: border-color 0.2s ease, background 0.2s ease;
}
.review-toggle:hover {
- border-color: #bcbcbc;
+ border-color: var(--theme-border);
background: rgba(255, 255, 255, 0.45);
}
.review-panel.is-open .review-toggle {
- border-color: #c8c8c8;
+ border-color: var(--theme-border);
background: rgba(255, 255, 255, 0.5);
}
@@ -837,9 +837,9 @@
right: 28px;
width: 12px;
height: 12px;
- background: #efefef;
- border-left: 1px solid #d9d9d9;
- border-top: 1px solid #d9d9d9;
+ background: var(--theme-bg);
+ border-left: 1px solid var(--theme-border);
+ border-top: 1px solid var(--theme-border);
transform: rotate(45deg);
}
@@ -848,8 +848,8 @@
flex-direction: column;
gap: 12px;
padding: 16px;
- border: 1px solid #d9d9d9;
- background: #efefef;
+ border: 1px solid var(--theme-border);
+ background: var(--theme-bg);
box-shadow: 0 18px 40px rgba(0, 0, 0, 0.08);
}
@@ -863,7 +863,7 @@
.review-detail-label {
font-size: 11px;
letter-spacing: 0.18em;
- color: #666;
+ color: var(--theme-text-muted);
}
.review-detail-bar {
@@ -882,15 +882,15 @@
.review-detail-value {
font-size: 13px;
- color: #1f1f1f;
+ color: var(--theme-text);
text-align: right;
}
.review-write-button {
margin-top: 4px;
- border: 1px solid #d9d9d9;
- background: #fff;
- color: #999;
+ border: 1px solid var(--theme-border);
+ background: var(--theme-paper);
+ color: var(--theme-text-muted);
padding: 11px 14px;
font-size: 12px;
letter-spacing: 0.08em;
@@ -914,7 +914,7 @@
align-items: center;
min-height: 36px;
padding: 8px 14px;
- border: 1px solid #d2d2d2;
+ border: 1px solid var(--theme-border);
border-radius: 0px;
background: transparent;
font-size: 14px;
@@ -932,9 +932,9 @@
}
.size-card {
- border: 1px solid #d0d0d0;
+ border: 1px solid var(--theme-border);
border-radius: 0px;
- background: #fff;
+ background: var(--theme-paper);
padding: 20px 18px 18px;
text-align: center;
cursor: pointer;
@@ -943,7 +943,7 @@
.size-card:hover {
transform: translateY(-1px);
- border-color: #bdbdbd;
+ border-color: var(--theme-border);
}
.size-card.active {
@@ -955,7 +955,7 @@
margin-bottom: 10px;
font-size: 13px;
letter-spacing: 0.02em;
- color: #1f1f1f;
+ color: var(--theme-text);
}
.size-card strong {
@@ -968,7 +968,7 @@
.size-card small {
font-size: 12px;
- color: #6a6a6a;
+ color: var(--theme-text-muted);
}
/* --- Size Selection End --- */
@@ -996,7 +996,7 @@
.discovery-note-text p {
font-size: 13px;
line-height: 1.45;
- color: #d0d0d0;
+ color: var(--theme-text-muted);
margin: 0;
max-width: 520px;
}
@@ -1060,10 +1060,10 @@
width: 100%;
min-height: 48px;
margin-top: 10px;
- border: 1px solid #d6d6d6;
+ border: 1px solid var(--theme-border);
border-radius: 0;
- background: #f8f8f8;
- color: #1f1f1f;
+ background: var(--theme-surface-soft);
+ color: var(--theme-text);
font-size: 12px;
letter-spacing: 0.13em;
cursor: pointer;
@@ -1113,7 +1113,7 @@
font-size: 14px;
cursor: pointer;
transition: transform 0.2s ease, opacity 0.2s ease;
- background: #fff;
+ background: var(--theme-paper);
color: #ff6a00;
}
@@ -1300,3 +1300,5 @@
}
/* --- Responsive End --- */
+
+
diff --git a/parfum-shop/src/components/SharedNavbar.jsx b/parfum-shop/src/components/SharedNavbar.jsx
index fbc7360..afb490e 100644
--- a/parfum-shop/src/components/SharedNavbar.jsx
+++ b/parfum-shop/src/components/SharedNavbar.jsx
@@ -1,9 +1,11 @@
import { Link } from "react-router";
import { useShop } from "../shop/useShop";
+import { useTheme } from "../theme/ThemeContext";
import "../style/navbar.css";
function SharedNavbar({ variant = "light", active = "" }) {
const { cart, openCart, openProfile, user } = useShop();
+ const { isLight, toggleTheme } = useTheme();
const cartLabel =
cart.total_quantity > 0 ? `Cart ${cart.total_quantity}` : "Cart";
const logoSrc =
@@ -31,6 +33,17 @@ function SharedNavbar({ variant = "light", active = "" }) {