/* ============================================================
   Cloud Migration -- page-specific layer.

   Loads AFTER css/it-managed-services-zazz.css. Copied from
   css/okta-services.css (Family A cloud-migration build, WP ID 7610): only the
   hero banner image swaps for this page, plus the services-grid card overrides
   are removed below because this page's live services section is a carousel
   with per-card images (systems-integration-services.php markup), not the
   text-only 4-col grid okta-services.css was tuned for. Live page has no
   anchor sub-nav, so .zmit-subnav markup is omitted from the page (its CSS
   here is inert). Contact-width, success-story-card, testimonial-gradient and
   the desktop hero-overhang rules are all inherited unchanged from that
   reference.

   Split rule: a given CSS property for a given selector lives in exactly one of
   the two sheets, never both, so their load order cannot change any outcome.
   Section geometry started from the Okta page's measured values and is tuned
   to this page's content heights.
   ============================================================ */

/* ---- Contact band: copy sits in a centred, narrow column (matches live) ---- */
.zmit-contact .zmit-contact-head { max-width: 1100px; margin-left: auto; margin-right: auto; text-align: center; }
.zmit-contact .zmit-contact-head p { max-width: 1000px; margin-left: auto; margin-right: auto; }

/* ---- Success-story loop-grid cards: light-grey card + brand logo row ----
   Live normalises every brand logo to a 50px-tall, left-aligned box (object-fit
   contain, width follows aspect), so a square mark and a wide wordmark sit on the
   same baseline. A reserved-height slot keeps titles aligned when a logo is absent. */
.zmit-story { background: #f5f6fb; border-radius: 8px; overflow: hidden; }
.zmit-story .body .zmit-story-logos { min-height: 50px; margin: 0 0 14px; display: flex; align-items: center; }
/* Specific selector + fixed box so a broad `.zmit-story .body img` rule can't
   blow a wide wordmark up: every logo is 50px tall, capped in width, left-aligned. */
.zmit-story .body .zmit-story-logo {
    display: block; height: 50px; width: auto; max-width: 150px;
    object-fit: contain; object-position: left center;
}

/* ---- Testimonial card: live uses the same blue banner gradient (not the Azure
   lavender wash), dark copy, arrows outside the card. ---- */
.zmit-testi-card {
    background-color: transparent;
    background-image: linear-gradient(100deg, #eef6f1 0%, #dce9fb 34%, #93b8fb 68%, #2f7bff 100%);
}

/* Testimonial arrows disable at the carousel ends (non-looping — see the page
   JS). Keep them visible but muted; pointer-events:none also blocks the shared
   hover state so a disabled arrow cannot light up. */
.zmit .zmit-testi-nav:disabled { opacity: .4; cursor: default; pointer-events: none; }

/* ---- Hero banner: this page's Okta artwork (dark navy + blue signal-wave
   graphic) + its gradient wash ---- */
.zmit-hero::before {
    background:
        linear-gradient(100deg, rgba(8,11,18,.88) 0%, rgba(8,11,18,.55) 55%, rgba(8,11,18,.25) 100%),
        url('https://dahqbtk1vlskk.cloudfront.net/wp-content/uploads/2025/06/26133743/Cloud-Migration-Hero-Banner.webp') center/cover no-repeat;
}
@media (min-width: 768px) {
    .zmit-hero::before {
        background:
            linear-gradient(100deg, rgba(8,11,18,.88) 0%, rgba(8,11,18,.55) 55%, rgba(8,11,18,.25) 100%),
            url('https://dahqbtk1vlskk.cloudfront.net/wp-content/uploads/2025/06/26133743/Cloud-Migration-Hero-Banner.webp') center/cover no-repeat;
    }
}
/* Hero left column runs slightly deeper on this page */
.zmit-hero-left { padding-bottom: 56px; }

/* Desktop: the left text column drives the (short) banner height, and the taller
   form card overhangs onto the white trust band (matches live). Trim the left
   column's bottom pad and drop the shared -50px form lift so the form's lower
   rows (Budget/Submit/note) sit below the banner edge instead of flush inside it. */
@media (min-width: 1081px) {
    .zmit-hero-left { padding-bottom: 8px; align-self: center; }
    .zmit-form-card { margin-top: 0; }
}

/* ============================================================
   MEASURED SECTION GEOMETRY (this page's production heights, 1440)

   Section rhythm and the recognized-band overlap are content-height specific:
   the next page re-measures its own. The overlap mechanism (the recognized band
   pulls up into approach with negative margins, the why band pulls up into
   recognized) is production's own; the values here are this page's.
   ============================================================ */
.zmit .zmit-intro.z-section      { padding: 30px 0; }
.zmit .zmit-services.z-section   { padding: 80px 0 66px; }
.zmit .zmit-approach.z-section   { padding: 50px 0 165px; }
.zmit .zmit-recognized.z-section { margin: -145px 0 -200px; padding: 40px 0; position: relative; z-index: 2; }
.zmit .zmit-why.z-section        { margin-top: 80px; padding: 200px 0 80px; }
.zmit .zmit-stories.z-section    { padding: 30px 0; }
.zmit .zmit-stats.z-section      { padding: 85px 0; }
.zmit .zmit-testi.z-section      { padding: 80px 0; }
.zmit .zmit-faq.z-section        { padding: 80px 0; }
.zmit .zmit-final.z-section      { margin: 150px 0 80px; padding: 0; }
.zmit .zmit-contact.z-section    { padding: 50px 0; }
.zmit .zmit-insights.z-section   { padding: 103px 0; }

/* Book-a-Consultation: balance the visible gap before/after the band. Its
   neighbours contribute unequal facing padding (Success Stories above: 30px;
   Stats below: 85px), so the section's own padding is deliberately lopsided
   (92 top / 37 bottom) to make gap-above == gap-below == 122px. This is why the
   top/bottom differ; do NOT "normalise" it back to a symmetric 64/64. */
.zmit .zmit-bookcta.z-section    { padding: 92px 0 37px; }

/* @media(1080) removed: old sheet overrode these with later non-media rules, so the page was non-responsive down to 680px; keep that. */

/* ---- Content-height tuning measured on this page ---- */
/* Services card photo height: live's 4 service cards each carry a photo
   (systems-integration-services.php carousel markup), unlike the
   text-only okta-services grid this sheet was copied from. */
.zmit-svc-media img { height: 180px; }
/* Meetings embed well. Let the box grow to the HubSpot iframe's own height
   (it sizes itself to ~756px) rather than locking to 660px — the fixed height
   made the calendar's lower rows spill out of the band and overlap the Stats
   section below. min-height reserves the slot before the calendar loads (CLS).
   The <=1080 rule below already did this; desktop now matches, same as the
   it-managed-services reference (natural iframe height). */
.zmit-bookcal-embed,
.zmit-bookcal-embed .meetings-iframe-container,
.zmit-bookcal-embed iframe { height: auto; min-height: 660px; }
/* Story thumbnail */
.zmit-story-img img { height: 300px; }
/* Testimonial card floor */
.zmit-testi-card { min-height: 336px; }
/* Why item trailing space (rows on production's ~260px pitch) */
.zmit-why-card { padding-bottom: 40px; }
/* Recognized inner band padding */
.zmit-recognized-band { padding: 18px 44px; }

/* ---- Final CTA banner: shorter box, figure overflowing the top edge ----
   Deliberate departure from production's 409px box: a shallower box with the
   copy centred and a taller figure bottom-anchored so it breaks above the top. */
.zmit-final-banner {
    min-height: 300px;
    padding: 40px 60px;
    display: flex;
    align-items: center;
}
.zmit-final-copy { max-width: 52%; }
.zmit-final-copy h2 { margin-bottom: 14px; }
.zmit-final-copy p { margin-bottom: 22px; max-width: 470px; }
.zmit-final-media img { height: 470px; right: 90px; bottom: 0; }

/* @media(1080) removed: old sheet overrode these with later non-media rules, so the page was non-responsive down to 680px; keep that. */

/* ---- Old azure.css @media(max-width:1080px) blocks, restored verbatim to
   preserve the pre-split tablet cascade exactly. ---- */
@media (max-width: 1080px) {
    .zmit-intro-grid { grid-template-columns: 1fr; gap: 32px; }
    .zmit-insights-grid { grid-template-columns: 1fr; gap: 26px; }
}

/* Tablet-only: the shared sheet already collapses these to one column at
   680px, and this sheet loads after it, so gating them to tablet stops them
   re-imposing a two-up layout on a phone. */
@media (max-width: 1080px) and (min-width: 681px) {
    .zmit-svc-track { grid-auto-columns: calc((100% - 22px) / 2); }
    .zmit-stats-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 1080px) {
    /* The measured desktop lead-ins are desktop-only; the live page collapses
       them on tablet/phone, where a 200px gap would read as a blank screen. */
    .zmit .zmit-why.z-section      { padding: 60px 0; }
    .zmit .zmit-approach.z-section { padding: 50px 0 60px; }
    .zmit .zmit-services.z-section { padding: 60px 0; }
    .zmit-why-grid { gap: 24px; }
    /* Hero is single-column below 1081, so the deep left-column pad just opens
       a gap between the CTA and the form card. */
    .zmit-hero-left { padding-bottom: 0; }
}

@media (max-width: 1080px) {
    .zmit-stats-layout { grid-template-columns: 1fr; gap: 32px; }
    .zmit-stats-copy { max-width: none; }
}

@media (max-width: 1080px) {
    .zmit-why .z-container { grid-template-columns: 1fr; gap: 32px; }
}
/* Tablet-only, same reason as the two-up block above: 19px card headings in a
   145px column are unreadable, and the shared sheet already sets 1fr at 680. */
@media (max-width: 1080px) and (min-width: 681px) {
    .zmit-why-grid { grid-template-columns: 1fr 1fr; gap: 30px 24px; }
}

@media (max-width: 1080px) {
    /* The overlap is a desktop composition; stacked layouts just butt up. */
    .zmit .zmit-approach.z-section { padding: 50px 0 60px; }
    .zmit .zmit-recognized.z-section { margin: 0; padding: 32px 0; }
    .zmit .zmit-why.z-section { margin-top: 0; padding: 60px 0; }
    .zmit .zmit-final.z-section { margin: 40px 0; padding: 0; }
}

@media (max-width: 1080px) {
    /* Stacked: no overflow trick, figure sits under the copy */
    .zmit-final-banner { min-height: 0; padding: 36px 32px 0; display: block; }
    .zmit-final-copy { max-width: 100%; }
    .zmit-final-media img { position: static; height: 280px; margin: 16px auto 0; }
}
/* ============================================================
   PHONE GEOMETRY (<=680)

   The measured section paddings above are this page's 1440 values and carry
   no media query, so on a phone the page kept 80-200px bands and ran ~16.8k
   px tall. These are the same rhythm re-measured for a 375 viewport; the
   shared sheet's structural stacking does the rest.
   ============================================================ */
@media (max-width: 680px) {
    .zmit .zmit-intro.z-section      { padding: 24px 0; }
    .zmit .zmit-services.z-section   { padding: 44px 0; }
    .zmit .zmit-approach.z-section   { padding: 40px 0; }
    .zmit .zmit-recognized.z-section { padding: 28px 0; }
    .zmit .zmit-why.z-section        { padding: 44px 0; }
    .zmit .zmit-stories.z-section    { padding: 24px 0; }
    .zmit .zmit-stats.z-section      { padding: 48px 0; }
    /* Balance Book-a-Consultation gaps on phone: stories 24 above, stats 48
       below -> 64/40 gives 88px on each side. */
    .zmit .zmit-bookcta.z-section    { padding: 64px 0 40px; }
    .zmit .zmit-testi.z-section      { padding: 44px 0; }
    .zmit .zmit-faq.z-section        { padding: 44px 0; }
    .zmit .zmit-final.z-section      { margin: 32px 0; }
    .zmit .zmit-contact.z-section    { padding: 40px 0; }
    .zmit .zmit-insights.z-section   { padding: 48px 0; }

    /* 44px of side padding inside a 315px container leaves 227px of copy. */
    .zmit-recognized-band { padding: 26px 22px; }
    .zmit-final-banner    { padding: 30px 22px 0; }
    .zmit-final-media img { height: 210px; }
    /* Full-bleed at one column, so the desktop 300px reads as a near-square. */
    .zmit-story-img img   { height: 200px; }
}

@media (max-width: 1080px) {
    /* HubSpot's meetings widget sets a taller height on its own iframe once the
       narrow layout stacks the slot picker (inline style, so it wins over the
       660px above). The well kept the measured desktop height and clipped the
       last row of times -- let it follow the iframe instead. */
    .zmit-bookcal-embed,
    .zmit-bookcal-embed .meetings-iframe-container { height: auto; min-height: 660px; }
}


/* ------------------------------------------------------------
   PERF - Poppins from woff2 (page-scoped). The shared sheets declare
     @font-face { font-family: poppins; src: ...Poppins-Regular.ttf; font-display: swap }
   a 155 KB .ttf sitting on the mobile critical chain. The identical font already
   exists as a 52 KB .woff2 on the server (advance widths and ascent/descent measured
   equal at 14-54px, 400/700). This sheet loads AFTER header.css, so the same family
   + descriptors override the .ttf face for THIS page only; the woff2 is preloaded in
   the page head. No visual change. Other pages keep the shared .ttf.
   ------------------------------------------------------------ */
@font-face { font-family: poppins; font-display: swap; src: url('../assets/fonts/Poppins/Poppins-Regular.woff2') format('woff2'); }

/* Services carousel arrows (see the page script): hidden when every card
   already fits, faded + inert at either end of the track. */
.zmit .zmit-svc-nav.is-static { display: none; }
.zmit .zmit-svc-nav button:disabled { opacity: .35; cursor: default; pointer-events: none; }

/* Services cards: owner rule (2026-09-25) - a card with no link/CTA gets NO
   hover effect, so drop the shared image zoom on .no-cta cards (all 4 on this
   page). Linked cards would take the whole-card hover + lift instead of the
   zoom; none are linked here yet. */
.zmit .zmit-svc-card.no-cta { cursor: default; }   /* shared sheet sets pointer on every card */
.zmit .zmit-svc-card.no-cta:hover .zmit-svc-media img { transform: none; }
