#nkt-ow {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
font-family:"Vialog LT Pro Regular", sans-serif;
padding: 4px 0;
}
#nkt-pill {
display: inline-block;
font-size: .78em;
font-weight: 600;
letter-spacing: .1em;
text-transform: uppercase;
padding: 5px 18px;
border-radius: 99px;
border: 1px solid transparent;
line-height: 1;
}
#nkt-sub {
font-size: .82em;
font-weight: 600;
letter-spacing: .03em;
color: rgba(255,255,255,1);
text-align: center;
min-height: 1.2em;
}
.pill-green { background: rgba(74,222,128,.12); border-color: rgba(74,222,128,.3); color: #4ade80; }
.pill-yellow { background: rgba(196,160,90,.15); border-color: rgba(196,160,90,.4); color: #c4a05a; }
.pill-red { background: rgba(248,113,113,.12); border-color: rgba(248,113,113,.3); color: #f87171; }
.pill-white { background: rgba(255,255,255,.07); border-color: rgba(255,255,255,.2); color: rgba(255,255,255,.75); }
(function () {
// ==== NORMALE ÖFFNUNGSZEITEN ====
var OPEN_DAYS = [2, 3, 4, 5, 6, 0];
var OPEN_TIME = "10:00";
var CLOSE_TIME = "17:00";
var WARN_FROM = "16:00";
var LAST_ENTRY = "16:30";
var DAY_NAMES = ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"];
// ==== SCHLIESSPHASEN (Umbau, Aufbau, etc.) ====
// Einfach neue Einträge hinzufügen/entfernen. Reihenfolge egal.
var CLOSURE_PERIODS = [
{
from: "2026-07-06", // ersten Schließtag eintragen
until: "2026-07-18", // letzten Schließtag (Museum öffnet am Tag danach)
reason: "wegen Umbau der Ausstellung"
}
// Beispiel für weitere Phase:
// { from: "2026-10-01", until: "2026-10-10", reason: "wegen Aufbau der neuen Ausstellung" }
];
var MONTH_NAMES = ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];
function mins(hhmm) {
var p = hhmm.split(":");
return +p[0] * 60 + +p[1];
}
function parseDate(str) {
var p = str.split("-");
return new Date(+p[0], +p[1] - 1, +p[2]);
}
function formatDate(d) {
return d.getDate() + ". " + MONTH_NAMES[d.getMonth()] + (d.getFullYear() !== new Date().getFullYear() ? " " + d.getFullYear() : "");
}
function startOfDay(d) {
var x = new Date(d);
x.setHours(0,0,0,0);
return x;
}
function nextOpenLabel(fromDay) {
for (var i = 1; i <= 7; i++) {
var d = (fromDay + i) % 7;
if (OPEN_DAYS.indexOf(d) !== -1) {
if (i === 1) return "morgen";
if (i === 2) return "übermorgen";
return DAY_NAMES[d];
}
}
return "bald";
}
function findActiveClosure(today) {
for (var i = 0; i = from && today <= until) {
return { period: p, from: from, until: until };
}
}
return null;
}
function findUpcomingClosure(today) {
var closest = null;
for (var i = 0; i today && (!closest || from = open && cur = warn && cur < close) {
pill.className = "pill-yellow";
pill.textContent = "Geöffnet";
sub.textContent = "Letzter Einlass & Kassenschluss " + LAST_ENTRY + " Uhr";
} else if (isOpenDay && cur = close) {
pill.className = "pill-white";
pill.textContent = "Geschlossen";
sub.textContent = "Wir öffnen " + next + " wieder um " + OPEN_TIME + " Uhr";
} else {
pill.className = "pill-red";
pill.textContent = "Heute geschlossen";
sub.textContent = "Nächste Öffnung: " + next + " um " + OPEN_TIME + " Uhr";
}
}
function render() {
var now = new Date();
var today = startOfDay(now);
var active = findActiveClosure(today);
if (active) {
renderClosure(active, today);
return;
}
// Optional: Vorankündigung 1 Tag vorher, falls gewünscht.
// Aktuell nicht aktiv - regulärer Ablauf greift bis zum ersten Schließtag.
renderRegular(now);
}
render();
setInterval(render, 60000);
})();