#norrlyst-events-root {
font-family:"Inter", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
--ink:#1e2a22;
--ink-soft:#4f5a52;
--paper:#faf5e9;
--sand:#ecdcc1;
--terracotta:#c8623f;
--terracotta-deep:#a04a2c;
--gold:#c9a86a;
--sangria:#a8324a;
--frasca:#b8804a;
--torsdagsbar:#3d6068;
--cocktail:#b85675;
--winedinner:#c8952a;
--cremant:#2e7d52;
--midsommar:#c94040;
--champagne-new:#e07830;
--happyhour:#7b5ea7;
--rule:rgba(30,42,34,.16);
--serif:"Cormorant Garamond", Georgia, serif;
--sans:"Inter", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
-webkit-font-smoothing:antialiased;
line-height:1.6;
font-size:16px;
font-weight:300;
color:var(--ink);
}
#norrlyst-events-root *{box-sizing:border-box}
#norrlyst-events-root img{display:block;max-width:100%;height:auto}
#norrlyst-events-root a{color:inherit;text-decoration:none}
#norrlyst-events-root button{font-family:inherit}
/* Full-bleed helper */
.nl-bleed {
position:relative;
width:100vw;
left:50%;
right:50%;
margin-left:-50vw;
margin-right:-50vw;
}
/* Topbar */
.nl-topbar{
display:flex;align-items:center;justify-content:space-between;
padding:24px 32px;
background:var(--paper);
border-bottom:1px solid var(--rule);
}
.nl-topbar .nl-brand{
font-family:var(--serif);
font-size:22px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;
color:var(--ink);
}
.nl-topbar nav{display:flex;gap:36px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-soft)}
.nl-topbar nav a{transition:color .2s;color:var(--ink-soft)}
.nl-topbar nav a:hover{color:var(--terracotta)}
.nl-topbar .nl-book{
font-size:12px;letter-spacing:.22em;text-transform:uppercase;
color:var(--terracotta);font-weight:500;
border-bottom:1px solid var(--terracotta);
padding-bottom:3px;
}
/* Hero */
.nl-hero{
padding:64px 32px 48px;
background:var(--paper);
text-align:center;
border-bottom:1px solid var(--rule);
}
.nl-hero-eyebrow{
font-size:11px;letter-spacing:.32em;text-transform:uppercase;
color:var(--terracotta);margin-bottom:20px;font-weight:500;
display:inline-flex;align-items:center;gap:14px;
}
.nl-hero-eyebrow::before,.nl-hero-eyebrow::after{
content:"";width:32px;height:1px;background:var(--terracotta);
}
.nl-hero h1{
font-family:var(--serif);font-weight:400;
font-size:clamp(48px,6.5vw,88px);
line-height:.98;margin:0 0 20px;
letter-spacing:-.02em;display:block;
color:var(--ink);
}
.nl-hero h1 em{font-style:italic;color:var(--terracotta);font-weight:500}
.nl-hero p{
font-family:var(--serif);font-style:italic;
font-size:clamp(18px,1.6vw,22px);color:var(--ink-soft);
max-width:600px;margin:0 auto;line-height:1.45;
}
/* Next event countdown banner */
.nl-next-event{
background:var(--ink);
color:var(--paper);
padding:64px 32px;
border-bottom:1px solid rgba(250,245,233,.12);
}
.nl-next-event-inner{
max-width:1200px;margin:0 auto;
display:grid;grid-template-columns:1.05fr 1fr;gap:64px;align-items:center;
}
.nl-next-event-text .nl-eyebrow{
font-size:11px;letter-spacing:.32em;text-transform:uppercase;
color:var(--gold);margin-bottom:16px;font-weight:500;display:inline-block;
}
.nl-next-event-text h2{
font-family:var(--serif);font-weight:400;
font-size:clamp(36px,4.5vw,60px);
line-height:1.05;margin:0 0 12px;letter-spacing:-.015em;
color:var(--paper);
}
.nl-next-event-text h2 em{font-style:italic;color:var(--gold);font-weight:500}
.nl-next-event-text .nl-meta{
font-family:var(--serif);font-style:italic;
font-size:18px;color:rgba(250,245,233,.72);margin:0 0 28px;
}
.nl-next-event-text .nl-meta span{color:var(--gold);font-style:normal;letter-spacing:.04em;}
.nl-next-event-text .nl-btn{
display:inline-block;
background:var(--terracotta);color:var(--paper);
padding:16px 40px;font-size:12px;letter-spacing:.28em;
text-transform:uppercase;font-weight:500;
border-radius:999px;border:none;cursor:pointer;
transition:background .25s,transform .2s;
}
.nl-next-event-text .nl-btn:hover{background:var(--terracotta-deep);transform:translateY(-1px)}
.nl-countdown{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.nl-cd-block{
text-align:center;padding:24px 8px 18px;
background:rgba(250,245,233,.05);
border:1px solid rgba(250,245,233,.14);border-radius:6px;
}
.nl-cd-num{
display:block;font-family:var(--serif);font-weight:500;
font-size:clamp(36px,4vw,56px);line-height:1;
color:var(--paper);letter-spacing:-.02em;font-variant-numeric:tabular-nums;
}
.nl-cd-label{
display:block;margin-top:10px;font-size:10px;letter-spacing:.28em;
text-transform:uppercase;color:var(--gold);font-weight:500;
}
.nl-next-event.nl-event-live .nl-cd-block{background:rgba(200,98,63,.15);border-color:rgba(200,98,63,.3)}
.nl-next-event.nl-event-live .nl-cd-num{color:var(--terracotta)}
/* Calendar section */
.nl-calendar-section{
padding:80px 32px;background:var(--paper);
}
.nl-calendar-wrap{max-width:1100px;margin:0 auto;}
.nl-calendar-header{
display:flex;align-items:center;justify-content:space-between;
margin-bottom:40px;gap:24px;
}
.nl-calendar-month{
font-family:var(--serif);font-weight:400;
font-size:clamp(36px,5vw,56px);
line-height:1;letter-spacing:-.01em;margin:0;color:var(--ink);
}
.nl-calendar-month em{font-style:italic;color:var(--terracotta);font-weight:500}
.nl-calendar-nav{display:flex;gap:12px}
.nl-calendar-nav button{
width:48px;height:48px;border-radius:50%;
background:transparent;border:1px solid var(--rule);
cursor:pointer;color:var(--ink);
display:inline-flex;align-items:center;justify-content:center;
transition:background .2s,border-color .2s,color .2s;font-size:18px;
}
.nl-calendar-nav button:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.nl-calendar-grid{
display:grid;grid-template-columns:repeat(7,1fr);
gap:1px;background:var(--rule);border:1px solid var(--rule);
}
.nl-day-name{
background:var(--sand);padding:14px 12px;
font-size:10px;letter-spacing:.3em;text-transform:uppercase;
text-align:center;color:var(--ink-soft);font-weight:500;
}
.nl-day-cell{
background:var(--paper);aspect-ratio:1;padding:10px;
position:relative;display:flex;flex-direction:column;
transition:background .2s;min-height:80px;
}
.nl-day-cell.nl-empty{background:var(--paper);opacity:.4;}
.nl-day-cell.nl-has-event{cursor:pointer;}
.nl-day-cell.nl-has-event:hover{background:var(--sand);}
.nl-day-num{
font-family:var(--serif);font-size:22px;font-weight:500;
color:var(--ink);line-height:1;
}
.nl-day-cell.nl-empty .nl-day-num{color:var(--ink-soft);opacity:.5}
.nl-day-cell.nl-today .nl-day-num{color:var(--terracotta);}
.nl-day-cell.nl-today::before{
content:"";position:absolute;top:6px;right:6px;
width:6px;height:6px;border-radius:50%;background:var(--terracotta);
}
.nl-day-events{
margin-top:auto;display:flex;flex-direction:column;gap:4px;overflow:hidden;
}
.nl-day-event-pill{
display:block;padding:5px 8px;border-radius:4px;
font-size:10px;letter-spacing:.04em;color:#ffffff !important;text-decoration:none;
overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
line-height:1.3;font-weight:500;transition:transform .15s;
}
.nl-day-event-pill *{color:#ffffff !important;}
.nl-day-event-pill:hover{transform:translateX(2px)}
.nl-day-event-pill.nl-no-link{cursor:default}
.nl-day-event-pill.nl-no-link:hover{transform:none}
.nl-day-event-pill.champagne{background:var(--champagne-new)}
.nl-day-event-pill.sangria{background:var(--sangria)}
.nl-day-event-pill.frasca{background:var(--frasca)}
.nl-day-event-pill.torsdagsbar{background:var(--torsdagsbar)}
.nl-day-event-pill.cocktail{background:var(--cocktail)}
.nl-day-event-pill.winedinner{background:var(--winedinner)}
.nl-day-event-pill.cremant{background:var(--cremant)}
.nl-day-event-pill.midsommar{background:var(--midsommar)}
.nl-day-event-pill.happyhour{background:var(--happyhour)}
.nl-calendar-legend{
display:flex;gap:24px;flex-wrap:wrap;margin-top:28px;
font-size:12px;color:var(--ink-soft);letter-spacing:.04em;
}
.nl-legend-item{display:flex;align-items:center;gap:8px}
.nl-legend-swatch{width:14px;height:14px;border-radius:3px;display:inline-block;}
.nl-legend-swatch.champagne{background:var(--champagne-new)}
.nl-legend-swatch.sangria{background:var(--sangria)}
.nl-legend-swatch.frasca{background:var(--frasca)}
.nl-legend-swatch.torsdagsbar{background:var(--torsdagsbar)}
.nl-legend-swatch.cocktail{background:var(--cocktail)}
.nl-legend-swatch.winedinner{background:var(--winedinner)}
.nl-legend-swatch.cremant{background:var(--cremant)}
.nl-legend-swatch.midsommar{background:var(--midsommar)}
.nl-legend-swatch.happyhour{background:var(--happyhour)}
/* Events list section */
.nl-events-section{
padding:96px 32px 80px;background:var(--sand);border-top:1px solid var(--rule);
}
.nl-events-head{text-align:center;margin-bottom:64px;}
.nl-events-head .nl-eyebrow{
font-size:11px;letter-spacing:.32em;text-transform:uppercase;
color:var(--terracotta-deep);margin-bottom:20px;font-weight:500;display:inline-block;
}
.nl-events-head h2{
font-family:var(--serif);font-weight:400;
font-size:clamp(40px,5.5vw,72px);line-height:1;
margin:0;letter-spacing:-.015em;color:var(--ink);
}
.nl-events-head h2 em{font-style:italic;color:var(--terracotta);font-weight:500}
.nl-events-grid{
display:grid;grid-template-columns:repeat(3,1fr);gap:32px;
max-width:1400px;margin:0 auto;
}
.nl-event-card{
display:flex;flex-direction:column;color:inherit;text-decoration:none;
background:var(--paper);border:1px solid var(--rule);overflow:hidden;
transition:transform .35s ease,box-shadow .35s ease,border-color .25s;border-radius:4px;
}
.nl-event-card:hover{
transform:translateY(-4px);
box-shadow:0 24px 50px -25px rgba(30,42,34,.3);border-color:transparent;
}
#norrlyst-events-root .nl-event-img{position:relative;aspect-ratio:3/2;overflow:hidden;background:var(--sand);}
#norrlyst-events-root .nl-event-img-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center center;filter:blur(20px) brightness(.9);transform:scale(1.2);}
#norrlyst-events-root .nl-event-img-main{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center center;display:block;z-index:1;transition:transform .8s ease;}
#norrlyst-events-root .nl-event-card:hover .nl-event-img-main{transform:scale(1.04)}
.nl-event-tag{
position:absolute;top:16px;left:16px;color:var(--paper);
padding:6px 14px;border-radius:999px;
font-size:10px;letter-spacing:.22em;text-transform:uppercase;
font-weight:500;backdrop-filter:blur(4px);
}
.nl-event-tag.champagne{background:var(--champagne-new)}
.nl-event-tag.sangria{background:var(--sangria)}
.nl-event-tag.frasca{background:var(--frasca)}
.nl-event-tag.torsdagsbar{background:var(--torsdagsbar)}
.nl-event-tag.cocktail{background:var(--cocktail)}
.nl-event-tag.winedinner{background:var(--winedinner)}
.nl-event-tag.cremant{background:var(--cremant)}
.nl-event-tag.midsommar{background:var(--midsommar)}
.nl-event-tag.happyhour{background:var(--happyhour)}
.nl-event-body{
padding:32px 28px 36px;border-top:1px solid var(--rule);
display:flex;flex-direction:column;flex:1;
}
.nl-event-date{
font-size:11px;letter-spacing:.28em;text-transform:uppercase;
color:var(--terracotta);font-weight:500;display:block;margin-bottom:12px;
}
.nl-event-card h3{
font-family:var(--serif);font-weight:400;font-size:24px;line-height:1.2;
margin:0 0 8px;color:var(--ink);letter-spacing:-.005em;
}
.nl-event-meta{font-size:13px;color:var(--ink-soft);margin:0 0 18px;}
.nl-event-actions{
display:flex;align-items:center;justify-content:space-between;gap:12px;
margin-top:auto;padding-top:16px;
}
.nl-event-arrow{
font-size:11px;letter-spacing:.28em;text-transform:uppercase;
color:var(--ink);font-weight:500;display:inline-flex;align-items:center;gap:8px;transition:gap .3s;
}
.nl-event-card:hover .nl-event-arrow{gap:14px;color:var(--terracotta)}
.nl-event-share{
background:none !important;border:none !important;cursor:pointer;padding:6px 0 !important;
font-family:inherit;font-size:11px !important;letter-spacing:.28em;text-transform:uppercase;
color:var(--ink) !important;font-weight:500 !important;
display:inline-flex !important;align-items:center;gap:6px;
transition:color .2s;-webkit-appearance:none;appearance:none;text-shadow:none;box-shadow:none !important;
}
.nl-event-share span{color:var(--ink) !important;text-shadow:none}
.nl-event-share svg{width:14px !important;height:14px !important;flex-shrink:0;color:var(--ink);stroke:var(--ink) !important;}
.nl-event-share:hover,.nl-event-share:hover span{color:var(--terracotta) !important}
.nl-event-share:hover svg{stroke:var(--terracotta) !important}
.nl-footer{
background:var(--ink);
padding:48px 32px;
border-top:1px solid rgba(250,245,233,.1);
text-align:center;
font-size:12px;letter-spacing:.06em;
color:rgba(250,245,233,.6);
}
.nl-footer-brand{
font-family:var(--serif);font-size:18px;letter-spacing:.18em;
text-transform:uppercase;color:var(--paper);margin-bottom:10px;
}
.nl-toast{
position:fixed;bottom:32px;left:50%;transform:translate(-50%,12px);
background:var(--ink);color:var(--paper);padding:14px 28px;border-radius:999px;
font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:500;
opacity:0;pointer-events:none;transition:opacity .3s ease,transform .3s ease;
z-index:9999;box-shadow:0 12px 30px -8px rgba(0,0,0,.3);
}
.nl-toast.nl-show{opacity:1;transform:translate(-50%,0)}
.nl-empty-state{
text-align:center;padding:48px 24px;color:var(--ink-soft);
font-style:italic;font-family:var(--serif);font-size:18px;grid-column:1/-1;
}
/* Responsive */
@media (max-width:720px){
.nl-topbar{padding:16px 20px;flex-wrap:wrap;gap:12px}
.nl-topbar nav{display:none}
.nl-topbar .nl-brand{font-size:18px}
.nl-hero{padding:48px 20px 36px}
.nl-hero h1{font-size:clamp(40px,9vw,52px)}
.nl-hero p{font-size:16px}
.nl-next-event{padding:40px 20px}
.nl-next-event-inner{grid-template-columns:1fr;gap:32px;text-align:center}
.nl-next-event-text h2{font-size:clamp(32px,8vw,40px)}
.nl-next-event-text .nl-meta{font-size:16px;margin-bottom:24px}
.nl-countdown{gap:8px}
.nl-cd-block{padding:16px 4px 12px}
.nl-cd-num{font-size:30px}
.nl-cd-label{font-size:9px;letter-spacing:.18em;margin-top:6px}
.nl-calendar-section{padding:48px 8px}
.nl-calendar-wrap{max-width:100%}
.nl-calendar-header{flex-direction:column;align-items:flex-start;gap:16px;margin-bottom:24px;padding:0 8px}
.nl-day-name{padding:6px 1px;font-size:8px;letter-spacing:.04em;font-weight:600}
.nl-day-cell{padding:3px 2px;min-height:54px;aspect-ratio:auto}
.nl-day-num{font-size:12px}
.nl-day-event-pill{padding:2px 3px;font-size:7px;letter-spacing:0;border-radius:3px;line-height:1.2}
.nl-calendar-legend{padding:0 8px;font-size:11px;gap:14px}
.nl-events-section{padding:64px 20px 80px}
.nl-events-head{margin-bottom:40px}
.nl-events-head h2{font-size:clamp(32px,9vw,44px)}
.nl-events-grid{grid-template-columns:1fr;gap:20px;max-width:480px;margin:0 auto}
.nl-event-body{padding:24px 22px 28px}
.nl-event-card h3{font-size:20px}
}

'
+''+(TAG_TEXT[e.type]||'Event')+''
+'
Norrlyst Koncernen
Event kalender
Pop-ups, takeovers og særarrangementer på tværs af vores restauranter - find datoer, klik dig ind og book dig en plads.
00Dage
00Timer
00Min
00Sek
Champagne & Oysters
Midsommar Lunch
Vinaften
Winemaker's Dinner
Torsdagsbar
Cocktail Hour
Happy Hour
- Kommende events
Hvad sker der nu
Norrlyst Koncernen
Pop-ups, takeovers og særarrangementer i København
Link kopieret
(function(){
var CHAMPAGNE_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/05/67A3053-2.jpg';
var CHAMPAGNE_URL = 'https://norrlyst.dk/champagne-oysters/';
var SANGRIA_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/04/4041ffda81fa6f6c0ffae958dffc2dfb.jpg';
var SANGRIA_URL = 'https://norrlyst.dk/sangria-day/';
var FRASCA_ODETTE_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/03/OSR7375.jpg';
var FRASCA_ODETTE_URL = 'https://norrlyst.dk/italian-winemakers-dinner-frasca-x-odette-06-05-26/';
var FRASCA_LAKESIDE_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/03/Winemakers-Lakeside-Pop-Up.png';
var FRASCA_LAKESIDE_URL = 'https://norrlyst.dk/winemakers-lakeside-pop-up-frasca-x-soekig-06-05-26/';
var TORSDAGSBAR_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/07/1.png';
var TORSDAGSBAR_URL = 'https://norrlyst.dk/torsdagsbar/';
var COCKTAIL_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/05/OSR9366.jpg';
var COCKTAIL_URL = 'https://norrlyst.dk/cocktail-hour/';
var WINEDINNER_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/06/OSR6243.jpg';
var WINEDINNER_URL = 'https://norrlyst.dk/wine-dinner-french-terroirs/';
var CREMANT_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/06/session-du-8-9-juillet-2024-88.jpg';
var CREMANT_URL = 'https://norrlyst.dk/winemakers-cremant/';
var MIDSOMMAR_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/06/03b1eb287645bd0728dcdc9fecbc45d6.jpg';
var MIDSOMMAR_URL = 'https://norrlyst.dk/midsommar-lunch';
var WINEDINNER2_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/06/OSR3391.jpg';
var WINEDINNER2_URL = 'https://norrlyst.dk/wine-dinner-sommervin';
var CREMANT2_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/06/OSR3309.jpg';
var CREMANT2_URL = 'https://norrlyst.dk/winemakers-danish';
var WINEDINNER3_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/07/3.png';
var WINEDINNER3_URL = 'https://norrlyst.dk/wine-dinner-fransksommer';
var HAPPYHOUR_IMG = 'https://norrlyst.dk/wp-content/uploads/2026/07/2.png';
var HAPPYHOUR_URL = 'https://norrlyst.dk/happy-hour/';
function generateThursdays(){
var result = [];
var d = new Date(2026,4,7);
var end = new Date(2026,7,31);
while(d<=end){
var y=d.getFullYear(),m=String(d.getMonth()+1).padStart(2,'0'),day=String(d.getDate()).padStart(2,'0');
result.push({date:y+'-'+m+'-'+day,type:'torsdagsbar',title:'50 kr. Torsdagsbar',venue:'Hos Søkig',time:'Kl. 14:00-18:00',url:TORSDAGSBAR_URL,image:TORSDAGSBAR_IMG});
d.setDate(d.getDate()+7);
}
return result;
}
function generateCocktailHours(){
var result = [];
var d = new Date(2026,4,15);
var end = new Date(2026,7,31);
while(d<=end){
var dow=d.getDay();
if(dow===5||dow===6){
var y=d.getFullYear(),m=String(d.getMonth()+1).padStart(2,'0'),day=String(d.getDate()).padStart(2,'0');
result.push({date:y+'-'+m+'-'+day,type:'cocktail',title:'Cocktail Hour på Lago',venue:'Hos Lago',time:'Kl. 15:00-17:00',url:COCKTAIL_URL,image:COCKTAIL_IMG});
}
d.setDate(d.getDate()+1);
}
return result;
}
function generateHappyHours(){
var result = [];
var d = new Date(2026,4,1);
var end = new Date(2026,7,31);
while(d=TODAY_KEY;}).sort(function(a,b){return a.date.localeCompare(b.date);})[0];
var viewYear, viewMonth;
if(nextUpcomingForView){
var parts=nextUpcomingForView.date.split('-').map(Number);
viewYear=parts[0];viewMonth=parts[1]-1;
} else {
viewYear=today.getFullYear();viewMonth=today.getMonth();
}
function renderCalendar(){
var grid=document.getElementById('nl-calendar-grid');
var label=document.getElementById('nl-month-label');
label.innerHTML=MONTHS_DA[viewMonth]+' '+viewYear+'';
grid.innerHTML='';
DAYS_DA.forEach(function(d){
var el=document.createElement('div');el.className='nl-day-name';el.textContent=d;grid.appendChild(el);
});
var firstDay=new Date(viewYear,viewMonth,1);
var startDow=firstDay.getDay()-1;if(startDow=0;i--){
var cell=document.createElement('div');cell.className='nl-day-cell nl-empty';
cell.innerHTML=''+(prevMonthDays-i)+'';grid.appendChild(cell);
}
for(var d=1;d<=daysInMonth;d++){
var key=dateKey(viewYear,viewMonth,d);
var evs=eventsOnDate(key);
var isToday=(today.getFullYear()===viewYear&&today.getMonth()===viewMonth&&today.getDate()===d);
var cell=document.createElement('div');
cell.className='nl-day-cell'+(evs.length?' nl-has-event':'')+(isToday?' nl-today':'');
cell.innerHTML=''+d+'';
if(evs.length){
var ev=document.createElement('div');ev.className='nl-day-events';
evs.forEach(function(e){
var isClickable=e.type!=='frasca';
var el=document.createElement(isClickable?'a':'span');
el.className='nl-day-event-pill '+e.type+(isClickable?'':' nl-no-link');
if(isClickable)el.href=e.url;
el.textContent=SHORT_TITLE[e.type]||e.title;
el.title=e.title+' - '+e.time;
ev.appendChild(el);
});
cell.appendChild(ev);
}
grid.appendChild(cell);
}
var totalCells=startDow+daysInMonth;
var trailing=(7-(totalCells%7))%7;
for(var i=1;i<=trailing;i++){
var cell=document.createElement('div');cell.className='nl-day-cell nl-empty';
cell.innerHTML=''+i+'';grid.appendChild(cell);
}
}
function renderEvents(){
var grid=document.getElementById('nl-events-grid');
grid.innerHTML='';
var upcoming=EVENTS.filter(function(e){return e.date>=TODAY_KEY;}).sort(function(a,b){return a.date.localeCompare(b.date);});
if(upcoming.length===0){
grid.innerHTML='Ingen kommende events lige nu - kig forbi snart.
';return;
}
var seenT=false,seenC=false,seenH=false,special=[],recurring=[];
upcoming.forEach(function(e){
if(e.type==='torsdagsbar'){if(seenT)return;seenT=true;recurring.push(e);return;}
if(e.type==='cocktail'){if(seenC)return;seenC=true;recurring.push(e);return;}
if(e.type==='happyhour'){if(seenH)return;seenH=true;recurring.push(e);return;}
special.push(e);
});
var cardEvents=special.concat(recurring).sort(function(a,b){return a.date.localeCompare(b.date);});
var shareIcon='';
cardEvents.slice(0,12).forEach(function(e){
var p=e.date.split('-').map(Number);
var y=p[0],m=p[1],d=p[2];
var dateLabel=e.type==='torsdagsbar'?'Hver torsdag':e.type==='cocktail'?'Hver fre/lør':e.type==='happyhour'?'Hver fredag':pad(d)+'.'+pad(m)+'.'+String(y).slice(2);
var html=''
+''
+''+dateLabel+''
+'
';
grid.insertAdjacentHTML('beforeend',html);
});
}
document.getElementById('nl-prev-month').addEventListener('click',function(){
viewMonth--;if(viewMonth11){viewMonth=0;viewYear++;}renderCalendar();
});
function startCountdown(){
var candidates=EVENTS.filter(function(e){return e.date>=TODAY_KEY;}).sort(function(a,b){return a.date.localeCompare(b.date);});
if(candidates.length===0){
document.getElementById('nl-ne-eyebrow').textContent='- Kommende events';
document.getElementById('nl-ne-title').textContent='Flere events er på vej';
var meta=document.querySelector('#nl-next-event .nl-meta');if(meta)meta.style.display='none';
var neLink=document.getElementById('nl-ne-link');if(neLink)neLink.style.display='none';
['nl-cd-d','nl-cd-h','nl-cd-m','nl-cd-s'].forEach(function(id){document.getElementById(id).textContent='00';});
return;
}
var specialTypes=['winedinner','cremant','champagne','sangria','frasca'];
var next=null;
for(var i=0;i-1){next=candidates[i];break;}}
if(!next)next=candidates[0];
var startHour=12,startMin=0;
var tm=(next.time||'').match(/(\d{1,2}):(\d{2})/);
if(tm){startHour=parseInt(tm[1]);startMin=parseInt(tm[2]);}
else if(/aften/i.test(next.time))startHour=18;
else if(/eftermiddag/i.test(next.time))startHour=15;
var p=next.date.split('-').map(Number);
var target=new Date(p[0],p[1]-1,p[2],startHour,startMin,0);
var weekdays=['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'];
var monthsLower=['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december'];
var dt=new Date(p[0],p[1]-1,p[2]);
var dateLabel=weekdays[dt.getDay()]+' '+p[2]+'. '+monthsLower[p[1]-1]+' '+p[0];
document.getElementById('nl-ne-title').textContent=next.title;
document.getElementById('nl-ne-date').textContent=dateLabel;
document.getElementById('nl-ne-venue').textContent=next.venue;
document.getElementById('nl-ne-time').textContent=next.time;
document.getElementById('nl-ne-link').href=next.url;
var banner=document.getElementById('nl-next-event');
function update(){
var diff=target-new Date();
if(diff<=0){
banner.classList.add('nl-event-live');
document.getElementById('nl-ne-eyebrow').textContent='- Lige nu';
['nl-cd-d','nl-cd-h','nl-cd-m','nl-cd-s'].forEach(function(id){document.getElementById(id).textContent='00';});
return;
}
document.getElementById('nl-cd-d').textContent=String(Math.floor(diff/86400000)).padStart(2,'0');
document.getElementById('nl-cd-h').textContent=String(Math.floor((diff%86400000)/3600000)).padStart(2,'0');
document.getElementById('nl-cd-m').textContent=String(Math.floor((diff%3600000)/60000)).padStart(2,'0');
document.getElementById('nl-cd-s').textContent=String(Math.floor((diff%60000)/1000)).padStart(2,'0');
}
update();setInterval(update,1000);
}
var toastTimeout;
function showToast(msg){
var toast=document.getElementById('nl-toast');if(!toast)return;
toast.textContent=msg;toast.classList.add('nl-show');
clearTimeout(toastTimeout);toastTimeout=setTimeout(function(){toast.classList.remove('nl-show');},2400);
}
document.addEventListener('click',function(ev){
var btn=ev.target.closest('.nl-event-share');if(!btn)return;
ev.preventDefault();ev.stopPropagation();
var url=btn.dataset.url,title=btn.dataset.title,text='Tjek dette event hos Norrlyst: '+title;
if(navigator.share){navigator.share({title:title,text:text,url:url}).catch(function(){});}
else if(navigator.clipboard){navigator.clipboard.writeText(url).then(function(){showToast('Link kopieret');}).catch(function(){showToast('Kunne ikke kopiere link');});}
else{window.location.href='mailto:?subject='+encodeURIComponent(title)+'&body='+encodeURIComponent(text+' '+url);}
});
startCountdown();
renderCalendar();
renderEvents();
})();
'+e.title+'
' +''+e.venue+' · '+e.time+'
' +''
+'Læs mere →'
+''
+'