<!doctype html>
<html lang="nl">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>LOS Evenementenverhuur | Eventmateriaal huren in Noordoost Friesland</title>
  <meta name="description" content="LOS Evenementenverhuur verhuurt professioneel eventmateriaal in Noordoost Friesland: mobiele artiestenlounge, live radio, live tv, geluid, licht, 5G netwerk en festivaltechniek.">
  <meta name="keywords" content="evenementenverhuur, eventmateriaal huren, festival techniek, live radio evenement, live tv registratie, geluid huren, licht huren, 5G festivalnetwerk, Noordoost Friesland">
  <meta name="robots" content="index, follow, max-image-preview:large">
  <link rel="canonical" href="https://losfm.nl/">
  <meta property="og:title" content="LOS Evenementenverhuur">
  <meta property="og:description" content="Eventmateriaal, live radio, live tv, geluid, licht en mobiel netwerk voor festivals en evenementen in Noordoost Friesland.">
  <meta property="og:type" content="website">
  <meta property="og:url" content="https://losfm.nl/">
  <meta property="og:image" content="https://losfm.nl/wp-content/uploads/2022/02/cropped-LOS-FM-DE-LEUKSTE-OP-FM-1.png">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:title" content="LOS Evenementenverhuur">
  <meta name="twitter:description" content="Verhuur van eventmateriaal, radio, tv, geluid, licht en netwerk voor festivals en evenementen.">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Bangers&family=Inter:wght@500;600;700;800;900&display=swap" rel="stylesheet">
  <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "LocalBusiness",
      "name": "LOS Evenementenverhuur",
      "url": "https://losfm.nl/",
      "email": "info@losfm.nl",
      "telephone": "+31620069024",
      "areaServed": "Noordoost Friesland",
      "description": "Verhuur van eventmateriaal, mobiele artiestenlounge, live radio, live tv, geluid, licht en mobiel netwerk voor festivals en evenementen.",
      "sameAs": ["https://losfm.nl/"],
      "makesOffer": [
        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Mobiele artiestenlounge" } },
        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Live radio voor evenementen" } },
        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Live tv registratie" } },
        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Geluid en licht verhuur" } },
        { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Mobiel festivalnetwerk" } }
      ]
    }
  </script>
  <style>
    :root {
      --red: #e30613;
      --red-dark: #9d0009;
      --ink: #141414;
      --paper: #fff8f8;
      --muted: #383232;
      --line: rgba(20, 20, 20, 0.12);
      --shadow: 0 24px 70px rgba(96, 0, 7, 0.18);
      --display: "Bangers", Impact, "Arial Black", sans-serif;
      --body: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    }

    * {
      box-sizing: border-box;
    }

    html {
      scroll-behavior: smooth;
    }

    body {
      margin: 0;
      color: var(--ink);
      font-family: var(--body);
      background:
        linear-gradient(135deg, rgba(227, 6, 19, 0.055) 25%, transparent 25%) 0 0 / 34px 34px,
        linear-gradient(315deg, rgba(20, 20, 20, 0.045) 25%, transparent 25%) 0 0 / 34px 34px,
        radial-gradient(circle at top left, rgba(227, 6, 19, 0.16), transparent 28rem),
        linear-gradient(180deg, #fff, var(--paper));
      background-attachment: fixed;
      overflow-x: hidden;
    }

    body::before,
    body::after {
      position: fixed;
      inset: 0;
      z-index: -5;
      content: "";
      pointer-events: none;
    }

    body::before {
      background:
        radial-gradient(circle at 12% 18%, rgba(227, 6, 19, 0.34) 0 0.22rem, transparent 0.26rem) 0 0 / 2.2rem 2.2rem,
        radial-gradient(circle at 80% 72%, rgba(227, 6, 19, 0.18), transparent 22rem),
        linear-gradient(120deg, transparent 0 58%, rgba(227, 6, 19, 0.12) 58% 68%, transparent 68%);
      animation: sitePatternMove 22s linear infinite;
    }

    body::after {
      background:
        repeating-linear-gradient(100deg, transparent 0 38px, rgba(227, 6, 19, 0.08) 38px 40px),
        repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.16) 0 1px, transparent 1px 8px);
      mix-blend-mode: multiply;
      opacity: 0.55;
      animation: scanMove 8s linear infinite;
    }

    a {
      color: inherit;
      text-decoration: none;
    }

    .site-loader {
      position: fixed;
      inset: 0;
      z-index: 999;
      display: grid;
      place-items: center;
      overflow: hidden;
      color: #fff;
      background: #080808;
      transition: opacity 520ms ease, visibility 520ms ease;
    }

    .site-loader.is-hidden {
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
    }

    .site-loader video {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      opacity: 0.86;
    }

    .site-loader::before {
      position: absolute;
      inset: 0;
      content: "";
      background:
        radial-gradient(circle at 50% 45%, rgba(227, 6, 19, 0.34), transparent 20rem),
        linear-gradient(135deg, rgba(20, 0, 2, 0.82), rgba(157, 0, 9, 0.42), rgba(0, 0, 0, 0.9));
    }

    .loader-fallback {
      position: relative;
      z-index: 1;
      font-family: var(--display);
      font-size: clamp(3rem, 12vw, 8rem);
      letter-spacing: 0.03em;
      text-transform: uppercase;
      animation: loaderPulse 900ms ease-in-out infinite alternate;
    }

    .site-header {
      position: sticky;
      top: 0;
      z-index: 20;
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 1rem;
      padding: 1rem clamp(1rem, 4vw, 4rem);
      border-bottom: 1px solid rgba(227, 6, 19, 0.45);
      background:
        repeating-linear-gradient(135deg, rgba(227, 6, 19, 0.16) 0 2px, transparent 2px 18px),
        rgba(10, 10, 10, 0.94);
      backdrop-filter: blur(18px);
      box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);
    }

    .site-header::before {
      position: absolute;
      right: 0;
      bottom: -1px;
      left: 0;
      height: 3px;
      content: "";
      background: linear-gradient(90deg, transparent, var(--red), #fff, var(--red), transparent);
      animation: headerBeam 3.8s linear infinite;
    }

    .brand {
      display: flex;
      align-items: center;
      gap: 0.7rem;
      font-weight: 950;
      font-family: var(--display);
      letter-spacing: 0;
      text-transform: uppercase;
    }

    .brand-mark {
      display: grid;
      width: clamp(6.5rem, 11vw, 9.8rem);
      height: clamp(4rem, 7vw, 6rem);
      place-items: center;
      color: #fff;
      overflow: visible;
      background: transparent;
      border-radius: 0;
      box-shadow: none;
      transform: rotate(-4deg);
      animation: logoKick 4.2s ease-in-out infinite;
      margin-block: -1.6rem -1.1rem;
      transform-origin: 42% 58%;
    }

    .brand-mark img {
      width: 100%;
      height: 100%;
      object-fit: contain;
      padding: 0;
      filter: drop-shadow(0 10px 22px rgba(227, 6, 19, 0.45));
    }

    .brand-fallback {
      display: none;
      width: 100%;
      height: 100%;
      color: #fff;
      font-weight: 1000;
      background: var(--red);
      border-radius: 0;
      box-shadow: none;
      transform: none;
    }

    nav {
      display: flex;
      align-items: center;
      gap: clamp(0.8rem, 2vw, 1.5rem);
      color: rgba(255, 255, 255, 0.82);
      font-size: 0.95rem;
      font-weight: 700;
    }

    nav a {
      position: relative;
      padding: 0.4rem 0;
    }

    nav a::after {
      position: absolute;
      right: 0;
      bottom: 0;
      left: 0;
      height: 2px;
      content: "";
      background: var(--red);
      transform: scaleX(0);
      transform-origin: right;
      transition: transform 180ms ease;
    }

    nav a:hover::after {
      transform: scaleX(1);
      transform-origin: left;
    }

    .button {
      position: relative;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-height: 2.9rem;
      padding: 0.85rem 1.15rem;
      color: #fff;
      font-weight: 900;
      background: var(--red);
      border: 0;
      border-radius: 0.45rem;
      box-shadow: 0 14px 35px rgba(227, 6, 19, 0.28);
      overflow: hidden;
      transition: transform 180ms ease, box-shadow 180ms ease, background 180ms ease;
    }

    .button svg {
      position: relative;
      z-index: 1;
      width: 1.1rem;
      height: 1.1rem;
      margin-right: 0.45rem;
      flex: 0 0 auto;
    }

    .button span {
      position: relative;
      z-index: 1;
    }

    .button::before {
      position: absolute;
      inset: -50% auto -50% -40%;
      width: 35%;
      content: "";
      background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.55), transparent);
      transform: skewX(-18deg);
      animation: buttonShine 3.2s ease-in-out infinite;
    }

    .button:hover {
      background: var(--red-dark);
      box-shadow: 0 18px 45px rgba(227, 6, 19, 0.36);
      transform: translateY(-2px);
    }

    .header-actions {
      display: flex;
      align-items: center;
      gap: 0.65rem;
    }

    .radio-wrap {
      position: relative;
      display: inline-flex;
    }

    .radio-button {
      gap: 0.5rem;
      background: #fff;
      color: var(--ink);
      box-shadow: 0 16px 40px rgba(255, 255, 255, 0.12), 0 16px 40px rgba(227, 6, 19, 0.22);
    }

    .radio-button:hover,
    .radio-button.is-playing {
      color: #fff;
      background: var(--red);
    }

    .radio-icon {
      position: relative;
      z-index: 1;
      display: grid;
      width: 1.35rem;
      height: 1.35rem;
      place-items: center;
    }

    .radio-icon svg {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      margin: 0;
      transition: opacity 180ms ease, transform 220ms ease;
    }

    .pause-icon {
      opacity: 0;
      transform: scale(0.4) rotate(-90deg);
    }

    .radio-button.is-playing .play-icon {
      opacity: 0;
      transform: scale(0.4) rotate(90deg);
    }

    .radio-button.is-playing .pause-icon {
      opacity: 1;
      transform: scale(1) rotate(0deg);
    }

    .music-notes {
      position: absolute;
      inset: -1.6rem -0.9rem auto auto;
      width: 6rem;
      height: 4rem;
      pointer-events: none;
    }

    .music-notes i {
      position: absolute;
      color: #fff;
      font-style: normal;
      font-weight: 1000;
      opacity: 0;
      text-shadow: 0 0 18px rgba(227, 6, 19, 0.8);
      transform: translateY(0) scale(0.2) rotate(0deg);
    }

    .music-notes i:nth-child(1) { left: 0.3rem; top: 1.8rem; }
    .music-notes i:nth-child(2) { left: 2.4rem; top: 0.4rem; }
    .music-notes i:nth-child(3) { right: 0.2rem; top: 1.5rem; }

    .radio-wrap.is-playing .music-notes i {
      animation: noteDance 1.2s ease-in-out infinite;
    }

    .radio-wrap.is-playing .music-notes i:nth-child(2) { animation-delay: 150ms; }
    .radio-wrap.is-playing .music-notes i:nth-child(3) { animation-delay: 300ms; }

    .radio-wrap.is-pausing .music-notes i {
      animation: notePop 320ms ease forwards;
    }

    .hero-radio {
      color: var(--ink);
      background: #fff;
      border: 1px solid rgba(255, 255, 255, 0.22);
    }

    .hero-radio:hover,
    .hero-radio.is-playing {
      color: #fff;
      background: var(--red);
    }

    .hero {
      position: relative;
      isolation: isolate;
      min-height: calc(100vh - 5rem);
      padding: clamp(4rem, 9vw, 7rem) clamp(1rem, 4vw, 4rem) 7rem;
      color: #fff;
      background:
        linear-gradient(115deg, rgba(20, 20, 20, 0.82), rgba(90, 0, 7, 0.72));
      overflow: hidden;
    }

    .hero-video,
    .hero-confetti {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      pointer-events: none;
    }

    .hero-video {
      z-index: -6;
      object-fit: cover;
      background: #141414;
    }

    .hero-confetti {
      z-index: -5;
      background:
        radial-gradient(circle at 72% 18%, rgba(227, 6, 19, 0.48), transparent 22rem),
        linear-gradient(115deg, rgba(20, 0, 2, 0.74), rgba(157, 0, 9, 0.52), rgba(20, 20, 20, 0.82)),
        url("https://images.unsplash.com/photo-1492684223066-81342ee5ff30?auto=format&fit=crop&w=1800&q=82") 0 0 / 1800px auto;
      opacity: 0.78;
      mix-blend-mode: normal;
      animation: confettiLoop 18s linear infinite, confettiBreath 8s ease-in-out infinite alternate;
    }

    .hero::before {
      position: absolute;
      inset: auto -5vw -1px;
      z-index: -1;
      height: 9rem;
      content: "";
      background: var(--paper);
      clip-path: polygon(0 55%, 12% 46%, 28% 62%, 43% 42%, 61% 58%, 78% 39%, 100% 54%, 100% 100%, 0 100%);
      animation: waveShift 7s ease-in-out infinite alternate;
      transform-origin: center bottom;
    }

    .hero::after {
      position: absolute;
      inset: 0;
      z-index: -2;
      content: "";
      background:
        repeating-linear-gradient(90deg, transparent 0 32px, rgba(255, 255, 255, 0.06) 32px 33px),
        repeating-linear-gradient(0deg, transparent 0 32px, rgba(255, 255, 255, 0.04) 32px 33px);
      mask-image: linear-gradient(90deg, rgba(0, 0, 0, 0.7), transparent 78%);
      animation: patternDrift 18s linear infinite;
    }

    .hero-grid {
      position: relative;
      display: grid;
      grid-template-columns: minmax(0, 1.08fr) minmax(18rem, 0.72fr);
      gap: clamp(2rem, 5vw, 5rem);
      align-items: center;
      max-width: 1180px;
      margin: 0 auto;
    }

    .hero-grid::before,
    .hero-grid::after {
      position: absolute;
      z-index: -1;
      content: "";
      pointer-events: none;
    }

    .hero-grid::before {
      top: -3rem;
      right: 8%;
      width: clamp(8rem, 18vw, 16rem);
      height: clamp(8rem, 18vw, 16rem);
      background: rgba(227, 6, 19, 0.3);
      clip-path: polygon(18% 0, 100% 22%, 76% 100%, 0 72%);
      animation: shardSpin 12s linear infinite;
    }

    .hero-grid::after {
      bottom: -2rem;
      left: 28%;
      width: clamp(10rem, 24vw, 22rem);
      height: clamp(4rem, 9vw, 8rem);
      background:
        repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.2) 0 8px, transparent 8px 18px),
        rgba(227, 6, 19, 0.18);
      clip-path: polygon(0 28%, 100% 0, 88% 72%, 8% 100%);
      animation: shardSlide 6s ease-in-out infinite alternate;
    }

    .eyebrow {
      display: inline-flex;
      gap: 0.55rem;
      align-items: center;
      padding: 0.4rem 0.65rem;
      margin: 0 0 1.1rem;
      color: #fff;
      font-size: 0.82rem;
      font-weight: 900;
      letter-spacing: 0.04em;
      text-transform: uppercase;
      background: rgba(255, 255, 255, 0.15);
      border: 1px solid rgba(255, 255, 255, 0.24);
      border-radius: 999px;
      transition: background 220ms ease, border-color 220ms ease, transform 220ms ease;
    }

    .eyebrow.is-live {
      background: rgba(227, 6, 19, 0.28);
      border-color: rgba(255, 255, 255, 0.45);
      transform: rotate(-1deg) scale(1.03);
    }

    .pulse {
      width: 0.65rem;
      height: 0.65rem;
      background: #fff;
      border-radius: 999px;
      box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7);
      animation: pulse 1.7s infinite;
    }

    h1 {
      max-width: 10ch;
      margin: 0;
      font-size: clamp(4rem, 14vw, 9.8rem);
      line-height: 0.82;
      font-family: var(--display);
      font-weight: 400;
      letter-spacing: 0.02em;
      text-transform: uppercase;
      text-shadow: 0 0 26px rgba(227, 6, 19, 0.34);
      animation: headlinePulse 4s ease-in-out infinite;
    }

    .hero p {
      max-width: 42rem;
      margin: 1.4rem 0 2rem;
      color: rgba(255, 255, 255, 0.94);
      font-weight: 700;
      font-size: clamp(1.05rem, 2vw, 1.32rem);
      line-height: 1.6;
    }

    .hero-actions {
      display: flex;
      flex-wrap: wrap;
      gap: 0.85rem;
    }

    .ghost {
      color: #fff;
      background: rgba(255, 255, 255, 0.12);
      border: 1px solid rgba(255, 255, 255, 0.22);
      box-shadow: none;
    }

    .ghost:hover {
      background: rgba(255, 255, 255, 0.2);
    }

    .hero-panel {
      position: relative;
      padding: 1.2rem;
      overflow: hidden;
      background: rgba(255, 255, 255, 0.12);
      border: 1px solid rgba(255, 255, 255, 0.22);
      border-radius: 0.7rem;
      backdrop-filter: blur(20px);
      box-shadow: 0 30px 90px rgba(0, 0, 0, 0.28);
      animation: float 5.5s ease-in-out infinite;
    }

    .meter {
      display: grid;
      grid-template-columns: repeat(20, 1fr);
      gap: 0.32rem;
      height: 8rem;
      align-items: end;
      padding: 1rem;
      margin-bottom: 1rem;
      background: rgba(0, 0, 0, 0.36);
      border-radius: 0.55rem;
    }

    .meter span {
      display: block;
      min-height: 16%;
      background: linear-gradient(180deg, #fff, #ff3945);
      border-radius: 999px;
      animation: bounce 900ms ease-in-out infinite alternate;
    }

    .meter span:nth-child(2n) { animation-delay: 120ms; }
    .meter span:nth-child(3n) { animation-delay: 260ms; }
    .meter span:nth-child(4n) { animation-delay: 390ms; }

    .panel-title {
      margin: 0 0 0.35rem;
      font-size: 1.1rem;
      font-weight: 950;
      color: #fff;
    }

    .panel-text {
      margin: 0;
      color: rgba(255, 255, 255, 0.9);
      font-weight: 700;
      line-height: 1.5;
    }

    main {
      position: relative;
      isolation: isolate;
      background: var(--paper);
      overflow: hidden;
    }

    main::before {
      position: absolute;
      inset: 1.8rem -14vw auto;
      z-index: -1;
      height: 18rem;
      content: "";
      background:
        linear-gradient(100deg, rgba(227, 6, 19, 0.96), rgba(157, 0, 9, 0.86)),
        repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.18) 0 2px, transparent 2px 18px);
      clip-path: polygon(0 22%, 100% 0, 100% 60%, 0 100%);
      opacity: 0.16;
      animation: slabSlide 11s ease-in-out infinite alternate;
    }

    main::after {
      position: absolute;
      inset: auto -10vw 19rem;
      z-index: -1;
      height: 16rem;
      content: "";
      background:
        radial-gradient(circle at 30% 50%, rgba(255, 255, 255, 0.42), transparent 9rem),
        linear-gradient(85deg, rgba(227, 6, 19, 0.84), rgba(20, 20, 20, 0.08));
      clip-path: polygon(0 8%, 100% 30%, 100% 76%, 0 100%);
      opacity: 0.2;
      animation: slabSlide 9s ease-in-out infinite alternate-reverse;
    }

    section {
      position: relative;
      padding: clamp(3.5rem, 7vw, 6.5rem) clamp(1rem, 4vw, 4rem);
    }

    #diensten::before,
    #aanpak::before {
      position: absolute;
      inset: 2rem auto auto -8rem;
      width: 18rem;
      height: 18rem;
      content: "";
      background:
        radial-gradient(circle, rgba(227, 6, 19, 0.22) 0 0.28rem, transparent 0.32rem) 0 0 / 1.35rem 1.35rem;
      transform: rotate(10deg);
      animation: dotOrbit 14s linear infinite;
      pointer-events: none;
    }

    #aanpak::before {
      inset: auto -8rem 2rem auto;
      animation-direction: reverse;
    }

    .wrap {
      max-width: 1180px;
      margin: 0 auto;
    }

    .section-head {
      position: relative;
      display: grid;
      grid-template-columns: 0.8fr 1fr;
      gap: 2rem;
      align-items: end;
      margin-bottom: 2rem;
    }

    .section-head::before {
      position: absolute;
      width: clamp(7rem, 18vw, 16rem);
      height: 0.55rem;
      margin-top: -1.1rem;
      content: "";
      background: repeating-linear-gradient(90deg, var(--red) 0 18px, transparent 18px 28px);
      animation: dashRun 2s linear infinite;
    }

    h2 {
      margin: 0;
      font-size: clamp(2.2rem, 6vw, 5rem);
      line-height: 0.92;
      font-family: var(--display);
      font-weight: 400;
      letter-spacing: 0.02em;
      text-transform: uppercase;
      text-shadow: 0 12px 38px rgba(227, 6, 19, 0.13);
    }

    .section-head p,
    .intro {
      margin: 0;
      color: var(--muted);
      font-weight: 700;
      font-size: 1.05rem;
      line-height: 1.7;
    }

    .services {
      display: grid;
      grid-template-columns: repeat(3, minmax(0, 1fr));
      gap: 1rem;
    }

    .service-card {
      position: relative;
      min-height: 21rem;
      padding: 1.35rem;
      overflow: hidden;
      background: #fff;
      border: 1px solid var(--line);
      border-radius: 0.55rem;
      box-shadow: 0 10px 35px rgba(20, 20, 20, 0.06);
      animation: cardFloat 6s ease-in-out infinite;
      transition: transform 180ms ease, box-shadow 180ms ease, border-color 180ms ease;
    }

    .service-card:nth-child(2n) { animation-delay: -1.2s; }
    .service-card:nth-child(3n) { animation-delay: -2.4s; }
    .service-card:nth-child(4n) { animation-delay: -3.6s; }

    .service-card::before {
      position: absolute;
      inset: 0;
      z-index: 0;
      content: "";
      background:
        radial-gradient(circle at 78% 15%, rgba(227, 6, 19, 0.38), transparent 14rem),
        linear-gradient(180deg, rgba(255, 255, 255, 0.46), rgba(255, 248, 248, 0.76)),
        var(--service-image, linear-gradient(135deg, rgba(227, 6, 19, 0.2), rgba(20, 20, 20, 0.08))) center / cover;
      opacity: 0.88;
      transform: scale(1.04);
      transition: transform 500ms ease, opacity 300ms ease;
    }

    .service-card::after {
      position: absolute;
      inset: 0;
      z-index: 0;
      content: "";
      background:
        radial-gradient(circle at 12% 12%, rgba(227, 6, 19, 0.16), transparent 14rem),
        repeating-linear-gradient(135deg, transparent 0 14px, rgba(227, 6, 19, 0.06) 14px 15px),
        linear-gradient(120deg, transparent 0 45%, rgba(227, 6, 19, 0.18) 45% 52%, transparent 52%);
      opacity: 0.75;
      animation: cardPattern 9s linear infinite;
      pointer-events: none;
    }

    .service-card > * {
      position: relative;
      z-index: 1;
    }

    .service-card:hover {
      border-color: rgba(227, 6, 19, 0.4);
      box-shadow: var(--shadow);
      translate: 0 -6px;
    }

    .service-card:hover::before {
      opacity: 0.92;
      transform: scale(1.11);
    }

    .service-card.featured {
      grid-column: span 2;
      color: #fff;
      background:
        linear-gradient(110deg, rgba(20, 20, 20, 0.78), rgba(227, 6, 19, 0.64)),
        linear-gradient(135deg, #3b3b3b, #9d0009);
    }

    .service-card.featured::before {
      background:
        linear-gradient(110deg, rgba(20, 20, 20, 0.78), rgba(227, 6, 19, 0.55)),
        var(--service-image, linear-gradient(135deg, #3b3b3b, #9d0009)) center / cover,
        linear-gradient(135deg, #3b3b3b, #9d0009);
      opacity: 1;
    }

    .service-card h3 {
      margin: 0 0 0.7rem;
      font-size: clamp(1.55rem, 3vw, 2.2rem);
      line-height: 1;
      font-family: var(--display);
      font-weight: 400;
      letter-spacing: 0.02em;
      text-transform: uppercase;
    }

    .service-card p {
      max-width: 35rem;
      margin: 0;
      color: var(--muted);
      font-weight: 700;
      line-height: 1.65;
    }

    .service-card.featured p {
      color: rgba(255, 255, 255, 0.78);
    }

    .service-icon {
      display: grid;
      width: 3rem;
      height: 3rem;
      place-items: center;
      margin-bottom: 1.4rem;
      color: #fff;
      font-weight: 1000;
      background: var(--red);
      border-radius: 0.45rem;
      box-shadow: 0 12px 24px rgba(227, 6, 19, 0.24);
      animation: iconPop 2.6s ease-in-out infinite;
    }

    .service-card.featured .service-icon {
      color: var(--red);
      background: #fff;
    }

    .ticker {
      position: relative;
      display: flex;
      gap: 1rem;
      padding: 1rem 0;
      overflow: hidden;
      color: #fff;
      background:
        repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.16) 0 2px, transparent 2px 20px),
        linear-gradient(90deg, var(--red), var(--red-dark), var(--red));
      box-shadow: inset 0 8px 0 rgba(255, 255, 255, 0.12), inset 0 -8px 0 rgba(0, 0, 0, 0.08);
      transform: rotate(-1deg) scaleX(1.03);
    }

    .ticker::before {
      position: absolute;
      inset: 0;
      content: "";
      background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.34), transparent);
      animation: tickerFlash 4s linear infinite;
      pointer-events: none;
    }

    .ticker-track {
      display: flex;
      flex: 0 0 auto;
      gap: 1rem;
      min-width: 100%;
      animation: marquee 24s linear infinite;
    }

    .ticker strong {
      white-space: nowrap;
      font-size: clamp(1.4rem, 4vw, 3rem);
      line-height: 1;
      font-family: var(--display);
      font-weight: 400;
      letter-spacing: 0.03em;
      text-transform: uppercase;
    }

    .split {
      display: grid;
      grid-template-columns: minmax(0, 0.8fr) minmax(0, 1fr);
      gap: clamp(1.5rem, 4vw, 4rem);
      align-items: center;
    }

    .word-zoom {
      display: inline-flex;
      flex-wrap: wrap;
      gap: 0.12em 0.22em;
    }

    .word-zoom span {
      display: inline-block;
      transform-origin: center;
      animation: wordZoom 2.4s ease-in-out infinite;
    }

    .word-zoom span:nth-child(2) { animation-delay: 180ms; }
    .word-zoom span:nth-child(3) { animation-delay: 360ms; }
    .word-zoom span:nth-child(4) { animation-delay: 540ms; }
    .word-zoom span:nth-child(5) { animation-delay: 720ms; }

    .process {
      display: grid;
      gap: 0.8rem;
    }

    .step {
      position: relative;
      display: grid;
      grid-template-columns: 3rem 1fr;
      gap: 1rem;
      align-items: start;
      padding: 1rem;
      background: #fff;
      border: 1px solid var(--line);
      border-radius: 0.55rem;
      overflow: hidden;
      transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
    }

    .step::before {
      position: absolute;
      inset: 0;
      content: "";
      background:
        linear-gradient(115deg, transparent 0 55%, rgba(227, 6, 19, 0.12) 55% 64%, transparent 64%),
        radial-gradient(circle at 88% 18%, rgba(227, 6, 19, 0.16), transparent 7rem);
      animation: stepSweep 5s ease-in-out infinite;
    }

    .step:hover {
      border-color: rgba(227, 6, 19, 0.34);
      box-shadow: 0 18px 42px rgba(96, 0, 7, 0.12);
      transform: translateX(8px);
    }

    .step > * {
      position: relative;
      z-index: 1;
    }

    .step b {
      display: grid;
      width: 3rem;
      height: 3rem;
      place-items: center;
      color: #fff;
      background: var(--red);
      border-radius: 0.45rem;
    }

    .step h3 {
      margin: 0 0 0.25rem;
      font-size: 1.1rem;
      color: var(--ink);
      font-weight: 900;
    }

    .step p {
      margin: 0;
      color: var(--muted);
      font-weight: 700;
      line-height: 1.6;
    }

    .contact {
      position: relative;
      overflow: hidden;
      color: #fff;
      background:
        radial-gradient(circle at 18% 76%, rgba(255, 255, 255, 0.18), transparent 16rem),
        radial-gradient(circle at 80% 10%, rgba(255, 255, 255, 0.18), transparent 20rem),
        repeating-linear-gradient(135deg, transparent 0 24px, rgba(255, 255, 255, 0.07) 24px 26px),
        linear-gradient(135deg, #141414, #5e0007 52%, var(--red));
    }

    .contact::before {
      position: absolute;
      inset: -8rem -4rem auto auto;
      width: 30rem;
      height: 30rem;
      content: "";
      background: radial-gradient(circle, rgba(255, 255, 255, 0.18) 0 0.32rem, transparent 0.36rem) 0 0 / 1.6rem 1.6rem;
      animation: dotOrbit 16s linear infinite reverse;
      pointer-events: none;
    }

    .contact::after {
      position: absolute;
      inset: auto -8vw -1px;
      height: 8rem;
      content: "";
      background: #141414;
      clip-path: polygon(0 58%, 18% 44%, 38% 62%, 58% 39%, 78% 58%, 100% 42%, 100% 100%, 0 100%);
      animation: waveShift 6.5s ease-in-out infinite alternate-reverse;
    }

    .contact-grid {
      display: grid;
      grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.65fr);
      gap: 2rem;
      align-items: start;
    }

    .contact h2 {
      max-width: 11ch;
    }

    .contact p {
      color: rgba(255, 255, 255, 0.94);
      font-weight: 700;
    }

    .contact-list {
      display: grid;
      gap: 0.8rem;
      margin: 0;
      padding: 0;
      list-style: none;
    }

    .contact-list a,
    .contact-list span {
      position: relative;
      display: block;
      padding: 1rem;
      overflow: hidden;
      background: rgba(255, 255, 255, 0.1);
      border: 1px solid rgba(255, 255, 255, 0.16);
      border-radius: 0.5rem;
      transition: transform 180ms ease, background 180ms ease, border-color 180ms ease;
      font-weight: 800;
    }

    .contact-list a::before,
    .contact-list span::before {
      position: absolute;
      inset: 0;
      content: "";
      background: linear-gradient(115deg, transparent 0 45%, rgba(255, 255, 255, 0.22) 45% 52%, transparent 52%);
      transform: translateX(-100%);
      animation: contactShine 4.5s ease-in-out infinite;
      pointer-events: none;
    }

    .contact-list a:hover {
      background: rgba(255, 255, 255, 0.17);
      border-color: rgba(255, 255, 255, 0.32);
      transform: translateX(7px);
    }

    .contact-list small {
      display: block;
      margin-bottom: 0.2rem;
      color: rgba(255, 255, 255, 0.78);
      font-weight: 800;
      text-transform: uppercase;
    }

    footer {
      padding: 1.4rem clamp(1rem, 4vw, 4rem);
      color: rgba(255, 255, 255, 0.86);
      background: #141414;
      font-weight: 700;
    }

    footer .wrap {
      display: flex;
      flex-wrap: wrap;
      gap: 0.8rem;
      justify-content: space-between;
    }

    .call-bubble {
      position: fixed;
      right: clamp(1rem, 3vw, 2rem);
      bottom: clamp(1rem, 3vw, 2rem);
      z-index: 30;
      display: grid;
      width: 4rem;
      height: 4rem;
      place-items: center;
      color: #fff;
      background:
        radial-gradient(circle at 35% 25%, rgba(255, 255, 255, 0.32), transparent 1.2rem),
        var(--red);
      border: 1px solid rgba(255, 255, 255, 0.22);
      border-radius: 999px;
      box-shadow: 0 18px 46px rgba(157, 0, 9, 0.42);
      animation: callBubbleFloat 2.8s ease-in-out infinite;
    }

    .call-bubble::before,
    .call-bubble::after {
      position: absolute;
      inset: -0.45rem;
      content: "";
      border: 1px solid rgba(227, 6, 19, 0.42);
      border-radius: inherit;
      animation: callRing 2s ease-out infinite;
    }

    .call-bubble::after {
      animation-delay: 700ms;
    }

    .call-bubble svg {
      width: 1.7rem;
      height: 1.7rem;
      filter: drop-shadow(0 5px 12px rgba(0, 0, 0, 0.25));
    }

    .reveal {
      opacity: 0;
      transform: translateY(24px);
      transition: opacity 600ms ease, transform 600ms ease;
    }

    .reveal.visible {
      opacity: 1;
      transform: translateY(0);
    }

    @keyframes pulse {
      70% { box-shadow: 0 0 0 0.7rem rgba(255, 255, 255, 0); }
      100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }
    }

    @keyframes loaderPulse {
      from { transform: scale(0.96) rotate(-2deg); filter: drop-shadow(0 0 0 rgba(227, 6, 19, 0)); }
      to { transform: scale(1.06) rotate(2deg); filter: drop-shadow(0 0 24px rgba(227, 6, 19, 0.72)); }
    }

    @keyframes sitePatternMove {
      to { background-position: 8rem 5rem, -6rem 4rem, 0 0; }
    }

    @keyframes scanMove {
      to { background-position: 90px 0, 0 48px; }
    }

    @keyframes headerBeam {
      from { background-position: -20vw 0; }
      to { background-position: 120vw 0; }
    }

    @keyframes logoKick {
      0%, 100% { transform: rotate(-5deg) scale(1); }
      35% { transform: rotate(3deg) scale(1.12); }
      52% { transform: rotate(-9deg) scale(1.18); }
      72% { transform: rotate(2deg) scale(1.06); }
    }

    @keyframes buttonShine {
      0%, 48% { transform: translateX(0) skewX(-18deg); }
      78%, 100% { transform: translateX(460%) skewX(-18deg); }
    }

    @keyframes headlinePulse {
      0%, 100% { filter: drop-shadow(0 0 0 rgba(227, 6, 19, 0)); transform: translateX(0); }
      50% { filter: drop-shadow(0 0 18px rgba(227, 6, 19, 0.42)); transform: translateX(0.18rem); }
    }

    @keyframes confettiBreath {
      from { transform: scale(1); opacity: 0.42; }
      to { transform: scale(1.06); opacity: 0.55; }
    }

    @keyframes confettiLoop {
      from { background-position: 0 0, 0 0, 0 0; }
      to { background-position: 0 0, 0 0, -520px 260px; }
    }

    @keyframes noteDance {
      0% { opacity: 0; transform: translate(0, 0) scale(0.35) rotate(-18deg); }
      18% { opacity: 1; }
      60% { opacity: 1; transform: translate(-0.35rem, -1.2rem) scale(1.18) rotate(14deg); }
      100% { opacity: 0; transform: translate(0.25rem, -2.1rem) scale(0.8) rotate(28deg); }
    }

    @keyframes notePop {
      0% { opacity: 1; transform: scale(1) rotate(0deg); }
      100% { opacity: 0; transform: scale(1.9) rotate(35deg); }
    }

    @keyframes shardSpin {
      from { transform: rotate(0deg) scale(1); }
      50% { transform: rotate(180deg) scale(1.1); }
      to { transform: rotate(360deg) scale(1); }
    }

    @keyframes shardSlide {
      from { transform: translateX(-2rem) skewX(-8deg); }
      to { transform: translateX(2rem) skewX(8deg); }
    }

    @keyframes float {
      0%, 100% { transform: translateY(0); }
      50% { transform: translateY(-14px); }
    }

    @keyframes bounce {
      from { height: 20%; }
      to { height: 94%; }
    }

    @keyframes marquee {
      to { transform: translateX(calc(-100% - 1rem)); }
    }

    @keyframes slabSlide {
      from { transform: translateX(-4vw) rotate(-1deg); }
      to { transform: translateX(4vw) rotate(1deg); }
    }

    @keyframes dotOrbit {
      from { transform: rotate(0deg) translateX(0); }
      to { transform: rotate(360deg) translateX(1.5rem); }
    }

    @keyframes dashRun {
      to { background-position: 46px 0; }
    }

    @keyframes cardFloat {
      0%, 100% { transform: translateY(0) rotate(0deg); }
      50% { transform: translateY(-8px) rotate(0.4deg); }
    }

    @keyframes iconPop {
      0%, 100% { transform: translateY(0) rotate(0deg); }
      50% { transform: translateY(-3px) rotate(-3deg); }
    }

    @keyframes tickerFlash {
      from { transform: translateX(-100%); }
      to { transform: translateX(100%); }
    }

    @keyframes wordZoom {
      0%, 100% { transform: scale(1); color: inherit; }
      12% { transform: scale(1.22) rotate(-2deg); color: var(--red); text-shadow: 0 8px 26px rgba(227, 6, 19, 0.28); }
      26% { transform: scale(0.94) rotate(1deg); }
    }

    @keyframes stepSweep {
      0%, 100% { transform: translateX(-18%); opacity: 0.5; }
      50% { transform: translateX(18%); opacity: 1; }
    }

    @keyframes contactShine {
      0%, 52% { transform: translateX(-100%); }
      82%, 100% { transform: translateX(100%); }
    }

    @keyframes callBubbleFloat {
      0%, 100% { transform: translateY(0) rotate(-4deg) scale(1); }
      50% { transform: translateY(-0.45rem) rotate(4deg) scale(1.06); }
    }

    @keyframes callRing {
      from { opacity: 0.7; transform: scale(0.86); }
      to { opacity: 0; transform: scale(1.42); }
    }

    @keyframes waveShift {
      from {
        clip-path: polygon(0 55%, 12% 46%, 28% 62%, 43% 42%, 61% 58%, 78% 39%, 100% 54%, 100% 100%, 0 100%);
        transform: translateX(-1.5vw) scaleY(1);
      }
      to {
        clip-path: polygon(0 45%, 14% 61%, 30% 43%, 47% 63%, 64% 40%, 82% 59%, 100% 44%, 100% 100%, 0 100%);
        transform: translateX(1.5vw) scaleY(1.08);
      }
    }

    @keyframes patternDrift {
      to { background-position: 96px 0, 0 96px; }
    }

    @keyframes cardPattern {
      to { background-position: 0 0, 64px 64px; }
    }

    @media (max-width: 880px) {
      nav {
        display: none;
      }

      .site-header {
        flex-wrap: wrap;
      }

      .header-actions {
        margin-left: auto;
      }

      .hero-grid,
      .section-head,
      .split,
      .contact-grid {
        grid-template-columns: 1fr;
      }

      .hero {
        min-height: auto;
      }

      .services {
        grid-template-columns: 1fr;
      }

      .service-card.featured {
        grid-column: auto;
      }
    }

    @media (max-width: 560px) {
      .site-header {
        align-items: stretch;
        padding: 0.8rem 0.9rem;
      }

      .brand-mark {
        width: 4.3rem;
        height: 2.75rem;
      }

      .site-header .button {
        padding-inline: 0.85rem;
        font-size: 0.9rem;
      }

      h1 {
        font-size: clamp(3.4rem, 24vw, 5.6rem);
      }

      .hero-actions {
        display: grid;
      }

      .header-actions {
        width: 100%;
        display: grid;
        grid-template-columns: 1fr 1fr;
      }

      .header-actions .button {
        width: 100%;
      }
    }

    @media (prefers-reduced-motion: reduce) {
      *,
      *::before,
      *::after {
        scroll-behavior: auto !important;
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
      }
    }
  </style>
</head>
<body>
  <div class="site-loader" id="siteLoader" aria-hidden="true">
    <video src="loader.mp4" autoplay muted playsinline></video>
    <div class="loader-fallback">LOS</div>
  </div>

  <header class="site-header">
    <a class="brand" href="#top" aria-label="LOS Evenementenverhuur home">
      <span class="brand-mark">
        <img src="logo.png" alt="LOS Evenementenverhuur logo" onerror="this.style.display='none'; this.nextElementSibling.style.display='grid';">
        <span class="brand-mark brand-fallback">LOS</span>
      </span>
    </a>
    <nav aria-label="Hoofdnavigatie">
      <a href="#diensten">Diensten</a>
      <a href="#aanpak">Aanpak</a>
      <a href="#contact">Contact</a>
    </nav>
    <div class="header-actions">
      <a class="button" href="mailto:info@losfm.nl"><span>Vraag offerte aan</span></a>
      <div class="radio-wrap" data-radio-wrap>
        <button class="button radio-button" type="button" aria-label="Radio afspelen" aria-pressed="false" data-radio-button>
          <span class="radio-icon" aria-hidden="true">
            <svg class="play-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"/></svg>
            <svg class="pause-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M7 5h4v14H7zm6 0h4v14h-4z"/></svg>
          </span>
          <span>Radio</span>
        </button>
        <span class="music-notes" aria-hidden="true"><i>♪</i><i>♫</i><i>♪</i></span>
      </div>
    </div>
  </header>

  <section id="top" class="hero">
    <video class="hero-video" src="headervideo.mp4" autoplay muted loop playsinline></video>
    <div class="hero-confetti" aria-hidden="true"></div>
    <div class="hero-grid">
      <div>
        <div class="eyebrow" id="heroEyebrow"><span class="pulse"></span><span data-eyebrow-text>Verhuur festivals en evenementen</span></div>
        <h1>Welkom bij LOS</h1>
        <p>LOS Evenementenverhuur levert mobiele artiestenlounge, live radio, tv-registratie, geluid, licht en festivalnetwerk. Alles om jouw evenement in Noordoost Friesland strak te laten draaien.</p>
        <div class="hero-actions">
          <a class="button" href="#diensten">Bekijk mogelijkheden</a>
          <div class="radio-wrap" data-radio-wrap>
            <button class="button radio-button hero-radio" type="button" aria-label="Radio afspelen" aria-pressed="false" data-radio-button>
              <span class="radio-icon" aria-hidden="true">
                <svg class="play-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"/></svg>
                <svg class="pause-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M7 5h4v14H7zm6 0h4v14h-4z"/></svg>
              </span>
              <span>Radio</span>
            </button>
            <span class="music-notes" aria-hidden="true"><i>♪</i><i>♫</i><i>♪</i></span>
          </div>
        </div>
      </div>
      <aside class="hero-panel" aria-label="Live event indicatie">
        <div class="meter" aria-hidden="true">
          <span style="height: 46%"></span><span style="height: 78%"></span><span style="height: 34%"></span><span style="height: 86%"></span><span style="height: 52%"></span>
          <span style="height: 66%"></span><span style="height: 40%"></span><span style="height: 90%"></span><span style="height: 60%"></span><span style="height: 74%"></span>
          <span style="height: 45%"></span><span style="height: 80%"></span><span style="height: 36%"></span><span style="height: 92%"></span><span style="height: 58%"></span>
          <span style="height: 70%"></span><span style="height: 42%"></span><span style="height: 84%"></span><span style="height: 54%"></span><span style="height: 76%"></span>
        </div>
        <h2 class="panel-title">Alles voor jouw event, modulair te huren.</h2>
        <p class="panel-text">Kies alleen wat je nodig hebt of laat LOS meedenken over de complete technische invulling.</p>
      </aside>
    </div>
  </section>

  <main>
    <section id="diensten">
      <div class="wrap">
        <div class="section-head reveal">
          <h2>Wat we verhuren</h2>
          <p>Praktische eventoplossingen met professionele uitstraling. Geschikt voor dorpsfeest, festival, bedrijfsevent, sportdag, feesttent en tijdelijke uitzending.</p>
        </div>

        <div class="services">
          <article class="service-card featured reveal" data-image="mobiel-cafe.png">
            <div class="service-icon">01</div>
            <h3>Mobiel cafe</h3>
            <p>Een mobiele artiestenlounge met sfeer, comfort en een eigen gezicht op jouw terrein. Ideaal als herkenbare ontvangstplek voor artiesten, crew of gasten.</p>
          </article>

          <article class="service-card reveal" data-image="live-radio.png">
            <div class="service-icon">02</div>
            <h3>Live radio</h3>
            <p>Radio draaimeubel uitgerust met de nieuwste software en apparatuur. Geschikt voor FM en online uitzendingen van evenementen. Eventuele begeleiding in het proces tot het verkrijgen van een FM vergunning is mogelijk.</p>
          </article>

          <article class="service-card reveal" data-image="live-tv.png">
            <div class="service-icon">03</div>
            <h3>Live TV</h3>
            <p>In samenwerking met Sjoerd Gjalt Media verzorgt LOS live registratie van festivals. Livestreaming, opname of beeld voor schermen met meerdere camera's. Bemand of PTZ, inclusief instarts en reclame naar wens.</p>
          </article>

          <article class="service-card reveal" data-image="geluid.png">
            <div class="service-icon">04</div>
            <h3>Geluid</h3>
            <p>Geluidinstallatie met of zonder bemanning. Grote of kleine sets, voor spraak, muziek, artiesten of complete programmering. Alles is mogelijk.</p>
          </article>

          <article class="service-card reveal" data-image="licht.png">
            <div class="service-icon">05</div>
            <h3>Licht</h3>
            <p>Professionele verlichting voor jouw evenement, groot of klein. Simpele opstellingen waarbij je zelf de touwtjes in handen houdt, of compleet professioneel met lichtman.</p>
          </article>

          <article class="service-card reveal" data-image="netwerk.png">
            <div class="service-icon">06</div>
            <h3>Netwerk</h3>
            <p>Internet of bestandennetwerk voor jouw evenement. LOS heeft een mobiel festivalnetwerk op 5G simkaart, met opties voor netwerkopslag, mediateams, narrowcasting en backstage displays.</p>
          </article>
        </div>
      </div>
    </section>

    <div class="ticker" aria-hidden="true">
      <div class="ticker-track">
        <strong>Radio</strong><strong>TV</strong><strong>Geluid</strong><strong>Licht</strong><strong>Netwerk</strong><strong>Artiestenlounge</strong>
      </div>
      <div class="ticker-track">
        <strong>Radio</strong><strong>TV</strong><strong>Geluid</strong><strong>Licht</strong><strong>Netwerk</strong><strong>Artiestenlounge</strong>
      </div>
    </div>

    <section id="aanpak">
      <div class="wrap split">
        <div class="reveal">
          <h2 class="word-zoom" aria-label="Van idee naar draaiend terrein">
            <span>Van</span><span>idee</span><span>naar</span><span>draaiend</span><span>terrein</span>
          </h2>
          <p class="intro">LOS Evenementenverhuur denkt mee vanaf de eerste schets. Je kunt losse onderdelen huren of het technische pakket laten samenstellen op basis van je terrein, planning en publiek.</p>
        </div>
        <div class="process">
          <div class="step reveal">
            <b>1</b>
            <div>
              <h3>Vertel wat je organiseert</h3>
              <p>Datum, locatie, publiek, programmering en wat je al geregeld hebt.</p>
            </div>
          </div>
          <div class="step reveal">
            <b>2</b>
            <div>
              <h3>LOS maakt het technisch praktisch</h3>
              <p>Van FM of livestream tot schermen, geluid, licht en internet op het terrein.</p>
            </div>
          </div>
          <div class="step reveal">
            <b>3</b>
            <div>
              <h3>Opbouwen, draaien, afbouwen</h3>
              <p>Met of zonder bemanning, precies passend bij jouw budget en organisatie.</p>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section id="contact" class="contact">
      <div class="wrap contact-grid">
        <div class="reveal">
          <h2>Plan jouw event met LOS</h2>
          <p class="intro">Stuur een bericht met je datum, locatie en wensen. Dan kijken we samen wat slim, haalbaar en lekker strak is.</p>
        </div>
        <ul class="contact-list reveal">
          <li><a href="mailto:info@losfm.nl"><small>Mail</small>info@losfm.nl</a></li>
          <li><a href="tel:+31620069024"><small>Jan van der Velde</small>+31 6 20069024</a></li>
          <li><span><small>Regio</small>Noordoost Friesland</span></li>
          <li><a href="https://losfm.nl" target="_blank" rel="noreferrer"><small>Meer info</small>losfm.nl</a></li>
        </ul>
      </div>
    </section>
  </main>

  <footer>
    <div class="wrap">
      <span>© 2026 LOS Evenementenverhuur - Alle rechten voorbehouden</span>
      <span>Powerd by Sjoerd Gjalt Media | An SG Company</span>
    </div>
  </footer>

  <a class="call-bubble" href="tel:+31620069024" aria-label="Bel LOS Evenementenverhuur">
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.8 19.8 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.12.9.32 1.78.6 2.62a2 2 0 0 1-.45 2.11L8 9.71a16 16 0 0 0 6.29 6.29l1.26-1.26a2 2 0 0 1 2.11-.45c.84.28 1.72.48 2.62.6A2 2 0 0 1 22 16.92z"/></svg>
  </a>

  <script>
    const AUDIO_STREAM_URL = "https://stream.tukkerfm.nl/tukkerfm";
    const radioWraps = document.querySelectorAll("[data-radio-wrap]");
    const radioButtons = document.querySelectorAll("[data-radio-button]");
    const heroEyebrow = document.querySelector("#heroEyebrow");
    const heroEyebrowText = document.querySelector("[data-eyebrow-text]");
    const siteLoader = document.querySelector("#siteLoader");
    const radioAudio = new Audio();
    let radioIsPlaying = false;
    radioAudio.preload = "none";

    window.addEventListener("load", () => {
      window.setTimeout(() => siteLoader?.classList.add("is-hidden"), 1650);
    });

    const observer = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          entry.target.classList.add("visible");
          observer.unobserve(entry.target);
        }
      });
    }, { threshold: 0.14 });

    document.querySelectorAll(".reveal").forEach((element) => observer.observe(element));

    document.querySelectorAll("[data-image]").forEach((card) => {
      const image = new Image();
      image.onload = () => card.style.setProperty("--service-image", `url("${card.dataset.image}")`);
      image.src = card.dataset.image;
    });

    function setRadioState(isPlaying) {
      radioButtons.forEach((button) => {
        button.classList.toggle("is-playing", isPlaying);
        button.setAttribute("aria-pressed", String(isPlaying));
        button.setAttribute("aria-label", isPlaying ? "Radio pauzeren" : "Radio afspelen");
      });
      radioWraps.forEach((wrap) => wrap.classList.toggle("is-playing", isPlaying));
      heroEyebrow?.classList.toggle("is-live", isPlaying);
      if (heroEyebrowText) {
        heroEyebrowText.textContent = isPlaying
          ? "Je luistert nu naar: Tukker FM bij LosFM"
          : "Verhuur festivals en evenementen";
      }
    }

    radioButtons.forEach((radioButton) => radioButton.addEventListener("click", async () => {
      if (!AUDIO_STREAM_URL) {
        radioButtons.forEach((button) => {
          button.animate(
            [
              { transform: "translateX(0)" },
              { transform: "translateX(-4px)" },
              { transform: "translateX(4px)" },
              { transform: "translateX(0)" }
            ],
            { duration: 280, easing: "ease-in-out" }
          );
        });
        return;
      }

      if (!radioIsPlaying) {
        radioIsPlaying = true;
        radioAudio.src = AUDIO_STREAM_URL;
        setRadioState(true);
        try {
          await radioAudio.play();
          setRadioState(true);
        } catch (error) {
          setRadioState(true);
        }
      } else {
        radioIsPlaying = false;
        radioAudio.pause();
        radioAudio.removeAttribute("src");
        radioAudio.load();
        setRadioState(false);
        radioWraps.forEach((wrap) => wrap.classList.add("is-pausing"));
        window.setTimeout(() => {
          radioWraps.forEach((wrap) => wrap.classList.remove("is-pausing"));
        }, 340);
      }
    }));
  </script>
</body>
</html>