Pages Hard
Steakhouse Landing — Vault & Ember
Premium steakhouse single-page landing — dark charcoal + leather + gold, Cormorant Garamond display, smoke textures, dry-age tally and cellar drawer.
Open in Lab
MCP
html css vanilla-js
Targets: JS HTML
Code
/* ────────────────────────────────────────────
VAULT & EMBER — Steakhouse palette
Dark charcoal · leather · gold · rust accent
────────────────────────────────────────────── */
:root {
--bg: #141210;
--paper: #1c1916;
--paper-2: #221e1a;
--leather: #2b211a;
--gold: #c9a14c;
--gold-light: #e8c469;
--rust: #8a3a1f;
--bone: #e9e3d6;
--ink: #0a0907;
--mute: #8a7e6d;
--rule: rgba(233, 227, 214, 0.1);
--font-display: "Cormorant Garamond", "Playfair Display", Georgia, serif;
--font-body: "Inter", system-ui, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
--r-sm: 4px;
--r-md: 8px;
--r-lg: 14px;
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-body);
background: var(--bg);
color: var(--bone);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
/* Subtle film grain */
background-image: radial-gradient(circle at 20% 10%, rgba(201, 161, 76, 0.06), transparent 60%),
radial-gradient(circle at 80% 90%, rgba(138, 58, 31, 0.08), transparent 50%);
}
/* ── Nav ── */
.nav {
position: sticky;
top: 0;
z-index: 30;
display: flex;
align-items: center;
gap: 24px;
padding: 16px 28px;
background: rgba(20, 18, 16, 0.78);
backdrop-filter: blur(12px) saturate(140%);
border-bottom: 1px solid var(--rule);
}
.brand {
display: inline-flex;
align-items: center;
gap: 10px;
text-decoration: none;
color: var(--bone);
}
.brand-mark {
width: 32px;
height: 32px;
border: 1px solid var(--gold);
display: grid;
place-items: center;
font-family: var(--font-display);
font-weight: 700;
font-size: 0.86rem;
color: var(--gold);
letter-spacing: 0.04em;
}
.brand-name {
font-family: var(--font-display);
font-weight: 600;
font-size: 1.1rem;
letter-spacing: 0.04em;
}
.nav-links {
display: flex;
gap: 22px;
margin-left: auto;
}
.nav-links a {
color: var(--mute);
text-decoration: none;
font-size: 0.76rem;
font-weight: 600;
letter-spacing: 0.16em;
text-transform: uppercase;
transition: color 0.15s;
}
.nav-links a:hover {
color: var(--gold);
}
.nav-cta {
background: var(--gold);
color: var(--ink);
border-radius: 0;
padding: 10px 18px;
font-size: 0.74rem;
font-weight: 700;
text-decoration: none;
letter-spacing: 0.16em;
text-transform: uppercase;
transition: background 0.15s;
}
.nav-cta:hover {
background: var(--gold-light);
}
@media (max-width: 720px) {
.nav-links {
display: none;
}
}
/* ── Hero ── */
.hero {
position: relative;
display: grid;
grid-template-columns: 1.35fr 1fr;
gap: 48px;
max-width: 1280px;
margin: 0 auto;
padding: 80px 36px 100px;
align-items: center;
overflow: hidden;
}
.smoke {
position: absolute;
inset: 0;
pointer-events: none;
background: radial-gradient(
ellipse 60% 40% at 30% 100%,
rgba(201, 161, 76, 0.16),
transparent 60%
), radial-gradient(ellipse 70% 50% at 70% 0%, rgba(138, 58, 31, 0.14), transparent 55%);
}
.hero-inner {
position: relative;
display: flex;
flex-direction: column;
gap: 22px;
}
.kicker {
font-size: 0.72rem;
letter-spacing: 0.28em;
text-transform: uppercase;
color: var(--gold);
font-weight: 700;
display: inline-flex;
align-items: center;
gap: 14px;
}
.pip {
display: inline-block;
width: 24px;
height: 1px;
background: var(--gold);
}
.hero-title {
font-family: var(--font-display);
font-weight: 500;
font-size: clamp(3.4rem, 9vw, 6.2rem);
line-height: 0.95;
letter-spacing: -0.015em;
}
.hero-title .line {
display: block;
}
.hero-title .line-em {
font-style: italic;
color: var(--gold);
}
.hero-sub {
font-size: 1.05rem;
color: var(--mute);
max-width: 460px;
}
.hero-actions {
display: flex;
gap: 10px;
margin-top: 4px;
}
.btn {
padding: 14px 22px;
font-family: var(--font-body);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
cursor: pointer;
border: 1px solid transparent;
text-decoration: none;
display: inline-block;
transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.btn-gold {
background: var(--gold);
color: var(--ink);
}
.btn-gold:hover {
background: var(--gold-light);
}
.btn-ghost {
background: transparent;
color: var(--bone);
border-color: var(--rule);
}
.btn-ghost:hover {
border-color: var(--gold);
color: var(--gold);
}
.hero-stats {
margin-top: 12px;
display: grid;
grid-template-columns: repeat(3, auto);
gap: 16px 32px;
padding-top: 22px;
border-top: 1px solid var(--rule);
}
.hero-stats div {
display: flex;
flex-direction: column;
gap: 2px;
}
.hero-stats dt {
font-size: 0.68rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--mute);
font-weight: 700;
}
.hero-stats dd.m {
font-family: var(--font-mono);
font-size: 0.92rem;
font-weight: 600;
color: var(--bone);
}
.hero-stats dd.m span {
color: var(--gold);
font-weight: 700;
}
/* Cut chart aside */
.cut-chart {
position: relative;
background: var(--paper);
border: 1px solid var(--rule);
border-left: 2px solid var(--gold);
padding: 26px 26px 22px;
}
.cut-chart-label {
font-size: 0.66rem;
letter-spacing: 0.28em;
text-transform: uppercase;
color: var(--gold);
font-weight: 700;
margin-bottom: 14px;
}
.cut-chart ul {
list-style: none;
display: flex;
flex-direction: column;
}
.cut-chart li {
display: flex;
justify-content: space-between;
align-items: baseline;
font-family: var(--font-display);
font-size: 1.1rem;
font-weight: 500;
padding: 9px 0;
border-bottom: 1px dashed var(--rule);
color: var(--bone);
}
.cut-chart li:last-child {
border-bottom: none;
}
.cut-chart .age {
font-family: var(--font-mono);
font-size: 0.82rem;
font-weight: 700;
color: var(--mute);
letter-spacing: 0.04em;
}
.cut-chart li.featured {
color: var(--gold);
}
.cut-chart li.featured .age {
color: var(--gold);
}
@media (max-width: 880px) {
.hero {
grid-template-columns: 1fr;
padding: 56px 28px 64px;
}
}
/* ── Cuts section ── */
.cuts {
max-width: 1280px;
margin: 0 auto;
padding: 96px 36px;
scroll-margin-top: 70px;
}
.section-head {
text-align: center;
margin-bottom: 48px;
}
.section-head h2 {
font-family: var(--font-display);
font-weight: 500;
font-size: clamp(2.4rem, 5vw, 3.6rem);
letter-spacing: -0.015em;
line-height: 1.05;
}
.ital {
font-style: italic;
color: var(--gold);
}
.cut-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: var(--rule);
}
@media (max-width: 880px) {
.cut-grid {
grid-template-columns: 1fr;
}
}
.cut {
position: relative;
background: var(--paper);
padding: 32px 28px 28px;
display: flex;
flex-direction: column;
gap: 12px;
transition: background 0.2s;
}
.cut:hover {
background: var(--paper-2);
}
.cut-feat {
background: var(--leather);
}
.cut-feat:hover {
background: #382b22;
}
.cut-badge {
position: absolute;
top: 18px;
right: 18px;
background: var(--gold);
color: var(--ink);
font-size: 0.62rem;
letter-spacing: 0.2em;
text-transform: uppercase;
font-weight: 700;
padding: 4px 10px;
}
.cut-no {
font-family: var(--font-mono);
font-size: 0.74rem;
color: var(--gold);
letter-spacing: 0.14em;
font-weight: 700;
}
.cut h3 {
font-family: var(--font-display);
font-weight: 600;
font-size: 1.7rem;
letter-spacing: -0.005em;
line-height: 1.15;
}
.cut-desc {
color: var(--mute);
font-size: 0.92rem;
flex: 1;
}
.cut-spec {
display: flex;
flex-direction: column;
gap: 4px;
padding: 10px 0;
border-top: 1px solid var(--rule);
border-bottom: 1px solid var(--rule);
}
.cut-spec div {
display: flex;
justify-content: space-between;
font-size: 0.82rem;
}
.cut-spec dt {
color: var(--mute);
letter-spacing: 0.06em;
}
.cut-spec dd {
color: var(--bone);
font-weight: 600;
}
.cut-price {
font-family: var(--font-display);
font-size: 1.8rem;
font-weight: 500;
color: var(--gold);
margin-top: 2px;
}
/* ── Cellar ── */
.cellar {
background: var(--leather);
border-top: 1px solid var(--rule);
border-bottom: 1px solid var(--rule);
padding: 96px 36px;
scroll-margin-top: 70px;
}
.cellar-inner {
max-width: 1180px;
margin: 0 auto;
display: grid;
grid-template-columns: 1.1fr 1fr;
gap: 56px;
align-items: center;
}
@media (max-width: 880px) {
.cellar-inner {
grid-template-columns: 1fr;
}
}
.cellar-text h2 {
font-family: var(--font-display);
font-weight: 500;
font-size: clamp(2rem, 4.5vw, 3rem);
margin-top: 6px;
line-height: 1.05;
letter-spacing: -0.015em;
}
.cellar-text p {
color: var(--mute);
margin-top: 14px;
font-size: 1.02rem;
max-width: 480px;
}
.link {
display: inline-block;
margin-top: 22px;
color: var(--gold);
text-decoration: none;
font-size: 0.78rem;
letter-spacing: 0.18em;
text-transform: uppercase;
font-weight: 700;
border-bottom: 1px solid var(--gold);
padding-bottom: 4px;
}
.link:hover {
color: var(--gold-light);
border-color: var(--gold-light);
}
.cellar-stack {
position: relative;
height: 320px;
display: flex;
justify-content: center;
align-items: end;
gap: 14px;
}
.bottle {
width: 36px;
border-radius: 4px 4px 2px 2px;
position: relative;
background: linear-gradient(180deg, var(--paper) 0%, var(--ink) 100%);
box-shadow: inset 1px 0 0 rgba(233, 227, 214, 0.08), 0 8px 24px rgba(0, 0, 0, 0.4);
}
.bottle::before {
/* neck */
content: "";
position: absolute;
top: -28px;
left: 50%;
width: 12px;
height: 32px;
background: inherit;
border-radius: 3px 3px 0 0;
transform: translateX(-50%);
}
.bottle::after {
/* label */
content: "";
position: absolute;
left: 4px;
right: 4px;
bottom: 18%;
height: 36%;
background: linear-gradient(180deg, var(--bone) 0%, #cdc4ae 100%);
border-radius: 1px;
}
.b-1 {
height: 220px;
}
.b-2 {
height: 260px;
}
.b-3 {
height: 240px;
}
.b-4 {
height: 280px;
}
.b-5 {
height: 230px;
}
.b-2::after {
background: linear-gradient(180deg, var(--gold) 0%, var(--gold-light) 100%);
}
.b-4::after {
background: linear-gradient(180deg, var(--rust) 0%, #6a2a16 100%);
}
/* ── Room ── */
.room {
max-width: 1280px;
margin: 0 auto;
padding: 96px 36px;
scroll-margin-top: 70px;
}
.room-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
@media (max-width: 880px) {
.room-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 540px) {
.room-grid {
grid-template-columns: 1fr;
}
}
.room-card {
background: var(--paper);
border: 1px solid var(--rule);
padding: 26px 22px;
display: flex;
flex-direction: column;
gap: 10px;
transition: border-color 0.2s, background 0.2s;
}
.room-card:hover {
border-color: var(--gold);
background: var(--paper-2);
}
.room-icon {
font-size: 1.6rem;
width: 44px;
height: 44px;
border: 1px solid var(--gold);
display: grid;
place-items: center;
color: var(--gold);
}
.room-card h3 {
font-family: var(--font-display);
font-weight: 600;
font-size: 1.3rem;
margin-top: 6px;
}
.room-card p {
color: var(--mute);
font-size: 0.9rem;
}
/* ── Reserve ── */
.reserve {
background: var(--paper);
border-top: 1px solid var(--rule);
padding: 96px 36px;
scroll-margin-top: 70px;
}
.reserve-inner {
max-width: 1180px;
margin: 0 auto;
display: grid;
grid-template-columns: 1.1fr 1fr;
gap: 64px;
align-items: center;
}
@media (max-width: 880px) {
.reserve-inner {
grid-template-columns: 1fr;
}
}
.reserve h2 {
font-family: var(--font-display);
font-weight: 500;
font-size: clamp(2rem, 4.5vw, 3rem);
margin-top: 6px;
line-height: 1.05;
letter-spacing: -0.015em;
}
.reserve-sub {
color: var(--mute);
margin-top: 14px;
max-width: 460px;
}
.hours {
margin-top: 26px;
display: flex;
flex-direction: column;
gap: 6px;
}
.hours div {
display: flex;
justify-content: space-between;
align-items: baseline;
padding: 8px 0;
border-bottom: 1px solid var(--rule);
}
.hours dt {
font-size: 0.78rem;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--gold);
font-weight: 700;
}
.hours dd {
font-family: var(--font-mono);
font-weight: 600;
color: var(--bone);
}
.hours .closed dd {
color: var(--mute);
}
.reserve-form {
background: var(--leather);
border: 1px solid var(--gold);
padding: 32px 32px 28px;
display: flex;
flex-direction: column;
gap: 14px;
}
.form-label {
font-size: 0.72rem;
letter-spacing: 0.24em;
text-transform: uppercase;
color: var(--gold);
font-weight: 700;
}
.form-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.reserve-form label {
display: flex;
flex-direction: column;
gap: 6px;
font-size: 0.7rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--mute);
font-weight: 700;
}
.reserve-form input,
.reserve-form select {
background: var(--paper);
border: 1px solid var(--rule);
color: var(--bone);
font-family: inherit;
font-size: 0.94rem;
padding: 11px 14px;
border-radius: 0;
outline: none;
}
.reserve-form input:focus,
.reserve-form select:focus {
border-color: var(--gold);
}
.reserve-form .full {
width: 100%;
}
.reserve-form .btn {
align-self: flex-start;
margin-top: 4px;
}
.form-ok {
color: var(--gold);
font-weight: 700;
font-size: 0.86rem;
letter-spacing: 0.06em;
}
/* ── Footer ── */
.footer {
background: var(--ink);
text-align: center;
padding: 40px 28px;
border-top: 1px solid var(--rule);
}
.foot-brand {
font-family: var(--font-display);
font-weight: 600;
font-size: 1.5rem;
color: var(--gold);
letter-spacing: 0.04em;
}
.foot-meta {
color: var(--mute);
font-size: 0.82rem;
margin-top: 4px;
}// Default reservation date to tomorrow
const di = document.querySelector('input[name="d"]');
if (di) {
const t = new Date();
t.setDate(t.getDate() + 1);
di.value = t.toISOString().slice(0, 10);
}
// Cycle the "dry-aging now" days every few seconds so the demo feels alive.
const agingEl = document.getElementById("agingDays");
const STARTING = 187;
let n = STARTING;
setInterval(() => {
n = STARTING + Math.floor(Math.random() * 9);
agingEl.textContent = n;
}, 2400);
// Form
const form = document.getElementById("form");
const ok = document.getElementById("ok");
form.addEventListener("submit", (e) => {
e.preventDefault();
ok.hidden = false;
const btn = form.querySelector("button");
const txt = btn.textContent;
btn.textContent = "Held ✓";
btn.disabled = true;
setTimeout(() => {
btn.textContent = txt;
btn.disabled = false;
ok.hidden = true;
}, 2600);
});<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,500&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;600;700&display=swap"
/>
<link rel="stylesheet" href="style.css" />
<title>Vault & Ember — Steakhouse</title>
</head>
<body>
<header class="nav">
<a class="brand" href="#top">
<span class="brand-mark">V&E</span>
<span class="brand-name">Vault & Ember</span>
</a>
<nav class="nav-links">
<a href="#cuts">Cuts</a>
<a href="#cellar">Cellar</a>
<a href="#room">Room</a>
<a href="#reserve">Reserve</a>
</nav>
<a class="nav-cta" href="#reserve">Book a table</a>
</header>
<main id="top">
<!-- Hero -->
<section class="hero">
<div class="smoke"></div>
<div class="hero-inner">
<p class="kicker">
<span class="pip"></span> EST. 2014 · CARNEGIE HILL
<span class="pip"></span>
</p>
<h1 class="hero-title">
<span class="line">Dry-aged.</span>
<span class="line line-em">Wood-fired.</span>
<span class="line">Unhurried.</span>
</h1>
<p class="hero-sub">
A 28-seat chophouse in Carnegie Hill serving prime cuts dry-aged
between 28 and 90 days, finished over white oak.
</p>
<div class="hero-actions">
<a class="btn btn-gold" href="#reserve">Reserve a table</a>
<a class="btn btn-ghost" href="#cuts">See the cuts</a>
</div>
<dl class="hero-stats">
<div>
<dt>Dry-aging</dt>
<dd class="m"><span id="agingDays">187</span> days on the rail</dd>
</div>
<div>
<dt>Hearth temp</dt>
<dd class="m">980°F</dd>
</div>
<div>
<dt>Cellar</dt>
<dd class="m">312 labels</dd>
</div>
</dl>
</div>
<aside class="cut-chart" aria-label="Cut diagram">
<p class="cut-chart-label">Tonight's rail</p>
<ul>
<li><span>Ribeye</span><span class="age">28 d</span></li>
<li><span>NY strip</span><span class="age">45 d</span></li>
<li><span>Porterhouse</span><span class="age">60 d</span></li>
<li><span>Bone-in tomahawk</span><span class="age">75 d</span></li>
<li class="featured"><span>Côte de boeuf</span><span class="age">90 d</span></li>
</ul>
</aside>
</section>
<!-- Cuts -->
<section class="cuts" id="cuts">
<header class="section-head">
<p class="kicker">The cuts</p>
<h2>
From the rail, <span class="ital">unhurried.</span>
</h2>
</header>
<div class="cut-grid">
<article class="cut">
<p class="cut-no">№ 01</p>
<h3>Ribeye 14oz · 28 d</h3>
<p class="cut-desc">
Bone-marrow butter, charred shallot, smoked sea salt.
</p>
<dl class="cut-spec">
<div><dt>Origin</dt><dd>Niman Ranch · CO</dd></div>
<div><dt>Aged</dt><dd>28 days</dd></div>
<div><dt>Pairs with</dt><dd>Mencía '22</dd></div>
</dl>
<p class="cut-price">$72</p>
</article>
<article class="cut cut-feat">
<span class="cut-badge">House</span>
<p class="cut-no">№ 02</p>
<h3>Porterhouse 32oz · 60 d</h3>
<p class="cut-desc">
For two — marrow gravy, lattice potato, watercress.
</p>
<dl class="cut-spec">
<div><dt>Origin</dt><dd>Heritage Foods · NY</dd></div>
<div><dt>Aged</dt><dd>60 days</dd></div>
<div><dt>Pairs with</dt><dd>Cab Franc '20</dd></div>
</dl>
<p class="cut-price">$182</p>
</article>
<article class="cut">
<p class="cut-no">№ 03</p>
<h3>Côte de boeuf · 90 d</h3>
<p class="cut-desc">
90-day cellar age, salt-crust, peppercorn jus. Three pieces.
</p>
<dl class="cut-spec">
<div><dt>Origin</dt><dd>Salers · France</dd></div>
<div><dt>Aged</dt><dd>90 days</dd></div>
<div><dt>Pairs with</dt><dd>Hermitage '18</dd></div>
</dl>
<p class="cut-price">$240</p>
</article>
</div>
</section>
<!-- Cellar / bar -->
<section class="cellar" id="cellar">
<div class="cellar-inner">
<div class="cellar-text">
<p class="kicker">The cellar</p>
<h2>312 labels, one bartender.</h2>
<p>
Our list runs deep on Napa cabernet, Northern Rhône syrah, and
under-the-radar Spanish reds — built over a decade by Sasha at
the bar. Half-bottles on every page, three flights nightly.
</p>
<a class="link" href="#">Read the list →</a>
</div>
<div class="cellar-stack" aria-hidden="true">
<div class="bottle b-1"></div>
<div class="bottle b-2"></div>
<div class="bottle b-3"></div>
<div class="bottle b-4"></div>
<div class="bottle b-5"></div>
</div>
</div>
</section>
<!-- Room -->
<section class="room" id="room">
<header class="section-head">
<p class="kicker">The room</p>
<h2>Twenty-eight seats. One hearth.</h2>
</header>
<div class="room-grid">
<article class="room-card">
<span class="room-icon">🥩</span>
<h3>Dry-age locker</h3>
<p>Glass-walled rail, visible from every seat. Six staggered rotations.</p>
</article>
<article class="room-card">
<span class="room-icon">🔥</span>
<h3>Oak hearth</h3>
<p>White oak finished at 980°F. Coals only by second seating — no flame on the line.</p>
</article>
<article class="room-card">
<span class="room-icon">🥃</span>
<h3>The bar</h3>
<p>Twelve-seat bar with its own four-course menu. First-come, no bookings.</p>
</article>
<article class="room-card">
<span class="room-icon">🎩</span>
<h3>Dress code</h3>
<p>Collared shirts requested. Jeans welcome. No baseball caps after 18:00.</p>
</article>
</div>
</section>
<!-- Reserve -->
<section class="reserve" id="reserve">
<div class="reserve-inner">
<div>
<p class="kicker">Book a table</p>
<h2>
Two seatings, <span class="ital">six nights.</span>
</h2>
<p class="reserve-sub">
17:30 and 21:00 · Tuesday – Sunday · the bar opens at 17:00 and
stays open till close.
</p>
<dl class="hours">
<div><dt>Tue – Thu</dt><dd>17:30 · 21:00</dd></div>
<div><dt>Fri – Sat</dt><dd>17:30 · 21:00</dd></div>
<div><dt>Sunday</dt><dd>17:30 only</dd></div>
<div class="closed"><dt>Monday</dt><dd>Closed</dd></div>
</dl>
</div>
<form class="reserve-form" id="form">
<p class="form-label">Reservation</p>
<div class="form-row">
<label>
<span>Guests</span>
<select name="g">
<option>2</option><option>3</option><option>4</option>
<option>5</option><option>6</option><option>7+</option>
</select>
</label>
<label>
<span>Date</span>
<input type="date" name="d" />
</label>
<label>
<span>Seating</span>
<select name="t">
<option>17:30</option>
<option selected>21:00</option>
</select>
</label>
</div>
<label class="full">
<span>Email</span>
<input type="email" name="e" placeholder="you@example.com" />
</label>
<button class="btn btn-gold" type="submit">Hold table</button>
<p class="form-ok" id="ok" hidden>✓ Held — confirmation on the way.</p>
</form>
</div>
</section>
</main>
<footer class="footer">
<p class="foot-brand">Vault & Ember</p>
<p class="foot-meta">1287 Lexington · Carnegie Hill · NYC</p>
<p class="foot-meta">+1 212 555 0407 · vaultandember.nyc</p>
</footer>
<script src="script.js"></script>
</body>
</html>Steakhouse Landing — Vault & Ember
A premium chophouse landing built in a dark charcoal + leather + gold palette, Cormorant Garamond display + Inter body. Hero with hand-set type, a live “dry-aging now” counter, a vertical cut chart, three signature plates, an oak-fired bar block, and a reservation card layered over a smoke gradient.
The palette overrides the shared :root warm tokens with steakhouse-specific values — first of five themed landings demonstrating visual range under one structural pattern.