添加缺失样式
This commit is contained in:
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* SewJoy Theme - Shop / Product List Stylesheet
|
||||
*
|
||||
* Renders the Basic Shopping Flow frame (design/homepage-wireframe.pen →
|
||||
* OsAkV → BSF Product Grid Light). Reuses home.css tokens for the cream
|
||||
* surface + nav/footer; adds the filter bar, product card family, layout
|
||||
* switcher, and pagination.
|
||||
*
|
||||
* Design tokens mirror home.css for self-sufficiency.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--cream: #F8F5F0;
|
||||
--dark: #1A1A1A;
|
||||
--white: #FFFFFF;
|
||||
--accent: #C8956C;
|
||||
--text-primary: #1A1A1A;
|
||||
--text-muted: #8C7B6E;
|
||||
--text-soft: #3D3530;
|
||||
--border: #E8E0D5;
|
||||
--font-display: 'Playfair Display', Georgia, serif;
|
||||
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
||||
--shadow-card: 0 2px 8px rgba(0, 0, 0, 0.06);
|
||||
--shadow-hover: 0 8px 24px rgba(44, 36, 22, 0.08);
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
SHOP SECTION (lives inside .home)
|
||||
============================================ */
|
||||
.shop {
|
||||
background-color: var(--cream);
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
FILTER BAR / TOOLBAR
|
||||
============================================ */
|
||||
.shop__toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
height: 72px;
|
||||
padding: 20px 64px;
|
||||
background-color: var(--cream);
|
||||
border-top: 1px solid transparent;
|
||||
}
|
||||
|
||||
.shop__filters,
|
||||
.shop__sort-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.shop__spacer {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
/* Filter pill (used for Style / Fabric / Sort / search input) */
|
||||
.filter-pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 10px 14px;
|
||||
background-color: var(--white);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
color: var(--text-primary);
|
||||
font-family: inherit;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.15s ease, color 0.15s ease;
|
||||
}
|
||||
|
||||
.filter-pill:hover {
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.filter-pill__caret {
|
||||
font-size: 10px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.filter-pill--search {
|
||||
width: 280px;
|
||||
color: #B8A99A;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.filter-pill--search::placeholder {
|
||||
color: #B8A99A;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.filter-pill--search:hover {
|
||||
color: var(--text-primary);
|
||||
border-color: var(--border);
|
||||
}
|
||||
|
||||
/* Layout switcher (segmented control: Waterfall / Grid / List) */
|
||||
.shop-layout {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: var(--white);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.shop-layout__btn {
|
||||
padding: 10px 12px;
|
||||
background-color: var(--white);
|
||||
border: 0;
|
||||
color: var(--text-muted);
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.15s ease, color 0.15s ease;
|
||||
}
|
||||
|
||||
.shop-layout__btn + .shop-layout__btn {
|
||||
border-left: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.shop-layout__btn:hover {
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.shop-layout__btn.is-active,
|
||||
.shop-layout__btn.is-active:hover {
|
||||
background-color: var(--dark);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
PRODUCT GRID (CSS columns waterfall)
|
||||
============================================ */
|
||||
.shop__grid {
|
||||
display: block; /* reset from any inherited flex/grid */
|
||||
padding: 24px 64px 32px;
|
||||
columns: 3;
|
||||
column-gap: 24px;
|
||||
}
|
||||
|
||||
.product-card {
|
||||
break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: 0 0 24px;
|
||||
background-color: var(--white);
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow-card);
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||
}
|
||||
|
||||
.product-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: var(--shadow-hover);
|
||||
}
|
||||
|
||||
.product-card__media {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: var(--card-media-h, 400px);
|
||||
background-color: var(--card-tone, #E8E0D5);
|
||||
}
|
||||
|
||||
.product-card__body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.product-card__title {
|
||||
margin: 0;
|
||||
font-family: var(--font-display);
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.product-card__price {
|
||||
font-family: var(--font-body);
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
PAGINATION
|
||||
============================================ */
|
||||
.shop__pagination {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
padding: 24px 64px 40px;
|
||||
background-color: var(--cream);
|
||||
}
|
||||
|
||||
.shop__results {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.shop__pager {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.shop__page-link {
|
||||
font-family: var(--font-body);
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: var(--text-muted);
|
||||
text-decoration: none;
|
||||
padding: 4px 8px;
|
||||
border-radius: 3px;
|
||||
transition: color 0.15s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.shop__page-link:hover {
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.shop__page-link.is-current,
|
||||
.shop__page-link.is-current:hover {
|
||||
color: var(--text-primary);
|
||||
font-weight: 600;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.shop__page-link--nav {
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.shop__page-link--nav:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.shop__page-link--ellipsis {
|
||||
cursor: default;
|
||||
padding: 4px 4px;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
RESPONSIVE
|
||||
============================================ */
|
||||
@media screen and (max-width: 1024px) {
|
||||
.shop__toolbar {
|
||||
padding: 20px 32px;
|
||||
flex-wrap: wrap;
|
||||
height: auto;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.shop__spacer {
|
||||
flex-basis: 100%;
|
||||
flex-grow: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.shop__grid {
|
||||
padding: 24px 32px;
|
||||
columns: 2;
|
||||
column-gap: 20px;
|
||||
}
|
||||
|
||||
.shop__pagination {
|
||||
padding: 20px 32px 32px;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 720px) {
|
||||
.shop__toolbar {
|
||||
padding: 16px 20px;
|
||||
}
|
||||
|
||||
.shop__filters,
|
||||
.shop__sort-group {
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.filter-pill--search {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.shop-layout {
|
||||
display: none; /* hide layout switcher on mobile */
|
||||
}
|
||||
|
||||
.shop__grid {
|
||||
padding: 16px 20px 24px;
|
||||
columns: 1;
|
||||
column-gap: 0;
|
||||
}
|
||||
|
||||
.product-card {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.shop__pagination {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
padding: 16px 20px 28px;
|
||||
}
|
||||
|
||||
.shop__pager {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user