????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
?????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
???????????????????????????????????????
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PNG
\x49\x44\x41\x54?\x89\x50
\x4E\x47\x0D\x0A\x1A\x0A
JFIF ?? C
!"$"$?? C
?? p
" ??
?? ?
????
(% aA*?XYD?(J??E RE,P XYae?)(E 2 B R BQ X?)X ? @
adadasdasdasasdasdas
.....................................................................................................................................??????????????????????
??? ???????????????????????????????????????...............................
JFIF ?? C
!"$"$?? C
?? p
" ??
?? ?
????
(% aA*?XYD?(J??E RE,P XYae?)(E 2 B R BQ X?)X ? @
adadasdasdasasdasdas
..................................................................................................................................... ????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
?????????????????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
????????????????????????????????????????
???????????????????????????????????????
PNG
\x49\x44\x41\x54?\x89\x50
\x4E\x47\x0D\x0A\x1A\x0A
JFIF ?? C
!"$"$?? C
?? p
" ??
?? ?
????
(% aA*?XYD?(J??E RE,P XYae?)(E 2 B R BQ X?)X ? @
adadasdasdasasdasdas
.....................................................................................................................................??????????????????????
??? ???????????????????????????????????????...............................
JFIF ?? C
!"$"$?? C
?? p
" ??
?? ?
????
(% aA*?XYD?(J??E RE,P XYae?)(E 2 B R BQ X?)X ? @
adadasdasdasasdasdas
.....................................................................................................................................????????????????????????????????
???????????????????????????????
???????????????????????????????
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Warning: Undefined variable $auth in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 695
Warning: Trying to access array offset on value of type null in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 695
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 332
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 333
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 334
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 335
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 336
Warning: Cannot modify header information - headers already sent by (output started at /home/blacotuu/deliciouskenya.com/d94fc6/index.php:1) in /home/blacotuu/deliciouskenya.com/d94fc6/index.php on line 337
/*
Theme Name: Extendable
Theme URI: https://github.com/extendify/extendable
Author: Extendify
Author URI: https://extendify.com
Description: Extendable is a distinct, dynamic block theme designed as a canvas for your next online venture. Sporting multiple style variations, Extendable is the most expressive block theme yet. Go fresh, bold, bohemian or minimal — with a single click.
Requires at least: 6.6
Tested up to: 7.0
Requires PHP: 7.4
Version: 2.1.6
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: extendable
Tags: one-column, custom-colors, custom-menu, custom-logo, e-commerce, editor-style, featured-images, full-site-editing, block-patterns, rtl-language-support, sticky-post, threaded-comments
Extendable is a derivative work of the code from the
Twenty Twenty-Two WordPress Theme, which is licensed GPLv2.
Extendable WordPress Theme, Copyright (C) 2021-2025 Extendify Inc.
Extendable therefore is also distributed under the terms of the GNU GPL.
*/
/* Fallback for deprecate variables.
---------------------------------------------------------------------------- */
:root {
--wp--custom--spacing--small: var(--wp--preset--spacing--30, clamp(1.5rem, 5vw, 2rem));
--wp--custom--spacing--medium: var(--wp--preset--spacing--50, clamp(2.5rem, 8vw, 4rem));
--wp--custom--spacing--large: var(--wp--preset--spacing--60, clamp(2.5rem, 8vw, 6rem));
--wp--custom--spacing--outer: max(1.25rem, 4vw);
--wp--preset--spacing--80: min(8rem, 12vw);
}
/*
* Smooth scrolling
*/
html {
scroll-behavior: smooth;
}
/*
* Font smoothing.
* This is a niche setting that will not be available via Global Styles.
* https://github.com/WordPress/gutenberg/issues/35934
*/
body {
-moz-osx-font-smoothing: var(--wp--custom--typography--font-smoothing--moz, auto);
-webkit-font-smoothing: var(--wp--custom--typography--font-smoothing--webkit, auto);
}
/*
* Text and navigation link styles.
* Necessary until the following issue is resolved in Gutenberg:
* https://github.com/WordPress/gutenberg/issues/27075
*/
a {
text-decoration-style: var(--wp--custom--elements--link--static--text-decoration-style, solid);
text-decoration-thickness: var(--wp--custom--elements--link--text-decoration-thickness, 1px);
text-underline-offset: var(--wp--custom--elements--link--text-underline-offset, 0.25ch);
}
a:hover,
a:focus {
text-decoration-style: var(--wp--custom--elements--link--interactive--text-decoration-style, dashed);
}
:where(.wp-site-blocks *:focus) {
outline-width: 1px;
outline-style: solid;
}
a:active {
text-decoration: none;
}
/*
* Navigation Block
*/
@media (min-width: 600px) {
.site-logo-title {
display: none;
}
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation-item,
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-page-list {
align-items: flex-start !important;
}
}
@media (max-width: 600px) {
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation-item,
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation__container,
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-page-list {
align-items: flex-start !important;
}
}
.wp-block-navigation__responsive-container.has-modal-open.is-menu-open .site-logo-title {
display: flex;
flex-wrap: nowrap;
max-width: 100%;
align-items: center;
gap: 0.5rem;
padding-bottom: var(--wp--preset--spacing--30);
position: relative;
padding-inline-end: 52px;
}
.wp-block-navigation__responsive-container.has-modal-open.is-menu-open .site-logo-title::after {
content: "";
position: absolute;
left: calc(-1 * var(--wp--preset--spacing--30));
right: calc(-1 * var(--wp--preset--spacing--30));
bottom: 0;
height: 1px;
background: #8080801d;
}
.wp-block-navigation__responsive-container.has-modal-open.is-menu-open .site-logo-title img {
max-height: 42px !important;
height: auto !important;
width: auto !important;
}
.wp-block-navigation__responsive-container.has-modal-open.is-menu-open .site-logo-title .site-title {
font-size: 1.25rem;
font-weight: 700;
color: var(--wp--preset--color--foreground);
text-transform: uppercase;
letter-spacing: -0.02em;
box-sizing: border-box;
line-height: 1.15;
}
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content {
padding-top: var(--wp--preset--spacing--30);
}
.has-modal-open .wp-block-navigation__responsive-container-close {
background-color: var(--wp--preset--color--tertiary);
padding: 0.625rem;
border-radius: 100%;
top: -2.5px !important;
}
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .wp-block-navigation__container {
gap: 0 !important;
width: 100%;
}
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navrigation__containe,
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__container ul {
row-gap: 0.75rem !important;
width: -webkit-fill-available;
max-width: 100%;
}
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content > ul.wp-block-navigation__container > li.wp-block-navigation-item:not(.wp-block-navigation__submenu-container) {
border-bottom: 1px solid #8080801d;
padding-top: 0.75rem;
padding-bottom: 0.75rem;
width: -webkit-fill-available;
max-width: 100%;
}
.has-modal-open .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container {
padding: 0.75rem 0.75rem 0 0.75rem !important;
gap: 0.75rem !important;
}
.has-modal-open .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-dialog ul.wp-block-navigation__container > li:not(.wp-block-navigation__submenu-container) > a.wp-block-navigation-item__content {
font-size: 1.25rem;
font-weight: 600;
}
.has-modal-open .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__submenu-container {
padding-top: 0.75rem !important;
}
.has-modal-open .wp-block-navigation__responsive-container:not(.disable-default-overlay) .wp-block-navigation__responsive-dialog ul.wp-block-navigation__container .wp-block-navigation-submenu .wp-block-navigation-item a {
font-size: 1rem !important;
}
/*
* When the responsive navigation modal opens (WordPress sets .has-modal-open
* on ), suppress every property on the modal's ancestor chain that
* creates a containing block for position:fixed descendants — otherwise
* the modal is trapped inside the header instead of overlaying the viewport.
*
* Two rules here:
*
* 1) Broad ancestor coverage — the header itself plus any element inside
* it that contains the responsive dialog. Handles transform/filter on
* any header variant (overlay, glass, floating-pill, future ones).
*
* 2) Animation override — mirrors the selectors used by the floating-pill
* scroll animations so we can match their specificity. Those animations
* use !important + a deep selector to apply translate/backdrop-filter
* via keyframes; without a same-or-higher-specificity override our broad
* rule loses the cascade and the animation keeps trapping the modal.
*/
html.has-modal-open header.wp-block-template-part,
html.has-modal-open header.wp-block-template-part :has(.wp-block-navigation__responsive-dialog) {
backdrop-filter: none !important;
transform: none !important;
translate: none !important;
filter: none !important;
animation: none !important;
}
html.has-modal-open body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass) .ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass,
html.has-modal-open body:not(:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child)) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass) .ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass {
animation: none !important;
backdrop-filter: none !important;
translate: none !important;
}
/*
* Mobile nav-extras: cloned by navigation-customization.js into the
* responsive menu dialog so phone / CTA / social aren't visible in the
* cramped top bar on small screens. We target the specific modifier
* classes (.ext-nav-extras-phone, -btn, -social) rather than the
* .ext-nav-extras wrapper, because some header parts use the wrapper
* class around the nav block itself.
*
* On desktop the dialog is rendered inline (it's only "modal-shaped"
* when the hamburger opens it), so the cloned extras must stay hidden
* until WordPress sets .has-modal-open on .
*/
@media (max-width: 781px) {
body:not(:has(.wp-block-navigation__responsive-container.disable-default-overlay)) header.wp-block-template-part :is(.ext-nav-extras-phone, .ext-nav-extras-btn, .ext-nav-extras-social):not(.ext-nav-extras-mobile *) {
display: none;
}
/* Collapse the .ext-nav-extras wrapper too when its only children are the
extras (no nav inside) — otherwise the empty wrapper holds a flex slot
and the hamburger stays stuck in the middle instead of moving to the
end of the row. */
header.wp-block-template-part .ext-nav-extras:not(:has(nav, .wp-block-navigation)) {
display: none;
}
}
.ext-nav-extras-mobile {
display: none;
}
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile {
display: flex;
flex-direction: column;
align-items: stretch;
gap: var(--wp--preset--spacing--20);
margin-top: var(--wp--preset--spacing--30);
}
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .wp-block-button {
width: 100%;
}
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .wp-block-button__link {
display: block;
text-align: center;
width: 100%;
}
/* Match the nav-link typography (see rule above) on the cloned phone CTA. */
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .ext-nav-extras-phone,
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .ext-nav-extras-phone a,
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .ext-nav-extras-phone p {
font-size: 1.25rem !important;
font-weight: 600 !important;
}
/* Bigger, more tappable social icons in the menu. */
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .wp-block-social-link {
width: 32px;
height: 32px;
}
.has-modal-open .wp-block-navigation__responsive-dialog .ext-nav-extras-mobile .wp-social-link svg {
width: 28px;
height: 28px;
}
.wp-block-navigation .wp-block-navigation-item a:hover,
.wp-block-navigation .wp-block-navigation-item a:focus {
text-decoration: underline;
text-decoration-style: solid;
}
/* Don't display the homepage in the Page List block, when located inside a navigation element. */
nav .wp-block-pages-list__item.wp-block-navigation-item.menu-item-home {
display: none;
}
/*
* Responsive menu container padding.
* This ensures the responsive container inherits the same
* spacing defined above. This behavior may be built into
* the Block Editor in the future.
*/
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
padding-top: var(--wp--preset--spacing--30);
padding-bottom: var(--wp--preset--spacing--30);
padding-right: var(--wp--preset--spacing--30);
padding-left: var(--wp--preset--spacing--30);
}
/* Temporary: WP core ships this padding as a 4-value clamp() shorthand
that some browsers fail to parse — re-declare as individual props. */
.wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) {
padding-top: clamp(1rem, var(--wp--style--root--padding-top), 20rem);
padding-right: clamp(1rem, var(--wp--style--root--padding-right), 20rem);
padding-bottom: clamp(1rem, var(--wp--style--root--padding-bottom), 20rem);
padding-left: clamp(1rem, var(--wp--style--root--padding-left), 20rem);
}
/*
* --------------------------------------------------------
* Custom - blocks
* --------------------------------------------------------
*/
/* Button
----------------------------------------------------------*/
.wp-element-button {
transition: background-color 0.15s ease;
}
.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background):hover,
.wp-block-button.is-style-outline > .wp-block-button__link:not(.has-background):hover {
background-color: rgba(159, 159, 159, 0.2);
}
/* Table
----------------------------------------------------------*/
.wp-block-table.is-style-stripes tbody tr:nth-child(odd) {
background-color: var(--wp--custom--blocks--core-table--variant-stripes--color--background, var(--wp--preset--color--tertiary));
}
/* Template Part Block
----------------------------------------------------------*/
/* Temporary fix until template-part blocks support spacing */
footer.wp-block-template-part:not([style*="margin-top"]) {
margin-top: 0;
}
/* Quote - 'Plain' variation
----------------------------------------------------------*/
blockquote:is(.is-style-plain) {
border: none;
padding-left: 0;
}
/* Search Block
----------------------------------------------------------*/
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) {
border-color: var(--wp--custom--elements--input--border--color);
border-radius: var(--wp--custom--elements--button--border--radius);
border-width: var(--wp--custom--elements--input--border--width);
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input {
border-color: transparent;
}
.wp-block-search .wp-block-search__input {
border-radius: var(--wp--custom--elements--button--border--radius);
}
/* Image
----------------------------------------------------------*/
.wp-block-image[style*="-radius"]:not([style*="overflow"]) {
overflow: hidden;
}
/*
* --------------------------------------------------------
* Custom - experimental
* --------------------------------------------------------
*/
.block-editor-block-list__block.wp-block.is-default-size.wp-block-site-logo .components-resizable-box__container,
.wp-block-site-logo.is-default-size img {
max-height: 42px !important;
height: auto !important;
width: auto !important;
}
/* Ensure default logo works well on light and dark backgrounds
----------------------------------------------------------*/
.wp-block-site-logo img[src*="extendify-demo-"],
.wp-block-site-logo img[src*="ext-custom-logo-"] {
filter: var(--wp--preset--duotone--primary-foreground);
min-width: 40px;
}
/*
* Remove all animations, transitions and smooth scroll
* for people that prefer not to see them.
*/
@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/*
* Matching caret and focus outline colors.
*/
input,
textarea {
caret-color: inherit;
outline-color: inherit;
}
/*
* Matching input with outline button style.
*/
:where(.wp-block-post-comments-form) input:not([type="submit"]),
:where(.wp-block-post-comments-form) textarea {
background-color: var(--wp--preset--color--background);
color: var(--wp--preset--color--foreground);
border-color: inherit;
}
/*
* Woocommerce temporarily customization until the woo blocks offer support
*/
.woocommerce-Tabs-panel--description h2,
.woocommerce-Reviews-title {
font-size: var(--wp--preset--font-size--medium);
}
.wp-block-button.wc-block-components-product-button {
flex-direction: row;
flex-wrap: wrap;
justify-content: start;
gap: 1rem;
}
.wp-block-button.wc-block-components-product-button a.added_to_cart {
margin-top: 0;
}
.woocommerce-checkout.woocommerce-page header.wp-block-template-part nav.wp-block-navigation {
visibility: hidden;
}
.wp-site-blocks .wp-block-group.woocommerce.product {
margin-top: 0;
margin-bottom: 0;
}
.wc-block-product-template__responsive {
grid-row-gap: 2rem;
}
.wc-block-components-product-button__button {
z-index: 1;
}
/*
* Adds offset for sticky header overlap
*/
.sticky-header-offset-container .entry-content > .wp-block-group {
scroll-margin-top: var(--wp--preset--spacing--60);
}
/*
* Avoids parent/child color collision when child has no custom background.
*/
:not(.block-editor-block-preview__content-iframe)
.has-tertiary-background-color.has-background
[class*="is-style-ext-preset--group--"][class*="item-card-1"]:not(.has-background) {
background-color: var(--wp--preset--color--background);
}
:not(.block-editor-block-preview__content-iframe)
.has-tertiary-background-color.has-background
[class*="is-style-ext-preset--group--"][class*="item-card-1"]:not(.has-background)::before {
background-color: var(--wp--preset--color--background) !important;
}
:not(.block-editor-block-preview__content-iframe)
.has-tertiary-background-color.has-background
[class*="is-style-ext-preset--image--"]:not(.has-background)::before {
background-color: var(--wp--preset--color--tertiary) !important;
}
:not(.block-editor-block-preview__content-iframe)
.has-tertiary-background-color.has-background
[class*="is-style-ext-preset--group--"][class*="item-card-1"]::before,
:not(.block-editor-block-preview__content-iframe)
.has-tertiary-background-color.has-background
[class*="is-style-ext-preset--media-text--"]::before {
background-color: var(--wp--preset--color--background) !important;
}
.block-editor-block-preview__content-iframe
[class*="is-style-ext-preset--group--natural-1"][class*="item-card-1"] {
background-color: transparent !important;
}
:root {
--grid-vector-bg: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTQ0MCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxnIG9wYWNpdHk9IjAuMDkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utb3BhY2l0eT0iMC43IiBzdHJva2Utd2lkdGg9IjEuMjYwNyI+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI2MjQuOTk1IiB4Mj0iMTQ2MC45NiIgeTI9IjYyNC45OTUiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI5NDcuNzMzIiB4Mj0iMTQ2MC45NiIgeTI9Ijk0Ny43MzMiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSIzMDIuMjU2IiB4Mj0iMTQ2MC45NiIgeTI9IjMwMi4yNTYiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI0NjMuNjI0IiB4Mj0iMTQ2MC45NiIgeTI9IjQ2My42MjQiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI3ODYuMzYyIiB4Mj0iMTQ2MC45NiIgeTI9Ijc4Ni4zNjIiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSIxNDAuODg1IiB4Mj0iMTQ2MC45NiIgeTI9IjE0MC44ODUiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI1NDQuMzExIiB4Mj0iMTQ2MC45NiIgeTI9IjU0NC4zMTEiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSI4NjcuMDQ5IiB4Mj0iMTQ2MC45NiIgeTI9Ijg2Ny4wNDkiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSIyMjEuNTczIiB4Mj0iMTQ2MC45NiIgeTI9IjIyMS41NzMiIC8+CiAgICA8bGluZSB4MT0iLTUwLjYxNzIiIHkxPSIzODIuOTQiIHgyPSIxNDYwLjk2IiB5Mj0iMzgyLjk0IiAvPgogICAgPGxpbmUgeDE9Ii01MC42MTcyIiB5MT0iNzA1LjY4MiIgeDI9IjE0NjAuOTYiIHkyPSI3MDUuNjgyIiAvPgogICAgPGxpbmUgeDE9Ii01MC42MTcyIiB5MT0iNjAuMjAxNyIgeDI9IjE0NjAuOTYiIHkyPSI2MC4yMDE3IiAvPgogICAgPGxpbmUgeDE9IjY0Mi4xMzgiIHkxPSItNDguODQ3NyIgeDI9IjY0Mi4xMzgiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjMxOS4zOTgiIHkxPSItNDguODQ3NyIgeDI9IjMxOS4zOTgiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9Ijk2NC44NzQiIHkxPSItNDguODQ3NyIgeDI9Ijk2NC44NzQiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjEyODcuNjEiIHkxPSItNDguODQ3NyIgeDI9IjEyODcuNjEiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjE1OC4wMjgiIHkxPSItNDguODQ3NyIgeDI9IjE1OC4wMjgiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjgwMy41MDQiIHkxPSItNDguODQ3NyIgeDI9IjgwMy41MDQiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjQ4MC43NjgiIHkxPSItNDguODQ3NyIgeDI9IjQ4MC43NjgiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjExMjYuMjQiIHkxPSItNDguODQ3NyIgeDI9IjExMjYuMjQiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9Ijc3LjM0NTIiIHkxPSItNDguODQ3NyIgeDI9Ijc3LjM0NTEiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjcyMi44MjIiIHkxPSItNDguODQ3NyIgeDI9IjcyMi44MjIiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjQwMC4wODEiIHkxPSItNDguODQ3NyIgeDI9IjQwMC4wODEiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjEwNDUuNTYiIHkxPSItNDguODQ3NyIgeDI9IjEwNDUuNTYiIHkyPSIxMTE4LjU2IiAvPgogICAgPGxpbmUgeDE9IjEzNjguMyIgeTE9Ii00OC44NDc3IiB4Mj0iMTM2OC4zIiB5Mj0iMTExOC41NiIgLz4KICAgIDxsaW5lIHgxPSIyMzguNzE1IiB5MT0iLTQ4Ljg0NzciIHgyPSIyMzguNzE1IiB5Mj0iMTExOC41NiIgLz4KICAgIDxsaW5lIHgxPSI4ODQuMTkyIiB5MT0iLTQ4Ljg0NzciIHgyPSI4ODQuMTkyIiB5Mj0iMTExOC41NiIgLz4KICAgIDxsaW5lIHgxPSI1NjEuNDUxIiB5MT0iLTQ4Ljg0NzciIHgyPSI1NjEuNDUxIiB5Mj0iMTExOC41NiIgLz4KICAgIDxsaW5lIHgxPSIxMjA2LjkzIiB5MT0iLTQ4Ljg0NzciIHgyPSIxMjA2LjkzIiB5Mj0iMTExOC41NiIgLz4KICA8L2c+CiAgPGcgb3BhY2l0eT0iMC41IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgPHJlY3QgeD0iODAzLjU2MyIgeT0iNzg2LjMwNSIgd2lkdGg9IjgwLjIyNjIiIGhlaWdodD0iODAuMjI2MiIgZmlsbC1vcGFjaXR5PSIwLjQiIC8+CiAgICA8cmVjdCB4PSI0MDAuMTQiIHk9Ijc4Ni4zMDUiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjIyNjIiIGZpbGwtb3BhY2l0eT0iMC4xOCIgLz4KICAgIDxyZWN0IHg9IjExMjYuNzYiIHk9IjIyMi40MyIgd2lkdGg9IjgwLjIyNjIiIGhlaWdodD0iNzkuMDgwMSIgZmlsbC1vcGFjaXR5PSIwLjA4IiAvPgogICAgPHJlY3QgeD0iNDgwLjM2NyIgeT0iNDY0LjIwMyIgd2lkdGg9IjgwLjIyNjIiIGhlaWdodD0iNzkuMDgwMSIgZmlsbC1vcGFjaXR5PSIwLjEzIiAvPgogICAgPHJlY3QgeD0iMTA0NS4zOSIgeT0iMzAyLjY1NiIgd2lkdGg9IjgwLjIyNjIiIGhlaWdodD0iNzkuMDgwMSIgZmlsbC1vcGFjaXR5PSIwLjAzIiAvPgogICAgPHJlY3QgeD0iMzk5Ljk5NCIgeT0iMjIyLjQzIiB3aWR0aD0iODAuMjI2MiIgaGVpZ2h0PSI3OS4wODAxIiBmaWxsLW9wYWNpdHk9IjAuMTMiIC8+CiAgICA8cmVjdCB4PSIxMDQ1LjM5IiB5PSIyMjIuNDMiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9Ijc5LjA4MDEiIGZpbGwtb3BhY2l0eT0iMC4wOCIgLz4KICAgIDxyZWN0IHg9IjM5OS45OTQiIHk9IjQ2NC4yMDMiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9Ijc5LjA4MDEiIGZpbGwtb3BhY2l0eT0iMC4xMyIgLz4KICAgIDxyZWN0IHg9IjMxOS45MTQiIHk9Ijc4Ni4zMDUiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjIyNjIiIGZpbGwtb3BhY2l0eT0iMC4xOCIgLz4KICAgIDxyZWN0IHg9IjMxOS45MTQiIHk9Ijg2Ni41MzEiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgxLjM3MjMiIGZpbGwtb3BhY2l0eT0iMC4xOCIgLz4KICAgIDxyZWN0IHg9IjE1OC4zMTUiIHk9IjcwNi4wNzgiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjIyNjIiIGZpbGwtb3BhY2l0eT0iMC4xOCIgLz4KICAgIDxyZWN0IHg9Ijk2NS4xNjIiIHk9IjYwLjgzMiIgd2lkdGg9IjgwLjIyNjIiIGhlaWdodD0iODAuMjI2MiIgZmlsbC1vcGFjaXR5PSIwLjEzIiAvPgogICAgPHJlY3QgeD0iODg0LjA1OSIgeT0iLTE5Ljg1NTUiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9Ijc5LjUwNjIiIGZpbGwtb3BhY2l0eT0iMC4xMyIgLz4KICAgIDxyZWN0IHg9Ijg4NC4wNTkiIHk9IjYwLjQwMjMiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjAyODUiIGZpbGwtb3BhY2l0eT0iMC4xMyIgLz4KICAgIDxyZWN0IHg9IjE1OC4zMTUiIHk9IjEzOS45MSIgd2lkdGg9IjgxLjM3MjMiIGhlaWdodD0iODIuNTE4NCIgZmlsbC1vcGFjaXR5PSIwLjE4IiAvPgogICAgPHJlY3QgeD0iNzYuOTQzNCIgeT0iNTkuNjgzNiIgd2lkdGg9IjgxLjM3MjMiIGhlaWdodD0iODAuMjI2MiIgZmlsbC1vcGFjaXR5PSIwLjE4IiAvPgogICAgPHJlY3QgeD0iLTMuMjgzMiIgeT0iNjAuODI4MSIgd2lkdGg9IjgxLjM3MjMiIGhlaWdodD0iODAuMjI2MiIgZmlsbC1vcGFjaXR5PSIwLjE4IiAvPgogICAgPHJlY3QgeD0iNzYuOTQzNCIgeT0iMTM5LjkxIiB3aWR0aD0iODEuMzcyMyIgaGVpZ2h0PSI4Mi41MTg0IiBmaWxsLW9wYWNpdHk9IjAuMTgiIC8+CiAgICA8cmVjdCB4PSI0MDAuMTQxIiB5PSItMjAuNTQzIiB3aWR0aD0iODEuMzcyMyIgaGVpZ2h0PSI4MC4yMjYyIiBmaWxsLW9wYWNpdHk9IjAuMiIgLz4KICAgIDxyZWN0IHg9IjE1OC4zMTUiIHk9IjMwMS41MDgiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgxLjM3MjMiIGZpbGwtb3BhY2l0eT0iMC4xOCIgLz4KICAgIDxyZWN0IHg9IjExMjYuNzYiIHk9IjcwNi4wNzgiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjIyNjIiIGZpbGwtb3BhY2l0eT0iMC4xMyIgLz4KICAgIDxyZWN0IHg9IjEyMDYuOTkiIHk9Ijc4Ni4zMDUiIHdpZHRoPSI4MC4yMjYyIiBoZWlnaHQ9IjgwLjIyNjIiIGZpbGwtb3BhY2l0eT0iMC4xMyIgLz4KICA8L2c+Cjwvc3ZnPg==");
}
/*
* CSS related to prism vibe
*/
/*
* CSS related to wave vibe
*/
[class*="is-style-ext-preset--group--"][class*="--section"].has-tertiary-background-color:has(
+ .has-background-background-color > .wp-block-cover.alignfull
)::after {
content: none !important;
}
[class*="is-style-ext-preset--group--"][class*="--section"].has-tertiary-background-color:has(
+ .has-background-background-color > .wp-block-cover.alignfull
) {
margin-bottom: 0 !important;
}
[class*="is-style-ext-preset--group--"][class*="--section"].has-background-background-color:has(.wp-block-cover.alignfull) + .has-tertiary-background-color::before {
content: none !important;
}
[class*="is-style-ext-preset--group--"][class*="--section"].has-background-background-color:has(.wp-block-cover.alignfull) + .has-tertiary-background-color {
margin-top: 0 !important;
}
/*
* utilities
*/
.m-0 {
margin: 0 !important;
}
.z-0 {
z-index: 0 !important;
}
.z-10 {
z-index: 10 !important;
}
.z-20 {
z-index: 20 !important;
}
.z-30 {
z-index: 30 !important;
}
.d-none {
display: none;
}
.d-block {
display: block;
}
@media (min-width: 640px) {
.sm-d-none {
display: none;
}
.sm-d-block {
display: block;
}
}
@media (min-width: 768px) {
.md-d-none {
display: none;
}
.md-d-block {
display: block;
}
}
@media (min-width: 1024px) {
.lg-d-none {
display: none;
}
.lg-d-block {
display: block;
}
}
/* RTL-only fix for Gutenberg Group left justification */
[dir="rtl"] [class*="wp-container-core-group-is-layout-"].ext-is-logical-start.is-content-justification-left > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
margin-inline-start: 0 !important;
margin-inline-end: auto !important;
}
.no-underline,
.no-underline a {
text-decoration: none;
}
/* CSS for extendify-agent vibe previews */
.extendify-agent .preview-is-style-ext-preset--group--matrix-1--section .preview-is-style-ext-preset--group--matrix-1--item-card-1--align-center {
border: solid 6px color-mix(in oklab, var(--wp--preset--color--foreground) 10%, transparent) !important;
}
.extendify-agent .preview-is-style-ext-preset--group--wave-1--section {
--wave-ratio: 1440 / 80;
overflow: visible;
}
.extendify-agent .preview-is-style-ext-preset--group--wave-1--section .preview-is-style-ext-preset--group--wave-1--item-card-1--align-center {
position: relative;
overflow: visible;
}
.extendify-agent .preview-is-style-ext-preset--group--wave-1--section .preview-is-style-ext-preset--group--wave-1--item-card-1--align-center::after {
content: "";
position: absolute;
width: 150%;
left: 50%;
transform: translateX(-35%);
aspect-ratio: var(--wave-ratio);
background-color: var(--wp--preset--color--background);
-webkit-mask: var(--wave-mask) no-repeat center / 100% 100%;
mask: var(--wave-mask) no-repeat center / 100% 100%;
bottom: -1px;
pointer-events: none;
z-index: 1;
}
.extendify-agent .preview-is-style-ext-preset--group--wave-1--section .preview-is-style-ext-preset--group--wave-1--item-card-1--align-center::before {
content: "";
position: absolute;
width: 150%;
left: 50%;
transform: translateX(-65%) scale(-1, -1);
aspect-ratio: var(--wave-ratio);
background-color: var(--wp--preset--color--background);
-webkit-mask: var(--wave-mask) no-repeat center / 100% 100%;
mask: var(--wave-mask) no-repeat center / 100% 100%;
top: -1px;
pointer-events: none;
z-index: 1;
}
/*
* --------------------------------------------------------
* Modular Header System
* --------------------------------------------------------
*
* Layout (positioning):
* - .ext-header-sticky → position: sticky + admin-bar handling
* - .ext-header-overlay → hero section overlap (negative margin)
*
* Appearance:
* - .ext-header-glass → static glassmorphism (bg + blur + radius)
* - .ext-header--dark → dark color scheme: white text + dark scrim/glass tint
*
* Behavior:
* - .ext-header-sticky--floating-pill → scroll-driven intensification of glass + layout shift
*
* Compositions:
* - ext-header-sticky → just sticky, theme bg
* - ext-header-overlay → overlay, transparent
* - ext-header-overlay ext-header--dark → overlay + dark scrim + white text
* - ext-header-sticky ext-header-glass → static glass header
* - ext-header-sticky ext-header-glass ext-header--dark → static dark glass
* - ext-header-sticky ext-header-overlay ext-header-glass ext-header-sticky--floating-pill → animated glass over hero
* - + ext-header--dark on the above → animated DARK glass over hero
*/
:root {
--ext-header-height: 96px;
--ext-header-offset: 1rem;
--ext-header-blur-start: 4px;
--ext-header-blur-end: 12px;
--ext-header-bg-opacity-start: 0.75;
--ext-header-bg-opacity-end: 0.95;
--ext-header-padding: 1.5rem;
--ext-header-animation-distance: 100px;
--ext-header-glass-tint-dark: #ffffff;
--ext-header-dark-logo-filter: brightness(0) invert(1);
}
body {
timeline-scope: --ext-hero-timeline;
}
/* ===========================================================
Layout: ext-header-sticky
=========================================================== */
header.wp-block-template-part:has(.ext-header-sticky) {
position: sticky;
top: 0;
z-index: 12;
}
/* Default bg for sticky headers without glass.
Glass headers leave the wrapper transparent so the inner glass element shows through. */
header.wp-block-template-part:has(.ext-header-sticky):not(:has(.ext-header-glass)):not(.has-background) {
background-color: var(--wp--preset--color--background);
}
body.admin-bar header.wp-block-template-part:has(.ext-header-sticky) {
top: var(--wp-admin--admin-bar--position-offset, var(--wp-admin--admin-bar--height, 32px));
}
@media (max-width: 782px) {
body.admin-bar header.wp-block-template-part:has(.ext-header-sticky) {
top:0;
}
}
html:has(.ext-header-sticky) {
scroll-padding-top: var(--ext-header-height);
}
/* ===========================================================
Layout: ext-header-overlay (hero overlap)
=========================================================== */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-overlay):not(:has(.ext-header-sticky)) {
position: relative;
top: 0;
z-index: 12;
}
body:has(.ext-header-overlay) .entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child {
margin-top: calc(-1 * var(--ext-header-height)) !important;
position: relative;
z-index: 0;
}
/* Overlay over hero: wrapper goes transparent so the hero shows through.
Reverts to default theme bg once .is-past-hero is added or on subpages without a hero. */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-overlay):not(.is-past-hero):not(:has(.ext-header-glass)) {
background-color: transparent;
}
/* ===========================================================
Appearance: ext-header-glass (static glassmorphism)
- --ext-header-glass-color-start: tint during the frosted/initial state
- --ext-header-glass-color-end: tint at the solid/scrolled state
- Static glass shows the end state (most readable)
=========================================================== */
.ext-header-glass {
--ext-header-glass-color-start: var(--wp--preset--color--background);
--ext-header-glass-color-end: var(--wp--preset--color--background);
}
header.wp-block-template-part:has(.ext-header-glass) .ext-header-glass {
background-color: oklch(from var(--ext-header-glass-color-end) l c h / var(--ext-header-bg-opacity-end));
backdrop-filter: blur(var(--ext-header-blur-end));
border-radius: 1rem;
overflow: hidden;
}
/* ===========================================================
Color: ext-header--dark
- Sets shared scrim/glass color variable
- Wrapper gets white text when used with overlay or glass
- Inner blocks reset their colors to inherit
=========================================================== */
/* Dark variant only takes effect on pages with a fullscreen hero.
On subpages, dark+glass falls back to the light glass defaults. */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) .ext-header-glass.ext-header--dark {
--ext-header-glass-color-start: var(--ext-header-glass-tint-dark);
--ext-header-glass-color-end: var(--wp--preset--color--foreground);
--ext-header-bg-opacity-start: 0.06;
--ext-header-bg-opacity-end: 0.85;
--ext-header-blur-start: 16px;
--ext-header-blur-end: 24px;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) .ext-header-glass {
border: 1px solid rgb(255 255 255 / 0.12);
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) {
color: #fff;
}
/* Top-fade scrim on the hero's cover block — softer falloff than a header-bound gradient.
Flat (non-nested) :has() check on body so the rule reliably matches on hero pages
that use an overlay+dark header.
Fades out via opacity once the smart-sticky JS adds .is-past-hero on the header,
in sync with the header reverting to its default theme appearance. */
body:has(.ext-header-overlay.ext-header--dark) .ext-hero-section--full-screen .wp-block-cover::after {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: calc(var(--ext-header-height) * 3);
transition: opacity 300ms ease;
background: linear-gradient(
to bottom,
rgb(0 0 0 / 0.50) 0%,
rgb(0 0 0 / 0.25) 50%,
rgb(0 0 0 / 0.05) 80%,
rgb(0 0 0 / 0) 100%
);
pointer-events: none;
z-index: 1;
}
/* Past-hero: fade the scrim out so the hero image returns to its natural look,
matching the header reverting to default theme bg + colors. */
body:has(header.wp-block-template-part.is-past-hero) .ext-hero-section--full-screen .wp-block-cover::after {
opacity: 0;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) {
color: #fff;
}
/* Inner-block dark overrides — fire only on hero pages with a dark backdrop.
Overlay+dark drops out at .is-past-hero (header has reverted to default theme).
Glass+dark keeps firing past-hero because the glass stays dark via its own animation. */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) :where(a, button, .wp-block-site-title):not(.has-background, .wp-block-button__link, .cloned-for-mobile, .cloned-for-mobile *),
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) :where(a, button, .wp-block-site-title):not(.has-background, .wp-block-button__link, .cloned-for-mobile, .cloned-for-mobile *) {
color: inherit;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) .wp-social-link:not(.cloned-for-mobile, .cloned-for-mobile *),
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) .wp-social-link:not(.cloned-for-mobile, .cloned-for-mobile *) {
color: #fff !important;
}
/* Phone CTA: force white over the dark hero. Needed because the paragraph carries
WP's wp-elements-* link-color rule (preset primary), which beats .has-text-color
inheritance on the inner . Drops out at .is-past-hero so the phone reverts to theme. */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) :is(.ext-nav-extras-phone, .ext-nav-extras-phone a):not(.cloned-for-mobile, .cloned-for-mobile *),
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) :is(.ext-nav-extras-phone, .ext-nav-extras-phone a):not(.cloned-for-mobile, .cloned-for-mobile *) {
color: #fff !important;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) svg:not(.cloned-for-mobile *),
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) svg:not(.cloned-for-mobile *) {
fill: currentColor;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) :is(.wp-block-site-logo, .wp-duotone-primary-foreground):not(.cloned-for-mobile, .cloned-for-mobile *),
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) :is(.wp-block-site-logo, .wp-duotone-primary-foreground):not(.cloned-for-mobile, .cloned-for-mobile *) {
filter: var(--ext-header-dark-logo-filter);
}
/* Nav-extras CTA: white pill + dark text for contrast against the dark hero scrim.
Drops out at .is-past-hero so the button returns to its preset styling. */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:not(.is-past-hero):has(.ext-header-overlay.ext-header--dark) .ext-nav-extras-btn:not(.cloned-for-mobile, .cloned-for-mobile *) .wp-block-button__link,
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-glass.ext-header--dark) .ext-nav-extras-btn:not(.cloned-for-mobile, .cloned-for-mobile *) .wp-block-button__link {
background-color: #fefefe !important;
color: #060606 !important;
}
/* Sticky non-glass headers: smooth shadow/bg transitions (toggle on .is-scrolled / .is-past-hero) */
header.wp-block-template-part:has(.ext-header-sticky):not(:has(.ext-header-glass)) {
transition: background-color 300ms ease, box-shadow 300ms ease;
}
/* Floating-pill: smooth the top change when .is-scrolled toggles, so the
header doesn't snap up when scrolling past the admin bar. */
header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
transition: top 300ms ease;
}
/* Subpage elevation shadow: appears when user scrolls (no hero on the page) */
body:not(:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child)) header.wp-block-template-part.is-scrolled:has(.ext-header-sticky):not(:has(.ext-header-glass)) {
box-shadow: 0 4px 24px -8px oklch(from var(--wp--preset--color--foreground) l c h / 0.08);
}
/* Smart sticky transitions: smooth color/filter changes when toggling .is-past-hero */
header.wp-block-template-part:has(.ext-header--dark) {
transition: background-color 300ms ease, color 300ms ease, box-shadow 300ms ease, border-color 300ms ease;
}
header.wp-block-template-part:has(.ext-header--dark) :where(a, button, .wp-block-site-title, .wp-social-link) {
transition: color 300ms ease;
}
header.wp-block-template-part:has(.ext-header--dark) .wp-block-site-logo {
transition: filter 300ms ease;
}
/* Past-hero: any sticky+overlay gets solid theme bg + elevation shadow.
Glass headers are excluded — they manage their own scroll visuals. */
header.wp-block-template-part.is-past-hero:has(.ext-header-sticky.ext-header-overlay):not(:has(.ext-header-glass)) {
background-color: var(--wp--preset--color--background);
box-shadow: 0 4px 24px -8px oklch(from var(--wp--preset--color--foreground) l c h / 0.08);
}
/* Past-hero on dark variant: also revert white text / inverted logo / forced social color */
header.wp-block-template-part.is-past-hero:has(.ext-header-overlay.ext-header--dark):not(:has(.ext-header-glass)) {
color: var(--wp--preset--color--foreground);
}
header.wp-block-template-part.is-past-hero:has(.ext-header-overlay.ext-header--dark):not(:has(.ext-header-glass)) :where(a, button, .wp-block-site-title):not(.has-background, .wp-block-button__link) {
color: inherit;
}
header.wp-block-template-part.is-past-hero:has(.ext-header-overlay.ext-header--dark):not(:has(.ext-header-glass)) .wp-social-link {
color: var(--wp--preset--color--foreground) !important;
}
header.wp-block-template-part.is-past-hero:has(.ext-header-overlay.ext-header--dark):not(:has(.ext-header-glass)) .wp-block-site-logo {
filter: brightness(1) invert(0);
}
/* ===========================================================
Hero timeline (for scroll-driven animations)
=========================================================== */
@supports (animation-timeline: scroll()) {
.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child {
view-timeline: --ext-hero-timeline block;
}
}
/* ===========================================================
Behavior: ext-header-sticky--floating-pill
- Layout shift: header wrapper goes transparent + constrained width
- When combined with .ext-header-glass, animates glass intensity
=========================================================== */
header.wp-block-template-part .ext-header-sticky--floating-pill.ext-animate {
opacity: 1 !important;
}
header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
position: sticky;
top: 0;
z-index: 12;
border-bottom: none;
}
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
position: sticky;
top: var(--ext-header-offset);
max-width: var(--wp--style--global--wide-size);
margin-left: auto;
margin-right: auto;
background-color: transparent;
padding-inline: var(--wp--style--root--padding-right) var(--wp--style--root--padding-left);
}
/* Initial glass state (over hero): override static glass-end with start values */
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass) .ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass {
background-color: oklch(from var(--ext-header-glass-color-start) l c h / var(--ext-header-bg-opacity-start));
backdrop-filter: blur(var(--ext-header-blur-start));
}
body.admin-bar:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
top:
calc(var(--ext-header-offset) +
var(--wp-admin--admin-bar--position-offset, var(--wp-admin--admin-bar--height, 32px)));
background-color: transparent;
}
@media (max-width: 782px) {
body.admin-bar:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
top:
calc(var(--ext-header-offset) +
var(--wp-admin--admin-bar--position-offset, var(--wp-admin--admin-bar--height, 46px)));
}
body.admin-bar:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part.is-scrolled:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
top:var(--ext-header-offset);
}
}
@supports (animation-timeline: scroll()) {
body:not(:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child)) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill) {
max-width: calc(var(--wp--style--global--wide-size) + var(--wp--style--root--padding-right) + var(--wp--style--root--padding-left));
margin-left: auto;
margin-right: auto;
}
@media (prefers-reduced-motion: no-preference) {
body:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass) .ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass {
animation: ext-header-glass-intensify linear both !important;
animation-timeline: --ext-hero-timeline !important;
animation-range: exit 0% exit 80% !important;
}
body:not(:has(.entry-content > .ext-hero-section.ext-hero-section--full-screen:first-child)) header.wp-block-template-part:has(.ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass) .ext-header-sticky.ext-header-sticky--floating-pill.ext-header-glass {
animation: ext-header-glass-intensify-no-hero linear forwards !important;
animation-timeline: scroll() !important;
animation-range: 0 var(--ext-header-animation-distance) !important;
}
}
}
@keyframes ext-header-glass-intensify {
from {
background-color: oklch(from var(--ext-header-glass-color-start) l c h / var(--ext-header-bg-opacity-start));
backdrop-filter: blur(var(--ext-header-blur-start));
}
to {
background-color: oklch(from var(--ext-header-glass-color-end) l c h / var(--ext-header-bg-opacity-end));
backdrop-filter: blur(var(--ext-header-blur-end));
box-shadow: 0 14px 28px -10px oklch(from var(--wp--preset--color--foreground) l c h / 0.14), 0 -14px 28px -10px oklch(from var(--wp--preset--color--foreground) l c h / 0.14);
}
}
@keyframes ext-header-glass-intensify-no-hero {
from {
background-color: oklch(from var(--ext-header-glass-color-start) l c h / var(--ext-header-bg-opacity-start));
backdrop-filter: blur(var(--ext-header-blur-start));
box-shadow: none;
translate: 0 0;
max-width: 100%;
margin-inline: auto;
}
to {
background-color: oklch(from var(--ext-header-glass-color-end) l c h / var(--ext-header-bg-opacity-end));
backdrop-filter: blur(var(--ext-header-blur-end));
box-shadow: 0 14px 28px -10px oklch(from var(--wp--preset--color--foreground) l c h / 0.14), 0 -14px 28px -10px oklch(from var(--wp--preset--color--foreground) l c h / 0.14);
translate: 0 var(--ext-header-offset);
max-width: var(--wp--style--global--wide-size);
margin-inline: var(--wp--style--root--padding-right) var(--wp--style--root--padding-left);
border-radius: 1rem;
}
}
/* ===========================================================
Vibe/gradient fix
-----------------------------------------------------------
Vibe block-style variations (e.g. is-style-ext-preset--group--*--header-1--N)
paint a background gradient on the header. That gradient fights every
over-hero / glass-tint / dark-scrim treatment we apply to overlay or glass
headers, because the glass and overlay rules set background-COLOR while the
variation sets a background-IMAGE that paints on top.
Override the variation's background-image specifically (not the whole
`background:` shorthand). That lets each header keep working in its
natural design:
- overlay non-glass: gets transparent bg over hero, theme bg past hero
- glass: gets the glass tint (light by default, dark when --dark is set)
On non-overlay / non-glass headers the variation gradient stays as-is.
=========================================================== */
.ext-header-overlay[class*="is-style-ext-preset--"],
.ext-header-glass[class*="is-style-ext-preset--"] {
background-image: none !important;
}
/* Temporary: a few template parts (e.g. no-title-sticky-header.html) wrap our
header in another sticky . Scope the fix to the three new headers
(atlas-beacon, catalina-skyline, ceadar-peak) — they're the only ones
using .ext-header-overlay, so older headers that intentionally rely on
the wrapper's positioning aren't affected. display: contents removes the
wrapper from layout entirely so its bg/border/sticky/box-shadow/
wp-container-* styles don't apply. Remove once the upstream template
stops wrapping. */
header:has(> header.wp-block-template-part :where(.ext-header-overlay)) {
display: contents;
}