@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
/* ============ NORRLYST JULEFROKOST - selskaber, bold sans, DA/EN ============ */
:root{
--bg:#FCFCFC; --cream2:#F1F1F0; --card:#FCFCFC; --ink:#172012; --body:#6c6d6c;
--gold:#264E30; --gold-d:#264E30; --line:#E4E2DD; --line2:#E4E2DD;
--green:#264E30; --green-2:#5A632A; --nav-h:64px;
}
/* ---- Elementor / WordPress fixes ---- */
.nl-jf{width:100vw;position:relative;left:50%;margin-left:-50vw;overflow-x:hidden;background:#FCFCFC;padding-top:var(--nav-h);}
.elementor-widget-html,
.elementor-widget-html > .elementor-widget-container,
.e-con:first-child{padding-top:0 !important;margin-top:0 !important;}
.elementor-widget-html > .elementor-widget-container{display:flex;flex-direction:column;}
.entry-title,.page-title,.page-header,h1.page-title,.wp-block-post-title{display:none !important;}
/* Skjul temaets globale Elementor-header paa denne side (kun widget-headeren skal staa) */
.elementor-location-header,.ehf-header,#ast-desktop-header,.ast-above-header,.ast-below-header{display:none !important;}
/* ---- Base ---- */
.nl-jf *{box-sizing:border-box;margin:0;padding:0;}
.nl-jf{font-family:'Poppins',sans-serif;color:#6c6d6c;font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased;}
.nl-jf h1,.nl-jf h2,.nl-jf h3{font-family:'Poppins',sans-serif;font-weight:700;color:#172012;line-height:1.08;letter-spacing:-.02em;}
.nl-jf p{margin-bottom:0;line-height:1.65;}
.nl-jf a{color:inherit;text-decoration:none;}
.wrap{max-width:1180px;margin:0 auto;padding:0 28px;}
.eyebrow{font-family:'Poppins',sans-serif;font-size:11px;font-weight:600;letter-spacing:3.4px;text-transform:uppercase;color:#264E30 !important;display:block;}
/* ---- Buttons ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-family:'Poppins',sans-serif;font-size:12px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;padding:16px 34px;border-radius:100px;cursor:pointer;transition:all .28s ease;border:1px solid #172012;line-height:1;}
.btn-primary{background:#264E30 !important;color:#FFFFFF !important;}
.btn-primary:hover{background:#5A632A !important;border-color:#5A632A;color:#FFFFFF !important;transform:translateY(-2px);}
.btn-ghost{background:transparent !important;color:#172012 !important;}
.btn-ghost:hover{background:#172012 !important;color:#FFFFFF !important;transform:translateY(-2px);}
/* ---- HERO (split) ---- */
.hero{display:grid;grid-template-columns:1fr 1fr;min-height:600px;background:#FCFCFC;}
.hero-media{position:relative;overflow:hidden;min-height:420px;background:#E4E4E3;}
.slide{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0;transition:opacity 1.1s ease;}
.slide.active{opacity:1;}
.hero-text{display:flex;flex-direction:column;justify-content:center;padding:72px clamp(28px,5vw,84px);}
.hero-text .eyebrow{margin-bottom:20px;}
.hero-title{font-family:'Poppins',sans-serif;font-weight:700;color:#172012;font-size:clamp(38px,4.6vw,62px);line-height:1.02;letter-spacing:-.025em;display:flex;flex-wrap:wrap;align-items:baseline;gap:.22em;}
.ht-lead{color:#172012;}
.rotator{position:relative;display:inline-block;color:#264E30;font-weight:700;}
.rot-size{visibility:hidden;display:inline-block;white-space:nowrap;}
.rot-word{position:absolute;left:0;top:0;width:100%;text-align:left;white-space:nowrap;opacity:0;transform:translateY(.7em);color:#264E30;transition:transform .55s cubic-bezier(.2,.75,.25,1),opacity .45s ease;}
.rot-word.is-active{opacity:1;transform:translateY(0);}
.rot-word.is-leaving{opacity:0;transform:translateY(-.7em);}
@media (prefers-reduced-motion:reduce){.rot-word{transition:opacity .4s ease;transform:none !important;}}
.hero-sub{font-family:'Poppins',sans-serif;font-weight:500;font-size:clamp(17px,1.7vw,21px);color:#264E30 !important;line-height:1.4;margin:22px 0 0;}
.hero-lead{font-size:16px;font-weight:300;color:#6c6d6c !important;max-width:480px;margin:18px 0 0;}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;margin-top:34px;}
/* ---- Contact ---- */
.contact{background:#FCFCFC;padding:clamp(48px,6vw,80px) 0;border-bottom:1px solid #E4E2DD;}
.contact-head{max-width:640px;margin:0 auto clamp(28px,4vw,38px);text-align:center;}
.contact-head .eyebrow{margin-bottom:14px;}
.contact-head h2{font-size:clamp(28px,3.4vw,44px);margin-bottom:12px;}
.contact-head p{font-size:15.5px;font-weight:300;color:#6c6d6c !important;}
.contact-form{max-width:760px;margin:0 auto;background:#FCFCFC;border:1px solid #E4E2DD;border-radius:10px;padding:clamp(24px,3vw,40px);}
.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.cf-field{display:flex;flex-direction:column;gap:8px;}
.cf-field.cf-full{grid-column:1 / -1;}
.cf-field span{font-size:10.5px;letter-spacing:1.8px;text-transform:uppercase;color:#264E30 !important;font-weight:600;}
.cf-field input,.cf-field textarea{font-family:'Poppins',sans-serif;font-size:15px;font-weight:400;color:#172012;background:#FCFCFC;border:1px solid #E4E2DD;border-radius:8px;padding:12px 14px;width:100%;transition:border-color .2s ease,box-shadow .2s ease;}
.cf-field textarea{resize:vertical;border-radius:10px;}
.cf-field input::placeholder,.cf-field textarea::placeholder{color:#9A9B9B;}
.cf-field input:focus,.cf-field textarea:focus{outline:none;border-color:#264E30;box-shadow:0 0 0 3px rgba(38,78,48,.15);}
.cf-submit{margin-top:22px;width:100%;}
/* ---- Kontakt: udrul-formular ---- */
.cf-toggle{margin-top:24px;}
.cf-toggle[aria-expanded="true"]{display:none;}
.cf-collapse{max-height:0;overflow:hidden;opacity:0;transition:max-height .55s ease,opacity .45s ease,margin-top .45s ease;margin-top:0;}
.cf-collapse.open{max-height:2200px;opacity:1;margin-top:30px;}
/* ---- Filter bar ---- */
.filters{background:#F1F1F0;border-top:1px solid #E4E2DD;border-bottom:1px solid #E4E2DD;padding:22px 0;position:sticky;top:var(--nav-h);z-index:900;}
.filters .wrap{display:flex;align-items:flex-end;gap:24px;flex-wrap:wrap;}
.filter-field{display:flex;flex-direction:column;gap:9px;}
.filter-field label{font-size:10.5px;letter-spacing:2.4px;text-transform:uppercase;color:#264E30 !important;font-weight:600;}
.filter-field select{appearance:none;-webkit-appearance:none;font-family:'Poppins',sans-serif;font-size:14.5px;color:#172012;background:#FCFCFC;border:1px solid #E4E2DD;border-radius:100px;padding:12px 42px 12px 20px;min-width:214px;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:right 18px center;transition:border-color .2s ease,box-shadow .2s ease;}
.filter-field select:focus{outline:none;border-color:#264E30;box-shadow:0 0 0 3px rgba(38,78,48,.18);}
.filter-meta{margin-left:auto;display:flex;align-items:center;gap:22px;padding-bottom:4px;}
.filter-count{font-size:13px;color:#9A9B9B;}
.filter-count b{font-weight:600;color:#172012;}
.filter-reset{background:none;border:none;cursor:pointer;font-family:'Poppins',sans-serif;font-size:10.5px;letter-spacing:2.2px;text-transform:uppercase;color:#264E30 !important;font-weight:600;padding:2px 0 3px;border-bottom:1px solid transparent;}
.filter-reset:hover{border-bottom-color:#264E30;}
/* ---- Grid ---- */
.grid-sec{background:#FCFCFC;padding:clamp(44px,5.5vw,72px) 0;}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;}
.card{display:flex;flex-direction:column;background:#FCFCFC;border:1px solid #E4E2DD;border-radius:6px;overflow:hidden;transition:transform .35s ease,box-shadow .35s ease;}
.card:hover{transform:translateY(-5px);box-shadow:0 16px 36px rgba(23,32,18,.11);}
.card-media{position:relative;aspect-ratio:3/2;background:#E4E4E3;overflow:hidden;}
.card-media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s ease;}
.card:hover .card-media img{transform:scale(1.04);}
.card-media .ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#E4E4E3;}
.card-media .ph span{font-family:'Poppins',sans-serif;font-size:46px;font-weight:700;color:#B7CBA6;}
.card-body{padding:24px 26px 26px;display:flex;flex-direction:column;flex:1;}
.card .place{font-size:10.5px;letter-spacing:1.8px;text-transform:uppercase;color:#264E30 !important;font-weight:600;}
.card h3{font-size:24px;line-height:1.12;margin:8px 0 0;color:#172012 !important;font-weight:700;letter-spacing:-.02em;}
.card .cuisine{font-size:14.5px;color:#6c6d6c !important;font-weight:300;line-height:1.65;margin-top:11px;flex:1;}
.card .specs{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px;padding-top:16px;border-top:1px solid #E4E2DD;}
.card .chip{font-size:11px;letter-spacing:.4px;color:#264E30 !important;font-weight:500;background:#F1F1F0;border-radius:100px;padding:6px 14px;}
.card .price{margin-top:14px;font-family:'Poppins',sans-serif;font-size:19px;color:#172012 !important;font-weight:700;letter-spacing:-.01em;}
.card .price span{font-family:'Poppins',sans-serif;font-size:12px;color:#9A9B9B;font-weight:300;letter-spacing:.2px;}
.card-actions{margin-top:20px;}
.card .btn{width:100%;}
.empty{text-align:center;padding:60px 0;color:#9A9B9B;font-size:16px;font-weight:300;display:none;}
.empty.show{display:block;}
/* ---- Footer ---- */
.foot{background:#F1F1F0;border-top:1px solid #E4E2DD;padding:clamp(56px,7vw,84px) 0;text-align:center;}
.foot .fbrand{font-family:'Poppins',sans-serif;font-size:26px;font-weight:700;letter-spacing:-.01em;color:#172012 !important;}
.foot .fline{width:52px;height:1px;background:#264E30;margin:20px auto;}
.foot p{font-size:15px;font-weight:300;color:#6c6d6c !important;max-width:580px;margin:0 auto;}
.foot a.fmail{color:#264E30 !important;font-weight:500;border-bottom:1px solid #264E30;}
.foot a.fmail:hover{border-color:#264E30;}
/* ---- Fade-in ---- */
.fade-in{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease;}
.fade-in.visible{opacity:1;transform:translateY(0);}
/* ---- Responsive ---- */
@media (min-width:1440px){.grid{grid-template-columns:repeat(4,1fr);}}
@media (max-width:1000px){.grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:900px){.hero{grid-template-columns:1fr;}.hero-media{min-height:300px;order:-1;}.hero-text{padding:56px clamp(24px,6vw,48px);}}
@media (max-width:720px){.filters{position:static;}.filter-field{width:100%;}.filter-field select{min-width:0;width:100%;}.filter-meta{margin-left:0;width:100%;justify-content:space-between;}}
@media (max-width:600px){.cf-grid{grid-template-columns:1fr;}}
@media (max-width:560px){.wrap{padding:0 20px;}.grid{grid-template-columns:1fr;max-width:420px;margin:0 auto;}.hero-actions{flex-direction:column;}.hero-actions .btn{width:100%;}.rot-word{text-align:left;}}
/* ---- Header / nav (forside-stil, tilpasset) ---- */
.nl-jf [id]{scroll-margin-top:var(--nav-h);}
.nl-nav{position:fixed;top:0;left:0;right:0;z-index:1000;height:var(--nav-h);display:flex;align-items:center;justify-content:space-between;padding:0 clamp(20px,4vw,48px);background:#FCFCFC;border-bottom:1px solid #E4E2DD;}
.nl-nav .nl-logo img{height:38px !important;width:auto !important;max-width:none !important;display:block;}
.nl-nav-links{display:flex;align-items:center;gap:clamp(18px,2.4vw,36px);}
.nl-nav-links a{font-family:'Poppins',sans-serif;font-size:11px;letter-spacing:1.8px;text-transform:uppercase;font-weight:500;color:#172012 !important;opacity:.82;transition:opacity .3s,color .3s;}
.nl-nav-links a:hover{opacity:1;color:#264E30 !important;}
.nl-nav-cta{background:#264E30 !important;color:#FFFFFF !important;border:1px solid #264E30;border-radius:100px;padding:11px 24px;font-family:'Poppins',sans-serif;font-size:11px;font-weight:600;letter-spacing:1.4px;text-transform:uppercase;transition:background .3s,border-color .3s;}
.nl-nav-cta:hover{background:#5A632A !important;border-color:#5A632A;}
.nl-nav-right{display:flex;align-items:center;gap:clamp(12px,1.8vw,22px);}
.nl-lang{display:flex;align-items:center;gap:5px;}
.nl-lang-btn{background:none;border:0;cursor:pointer;font-family:'Poppins',sans-serif;font-size:11px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:#172012 !important;opacity:.45;padding:4px 2px;transition:opacity .25s,color .25s;}
.nl-lang-btn:hover{opacity:.85;}
.nl-lang-btn.active{opacity:1;color:#264E30 !important;}
.nl-lang-sep{opacity:.3;font-size:11px;color:#172012;}
.nl-burger{display:none;flex-direction:column;gap:5px;background:none;border:0;cursor:pointer;padding:8px;}
.nl-burger span{width:24px;height:1.6px;background:#172012;display:block;}
.nl-menu{position:fixed;inset:0;z-index:1100;background:#172012;color:#FCFCFC;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:22px;transform:translateY(-100%);transition:transform .5s cubic-bezier(.7,0,.2,1);}
.nl-menu.open{transform:translateY(0);}
.nl-menu a{font-family:'Poppins',sans-serif;font-size:28px;font-weight:600;color:#FCFCFC !important;letter-spacing:-.01em;}
.nl-menu-close{position:absolute;top:18px;right:22px;font-size:32px;line-height:1;background:none;border:0;color:#FCFCFC;cursor:pointer;}
@media(max-width:860px){.nl-nav-links{display:none;}.nl-nav-cta{display:none;}.nl-burger{display:flex;}}
(function(){
// ---- Sprog (auto via WPML lang-attribut / URL) ----
var _l=(document.documentElement.getAttribute('lang')||'').toLowerCase();
var LANG=(_l.indexOf('en')===0 || /(^|\/)en(\/|-|$)/.test(location.pathname))?'en':'da';
function pick(e){return e?(e[LANG]!=null?e[LANG]:e.da):'';}
var T={
"nav_rest":{"da":"Restauranter","en":"Restaurants"},
"nav_selskaber":{"da":"Selskaber","en":"Groups"},
"nav_kontakt":{"da":"Kontakt","en":"Contact"},
"nav_gavekort":{"da":"Gavekort","en":"Gift cards"},
"nav_koncernen":{"da":"Koncernen","en":"The group"},
"eyebrow":{"da":"Norrlyst Koncernen · Julefrokost i København","en":"Norrlyst Koncernen · Christmas Lunch in Copenhagen"},
"ht_lead":{"da":"Julefrokost for","en":"A Christmas lunch for"},
"hero_sub":{"da":"For selskaber - fra mindre grupper til store fester, i hele København.","en":"For groups - from smaller parties to large celebrations, across Copenhagen."},
"hero_lead":{"da":"Fortæl os om jeres selskab, så finder vi den rette ramme blandt vores restauranter og vender hurtigt tilbage med et tilbud.","en":"Tell us about your group and we'll find the right setting among our restaurants and get back to you with a quote."},
"btn_quote":{"da":"Få et tilbud","en":"Request a quote"},
"btn_see":{"da":"Se restauranterne","en":"See the restaurants"},
"c_eyebrow":{"da":"Kontakt","en":"Contact"},
"c_h2":{"da":"Få et uforpligtende tilbud","en":"Request a quote"},
"c_lead":{"da":"Fortæl os om jeres selskab - antal gæster, ønsket dato og bydel - så vender vi hurtigt tilbage med den rette ramme.","en":"Tell us about your group - number of guests, preferred date and district - and we'll get back to you quickly with the right setting."},
"f_name":{"da":"Navn","en":"Name"},
"f_company":{"da":"Firma (valgfri)","en":"Company (optional)"},
"f_email":{"da":"E-mail","en":"Email"},
"f_phone":{"da":"Telefon","en":"Phone"},
"f_guests":{"da":"Antal gæster","en":"Number of guests"},
"f_date":{"da":"Ønsket dato","en":"Preferred date"},
"f_date_ph":{"da":"fx en fredag i december","en":"e.g. a Friday in December"},
"f_msg":{"da":"Besked","en":"Message"},
"f_submit":{"da":"Send forespørgsel","en":"Send enquiry"},
"lbl_bydel":{"da":"Bydel","en":"District"},
"opt_allbydele":{"da":"Alle bydele","en":"All districts"},
"lbl_antal":{"da":"Antal gæster","en":"Party size"},
"opt_allsizes":{"da":"Alle størrelser","en":"All sizes"},
"opt_20":{"da":"Ca. 20 gæster","en":"Approx. 20 guests"},
"opt_40":{"da":"Ca. 40 gæster","en":"Approx. 40 guests"},
"opt_75":{"da":"Ca. 75 gæster","en":"Approx. 75 guests"},
"opt_100":{"da":"100+ gæster","en":"100+ guests"},
"reset":{"da":"Nulstil","en":"Reset"},
"empty":{"da":"Ingen restauranter matcher dit valg. Prøv en anden bydel eller selskabsstørrelse.","en":"No restaurants match your selection. Try another district or party size."},
"footer":{"da":"Skal I holde en større julefrokost på tværs af flere rum, eller ønsker I hjælp til at finde den rette restaurant? Skriv til os på [email protected]","en":"Planning a larger Christmas lunch across several rooms, or would you like help finding the right restaurant? Write to us at [email protected]"}
};
function applyStaticT(){
document.querySelectorAll('.nl-jf [data-t]').forEach(function(el){var e=T[el.getAttribute('data-t')];if(e)el.innerHTML=pick(e);});
document.querySelectorAll('.nl-jf [data-tph]').forEach(function(el){var e=T[el.getAttribute('data-tph')];if(e)el.setAttribute('placeholder',pick(e));});
}
// Sprogskifter (opdaterer hele widgeten uden at genindlaese siden)
function wordOf(p){return (LANG==='en'&&p.word_en)?p.word_en:p.word;}
var heroWords=[], heroRotator=null, heroRotSize=null;
function updateHeroLang(){
if(!heroRotator||typeof PAIRS==='undefined') return;
var longest=PAIRS.reduce(function(a,p){return wordOf(p).length>a.length?wordOf(p):a;},'');
if(heroRotSize) heroRotSize.textContent=longest;
heroRotator.setAttribute('aria-label', PAIRS.map(wordOf).join(', '));
heroWords.forEach(function(s,idx){ if(PAIRS[idx]) s.textContent=wordOf(PAIRS[idx]); });
}
function updateLangSwitcher(){
document.querySelectorAll('.nl-lang-btn').forEach(function(b){ b.classList.toggle('active', b.getAttribute('data-lang')===LANG); });
}
function applyLang(lang){
LANG=(lang==='en')?'en':'da';
applyStaticT();
updateHeroLang();
if(typeof render==='function') render();
updateLangSwitcher();
}
applyStaticT();
document.querySelectorAll('.nl-lang-btn').forEach(function(b){ b.addEventListener('click',function(){ applyLang(b.getAttribute('data-lang')); }); });
updateLangSwitcher();
// ---- Kontaktformular (aabner faerdigudfyldt mail til booking@) ----
var form=document.getElementById('jf-form');
if(form){
form.addEventListener('submit',function(ev){
ev.preventDefault();
var f=ev.target, L=(LANG==='en');
var g=function(n){return (f.elements[n]&&f.elements[n].value?f.elements[n].value:'').trim();};
var subj=L?'Christmas lunch enquiry - Norrlyst':'Julefrokost-forespørgsel - Norrlyst';
var body=[
(L?'Name':'Navn')+': '+g('navn'),
(L?'Company':'Firma')+': '+g('firma'),
(L?'Email':'E-mail')+': '+g('email'),
(L?'Phone':'Telefon')+': '+g('telefon'),
(L?'Number of guests':'Antal gæster')+': '+g('antal'),
(L?'Preferred date':'Ønsket dato')+': '+g('dato'),
'',
(L?'Message':'Besked')+':',
g('besked')
].join('\r\n');
window.location.href='mailto:[email protected]?subject='+encodeURIComponent(subj)+'&body='+encodeURIComponent(body);
});
}
// ============================================================
// HERO - ord + matchende billede skifter SAMTIDIG.
// ============================================================
var PAIRS = [
{ word:"vinen", word_en:"the wine", img:"https://norrlyst.dk/wp-content/uploads/2026/06/Gabrielle-interior-PDR-3-scaled.jpg" },
{ word:"øllen", word_en:"the beer", img:"https://norrlyst.dk/wp-content/uploads/2026/06/Cadence_24.09.25-39-scaled.jpg" },
{ word:"snapsen", word_en:"the snaps", img:"https://norrlyst.dk/wp-content/uploads/2026/02/Norrlyst-Taarnet_paaskefrokost_horizontal.jpg" },
{ word:"hyggen", word_en:"the cosiness", img:"https://norrlyst.dk/wp-content/uploads/2025/08/OSR0005-Enhanced-NR-1.webp" },
{ word:"stemningen", word_en:"the atmosphere", img:"https://norrlyst.dk/wp-content/uploads/2024/10/OSR1583-scaled.webp" },
{ word:"skålene", word_en:"the toasts", img:"https://norrlyst.dk/wp-content/uploads/2025/08/RS6788_SUKAIBA-152_lpr.jpg" },
{ word:"maden", word_en:"the food", img:"https://norrlyst.dk/wp-content/uploads/2025/08/OSR4617.webp" },
{ word:"selskabet", word_en:"the party", img:"https://norrlyst.dk/wp-content/uploads/2025/08/OSR7769.jpg" }
];
var HERO_INTERVAL = 3500;
(function(){
var rotator=document.getElementById('rotator');
var rotSize=document.getElementById('rotSize');
var slideA=document.getElementById('slideA');
var slideB=document.getElementById('slideB');
if(!rotator||!PAIRS.length) return;
heroRotator=rotator; heroRotSize=rotSize;
var longest=PAIRS.reduce(function(a,p){return wordOf(p).length>a.length?wordOf(p):a;},'');
rotSize.textContent=longest;
rotator.setAttribute('aria-label', PAIRS.map(wordOf).join(', '));
var words=PAIRS.map(function(p,idx){
var s=document.createElement('span');
s.className='rot-word'+(idx===0?' is-active':'');
s.setAttribute('aria-hidden','true');
s.textContent=wordOf(p);
rotator.appendChild(s);
return s;
});
heroWords=words;
PAIRS.forEach(function(p){ if(p.img){var im=new Image();im.src=p.img;} });
var front=slideA, back=slideB;
if(PAIRS[0].img){ front.style.backgroundImage="url('"+PAIRS[0].img+"')"; front.classList.add('active'); }
var reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if(words.length<2||reduce) return;
var i=0;
setInterval(function(){
var cur=words[i];
cur.classList.remove('is-active'); cur.classList.add('is-leaving');
(function(prev){ setTimeout(function(){ prev.classList.remove('is-leaving'); },600); })(cur);
i=(i+1)%words.length;
words[i].classList.add('is-active');
var nextImg=PAIRS[i].img||'';
back.style.backgroundImage=nextImg?"url('"+nextImg+"')":'none';
back.classList.add('active'); front.classList.remove('active');
var tmp=front; front=back; back=tmp;
}, HERO_INTERVAL);
})();
// ---- Billeder pr. restaurant ----
var IMAGES = {
"Restaurant Norrlyst": "https://norrlyst.dk/wp-content/uploads/2026/06/OSR1117-2-2.jpg",
"Lille Norrlyst": "https://norrlyst.dk/wp-content/uploads/2026/06/67A4665-2-1.jpg",
"Restaurant Theo": "https://norrlyst.dk/wp-content/uploads/2026/06/OSR2102.jpg",
"Restaurant Gemini": "https://norrlyst.dk/wp-content/uploads/2026/06/OSR7815.jpg",
"Restaurant Odette": "https://norrlyst.dk/wp-content/uploads/2026/06/Odette_interioer-29-scaled.jpg",
"Restaurant Gabrielle": "https://norrlyst.dk/wp-content/uploads/2026/06/Gabrielle-Int-Restaurant-15-2.jpg",
"Væksthuset": "https://norrlyst.dk/wp-content/uploads/2026/06/Vaeksthuset_selskab_-5-scaled.jpg",
"Kjærbøllings Hus": "https://norrlyst.dk/wp-content/uploads/2025/11/Kjaerboellings-Hus_-Balistaer-10.jpg",
"Sukaiba": "https://norrlyst.dk/wp-content/uploads/2026/06/Sukaiba-interioer-room-14-scaled.jpg",
"Norrlyst i Tårnet": "https://norrlyst.dk/wp-content/uploads/2026/06/OSR0809.jpg",
"Restaurant Abigail": "https://norrlyst.dk/wp-content/uploads/2025/12/OSR4117.jpg",
"Restaurant Lago": "https://norrlyst.dk/wp-content/uploads/2026/06/Lago_interioer-5-scaled.jpg",
"Restaurant Udtryk": "https://norrlyst.dk/wp-content/uploads/2025/12/Udtryk_selskabslokale-scaled.jpg",
"Lille Mølle": "https://norrlyst.dk/wp-content/uploads/2025/10/Design-uden-navn-21.png"
};
// ---- Data ----
// Fra-priser verificeret mod hver restaurants julefrokostside 23.09.2026 (laveste julemenu pr. person, ekskl. drikkepakker)
var RESTAURANTS = [
{ name:"Restaurant Norrlyst", bydel:"Indre By", addr:"Kompagnistræde 8", cap:25,
cuisine:"Ny nordisk gastronomi, nævnt i Michelinguiden. Hyggelig og intim stemning, perfekt til mindre selskaber.", cuisine_en:"New Nordic gastronomy, listed in the Michelin Guide. A warm, intimate setting, perfect for smaller parties.",
priceFrom:"695", url:"https://norrlyst.dk/restaurantnorrlyst/julefrokost/" },
{ name:"Restaurant Gabrielle", bydel:"Indre By", addr:"Vestergade 3", cap:55,
cuisine:"Fransk inspireret restaurant med hyggelig slyngelstue til private dining.", cuisine_en:"A French-inspired restaurant with a cosy back room for private dining.",
priceFrom:"545", url:"https://norrlyst.dk/restaurantgabrielle/julefrokost/" },
{ name:"Restaurant Theo", bydel:"Indre By", addr:"Skindergade 29", cap:35,
cuisine:"Restaurant med europæiske smage fra Paris, London og Barcelona i en afslappet ramme.", cuisine_en:"A restaurant with European flavours from Paris, London and Barcelona in a relaxed setting.",
priceFrom:"630", url:"https://norrlyst.dk/theo/julefrokost/" },
{ name:"Restaurant Gemini", bydel:"Vesterbro", addr:"Gl. Kongevej 10", cap:130,
cuisine:"Elegant restaurant ved Sankt Jørgens Sø med moderne nordisk køkken og udsigt.", cuisine_en:"An elegant restaurant by Sankt Jørgens Sø with modern Nordic cuisine and a view.",
priceFrom:"625", url:"https://norrlyst.dk/gemini/julefrokost/" },
{ name:"Restaurant Odette", bydel:"Indre By", addr:"Kompagnistræde 18", cap:76,
cuisine:"Moderne dansk med internationale noter og charmerende, autentiske rammer.", cuisine_en:"Modern Danish with international notes in charming, authentic surroundings.",
priceFrom:"395", url:"https://norrlyst.dk/odette/julefrokost/" },
{ name:"Lille Norrlyst", bydel:"Indre By", addr:"Badstuestræde 6A", cap:14,
cuisine:"Intim privat dining for det mindre selskab - moderne nordisk i hjertet af byen.", cuisine_en:"Intimate private dining for the smaller party - modern Nordic in the heart of the city.",
priceFrom:"695", url:"https://norrlyst.dk/lillenorrlyst/julefrokost/" },
{ name:"Væksthuset", bydel:"Holmen", addr:"Ekvipagemestervej 18", cap:150,
cuisine:"Moderne dansk gastronomi i et subtropisk drivhus ved Operaparken.", cuisine_en:"Modern Danish gastronomy in a subtropical greenhouse by Operaparken.",
priceFrom:"450", url:"https://norrlyst.dk/vaeksthuset/julefrokost/" },
{ name:"Kjærbøllings Hus", bydel:"Frederiksberg", addr:"Roskildevej 32", cap:120,
cuisine:"Klassisk dansk julefrokost i hyggelige og autentiske rammer i Zoologisk Have.", cuisine_en:"A classic Danish Christmas lunch in cosy, authentic surroundings in Copenhagen Zoo.",
priceFrom:"945", url:"https://norrlyst.dk/zoo/julefrokost/" },
{ name:"Sukaiba", bydel:"Ørestad", addr:"Martha Christensens Vej 5", cap:95,
cuisine:"Japansk-nordisk fusion 76 meter over byen på 23. etage i Bella Sky.", cuisine_en:"Japanese-Nordic fusion 76 metres above the city on the 23rd floor of Bella Sky.",
priceFrom:"695", url:"https://norrlyst.dk/sukaiba/julefrokost/" },
{ name:"Norrlyst i Tårnet", bydel:"Indre By", addr:"Christiansborg Slotsplads 1", cap:95,
cuisine:"Nordisk gastronomi og smørrebrød i Tårnet på Christiansborg.", cuisine_en:"Nordic gastronomy and smørrebrød in the Tower at Christiansborg.",
priceFrom:"795", url:"https://norrlyst.dk/taarnet/julefrokost/" },
{ name:"Restaurant Abigail", bydel:"Indre By", addr:"Nørregade 30", cap:26,
cuisine:"Vinfokuseret fine dining med nordiske rødder og sommelier-drevne smagsoplevelser.", cuisine_en:"Wine-focused fine dining with Nordic roots and sommelier-led tasting experiences.",
priceFrom:"", url:"https://norrlyst.dk/abigail/" },
{ name:"Restaurant Lago", bydel:"Nørrebro", addr:"Korsgade 1", cap:47,
cuisine:"Moderne nordisk køkken og signatur-cocktails ved søerne.", cuisine_en:"Modern Nordic cuisine and signature cocktails by the lakes.",
priceFrom:"395", url:"https://norrlyst.dk/lago/julefrokost/" },
{ name:"Restaurant Udtryk", bydel:"Indre By", addr:"Teglgårdstræde 8A", cap:40,
cuisine:"Michelin-restaurant med sæsonbaserede menuer formet af de bedste råvarer - intimt og elegant.", cuisine_en:"A Michelin restaurant with seasonal menus shaped by the best produce - intimate and elegant.",
priceFrom:"", url:"https://norrlyst.dk/udtryk/reservations/#groups" },
{ name:"Lille Mølle", bydel:"Christianshavn", addr:"Christianshavns Voldgade 52", cap:60,
cuisine:"Michelin-restaurant i en historisk mølle på Christianshavns Vold - en intim og stemningsfuld ramme om det mindre selskab.", cuisine_en:"A Michelin restaurant in a historic mill on Christianshavn's rampart - an intimate, atmospheric setting for the smaller party.",
priceFrom:"", url:"https://norrlyst.dk/restaurantlillemoelle/" }
];
var grid=document.getElementById('grid');
var emptyEl=document.getElementById('empty');
var countEl=document.getElementById('count');
var fBydel=document.getElementById('f-bydel');
var fAntal=document.getElementById('f-antal');
var bydele=RESTAURANTS.map(function(r){return r.bydel;}).filter(function(v,i,a){return a.indexOf(v)===i;}).sort(function(a,b){return a.localeCompare(b,'da');});
bydele.forEach(function(b){var o=document.createElement('option');o.value=b;o.textContent=b;fBydel.appendChild(o);});
function esc(s){return String(s).replace(/[&"]/g,function(c){return {'&':'&','':'>','"':'"'}[c];});}
function cardHTML(r){
var price=r.priceFrom
? '
'
: '';
return ''+
''+media+
' ';
}
var io=new IntersectionObserver(function(entries){entries.forEach(function(e){if(e.isIntersecting){e.target.classList.add('visible');io.unobserve(e.target);}});},{threshold:.08});
function render(){
var bydel=fBydel.value;
var minCap=parseInt(fAntal.value,10)||0;
var list=RESTAURANTS.filter(function(r){return (bydel==='all'||r.bydel===bydel) && r.cap>=minCap;});
grid.innerHTML=list.map(cardHTML).join('');
emptyEl.classList.toggle('show',list.length===0);
countEl.innerHTML=''+list.length+' '+(LANG==='en'?(list.length===1?'restaurant':'restaurants'):(list.length===1?'restaurant':'restauranter'));
grid.querySelectorAll('.fade-in').forEach(function(el){io.observe(el);});
}
fBydel.addEventListener('change',render);
fAntal.addEventListener('change',render);
document.getElementById('reset').addEventListener('click',function(){fBydel.value='all';fAntal.value='0';render();});
render();
// Observe fade-in elements OUTSIDE the grid (contact head + form) so they reveal too
document.querySelectorAll('.nl-jf .fade-in').forEach(function(el){ if(!el.closest('.grid')) io.observe(el); });
// ---- Kontakt: rul formularen ud ved klik (HubSpot loades foerst her) ----
var hsLoaded=false;
function loadHubSpot(){
if(hsLoaded) return; hsLoaded=true;
var s=document.createElement('script');
s.src='https://js-eu1.hsforms.net/forms/embed/146117636.js';
s.defer=true;
document.body.appendChild(s);
}
function openContactForm(){
var c=document.getElementById('cf-collapse');
var t=document.getElementById('cf-toggle');
if(!c) return;
if(!c.classList.contains('open')){
c.classList.add('open');
if(t) t.setAttribute('aria-expanded','true');
loadHubSpot();
// efter animationen: fjern hoejde-loft, saa HubSpot-formularen kan vokse frit
setTimeout(function(){ c.style.maxHeight='none'; c.style.overflow='visible'; try{window.dispatchEvent(new Event('resize'));}catch(e){} },650);
}
}
var cfToggle=document.getElementById('cf-toggle');
if(cfToggle) cfToggle.addEventListener('click',openContactForm);
document.querySelectorAll('.nl-jf a[href^="#"]').forEach(function(a){
a.addEventListener('click',function(e){
var href=this.getAttribute('href');
var t=document.querySelector(href);
if(t){e.preventDefault(); if(href==='#kontakt'){ openContactForm(); } t.scrollIntoView({behavior:'smooth'});}
});
});
// ---- Mobilmenu ----
window.nlToggleMenu=function(){var m=document.getElementById('nlMenu');m.classList.toggle('open');document.body.style.overflow=m.classList.contains('open')?'hidden':'';};
})();
Norrlyst Koncernen · Julefrokost i København
Julefrokost for stemningen
For selskaber - fra mindre grupper til store fester, i hele København.
Fortæl os om jeres selskab, så finder vi den rette ramme blandt vores restauranter og vender hurtigt tilbage med et tilbud.
Kontakt
Få et uforpligtende tilbud
Fortæl os om jeres selskab - antal gæster, ønsket dato og bydel - så vender vi hurtigt tilbage med den rette ramme.
Alle bydele
Alle størrelser
Ca. 20 gæster
Ca. 40 gæster
Ca. 75 gæster
100+ gæster
Ingen restauranter matcher dit valg. Prøv en anden bydel eller selskabsstørrelse.
'+(LANG==='en'?'from ':'fra ')+esc(r.priceFrom)+' kr. '+(LANG==='en'?'per person':'pr. person')+'
'
: ''+(LANG==='en'?'Price on request':'Pris på forespørgsel')+'
';
var initial=esc(r.name.replace(/^Restaurant\s+/,'').charAt(0));
var imgUrl=(IMAGES[r.name]||r.img||"").trim();
var media=imgUrl
? ''+initial+'
'+
'
'+
''+esc(r.bydel)+' · '+esc(r.addr)+'
'+
''+esc(r.name)+'
'+ ''+esc((LANG==='en'&&r.cuisine_en)?r.cuisine_en:r.cuisine)+'
'+ ''+(LANG==='en'?('Up to '+r.cap+' guests'):('Op til '+r.cap+' gæster'))+'
'+
price+
''+
'