/* KELA site CSS owned in the theme repo (moved out of Customizer → Additional CSS on 2026-09-08). Loaded after assets/style.css and style.css. */

/* KELA Marketing CMS — press release subtitle size and hero spacing (2026-09-05) */
.single-press_release .hero-press { padding-bottom: 20px !important; }
.single-press_release .wp-block-group:has(> .relise-content-wrap) { padding-top: 12px !important; }
.single-press_release .relise-content-wrap > .wp-block-group > h2.wp-block-heading,
.single-press_release .relise-content-wrap .special-title > h3.wp-block-heading,
.single-press_release .relise-content-wrap p > strong:only-child {
  font-size: clamp(18px, 1.5vw, 20px) !important;
  line-height: 1.4 !important;
  letter-spacing: -0.2px !important;
  font-weight: 500 !important;
  margin-top: 0 !important;
}


.fpg-post-item .documents-wrap-descr p { margin: 0 !important; }

/* KELA Marketing CMS — newsroom card cosmetics (structure lives in the card template) (2026-09-05) */
.fpg-post-item .documents-wrap-descr { gap: 10px !important; align-items: center !important; }
.fpg-post-item .documents-wrap-descr figure.wp-block-image { margin: 0 !important; flex: none; }
.fpg-post-item .documents-wrap-descr figure.wp-block-image img { width: 28px !important; height: 28px !important; object-fit: contain; border-radius: 6px; display: block; background: #fff; }
.fpg-post-item .documents-wrap-descr p, .fpg-post-item .documents-wrap-descr .wp-block-post-date { margin: 0 !important; }
.fpg-post-item .documents-wrap-descr .wp-block-post-date::before { content: "·"; margin-right: 8px; }
.fpg-post-item .kela-featured { display: inline-block; padding: 1px 8px; border-radius: 999px; border: 1px solid #EF0A38; background: transparent; color: #EF0A38 !important; font-size: 11px !important; font-weight: 500; letter-spacing: 0; text-transform: none; line-height: 1.5; }
.fpg-post-item .kela-featured:empty { display: none; }
.fpg-post-item .special-title { margin: 0 !important; }
.fpg-post-item .special-title h4 { margin: 0 !important; }
.fpg-post-item .wp-block-buttons { margin-top: 2px !important; }
.fpg-post-item .card-read-more-newsroom .wp-block-button__link { font-size: 12px !important; line-height: 1.4 !important; font-weight: 600; padding: 0 24px 0 0 !important; background-position: right center !important; }


/* KELA Marketing Reactor — on-demand webinar hero: wider title, 16:9 video box (485px, same as the form column) with 8px corners, tighter gap to the content (2026-09-07) */
@media (min-width: 1025px) {
  .single-webinar .resource-ebook-hero .resource-ebook-text-block { max-width: 640px !important; }
  .single-webinar .resource-ebook-hero .video-placeholder { flex: 0 0 485px !important; width: 485px !important; max-width: 485px !important; }
}
.single-webinar .resource-ebook-hero { padding-bottom: 40px !important; }
.single-webinar .resource-ebook-hero .video-placeholder figure.wp-block-image { margin: 0; border-radius: 8px; overflow: hidden; aspect-ratio: 16 / 9; }
.single-webinar .resource-ebook-hero .video-placeholder figure.wp-block-image img { width: 100% !important; height: 100% !important; object-fit: cover; border-radius: 8px; display: block; }
.single-webinar .resource-ebook-content { padding-top: 40px !important; }
.single-webinar .resource-ebook-content > .resource-ebook-container { margin-top: 0 !important; }



/* KELA Marketing Reactor — breadcrumbs above the webinar hero (single-webinar template); the strip overlaps the hero's top padding so the background runs to the top (2026-09-07) */
@media (min-width: 1025px) {
  /* the header is fixed (≈155px) and the hero clears it with margin-top 112px: start the strip there and pull the hero back up by the strip's height */
  .single-webinar .webinar-breadcrumbs, .single-research .webinar-breadcrumbs { position: relative; z-index: 2; margin-top: 112px; padding-top: 64px !important; margin-bottom: -194px; }
}
@media (max-width: 1024px) { .single-webinar .webinar-breadcrumbs, .single-research .webinar-breadcrumbs { display: none; } }
.single-webinar .webinar-breadcrumbs .breadcrumbs p, .single-research .webinar-breadcrumbs .breadcrumbs p { margin: 0; }
.single-webinar .webinar-breadcrumbs .breadcrumbs figure, .single-research .webinar-breadcrumbs .breadcrumbs figure { margin: 0; }


/* KELA Marketing Reactor — play button on the webinar video cover: red semi-transparent circle with the theme's white triangle; hides the old play_circle.png (not on staging) (2026-09-07) */
.single-webinar .video-placeholder.video_image .play-icon-container { width: 72px; height: 72px; border-radius: 50%; background-color: rgba(239, 10, 56, 0.8); background-position: calc(50% + 3px) center; background-size: 26px 30px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); transition: background-color 0.2s; }
.single-webinar .video-placeholder.video_image:hover .play-icon-container { background-color: rgba(239, 10, 56, 1); }
.single-webinar .video-placeholder.video_image .play-icon-container img { display: none; }
.single-webinar .video-placeholder .play-icon-container .message { transform: translateX(-50%) translateY(76px); }

/* KELA Marketing Reactor — HubSpot form fills its box: the wrapper centres its children, so the injected container otherwise shrinks to its intrinsic width (2026-09-08) */
.resource-form-wrapper .hbspt-form, .resource-form-wrapper .hs-form { width: 100%; }

/* KELA Marketing Reactor — research (report) pages: shorter hero, cover mock-up capped, tighter gap to the content (2026-09-09) */
.single-research .resource-ebook-hero { padding-bottom: 40px !important; }
.single-research .resource-ebook-hero .resource-ebook-container { align-items: center; }
.single-research .resource-ebook-hero .resource-ebook-text-block { max-width: 640px !important; }
.single-research .resource-ebook-hero .wp-block-image.standard { flex: 0 0 485px !important; width: 485px !important; max-width: 485px !important; margin: 0; text-align: center; }
.single-research .resource-ebook-hero .wp-block-image.standard img { max-height: 380px; height: auto !important; width: auto !important; max-width: 100% !important; object-fit: contain; display: inline-block; }  /* keep the cover's proportion (the theme's width:100% would stretch it) */
@media (max-width: 1079px) { .single-research .resource-ebook-hero .wp-block-image.standard { flex-basis: auto !important; width: 100% !important; max-width: 485px !important; margin: 0 auto; } }
.single-research .resource-ebook-content { padding-top: 40px !important; }
.single-research .resource-ebook-content > .resource-ebook-container { margin-top: 0 !important; }

/* KELA Marketing Reactor — document pages (eBooks, guides, datasheets) use the research layout: breadcrumbs strip, shorter hero, cover capped, tighter gap (2026-09-09) */
@media (min-width: 1025px) { .single-document .webinar-breadcrumbs { position: relative; z-index: 2; margin-top: 112px; padding-top: 64px !important; margin-bottom: -194px; } }
@media (max-width: 1024px) { .single-document .webinar-breadcrumbs { display: none; } }
.single-document .webinar-breadcrumbs .breadcrumbs p, .single-document .webinar-breadcrumbs .breadcrumbs figure { margin: 0; }
.single-document .resource-ebook-hero { padding-bottom: 40px !important; }
.single-document .resource-ebook-hero .resource-ebook-container { align-items: center; }
.single-document .resource-ebook-hero .wp-block-image.standard img { max-height: 380px; width: auto; border-radius: 8px; }
.single-document .resource-ebook-content { padding-top: 40px !important; }
.single-document .resource-ebook-content > .resource-ebook-container { margin-top: 0 !important; }

/* KELA Marketing Reactor — speakers without a photo get a neutral person icon instead of an empty gap (2026-09-09) */
.webinar-speakers-avatar.speaker-placeholder img { background: #f2f2f4; border-radius: 50%; padding: 18%; box-sizing: border-box; }

/* KELA Marketing Reactor — resource lobbies (Documents 32638, Research 32308, Webinars 32662): tighter gap between the hero and the cards.
   The page blocks carry hero padding-bottom 80px + section margin-top 108px + inner margin 44px (≈230px); this brings it to ≈80px (2026-09-09) */
body.page-id-32638 .hero-tprm, body.page-id-32308 .hero-tprm, body.page-id-32662 .hero-tprm { padding-bottom: 48px !important; }
body.page-id-32638 .hero-tprm ~ .wp-block-group, body.page-id-32308 .hero-tprm ~ .wp-block-group, body.page-id-32662 .hero-tprm ~ .wp-block-group { margin-top: 32px !important; }
body.page-id-32638 .hero-tprm ~ .wp-block-group > .wp-block-group:first-child, body.page-id-32308 .hero-tprm ~ .wp-block-group > .wp-block-group:first-child, body.page-id-32662 .hero-tprm ~ .wp-block-group > .wp-block-group:first-child { margin-top: 0 !important; }

/* KELA Marketing Reactor — document hero: the document's own cover sits centred in the right column, the same width as the download box below it
   (as the webinar video does), with rounded corners and a soft shadow (2026-09-09) */
.single-document .resource-ebook-hero .resource-ebook-text-block { max-width: 640px !important; }
.single-document .resource-ebook-hero .wp-block-image.standard { flex: 0 0 485px !important; width: 485px !important; max-width: 485px !important; margin: 0; text-align: center; }
.single-document .resource-ebook-hero .wp-block-image.standard img { max-height: 340px; height: auto !important; width: auto !important; max-width: 100% !important; object-fit: contain; display: inline-block; }  /* keep the cover's own proportion; the theme's width:100% would stretch it */
.single-document .resource-ebook-hero .wp-block-image.flat-cover img { border-radius: 8px; box-shadow: 0 8px 28px rgba(0, 0, 0, 0.14); }  /* generated covers only; 3D mock-ups stay as they are */
@media (max-width: 1079px) { .single-document .resource-ebook-hero .wp-block-image.standard { flex-basis: auto !important; width: 100% !important; max-width: 485px !important; margin: 0 auto; } }

/* KELA Marketing Reactor — success story pages share the document layout (2026-09-09) */
@media (min-width: 1025px) { .single-success_stories .webinar-breadcrumbs { position: relative; z-index: 2; margin-top: 112px; padding-top: 64px !important; margin-bottom: -194px; } }
@media (max-width: 1024px) { .single-success_stories .webinar-breadcrumbs { display: none; } }
.single-success_stories .webinar-breadcrumbs .breadcrumbs p, .single-success_stories .webinar-breadcrumbs .breadcrumbs figure { margin: 0; }
.single-success_stories .resource-ebook-hero { padding-bottom: 40px !important; }
.single-success_stories .resource-ebook-hero .resource-ebook-container { align-items: center; }
.single-success_stories .resource-ebook-hero .resource-ebook-text-block { max-width: 640px !important; }
.single-success_stories .resource-ebook-hero .wp-block-image.standard { flex: 0 0 485px !important; width: 485px !important; max-width: 485px !important; margin: 0; text-align: center; }
.single-success_stories .resource-ebook-hero .wp-block-image.standard img { max-height: 340px; height: auto !important; width: auto !important; max-width: 100% !important; object-fit: contain; display: inline-block; }
.single-success_stories .resource-ebook-hero .wp-block-image.flat-cover img { border-radius: 8px; box-shadow: 0 8px 28px rgba(0, 0, 0, 0.14); }
@media (max-width: 1079px) { .single-success_stories .resource-ebook-hero .wp-block-image.standard { flex-basis: auto !important; width: 100% !important; max-width: 485px !important; margin: 0 auto; } }
.single-success_stories .resource-ebook-content { padding-top: 40px !important; }
.single-success_stories .resource-ebook-content > .resource-ebook-container { margin-top: 0 !important; }
/* Success Stories lobby (page 36895): tighter gap between the hero and the cards, like the other lobbies */
body.page-id-36895 .hero-tprm { padding-bottom: 48px !important; }
body.page-id-36895 .hero-tprm ~ .wp-block-group { margin-top: 32px !important; }
body.page-id-36895 .hero-tprm ~ .wp-block-group > .wp-block-group:first-child { margin-top: 0 !important; }

/* --- About Us: "KELA In The Press" query loop (2026-09-10) ---------------------------------------------------------
   The agency's `.about-press .fpg-grid article > div { height: 100% }` was written for a single wrapper div, but the
   query loop renders the date and the excerpt as direct children of the article, so each of them was stretched to the
   full card height and the three cards overlapped (title over excerpt, dates floating above the next image). */
.about-press .fpg-grid article { display: flex; flex-direction: column; gap: 12px; }
.about-press .fpg-grid article > div { height: auto !important; }
.about-press .fpg-grid .wp-block-post-featured-image { margin: 0 0 4px; }
.about-press .fpg-grid .wp-block-post-title { margin: 0; }
.about-press .fpg-grid .wp-block-post-date { margin: 0; font-size: 14px; color: #616068; }
.about-press .fpg-grid .wp-block-post-excerpt { margin: 0 !important; }
.about-press .fpg-grid .wp-block-post-excerpt__excerpt { font-size: 15px; line-height: 1.5; }

/* --- Mobile menu: tighter sub-menu rows (2026-09-10) -----------------------------------------------------------------
   Each sub-menu item was 60px tall (10px item padding on top of the 8px link padding); 40px keeps the tap target. */
@media only screen and (max-width: 1124px) {
  .main-menu .wp-block-navigation__submenu-container .wp-block-navigation-item { padding-block: 0 !important; }
  .wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container { gap: 2px; margin-top: 4px; }
}

/* --- Promo bar (kela/promo-banner, 2026-09-11) ------------------------------------------------------------------
   The bar holds one or more messages, one on screen at a time; with two or more it cycles on a timer. 24px keeps the
   bar at exactly the 40px it has always been, and each message carries its own full-width link with the close above it.
   Three ways to change over, chosen in the Reactor: slide pushes the track up so the next arrives from below,
   fade cross-fades in place, none swaps outright. */
/* The bar is a flex child of the header, so min-width:auto let it grow to its own nowrap content and run off a
   phone screen. Pinning it to the parent's width is what lets the title shrink and ellipsise instead. */
.main-header-redline { width: 100%; min-width: 0; box-sizing: border-box; }
.main-header-redline-inner { position: relative; height: 24px; width: 100%; min-width: 0; }
/* the scrolling area is its own box so the close can sit beside it rather than on top of the text */
.redline-viewport { position: relative; height: 24px; overflow: hidden; width: 100%; }
.main-header-redline-inner .redline-msg { position: relative; flex: none; height: 24px; display: flex; align-items: center; justify-content: center; flex-wrap: nowrap; --msg-gap: 4px; gap: var(--msg-gap); padding: 0 22px; box-sizing: border-box; }

/* The title takes whatever room is left and ellipsises, so every screen shows as much of it as it can hold.
   min-width:0 is what lets a flex child shrink below its own content width at all. */
.main-header-redline-inner .redline-title { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.main-header-redline-inner .redline-lead { flex: none; }
.main-header-redline-inner .selection-right { flex: none; }
.anim-ticker .redline-title { flex: none; max-width: none; overflow: visible; text-overflow: clip; }
.anim-ticker .redline-msg { padding: 0; }          /* the separator's own margins are the whole gap, both sides equal */
.anim-ticker .redline-track { gap: 0; }
.anim-ticker .redline-lead > p { display: inline; }
.anim-ticker .redline-viewport { width: calc(100% - 22px); -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent); }
.anim-ticker.ticker-still .redline-viewport { width: 100%; -webkit-mask-image: none; mask-image: none; }
.anim-ticker.ticker-still .redline-msg::after { content: none; }

/* On a narrow phone the title matters more than the lead-in, so the lead-in drops back to just its icon. */
/* These only apply when the bar is NOT a ticker, which on a phone means the moment before the script decides, or a
   reader who asked for reduced motion. A ticker has room to scroll, so it keeps the lead-in and, crucially, keeps the
   padding and gap at zero: stacked on the separator's own margins they made the space after the dot three times the
   space before it. */
@media only screen and (max-width: 560px) {
  .main-header-redline-inner:not(.anim-ticker) .redline-lead > p { display: none; }
  .main-header-redline-inner:not(.anim-ticker) .redline-msg { padding: 0 20px; gap: 6px; }
  .main-header-redline-inner:not(.anim-ticker) .selection-right { margin-left: 12px !important; }
}
.main-header-redline-inner .redline-msg p { margin: 0; }   /* descendant: the lead-in sits inside .redline-lead */
.redline-lead { display: flex; align-items: center; flex-wrap: nowrap; gap: var(--wp--preset--spacing--12-4); }
.redline-icon { width: 15px; height: 15px; flex: none; color: #fff; }
.main-header-redline-cover { position: absolute; inset: 0; z-index: 1; }
.main-header-redline-cross { position: absolute; right: 0; top: 50%; transform: translateY(-50%); z-index: 2; cursor: pointer; }

.redline-track { display: flex; flex-direction: column; }
.anim-slide .redline-track { transition: transform .45s cubic-bezier(.4, 0, .2, 1); will-change: transform; }

/* fade and none stack the messages instead of queueing them */
.anim-fade .redline-track, .anim-none .redline-track { display: block; }
.anim-fade .redline-msg, .anim-none .redline-msg { position: absolute; inset: 0; opacity: 0; pointer-events: none; }
.anim-fade .redline-msg.is-on, .anim-none .redline-msg.is-on { opacity: 1; pointer-events: auto; }
.anim-fade .redline-msg { transition: opacity .4s ease; }

/* ticker: every message on one line, repeated until it is wider than the bar, scrolling by exactly one set */
.anim-ticker .redline-track { display: flex; flex-direction: row; width: max-content; }
.anim-ticker .redline-track.is-running { animation: kela-redline-ticker var(--ticker-dur, 24s) linear infinite; }
/* the row's own flex gap sits to the left of the separator too, so it comes off that side to keep both equal */
.anim-ticker .redline-msg::after { content: "•"; margin-left: calc(24px - var(--msg-gap)); margin-right: 24px; color: #fff; opacity: 1; font-size: 14px; line-height: 1; }
.anim-ticker .main-header-redline-cover { position: absolute; inset: 0; }
.main-header-redline-inner.anim-ticker:hover .redline-track { animation-play-state: paused; }
@keyframes kela-redline-ticker { from { transform: translateX(0); } to { transform: translateX(calc(var(--ticker-x) * -1)); } }

@media (prefers-reduced-motion: reduce) {
  .anim-slide .redline-track, .anim-fade .redline-msg { transition: none; }
  .anim-ticker .redline-track.is-running { animation: none; }
}

/* --- Header: tighter (2026-09-12) -------------------------------------------------------------------------------
   The utility strip sat in 22px of space above and 35px below. The space below is not padding: the nav row's height
   comes from the 42px "Book a Demo" button and the 18px menu text is centred against it, so trimming the button's
   own 8px of vertical padding is the only thing that closes it. Together: 22/35 becomes 10/16, the same rhythm at
   about 55% less, and the header goes 155px -> 112px.

   The strip is #utility-nav. It used to share id="main-menu" with the main navigation, which meant every selector hit
   both and padded the navigation by the same amount it took off above it.

   !important because these are inline styles on the blocks, and desktop-only because below 1125px the utility group
   becomes the fixed slide-out drawer and the same buttons are the drawer's tap targets. */
@media only screen and (min-width: 1125px) {
  #utility-nav { padding-top: 6px !important; line-height: 24px !important; }
  /* weglot hardcodes height:37px on its switcher, which would hold the row open once the links have shrunk */
  #utility-nav .country-selector.weglot-dropdown,
  #utility-nav .country-selector.weglot-dropdown a,
  #utility-nav .country-selector.weglot-dropdown .wgcurrent,
  #utility-nav .country-selector.weglot-dropdown .wglanguage-name { height: 24px !important; line-height: 24px !important; }
  #utility-nav + .wp-block-group { padding-top: 5px !important; padding-bottom: 5px !important; }
  #utility-nav + .wp-block-group .wp-block-button__link { padding-top: 3px !important; padding-bottom: 3px !important; }
}

/* --- Header clearance (2026-09-12) ---------------------------------------------------------------------------------
   The header is position:fixed, so every page's first section has to clear it. That was done with a hardcoded top
   margin per page, approximated five different ways — 130, 140, 148, 156 and 164px — all of them guesses at a header
   height that has since changed. One rule replaces the lot: the first section starts exactly where the header ends,
   measured (includes/header-height.php), so it is right on every breakpoint and stays right if the header changes.

   The home hero is the exception: it clears the header with padding rather than margin, so it is excluded here and
   handled below, or the two would stack. */
.entry-content > :first-child:not(.attackers-wrap) { margin-top: var(--kela-header-h, 112px) !important; }

/* The mega-menu panels hang off the header's bottom edge. style.css pins them with `.m-auto { top: 140px }`, a value
   from an older, taller header, which left a band of page showing above each panel — and would break again the moment
   a visitor dismissed the promo bar. --kela-header-h is measured (includes/header-height.php); the fallback matches
   the current desktop header in case the script has not run yet. The wrapper is NOT inside .main-header, so it is
   matched by the panel it contains. */
.m-auto:has(> .megamenu-item) { top: var(--kela-header-h, 112px) !important; }

/* The hub pages (/platform/, /solutions/, /partners/) now carry the theme's standard hero, so they clear the header
   the same way every other page does. .kela-hub-hero only centres the wordmark-width column. */
.kela-hub-hero .w-820 { max-width: 820px; margin-inline: auto; }

/* --- Home hero (2026-09-12) ---------------------------------------------------------------------------------------
   Two faults, both visible as soon as the header got shorter.

   The wrap cleared the header with a hardcoded 140px, so the hero background started 28px below the nav and a band of
   page showed through. It now follows the header's measured height, so the artwork meets the header exactly.

   And .alt-hero declares `background-size: 100% 666px` on a box that renders 576px tall, which cut 90px off the
   bottom of the composite. The box is now at least as tall as the artwork it asks for, and no-repeat so it can never
   tile if a longer headline pushes it past 666. Desktop only: on a phone a 666px hero would fill the screen. */
.attackers-wrap { padding-top: var(--kela-header-h, 112px) !important; }
@media only screen and (min-width: 1125px) {
  .alt-hero { min-height: 666px; background-repeat: no-repeat; background-size: cover; }
}

/* A breadcrumb in a flow (constrained) container gets no block gap from the theme, which left the Partner Program
   heading hard against it. The margin here is a minimum rather than an addition: adjacent vertical margins collapse,
   so a container that already spaces its children keeps its own spacing and only a container with none gains this.
   Flex containers are deliberately not matched — they space children with gap, where a margin would add instead of
   collapsing and would push every heading down. */
.wp-block-group-is-layout-constrained > .breadcrumbs { margin-bottom: 28px; }

/* --- Breadcrumbs (2026-09-12) --------------------------------------------------------------------------------------
   The separator is an image block, and WordPress gives those a 12px bottom margin. Inside an align-items:center row
   that margin counts as part of the box, so every arrow sat 6px above the text it separates. */
.breadcrumbs > p, .breadcrumbs > figure { margin: 0; }
.breadcrumbs > figure img { display: block; }

/* --- Hero top padding (2026-09-12) ----------------------------------------------------------------------------------
   Every page hero sets its own top padding, and the values were authored when the header was taller and the hero had
   to pay for it: the resource lobbies and the newsroom family use the 246px token (246 = an old header plus the gap),
   careers 114, AITRiSM 123, the podcast 120, while the platform, solutions, partners and contact pages use 105.
   Header clearance is now a measured margin on the first section (above), so those larger paddings double-count the
   header — which is why the breadcrumb and the H1 sat up to 141px lower on some pages than on others.

   One value for all of them, and it is the theme's own standard token, not a new number: 105px on a wide screen,
   easing to 20px by 800px wide. So the breadcrumb starts on the same line on every page, and the H1 sits a little
   above the middle of the screen with more of the page showing below it.

   Scoped to pages, and to a first section that is a hero: the home page (.attackers-wrap), About Us and Start for FREE
   lead with their own compositions and are left alone, as are the single post templates, where the breadcrumb strip
   deliberately overlaps the hero so the artwork runs up to the header. */
body.page .entry-content > :first-child[class*="hero"] { padding-top: var(--wp--preset--spacing--105-20) !important; }

/* Some heroes pair a text column with taller artwork and centre the row: the podcast sets a 613px text column between
   two artwork panels, Technology Partners puts a 544px column beside an illustration. Centring pushes the text column
   down by half the height difference — 39px on the podcast, 72px on Technology Partners — so the breadcrumb missed
   the line and the heading started far too low. The column carrying the breadcrumb starts at the top of the hero
   instead; its siblings stay centred, so the artwork does not move. Rather than a number per page, the rule finds the
   row by the breadcrumb inside it, and so holds for any hero built this way later. */
body.page .entry-content > :first-child[class*="hero"] .is-layout-flex:has(> * > .breadcrumbs) { align-items: flex-start; }
body.page .entry-content > :first-child[class*="hero"] .is-layout-flex:has(> * > .breadcrumbs) > *:not(:has(.breadcrumbs)) { align-self: center; }

/* Partner Program leads with the home page's hero pattern, and its breadcrumb block sat above the artwork rather than
   inside it, so it rendered on white, hard against the nav and flush to the left edge of the window. Fixed in the page
   itself — the block now sits inside .hero-partner, which carries the standard hero top padding — so there is no CSS
   here to keep in step. Noted so the next person does not re-add a rule for it. */

/* The podcast and Partner Program heroes are centred compositions whose breadcrumb is a direct child of the hero
   rather than of a centred column — so it stretched the full width of the hero and sat against the window edge while
   the heading above it was centred. Centre it with the rest of the hero. The lobby heroes need nothing here: their
   breadcrumb sits inside a column that already centres its children. */
.hero-podcast > .breadcrumbs, .hero-partner > .breadcrumbs { justify-content: center; }

/* .centered-on-740 centres the hero's children on a phone, which is what the breadcrumb, heading and paragraph want —
   but the search strip is a block child of a flex column, so centring stops it stretching and it collapsed to the
   width of its placeholder. It keeps the full column width; its own contents still centre. */
@media only screen and (max-width: 740px) {
  .centered-on-740 > .all-filters { align-self: stretch !important; }  /* the theme's own rule is !important, so this has to match it */
}

/* --- The blog app's header clearance (2026-09-13) --------------------------------------------------------------------
   The Entail blog prints its own `#ent-root { margin-top: 155px }` in an inline <style> — 155px being the height this
   site's header used to be — so a band of empty page showed between the nav and the blog hero once the header got
   shorter: 43px on a desktop, 51px on a phone. It now follows the measured header like every other page.

   This overrides rather than edits, because the declaration belongs to the plugin and a plugin update would undo an
   edit there. !important is needed because that inline <style> comes after this file in the document. */
#ent-root { margin-top: var(--kela-header-h, 112px) !important; }

/* --- Webinars: Coming Up (2026-09-13) --------------------------------------------------------------------------------
   The section carries its own spacing rather than sitting in a group on the page, because it renders nothing at all
   when no webinar is upcoming — a group would leave its margin and padding behind as an empty gap. Matches the
   spacing of the On Demand section below it. */
.kela-coming-up { max-width: 1140px; margin: 32px auto 0; padding: 0 var(--wp--preset--spacing--150-20); }
.kela-coming-up > h2 { margin-bottom: 44px; }

/* --- Legal pages (2026-09-14) -----------------------------------------------------------------------------------------
   Privacy Policy and EULA are long documents copied verbatim from production. The theme's heading sizes are made for
   marketing pages — a 40px section number in a 2,500-word legal text is unreadable — so inside .legal-text the
   headings step down to document sizes and paragraphs get reading line-height. Nothing here changes a word. */
.legal-text .legal-title { font-size: 22px; font-weight: 600; margin: 0 0 4px; }
.legal-text h2 { font-size: 24px; line-height: 1.3; margin: 36px 0 12px; }
.legal-text h3 { font-size: 19px; line-height: 1.35; margin: 26px 0 10px; }
.legal-text h4 { font-size: 17px; margin: 20px 0 8px; }
.legal-text p, .legal-text li { font-size: 16px; line-height: 1.7; }
.legal-text p { margin: 0 0 14px; }
.legal-text ul, .legal-text ol { margin: 0 0 14px 22px; }
.legal-text a { color: var(--wp--preset--color--kela-hover-text, #DD0909); text-decoration: underline; }
.legal-text table { width: 100%; border-collapse: collapse; margin: 0 0 18px; font-size: 15px; }
.legal-text td, .legal-text th { border: 1px solid #e4e6e8; padding: 8px 10px; vertical-align: top; }

/* --- Trust badges (2026-09-14): the footer's compliance row, now rendered from a setting ------------------------- */
.trust-badges { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
.trust-badge { display: inline-flex; line-height: 0; }
.trust-badge__img { height: 64px; width: auto; display: block; }
a.trust-badge { transition: opacity .15s; }
a.trust-badge:hover { opacity: .8; }

/* --- Hub hero spacing (2026-09-14): breathing room between the page title and its lead line --------------------- */
.kela-hub-hero h1 { margin-bottom: 18px; }

/* /platform/ lobby: capability tiles run 4 across, team cards 3 across (the shared .solutions-grid is 5 across) */
.solutions-grid.platform-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.solutions-grid.platform-teams { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.platform-grid .by-threats, .platform-teams .by-threats { justify-content: flex-start; }
@media only screen and (max-width: 1024px) {
	.solutions-grid.platform-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media only screen and (max-width: 820px) {
	.solutions-grid.platform-grid, .solutions-grid.platform-teams { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media only screen and (max-width: 520px) {
	.solutions-grid.platform-grid, .solutions-grid.platform-teams { grid-template-columns: minmax(0, 1fr); }
}

/* header utility bar: the Partners login link is a plain link, not the browser's blue */
.wp-block-paragraph a[href*="partners.kelacyber.com"] { color: var(--wp--preset--color--kela-black, #000); text-decoration: none; }
.wp-block-paragraph a[href*="partners.kelacyber.com"]:hover { text-decoration: underline; }

/* Gartner Peer Insights card: one row for score, stars, ratings and submit; market name and date beneath; logo at right */
#reviewContainer > div { align-items: stretch; padding: 20px 28px; width: min(600px, 100%); }
#reviewContainer .gartner-pi-card, #reviewContainer .gartner-pi-stats { display: flex; align-items: center; width: 100%; }
#reviewContainer .gartner-pi-stats { justify-content: space-between; gap: 20px; }
#reviewContainer .gartner-pi-overall-rating.gartner-pi-added-styles { width: auto; flex: 1 1 auto; }
#reviewContainer .gartner-pi-info-conatiner > div { display: flex; align-items: center; gap: 12px; }
#reviewContainer .gartner-pi-score { font-size: 30px; line-height: 1; margin: 0; }
#reviewContainer .gartner-pi-translate { display: flex; align-items: center; gap: 12px; width: auto; margin: 0; }
#reviewContainer .gartner-pi-star-rating { margin: 0; }
#reviewContainer .gartner-pi-reviews-link { display: flex; align-items: center; gap: 4px; white-space: nowrap; margin: 0; }
#reviewContainer .gartner-pi-sourcing-link { margin-left: 12px; padding-left: 12px; border-left: 1px solid #E8E8E8; }
#reviewContainer .market-name { display: flex; gap: 12px; align-items: baseline; margin-top: 6px; padding-left: 42px; }
#reviewContainer .gartner-pi-market-name { white-space: nowrap; font-size: 13px; }
#reviewContainer .gartner-pi-as-of-date { font-size: 11px; color: #6b6b80; white-space: nowrap; }
#reviewContainer .gartner-pi-separator { display: block; width: 1px; align-self: stretch; background: #E8E8E8; margin: 0 8px; }
#reviewContainer .gartner-pi-logo { flex: 0 0 auto; }
@media only screen and (max-width: 640px) {
	#reviewContainer > div { padding: 16px; }
	#reviewContainer .gartner-pi-info-conatiner > div, #reviewContainer .gartner-pi-reviews-link { flex-wrap: wrap; }
	#reviewContainer .market-name { padding-left: 0; flex-wrap: wrap; }
	#reviewContainer .gartner-pi-sourcing-link { margin-left: 0; padding-left: 0; border-left: 0; }
}

/* featured / related-resource cards: the title is a link since the block was built, but keeps the heading colour */
.rel-res-item h4 a { color: inherit; text-decoration: none; }
.rel-res-item h4 a:hover { color: var(--wp--preset--color--kela-hover-text, #d92d20); }

/* lobby heroes whose title and lead sit in a flex column (8px gap): same 18px title-to-lead distance as the hub pages */
.kela-hub-hero .is-layout-flex > h1 { margin-bottom: 10px; }

/* related-reading cards with images: four across on wide screens, two on laptops, the theme stacks them under 740px */
@media only screen and (max-width: 1180px) and (min-width: 741px) {
	.platform-reading { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}

/* "Real-world example" pill on the Vulnerability Intelligence page: red on white so it reads, not the grey sticker */
.vuln-sticker { border-color: var(--wp--preset--color--kela-hover-text, #DD0909); background: #fff; }

/* Home hero artwork (desktop): the composite is anchored to the bottom of the text column and reached 48px up behind
   the header. Anchored to the top of the column instead, 24px clear of the nav, so longer copy or buttons never move it. */
@media only screen and (min-width: 1261px) {
	.digital-home::before { top: -116px; bottom: auto; }
	/* the date line inside the Gartner badge is painted over the artwork's static "Jul 2026" and bound to today's date */
	.gpi-asof { position: absolute; right: 274px; top: 32px; width: 160px; height: 19px; line-height: 19px; margin: 0; padding-left: 8px;
		background: #fff; color: #28466C; font-size: 13px; font-weight: 500; white-space: nowrap; z-index: 2; }
}
@media only screen and (max-width: 1260px) { .gpi-asof { display: none; } }

/* Home hero: the Gartner badge painted into the artwork is a link to the reviews section below */
@media only screen and (min-width: 1261px) {
	.gpi-link { position: absolute; right: 264px; top: -4px; width: 277px; height: 67px; border-radius: 16px; z-index: 3; display: block; }
	.gpi-asof { pointer-events: none; }
}
@media only screen and (max-width: 1260px) { .gpi-link { display: none; } }
#reviewContainer { scroll-margin-top: 140px; }
html { scroll-behavior: smooth; }

/* the shaped call-out under the home hero holds one button now, not the exposure form */
.top-decor .top-cta { justify-content: center; position: relative; z-index: 2; margin-top: -4px !important; } /* centred on the hero's bottom edge */
.top-decor .top-heading { text-align: center; }

/* Home hero: shorter on desktop so the Start for FREE call-out under it sits above the fold on a laptop */
@media only screen and (min-width: 1125px) {
	.attackers-wrap .alt-hero { padding-bottom: 130px !important; }
}

/* Home hero on phones and tablets: the Gartner badge is real markup under the artwork, so its date is live.
   Logo left, score and date right, one row like the painted badge. */
.gpi-mobile { display: none !important; } /* WP's body .is-layout-flex rule outranks a plain class, hence !important */
@media only screen and (max-width: 1260px) {
	.gpi-mobile { display: flex !important; align-items: center; justify-content: center; flex-wrap: nowrap; gap: 18px;
		background: #fff; border: 1px solid #E8E8E8; border-radius: 16px; box-shadow: 0 8px 16px rgba(0,0,0,.09);
		padding: 14px 18px; margin: 4px 20px 0; }
	.gpi-mobile > .wp-block-group { gap: 0; align-items: flex-start; }
	.gpi-mobile .gpi-logo { width: 112px; height: auto; margin: 0; flex: 0 0 auto; }
	.gpi-mobile .gpi-score { width: 150px; height: auto; margin: 0; display: block; }
	.gpi-mobile .gpi-asof-m { margin: 2px 0 0; color: #28466C; font-size: 13px; font-weight: 500; text-align: left; line-height: 1.3; }
	.gpi-mobile figure { margin: 0; }
}

/* Feature rows (image beside text) on phones: the illustration sits above the text at a sensible size, not full column width */
@media only screen and (max-width: 560px) {
	.stack-on-820 > .wp-block-image, .stack-on-820 > .left-on-560 > .wp-block-image { width: min(260px, 100%); margin-left: auto; margin-right: auto; }
	.stack-on-820 > .wp-block-image img, .stack-on-820 > .left-on-560 > .wp-block-image img { width: 100%; height: auto; }
	.stack-on-820 > .left-on-560 { align-items: center; }
}

/* Data strip: KELA's underground numbers as rows (metric / 2026 so far / every hour / all time) or dark cards */
.kela-data { --kd-line: #E8E8E8; --kd-muted: #6B6B6B; --kd-up: #1F8A4C; --kd-upbg: rgba(31,138,76,.10); font-family: inherit; }
.kela-data__grid { display: grid; grid-template-columns: 1.5fr 1.2fr 1fr 1fr; column-gap: 24px; }
.kela-data__head { display: contents; }
.kela-data__head > span { font-size: 13px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--kd-muted); padding: 0 0 14px; border-bottom: 1px solid var(--kd-line); }
.kela-data__row { display: contents; }
.kela-data__row > div { padding: 26px 0; border-bottom: 1px solid var(--kd-line); display: flex; flex-direction: column; justify-content: center; gap: 4px; }
.kela-data__metric { flex-direction: row !important; align-items: center; gap: 14px !important; }
.kela-data__metric img { width: 22px; height: 22px; flex: 0 0 auto; }
.kela-data__metric strong { display: block; font-size: 20px; font-weight: 600; letter-spacing: -.5px; line-height: 1.2; }
.kela-data__metric small { display: block; font-size: 14px; color: var(--kd-muted); margin-top: 2px; }
.kela-data b { display: block; font-size: 40px; font-weight: 500; letter-spacing: -2px; line-height: 1.05; color: #000; }
.kela-data__rate b, .kela-data__all b { font-size: 30px; letter-spacing: -1.2px; }
.kela-data span.sub { font-size: 14px; color: var(--kd-muted); line-height: 1.3; }
.kela-data .pill { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; margin-top: 4px; padding: 4px 10px; border-radius: 999px; font-size: 14px; font-weight: 600; color: var(--kd-up); background: var(--kd-upbg); }
.kela-data .pill--muted { color: var(--kd-muted); background: rgba(0,0,0,.06); }
.kela-data__foot { margin: 22px 0 0; font-size: 13px; color: var(--kd-muted); line-height: 1.5; }
@media only screen and (max-width: 900px) {
	.kela-data__grid { grid-template-columns: 1fr 1fr; row-gap: 0; }
	.kela-data__head { display: none; }
	.kela-data__row { display: grid; grid-template-columns: 1fr 1fr; column-gap: 20px; padding: 22px 0; border-bottom: 1px solid var(--kd-line); }
	.kela-data__row > div { padding: 0; border: 0; }
	.kela-data__metric { grid-column: 1 / -1; margin-bottom: 14px; }
	.kela-data__ytd { grid-column: 1 / -1; margin-bottom: 14px; }
	.kela-data__rate::before, .kela-data__all::before { content: attr(data-label); font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--kd-muted); }
	.kela-data b { font-size: 34px; }
	.kela-data__rate b, .kela-data__all b { font-size: 24px; }
}
/* Dark card variant */
.kela-data--dark { --kd-line: rgba(255,255,255,.14); --kd-muted: rgba(255,255,255,.62); --kd-up: #5DD38A; --kd-upbg: rgba(93,211,138,.14); color: #fff; }
.kela-data--dark b { color: #fff; }
.kela-data__cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.kela-data__card { background: rgba(255,255,255,.05); border: 1px solid var(--kd-line); border-radius: 16px; padding: 26px 24px 24px; display: flex; flex-direction: column; gap: 6px; }
.kela-data__card .eyebrow { font-size: 13px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--kd-muted); margin-bottom: 8px; }
.kela-data__card b { font-size: 44px; letter-spacing: -2px; }
.kela-data__card .label { font-size: 17px; font-weight: 600; letter-spacing: -.3px; }
.kela-data__hour { margin-top: 16px; display: grid; grid-template-columns: auto repeat(4, 1fr); align-items: center; gap: 16px; padding: 18px 24px; border-radius: 16px; background: #D7261E; color: #fff; }
.kela-data__hour .hour-label { font-size: 13px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; padding-right: 16px; border-right: 1px solid rgba(255,255,255,.35); }
.kela-data__hour b { font-size: 26px; letter-spacing: -1px; color: #fff; display: inline; margin-right: 8px; }
.kela-data__hour span { font-size: 14px; opacity: .9; }
.kela-data--dark .kela-data__foot { color: var(--kd-muted); }
@media only screen and (max-width: 1100px) { .kela-data__cards { grid-template-columns: repeat(2, 1fr); } .kela-data__hour { grid-template-columns: 1fr 1fr; } .kela-data__hour .hour-label { grid-column: 1 / -1; border: 0; padding: 0; } }
@media only screen and (max-width: 560px) { .kela-data__grid, .kela-data__cards, .kela-data__hour { grid-template-columns: 1fr; } .kela-data__card b { font-size: 38px; } }
/* G: hourly rate inside each dark card */
.kela-data__card .hourly { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--kd-line); display: flex; flex-direction: column; gap: 2px; }
.kela-data__card .hour-tag { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #FF6B63; margin-bottom: 4px; }
.kela-data__card .hourly b { font-size: 28px; letter-spacing: -1px; }
/* Growth pills are risk, so they read red */
.kela-data { --kd-up: #D7261E; --kd-upbg: rgba(215,38,30,.10); }
.kela-data--dark { --kd-up: #FF6B63; --kd-upbg: rgba(255,107,99,.16); }
.kela-data--g .kela-data__foot { text-align: center; }
/* Colour plays for G */
.kela-data--rednum .kela-data__card > b { color: #F03E36; }
.kela-data--rednum .kela-data__card .hour-tag { color: var(--kd-muted); }
.kela-data--neutralpill .pill { color: #fff; background: rgba(255,255,255,.12); }
.kela-data--light { --kd-line: #E8E8E8; --kd-muted: #6B6B6B; --kd-up: #D7261E; --kd-upbg: rgba(215,38,30,.10); color: #000; }
.kela-data--light .kela-data__card { background: #F7F7F7; border-color: #E8E8E8; }
.kela-data--light .kela-data__card > b { color: #D7261E; }
.kela-data--light .kela-data__card .hourly b, .kela-data--light b { color: #000; }
.kela-data--light .kela-data__card > b { color: #D7261E; }

/* Phones and tablets: the home hero ends straight under the Gartner badge and the Start for FREE button follows it */
@media only screen and (max-width: 1124px) {
	.attackers-wrap .alt-hero { padding-bottom: 24px !important; }
	.attackers-wrap .top-decor::before { display: none; }
	.attackers-wrap .top-decor .top-cta { margin-top: 24px !important; }
	.attackers-wrap .gpi-mobile { margin: 24px 20px 0 !important; } /* artwork, badge and button 24px apart */
	.attackers-wrap .digital-home figure { margin-bottom: 0 !important; }
}
/* Stacked feature rows on phones: text first, illustration after it, so two illustrations never sit back to back */
@media only screen and (max-width: 820px) {
	.stack-on-820 > .left-on-560:first-child:has(> .wp-block-image:only-child) { order: 2; }
}

/* The data strip needs extra room only on Home, where the form box above it overlaps its own section */
.home .kela-data-wrap { margin-top: var(--wp--preset--spacing--120-0); }

/* Key features accordion on phones: the item and its text run the full width (the theme pins them to 242px),
   the screenshot is centred and as wide as the column, the title stays left */
@media only screen and (max-width: 840px) {
	.the-accordion-holder { padding-inline: 20px !important; } /* Platform pages had no gutter here */
	.the-accordion-holder .bulit-grid { display: block; }
	.the-accordion-holder .info-accordion, .the-accordion-holder .accordion-item, .the-accordion-holder .accordion-item-inner-stack, .the-accordion-holder .accordion-inner-grid { width: 100% !important; max-width: 100% !important; }
	.the-accordion-holder .accordion-item h5 { padding-right: 40px; }
	.the-accordion-holder .accordion-item-image, .the-accordion-holder .accordion-item-image figure { width: 100%; margin-left: auto; margin-right: auto; padding-inline: 0 !important; }
	.the-accordion-holder .accordion-item-image img { width: 100%; height: auto; display: block; }
}

/* FAQ straight after the Book a Demo form: the form's bottom margin and the FAQ's top padding would stack, so cancel the margin */
.wrap-key-features-form-secondary + .kela-faq, .wrap-key-features-form-secondary + .kela-data-wrap { margin-top: calc(-1 * var(--wp--preset--spacing--80-0)); }

/* Home hero on phones: centred above the fold, the title at 44px like the solution heroes */
@media only screen and (max-width: 520px) {
	.attackers-wrap .alt-hero .centered-on-520, .attackers-wrap .alt-hero .centered-on-520 > * { text-align: center !important; align-items: center !important; justify-content: center !important; justify-self: stretch !important; align-self: stretch !important; }
	.attackers-wrap .alt-hero .centered-on-520 > h1 { font-size: 44px !important; line-height: 48px !important; font-weight: 500 !important; letter-spacing: -2px !important; }
	.attackers-wrap .alt-hero .centered-on-520 > p.is-style-large { font-size: 20px !important; line-height: 1.3; margin-top: 14px; }
	.attackers-wrap .alt-hero .centered-on-520 > p.w-428 { font-size: 17px !important; line-height: 1.5; margin-top: 12px; max-width: 100%; }
}

/* Platform pages: the Book a Demo card overlaps the grey Key features section the way it does on the solution pages
   (the shared form pattern carries margin-top:0 inline, the solution pages carry -224px) */
@media only screen and (min-width: 841px) {
	.key-features + .wrap-key-features-form-secondary > .form-wrapper, .for-scalability + .wrap-key-features-form-secondary > .form-wrapper { margin-top: -224px !important; }
}

/* Home: the hero wrap ends 32px above the logo strip, the same gap the strip leaves below itself */
.attackers-wrap { padding-bottom: 32px !important; }

/* Data strip, compact cards (17 Sep 2026): squarer boxes, every card carries an eyebrow (All time / 2026 so far) and an hourly rate */
.kela-data--compact .kela-data__card { padding: 20px 22px 18px; gap: 3px; }
.kela-data--compact .kela-data__card .eyebrow { font-size: 12px; margin-bottom: 2px; }
.kela-data--compact .kela-data__card > b { font-size: 40px; line-height: 1.1; }
.kela-data--compact .kela-data__card .label { font-size: 16px; line-height: 1.25; }
.kela-data--compact .kela-data__card .pill { margin-top: 8px; align-self: flex-start; }
.kela-data--compact .kela-data__card .hourly { margin-top: 12px; padding-top: 10px; }
.kela-data--compact .kela-data__card .hourly b { font-size: 24px; }
.kela-data--compact .kela-data__card .hourly .sub { font-size: 14px; }
