Shop

HANDCRAFTED LEATHER GOODS

Timeless Leather, Made for Everyday Life

Discover premium leather bags, wallets, belts and
accessories crafted to last and designed to impress.

Premium leather products collection

Selected Products
Up to 25% Off
Explore the sale →

Free UK Delivery
On orders over £50

Secure Checkout
Protected online payments

Easy Returns
Simple return process

Premium Materials
Carefully selected leather

SHOP BY CATEGORY

Find Your Perfect Leather Piece



Showing 12 products

Featured

Price: Low to High

Price: High to Low

Name: A to Z

Highest Rated


Out of Stock


Vintage leather travel duffle


Leather Bags


Vintage Leather Travel Duffle

★★★★☆
(16)

A durable weekend travel bag with spacious
storage, metal fittings and a detachable
shoulder strap.

£189.99


Out of Stock


Out of Stock


Leather watch roll


Accessories


Leather Watch Roll

★★★★★
(20)

A protective leather travel case designed
to hold and organise up to three watches.

£69.99


Out of Stock

No products found

Try changing your search term or removing some
filters.

CRAFTED TO LAST

Leather That Develops Character With Time

Our leather goods are selected for their quality,
durability and timeless appearance. Each piece develops a
distinctive patina through everyday use.


Discover Our Story

Leather craftsmanship

EXCLUSIVE OFFERS

Receive 10% Off Your First Order

Join our mailing list for new product launches, leather
care advice and exclusive offers.


By subscribing, you agree to receive marketing emails.

/* ==========================================================
ROOT SETTINGS
=========================================================== */

.syntax-leather-shop {
–sls-primary: #9b633f;
–sls-primary-dark: #75472d;
–sls-brown: #3f2d24;
–sls-dark: #201b18;
–sls-text: #645c57;
–sls-light: #f6f2ed;
–sls-cream: #eee6dc;
–sls-white: #ffffff;
–sls-border: #dfd7cf;
–sls-success: #386947;
–sls-danger: #a84136;
–sls-gold: #d39635;
–sls-radius: 4px;
–sls-shadow: 0 20px 55px rgba(38, 28, 22, 0.1);

width: 100%;
overflow: hidden;
background: var(–sls-white);
color: var(–sls-dark);
font-family: inherit;
}

.syntax-leather-shop *,
.syntax-leather-shop *::before,
.syntax-leather-shop *::after {
box-sizing: border-box;
}

.syntax-leather-shop img {
display: block;
max-width: 100%;
}

.syntax-leather-shop a {
color: inherit;
text-decoration: none;
}

.syntax-leather-shop button,
.syntax-leather-shop input,
.syntax-leather-shop select {
font-family: inherit;
}

.sls-container {
width: min(1280px, calc(100% – 40px));
margin: 0 auto;
}

.sls-eyebrow {
display: inline-block;
margin-bottom: 14px;
color: var(–sls-primary);
font-size: 12px;
font-weight: 800;
letter-spacing: 2px;
}

.sls-screen-reader-text {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
}

/* ==========================================================
HERO
=========================================================== */

.sls-hero {
padding: 65px 0;
background: var(–sls-light);
}

.sls-hero-grid {
display: grid;
grid-template-columns: 0.85fr 1.15fr;
align-items: center;
gap: 65px;
}

.sls-hero-content h1 {
max-width: 650px;
margin: 0;
color: var(–sls-dark);
font-size: clamp(46px, 6vw, 72px);
font-weight: 700;
line-height: 1.04;
letter-spacing: -2.7px;
}

.sls-hero-content > p {
max-width: 610px;
margin: 24px 0 0;
color: var(–sls-text);
font-size: 17px;
line-height: 1.8;
}

.sls-breadcrumb {
display: flex;
align-items: center;
gap: 10px;
margin-top: 30px;
color: #8b827c;
font-size: 13px;
}

.sls-breadcrumb a:hover {
color: var(–sls-primary);
}

.sls-breadcrumb strong {
color: var(–sls-dark);
}

.sls-hero-image {
position: relative;
}

.sls-hero-image > img {
width: 100%;
min-height: 520px;
object-fit: cover;
}

.sls-hero-offer {
position: absolute;
right: 25px;
bottom: 25px;
min-width: 230px;
padding: 23px;
background: rgba(255, 255, 255, 0.94);
box-shadow: var(–sls-shadow);
backdrop-filter: blur(10px);
}

.sls-hero-offer span,
.sls-hero-offer strong,
.sls-hero-offer a {
display: block;
}

.sls-hero-offer span {
color: var(–sls-primary);
font-size: 11px;
font-weight: 800;
letter-spacing: 1px;
text-transform: uppercase;
}

.sls-hero-offer strong {
margin: 5px 0 10px;
color: var(–sls-dark);
font-size: 22px;
}

.sls-hero-offer a {
font-size: 13px;
font-weight: 700;
}

/* ==========================================================
BENEFITS
=========================================================== */

.sls-benefits {
border-bottom: 1px solid var(–sls-border);
background: var(–sls-white);
}

.sls-benefits-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
}

.sls-benefit {
display: flex;
align-items: center;
gap: 15px;
min-height: 105px;
padding: 22px 28px;
border-right: 1px solid var(–sls-border);
}

.sls-benefit:first-child {
padding-left: 0;
}

.sls-benefit:last-child {
padding-right: 0;
border-right: 0;
}

.sls-benefit svg {
flex: 0 0 34px;
width: 34px;
height: 34px;
fill: var(–sls-primary);
}

.sls-benefit strong,
.sls-benefit span {
display: block;
}

.sls-benefit strong {
margin-bottom: 3px;
font-size: 15px;
}

.sls-benefit span {
color: var(–sls-text);
font-size: 12px;
}

/* ==========================================================
CATEGORIES
=========================================================== */

.sls-categories {
padding: 95px 0;
background: var(–sls-white);
}

.sls-section-heading {
display: flex;
align-items: end;
justify-content: space-between;
gap: 30px;
margin-bottom: 42px;
}

.sls-section-heading h2 {
margin: 0;
color: var(–sls-dark);
font-size: clamp(34px, 4vw, 50px);
line-height: 1.15;
letter-spacing: -1.5px;
}

.sls-view-all-categories {
padding: 0 0 5px;
border: 0;
border-bottom: 1px solid var(–sls-dark);
border-radius: 0;
background: transparent;
color: var(–sls-dark);
font-size: 14px;
font-weight: 700;
cursor: pointer;
}

.sls-view-all-categories:hover {
border-color: var(–sls-primary);
color: var(–sls-primary);
}

.sls-category-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 22px;
}

.sls-category-card {
position: relative;
min-height: 380px;
margin: 0;
padding: 0;
overflow: hidden;
border: 0;
border-radius: 0;
background: #ddd;
cursor: pointer;
text-align: left;
}

.sls-category-card::after {
position: absolute;
inset: 0;
content: “”;
background: linear-gradient(
180deg,
transparent 45%,
rgba(20, 13, 9, 0.77) 100%
);
}

.sls-category-card img {
width: 100%;
height: 100%;
min-height: 380px;
object-fit: cover;
transition: transform 0.55s ease;
}

.sls-category-card:hover img {
transform: scale(1.05);
}

.sls-category-content {
position: absolute;
z-index: 2;
right: 0;
bottom: 0;
left: 0;
padding: 25px;
color: var(–sls-white);
}

.sls-category-content strong,
.sls-category-content small {
display: block;
}

.sls-category-content strong {
margin-bottom: 3px;
font-size: 22px;
}

.sls-category-content small {
color: rgba(255, 255, 255, 0.74);
}

/* ==========================================================
SHOP LAYOUT
=========================================================== */

.sls-products-section {
padding: 95px 0 110px;
background: var(–sls-light);
}

.sls-shop-layout {
display: grid;
grid-template-columns: 280px minmax(0, 1fr);
align-items: start;
gap: 42px;
}

/* ==========================================================
SIDEBAR
=========================================================== */

.sls-sidebar {
padding: 28px;
border: 1px solid var(–sls-border);
background: var(–sls-white);
}

.sls-sidebar-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 26px;
padding-bottom: 18px;
border-bottom: 1px solid var(–sls-border);
}

.sls-sidebar-header h2 {
margin: 0;
font-size: 20px;
}

#sls-close-filter {
display: none;
width: auto;
margin: 0;
padding: 0;
border: 0;
background: transparent;
color: var(–sls-dark);
font-size: 30px;
cursor: pointer;
}

.sls-filter-box {
margin-bottom: 29px;
padding-bottom: 27px;
border-bottom: 1px solid var(–sls-border);
}

.sls-filter-box h3 {
margin: 0 0 16px;
font-size: 15px;
}

.sls-search-box {
position: relative;
}

.sls-search-box input {
width: 100%;
height: 48px;
margin: 0;
padding: 0 43px 0 14px;
border: 1px solid var(–sls-border) !important;
border-radius: 0 !important;
outline: none;
background: #fcfaf8;
box-shadow: none !important;
font-size: 13px;
}

.sls-search-box input:focus {
border-color: var(–sls-primary) !important;
}

.sls-search-box svg {
position: absolute;
top: 50%;
right: 14px;
width: 19px;
height: 19px;
fill: var(–sls-text);
transform: translateY(-50%);
}

.sls-category-filter {
display: grid;
gap: 12px;
}

.sls-category-filter label {
display: grid;
grid-template-columns: 18px 1fr auto;
align-items: center;
gap: 8px;
cursor: pointer;
}

.sls-category-filter input {
width: 16px;
height: 16px;
margin: 0;
accent-color: var(–sls-primary);
}

.sls-category-filter span {
color: var(–sls-text);
font-size: 13px;
}

.sls-category-filter small {
color: #9d948e;
font-size: 12px;
}

#sls-price-range {
width: 100%;
accent-color: var(–sls-primary);
}

.sls-price-labels {
display: flex;
justify-content: space-between;
margin-top: 9px;
color: var(–sls-text);
font-size: 12px;
}

.sls-price-labels strong {
color: var(–sls-dark);
}

.sls-colour-filter {
display: flex;
flex-wrap: wrap;
gap: 8px;
}

.sls-colour {
display: inline-flex;
align-items: center;
gap: 7px;
min-height: 37px;
margin: 0;
padding: 7px 10px;
border: 1px solid var(–sls-border);
border-radius: 0;
background: var(–sls-white);
color: var(–sls-dark);
font-size: 12px;
cursor: pointer;
}

.sls-colour.active,
.sls-colour:hover {
border-color: var(–sls-primary);
color: var(–sls-primary);
}

.sls-swatch {
display: block;
width: 14px;
height: 14px;
border: 1px solid rgba(0, 0, 0, 0.12);
border-radius: 50%;
}

.sls-brown {
background: #654634;
}

.sls-black {
background: #222222;
}

.sls-tan {
background: #a67553;
}

.sls-checkbox-filter {
display: flex;
align-items: flex-start;
gap: 9px;
cursor: pointer;
}

.sls-checkbox-filter input {
flex: 0 0 16px;
width: 16px;
height: 16px;
margin: 2px 0 0;
accent-color: var(–sls-primary);
}

.sls-checkbox-filter span {
color: var(–sls-text);
font-size: 13px;
line-height: 1.5;
}

.sls-reset-filters {
width: 100%;
min-height: 45px;
margin: 0;
padding: 11px 16px;
border: 1px solid var(–sls-dark);
border-radius: 0;
background: transparent;
color: var(–sls-dark);
font-size: 13px;
font-weight: 700;
cursor: pointer;
}

.sls-reset-filters:hover {
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-mobile-filter-button {
display: none;
}

/* ==========================================================
TOOLBAR
=========================================================== */

.sls-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 25px;
margin-bottom: 22px;
padding: 15px 18px;
border: 1px solid var(–sls-border);
background: var(–sls-white);
}

.sls-toolbar p {
margin: 0;
color: var(–sls-text);
font-size: 13px;
}

.sls-toolbar-actions {
display: flex;
align-items: center;
gap: 15px;
}

.sls-view-toggle {
display: flex;
gap: 5px;
}

.sls-view-toggle button {
display: flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
margin: 0;
padding: 0;
border: 1px solid var(–sls-border);
border-radius: 0;
background: var(–sls-white);
cursor: pointer;
}

.sls-view-toggle button.active {
border-color: var(–sls-dark);
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-view-toggle svg {
width: 18px;
height: 18px;
fill: currentColor;
}

.sls-sort-wrapper select {
height: 40px;
min-width: 180px;
margin: 0;
padding: 0 35px 0 12px;
border: 1px solid var(–sls-border) !important;
border-radius: 0 !important;
background: var(–sls-white);
box-shadow: none !important;
font-size: 13px;
}

/* ==========================================================
ACTIVE FILTERS
=========================================================== */

.sls-active-filters {
display: none;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 22px;
}

.sls-active-filters.visible {
display: flex;
}

.sls-filter-tag {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 7px 10px;
border: 1px solid var(–sls-border);
background: var(–sls-white);
color: var(–sls-text);
font-size: 12px;
}

.sls-filter-tag button {
width: auto;
margin: 0;
padding: 0;
border: 0;
background: transparent;
color: var(–sls-dark);
cursor: pointer;
}

/* ==========================================================
PRODUCT GRID
=========================================================== */

.sls-product-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 30px 22px;
}

.sls-product-card {
min-width: 0;
}

.sls-product-card.sls-hidden {
display: none;
}

.sls-product-image {
position: relative;
overflow: hidden;
background: #e9e4df;
}

.sls-product-image > a {
display: block;
}

.sls-product-image img {
width: 100%;
aspect-ratio: 4 / 5;
object-fit: cover;
transition: transform 0.5s ease;
}

.sls-product-card:hover .sls-product-image img {
transform: scale(1.04);
}

.sls-badge {
position: absolute;
z-index: 4;
top: 14px;
left: 14px;
padding: 6px 10px;
background: var(–sls-dark);
color: var(–sls-white);
font-size: 10px;
font-weight: 800;
letter-spacing: 0.5px;
text-transform: uppercase;
}

.sls-sale-badge {
background: var(–sls-primary);
}

.sls-new-badge {
background: var(–sls-success);
}

.sls-best-badge {
background: #8a6823;
}

.sls-out-badge {
background: #77706c;
}

.sls-image-actions {
position: absolute;
z-index: 4;
right: 14px;
bottom: 14px;
left: 14px;
display: flex;
gap: 8px;
opacity: 0;
transform: translateY(10px);
transition: 0.3s ease;
}

.sls-product-card:hover .sls-image-actions {
opacity: 1;
transform: translateY(0);
}

.sls-wishlist {
flex: 0 0 44px;
width: 44px;
height: 44px;
margin: 0;
padding: 0;
border: 0;
border-radius: 0;
background: var(–sls-white);
color: var(–sls-dark);
font-size: 23px;
cursor: pointer;
}

.sls-wishlist.active {
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-quick-view {
flex: 1;
min-height: 44px;
margin: 0;
padding: 9px 14px;
border: 0;
border-radius: 0;
background: var(–sls-white);
color: var(–sls-dark);
font-size: 12px;
font-weight: 700;
cursor: pointer;
}

.sls-wishlist:hover,
.sls-quick-view:hover {
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-product-content {
padding-top: 17px;
}

.sls-product-category {
display: block;
margin-bottom: 5px;
color: #918781;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.8px;
text-transform: uppercase;
}

.sls-product-content h3 {
margin: 0 0 6px;
color: var(–sls-dark);
font-size: 17px;
line-height: 1.4;
}

.sls-product-content h3 a:hover {
color: var(–sls-primary);
}

.sls-product-rating {
display: flex;
align-items: center;
gap: 5px;
margin-bottom: 9px;
}

.sls-product-rating span {
color: var(–sls-gold);
font-size: 12px;
letter-spacing: 1px;
}

.sls-product-rating small {
color: #918781;
font-size: 11px;
}

.sls-product-description {
display: none;
margin: 0 0 18px;
color: var(–sls-text);
font-size: 14px;
line-height: 1.7;
}

.sls-product-bottom {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}

.sls-product-price {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
}

.sls-product-price del {
color: #a19a96;
font-size: 12px;
}

.sls-product-price strong {
color: var(–sls-dark);
font-size: 16px;
}

.sls-add-to-cart,
.sls-out-stock-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 39px;
padding: 9px 13px;
border: 1px solid var(–sls-dark);
font-size: 11px;
font-weight: 800;
white-space: nowrap;
}

.sls-add-to-cart:hover {
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-out-stock-button {
border-color: var(–sls-border);
color: #8b837e;
}

/* List View */

.sls-product-grid.sls-list-layout {
grid-template-columns: 1fr;
}

.sls-list-layout .sls-product-card {
display: grid;
grid-template-columns: 250px minmax(0, 1fr);
gap: 28px;
padding: 20px;
border: 1px solid var(–sls-border);
background: var(–sls-white);
}

.sls-list-layout .sls-product-image img {
aspect-ratio: 1 / 1;
}

.sls-list-layout .sls-product-content {
display: flex;
flex-direction: column;
justify-content: center;
padding: 0;
}

.sls-list-layout .sls-product-content h3 {
font-size: 23px;
}

.sls-list-layout .sls-product-description {
display: block;
}

.sls-list-layout .sls-product-bottom {
justify-content: flex-start;
gap: 25px;
}

/* ==========================================================
NO RESULTS
=========================================================== */

.sls-no-results {
display: none;
padding: 75px 30px;
border: 1px solid var(–sls-border);
background: var(–sls-white);
text-align: center;
}

.sls-no-results.visible {
display: block;
}

.sls-no-results svg {
width: 50px;
height: 50px;
fill: var(–sls-primary);
}

.sls-no-results h3 {
margin: 18px 0 8px;
font-size: 25px;
}

.sls-no-results p {
margin: 0 0 20px;
color: var(–sls-text);
}

.sls-no-results button {
min-height: 44px;
padding: 10px 20px;
border: 1px solid var(–sls-dark);
border-radius: 0;
background: var(–sls-dark);
color: var(–sls-white);
cursor: pointer;
}

/* ==========================================================
PAGINATION
=========================================================== */

.sls-pagination {
display: flex;
justify-content: center;
gap: 7px;
margin-top: 50px;
}

.sls-pagination button {
display: flex;
align-items: center;
justify-content: center;
width: 42px;
height: 42px;
margin: 0;
padding: 0;
border: 1px solid var(–sls-border);
border-radius: 0;
background: var(–sls-white);
color: var(–sls-dark);
font-size: 13px;
cursor: pointer;
}

.sls-pagination button.active,
.sls-pagination button:hover:not(:disabled) {
border-color: var(–sls-dark);
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-pagination button:disabled {
opacity: 0.45;
cursor: not-allowed;
}

/* ==========================================================
PROMOTIONAL SECTION
=========================================================== */

.sls-promo {
background: var(–sls-cream);
}

.sls-promo-grid {
display: grid;
grid-template-columns: 1fr 1fr;
align-items: stretch;
width: 100%;
max-width: none;
}

.sls-promo-content {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
max-width: 690px;
padding: 90px;
}

.sls-promo-content h2 {
margin: 0;
color: var(–sls-dark);
font-size: clamp(37px, 4vw, 55px);
line-height: 1.12;
letter-spacing: -1.8px;
}

.sls-promo-content p {
margin: 23px 0 30px;
color: var(–sls-text);
font-size: 16px;
line-height: 1.8;
}

.sls-promo-image img {
width: 100%;
height: 100%;
min-height: 600px;
object-fit: cover;
}

.sls-primary-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 53px;
padding: 13px 26px;
border: 1px solid var(–sls-primary);
background: var(–sls-primary);
color: var(–sls-white) !important;
font-size: 14px;
font-weight: 800;
transition: 0.25s ease;
}

.sls-primary-button:hover {
border-color: var(–sls-primary-dark);
background: var(–sls-primary-dark);
transform: translateY(-2px);
}

/* ==========================================================
NEWSLETTER
=========================================================== */

.sls-newsletter {
padding: 80px 0;
background: var(–sls-dark);
color: var(–sls-white);
}

.sls-newsletter-grid {
display: grid;
grid-template-columns: 0.9fr 1.1fr;
align-items: center;
gap: 80px;
}

.sls-newsletter h2 {
margin: 0;
color: var(–sls-white);
font-size: clamp(34px, 4vw, 49px);
line-height: 1.15;
letter-spacing: -1.5px;
}

.sls-newsletter p {
margin: 17px 0 0;
color: rgba(255, 255, 255, 0.68);
font-size: 15px;
line-height: 1.7;
}

.sls-newsletter-field {
display: flex;
}

.sls-newsletter-field input {
flex: 1;
min-width: 0;
height: 57px;
margin: 0;
padding: 0 18px;
border: 0 !important;
border-radius: 0 !important;
outline: none;
background: var(–sls-white);
box-shadow: none !important;
}

.sls-newsletter-field button {
min-width: 140px;
margin: 0;
padding: 0 22px;
border: 0;
border-radius: 0;
background: var(–sls-primary);
color: var(–sls-white);
font-weight: 800;
cursor: pointer;
}

.sls-newsletter-field button:hover {
background: var(–sls-primary-dark);
}

.sls-newsletter-form small {
display: block;
margin-top: 10px;
color: rgba(255, 255, 255, 0.48);
font-size: 11px;
}

/* ==========================================================
MODAL
=========================================================== */

.sls-modal {
position: fixed;
z-index: 999999;
inset: 0;
display: none;
align-items: center;
justify-content: center;
padding: 25px;
}

.sls-modal.open {
display: flex;
}

.sls-modal-overlay {
position: absolute;
inset: 0;
background: rgba(20, 15, 12, 0.72);
}

.sls-modal-dialog {
position: relative;
z-index: 2;
width: min(920px, 100%);
max-height: 90vh;
overflow-y: auto;
background: var(–sls-white);
box-shadow: var(–sls-shadow);
}

.sls-modal-close {
position: absolute;
z-index: 4;
top: 12px;
right: 15px;
width: auto;
margin: 0;
padding: 0;
border: 0;
background: transparent;
color: var(–sls-dark);
font-size: 34px;
cursor: pointer;
}

.sls-modal-grid {
display: grid;
grid-template-columns: 1fr 1fr;
}

.sls-modal-image img {
width: 100%;
height: 100%;
min-height: 570px;
object-fit: cover;
}

.sls-modal-content {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
padding: 55px;
}

.sls-modal-content > span {
color: var(–sls-primary);
font-size: 11px;
font-weight: 800;
letter-spacing: 1px;
text-transform: uppercase;
}

.sls-modal-content h2 {
margin: 10px 0 12px;
color: var(–sls-dark);
font-size: 34px;
line-height: 1.2;
}

.sls-modal-rating {
margin-bottom: 17px;
}

.sls-modal-rating span {
color: var(–sls-gold);
letter-spacing: 1px;
}

.sls-modal-rating small {
margin-left: 7px;
color: var(–sls-text);
}

#sls-modal-price {
font-size: 23px;
}

.sls-modal-content p {
margin: 20px 0;
color: var(–sls-text);
line-height: 1.75;
}

.sls-modal-content ul {
margin: 0 0 28px;
padding: 0;
list-style: none;
}

.sls-modal-content li {
position: relative;
margin-bottom: 8px;
padding-left: 23px;
color: var(–sls-dark);
font-size: 13px;
}

.sls-modal-content li::before {
position: absolute;
top: 0;
left: 0;
color: var(–sls-primary);
content: “✓”;
font-weight: 800;
}

/* ==========================================================
TABLET
=========================================================== */

@media (max-width: 1100px) {
.sls-benefits-grid {
grid-template-columns: repeat(2, 1fr);
}

.sls-benefit:nth-child(2) {
border-right: 0;
}

.sls-benefit:nth-child(1),
.sls-benefit:nth-child(2) {
border-bottom: 1px solid var(–sls-border);
}

.sls-benefit:first-child,
.sls-benefit:last-child {
padding: 22px 28px;
}

.sls-category-grid {
grid-template-columns: repeat(2, 1fr);
}

.sls-shop-layout {
grid-template-columns: 240px minmax(0, 1fr);
gap: 28px;
}

.sls-product-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}

.sls-promo-content {
padding: 65px 45px;
}
}

/* ==========================================================
MOBILE
=========================================================== */

@media (max-width: 767px) {
.sls-container {
width: min(100% – 30px, 1280px);
}

.sls-hero {
padding: 55px 0;
}

.sls-hero-grid {
grid-template-columns: 1fr;
gap: 40px;
}

.sls-hero-content {
text-align: center;
}

.sls-hero-content h1 {
font-size: 42px;
letter-spacing: -1.5px;
}

.sls-breadcrumb {
justify-content: center;
}

.sls-hero-image > img {
min-height: 390px;
}

.sls-hero-offer {
right: 12px;
bottom: 12px;
min-width: 195px;
padding: 18px;
}

.sls-benefits-grid {
grid-template-columns: 1fr;
}

.sls-benefit,
.sls-benefit:first-child,
.sls-benefit:last-child,
.sls-benefit:nth-child(2) {
padding: 20px 0;
border-right: 0;
border-bottom: 1px solid var(–sls-border);
}

.sls-benefit:last-child {
border-bottom: 0;
}

.sls-categories,
.sls-products-section {
padding: 70px 0;
}

.sls-section-heading {
align-items: flex-start;
flex-direction: column;
}

.sls-section-heading h2 {
font-size: 36px;
}

.sls-category-grid {
grid-template-columns: 1fr;
}

.sls-category-card,
.sls-category-card img {
min-height: 390px;
}

.sls-mobile-filter-button {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 46px;
margin: 0 0 18px;
padding: 10px 18px;
border: 1px solid var(–sls-dark);
border-radius: 0;
background: var(–sls-dark);
color: var(–sls-white);
font-size: 13px;
font-weight: 800;
cursor: pointer;
}

.sls-mobile-filter-button svg {
width: 19px;
height: 19px;
fill: currentColor;
}

.sls-shop-layout {
display: block;
}

.sls-sidebar {
position: fixed;
z-index: 999999;
top: 0;
bottom: 0;
left: 0;
width: min(340px, 88%);
overflow-y: auto;
transform: translateX(-105%);
transition: transform 0.3s ease;
}

.sls-sidebar.open {
transform: translateX(0);
}

#sls-close-filter {
display: block;
}

.sls-filter-overlay {
position: fixed;
z-index: 999998;
inset: 0;
display: none;
background: rgba(20, 15, 12, 0.65);
}

.sls-filter-overlay.open {
display: block;
}

.sls-toolbar {
align-items: flex-start;
flex-direction: column;
}

.sls-toolbar-actions {
justify-content: space-between;
width: 100%;
}

.sls-sort-wrapper {
flex: 1;
}

.sls-sort-wrapper select {
width: 100%;
min-width: 0;
}

.sls-product-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 28px 13px;
}

.sls-product-content h3 {
font-size: 15px;
}

.sls-product-bottom {
align-items: flex-start;
flex-direction: column;
}

.sls-add-to-cart,
.sls-out-stock-button {
width: 100%;
}

.sls-image-actions {
opacity: 1;
transform: none;
}

.sls-list-layout .sls-product-card {
grid-template-columns: 1fr;
}

.sls-list-layout .sls-product-image img {
aspect-ratio: 4 / 5;
}

.sls-promo-grid,
.sls-newsletter-grid {
grid-template-columns: 1fr;
}

.sls-promo-content {
padding: 65px 25px;
}

.sls-promo-content h2 {
font-size: 37px;
}

.sls-promo-image img {
min-height: 430px;
}

.sls-newsletter-grid {
gap: 35px;
}

.sls-newsletter-field {
flex-direction: column;
}

.sls-newsletter-field input {
width: 100%;
margin-bottom: 10px;
}

.sls-newsletter-field button {
width: 100%;
min-height: 55px;
}

.sls-modal-grid {
grid-template-columns: 1fr;
}

.sls-modal-image img {
min-height: 350px;
max-height: 390px;
}

.sls-modal-content {
padding: 38px 25px;
}

.sls-modal-content h2 {
font-size: 28px;
}
}

/* ==========================================================
SMALL MOBILE
=========================================================== */

@media (max-width: 450px) {
.sls-hero-content h1 {
font-size: 37px;
}

.sls-product-grid {
grid-template-columns: 1fr;
}

.sls-toolbar-actions {
align-items: stretch;
flex-direction: column;
}

.sls-view-toggle {
align-self: flex-end;
}

.sls-product-content h3 {
font-size: 18px;
}
}

document.addEventListener(“DOMContentLoaded”, function () {

const productGrid = document.getElementById(“sls-product-grid”);
const products = Array.from(
document.querySelectorAll(“.sls-product-card”)
);

const searchInput = document.getElementById(“sls-search”);
const categoryInputs = document.querySelectorAll(
‘input[name=”sls-category”]’
);

const priceRange = document.getElementById(“sls-price-range”);
const priceValue = document.getElementById(“sls-price-value”);
const stockInput = document.getElementById(“sls-in-stock-only”);
const sortSelect = document.getElementById(“sls-sort”);
const colourButtons = document.querySelectorAll(“.sls-colour”);
const resultCount = document.getElementById(“sls-result-count”);
const activeFilters = document.getElementById(“sls-active-filters”);
const noResults = document.getElementById(“sls-no-results”);
const pagination = document.querySelector(“.sls-pagination”);

const resetButton = document.getElementById(“sls-reset-filters”);
const noResultsReset = document.getElementById(
“sls-no-results-reset”
);

const gridButton = document.getElementById(“sls-grid-view”);
const listButton = document.getElementById(“sls-list-view”);

let selectedColour = “all”;

function getSelectedCategory() {
const checkedInput = document.querySelector(
‘input[name=”sls-category”]:checked’
);

return checkedInput ? checkedInput.value : “all”;
}

function applyFilters() {
const searchTerm = searchInput.value.trim().toLowerCase();
const selectedCategory = getSelectedCategory();
const maximumPrice = Number(priceRange.value);
const inStockOnly = stockInput.checked;

let visibleCount = 0;

products.forEach(function (product) {
const productName = product.dataset.name.toLowerCase();
const category = product.dataset.category;
const price = Number(product.dataset.price);
const colour = product.dataset.colour;
const inStock = product.dataset.stock === “true”;

const matchesSearch =
searchTerm === “” ||
productName.includes(searchTerm);

const matchesCategory =
selectedCategory === “all” ||
category === selectedCategory;

const matchesPrice = price <= maximumPrice;

const matchesColour =
selectedColour === "all" ||
colour === selectedColour;

const matchesStock =
!inStockOnly || inStock;

const productIsVisible =
matchesSearch &&
matchesCategory &&
matchesPrice &&
matchesColour &&
matchesStock;

product.classList.toggle(
"sls-hidden",
!productIsVisible
);

if (productIsVisible) {
visibleCount++;
}
});

resultCount.innerHTML =
"Showing ” +
visibleCount +
product” +
(visibleCount === 1 ? “” : “s”);

noResults.classList.toggle(
“visible”,
visibleCount === 0
);

if (pagination) {
pagination.style.display =
visibleCount === 0 ? “none” : “flex”;
}

updateActiveFilters(
searchTerm,
selectedCategory,
maximumPrice,
inStockOnly
);

sortProducts();
}

function updateActiveFilters(
searchTerm,
selectedCategory,
maximumPrice,
inStockOnly
) {
const tags = [];

if (searchTerm !== “”) {
tags.push({
label: ‘Search: “‘ + searchInput.value.trim() + ‘”‘,
type: “search”
});
}

if (selectedCategory !== “all”) {
tags.push({
label:
“Category: ” +
formatText(selectedCategory),
type: “category”
});
}

if (maximumPrice < 250) {
tags.push({
label: "Maximum price: £" + maximumPrice,
type: "price"
});
}

if (selectedColour !== "all") {
tags.push({
label:
"Colour: " +
formatText(selectedColour),
type: "colour"
});
}

if (inStockOnly) {
tags.push({
label: "In stock only",
type: "stock"
});
}

activeFilters.innerHTML = "";

tags.forEach(function (tag) {
const tagElement = document.createElement("span");
tagElement.className = "sls-filter-tag";

tagElement.innerHTML =
tag.label +
'‘;

activeFilters.appendChild(tagElement);
});

activeFilters.classList.toggle(
“visible”,
tags.length > 0
);
}

function removeFilter(type) {
if (type === “search”) {
searchInput.value = “”;
}

if (type === “category”) {
setCategory(“all”);
}

if (type === “price”) {
priceRange.value = 250;
priceValue.textContent = “250”;
}

if (type === “colour”) {
selectedColour = “all”;

colourButtons.forEach(function (button) {
button.classList.toggle(
“active”,
button.dataset.colour === “all”
);
});
}

if (type === “stock”) {
stockInput.checked = false;
}

applyFilters();
}

function setCategory(category) {
categoryInputs.forEach(function (input) {
input.checked = input.value === category;
});
}

function sortProducts() {
const sortValue = sortSelect.value;

const sortedProducts = […products].sort(
function (firstProduct, secondProduct) {
const firstPrice = Number(
firstProduct.dataset.price
);

const secondPrice = Number(
secondProduct.dataset.price
);

const firstName =
firstProduct.dataset.name.toLowerCase();

const secondName =
secondProduct.dataset.name.toLowerCase();

const firstRating = Number(
firstProduct.dataset.rating
);

const secondRating = Number(
secondProduct.dataset.rating
);

if (sortValue === “price-low”) {
return firstPrice – secondPrice;
}

if (sortValue === “price-high”) {
return secondPrice – firstPrice;
}

if (sortValue === “name”) {
return firstName.localeCompare(secondName);
}

if (sortValue === “rating”) {
return secondRating – firstRating;
}

return 0;
}
);

sortedProducts.forEach(function (product) {
productGrid.appendChild(product);
});
}

function resetFilters() {
searchInput.value = “”;
setCategory(“all”);

priceRange.value = 250;
priceValue.textContent = “250”;

stockInput.checked = false;
selectedColour = “all”;
sortSelect.value = “featured”;

colourButtons.forEach(function (button) {
button.classList.toggle(
“active”,
button.dataset.colour === “all”
);
});

applyFilters();
}

function formatText(text) {
return text.charAt(0).toUpperCase() + text.slice(1);
}

searchInput.addEventListener(“input”, applyFilters);

categoryInputs.forEach(function (input) {
input.addEventListener(“change”, applyFilters);
});

priceRange.addEventListener(“input”, function () {
priceValue.textContent = priceRange.value;
applyFilters();
});

stockInput.addEventListener(“change”, applyFilters);

sortSelect.addEventListener(“change”, function () {
sortProducts();
});

colourButtons.forEach(function (button) {
button.addEventListener(“click”, function () {
selectedColour = button.dataset.colour;

colourButtons.forEach(function (otherButton) {
otherButton.classList.remove(“active”);
});

button.classList.add(“active”);
applyFilters();
});
});

activeFilters.addEventListener(“click”, function (event) {
const removeButton = event.target.closest(
“[data-remove]”
);

if (removeButton) {
removeFilter(removeButton.dataset.remove);
}
});

resetButton.addEventListener(“click”, resetFilters);
noResultsReset.addEventListener(“click”, resetFilters);

/* Category image buttons */
document.querySelectorAll(
“.sls-category-card, .sls-view-all-categories”
).forEach(function (button) {
button.addEventListener(“click”, function () {
const category = button.dataset.category || “all”;

setCategory(category);
applyFilters();

document.getElementById(“sls-products”).scrollIntoView({
behavior: “smooth”,
block: “start”
});
});
});

/* Grid and list view */
gridButton.addEventListener(“click”, function () {
productGrid.classList.remove(“sls-list-layout”);
gridButton.classList.add(“active”);
listButton.classList.remove(“active”);
});

listButton.addEventListener(“click”, function () {
productGrid.classList.add(“sls-list-layout”);
listButton.classList.add(“active”);
gridButton.classList.remove(“active”);
});

/* Wishlist buttons */
document.querySelectorAll(“.sls-wishlist”).forEach(
function (button) {
button.addEventListener(“click”, function () {
button.classList.toggle(“active”);
button.textContent =
button.classList.contains(“active”)
? “♥”
: “♡”;
});
}
);

/* Mobile sidebar */
const sidebar = document.getElementById(“sls-sidebar”);
const mobileFilterButton = document.getElementById(
“sls-mobile-filter-button”
);

const closeFilterButton = document.getElementById(
“sls-close-filter”
);

const filterOverlay = document.getElementById(
“sls-filter-overlay”
);

function openFilters() {
sidebar.classList.add(“open”);
filterOverlay.classList.add(“open”);
document.body.style.overflow = “hidden”;
}

function closeFilters() {
sidebar.classList.remove(“open”);
filterOverlay.classList.remove(“open”);
document.body.style.overflow = “”;
}

mobileFilterButton.addEventListener(“click”, openFilters);
closeFilterButton.addEventListener(“click”, closeFilters);
filterOverlay.addEventListener(“click”, closeFilters);

/* Quick-view modal */
const modal = document.getElementById(“sls-modal”);
const modalClose = document.getElementById(“sls-modal-close”);
const modalOverlay = modal.querySelector(“.sls-modal-overlay”);

const modalImage = document.getElementById(“sls-modal-img”);
const modalCategory = document.getElementById(
“sls-modal-category”
);

const modalTitle = document.getElementById(“sls-modal-title”);
const modalStars = document.getElementById(“sls-modal-stars”);
const modalPrice = document.getElementById(“sls-modal-price”);
const modalDescription = document.getElementById(
“sls-modal-description”
);

const modalCart = document.getElementById(“sls-modal-cart”);

document.querySelectorAll(“.sls-quick-view”).forEach(
function (button) {
button.addEventListener(“click”, function () {
const product = button.closest(“.sls-product-card”);

const image = product.querySelector(
“.sls-product-image img”
);

const category = product.querySelector(
“.sls-product-category”
);

const description = product.querySelector(
“.sls-product-description”
);

const price = product.querySelector(
“.sls-product-price”
);

modalImage.src = image.src;
modalImage.alt = image.alt;
modalCategory.textContent = category.textContent;
modalTitle.textContent = product.dataset.name;
modalStars.textContent =
“★”.repeat(Number(product.dataset.rating)) +
“☆”.repeat(
5 – Number(product.dataset.rating)
);

modalPrice.textContent =
price.querySelector(“strong”).textContent;

modalDescription.textContent =
description.textContent.trim();

modalCart.href =
“/?add-to-cart=” + product.dataset.id;

if (product.dataset.stock === “false”) {
modalCart.textContent = “Out of Stock”;
modalCart.style.pointerEvents = “none”;
modalCart.style.opacity = “0.55”;
} else {
modalCart.textContent = “Add to Basket”;
modalCart.style.pointerEvents = “”;
modalCart.style.opacity = “”;
}

modal.classList.add(“open”);
modal.setAttribute(“aria-hidden”, “false”);
document.body.style.overflow = “hidden”;
});
}
);

function closeModal() {
modal.classList.remove(“open”);
modal.setAttribute(“aria-hidden”, “true”);
document.body.style.overflow = “”;
}

modalClose.addEventListener(“click”, closeModal);
modalOverlay.addEventListener(“click”, closeModal);

document.addEventListener(“keydown”, function (event) {
if (event.key === “Escape”) {
closeModal();
closeFilters();
}
});

/* Newsletter demonstration */
const newsletterForm = document.querySelector(
“.sls-newsletter-form”
);

newsletterForm.addEventListener(“submit”, function (event) {
event.preventDefault();

alert(
“Thank you for subscribing. Connect this form to your email marketing platform.”
);

newsletterForm.reset();
});

applyFilters();
});

Showing 1–12 of 13 results

Scroll to Top