{% load i18n %}{% load static %}{% load cms_tags %}{% load sekizai_tags %}<!DOCTYPE html>
<html lang="de" data-bs-theme="auto">
  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="language" content="de" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>{% block title %}{% page_attribute "page_title" %}{% endblock %}</title>

  <script src="{% static 'froide_govplan/js/color-modes.js' %}"></script>

  <meta itemprop="name" content="VerwaltungsTracker – Portal für kommunale Transparenz">
  <meta itemprop="description" content="​VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.">
  <meta name="description"
        content="​{% block metaDescription %}VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.{% endblock %}​" />
  
  <meta name="keywords"
    content="Verwaltung, Transparenz, Kommunalpolitik, Vorhaben, Informationsfreiheitsanfragen, Behördeninformationen" />
  <meta property="og:title" content="{% block ogTitle %}{% page_attribute "page_title" %}{% endblock %}" />
  <meta property="og:type" content="article" />
  <meta property="og:url"
        content="https://verwaltungstracker.de/" />
  
      <meta property="og:image"
            content="{% static 'froide_govplan/images/og_image.png' %}" />
  
  <meta property="og:description" content="​​{% block ogDescription %}VerwaltungsTracker zeigt transparent, wie weit kommunale Projekte in Karlsruhe vorangeschritten sind – von der Planung bis zur Umsetzung. So behalten Sie den Überblick über die Entwicklung Ihrer Stadt.{% endblock %}​" />
  <meta property="og:site_name" content="VerwaltungsTracker" />

  <link rel="canonical" href="{{ request.build_absolute_uri }}">
  <link rel="stylesheet" href="{% static 'froide_govplan/css/docsearch.css' %}">

  <link href="https://unpkg.com/maplibre-gl@3.2.1/dist/maplibre-gl.css" rel="stylesheet" />
<script src="https://unpkg.com/maplibre-gl@3.2.1/dist/maplibre-gl.js"></script>


    <!-- Favicons -->
  <link rel="apple-touch-icon" href="{% static 'froide_govplan/images/apple-touch-icon.png' %}" sizes="180x180">
  <link rel="icon" href="{% static 'froide_govplan/images/favicon-32x32.png' %}" sizes="32x32" type="image/png">
  <link rel="icon" href="{% static 'froide_govplan/images/favicon-16x16.png' %}" sizes="16x16" type="image/png">
  <link rel="manifest" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/manifest.json">
  <link rel="mask-icon" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/safari-pinned-tab.svg" color="#712cf9">
  <link rel="icon" href="https://getbootstrap.com/docs/5.3/assets/img/favicons/favicon.ico">
  <meta name="theme-color" content="#712cf9">


  <script defer data-domain="verwaltungstracker.de" src="https://analytics.verwaltungstracker.de/js/script.js"></script>

  {% block header_font %}{% endblock %}

  {% block css %}
    <link href="{% static 'froide_govplan/css/bootstrap.min.css' %}" rel="stylesheet" crossorigin="anonymous">
    <link href="{% static 'froide_govplan/css/font-awesome.css' %}" rel="stylesheet">
    <style>

      body {
        overflow-x: hidden;
      }

      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }

      .b-example-divider {
        width: 100%;
        height: 3rem;
        background-color: rgba(0, 0, 0, .1);
        border: solid rgba(0, 0, 0, .15);
        border-width: 1px 0;
        box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
      }

      .b-example-vr {
        flex-shrink: 0;
        width: 1.5rem;
        height: 100vh;
      }

      .bi {
        vertical-align: -.125em;
        fill: currentColor;
      }

      .nav-scroller {
        position: relative;
        z-index: 2;
        height: 2.75rem;
        overflow-y: hidden;
      }

      .nav-scroller .nav {
        display: flex;
        flex-wrap: nowrap;
        padding-bottom: 1rem;
        margin-top: -1px;
        overflow-x: auto;
        text-align: center;
        white-space: nowrap;
        -webkit-overflow-scrolling: touch;
      }

      .btn-bd-primary {
        --bd-violet-bg: #712cf9;
        --bd-violet-rgb: 112.520718, 44.062154, 249.437846;

        --bs-btn-font-weight: 600;
        --bs-btn-color: var(--bs-white);
        --bs-btn-bg: var(--bd-violet-bg);
        --bs-btn-border-color: var(--bd-violet-bg);
        --bs-btn-hover-color: var(--bs-white);
        --bs-btn-hover-bg: #6528e0;
        --bs-btn-hover-border-color: #6528e0;
        --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
        --bs-btn-active-color: var(--bs-btn-hover-color);
        --bs-btn-active-bg: #5a23c8;
        --bs-btn-active-border-color: #5a23c8;
      }

      .bd-mode-toggle {
        z-index: 1500;
      }

      .bd-mode-toggle .dropdown-menu .active .bi {
        display: block !important;
      }

      .card {
        height: 100%;
        display: flex;
        flex-direction: column;
      }
      .card-body {
        flex-grow: 1;
        display: flex;
        flex-direction: column;
      }

      .mx-auto {
        max-width: 1320px;
      }

      .bg-gray-700 {
        background-color: rgba(55,65,81,1);
        border-color: transparent;
        border-radius: .375rem;
        color: rgba(249,250,251,1);
        font-size: .875rem;
        line-height: 1.25rem;
        text-decoration: none;
        display: inline-flex;
      }

      .ellipsis {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: ellipsis;
      }

.carousel-inner .card {
  height: 360px;
}

/* Mobile: nur 1 Slide sichtbar */
@media (max-width: 768px) {
  .carousel-inner .carousel-item > div {
    display: none;
  }
  .carousel-inner .carousel-item > div:first-child {
    display: block;
  }
}

/* Für alle Carousel-Übergangszustände Flex anzeigen */
.carousel-inner .carousel-item.active,
.carousel-inner .carousel-item-start,
.carousel-inner .carousel-item-next,
.carousel-inner .carousel-item-prev {
  display: flex;
}

/* Desktop: max. 3 Slides sichtbar */
@media (min-width: 768px) {

  .carousel-inner .card {
    margin-right: 1rem;
  }

  .carousel-inner .col-md-4 {
    width: 32% !important;
  }

  .carousel-inner .carousel-item-right.active,
  .carousel-inner .carousel-item-next,
  .carousel-item-next:not(.carousel-item-start) {
    transform: translateX(32%) !important;
  }

  .carousel-inner .carousel-item-left.active,
  .carousel-item-prev:not(.carousel-item-end),
  .active.carousel-item-start,
  .carousel-item-prev:not(.carousel-item-end) {
    transform: translateX(-32%) !important;
  }

  .carousel-item-next.carousel-item-start,
  .active.carousel-item-end {
    transform: translateX(0) !important;
  }

  .carousel-inner .carousel-item-prev,
  .carousel-item-prev:not(.carousel-item-end) {
    transform: translateX(-32%) !important;
  }
}

@media (max-width: 768px) {
  .search {
    display: none;
  }
  header {
    justify-content: center;
  }
  header img {
    height: 40px !important;
  }
  .teaser {
    padding: 0 !important;
  }
}

      .bg-body-tertiary {
        margin-left: -50vw;
        margin-right: -50vw;
        padding-left: 50vw;
        padding-right: 50vw;
      }

      .no-wrap {
        white-space: nowrap;
      }

    </style>
    {% block extra_css %}
    {% endblock %}
  {% endblock %}
  {% render_block "css" %}

  {% block meta %}
    {# Translators: meta description #}
  {% endblock %}

  {% block extra_head %}
  {% endblock %}
</head>

<body {% if request.user.is_authenticated %}data-user="{{ request.user.id }}" data-useremail="{{ request.user.email }}"{% endif %}{% block body_extra_attributes %}{% endblock %}>
  <div style="overflow-x: hidden;">
  {% cms_toolbar %}
  {% block body_tag %}{% block body %}{% block main %}{% endblock %}{% endblock %}{% endblock %}
  {% block extra_footer %}{% endblock %}

  {% block scripts %}
  <script src="{% static 'froide_govplan/js/bootstrap.bundle.min.js' %}" crossorigin="anonymous"></script>
  <script src="{% static 'froide_govplan/js/jquery-3.6.4.min.js' %}"></script>
  <script lang="javascript">

  // var myCarousel = document.querySelector('#myCarousel')
// var carousel = new bootstrap.Carousel(myCarousel, {
//   interval: 100000
// })

$('.carousel .carousel-item').each(function(){
    var minPerSlide = 3;
    var next = $(this).next();
    if (!next.length) {
    next = $(this).siblings(':first');
    }
    next.children(':first-child').clone().appendTo($(this));
    
    for (var i=0;i<minPerSlide;i++) {
        next=next.next();
        if (!next.length) {
        	next = $(this).siblings(':first');
      	}
        
        next.children(':first-child').clone().appendTo($(this));
      }
});


const Ze = t => {
    const e = t.dataset.confirm;
    return e ? !!window.confirm(e) : !0
};
const ke = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>',
    Ye = t => {
        Array.from(t.querySelectorAll("button, input")).forEach(e => {
            e.getAttribute("type") === "submit" && (e.innerHTML = `${ke}${e.innerHTML}`), e.setAttribute("disabled", "")
        })
    },
    Je = t => {
        Array.from(t.querySelectorAll("button, input")).forEach(e => {
            e.getAttribute("type") === "submit" && (e.innerHTML = e.innerHTML.replace(ke, "")), e.removeAttribute("disabled")
        })
    };
function Xe() {
    const t = document.querySelectorAll("form.ajaxified");
    Array.from(t).forEach(e => {
        e.addEventListener("submit", n => {
            if (n.preventDefault(), !Ze(e)) return !1;
            const r = e.getAttribute("method") || "post";
            let o = e.getAttribute("action") || "";
            const i = new FormData(e),
                s = Array.from(i).map(c => c.map(l => encodeURIComponent(l)).join("=")).join("&");
            r.toLowerCase() === "get" && (o = `${o}?${s}`);
            const a = new XMLHttpRequest;
            a.open(r, o, !0), a.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), a.setRequestHeader("X-Requested-With", "XMLHttpRequest"), a.onload = () => {
                var l, u;
                if (e.dataset.modalcontainer) {
                    const d = document.querySelector(e.dataset.modalcontainer);
                    d != null && (new $(d).show(), console.log("got modal"));

                    const modalElement = document.getElementById('govplan-searchmodal-275111');
                    const modal = new bootstrap.Modal(modalElement);
                    modal.show();

                } else if (e.dataset.modal) {
                    const d = document.getElementById(e.dataset.modal);
                    (l = d == null ? void 0 : d.dataset) != null && l.bsTarget && ((u = $.getInstance(document.querySelector(d.dataset.bsTarget))) == null || u.hide())
                }
                const c = a.responseText;
                if (c[0] === "/") {
                    window.location.href = c, c.includes("#") && window.location.reload();
                    return
                }
                if (e.dataset.container) {
                    Je(e);
                    const d = document.querySelector(e.dataset.container);
                    d != null && (d.innerHTML = c)
                } else {
                    const d = e.closest(".ajax-parent");
                    if (d != null)
                        if (c[0] === "{") {
                            const f = JSON.parse(c);
                            f.errors && (d.outerHTML = `<div class="alert alert-danger">${f.errors}</div>`)
                        } else d.outerHTML = c;
                    else e.outerHTML = c
                }
            }, r.toLowerCase() !== "get" ? a.send(s) : a.send(), Ye(e)
        })
    })
}    
Xe();
  </script>
  {% endblock %}
  {% render_block "js" %}

  {% block below_scripts %}{% endblock %}
</div>
</body>
</html>
