Nex AGI Nex N2.5 Mini – Style and Fashion
via Nex AGI · Generated
- AIMAC Debt 4.28
- Cost $0.002
- Total Violations 11
- HTML Size 53 KB
- Em Dashes 8
Screenshot
View Live Page
Accessibility Issues Found
11 Serious
-
color-contrast serious 11 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<p>We are an editorial studio and style resource rather than a traditional publication. Every trend forecast is paired with wardrobe context, styli...
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Atelier Nova is a modern style studio for fashion trends, wearable collections, beauty rituals, and intentional dressing.">
<meta name="theme-color" content="#171411">
<title>Atelier Nova — Find the silhouette that speaks your name</title>
<style>
:root {
--ink: #171411;
--ink-soft: #29231f;
--muted: #70675f;
--cream: #f7f2ec;
--sand: #ebe1d7;
--clay: #b7805b;
--clay-dark: #8f573e;
--white: #fffdf9;
--line: rgba(23, 20, 17, .14);
--line-light: rgba(255, 253, 249, .18);
--shadow: 0 22px 55px rgba(39, 29, 21, .09);
--radius: 22px;
--max: 1180px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
background: var(--cream);
color: var(--ink);
font-family: "Avenir Next", "Segoe UI", Helvetica, Arial, sans-serif;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button, input, select { font: inherit; }
button { cursor: pointer; }
h1, h2, h3, p { margin-top: 0; }
h1, h2, h3 { line-height: 1.08; letter-spacing: -.045em; }
p { color: var(--muted); }
.container { width: min(calc(100% - 40px), var(--max)); margin-inline: auto; }
.skip-link {
position: absolute;
top: -100px;
left: 20px;
z-index: 100;
padding: 10px 16px;
border-radius: 8px;
background: var(--ink);
color: var(--white);
}
.skip-link:focus { top: 10px; }
.announcement {
background: var(--ink);
color: rgba(255, 253, 249, .86);
font-size: .7rem;
font-weight: 700;
letter-spacing: .16em;
text-align: center;
text-transform: uppercase;
padding: 9px 20px;
}
.site-header {
position: sticky;
top: 0;
z-index: 20;
border-bottom: 1px solid var(--line);
background: rgba(247, 242, 236, .9);
backdrop-filter: blur(18px);
}
.nav-shell {
min-height: 78px;
display: flex;
align-items: center;
gap: 30px;
}
.brand { display: inline-flex; align-items: center; flex: 0 0 auto; }
.brand img { width: 174px; height: auto; }
.primary-nav {
display: flex;
align-items: center;
gap: 25px;
margin-left: auto;
}
.primary-nav a {
position: relative;
padding: 10px 0;
color: #5d554d;
font-size: .9rem;
font-weight: 650;
transition: color .2s ease;
}
.primary-nav a::after {
content: "";
position: absolute;
right: 0;
bottom: 5px;
left: 0;
height: 1px;
background: var(--clay-dark);
transform: scaleX(0);
transform-origin: left;
transition: transform .2s ease;
}
.primary-nav a:hover, .primary-nav a:focus-visible { color: var(--ink); }
.primary-nav a:hover::after, .primary-nav a:focus-visible::after { transform: scaleX(1); }
.nav-actions { display: flex; align-items: center; gap: 12px; }
.button {
display: inline-flex;
justify-content: center;
align-items: center;
gap: 10px;
min-height: 48px;
padding: 12px 20px;
border: 1px solid transparent;
border-radius: 999px;
font-size: .9rem;
font-weight: 750;
transition: transform .2s ease, background .2s ease, color .2s ease, border-color .2s ease;
}
.button:hover { transform: translateY(-2px); }
.button-primary { background: var(--ink); color: var(--white); }
.button-primary:hover { background: var(--clay-dark); }
.button-light { border-color: var(--line-light); background: rgba(255,255,255,.08); color: var(--white); }
.button-light:hover { border-color: rgba(255,255,255,.5); background: rgba(255,255,255,.16); }
.button-outline { border-color: var(--ink); color: var(--ink); background: transparent; }
.button-outline:hover { background: var(--ink); color: var(--white); }
.button-small { min-height: 40px; padding: 9px 15px; font-size: .82rem; }
.menu-toggle {
display: none;
width: 42px;
height: 42px;
border: 1px solid var(--line);
border-radius: 50%;
background: transparent;
color: var(--ink);
}
.menu-toggle span,
.menu-toggle span::before,
.menu-toggle span::after {
display: block;
width: 17px;
height: 1px;
margin: 4px auto;
background: currentColor;
content: "";
transition: transform .2s ease;
}
.menu-toggle.active span { transform: rotate(45deg); }
.menu-toggle.active span::before { transform: translateY(5px) rotate(-90deg); }
.menu-toggle.active span::after { transform: translateY(-5px) rotate(-90deg); }
.hero {
position: relative;
overflow: hidden;
padding: 88px 0 92px;
}
.hero::before {
content: "";
position: absolute;
top: -220px;
right: -130px;
width: 560px;
height: 560px;
border: 1px solid rgba(183, 128, 91, .22);
border-radius: 50%;
box-shadow: 0 0 0 55px rgba(183, 128, 91, .04), 0 0 0 110px rgba(183, 128, 91, .03);
}
.hero-grid {
position: relative;
display: grid;
grid-template-columns: 1.02fr .98fr;
gap: 72px;
align-items: center;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 9px;
margin-bottom: 20px;
color: var(--clay-dark);
font-size: .72rem;
font-weight: 800;
letter-spacing: .16em;
text-transform: uppercase;
}
.eyebrow::before { content: ""; width: 26px; height: 1px; background: currentColor; }
.hero h1 {
max-width: 690px;
margin: 0 0 24px;
font-size: clamp(3.25rem, 6.5vw, 6.4rem);
line-height: .96;
letter-spacing: -.07em;
}
.hero-copy { max-width: 590px; margin-bottom: 30px; font-size: 1.06rem; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 11px; }
.hero-art { position: relative; min-height: 620px; }
.hero-image-main {
position: absolute;
top: 0;
right: 0;
width: 78%;
height: 560px;
overflow: hidden;
border-radius: 48% 48% 22px 22px;
box-shadow: var(--shadow);
}
.hero-image-main img { width: 100%; height: 100%; object-fit: cover; }
.hero-image-small {
position: absolute;
right: 0;
bottom: 0;
width: 220px;
height: 275px;
overflow: hidden;
border: 8px solid var(--cream);
border-radius: 16px;
box-shadow: var(--shadow);
}
.hero-image-small img { width: 100%; height: 100%; object-fit: cover; }
.hero-note {
position: absolute;
top: 100px;
left: 0;
width: 190px;
padding: 18px 19px;
border: 1px solid var(--line);
border-radius: 16px;
background: rgba(255, 253, 249, .82);
box-shadow: 0 12px 28px rgba(39, 29, 21, .07);
backdrop-filter: blur(10px);
}
.hero-note strong { display: block; margin-bottom: 5px; font-size: .78rem; letter-spacing: .08em; text-transform: uppercase; }
.hero-note span { color: var(--muted); font-size: .86rem; line-height: 1.45; }
.hero-proof {
display: flex;
flex-wrap: wrap;
gap: 12px 26px;
margin-top: 30px;
color: var(--muted);
font-size: .83rem;
}
.hero-proof span::before { content: "✓"; margin-right: 7px; color: var(--clay-dark); font-weight: 900; }
.section { padding: 104px 0; }
.section-tint { background: var(--sand); }
.section-dark { background: var(--ink); color: var(--white); }
.section-heading {
display: grid;
grid-template-columns: 1fr minmax(280px, .72fr);
gap: 36px;
align-items: end;
margin-bottom: 47px;
}
.section-heading h2 { max-width: 680px; margin-bottom: 0; font-size: clamp(2.3rem, 4vw, 4.4rem); }
.section-heading p { margin-bottom: 0; font-size: 1rem; }
.section-dark .eyebrow { color: #d6a47c; }
.section-dark p { color: rgba(255, 253, 249, .65); }
.card-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 21px; }
.editorial-card {
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius);
background: var(--white);
box-shadow: 0 10px 30px rgba(39, 29, 21, .04);
transition: transform .25s ease, box-shadow .25s ease;
}
.editorial-card:hover { transform: translateY(-5px); box-shadow: var(--shadow); }
.card-media { aspect-ratio: 1.48; overflow: hidden; background: var(--sand); }
.card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.editorial-card:hover .card-media img { transform: scale(1.04); }
.card-body { padding: 24px 24px 26px; }
.card-meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; color: var(--clay-dark); font-size: .7rem; font-weight: 800; letter-spacing: .11em; text-transform: uppercase; }
.card-meta .arrow { color: var(--muted); font-size: 1rem; letter-spacing: 0; }
.card-body h3 { margin-bottom: 11px; font-size: 1.55rem; }
.card-body p { margin-bottom: 0; font-size: .93rem; }
.split { display: grid; grid-template-columns: .9fr 1.1fr; gap: 75px; align-items: center; }
.split-copy h2 { margin-bottom: 22px; font-size: clamp(2.4rem, 4vw, 4.4rem); }
.split-copy p + p { margin-top: 17px; }
.feature-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
.feature {
min-height: 235px;
padding: 25px;
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(255, 253, 249, .66);
}
.feature-icon {
display: grid;
place-items: center;
width: 42px;
height: 42px;
margin-bottom: 36px;
border-radius: 50%;
background: var(--sand);
color: var(--clay-dark);
}
.feature-icon svg { width: 21px; height: 21px; }
.feature h3 { margin-bottom: 9px; font-size: 1.15rem; letter-spacing: -.025em; }
.feature p { margin-bottom: 0; font-size: .87rem; }
.looks-section { position: relative; overflow: hidden; }
.looks-section::after {
content: "NOVA";
position: absolute;
right: -20px;
bottom: -60px;
color: rgba(255,255,255,.035);
font-size: 17rem;
font-weight: 900;
letter-spacing: -.1em;
line-height: 1;
pointer-events: none;
}
.filter-bar { display: flex; flex-wrap: wrap; gap: 9px; margin: -12px 0 28px; }
.filter-button {
padding: 9px 15px;
border: 1px solid rgba(255,255,255,.24);
border-radius: 999px;
background: transparent;
color: rgba(255,255,255,.72);
font-size: .8rem;
font-weight: 700;
transition: .2s ease;
}
.filter-button:hover, .filter-button[aria-pressed="true"] { border-color: var(--white); background: var(--white); color: var(--ink); }
.looks-grid { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(4, 1fr); gap: 17px; }
.look-card { overflow: hidden; border-radius: 18px; background: rgba(255,255,255,.09); border: 1px solid rgba(255,255,255,.15); }
.look-image { aspect-ratio: .78; overflow: hidden; }
.look-image img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.look-card:hover .look-image img { transform: scale(1.05); }
.look-content { padding: 19px; }
.look-tag { display: inline-block; margin-bottom: 10px; color: #d7aa86; font-size: .67rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.look-content h3 { margin-bottom: 8px; font-size: 1.2rem; }
.look-content p { margin-bottom: 0; color: rgba(255,253,249,.62); font-size: .83rem; }
.is-hidden { display: none !important; }
.beauty-grid { display: grid; grid-template-columns: 1fr 1.05fr; gap: 72px; align-items: center; }
.beauty-media { position: relative; display: grid; grid-template-columns: 1.15fr .85fr; gap: 15px; align-items: end; }
.beauty-main { height: 535px; overflow: hidden; border-radius: 22px 22px 110px 22px; box-shadow: var(--shadow); }
.beauty-main img { width: 100%; height: 100%; object-fit: cover; }
.beauty-side { height: 350px; overflow: hidden; border: 8px solid var(--sand); border-radius: 20px; }
.beauty-side img { width: 100%; height: 100%; object-fit: cover; }
.beauty-copy h2 { margin-bottom: 22px; font-size: clamp(2.5rem, 4vw, 4.5rem); }
.beauty-copy > p { margin-bottom: 26px; }
.beauty-list { display: grid; gap: 18px; margin: 0 0 29px; padding: 0; list-style: none; }
.beauty-list li { display: grid; grid-template-columns: 30px 1fr; gap: 12px; }
.check { display: grid; place-items: center; width: 28px; height: 28px; margin-top: 2px; border-radius: 50%; background: var(--sand); color: var(--clay-dark); font-weight: 900; }
.beauty-list strong { display: block; margin-bottom: 2px; font-size: .95rem; }
.beauty-list span { display: block; color: var(--muted); font-size: .87rem; }
.collection-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.collection-card { position: relative; overflow: hidden; min-height: 410px; border-radius: 24px; color: var(--white); box-shadow: var(--shadow); }
.collection-card img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.collection-card:hover img { transform: scale(1.05); }
.collection-card::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10,8,7,0) 20%, rgba(10,8,7,.88) 100%); }
.collection-content { position: absolute; z-index: 1; right: 0; bottom: 0; left: 0; padding: 28px; }
.collection-content small { color: #d7aa86; font-size: .7rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }
.collection-content h3 { margin: 8px 0 9px; font-size: 2rem; }
.collection-content p { max-width: 310px; margin-bottom: 18px; color: rgba(255,253,249,.72); font-size: .88rem; }
.compass-panel {
display: grid;
grid-template-columns: .9fr 1.1fr;
gap: 60px;
padding: 58px;
border: 1px solid var(--line);
border-radius: 30px;
background: var(--white);
box-shadow: var(--shadow);
}
.compass-intro h2 { margin-bottom: 20px; font-size: clamp(2.4rem, 4vw, 4.4rem); }
.compass-intro p { margin-bottom: 23px; }
.compass-points { display: grid; gap: 13px; }
.compass-points span { display: flex; gap: 10px; color: var(--muted); font-size: .88rem; }
.compass-points span::before { content: "—"; color: var(--clay-dark); font-weight: 900; }
.style-form { display: grid; gap: 18px; }
.field-group { display: grid; gap: 9px; }
.field-label { color: var(--ink); font-size: .78rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; }
.option-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 9px; }
.option input { position: absolute; opacity: 0; pointer-events: none; }
.option span {
display: flex;
align-items: center;
min-height: 42px;
padding: 10px 13px;
border: 1px solid var(--line);
border-radius: 11px;
color: var(--muted);
font-size: .84rem;
font-weight: 700;
transition: .2s ease;
}
.option input:checked + span { border-color: var(--clay-dark); background: #f4e6d9; color: var(--ink); }
.option input:focus-visible + span { outline: 3px solid rgba(183,128,91,.35); outline-offset: 2px; }
.result {
min-height: 160px;
padding: 24px;
border: 1px solid rgba(183,128,91,.35);
border-radius: 17px;
background: #f4e6d9;
}
.result[hidden] { display: none; }
.result-label { margin-bottom: 7px; color: var(--clay-dark); font-size: .69rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }
.result h3 { margin-bottom: 9px; font-size: 1.5rem; }
.result p { margin-bottom: 0; font-size: .88rem; }
.about-grid { display: grid; grid-template-columns: .85fr 1.15fr; gap: 75px; align-items: center; }
.about-image { overflow: hidden; border-radius: 24px; box-shadow: var(--shadow); }
.about-image img { width: 100%; height: 540px; object-fit: cover; }
.about-copy h2 { margin-bottom: 22px; font-size: clamp(2.5rem, 4vw, 4.5rem); }
.about-copy p + p { margin-top: 17px; }
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 29px 0; }
.stat { padding: 18px 13px; border-top: 1px solid var(--line); }
.stat strong { display: block; margin-bottom: 3px; font-size: 1.6rem; letter-spacing: -.05em; }
.stat span { color: var(--muted); font-size: .78rem; }
.testimonial-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.quote-card { padding: 27px; border: 1px solid var(--line); border-radius: 19px; background: var(--white); }
.quote-mark { margin-bottom: 24px; color: var(--clay); font-family: Georgia, serif; font-size: 3rem; line-height: .7; }
.quote-card blockquote { margin: 0 0 25px; color: var(--ink-soft); font-family: Georgia, serif; font-size: 1.14rem; line-height: 1.55; }
.quote-person { display: flex; align-items: center; gap: 11px; }
.avatar { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; }
.quote-person strong { display: block; font-size: .84rem; }
.quote-person span { color: var(--muted); font-size: .75rem; }
.faq-wrap { max-width: 820px; margin: 0 auto; }
details { border-bottom: 1px solid var(--line); }
summary { display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 22px 0; cursor: pointer; font-weight: 800; list-style: none; }
summary::-webkit-details-marker { display: none; }
summary::after { content: "+"; color: var(--clay-dark); font-size: 1.4rem; font-weight: 400; transition: transform .2s ease; }
details[open] summary::after { transform: rotate(45deg); }
details p { max-width: 720px; margin: -5px 0 24px; font-size: .93rem; }
.newsletter { padding: 0 0 105px; }
.newsletter-box {
display: grid;
grid-template-columns: 1fr .9fr;
gap: 50px;
align-items: center;
padding: 52px;
border-radius: 28px;
background: var(--clay-dark);
color: var(--white);
}
.newsletter-box h2 { margin-bottom: 12px; font-size: clamp(2.2rem, 4vw, 3.8rem); }
.newsletter-box p { margin-bottom: 0; color: rgba(255,253,249,.72); }
.newsletter-form { display: flex; gap: 9px; padding-top: 8px; }
.newsletter-form input { min-width: 0; flex: 1; height: 50px; padding: 0 17px; border: 1px solid rgba(255,255,255,.35); border-radius: 999px; background: rgba(255,255,255,.12); color: var(--white); outline: none; }
.newsletter-form input::placeholder { color: rgba(255,253,249,.65); }
.newsletter-form input:focus { border-color: var(--white); }
.newsletter-message { min-height: 24px; margin-top: 10px; color: #fff4e8; font-size: .84rem; }
.newsletter-message[hidden] { display: none; }
.footer { padding-top: 68px; background: #11100f; color: var(--white); }
.footer-grid { display: grid; grid-template-columns: 1.4fr .7fr .7fr 1fr; gap: 45px; padding-bottom: 55px; }
.footer .brand img { width: 164px; filter: invert(1) grayscale(1) brightness(3); }
.footer-about { max-width: 310px; margin: 20px 0 0; color: rgba(255,253,249,.6); font-size: .87rem; }
.footer h3 { margin: 4px 0 18px; color: rgba(255,253,249,.46); font-size: .7rem; letter-spacing: .13em; text-transform: uppercase; }
.footer-links { display: grid; gap: 10px; }
.footer-links a { color: rgba(255,253,249,.78); font-size: .87rem; transition: color .2s ease; }
.footer-links a:hover { color: #fff; }
.contact-line { display: flex; gap: 9px; margin-bottom: 10px; color: rgba(255,253,249,.78); font-size: .84rem; }
.contact-line svg { width: 15px; height: 15px; flex: 0 0 auto; margin-top: 4px; color: #d7aa86; }
.social-links { display: flex; flex-wrap: wrap; gap: 8px; }
.social-links a { display: inline-flex; align-items: center; min-height: 34px; padding: 0 12px; border: 1px solid rgba(255,253,249,.2); border-radius: 999px; color: rgba(255,253,249,.75); font-size: .78rem; font-weight: 700; transition: .2s ease; }
.social-links a:hover { border-color: rgba(255,253,249,.6); background: rgba(255,253,249,.08); }
.footer-bottom { display: flex; justify-content: space-between; gap: 20px; padding: 21px 0; border-top: 1px solid rgba(255,253,249,.13); color: rgba(255,253,249,.48); font-size: .76rem; }
.footer-bottom a:hover { color: var(--white); }
.reveal { opacity: 0; transform: translateY(18px); transition: opacity .65s ease, transform .65s ease; }
.reveal.is-visible { opacity: 1; transform: none; }
@media (max-width: 1040px) {
.primary-nav { gap: 17px; }
.primary-nav a { font-size: .82rem; }
.hero-grid { gap: 35px; }
.hero-art { min-height: 560px; }
.hero-image-main { height: 500px; }
.looks-grid { grid-template-columns: repeat(2, 1fr); }
.footer-grid { grid-template-columns: 1.2fr 1fr 1fr; }
.footer-grid > div:first-child { grid-column: 1 / -1; }
}
@media (max-width: 820px) {
.nav-shell { min-height: 69px; }
.brand img { width: 154px; }
.primary-nav {
position: absolute;
top: 100%;
right: 20px;
left: 20px;
display: grid;
gap: 0;
padding: 10px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--white);
box-shadow: var(--shadow);
opacity: 0;
visibility: hidden;
transform: translateY(-8px);
transition: .2s ease;
}
.primary-nav.open { opacity: 1; visibility: visible; transform: translateY(0); }
.primary-nav a { padding: 13px 12px; border-bottom: 1px solid var(--line); }
.primary-nav a:last-child { border-bottom: 0; }
.primary-nav a::after { display: none; }
.nav-actions { margin-left: auto; }
.menu-toggle { display: block; }
.hero { padding: 64px 0 72px; }
.hero-grid, .split, .beauty-grid, .about-grid, .compass-panel, .newsletter-box { grid-template-columns: 1fr; }
.hero-copy { max-width: 650px; }
.hero-art { min-height: 520px; margin-top: 10px; }
.hero-image-main { width: 82%; height: 470px; }
.hero-image-small { width: 180px; height: 225px; }
.hero-note { top: 78px; width: 170px; }
.section { padding: 78px 0; }
.section-heading { grid-template-columns: 1fr; gap: 18px; }
.card-grid, .collection-grid, .testimonial-grid { grid-template-columns: 1fr 1fr; }
.feature-grid { grid-template-columns: 1fr 1fr; }
.beauty-media { max-width: 590px; }
.compass-panel { gap: 35px; padding: 35px; }
.about-image { max-width: 620px; }
.footer-grid { grid-template-columns: 1fr 1fr; }
.footer-grid > div:first-child { grid-column: 1 / -1; }
}
@media (max-width: 560px) {
.container { width: min(calc(100% - 28px), var(--max)); }
.nav-actions .button { display: none; }
.hero h1 { font-size: 3.35rem; }
.hero-art { min-height: 420px; }
.hero-image-main { width: 90%; height: 390px; border-radius: 42% 42% 18px 18px; }
.hero-image-small { width: 135px; height: 175px; border-width: 5px; }
.hero-note { top: 60px; width: 145px; padding: 14px; }
.hero-note span { font-size: .77rem; }
.hero-actions .button { width: 100%; }
.card-grid, .collection-grid, .testimonial-grid, .looks-grid, .feature-grid, .option-grid, .stats, .footer-grid { grid-template-columns: 1fr; }
.section-heading { margin-bottom: 34px; }
.beauty-media { grid-template-columns: 1fr; }
.beauty-main, .beauty-side { height: 390px; }
.beauty-side { width: 75%; margin-left: auto; }
.compass-panel { padding: 25px 20px; border-radius: 22px; }
.newsletter-box { padding: 32px 22px; gap: 25px; }
.newsletter-form { flex-direction: column; }
.footer-grid { gap: 32px; }
.footer-bottom { flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; }
}
</style>
</head>
<body>
<a class="skip-link" href="#main-content">Skip to content</a>
<div class="announcement">The Autumn / Winter edit is live · Free style notes every Friday</div>
<header class="site-header">
<div class="container nav-shell">
<a class="brand" href="#home" aria-label="Atelier Nova home">
<img src="https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA" alt="Atelier Nova logo">
</a>
<nav class="primary-nav" id="primary-nav" aria-label="Primary navigation">
<a href="#home">Home</a>
<a href="#looks">Looks</a>
<a href="#collections">Collections</a>
<a href="#beauty">Beauty</a>
<a href="#journal">Journal</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</nav>
<div class="nav-actions">
<a class="button button-primary button-small" href="#newsletter">Get the edit</a>
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="primary-nav" aria-label="Open navigation"><span></span></button>
</div>
</div>
</header>
<main id="main-content">
<section class="hero" id="home">
<div class="container hero-grid">
<div class="hero-copy">
<div class="eyebrow">A modern style studio</div>
<h1>Fashion that feels like you—before it feels like a trend.</h1>
<p class="hero-copy">Atelier Nova translates runway language, beauty ritual, and everyday dressing into a wardrobe with a point of view. Explore considered trends, build repeatable looks, and discover the details that make an outfit feel unmistakably yours.</p>
<div class="hero-actions">
<a class="button button-primary" href="#looks">Explore the looks <span aria-hidden="true">↗</span></a>
<a class="button button-outline" href="#journal">Read the edit</a>
</div>
<div class="hero-proof" aria-label="Atelier Nova highlights">
<span>12k+ style profiles shaped</span>
<span>40+ designer notes</span>
<span>0 trend noise</span>
</div>
</div>
<div class="hero-art" aria-label="Editorial fashion imagery">
<div class="hero-image-main"><img src="https://picsum.photos/850/1000?grayscale" alt="Editorial fashion portrait in soft natural light" loading="lazy"></div>
<div class="hero-image-small"><img src="https://picsum.photos/420/500?grayscale" alt="Close-up of tactile fashion fabric" loading="lazy"></div>
<div class="hero-note"><strong>Current note</strong><span>Structure stays, but the shoulder softens.</span></div>
</div>
</div>
</section>
<section class="section section-tint" id="journal">
<div class="container">
<div class="section-heading reveal">
<div>
<div class="eyebrow">The journal / Latest dispatches</div>
<h2>Trends, translated into real life.</h2>
</div>
<p>Our editors move from the catwalk to the closet, identifying the silhouettes, textures, and finishing details that are worth learning now.</p>
</div>
<div class="card-grid">
<article class="editorial-card reveal">
<div class="card-media"><img src="https://picsum.photos/700/500?grayscale" alt="Minimal tailored clothing arranged for an editorial study" loading="lazy"></div>
<div class="card-body">
<div class="card-meta"><span>Trend report</span><span class="arrow">↗</span></div>
<h3>The new quiet statement</h3>
<p>Soft tailoring is moving away from armor-like structure and toward fluid lines, relaxed shoulders, and precise finishing. Learn how to wear volume without losing proportion.</p>
</div>
</article>
<article class="editorial-card reveal">
<div class="card-media"><img src="https://picsum.photos/700/500?grayscale" alt="Neutral wardrobe pieces folded and styled together" loading="lazy"></div>
<div class="card-body">
<div class="card-meta"><span>Style guide</span><span class="arrow">↗</span></div>
<h3>The capsule that earns its keep</h3>
<p>A strong capsule is not a list of rules. It is a system of interchangeable fabrics, colors, and silhouettes that works across workdays, weekends, and planned events.</p>
</div>
</article>
<article class="editorial-card reveal">
<div class="card-media"><img src="https://picsum.photos/700/500?grayscale" alt="Beauty products and textured skin in a calm studio setting" loading="lazy"></div>
<div class="card-body">
<div class="card-meta"><span>Beauty ritual</span><span class="arrow">↗</span></div>
<h3>Skin-first beauty, finished properly</h3>
<p>The season’s most wearable beauty looks begin with prep, not pigment. We share a five-minute routine that keeps complexion luminous under layered textures.</p>
</div>
</article>
</div>
</div>
</section>
<section class="section" id="style-system">
<div class="container split">
<div class="split-copy reveal">
<div class="eyebrow">The Atelier method</div>
<h2>A clearer way to find your signature.</h2>
<p>Every person has a visual language before they have a wardrobe plan. We help you name it: the shapes you reach for, the colors that feel like home, and the moments where a single accessory changes everything.</p>
<p>Our editorial system turns inspiration into decisions. Instead of chasing a new look every week, you build a repeatable toolkit—one that evolves with the season but still sounds like you.</p>
<a class="button button-outline" href="#compass">Find my style signal <span aria-hidden="true">↗</span></a>
</div>
<div class="feature-grid reveal">
<article class="feature">
<div class="feature-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 18 9 5h6l5 13M8 18h8M7 12h10"/></svg></div>
<h3>Silhouette map</h3>
<p>See where your favorite outfits sit across fitted, relaxed, and architectural forms. Use the map to balance new pieces with what already works.</p>
</article>
<article class="feature">
<div class="feature-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="7" cy="12" r="3"/><circle cx="13" cy="8" r="3"/><circle cx="18" cy="14" r="3"/></svg></div>
<h3>Color moodboard</h3>
<p>Build a palette around your skin tone, lifestyle, and the mood you want your clothes to create—not around the latest color of the month.</p>
</article>
<article class="feature">
<div class="feature-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 5h16v14H4zM4 9h16M8 5v14"/></svg></div>
<h3>Fabric notes</h3>
<p>Learn how wool, linen, silk, cotton, and technical knits move, drape, wrinkle, and age. Fabric knowledge makes every purchase more intentional.</p>
</article>
<article class="feature">
<div class="feature-icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M5 17 12 5l7 12M8 17h8M12 14v3"/></svg></div>
<h3>Accessorizing, simplified</h3>
<p>A bag, a shoe, a belt, or one sculptural earring can redirect an entire outfit. Discover the details that add personality without clutter.</p>
</article>
</div>
</div>
</section>
<section class="section section-dark looks-section" id="looks">
<div class="container">
<div class="section-heading reveal">
<div>
<div class="eyebrow">The lookbook</div>
<h2>Looks worth saving.</h2>
</div>
<p>Wearability first. Each look is styled around a clear purpose, with room for your own fit, fabric choices, and personal accessories.</p>
</div>
<div class="filter-bar" aria-label="Filter looks">
<button class="filter-button" type="button" data-filter="all" aria-pressed="true">All looks</button>
<button class="filter-button" type="button" data-filter="work" aria-pressed="false">Work</button>
<button class="filter-button" type="button" data-filter="weekend" aria-pressed="false">Weekend</button>
<button class="filter-button" type="button" data-filter="evening" aria-pressed="false">Evening</button>
</div>
<div class="looks-grid">
<article class="look-card reveal" data-category="work">
<div class="look-image"><img src="https://picsum.photos/520/650?grayscale" alt="Polished workwear look with tailored layers" loading="lazy"></div>
<div class="look-content"><span class="look-tag">Work / Soft tailoring</span><h3>Work, softened</h3><p>A relaxed blazer, fine knit, and clean leather shoe create authority without stiffness.</p></div>
</article>
<article class="look-card reveal" data-category="weekend">
<div class="look-image"><img src="https://picsum.photos/520/650?grayscale" alt="Layered casual outfit for a relaxed weekend" loading="lazy"></div>
<div class="look-content"><span class="look-tag">Weekend / Layers</span><h3>Saturday in layers</h3><p>Unexpected proportions become easier when the base layer stays simple and tactile.</p></div>
</article>
<article class="look-card reveal" data-category="evening">
<div class="look-image"><img src="https://picsum.photos/520/650?grayscale" alt="Evening look with a sculptural accessory" loading="lazy"></div>
<div class="look-content"><span class="look-tag">Evening / One gesture</span><h3>Evening, in one gesture</h3><p>Keep the line minimal, then let one metallic detail or bold sleeve carry the room.</p></div>
</article>
<article class="look-card reveal" data-category="weekend">
<div class="look-image"><img src="https://picsum.photos/520/650?grayscale" alt="Intentional travel outfit with practical accessories" loading="lazy"></div>
<div class="look-content"><span class="look-tag">Travel / Intentional</span><h3>Travel, made intentional</h3><p>Wrinkle-resistant textures and modular accessories keep a long day polished and comfortable.</p></div>
</article>
</div>
</div>
</section>
<section class="section section-tint" id="beauty">
<div class="container beauty-grid">
<div class="beauty-media reveal">
<div class="beauty-main"><img src="https://picsum.photos/760/900?grayscale" alt="Beauty editorial with natural textures and soft light" loading="lazy"></div>
<div class="beauty-side"><img src="https://picsum.photos/450/520?grayscale" alt="Beauty tools and skincare textures" loading="lazy"></div>
</div>
<div class="beauty-copy reveal">
<div class="eyebrow">Beauty resources</div>
<h2>Beauty that supports the outfit.</h2>
<p>The best beauty routine is not another checklist. It is a set of small, repeatable choices that help your complexion, hair, and fragrance feel considered from morning to night.</p>
<ul class="beauty-list">
<li><span class="check">✓</span><div><strong>Prep before pigment</strong><span>Hydration, primer, and a little patience make color look more intentional and last longer.</span></div></li>
<li><span class="check">✓</span><div><strong>Finish at the edges</strong><span>Define the hairline, brows, and lips with restraint so the overall look feels finished rather than busy.</span></div></li>
<li><span class="check">✓</span><div><strong>Let one detail lead</strong><span>Choose a glow, a color, or a scent to echo through the outfit instead of competing with every piece.</span></div></li>
</ul>
<a class="button button-primary" href="#newsletter">Follow the beauty notes <span aria-hidden="true">↗</span></a>
</div>
</div>
</section>
<section class="section" id="collections">
<div class="container">
<div class="section-heading reveal">
<div>
<div class="eyebrow">Collections / The edit</div>
<h2>The edit, organized for your life.</h2>
</div>
<p>Explore three ready-to-build collections, each designed around a rhythm of dressing rather than a single trend.</p>
</div>
<div class="collection-grid">
<article class="collection-card reveal">
<img src="https://picsum.photos/650/800?grayscale" alt="Neutral pieces for an everyday uniform" loading="lazy">
<div class="collection-content"><small>01 / The everyday uniform</small><h3>Base layer, elevated</h3><p>Refined basics with enough texture and fit to carry the whole week.</p><a class="button button-light button-small" href="#looks">Get inspired</a></div>
</article>
<article class="collection-card reveal">
<img src="https://picsum.photos/650/800?grayscale" alt="Travel wardrobe pieces layered for movement" loading="lazy">
<div class="collection-content"><small>02 / The travel edit</small><h3>Light, but deliberate</h3><p>Packable layers and practical accessories that still photograph beautifully.</p><a class="button button-light button-small" href="#looks">Get inspired</a></div>
</article>
<article class="collection-card reveal">
<img src="https://picsum.photos/650/800?grayscale" alt="Evening collection with dramatic lines and shine" loading="lazy">
<div class="collection-content"><small>03 / The evening archive</small><h3>Details that stay</h3><p>Sculptural silhouettes, subtle shine, and accessories made to be remembered.</p><a class="button button-light button-small" href="#looks">Get inspired</a></div>
</article>
</div>
</div>
</section>
<section class="section section-tint" id="compass">
<div class="container">
<div class="compass-panel reveal">
<div class="compass-intro">
<div class="eyebrow">Interactive style compass</div>
<h2>What is your style signal?</h2>
<p>Answer three quick questions and we will surface a direction you can use immediately. This is a starting point, not a rulebook.</p>
<div class="compass-points"><span>Two minutes, no sign-up</span><span>A practical style direction</span><span>Follow designer notes</span></div>
</div>
<form class="style-form" id="styleForm">
<div class="field-group">
<div class="field-label" id="mood-label">Choose your mood</div>
<div class="option-grid" aria-labelledby="mood-label">
<label class="option"><input type="radio" name="mood" value="polished" checked><span>Polished</span></label>
<label class="option"><input type="radio" name="mood" value="effortless"><span>Effortless</span></label>
<label class="option"><input type="radio" name="mood" value="romantic"><span>Romantic</span></label>
<label class="option"><input type="radio" name="mood" value="statement"><span>Statement</span></label>
</div>
</div>
<div class="field-group">
<label class="field-label" for="season">Where are you dressing for?</label>
<select id="season" name="season" required>
<option value="work">Work and everyday</option>
<option value="weekend">Weekend and travel</option>
<option value="evening">Events and evenings</option>
<option value="mix">A mix of all three</option>
</select>
</div>
<div class="field-group">
<label class="field-label" for="goal">What do you want to feel?</label>
<select id="goal" name="goal" required>
<option value="confidence">Confident and put together</option>
<option value="comfort">Comfortable but considered</option>
<option value="creative">Creative and memorable</option>
<option value="minimal">Quiet and intentional</option>
</select>
</div>
<button class="button button-primary" type="submit">Reveal my style signal <span aria-hidden="true">↗</span></button>
<div class="result" id="styleResult" hidden aria-live="polite">
<div class="result-label">Your style signal</div>
<h3 id="resultTitle">The intentional minimalist</h3>
<p id="resultCopy">Your direction favors clean lines, tactile fabrics, and one strong detail. Start with a refined base layer, then add a piece that makes the outfit feel personal.</p>
</div>
</form>
</div>
</div>
</section>
<section class="section" id="about">
<div class="container about-grid">
<div class="about-image reveal"><img src="https://picsum.photos/800/900?grayscale" alt="Atelier Nova editorial team reviewing a style collection" loading="lazy"></div>
<div class="about-copy reveal">
<div class="eyebrow">About Atelier Nova</div>
<h2>A style studio built around the person, not the season.</h2>
<p>Atelier Nova began with a simple observation: people do not need more fashion content; they need better context for the clothes they already love. Our editors, stylists, and beauty writers turn trend forecasts into usable notes and translate designer language into a wardrobe you can actually wear.</p>
<p>We believe style is a practice. It is built through fit, repetition, experimentation, and the confidence to make a look your own.</p>
<div class="stats">
<div class="stat"><strong>2018</strong><span>Founded in London</span></div>
<div class="stat"><strong>12k+</strong><span>Style profiles shaped</span></div>
<div class="stat"><strong>5×</strong><span>Editorial refreshes yearly</span></div>
</div>
<a class="button button-outline" href="#newsletter">Meet the editors</a>
</div>
</div>
<div class="container" style="margin-top: 76px;">
<div class="testimonial-grid">
<article class="quote-card reveal"><div class="quote-mark">“</div><blockquote>Atelier Nova helped me stop buying pieces I only liked in a photo. The silhouette notes made my closet feel like a system again.</blockquote><div class="quote-person"><img class="avatar" src="https://i.pravatar.cc/80?img=32" alt="Portrait of Maya R."><div><strong>Maya R.</strong><span>Product designer, Berlin</span></div></div></article>
<article class="quote-card reveal"><div class="quote-mark">“</div><blockquote>The beauty notes are refreshingly practical. I finally understand how to make a simple outfit feel considered without doing a full routine.</blockquote><div class="quote-person"><img class="avatar" src="https://i.pravatar.cc/80?img=47" alt="Portrait of Elena S."><div><strong>Elena S.</strong><span>Fashion buyer, Milan</span></div></div></article>
<article class="quote-card reveal"><div class="quote-mark">“</div><blockquote>I use the look filters before every trip. The travel edit gave me enough options to feel polished without overpacking.</blockquote><div class="quote-person"><img class="avatar" src="https://i.pravatar.cc/80?img=12" alt="Portrait of Jordan K."><div><strong>Jordan K.</strong><span>Architect, Toronto</span></div></div></article>
</div>
</div>
</section>
<section class="section section-tint" id="faq">
<div class="container faq-wrap">
<div class="section-heading reveal">
<div>
<div class="eyebrow">Good to know</div>
<h2>Questions, answered.</h2>
</div>
</div>
<details open>
<summary>How is Atelier Nova different from a fashion magazine?</summary>
<p>We are an editorial studio and style resource rather than a traditional publication. Every trend forecast is paired with wardrobe context, styling notes, and a clear explanation of how a silhouette or color can work in daily life.</p>
</details>
<details>
<summary>Do I need to follow every trend to have a personal style?</summary>
<p>No. Personal style is built from repetition and selective experimentation. We recommend learning the underlying idea behind a trend—proportion, texture, color, or attitude—before deciding whether it belongs in your wardrobe.</p>
</details>
<details>
<summary>Can I use the style compass if I am starting from scratch?</summary>
<p>Absolutely. The compass is designed to help you identify a starting direction, not to classify you. Use the result as a moodboard prompt, then adjust it for your climate, lifestyle, budget, and comfort level.</p>
</details>
<details>
<summary>How often are the collections updated?</summary>
<p>Our core collections are refreshed seasonally, with lighter editorial updates throughout the year. The best pieces are built to work across more than one season, so the edit stays useful beyond its launch moment.</p>
</details>
</div>
</section>
<section class="newsletter" id="newsletter">
<div class="container">
<div class="newsletter-box reveal">
<div>
<div class="eyebrow" style="color:#ffe0c5;">The Friday edit</div>
<h2>Get the edit before it hits your feed.</h2>
<p>One considered dispatch each week: three looks, two beauty notes, and one designer detail worth knowing.</p>
</div>
<div>
<form class="newsletter-form" id="newsletterForm">
<label class="skip-link" for="email" style="position:absolute;left:-9999px;">Email address</label>
<input id="email" name="email" type="email" placeholder="Enter your email address" autocomplete="email" required>
<button class="button button-light" type="submit">Join the list</button>
</form>
<div class="newsletter-message" id="newsletterMessage" hidden>Thank you—your first edit is on its way.</div>
</div>
</div>
</div>
</section>
</main>
<footer class="footer" id="contact">
<div class="container">
<div class="footer-grid">
<div>
<a class="brand" href="#home" aria-label="Atelier Nova home"><img src="https://placehold.co/180x54/11100f/f7f2ec?text=ATELIER%20NOVA" alt="Atelier Nova logo"></a>
<p class="footer-about">A modern style studio for fashion trends, beauty resources, and clothing inspiration that feels intentional, wearable, and distinctly yours.</p>
</div>
<div>
<h3>Explore</h3>
<div class="footer-links"><a href="#looks">Looks</a><a href="#collections">Collections</a><a href="#beauty">Beauty</a><a href="#journal">Journal</a><a href="#compass">Style compass</a></div>
</div>
<div>
<h3>Studio</h3>
<div class="footer-links"><a href="#about">About us</a><a href="#about">Editorial team</a><a href="#faq">FAQ</a><a href="#newsletter">Newsletter</a><a href="#contact">Contact</a></div>
</div>
<div>
<h3>Visit or write</h3>
<div class="contact-line"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 21s7-5.2 7-11a7 7 0 1 0-14 0c0 5.8 7 11 7 11Z"/><circle cx="12" cy="10" r="2.5"/></svg><span>18 Mercer Mews, London EC1V 4PB</span></div>
<div class="contact-line"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg><span>hello@ateliernova.com</span></div>
<div class="contact-line"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M5 4h4l2 5-3 2a16 16 0 0 0 5 5l2-3 5 2v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2Z"/></svg><span>+44 (0)20 7946 0821</span></div>
<div class="social-links" aria-label="Social media"><a href="#contact" aria-label="Instagram">Instagram</a><a href="#contact" aria-label="Pinterest">Pinterest</a><a href="#contact" aria-label="TikTok">TikTok</a><a href="#contact" aria-label="YouTube">YouTube</a></div>
</div>
</div>
<div class="footer-bottom"><span>© <span id="year">2025</span> Atelier Nova. All rights reserved.</span><span><a href="#contact">Privacy</a> · <a href="#contact">Terms</a> · <a href="#contact">Accessibility</a></span></div>
</div>
</footer>
<script>
const menuButton = document.querySelector('.menu-toggle');
const primaryNav = document.getElementById('primary-nav');
menuButton.addEventListener('click', () => {
const open = primaryNav.classList.toggle('open');
menuButton.classList.toggle('active', open);
menuButton.setAttribute('aria-expanded', String(open));
menuButton.setAttribute('aria-label', open ? 'Close navigation' : 'Open navigation');
});
primaryNav.addEventListener('click', (event) => {
if (event.target.matches('a')) {
primaryNav.classList.remove('open');
menuButton.classList.remove('active');
menuButton.setAttribute('aria-expanded', 'false');
menuButton.setAttribute('aria-label', 'Open navigation');
}
});
const revealItems = document.querySelectorAll('.reveal');
if ('IntersectionObserver' in window) {
const revealObserver = new IntersectionObserver((entries, observer) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('is-visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.12 });
revealItems.forEach((item) => revealObserver.observe(item));
} else {
revealItems.forEach((item) => item.classList.add('is-visible'));
}
const filterButtons = document.querySelectorAll('[data-filter]');
const lookCards = document.querySelectorAll('.look-card');
filterButtons.forEach((button) => {
button.addEventListener('click', () => {
filterButtons.forEach((item) => item.setAttribute('aria-pressed', 'false'));
button.setAttribute('aria-pressed', 'true');
const filter = button.dataset.filter;
lookCards.forEach((card) => {
const visible = filter === 'all' || card.dataset.category === filter;
card.classList.toggle('is-hidden', !visible);
card.setAttribute('aria-hidden', String(!visible));
});
});
});
const styleForm = document.getElementById('styleForm');
const styleResult = document.getElementById('styleResult');
const resultTitle = document.getElementById('resultTitle');
const resultCopy = document.getElementById('resultCopy');
const styleSignals = {
polished: ['The intentional minimalist', 'Your direction favors clean lines, tactile fabrics, and one strong detail. Start with a refined base layer, then add a piece that makes the outfit feel personal.'],
effortless: ['The relaxed storyteller', 'You respond to easy layers, natural textures, and just enough structure to keep the outfit grounded. Focus on fit, movement, and one interesting accessory.'],
romantic: ['The soft dramatist', 'Your style signal lives in fluid silhouettes, tactile details, and a considered color story. Let one romantic element lead, then balance it with something simple.'],
statement: ['The confident editor', 'You enjoy a clear point of view and are not afraid of contrast. Choose a sculptural silhouette or bold color, then let the rest of the outfit create space for it.']
};
styleForm.addEventListener('submit', (event) => {
event.preventDefault();
const mood = new FormData(styleForm).get('mood');
const [title, copy] = styleSignals[mood] || styleSignals.polished;
resultTitle.textContent = title;
resultCopy.textContent = copy;
styleResult.hidden = false;
styleResult.scrollIntoView({ behavior: 'smooth', block: 'center' });
});
const newsletterForm = document.getElementById('newsletterForm');
const newsletterMessage = document.getElementById('newsletterMessage');
newsletterForm.addEventListener('submit', (event) => {
event.preventDefault();
if (!newsletterForm.checkValidity()) {
newsletterForm.reportValidity();
return;
}
newsletterMessage.hidden = false;
newsletterForm.reset();
});
document.getElementById('year').textContent = new Date().getFullYear();
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T09:56:08.821Z",
"url": "https://benchmark.aimac.invalid/8f5817932f6d86f68fefb37fa30386f818c9d8da7b7d140b47c01733d15b0c93.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Atelier Nova home\">\n <img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">\n </a>",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"]"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Atelier Nova home\">\n <img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">\n </a>",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"]"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "focusable-modal-open",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements while a modal is open"
},
{
"id": "focusable-disabled",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
},
{
"id": "focusable-not-tabbable",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
}
],
"none": [],
"impact": null,
"html": "<span aria-hidden=\"true\">\u2197</span>",
"target": [
".button-primary.button[href$=\"#looks\"] > span[aria-hidden=\"true\"]"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Atelier Nova home\">\n <img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">\n </a>",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"]"
]
}
]
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-valid-attr-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute values are valid"
},
{
"id": "aria-errormessage",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
},
{
"id": "aria-level",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-level values are valid"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Atelier Nova home\">\n <img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">\n </a>",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"]"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Atelier Nova home\">\n <img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">\n </a>",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"]"
]
}
]
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "autocomplete-valid",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "the autocomplete attribute is correctly formatted"
}
],
"none": [],
"impact": null,
"html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"Enter your email address\" autocomplete=\"email\" required=\"\">",
"target": [
"#email"
]
}
]
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "important-letter-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-word-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-line-height",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "line-height in the style attribute is not set to !important, or meets the minimum"
}
],
"none": [],
"impact": null,
"html": "<div class=\"container\" style=\"margin-top: 76px;\">",
"target": [
".container:nth-child(2)"
]
}
]
},
{
"id": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"filter-button\" type=\"button\" data-filter=\"all\" aria-pressed=\"true\">All looks</button>",
"target": [
"button[data-filter=\"all\"]"
]
}
]
},
{
"id": "bypass",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag241",
"section508",
"section508.22.o",
"TTv5",
"TT9.a",
"EN-301-549",
"EN-9.2.4.1"
],
"description": "Ensure each page has at least one mechanism for a user to bypass navigation and jump straight to the content",
"help": "Page must have means to bypass repeated blocks",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/bypass?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "internal-link-present",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Valid skip link found"
},
{
"id": "header-present",
"data": null,
"relatedNodes": [
{
"html": "<h1>Fashion that feels like you\u2014before it feels like a trend.</h1>",
"target": [
"h1"
]
},
{
"html": "<h2>Trends, translated into real life.</h2>",
"target": [
"#journal > .container > .section-heading.reveal > div > h2"
]
},
{
"html": "<h3>The new quiet statement</h3>",
"target": [
".editorial-card:nth-child(1) > .card-body > h3"
]
},
{
"html": "<h3>The capsule that earns its keep</h3>",
"target": [
".editorial-card:nth-child(2) > .card-body > h3"
]
},
{
"html": "<h3>Skin-first beauty, finished properly</h3>",
"target": [
".editorial-card:nth-child(3) > .card-body > h3"
]
},
{
"html": "<h2>A clearer way to find your signature.</h2>",
"target": [
".split-copy > h2"
]
},
{
"html": "<h3>Silhouette map</h3>",
"target": [
".feature:nth-child(1) > h3"
]
},
{
"html": "<h3>Color moodboard</h3>",
"target": [
".feature:nth-child(2) > h3"
]
},
{
"html": "<h3>Fabric notes</h3>",
"target": [
".feature:nth-child(3) > h3"
]
},
{
"html": "<h3>Accessorizing, simplified</h3>",
"target": [
".feature:nth-child(4) > h3"
]
},
{
"html": "<h2>Looks worth saving.</h2>",
"target": [
"#looks > .container > .section-heading.reveal > div > h2"
]
},
{
"html": "<h3>Work, softened</h3>",
"target": [
"article[data-category=\"work\"] > .look-content > h3"
]
},
{
"html": "<h3>Saturday in layers</h3>",
"target": [
".look-card[data-category=\"weekend\"]:nth-child(2) > .look-content > h3"
]
},
{
"html": "<h3>Evening, in one gesture</h3>",
"target": [
"article[data-category=\"evening\"] > .look-content > h3"
]
},
{
"html": "<h3>Travel, made intentional</h3>",
"target": [
".look-card[data-category=\"weekend\"]:nth-child(4) > .look-content > h3"
]
},
{
"html": "<h2>Beauty that supports the outfit.</h2>",
"target": [
".beauty-copy > h2"
]
},
{
"html": "<h2>The edit, organized for your life.</h2>",
"target": [
"#collections > .container > .section-heading.reveal > div > h2"
]
},
{
"html": "<h3>Base layer, elevated</h3>",
"target": [
".collection-card:nth-child(1) > .collection-content > h3"
]
},
{
"html": "<h3>Light, but deliberate</h3>",
"target": [
".collection-card:nth-child(2) > .collection-content > h3"
]
},
{
"html": "<h3>Details that stay</h3>",
"target": [
".collection-card:nth-child(3) > .collection-content > h3"
]
},
{
"html": "<h2>What is your style signal?</h2>",
"target": [
".compass-intro > h2"
]
},
{
"html": "<h2>A style studio built around the person, not the season.</h2>",
"target": [
".about-copy > h2"
]
},
{
"html": "<h2>Questions, answered.</h2>",
"target": [
".faq-wrap > .section-heading.reveal > div > h2"
]
},
{
"html": "<h2>Get the edit before it hits your feed.</h2>",
"target": [
".newsletter-box > div:nth-child(1) > h2"
]
},
{
"html": "<h3>Explore</h3>",
"target": [
".footer-grid > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Studio</h3>",
"target": [
"div:nth-child(3) > h3"
]
},
{
"html": "<h3>Visit or write</h3>",
"target": [
"div:nth-child(4) > h3"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main id=\"main-content\">",
"target": [
"#main-content"
]
}
],
"impact": "serious",
"message": "Page has a landmark region"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#dfdcd9",
"bgColor": "#171411",
"contrastRatio": 13.43,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 13.43"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"announcement\">The Autumn / Winter edit is live \u00b7 Free style notes every Friday</div>",
"target": [
".announcement"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "primary-nav",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<nav class=\"primary-nav\" id=\"primary-nav\" aria-label=\"Primary navigation\">",
"target": [
"#primary-nav"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [
{
"html": "<label class=\"option\"><input type=\"radio\" name=\"mood\" value=\"polished\" checked=\"\"><span>Polished</span></label>",
"target": [
".option:nth-child(1)"
]
}
],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"radio\" name=\"mood\" value=\"polished\" checked=\"\">",
"target": [
"input[value=\"polished\"]"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"] > img[alt=\"Atelier Nova logo\"]"
]
}
]
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "implicit-label",
"data": {
"implicitLabel": "Polished"
},
"relatedNodes": [
{
"html": "<label class=\"option\"><input type=\"radio\" name=\"mood\" value=\"polished\" checked=\"\"><span>Polished</span></label>",
"target": [
".option:nth-child(1)"
]
}
],
"impact": "critical",
"message": "Element has an implicit (wrapped) <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"radio\" name=\"mood\" value=\"polished\" checked=\"\">",
"target": [
"input[value=\"polished\"]"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main-content\">Skip to content</a>",
"target": [
"a[href$=\"#main-content\"]"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul class=\"beauty-list\">",
"target": [
"ul"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li><span class=\"check\">\u2713</span><div><strong>Prep before pigment</strong><span>Hydration, primer, and a little patience make color look more intentional and last longer.</span></div></li>",
"target": [
"li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/180x54/171411/f7f2ec?text=ATELIER%20NOVA\" alt=\"Atelier Nova logo\">",
"target": [
".nav-shell > .brand[aria-label=\"Atelier Nova home\"][href$=\"#home\"] > img[alt=\"Atelier Nova logo\"]"
]
}
]
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "explicit-label",
"data": null,
"relatedNodes": [
{
"html": "<label class=\"field-label\" for=\"season\">Where are you dressing for?</label>",
"target": [
"label[for=\"season\"]"
]
}
],
"impact": "critical",
"message": "Element has an explicit <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<select id=\"season\" name=\"season\" required=\"\">",
"target": [
"#season"
]
}
]
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<summary>How is Atelier Nova different from a fashion magazine?</summary>",
"target": [
"details[open=\"\"] > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 141.9,
"height": 46.4
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (141.9px by 46.4px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main-content\">Skip to content</a>",
"target": [
"a[href$=\"#main-content\"]"
]
}
]
}
],
"incomplete": [
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": {
"role": null,
"nodeName": "div",
"messageKey": "noRoleSingular",
"prohibited": [
"aria-label"
]
},
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute is not well supported on a div with no valid role attribute."
}
],
"impact": "serious",
"html": "<div class=\"hero-proof\" aria-label=\"Atelier Nova highlights\">\n <span>12k+ style profiles shaped</span>\n <span>40+ designer notes</span>\n <span>0 trend noise</span>\n </div>",
"target": [
".hero-proof"
],
"failureSummary": "Fix all of the following:\n aria-label attribute is not well supported on a div with no valid role attribute."
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "11.2pt (14.88px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"faq\">",
"target": [
"#faq"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 11.2pt (14.88px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>We are an editorial studio and style resource rather than a traditional publication. Every trend forecast is paired with wardrobe context, styling notes, and a clear explanation of how a silhouette or color can work in daily life.</p>",
"target": [
"details[open=\"\"] > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 11.2pt (14.88px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"journal\">",
"target": [
"#journal"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Our editors move from the catwalk to the closet, identifying the silhouettes, textures, and finishing details that are worth learning now.</p>",
"target": [
".is-visible > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"journal\">",
"target": [
"#journal"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Our editors move from the catwalk to the closet, identifying the silhouettes, textures, and finishing details that are worth learning now.</p>",
"target": [
".section-heading.is-visible.reveal > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"journal\">",
"target": [
"#journal"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Our editors move from the catwalk to the closet, identifying the silhouettes, textures, and finishing details that are worth learning now.</p>",
"target": [
"#journal > .container > .section-heading.is-visible.reveal > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"beauty\">",
"target": [
"#beauty"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>The best beauty routine is not another checklist. It is a set of small, repeatable choices that help your complexion, hair, and fragrance feel considered from morning to night.</p>",
"target": [
".beauty-copy > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "10.4pt (13.92px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"beauty\">",
"target": [
"#beauty"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Hydration, primer, and a little patience make color look more intentional and last longer.</span>",
"target": [
"li:nth-child(1) > div > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "10.4pt (13.92px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"beauty\">",
"target": [
"#beauty"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Define the hairline, brows, and lips with restraint so the overall look feels finished rather than busy.</span>",
"target": [
"li:nth-child(2) > div > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "10.4pt (13.92px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"beauty\">",
"target": [
"#beauty"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Choose a glow, a color, or a scent to echo through the outfit instead of competing with every piece.</span>",
"target": [
"li:nth-child(3) > div > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 10.4pt (13.92px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#70675f",
"bgColor": "#ebe1d7",
"contrastRatio": 4.29,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section-tint\" id=\"journal\">",
"target": [
"#journal"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Our editors move from the catwalk to the closet, identifying the silhouettes, textures, and finishing details that are worth learning now.</p>",
"target": [
"#journal > .container > .section-heading.reveal.is-visible > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.29 (foreground color: #70675f, background color: #ebe1d7, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e0cfc5",
"bgColor": "#8f573e",
"contrastRatio": 3.86,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter-box reveal is-visible\">",
"target": [
".newsletter-box"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.86 (foreground color: #e0cfc5, background color: #8f573e, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>One considered dispatch each week: three looks, two beauty notes, and one designer detail worth knowing.</p>",
"target": [
".newsletter-box > div:nth-child(1) > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.86 (foreground color: #e0cfc5, background color: #8f573e, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#fffdf9",
"bgColor": "#9c6b55",
"contrastRatio": 4.44,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"Enter your email address\" autocomplete=\"email\" required=\"\">",
"target": [
"#email"
]
},
{
"html": "<div class=\"newsletter-box reveal is-visible\">",
"target": [
".newsletter-box"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.44 (foreground color: #fffdf9, background color: #9c6b55, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"Enter your email address\" autocomplete=\"email\" required=\"\">",
"target": [
"#email"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.44 (foreground color: #fffdf9, background color: #9c6b55, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 8713
},
{
"y": 576,
"height": 8713
},
{
"y": 1152,
"height": 8713
},
{
"y": 1728,
"height": 8713
},
{
"y": 2304,
"height": 8713
},
{
"y": 2880,
"height": 8713
},
{
"y": 3456,
"height": 8713
},
{
"y": 4032,
"height": 8713
},
{
"y": 4608,
"height": 8713
},
{
"y": 5184,
"height": 8713
},
{
"y": 5760,
"height": 8713
},
{
"y": 6336,
"height": 8713
},
{
"y": 6912,
"height": 8713
},
{
"y": 7488,
"height": 8713
},
{
"y": 7993,
"height": 8713
}
],
"scans": 16,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Style & Fashion" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.
**Client & Category:**
- Industry: "Style & Fashion"
- Description: Fashion trends, style guides, beauty resources, and clothing inspiration.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Style & Fashion" category.
2. **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3. **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.
**Content & Structure Requirements (Deliver a COMPLETE page):**
- **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
- **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Looks", "Collections", "About".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Style & Fashion" category. Consider themes similar to: "Beauty Tips", "Seasonal Trends", "Runway Reports".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "trend forecast", "silhouette", "accessorizing".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Get Inspired", "Explore Trends", "Follow Designer".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Style & Fashion" sector. Ideas similar but not limited to: "trend tracker".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "editor picks", "fashion week highlights", "new arrivals".
- **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
- **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.