/* ============================================================
   cyber-security-services — page sheet. BASE = css/outsourced-cybersecurity-services.css
   (same Elementor template: 17 of 20 band ids shared), copied verbatim with only the
   banner artwork swapped; the measurements in the notes below are THAT page's.
   Everything specific to /cyber-security-services is in the block APPENDED AT THE END.
   ---- original notes (outsourced-cybersecurity-services) ----
   19 live depth-0 bands at 1440 (20 renderings: fb82707 ships BOTH the
   desktop compare table and a mobile-only accordion, which is display:none
   at/above tablet_extra).

   Loads AFTER css/it-managed-services-zazz.css.

   Built band by band. ZERO of this template's band ids appear anywhere else
   in the repo, so nothing was cloned wholesale: where a component already
   existed it was reused and only this page's MEASURED deltas are written
   here. The reference for each band is named in its own comment.

   MEASURED ON LIVE AT 1440 (window.innerWidth === 1440 asserted in the same
   evaluation as every reading below; nothing here is computed):
     - Live's boxed bands run 1400 at x20 and the services grid is full-bleed
       1440. The house 1400px .z-container is KEPT — owner decision
       2026-08-26, CLAUDE.md §7 "Never widen the content box". Percentage
       column splits are used so the proportions carry.
     - Hero: banner 1440x633 at t100; H2 54px/600/64.8px white, 766 at x30
       (4 lines, 259 tall); sub 766 at x30; CTA 484x42; form title 20px/600;
       .hsfc-Form 465x458 at x918 t262.
     - Services: TEN cards, TEN linked. Grid FOUR columns (337.5px x4, gap
       30). Card border 1px #eff0f7, radius 10, inner fill #eff0f7, padding
       30. Title 18px/700/23.4px #14142b, m 0 0 20; bullets 14px/23.1px.
       Card heights CONTENT-DRIVEN (305 / 290) because the CTA row is
       ABSOLUTE (left 30 / right -30 / bottom 12, 34 tall) and therefore
       cannot grow the card. Eyebrow 16.31px/700/25.2px; lead
       34.7px/400/43px.
     - Compare heading (dce398f): 36.8px/400/36.8px rgb(20,20,20) LEFT.
     - Compare table (fb82707): 3 columns 457 at x20 / x492 / x963 (gap 15),
       container radius 10; header cells 72 tall WHITE, body cells 100, both
       padding 20px 30px; FIVE rows. col-0 carries live's 3-layer gradient
       (read off the column's own backgroundImage — a backgroundColor-only
       read reports none) with transparent cells; col-1 #eff0f7 with even
       rows #f9fcff and a top hairline on EVERY row; col-2 #fff with odd rows
       #f9fcff and the hairline on row 1 only. Hairline rgba(6,0,28,.12).
     - Certifications (b7f8d3a): band #e6ebf5 padding 65; h2 47px/600/65px
       #000 centred (644 wide); lead 16px/400/26px #5e5e5e centred (600);
       SIX WHITE tiles 429x179 at x65 / x506 / x946 (gap 12), tile padding
       24px 12px; tile h3 24px/600/36px #020101, p 14px/400/22px #5e5e5e.
     - Bookcal (62d08e2): h2 30px/400/39px #14142b CENTRED.
     - Endorsed band (efa2c74): h2 30px/300/42px #fff, lead 16px/300/26.4px
       #f2f7ff — the dark rgb(20,20,20) shell is the shared sheet's and is
       deliberately NOT re-specified.
     - NIST (3320fe0): white band; h2 40px/600/56px rgb(20,20,20) centred
       over the full box; lead 16px/26.4px #5e5e5e centred (1152 wide). Row
       of FIVE white radius-10 panels 320 tall, gap 20: the OPEN one 800 wide
       at x40, the four collapsed 120 wide at x860 / x1000 / x1140 / x1280.
       Label column 170 wide, padding 20px 50px; icon 70x70 circle #ebebeb
       with a 36x36 glyph rgb(37,2,255); letter 90px/400 (the collapsed-state
       marker). Body 530 wide at x260, vertically centred: h3
       24px/600/31.2px rgb(20,20,20), p 16px/400/26.4px.
     - Process (077adf2): TWO COLUMNS — copy 720 at x0 and accordion 720 at
       x720 share a top and 720 > 0 + 200, so sideBySide is TRUE. h2
       30px/400/39px. Accordion items 660x77, 7px apart, ALL FIVE CLOSED on
       load (413 = 5x77 + 4x7); header #262338 with 16px/400/26.4px #fcfcfc,
       padding 25, radius 5.
     - Stats (0a92459): #262338, padding 80px 30px; copy column 443 at x30 |
       counters 887 at x523 laid out TWO PER ROW (cells 399 at x523 / x942,
       the third wrapping to x523) — this page's stats grid is 2-COL with 3
       stats, NOT the shared 3-col default. Eyebrow 16.73px/600/25.2px
       #fcfcfc; heading 34px/400/44.2px #fcfcfc; number 57px/600 #76aaff;
       label 15.63px/400/24px #fcfcfc.
     - Advantages (f32c08a): #eff0f7; copy 665 at x30 | 2x2 card grid 665 at
       x745 (cells 322.5, gap 20) — same top, so sideBySide TRUE. Cards
       TRANSPARENT with 20px padding; 50px icon; title 19px/700/28px
       rgb(20,20,20); copy 15px/400/22.5px rgba(20,20,20,.7). h2
       34.7px/400/43px.
     - Testimonials (69fd3c7): h2 38px/300/49.4px LEFT; slide card 1380x400,
       radius 5, padding 80.
     - Stories (4efee80): 3 cards 410 wide at x25 / x515 / x1005; card title
       18px/700/25.2px.
     - Overview (cbab533): h2 34px/400/44.2px, copy 15.5px/400/24px, 665
       copy column | 665 figure.
     - Articles (54fce8f): h2 30px/300/39px; 3 cards 477 wide; date
       16px/400 #000; title 24px/600/28.8px.
     - FAQ (19a44fa): h2 34px/400/44.2px LEFT; TWO real columns 662 at x30 /
       x722. Rows are DARK — #262338 with 16px/400/26.4px #fcfcfc, padding
       25, radius 5 — NOT the shared light FAQ row. 11 items, live's two
       widgets split 6 / 5, so the forced column break sits on nth-child(6).
     - Final CTA (01493ef): no band fill; h2 33.05px/600/42.965px; figure
       500x576 at x910.
     - Contact (151487f): photo-backed (post-8978.css names the file),
       padding 50px 0; h2 33.89px/300/43px #fcfcfc CENTRED; white form card
       966 wide at x237, radius 8, padding 30.
     - Pre-footer (412acac): #000, 80px vertical padding; title 28px/400 #fff.

   Owner-approved deviations from live, tagged inline: hero headline 42px not
   live's 54, stat number left-aligned, marquee chips bounded on both axes,
   certification badges at natural aspect, the 1400px container. Deliberate;
   do not "fix" them back.

   Split rule: a given CSS property for a given selector lives in exactly one
   of the two sheets, never both.
   ============================================================ */

/* ------------------------------------------------------------
   BRAND TOKENS taken from live's Elementor globals
   ------------------------------------------------------------ */
.zmit {
    --zab-ink: #14142b;               /* live body/heading ink */
    --zab-accent: #0161ff;            /* live global accent */
    --zab-body: rgba(20, 20, 20, .7); /* live global text */
    --zab-line: rgba(6, 0, 28, .12);  /* compare-table hairline */
    --zab-fill: #eff0f7;              /* card fill */
    --zab-dark: #262338;              /* stats + accordion header */
}

/* ============================================================
   S01 HERO — approved Family A geometry; only the artwork is this page's.
   Live paints the banner as a plain img with object-fit:fill (stretched, not
   cropped) — center/100% 100% is the background equivalent.
   ============================================================ */
.zmit-hero::before {
    background: url('https://dahqbtk1vlskk.cloudfront.net/wp-content/uploads/2025/06/12080914/Main-Banner-Cyber-Security.webp') center/100% 100% no-repeat;
    background-color: #05070f;
}
.zmit-hero-left { padding-bottom: 56px; }

@media (min-width: 1081px) {
    .zmit .zmit-hero-crumb { padding-top: 17px; margin-bottom: 18px; }
    /* 766 / 100 / 508 of live's 1400 box, as percentages. */
    .zmit .zmit-hero-grid {
        /* helpdesk's split, ported so the card width matches (499 not 486). */
        grid-template-columns: 55.46% 37.22%;
        gap: 7.33%; align-items: stretch; padding: 28px 0 0;
    }
    .zmit .zmit-hero-left { padding-bottom: 50px; align-self: start; }
    .zmit-hero .zmit-hero-pill { margin-bottom: 20px; }
    /* Owner request 2026-08-26: hero headline + sub reduced below live's
       54px/16px (live here measures 54px/600/64.8px). Deliberate deviation,
       applied on request across this page family. */
    .zmit-hero .zmit-hero-headline { margin-bottom: 20px; font-size: 42px; line-height: 1.18; }
    .zmit-hero .zmit-hero-sub { max-width: 766px; color: #fff; margin-bottom: 20px; font-size: 15px; line-height: 1.6; }
    .zmit-hero .zmit-hero-cta { margin-bottom: 0; }
    .zmit-hero .zmit-hero-cta-btn {
        font-size: 12px; line-height: 12px; font-weight: 500;
        padding: 12px 24px; gap: 20px;
        background: #f2f7ff; border: 0; min-height: 36px;
    }
    .zmit-hero .zmit-hero-cta-btn .zmit-hero-cta-ico { line-height: 12px; }
    .zmit-hero .zmit-hero-cta-btn .zmit-hero-cta-ico svg { width: 16px; height: 12px; }
    .zmit-hero .zmit-hero-cta-btn:hover { background: #e2ecff; }
    /* Live's white hero CARD, found by its own styling and never by walking
       up from the form: the card is stretched to the hero row and overhangs
       the banner into the logo strip (live's own composition). */
    /* OWNER DEVIATION 2026-09-22: `start`, not `stretch`. With stretch the
       column takes the taller copy column's height and the card below it
       (height:100%) inherits it, leaving dead white under the form. Live
       itself carries 56-110px of that slack; the owner asked for it gone,
       so this is deliberately tighter than live. */
    .zmit .zmit-hero-right { align-self: start; margin: -44px 0 -95.55px; }
    .zmit-form-card {
        margin: 0; height: auto; transform: none;
        padding: 20px 25px 20px 20px;
    }
    .zmit-form-card h3 { margin-bottom: 12px; font-size: 20px; line-height: 1.35; }
    /* Scoped to the wrapper: a bare .zmit-hsform rule also hits the contact
       band and the FOOTER newsletter (CLAUDE.md §9). */
    /* Three classes on purpose: the shared sheet's 3-class 423px reserve beats
       a 2-class rule here, and this page's form renders 390 at 1081+, so the
       423 showed as 33px of white inside the card. 390 keeps the CLS reserve
       without exceeding the form (CLAUDE.md 9). */
    .zmit .zmit-form-card .zmit-hsform { min-height: 390px; }
    /* Live's hero form renders 548 tall in a 699 card (56px of slack). The
       compaction that used to sit here (row 8px, input 8px 12px, textarea
       56px, button 10px) squeezed ours to 471 and left 141px of dead white
       inside a correctly sized card. These values measure 555 / 68 - live's
       own rhythm. Do not re-compact without re-measuring the card. */
    .zmit-form-card .zmit-hsform .hsfc-Row { margin-bottom: 8px !important; }
    .zmit-form-card .zmit-hsform input,
    .zmit-form-card .zmit-hsform textarea,
    .zmit-form-card .zmit-hsform select,
    .zmit-form-card .zmit-hsform .hsfc-TextInput,
    .zmit-form-card .zmit-hsform .hsfc-TextareaInput { padding: 8px 12px !important; }
    .zmit-form-card .zmit-hsform .hsfc-TextareaInput,
    .zmit-form-card .zmit-hsform textarea { min-height: 56px !important; }
    .zmit-form-card .zmit-hsform .hsfc-Button,
    .zmit-form-card .zmit-hsform button[type="submit"] { padding: 10px !important; }
}

/* Scroll cue — bare 30px chevron, no disc, bobbing (reference-approved). */
.zmit-hero .zmit-hero-scroll {
    left: 50%; bottom: 18px;
    width: 30px; height: 30px; border: 0; border-radius: 0;
    background: none; -webkit-backdrop-filter: none; backdrop-filter: none;
    color: rgba(255, 255, 255, .66);
    animation: zab-float 3s ease-in-out infinite;
}
@keyframes zab-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(5px); } }
@media (prefers-reduced-motion: reduce) {
    .zmit-hero .zmit-hero-scroll { animation: none; transform: none; }
}
.zmit-hero .zmit-hero-scroll svg { width: 30px; height: 30px; }
.zmit-hero .zmit-hero-scroll:hover { background: none; color: #fff; }

/* Trust strip. Owner request 2026-08-26: every marquee logo bounded on BOTH
   axes, so the chip height and the max- pair move together and `height` is
   never set on the image itself. */
.zmit .zmit-trust-band { padding: 15px 0 40px; }
.zmit .zmit-trust { width: min(792px, 100%); max-width: 792px; margin: 0; }
.zmit .zmit-trust-chip { display: flex; align-items: center; justify-content: center; height: 70px; width: 180px; }
.zmit .zmit-trust-chip img { height: auto; width: auto; max-height: 62px; max-width: 168px; object-fit: contain; }

/* ============================================================
   SHARED PAGE BUTTON — label first, then arrow (live's own order).
   ============================================================ */
.zmit .zab-btn {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: 15.38px; font-weight: 600; line-height: 16px;
    color: #fcfcfc; background: var(--zab-accent);
    border-radius: 5px; padding: 15px 30px; text-decoration: none;
    transition: background .2s ease;
}
.zmit .zab-btn:hover { background: #141414; color: #fcfcfc; }
.zmit .zab-btn-ico { display: inline-flex; align-items: center; order: 2; }
.zmit .zab-btn-ico svg { display: block; width: 16px; height: 10px; }
.zmit .zab-btn-ico svg path { fill: currentColor; }
/* stats CTA: accent label on a pale pill */
.zmit .zab-btn-light {
    background: #f2f7ff; color: var(--zab-accent);
    font-size: 16px; line-height: 16px; font-weight: 500;
    padding: 13px 35px; border-radius: 8px; gap: 20px;
}
.zmit .zab-btn-light:hover { background: #e2ecff; color: var(--zab-accent); }
.zmit .zab-btn-accent { background: var(--zab-accent); color: #f2f7ff; border-radius: 8px; padding: 15px 30px; font-size: 16px; }
.zmit .zab-btn-final { background: var(--zab-accent); color: #f2f7ff; border-radius: 8px; padding: 15px 30px; font-size: 16px; }
.zmit .zab-btn-final:hover { background: #141414; color: #fcfcfc; }

/* ============================================================
   S02 SERVICES — 10 cards, FOUR columns / 30px gap (measured).
   ============================================================ */
.zmit .zmit-services.z-section { padding: 0 0 80px; }
.zmit-services-head { margin-bottom: 14px; }
.zmit .zmit-services-head h2.z-eyebrow { font-size: 16.31px; font-weight: 700; line-height: 25.2px; color: var(--zab-ink); text-transform: none; letter-spacing: 0; margin: 0 0 10px; display: inline-block; }
.zmit .zab-svc-lead { font-size: 34.7px; font-weight: 400; line-height: 43px; color: var(--zab-ink); margin: 0; letter-spacing: normal; }
.zmit-services-grid { grid-template-columns: repeat(4, 1fr); gap: 30px; }
.zmit-services-grid .zmit-svc-card {
    /* position:relative because live's CTA row is ABSOLUTE inside the card
       (left 30 / right -30 / bottom 12) — see the hover block below. */
    position: relative;
    display: flex;
    flex-direction: column;
    background: var(--zab-fill);
    border: 1px solid #eff0f7;
    border-radius: 10px;
    padding: 30px 30px 56px;
    text-decoration: none;
    transition: border-color .3s ease, background-color .3s ease, transform .3s ease;
}
.zmit-services-grid .zmit-svc-card h3,
.zmit-services-grid .zmit-svc-card h4 { font-size: 18px; font-weight: 700; line-height: 23.4px; color: var(--zab-ink); margin: 0 0 20px; transition: color .2s ease; }
/* h4 (SEO outline): the shared sheet pads .zmit-svc-card h4 20px 18px 0 - keep the h3 box */
.zmit-services-grid .zmit-svc-card h4 { padding: 0; }
/* NO list-style and NO left padding: the shared sheet draws the bullet itself
   (li::before over li with padding-left 18px) — adding a native disc gives
   TWO dots per bullet. */
.zmit-services-grid .zmit-svc-card ul { margin: 0; padding: 0; list-style: none; }
.zmit-services-grid .zmit-svc-card li { font-size: 14px; font-weight: 400; line-height: 23.1px; color: var(--zab-ink); margin-bottom: 0; }
.zmit-svc-card.no-image .zmit-svc-media { display: none; }

/* HOVER — MEASURED with a real pointer on THIS page's live widget
   (uc_service_grid_card_elementor_ff70067), transitions zeroed,
   el.matches(':hover') asserted TRUE, and a resting sibling read in the same
   pass as a control:
        border    #eff0f7 -> #0161ff
        fill      #eff0f7 -> #d5e0f3
        CTA       display none -> block, 34px tall
        transform none -> matrix(1,0,0,1,-10,-10)
        radius    10px / box-shadow none — unchanged
   THIS PAGE LIFTS. Never carry a hover across templates without re-measuring
   the page being built.
   :focus-within beside every :hover — the overlay anchor is the only tab
   stop, so keyboard users must also see the CTA appear. */
.zmit-services-grid .zmit-svc-card.has-link:hover,
.zmit-services-grid .zmit-svc-card.has-link:focus-within,
.zmit-services-grid .zmit-svc-card:has(.z-explore):hover,
.zmit-services-grid .zmit-svc-card:has(.z-explore):focus-within {
    border-color: #0161ff;
    background: #d5e0f3;
    transform: translate(-10px, -10px);
}
@media (prefers-reduced-motion: reduce) {
    .zmit-services-grid .zmit-svc-card.has-link:hover,
    .zmit-services-grid .zmit-svc-card.has-link:focus-within,
    .zmit-services-grid .zmit-svc-card:has(.z-explore):hover,
    .zmit-services-grid .zmit-svc-card:has(.z-explore):focus-within { transform: none; }
}
/* This template's CTA row is live's ABSOLUTE variant: left 30 / right 30 /
   bottom 12, so the card height is content-driven and identical resting and
   hovered, and every card's CTA sits the same 12px off its own bottom edge
   whatever its bullets wrap to. `visibility` rather than `display` keeps the
   box measurable so the bottom-gap assertion is meaningful.
   This is NOT the root-city in-flow reserve (visibility:hidden +
   margin-top:auto + padding-top:10px on a constant-height card) — the two
   templates must not be cross-contaminated. */
.zmit-services-grid .zmit-svc-card .zmit-svc-cta {
    position: absolute; left: 30px; right: 30px; bottom: 12px;
    display: flex; align-items: center; height: 34px;
    visibility: hidden; margin-top: 0; padding-top: 0;
}
.zmit-services-grid .zmit-svc-card.has-link:hover .zmit-svc-cta,
.zmit-services-grid .zmit-svc-card.has-link:focus-within .zmit-svc-cta,
.zmit-services-grid .zmit-svc-card:has(.z-explore):hover .zmit-svc-cta,
.zmit-services-grid .zmit-svc-card:has(.z-explore):focus-within .zmit-svc-cta { visibility: visible; }
.zmit-svc-cta .z-svc-more {
    display: inline-flex; align-items: center; gap: 14px;
    font-size: 14px; font-weight: 700; line-height: 23.1px; color: #000;
    text-decoration: none;
}
.zmit-svc-cta .z-svc-more:hover,
.zmit-svc-cta .z-svc-more:focus { color: #000; text-decoration: none; }
.zmit-svc-cta .ico { display: inline-flex; align-items: center; }
.zmit-svc-cta svg { display: block; width: 14px; height: 8px; }

/* ============================================================
   S03 COMPARISON HEADING (dce398f) — heading-only band.
   ============================================================ */
.zmit .zab-cmp-head.z-section { background: #fff; padding: 50px 0 15px; }
.zmit .zab-cmp-head h2 { font-size: 36.8px; line-height: 36.8px; font-weight: 400; text-align: left; color: #141414; margin: 0; }

/* ============================================================
   S04b COMPARISON TABLE (fb82707) — DESKTOP ONLY. Live's own accordion in
   the same band measures display:none at 1440.
   ============================================================ */
.zmit .zab-cmp.z-section { background: #fff; padding: 0; }
.zab-cmp-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 15px; }
.zab-cmp-col { display: flex; flex-direction: column; border-radius: 10px; overflow: hidden; }
.zmit .zab-cmp-col-head {
    background: #fff; padding: 20px 30px; margin: 0; height: 72px;
    display: flex; align-items: center;
    font-size: 24px; font-weight: 600; line-height: 32px; color: #141414;
}
.zmit .zab-cmp-cell {
    margin: 0; padding: 20px 30px; height: 100px;
    display: flex; align-items: center;
    font-size: 16px; font-weight: 500; line-height: 23px; color: #06001c;
    border: 1px solid var(--zab-line); border-top-width: 0;
}
.zab-cmp-cell a { color: var(--zab-accent); }
/* ONE flex item per cell: an inline link plus a bare text node would become
   two items and wrap independently, scrambling the sentence. */
.zmit .zab-cmp-cell > span { display: block; width: 100%; }
.zab-cmp-col .zab-cmp-cell:first-of-type { border-top-width: 1px; }
/* Key Factor column: live's 3-layer gradient (a 70% white veil over two blue
   gradients), read off the column's own backgroundImage. Cells transparent
   so it shows through. NEVER flatten it. */
.zab-cmp-col-0 {
    background:
        linear-gradient(0deg, rgba(255, 255, 255, .7), rgba(255, 255, 255, .7)),
        linear-gradient(102.79deg, #ecf1eb -4.21%, #aec8fd 44.41%, #84c3fc 93.03%),
        linear-gradient(102.29deg, #ecf1eb 8.75%, #aec8fd 45.11%, #84c3fc 81.46%);
}
.zab-cmp-col-0 .zab-cmp-cell { background: transparent; }
.zab-cmp-col-1 .zab-cmp-cell { background: var(--zab-fill); }
.zab-cmp-col-2 .zab-cmp-cell { background: #fff; }
/* Live's stripes, read cell by cell at 1440 on this page:
   Zazz col   rows 1-5 = #eff0f7 / #f9fcff / #eff0f7 / #f9fcff / #eff0f7
   Others col rows 1-5 = #f9fcff / #fff / #f9fcff / #fff / #f9fcff
   Written nth-of-type, never an enumerated list — an enumerated list silently
   drops off the bottom rows of a longer table. */
.zab-cmp-col-1 .zab-cmp-cell:nth-of-type(even) { background: #f9fcff; }
.zab-cmp-col-2 .zab-cmp-cell:nth-of-type(odd) { background: #f9fcff; }
/* Zazz-column hairline on EVERY row — row-count-independent house rule. */
.zab-cmp-col-1 .zab-cmp-cell { border-top-width: 1px; }
.zab-cmp-acc { display: none; }

/* ============================================================
   S04a COMPARISON ACCORDION — MOBILE/TABLET ONLY, the only rendering of this
   band below 1081. Native details, as live.
   ============================================================ */
@media (max-width: 1080px) {
    .zab-cmp { display: none; }
    .zab-cmp-acc { display: block; }
}
.zmit .zab-cmp-acc.z-section { background: #fff; padding: 0 0 30px; }
.zab-acc-item { background: var(--zab-fill); border-radius: 10px; margin-bottom: 10px; overflow: hidden; }
.zab-acc-q {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 18px 22px; cursor: pointer; list-style: none;
    font-size: 18px; font-weight: 600; line-height: 1.4; color: var(--zab-ink);
}
.zab-acc-q::-webkit-details-marker { display: none; }
.zab-acc-sign { position: relative; flex: 0 0 16px; height: 16px; }
.zab-acc-sign::before,
.zab-acc-sign::after { content: ''; position: absolute; background: var(--zab-ink); }
.zab-acc-sign::before { left: 0; top: 7px; width: 16px; height: 2px; }
.zab-acc-sign::after { left: 7px; top: 0; width: 2px; height: 16px; transition: opacity .2s ease; }
.zab-acc-item[open] .zab-acc-sign::after { opacity: 0; }
.zab-acc-a { padding: 0 22px 20px; }
.zab-acc-row { display: flex; align-items: flex-start; gap: 12px; padding-top: 14px; }
.zmit .zab-acc-row h3,
.zmit .zab-acc-row .zab-acc-row-t { font-size: 16px; font-weight: 700; line-height: 1.3; color: var(--zab-ink); margin: 0 0 6px; }
/* .zab-acc-row-t: was an h3 (SEO outline: not a heading) - keep the .zmit h3 tracking */
.zmit .zab-acc-row .zab-acc-row-t { letter-spacing: -.01em; }
.zmit .zab-acc-row p { font-size: 14px; font-weight: 400; line-height: 1.55; color: var(--zab-body); margin: 0; }

/* ============================================================
   S05 CERTIFICATIONS (b7f8d3a) — light #e6ebf5 band, SIX white tiles 3-up.
   Badge sizing: NATURAL aspect at the file's REAL intrinsic 134x134 (verified
   by fetching the asset). Live squashes them to 131x87 with object-fit:fill;
   CLAUDE.md's badge rule (natural aspect, gap'd grid) outranks copying that
   distortion. NEVER gap:0 plus a forced aspect-ratio.
   ============================================================ */
.zmit .zab-certified.z-section { background: #e6ebf5; padding: 65px 0; }
.zmit .zab-certified h2 { font-size: 47px; font-weight: 600; line-height: 65px; color: #000; text-align: center; max-width: 700px; margin: 0 auto; }
.zmit .zab-certified > .z-container > p { font-size: 16px; font-weight: 400; line-height: 26px; color: #5e5e5e; text-align: center; max-width: 600px; margin: 5px auto 0; }
.zab-certified-badges { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 25px; align-items: stretch; }
.zab-cert-box { display: flex; align-items: center; gap: 20px; background: #fff; padding: 24px 12px; min-height: 179px; }
.zab-cert-box img { width: 131px; height: auto; flex: 0 0 131px; object-fit: contain; display: block; }
.zmit .zab-cert-box h3 { font-size: 24px; font-weight: 600; line-height: 36px; color: #020101; margin: 0 0 5px; }
.zmit .zab-cert-box p { font-size: 14px; font-weight: 400; line-height: 22px; color: #5e5e5e; margin: 0; }

/* ============================================================
   S06 BOOK A FREE CONSULTATION (62d08e2)
   ============================================================ */
.zmit .zmit-bookcal.z-section { padding: 0; }
.zmit .zmit-bookcal h2 { font-size: 30px; font-weight: 400; line-height: 39px; color: var(--zab-ink); }
.zmit .zmit-bookcal-embed { margin-top: 20px; }

/* ============================================================
   S07 ENDORSED BY LEADING PLATFORMS (efa2c74) — the dark rgb(20,20,20)
   shell, radius 10 and 40px padding are ALREADY CORRECT in the shared sheet
   and are deliberately NOT re-specified. Only type and the logo row here.
   ============================================================ */
/* DEFECT 1 (2026-09-22) — "a large empty area follows the band".
   120/180 is live's own padding, but it was copied WITHOUT live's own
   `margin: -145px 0` on the same container, which cancels most of it. Measured
   on the WordPress original at 1440, in view and settled (page 35645, reached
   at /Outsourced-Cybersecurity-Services - the capitalised slug misses the
   case-sensitive .php file so WordPress still serves it; ?page_id=35645 now
   301s to our own build):
     container efa2c74 .. 1440 x 652, padding 120px 0 180px, margin -145px 0
     panel 3a69e1b ...... 1380 x 352 at x30, #141414, radius 10, padding 40
     prev container ..... bottom 4376, so the panel top sits 26 ABOVE it and
                          the calendar's own visible bottom is 52 above
     next container ..... top 4737 = panel bottom + 35
   Net rendered rhythm is therefore ~52 clear above the panel and 35 below, NOT
   120/180. Our calendar embed has no trailing iframe slack, so reproducing
   live's -145 literally would drop the panel ON TOP of it; the measured NET
   gaps are restated here instead. Ours before: 120 above, 180 below (652-tall
   section) - the owner's empty area. */
.zmit .zmit-recognized.z-section { padding: 52px 0 35px; }
.zmit .zmit-recognized-copy h2 { font-size: 30px; font-weight: 300; line-height: 42px; color: #fff; }
.zmit .zmit-recognized-copy p { font-size: 16px; font-weight: 300; line-height: 26.4px; color: #f2f7ff; max-width: 877px; }
.zmit-recognized-logos { gap: 36px; }
.zmit-recognized-logos img { height: 50px; width: auto; }
.zmit-recognized-cta .z-btn { background: #fcfcfc; color: #141414; border-radius: 8px; padding: 20px 28px; font-weight: 600; }
.zmit-recognized-cta .z-btn:hover { background: #b3d0ff; color: #141414; }

/* ============================================================
   S08 NIST FRAMEWORK (3320fe0) — white band; row of FIVE white radius-10
   panels 320 tall, gap 20; the OPEN one 800 wide, the four collapsed 120.
   The 90px letter is the collapsed-state marker, which is why the open panel
   appears to have none (it goes white on the white card).
   ============================================================ */
.zmit .zab-nist.z-section { background: #fff; padding: 65px 0; }
.zmit .zab-nist h2 { font-size: 40px; font-weight: 600; line-height: 56px; color: #141414; text-align: center; margin: 0 0 30px; }
.zmit .zab-nist-lead { font-size: 16px; font-weight: 400; line-height: 26.4px; color: #5e5e5e; text-align: center; max-width: 1152px; margin: 0 auto 30px; }
.zab-nist-row { display: flex; flex-direction: column; gap: 20px; }
/* Panel chrome measured on live at 1440 (all five panels identical):
   border-width 0 and a soft box-shadow — NOT a hard border. Ours drew
   1px solid var(--zab-line) with no shadow, which read as a hard outline
   live does not have. */
.zab-nist-item {
    background: #fff; border: 0; border-radius: 10px;
    box-shadow: 0 0 14px 2px rgba(0, 31, 31, 0.08);
    overflow: hidden; transition: flex-basis .35s ease;
}
.zmit .zab-nist-tab {
    display: flex; align-items: center; gap: 20px;
    width: 100%; background: none; border: 0; padding: 20px; cursor: pointer;
}
.zab-nist-ico {
    display: inline-flex; align-items: center; justify-content: center;
    flex: 0 0 70px; width: 70px; height: 70px; border-radius: 50%;
    background: #ebebeb; color: rgb(37, 2, 255);
}
.zab-nist-ico svg { display: block; width: 36px; height: 36px; }
.zab-nist-letter { font-size: 90px; font-weight: 400; line-height: 90px; color: #c2c2c2; }
.zab-nist-item.is-open .zab-nist-letter { color: #fff; }
/* Screen-reader name on the control: the visible name lives in the body,
   which is hidden while collapsed, so the button would otherwise be unlabelled. */
.zab-nist-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.zab-nist-body { padding: 0 20px 24px; }
.zmit .zab-nist-body h3 { font-size: 24px; font-weight: 600; line-height: 31.2px; color: #141414; margin: 0 0 20px; }
.zmit .zab-nist-body p { font-size: 16px; font-weight: 400; line-height: 26.4px; color: #000; margin: 0; }
@media (min-width: 1081px) {
    /* 800 open / 120 collapsed of live's 1360 row, with the 20px gaps. */
    .zab-nist-row { flex-direction: row; align-items: stretch; height: 320px; }
    .zab-nist-item { flex: 0 0 120px; display: flex; flex-direction: column; }
    .zab-nist-item.is-open { flex: 1 1 auto; flex-direction: row; align-items: center; }
    .zmit .zab-nist-tab { width: auto; flex: 0 0 170px; flex-direction: column; justify-content: center; gap: 20px; padding: 20px 50px; }
    .zab-nist-body { display: none; }
    .zab-nist-item.is-open .zab-nist-body { display: block; flex: 1 1 auto; padding: 0 50px; }
}
@media (prefers-reduced-motion: reduce) {
    .zab-nist-item { transition: none; }
}

/* ============================================================
   S09 PROCESS (077adf2) — TWO COLUMNS, confirmed with the sideBySide test:
   copy 720 at x0 and accordion 720 at x720 share a top and 720 > 0 + 200.
   Accordion: native details, all five CLOSED on load (413 = 5x77 + 4x7).
   DARK ROW HEADER => LIGHT COPY.
   ============================================================ */
.zmit .zab-proc.z-section { background: #fff; padding: 50px 0 60px; }
.zab-proc-grid { display: grid; grid-template-columns: 1fr; gap: 30px; }
.zmit .zab-proc-copy h2 { font-size: 30px; font-weight: 400; line-height: 39px; color: #141414; margin: 0 0 20px; }
.zmit .zab-proc-copy p { font-size: 16px; font-weight: 400; line-height: 26.4px; color: var(--zab-ink); margin: 0 0 20px; }
.zmit .zab-proc-copy p:last-child { margin-bottom: 0; }
.zab-proc-copy a { color: var(--zab-accent); }
.zab-proc-acc { display: flex; flex-direction: column; gap: 7px; }
.zab-proc-item { background: var(--zab-dark); border-radius: 5px; overflow: hidden; }
.zab-proc-q {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 25px; cursor: pointer; list-style: none; min-height: 77px;
    font-size: 16px; font-weight: 400; line-height: 26.4px; color: #fcfcfc;
}
.zab-proc-q::-webkit-details-marker { display: none; }
.zab-proc-sign { position: relative; flex: 0 0 16px; height: 16px; }
.zab-proc-sign::before,
.zab-proc-sign::after { content: ''; position: absolute; background: #fcfcfc; }
.zab-proc-sign::before { left: 0; top: 7px; width: 16px; height: 2px; }
.zab-proc-sign::after { left: 7px; top: 0; width: 2px; height: 16px; transition: opacity .2s ease; }
.zab-proc-item[open] .zab-proc-sign::after { opacity: 0; }
.zab-proc-a { padding: 0 25px 25px; }
.zmit .zab-proc-a p { font-size: 16px; font-weight: 400; line-height: 26.4px; color: #f7f7fc; margin: 0; }
.zab-proc-a a { color: #a9c9ff; }
@media (min-width: 1081px) {
    /* 720 | 720 of live's 1440 row; live's own 60px inner gutter comes from
       the two 30px column paddings, so a 50px grid gap reproduces the same
       rhythm inside the narrower house container. */
    .zab-proc-grid { grid-template-columns: 1fr 1fr; gap: 50px; align-items: start; }
}

/* ============================================================
   S10 STATS (0a92459) — #262338. Copy column 443 at x30 | counters 887 at
   x523 laid out TWO PER ROW: cells 399 at x523 / x942 with the third
   wrapping back to x523. So this page is a 2-COLUMN stats grid with 3 stats,
   NOT the shared 3-col default (CLAUDE.md: match live's column count).
   DARK BAND => LIGHT COPY.
   ============================================================ */
.zmit-stats { background: var(--zab-dark); }
.zmit .zmit-stats.z-section { margin: 0; padding: 80px 0; }
.zmit-stats-copy { max-width: none; }
.zmit .zmit-stats-copy h2.zmit-stats-eyebrow { font-size: 16.73px; font-weight: 600; line-height: 25.2px; color: #fcfcfc; margin: 0 0 20px; display: block; letter-spacing: normal; text-transform: none; }
/* 50px, not 40 — live's copy column is 286 tall at 1440 (eyebrow 25, +20,
   h3 133, +50, CTA 58) and ours was 276. */
.zmit .zmit-stats-copy h3 { font-size: 34px; font-weight: 400; line-height: 44.2px; color: #fcfcfc; margin: 0 0 50px; }
/* Phones: "Our Footprint" at the WordPress page's mobile size (owner, 2026-09-30).
   Read off the owner's WP phone screenshot, calibrated against the eyebrow (same
   16.73px on both, same width share): the heading spans 0.385 of the viewport on
   WP vs 0.556 at our 34px, i.e. ~23.5px -> 24px, line-height kept at 1.3. Size
   only - margins untouched. Tablet/desktop keep 34px. */
@media (max-width: 767px) {
    .zmit .zmit-stats-copy h3 { font-size: 24px; line-height: 31.2px; }
}
/* Live's stats CTA packs its label CENTRED with the arrow pinned to the far
   right, not the whole lot flushed left. Measured on live at 1440: button
   443x58 filling its column, content wrapper 373 wide (= 443 - 2x35 padding)
   holding a 341-wide text block then a 16px arrow, 16px apart — so the label
   takes the remaining width and centres inside it.
   Everything else already matched live: background #f2f7ff, colour #0161ff,
   radius 8, padding 13px 35px, 16px/500/16px, height 58. */
.zmit .zmit-stats-copy .zab-btn { gap: 16px; }
.zmit .zmit-stats-copy .zab-btn > span:not(.zab-btn-ico) { flex: 1 1 auto; text-align: center; }
@media (min-width: 1081px) {
    .zmit-stats-layout { grid-template-columns: 443fr 887fr; gap: 50px; align-items: center; }
    /* TWO columns — live's own wrap (cells 399 at x523 / x942, third at x523). */
    /* THREE columns for THREE stats (CLAUDE.md §7 "Stats band: column count
       matches live" — 3-col for a 3-stat page).
       DELIBERATE DEVIATION FROM LIVE, do not "fix" back: live's own grid here
       is TWO per row (measured at 1440, in view and settled: cells 399 wide at
       x523 and x942, the third wrapping to x523 on a second row), which leaves
       the third stat orphaned beside an empty half-row. The owner reported
       that 2+1 as broken, so we render 3-up. The row gap also drops from 62 to
       live's 20 — with one row it no longer applies, and it was never live's
       number. The band stays copy-driven either way (copy column 286 vs a
       single 99px counter row), so this costs no height against live. */
    .zmit-stats-grid { grid-template-columns: repeat(3, 1fr); gap: 20px; align-items: start; }
}
.zmit-stat { display: flex; flex-direction: column; }
.zmit-stat p { font-size: 15.63px; font-weight: 400; line-height: 24px; color: #fcfcfc; margin: 0; }
.zmit-stat .big {
    /* Owner request 2026-08-31: the stat NUMBER is left-aligned so it shares
       a left edge with its label. Live centres the number inside the same
       column while the label is start-aligned. Deliberate deviation from
       live — do NOT "fix" this back to center. */
    order: -1; text-align: left;
    font-size: 57px; font-weight: 600; color: #76aaff; line-height: 57px; margin: 0 0 18px;
}

/* ============================================================
   S11 ADVANTAGES (f32c08a) — #eff0f7; copy 665 at x30 | 2x2 card grid 665 at
   x745 (cells 322.5, gap 20), same top => sideBySide TRUE. Cards are
   TRANSPARENT: the band is the fill.
   ============================================================ */
.zmit .zab-elevate.z-section { background: var(--zab-fill); padding: 50px 0 30px; }
.zab-elevate-grid { display: grid; grid-template-columns: 1fr; gap: 30px; }
.zmit .zab-elevate-copy h2 { font-size: 34.7px; font-weight: 400; line-height: 43px; color: var(--zab-ink); margin: 0 0 24px; }
.zmit .zab-elevate-copy p { font-size: 16px; font-weight: 400; line-height: 26.4px; color: var(--zab-ink); margin: 0 0 24px; }
.zmit .zab-elevate-copy p:last-child { margin-bottom: 0; }
.zab-elevate-copy a { color: var(--zab-accent); }
.zab-elevate-cards { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; align-content: start; }
.zab-elevate-card { padding: 20px; }
.zab-elevate-ico { display: block; margin-bottom: 15px; }
.zab-elevate-ico svg { display: block; width: 50px; height: 50px; }
.zmit .zab-elevate-card h3 { font-size: 19px; font-weight: 700; line-height: 28px; color: #141414; margin: 0 0 12px; }
.zmit .zab-elevate-card p { font-size: 15px; font-weight: 400; line-height: 22.5px; color: var(--zab-body); margin: 0; }
.zab-elevate-card a { color: var(--zab-accent); }
@media (min-width: 1081px) {
    .zab-elevate-grid { grid-template-columns: 1fr 1fr; gap: 50px; align-items: start; }
}

/* ============================================================
   S12 TESTIMONIALS (69fd3c7) — 10 slides; h2 38px/300/49.4px LEFT; the slide
   card has 80px padding and a 5px radius.

   CARD HEIGHT IS CONTENT-DRIVEN — no min-height. Owner defect 2026-09-21:
   "large empty area below the card's content". Live's card measures 1380x400
   at 1440, but that 400 is NOT authored: live's Swiper equalises all ten
   slides to the tallest (its slide 1 content is 240, so 240 + 80 + 80 = 400)
   and its other nine slides then carry 47-48px of dead gradient. Our slide
   content measures 163 on every one of the ten slides, so the inherited
   min-height:400 left 77px of visible slack. Dropping it (and the shared
   sheet's own min-height:268, and the quote's stray 18px bottom margin) gives a
   323px card with zero slack and, because
   all ten slides are the same height, no jump when the carousel advances.
   Do NOT reinstate a min-height here.
   ============================================================ */
.zmit .zmit-testi.z-section { padding: 80px 0; }
.zmit-testi h2 { font-size: 38px; font-weight: 300; line-height: 49.4px; color: var(--zab-ink); margin-bottom: 40px; }
.zmit-testi-card {
    background-color: transparent;
    background-image: linear-gradient(100deg, #eef6f1 0%, #dce9fb 34%, #93b8fb 68%, #2f7bff 100%);
    border-radius: 5px; padding: 80px; min-height: 0;
}
.zmit-testi-lead { font-size: 20px; line-height: 1.4; color: #1c1a33; margin-bottom: 18px; }

/* The card hugs the CURRENTLY SHOWN slide - it is NOT equalised to the tallest
   one. Owner's instruction 2026-09-21: "watch for a carousel sizing all slides
   to the tallest", which is exactly what live's Swiper does and what leaves
   47-48px of dead gradient on nine of live's ten slides. The shared sheet
   centres the single visible slide in a flex card; with min-height gone that
   leaves no slack at any width. Consequence: below 1081 the slides wrap to
   different heights, so the card resizes as the carousel advances. At 1440
   every slide measures the same height, so nothing moves there. */
.zmit-testi-card { align-items: flex-start; }
/* The quote paragraph inherits an 18px bottom margin from the sitewide p rule,
   which sat UNDER the 80px padding as an extra 18px of dead gradient. Zero it
   on whatever is last in the slide so the card reads 80 / content / 80. */
.zmit-testi-slide > :last-child { margin-bottom: 0; }

/* ============================================================
   S13 SUCCESS STORIES (4efee80) — card + 50px left-aligned brand logo
   (approved Family A rule). Card title 18px/700/25.2px.
   ============================================================ */
.zmit .zmit-stories.z-section { padding: 0; }
.zmit-stories h2 { font-size: 30px; font-weight: 300; line-height: 39px; color: #141414; margin-bottom: 30px; }
.zmit-story { background: #f5f6fb; border-radius: 10px; overflow: hidden; }
.zmit-story-img img { height: 250px; }
.zmit-story .body .zmit-story-logos { min-height: 50px; margin: 0 0 14px; display: flex; align-items: center; }
.zmit-story .body .zmit-story-logo {
    display: block; height: 50px; width: auto; max-width: 150px;
    object-fit: contain; object-position: left center;
}
.zmit-story .body { padding: 20px; }
.zmit-story h3 { font-size: 18px; font-weight: 700; line-height: 25.2px; }
.zmit-story p { font-size: 14px; line-height: 1.6; }
/* Success-story card hover: match live /cyber-security-services-wp (loop card
   52fb83d) -- background changes to #cde9ff with a -15px lift over .3s and no
   box-shadow. Overrides the shared .zmit-story:hover (a -2px lift + shadow, no
   colour change); scoped to this page, the only one that loads this sheet. The
   resting fill stays #f5f6fb (owner asked to match the hover colour, not the
   static fill; live's resting is #eff0f7). */
.zmit-story { transition: background-color .3s ease, transform .3s ease; }
.zmit-story:hover { background: #cde9ff; transform: translateY(-15px); box-shadow: none; }

/* ============================================================
   S14 OVERVIEW + FIGURE (cbab533) — copy 665 | 665 figure.
   ============================================================ */
.zmit .zab-empower.z-section { background: #fcfcfc; padding: 30px 0 80px; }
.zab-empower-grid { display: grid; grid-template-columns: 1fr; gap: 30px; }
.zmit .zab-empower-copy h2 { font-size: 34px; font-weight: 400; line-height: 44.2px; color: var(--zab-ink); margin: 0 0 24px; }
.zmit .zab-empower-copy p { font-size: 15.5px; font-weight: 400; line-height: 24px; color: var(--zab-ink); margin: 0 0 24px; }
.zab-empower-copy a { color: var(--zab-accent); }
.zmit .zab-empower-copy .zab-btn { margin-top: 14px; }
.zab-empower-media img { display: block; width: 100%; height: auto; aspect-ratio: 658 / 400; object-fit: cover; border-radius: 10px; }
@media (min-width: 1081px) {
    /* align-items START, not center: live pins the figure to its column top. */
    .zab-empower-grid { grid-template-columns: 1fr 1fr; gap: 50px; align-items: start; }
}
/* OWNER 2026-10-22 (WP reference): heading on its own at the top left; the figure
   starts below the heading line and its bottom lines up with the last paragraph;
   the button sits under the copy. The copy column's children join the grid
   (display: contents): h2 + the 3 paragraphs fill rows 1-4 of column 1, button
   row 5; the figure spans rows 1-4 of column 2, pinned to their bottom. The 40px
   margin under the last paragraph is repeated under the figure so both bottoms
   meet. Desktop (>=1081) only - tablet/phone stay stacked as before. */
@media (min-width: 1081px) {
    .zmit .zab-empower .zab-empower-grid { row-gap: 0; }
    .zmit .zab-empower .zab-empower-copy { display: contents; }
    .zmit .zab-empower .zab-empower-copy > * { grid-column: 1; }
    .zmit .zab-empower .zab-empower-copy > .zab-btn { justify-self: start; }
    .zmit .zab-empower .zab-empower-media { grid-column: 2; grid-row: 1 / span 4; align-self: end; margin-bottom: 40px; }
}

/* ============================================================
   S15 ARTICLES (54fce8f) — image + date + title, NO excerpt (owner ruling)
   and NO category (live ships none here). Date is live's own 16px/400 #000,
   not the accent 13px the reference family uses.
   ============================================================ */
.zmit .zmit-articles.z-section { background: #fff; padding: 30px 0 80px; }
.zmit-articles-head { margin-bottom: 29px; }
.zmit-articles-head h2 { font-size: 30px; font-weight: 300; line-height: 39px; color: #141414; }
.zmit-articles-more {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: 16px; font-weight: 500; color: var(--zab-accent);
    border-bottom: 1px solid var(--zab-accent); padding-bottom: 5px;
}
.zmit-articles-more:hover { color: #141414; border-color: #141414; }
.zab-chev svg { display: block; width: 14px; height: 14px; fill: currentColor; }
.zmit-articles-grid { gap: 30px; }
.zmit-article { border-radius: 10px; overflow: hidden; text-decoration: none; }
.zmit-article:hover h3 { color: var(--zab-accent); }
.zmit-article-img img { height: 270px; }
.zmit-article .body { padding: 24px 2px 32px; }
.zmit .zmit-article .date { font-size: 16px; font-weight: 400; line-height: 26.4px; color: #000; margin: 0 0 10px; }
.zmit .zmit-article h3 { font-size: 24px; font-weight: 600; line-height: 28.8px; color: #141414; margin: 0; }

/* Tablet: match the WordPress page on an iPad (owner screenshot, 2026-09-30;
   was 3-up). Read off the WP draft (19638) Elementor CSS: listing grid 2
   columns at <=1024 with a 20px gap (<=1200); card template 25421 = image
   270 cover, 10px gap, date 14px/500 #0161FF, title 24px/1.2 with 20px under
   it, text inset 10px. Title/image already match. House tablet range (681-1080);
   desktop and phones (<=680, 1 col) are untouched. */
@media (min-width: 681px) and (max-width: 1080px) {
    .zmit .zmit-articles .zmit-articles-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
    .zmit .zmit-articles .zmit-article .body { padding: 10px 10px 20px; }
    .zmit .zmit-articles .zmit-article .date { font-size: 14px; font-weight: 500; line-height: 21px; color: #0161ff; margin: 0 0 10px; }
}

/* ============================================================
   S16 FAQ (19a44fa) — 11 items in TWO columns split 6 / 5. Live's rows are
   DARK (#262338 with #fcfcfc copy, radius 5, padding 25) — not the shared
   light row. NEVER a two-value padding shorthand here (it would zero the
   shared 22px sides), so both values are always restated.
   ============================================================ */
/* DEFECT 3 (2026-09-22): this said `#fff`, with nothing explaining why. The
   original's FAQ band is rgb(239, 240, 247) = #eff0f7 (measured on
   .elementor-element-19a44fa at 1440, in view and settled) — which is also
   what the shared sheet already sets, so the override was pure loss. */
.zmit-faq { background: #eff0f7; }
.zmit .zmit-faq.z-section { padding: 80px 0; }
.zmit-faq h2 { font-size: 34px; font-weight: 400; line-height: 44.2px; color: var(--zab-ink); margin-bottom: 30px; }
.zmit-faq-item { background: var(--zab-dark); border-radius: 5px; overflow: hidden; margin-bottom: 7px; }
/* weight 600, not 400: the original's .e-n-accordion-item-title-text measures
   16px/600/26.4px #fcfcfc on a #262338 summary with padding 25px. */
.zmit .zmit-faq-q { padding: 25px 25px; font-size: 16px; font-weight: 600; line-height: 26.4px; color: #fcfcfc; }
/* The shared sheet draws the toggle as a TEXT glyph (`.sign::before { content:
   "+" }`), not as two bars, so `background` on that pseudo paints a filled
   rectangle BEHIND the glyph instead of recolouring it — that is the white
   chip the owner reported. Live's toggle is a bare 16x18 svg in #fcfcfc on a
   TRANSPARENT ground (measured on live's .e-n-accordion-item-title-icon:
   backgroundColor rgba(0,0,0,0), color rgb(252,252,252), no border, no
   radius), so the glyph only needs a colour. */
/* ...and the glyph is BLUE, not white. The icon SPAN's `color` is #fcfcfc,
   which is the value a naive read returns, but the FontAwesome plus/minus SVG
   inside it paints from its OWN `fill`: measured rgb(6, 100, 255) on both the
   open (e-fas-minus) and all 20 closed (e-fas-plus) items, 15.8 x 18, at x652
   inside a 25px-padded 662 summary — i.e. flush to the padding edge. Read the
   svg/path, never the wrapper span. */
.zmit .zmit-faq-q .sign { color: #0664ff; }
.zmit .zmit-faq-a-inner { padding: 0 25px 25px; }
.zmit .zmit-faq-a-inner p { color: #f7f7fc; font-size: 16px; line-height: 26.4px; }
.zmit-faq-a-inner a { color: #a9c9ff; }
.zmit-faq-item.open .zmit-faq-a-inner { padding: 0 25px 25px; }
.zmit-faq-list { column-gap: 30px; padding-right: 0; }
/* Live ships two explicit accordion widgets split 6 / 5 (ce363c2 and
   f92bc19); the forced break reproduces that split. Gated above the phone
   breakpoint: with column-count:1 a forced break would create a second
   column. */
@media (min-width: 681px) {
    .zmit-faq-item:nth-child(6) { break-after: column; }
}

/* ============================================================
   S17 CONSULTATION CTA + FIGURE (01493ef) — no band fill of its own; copy
   left with the accent CTA and a 500x576 figure right.
   The SHARED sheet absolutely positions this figure for the REFERENCE band
   (position:absolute; right:56px; bottom:0; height:320px). This page's band
   is a two-column row, so that MUST be reset here — otherwise the image
   leaves its cell, the cell collapses to 0 height, and it covers the copy.
   ============================================================ */
.zmit .zmit-final.z-section { margin: 0; padding: 0; background: #fff; }
.zmit-final-banner {
    background: none; border-radius: 0; padding: 0;
    display: flex; align-items: center; gap: 40px;
}
.zmit-final-copy { max-width: 665px; }
.zmit-final-copy h2 { font-size: 33.05px; font-weight: 600; line-height: 42.97px; color: var(--zab-ink); margin-bottom: 16px; }
.zmit-final-copy p { font-size: 16px; font-weight: 400; line-height: 26.4px; color: var(--zab-ink); max-width: 640px; margin: 0 0 26px; }
.zmit-final-media { align-self: end; }
.zmit-final-media img {
    position: static; right: auto; bottom: auto;
    display: block; width: 100%; max-width: 500px; height: auto;
    margin: 0 0 0 auto; object-fit: contain;
}

/* ============================================================
   S18 CONTACT (151487f) — photo-backed band (the file is named in live's own
   post-8978.css), 50px vertical padding; white form card 966 wide.
   ============================================================ */
.zmit-contact {
    background: url('https://dahqbtk1vlskk.cloudfront.net/wp-content/uploads/2025/05/18073038/0c4197f8712a54f098181b432285586af102e42d.webp') center/cover no-repeat;
    background-color: #1f4fd6;
}
.zmit .zmit-contact.z-section { padding: 50px 0; }
.zmit-contact .zmit-contact-head { max-width: 1380px; margin: 0 auto 30px; text-align: center; }
.zmit-contact-head h2 { font-size: 33.89px; font-weight: 300; line-height: 43px; color: #fcfcfc; }
.zmit-contact-head p { font-size: 16px; line-height: 26.4px; color: #e6eaf2; max-width: 1100px; margin: 0 auto; }
.zmit-contact-form { border-radius: 8px; padding: 30px; max-width: 966px; }
.zmit-contact-form h3 { font-size: 25px; font-weight: 400; color: #6e7191; margin-bottom: 20px; }

/* ============================================================
   S19 PRE-FOOTER BAND (412acac) — #000, 80px vertical padding.
   DARK BAND => LIGHT COPY.
   ============================================================ */
.zmit-insights-copy p.zmit-insights-title { font-weight: 400; border-left: 2px solid #fff; }
.zmit-insights-copy p:not(.zmit-insights-title) { font-weight: 400; color: #fff; }
.zmit-insights-btns a {
    background: #fff; color: #000; border: 1px solid #fff; border-radius: 5px;
    font-size: 16px; font-weight: 500; line-height: 24px; min-width: 0; justify-content: center;
}
.zmit-insights-btns a:last-child { background: transparent; color: #fff; }
.zmit-insights-btns a:hover { background: #b3d0ff; color: #000; border-color: #b3d0ff; }

@media (min-width: 1081px) {
    .zmit .zmit-insights.z-section { padding: 80px 0; }
    .zmit-insights-grid { grid-template-columns: 770px 280px; justify-content: space-between; gap: 0; align-items: start; }
    /* 247, not 225: live's logo cell is 247 wide, which leaves the heading
       wrapper exactly live's 503 (770 - 247 - 20 gap). */
    .zmit-insights-copy { grid-template-columns: 247px 1fr; column-gap: 20px; row-gap: 20px; align-items: center; }
    .zmit .zmit-insights-logo { height: 55px; width: 247px; object-fit: fill; object-position: left center; }
    .zmit-insights-copy p.zmit-insights-title {
        /* line-height 28, not 34 — live's <p> is 28px/400/28px and its two
           lines make the 56px row that sets the whole first row's height. */
        font-size: 28px; line-height: 28px;
        padding-left: 20px; margin-left: 0; max-width: none;
    }
    .zmit-insights-copy p:not(.zmit-insights-title) {
        /* Owner request 2026-08-26: no dead space under this band. */
        font-size: 20px; line-height: 28px; max-width: 770px; margin: 0;
    }
    .zmit-insights-btns { gap: 20px; }
    .zmit-insights-btns a { padding: 16px 30px; width: 280px; }
}

/* ============================================================
   TABLET (<= 1080)
   ============================================================ */
@media (max-width: 1080px) {
    .zmit-hero .zmit-hero-headline { font-size: 40.98px; line-height: 49.17px; }
    .zmit-services-grid { grid-template-columns: repeat(2, 1fr); gap: 20px; }
    /* The SHARED sheet never stacks .zmit-stats-layout, so without this the
       copy | counters row stays 2-col and the counter column overflows the
       viewport at 375. */
    .zmit-stats-layout { grid-template-columns: 1fr; gap: 32px; }
    .zmit-stats-grid { grid-template-columns: repeat(2, 1fr); gap: 32px 20px; }
    .zmit .zab-cmp-head h2 { font-size: 27px; line-height: 1.25; }
    .zmit .zab-certified h2 { font-size: 34px; line-height: 1.3; }
    .zab-certified-badges { grid-template-columns: repeat(2, 1fr); }
    .zmit .zab-nist h2 { font-size: 30px; line-height: 1.3; }
    .zmit .zab-proc-copy h2 { font-size: 25px; line-height: 1.3; }
    .zmit .zab-elevate-copy h2,
    .zmit .zab-empower-copy h2 { font-size: 27px; line-height: 1.3; }
    .zmit-testi-card { padding: 40px; }
    .zmit-final-banner { flex-direction: column; align-items: flex-start; padding: 0; }
    .zmit-final-media { align-self: center; }
    .zmit-final-media img { max-width: 400px; }
    /* Live's recognition band at 768: the inherited 36px gap wraps the logo
       row and inflates the band. Kill the column gap, give it a row-gap. */
    .zmit-recognized-logos { column-gap: 0; row-gap: 20px; flex-wrap: wrap; }
}

/* ============================================================
   PHONE (<= 680)
   ============================================================ */
@media (max-width: 680px) {
    .zmit-hero .zmit-hero-headline { font-size: 24px; line-height: 1.3; }
    .zmit-services-grid { grid-template-columns: 1fr; }
    .zmit .zmit-services-head h2.z-eyebrow { font-size: 14px; }
    .zmit .zab-svc-lead { font-size: 24px; line-height: 1.3; }
    .zmit .zab-cmp-head h2 { font-size: 22px; }
    .zmit .zab-certified.z-section { padding: 40px 0; }
    .zmit .zab-certified h2 { font-size: 26px; }
    .zab-certified-badges { grid-template-columns: 1fr; margin-top: 28px; }
    .zab-cert-box { min-height: 0; }
    .zmit .zab-nist h2 { font-size: 22px; line-height: 1.3; }
    .zab-nist-letter { font-size: 60px; line-height: 60px; }
    .zmit .zab-proc-copy h2 { font-size: 22px; }
    .zmit .zab-elevate-copy h2,
    .zmit .zab-empower-copy h2 { font-size: 22px; }
    .zab-elevate-cards { grid-template-columns: 1fr; gap: 20px; }
    .zab-elevate-card { padding: 16px 0; }
    .zmit-stats-grid { grid-template-columns: 1fr; }
    .zmit-testi h2 { font-size: 24px; line-height: 1.3; }
    .zmit-testi-card { padding: 24px; }
    .zmit-final-copy h2 { font-size: 26px; line-height: 1.3; }
    .zmit-final-media img { max-width: 300px; }
    /* Live's recognition CTA overflows its box at 375 unless the label wraps. */
    .zmit .zmit-recognized-cta .z-btn { white-space: normal; text-align: center; }
    /* At 375 BOTH bounds must be released on the review logos — max-height
       beats height, so leaving it set keeps the row too tall. */
    .zmit-recognized-logos img { height: auto; max-height: 40px; max-width: 100%; }
}

/* Recognized band internals, measured on live: the dark box is 352 tall
   with 40px padding, split 877 copy | 423 CTA of a 1300 content box, and
   the button is 423x72. The shared sheet's own 1280 container cap on this
   band is a documented exception and is left alone. */
/* `minmax(0, 1fr)`, not `1fr`: a bare `1fr` is `minmax(auto, 1fr)`, whose MIN
   is the CTA's min-content. That is the root cause of the "white box hanging
   half off the panel's right edge" report - the shared sheet pins this one
   button to `white-space: nowrap` (it-managed-services-zazz.css:447), nowrap
   makes its min-content the full one-line label, the track grows past its
   share and the grid overflows the panel. Releasing nowrap (below) fixes the
   symptom; capping the track's minimum at 0 means no future min-content - a
   nowrap, a long unbreakable word, an icon - can blow it out again. */
/* GATED to desktop (2026-09-22). These three were TOP-LEVEL, so the
   two-column panel survived the shared sheet's own <=680 stack
   (it-managed-services-zazz.css:835, same specificity, earlier in the
   cascade). At 430 that left a ~97px CTA track holding a 20px/30px-padded
   button, and the white box overlapped the paragraph and hung off the panel's
   right edge with the label spilling out — the owner's "CTA hanging roughly
   HALF OFF the dark panel's right edge". It never reproduced at 1440, which
   is why number-only desktop checks kept passing it.
   The original is a single COLUMN below 1081 (see the block further down). */
@media (min-width: 1081px) {
    .zmit-recognized-band { grid-template-columns: 67.5% minmax(0, 1fr); gap: 0; }
    .zmit-recognized-cta { align-self: center; }
    .zmit-recognized-cta .z-btn { display: block; width: 100%; text-align: center; }
}
/* The shared sheet pins this one button to `white-space: nowrap`
   (it-managed-services-zazz.css:447). Nowrap makes the button's min-content
   its full one-line label, which BLOWS OUT the `1fr` track: measured at 1440
   the button rendered 422 wide in a 371 track and hung 52px past the panel's
   padding box and 12px past the panel itself.
   Live's own button WRAPS. Measured on live at 1440: 423x72 at x947, inside a
   1300 content box (copy 877 + cta 423, no gap), padding 20px 30px, font
   16px/500, line-height 16px, radius 8, centred — i.e. a TWO-LINE label
   (20 + 2x16 + 20 = 72). Releasing nowrap gives the same two lines and the
   same 72px height in our narrower 371px track, fully inside the panel. */
.zmit .zmit-recognized-cta .z-btn {
    white-space: normal;
    padding: 20px 30px;
    font-size: 16px; font-weight: 500; line-height: 16px;
    /* live's arrow is its own icon span pinned to the button's right edge, not
       an inline glyph after the label: measured at 1440 the two label lines
       centre at ~x1142 while the arrow sits at ~x1332, i.e. 30 in from the
       button's 1370 right edge. The shared sheet appends ours as a `::after`
       on a `display: block` button, so it rendered glued to the last word
       ("Consultation->"). Taking it out of flow restores live's split. */
}
@media (min-width: 1081px) {
    .zmit .zmit-recognized-cta .z-btn { position: relative; }
    .zmit .zmit-recognized-cta .z-btn::after {
        position: absolute; right: 30px; top: 50%; transform: translateY(-50%);
    }
}

/* Recognized band BELOW 1081 — the original is a single COLUMN, measured with
   the band in view and settled:
     768: panel 708 x 473 at x30, padding 40, radius 10, flex column,
          space-between, gap 40; copy block 628 at x70; the CTA sits BELOW it,
          shrink-to-fit at 437 x 55 at x70, padding 20px 30px, radius 8,
          bg #fcfcfc, colour #141414, 14.59px/500, centred.
     430: panel 430 x 717 FULL BLEED at x0, padding 30px 20px, radius 0, same
          column/space-between/gap 40; CTA 390 x 43 at x20 — full content
          width — padding 15px, radius 8, 13px/500/13px, centred.
   The arrow stays INLINE here: live's content wrapper is 377 of the 437
   button at 768, i.e. label and icon share one centred row. */
@media (max-width: 1080px) {
    .zmit-recognized-band { grid-template-columns: minmax(0, 1fr); gap: 40px; }
    .zmit-recognized-cta { align-self: start; }
    .zmit .zmit-recognized-cta .z-btn {
        display: inline-block; width: auto; text-align: center; white-space: normal;
    }
}
@media (max-width: 680px) {
    .zmit-recognized-band { padding: 30px 20px; border-radius: 0; }
    .zmit .zmit-recognized-cta .z-btn {
        display: block; width: 100%;
        padding: 15px; font-size: 13px; line-height: 13px;
        /* full-width again here, so the arrow is pinned to the right edge as
           it is at 1440 — live's 430 button puts the label at x45 and the
           arrow at ~x375 of a 390 box. Offset is live's own 15px padding.
           Between 681 and 1080 the button is shrink-to-fit and live keeps
           label + icon in one centred row, so the arrow stays inline there. */
        position: relative;
    }
    .zmit .zmit-recognized-cta .z-btn::after {
        position: absolute; right: 15px; top: 50%; transform: translateY(-50%);
    }
}

/* Final CTA figure: live is 500x576. The media cell is a flex item with no
   basis, so without an explicit width the img resolves to 0 and the whole
   band collapses (measured 253 against live's 668). */
.zmit-final-media { flex: 0 0 500px; }
.zmit-final-media img { width: 500px; }

/* Testimonials: live's slide card spans the full 1380 container. Our nav
   buttons are in-flow siblings, which shrank the card to 1244 — float them
   over the card instead. */
.zmit-testi-carousel { position: relative; }
.zmit-testi-carousel .zmit-testi-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; }
.zmit-testi-carousel .zmit-testi-nav.prev { left: 10px; }
.zmit-testi-carousel .zmit-testi-nav.next { right: 10px; }

/* ============================================================
   HEIGHT-PARITY FIXES, each from a measured live number at 1440.
   Appended last so they win over the blocks above at equal specificity.
   ============================================================ */
/* Hero: live's band (hero + marquee in ONE jet component) is 758 tall, of
   which the banner is 633 and the logo strip 125. Ours split the same two
   sections but came out 556 + 125, so the banner column needs the extra 77.
   Written with the .zmit prefix so it outranks the desktop block above. */
@media (min-width: 1081px) {
    /* OWNER DEVIATION 2026-09-22: was 127 to reach live's banner height; the
       owner asked for a shorter banner. 34 puts it at ~490, reproducing the
       helpdesk hero's 96px card overhang onto the logo strip. FLOOR is 461 -
       below that the card bleeds past the strip into the next section. */
    .zmit .zmit-hero-left { padding-bottom: 34px; }
}

/* Recognized: live's dark box is 352 tall — 80px padding plus a 272 copy
   column whose three blocks sit 20px apart (h2 84, lead 78, logo row 70). */
.zmit-recognized-copy { display: flex; flex-direction: column; gap: 20px; }
.zmit .zmit-recognized-copy h2,
.zmit .zmit-recognized-copy p { margin: 0; }

/* Advantages: live's band is 615 — the copy column's paragraph rhythm is 20,
   not 24 (measured against the 2x2 card column's 535 height). */
.zmit .zab-elevate-copy p { margin: 0 0 20px; }

/* Final CTA: live's band is 668 around a 500x576 figure, i.e. 92px of
   vertical breathing room. */
.zmit .zmit-final.z-section { margin: 0; padding: 46px 0; }

/* Pre-footer: live's inner is 435 = 80px padding top and bottom plus a 275
   content row; the copy column stacks logo / title / copy 20px apart and the
   two 280x58 buttons also sit 20px apart. */
@media (min-width: 1081px) {
    /* This block used to re-declare `.zmit-insights-copy { display: flex;
       flex-direction: column; grid-template-columns: none }`, which UNDID the
       two-column grid set in the S19 block above (and the identical one in the
       shared sheet, where the logo is col 1 / row 1, the title col 2 / row 1
       and the paragraph `grid-column: 1 / -1`). Stacked, the column inherited
       `align-items: center`, so the logo floated centred ABOVE the heading and
       every block was centre-justified against a left-aligned band — the
       "logo sits large and oddly placed, right column unbalanced" report.
       Live's row is measured at 1440, in view and settled: left column 770 wide
       and 192 tall, row 1 = logo 247x55 (object-fit: fill) at x20 then, 20px
       later, the heading wrapper 503x56 at x287 carrying live's OWN
       `border-left: 2px solid #fff` + `padding-left: 20px`, with a 481-wide
       28px/400/28px white <p> inside; row 2 = the paragraph, full 770 width,
       20px/400/28px. The grid is left to the block above; only the widths that
       were wrong are restated here. The max-width caps this block used to
       carry (539 on the title, 640 on the paragraph) are deliberately gone —
       they were what centred and narrowed the text. */
    .zmit .zmit-insights-btns a { padding: 16px 50px; }
}

/* ---- second height-parity pass ---- */
/* Recognized: live's dark box is 352 tall (80 padding + a 272 copy column).
   Our container is the shared 1280-capped one, so the copy column is 150
   narrower and its heading wraps to fewer lines — the measured box height is
   restated here rather than left to fall out of the shorter text. */
.zmit-recognized-band { min-height: 352px; }
/* ---- third pass ---- */
/* Services card padding is live's own 30px all round: the CTA row is absolute
   and overlaps the bottom padding, so no extra bottom reserve is needed. */
.zmit-services-grid .zmit-svc-card { padding: 30px; }
/* ---- fourth pass: card bottom reserve (CORRECTION to the pass above) ---- */
/* Live gets away with a plain 30px bottom padding because its cards are 338
   wide, so the bullets wrap less and the absolute CTA row (bottom 12, 34 tall)
   never reaches the copy. Our cards are 313 wide — the house 1400 container
   against live's full-bleed 1440 — so at 30px the CTA OVERLAPPED the last
   bullet by 16px on most cards (measured: CTA top minus last-li bottom = -16).
   The reserve below is the fix; it costs ~26px per grid row against live and
   is the direct, documented consequence of the narrower house container.
   Assert on any change: every card's (CTA top - last li bottom) must be >= 0. */
.zmit-services-grid .zmit-svc-card { padding: 30px 30px 56px; }

/* ============================================================
   BELOW 1081 — the expander must stay an ACCORDION, not a stack.
   Without this the .zab-nist-body display:none only exists inside the
   desktop block, so every panel's copy shows at once and the band came out
   790px taller than live at 768. One open at a time, as live.
   ============================================================ */
@media (max-width: 1080px) {
    .zab-nist-item .zab-nist-body { display: none; }
    .zab-nist-item.is-open .zab-nist-body { display: block; }
    .zmit .zab-nist-tab { gap: 16px; }
    /* Final CTA figure: live's tablet figure is much smaller than the 500px
       desktop one; at 500 the stacked band ran 238px over live. */
    .zmit-final-media { flex: 0 0 auto; }
    .zmit-final-media img { width: auto; max-width: 320px; }
}

/* Phone: live keeps the final-CTA figure at the full column width (its band is
   1040 tall at 375) and does NOT shrink the heading. Capping the figure at
   300px and the h2 at 26px put us 571px under live, so both are released. */
@media (max-width: 680px) {
    .zmit-final-media { flex: 0 0 auto; width: 100%; }
    .zmit-final-media img { width: 100%; max-width: 100%; }
    .zmit-final-copy h2 { font-size: 30px; line-height: 1.3; }
}


/* ============================================================
   FINAL CTA — measured on live (outsourced-cybersecurity-services) at 1440, window.innerWidth
   asserted in the same evaluation. Three separate defects fixed here.

   Live's structure:
     wrapper ............ 668 tall, transparent
       band 1187a39 ..... 1440 x 438, transparent, margin 150 0 80,
                          padding 0 30
         row 2dee0b2 .... 1380 at x30, 438 tall, radius 5,
                          justify-content space-between, gap 20,
                          background linear-gradient(102.29deg,
                            #ecf1eb 8.75%, #aec8fd 45.11%, #84c3fc 81.46%)
           copy 718d6c9 . 690 wide, padding 50, jc center, gap 20,
                          content 248 (h2 86 / p 76 / cta 46)
           media 4f2c262  500 x 576, align-self flex-end,
                          margin-top -138px, overflow visible
     figure ............. 500x576, object-fit fill, position static,
                          margins 0. imgTopVsBandTop -138,
                          imgOverhangBelowBand 0 — it hangs UP, never down.
   Live HAS a figure on this page.

   1. THE BAND GREW TO CONTAIN THE FIGURE. 576 - 438 = 138, so the
      negative margin-top makes the media column's height CONTRIBUTION
      438 and the row stops tracking the figure. Ours was a 576-tall
      banner with the 253-tall copy centred in it — the tall empty
      area with the photo floating in it that the owner screenshotted.
      Section padding is restated as live's own 150 / 80 so the
      overhanging figure keeps 12px of clear space above it and the
      band's total footprint stays 668, unchanged.
      The img keeps its width/height aspect-ratio reserve (CloudFront is
      referer-blocked locally, so naturalWidth is 0); the reserve can no
      longer inflate the band because -138 is a constant.
   2. THE GRADIENT PANEL WAS FLATTENED TO WHITE. Seraphinite defers this
      background until the band scrolls into view, so a computed read
      taken after scrolling past reports backgroundImage "none" — which
      is how it came to be built as a bare white band. Scroll the band
      into view and wait ~2s before reading it. Live carries the same
      gradient at 430.
   3. THE FIGURE WAS NOT FLUSH RIGHT. Live's row is space-between with
      690 + 500 in 1380, so the figure sits on the panel's right edge;
      ours left 135px of gradient dead to its right.
   Content x-offsets run 20px inboard of live's throughout (our 1400
   house container against live's full-bleed 1440) — CLAUDE.md §7, kept.
   ============================================================ */
.zmit-final-banner {
    background: linear-gradient(102.29deg, #ecf1eb 8.75%, #aec8fd 45.11%, #84c3fc 81.46%);
    border-radius: 5px;
}
.zmit-final-copy { padding: 30px 20px; }   /* live's own mobile copy padding */

@media (min-width: 1081px) {
    .zmit .zmit-final.z-section { padding: 150px 0 80px; }
    .zmit-final-banner { justify-content: space-between; align-items: center; overflow: visible; }
    .zmit-final-copy { max-width: 690px; padding: 50px; }
    /* live's copy rhythm is a flat 20px gap, not our 16 / 26 */
    .zmit-final-copy h2,
    .zmit-final-copy p { margin-bottom: 20px; }
    .zmit-final-media { align-self: flex-end; margin-top: -138px; }
}

/* ============================================================
   EXPANDING CARDS — the rest of live's chrome, measured on live (outsourced-cybersecurity-services)
   at 1440 with the band SCROLLED INTO VIEW and a 2s settle. Seraphinite
   defers these backgrounds: read after scrolling past, the band reports
   backgroundImage "none" and the open panel's label column reports white,
   which is how all three came to be built flat. Same root cause as the
   final CTA's missing gradient.

   Live, identical on both this page and its sibling:
     band ................. background linear-gradient(
                              rgba(1,97,255,.08) 0%,
                              rgba(149,114,247,.08) 100%) over #fff
     panel ................ radius 10, border-width 0,
                            box-shadow 0 0 14px 2px rgba(0,31,31,.08)
     OPEN panel ........... jc space-between, ai center, padding 0;
       .ue_label .......... 170 x 320 (full panel height),
                            linear-gradient(#0161ff 0%, #9572f7 120%),
                            icon circle 70 at t+20 l+50,
                            90px letter WHITE at t+210 (so 30 clear below)
     collapsed panel ...... 120 wide, icon 70 at t+30 l+25,
                            90px letter #c2c2c2 at t+200
   The letter was believed to be "white on white" on the open panel — it is
   white because live's label column is that blue-to-purple gradient.
   Our row sits in the 1340 house container against live's 1360: correct,
   CLAUDE.md §7, and left alone.
   ============================================================ */
.zmit .zab-nist.z-section {
    background: linear-gradient(rgba(1, 97, 255, .08) 0%, rgba(149, 114, 247, .08) 100%), #fff;
    padding: 65px 0;
}

@media (min-width: 1081px) {
    /* collapsed: the control fills the 320 panel so the icon sits 30 from the
       top and the 90px letter ends 30 from the bottom — live is
       space-between, not centred. */
    .zmit .zab-nist-item .zab-nist-tab {
        flex: 1 1 auto; padding: 30px 25px; justify-content: space-between;
    }
    /* open: the 170-wide label column, full panel height. */
    .zmit .zab-nist-item.is-open .zab-nist-tab {
        flex: 0 0 170px; align-self: stretch; padding: 20px 50px;
    }
}

/* The open panel's label carries that gradient at EVERY width — at 430 it is a
   full-width 390x90 header strip (icon left, white 60px letter hard right), so
   the declaration is unconditional and only the desktop layout is gated above.
   Live's control is space-between in both orientations; ours was flex-start
   below 1081, which parked the letter next to the icon instead of at the far
   edge and left the open panel's white letter invisible on white. */
.zmit .zab-nist-item.is-open .zab-nist-tab {
    background: linear-gradient(#0161ff 0%, #9572f7 120%);
}
@media (max-width: 1080px) {
    .zmit .zab-nist-tab { justify-content: space-between; }
}

/* ============================================================
   DEFECT 4 (2026-09-22) — PRE-FOOTER BAND below 1081.
   At 1440 this band already matched; every reported symptom was a
   TABLET/PHONE bug, because the page sheet's whole pre-footer block is gated
   to `@media (min-width: 1081px)` and nothing replaced it underneath. The
   shared sheet's fallbacks are a different composition, so 681-1080 and
   <=680 inherited: `1fr auto` + gap 44 on the outer grid, `auto 1fr` +
   column-gap 0 on the copy grid, and no two-class logo rule.

   The logo was the loudest symptom. The shared base `.zmit-insights-logo`
   is a ONE-class rule and `.zmit img { height: auto }` is (0,1,1), so it
   outranks it — between 681 and 1080 the mark fell back to its intrinsic
   287x64 scaled to the track and rendered 269x60 where live renders 174x39
   ("the logo sits large and oddly placed"). Every rule below therefore uses
   two classes, as the shared sheet's own phone block already has to.

   Measured on the WordPress original (page 35645, via the capitalised slug)
   with the band in view and a 2.3s settle:

     |                | 1440            | 768             | 430             |
     | band           | 1440x352 #000   | 768x320         | 430x484         |
     | inner          | 1400 @x20,      | 728 @x20,       | 390 @x20,       |
     |                | padding 80px 0  | padding 80px 0  | padding 60px 0  |
     | layout         | row, space-     | row, space-     | row WRAPS: copy |
     |                | between, gap 20 | between, gap 20 | then btns below |
     | copy column    | 770 @x20, h192  | 400 @x20, h160  | 390 @x20, h208  |
     | logo img       | 247x55          | 174x39          | 230x51          |
     | heading cell   | 503 @x287,      | 206 @x214,      | 331 @x20,       |
     |                | pad-left 20     | pad-left 10     | pad-left 10     |
     |                | border-left 2px solid #fff at all three widths      |
     | button column  | 280 @x1140      | 218 @x530       | 390 @x20, below |
     | both buttons   | 280x58,         | 218x58,         | 390x58,         |
     |                | pad 16px 50px   | pad 16px 30px   | pad 16px 30px   |
     | stacked?       | YES             | YES             | YES             |
     | Contact Us     | bg #fff, #000, 1px solid #fff, radius 5, 16/500/24  |
     | Subscribe      | bg transparent, #fff, 1px solid #fff, radius 5      |

   So live's own treatment IS one solid-white button above one outlined
   transparent button, equal width, 20px apart, at the right — that part of
   the report is live's design and is deliberately kept. What was broken is
   the geometry: at 768 the button column collapsed to 154 (auto-sized to the
   buttons' own max-content) with 154x50 buttons, and at 430 the band was
   STILL a two-column grid — copy 161 wide beside 165-wide buttons — because
   the shared phone block single-columns `.zmit-insights-copy` but never
   `.zmit-insights-grid`.
   DARK BAND => LIGHT COPY throughout; no rule here touches `.zmit-hsform`.
   ============================================================ */
@media (max-width: 1080px) {
    .zmit .zmit-insights.z-section { padding: 80px 0; }
    /* minmax(0, ...) so the copy track can never be pushed out by its own
       min-content, and a FIXED 218 button column instead of `auto` — `auto`
       is what shrank it to the label width. */
    .zmit-insights-grid { grid-template-columns: minmax(0, 1fr) 218px; gap: 20px; align-items: start; }
    .zmit-insights-copy { grid-template-columns: 174px 1fr; column-gap: 20px; row-gap: 20px; align-items: center; }
    .zmit .zmit-insights-logo { height: 39px; width: 174px; object-fit: fill; object-position: left center; }
    .zmit-insights-copy p.zmit-insights-title { padding-left: 10px; margin-left: 0; max-width: none; }
    .zmit-insights-btns { flex-direction: column; gap: 20px; }
    .zmit .zmit-insights-btns a { flex: 0 0 auto; width: 218px; padding: 16px 30px; }
}

@media (max-width: 680px) {
    .zmit .zmit-insights.z-section { padding: 60px 0; }
    /* the missing half of the shared phone block: live's row wraps, so the
       button column drops BELOW the copy at full width. */
    .zmit-insights-grid { grid-template-columns: minmax(0, 1fr); gap: 20px; }
    /* and the copy grid single-columns too — the shared phone block already
       says this, but it loads BEFORE the page sheet at the same specificity,
       so the 174px logo track set in the 1080 block above survived it and
       left the heading in a 176px column beside the mark. */
    .zmit-insights-copy { grid-template-columns: minmax(0, 1fr); }
    .zmit .zmit-insights-logo { height: 51px; width: 230px; }
    .zmit-insights-copy p.zmit-insights-title { padding-left: 10px; }
    .zmit-insights-btns { flex-direction: column; gap: 20px; }
    .zmit .zmit-insights-btns a { flex: 0 0 auto; width: 100%; padding: 16px 30px; }
}

/* ======================================================================
   /cyber-security-services — PAGE-SPECIFIC LAYER. Everything below was
   measured on https://www.zazz.io/cyber-security-services at 1440
   (innerWidth 1440 asserted, bands scrolled into view and settled).
   ====================================================================== */

/* S03 WHY — NEW vs the reference. Two live bands: heading 1f31828 (83 =
   20 + h2 43 + 20) and grid 53f9dc2 (698 = 30 + 638 + 30). Grid is THREE
   columns, gap 20 (446.66 each of 1380), rows 309 apart+20; cards are bare
   (no fill, border or shadow) with 20px padding; icon 50x50, 15 to the
   title 20px/700/24px #141414, 12 to the copy 16px/400/24px #14142b.
   h2 34.7px/400/43px #14142b. */
.zmit .zmit-why.z-section { background: #fff; padding: 20px 0 30px; }
.zmit .zmit-why .z-container { display: block; }
.zmit .zmit-why-head { margin: 0 0 50px; }
.zmit .zmit-why-head h2 { font-size: 34.7px; font-weight: 400; line-height: 43px; color: #14142b; margin: 0; }
.zmit .zmit-why-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.zmit .zmit-why-card { padding: 20px; background: transparent; text-align: left; }
.zmit .zmit-why-ic { width: 50px; height: 50px; margin: 0 0 15px; }
.zmit .zmit-why-ic svg { width: 50px; height: 50px; display: block; }
.zmit .zmit-why-card h3 { font-size: 20px; font-weight: 700; line-height: 24px; color: #141414; margin: 0 0 12px; }
.zmit .zmit-why-card p { font-size: 16px; font-weight: 400; line-height: 24px; color: #14142b; margin: 0; }
.zmit .zmit-why-card p a { color: var(--zab-accent); }
/* Tablet: ONE column, like the WordPress page on an iPad (owner screenshot,
   2026-09-30; was 2-up). Measured off that screenshot (820px viewport,
   calibrated on the heading/title/copy widths - text sizes already match):
   heading -> first icon ~50, card -> next card ~30, cards unpadded. So: grid
   1 col, 30px row gap, card padding 0 (head keeps its 50px margin). Card text
   stays on the house container edge (WP runs it 10px wider - never widen).
   Phones (<=680) keep their own block below. */
@media (max-width: 1080px) {
    .zmit .zmit-why-grid { grid-template-columns: 1fr; gap: 30px 0; }
    .zmit .zmit-why-card { padding: 0; }
}
@media (max-width: 680px) {
    .zmit .zmit-why-head { margin-bottom: 20px; }
    .zmit .zmit-why-head h2 { font-size: 24px; line-height: 1.3; }
    .zmit .zmit-why-grid { grid-template-columns: 1fr; gap: 0; }
    .zmit .zmit-why-card { padding: 20px 0; }
}

/* S08 TECH STACK — NEW vs the reference; component + sheet from the MSSP
   preview (same nested-tabs + image-box widget). This page: band 656 =
   30 + h3 45 (34.7px/400/45.11px #141414) + 51 + tab box 500 + 30; NO lead
   paragraph. Rail 304 wide with a 50px top inset (450 visible, scrolls),
   tabs 284 wide 56/72 tall, 10 apart, radius 5, padding 20, 16px/16px;
   panel at +304 with 50px top/left inset; cards 505x82 #eff0f7 radius 8
   padding 15, two columns 15 apart, logo 52, title 18px/400/23.4px. */
.zmit .zab-stack.z-section { background: #fff; padding: 30px 0; }
.zmit .zab-stack-head h3,
.zmit .zab-stack-head h2 { font-size: 34.7px; font-weight: 400; line-height: 45px; color: #141414; margin: 0 0 51px; }
.zab-stack-tabs { display: grid; grid-template-columns: 1fr; gap: 20px; }
.zab-stack-rail { display: flex; flex-direction: column; gap: 10px; }
.zmit .zab-stack-tab {
    display: flex; align-items: center; text-align: left; flex: 0 0 auto;
    background: #fff; border: 0; border-radius: 5px;
    padding: 20px; min-height: 56px;
    font-size: 16px; font-weight: 400; line-height: 16px; color: #141414;
    cursor: pointer; transition: background .2s ease, color .2s ease;
}
.zmit .zab-stack-tab:hover { background: #eff0f7; }
.zmit .zab-stack-tab.is-active { background: var(--zab-accent); color: #fff; }
.zab-stack-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 15px; align-content: start; }
.zab-stack-card {
    display: flex; align-items: center; gap: 27px;
    background: var(--zab-fill); border-radius: 8px; padding: 15px; min-height: 82px;
}
.zab-stack-card img { flex: 0 0 52px; width: 52px; height: 52px; object-fit: contain; display: block; }
.zmit .zab-stack-card span { font-size: 18px; font-weight: 400; line-height: 23.4px; color: #141414; }
.zmit .zab-stack-card span a { color: inherit; }
@media (min-width: 1081px) {
    .zab-stack-tabs { grid-template-columns: 304px 1fr; gap: 0; height: 500px; align-items: stretch; }
    .zab-stack-rail { height: 500px; overflow-y: auto; padding: 50px 20px 0 0; }
    .zab-stack-panels { padding: 50px 0 0 50px; }
}
@media (max-width: 1080px) {
    .zab-stack-rail { flex-direction: row; overflow-x: auto; padding-bottom: 6px; }
    .zmit .zab-stack-tab { flex: 0 0 auto; white-space: nowrap; }
}
@media (max-width: 680px) {
    .zmit .zab-stack-head h3,
    .zmit .zab-stack-head h2 { font-size: 22px; line-height: 1.3; margin-bottom: 20px; }
    .zab-stack-grid { grid-template-columns: 1fr; }
}
/* PHONES (<=767, Elementor's mobile breakpoint) — match the WordPress page's
   nested-tabs mobile mode, measured at 375 on /cyber-security-services-wp:
   an ACCORDION. Every category is a full-width button stacked down the page and
   the open category's tools sit directly under ITS button (0 gap), the next
   button 10px below; tapping another button opens it and closes the rest
   (tapping the open one keeps it open) — the existing tab script already does
   exactly that, so this is CSS only. Order is done Elementor's way: the rail and
   panels wrappers become display:contents and each tab/panel is ordered by its
   index (--i, set inline in the markup): tab i = 2i, panel i = 2i+1. Tools: a
   2-col grid 10 apart; card #eff0f7 radius 8 padding 15, min-height 107; 26px
   icon centred at the TOP (15 in), centred 16px/400/20.8px name starting 62 in
   (21 below the icon). Container stays the house 315px (WP runs 335) - never
   widen. 768-1080 is untouched. */
@media (max-width: 767px) {
    .zab-stack-tabs { display: flex; flex-direction: column; gap: 10px; }
    .zab-stack-rail,
    .zab-stack-panels { display: contents; }
    .zmit .zab-stack-tab {
        order: calc(var(--i, 0) * 2);
        width: 100%; white-space: normal; text-align: left;
    }
    .zab-stack-panel { order: calc(var(--i, 0) * 2 + 1); margin-top: -10px; }
    .zab-stack-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .zab-stack-card {
        flex-direction: column; justify-content: flex-start; text-align: center;
        gap: 21px; padding: 15px; min-height: 107px;
    }
    .zab-stack-card img { flex: 0 0 26px; width: 26px; height: 26px; }
    .zmit .zab-stack-card span { font-size: 16px; line-height: 20.8px; }
}

/* S14 STORIES — this page's band carries its own h2: 672 = 30 + h2 39
   (30px/300/39px #141414) + 20 + grid 553 + 30. */
.zmit .zmit-stories.z-section { padding: 30px 0; }
.zmit .zmit-stories h2 { font-size: 30px; font-weight: 300; line-height: 39px; color: #141414; margin: 0 0 20px; }

/* S17 FAQ — 17 questions split 9 / 8: the LEFT column carries the extra one
   (owner rule 2026-10-22; was WP's 8 / 9). */
@media (min-width: 681px) {
    .zmit-faq-item:nth-child(6) { break-after: auto; }
    .zmit-faq-item:nth-child(9) { break-after: column; }
}

/* S01 HERO — OWNER DEVIATION (2026-09-28 rule, reference implementation =
   final @media block of css/enterprise-software-development-company.css,
   adapted to the Family A hero partial). Live: banner 672 (t100), H2
   54px/600/64.8px x5 lines, white card 514x728 at t140 overhanging the
   banner by 96.59 into the logo strip. Ours: headline 42px/52px, the card
   sizes to its content (not stretched), the banner is set by the copy
   column, the card KEEPS live's ~96.59px overhang (never shrink it) and
   there is >= 60px under the hero CTA. Do not "fix" back to live. */
@media (min-width: 1081px) {
    .zmit .zmit-hero { min-height: 0; }
    .zmit .zmit-hero .zmit-hero-headline { font-size: 42px; line-height: 52px; }
    .zmit .zmit-hero .zmit-hero-left { padding-bottom: 60px; align-self: start; }
    .zmit .zmit-hero .zmit-hero-right { align-self: start; margin: -44px 0 -96.59px; }
    .zmit .zmit-hero .zmit-form-card { height: auto; min-height: 0; justify-content: flex-start; }
    .zmit .zmit-hero .zmit-form-card > .zmit-hsform { flex: 0 0 auto; }
}

/* S02 SERVICES — this page's band c9c35d9 is 1410 = 10 + head 78 + 20 +
   grid 1272 (4 rows 290/290/313/290, 30 apart; cards 323 wide) + 30. Ours
   keeps the house 1340 box, so cards are 313 wide and a few bullets wrap. */
.zmit .zmit-services.z-section { padding: 10px 0 30px; }
.zmit .zmit-services-head { margin-bottom: 20px; }

/* S04 COMPARE TABLE — this page's fb82707 is 643 = 10 + 603 + 30; columns
   450 wide 15 apart; header block 103 (h3 24px/600 on a 63px line + 20/20),
   five 100px body rows, cell text 16px/500/28px. */
@media (min-width: 1081px) {
    .zmit .zab-cmp.z-section { padding: 10px 0 30px; }
    .zmit .zab-cmp-col-head { line-height: 63px; }
    .zmit .zab-cmp-cell { line-height: 28px; }
}

/* ---- per-band vertical rhythm, this page's live numbers at 1440 ---- */
@media (min-width: 1081px) {
    /* compare heading dce398f: 134 = 30 + h2 74 + 30 */
    .zmit .zab-cmp-head.z-section { padding: 30px 0; }
    /* certifications b7f8d3a: 612 = 30 + h2 65 + 5 + p 52 + 25.6 + 25 + tiles 182 / 15 / 182 + 30 */
    .zmit .zab-certified.z-section { padding: 30px 0; }
    .zmit .zab-certified > .z-container > p { margin-bottom: 25.6px; }
    .zab-certified-badges { row-gap: 15px; }
    .zab-cert-box { min-height: 182px; }
    /* bookcal a1452e8: 910 = 30 + h2 39 + 10 + lead 26 (ONE line, 1420 wide) + 20 + calendar 784 */
    .zmit .zmit-bookcal.z-section { padding: 30px 0 0; }
    .zmit .zmit-bookcal h2 { margin-bottom: 10px; }
    .zmit .zmit-bookcal p { max-width: none; margin: 0 0 20px; }
    .zmit .zmit-bookcal-embed { margin-top: 0; }
    .zmit .zmit-bookcal-embed .meetings-iframe-container { min-height: 784px; }
    /* NIST 3320fe0: 30px above the band, 575 = 30 + h2 56 + 30 + lead 79 (1104 wide) + 30 + row 320 + 30 */
    .zmit .zab-nist.z-section { margin-top: 30px; padding: 30px 0; }
    .zmit .zab-nist-lead { max-width: 1104px; }
    /* process 077adf2: 567 = 40 + 497 (six 77px rows, 7 apart; copy 426) + 30 */
    .zmit .zab-proc.z-section { padding: 40px 0 30px; }
    .zmit .zab-proc-copy p { margin: 0 0 25.6px; }
    /* stats 0a92459: 30px top/bottom. Counters: all THREE on ONE row (owner,
       2026-09-30) - was 2 + 1 (live WP's own wrap), which left the third stat
       orphaned. Matches the managed-security-service-provider reference, measured
       at 1440: three equal columns in the 860 counter column, 44px apart
       (257px each), so every label wraps inside its own column and none overlap. */
    .zmit .zmit-stats.z-section { padding: 30px 0; }
    .zmit .zmit-stats-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px 44px; }
    /* advantages f32c08a: 30px above, 665 = 30 + 605 + 30; copy paragraphs
       18px/27px with live's empty 27px <p> spacer between them. */
    .zmit .zab-elevate.z-section { margin-top: 30px; padding: 30px 0; }
    .zmit .zab-elevate-copy h2 { margin-bottom: 20px; }
    .zmit .zab-elevate-copy p { font-size: 18px; line-height: 27px; margin: 0 0 27px; }
    /* testimonials 69fd3c7: 502 = 30 + h2 39 + 50 + slide 353 + 30 (ours ~473: see quote note). Slide:
       80 pad, name 22px/600/28.6 + 5, 24x3 rule, company 34px/600/47.6 in a
       10/10 box, quote 18px/29.7 + 28.8, 80 pad. */
    .zmit .zmit-testi.z-section { padding: 30px 0; }
    .zmit .zmit-testi h2 { font-size: 30px; line-height: 39px; font-weight: 300; margin-bottom: 50px; }
    .zmit .zmit-testi-slide .zmit-testi-role { font-size: 22px; line-height: 28.6px; font-weight: 600; margin: 0 0 5px; }
    .zmit .zmit-testi-slide .zmit-testi-rule { width: 24px; height: 3px; margin: 0; }
    .zmit .zmit-testi-slide .zmit-testi-lead { font-size: 34px; line-height: 47.6px; font-weight: 600; margin: 0; padding: 10px 0; }
    /* quote keeps margin 0: OWNER 2026-09-21 (reference sheet) - the card hugs the
       shown slide with no trailing dead gradient; live adds 28.8 under it. */
    .zmit .zmit-testi-slide > .zmit-testi-quote { font-size: 18px; line-height: 29.7px; margin: 0; }
    /* overview cbab533: 700 = 30 + h2 133 + 40 + copy (24px spacers) + 40 + button 43 + 30 */
    .zmit .zab-empower.z-section { padding: 30px 0; }
    .zmit .zab-empower-copy h2 { margin-bottom: 40px; }
    .zmit .zab-empower-copy p:last-of-type { margin-bottom: 40px; }
    /* articles 54fce8f: 584 = 30 + head 39 + 30 + cards 455 + 30 */
    .zmit .zmit-articles.z-section { padding: 30px 0; }
    /* FAQ 19a44fa: 942 = 30 + h2 44 + 30 + 808 + 30 */
    .zmit .zmit-faq.z-section { padding: 30px 0; }
    /* contact 1bca1bb: lead is 1242 wide (3 lines) */
    .zmit .zmit-contact-head p { max-width: 1242px; }
}

/* S01 HERO FORM — live's own 20px field rhythm (memory rule: shorten the
   banner by the copy column, never by squeezing the form). Undoes the
   reference's compaction: live rows 70 tall + 20, inputs 40 (10px 20px,
   16px), textarea 68, submit 42 (13px). INNER inputs only — never the
   .hsfc-PhoneInput / .hsfc-DropdownInput wrappers. */
@media (min-width: 1081px) {
    .zmit-form-card .zmit-hsform .hsfc-Row { margin-bottom: 20px !important; }
    .zmit-form-card .zmit-hsform input,
    .zmit-form-card .zmit-hsform textarea,
    .zmit-form-card .zmit-hsform .hsfc-TextInput,
    .zmit-form-card .zmit-hsform .hsfc-TextareaInput { padding: 10px 20px !important; font-size: 16px !important; }
    .zmit-form-card .zmit-hsform .hsfc-TextareaInput,
    .zmit-form-card .zmit-hsform textarea { min-height: 68px !important; }
    .zmit-form-card .zmit-hsform .hsfc-Button,
    .zmit-form-card .zmit-hsform button[type="submit"] { padding: 13px !important; }
}

/* S07 RECOGNIZED efa2c74 — 370 = 30 + box 310 (40 pad + copy 230) + 30.
   Copy: h2 42 (ONE line) / 20 / lead 53 + 25.6 / 20 / logos 70 tall, no gap.
   CTA "Consult Cybersecurity Experts" is ONE line on this page, 331x72,
   padding 20px 30px, copy and CTA columns touch (no gap). The shared 1280
   box is kept; the copy column takes everything the button does not. */
@media (min-width: 1081px) {
    .zmit .zmit-recognized.z-section { padding: 30px 0; }
    .zmit-recognized-band { min-height: 0; grid-template-columns: minmax(0, 1fr) auto; gap: 0; }
    .zmit .zmit-recognized-copy p { margin-bottom: 25.6px; max-width: none; }
    .zmit-recognized-logos { gap: 0; }
    .zmit-recognized-logos img { height: 70px; }
    .zmit .zmit-recognized-cta .z-btn { display: inline-block; width: auto; white-space: nowrap; padding: 28px 70px 28px 30px; }
}

@media (min-width: 1081px) {
    /* compare: header block 103 on this page; body text sits at the TOP of
       each 100px cell (live's p starts 20-21px in, it is not centred) */
    .zmit .zab-cmp-col-head { height: 103px; }
    .zmit .zab-cmp-cell { align-items: flex-start; }
    /* stats: copy column top-aligned; every counter cell is 123 tall on live
       (a one-line label does not shorten its row) */
    .zmit .zmit-stats-copy { align-self: start; }
    .zmit .zmit-stat { min-height: 123px; }
}
@media (min-width: 1081px) {
    /* certifications: live's lead wrapper keeps its own 25.6 AND adds 25 below
       (they do not collapse on live) - the badge grid starts 203 in. */
    .zmit .zab-certified > .z-container > p { margin-bottom: 50.6px; }
    .zab-certified-badges { margin-top: 0; }
}
@media (min-width: 1081px) {
    /* FAQ answer on this page: box padding 0 20px 20px (horizontal restated,
       never 0), p 16px/25.6px #d9dbe9 + its 25.6 bottom margin => 148 for Q1. */
    .zmit .zmit-faq-item.open .zmit-faq-a-inner { padding: 0 20px 20px; }
    .zmit .zmit-faq-a-inner p { line-height: 25.6px; margin: 0 0 25.6px; color: #d9dbe9; }
}

/* FAQ open/close speed: WP's nested-accordion widgets animate at 400ms
   (n_accordion_animation_duration); the shared sheet uses .3s. */
.zmit .zmit-faq-a { transition-duration: .4s; }

/* FAQ on tablet: match the WordPress page on an iPad (owner screenshot,
   2026-09-30). Values from the WP draft's Elementor CSS (post-19638.css):
   band 19a44fa padding 30 (<=1366); heading ef24399 font-size
   clamp(1.5rem, 1.311rem + 1.0081vw, 2.125rem) / 1.3; accordions ce363c2 +
   f92bc19 title 16px/600, answers 0 20px 20px, 16px/1.6 #D9DBE9. Their column
   containers (34b1398 / 52523c1, 48% each) go 100% at 768-880, so the FAQ is
   ONE column there (first 8, then the other 9, 10px apart) and stays two
   columns from 881. Desktop (>=1081) and phones (<=680) are untouched. */
@media (min-width: 681px) and (max-width: 1080px) {
    .zmit .zmit-faq.z-section { padding: 30px 0; }
    .zmit .zmit-faq h2 { font-size: clamp(1.5rem, 1.311rem + 1.0081vw, 2.125rem); line-height: 1.3; }
    .zmit .zmit-faq .zmit-faq-q > span:not(.sign) { font-weight: 600; }
    .zmit .zmit-faq .zmit-faq-a-inner,
    .zmit .zmit-faq-item.open .zmit-faq-a-inner { padding: 0 20px 20px; }
    .zmit .zmit-faq .zmit-faq-a-inner p { line-height: 25.6px; margin: 0 0 25.6px; color: #d9dbe9; }
}
@media (min-width: 681px) and (max-width: 880px) {
    .zmit .zmit-faq .zmit-faq-list { column-count: 1; }
    .zmit .zmit-faq .zmit-faq-item:nth-child(8) { margin-bottom: 10px; }
    .zmit .zmit-faq .zmit-faq-item:nth-child(9) { break-after: auto; }
}

/* ------------------------------------------------------------
   S04a comparison accordion (phones/tablets) - WP visual parity
   (owner, 2026-09-29). Values from the WP page's Elementor CSS
   (post-19638.css): nested-accordion a9b241f + its body containers
   (e6ac82b ...) + icon-boxes (51d2ce3 / fa1bec9 ...). This band only renders
   below 1081px; WP's "tablet" rules (<=1024) are used for 768-1080.
   ------------------------------------------------------------ */
.zmit .zab-cmp-acc .zab-acc-item { background: transparent; border-radius: 0; margin-bottom: 15px; overflow: visible; }
.zmit .zab-cmp-acc .zab-acc-q {
    background: linear-gradient(90deg, #F0F4FA 30%, #D9EBFE 100%);
    border: 1px solid #14142B1F; border-radius: 10px;
    padding: 20px; font-size: 16px; font-weight: 600; line-height: 26.4px; color: #1f2124;
}
.zmit .zab-cmp-acc .zab-acc-item[open] > .zab-acc-q { border-radius: 10px 10px 0 0; }
.zmit .zab-cmp-acc .zab-acc-sign::before,
.zmit .zab-cmp-acc .zab-acc-sign::after { background: #1f2124; }
.zmit .zab-cmp-acc .zab-acc-a {
    padding: 0; overflow: hidden;
    border: 1px solid #14142B1F; border-top: 0; border-radius: 0 0 10px 10px;
}
.zmit .zab-cmp-acc .zab-acc-row { gap: 15px; padding: 20px; }
.zmit .zab-cmp-acc .zab-acc-row.is-zazz { background: #EFF0F7; }
.zmit .zab-cmp-acc .zab-acc-row.is-others { background: #F9FCFF; }
.zmit .zab-cmp-acc .zab-acc-ico { flex: 0 0 30px; width: 30px; height: 30px; }
.zmit .zab-cmp-acc .zab-acc-ico svg { display: block; width: 100%; height: 100%; }
.zmit .zab-cmp-acc .zab-acc-row h3,
.zmit .zab-cmp-acc .zab-acc-row .zab-acc-row-t { color: #0161FF; font-weight: 500; margin: 0 0 6px; }
.zmit .zab-cmp-acc .zab-acc-row p { color: #000; }
@media (max-width: 767px) {
    .zmit .zab-cmp-acc .zab-acc-ico { flex-basis: 22px; width: 22px; height: 22px; }
    .zmit .zab-cmp-acc .zab-acc-row h3,
    .zmit .zab-cmp-acc .zab-acc-row .zab-acc-row-t { font-size: 18px; margin-bottom: 2px; }
    .zmit .zab-cmp-acc .zab-acc-row.is-zazz p { font-size: 14px; }
    .zmit .zab-cmp-acc .zab-acc-row.is-others p { font-size: 12px; }
}

/* NIST cards, stacked layout (<=1080px): the card body had 0 top padding, so
   the "Identify"/"Protect"... heading sat flush against the blue band. Match
   the same .zab-nist component on it-managed-services (card body padding-top
   16px there). Desktop's side-by-side layout (padding 0 50px) is untouched;
   the heading-to-text gap is unchanged. */
@media (max-width: 1080px) {
    .zmit .zab-nist-body { padding-top: 16px; }
}

/* S05 CERTIFICATIONS — DESKTOP ONLY (>=1081): full-width like WP b7f8d3a. WP runs the
   6 tiles edge to edge (30px band padding, no 1400 cap), so at 1920 a tile is 607 wide,
   not our capped 439. Inside a tile WP's image-box (07cdb83) is: 11 inset | image column
   (W-22)/3 | 11 | copy 2(W-22)/3, W = tile - 24; the icon is min(134, column) and sits
   left in its column. Measured on WP at 1100/1280/1440/1536/1920/2560; >=2400 WP widens
   the 11s to 53, h2 56px, desc 18px, title gap 9px. Tablet/mobile (<=1080) untouched. */
@media (min-width: 1081px) {
    .zmit .zab-certified > .z-container { max-width: none; }
    .zmit .zab-cert-box { gap: 11px; padding: 24px 12px 24px 23px; min-height: 0; }
    .zmit .zab-cert-box img {
        flex: 0 0 auto; height: auto;
        width: min(134px, calc((100% - 11px) / 3));
        margin-right: calc((100% - 11px) / 3 - min(134px, calc((100% - 11px) / 3)));
    }
    .zmit .zab-cert-copy { flex: 1 1 0; min-width: 0; }
}
@media (min-width: 2400px) {
    .zmit .zab-certified h2 { font-size: 56px; max-width: none; }
    .zmit .zab-cert-box { gap: 53px; padding-left: 65px; }
    .zmit .zab-cert-box img {
        width: min(134px, calc((100% - 53px) / 3));
        margin-right: calc((100% - 53px) / 3 - min(134px, calc((100% - 53px) / 3)));
    }
    .zmit .zab-cert-box h3 { margin-bottom: 9px; }
    .zmit .zab-cert-box p { font-size: 18px; }
}

/* S07 RECOGNIZED — MOBILE ONLY (<=767, WP's mobile tier): match WP efa2c74 at 375.
   WP: section padding 0 and the #141414 band 3a69e1b FULL BLEED (x0, no gutter),
   padding 30px 20px, radius 0; copy 335 wide; text 25.6px under the paragraph, then
   the three logos (3e7fba2/b5ead04/3886af6) STACKED and centred at their natural
   130/181/241 x 70, 20 apart; button 87c62c1 full width, 13px, padding 15. Band sits
   flush on the section above and 30 over the next heading. Ours kept the white
   52/35 section padding + the 30px container gutter (band at x30, copy 275) and
   40px logos wrapped in a row. The <=680 button rules are repeated so 681-767
   gets WP's mobile button too. Desktop/tablet (>=768) untouched.
   OWNER 2026-10-22 (reference image = managed-security-service-provider at 375):
   the band is no longer full bleed - it is an inset dark card like MSSP's: 30px
   above/below, the normal 30px container gutter on both sides, radius 10, padding
   32px 26px, so heading, copy, stacked logos and the button all sit inside it. */
@media (max-width: 767px) {
    .zmit .zmit-recognized.z-section { padding: 30px 0; }
    .zmit .zmit-recognized-band { padding: 32px 26px; border-radius: 10px; }
    .zmit .zmit-recognized-copy p { margin-bottom: 25.6px; }
    .zmit .zmit-recognized-logos { flex-direction: column; align-items: center; row-gap: 20px; }
    .zmit .zmit-recognized-logos img { height: 70px; max-height: none; width: auto; max-width: 100%; object-fit: contain; }
    .zmit .zmit-recognized-cta .z-btn {
        display: block; width: 100%;
        padding: 15px; font-size: 13px; line-height: 13px;
        position: relative;
    }
    .zmit .zmit-recognized-cta .z-btn::after {
        position: absolute; right: 15px; top: 50%; transform: translateY(-50%);
    }
}

/* S18 FINAL CTA — MOBILE ONLY (<=767, WP's mobile tier): match the WP component
   (post 8864: 1187a39 > 2dee0b2 card > 718d6c9 copy + 4f2c262 image) at 375.
   WP: 50px above/below, card 20px from the edges (335 wide at 375), copy padding
   30/20 as a 20px-gap column; h2 33.05/600/1.3em, text 14px/25.2, button 13px,
   radius 5; the photo is the FULL card width, cropped (cover) and pulled up 12%
   of the card width so it overlaps the copy's bottom padding. <=500: full card
   width x 500 (cover, centred); 501-767: WP's custom CSS wins, 500px wide at its
   natural ratio, left-aligned. Ours kept a 30px gutter,
   30px/16px type and a 315x331 contained image. Tablet/desktop (>=768) untouched. */
@media (max-width: 767px) {
    .zmit .zmit-final.z-section { padding: 50px 0; }
    .zmit .zmit-final > .z-container { padding: 0 20px; }
    .zmit .zmit-final-banner { gap: 20px; }
    .zmit .zmit-final-copy { max-width: none; width: 100%; display: flex; flex-direction: column; gap: 20px; }
    .zmit .zmit-final-copy h2 { font-size: 33.05px; line-height: 42.965px; letter-spacing: normal; margin: 0; }
    .zmit .zmit-final-copy p { font-size: 14px; line-height: 25.2px; margin: 0; }
    .zmit .zmit-final-copy .zab-btn-final { align-self: flex-start; font-size: 13px; border-radius: 5px; gap: 16px; }
    .zmit .zmit-final-media { align-self: stretch; width: 100%; margin-top: -12%; }
    .zmit .zmit-final-media img { width: 500px; max-width: 100%; height: auto; margin: 0; object-fit: cover; }
}
@media (max-width: 500px) {
    .zmit .zmit-final-media img { width: 100%; height: 500px; object-position: center center; }
}

/* S08 TECH STACK — TABLET ONLY (768-1080): match WP 7557c66/f2691b8, which keeps
   the VERTICAL rail at tablet (ours switched to a horizontal scrolling row).
   Measured on WP at 768/820/1024/1080: content = width - 40 (max 1004.3, centred);
   heading 34.7/45.11 + 20 + a 1px #ddd rule under it; tab box 500 tall; rail =
   22% of it, starting 50 down, 450 tall, scrolling (5px #7f8ea7 thumb), padding-
   right 20, tabs 10 apart, padding 20, 16px/16px wrapping; panel = the rest, 1px
   #ddd left rule, 50px top/left inset; 2-col grid 15 apart; card #eff0f7 radius 8
   padding 15; icon column 1/6 of the card's inner width (icon max 52); the
   16px/20.8px name beside it, bottom-aligned with a 10px margin (WP flex-end). Desktop (>=1081) and phones (<=767) untouched. */
@media (min-width: 768px) and (max-width: 1080px) {
    .zmit .zab-stack > .z-container { max-width: 1044.3px; padding: 0 20px; }
    .zmit .zab-stack-head { border-bottom: 1px solid #ddd; }
    .zmit .zab-stack-head h2 { line-height: 45.11px; margin: 0 0 20px; }
    .zmit .zab-stack-tabs { grid-template-columns: 22% minmax(0, 1fr); gap: 0; height: 500px; align-items: stretch; }
    .zmit .zab-stack-rail {
        flex-direction: column; gap: 10px;
        height: 450px; margin-top: 50px; padding: 0 20px 0 0;
        overflow-x: hidden; overflow-y: scroll;
    }
    .zmit .zab-stack-tab { white-space: normal; }
    .zmit .zab-stack-panels { border-left: 1px solid #ddd; padding: 50px 0 0 50px; }
    .zmit .zab-stack-card { gap: 0; min-height: 0; align-items: flex-end; }
    .zmit .zab-stack-card img {
        flex: 0 0 auto; height: auto;
        width: min(52px, calc(100% / 6));
        margin-right: calc(100% / 6 - min(52px, calc(100% / 6)));
    }
    .zmit .zab-stack-card span { font-size: 16px; line-height: 20.8px; margin-bottom: 10px; }
}
/* Rail scroll thumb, everywhere the rail scrolls (>=768; phones are an accordion):
   WP f2691b8's custom CSS draws a 5px #7f8ea7 rounded thumb at ALL its rail widths.
   Ours had none, so >=1081 fell back to the browser's 15px default bar - which
   Windows 11 Chrome hides until hover, i.e. "no scroll button". */
@media (min-width: 768px) {
    .zmit .zab-stack-rail::-webkit-scrollbar { display: inline-block; width: 5px; }
    .zmit .zab-stack-rail::-webkit-scrollbar-track { border-radius: 100px; }
    .zmit .zab-stack-rail::-webkit-scrollbar-thumb { background: #7f8ea7; border-radius: 10px; }
}
/* 1025-1080 is WP's desktop mode: its grid box is max-width 98%, centred
   (7.3px in each side at 1080); at 768-1024 it is the full panel width. */
@media (min-width: 1025px) and (max-width: 1080px) {
    .zmit .zab-stack-grid { max-width: 98%; margin: 0 auto; }
}

/* S18 FINAL CTA — TABLET ONLY (768-1080): match the WP component (post 8864),
   which keeps copy + photo SIDE BY SIDE at tablet (ours stacked them). Measured
   on WP at 768/820/1024/1080: card 30px in from the edges (max 983.7 wide), a
   no-wrap row 20 apart; copy basis 60% of the card (70% from 1025), padding 30,
   a centred 20px-gap column, shrinking with the photo; photo basis 500 at its
   natural ratio, bottom-aligned, pulled up 10% of the card width from 881 (head
   above the card); 80px above/below to 880, 120/80 from 881. Type: h2
   33.05/42.965, text 17.16/25.2, button 15.38px radius 5 icon gap 16.
   Phones (<=767) and desktop (>=1081) untouched. */
@media (min-width: 768px) and (max-width: 1080px) {
    .zmit .zmit-final.z-section { padding: 120px 0 80px; }
    .zmit .zmit-final > .z-container { max-width: 1043.7px; padding: 0 30px; }
    .zmit .zmit-final-banner {
        flex-direction: row; flex-wrap: nowrap; justify-content: space-between;
        align-items: stretch; gap: 20px; overflow: visible;
    }
    .zmit .zmit-final-copy {
        flex: 0 1 70%; min-width: 0; max-width: none; box-sizing: border-box; padding: 30px;
        display: flex; flex-direction: column; justify-content: center; gap: 20px;
    }
    .zmit .zmit-final-copy h2 { font-size: 33.05px; line-height: 42.965px; letter-spacing: normal; margin: 0; }
    .zmit .zmit-final-copy p { font-size: 17.16px; line-height: 25.2px; max-width: none; margin: 0; }
    .zmit .zmit-final-copy .zab-btn-final { align-self: flex-start; font-size: 15.38px; border-radius: 5px; gap: 16px; }
    .zmit .zmit-final-media { flex: 0 1 500px; min-width: 0; align-self: flex-end; margin-top: -10%; }
    .zmit .zmit-final-media img { display: block; width: 100%; max-width: none; height: auto; margin: 0; object-fit: cover; }
}
@media (min-width: 768px) and (max-width: 1024px) {
    .zmit .zmit-final-copy { flex-basis: 60%; }
}
@media (min-width: 768px) and (max-width: 880px) {
    .zmit .zmit-final.z-section { padding: 80px 0; }
    .zmit .zmit-final-media { margin-top: 0; }
}

/* S08 rail thumb drawn by the page script where the browser shows no scrollbar
   of its own (iPad/iPhone Safari, macOS overlay scrollbars): same 5px #7f8ea7
   rounded bar as WP, pinned to the rail's right edge. Positioned against the
   tab box; out of flow, so it never takes a grid cell or moves anything. */
.zab-stack-thumb { display: none; }
@media (min-width: 768px) {
    .zmit .zab-stack-tabs { position: relative; }
    .zmit .zab-stack-thumb:not([hidden]) {
        display: block; position: absolute; width: 5px;
        background: #7f8ea7; border-radius: 10px; pointer-events: none;
    }
}

/* S06 BOOK A FREE CONSULTATION — phones + tablets (<=1080): 30px above the heading.
   WP 62d08e2 sits 30 below the certifications band at every width (measured at
   375/820/1024/1440); ours had 30 only from 1081 (padding 0 base), so below that
   the heading touched the band. Top only - bottom and desktop untouched. */
@media (max-width: 1080px) {
    .zmit .zmit-bookcal.z-section { padding-top: 30px; }
}

/* stats-1row (2026-10-08): on tablet the 3 metrics sit in ONE row under the
   CTA, like enterprise-software-development-company. Grid columns only;
   overrides the two-up tablet rule above (which wrapped them 2+1). */
@media (max-width: 1080px) and (min-width: 681px) {
    .zmit .zmit-stats .zmit-stats-grid { grid-template-columns: repeat(3, 1fr); }
}

/* ============================================================
   LINKED TECH-STACK CARDS (owner 2026-10-22): a tool with a dedicated page links
   the whole card (it-managed-services pattern). Same look as the unlinked cards at
   rest - no underline, dark label - and the reference's hover: lift 4px + soft
   shadow, label stays dark. Unlinked cards (div) are untouched.
   ============================================================ */
.zmit a.zab-stack-card { text-decoration: none; color: inherit; transition: transform .2s ease, box-shadow .2s ease; }
.zmit a.zab-stack-card:hover,
.zmit a.zab-stack-card:focus-visible { transform: translateY(-4px); box-shadow: 0 10px 24px rgba(20, 20, 43, .10); }
.zmit a.zab-stack-card:hover span { color: #141414; }
@media (prefers-reduced-motion: reduce) { .zmit a.zab-stack-card:hover, .zmit a.zab-stack-card:focus-visible { transform: none; } }

/* Consultant (final) band on PHONES: the photo is shown WHOLE at its own proportions
   (owner 2026-10-22 - a fixed 500px object-fit:cover box cut people off). It spans
   the full card width (the largest it can be without cropping) and sits on the card's
   bottom edge. Phones only. */
@media (max-width: 680.98px) {
    body .zmit section.zmit-final .zmit-final-banner .zmit-final-media img { position: static; display: block; width: 100%; max-width: none; height: auto; max-height: none; aspect-ratio: 974 / 1024; object-fit: contain; object-position: center bottom; margin-left: 0; margin-right: 0; }
}
