Files
noel-design-atelier/index.html
T

501 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#F4EDE3">
<meta
name="description"
content="Holiday installations shaped by the character of your space and the people who gather there. Enter the world of Noel Design Atelier in the Pacific Northwest."
>
<title>Noel Design Atelier — Composing the Season</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=Source+Sans+3:wght@400;500;600&amp;display=swap"
rel="stylesheet"
>
<link rel="stylesheet" href="styles.css?version=reusable-classes">
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15/dist/ScrollTrigger.min.js"></script>
</head>
<body id="top">
<a class="skip-link label-uppercase" href="#main-content">Skip to main content</a>
<header class="border-bottom-subtle">
<div class="content-boundary grid-centered-content">
<a
class="image-link image-link-large-centered"
href="#top"
aria-label="Noel Design Atelier, back to top"
>
<img
class="image-fluid"
src="images/logo.webp"
width="4167"
height="1063"
alt=""
decoding="async"
>
</a>
<nav class="grid-trailing-content" aria-label="Primary navigation">
<ul class="link-row">
<li><a class="underline-reveal-link label-uppercase" href="#philosophy">Philosophy</a></li>
<li><a class="underline-reveal-link label-uppercase" href="#approach">Approach</a></li>
<li><a class="underline-reveal-link label-uppercase" href="#work">Season</a></li>
<li><a class="underline-reveal-link label-uppercase" href="#contact">Contact</a></li>
</ul>
</nav>
</div>
</header>
<main id="main-content">
<section
class="content-boundary grid-twelve-columns grid-overlapping-introduction isolate-blending surface-paper"
aria-labelledby="homepage-hero-title"
>
<p class="eyebrow-label label-uppercase">Holiday installations <span aria-hidden="true">/</span> Pacific Northwest</p>
<h1
class="heading-editorial heading-display text-invert-over-image reveal-on-scroll"
id="homepage-hero-title"
>
<span>Composing</span>
<span>the season.</span>
</h1>
<div class="grid-lower-leading-copy">
<span class="decorative-mark" aria-hidden="true">✦</span>
<p>
We create holiday installations that welcome you into the season. From the first
glimpse of greenery to the glow beyond a doorway, each space offers a reason to
pause and stay a little longer.
</p>
<a class="arrow-link label-uppercase" href="#philosophy">
Step inside <span aria-hidden="true">→</span>
</a>
</div>
<figure class="grid-overlapping-trailing-image" data-parallax="25">
<div
class="image-frame aspect-ratio-four-to-five"
role="img"
aria-label="Hotel entrance framed by garlands, evergreen trees, and glowing lanterns"
>
<img src="images/composing.webp" alt="Hotel entrance framed by garlands, evergreen trees, and glowing lanterns" decoding="async">
</div>
</figure>
</section>
<section class="spaced-bordered-block" id="philosophy" aria-labelledby="philosophy-title">
<div class="content-boundary">
<header>
<p class="eyebrow-label label-uppercase">Our Philosophy</p>
</header>
<div class="grid-twelve-columns grid-three-part-content">
<figure class="grid-leading-image" data-parallax="15">
<div
class="image-frame aspect-ratio-three-to-four"
role="img"
aria-label="Cedar garland and velvet ribbon following a curved staircase"
>
<img src="images/space.webp" alt="Cedar garland and velvet ribbon following a curved staircase" decoding="async">
</div>
</figure>
<h2 class="heading-editorial heading-statement reveal-on-scroll" id="philosophy-title">
The season begins
<span>with the space.</span>
</h2>
<div class="grid-trailing-copy paragraph-stack">
<p class="text-emphasis label-uppercase">
We begin by noticing what makes a place itself.
</p>
<p>
A sweeping staircase invites a different gesture from an intimate room. We study
those proportions and compose installations to suit them, following an
architectural curve or giving a quiet corner a seasonal focal point.
</p>
<p>
As greenery and light find their place, familiar surroundings take on the warmth
of the holidays. We design for that sense of recognition: a room that feels
quietly new yet deeply familiar, like returning to somewhere you love.
</p>
<a class="arrow-link label-uppercase" href="#approach">
A closer look <span aria-hidden="true">→</span>
</a>
</div>
</div>
</div>
</section>
<section
class="spaced-bordered-block clip-overflow isolate-blending surface-paper"
id="approach"
aria-labelledby="approach-title"
>
<div class="content-boundary">
<header>
<p class="eyebrow-label label-uppercase">Our Approach</p>
</header>
<h2
class="heading-editorial heading-oversized heading-offset-down text-invert-over-image reveal-on-scroll"
id="approach-title"
>
By hand.
</h2>
<div class="grid-twelve-columns grid-narrow-copy-wide-image">
<div class="grid-leading-copy paragraph-stack">
<p class="text-emphasis label-uppercase">
We bring the season to life by hand.
</p>
<p>
That sense of belonging guides our hands as well as our designs. We build each
arrangement around the lines of the space, shaping its outline to echo a curve
or frame an opening.
</p>
<p>
As we work, we adjust the balance and spacing of the details, bringing them into
a composition that feels at home in the room.
</p>
<a class="arrow-link label-uppercase" href="#work">
Imagine the season <span aria-hidden="true">→</span>
</a>
</div>
<figure class="grid-wide-inset-image" data-parallax="25">
<div
class="image-frame aspect-ratio-sixteen-to-ten"
role="img"
aria-label="Hands arranging ribbon, cedar, and brass ornaments on a worktable"
>
<img src="images/by-hand.webp" alt="Hands arranging ribbon, cedar, and brass ornaments on a worktable" decoding="async">
</div>
</figure>
</div>
<div class="card-grid card-grid-three-columns" aria-label="How we compose a space">
<article class="card card-spacious">
<span class="card-index" aria-hidden="true">I.</span>
<h3>Texture</h3>
<p>
We select cedar, velvet, brass, and glass for the way their textures meet. The
contrast between soft foliage and a smooth ornament gives an installation depth,
inviting a closer look.
</p>
</article>
<article class="card card-spacious">
<span class="card-index" aria-hidden="true">II.</span>
<h3>Gesture</h3>
<p>
We shape greenery and tie ribbon by hand, working with the natural movement of
each material. A branch’s curve or a ribbon’s fall helps us find an arrangement
that feels relaxed and full of life.
</p>
</article>
<article class="card card-spacious">
<span class="card-index" aria-hidden="true">III.</span>
<h3>Atmosphere</h3>
<p>
We compose the installation as part of the whole room, considering where the eye
is drawn and where it can rest. Light and detail work together to make the space
feel warm and welcoming.
</p>
</article>
</div>
</div>
</section>
<section class="spaced-bordered-block surface-dark surface-dark-bordered" id="work" aria-labelledby="work-title">
<div class="content-boundary">
<header>
<p class="eyebrow-label label-uppercase">Seasonal Possibilities</p>
</header>
<div class="grid-twelve-columns grid-heading-and-copy">
<h2 class="heading-editorial heading-oversized reveal-on-scroll" id="work-title">Gather.</h2>
<div class="grid-trailing-introduction paragraph-stack">
<p class="text-emphasis label-uppercase text-brass">
We create settings that bring people together.
</p>
<p>
Imagine arriving out of the cold to a room lit for the holidays. There is something
to catch your eye, somewhere to draw closer, and a reason to linger. We compose our
installations with these moments in mind, from the first welcome to the
conversations that follow.
</p>
</div>
</div>
<div class="grid-twelve-columns grid-staggered-images" aria-label="Imagined holiday settings">
<figure class="grid-wide-leading-image">
<div
class="image-frame aspect-ratio-sixteen-to-nine"
role="img"
aria-label="A tall evergreen tree lit with warm lights in a grand room"
>
<img src="images/gather-1.webp" alt="A tall evergreen tree lit with warm lights in a grand room" decoding="async">
</div>
<figcaption class="caption-grid">
<span class="caption-label label-uppercase">On arrival</span>
<span class="caption-description">
A tree glowing at the end of a room offers a first glimpse of the celebration
within, inviting a guest to slow their step as they enter.
</span>
</figcaption>
</figure>
<figure class="grid-tall-trailing-image">
<div
class="image-frame aspect-ratio-three-to-four"
role="img"
aria-label="A holiday table set with greenery and candles for a small gathering"
>
<img src="images/gather-2.webp" alt="A holiday table set with greenery and candles for a small gathering" decoding="async">
</div>
<figcaption class="caption-grid">
<span class="caption-label label-uppercase">Around the table</span>
<span class="caption-description">
A table framed by greenery leaves room for familiar faces and a conversation
that carries on long after the last plate is cleared.
</span>
</figcaption>
</figure>
<figure class="grid-small-inset-image">
<div
class="image-frame aspect-ratio-square"
role="img"
aria-label="Close view of velvet ribbon tied beside an antique brass ornament"
>
<img src="images/gather-3.webp" alt="Close view of velvet ribbon tied beside an antique brass ornament" decoding="async">
</div>
<figcaption class="caption-grid">
<span class="caption-label label-uppercase">A closer look</span>
<span class="caption-description">
In a fold of velvet or the patina of brass, there is another small discovery.
Such details reward a second glance as the evening unfolds.
</span>
</figcaption>
</figure>
</div>
</div>
</section>
<section class="spaced-bordered-block surface-red-borderless" id="places" aria-labelledby="client-fit-title">
<div class="content-boundary">
<div class="grid-twelve-columns grid-overlapping-halves">
<div class="grid-leading-layer">
<p class="eyebrow-label label-uppercase text-brass">Who we design for</p>
<h2 class="heading-editorial heading-large heading-large-raised reveal-on-scroll" id="client-fit-title">Your kind of welcome.</h2>
<p class="text-light-introduction">
Whether you are welcoming guests for a night or bringing family home for the
season, your space holds its own rituals. We design our compositions around the
way you welcome people, giving your gatherings a setting that feels like yours.
</p>
<a class="arrow-link label-uppercase text-paper" href="#contact">
Start a conversation <span aria-hidden="true">→</span>
</a>
</div>
<figure class="grid-trailing-layer" data-parallax="15">
<div
class="image-frame aspect-ratio-sixteen-to-ten"
role="img"
aria-label="An open doorway framed by cedar garland and warm lights"
>
<img src="images/welcome.webp" alt="An open doorway framed by cedar garland and warm lights" decoding="async">
</div>
</figure>
</div>
<div class="card-grid card-grid-four-columns" aria-label="Places and people we design for">
<article class="card card-compact">
<h3>Luxury hospitality</h3>
<p>
We compose entrances and shared spaces in hotels and destination properties
around that first moment of arrival. Greenery and light offer a warm welcome,
inviting guests to settle into the season.
</p>
</article>
<article class="card card-compact">
<h3>Automotive and flagship retail</h3>
<p>
In showrooms and flagship stores, we choose materials and arrange seasonal
details to reflect the character of the space. The holiday welcome becomes a
natural extension of your world.
</p>
</article>
<article class="card card-compact">
<h3>Private estates</h3>
<p>
At home, the season gathers around familiar rituals. We design compositions for
the rooms where those traditions unfold, bringing holiday warmth to the places
your family knows by heart.
</p>
</article>
<article class="card card-compact">
<h3>Select events</h3>
<p>
We arrange greenery and light around the places people meet and gather, giving
each occasion its own seasonal atmosphere. From the first greeting, the setting
invites people to feel part of it.
</p>
</article>
</div>
</div>
</section>
<section class="spaced-bordered-block surface-paper" id="contact" aria-labelledby="contact-title">
<div class="content-boundary grid-twelve-columns grid-wide-gap">
<div class="grid-leading-heading">
<p class="eyebrow-label label-uppercase">Let’s begin</p>
<h2 class="heading-editorial heading-large reveal-on-scroll" id="contact-title">Tell us your story.</h2>
<p class="text-dark-introduction">
Perhaps you have a place in mind, a tradition you want to carry forward, or simply
a feeling you would love to create. Tell us a little about it. We would be glad to
explore what the season could become with you.
</p>
</div>
<form class="grid-trailing-form" action="#contact-confirmation" method="get">
<p class="form-disclosure" id="contact-form-disclosure">
This form is a preview. Anything you enter stays in this page and is not sent to
the atelier or saved by this website.
</p>
<div class="field-grid">
<div class="field-group">
<label class="label-uppercase" for="inquiry-name">Your name</label>
<input id="inquiry-name" type="text" autocomplete="name" required>
</div>
<div class="field-group">
<label class="label-uppercase" for="inquiry-email">Email</label>
<input id="inquiry-email" type="email" autocomplete="email" required>
</div>
</div>
<div class="field-group">
<label class="label-uppercase" for="inquiry-organization">Your home, property, or organization</label>
<input id="inquiry-organization" type="text" autocomplete="organization" required>
</div>
<div class="field-group">
<label class="label-uppercase" for="inquiry-project-brief">What do you have in mind?</label>
<textarea id="inquiry-project-brief" rows="5" required></textarea>
</div>
<button class="button-filled label-uppercase" type="submit" aria-describedby="contact-form-disclosure">
Preview your inquiry <span aria-hidden="true">→</span>
</button>
<p class="target-notice" id="contact-confirmation" tabindex="-1">
This is where a confirmation would appear. Your message has not been sent to the
atelier or saved by this website.
</p>
</form>
</div>
</section>
</main>
<footer class="surface-dark surface-dark-padded">
<div class="content-boundary grid-weighted-columns">
<div class="span-full-width-on-tablet">
<a
class="image-link image-link-small"
href="#top"
aria-label="Noel Design Atelier, back to top"
>
<img
class="image-fluid image-inverted"
src="images/logo.webp"
width="4167"
height="1063"
alt=""
loading="lazy"
decoding="async"
>
</a>
<p class="text-muted-small">For the welcome you offer and the memories you make.</p>
</div>
<nav class="link-stack" aria-label="Footer navigation">
<p class="column-label label-uppercase">Explore</p>
<ul>
<li><a href="#work">Season</a></li>
<li><a href="#philosophy">Philosophy</a></li>
<li><a href="#approach">Approach</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<div class="space-above-on-mobile">
<p class="column-label label-uppercase">Pacific Northwest</p>
<p class="text-muted-small">We’d love to hear what you have in mind.</p>
<a class="arrow-link label-uppercase text-paper" href="#contact">
Start a conversation <span aria-hidden="true">→</span>
</a>
</div>
<p class="text-muted-divider">© 2026 Noel Design Atelier</p>
</div>
</footer>
</body>
<script>
document.addEventListener("DOMContentLoaded", (event) => {
gsap.registerPlugin(ScrollTrigger);
gsap.matchMedia().add("(prefers-reduced-motion: no-preference)", () => {
gsap.utils.toArray(".reveal-on-scroll").forEach((header) => {
gsap.from(header, {
scrollTrigger: {
trigger: header,
start: "top 80%",
toggleActions: "play none none none",
},
y: 50,
opacity: 0,
duration: 1,
ease: "power2.out",
});
});
gsap.utils.toArray("figure[data-parallax]").forEach((figure) => {
const motion = Number(figure.dataset.parallax);
if (!Number.isFinite(motion) || motion === 0) return;
const frame = figure.querySelector(".image-frame");
gsap.fromTo(figure, {
y: () => frame.offsetHeight * motion / 200,
}, {
y: () => -frame.offsetHeight * motion / 200,
ease: "none",
scrollTrigger: {
trigger: figure,
start: "clamp(top bottom)",
end: "clamp(bottom top)",
scrub: true,
invalidateOnRefresh: true,
},
});
});
});
});
</script>
</html>