.aside-block-wrapper {
  margin-bottom: 55px;
}

.frame-ruler-before:before {
  border-top: none
}

.navigation  .tx-indexedsearch-searchbox input[type="text"] {
  margin-bottom: 0;
}

.navigation  .tx-indexedsearch-searchbox  legend {
  display: none;
}

.navigation  .search-label {
  display: none;
}

.navigation  .tx-indexedsearch-search-submit  {
  display: none ;
} 

.navigation .navigation-icons .tx-indexedsearch-searchbox {
  margin: 0;
}

/* .navigation  nav ul li.icon-list  a {
  padding: 5px;
} */

/* Contact form parity with live v13 output */
form[id^="contactform-"] label.form-label {
  display: none;
}

form[id^="contactform-"] .btn.btn-primary {
  background: transparent;
  border-color: #13c4d5;
  color: #13c4d5;
}

form[id^="contactform-"] .btn.btn-primary:hover,
form[id^="contactform-"] .btn.btn-primary:focus {
  background: #13c4d5;
  border-color: #13c4d5;
  color: #fff;
}

/**
 * Body text contrast / size from Site Settings (CSS variables).
 * Defaults match theme: #adadad / 1rem. Override in Site Settings when needed.
 * Must win over app.css mobile-first `body { font-size: 15px }` and desktop 16px.
 */
body {
  color: var(--theme-body-color, #adadad);
  font-size: var(--theme-body-size, 1rem) !important;
  line-height: 1.55;
}

.content-section,
.frame-type-text,
.frame-type-textmedia,
.ce-bodytext,
.blog-detail,
.entry-content,
.page .content {
  color: var(--theme-body-color, #adadad);
  font-size: var(--theme-body-size, 1rem);
  line-height: 1.55;
}

.content-section p,
.frame-type-text p,
.frame-type-textmedia p,
.ce-bodytext p,
.blog-detail p,
.entry-content p {
  color: inherit;
  font-size: inherit;
  line-height: inherit;
}

/**
 * Article lists: app.css resets `ul` globally and `main ul { list-style: none }`.
 * Text CEs output bodytext without `.ce-bodytext` (theme Text.html).
 * Restore bullets/numbers only in article frames — not nav/meta.
 */
main .frame-type-text ul,
main .frame-type-textmedia ul,
main .ce-bodytext ul,
main .news-text-wrap ul,
main .teaser-text ul,
main .author-detail-profile__bio ul,
main .author-about-content ul,
.frame-type-text ul,
.frame-type-textmedia ul,
.ce-bodytext ul,
.news-text-wrap ul,
.teaser-text ul,
.author-detail-profile__bio ul,
.author-about-content ul {
  list-style-type: disc;
  list-style-position: outside;
  margin: 0 0 1rem;
  padding-left: 1.5em;
}

main .frame-type-text ol,
main .frame-type-textmedia ol,
main .ce-bodytext ol,
main .news-text-wrap ol,
main .teaser-text ol,
main .author-detail-profile__bio ol,
main .author-about-content ol,
.frame-type-text ol,
.frame-type-textmedia ol,
.ce-bodytext ol,
.news-text-wrap ol,
.teaser-text ol,
.author-detail-profile__bio ol,
.author-about-content ol {
  list-style-type: decimal;
  list-style-position: outside;
  margin: 0 0 1rem;
  padding-left: 1.5em;
}

main .frame-type-text li,
main .frame-type-textmedia li,
main .ce-bodytext li,
main .news-text-wrap li,
main .teaser-text li,
main .author-detail-profile__bio li,
main .author-about-content li,
.frame-type-text li,
.frame-type-textmedia li,
.ce-bodytext li,
.news-text-wrap li,
.teaser-text li,
.author-detail-profile__bio li,
.author-about-content li {
  display: list-item;
  margin-bottom: 0.35em;
}

/* Theme uses a custom roman counter on `main ol li:before` — use normal numbers in articles. */
main .frame-type-text ol li,
main .frame-type-textmedia ol li,
main .ce-bodytext ol li,
main .news-text-wrap ol li {
  padding-left: 0;
  list-style-type: decimal;
  position: static;
}

main .frame-type-text ol li:before,
main .frame-type-textmedia ol li:before,
main .ce-bodytext ol li:before,
main .news-text-wrap ol li:before,
main .author-detail-profile__bio ol li:before,
.author-detail-profile__bio ol li:before {
  content: none;
}

/* Author bio: `main ul { list-style: none }` and roman `ol li:before` must be fully overridden. */
main .author-detail-profile__bio ul,
main .author-info-bio ul,
.author-detail-profile__bio ul,
.author-info-bio ul {
  list-style: disc outside;
  padding-left: 1.5em;
  margin: 0 0 1rem;
}

main .author-detail-profile__bio ul li,
main .author-info-bio ul li,
.author-detail-profile__bio ul li,
.author-info-bio ul li {
  list-style: disc outside;
  display: list-item;
}

main .author-detail-profile__bio ol,
.author-detail-profile__bio ol {
  list-style: decimal outside;
  padding-left: 1.5em;
  margin: 0 0 1rem;
  counter-reset: none;
}

main .author-detail-profile__bio ol li,
.author-detail-profile__bio ol li {
  list-style: decimal outside;
  display: list-item;
  position: static;
  padding-left: 0;
}

main .frame-type-text ul ul,
main .ce-bodytext ul ul,
.frame-type-text ul ul,
.ce-bodytext ul ul,
.news-text-wrap ul ul {
  list-style-type: circle;
  margin-bottom: 0;
}

main .frame-type-text ol ol,
main .ce-bodytext ol ol,
.frame-type-text ol ol,
.ce-bodytext ol ol,
.news-text-wrap ol ol {
  list-style-type: lower-alpha;
  margin-bottom: 0;
}

/**
 * Owl Carousel sets .owl-carousel { display:none } until JS adds .owl-loaded.
 * If Owl init fails, related posts would stay invisible — show a simple grid instead.
 */
.related-post-slider.owl-carousel:not(.owl-loaded) {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 20px;
}

/**
 * Sidebar "Latest Posts": app.css hardcodes link color #adadad on teasers.
 * Use site setting body text color for readable contrast.
 */
.aside-block .project-posts .project-posts-text a,
.related-post-wrapper .project-posts .project-posts-text a {
  color: var(--theme-body-color, #333333);
}

.aside-block .project-posts .project-posts-text a:hover,
.related-post-wrapper .project-posts .project-posts-text a:hover {
  color: #00bcd4;
}

.aside-block .project-posts .project-posts-text p,
.related-post-wrapper .project-posts .project-posts-text p {
  color: inherit;
  font-size: inherit;
}

/**
 * About us items 01–04 (ns_frameCount):
 * - Smaller numbers (beat app.css 45→100px scale)
 * - Readable teasers (body color/size)
 * Column layout comes from the 4-col container (col-md-3 / col-sm-6).
 */
.frame-type-ns_frameCount,
.frame-type-ns_frameCount p {
  color: var(--theme-body-color, #adadad);
  font-size: var(--theme-body-size, 1rem);
  line-height: 1.55;
}

.frame-type-ns_frameCount {
  margin-top: 0.75rem;
  margin-bottom: 0.75rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}

.frame-type-ns_frameCount .frame-count,
.frame-count {
  font-size: 28px !important;
  line-height: 34px !important;
  margin-bottom: 12px;
}

.frame-count+h3 {
  font-size: 1rem !important;
  line-height: 1rem !important;
}

.frame-type-ns_frameCount h3 {
  margin-bottom: 0.75rem;
}

.frame-type-ns_frameCount .btn {
  margin-top: 1rem;
}

@media (min-width: 768px) {
  .frame-type-ns_frameCount .frame-count,
  .frame-count {
    font-size: 36px !important;
    line-height: 42px !important;
  }

  .frame-count+h3 {
    font-size: 1.05rem !important;
    line-height: 1.25rem !important;
  }
}

@media (min-width: 992px) {
  .frame-type-ns_frameCount .frame-count,
  .frame-count {
    font-size: 42px !important;
    line-height: 50px !important;
  }

  .frame-count+h3 {
    font-size: 1.25rem !important;
    line-height: 1.5rem !important;
  }
}

@media (min-width: 1200px) {
  .frame-type-ns_frameCount .frame-count,
  .frame-count {
    font-size: 48px !important;
    line-height: 56px !important;
  }
}

/**
 * Blog card titles: keep current font size; allow line breaks so long
 * German words (e.g. Organisationsstrukturen) do not overflow the card.
 * Date stays on the first line; title text wraps on the next line(s).
 */
.news-teaser a.news-title {
  display: block;
  max-width: 100%;
}

.news-teaser .news-title,
.news-teaser .news-title h2,
.news-teaser .news-title h3 {
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: break-word;
  max-width: 100%;
}

.news-teaser .news-title h2 > span,
.news-teaser .news-title h3 > span {
  display: block;
}

/**
 * Blog teaser images: same box size everywhere (homepage + grid).
 * Keeps current layouts; fixed height + object-fit so originals
 * do not blow up the card (client: same size as grid listing).
 * Use explicit img height (not height:100%) so owl-carousel/picture
 * cannot collapse the image to 0.
 */
.news-teaser .news-media {
  width: 100%;
  overflow: hidden;
  line-height: 0;
}

.news-teaser .news-media picture {
  display: block;
  width: 100%;
}

.news-teaser .news-media img {
  display: block;
  width: 100%;
  height: 240px;
  object-fit: cover;
  object-position: center;
}

/**
 * Author portrait: link wrapper was 0×0 (img is position:absolute), which
 * made some browsers show alt text instead of the photo. Fill the circle.
 * Do not use lazysizes here — above-the-fold, and lazyload+real src breaks.
 */
.author-info-block .author-info-image > a {
  display: block;
  width: 100%;
  height: 100%;
  position: relative;
}

.author-info-block .author-info-image img {
  object-fit: cover;
  object-position: center;
}

/**
 * Related posts with no featured image still reserve the circular slot
 * so the text column does not shift (Organisationsstrukturen, etc.).
 */
.project-posts .project-posts-image--placeholder {
  background-color: #e8e8e8;
  pointer-events: none;
}
