GP Leather — Handcrafted in Australia
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
–tan: #c8a97e;
–dark: #1a1410;
–mid: #3b2e22;
–cream: #f5ede0;
–warm: #e8d5bc;
–accent: #8b5e3c;
–light: #faf5ee;
}
html { scroll-behavior: smooth; }
body {
font-family: ‘Jost’, sans-serif;
background: var(–light);
color: var(–dark);
overflow-x: hidden;
}
/* ── NOISE TEXTURE OVERLAY ── */
body::before {
content: ”;
position: fixed; inset: 0;
background-image: url(“data:image/svg+xml,%3Csvg viewBox=’0 0 256 256′ xmlns=’http://www.w3.org/2000/svg’%3E%3Cfilter id=’n’%3E%3CfeTurbulence type=’fractalNoise’ baseFrequency=’0.9′ numOctaves=’4′ stitchTiles=’stitch’/%3E%3C/filter%3E%3Crect width=’100%25′ height=’100%25′ filter=’url(%23n)’ opacity=’0.04’/%3E%3C/svg%3E”);
pointer-events: none; z-index: 999; opacity: 0.4;
}
/* ── NAV ── */
nav {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
display: flex; align-items: center; justify-content: space-between;
padding: 1.4rem 3rem;
background: rgba(250, 245, 238, 0.88);
backdrop-filter: blur(12px);
border-bottom: 1px solid rgba(200,169,126,0.25);
transition: padding 0.3s;
}
.nav-logo {
font-family: ‘Cormorant Garamond’, serif;
font-size: 1.35rem;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(–mid);
text-decoration: none;
}
.nav-logo span { color: var(–tan); }
.nav-links { display: flex; gap: 2.2rem; list-style: none; }
.nav-links a {
font-size: 0.72rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(–mid);
text-decoration: none;
opacity: 0.75;
transition: opacity 0.2s;
}
.nav-links a:hover { opacity: 1; }
/* ── HERO ── */
.hero {
min-height: 100vh;
display: grid;
grid-template-columns: 1fr 1fr;
padding-top: 72px;
position: relative;
overflow: hidden;
}
.hero-left {
display: flex; flex-direction: column;
justify-content: center;
padding: 5rem 4rem 5rem 6rem;
position: relative;
}
.hero-left::after {
content: ”;
position: absolute; right: 0; top: 10%; bottom: 10%;
width: 1px; background: linear-gradient(to bottom, transparent, var(–tan), transparent);
}
.hero-eyebrow {
font-size: 0.68rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–tan);
margin-bottom: 1.6rem;
animation: fadeUp 0.8s ease both 0.2s;
}
.hero-title {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(3.2rem, 5vw, 5.2rem);
font-weight: 300;
line-height: 1.08;
color: var(–mid);
margin-bottom: 2rem;
animation: fadeUp 0.9s ease both 0.35s;
}
.hero-title em {
font-style: italic;
color: var(–accent);
}
.hero-sub {
font-size: 0.92rem;
font-weight: 300;
line-height: 1.75;
color: var(–mid);
opacity: 0.7;
max-width: 360px;
margin-bottom: 3rem;
animation: fadeUp 1s ease both 0.5s;
}
.hero-ctas {
display: flex; gap: 1.2rem; align-items: center;
animation: fadeUp 1s ease both 0.65s;
}
.btn-primary {
background: var(–accent);
color: var(–cream);
padding: 0.85rem 2.2rem;
font-family: ‘Jost’, sans-serif;
font-size: 0.72rem;
letter-spacing: 0.2em;
text-transform: uppercase;
border: none; cursor: pointer;
text-decoration: none;
transition: background 0.25s, transform 0.2s;
display: inline-block;
}
.btn-primary:hover { background: var(–mid); transform: translateY(-2px); }
.btn-ghost {
font-size: 0.72rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(–accent);
text-decoration: none;
border-bottom: 1px solid var(–tan);
padding-bottom: 2px;
transition: color 0.2s, border-color 0.2s;
}
.btn-ghost:hover { color: var(–mid); border-color: var(–mid); }
.hero-right {
position: relative;
background: var(–warm);
overflow: hidden;
animation: fadeIn 1.2s ease both 0.2s;
}
.hero-img-bg {
position: absolute; inset: 0;
background:
radial-gradient(ellipse at 30% 40%, rgba(139,94,60,0.18) 0%, transparent 60%),
radial-gradient(ellipse at 70% 70%, rgba(200,169,126,0.25) 0%, transparent 55%),
linear-gradient(135deg, #d4b896 0%, #c4a07a 40%, #b8946a 100%);
}
.hero-leather-art {
position: absolute; inset: 0;
display: flex; align-items: center; justify-content: center;
}
/* Decorative leather silhouette shapes */
.leather-icon {
width: 340px; height: 340px;
position: relative;
}
.leather-icon svg { width: 100%; height: 100%; }
.hero-badge {
position: absolute; bottom: 2.5rem; left: 2.5rem;
background: rgba(26,20,16,0.82);
backdrop-filter: blur(8px);
color: var(–cream);
padding: 1.1rem 1.6rem;
border-left: 3px solid var(–tan);
animation: fadeUp 1s ease both 0.8s;
}
.hero-badge strong {
display: block;
font-family: ‘Cormorant Garamond’, serif;
font-size: 1.4rem;
font-weight: 400;
margin-bottom: 0.25rem;
}
.hero-badge span { font-size: 0.7rem; letter-spacing: 0.15em; text-transform: uppercase; opacity: 0.6; }
/* ── MARQUEE ── */
.marquee-wrap {
background: var(–mid);
padding: 0.9rem 0;
overflow: hidden;
border-top: 1px solid rgba(200,169,126,0.2);
border-bottom: 1px solid rgba(200,169,126,0.2);
}
.marquee-inner {
display: flex; gap: 0; white-space: nowrap;
animation: marquee 20s linear infinite;
}
.marquee-item {
display: inline-flex; align-items: center; gap: 1.8rem;
padding: 0 2rem;
font-size: 0.68rem;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(–tan);
}
.marquee-dot { width: 4px; height: 4px; background: var(–tan); border-radius: 50%; flex-shrink: 0; }
/* ── SERVICES ── */
.services {
padding: 7rem 6rem;
background: var(–light);
}
.section-header {
display: flex; align-items: baseline; gap: 2rem;
margin-bottom: 4.5rem;
}
.section-label {
font-size: 0.65rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–tan);
}
.section-title {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(2rem, 3.5vw, 3rem);
font-weight: 300;
color: var(–mid);
line-height: 1.1;
}
.section-title em { font-style: italic; color: var(–accent); }
.services-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0;
border: 1px solid rgba(200,169,126,0.3);
}
.service-card {
padding: 2.8rem 2.2rem;
border-right: 1px solid rgba(200,169,126,0.3);
position: relative;
overflow: hidden;
transition: background 0.35s;
cursor: default;
}
.service-card:last-child { border-right: none; }
.service-card::before {
content: ”;
position: absolute; bottom: 0; left: 0; right: 0;
height: 3px;
background: var(–tan);
transform: scaleX(0);
transform-origin: left;
transition: transform 0.4s ease;
}
.service-card:hover { background: var(–cream); }
.service-card:hover::before { transform: scaleX(1); }
.service-num {
font-family: ‘Cormorant Garamond’, serif;
font-size: 3rem;
font-weight: 300;
color: rgba(200,169,126,0.25);
line-height: 1;
margin-bottom: 1.5rem;
}
.service-icon { font-size: 1.8rem; margin-bottom: 1.2rem; }
.service-name {
font-family: ‘Cormorant Garamond’, serif;
font-size: 1.35rem;
font-weight: 400;
color: var(–mid);
margin-bottom: 0.8rem;
}
.service-desc {
font-size: 0.82rem;
font-weight: 300;
line-height: 1.7;
color: var(–mid);
opacity: 0.65;
}
/* ── ABOUT STRIP ── */
.about {
display: grid; grid-template-columns: 1fr 1fr;
min-height: 520px;
}
.about-visual {
background: linear-gradient(160deg, #c4a07a 0%, #8b5e3c 60%, #3b2e22 100%);
position: relative; overflow: hidden;
display: flex; align-items: center; justify-content: center;
}
.about-pattern {
position: absolute; inset: 0; opacity: 0.08;
background-image:
repeating-linear-gradient(45deg, #fff 0, #fff 1px, transparent 0, transparent 50%),
repeating-linear-gradient(-45deg, #fff 0, #fff 1px, transparent 0, transparent 50%);
background-size: 28px 28px;
}
.about-quote {
position: relative; z-index: 2;
text-align: center; padding: 3rem;
}
.about-quote blockquote {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(1.6rem, 2.5vw, 2.3rem);
font-style: italic;
font-weight: 300;
color: var(–cream);
line-height: 1.4;
margin-bottom: 1.5rem;
}
.about-quote cite {
font-size: 0.68rem;
letter-spacing: 0.25em;
text-transform: uppercase;
color: rgba(245,237,224,0.6);
font-style: normal;
}
.about-content {
padding: 5rem;
background: var(–cream);
display: flex; flex-direction: column; justify-content: center;
}
.about-content .section-label { margin-bottom: 1.5rem; }
.about-content h2 {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(1.8rem, 2.5vw, 2.6rem);
font-weight: 300;
color: var(–mid);
line-height: 1.2;
margin-bottom: 1.5rem;
}
.about-content p {
font-size: 0.9rem;
font-weight: 300;
line-height: 1.8;
color: var(–mid);
opacity: 0.75;
margin-bottom: 1rem;
}
.about-stats {
display: flex; gap: 2.5rem;
margin-top: 2.5rem;
padding-top: 2rem;
border-top: 1px solid rgba(200,169,126,0.4);
}
.stat-val {
font-family: ‘Cormorant Garamond’, serif;
font-size: 2.4rem;
font-weight: 300;
color: var(–accent);
line-height: 1;
margin-bottom: 0.3rem;
}
.stat-label {
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(–mid);
opacity: 0.55;
}
/* ── MATERIALS ── */
.materials {
padding: 7rem 6rem;
background: var(–dark);
position: relative;
overflow: hidden;
}
.materials::before {
content: ‘LEATHER’;
position: absolute; right: -2rem; top: 50%;
transform: translateY(-50%);
font-family: ‘Cormorant Garamond’, serif;
font-size: 18vw; font-weight: 600;
color: rgba(255,255,255,0.02);
white-space: nowrap; pointer-events: none;
letter-spacing: -0.02em;
}
.materials .section-title { color: var(–cream); }
.materials .section-label { color: var(–tan); }
.mat-grid {
display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem;
margin-top: 4rem;
}
.mat-card {
border: 1px solid rgba(200,169,126,0.15);
padding: 2.2rem 2rem;
position: relative;
transition: border-color 0.3s, transform 0.3s;
}
.mat-card:hover { border-color: var(–tan); transform: translateY(-4px); }
.mat-swatch {
width: 48px; height: 48px;
border-radius: 50%;
margin-bottom: 1.5rem;
}
.mat-name {
font-family: ‘Cormorant Garamond’, serif;
font-size: 1.25rem;
color: var(–cream);
margin-bottom: 0.6rem;
}
.mat-desc {
font-size: 0.8rem;
line-height: 1.7;
color: rgba(245,237,224,0.45);
font-weight: 300;
}
/* ── FREE KEYRING OFFER ── */
.offer {
padding: 6rem;
background: linear-gradient(135deg, var(–warm) 0%, var(–cream) 100%);
text-align: center;
position: relative;
overflow: hidden;
}
.offer::before {
content: ”;
position: absolute; inset: 0;
background: radial-gradient(ellipse at center, rgba(139,94,60,0.12) 0%, transparent 70%);
}
.offer-eyebrow {
font-size: 0.65rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(–accent);
margin-bottom: 1.2rem;
}
.offer h2 {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(2.2rem, 4vw, 3.5rem);
font-weight: 300;
color: var(–mid);
margin-bottom: 1rem;
line-height: 1.15;
}
.offer h2 em { font-style: italic; color: var(–accent); }
.offer p {
font-size: 0.88rem;
font-weight: 300;
color: var(–mid);
opacity: 0.7;
max-width: 460px;
margin: 0 auto 2.5rem;
line-height: 1.75;
}
.offer-form {
display: flex; gap: 0; max-width: 420px; margin: 0 auto;
position: relative; z-index: 1;
}
.offer-form input {
flex: 1;
padding: 0.9rem 1.4rem;
font-family: ‘Jost’, sans-serif;
font-size: 0.85rem;
border: 1px solid rgba(139,94,60,0.35);
border-right: none;
background: rgba(255,255,255,0.7);
color: var(–dark);
outline: none;
}
.offer-form input::placeholder { color: rgba(59,46,34,0.4); }
.offer-form button {
padding: 0.9rem 1.8rem;
background: var(–accent);
color: var(–cream);
border: none;
font-family: ‘Jost’, sans-serif;
font-size: 0.7rem;
letter-spacing: 0.18em;
text-transform: uppercase;
cursor: pointer;
transition: background 0.25s;
}
.offer-form button:hover { background: var(–mid); }
.offer-note {
font-size: 0.68rem;
color: var(–mid);
opacity: 0.45;
margin-top: 1rem;
letter-spacing: 0.05em;
}
/* ── CONTACT ── */
.contact {
padding: 7rem 6rem;
background: var(–mid);
display: grid; grid-template-columns: 1fr 1fr; gap: 6rem;
align-items: start;
}
.contact-left h2 {
font-family: ‘Cormorant Garamond’, serif;
font-size: clamp(2rem, 3vw, 2.8rem);
font-weight: 300;
color: var(–cream);
line-height: 1.2;
margin-bottom: 2rem;
}
.contact-left p {
font-size: 0.88rem;
font-weight: 300;
line-height: 1.8;
color: rgba(245,237,224,0.6);
margin-bottom: 2.5rem;
}
.contact-detail {
display: flex; align-items: center; gap: 1rem;
margin-bottom: 1rem;
font-size: 0.85rem;
color: var(–tan);
}
.contact-detail .icon { font-size: 1rem; }
.contact-form { display: flex; flex-direction: column; gap: 1rem; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.form-field {
display: flex; flex-direction: column; gap: 0.4rem;
}
.form-field label {
font-size: 0.65rem;
letter-spacing: 0.2em;
text-transform: uppercase;
color: rgba(200,169,126,0.7);
}
.form-field input,
.form-field textarea,
.form-field select {
background: rgba(255,255,255,0.06);
border: 1px solid rgba(200,169,126,0.2);
color: var(–cream);
padding: 0.8rem 1rem;
font-family: ‘Jost’, sans-serif;
font-size: 0.85rem;
outline: none;
transition: border-color 0.25s;
resize: none;
}
.form-field input:focus,
.form-field textarea:focus,
.form-field select:focus { border-color: var(–tan); }
.form-field select option { background: var(–mid); color: var(–cream); }
.form-field textarea { height: 110px; }
.contact-form .btn-primary { align-self: flex-start; margin-top: 0.5rem; }
/* ── FOOTER ── */
footer {
background: var(–dark);
padding: 3rem 6rem;
display: flex; align-items: center; justify-content: space-between;
border-top: 1px solid rgba(200,169,126,0.15);
}
.footer-logo {
font-family: ‘Cormorant Garamond’, serif;
font-size: 1.1rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(–tan);
text-decoration: none;
}
.footer-copy {
font-size: 0.7rem;
color: rgba(245,237,224,0.3);
letter-spacing: 0.08em;
}
.footer-right {
display: flex; gap: 2rem;
}
.footer-right a {
font-size: 0.68rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: rgba(200,169,126,0.5);
text-decoration: none;
transition: color 0.2s;
}
.footer-right a:hover { color: var(–tan); }
/* ── ANIMATIONS ── */
@keyframes fadeUp {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
from { opacity: 0; } to { opacity: 1; }
}
@keyframes marquee {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
/* Scroll-reveal base */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.7s ease, transform 0.7s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }
/* ── RESPONSIVE ── */
@media (max-width: 900px) {
nav { padding: 1.2rem 1.5rem; }
.nav-links { display: none; }
.hero { grid-template-columns: 1fr; min-height: auto; }
.hero-left { padding: 4rem 1.5rem 3rem; }
.hero-left::after { display: none; }
.hero-right { min-height: 320px; }
.services { padding: 4rem 1.5rem; }
.services-grid { grid-template-columns: 1fr 1fr; }
.about { grid-template-columns: 1fr; }
.about-content { padding: 3rem 1.5rem; }
.materials { padding: 4rem 1.5rem; }
.mat-grid { grid-template-columns: 1fr; }
.offer { padding: 4rem 1.5rem; }
.contact { grid-template-columns: 1fr; padding: 4rem 1.5rem; gap: 3rem; }
footer { flex-direction: column; gap: 1.5rem; padding: 2rem 1.5rem; text-align: center; }
}
NSW Australia · Est. Handcraft
Leather
made to
last a lifetime.
Handcrafted leather goods from New South Wales. New work, repairs, adjustments, and fully custom orders — every stitch placed with purpose.
Every piece, made by hand
New Work
Repairs & Adjustments
Custom Orders
NSW Australia
Handcrafted Leather
Free Key Ring Offer
New Work
Repairs & Adjustments
Custom Orders
NSW Australia
Handcrafted Leather
Free Key Ring Offer
Leather work,
done right.
New Work
Original leather items crafted from scratch — belts, wallets, bags, cases, and more. Built to your specifications and made to endure.
Repairs
Good leather deserves a second life. We restore stitching, replace hardware, rebuild worn edges, and bring your favourite pieces back to form.
Adjustments
Sizing, shortening, adding holes, or modifying existing leather goods — quick, clean work that fits the way you actually live.
Custom Orders
Have something specific in mind? Bring your idea and we’ll bring it to life. One-of-a-kind pieces made entirely to your vision.
“The difference between good leather and great leather is the hands that shaped it.”
— GP Leather, NSW
Crafted in
New South Wales,
made for keeps.
GP Leather is a NSW-based leather workshop dedicated to the old-fashioned art of making things well. Every item that leaves our bench has been stitched, cut, and finished by hand.
Whether it’s a belt ordered for everyday wear or a bag repaired to pass down to a grandchild, we treat every job with the same care and attention to detail.
Premium hides,
honestly sourced.
Full-Grain Leather
The outermost layer of the hide — the strongest, most breathable grade. Develops a rich patina with age that no other material can replicate.
Vegetable-Tanned
Tanned using traditional plant-based methods. Firmer, longer lasting, and environmentally sound. The choice of craftspeople who care about quality.
Upholstery Leather
Supple, durable, and available in a wide range of finishes. Ideal for bags, wallets, and items that need to flex without cracking.
Monthly Newsletter
Get a free Australian
leather key ring.
Subscribe to our monthly newsletter and receive a complimentary handcrafted leather key ring — nothing to pay. Plus go in the draw to win a free leather belt.
No spam. Just leather news and occasional giveaways.
Let’s talk
about your
next piece.
Whether you have a repair, a custom idea, or just a question — get in touch. We reply to every enquiry personally.
gpleather@outlook.com
NSW, Australia
Select a service…
New Work
Repair
Adjustment
Custom Order
Other / Not sure
// Scroll reveal
const reveals = document.querySelectorAll(‘.reveal’);
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, i) => {
if (entry.isIntersecting) {
setTimeout(() => entry.target.classList.add(‘visible’), i * 80);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.12 });
reveals.forEach(el => observer.observe(el));
// Offer subscribe button feedback
document.querySelector(‘.offer-form button’).addEventListener(‘click’, function() {
const input = document.querySelector(‘.offer-form input’);
if (input.value.includes(‘@’)) {
this.textContent = ‘Subscribed ✓’;
this.style.background = ‘var(–mid)’;
input.value = ”;
} else {
input.style.borderColor = ‘#c0392b’;
setTimeout(() => input.style.borderColor = ”, 1500);
}
});
// Contact form send button
document.querySelector(‘.contact-form .btn-primary’).addEventListener(‘click’, function() {
this.textContent = ‘Message Sent ✓’;
this.style.background = ‘var(–mid)’;
});