#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} }
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.

- Næste event

-

- · - · -

Læs mere →
00Dage
00Timer
00Min
00Sek

Champagne & Oysters Midsommar Lunch Vinaften Winemaker's Dinner Torsdagsbar Cocktail Hour Happy Hour
- Kommende events

Hvad sker der nu

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='' +'
'+e.title+'' +''+(TAG_TEXT[e.type]||'Event')+'
' +'
' +''+dateLabel+'' +'

'+e.title+'

' +'

'+e.venue+' · '+e.time+'

' +'
' +'Læs mere →' +'' +'
'; 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(); })();