<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>House of Ellora — Carved in Cloth</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,500;0,9..144,600;1,9..144,500&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
:root{
--stone-light:#EDE7D6;
--stone-paper:#F8F4E9;
--stone-mid:#B99458;
--basalt:#211D18;
--indigo:#2F4A55;
--rust:#8B3A2B;
--line: rgba(33,29,24,0.14);
--display: 'Fraunces', serif;
--body: 'Inter', sans-serif;
--mono: 'IBM Plex Mono', monospace;
}
*{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
body{
margin:0;
background:var(--stone-light);
color:var(--basalt);
font-family:var(--body);
line-height:1.5;
-webkit-font-smoothing:antialiased;
}
img{ max-width:100%; display:block; }
a{ color:inherit; }
@media (prefers-reduced-motion: reduce){
*{ animation:none !important; transition:none !important; scroll-behavior:auto !important; }
}
/* ---------- utility ---------- */
.wrap{ max-width:1180px; margin:0 auto; padding:0 32px; }
.eyebrow{
font-family:var(--mono); font-size:12px; letter-spacing:0.14em; text-transform:uppercase;
color:var(--indigo); display:flex; align-items:center; gap:10px;
}
.eyebrow::before{ content:""; width:22px; height:1px; background:var(--stone-mid); display:inline-block; }
h1,h2,h3{ font-family:var(--display); font-weight:500; margin:0; }
.btn{
font-family:var(--body); font-weight:600; font-size:14.5px;
border:1px solid var(--basalt); border-radius:2px;
padding:13px 26px; cursor:pointer; background:transparent; color:var(--basalt);
display:inline-flex; align-items:center; gap:8px; letter-spacing:0.01em;
transition:background .18s ease, color .18s ease, transform .18s ease;
text-decoration:none;
}
.btn:hover{ transform:translateY(-1px); }
.btn-solid{ background:var(--basalt); color:var(--stone-light); }
.btn-solid:hover{ background:#3a3226; }
.btn-rust{ background:var(--rust); border-color:var(--rust); color:var(--stone-paper); }
.btn-rust:hover{ background:#742f22; }
.btn:focus-visible, a:focus-visible, button:focus-visible{
outline:2px solid var(--indigo); outline-offset:3px;
}
/* ---------- relief frieze divider (signature element) ---------- */
.frieze{
height:34px; width:100%;
background-color:var(--basalt);
-webkit-mask-image:repeating-linear-gradient(90deg,
transparent 0 6px,
#000 6px 10px,
transparent 10px 30px,
#000 30px 34px,
transparent 34px 60px
);
mask-image:repeating-linear-gradient(90deg,
transparent 0 6px,
#000 6px 10px,
transparent 10px 30px,
#000 30px 34px,
transparent 34px 60px
);
opacity:0.9;
}
/* ---------- header ---------- */
header{
position:sticky; top:0; z-index:50;
background:rgba(237,231,214,0.92); backdrop-filter:blur(6px);
border-bottom:1px solid var(--line);
}
.nav{
display:flex; align-items:center; justify-content:space-between;
padding:20px 32px; max-width:1180px; margin:0 auto;
}
.logo{ font-family:var(--display); font-size:22px; letter-spacing:0.02em; }
.logo span{ color:var(--rust); font-style:italic; }
.nav-links{ display:flex; gap:32px; align-items:center; font-size:14.5px; }
.nav-links a{ text-decoration:none; opacity:0.85; }
.nav-links a:hover{ opacity:1; }
.nav-cta{ display:flex; gap:12px; }
.burger{ display:none; }
@media (max-width:860px){
.nav-links, .nav-cta .btn:last-child{ display:none; }
}
/* ---------- hero ---------- */
.hero{
padding:96px 32px 70px; max-width:1180px; margin:0 auto;
display:grid; grid-template-columns:1.15fr 0.85fr; gap:60px; align-items:end;
}
.hero h1{
font-size:clamp(42px, 6.4vw, 84px); line-height:0.98; margin:18px 0 26px;
letter-spacing:-0.01em;
}
.hero h1 em{ font-style:italic; color:var(--rust); }
.hero p{ font-size:17px; max-width:46ch; opacity:0.85; margin-bottom:34px; }
.hero-actions{ display:flex; gap:14px; flex-wrap:wrap; }
.hero-relief{
aspect-ratio:3/4; border-radius:2px; position:relative; overflow:hidden;
background:
radial-gradient(circle at 30% 20%, rgba(185,148,88,0.5), transparent 60%),
linear-gradient(160deg, #d8c9a3, #a98450 65%, #6f5432);
}
.hero-relief::before{
content:""; position:absolute; inset:0;
background-image:repeating-linear-gradient(115deg, rgba(33,29,24,0.08) 0 2px, transparent 2px 22px);
}
.hero-relief .tag{
position:absolute; bottom:18px; left:18px; right:18px;
background:rgba(33,29,24,0.82); color:var(--stone-paper);
font-family:var(--mono); font-size:11.5px; padding:10px 14px; letter-spacing:0.06em;
}
@media (max-width:860px){
.hero{ grid-template-columns:1fr; padding-top:56px; }
.hero-relief{ order:-1; aspect-ratio:16/10; }
}
/* ---------- section shell ---------- */
section{ padding:88px 0; }
.section-head{ display:flex; justify-content:space-between; align-items:flex-end; margin-bottom:48px; gap:24px; flex-wrap:wrap; }
.section-head h2{ font-size:clamp(28px,3.4vw,42px); margin-top:10px; max-width:20ch; }
.section-head p.desc{ max-width:38ch; font-size:15px; opacity:0.75; }
/* ---------- chambers (collections) ---------- */
.chambers{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--line); border:1px solid var(--line); }
.chamber{ background:var(--stone-paper); padding:38px 30px; position:relative; }
.chamber .num{ font-family:var(--mono); font-size:12px; color:var(--stone-mid); letter-spacing:0.1em; }
.chamber h3{ font-size:24px; margin:14px 0 12px; }
.chamber p{ font-size:14.5px; opacity:0.78; margin-bottom:22px; }
.chamber a{ font-family:var(--mono); font-size:12.5px; text-decoration:none; border-bottom:1px solid var(--basalt); padding-bottom:2px; }
@media (max-width:860px){ .chambers{ grid-template-columns:1fr; } }
/* ---------- catalogue banner ---------- */
.catalogue-band{
background:var(--basalt); color:var(--stone-light);
padding:64px 0;
}
.catalogue-inner{
display:flex; justify-content:space-between; align-items:center; gap:30px; flex-wrap:wrap;
}
.catalogue-inner h2{ color:var(--stone-light); font-size:clamp(26px,3vw,36px); max-width:16ch; }
.catalogue-inner p{ opacity:0.7; max-width:42ch; font-size:14.5px; margin-top:10px; }
.catalogue-actions{ display:flex; gap:14px; flex-wrap:wrap; }
.catalogue-band .btn{ border-color:var(--stone-light); color:var(--stone-light); }
.catalogue-band .btn-solid{ background:var(--stone-light); color:var(--basalt); }
.catalogue-band .btn-solid:hover{ background:#fff; }
/* ---------- products ---------- */
.products{ display:grid; grid-template-columns:repeat(3,1fr); gap:28px; }
.product-card{ background:var(--stone-paper); border:1px solid var(--line); }
.product-media{
aspect-ratio:4/5; position:relative; overflow:hidden;
background:linear-gradient(150deg,#dccdaa,#a5824d 60%,#5d4626);
}
.product-media::after{
content:""; position:absolute; inset:0;
background-image:repeating-radial-gradient(circle at 50% 0%, rgba(33,29,24,0.10) 0 2px, transparent 2px 26px);
}
.product-body{ padding:20px 22px 24px; }
.product-body .pname{ font-family:var(--display); font-size:19px; margin-bottom:6px; }
.product-body .pmeta{ display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; }
.product-body .price{ font-family:var(--mono); font-size:14px; color:var(--indigo); }
.product-body .btn{ width:100%; justify-content:center; }
@media (max-width:860px){ .products{ grid-template-columns:1fr 1fr; } }
@media (max-width:560px){ .products{ grid-template-columns:1fr; } }
/* ---------- inscriptions (blog) ---------- */
.posts{ display:flex; flex-direction:column; }
.post{
display:grid; grid-template-columns:120px 1fr auto; gap:28px; align-items:baseline;
padding:30px 0; border-top:1px solid var(--line);
}
.posts .post:last-child{ border-bottom:1px solid var(--line); }
.post .roman{ font-family:var(--display); font-style:italic; font-size:26px; color:var(--stone-mid); }
.post h3{ font-size:21px; margin-bottom:8px; }
.post p{ font-size:14.5px; opacity:0.75; max-width:56ch; }
.post .read{ font-family:var(--mono); font-size:12.5px; text-decoration:none; white-space:nowrap; border-bottom:1px solid var(--basalt); padding-bottom:2px; }
@media (max-width:700px){
.post{ grid-template-columns:1fr; gap:8px; }
.post .read{ margin-top:6px; }
}
/* ---------- footer ---------- */
footer{ background:var(--stone-paper); border-top:1px solid var(--line); padding:56px 0 30px; }
.footer-grid{ display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:40px; margin-bottom:40px; }
.footer-grid h4{ font-family:var(--mono); font-size:12px; letter-spacing:0.1em; text-transform:uppercase; margin-bottom:16px; opacity:0.6; }
.footer-grid p, .footer-grid a{ font-size:14.5px; text-decoration:none; opacity:0.85; display:block; margin-bottom:8px; }
.footer-bottom{ display:flex; justify-content:space-between; font-size:12.5px; opacity:0.55; border-top:1px solid var(--line); padding-top:22px; flex-wrap:wrap; gap:10px; font-family:var(--mono); }
.newsletter{ display:flex; gap:0; margin-top:10px; }
.newsletter input{
font-family:var(--body); font-size:14px; padding:11px 14px; border:1px solid var(--basalt); border-right:none;
background:transparent; flex:1; min-width:0;
}
.newsletter button{ border-radius:0; }
@media (max-width:760px){ .footer-grid{ grid-template-columns:1fr; } }
/* ---------- modal ---------- */
.modal-overlay{
position:fixed; inset:0; background:rgba(33,29,24,0.55);
display:none; align-items:center; justify-content:center; z-index:200; padding:20px;
}
.modal-overlay.open{ display:flex; }
.modal{
background:var(--stone-paper); max-width:420px; width:100%; padding:34px 30px;
border:1px solid var(--line); position:relative;
}
.modal h3{ font-size:22px; margin-bottom:6px; }
.modal p.sub{ font-size:13.5px; opacity:0.7; margin-bottom:22px; }
.modal label{ font-family:var(--mono); font-size:11.5px; letter-spacing:0.06em; text-transform:uppercase; display:block; margin-bottom:6px; opacity:0.7; }
.modal input, .modal select{
width:100%; font-family:var(--body); font-size:14.5px; padding:11px 12px; margin-bottom:16px;
border:1px solid var(--line); background:var(--stone-light);
}
.modal .close{
position:absolute; top:18px; right:18px; background:none; border:none; cursor:pointer;
font-size:20px; line-height:1; color:var(--basalt); padding:4px;
}
.modal-confirm{ display:none; text-align:center; padding:10px 0 4px; }
.modal-confirm.open{ display:block; }
.modal-confirm .mark{ font-family:var(--display); font-style:italic; font-size:34px; color:var(--rust); margin-bottom:10px; }
</style>
</head>
<body>
<header>
<div class="nav">
<div class="logo">House of <span>Ellora</span></div>
<nav class="nav-links">
<a href="#chambers">Chambers</a>
<a href="#pieces">Pieces</a>
<a href="#inscriptions">Inscriptions</a>
<a href="#contact">Contact</a>
</nav>
<div class="nav-cta">
<button class="btn" onclick="openCatalogue()">Get catalogue</button>
<button class="btn btn-solid" onclick="scrollToId('pieces')">Shop pieces</button>
</div>
</div>
</header>
<div class="frieze"></div>
<section class="hero">
<div>
<p class="eyebrow">Est. in the vernacular of Ellora</p>
<h1>Garments cut<br>from stone's <em>memory</em>.</h1>
<p>House of Ellora translates the carved reliefs and hand-pigment traditions of India's rock-cut temples into clothing — natural fibre, deep dye, and silhouettes worn slow. Every piece ships with the story behind it.</p>
<div class="hero-actions">
<button class="btn btn-rust" onclick="scrollToId('pieces')">Shop the collection</button>
<button class="btn" onclick="openCatalogue()">Download catalogue</button>
</div>
</div>
<div class="hero-relief">
<div class="tag">CHAMBER I — DRAPE · S/S CATALOGUE</div>
</div>
</section>
<div class="frieze"></div>
<section id="chambers">
<div class="wrap">
<div class="section-head">
<div>
<p class="eyebrow">Collections, by chamber</p>
<h2>Three rooms, three ways of working cloth.</h2>
</div>
<p class="desc">Named for the numbered chambers of the caves themselves — each one holds a distinct technique, not a season.</p>
</div>
<div class="chambers">
<div class="chamber">
<div class="num">CHAMBER I</div>
<h3>Drape</h3>
<p>Unstructured tailoring in raw silk and handloom cotton, cut to move like carved fabric caught mid-fold.</p>
<a href="#pieces">View pieces →</a>
</div>
<div class="chamber">
<div class="num">CHAMBER II</div>
<h3>Relief</h3>
<p>Raised embroidery worked to sit above the cloth, echoing the depth of temple stone-carving.</p>
<a href="#pieces">View pieces →</a>
</div>
<div class="chamber">
<div class="num">CHAMBER III</div>
<h3>Pigment</h3>
<p>Hand-dyed indigo and ochre, mixed using the mineral pigments once used in the cave murals.</p>
<a href="#pieces">View pieces →</a>
</div>
</div>
</div>
</section>
<div class="catalogue-band">
<div class="wrap catalogue-inner">
<div>
<p class="eyebrow" style="color:var(--stone-mid)">The full archive</p>
<h2>Every piece, every chamber — in one catalogue.</h2>
<p>Sixty pages, sized and priced, with fabric notes for each garment. Sent straight to your inbox.</p>
</div>
<div class="catalogue-actions">
<button class="btn btn-solid" onclick="openCatalogue()">Download catalogue (PDF)</button>
<button class="btn" onclick="openBuy('Full Catalogue Order','—')">Order from catalogue</button>
</div>
</div>
</div>
<section id="pieces">
<div class="wrap">
<div class="section-head">
<div>
<p class="eyebrow">Featured pieces</p>
<h2>From the current chambers.</h2>
</div>
<p class="desc">A short edit. The full range is in the catalogue.</p>
</div>
<div class="products">
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Basalt Wrap Dress</div>
<div class="pmeta"><span class="price">£185</span><span class="eyebrow" style="font-size:11px">CH. I</span></div>
<button class="btn btn-solid" onclick="openBuy('Basalt Wrap Dress','£185')">Buy now</button>
</div>
</div>
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Relief Embroidered Kurta</div>
<div class="pmeta"><span class="price">£145</span><span class="eyebrow" style="font-size:11px">CH. II</span></div>
<button class="btn btn-solid" onclick="openBuy('Relief Embroidered Kurta','£145')">Buy now</button>
</div>
</div>
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Indigo Pigment Scarf</div>
<div class="pmeta"><span class="price">£65</span><span class="eyebrow" style="font-size:11px">CH. III</span></div>
<button class="btn btn-solid" onclick="openBuy('Indigo Pigment Scarf','£65')">Buy now</button>
</div>
</div>
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Sandstone Linen Trousers</div>
<div class="pmeta"><span class="price">£95</span><span class="eyebrow" style="font-size:11px">CH. I</span></div>
<button class="btn btn-solid" onclick="openBuy('Sandstone Linen Trousers','£95')">Buy now</button>
</div>
</div>
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Carved Cuff Blouse</div>
<div class="pmeta"><span class="price">£120</span><span class="eyebrow" style="font-size:11px">CH. II</span></div>
<button class="btn btn-solid" onclick="openBuy('Carved Cuff Blouse','£120')">Buy now</button>
</div>
</div>
<div class="product-card">
<div class="product-media"></div>
<div class="product-body">
<div class="pname">Temple Column Coat</div>
<div class="pmeta"><span class="price">£310</span><span class="eyebrow" style="font-size:11px">CH. III</span></div>
<button class="btn btn-solid" onclick="openBuy('Temple Column Coat','£310')">Buy now</button>
</div>
</div>
</div>
</div>
</section>
<div class="frieze"></div>
<section id="inscriptions">
<div class="wrap">
<div class="section-head">
<div>
<p class="eyebrow">The journal</p>
<h2>Inscriptions.</h2>
</div>
<p class="desc">Notes on craft, sourcing, and the caves that started it all.</p>
</div>
<div class="posts">
<div class="post">
<div class="roman">I.</div>
<div>
<h3>Why we carve, not print</h3>
<p>On raised-thread embroidery, why it costs more, and why it wears better than anything printed.</p>
</div>
<a class="read" href="#" onclick="return false;">Read →</a>
</div>
<div class="post">
<div class="roman">II.</div>
<div>
<h3>The pigments of Ajanta, reimagined</h3>
<p>How we sourced a mineral-based indigo dye process close to the murals that first inspired us.</p>
</div>
<a class="read" href="#" onclick="return false;">Read →</a>
</div>
<div class="post">
<div class="roman">III.</div>
<div>
<h3>Sizing like stone: our fit philosophy</h3>
<p>Why our sizing runs generous, and how to read our fit notes before you order.</p>
</div>
<a class="read" href="#" onclick="return false;">Read →</a>
</div>
</div>
</div>
</section>
<footer id="contact">
<div class="wrap">
<div class="footer-grid">
<div>
<h4>House of Ellora</h4>
<p style="max-width:34ch; opacity:0.7;">Clothing carved from the craft traditions of India's rock-cut temples. Handmade in small runs.</p>
<div class="newsletter">
<input type="email" placeholder="you@email.com" aria-label="Email for newsletter">
<button class="btn btn-solid" onclick="openCatalogue()">Get catalogue</button>
</div>
</div>
<div>
<h4>Shop</h4>
<a href="#chambers">Chambers</a>
<a href="#pieces">Pieces</a>
<a href="#" onclick="openCatalogue(); return false;">Catalogue</a>
</div>
<div>
<h4>Contact</h4>
<a href="mailto:hello@houseofellora.com">hello@houseofellora.com</a>
<a href="#">Instagram</a>
<a href="#">Pinterest</a>
</div>
</div>
<div class="footer-bottom">
<span>© 2026 House of Ellora</span>
<span>Cave-numbered since day one.</span>
</div>
</div>
</footer>
<!-- Buy modal -->
<div class="modal-overlay" id="buyModal">
<div class="modal">
<button class="close" onclick="closeModal('buyModal')" aria-label="Close">×</button>
<div id="buyFormWrap">
<h3 id="buyTitle">Buy now</h3>
<p class="sub" id="buyPrice">Item — price</p>
<form onsubmit="return submitBuy(event)">
<label for="buyName">Name</label>
<input id="buyName" type="text" required>
<label for="buyEmail">Email</label>
<input id="buyEmail" type="email" required>
<label for="buySize">Size</label>
<select id="buySize">
<option>XS</option><option>S</option><option selected>M</option><option>L</option><option>XL</option>
</select>
<button class="btn btn-rust" type="submit" style="width:100%; justify-content:center;">Place order request</button>
</form>
</div>
<div class="modal-confirm" id="buyConfirm">
<div class="mark">✓</div>
<h3>Order request received</h3>
<p class="sub">We'll email you to confirm sizing and payment shortly.</p>
<button class="btn" onclick="closeModal('buyModal')" style="width:100%; justify-content:center;">Close</button>
</div>
</div>
</div>
<!-- Catalogue modal -->
<div class="modal-overlay" id="catModal">
<div class="modal">
<button class="close" onclick="closeModal('catModal')" aria-label="Close">×</button>
<div id="catFormWrap">
<h3>Get the catalogue</h3>
<p class="sub">Enter your email and we'll send the full 60-page PDF.</p>
<form onsubmit="return submitCatalogue(event)">
<label for="catEmail">Email</label>
<input id="catEmail" type="email" required>
<button class="btn btn-solid" type="submit" style="width:100%; justify-content:center;">Send me the catalogue</button>
</form>
</div>
<div class="modal-confirm" id="catConfirm">
<div class="mark">✓</div>
<h3>On its way</h3>
<p class="sub">Check your inbox in a few minutes for the catalogue PDF.</p>
<button class="btn" onclick="closeModal('catModal')" style="width:100%; justify-content:center;">Close</button>
</div>
</div>
</div>
<script>
function scrollToId(id){ document.getElementById(id).scrollIntoView({behavior:'smooth'}); }
function openBuy(name, price){
document.getElementById('buyTitle').textContent = 'Buy — ' + name;
document.getElementById('buyPrice').textContent = name + ' · ' + price;
document.getElementById('buyFormWrap').style.display = 'block';
document.getElementById('buyConfirm').classList.remove('open');
document.getElementById('buyModal').classList.add('open');
}
function openCatalogue(){
document.getElementById('catFormWrap').style.display = 'block';
document.getElementById('catConfirm').classList.remove('open');
document.getElementById('catModal').classList.add('open');
}
function closeModal(id){ document.getElementById(id).classList.remove('open'); }
function submitBuy(e){
e.preventDefault();
document.getElementById('buyFormWrap').style.display = 'none';
document.getElementById('buyConfirm').classList.add('open');
return false;
}
function submitCatalogue(e){
e.preventDefault();
document.getElementById('catFormWrap').style.display = 'none';
document.getElementById('catConfirm').classList.add('open');
return false;
}
document.querySelectorAll('.modal-overlay').forEach(function(ov){
ov.addEventListener('click', function(e){ if(e.target === ov) ov.classList.remove('open'); });
});
</script>
</body>
</html>