/* ---------- RESET (scoped) ---------- */
.jh-wrap, .jh-wrap *, .jh-wrap *::before, .jh-wrap *::after { box-sizing: border-box; }
.jh-wrap { margin: 0; padding: 0; }
.jh-wrap h1, .jh-wrap h2, .jh-wrap h3, .jh-wrap h4, .jh-wrap p, .jh-wrap ul, .jh-wrap ol { margin: 0; padding: 0; }
.jh-wrap ul, .jh-wrap ol { list-style: none; }
.jh-wrap a { text-decoration: none; color: inherit; }
.jh-wrap button { font: inherit; background: none; border: none; cursor: pointer; color: inherit; padding: 0; }
/* ---------- THEME ---------- */
.jh-wrap {
--paper: #F2EFE8;
--paper-2: #EAE6DC;
--ink: #0F0F0F;
--ink-soft: #1A1A1A;
--muted: #6B6B6B;
--rule: #0F0F0F;
--signal: #C8102E;
--signal-dark: #8B0A1F;
--mustard: #E8C547;
--good: #2E7D4F;
font-family: 'IBM Plex Sans', system-ui, sans-serif;
background: var(--paper);
color: var(--ink);
line-height: 1.55;
font-size: 16px;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
/* Subtle paper grain */
.jh-wrap {
background-image:
radial-gradient(rgba(15,15,15,0.025) 1px, transparent 1px),
linear-gradient(var(--paper), var(--paper));
background-size: 3px 3px, 100% 100%;
}
/* ---------- TYPOGRAPHY ---------- */
.jh-display { font-family: 'Anton', 'Arial Narrow', sans-serif; font-weight: 400; line-height: 0.88; letter-spacing: -0.01em; text-transform: uppercase; }
.jh-serif { font-family: 'Fraunces', 'Georgia', serif; }
.jh-mono { font-family: 'IBM Plex Mono', monospace; }
.jh-eyebrow { font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); }
/* ---------- LAYOUT ---------- */
.jh-container { max-width: 1240px; margin: 0 auto; padding: 0 32px; }
.jh-rule { border-top: 1.5px solid var(--rule); }
.jh-rule-thick { border-top: 6px solid var(--rule); }
.jh-rule-dash { border-top: 1.5px dashed var(--rule); }
/* ============================================================
MASTHEAD
============================================================ */
.jh-masthead {
border-bottom: 1.5px solid var(--ink);
padding: 14px 0;
font-size: 11px;
background: var(--ink);
color: var(--paper);
}
.jh-masthead-row {
display: flex; justify-content: space-between; align-items: center;
gap: 24px; flex-wrap: wrap;
font-family: 'IBM Plex Mono', monospace; letter-spacing: 0.14em; text-transform: uppercase;
}
.jh-masthead-row > span { display: inline-flex; align-items: center; gap: 8px; }
.jh-pulse {
width: 7px; height: 7px; border-radius: 50%; background: var(--signal);
box-shadow: 0 0 0 0 var(--signal);
animation: jh-pulse 2.2s infinite;
}
@keyframes jh-pulse {
0% { box-shadow: 0 0 0 0 rgba(200,16,46,0.6); }
70% { box-shadow: 0 0 0 10px rgba(200,16,46,0); }
100% { box-shadow: 0 0 0 0 rgba(200,16,46,0); }
}
/* ============================================================
HERO
============================================================ */
.jh-hero { padding: 56px 0 48px; position: relative; }
.jh-hero-top {
display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 32px;
padding-bottom: 28px; border-bottom: 1.5px solid var(--rule);
margin-bottom: 36px;
}
.jh-hero-meta { display: flex; gap: 28px; flex-wrap: wrap; }
.jh-hero-meta div { line-height: 1.4; }
.jh-hero-meta .jh-eyebrow { display: block; margin-bottom: 2px; }
.jh-hero-meta .jh-mono { font-size: 13px; }
.jh-title {
font-size: clamp(72px, 14vw, 220px);
line-height: 0.82;
}
.jh-title .jh-line { display: block; }
.jh-title .jh-amp { color: var(--signal); font-family: 'Fraunces', serif; font-style: italic; font-weight: 400; }
.jh-title .jh-strike {
text-decoration: line-through;
text-decoration-color: var(--signal);
text-decoration-thickness: 6px;
text-decoration-skip-ink: none;
opacity: 0.55;
}
.jh-lede {
display: grid; grid-template-columns: 1fr 1.4fr; gap: 48px;
margin-top: 44px; padding-top: 28px; border-top: 1.5px solid var(--rule);
}
.jh-lede-left {
font-family: 'IBM Plex Mono', monospace; font-size: 12px;
letter-spacing: 0.14em; text-transform: uppercase; line-height: 1.7;
}
.jh-lede-left strong { color: var(--signal); font-weight: 600; }
.jh-lede-right { font-size: 19px; line-height: 1.5; max-width: 620px; }
.jh-lede-right p + p { margin-top: 14px; }
.jh-lede-right .jh-mark {
background: linear-gradient(transparent 60%, rgba(232,197,71,0.55) 60%);
padding: 0 2px;
}
/* ============================================================
TRUST STRIP
============================================================ */
.jh-trust {
background: var(--ink); color: var(--paper);
padding: 28px 0;
}
.jh-trust-grid {
display: grid; grid-template-columns: repeat(4, 1fr); gap: 0;
}
.jh-trust-cell {
padding: 12px 24px;
border-right: 1px solid rgba(242,239,232,0.18);
display: flex; flex-direction: column; gap: 6px;
}
.jh-trust-cell:last-child { border-right: none; }
.jh-trust-num {
font-family: 'Anton', sans-serif; font-size: 56px; line-height: 0.9;
color: var(--paper); letter-spacing: -0.01em;
}
.jh-trust-num small { font-size: 18px; color: var(--mustard); margin-left: 4px; font-family: 'IBM Plex Mono', monospace; letter-spacing: 0.1em; }
.jh-trust-label {
font-family: 'IBM Plex Mono', monospace; font-size: 11px;
letter-spacing: 0.16em; text-transform: uppercase; color: rgba(242,239,232,0.72);
}
/* ============================================================
GENERIC SECTION
============================================================ */
.jh-section { padding: 88px 0; }
.jh-section-head {
display: grid; grid-template-columns: 100px 1fr auto; gap: 32px;
align-items: baseline; margin-bottom: 48px;
padding-bottom: 24px; border-bottom: 1.5px solid var(--rule);
}
.jh-section-num {
font-family: 'Anton', sans-serif; font-size: 72px; line-height: 0.85;
color: var(--signal);
}
.jh-section-title {
font-family: 'Anton', sans-serif; font-size: clamp(36px, 5vw, 64px);
text-transform: uppercase; line-height: 0.92; letter-spacing: -0.005em;
}
.jh-section-aside {
font-family: 'IBM Plex Mono', monospace; font-size: 11px;
letter-spacing: 0.16em; text-transform: uppercase; color: var(--muted);
text-align: right; max-width: 200px;
}
/* ============================================================
SECTION — THE WINDOW (14 days viz)
============================================================ */
.jh-window-grid {
display: grid; grid-template-columns: 1.2fr 1fr; gap: 64px; align-items: start;
}
.jh-window-text p { font-size: 17px; line-height: 1.6; margin-bottom: 14px; }
.jh-window-text .jh-callout {
margin-top: 24px; padding: 20px 22px;
border-left: 4px solid var(--signal); background: var(--paper-2);
font-family: 'IBM Plex Mono', monospace; font-size: 13px; line-height: 1.6;
}
.jh-window-text .jh-callout strong { color: var(--signal); }
.jh-window-viz {
background: var(--ink); color: var(--paper);
padding: 32px; position: relative; overflow: hidden;
}
.jh-window-viz::before {
content: ""; position: absolute; top: 0; right: 0;
width: 200px; height: 200px;
background: radial-gradient(circle, rgba(200,16,46,0.25), transparent 70%);
}
.jh-window-viz-head {
display: flex; justify-content: space-between; align-items: center;
font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.16em;
text-transform: uppercase; color: rgba(242,239,232,0.6);
padding-bottom: 16px; border-bottom: 1px solid rgba(242,239,232,0.2);
margin-bottom: 28px;
}
.jh-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; position: relative; z-index: 1; }
.jh-day {
aspect-ratio: 1; display: flex; align-items: center; justify-content: center;
font-family: 'Anton', sans-serif; font-size: 18px;
border: 1px solid rgba(242,239,232,0.2); color: rgba(242,239,232,0.5);
transition: all 0.6s ease;
}
.jh-day.jh-active { color: var(--paper); border-color: var(--paper); background: rgba(242,239,232,0.04); }
.jh-day.jh-d14 { background: var(--signal); border-color: var(--signal); color: var(--paper); }
.jh-window-legend {
display: flex; gap: 24px; margin-top: 24px; font-family: 'IBM Plex Mono', monospace;
font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
color: rgba(242,239,232,0.7);
}
.jh-window-legend span { display: flex; align-items: center; gap: 8px; }
.jh-window-legend i { display: inline-block; width: 10px; height: 10px; border: 1px solid rgba(242,239,232,0.5); }
.jh-window-legend i.jh-deadline { background: var(--signal); border-color: var(--signal); }
/* Calculator */
.jh-calc {
margin-top: 28px; padding: 20px;
border: 1px dashed rgba(242,239,232,0.3);
}
.jh-calc label {
display: block; font-family: 'IBM Plex Mono', monospace; font-size: 10px;
letter-spacing: 0.18em; text-transform: uppercase; color: rgba(242,239,232,0.7);
margin-bottom: 8px;
}
.jh-calc input {
background: transparent; border: none; border-bottom: 1.5px solid var(--paper);
color: var(--paper); font-family: 'IBM Plex Mono', monospace; font-size: 14px;
padding: 6px 0; width: 180px; outline: none;
}
.jh-calc input::-webkit-calendar-picker-indicator { filter: invert(1); }
.jh-calc-out {
margin-top: 14px; font-family: 'Anton', sans-serif; font-size: 32px; line-height: 1;
color: var(--mustard);
}
.jh-calc-out small { display: block; font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.16em; color: rgba(242,239,232,0.65); margin-top: 8px; }
/* ============================================================
SECTION — THE PROCESS (4 steps)
============================================================ */
.jh-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; border: 1.5px solid var(--rule); }
.jh-step {
padding: 32px 28px 36px;
border-right: 1.5px solid var(--rule);
background: var(--paper);
position: relative;
display: flex; flex-direction: column;
min-height: 320px;
}
.jh-step:last-child { border-right: none; }
.jh-step:hover { background: var(--paper-2); }
.jh-step-num {
font-family: 'Anton', sans-serif; font-size: 88px; line-height: 0.85;
color: var(--ink); margin-bottom: 4px;
}
.jh-step-num sup {
font-size: 18px; vertical-align: super; color: var(--signal);
font-family: 'IBM Plex Mono', monospace; letter-spacing: 0.1em;
margin-left: 6px; top: -1.6em; position: relative;
}
.jh-step-tag {
font-family: 'IBM Plex Mono', monospace; font-size: 11px;
letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted);
margin-bottom: 12px;
}
.jh-step-title {
font-family: 'Anton', sans-serif; font-size: 26px; text-transform: uppercase;
line-height: 1; margin-bottom: 14px;
}
.jh-step-body { font-size: 14px; line-height: 1.55; color: var(--ink-soft); flex: 1; }
.jh-step-meta {
margin-top: 16px; padding-top: 14px; border-top: 1px dashed var(--rule);
font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.12em;
text-transform: uppercase; color: var(--signal);
}
/* ============================================================
SECTION — ELIGIBLE / NOT ELIGIBLE
============================================================ */
.jh-elig { display: grid; grid-template-columns: 1fr 1fr; gap: 0; border: 1.5px solid var(--rule); }
.jh-elig-col { padding: 36px; border-right: 1.5px solid var(--rule); }
.jh-elig-col:last-child { border-right: none; background: var(--ink); color: var(--paper); }
.jh-elig-flag {
display: inline-flex; align-items: center; gap: 10px;
font-family: 'IBM Plex Mono', monospace; font-size: 12px;
letter-spacing: 0.16em; text-transform: uppercase;
padding: 6px 12px; margin-bottom: 24px;
}
.jh-elig-flag.jh-yes { background: var(--good); color: var(--paper); }
.jh-elig-flag.jh-no { background: var(--signal); color: var(--paper); }
.jh-elig-head {
font-family: 'Anton', sans-serif; font-size: 44px; line-height: 0.9;
text-transform: uppercase; margin-bottom: 24px;
}
.jh-elig ul li {
padding: 14px 0; border-top: 1px solid rgba(15,15,15,0.15);
font-size: 15px; display: grid; grid-template-columns: 28px 1fr; gap: 12px;
align-items: baseline;
}
.jh-elig-col:last-child ul li { border-top-color: rgba(242,239,232,0.18); }
.jh-elig ul li:last-child { border-bottom: 1px solid rgba(15,15,15,0.15); }
.jh-elig-col:last-child ul li:last-child { border-bottom-color: rgba(242,239,232,0.18); }
.jh-elig ul li .jh-tick {
font-family: 'Anton', sans-serif; font-size: 22px; line-height: 1; color: var(--good);
}
.jh-elig-col:last-child ul li .jh-tick { color: var(--signal); }
.jh-elig ul li strong { font-weight: 600; }
.jh-elig ul li em { display: block; font-style: normal; color: var(--muted); font-size: 13px; margin-top: 2px; }
.jh-elig-col:last-child ul li em { color: rgba(242,239,232,0.6); }
/* Personalization warning */
.jh-perso-warn {
background: var(--signal); color: var(--paper);
padding: 32px 36px; margin-top: 32px;
display: grid; grid-template-columns: auto 1fr; gap: 28px; align-items: center;
}
.jh-perso-icon {
font-family: 'Anton', sans-serif; font-size: 88px; line-height: 0.85;
border: 4px solid var(--paper); padding: 8px 22px;
}
.jh-perso-warn h3 {
font-family: 'Anton', sans-serif; font-size: 28px; text-transform: uppercase;
line-height: 1; margin-bottom: 10px;
}
.jh-perso-warn p { font-size: 14px; line-height: 1.55; max-width: 720px; }
.jh-perso-warn p strong { background: var(--paper); color: var(--signal); padding: 1px 6px; }
/* ============================================================
SECTION — REFUND TIMELINE
============================================================ */
.jh-timeline {
position: relative; padding: 40px 0 20px;
display: grid; grid-template-columns: repeat(5, 1fr); gap: 0;
}
.jh-timeline::before {
content: ""; position: absolute; left: 8%; right: 8%; top: 88px;
height: 2px; background: var(--rule);
background-image: repeating-linear-gradient(to right, var(--rule) 0, var(--rule) 6px, transparent 6px, transparent 12px);
}
.jh-tl-step { position: relative; text-align: center; padding: 0 12px; z-index: 1; }
.jh-tl-dot {
width: 22px; height: 22px; border-radius: 50%; background: var(--paper);
border: 3px solid var(--ink); margin: 80px auto 18px;
position: relative;
}
.jh-tl-step.jh-tl-final .jh-tl-dot { background: var(--signal); border-color: var(--signal); }
.jh-tl-day {
font-family: 'Anton', sans-serif; font-size: 24px; line-height: 1;
color: var(--signal); position: absolute; top: 0; left: 50%; transform: translateX(-50%);
}
.jh-tl-day small { font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: var(--muted); display: block; margin-top: 2px; letter-spacing: 0.14em; }
.jh-tl-title {
font-family: 'IBM Plex Sans', sans-serif; font-weight: 600; font-size: 14px;
margin-bottom: 6px;
}
.jh-tl-body { font-size: 12px; color: var(--muted); line-height: 1.5; }
/* ============================================================
SECTION — EU RIGHTS BOX
============================================================ */
.jh-eu {
display: grid; grid-template-columns: 1.4fr 1fr; gap: 0;
border: 1.5px solid var(--rule);
}
.jh-eu-main { padding: 44px; border-right: 1.5px solid var(--rule); }
.jh-eu-side { padding: 44px; background: var(--paper-2); }
.jh-eu-stamp {
display: inline-block; padding: 8px 14px; border: 1.5px solid var(--ink);
font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.16em;
text-transform: uppercase; margin-bottom: 22px;
background: var(--paper); transform: rotate(-1deg);
}
.jh-eu-main h3 {
font-family: 'Anton', sans-serif; font-size: 38px; line-height: 0.95;
text-transform: uppercase; margin-bottom: 18px;
}
.jh-eu-main p { font-size: 15px; line-height: 1.6; margin-bottom: 12px; }
.jh-eu-side h4 {
font-family: 'IBM Plex Mono', monospace; font-size: 11px; letter-spacing: 0.18em;
text-transform: uppercase; color: var(--muted); margin-bottom: 14px;
}
.jh-eu-side ul li {
padding: 10px 0; border-top: 1px solid rgba(15,15,15,0.15);
font-size: 13px; line-height: 1.5;
font-family: 'IBM Plex Mono', monospace;
}
.jh-eu-side ul li:last-child { border-bottom: 1px solid rgba(15,15,15,0.15); }
.jh-eu-side ul li strong { display: block; font-family: 'IBM Plex Sans', sans-serif; font-weight: 600; color: var(--signal); margin-bottom: 2px; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; }
/* ============================================================
SECTION — WITHDRAWAL FORM
============================================================ */
.jh-form-wrap {
background: var(--paper-2);
border: 1.5px solid var(--rule);
padding: 0;
display: grid; grid-template-columns: 240px 1fr;
}
.jh-form-side {
background: var(--ink); color: var(--paper);
padding: 36px 28px; display: flex; flex-direction: column; gap: 16px;
}
.jh-form-side .jh-eyebrow { color: rgba(242,239,232,0.6); }
.jh-form-side h3 {
font-family: 'Anton', sans-serif; font-size: 32px; line-height: 0.95;
text-transform: uppercase;
}
.jh-form-side p { font-size: 13px; line-height: 1.55; color: rgba(242,239,232,0.78); }
.jh-form-side .jh-cite {
margin-top: auto; padding-top: 18px;
font-family: 'IBM Plex Mono', monospace; font-size: 10px;
letter-spacing: 0.14em; color: rgba(242,239,232,0.5); text-transform: uppercase;
}
.jh-form-body { padding: 36px 40px; font-family: 'IBM Plex Mono', monospace; font-size: 13px; line-height: 1.85; }
.jh-form-body .jh-fl { color: var(--muted); }
.jh-form-body .jh-fl-input {
display: inline-block; min-width: 180px;
border-bottom: 1px solid var(--rule); padding: 0 6px; color: var(--muted);
}
.jh-form-actions {
margin-top: 28px; padding-top: 18px; border-top: 1px dashed var(--rule);
display: flex; gap: 10px; flex-wrap: wrap;
}
.jh-btn {
display: inline-flex; align-items: center; gap: 8px;
padding: 12px 20px; background: var(--ink); color: var(--paper);
font-family: 'IBM Plex Mono', monospace; font-size: 11px;
letter-spacing: 0.16em; text-transform: uppercase;
transition: all 0.2s ease;
}
.jh-btn:hover { background: var(--signal); }
.jh-btn.jh-btn-ghost { background: transparent; color: var(--ink); border: 1.5px solid var(--ink); }
.jh-btn.jh-btn-ghost:hover { background: var(--ink); color: var(--paper); border-color: var(--ink); }
/* ============================================================
SECTION — FAQ
============================================================ */
.jh-faq { border-top: 1.5px solid var(--rule); }
.jh-faq-item { border-bottom: 1.5px solid var(--rule); }
.jh-faq-q {
width: 100%; text-align: left;
display: grid; grid-template-columns: 60px 1fr 40px;
align-items: center; gap: 24px;
padding: 26px 8px; cursor: pointer;
font-family: 'Anton', sans-serif; font-size: 22px; line-height: 1.1;
text-transform: uppercase;
transition: background 0.2s;
}
.jh-faq-q:hover { background: var(--paper-2); }
.jh-faq-q .jh-faq-idx { font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: var(--signal); letter-spacing: 0.14em; }
.jh-faq-q .jh-faq-toggle {
width: 32px; height: 32px; border: 1.5px solid var(--ink); border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-family: 'IBM Plex Mono', monospace; font-size: 18px; transition: transform 0.3s, background 0.2s, color 0.2s;
}
.jh-faq-item.jh-open .jh-faq-toggle { background: var(--signal); color: var(--paper); border-color: var(--signal); transform: rotate(45deg); }
.jh-faq-a {
display: grid; grid-template-rows: 0fr;
transition: grid-template-rows 0.35s ease;
}
.jh-faq-a > div { overflow: hidden; }
.jh-faq-item.jh-open .jh-faq-a { grid-template-rows: 1fr; }
.jh-faq-a-inner {
padding: 0 8px 28px 92px;
font-size: 15px; line-height: 1.6; max-width: 860px;
}
.jh-faq-a-inner p + p { margin-top: 10px; }
/* ============================================================
FOOTER / CONTACT
============================================================ */
.jh-foot {
background: var(--ink); color: var(--paper);
padding: 80px 0 40px;
}
.jh-foot-grid {
display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 48px;
padding-bottom: 48px; border-bottom: 1px solid rgba(242,239,232,0.2);
}
.jh-foot h4 {
font-family: 'IBM Plex Mono', monospace; font-size: 11px;
letter-spacing: 0.18em; text-transform: uppercase;
color: var(--mustard); margin-bottom: 16px;
}
.jh-foot-headline {
font-family: 'Anton', sans-serif; font-size: clamp(40px, 6vw, 72px);
line-height: 0.92; text-transform: uppercase; margin-bottom: 18px;
}
.jh-foot-headline em { font-style: italic; font-family: 'Fraunces', serif; color: var(--signal); font-weight: 400; }
.jh-foot-row { display: flex; align-items: baseline; gap: 16px; margin-bottom: 12px; font-size: 14px; }
.jh-foot-row .jh-mono { color: rgba(242,239,232,0.6); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; min-width: 56px; }
.jh-foot-row a { border-bottom: 1px solid transparent; transition: border-color 0.2s; }
.jh-foot-row a:hover { border-color: var(--signal); }
.jh-foot-legal {
padding-top: 32px;
display: flex; justify-content: space-between; gap: 24px;
flex-wrap: wrap;
font-family: 'IBM Plex Mono', monospace; font-size: 10px;
letter-spacing: 0.14em; text-transform: uppercase;
color: rgba(242,239,232,0.5);
}
.jh-foot-legal span:first-child { color: var(--paper); }
/* ============================================================
RESPONSIVE
============================================================ */
@media (max-width: 900px) {
.jh-container { padding: 0 20px; }
.jh-section { padding: 64px 0; }
.jh-hero { padding: 36px 0 32px; }
.jh-hero-top { grid-template-columns: 1fr; gap: 18px; }
.jh-lede { grid-template-columns: 1fr; gap: 28px; }
.jh-section-head { grid-template-columns: 60px 1fr; gap: 18px; }
.jh-section-aside { display: none; }
.jh-section-num { font-size: 48px; }
.jh-trust-grid { grid-template-columns: 1fr 1fr; }
.jh-trust-cell { border-right: none; border-bottom: 1px solid rgba(242,239,232,0.18); padding: 16px 20px; }
.jh-trust-cell:nth-child(odd) { border-right: 1px solid rgba(242,239,232,0.18); }
.jh-trust-cell:nth-last-child(-n+2) { border-bottom: none; }
.jh-window-grid { grid-template-columns: 1fr; gap: 36px; }
.jh-steps { grid-template-columns: 1fr 1fr; }
.jh-step { border-bottom: 1.5px solid var(--rule); min-height: 280px; }
.jh-step:nth-child(2) { border-right: none; }
.jh-step:nth-last-child(-n+2) { border-bottom: none; }
.jh-elig { grid-template-columns: 1fr; }
.jh-elig-col { border-right: none; border-bottom: 1.5px solid var(--rule); }
.jh-elig-col:last-child { border-bottom: none; }
.jh-perso-warn { grid-template-columns: 1fr; padding: 24px; gap: 16px; }
.jh-perso-icon { font-size: 56px; padding: 6px 16px; align-self: start; }
.jh-timeline { grid-template-columns: 1fr; gap: 24px; padding: 20px 0; }
.jh-timeline::before { display: none; }
.jh-tl-step { text-align: left; display: grid; grid-template-columns: 80px 1fr; gap: 16px; padding: 0; }
.jh-tl-day { position: static; transform: none; text-align: center; }
.jh-tl-dot { margin: 0 auto; }
.jh-eu { grid-template-columns: 1fr; }
.jh-eu-main { border-right: none; border-bottom: 1.5px solid var(--rule); padding: 28px; }
.jh-eu-side { padding: 28px; }
.jh-form-wrap { grid-template-columns: 1fr; }
.jh-form-side { padding: 28px; }
.jh-form-body { padding: 28px; }
.jh-faq-q { grid-template-columns: 50px 1fr 32px; font-size: 17px; gap: 14px; padding: 22px 4px; }
.jh-faq-a-inner { padding: 0 4px 22px 64px; }
.jh-foot-grid { grid-template-columns: 1fr; gap: 32px; }
}
Returns,
refunds &
questions answers.
// Promise
Thirty days to decide.
Forty-eight hours to process.
One hundred percent refunded.
// Built on
EU Directive 2011/83/EU
Right of withdrawal: 14 days
JerseyHaus extension: +16 days
A jersey is more than a piece of fabric. It carries weekends, away days, the memory of a goal in stoppage time. We get that — and we know that sometimes the fit, the shade, the size, or the moment just doesn't land.
That's why every order on JerseyHaus ships with a 30-day, no-drama return window — sixteen days more than the European minimum, no restocking fees, no fine print written to trip you up. Read on for the full mechanics. We've kept it short, square, and human.
30DAYS
Return window from delivery
48HRS
Median refund processing
0,00€
Restocking fees, ever
27EU
Member states covered
01
The window —
fourteen, plus sixteen.
EU minimum / 14d
JerseyHaus / 30d
European consumer law gives you a non-negotiable 14 calendar days from the moment your jersey reaches your door to change your mind, no reason required, no questions asked.
We thought that was a little tight for a kit you might only get to try on after the weekend. So we extended it — by sixteen days. Your 30-day window starts the day the courier hands over the parcel, and runs to midnight (CET) on day 30.
If day 30 falls on a Sunday or a public holiday in your country, you've got until the next working day. We're reasonable people.
// Legal note — Your statutory 14-day right of withdrawal under Article 9, Directive 2011/83/EU remains untouched. Our 30-day policy is an additional contractual right on top of it — never a replacement for, and never less than, what European law grants you.
14-DAY CLOCK / EU STATUTORY
D—00 → D—14
Day
EU Deadline
// Calculate your remaining days
— DAYS LEFT
Enter delivery date to compute the 30-day window
02
The process —
four moves, full stop.
No phone calls
No paperwork wars
01°
// Initiate
Tell us within 30 days
Log into your JerseyHaus account, open the order, and hit "Start a return". No account? Email returns@jerseyhaus.eu with your order number. We respond within 4 working hours.
Avg. response: 1h 47min
02°
// Pack
Original condition, tags on
Fold the jersey, slip in the printed return slip we email you, and pack it in the original poly mailer — or any sturdy bag. Tags must still be attached, no wash, no wear beyond a fit-check.
Original packaging preferred
03°
// Ship
Drop at any DHL point
We provide a pre-paid DHL return label. Drop the parcel at any DHL Service Point across the EU — over 28,000 locations. Tracking is automatic. Defective items? Return shipping is fully on us.
Pre-paid label included
04°
// Refund
Money back in 48–72h
Once the warehouse logs your parcel, we refund within 48 hours to the original payment method. Card refunds clear in 2–5 working days; SEPA in 1–2; PayPal & Klarna instant.
EU max: 14d (we beat it)
03
What comes home —
what stays with you.
Plain English
No surprises
✓ Eligible for return
Coming
home.
-
+Stock jerseys — home, away, third, retroBundesliga & international club kits
-
+Unworn, tags attachedTrying it on is fine. Wearing it to the match isn't.
-
+Sealed accessoriesScarves, caps, training gear in original packaging
-
+Wrong size, wrong colour, wrong vibeNo questions, no reason needed within 30 days
-
+Defective or damaged items2-year EU legal guarantee. Always our cost.
✗ Not eligible
Staying
with you.
-
—Personalised jerseysCustom name & number printing — excluded under EU law (see warning below)
-
—Worn or washed itemsBeyond a try-on. Signs of use, deodorant marks, pet hair, smell of beer.
-
—Tags removed or destroyedThe hangtag is your receipt of "as new" condition
-
—Returns after day 30Unless the item is defective — then 2-year guarantee applies
-
—Gift cards & digital codesStandard EU exclusion under Art. 16(m)
!
Heads up on personalised kits.
Jerseys printed with a custom name, number, or patch are produced specifically for you and are permanently excluded from the right of withdrawal under Article 16(c) of EU Directive 2011/83/EU. This applies even within the 14-day statutory window. The exclusion does not apply if the item arrives defective or with a printing error on our side — in that case, you're covered by the 2-year legal guarantee. Please double-check spelling and number before you confirm checkout.
04
Refund timeline —
from drop-off to dashboard.
Median journey
Real numbers
D—0DROP-OFF
You drop the parcel
Any DHL point across the EU. Keep the receipt.
D—2TRANSIT
In transit
Tracking updates every 6 hours via DHL.
D—4WAREHOUSE
Warehouse check
QC team confirms condition. Email confirmation sent.
D—5REFUND ISSUED
Refund triggered
We push the refund to your original payment method.
D—7FUNDS BACK
In your account
Card: 2–5d · SEPA: 1–2d · PayPal/Klarna: instant.
05
Your EU rights —
plain, undiluted.
Directive 2011/83/EU
Directive 1999/44/EC
★ Statutory · Non-waivable
Two laws sit above this policy.
Right of Withdrawal — Under Directive 2011/83/EU on Consumer Rights, you may withdraw from any distance sales contract within 14 calendar days of receiving your goods, without giving any reason and without incurring any cost other than the cost of returning the goods (which, on JerseyHaus, is covered by us).
Legal Guarantee of Conformity — Under Directive (EU) 2019/771, you benefit from a 2-year legal guarantee covering defects existing at the moment of delivery. If a defect appears within 2 years of receipt, you have the right to a repair, replacement, price reduction, or full refund, at no cost to you. We honour this fully, without exception.
Nothing in this Returns & Refunds policy limits or affects your statutory consumer rights. Where our policy is more generous (e.g. our 30-day window), the more generous term applies. Where it is equal or less, the statutory right prevails.
// Quick legal index
-
Withdrawal Period14 days minimum (EU) · 30 days (JerseyHaus)
-
Refund WindowMax 14 days from notice (EU) · 5–7d typical
-
Defect Guarantee24 months from delivery
-
Personalisation ExceptionArt. 16(c), Dir. 2011/83/EU
-
ODR Platformec.europa.eu/consumers/odr
-
Governing LawGrand-Duchy of Luxembourg
06
Model withdrawal form —
European standard.
Annex I, Part B
Dir. 2011/83/EU
07
Frequently asked —
frankly answered.
Tap to expand
11 entries
Q—01Do I have to give a reason for my return?+
No. Within the 30-day window, you can return any eligible item without justifying yourself — that's the spirit of the EU right of withdrawal. We do include a one-line optional reason field in the returns flow, but it's purely so we can improve sizing and product descriptions. Skip it if you'd rather.
Q—02Who pays for the return shipping?+
For change-of-mind returns: under EU law the consumer can be asked to cover return shipping. On JerseyHaus, we cover it for you anyway via a pre-paid DHL label — no deduction from your refund.
For defective, damaged, or wrong-item returns: always on us, no exceptions. We arrange pickup at your address if needed.
Q—03I had my jersey printed with a name & number — can I return it?+
Personalised items are excluded from the right of withdrawal under Article 16(c) of Directive 2011/83/EU, because they are produced to your individual specification and cannot be resold. This is a hard EU rule that applies to every retailer.
Exceptions: if the printing has a defect on our side (wrong spelling vs. what you confirmed at checkout, peeling letters within 2 years, wrong font, etc.), you're fully covered by the 2-year legal guarantee. Photograph the issue and write to returns@jerseyhaus.eu — we make it right.
Q—04Tried it on, didn't like the fit — is that still "unworn"?+
Yes. Article 14(2) of the Directive is clear: you're allowed to handle the goods as you would in a physical shop. Trying a jersey on over a t-shirt is fine. Wearing it to the gym, the pub, or a match isn't.
What we look for in QC: tags still attached, no deodorant or makeup marks, no smell of perfume or smoke, no fibres of another fabric stuck to it.
Q—05How long until I actually see the money?+
From the moment our warehouse confirms receipt: card refunds clear in 2–5 working days, SEPA bank transfers in 1–2, PayPal and Klarna are typically instant.
EU law allows us up to 14 days to issue the refund from the moment you notify us. In practice, our median is 48 hours from drop-off, and we've never missed the statutory limit.
Q—06Can I exchange instead of refunding?+
Absolutely. In the returns flow, choose "Exchange for a different size/colour" instead of "Refund". We ship the new item the same day your return is logged at our warehouse — no waiting for the refund cycle. Price differences are settled at the same moment, both ways.
Q—07My jersey arrived damaged or with a manufacturing defect. What now?+
Email returns@jerseyhaus.eu with your order number and two photos: one of the defect close-up, one of the full item. We respond within 4 working hours with three options under your 2-year EU legal guarantee: replacement, repair, or full refund — your choice. Return shipping is on us, always.
This right is yours for 24 months from delivery, regardless of our 30-day return window.
Q—08I lost the tags / opened the poly bag — am I disqualified?+
Opening the bag is fine — you can't try the jersey on without doing so. Lost or detached hangtags are the more delicate point: we may apply a small re-condition fee (max 15% of the item) if the jersey can no longer be sold as new. We always tell you upfront before processing.
If the tag was missing on arrival, that's our error: full refund, no fee.
Q—09What if I paid partly with a gift card or store credit?+
We refund in the exact reverse order of how you paid: gift card / store credit portion first (back to your JerseyHaus account, never expires), then the remainder to your card or bank account. You'll see a clear breakdown in the refund email.
Q—10I'm outside the EU. Does this policy still apply?+
Yes — same 30-day window, same conditions, same refund timelines. The legal foundation differs (your local consumer law applies in parallel), but our contractual promise is identical worldwide. Return shipping outside the EU is currently customer-paid for change-of-mind returns, and JerseyHaus-paid for defects.
Q—11We can't agree — what's my next move?+
If we ever fail to resolve a dispute amicably, you have direct access to the European Commission's Online Dispute Resolution platform at ec.europa.eu/consumers/odr. You can also reach your national consumer protection authority. We commit to engaging constructively with any ODR procedure within 14 days.
That said: in five years of operation, we've sent zero refund disputes to ODR. Talk to us first.
/* ====================== INTERACTIONS ====================== */
/* --- Build 14-day grid --- */
(function(){
var box = document.getElementById('jh-days');
if (!box) return;
var html = '';
for (var i = 1; i <= 14; i++) {
var cls = 'jh-day';
if (i === 14) cls += ' jh-d14';
else if (i <= 7) cls += ' jh-active';
html += '<div class="' + cls + '">' + (i < 10 ? '0' + i : i) + '</div>';
}
box.innerHTML = html;
// Stagger the activation
var days = box.querySelectorAll('.jh-day');
days.forEach(function(d, idx){
d.style.transitionDelay = (idx * 60) + 'ms';
});
})();
/* --- Days-left calculator --- */
(function(){
var input = document.getElementById('jh-calc-date');
var out = document.getElementById('jh-calc-out');
if (!input || !out) return;
input.addEventListener('change', function(){
var d = new Date(input.value);
if (isNaN(d.getTime())) return;
var now = new Date();
var diff = Math.floor((now - d) / (1000*60*60*24));
var left = 30 - diff;
if (left > 0) {
out.innerHTML = left + ' <small style="font-family: \'IBM Plex Mono\', monospace; font-size: 11px; letter-spacing: 0.16em; color: rgba(242,239,232,0.65); display:block; margin-top: 8px;">DAYS LEFT IN YOUR 30-DAY WINDOW</small>';
} else if (left === 0) {
out.innerHTML = 'LAST DAY <small style="font-family: \'IBM Plex Mono\', monospace; font-size: 11px; letter-spacing: 0.16em; color: rgba(242,239,232,0.65); display:block; margin-top: 8px;">RETURN TODAY TO STAY WITHIN POLICY</small>';
} else {
out.innerHTML = 'WINDOW CLOSED <small style="font-family: \'IBM Plex Mono\', monospace; font-size: 11px; letter-spacing: 0.16em; color: rgba(242,239,232,0.65); display:block; margin-top: 8px;">DEFECTIVE ITEMS STILL COVERED BY 2-YEAR GUARANTEE</small>';
}
});
})();
/* --- FAQ accordion --- */
(function(){
var items = document.querySelectorAll('.jh-faq-item');
items.forEach(function(item){
var btn = item.querySelector('.jh-faq-q');
btn.addEventListener('click', function(){
item.classList.toggle('jh-open');
});
});
})();
/* --- Copy withdrawal form --- */
function jhCopyForm() {
var el = document.getElementById('jh-form-text');
var text = el.innerText.replace(/Print form|Copy as text/g, '').trim();
if (navigator.clipboard) {
navigator.clipboard.writeText(text).then(function(){
var btn = document.getElementById('jh-copy-btn');
var orig = btn.innerHTML;
btn.innerHTML = '✓ Copied';
setTimeout(function(){ btn.innerHTML = orig; }, 1800);
});
}
}
function jhPrintForm() {
var content = document.getElementById('jh-form-text').innerText;
content = content.replace(/Print form|Copy as text/g, '').trim();
var w = window.open('', '_blank');
w.document.write('<html><head><title>JerseyHaus — Withdrawal Form</title><style>body{font-family:Georgia,serif;max-width:600px;margin:60px auto;padding:0 24px;line-height:1.7;color:#0F0F0F;white-space:pre-wrap;}h1{font-family:Arial,sans-serif;text-transform:uppercase;letter-spacing:0.05em;border-bottom:2px solid #0F0F0F;padding-bottom:10px;}</style></head><body><h1>Model Withdrawal Form</h1>' + content.replace(/\n/g,'<br>') + '</body></html>');
w.document.close();
setTimeout(function(){ w.print(); }, 250);
}