<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Granska Sverige — Oberoende granskning av offentlig förvaltning</title>
    <meta name="description" content="Vi granskar offentlig förvaltning i Sverige. Utredningar av korruption, PFAS-skandaler, mediapropaganda och kommunalt maktmissbruk. 3,7 miljoner fakturor analyserade.">
    <meta name="keywords" content="granskning, offentlig förvaltning, korruption, kommun, Sverige, fakturor, PFAS, propaganda, mediagranskning, transparens">
    <meta name="author" content="Granska Sverige">
  <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
  <meta name="googlebot" content="index, follow, max-image-preview:large, max-snippet:-1">
  <meta name="bingbot" content="index, follow">
    <link rel="canonical" href="https://granskasverige.org">
    <meta property="og:title" content="Granska Sverige — Vi granskar offentlig förvaltning">
    <meta property="og:description" content="Utredningar och fallstudier av korruption, miljöskandaler och maktmissbruk. 3,7M fakturor. 269 kommuner.">
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://granskasverige.org">
    <meta property="og:site_name" content="Granska Sverige">
    <meta property="og:locale" content="sv_SE">
    <meta property="og:image" content="https://granskasverige.org/og-image.png">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@riksfusk">
    <meta name="twitter:creator" content="@riksfusk">
    <meta name="twitter:title" content="Granska Sverige — Vi granskar offentlig förvaltning">
    <meta name="twitter:description" content="Utredningar av korruption, miljöskandaler och maktmissbruk. Oberoende och faktabaserat.">
    <meta name="twitter:image" content="https://granskasverige.org/og-image.png">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:type" content="image/png">
    <link rel="icon" type="image/svg+xml" href="/favicon.svg">
    <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=Open+Sans:wght@400;600;700;800&display=swap" rel="stylesheet">
    <style>
        :root {
            --bg: #ffffff;
            --bg-alt: #fafafa;
            --bg-card: #ffffff;
            --bg-card-hover: #f5f5f5;
            --text: #333333;
            --text-muted: #606061;
            --text-heading: #000000;
            --navy: #1c1f66;
            --navy-light: #2a2d7a;
            --accent: #1c1f66;
            --border: #e0e0e0;
            --red: #d04438;
            --green: #007e68;
            --blue: #006bc7;
            --grey-100: #f5f5f5;
            --grey-200: #e0e0e0;
            --grey-300: #d6d7d9;
            --grey-600: #a4a4a6;
            --grey-800: #727273;
        }

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

        body {
            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
            background: var(--bg);
            color: var(--text);
            line-height: 1.6;
            -webkit-font-smoothing: antialiased;
            overflow-x: hidden;
        }

        /* NAV */
        nav {
            position: fixed;
            top: 0; left: 0; right: 0;
            z-index: 100;
            background: var(--navy);
            padding: 0 2rem;
        }
        .nav-inner {
            max-width: 1400px;
            margin: 0 auto;
            display: flex;
            align-items: center;
            justify-content: space-between;
            height: 60px;
        }
        .nav-logo {
            font-size: 1.15rem;
            font-weight: 800;
            color: #ffffff;
            text-decoration: none;
            letter-spacing: -0.01em;
        }
        .nav-logo span { color: #ccd0ff; }
        .nav-links { display: flex; gap: 1.8rem; align-items: center; }
        .nav-links a {
            color: rgba(255,255,255,0.8);
            text-decoration: none;
            font-size: 0.88rem;
            font-weight: 600;
            transition: color 0.2s;
        }
        .nav-links a:hover { color: #ffffff; }
        .nav-cta {
            background: #ffffff !important;
            color: var(--navy) !important;
            padding: 0.45rem 1.1rem;
            border-radius: 5px;
            font-weight: 700;
            font-size: 0.82rem !important;
            transition: opacity 0.2s !important;
        }
        .nav-cta:hover { opacity: 0.9 !important; }

        /* LANG SWITCHER */
        .lang-switch {
            display: flex;
            gap: 0.6rem;
            align-items: center;
        }
        .lang-btn {
            display: flex;
            align-items: center;
            gap: 0.3rem;
            padding: 0.25rem 0.5rem;
            border-radius: 4px;
            border: 1px solid rgba(255,255,255,0.3);
            background: transparent;
            color: rgba(255,255,255,0.7);
            font-size: 0.75rem;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.2s;
            text-decoration: none;
        }
        .lang-btn:hover, .lang-btn.active {
            border-color: #ffffff;
            color: #ffffff;
            background: rgba(255,255,255,0.1);
        }
        .lang-btn svg { width: 18px; height: 13px; border-radius: 2px; }

        /* HERO */
        .hero {
            padding: 8rem 2rem 3.5rem;
            text-align: center;
            background: linear-gradient(180deg, var(--navy) 0%, #2a2d7a 40%, var(--bg) 100%);
            color: #ffffff;
        }
        .hero-badge {
            display: inline-block;
            background: rgba(255,255,255,0.15);
            color: rgba(255,255,255,0.9);
            padding: 0.3rem 0.9rem;
            border-radius: 20px;
            font-size: 0.75rem;
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
            margin-bottom: 1.3rem;
        }
        .hero h1 {
            font-size: clamp(2rem, 4.5vw, 3rem);
            font-weight: 800;
            line-height: 1.15;
            max-width: 750px;
            margin: 0 auto 1.2rem;
            letter-spacing: -0.02em;
        }
        .hero p {
            font-size: 1.05rem;
            color: rgba(255,255,255,0.75);
            max-width: 620px;
            margin: 0 auto 2rem;
            line-height: 1.7;
        }
        .hero-stats {
            display: flex;
            justify-content: center;
            gap: 3rem;
            margin-top: 2rem;
            flex-wrap: wrap;
        }
        .hero-stat { text-align: center; }
        .hero-stat .number {
            font-size: 1.8rem;
            font-weight: 800;
            display: block;
            color: #ffffff;
        }
        .hero-stat .label {
            font-size: 0.75rem;
            color: rgba(255,255,255,0.6);
            text-transform: uppercase;
            letter-spacing: 0.05em;
            font-weight: 600;
        }

        /* SECTIONS */
        .slider-section {
            padding: 3.5rem 0 2.5rem;
        }
        .slider-section .section-header {
            max-width: 1400px;
            margin: 0 auto 1.8rem;
            padding: 0 2rem;
        }
        .slider-section .section-header h2 {
            font-size: 1.6rem;
            font-weight: 800;
            color: var(--text-heading);
            margin-bottom: 0.3rem;
            letter-spacing: -0.01em;
        }
        .slider-section .section-header p {
            color: var(--text-muted);
            font-size: 0.95rem;
        }
        .section-divider {
            border: none;
            border-top: 1px solid var(--border);
            margin: 0;
        }

        /* SLIDER — continuous smooth scroll */
        .slider-wrapper { position: relative; overflow: hidden; }
        .slider-track {
            display: flex;
            gap: 1.2rem;
            padding: 0 0;
            will-change: transform;
            width: max-content;
        }
        .slider-track.scroll-right {
            animation: scrollRight var(--scroll-duration, 60s) linear infinite;
        }
        .slider-track.scroll-left {
            animation: scrollLeft var(--scroll-duration, 60s) linear infinite;
        }
        .slider-track:hover {
            animation-play-state: paused;
        }
        .slider-track.dragging {
            animation: none !important;
            cursor: grabbing;
            user-select: none;
        }
        .slider-wrapper {
            cursor: grab;
        }
        .slider-wrapper.is-dragging {
            cursor: grabbing;
        }
        @keyframes scrollRight {
            0% { transform: translateX(0); }
            100% { transform: translateX(-50%); }
        }
        @keyframes scrollLeft {
            0% { transform: translateX(-50%); }
            100% { transform: translateX(0); }
        }

        /* CARDS */
        .slide-card {
            flex: 0 0 400px;
            background: var(--bg-card);
            border: 1px solid var(--border);
            border-radius: 10px;
            overflow: hidden;
            transition: all 0.3s;
            text-decoration: none;
            display: block;
        }
        .slide-card:hover {
            border-color: var(--navy);
            transform: translateY(-3px);
            box-shadow: 0 8px 30px rgba(0,0,0,0.1);
        }
        .card-video {
            width: 100%;
            height: 225px;
            object-fit: cover;
            display: block;
            background: #f0f0f0;
        }
        .card-body {
            padding: 1.2rem 1.4rem 1.4rem;
        }
        .card-badge {
            display: inline-block;
            font-size: 0.65rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.06em;
            padding: 0.18rem 0.55rem;
            border-radius: 3px;
            margin-bottom: 0.6rem;
        }
        .badge-utredning {
            background: #fde8e6;
            color: var(--red);
        }
        .badge-fallstudie {
            background: #e8eeff;
            color: var(--navy);
        }
        .card-body h3 {
            font-size: 1.05rem;
            font-weight: 700;
            color: var(--text-heading);
            margin-bottom: 0.4rem;
            line-height: 1.3;
        }
        .card-body .desc {
            color: var(--text-muted);
            font-size: 0.84rem;
            line-height: 1.6;
            margin-bottom: 0.9rem;
        }
        .card-meta {
            display: flex;
            gap: 0.5rem;
            flex-wrap: wrap;
        }
        .meta-tag {
            font-size: 0.68rem;
            padding: 0.18rem 0.5rem;
            border-radius: 3px;
            background: var(--grey-100);
            color: var(--grey-800);
            font-weight: 600;
        }
        .meta-tag.highlight {
            background: #e6f7f3;
            color: var(--green);
        }

        /* FORUM CTA */
        .forum-section {
            padding: 3.5rem 2rem;
            text-align: center;
            background: var(--navy);
            color: #ffffff;
        }
        .forum-section h2 {
            font-size: 1.6rem;
            font-weight: 800;
            margin-bottom: 0.7rem;
        }
        .forum-section p {
            color: rgba(255,255,255,0.75);
            font-size: 0.95rem;
            max-width: 520px;
            margin: 0 auto 1.8rem;
            line-height: 1.7;
        }
        .forum-btn {
            display: inline-block;
            background: #ffffff;
            color: var(--navy);
            padding: 0.7rem 1.8rem;
            border-radius: 6px;
            font-weight: 700;
            font-size: 0.95rem;
            text-decoration: none;
            transition: opacity 0.2s;
        }
        .forum-btn:hover { opacity: 0.9; }

        /* ABOUT */
        .about-section {
            padding: 3.5rem 2rem;
            background: var(--bg-alt);
            border-top: 1px solid var(--border);
        }
        .about-section .container { max-width: 1400px; margin: 0 auto; }
        .about-section h2 {
            font-size: 1.6rem;
            font-weight: 800;
            color: var(--text-heading);
            margin-bottom: 1.5rem;
        }
        .about-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
            gap: 2rem;
        }
        .about-item h3 {
            font-size: 0.95rem;
            font-weight: 700;
            color: var(--text-heading);
            margin-bottom: 0.4rem;
        }
        .about-item p {
            color: var(--text-muted);
            font-size: 0.88rem;
            line-height: 1.7;
        }

        /* FOOTER */
        footer {
            padding: 2.5rem 2rem;
            border-top: 1px solid var(--border);
            text-align: center;
            background: var(--bg);
        }
        footer p {
            color: var(--text-muted);
            font-size: 0.82rem;
        }
        footer a { color: var(--navy); text-decoration: none; font-weight: 600; }
        .footer-links {
            display: flex;
            justify-content: center;
            gap: 1.5rem;
            margin-top: 0.6rem;
            flex-wrap: wrap;
        }

        /* HAMBURGER */
        .hamburger {
            display: none;
            background: none;
            border: none;
            color: #fff;
            font-size: 1.5rem;
            cursor: pointer;
            padding: 0.3rem;
        }
        .mobile-menu {
            display: none;
            position: fixed;
            top: 60px; left: 0; right: 0;
            background: var(--navy);
            padding: 1.5rem 2rem;
            z-index: 99;
            border-top: 1px solid rgba(255,255,255,0.1);
            flex-direction: column;
            gap: 1rem;
        }
        .mobile-menu.open { display: flex; }
        .mobile-menu a {
            color: rgba(255,255,255,0.85);
            text-decoration: none;
            font-size: 1rem;
            font-weight: 600;
        }
        .mobile-menu .lang-switch { margin-top: 0.5rem; }

        /* RESPONSIVE */
        @media (max-width: 768px) {
            .nav-links { display: none; }
            .hamburger { display: block; }
            .hero { padding: 7rem 1.5rem 2.5rem; }
            .hero-stats { gap: 1.5rem; }
            .slide-card { flex: 0 0 300px; }
            .card-video { height: 170px; }
            .slider-section { padding: 2.5rem 0 2rem; }
            .slider-section .section-header { padding: 0 1.5rem; }
            .slider-track { gap: 1rem; }
            .lang-switch { gap: 0.4rem; }
        }

        /* ENGLISH CONTENT TOGGLE */
        .en-content { display: none; }
        body.lang-en .sv-content { display: none; }
        body.lang-en .en-content { display: block; }
        body.lang-en .en-inline { display: inline; }
        body.lang-en .sv-inline { display: none; }
        .en-inline { display: none; }

        /* ============================================================
           BYGGKULT FALLSTUDIER — domstol.se-stil
           Fristående färgsystem (skild från huvudsidans navy-tema)
        ============================================================ */
        #byggkult-fall {
            --bk-primary: #1c1f66;
            --bk-primary-dark: #15174d;
            --bk-magenta: #cc277f;
            --bk-blue: #006bc7;
            --bk-brown: #a16a3d;
            --bk-text: #1a1a1a;
            --bk-text-strong: #000000;
            --bk-text-muted: #505051;
            --bk-border: #d6d7d9;
            --bk-bg-alt: #fafafa;

            background: var(--bk-bg-alt);
            border-top: 1px solid var(--bk-border);
            padding: 4rem 2rem 4.5rem;
            font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
        }
        #byggkult-fall .bk-wrap {
            max-width: 1400px;
            margin: 0 auto;
        }
        #byggkult-fall .bk-shdr {
            margin-bottom: 2rem;
            border-left: 6px solid var(--bk-magenta);
            padding: 6px 0 6px 18px;
        }
        #byggkult-fall .bk-num {
            display: inline-block;
            font-size: 11px;
            letter-spacing: 0.15em;
            color: var(--bk-magenta);
            font-weight: 700;
            margin-bottom: 8px;
            text-transform: uppercase;
        }
        #byggkult-fall .bk-shdr h2 {
            font-size: 1.75rem;
            font-weight: 800;
            color: var(--bk-text-strong);
            margin: 0 0 0.4rem;
            letter-spacing: -0.01em;
            line-height: 1.2;
        }
        #byggkult-fall .bk-shdr p {
            font-size: 0.95rem;
            color: var(--bk-text-muted);
            line-height: 1.6;
            max-width: 820px;
        }
        #byggkult-fall .bk-case-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
            gap: 18px;
            margin-top: 1.8rem;
        }
        #byggkult-fall .bk-case {
            background: #ffffff;
            border: 1px solid var(--bk-border);
            border-left: 4px solid var(--bk-blue);
            padding: 20px 22px;
            text-decoration: none;
            display: block;
            transition: box-shadow 0.2s, transform 0.2s;
        }
        #byggkult-fall .bk-case:hover {
            box-shadow: 0 4px 18px rgba(0,0,0,0.08);
            transform: translateY(-2px);
        }
        #byggkult-fall .bk-case.crit { border-left-color: var(--bk-magenta); }
        #byggkult-fall .bk-case.warn { border-left-color: var(--bk-brown); }
        #byggkult-fall .bk-case-tag {
            font-size: 11px;
            font-weight: 700;
            letter-spacing: 0.06em;
            margin-bottom: 8px;
            text-transform: uppercase;
            color: var(--bk-blue);
        }
        #byggkult-fall .bk-case.crit .bk-case-tag { color: var(--bk-magenta); }
        #byggkult-fall .bk-case.warn .bk-case-tag { color: var(--bk-brown); }
        #byggkult-fall .bk-case h3 {
            font-weight: 700;
            color: var(--bk-text-strong);
            font-size: 16px;
            margin: 0 0 10px;
            line-height: 1.3;
        }
        #byggkult-fall .bk-case p {
            font-size: 13.5px;
            color: var(--bk-text-muted);
            line-height: 1.6;
            margin: 0;
        }
        #byggkult-fall .bk-case .bk-link {
            display: inline-block;
            margin-top: 12px;
            font-size: 12px;
            font-weight: 600;
            color: var(--bk-primary);
            border-bottom: 1px solid transparent;
        }
        #byggkult-fall .bk-case:hover .bk-link {
            color: var(--bk-magenta);
            border-bottom-color: var(--bk-magenta);
        }
        #byggkult-fall .bk-finding {
            background: #ffffff;
            border: 1px solid var(--bk-border);
            border-left: 6px solid var(--bk-magenta);
            padding: 20px 24px;
            margin-top: 28px;
        }
        #byggkult-fall .bk-finding .bk-tag {
            font-size: 11px;
            letter-spacing: 0.1em;
            color: var(--bk-magenta);
            font-weight: 700;
            text-transform: uppercase;
            margin-bottom: 8px;
        }
        #byggkult-fall .bk-finding h3 {
            font-size: 17px;
            color: var(--bk-text-strong);
            margin: 0 0 10px;
            font-weight: 700;
        }
        #byggkult-fall .bk-finding p {
            font-size: 13.5px;
            color: var(--bk-text-muted);
            line-height: 1.65;
        }
        @media (max-width: 768px) {
            #byggkult-fall { padding: 3rem 1.5rem; }
            #byggkult-fall .bk-shdr h2 { font-size: 1.4rem; }
            #byggkult-fall .bk-case-grid { grid-template-columns: 1fr; }
        }
    </style>
  <link rel="apple-touch-icon" sizes="180x180" href="/favicon.svg">
  <meta name="format-detection" content="telephone=no">
  <meta name="mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-title" content="GranskaSverige">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="application-name" content="GranskaSverige">
  <link rel="manifest" href="/manifest.webmanifest">
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "NewsMediaOrganization",
    "@id": "https://granskasverige.org/#organization",
    "name": "GranskaSverige",
    "url": "https://granskasverige.org",
    "description": "Nationell granskningsplattform — 3,7M fakturor, 269 kommuner",
    "logo": {
      "@type": "ImageObject",
      "url": "https://granskasverige.org/og-image.png"
    },
    "sameAs": ["https://granskakalmar.se", "https://riksfusk.com", "https://svensklag.com", "https://propagandaanalys.org", "https://transparencysweden.org", "https://sosseland.org", "https://byggkult.pages.dev", "https://akacian.com", "https://charlotteakerlind.com", "https://github.com/LinespottingAB"],
    "knowsLanguage": "sv-SE",
    "areaServed": { "@type": "Country", "name": "Sweden" }
  }
  </script>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "url": "https://granskasverige.org",
    "name": "GranskaSverige",
    "description": "Nationell granskningsplattform — 3,7M fakturor, 269 kommuner",
    "inLanguage": "sv-SE"
  }
  </script>
</head>
<body>

<nav>
    <div class="nav-inner">
        <a href="/" class="nav-logo">GRANSKA<span>SVERIGE</span></a>
        <div class="nav-links">
            <a href="#utredningar" class="sv-content">Utredningar</a>
            <a href="#utredningar" class="en-content">Investigations</a>
            <a href="#byggkult-fall" class="sv-content">Byggkult</a>
            <a href="#byggkult-fall" class="en-content">Byggkult</a>
            <a href="#fallstudier" class="sv-content">Fallstudier</a>
            <a href="#fallstudier" class="en-content">Case Studies</a>
            <a href="#om" class="sv-content">Om oss</a>
            <a href="#om" class="en-content">About</a>
            <a href="https://x.com/riksfusk" target="_blank">@riksfusk</a>
            <div class="lang-switch">
                <button class="lang-btn active" onclick="setLang('sv')" id="langSv">
                    <svg viewBox="0 0 640 480"><rect width="640" height="480" fill="#006AA7"/><rect y="192" width="640" height="96" fill="#FECC02"/><rect x="176" width="96" height="480" fill="#FECC02"/></svg>
                    SV
                </button>
                <button class="lang-btn" onclick="setLang('en')" id="langEn">
                    <svg viewBox="0 0 640 480"><path fill="#012169" d="M0 0h640v480H0z"/><path fill="#FFF" d="m75 0 244 181L562 0h78v62L400 241l240 178v61h-80L320 301 81 480H0v-60l239-178L0 64V0z"/><path fill="#C8102E" d="m424 281 216 159v40L369 281zm-184 20 6 35L54 480H0zM640 0v3L391 191l2-44L590 0zM0 0l239 176h-60L0 42z"/><path fill="#FFF" d="M241 0v480h160V0zM0 160v160h640V160z"/><path fill="#C8102E" d="M0 193v96h640v-96zM273 0v480h96V0z"/></svg>
                    EN
                </button>
            </div>
            <a href="https://forum.granskasverige.org" class="nav-cta">Forum</a>
        </div>
        <button class="hamburger" onclick="document.getElementById('mobileMenu').classList.toggle('open')" aria-label="Meny">&#9776;</button>
    </div>
</nav>
<div class="mobile-menu" id="mobileMenu">
    <a href="#utredningar" class="sv-content" onclick="this.parentElement.classList.remove('open')">Utredningar</a>
    <a href="#utredningar" class="en-content" onclick="this.parentElement.classList.remove('open')">Investigations</a>
    <a href="#byggkult-fall" class="sv-content" onclick="this.parentElement.classList.remove('open')">Byggkult</a>
    <a href="#byggkult-fall" class="en-content" onclick="this.parentElement.classList.remove('open')">Byggkult</a>
    <a href="#fallstudier" class="sv-content" onclick="this.parentElement.classList.remove('open')">Fallstudier</a>
    <a href="#fallstudier" class="en-content" onclick="this.parentElement.classList.remove('open')">Case Studies</a>
    <a href="#om" class="sv-content" onclick="this.parentElement.classList.remove('open')">Om oss</a>
    <a href="#om" class="en-content" onclick="this.parentElement.classList.remove('open')">About</a>
    <a href="https://forum.granskasverige.org">Forum</a>
    <a href="https://x.com/riksfusk" target="_blank">@riksfusk</a>
    <a href="/cdn-cgi/l/email-protection#10667963637c71507762717e637b71636675627977753e7f6277"><span class="__cf_email__" data-cfemail="1a6c736969767b5a7d687b7469717b696c7f68737d7f3475687d">[email&#160;protected]</span></a>
    <div class="lang-switch">
        <button class="lang-btn active" onclick="setLang('sv')" id="langSvMobile">
            <svg viewBox="0 0 640 480"><rect width="640" height="480" fill="#006AA7"/><rect y="192" width="640" height="96" fill="#FECC02"/><rect x="176" width="96" height="480" fill="#FECC02"/></svg>
            SV
        </button>
        <button class="lang-btn" onclick="setLang('en')" id="langEnMobile">
            <svg viewBox="0 0 640 480"><path fill="#012169" d="M0 0h640v480H0z"/><path fill="#FFF" d="m75 0 244 181L562 0h78v62L400 241l240 178v61h-80L320 301 81 480H0v-60l239-178L0 64V0z"/><path fill="#C8102E" d="m424 281 216 159v40L369 281zm-184 20 6 35L54 480H0zM640 0v3L391 191l2-44L590 0zM0 0l239 176h-60L0 42z"/><path fill="#FFF" d="M241 0v480h160V0zM0 160v160h640V160z"/><path fill="#C8102E" d="M0 193v96h640v-96zM273 0v480h96V0z"/></svg>
            EN
        </button>
    </div>
</div>

<div class="hero">
    <div class="hero-badge sv-content">Oberoende granskning</div>
    <div class="hero-badge en-content">Independent Review</div>
    <h1>
        <span class="sv-content">Vi granskar offentlig förvaltning i Sverige</span>
        <span class="en-content">We investigate public administration in Sweden</span>
    </h1>
    <p>
        <span class="sv-content">Fallstudier och dokumentation av hur kommuner, myndigheter och offentliga tjänstemän hanterar sitt uppdrag. Oberoende, faktabaserat, för alla.</span>
        <span class="en-content">Case studies and documentation of how municipalities, agencies and public officials carry out their duties. Independent, fact-based, for everyone. This is a Swedish-language forum and investigation platform — most content is in Swedish.</span>
    </p>
    <div class="hero-stats">
        <div class="hero-stat">
            <span class="number">8</span>
            <span class="label sv-content">Utredningar</span>
            <span class="label en-content">Investigations</span>
        </div>
        <div class="hero-stat">
            <span class="number">8</span>
            <span class="label sv-content">Fallstudier</span>
            <span class="label en-content">Case Studies</span>
        </div>
        <div class="hero-stat">
            <span class="number">310+</span>
            <span class="label sv-content">Artiklar</span>
            <span class="label en-content">Articles</span>
        </div>
        <div class="hero-stat">
            <span class="number">269</span>
            <span class="label sv-content">Kommuner</span>
            <span class="label en-content">Municipalities</span>
        </div>
    </div>
</div>

<!-- UTREDNINGAR -->
<section class="slider-section" id="utredningar">
    <div class="section-header">
        <h2 class="sv-content">Utredningar</h2>
        <h2 class="en-content">Investigations</h2>
        <p class="sv-content">Djupgående utredningar av systematiska problem inom offentlig förvaltning</p>
        <p class="en-content">In-depth investigations of systemic issues in public administration</p>
    </div>
    <div class="slider-wrapper">
        <div class="slider-track" id="sliderUtredningar">

            <a href="https://riksfusk.com" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/riksfusk-johan-persson.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Riksfusk — Korruptionens kaskad</h3>
                    <p class="desc sv-content">18-årig utredning av maktkoncentration i Kalmar kommun under Johan Persson (S). 909 278 analyserade fakturor avslöjar 225 MSEK i misstänkt fakturabedrägeri och 162 kopplade positioner.</p>
                    <p class="desc en-content">18-year investigation of power concentration in Kalmar municipality. 909,278 invoices analyzed revealing SEK 225M in suspected invoice fraud and 162 linked positions.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">909 278 fakturor</span>
                        <span class="meta-tag highlight">225 MSEK</span>
                        <span class="meta-tag">Kalmar kommun</span>
                        <span class="meta-tag">12 rapporter</span>
                    </div>
                </div>
            </a>

            <a href="https://nydemokrati.org" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/nydemokrati.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Nydemokrati — Fakturaanalys alla kommuner</h3>
                    <p class="desc sv-content">Systematisk analys av leverantörsfakturor i 269 av 290 svenska kommuner. 3,7 miljoner fakturor granskade för att kartlägga inköpsmönster, avvikelser och leverantörsnätverk.</p>
                    <p class="desc en-content">Systematic analysis of supplier invoices across 269 of 290 Swedish municipalities. 3.7 million invoices examined to map procurement patterns and anomalies.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">3,7M fakturor</span>
                        <span class="meta-tag highlight">269 kommuner</span>
                        <span class="meta-tag">16 regioner</span>
                    </div>
                </div>
            </a>

            <a href="https://akacian.com" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/akacian17.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Akacian 17 — 14 år av kommunalt maktmissbruk</h3>
                    <p class="desc sv-content">Dokumentation av Kalmar kommuns hantering av fastigheten Akacian 17. Undanhållna expertrapporter, intressekonflikter och viten mot fastighetsägaren — trots att kommunens egna utredningar visar att kommunen orsakat skadorna.</p>
                    <p class="desc en-content">Documentation of Kalmar municipality's handling of property Akacian 17. Suppressed expert reports, conflicts of interest, and fines against the property owner — despite the municipality's own investigations showing the municipality caused the damage.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">14 år</span>
                        <span class="meta-tag highlight">7 oegentligheter</span>
                        <span class="meta-tag">Gamla stan, Kalmar</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/kalmarhem-ab" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/kalmarhemab01.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Kalmarhem AB — Bostadsbolag i kris</h3>
                    <p class="desc sv-content">Kommunalt bostadsbolag med 5 250 lägenheter: iLOQ-fiasko som låste ut hyresgäster i veckor, tvångsmässiga hyreshöjningar via HMK-medling, rivningar trots protester, och elstöd som aldrig nådde hyresgästerna.</p>
                    <p class="desc en-content">Municipal housing company with 5,250 apartments: digital key failures, forced rent increases, demolitions despite protests, and retained electricity subsidies.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">5 250 lägenheter</span>
                        <span class="meta-tag highlight">476 MSEK</span>
                        <span class="meta-tag">Kalmarhem AB</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/kommunbolag" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/kommunbolag-hultman01.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Kommunbolag — Ulrick Hultman</h3>
                    <p class="desc sv-content">VD för Kalmar Kommunbolag AB med 1,5 miljarder i omsättning — tillsatt internt utan offentlig utlysning, med knappt 1,5 års högskolestudier. Dubbelroll som fastighetsföreträdare och beslutsunderlag åt kommunstyrelsen.</p>
                    <p class="desc en-content">CEO of Kalmar Kommunbolag AB managing SEK 1.5B — internally appointed without public posting, with barely 1.5 years of higher education. Dual role creating conflicts of interest.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">1,5 mdr SEK</span>
                        <span class="meta-tag highlight">8 dotterbolag</span>
                        <span class="meta-tag">Intern rekrytering</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/pfas" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/pfas-flygplats01.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>PFAS — Kalmar flygplats</h3>
                    <p class="desc sv-content">Evighetskemikalier från brandövningsskum har förorenat grundvattnet vid Kalmar flygplats. 250 000 ng/L uppmätt — 2 800 gånger över gränsvärdet. Bedöms som "för dyrt att sanera".</p>
                    <p class="desc en-content">Forever chemicals from firefighting foam have contaminated groundwater at Kalmar Airport. 250,000 ng/L measured — 2,800 times above the limit. Deemed "too expensive to remediate".</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">250 000 ng/L</span>
                        <span class="meta-tag highlight">2 800× gränsvärdet</span>
                        <span class="meta-tag">Grundvatten</span>
                        <span class="meta-tag">Törnebybäcken</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/visselblasare" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/visselblasare-anna-heed-loof.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Visselblåsare — Tystnadskultur</h3>
                    <p class="desc sv-content">EU-parlamentariker Anna Lööf Hedh (S) lämnade alla uppdrag: "bristande demokrati, nepotism och en kultur av tystnad". Mellanchef fick bara lämna hälften av sitt material till visselblåsarfunktionen — ingen uppföljning.</p>
                    <p class="desc en-content">MEP Anna Lööf Hedh (S) left all posts citing "lack of democracy, nepotism and a culture of silence". Whistleblower function failed to follow up on reports.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">Visselblåsarlagen</span>
                        <span class="meta-tag">Anna Lööf Hedh</span>
                        <span class="meta-tag">Kalmar (S)</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/fanerdun" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/fanderun-johan-persson.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-utredning sv-content">Utredning</span>
                    <span class="card-badge badge-utredning en-content">Investigation</span>
                    <h3>Fanerdun — Miljardbluffen</h3>
                    <p class="desc sv-content">1,3 miljarder utlovade — konkurs och rivning. Johan Persson (S) skrev under avtal 3 dagar efter första mötet. Handelskammaren varnade — ignorerades. Uppehållstillstånd som affärsidé.</p>
                    <p class="desc en-content">SEK 1.3B promised — bankruptcy and demolition. Municipal leader signed contract 3 days after first meeting. Chamber of Commerce warned — ignored. Residence permits as business model.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">1,3 mdr SEK</span>
                        <span class="meta-tag highlight">Konkurs 2009</span>
                        <span class="meta-tag">Snurrom, Kalmar</span>
                        <span class="meta-tag">Luo Jinxing</span>
                    </div>
                </div>
            </a>

        </div>
    </div>

</section>

<hr class="section-divider">

<!-- ============================================================
     BYGGKULT KALMAR — FALLSTUDIER (domstol.se-stil)
============================================================ -->
<section id="byggkult-fall">
  <div class="bk-wrap">
    <div class="bk-shdr">
      <div class="bk-num sv-content">Fallstudier · Byggkult Kalmar</div>
      <div class="bk-num en-content">Case Studies · Byggkult Kalmar</div>
      <h2 class="sv-content">Byggkult Kalmar — strukturella mönster i kommunal myndighetsutövning</h2>
      <h2 class="en-content">Byggkult Kalmar — structural patterns in municipal authority</h2>
      <p class="sv-content">Skadekalkyl, fallstudie och 6 parallella Kalmar-tvister. Av 11 dokumenterade fall visar 8 samma struktur: asymmetriska viten, kommunen som part och domare, beslut underkända på högre instans, dubbla roller hos tjänstemän.</p>
      <p class="en-content">Damage calculation, case study and 6 parallel Kalmar disputes. Of 11 documented cases, 8 show the same structure: asymmetric fines, municipality as both party and judge, decisions overturned on appeal, dual roles among officials.</p>
    </div>

    <div class="bk-case-grid">

      <a href="https://byggkult-skador.pages.dev/" target="_blank" rel="noopener" class="bk-case crit">
        <div class="bk-case-tag">Skadekalkyl 220 MSEK</div>
        <h3>Byggkult-skadekalkylen — total ekonomisk skada</h3>
        <p class="sv-content">LOW/MID/HIGH-estimat över total ekonomisk och rättslig skada av Kalmars byggkult-mönster. MID-scenario: 220 MSEK i kollektiv värdeminskning, viten, juridiska kostnader och uteblivna investeringar. Baserat på JO 5716-2010-prejudikat och 909&nbsp;278 fakturor.</p>
        <p class="en-content">LOW/MID/HIGH estimate of total economic and legal damage from Kalmar's "byggkult" pattern. MID scenario: SEK 220M in collective property devaluation, fines, legal costs and lost investment.</p>
        <span class="bk-link">byggkult-skador.pages.dev &#x2197;</span>
      </a>

      <a href="https://byggkult.pages.dev/" target="_blank" rel="noopener" class="bk-case">
        <div class="bk-case-tag">Fallstudie</div>
        <h3>Byggkult Kalmar — full fallstudie</h3>
        <p class="sv-content">Komplett dokumentation av Kalmar kommuns byggkult: K-märkning underkänd av RAÄ, JO-anmälningar, polisanmälningar mot bygglovschef och kommundirektör, parallella förundersökningar. 8 fall i serien.</p>
        <p class="en-content">Complete documentation of Kalmar municipality's "byggkult": heritage classification overturned by the National Heritage Board, ombudsman complaints, police reports against the building permit chief and city director.</p>
        <span class="bk-link">byggkult.pages.dev &#x2197;</span>
      </a>

      <a href="https://akacian.com" target="_blank" rel="noopener" class="bk-case warn">
        <div class="bk-case-tag">Byggsanktion</div>
        <h3>Akacian 17 — Charlotte Åkerlinds 14-åriga kamp</h3>
        <p class="sv-content">Fastighetsägaren Charlotte Åkerlind kämpar mot Kalmar kommuns viten och K-märkning trots att kommunens egna utredningar visar att kommunens VA-infrastruktur orsakat vatteninträngningen. Undanhållna expertrapporter, dubbla roller, 7 dokumenterade oegentligheter.</p>
        <p class="en-content">Property owner Charlotte Åkerlind battles fines and heritage protection despite the municipality's own investigations showing municipal water infrastructure caused the water damage. Suppressed expert reports, dual roles, 7 documented irregularities.</p>
        <span class="bk-link">akacian.com &#x2197;</span>
      </a>

      <a href="https://www.barometern.se/kalmar/byggsopor-polisanmalt-kan-ge-vitessmocka-pa-400-000-kronor-i-manaden" target="_blank" rel="noopener" class="bk-case crit">
        <div class="bk-case-tag">Asymmetriskt vite</div>
        <h3>Vassmolösa byggsopor — 600 000 kr/månad i vite</h3>
        <p class="sv-content">Par utanför Ljungbyholm polisanmälda av kommunen efter att polis upptäckte byggavfall. Vite 400 000 kr/månad löpande + 100 000 kr fast per ägare = upp till 600 000 kr/mån. Ägarna hävdar att soporna grävts upp, inte ner. Överklagat.</p>
        <p class="en-content">Couple outside Ljungbyholm reported by the municipality after construction waste was found. Fine SEK 400,000/month running + 100,000 per owner = up to 600,000/month. Owners say the waste was dug up, not buried. Appealed.</p>
        <span class="bk-link">Barometern 2025-10-05 &#x2197;</span>
      </a>

      <a href="https://www.barometern.se/kalmar/fastighetsagare-i-brak-med-kommunen-efter-byggmiss-tanker-inte-betala" target="_blank" rel="noopener" class="bk-case crit">
        <div class="bk-case-tag">Sanktionsavgift</div>
        <h3>Pär Eriksson — chokladfabrik (januari 2026)</h3>
        <p class="sv-content">Tjuvstartat ombyggnation utan godkänt startbesked → byggsanktionsavgift över 300 000 kr. Eriksson: "Jag tänker inte betala. Det är en helt orimlig summa." Mönsterfall: kommunens sanktion mot enskild vid mindre formaliafel.</p>
        <p class="en-content">Started renovation before formal approval → construction sanction fee over SEK 300,000. Eriksson: "I will not pay. The sum is completely unreasonable." Pattern case: municipal sanction against individual for minor procedural error.</p>
        <span class="bk-link">Barometern 2026-01-25 &#x2197;</span>
      </a>

      <a href="https://www.barometern.se/2024-07-31/schaktfirma-och-kommunen-i-tvist-om-upplag-fagelskadare-som-kliar-varandra-pa-ryggen/" target="_blank" rel="noopener" class="bk-case warn">
        <div class="bk-case-tag">Kommunen underkänd</div>
        <h3>Johns Gräv &amp; Schakt — Vassmolösa</h3>
        <p class="sv-content">Schaktfirma förbjuds tippa massor → 50 000 kr/mån i vite. Länsstyrelsen "hade en annan uppfattning" och underkände kommunens beslut. Bolaget kallar kommunen för "miljömuppar". Samma mönster som RAÄ underkände K-märkningen 2022.</p>
        <p class="en-content">Excavation firm banned from depositing masses → SEK 50,000/month fine. The County Board "had a different view" and overturned the municipal decision. Same pattern as the National Heritage Board overturning the heritage classification in 2022.</p>
        <span class="bk-link">Barometern 2024-07-31 &#x2197;</span>
      </a>

      <a href="https://granskakalmar.se/kalmars-kommundirektor-polisanmals/" target="_blank" rel="noopener" class="bk-case crit">
        <div class="bk-case-tag">Dubbla roller</div>
        <h3>Mikael Kaiser — KAAX Konsulter AB</h3>
        <p class="sv-content">Bygglovschef i Kalmar kommun, polisutbildad utan byggkompetens, drev privat KAAX Konsulter AB (669 KSEK omsättning 2023) parallellt med tjänsten. Polisanmäld av GranskaKalmar. Mönsterfall för dubbla roller hos tjänstemän.</p>
        <p class="en-content">Building permit chief in Kalmar, police-trained without construction qualifications, ran private consultancy KAAX (SEK 669k revenue 2023) parallel to his post. Police-reported by GranskaKalmar. Pattern case for dual roles among officials.</p>
        <span class="bk-link">GranskaKalmar &#x2197;</span>
      </a>

      <a href="https://byggkult.pages.dev/" target="_blank" rel="noopener" class="bk-case">
        <div class="bk-case-tag">Mönsterfynd</div>
        <h3>Mönsteranalys — 8 av 11 fall samma struktur</h3>
        <p class="sv-content">Av 11 dokumenterade Kalmar-fall visar 8 samma strukturella drag: (1) asymmetrisk respons, (2) kommunen som part och domare, (3) beslut underkända på högre instans (RAÄ 2022, JO 2010, länsstyrelsen 2024, MMÖD pågående), (4) tjänstemän med dubbla roller, (5) polisanmälningar mot kommundirektör + bygglovschef.</p>
        <p class="en-content">Of 11 documented Kalmar cases, 8 show the same structural traits: asymmetric response, municipality as party and judge, decisions overturned on appeal, dual roles among officials, police reports against the city director and building permit chief.</p>
        <span class="bk-link">Mönsteranalys &#x2197;</span>
      </a>

    </div>

    <div class="bk-finding">
      <div class="bk-tag sv-content">&#9650; Strukturell observation</div>
      <div class="bk-tag en-content">&#9650; Structural observation</div>
      <h3 class="sv-content">Byggkult-mönstret är inte enstaka misstag — det är systematiskt</h3>
      <h3 class="en-content">The "byggkult" pattern is not isolated mistakes — it is systematic</h3>
      <p class="sv-content">Tommy Skölds förundersökning mot 11 byggpolitiker i Kalmar lades ner 2024-04-26 efter 3 år (Boverkets expertutlåtande — inget brott). Status på Andersson- och Kaiser-anmälningarna är inte publikt bekräftad. Komplett research med källor finns i workfoldern <code>21_source/liknande-fall.md</code>.</p>
      <p class="en-content">Tommy Sköld's criminal investigation against 11 building politicians in Kalmar was closed 2024-04-26 after 3 years (Boverket expert opinion — no crime). Status of the Andersson and Kaiser reports is not publicly confirmed. Complete research with sources in the workfolder <code>21_source/liknande-fall.md</code>.</p>
    </div>
  </div>
</section>

<hr class="section-divider">

<!-- FALLSTUDIER -->
<section class="slider-section" id="fallstudier">
    <div class="section-header">
        <h2 class="sv-content">Fallstudier</h2>
        <h2 class="en-content">Case Studies</h2>
        <p class="sv-content">Specifika granskningar av enskilda ärenden, miljöskandaler, mediestrukturer och myndighetsutövning</p>
        <p class="en-content">Specific reviews of individual cases, environmental scandals, media structures and government oversight</p>
    </div>
    <div class="slider-wrapper">
        <div class="slider-track" id="sliderFallstudier">

            <a href="https://cleanpfas.org" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/cleanpfas-flygplatsen.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>CleanPFAS — Kalmar flygplats</h3>
                    <p class="desc sv-content">250 000 ng/L PFAS uppmätt vid Kalmar flygplats — bland de högsta värdena i Sverige. Grundvattnet förorenat, PFAS sprids till jordbruksmark och Törnebybäcken.</p>
                    <p class="desc en-content">250,000 ng/L PFAS measured at Kalmar Airport — among the highest values in Sweden. Groundwater contaminated, PFAS spreading to farmland and streams.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">250 000 ng/L</span>
                        <span class="meta-tag highlight">8 000+ mätstationer</span>
                        <span class="meta-tag">PFAS</span>
                    </div>
                </div>
            </a>

            <a href="https://propagandaanalys.org" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/propagandaanalys.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Propagandaanalys — Mediagranskning</h3>
                    <p class="desc sv-content">Analys av hur svensk mainstream-media påverkar opinionen. AI-driven PropagandaTracker, kartläggning av mediaägare. 75–80% av tidningsmarknaden kontrolleras av tre aktörer.</p>
                    <p class="desc en-content">Analysis of how Swedish mainstream media influences public opinion. AI-driven PropagandaTracker, media ownership mapping. 75-80% of the newspaper market controlled by three actors.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">7 propagandatekniker</span>
                        <span class="meta-tag highlight">AI-tracker</span>
                        <span class="meta-tag">Mediaägare</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/dagvattenproblematiken-i-gamla-stan" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/dagvatten-gamla-stan.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Dagvatten Gamla stan</h3>
                    <p class="desc sv-content">Bristfällig kommunal VA-infrastruktur orsakar översvämningar och vattenskador på privata fastigheter i Kalmar Gamla stan. VA-budget överskred med 44,5 MSEK.</p>
                    <p class="desc en-content">Deficient municipal water infrastructure causing flooding and damage to private properties in Kalmar Old Town. Water budget exceeded by SEK 44.5M.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">83 artiklar</span>
                        <span class="meta-tag highlight">44,5 MSEK</span>
                        <span class="meta-tag">VA-infrastruktur</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/politik" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/peter-johan-kaiser.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Politik — Kalmar kommun</h3>
                    <p class="desc sv-content">Granskning av politiska beslut och beslutsfattare. Johan Persson (S), Peter Akinder (S), Mattias Adolfson (S), Dzenita Abaza (S), Liselotte Ross (V) m.fl. 243 artiklar, 9 underkategorier.</p>
                    <p class="desc en-content">Review of political decisions and decision-makers in Kalmar municipality. 243 articles across 9 subcategories covering key political figures.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">243 artiklar</span>
                        <span class="meta-tag">9 underkategorier</span>
                        <span class="meta-tag">Johan Persson (S)</span>
                        <span class="meta-tag">Peter Akinder (S)</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/tjansteman" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/bygglov-mikael-kaiser.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Tjänstemän</h3>
                    <p class="desc sv-content">Granskning av kommunala tjänstemän i ledande positioner. Kommundirektör Annette Andersson, VD Ulrick Hultman, VD Thomas Bergfeldt, bygglovschef Mikael Kaiser m.fl.</p>
                    <p class="desc en-content">Review of municipal officials in leadership positions including city directors and company CEOs. 64 articles across 11 subcategories.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">64 artiklar</span>
                        <span class="meta-tag">11 underkategorier</span>
                        <span class="meta-tag">Annette Andersson</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/kommun" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/kommun-peter-johan-mikael.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Kommun</h3>
                    <p class="desc sv-content">Granskning av kommunal förvaltning — organisation, processer och beslutskedjor. Kalmar kommunbolag AB, Mikael Kaiser, Peter Arnesson m.fl.</p>
                    <p class="desc en-content">Review of municipal administration — organization, processes and decision chains. 163 articles across 8 subcategories.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">163 artiklar</span>
                        <span class="meta-tag">8 underkategorier</span>
                        <span class="meta-tag">Kommunbolag</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/lansstyrelsen" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/lansstyrelsen-kalmar03.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Länsstyrelsen</h3>
                    <p class="desc sv-content">Granskning av Länsstyrelsens tillsyn och myndighetsutövning. Eva Brynolf, Malin Almqvist, Thomas Carlzon, Cecilia Schelin Seidegård.</p>
                    <p class="desc en-content">Review of County Administrative Board oversight. 80 articles covering officials including Eva Brynolf and Malin Almqvist.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">80 artiklar</span>
                        <span class="meta-tag">5 underkategorier</span>
                        <span class="meta-tag">Tillsyn</span>
                    </div>
                </div>
            </a>

            <a href="https://forum.granskasverige.org/c/regelverk" target="_blank" class="slide-card">
                <video class="card-video" autoplay muted loop playsinline>
                    <source src="/videos/regelverk01.mp4" type="video/mp4">
                </video>
                <div class="card-body">
                    <span class="card-badge badge-fallstudie sv-content">Fallstudie</span>
                    <span class="card-badge badge-fallstudie en-content">Case Study</span>
                    <h3>Regelverk</h3>
                    <p class="desc sv-content">Lagstiftning och regelverk som styr offentlig förvaltning — PBL, Miljöbalken, Förvaltningslagen. Hur myndigheter tillämpar och avviker från regelverket.</p>
                    <p class="desc en-content">Legislation governing public administration — how authorities apply and deviate from regulations. 97 articles, 4 subcategories.</p>
                    <div class="card-meta">
                        <span class="meta-tag highlight">97 artiklar</span>
                        <span class="meta-tag">PBL</span>
                        <span class="meta-tag">Miljöbalken</span>
                    </div>
                </div>
            </a>

        </div>
    </div>

</section>

<!-- FORUM CTA -->
<section class="forum-section">
    <h2 class="sv-content">Delta i granskningen</h2>
    <h2 class="en-content">Join the investigation</h2>
    <p class="sv-content">Vårt forum är öppet för alla. Logga in med Google eller X — ett klick, inga lösenord. Diskutera, dela dokument och granska offentlig verksamhet. Vill du vissla? Kontakta oss: <a href="/cdn-cgi/l/email-protection#11677862627d70517663707f627a70626774637876743f7e6376" style="color:#fff;text-decoration:underline;"><span class="__cf_email__" data-cfemail="2b5d425858474a6b4c594a4558404a585d4e59424c4e0544594c">[email&#160;protected]</span></a></p>
    <p class="en-content">Our forum is open to everyone. Sign in with Google or X — one click, no passwords. Discuss, share documents and review public operations. Want to blow the whistle? Contact: <a href="/cdn-cgi/l/email-protection#23554a50504f42634451424d504842505546514a44460d4c5144" style="color:#fff;text-decoration:underline;"><span class="__cf_email__" data-cfemail="fe88978d8d929fbe998c9f908d959f8d889b8c97999bd0918c99">[email&#160;protected]</span></a></p>
    <a href="https://forum.granskasverige.org" class="forum-btn sv-content">Gå till forumet</a>
    <a href="https://forum.granskasverige.org" class="forum-btn en-content">Go to the forum</a>
</section>

<!-- ABOUT -->
<section class="about-section" id="om">
    <div class="container">
        <h2 class="sv-content">Om Granska Sverige</h2>
        <h2 class="en-content">About Granska Sverige</h2>
        <div class="about-grid">
            <div class="about-item">
                <h3 class="sv-content">Oberoende granskning</h3>
                <h3 class="en-content">Independent review</h3>
                <p class="sv-content">Vi är en oberoende plattform som granskar hur offentlig förvaltning fungerar i praktiken. Vårt mål är transparens och ansvarsutkrävande genom dokumentation och faktabaserad rapportering.</p>
                <p class="en-content">We are an independent platform investigating how public administration works in practice. Our goal is transparency and accountability through documentation and fact-based reporting.</p>
            </div>
            <div class="about-item">
                <h3 class="sv-content">Öppet forum</h3>
                <h3 class="en-content">Open forum</h3>
                <p class="sv-content">Vårt forum är öppet för alla som vill delta i granskning av offentlig verksamhet i Sverige. Dela dokument, analysera beslut och diskutera med andra engagerade medborgare.</p>
                <p class="en-content">Our forum is open to everyone who wants to participate in reviewing public operations in Sweden. Share documents, analyze decisions and discuss with other engaged citizens.</p>
            </div>
            <div class="about-item">
                <h3 class="sv-content">Faktabaserat</h3>
                <h3 class="en-content">Fact-based</h3>
                <p class="sv-content">Allt material grundas på offentliga handlingar, protokoll och dokument. Vi strävar efter objektivitet och verifierbarhet i varje publicering.</p>
                <p class="en-content">All material is based on public records, protocols and documents. We strive for objectivity and verifiability in every publication.</p>
            </div>
        </div>
    </div>
</section>

<footer>
    <div class="container">
        <p>&copy; 2025–2026 Granska Sverige. <span class="sv-content">Oberoende granskning av offentlig förvaltning.</span><span class="en-content">Independent review of public administration.</span></p>
        <div class="footer-links">
            <a href="https://forum.granskasverige.org">Forum</a>
            <a href="https://x.com/riksfusk" target="_blank">@riksfusk</a>
            <a href="https://riksfusk.com" target="_blank">Riksfusk</a>
            <a href="https://nydemokrati.org" target="_blank">Nydemokrati</a>
            <a href="https://cleanpfas.org" target="_blank">CleanPFAS</a>
            <a href="https://propagandaanalys.org" target="_blank">Propagandaanalys</a>
            <a href="https://akacian.com" target="_blank">Akacian</a>
            <a href="/cdn-cgi/l/email-protection#addbc4dedec1ccedcadfccc3dec6ccdedbc8dfc4cac883c2dfca"><span class="__cf_email__" data-cfemail="eb9d829898878aab8c998a8598808a989d8e99828c8ec584998c">[email&#160;protected]</span></a>
        </div>
    </div>
</footer>

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
// Language switcher
function setLang(lang) {
    if (lang === 'en') {
        document.body.classList.add('lang-en');
    } else {
        document.body.classList.remove('lang-en');
    }
    document.getElementById('langSv').classList.toggle('active', lang === 'sv');
    document.getElementById('langEn').classList.toggle('active', lang === 'en');
    var svM = document.getElementById('langSvMobile');
    var enM = document.getElementById('langEnMobile');
    if (svM) svM.classList.toggle('active', lang === 'sv');
    if (enM) enM.classList.toggle('active', lang === 'en');
    localStorage && localStorage.setItem && localStorage.setItem('lang', lang);
}

// Slider logic
// Duplicate cards for seamless infinite scroll
function initInfiniteScroll(trackId, direction) {
    var track = document.getElementById(trackId);
    var cards = track.querySelectorAll('.slide-card');
    // Clone all cards and append for seamless loop
    cards.forEach(function(card) {
        var clone = card.cloneNode(true);
        track.appendChild(clone);
    });
    // Set speed based on number of cards (more cards = longer duration)
    var duration = cards.length * 10; // ~10s per card
    track.style.setProperty('--scroll-duration', duration + 's');
    track.classList.add(direction === 'right' ? 'scroll-right' : 'scroll-left');
}

initInfiniteScroll('sliderUtredningar', 'right');
initInfiniteScroll('sliderFallstudier', 'left');

// Touch swipe + mouse drag for sliders
function initDragScroll(trackId) {
    var track = document.getElementById(trackId);
    var wrapper = track.parentElement;
    var isDragging = false;
    var startX = 0;
    var dragOffset = 0;
    var baseOffset = 0;
    var resumeTimer = null;
    var velocity = 0;
    var lastX = 0;
    var lastTime = 0;

    function getCurrentTranslateX() {
        var style = window.getComputedStyle(track);
        var matrix = style.transform || style.webkitTransform;
        if (matrix && matrix !== 'none') {
            var values = matrix.match(/matrix.*\((.+)\)/);
            if (values) {
                var parts = values[1].split(', ');
                return parseFloat(parts[4]) || 0;
            }
        }
        return 0;
    }

    function startDrag(x) {
        isDragging = true;
        startX = x;
        lastX = x;
        lastTime = Date.now();
        velocity = 0;
        if (resumeTimer) { clearTimeout(resumeTimer); resumeTimer = null; }
        // Freeze current position
        baseOffset = getCurrentTranslateX();
        track.classList.add('dragging');
        wrapper.classList.add('is-dragging');
        track.style.transform = 'translateX(' + baseOffset + 'px)';
    }

    function moveDrag(x) {
        if (!isDragging) return;
        var now = Date.now();
        var dt = now - lastTime;
        if (dt > 0) {
            velocity = (x - lastX) / dt;
        }
        lastX = x;
        lastTime = now;
        dragOffset = x - startX;
        var totalWidth = track.scrollWidth / 2; // half because cards are duplicated
        var pos = baseOffset + dragOffset;
        // Wrap around for seamless feel
        if (pos > 0) pos -= totalWidth;
        if (pos < -totalWidth) pos += totalWidth;
        track.style.transform = 'translateX(' + pos + 'px)';
    }

    function endDrag() {
        if (!isDragging) return;
        isDragging = false;
        wrapper.classList.remove('is-dragging');
        // Apply momentum
        var momentum = velocity * 200; // coast distance
        var finalPos = getCurrentTranslateX() + momentum;
        var totalWidth = track.scrollWidth / 2;
        if (finalPos > 0) finalPos -= totalWidth;
        if (finalPos < -totalWidth) finalPos += totalWidth;
        track.style.transition = 'transform 0.5s ease-out';
        track.style.transform = 'translateX(' + finalPos + 'px)';
        // Resume auto-scroll after momentum settles
        resumeTimer = setTimeout(function() {
            track.style.transition = '';
            track.style.transform = '';
            track.classList.remove('dragging');
            // Re-sync animation from current visual position
        }, 2000);
    }

    // Mouse events
    wrapper.addEventListener('mousedown', function(e) {
        // Don't interfere with link clicks on short taps
        startDrag(e.clientX);
        e.preventDefault();
    });
    document.addEventListener('mousemove', function(e) {
        if (isDragging) { moveDrag(e.clientX); e.preventDefault(); }
    });
    document.addEventListener('mouseup', function() { endDrag(); });

    // Touch events
    wrapper.addEventListener('touchstart', function(e) {
        startDrag(e.touches[0].clientX);
    }, { passive: true });
    wrapper.addEventListener('touchmove', function(e) {
        if (isDragging) {
            moveDrag(e.touches[0].clientX);
            // Prevent page scroll while dragging horizontally
            if (Math.abs(dragOffset) > 10) e.preventDefault();
        }
    }, { passive: false });
    wrapper.addEventListener('touchend', function() { endDrag(); });
    wrapper.addEventListener('touchcancel', function() { endDrag(); });

    // Prevent clicks after drag (so links don't fire)
    wrapper.addEventListener('click', function(e) {
        if (Math.abs(dragOffset) > 8) {
            e.preventDefault();
            e.stopPropagation();
        }
    }, true);
}

initDragScroll('sliderUtredningar');
initDragScroll('sliderFallstudier');

// Restore saved language
try {
    var savedLang = localStorage && localStorage.getItem && localStorage.getItem('lang');
    if (savedLang === 'en') setLang('en');
} catch(e) {}
</script>

<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"20e5079df9ba4abe87d0cff7d102ce75","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
