/*
 * ITPulse Motion Foundation — V2.6.2
 *
 * Final tactile-motion polish.
 *
 * Principles:
 * - V1-inspired whole-card lift: the card and its contents move as one object.
 * - Hybrid touch+mouse laptops are supported with any-hover/any-pointer.
 * - Only major interactive cards lift; small informational tiles stay planted.
 * - Category-specific signature effects remain separate from the physical lift.
 * - Service curtains cover the full card cleanly and carry a soft left-to-right light falloff.
 */

:root {
    --itpulse-silk-lift: -6px;
    --itpulse-silk-duration: 560ms;
    --itpulse-silk-ease: cubic-bezier(.22, .61, .36, 1);
    --itpulse-silk-shadow-rest: 0 12px 34px rgba(7, 26, 51, .065);
    --itpulse-silk-shadow: 0 28px 72px rgba(7, 26, 51, .14);
}

/* =========================================================
   1. Major-card tactile physics
   Supports hybrid touch-screen laptops that also have a mouse.
   ========================================================= */
@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .services .services-item,
    .projects .project-item,
    .blog .blog-item,
    .team .team-item,
    .about-capability-card,
    .service-modern-card,
    .solution-pathway-card {
        transform: translate3d(0, 0, 0) !important;
        box-shadow: var(--itpulse-silk-shadow-rest) !important;
        transition:
            transform var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            box-shadow var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            border-color var(--itpulse-silk-duration) var(--itpulse-silk-ease) !important;
        backface-visibility: hidden;
        -webkit-backface-visibility: hidden;
        will-change: transform, box-shadow;
    }

    .services .services-item:hover,
    .projects .project-item:hover,
    .blog .blog-item:hover,
    .team .team-item:hover,
    .about-capability-card:hover,
    .service-modern-card:hover,
    .solution-pathway-card:hover,
    .service-modern-card:focus-visible,
    .solution-pathway-card:focus-visible,
    .about-capability-card:focus-visible {
        transform: translate3d(0, var(--itpulse-silk-lift), 0) !important;
        box-shadow: var(--itpulse-silk-shadow) !important;
    }

    /* Keep child material attached to the physical card. */
    .services .services-item:hover .services-content-icon .btn,
    .service-modern-card:hover .service-card-icon,
    .service-modern-card:focus-visible .service-card-icon,
    .service-modern-card:hover .service-card-link,
    .service-modern-card:focus-visible .service-card-link,
    .solution-pathway-card:hover .solution-pathway-icon,
    .solution-pathway-card:focus-visible .solution-pathway-icon,
    .solution-pathway-card:hover .solution-pathway-link span,
    .solution-pathway-card:focus-visible .solution-pathway-link span,
    .about-capability-card:hover .about-capability-arrow {
        transform: none !important;
        rotate: 0deg !important;
    }
}

/* =========================================================
   2. Small informational tiles stay planted
   These may still change colour/border softly, but they do not float.
   ========================================================= */
@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .testimonial .testimonial-item,
    .about-process-card,
    .about-spectrum-card,
    .about-enablement-item,
    .services-extended-card,
    .services-method-card,
    .service-process-card,
    .service-scope-card,
    .service-outcome-item,
    .service-related-card,
    .solution-layer-stack article,
    .solution-usecase-card,
    .solution-method-grid article,
    .solution-challenge-grid article,
    .solution-block-grid article,
    .solution-result-grid article,
    .solution-scenario-grid article,
    .solution-process-grid article,
    .solution-related-grid > a,
    .testimonial .testimonial-item:hover,
    .about-process-card:hover,
    .about-spectrum-card:hover,
    .about-enablement-item:hover,
    .services-extended-card:hover,
    .services-method-card:hover,
    .service-process-card:hover,
    .service-scope-card:hover,
    .service-outcome-item:hover,
    .service-related-card:hover,
    .solution-layer-stack article:hover,
    .solution-usecase-card:hover,
    .solution-method-grid article:hover,
    .solution-challenge-grid article:hover,
    .solution-block-grid article:hover,
    .solution-result-grid article:hover,
    .solution-scenario-grid article:hover,
    .solution-process-grid article:hover,
    .solution-related-grid > a:hover {
        transform: none !important;
    }
}

/* =========================================================
   3. HOME Services signature curtain — clean full-card finish
   The old nested pseudo-element is disabled; the curtain now belongs to
   the physical card itself, so no top/bottom sliver remains.
   ========================================================= */
.services .services-content::after {
    content: none !important;
    display: none !important;
}

.services .services-item {
    position: relative;
    isolation: isolate;
    overflow: hidden;
}

.services .services-item::before,
.services .services-item::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
}

.services .services-item::before {
    z-index: 0;
    /* Dark service curtain with the restored left-origin illumination. */
    background:
        linear-gradient(
            100deg,
            rgba(19, 74, 103, .98) 0%,
            rgba(11, 46, 73, .965) 30%,
            rgba(11, 31, 58, .94) 68%,
            rgba(11, 31, 58, .92) 100%
        );
    transform: scaleY(0);
    transform-origin: 50% 0%;
    transition: transform 720ms cubic-bezier(.22, 1, .36, 1) !important;
    will-change: transform;
}

.services .services-item::after {
    z-index: 0;
    /* Soft light is strongest at the left and naturally disappears rightward. */
    background: linear-gradient(
        90deg,
        rgba(105, 234, 255, .13) 0%,
        rgba(105, 234, 255, .055) 34%,
        transparent 76%
    );
    opacity: 0;
    transition: opacity 520ms ease !important;
}

.services .services-item:hover::before {
    transform: scaleY(1);
}

.services .services-item:hover::after {
    opacity: 1;
}

.services .services-content {
    position: relative;
    z-index: 1;
    isolation: auto;
}

.services .services-item:hover {
    /* Match the curtain edge so the parent border cannot show as cyan slivers. */
    border-color: rgba(11, 31, 58, .92) !important;
}

.services .services-content-icon i,
.services .services-content-icon h4,
.services .services-content-icon p,
.services .services-content-icon .btn {
    transition:
        color 520ms ease,
        background-color 520ms ease,
        border-color 520ms ease !important;
}

/* =========================================================
   4. Dedicated Services cards — same family, cleaner finish
   ========================================================= */
.service-modern-card::before {
    background:
        linear-gradient(
            100deg,
            #0d4967 0%,
            #092f4d 34%,
            #061f38 72%,
            #041827 100%
        ) !important;
    transform-origin: 50% 0% !important;
    transition: transform 720ms cubic-bezier(.22, 1, .36, 1) !important;
}

.service-modern-card::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    border-radius: inherit;
    pointer-events: none;
    background: linear-gradient(
        90deg,
        rgba(105, 234, 255, .11) 0%,
        rgba(105, 234, 255, .04) 34%,
        transparent 76%
    );
    opacity: 0;
    transition: opacity 520ms ease !important;
}

.service-modern-card:hover::after,
.service-modern-card:focus-visible::after {
    opacity: 1;
}

.service-modern-card:hover,
.service-modern-card:focus-visible {
    border-color: rgba(4, 24, 39, .95) !important;
}

/* =========================================================
   5. Solutions signature — opposing curtains remain intact
   ========================================================= */
.solution-pathway-card .solution-curtain--left,
.solution-pathway-card .solution-curtain--right {
    width: 51% !important;
    background: linear-gradient(180deg, #061f38 0%, #083d59 100%) !important;
    box-shadow: none !important;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    transition: transform 820ms cubic-bezier(.22, 1, .36, 1) !important;
}

.solution-pathway-card .solution-curtain--left {
    left: 0 !important;
    right: auto !important;
}

.solution-pathway-card .solution-curtain--right {
    right: 0 !important;
    left: auto !important;
}

.solution-pathway-card .solution-pathway-number {
    top: 26px !important;
    right: 26px !important;
    left: auto !important;
    width: 70px !important;
    height: 42px;
    display: flex !important;
    justify-content: flex-end;
    align-items: flex-start;
    margin: 0 !important;
    text-align: right !important;
    line-height: 1 !important;
    font-variant-numeric: tabular-nums;
    font-feature-settings: "tnum" 1;
}

.solution-pathway-card h3,
.solution-pathway-card p,
.solution-pathway-card .solution-pathway-eyebrow,
.solution-pathway-card .solution-pathway-link,
.solution-pathway-card .solution-pathway-number,
.service-modern-card h3,
.service-modern-card p,
.service-modern-card .service-card-eyebrow,
.service-modern-card .service-card-link,
.service-modern-card .service-card-index {
    transition: color 400ms ease, background-color 400ms ease !important;
}

/* =========================================================
   6. Other approved signature effects — smooth, not competing
   ========================================================= */
.projects .project-img::before,
.projects .project-img::after,
.projects .project-content {
    transition: opacity 520ms ease, transform 520ms ease !important;
}

.projects .project-img > img,
.blog .blog-item > img,
.blog .blog-item > a img {
    transition: transform 520ms ease !important;
}

.team .team-img img {
    transform: scale(1);
    transition:
        transform 560ms ease,
        border-color 560ms ease,
        box-shadow 560ms ease !important;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .team .team-item:hover .team-img img,
    .team .team-item:focus-within .team-img img {
        transform: scale(1.05) !important;
        box-shadow: 0 22px 46px rgba(7, 26, 51, .18) !important;
    }
}

.blog .blog-btn-icon .blog-icon-1,
.blog .blog-btn-icon .blog-icon-2 {
    transition: transform 620ms ease, opacity 520ms ease !important;
}

/* Ordinary links/buttons: colour/glow changes are welcome; sudden positional kicks are not. */
.btn,
.itpulse-phone-cta,
.itpulse-search-toggle,
.back-to-top,
.service-cta-secondary {
    transition-timing-function: ease !important;
}

.about-capability-arrow,
.service-card-link,
.service-related-card b,
.solution-pathway-link span,
.solution-related-grid > a b {
    transition: color 360ms ease, opacity 360ms ease !important;
}

/* =========================================================
   7. Touch/mobile
   A pure-touch device never depends on hover or physical lift.
   ========================================================= */
@media (max-width: 767.98px), (any-hover: none) {
    .services .services-item,
    .projects .project-item,
    .blog .blog-item,
    .team .team-item,
    .about-capability-card,
    .service-modern-card,
    .solution-pathway-card {
        transform: none !important;
    }
}

/*
 * Accessibility note:
 * Automatic entrance/orbit/scroll animations continue to respect
 * prefers-reduced-motion elsewhere in the theme. The small hover lift above is
 * intentionally user-triggered and remains available when a fine pointing
 * device is actively being used; this avoids the former 0.01ms "jerk" while
 * preserving reduced automatic motion.
 */


/* =========================================================
   8. V2.6.2 — Blog-calibrated card feel + restored depth
   The Latest Blog & News card is the tactile reference:
   whole card moves as one object, shadow deepens gradually, children stay attached.
   ========================================================= */

/* Static depth for smaller informational cards/tiles. They remain planted. */
.about-process-card,
.about-spectrum-card,
.about-enablement-item,
.about-cta-card,
.services-extended-card,
.services-method-card,
.service-process-card,
.service-scope-card,
.service-outcome-item,
.service-related-card,
.solution-layer-stack article,
.solution-usecase-card,
.solution-method-grid article,
.solution-challenge-grid article,
.solution-block-grid article,
.solution-result-grid article,
.solution-scenario-grid article,
.solution-process-grid article,
.solution-related-grid > a,
.solution-outcome-grid article,
.testimonial .testimonial-item {
    box-shadow: 0 10px 30px rgba(7, 26, 51, .055) !important;
    transition:
        box-shadow 520ms var(--itpulse-silk-ease),
        border-color 520ms var(--itpulse-silk-ease),
        background-color 520ms var(--itpulse-silk-ease),
        color 520ms ease !important;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .about-process-card:hover,
    .about-spectrum-card:hover,
    .about-enablement-item:hover,
    .about-cta-card:hover,
    .services-extended-card:hover,
    .services-method-card:hover,
    .service-process-card:hover,
    .service-scope-card:hover,
    .service-outcome-item:hover,
    .service-related-card:hover,
    .solution-layer-stack article:hover,
    .solution-usecase-card:hover,
    .solution-method-grid article:hover,
    .solution-challenge-grid article:hover,
    .solution-block-grid article:hover,
    .solution-result-grid article:hover,
    .solution-scenario-grid article:hover,
    .solution-process-grid article:hover,
    .solution-related-grid > a:hover,
    .solution-outcome-grid article:hover,
    .testimonial .testimonial-item:hover {
        transform: none !important;
        box-shadow: 0 16px 40px rgba(7, 26, 51, .095) !important;
    }
}

/* The Blog card is our canonical physical motion. Re-state it explicitly so
   every major card uses exactly the same lift/settle timing and shadow model. */
@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .blog .blog-item,
    .services .services-item,
    .projects .project-item,
    .team .team-item,
    .about-capability-card,
    .service-modern-card,
    .solution-pathway-card {
        transform: translate3d(0, 0, 0) !important;
        box-shadow: var(--itpulse-silk-shadow-rest) !important;
        transition:
            transform var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            box-shadow var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            border-color var(--itpulse-silk-duration) var(--itpulse-silk-ease) !important;
    }

    .blog .blog-item:hover,
    .services .services-item:hover,
    .projects .project-item:hover,
    .team .team-item:hover,
    .about-capability-card:hover,
    .service-modern-card:hover,
    .solution-pathway-card:hover,
    .about-capability-card:focus-visible,
    .service-modern-card:focus-visible,
    .solution-pathway-card:focus-visible {
        transform: translate3d(0, -6px, 0) !important;
        box-shadow: var(--itpulse-silk-shadow) !important;
    }
}

/* =========================================================
   9. Brand slogan — visible left-to-right travelling light
   One calm sweep per page load/navigation. It starts bright at the left,
   crosses the phrase and softly disappears on the right.
   ========================================================= */
.itpulse-slogan-spotlight::before,
.itpulse-compact-slogan-inner::before {
    width: 48% !important;
    background: linear-gradient(
        100deg,
        transparent 0%,
        rgba(126, 238, 255, .06) 16%,
        rgba(177, 248, 255, .42) 48%,
        rgba(96, 228, 249, .15) 72%,
        transparent 100%
    ) !important;
    filter: blur(.15px);
}

.itpulse-slogan-spotlight.is-slogan-ready::before,
.itpulse-compact-slogan-inner.is-slogan-ready::before {
    animation: itpulseSloganLightTravel 2.65s cubic-bezier(.22, .61, .36, 1) .18s 1 both !important;
}

.itpulse-slogan-spotlight [data-itpulse-slogan],
.itpulse-compact-slogan-inner [data-itpulse-slogan] {
    text-shadow:
        0 0 10px rgba(130, 239, 255, .12),
        0 0 22px rgba(0, 199, 230, .055);
}

@keyframes itpulseSloganLightTravel {
    0%   { left: -52%; opacity: 0; }
    10%  { opacity: .18; }
    28%  { opacity: .95; }
    76%  { opacity: .48; }
    100% { left: 116%; opacity: 0; }
}

/* =========================================================
   10. V2.6.3 — Approved-motion preservation + UI polish
   Base: V2.6.2. No previously approved behavior is removed.
   ========================================================= */

/* ---------------------------------------------------------
   Solution cards: separate WOW entrance transform from hover transform.
   The wrapper owns viewport entrance; the card owns tactile lift.
   --------------------------------------------------------- */
.solution-pathway-grid > .solution-card-reveal {
    min-width: 0;
    height: 100%;
}

.solution-card-reveal > .solution-pathway-card {
    width: 100%;
    height: 100%;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .solution-card-reveal > .solution-pathway-card {
        transform: translate3d(0, 0, 0) !important;
        box-shadow: 0 13px 34px rgba(7, 26, 51, .095) !important;
        transition:
            transform 560ms cubic-bezier(.22, .61, .36, 1),
            box-shadow 560ms cubic-bezier(.22, .61, .36, 1),
            border-color 560ms cubic-bezier(.22, .61, .36, 1) !important;
    }

    .solution-card-reveal > .solution-pathway-card:hover,
    .solution-card-reveal > .solution-pathway-card:focus-visible {
        transform: translate3d(0, -6px, 0) !important;
        box-shadow: 0 25px 56px rgba(7, 26, 51, .17) !important;
    }
}

/* ---------------------------------------------------------
   Restored card depth: readable but restrained shadows.
   Major cards keep the same physical model; smaller cards stay planted.
   --------------------------------------------------------- */
:root {
    --itpulse-silk-shadow-rest: 0 13px 34px rgba(7, 26, 51, .095);
    --itpulse-silk-shadow: 0 25px 56px rgba(7, 26, 51, .17);
}

.about-process-card,
.about-spectrum-card,
.about-enablement-item,
.about-cta-card,
.services-extended-card,
.services-method-card,
.service-process-card,
.service-scope-card,
.service-outcome-item,
.service-related-card,
.solution-layer-stack article,
.solution-usecase-card,
.solution-method-grid article,
.solution-challenge-grid article,
.solution-block-grid article,
.solution-result-grid article,
.solution-scenario-grid article,
.solution-process-grid article,
.solution-related-grid > a,
.solution-outcome-grid article,
.testimonial .testimonial-item {
    box-shadow: 0 10px 28px rgba(7, 26, 51, .075) !important;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .about-process-card:hover,
    .about-spectrum-card:hover,
    .about-enablement-item:hover,
    .about-cta-card:hover,
    .services-extended-card:hover,
    .services-method-card:hover,
    .service-process-card:hover,
    .service-scope-card:hover,
    .service-outcome-item:hover,
    .service-related-card:hover,
    .solution-layer-stack article:hover,
    .solution-usecase-card:hover,
    .solution-method-grid article:hover,
    .solution-challenge-grid article:hover,
    .solution-block-grid article:hover,
    .solution-result-grid article:hover,
    .solution-scenario-grid article:hover,
    .solution-process-grid article:hover,
    .solution-related-grid > a:hover,
    .solution-outcome-grid article:hover,
    .testimonial .testimonial-item:hover {
        box-shadow: 0 16px 38px rgba(7, 26, 51, .115) !important;
    }
}

/* Testimonial separation: Owl's JS margin creates the true layout gap;
   this keeps card edges visually clean. */
.testimonial-carousel .testimonial-item {
    overflow: hidden;
}

/* ---------------------------------------------------------
   Back-to-top tactile button. Scrolling behavior lives in v2.js.
   --------------------------------------------------------- */
.back-to-top {
    box-shadow: 0 10px 28px rgba(0, 199, 230, .22) !important;
}

.back-to-top:hover {
    box-shadow: 0 14px 34px rgba(0, 199, 230, .30) !important;
}

/* ---------------------------------------------------------
   Brand spotlight: explicit left-to-right light travel + living green dot.
   The user specifically requested these two small brand motions, so they are
   kept even when the OS reports reduced automatic motion.
   --------------------------------------------------------- */
.itpulse-slogan-spotlight::before,
.itpulse-compact-slogan-inner::before {
    content: "";
    position: absolute;
    top: -18%;
    bottom: -18%;
    left: -64%;
    width: 58% !important;
    opacity: 0;
    pointer-events: none;
    background: linear-gradient(
        104deg,
        transparent 0%,
        rgba(83, 235, 255, .03) 18%,
        rgba(131, 245, 255, .20) 35%,
        rgba(226, 255, 249, .88) 50%,
        rgba(91, 232, 255, .18) 64%,
        transparent 82%
    ) !important;
    filter: blur(.35px);
    mix-blend-mode: screen;
    transform: skewX(-16deg);
}

.itpulse-slogan-spotlight.is-slogan-ready::before,
.itpulse-compact-slogan-inner.is-slogan-ready::before {
    animation: itpulseSloganLightTravelV263 2.45s cubic-bezier(.22, .61, .36, 1) .12s 1 both !important;
}

.itpulse-slogan-spotlight .itpulse-live-dot,
.itpulse-compact-slogan-inner .itpulse-live-dot {
    width: 10px !important;
    height: 10px !important;
    border-radius: 50%;
    background: #28ddb2 !important;
    box-shadow: 0 0 0 0 rgba(40, 221, 178, .34), 0 0 12px rgba(40, 221, 178, .34) !important;
    transform-origin: center;
    animation: itpulseLiveDotBreath 1.85s ease-in-out infinite !important;
}

@keyframes itpulseSloganLightTravelV263 {
    0%   { left: -64%; opacity: 0; }
    8%   { opacity: .2; }
    24%  { opacity: 1; }
    78%  { opacity: .65; }
    100% { left: 118%; opacity: 0; }
}

@keyframes itpulseLiveDotBreath {
    0%, 100% {
        transform: scale(.82);
        box-shadow: 0 0 0 0 rgba(40, 221, 178, .30), 0 0 9px rgba(40, 221, 178, .24);
    }
    50% {
        transform: scale(1.32);
        box-shadow: 0 0 0 7px rgba(40, 221, 178, 0), 0 0 17px rgba(40, 221, 178, .42);
    }
}

@media (prefers-reduced-motion: reduce) {
    .itpulse-slogan-spotlight.is-slogan-ready::before,
    .itpulse-compact-slogan-inner.is-slogan-ready::before {
        animation: itpulseSloganLightTravelV263 2.45s cubic-bezier(.22, .61, .36, 1) .12s 1 both !important;
    }

    .itpulse-slogan-spotlight .itpulse-live-dot,
    .itpulse-compact-slogan-inner .itpulse-live-dot {
        animation: itpulseLiveDotBreath 1.85s ease-in-out infinite !important;
    }
}

/* ---------------------------------------------------------
   Search: cleaner shape + visible paper-roll unfold/fold.
   Search behavior itself is unchanged.
   --------------------------------------------------------- */
.screen-reader-text {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

.itpulse-header-search {
    perspective: 900px;
}

.itpulse-search-toggle {
    border-radius: 14px !important;
    box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
}

.itpulse-header-search .itpulse-search-form {
    width: min(390px, calc(100vw - 32px));
    padding: 10px;
    border: 1px solid rgba(7, 26, 51, .12);
    border-radius: 20px 7px 20px 20px;
    background: linear-gradient(180deg, #ffffff, #fbfdff);
    box-shadow: 0 20px 46px rgba(7, 26, 51, .19), 0 5px 14px rgba(7, 26, 51, .07);
    transform-origin: 100% 50%;
    transform-style: preserve-3d;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translate3d(13px, -3px, 0) scaleX(.065) scaleY(.94) rotateY(-52deg);
    transition:
        transform 980ms cubic-bezier(.22, 1, .36, 1),
        opacity 320ms ease,
        border-radius 820ms ease,
        box-shadow 820ms ease,
        visibility 0s linear 980ms !important;
}

.itpulse-header-search.is-open .itpulse-search-form {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translate3d(0, 0, 0) scaleX(1) scaleY(1) rotateY(0deg);
    border-radius: 18px;
    transition:
        transform 980ms cubic-bezier(.22, 1, .36, 1),
        opacity 360ms ease,
        border-radius 820ms ease,
        box-shadow 820ms ease,
        visibility 0s !important;
}

.itpulse-header-search .itpulse-search-form::after {
    content: "";
    position: absolute;
    top: 8px;
    right: 8px;
    bottom: 8px;
    width: 18px;
    border-radius: 0 12px 12px 0;
    pointer-events: none;
    opacity: .7;
    background: linear-gradient(90deg, transparent, rgba(7, 26, 51, .07));
    transition: opacity 700ms ease;
}

.itpulse-header-search.is-open .itpulse-search-form::after {
    opacity: 0;
}

.itpulse-header-search .itpulse-search-form input {
    min-height: 46px;
    border: 1px solid rgba(7, 26, 51, .10) !important;
    border-radius: 13px !important;
    background: #f5f8fb !important;
    box-shadow: inset 0 1px 2px rgba(7, 26, 51, .035);
}

.itpulse-header-search .itpulse-search-form button[type="submit"] {
    border-radius: 13px !important;
}

/* ---------------------------------------------------------
   Interior page top spacing: Home remains the visual benchmark.
   Reduce excessive empty depth immediately below the navbar on all
   major non-home hero/header variants, without compressing their content.
   --------------------------------------------------------- */
@media (min-width: 992px) {
    .page-header {
        padding-top: 58px !important;
        padding-bottom: 58px !important;
    }

    .about-page-hero {
        padding-top: 56px !important;
        padding-bottom: 64px !important;
    }

    .services-page-hero {
        padding-top: 58px !important;
        padding-bottom: 66px !important;
    }

    .service-detail-hero {
        padding-top: 56px !important;
        padding-bottom: 62px !important;
    }

    .solutions-page-hero,
    .solution-detail-hero {
        padding-top: 58px !important;
        padding-bottom: 66px !important;
    }
}

@media (max-width: 991.98px) {
    .page-header,
    .about-page-hero,
    .services-page-hero,
    .service-detail-hero,
    .solutions-page-hero,
    .solution-detail-hero {
        padding-top: 46px !important;
        padding-bottom: 50px !important;
    }
}


/* =========================================================
   11. V2.6.4 — Narrow consistency patch
   - Dedicated Services receives the exact Service-family top/down curtain.
   - Dedicated Service-card viewport entrances are intentionally slower.
   - Mobile Home Services/Solutions preview their signature curtain on entry.
   - Slogan dot breathing is made unmistakable, including reduced-motion OS cases.
   ========================================================= */

/* Dedicated /services/: explicitly lock the family curtain behavior. */
.service-modern-card::before {
    transform: scaleY(0) !important;
    transform-origin: 50% 0% !important;
    background:
        linear-gradient(
            100deg,
            rgba(19, 74, 103, .98) 0%,
            rgba(11, 46, 73, .965) 30%,
            rgba(11, 31, 58, .94) 68%,
            rgba(11, 31, 58, .92) 100%
        ) !important;
    transition: transform 720ms cubic-bezier(.22, 1, .36, 1) !important;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .service-modern-card:hover::before,
    .service-modern-card:focus-visible::before {
        transform: scaleY(1) !important;
    }

    /* Slower, more deliberate viewport arrival; hover physics are untouched. */
    .services-card-grid > .service-modern-card.wow.animated {
        animation-duration: 1.38s !important;
    }
}

/* Strong, readable breathing dot. Match the reduced-motion selector specificity
   from v2.css so Windows accessibility settings cannot silently cancel it. */
html:not(.itpulse-motion-preview) .itpulse-slogan-spotlight .itpulse-live-dot,
html:not(.itpulse-motion-preview) .itpulse-compact-slogan-inner .itpulse-live-dot,
.itpulse-slogan-spotlight .itpulse-live-dot,
.itpulse-compact-slogan-inner .itpulse-live-dot {
    display: inline-block;
    transform-origin: 50% 50%;
    will-change: transform, box-shadow;
    animation: itpulseLiveDotBreathV264 3.1s ease-in-out infinite !important;
}

@keyframes itpulseLiveDotBreathV264 {
    0%, 100% {
        transform: scale(.72);
        box-shadow:
            0 0 0 0 rgba(40, 221, 178, .32),
            0 0 8px rgba(40, 221, 178, .25) !important;
    }
    50% {
        transform: scale(1.62);
        box-shadow:
            0 0 0 8px rgba(40, 221, 178, 0),
            0 0 20px rgba(40, 221, 178, .48) !important;
    }
}

/* Mobile/touch: signature animation is viewport-driven, not tap-driven.
   Tapping always follows the card link on the first tap. */
@media (max-width: 767.98px), (hover: none), (pointer: coarse) {
    /* HOME Services */
    .services .services-item:hover::before {
        transform: scaleY(0);
    }

    .services .services-item:hover::after {
        opacity: 0;
    }

    .services .services-item.is-mobile-curtain-preview::before {
        transform: scaleY(1) !important;
    }

    .services .services-item.is-mobile-curtain-preview::after {
        opacity: 1 !important;
    }

    .services .services-item.is-mobile-curtain-preview .services-content-icon i {
        color: var(--bs-secondary) !important;
    }

    .services .services-item.is-mobile-curtain-preview .services-content-icon h4,
    .services .services-item.is-mobile-curtain-preview .services-content-icon p {
        color: var(--bs-white) !important;
    }

    /* HOME Solutions: v2.css intentionally hid curtains on touch. Re-enable them
       only for the Home preview and let IntersectionObserver drive the motion. */
    .home-solutions-section .solution-pathway-card .solution-curtain {
        display: block !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-curtain--left,
    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-curtain--right {
        transform: translate3d(0, 0, 0) !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview h3,
    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-link {
        color: #fff !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview p {
        color: rgba(255,255,255,.78) !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-eyebrow,
    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-icon {
        color: #6feaff !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-icon {
        background: rgba(111,234,255,.13) !important;
    }

    .home-solutions-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-number {
        color: rgba(255,255,255,.18) !important;
    }
}


/* =========================================================
   12. V2.6.5 — Dedicated family parity
   Home is the reference implementation.
   Dedicated Services now uses the exact Home Services DOM/classes.
   Dedicated Solutions reuses the exact Home Solutions mobile curtain trigger.
   Only viewport-arrival timing is slowed; approved hover physics are untouched.
   ========================================================= */

/* Dedicated landing cards enter more deliberately than before. */
.services-card-grid--landing > .wow.animated,
.itpulse-solutions-page .solution-pathways-section .solution-card-reveal.wow.animated {
    animation-duration: 1.75s !important;
}

/* Dedicated Solutions: on touch/mobile, expose the same curtain layers and
   focused-viewport preview behavior already approved on Home. */
@media (max-width: 767.98px), (hover: none), (pointer: coarse) {
    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card .solution-curtain {
        display: block !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-curtain--left,
    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-curtain--right {
        transform: translate3d(0, 0, 0) !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview h3,
    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-link {
        color: #fff !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview p {
        color: rgba(255,255,255,.78) !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-eyebrow,
    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-icon {
        color: #6feaff !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-icon {
        background: rgba(111,234,255,.13) !important;
    }

    .itpulse-solutions-page .solution-pathways-section .solution-pathway-card.is-mobile-curtain-preview .solution-pathway-number {
        color: rgba(255,255,255,.18) !important;
    }
}

/* V2.7.0 — Projects use the approved silk-lift physics while keeping their
   own blueprint-scan signature animation. */
@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .project-showcase-card {
        transform: translate3d(0, 0, 0);
        box-shadow: var(--itpulse-silk-shadow-rest);
        transition:
            transform var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            box-shadow var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            border-color var(--itpulse-silk-duration) var(--itpulse-silk-ease);
        backface-visibility: hidden;
        -webkit-backface-visibility: hidden;
        will-change: transform, box-shadow;
    }

    .project-showcase-card:hover,
    .project-showcase-card:focus-visible {
        transform: translate3d(0, var(--itpulse-silk-lift), 0);
        box-shadow: var(--itpulse-silk-shadow);
        border-color: rgba(0, 199, 230, .22);
    }
}

/* =========================================================
   13. V2.9.2 — Motion asset integrity reinforcement
   Purpose: preserve the already-approved Projects family behavior even when
   a browser previously cached an older v2.css/motion.css combination.
   This does not change Services, Solutions, Blog, Team or Testimonials.
   ========================================================= */
@keyframes itpulseProjectScan {
    0%, 5%   { opacity: 0; transform: translate3d(0, 0, 0); }
    10%      { opacity: .98; }
    68%      { opacity: .98; transform: translate3d(0, 555px, 0); }
    76%,100% { opacity: 0; transform: translate3d(0, 590px, 0); }
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .project-showcase-card {
        transform: translate3d(0, 0, 0);
        box-shadow: var(--itpulse-silk-shadow-rest);
        transition:
            transform var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            box-shadow var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            border-color var(--itpulse-silk-duration) var(--itpulse-silk-ease) !important;
        backface-visibility: hidden;
        -webkit-backface-visibility: hidden;
        will-change: transform, box-shadow;
    }

    .project-showcase-card:hover,
    .project-showcase-card:focus-visible {
        transform: translate3d(0, var(--itpulse-silk-lift), 0) !important;
        box-shadow: var(--itpulse-silk-shadow) !important;
        border-color: rgba(0, 199, 230, .22) !important;
    }

    .project-showcase-card:hover .project-scan-line,
    .project-showcase-card:focus-visible .project-scan-line {
        animation: itpulseProjectScan 3.15s cubic-bezier(.28,.58,.28,1) infinite !important;
    }
}

/* =========================================================
   14. V2.9.3 — Narrow motion recovery
   - Projects: separate WOW entrance motion from hover lift with a dedicated
     inner motion shell. This prevents the viewport animation and hover
     transform from competing for the same element.
   - Slogan: use a real travelling-light element instead of relying on a
     replayed pseudo-element animation. Visual appearance is unchanged and
     the beam restarts every 3 seconds.
   ========================================================= */

/* Projects: wrapper owns viewport entrance; lift shell owns tactile movement;
   card owns scanning/content. This mirrors the already-stable Solutions split. */
.project-showcase-lift {
    display: block;
    min-width: 0;
    height: 100%;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .project-showcase-lift {
        transform: translate3d(0, 0, 0);
        transition: transform var(--itpulse-silk-duration) var(--itpulse-silk-ease) !important;
        backface-visibility: hidden;
        -webkit-backface-visibility: hidden;
        will-change: transform;
    }

    /* The old card-level transform is deliberately neutralised so only one
       layer owns physical movement. This removes snapping/double transforms. */
    .project-showcase-card,
    .project-showcase-card:hover,
    .project-showcase-card:focus-visible {
        transform: none !important;
        transition:
            box-shadow var(--itpulse-silk-duration) var(--itpulse-silk-ease),
            border-color var(--itpulse-silk-duration) var(--itpulse-silk-ease) !important;
    }

    .project-showcase-wrap:hover .project-showcase-lift,
    .project-showcase-wrap:focus-within .project-showcase-lift {
        transform: translate3d(0, var(--itpulse-silk-lift), 0);
    }

    .project-showcase-wrap:hover .project-showcase-card,
    .project-showcase-wrap:focus-within .project-showcase-card {
        box-shadow: var(--itpulse-silk-shadow) !important;
        border-color: rgba(0, 199, 230, .22) !important;
    }
}

/* Slogan travelling light: a dedicated layer is more reliable than repeatedly
   restarting ::before across browser engines. Keep the pseudo layer dormant to
   prevent two beams from stacking. */
.itpulse-slogan-spotlight::before,
.itpulse-compact-slogan-inner::before {
    animation: none !important;
    opacity: 0 !important;
}

.itpulse-slogan-beam {
    position: absolute;
    z-index: 0;
    top: -18%;
    bottom: -18%;
    left: -64%;
    width: 58%;
    pointer-events: none;
    opacity: 0;
    background: linear-gradient(
        100deg,
        transparent 0%,
        rgba(126, 238, 255, .05) 14%,
        rgba(131, 245, 255, .20) 35%,
        rgba(226, 255, 249, .88) 50%,
        rgba(91, 232, 255, .18) 64%,
        transparent 82%
    );
    filter: blur(.35px);
    mix-blend-mode: screen;
    transform: skewX(-16deg);
    will-change: left, opacity;
    animation: itpulseSloganBeamLoopV293 3s cubic-bezier(.22, .61, .36, 1) infinite !important;
}

.itpulse-slogan-spotlight [data-itpulse-slogan],
.itpulse-compact-slogan-inner [data-itpulse-slogan],
.itpulse-slogan-spotlight .itpulse-live-dot,
.itpulse-compact-slogan-inner .itpulse-live-dot {
    position: relative;
    z-index: 1;
}

@keyframes itpulseSloganBeamLoopV293 {
    0%   { left: -64%; opacity: 0; }
    7%   { opacity: .20; }
    22%  { opacity: 1; }
    73%  { left: 103%; opacity: .64; }
    84%  { left: 118%; opacity: 0; }
    100% { left: 118%; opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
    .itpulse-slogan-beam {
        animation: itpulseSloganBeamLoopV293 3s cubic-bezier(.22, .61, .36, 1) infinite !important;
    }
}

/* =========================================================
   V2.9.7 — Testimonial motion identity
   A gentle quote-card lift plus a vertical signal line. No curtain, scan,
   convergence or inner-text movement is reused here.
   ========================================================= */
.testimonial-v297-card,
.testimonial-v297-card .testimonial-v297-avatar,
.testimonial-v297-card .testimonial-v297-signal {
    will-change: transform;
}

@media (min-width: 768px) and (any-hover: hover) and (any-pointer: fine) {
    .testimonial-v297 .testimonial-v297-card {
        transform: translate3d(0, 0, 0) !important;
        transition:
            transform 640ms cubic-bezier(.22,.61,.36,1),
            box-shadow 640ms cubic-bezier(.22,.61,.36,1),
            border-color 520ms ease !important;
    }

    .testimonial-v297 .testimonial-v297-card:hover {
        transform: translate3d(0, -5px, 0) !important;
        border-color: rgba(0,199,230,.32) !important;
        box-shadow: 0 24px 54px rgba(7,26,51,.145) !important;
    }

    .testimonial-v297 .testimonial-v297-card:hover::after {
        opacity: 1;
    }

    .testimonial-v297 .testimonial-v297-card .testimonial-v297-avatar {
        transition: transform 640ms cubic-bezier(.22,.61,.36,1), box-shadow 640ms cubic-bezier(.22,.61,.36,1);
    }

    .testimonial-v297 .testimonial-v297-card:hover .testimonial-v297-avatar {
        transform: scale(1.035);
        box-shadow: 0 12px 28px rgba(7,26,51,.18);
    }

    .testimonial-v297 .testimonial-v297-card .testimonial-v297-signal {
        transition: height 640ms cubic-bezier(.22,.61,.36,1), opacity 440ms ease, box-shadow 440ms ease;
    }

    .testimonial-v297 .testimonial-v297-card:hover .testimonial-v297-signal,
    .testimonial-v297-carousel .owl-item.center .testimonial-v297-signal {
        height: 72%;
        opacity: 1;
        box-shadow: 0 0 20px rgba(8,198,227,.34);
    }
}

@media (max-width: 767.98px) {
    .testimonial-v297-card::after {
        opacity: .55;
    }

    .testimonial-v297-signal {
        height: 46%;
        opacity: .88;
    }
}

