* { box-sizing: border-box; margin: 0; padding: 0; }

:root {
  /* wood & beer hall */
  --holz:      #201208;
  --holz-2:    #2e1b0e;
  --holz-3:    #3d2614;
  --holz-4:    #4e3419;
  /* beer */
  --bier:      #e8a520;
  --bier-2:    #c8871a;
  --schaum:    #fdf4e0;
  --fg:        #f6ecd8;
  --muted:     #a8937a;
  /* bavarian */
  --blau:      #0b6bb5;
  --blau-2:    #08517f;
  --weiss:     #f4f6f8;
  /* gingerbread heart */
  --herz:      #c1272d;
  --herz-2:    #8e1b20;
  /* loden green */
  --loden:     #4a6b3d;
  --gold:      #d9ad4e;
  --line:      #4a3119;
}

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  background:
    radial-gradient(ellipse at 50% -8%, rgba(232,165,32,0.13), transparent 58%),
    repeating-linear-gradient(92deg, rgba(0,0,0,0.16) 0 2px, transparent 2px 7px),
    var(--holz);
  color: var(--fg);
  line-height: 1.6;
  font-size: 16px;
  padding-bottom: 3rem;
}

.wrap { max-width: 980px; margin: 0 auto; padding: 0 1rem; }

a { color: var(--bier); text-decoration: none; }
a:hover { color: var(--gold); }

.tl-body a, .logi-card a, .w-card a, .stadt-card a, .zelt-card a {
  text-decoration: underline;
  text-decoration-color: rgba(232,165,32,0.4);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}
.tl-body a:hover, .logi-card a:hover { text-decoration-color: var(--bier); }

/* ============ BAVARIAN RAUTEN ============ */
.rauten-band {
  height: 26px;
  background-color: var(--weiss);
  background-image:
    linear-gradient(45deg, var(--blau) 25%, transparent 25%, transparent 75%, var(--blau) 75%),
    linear-gradient(45deg, var(--blau) 25%, transparent 25%, transparent 75%, var(--blau) 75%);
  background-size: 26px 26px;
  background-position: 0 0, 13px 13px;
  border-top: 2px solid rgba(0,0,0,0.35);
  border-bottom: 2px solid rgba(0,0,0,0.35);
}

/* ============ SPLASH ============ */
.splash {
  position: fixed; inset: 0; z-index: 999;
  background: var(--holz);
  display: flex; align-items: center; justify-content: center;
  padding: 1.2rem; overflow: hidden;
}
.splash-rauten {
  position: absolute; inset: -40%;
  background-color: transparent;
  background-image:
    linear-gradient(45deg, rgba(11,107,181,0.16) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.16) 75%),
    linear-gradient(45deg, rgba(11,107,181,0.16) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.16) 75%);
  background-size: 90px 90px;
  background-position: 0 0, 45px 45px;
  animation: drift 60s linear infinite;
}
@keyframes drift { to { transform: translate(90px, 90px); } }
.splash-inner {
  position: relative; width: 100%; max-width: 560px;
  background: linear-gradient(180deg, rgba(46,27,14,0.96), rgba(32,18,8,0.98));
  border: 3px double var(--gold);
  border-radius: 4px;
  padding: 2rem 1.4rem 1.6rem;
  text-align: center;
  box-shadow: 0 30px 70px rgba(0,0,0,0.6);
}
.splash-krone { font-size: 1.6rem; color: var(--gold); line-height: 1; }
.splash-kicker {
  font-family: Copperplate, "Palatino Linotype", Palatino, Georgia, serif;
  font-size: 1.5rem; letter-spacing: 0.4em; color: var(--gold);
  margin: 0.5rem 0 1.1rem; text-transform: uppercase;
}
.splash-boot {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 0.76rem; color: var(--bier); text-align: left;
  white-space: pre-wrap; min-height: 7.2em; line-height: 1.65;
}
.splash-bar {
  height: 5px; background: rgba(255,255,255,0.1); border-radius: 3px;
  overflow: hidden; margin: 1rem 0 0.9rem;
}
.splash-bar span { display: block; height: 100%; width: 0; background: linear-gradient(90deg, var(--bier-2), var(--bier)); transition: width 0.2s linear; }
.splash-frag {
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  padding: 0.8rem 0.4rem; margin-bottom: 0.9rem;
}
.splash-frag-tag { font-size: 0.6rem; letter-spacing: 0.24em; color: var(--blau); font-weight: 800; margin-bottom: 0.35rem; }
.splash-frag-text { font-size: 0.9rem; color: var(--fg); }
.splash-cd {
  font-family: ui-monospace, Menlo, monospace; font-size: 0.82rem;
  color: var(--muted); margin-bottom: 0.9rem; letter-spacing: 0.06em;
}
.splash-enter {
  background: linear-gradient(180deg, var(--bier), var(--bier-2));
  color: #2b1806; border: 0; border-radius: 3px;
  font-size: 1rem; font-weight: 800; letter-spacing: 0.16em;
  padding: 0.8rem 1.8rem; cursor: pointer;
  box-shadow: 0 4px 0 #8f5f10;
}
.splash-enter:active { transform: translateY(2px); box-shadow: 0 2px 0 #8f5f10; }
.splash-skip { font-size: 0.58rem; letter-spacing: 0.2em; color: rgba(168,147,122,0.6); margin-top: 1rem; }

/* ============ COUNTDOWN ============ */
.countdown {
  background:
    radial-gradient(ellipse at center top, rgba(232,165,32,0.2), transparent 70%),
    #160d05;
  padding: 1.1rem 1rem 1.1rem;
  text-align: center;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  position: relative; overflow: hidden;
}
.countdown::before {
  content: ""; position: absolute; inset: 0;
  background: repeating-linear-gradient(90deg, transparent 0 70px, rgba(232,165,32,0.05) 70px 71px);
  pointer-events: none;
}
.countdown-label {
  font-size: 0.66rem; letter-spacing: 0.26em; color: var(--bier);
  margin-bottom: 0.7rem; font-weight: 800; position: relative;
}
.countdown-label::before, .countdown-label::after { content: "❦"; margin: 0 0.6rem; color: rgba(232,165,32,0.5); }
.countdown-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.45rem;
  max-width: 420px; margin: 0 auto; position: relative;
}
.cd-cell {
  background: linear-gradient(180deg, rgba(0,0,0,0.55), rgba(62,38,20,0.5));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.5rem 0.2rem;
}
.cd-num { display: block; font-size: 1.65rem; font-weight: 700; color: var(--schaum); line-height: 1.1; }
.cd-lbl { display: block; font-size: 0.55rem; letter-spacing: 0.2em; color: var(--muted); margin-top: 0.2rem; }
.cd-blink { animation: blink 1s steps(2, start) infinite; }
@keyframes blink { 50% { opacity: 0.45; } }
.countdown-sub { position: relative; font-size: 0.68rem; color: var(--muted); margin-top: 0.8rem; letter-spacing: 0.04em; }

/* ============ HERO ============ */
.hero-body { text-align: center; padding: 2.2rem 1rem 2rem; position: relative; }
.hero-stamp {
  display: inline-block; font-size: 0.6rem; letter-spacing: 0.26em; font-weight: 800;
  color: var(--herz); border: 2px solid var(--herz); border-radius: 3px;
  padding: 0.3rem 0.8rem; transform: rotate(-2deg); margin-bottom: 1.1rem;
}
h1 {
  font-family: Copperplate, "Palatino Linotype", Palatino, Georgia, serif;
  font-size: clamp(2.3rem, 11vw, 4.4rem);
  line-height: 0.94; letter-spacing: 0.02em; text-transform: uppercase;
  background: linear-gradient(180deg, #fbe6ac 0%, var(--bier) 45%, var(--bier-2) 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent; -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 3px 0 rgba(0,0,0,0.55));
}
.h1-small { font-size: 0.3em; letter-spacing: 0.34em; display: inline-block; }
.h1-fest { -webkit-text-fill-color: transparent; }
.jahr { font-size: 0.52em; letter-spacing: 0.22em; }
.hero-sub { color: var(--fg); margin-top: 1rem; font-size: 1.02rem; }
.hero-sub strong { color: var(--bier); }
.hero-crew {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem;
  margin: 1.2rem auto 0; max-width: 620px;
}
.crew-chip {
  font-size: 0.76rem; font-weight: 700; letter-spacing: 0.08em;
  padding: 0.28rem 0.7rem; border-radius: 999px;
  background: rgba(11,107,181,0.2); border: 1px solid rgba(11,107,181,0.55); color: var(--weiss);
}
.crew-chip.jub { background: rgba(193,39,45,0.25); border-color: var(--herz); color: #ffd9d0; }
.hero-note { font-size: 0.8rem; color: var(--muted); margin-top: 1.1rem; font-style: italic; }

/* ============ TABS ============ */
.tabs {
  position: sticky; top: 0; z-index: 50;
  display: flex; gap: 0; overflow-x: auto; -webkit-overflow-scrolling: touch;
  background: linear-gradient(180deg, #1a0f06, #120a04);
  border-bottom: 2px solid var(--gold);
  scrollbar-width: none;
}
.tabs::-webkit-scrollbar { display: none; }
.tabs a {
  flex: 0 0 auto; padding: 0.72rem 0.95rem;
  font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 800; color: var(--muted); white-space: nowrap;
  border-right: 1px solid rgba(74,49,25,0.6);
}
.tabs a:hover, .tabs a.on { color: var(--holz); background: var(--bier); }

/* ============ SECTION HEADS ============ */
section { padding: 2.4rem 0 0.4rem; }
.sec-head { display: flex; align-items: center; justify-content: center; gap: 0.9rem; margin-bottom: 1rem; }
.sec-head .orn { color: var(--gold); font-size: 1rem; }
h2 {
  font-family: Copperplate, "Palatino Linotype", Palatino, Georgia, serif;
  font-size: clamp(1.4rem, 5.5vw, 2rem);
  text-transform: uppercase; letter-spacing: 0.12em; text-align: center;
  color: var(--schaum); text-shadow: 0 2px 0 rgba(0,0,0,0.5);
}
.lead { text-align: center; color: var(--muted); max-width: 720px; margin: 0 auto 1.6rem; font-size: 0.95rem; }
.lead strong { color: var(--fg); }
h3 { font-size: 1rem; color: var(--schaum); margin-bottom: 0.35rem; line-height: 1.4; }
h4 { font-size: 0.92rem; color: var(--bier); margin-bottom: 0.3rem; }
p + p { margin-top: 0.55rem; }

/* ============ STATUSBOARD ============ */
.status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr)); gap: 0.8rem; }
.stat-card {
  background: linear-gradient(180deg, rgba(62,38,20,0.55), rgba(32,18,8,0.7));
  border: 1px solid var(--line); border-left: 4px solid var(--muted);
  border-radius: 3px; padding: 0.9rem 1rem;
}
.stat-card.hot  { border-left-color: var(--herz); }
.stat-card.warm { border-left-color: var(--bier); }
.stat-card.cool { border-left-color: var(--blau); }
.stat-tag { font-size: 0.56rem; letter-spacing: 0.2em; font-weight: 800; color: var(--muted); margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.4rem; }
.led { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.led-hot  { background: var(--herz); box-shadow: 0 0 7px var(--herz); animation: blink 1.4s infinite; }
.led-warm { background: var(--bier); box-shadow: 0 0 7px var(--bier); }
.led-cool { background: var(--blau); box-shadow: 0 0 7px var(--blau); }
.stat-card p { font-size: 0.84rem; color: var(--muted); }
.stat-card p strong { color: var(--fg); }
.stat-when { margin-top: 0.5rem !important; padding-top: 0.5rem; border-top: 1px dashed var(--line); font-size: 0.76rem !important; }

.checklist {
  margin-top: 1.4rem; background: rgba(11,107,181,0.08);
  border: 1px solid rgba(11,107,181,0.3); border-radius: 3px; padding: 1rem 1.1rem;
}
.checklist h3 { margin-bottom: 0.7rem; }
.checklist ul { list-style: none; }
.checklist li {
  padding: 0.45rem 0 0.45rem 2rem; position: relative; cursor: pointer;
  font-size: 0.88rem; border-bottom: 1px dashed rgba(74,49,25,0.6); user-select: none;
}
.checklist li:last-child { border-bottom: 0; }
.checklist li::before {
  content: ""; position: absolute; left: 0; top: 0.55rem;
  width: 15px; height: 15px; border: 2px solid var(--muted); border-radius: 2px;
}
.checklist li.done { color: var(--muted); text-decoration: line-through; }
.checklist li.done::before { content: "✓"; background: var(--loden); border-color: var(--loden); color: #fff; font-size: 11px; line-height: 13px; text-align: center; font-weight: 800; }
.check-note { font-size: 0.7rem; color: var(--muted); margin-top: 0.7rem; font-style: italic; }

/* ============ STAMMTISCH — LEBKUCHENHERZEN ============ */
.herz-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(155px, 1fr)); gap: 0.9rem; }
.herz {
  position: relative; text-align: center; padding: 2.4rem 0.8rem 4.6rem;
  background: linear-gradient(165deg, #b8433f, var(--herz-2));
  /* heart-topped shield: two lobes + a centre dip, tapering to a point */
  clip-path: polygon(
    50% 10%, 60% 2%, 74% 0, 88% 4%, 97% 14%, 100% 28%,
    100% 78%, 50% 100%, 0 78%, 0 28%,
    3% 14%, 12% 4%, 26% 0, 40% 2%
  );
  box-shadow: inset 0 0 0 3px rgba(255,255,255,0.16);
}
.herz::after {
  content: ""; position: absolute; inset: 9% 7% 13%;
  border: 2px dashed rgba(255,255,255,0.4);
  clip-path: polygon(
    50% 10%, 60% 2%, 74% 0, 88% 4%, 97% 14%, 100% 28%,
    100% 78%, 50% 100%, 0 78%, 0 28%,
    3% 14%, 12% 4%, 26% 0, 40% 2%
  );
  pointer-events: none;
}
.herz.jub { background: linear-gradient(165deg, #d7932b, #9c5c0d); }
/* the seventh heart: present, unconfirmed, and deliberately faded */
.herz.ehren {
  background: linear-gradient(165deg, rgba(62,38,20,0.6), rgba(32,18,8,0.78));
  box-shadow: inset 0 0 0 3px rgba(168,147,122,0.18);
  opacity: 0.62;
}
.herz.ehren::after { border-color: rgba(168,147,122,0.3); border-style: dotted; }
.herz.ehren .herz-name { color: rgba(246,236,216,0.8); }
.herz-name {
  font-family: Copperplate, Palatino, Georgia, serif;
  font-size: 1.15rem; letter-spacing: 0.08em; color: #fff7ef;
  text-shadow: 0 2px 3px rgba(0,0,0,0.4); position: relative;
}
.herz-rolle { font-size: 0.63rem; letter-spacing: 0.16em; font-weight: 800; color: rgba(255,255,255,0.9); margin-top: 0.4rem; position: relative; text-transform: uppercase; }
.herz-desc { font-size: 0.72rem; color: rgba(255,255,255,0.85); margin-top: 0.45rem; position: relative; line-height: 1.45; }
.foot-note { text-align: center; font-size: 0.75rem; color: var(--muted); margin-top: 1rem; font-style: italic; }

/* ============ PROGRAM INTRO ============ */
.why-box { background: rgba(62,38,20,0.4); border: 1px solid var(--line); border-radius: 3px; padding: 1.1rem; }
.why-box h3 { text-align: center; margin-bottom: 0.9rem; }
.why-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 0.9rem; }
.why-grid > div { display: flex; gap: 0.7rem; align-items: flex-start; }
.why-n {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  background: var(--bier); color: var(--holz); font-weight: 800; font-size: 0.85rem;
  display: flex; align-items: center; justify-content: center;
}
.why-grid p { font-size: 0.85rem; color: var(--muted); }
.why-grid strong { color: var(--fg); }
.why-warn {
  margin-top: 1rem; padding: 0.8rem 0.9rem; font-size: 0.83rem;
  background: rgba(193,39,45,0.12); border: 1px solid rgba(193,39,45,0.4);
  border-radius: 3px; color: var(--fg);
}

/* ============ DAY / TIMELINE ============ */
.day { padding-top: 2.2rem; }
.day-head { text-align: center; margin-bottom: 1.3rem; }
.day-head h2 {
  display: inline-block; padding: 0.25rem 1.4rem;
  border-top: 2px solid var(--gold); border-bottom: 2px solid var(--gold);
}
.day-sub { font-size: 0.78rem; letter-spacing: 0.18em; color: var(--muted); margin-top: 0.55rem; text-transform: uppercase; }
.prime-day .day-head h2 { border-color: var(--herz); color: #ffd9c9; }

.timeline { position: relative; padding-left: 0; }
.tl-item { display: flex; gap: 0.85rem; padding: 0 0 1.15rem; position: relative; }
.tl-item::before {
  content: ""; position: absolute; left: 31px; top: 1.6rem; bottom: -0.2rem;
  width: 2px; background: linear-gradient(180deg, var(--line), rgba(74,49,25,0.2));
}
.tl-item:last-child::before { display: none; }
.tl-time {
  flex: 0 0 64px; font-family: ui-monospace, Menlo, monospace;
  font-size: 0.82rem; font-weight: 700; color: var(--bier);
  padding-top: 0.05rem; text-align: right; position: relative;
}
.tl-body {
  flex: 1; min-width: 0;
  background: linear-gradient(180deg, rgba(62,38,20,0.38), rgba(32,18,8,0.5));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.75rem 0.9rem;
}
.tl-item.mark .tl-body { border-color: rgba(232,165,32,0.55); background: linear-gradient(180deg, rgba(232,165,32,0.1), rgba(32,18,8,0.55)); }
.tl-item.res .tl-body  { border-color: rgba(11,107,181,0.6); background: linear-gradient(180deg, rgba(11,107,181,0.13), rgba(32,18,8,0.55)); }
.tl-item.stop .tl-body { border-color: rgba(193,39,45,0.5); }
.tl-item.big .tl-body  { border-width: 2px; box-shadow: 0 0 24px rgba(232,165,32,0.16); }
.tl-body p { font-size: 0.86rem; color: var(--muted); }
.tl-body p strong { color: var(--fg); }
.tl-body .tip {
  margin-top: 0.5rem; padding: 0.45rem 0.6rem; font-size: 0.79rem;
  background: rgba(11,107,181,0.12); border-left: 3px solid var(--blau); border-radius: 2px;
}
ul.mini { list-style: none; margin-top: 0.5rem; }
ul.mini li { font-size: 0.83rem; color: var(--muted); padding: 0.4rem 0 0.4rem 1rem; position: relative; border-bottom: 1px dashed rgba(74,49,25,0.5); }
ul.mini li:last-child { border-bottom: 0; }
ul.mini li::before { content: "❦"; position: absolute; left: 0; color: var(--gold); font-size: 0.7rem; }
ul.mini strong { color: var(--bier); }

/* badges */
.badge {
  display: inline-block; font-size: 0.55rem; font-weight: 800; letter-spacing: 0.12em;
  padding: 0.16rem 0.42rem; border-radius: 2px; vertical-align: middle;
  margin-left: 0.25rem; white-space: nowrap;
}
.badge.pris   { background: rgba(232,165,32,0.18); color: var(--bier); border: 1px solid rgba(232,165,32,0.45); }
.badge.gratis { background: rgba(74,107,61,0.3); color: #a9d195; border: 1px solid rgba(74,107,61,0.7); }
.badge.plc    { background: rgba(193,39,45,0.16); color: #f0928c; border: 1px solid rgba(193,39,45,0.5); }
.badge.stjerne{ background: var(--bier); color: var(--holz); }
.badge.tid    { background: rgba(11,107,181,0.2); color: #8cc4ee; border: 1px solid rgba(11,107,181,0.5); }

/* ============ LØRDAG TRACKS ============ */
.warn-box {
  background: rgba(193,39,45,0.12); border: 1px solid rgba(193,39,45,0.45);
  border-radius: 3px; padding: 0.85rem 1rem; font-size: 0.87rem; margin-bottom: 1rem;
}
.warn-box strong { color: #f0928c; }
.track-switch { display: flex; gap: 0.5rem; margin-bottom: 1.2rem; flex-wrap: wrap; }
.track-btn {
  flex: 1 1 220px; padding: 0.6rem 0.7rem; cursor: pointer;
  background: rgba(62,38,20,0.5); border: 1px solid var(--line); border-radius: 3px;
  color: var(--muted); font-size: 0.72rem; font-weight: 800; letter-spacing: 0.08em;
  font-family: inherit;
}
.track-btn.active { background: var(--bier); color: var(--holz); border-color: var(--bier); }
.track-lead { font-size: 0.87rem; color: var(--muted); margin-bottom: 1rem; padding-left: 0.2rem; }
.track-lead strong { color: var(--fg); }

/* ============ KALENDER ============ */
.kal-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 0.3rem; margin-bottom: 0.9rem; }
.kal-day {
  aspect-ratio: 1 / 1.05; border-radius: 3px; padding: 0.25rem;
  background: rgba(62,38,20,0.4); border: 1px solid var(--line);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; position: relative; min-height: 52px;
}
.kal-dow { font-size: 0.5rem; letter-spacing: 0.08em; color: var(--muted); text-transform: uppercase; }
.kal-num { font-size: 1rem; font-weight: 800; color: var(--fg); line-height: 1.1; }
.kal-ic  { font-size: 0.6rem; line-height: 1; margin-top: 0.1rem; }
.kal-day.event { border-color: var(--blau); box-shadow: inset 0 0 0 1px rgba(11,107,181,0.4); }
.kal-day.fam   { border-color: var(--loden); }
/* "our days" must win over the event/family borders when a day is both */
.kal-day.vores { background: linear-gradient(180deg, rgba(232,165,32,0.32), rgba(232,165,32,0.12)); border-color: var(--bier); border-width: 2px; }
.kal-day.vores .kal-num { color: var(--schaum); }
.kal-day.travl::after {
  content: ""; position: absolute; inset: 0; border-radius: 3px;
  background: repeating-linear-gradient(45deg, transparent 0 4px, rgba(193,39,45,0.22) 4px 8px);
  pointer-events: none;
}
.kal-legend { display: flex; flex-wrap: wrap; gap: 0.9rem; justify-content: center; font-size: 0.68rem; color: var(--muted); margin-bottom: 1.6rem; }
.kal-legend .dot { display: inline-block; width: 9px; height: 9px; border-radius: 2px; margin-right: 0.3rem; vertical-align: -1px; }
.dot.vores { background: var(--bier); }
.dot.event { background: var(--blau); }
.dot.fam   { background: var(--loden); }
.dot.travl { background: var(--herz); }

.kal-events h3 { text-align: center; margin-bottom: 1rem; }
.ev-list { display: flex; flex-direction: column; gap: 0.7rem; }
.ev {
  display: flex; gap: 0.9rem; align-items: flex-start;
  background: rgba(62,38,20,0.35); border: 1px solid var(--line);
  border-radius: 3px; padding: 0.8rem 0.9rem;
}
.ev.now { border-color: var(--bier); background: linear-gradient(90deg, rgba(232,165,32,0.15), rgba(32,18,8,0.4)); }
.ev-date {
  flex: 0 0 108px; font-size: 0.72rem; color: var(--muted); line-height: 1.4;
  font-family: ui-monospace, Menlo, monospace; text-align: right;
  border-right: 2px solid var(--line); padding-right: 0.8rem;
}
.ev-date strong { color: var(--bier); }
.ev.now .ev-date { border-right-color: var(--bier); }
.ev-body p { font-size: 0.85rem; color: var(--muted); }
.ev-body strong { color: var(--fg); }

/* ============ ZELTE ============ */
.zelt-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0.75rem; margin-bottom: 1.8rem; }
.zelt-card {
  background: linear-gradient(180deg, rgba(62,38,20,0.5), rgba(32,18,8,0.6));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.85rem 0.95rem;
  border-top: 3px solid var(--gold);
}
.zelt-card.pick { border-top-color: var(--bier); box-shadow: 0 0 18px rgba(232,165,32,0.14); }
.zelt-head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.4rem; }
.zelt-name { font-family: Copperplate, Palatino, Georgia, serif; font-size: 0.97rem; letter-spacing: 0.05em; color: var(--schaum); }
.zelt-cap { font-size: 0.62rem; color: var(--muted); font-family: ui-monospace, Menlo, monospace; white-space: nowrap; }
.zelt-card p { font-size: 0.82rem; color: var(--muted); }
.zelt-tags { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.55rem; }
.ztag { font-size: 0.55rem; letter-spacing: 0.1em; font-weight: 800; padding: 0.14rem 0.4rem; border-radius: 2px; background: rgba(11,107,181,0.22); color: #9ccbef; border: 1px solid rgba(11,107,181,0.4); }
.ztag.g { background: rgba(232,165,32,0.18); color: var(--bier); border-color: rgba(232,165,32,0.45); }
.ztag.h { background: rgba(216,35,42,0.16); color: #f0a9a3; border-color: rgba(216,35,42,0.45); }

.res-box { background: rgba(11,107,181,0.07); border: 1px solid rgba(11,107,181,0.3); border-radius: 3px; padding: 1.1rem; }
.res-box h3 { text-align: center; margin-bottom: 1rem; }
.res-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(235px, 1fr)); gap: 0.8rem; }
.res-card { background: rgba(32,18,8,0.5); border: 1px solid var(--line); border-left: 3px solid var(--blau); border-radius: 3px; padding: 0.75rem 0.85rem; }
.res-card.warn   { border-left-color: var(--bier); }
.res-card.good   { border-left-color: var(--loden); }
.res-card.danger { border-left-color: var(--herz); }
.res-card p { font-size: 0.82rem; color: var(--muted); }
.res-card strong { color: var(--fg); }

/* ============ STADT ============ */
.filter-row { display: flex; flex-wrap: wrap; gap: 0.4rem; justify-content: center; margin-bottom: 1.2rem; }
.fbtn {
  padding: 0.35rem 0.8rem; cursor: pointer; font-family: inherit;
  background: rgba(62,38,20,0.5); border: 1px solid var(--line); border-radius: 999px;
  color: var(--muted); font-size: 0.7rem; font-weight: 700; letter-spacing: 0.06em;
}
.fbtn.active { background: var(--bier); color: var(--holz); border-color: var(--bier); }
.stadt-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(245px, 1fr)); gap: 0.8rem; }
.stadt-card {
  background: linear-gradient(180deg, rgba(62,38,20,0.45), rgba(32,18,8,0.6));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.85rem 0.95rem;
  display: flex; flex-direction: column;
}
.stadt-card.top { border-color: rgba(232,165,32,0.55); }
.sc-icon { font-size: 1.3rem; line-height: 1; margin-bottom: 0.4rem; }
.stadt-card h4 { font-size: 0.95rem; color: var(--schaum); }
.sc-meta { font-size: 0.62rem; color: var(--muted); font-family: ui-monospace, Menlo, monospace; margin-bottom: 0.45rem; letter-spacing: 0.04em; }
.stadt-card p { font-size: 0.83rem; color: var(--muted); flex: 1; }
.sc-link { margin-top: 0.6rem; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; }

/* ============ WISSEN ============ */
.wissen-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(255px, 1fr)); gap: 0.8rem; }
.w-card {
  background: linear-gradient(180deg, rgba(62,38,20,0.45), rgba(32,18,8,0.6));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.9rem 1rem;
}
.w-card p { font-size: 0.85rem; color: var(--muted); }
.w-card strong { color: var(--fg); }
.w-card em { color: var(--bier); font-style: italic; }
.w-card.sprog { grid-column: 1 / -1; }
.sprog-tabel { width: 100%; border-collapse: collapse; margin-top: 0.5rem; }
.sprog-tabel td { padding: 0.38rem 0.5rem; font-size: 0.83rem; border-bottom: 1px dashed rgba(74,49,25,0.6); color: var(--muted); }
.sprog-tabel td:first-child { width: 42%; color: var(--bier); }
.sprog-tabel td strong { color: var(--bier); }
.sprog-tabel tr:last-child td { border-bottom: 0; }

/* ============ HOFF ============ */
.hoff-box {
  background: linear-gradient(180deg, rgba(11,107,181,0.14), rgba(32,18,8,0.6));
  border: 2px dashed rgba(11,107,181,0.55); border-radius: 4px; padding: 1.2rem;
}
.hoff-lead { font-size: 1.02rem; color: var(--schaum); text-align: center; font-style: italic; margin-bottom: 0.6rem; }
.hoff-box > p { font-size: 0.88rem; color: var(--muted); text-align: center; }
.hoff-list { list-style: none; counter-reset: h; margin: 1rem 0 0.8rem; }
.hoff-list li {
  counter-increment: h; position: relative; padding: 0.55rem 0 0.55rem 2.2rem;
  font-size: 0.86rem; color: var(--muted); border-bottom: 1px dashed rgba(74,49,25,0.6);
}
.hoff-list li:last-child { border-bottom: 0; }
.hoff-list li::before {
  content: counter(h); position: absolute; left: 0; top: 0.55rem;
  width: 20px; height: 20px; border-radius: 50%; background: var(--blau); color: #fff;
  font-size: 0.7rem; font-weight: 800; display: flex; align-items: center; justify-content: center;
}
.hoff-list strong { color: var(--fg); }
.hoff-foot { font-size: 0.7rem; color: var(--muted); text-align: center; font-style: italic; opacity: 0.75; }

/* ============ LOGISTIK ============ */
.logi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(265px, 1fr)); gap: 0.8rem; }
.logi-card {
  background: linear-gradient(180deg, rgba(62,38,20,0.45), rgba(32,18,8,0.6));
  border: 1px solid var(--line); border-radius: 3px; padding: 0.95rem 1rem;
}
.logi-card.wide { grid-column: 1 / -1; }
.logi-card p { font-size: 0.85rem; color: var(--muted); }
.logi-card strong { color: var(--fg); }
.logi-card .tip {
  margin-top: 0.6rem; padding: 0.45rem 0.6rem; font-size: 0.79rem;
  background: rgba(11,107,181,0.12); border-left: 3px solid var(--blau); border-radius: 2px;
}
.hotel-tip {
  background: rgba(232,165,32,0.12); border-left: 3px solid var(--bier);
  padding: 0.5rem 0.7rem; border-radius: 2px; margin: 0.7rem 0 1rem !important;
}
.hotel-opt { border: 1px solid var(--line); border-radius: 3px; padding: 0.8rem 0.9rem; margin-top: 0.7rem; background: rgba(32,18,8,0.45); }
.hotel-opt.best { border-color: var(--bier); background: rgba(232,165,32,0.07); }
.hotel-opt.warn { border-color: rgba(193,39,45,0.45); background: rgba(193,39,45,0.06); }
.hopt-tag { font-size: 0.55rem; letter-spacing: 0.2em; font-weight: 800; color: var(--holz); background: var(--bier); display: inline-block; padding: 0.15rem 0.45rem; border-radius: 2px; margin-bottom: 0.4rem; }
.hopt-why { font-size: 0.79rem !important; font-style: italic; padding-top: 0.5rem; border-top: 1px dashed var(--line); margin-top: 0.5rem !important; }

.budget { width: 100%; border-collapse: collapse; margin-top: 0.5rem; }
.budget td { padding: 0.36rem 0; font-size: 0.82rem; color: var(--muted); border-bottom: 1px dashed rgba(74,49,25,0.6); }
.budget td:last-child { text-align: right; font-family: ui-monospace, Menlo, monospace; color: var(--fg); white-space: nowrap; }
.budget tr.sum td { border-bottom: 0; border-top: 2px solid var(--bier); padding-top: 0.6rem; color: var(--bier); font-weight: 700; }
.budget tr.sum td strong { color: var(--bier); }

/* ============ HEIMWEG ============ */
.heimweg { background: linear-gradient(180deg, rgba(193,39,45,0.07), transparent); }
.panic-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(245px, 1fr)); gap: 0.8rem; }
.panic-card {
  background: rgba(32,18,8,0.65); border: 1px solid rgba(193,39,45,0.35);
  border-radius: 3px; padding: 0.9rem 1rem; position: relative;
}
.panic-n {
  position: absolute; top: -10px; left: 12px;
  width: 24px; height: 24px; border-radius: 50%; background: var(--herz); color: #fff;
  font-weight: 800; font-size: 0.8rem; display: flex; align-items: center; justify-content: center;
}
.panic-card h3 { margin-top: 0.5rem; font-size: 0.92rem; }
.panic-card p { font-size: 0.83rem; color: var(--muted); }
.panic-card strong { color: var(--fg); }
.big-answer {
  font-family: Copperplate, Palatino, Georgia, serif;
  font-size: 1.05rem !important; color: var(--bier) !important;
  letter-spacing: 0.04em; margin: 0.4rem 0 0.5rem !important; line-height: 1.35;
}

/* ============ ROULETTE ============ */
.roulette { text-align: center; }
.roul-row { display: flex; flex-wrap: wrap; gap: 0.5rem; justify-content: center; margin-bottom: 1rem; }
.roul-btn {
  padding: 0.6rem 1.1rem; cursor: pointer; font-family: inherit;
  background: linear-gradient(180deg, rgba(62,38,20,0.7), rgba(32,18,8,0.8));
  border: 1px solid var(--gold); border-radius: 3px;
  color: var(--bier); font-size: 0.8rem; font-weight: 700; letter-spacing: 0.06em;
}
.roul-btn:hover { background: var(--bier); color: var(--holz); }
.roul-out {
  max-width: 620px; margin: 0 auto; min-height: 4.5rem;
  display: flex; align-items: center; justify-content: center;
  background: rgba(32,18,8,0.6); border: 2px double var(--gold); border-radius: 3px;
  padding: 1rem 1.2rem; font-size: 1rem; color: var(--schaum);
  font-family: Copperplate, Palatino, Georgia, serif; letter-spacing: 0.03em;
}

/* ============ GUTSCHEIN ============ */
.gutschein { text-align: center; }
.print-btn {
  padding: 0.65rem 1.4rem; cursor: pointer; font-family: inherit; margin-bottom: 1.4rem;
  background: linear-gradient(180deg, var(--bier), var(--bier-2)); color: var(--holz);
  border: 0; border-radius: 3px; font-size: 0.85rem; font-weight: 800; letter-spacing: 0.12em;
  box-shadow: 0 4px 0 #8f5f10;
}
.print-btn:active { transform: translateY(2px); box-shadow: 0 2px 0 #8f5f10; }

.gs-card { max-width: 560px; margin: 0 auto; }
.print-note {
  font-size: 0.72rem; color: var(--muted); font-style: italic;
  max-width: 460px; margin: -0.8rem auto 1.4rem; line-height: 1.5;
}
/* back of the certificate — reuses every .gs-* rule, only spacing + stamp differ */
.gs-rueck { margin-top: 1.6rem; }
.gs-rueck .gs-top { letter-spacing: 0.34em; }
.gs-stamp-hoff {
  right: auto; left: 10px; transform: rotate(12deg);
  font-size: 0.6rem; letter-spacing: 0.1em;
}
.gs-border {
  position: relative; background: #fbf3e2; border: 3px double var(--herz-2);
  border-radius: 3px; padding: 10px; box-shadow: 0 18px 44px rgba(0,0,0,0.5);
}
.gs-rauten {
  position: absolute; inset: 0; border-radius: 3px; pointer-events: none;
  background-color: transparent;
  background-image:
    linear-gradient(45deg, rgba(11,107,181,0.07) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.07) 75%),
    linear-gradient(45deg, rgba(11,107,181,0.07) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.07) 75%);
  background-size: 34px 34px; background-position: 0 0, 17px 17px;
}
.gs-inner {
  position: relative; border: 1px solid rgba(142,27,32,0.4);
  padding: 1.6rem 1.2rem 1.4rem; color: #3a2412; text-align: center;
}
.gs-top {
  font-family: Copperplate, Palatino, Georgia, serif;
  font-size: 1.5rem; letter-spacing: 0.42em; color: var(--herz-2); text-transform: uppercase;
}
.gs-orn { color: var(--gold); font-size: 0.8rem; letter-spacing: 0.5em; margin: 0.4rem 0 0.9rem; }
.gs-for { font-family: Copperplate, Palatino, Georgia, serif; font-size: 1.05rem; color: #5a3a1e; letter-spacing: 0.1em; }
.gs-for span { display: block; font-size: 2.3rem; color: var(--herz); letter-spacing: 0.14em; line-height: 1.15; margin-top: 0.2rem; }
.gs-anlass { font-size: 0.9rem; color: #6b4a2a; letter-spacing: 0.1em; margin-top: 0.25rem; font-style: italic; }
.gs-rule { height: 2px; background: linear-gradient(90deg, transparent, var(--gold), transparent); margin: 1.1rem 0; }
.gs-body { font-size: 0.92rem; color: #4a3018; line-height: 1.65; }
.gs-body strong { color: var(--herz); }
.gs-body.big { font-family: Copperplate, Palatino, Georgia, serif; font-size: 1.2rem; color: var(--herz-2); margin-top: 0.6rem; letter-spacing: 0.02em; }
.gs-facts { display: grid; gap: 0.55rem; text-align: left; max-width: 380px; margin: 0 auto; }
.gs-facts > div { display: grid; grid-template-columns: 92px 1fr; gap: 0.6rem; align-items: baseline; }
.gs-facts span { font-size: 0.55rem; letter-spacing: 0.14em; font-weight: 800; color: #9a7346; }
.gs-facts strong { font-size: 0.85rem; color: #3a2412; font-weight: 700; line-height: 1.4; }
.gs-sign { font-family: Copperplate, Palatino, Georgia, serif; font-size: 0.95rem; color: #5a3a1e; line-height: 1.7; }
.gs-sign em { color: var(--herz); }
.gs-stamp {
  position: absolute; right: 10px; bottom: 6px;
  font-family: Copperplate, Palatino, Georgia, serif; font-size: 0.78rem; font-weight: 800;
  letter-spacing: 0.14em; line-height: 1.15; text-align: center;
  color: rgba(193,39,45,0.75); border: 3px double rgba(193,39,45,0.6);
  border-radius: 50%; width: 82px; height: 82px;
  display: flex; align-items: center; justify-content: center;
  transform: rotate(-14deg);
}

/* ============ FOOTER ============ */
footer { margin-top: 3rem; text-align: center; }
footer .rauten-band { margin-bottom: 1.4rem; }
.f-main { font-family: Copperplate, Palatino, Georgia, serif; font-size: 0.78rem; letter-spacing: 0.16em; color: var(--bier); }
.f-sub { font-size: 0.76rem; color: var(--muted); margin-top: 0.5rem; }
.f-note { font-size: 0.68rem; color: rgba(168,147,122,0.7); margin-top: 0.9rem; max-width: 620px; margin-left: auto; margin-right: auto; font-style: italic; }
.f-prost { font-size: 0.95rem; color: var(--gold); margin-top: 1.2rem; font-family: Copperplate, Palatino, Georgia, serif; letter-spacing: 0.1em; }
.f-zaehler {
  display: inline-block; margin-top: 1.1rem; padding: 0.32rem 0.95rem;
  background: rgba(32,18,8,0.6); border: 1px solid var(--gold); border-radius: 2px;
  font-family: Copperplate, Palatino, Georgia, serif;
  font-size: 0.72rem; letter-spacing: 0.14em; color: var(--bier);
}
.f-zaehler-note {
  font-size: 0.66rem; color: rgba(168,147,122,0.75); font-style: italic;
  max-width: 520px; margin: 0.45rem auto 0; line-height: 1.55;
}
.f-links { font-size: 0.68rem; color: var(--muted); margin-top: 0.8rem; line-height: 1.9; }
.f-links a { color: var(--bier); text-decoration: none; border-bottom: 1px dotted rgba(232,165,32,0.45); }
.f-links a:hover { color: var(--gold); border-bottom-color: var(--gold); }
.f-kolofon {
  font-size: 0.66rem; color: rgba(168,147,122,0.7); font-style: italic;
  max-width: 480px; margin: 0.7rem auto 0; line-height: 1.55;
}
.f-paragraf {
  font-family: Copperplate, Palatino, Georgia, serif;
  font-size: 0.68rem; letter-spacing: 0.06em; color: var(--gold);
  max-width: 520px; margin: 1.1rem auto 0; line-height: 1.6;
  border-top: 1px solid var(--line); padding-top: 0.9rem;
}
.hoff-modus {
  margin-top: 1.1rem; padding: 0.4rem 1rem; cursor: pointer; font-family: ui-monospace, Menlo, monospace;
  background: rgba(32,18,8,0.7); border: 1px solid var(--herz); border-radius: 2px;
  color: #f0a9a3; font-size: 0.64rem; font-weight: 700; letter-spacing: 0.18em;
}
.hoff-modus:hover { background: var(--herz); color: #fff; }
.hoff-modus[aria-pressed="false"] { border-color: var(--line); color: var(--muted); }
.hoff-modus[aria-pressed="false"]:hover { background: rgba(62,38,20,0.8); color: var(--fg); }

/* ============ RESPONSIVE ============ */
@media (max-width: 640px) {
  .kal-grid { grid-template-columns: repeat(4, 1fr); }
  /* a wrapping h2 fills the flex line, stranding the ornaments at the edges */
  .sec-head .orn { display: none; }
  .ev { flex-direction: column; gap: 0.5rem; }
  .ev-date { text-align: left; border-right: 0; border-left: 3px solid var(--line); padding-right: 0; padding-left: 0.7rem; flex: none; }
  .ev.now .ev-date { border-left-color: var(--bier); border-right-color: transparent; }
  .tl-time { flex: 0 0 50px; font-size: 0.75rem; }
  .tl-item::before { left: 24px; }
  .gs-facts > div { grid-template-columns: 1fr; gap: 0.1rem; }
  .gs-stamp { width: 64px; height: 64px; font-size: 0.62rem; }
  .gs-stamp-hoff { font-size: 0.47rem; }
  .gs-for span { font-size: 1.8rem; }
  .herz-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ============ PRINT — kun gavebeviset ============ */
@media print {
  body { background: #fff !important; color: #000; padding: 0; }
  body > *:not(#gutschein) { display: none !important; }
  #gutschein { padding: 0; }
  #gutschein .sec-head, #gutschein .lead, #gutschein .print-btn { display: none !important; }
  #gutschein .wrap { padding: 0; max-width: none; }
  .gs-card { max-width: 100%; }
  #gutschein .print-note { display: none !important; }
  /* the annex is page two — the gift itself must be printable alone */
  .gs-rueck { margin-top: 0; break-before: page; page-break-before: always; }
  /* browsers drop background colours when printing unless told otherwise —
     without this the cream card and the Rauten come out plain white */
  .gs-border, .gs-rauten, .gs-inner {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  .gs-border { box-shadow: none; border-color: #8e1b20; }
  .gs-rauten { background-image:
    linear-gradient(45deg, rgba(11,107,181,0.10) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.10) 75%),
    linear-gradient(45deg, rgba(11,107,181,0.10) 25%, transparent 25%, transparent 75%, rgba(11,107,181,0.10) 75%); }
  @page { margin: 14mm; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}


/* ============================================================
   HOFF — grafiske elementer. Alle klasser er prefixet hoff-.
   ============================================================ */

/* ============ KITT-SCANNER — HOFF-BÅNDET UNDER URET ============
   Ét rødt lys, én gitter-maske, nul JavaScript i selve sweepet.
   Hele båndet er linket. Alt dekorativt indhold er pointer-events: none,
   så klik falder igennem til <a> uanset hvor man rammer. */
.hoff-scanner {
  --hoff-rot: #ff3123;
  display: block; position: relative; overflow: hidden;
  padding: 0.5rem 0 0.45rem;
  background: linear-gradient(180deg, #160d05, #0c0603);
  border-top: 1px solid rgba(0, 0, 0, 0.5);
  border-bottom: 1px solid rgba(217, 173, 78, 0.22);
  color: var(--muted);
  text-decoration: none;
  pointer-events: auto;
  -webkit-tap-highlight-color: transparent;
}
.hoff-scanner:hover { color: var(--bier); }
.hoff-scanner:focus-visible { outline: 2px solid var(--gold); outline-offset: -3px; }

/* the housing — full bleed, like the Rauten band above it */
.hoff-scanner-bar {
  position: relative; display: block; overflow: hidden;
  height: 17px;
  background: radial-gradient(ellipse at 50% 50%, #1a0b06, #070302 72%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.05),
    inset 0 -1px 0 rgba(0, 0, 0, 0.9),
    0 1px 6px rgba(0, 0, 0, 0.55);
  pointer-events: none;
}

/* the light. Travel = (100% - width) / width, expressed in its own width. */
.hoff-scanner-beam {
  position: absolute; top: -45%; bottom: -45%; left: 0; width: 30%;
  background: radial-gradient(closest-side ellipse at 50% 50%,
    var(--hoff-rot) 0%, rgba(255, 49, 35, 0.6) 42%, rgba(193, 39, 45, 0) 100%);
  animation: hoff-sweep 1.2s ease-in-out infinite alternate;
  will-change: transform;
}
.hoff-scanner-beam::after {
  content: ""; position: absolute; top: 50%; left: 50%;
  width: 30%; height: 44%; border-radius: 50%;
  transform: translate(-50%, -50%);
  background: radial-gradient(closest-side ellipse at 50% 50%,
    #fff1ed 0%, var(--hoff-rot) 55%, rgba(255, 49, 35, 0) 100%);
}
@keyframes hoff-sweep {
  from { transform: translateX(0); }
  to   { transform: translateX(233.333%); }
}

/* the grille the light sits behind */
.hoff-scanner-grille {
  position: absolute; inset: 0; pointer-events: none;
  background:
    repeating-linear-gradient(90deg, rgba(4, 2, 1, 0.94) 0 2px, rgba(4, 2, 1, 0) 2px 6px),
    linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(0, 0, 0, 0.5));
}

/* caption row — kept inside the same 980px column as .wrap */
.hoff-scanner-foot {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 0.3rem 0.8rem;
  max-width: 980px; margin: 0.42rem auto 0; padding: 0 1rem;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 0.53rem; font-weight: 700; letter-spacing: 0.19em; line-height: 1.5;
  text-transform: uppercase;
  pointer-events: none;
}
.hoff-scanner-name {
  display: inline-flex; align-items: center; gap: 0.4rem;
  color: rgba(168, 147, 122, 0.75);
}
.hoff-scanner-led {
  flex: 0 0 auto; width: 5px; height: 5px; border-radius: 50%;
  background: var(--herz); box-shadow: 0 0 6px var(--herz);
  animation: hoff-led 1.6s steps(2, start) infinite;
}
@keyframes hoff-led { 50% { opacity: 0.25; } }
.hoff-scanner-status { color: var(--bier); }
.hoff-scanner-status::after { content: " \2192"; color: var(--gold); }
.hoff-scanner:hover .hoff-scanner-status { color: var(--schaum); }

@media (min-width: 720px) {
  .hoff-scanner-bar { height: 20px; }
  .hoff-scanner-beam { width: 18%; animation-name: hoff-sweep-breit; }
  .hoff-scanner-foot { font-size: 0.56rem; }
}
@keyframes hoff-sweep-breit {
  from { transform: translateX(0); }
  to   { transform: translateX(455.556%); }
}

/* park the light in the middle and hold it there */
@media (prefers-reduced-motion: reduce) {
  .hoff-scanner-beam { transform: translateX(116.667%); }
  .hoff-scanner-led  { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) and (min-width: 720px) {
  .hoff-scanner-beam { transform: translateX(227.778%); }
}

/* the band is screen furniture — the Gutschein print stays untouched */
@media print { .hoff-scanner { display: none !important; } }

/* ============ KITT — DRIVE-BY ============
   En sort Trans Am kører forbi i bunden af skærmen hvert 40.-70. sekund.
   Banen er fixed og pointer-events:none — kun selve den optegnede bil
   og etiketten kan klikkes, alt andet går lige igennem til siden.     */
.hoff-kitt-road {
  position: fixed; left: 0; right: 0; bottom: 0;
  height: 124px;
  height: calc(124px + env(safe-area-inset-bottom, 0px));
  z-index: 40;                 /* under .tabs (50) og under splash (999) */
  overflow: hidden;            /* bilen må aldrig give vandret scroll */
  pointer-events: none;
}
.hoff-kitt {
  position: absolute; left: 0;
  bottom: 2px;
  bottom: calc(2px + env(safe-area-inset-bottom, 0px));
  display: none;
  width: 212px;
  text-decoration: none;
  pointer-events: none;
  transform: translateX(-260px);
  animation-timing-function: linear;
  animation-fill-mode: both;
  will-change: transform;
}
.hoff-kitt.is-on { display: block; }

.hoff-kitt-svg {
  display: block; width: 100%; height: auto;
  pointer-events: none;
  overflow: visible;
}
/* kun de optegnede flader er klikbare */
.hoff-kitt-hit { pointer-events: visiblePainted; cursor: pointer; }
.hoff-kitt.is-ltr .hoff-kitt-svg { transform: scaleX(-1); }

.hoff-kitt-tag {
  position: absolute; left: 50%; bottom: 100%;
  transform: translateX(-50%);
  margin-bottom: -6px;
  pointer-events: auto; cursor: pointer;
  white-space: nowrap;
  font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: 0.5rem; font-weight: 700; letter-spacing: 0.16em;
  line-height: 1.5;
  color: var(--bier);
  background: var(--holz);
  border: 1px solid rgba(232, 165, 32, 0.32);
  border-radius: 2px;
  padding: 0.1rem 0.4rem;
}
.hoff-kitt:hover .hoff-kitt-tag,
.hoff-kitt:focus-visible .hoff-kitt-tag { color: var(--gold); border-color: var(--gold); }

/* scanneren: rød stribe der fejer frem og tilbage i næsen */
.hoff-kitt-beam {
  animation: hoff-kitt-scan 1.3s ease-in-out infinite;
  filter: drop-shadow(0 0 2px var(--herz)) drop-shadow(0 0 6px var(--herz));
}
@keyframes hoff-kitt-scan {
  0%, 100% { transform: translateX(-7px); }
  50%      { transform: translateX(7px); }
}

/* køreturen — 100vw er altid bredere end banen, så den forsvinder helt ud */
@keyframes hoff-kitt-rtl {           /* højre → venstre, bilen vender som tegnet */
  from { transform: translateX(100vw); }
  to   { transform: translateX(-260px); }
}
@keyframes hoff-kitt-ltr {           /* venstre → højre, svg'en er spejlvendt */
  from { transform: translateX(-260px); }
  to   { transform: translateX(100vw); }
}

@media (max-width: 560px) {
  .hoff-kitt-road { height: 96px; height: calc(96px + env(safe-area-inset-bottom, 0px)); }
  .hoff-kitt { width: 150px; }
  .hoff-kitt-tag { font-size: 0.44rem; letter-spacing: 0.12em; }
}

/* Uden animation kører den ikke — så holder den stille i venstre side i stedet,
   og fartstriberne slukkes. (style.css slår selv al animation fra ved reduce,
   og initKitt() sætter .is-parked i stedet for at starte køreturen.) */
.hoff-kitt.is-parked { transform: translateX(4vw); }
.hoff-kitt.is-parked .hoff-kitt-wind { opacity: 0; }

/* ============ BAYWATCH-LÄUFER I ZEITLUPE ============ */
/* Fixed bånd i bunden. overflow:hidden holder løberen inde, så han aldrig
   skaber vandret scroll; pointer-events:none gør båndet gennemsigtigt for
   museklik — kun selve <a>'et kan rammes. */
.hoff-bay {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  height: 108px;
  padding-bottom: env(safe-area-inset-bottom, 0px);
  overflow: hidden;
  pointer-events: none;
  z-index: 40; /* under .tabs (50), over indholdet */
}

.hoff-laeufer {
  --hoff-takt: 5.2s;  /* ét skridt — ca. 7x langsommere end en rigtig løber */
  --hoff-lauf: 82s;   /* én passage fra kant til kant */
  position: absolute; left: 0; bottom: 0;
  display: flex; flex-direction: column; align-items: center;
  width: 124px;
  text-decoration: none;
  pointer-events: auto;
  visibility: hidden;
  transform: translate3d(-170px, 0, 0);
  will-change: transform;
}

.hoff-laeufer.hoff-run {
  visibility: visible;
  animation: hoff-cross var(--hoff-lauf) linear 1 both;
}

@keyframes hoff-cross {
  from { transform: translate3d(-170px, 0, 0); }
  to   { transform: translate3d(calc(100vw + 40px), 0, 0); }
}

.hoff-laeufer-tag {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 0.48rem; font-weight: 700; letter-spacing: 0.2em;
  color: var(--gold); opacity: 0.5; white-space: nowrap;
  text-transform: uppercase; margin-bottom: 3px;
}

.hoff-laeufer-bob { display: block; }
.hoff-laeufer.hoff-run .hoff-laeufer-bob {
  animation: hoff-bob calc(var(--hoff-takt) / 2) ease-in-out infinite;
}
@keyframes hoff-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }

.hoff-laeufer-svg { display: block; width: 86px; height: auto; opacity: 0.88; }

/* transform-box:view-box gør inline transform-origin på SVG-grupperne
   entydig — hver lem drejer om sit eget led i viewBox-koordinater. */
.hoff-anim { transform-box: view-box; }
.hoff-fern { opacity: 0.55; } /* lemmerne på den fjerne side */

.hoff-laeufer.hoff-run .hoff-hip-a  { animation: hoff-hip   var(--hoff-takt) ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-hip-b  { animation: hoff-hip   var(--hoff-takt) ease-in-out infinite; animation-delay: calc(var(--hoff-takt) / -2); }
.hoff-laeufer.hoff-run .hoff-knee-a { animation: hoff-knee  var(--hoff-takt) ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-knee-b { animation: hoff-knee  var(--hoff-takt) ease-in-out infinite; animation-delay: calc(var(--hoff-takt) / -2); }
.hoff-laeufer.hoff-run .hoff-arm-b  { animation: hoff-arm   var(--hoff-takt) ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-carry  { animation: hoff-carry var(--hoff-takt) ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-kopf   { animation: hoff-kopf  calc(var(--hoff-takt) / 2) ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-haar   { animation: hoff-haar  6.6s ease-in-out infinite; }
.hoff-laeufer.hoff-run .hoff-seil   { animation: hoff-seil  6.6s ease-in-out infinite; }

@keyframes hoff-hip   { 0% { transform: rotate(-30deg); } 50% { transform: rotate(26deg); } 100% { transform: rotate(-30deg); } }
@keyframes hoff-knee  { 0% { transform: rotate(6deg); } 22% { transform: rotate(44deg); } 50% { transform: rotate(10deg); } 74% { transform: rotate(26deg); } 100% { transform: rotate(6deg); } }
@keyframes hoff-arm   { 0% { transform: rotate(26deg); } 50% { transform: rotate(-22deg); } 100% { transform: rotate(26deg); } }
@keyframes hoff-carry { 0%, 100% { transform: rotate(-4deg); } 50% { transform: rotate(5deg); } }
@keyframes hoff-kopf  { 0%, 100% { transform: rotate(2deg); } 50% { transform: rotate(-2deg); } }
@keyframes hoff-haar  { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(7deg); } }
@keyframes hoff-seil  { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(7deg); } }

/* Fryser hele figuren under markøren, så man kan nå at klikke.
   .hoff-run i selektoren er nødvendig: uden den taber hover-reglen
   specificitetskampen mod lem-animationerne ovenfor. */
.hoff-laeufer.hoff-run:hover,
.hoff-laeufer.hoff-run:focus-visible,
.hoff-laeufer.hoff-run:hover *,
.hoff-laeufer.hoff-run:focus-visible * { animation-play-state: paused; }
.hoff-laeufer:hover .hoff-laeufer-tag,
.hoff-laeufer:focus-visible .hoff-laeufer-tag { opacity: 1; color: var(--bier); }
.hoff-laeufer:hover .hoff-laeufer-svg,
.hoff-laeufer:focus-visible .hoff-laeufer-svg { opacity: 1; }
.hoff-laeufer:focus-visible { outline: 2px solid var(--gold); outline-offset: 4px; border-radius: 4px; }

@media (min-width: 641px) {
  .hoff-bay { height: 142px; }
  .hoff-laeufer { width: 150px; }
  .hoff-laeufer-svg { width: 120px; }
  .hoff-laeufer-tag { font-size: 0.55rem; }
}

/* Ingen bevægelse: han parkerer i venstre hjørne og bliver stående. */
@media (prefers-reduced-motion: reduce) {
  .hoff-bay { height: 80px; }
  .hoff-laeufer {
    left: 0.7rem; width: auto; align-items: flex-start;
    transform: none !important;
  }
  .hoff-laeufer-svg { width: 60px; opacity: 1; }
  .hoff-laeufer, .hoff-laeufer * { animation: none !important; }
  .hoff-laeufer.hoff-park { visibility: visible; opacity: 0.55; }
}

@media print { .hoff-bay { display: none !important; } }

/* ============ SVÆVENDE HOFF-HOVEDER ============ */
/* Dekorativt lag: silhuetter der stiger op gennem skærmen som bobler og
   forsvinder. Beholderen æder aldrig klik — kun selve den tegnede silhuet
   er klikbar, så tekst og links nedenunder virker som før. */
.hoff-blasen {
  position: fixed; inset: 0; z-index: 20;   /* under den klæbende nav (z-index 50) */
  overflow: hidden;                          /* ingen vandret scroll, uanset sving */
  pointer-events: none;
}

.hoff-blase {
  position: absolute; top: 0; left: 0;
  width: 54px;
  pointer-events: none;
  will-change: transform, opacity;
  animation: hoff-auf var(--hoff-dauer, 18s) linear forwards;
}

.hoff-kopf {
  display: block; width: 100%; height: auto;
  pointer-events: none;                      /* den gennemsigtige kasse fanger ikke klik */
  opacity: var(--hoff-deck, 0.16);
  transition: opacity 0.25s ease, filter 0.25s ease;
  animation: hoff-wiegen var(--hoff-wiege, 5s) ease-in-out infinite alternate;
}
.hoff-kopf g { pointer-events: auto; cursor: pointer; }   /* kun det malede rammer */

.hoff-blase:hover .hoff-kopf,
.hoff-blase:focus .hoff-kopf {
  opacity: 0.92;
  filter: drop-shadow(0 2px 10px rgba(0, 0, 0, 0.6));
}

.hoff-fyll   { fill: currentColor; }
.hoff-dunkel { fill: var(--holz); }
.hoff-linie  {
  fill: none; stroke: var(--holz); stroke-width: 3;
  stroke-linecap: round; stroke-linejoin: round;
}

.hoff-b-gold   { color: var(--gold); }
.hoff-b-bier   { color: var(--bier); }
.hoff-b-schaum { color: var(--schaum); }
.hoff-b-muted  { color: var(--muted); }
.hoff-b-herz   { color: var(--herz); }
.hoff-b-blau   { color: var(--blau); }

@keyframes hoff-auf {
  0%   { transform: translate3d(0, 116vh, 0); opacity: 0; }
  8%   { opacity: 1; }
  92%  { opacity: 1; }
  100% { transform: translate3d(0, -26vh, 0); opacity: 0; }
}
@keyframes hoff-wiegen {
  from { transform: translateX(-1.1rem) rotate(-6deg); }
  to   { transform: translateX(1.1rem)  rotate(6deg); }
}

/* Sitets globale reduced-motion-regel slukker animationen — her fjernes laget helt,
   så der ikke står frosne hoveder tilbage. initHoffKoepfe() holder også op med at spawne. */
@media (prefers-reduced-motion: reduce) { .hoff-blasen { display: none !important; } }
@media print { .hoff-blasen { display: none !important; } }

/* ============ HOFF-ALERT (terminal-toast) ============ */
/* Fixed zone across the bottom. overflow:hidden means the off-screen toast can
   never add horizontal scroll, pointer-events:none means it never blocks a tap. */
.hoff-alert-zone {
  position: fixed; left: 0; right: 0; bottom: 0;
  z-index: 900;                 /* under the splash (999), over everything else */
  display: flex; justify-content: flex-end;
  padding: 0 14px 14px;
  padding-bottom: calc(14px + env(safe-area-inset-bottom, 0px));
  overflow: hidden;
  pointer-events: none;
}

.hoff-alert {
  pointer-events: auto;
  position: relative;
  width: min(340px, 100%);
  background: linear-gradient(180deg, rgba(30,11,11,0.97), rgba(18,7,7,0.98));
  border: 2px solid var(--herz);
  border-radius: 3px;
  box-shadow: 0 6px 16px rgba(0,0,0,0.55);
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  overflow: hidden;
  transform: translateX(calc(100% + 18px));
  opacity: 0;
  transition: transform 0.42s cubic-bezier(0.22, 0.9, 0.3, 1), opacity 0.42s ease;
}
.hoff-alert[hidden] { display: none; }
.hoff-alert.hoff-alert-on { transform: translateX(0); opacity: 1; }

/* KITT-stribe langs overkanten */
.hoff-alert-scan {
  position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg,
    rgba(193,39,45,0) 0%, var(--herz) 30%, var(--schaum) 50%, var(--herz) 70%, rgba(193,39,45,0) 100%);
  background-size: 230% 100%; background-repeat: no-repeat;
  animation: hoff-alert-sweep 2.4s ease-in-out infinite alternate;
}
@keyframes hoff-alert-sweep { from { background-position: 115% 0; } to { background-position: -15% 0; } }

.hoff-alert-bar {
  display: flex; align-items: center; gap: 0.4rem;
  padding: 0.45rem 0.45rem 0.45rem 0.6rem;
  background: rgba(193,39,45,0.16);
  border-bottom: 1px solid rgba(193,39,45,0.45);
}
.hoff-alert-dot {
  flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%;
  background: var(--herz); box-shadow: 0 0 7px rgba(193,39,45,0.95);
  animation: hoff-alert-blink 1.1s steps(1, end) infinite;
}
@keyframes hoff-alert-blink { 0%, 55% { opacity: 1; } 56%, 100% { opacity: 0.15; } }
.hoff-alert-svg { flex: 0 0 auto; width: 22px; height: 10px; color: var(--herz); display: block; }
.hoff-alert-tag {
  flex: 1 1 auto; font-size: 0.6rem; font-weight: 700; letter-spacing: 0.2em;
  color: var(--schaum); white-space: nowrap;
}
.hoff-alert-nr { flex: 0 0 auto; font-size: 0.56rem; letter-spacing: 0.1em; color: var(--muted); white-space: nowrap; }
.hoff-alert-x {
  flex: 0 0 auto; width: 22px; height: 22px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  background: transparent; border: 1px solid rgba(193,39,45,0.5); border-radius: 2px;
  color: var(--muted); cursor: pointer; -webkit-appearance: none; appearance: none;
}
.hoff-alert-x svg { width: 10px; height: 10px; display: block; }
.hoff-alert-x:hover { color: var(--schaum); border-color: var(--herz); background: rgba(193,39,45,0.22); }
.hoff-alert-x:focus-visible { outline: 2px solid var(--bier); outline-offset: 1px; }

.hoff-alert-body { padding: 0.6rem 0.7rem 0.7rem; }
.hoff-alert-kicker {
  font-size: 0.55rem; font-weight: 800; letter-spacing: 0.2em;
  color: var(--bier); margin-bottom: 0.32rem;
}
.hoff-alert-text { font-size: 0.78rem; line-height: 1.55; color: var(--fg); }
.hoff-alert-link {
  display: inline-block; margin-top: 0.55rem;
  font-size: 0.66rem; font-weight: 700; letter-spacing: 0.09em;
  color: var(--bier); border-bottom: 1px solid rgba(232,165,32,0.4); padding-bottom: 1px;
}
.hoff-alert-link:hover { color: var(--gold); border-bottom-color: var(--gold); }
.hoff-alert-link:focus-visible { outline: 2px solid var(--bier); outline-offset: 2px; }

@media (max-width: 560px) {
  .hoff-alert-zone { padding: 0 10px 10px; padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)); }
  .hoff-alert { width: 100%; }
  .hoff-alert-text { font-size: 0.76rem; }
}

@media (prefers-reduced-motion: reduce) {
  .hoff-alert { transition: none; transform: none; opacity: 1; }
  .hoff-alert.hoff-alert-on { transform: none; }
  .hoff-alert-scan { animation: none; background-position: 50% 0; }
  .hoff-alert-dot { animation: none; opacity: 1; }
}

@media print { .hoff-alert-zone { display: none !important; } }


/* ============================================================
   HOFF-MODUS: FRA — the kill switch.
   Everything that moves goes away; every word stays. The site has to
   work for someone finding a tent at 23:00 in the rain.
   ============================================================ */
html.hoff-still .hoff-kitt-road,
html.hoff-still .hoff-bay,
html.hoff-still .hoff-blasen,
html.hoff-still .hoff-alert-zone { display: none !important; }
html.hoff-still .hoff-scanner-beam { animation: none; opacity: 0.25; }
html.hoff-still .hoff-scanner-led  { animation: none; opacity: 1; }


/* ============================================================
   HOFF-NOTER — referencerne skal kunne ses, ikke overses,
   men de må aldrig forveksles med praktisk information.
   Reglen er sitets egen §7: man skal kunne finde hjem
   uden at forstå vittigheden.
   ============================================================ */
.hoff-note {
  position: relative;
  margin-top: 0.6rem !important;
  padding: 0.1rem 0 0.1rem 1.35rem;
  font-size: 0.78rem !important;
  line-height: 1.55;
  font-style: italic;
  color: rgba(168, 147, 122, 0.66) !important;
  border-left: 2px solid rgba(193, 39, 45, 0.3);
  background: none !important;
  border-radius: 0 !important;
}
.hoff-note::before {
  content: "✦";
  position: absolute; left: 0.45rem; top: 0.1rem;
  font-size: 0.62rem; font-style: normal;
  color: rgba(193, 39, 45, 0.65);
}
.hoff-note strong { color: rgba(246, 236, 216, 0.72); font-weight: 600; }
.hoff-note em { color: rgba(232, 165, 32, 0.72); }
.hoff-note a { color: rgba(232, 165, 32, 0.8); }

/* a .tip that is also a Hoff note must not keep the blue practical-tip skin */
.tl-body .tip.hoff-note,
.logi-card .tip.hoff-note { border-left-color: rgba(193, 39, 45, 0.3); }

/* the sentences hung on an existing list item */
.hoff-inline { color: rgba(168, 147, 122, 0.62); font-style: italic; }

/* the one timeline entry that is entirely a joke */
.hoff-item .tl-body {
  border-style: dashed;
  border-color: rgba(193, 39, 45, 0.35);
  background: linear-gradient(180deg, rgba(193,39,45,0.05), rgba(32,18,8,0.4));
}
.hoff-item .tl-time { color: rgba(193, 39, 45, 0.7); }

/* HOFF-MODUS: FRA now also folds the notes away — that is what makes the
   switch worth having when you are looking for a tent at 23:00 in the rain. */
html.hoff-still .hoff-note,
html.hoff-still .hoff-inline,
html.hoff-still .hoff-item { display: none !important; }

@media print { .hoff-note, .hoff-inline, .hoff-item { display: none !important; } }
