Geizkragen/assets/css/productpage.css

361 lines
7.9 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ==========================================================
PRODUCT PAGE Animated Detail View & Shop Offers
========================================================== */
/* ─── Wrapper ─── */
.product-wrapper {
max-width: 1200px;
margin: 3rem auto;
padding: 0 1.5rem;
display: flex;
gap: 3.5rem;
animation: fadeInUp 0.6s ease both;
}
/* ─── Left Column (Image) ─── */
.product-left {
flex: 1;
animation: fadeInUp 0.5s ease 0.1s both;
}
.product-image-box {
background: rgba(255, 255, 255, 0.96);
padding: 2.5rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-subtle);
box-shadow: var(--shadow-md);
text-align: center;
transition: all var(--transition-smooth);
position: relative;
overflow: hidden;
}
/* Animated gradient border on hover */
.product-image-box::before {
content: "";
position: absolute;
inset: -1px;
border-radius: var(--radius-xl);
padding: 1px;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.3), rgba(16, 185, 129, 0.2), transparent);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
opacity: 0;
transition: opacity var(--transition-smooth);
}
.product-image-box:hover {
box-shadow: var(--shadow-lg), var(--shadow-glow-blue);
transform: translateY(-4px);
}
.product-image-box:hover::before {
opacity: 1;
}
.product-image-box img {
max-width: 100%;
height: auto;
object-fit: contain;
transition: transform var(--transition-smooth);
}
.product-image-box:hover img {
transform: scale(1.03);
}
/* ─── Right Column (Details) ─── */
.product-right {
flex: 1.2;
animation: fadeInUp 0.5s ease 0.2s both;
}
.product-title {
font-size: 1.85rem;
color: var(--text-primary);
font-weight: 700;
margin-bottom: 1.5rem;
padding-bottom: 1rem;
border-bottom: 1px solid var(--border-subtle);
letter-spacing: -0.5px;
line-height: 1.3;
/* Gradient text */
background: linear-gradient(135deg, var(--text-invert), var(--text-secondary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.product-desc {
font-size: 1rem;
line-height: 1.75;
color: var(--text-secondary);
margin-bottom: 1.5rem;
}
.product-specs {
display: flex;
color: var(--text-primary);
flex-direction: column;
gap: 0.5rem;
}
.product-specs p {
padding: 0.7rem 1rem;
background: rgba(20, 28, 43, 0.6);
backdrop-filter: blur(8px);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
font-size: 0.9rem;
transition: all var(--transition-normal);
}
.product-specs p:hover {
background: rgba(20, 28, 43, 0.9);
border-color: var(--border-default);
transform: translateX(4px);
}
.product-specs p strong {
color: var(--text-muted);
font-weight: 500;
margin-right: 0.5rem;
}
/* ─── Spec Rows ─── */
.spec-row {
display: flex;
justify-content: space-between;
padding: 0.75rem 1rem;
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-md);
transition: all var(--transition-normal);
}
.spec-row:hover {
background: rgba(20, 28, 43, 0.9);
transform: translateX(4px);
}
.spec-name {
font-weight: 500;
color: var(--text-secondary);
}
.spec-value {
font-weight: 600;
color: var(--text-primary);
}
/* ─── Responsive Product Page ─── */
@media (max-width: 900px) {
.product-wrapper {
flex-direction: column;
gap: 2rem;
margin: 2rem auto;
}
.product-title {
font-size: 1.5rem;
}
}
/* ==========================================================
SHOP OFFERS Animated List
========================================================== */
.shop-offers {
max-width: 1200px;
margin: 0 auto 4rem;
padding: 0 1.5rem;
display: flex;
flex-direction: column;
gap: 0.65rem;
animation: fadeInUp 0.6s ease 0.3s both;
}
.shop-line {
display: grid;
grid-template-columns: 250px 1fr auto;
align-items: center;
gap: 1.5rem;
background: rgba(15, 21, 32, 0.7);
backdrop-filter: blur(12px);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
padding: 1rem 1.5rem;
transition: all var(--transition-smooth);
animation: fadeInUp 0.4s ease both;
position: relative;
overflow: hidden;
}
/* Gradient accent line on left */
.shop-line::before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
background: linear-gradient(180deg, var(--color-primary), var(--color-accent));
border-radius: var(--radius-full);
opacity: 0;
transition: opacity var(--transition-smooth);
}
.shop-line:hover {
border-color: var(--border-strong);
transform: translateY(-3px);
box-shadow: var(--shadow-md), var(--shadow-glow-blue);
padding-left: 1.75rem;
}
.shop-line:hover::before {
opacity: 1;
}
/* Stagger shop lines */
.shop-line:nth-child(1) { animation-delay: 0.35s; }
.shop-line:nth-child(2) { animation-delay: 0.42s; }
.shop-line:nth-child(3) { animation-delay: 0.49s; }
.shop-line:nth-child(4) { animation-delay: 0.56s; }
.shop-line:nth-child(5) { animation-delay: 0.63s; }
.shop-left {
display: flex;
align-items: center;
gap: 1rem;
}
.shop-logo {
display: flex;
align-items: center;
height: 40px;
flex-shrink: 0;
}
.shop-logo img {
max-height: 36px;
max-width: 90px;
object-fit: contain;
border-radius: var(--radius-sm);
transition: transform var(--transition-normal);
}
.shop-line:hover .shop-logo img {
transform: scale(1.08);
}
.shop-name {
font-weight: 600;
font-size: 0.95rem;
}
.shop-name a {
color: var(--text-primary);
text-decoration: none;
transition: color var(--transition-normal);
}
.shop-name a:hover {
color: var(--color-primary);
}
.shop-middle {
display: flex;
align-items: center;
gap: 2rem;
font-size: 0.85rem;
color: var(--text-secondary);
}
.shop-shipping {
display: flex;
flex-direction: column;
gap: 2px;
line-height: 1.4;
}
.shop-stock {
font-weight: 600;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0.3rem 0.8rem;
border-radius: var(--radius-full);
font-size: 0.78rem;
text-transform: uppercase;
letter-spacing: 0.4px;
}
.shop-stock.in-stock {
color: var(--color-accent);
background: var(--color-accent-soft);
box-shadow: 0 0 12px rgba(16, 185, 129, 0.08);
}
.shop-stock.in-stock::before {
content: "✔";
}
.shop-stock.out-stock {
color: var(--color-danger);
background: var(--color-danger-soft);
box-shadow: 0 0 12px rgba(239, 68, 68, 0.08);
}
.shop-stock.out-stock::before {
content: "✖";
}
.shop-price {
font-size: 1.4rem;
font-weight: 800;
color: var(--color-accent);
white-space: nowrap;
letter-spacing: -0.5px;
text-shadow: 0 0 20px rgba(16, 185, 129, 0.15);
transition: transform var(--transition-normal);
}
.shop-line:hover .shop-price {
transform: scale(1.05);
}
.no-shop {
background: rgba(15, 21, 32, 0.6);
backdrop-filter: blur(12px);
border: 1px solid var(--border-subtle);
padding: 2.5rem;
border-radius: var(--radius-lg);
color: var(--text-secondary);
text-align: center;
font-size: 0.95rem;
animation: fadeInUp 0.5s ease 0.3s both;
}
/* ─── Responsive Shop Offers ─── */
@media (max-width: 900px) {
.shop-line {
grid-template-columns: 1fr;
gap: 0.75rem;
padding: 1rem;
}
.shop-middle {
flex-wrap: wrap;
gap: 0.75rem;
}
.shop-price {
font-size: 1.2rem;
}
}
@media (max-width: 600px) {
.shop-offers {
padding: 0 1rem;
}
}