/* ============================================================
   solutions.css
   Securevision — Solutions Pages Stylesheet
   Version: 1.0 — May 2026

   SCOPE: /solutions/ pages ONLY — sector pages, problem-based
   pages, and all persona sub-pages under each sector.
   Load this file on every solutions page alongside sv-shared.css.
   Do NOT load on systems, portfolio, resources, insights,
   or any other page type.

   Load order in <head>:
     <link rel="stylesheet" href="/sv-shared.css">
     <link rel="stylesheet" href="/sv-solutions.css">
     <script src="/site-config.js"></script>

   WHAT THIS FILE OWNS:
   - Section A: Process step cards (.step-row, .step-item, .step-num)
   - Section B: Related cards (.rel-card, .rel-card-img)
   - Section C: Solutions hub components (.featured-condo, .badge-popular,
       .grid-5, .simple-card, .icon-row)
   - Section D: Solution detail — pillar cards (.pillar-card, .pillar-content,
       .pillar-image-wrap, .pillar-link, .pillar-closing-note)
   - Section E: Pricing & investment (.pricing-card, .size-badge, .prop-types,
       .price-wrap, .price-range, .pricing-body, .pricing-callout)
   - Section F: FAQ component (.faq-item, .faq-grid, .faq-list)
   - Section G: Solution layout responsive overrides (.solution-personas,
       .solution-pillars, .solution-related, .solution-lifecycle,
       .solution-proof-card, .proof-grid)
   - Section H: Persona sub-page components (.pain-card, .framework-card,
       .service-card, .process-steps, .step-card, .assessment-split,
       .tech-spec-mini, .testimonial-*)

   WHAT THIS FILE DOES NOT TOUCH:
   - sv-shared.css global classes (nav, footer, buttons, heroes,
     CTAs, grids, .card, .container, etc.)
   - systems.css classes
   - Any portfolio, insights, or resources page classes

   NOTE: The classes in Sections A–G currently also exist in sv-shared.css.
   Both files define these classes during the transition period.
   sv-shared.css will be stripped of these once all solutions pages
   are confirmed loading solutions.css correctly.

   VERSION HISTORY:
   v1.0  May 2026   Created. Extracted from sv-shared.css Sections 23, 24,
                    28 and scattered blocks. Page-specific inline styles
                    from home-upgrade.html and architects-and-designers.html
                    consolidated here.
   v1.1  May 2026   Added sv-sys-* block (Section J). systems-block.js is
                    used on solutions/index.html and potentially other
                    solutions pages — all load sv-solutions.css so this
                    is the correct home for these classes within /solutions/.
   v1.2  May 2026   Added Section L: Content Component Classes.
                    .callout-box — highlighted prose block with accent
                    left border. Replaces inline-styled single-card
                    sections in problem-based solution pages.
                    .proof-sector-pill, .proof-stat-value,
                    .proof-stat-label — proof card stat elements.
                    Replaces heavily inline-styled flex split in
                    reduce-guard-manpower and similar pages.
                    .pillar-link (standalone) — "Explore →" anchor
                    outside of .pillar-card context.
                    .section-intro — large lead paragraph (17px/1.8).
                    .img-float-right, .img-float-left, .clearfix —
                    floated image pattern for long-form solution pages.
                    .img-fluid, .img-rounded — image utilities.
                    .hide-mobile — hides decorative image columns
                    on mobile when layout collapses to single column.
                    .card-img-wrap, .card-img-wrap--square, .card-body —
                    full-bleed top image pattern inside .card. Replaces
                    inline style="width:100%; border-radius: 8px; on
                    images in solution component cards.
                    .stat-bar-group, .stat-bar-item, .stat-bar-label,
                    .stat-bar-value, .stat-bar-track, .stat-bar-fill —
                    horizontal progress bar for impact/results cards.
                    Only fill width set via inline style="width:X%;".
                    Replaces all other inline stat bar styles.
   v1.3  May 2026   Added Section M: Card & Layout Utilities.
                    .card-emoji — 32px emoji block above card H3.
                    .card-img-placeholder + .card-img-placeholder-inner
                    + .card-img-placeholder-icon — fallback image area
                    when no hero photo exists for a card.
                    .impact-list, .impact-list-label — styled tick-list
                    for proof/result sections. Callout-box variant added.
                    .outcome-stat-grid, .outcome-stat, .outcome-stat-value
                    — 2-up mini stat boxes for impact sections.
                    .trust-badge-row, .trust-badge — inline credential
                    pills replacing inline flex trust reinforcement strips.
                    .card--featured — modifier class for highlighted/
                    spotlight cards. Blue border + tinted bg. Hover state
                    inverts to solid blue for card-clickable variant.
                    .stat-bar-fill--danger — red fill modifier for
                    declining metric bars (e.g. spare part availability).
   v1.4  May 2026   Added Section N: New Build & Construction Classes.
                    .solution-lifecycle — added missing desktop grid
                    definition (4-col). Previously only had responsive
                    overrides; desktop relied on inline style.
                    .lifecycle-step, .lifecycle-num, .lifecycle-label —
                    construction stage step with accent outline circle.
                    Replaces heavily inline-styled flex column divs.
                    .rel-card-header — flex title+badge row inside
                    .rel-card. Replaces inline div with space-between.
                    .checklist-grid, .checklist-item, .checklist-num,
                    .checklist-item--wide — 6-col grid for architect
                    checklist and FAQ cards with span-2/span-3 layout.
                    .assessment-image — portrait image column for
                    assessment split layout; box-shadow + border-radius
                    replaces inline style on the image wrapper div.
   v1.5  May 2026   Added Section O: Dark Interstitial Section.
                    .sv-section-dark — mid-blue #2d4a6b band, 72px
                    padding, white text. Replaces inline
                    style="background:#2d4a6b; padding:72px 0;"
                    on residential.html and commercial.html
                    interstitial sections.
                    .sv-section-dark h2, .subtitle, .eyebrow-light —
                    white/muted text overrides for dark background.
   v1.6  May 2026   Added Section P: Commercial & Persona Page Classes.
                    Hero background rules for .hero-retail, .hero-hotel,
                    .hero-office, .hero-mcst, .hero-security-contractors,
                    .hero-managing-agents, .hero-day-care, .hero-aged-care.
                    .split-grid / .split-grid.align-center — 2-col
                    image+text layout replacing page-specific grid-2 classes.
                    .problem-grid — 2-col problem card grid (retail/hotel/office).
                    .feature-box-grid--3/4, .feature-box, .feature-box__title
                    — white feature boxes replacing inline div wrappers.
                    .numbered-label — accent number above card h3.
                    .bordered-heading — h3 with accent left border.
                    .proof-stat-grid, .proof-stat-grid--flex, .proof-stat-item
                    — bordered stat callout container replacing inline grids.
                    .solution-proof-card — desktop flex definition added.
                    .stat-number / .stat-label — large proof stats (day-care).
                    .trust-callout — centred trust card replacing inline card.
                    .callout-highlight — accent blue inline box.
                    .sv-trust-note — slim editorial sub-hero note.
   ============================================================ */


/* ============================================================
   SECTION A: Process Step Cards
   .step-row, .step-item, .step-num
   ============================================================ */

.step-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 24px;
    margin-top: 56px;
}

.step-item,
.step-row>div {
    text-align: left;
    padding: 32px 24px;
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
    display: flex;
    flex-direction: column;
}

.step-item .step-num,
.step-row>div .step-num {
    margin: 0 0 20px 0;
}

.step-num {
    width: 48px;
    height: 48px;
    min-width: 48px;
    border-radius: 50%;
    background: var(--primary-blue);
    color: #fff;
    font-family: 'Montserrat', sans-serif;
    font-size: 20px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    margin: 0 auto 28px;
    box-shadow: 0 4px 12px rgba(0, 86, 179, 0.20);
}

.step-num.step-num-sm {
    width: 36px;
    height: 36px;
    min-width: 36px;
    font-size: 15px;
    margin-bottom: 22px;
}

.step-item h3,
.step-row>div strong {
    display: block;
    font-size: 17px;
    margin-bottom: 10px;
    color: var(--text-dark);
    font-family: 'Montserrat', sans-serif;
    font-weight: 600;
    line-height: 1.4;
}

.step-item p,
.step-row>div p {
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.7;
    margin: 0;
    flex-grow: 1;
}

/* ── END Section A ─────────────────────────────────────────── */


/* ============================================================
   SECTION B: Related Cards
   .rel-card, .rel-card-img, .rel-card-footer
   Used on sector pages and solutions hub index.
   ============================================================ */

.rel-card {
    background: white;
    padding: 32px 28px;
    border-radius: 12px;
    border: 1px solid var(--border-light);
    transition: 0.3s;
    text-decoration: none;
    color: var(--text-dark);
    display: flex;
    flex-direction: column;
    height: 100%;
}

.rel-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
    border-color: var(--primary-blue);
}

.rel-card h3 {
    font-size: 18px;
    margin-bottom: 10px;
}

.rel-card strong {
    display: block;
    color: var(--primary-blue);
    font-size: 13px;
    margin-bottom: 8px;
    font-family: 'Montserrat', sans-serif;
}

.rel-card p {
    margin: 0;
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.6;
}

.rel-card-footer {
    margin-top: auto;
    padding-top: 16px;
    border-top: 1px solid var(--border-light);
    font-size: 13px;
    color: var(--primary-blue);
    font-weight: 600;
    font-family: 'Montserrat', sans-serif;
}

/*
   REL-CARD IMAGE PATTERN
   Use .rel-card-img as the first child inside .rel-card when showing
   a sector thumbnail. Fixed 16:9 aspect ratio keeps all cards even
   regardless of image dimensions.
*/
.rel-card-img {
    width: calc(100% + 56px);
    margin: -32px -28px 20px -28px;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    flex-shrink: 0;
}

.rel-card-img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.4s ease;
}

.rel-card:hover .rel-card-img img {
    transform: scale(1.04);
}

/* ── END Section B ─────────────────────────────────────────── */


/* ============================================================
   SECTION C: Solutions Hub Components
   .featured-condo, .badge-popular, .grid-5, .simple-card, .icon-row
   Used on /solutions/index.html
   ============================================================ */

.featured-condo {
    border-color: var(--primary-blue) !important;
    box-shadow: 0 10px 40px rgba(0, 86, 179, 0.1) !important;
    position: relative;
}

.badge-popular {
    position: absolute;
    top: -12px;
    right: 24px;
    background: var(--primary-blue);
    color: white;
    padding: 4px 12px;
    border-radius: 20px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    z-index: 2;
}

.grid-5 {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 16px;
}

.simple-card {
    background: #fff;
    border: 1px solid var(--border-light);
    padding: 24px 16px;
    border-radius: 10px;
    text-align: center;
    text-decoration: none;
    color: var(--text-dark);
    font-weight: 600;
    font-size: 14px;
    transition: 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    line-height: 1.4;
}

.simple-card:hover {
    border-color: var(--primary-blue);
    color: var(--primary-blue);
    transform: translateY(-3px);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
}

.icon-row {
    display: flex;
    justify-content: space-around;
    flex-wrap: wrap;
    gap: 32px;
    margin-top: 48px;
}

.icon-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 16px;
    flex: 1;
    min-width: 150px;
}

.icon-circle {
    width: 64px;
    height: 64px;
    min-width: 64px;
    flex-shrink: 0;
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
}

@media (max-width: 992px) {
    .grid-5 {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 768px) {
    .grid-5 {
        grid-template-columns: 1fr 1fr;
    }

    .icon-row {
        gap: 40px;
    }

    .icon-item {
        min-width: 45%;
    }
}

@media (max-width: 480px) {
    .grid-5 {
        grid-template-columns: 1fr;
    }
}

/* ── END Section C ─────────────────────────────────────────── */


/* ============================================================
   SECTION D: Solution Detail — Pillar Cards
   .pillar-card, .pillar-content, .pillar-image-wrap,
   .pillar-link, .pillar-closing-note
   ============================================================ */

.pillar-card {
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    height: 100%;
    transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.pillar-card:hover {
    transform: translateY(-8px);
    box-shadow: 0 12px 40px rgba(0, 86, 179, 0.12);
    border-color: var(--primary-blue);
}

.pillar-image-wrap {
    height: 180px;
    overflow: hidden;
}

.pillar-image-wrap img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: 0.5s;
}

.pillar-card:hover .pillar-image-wrap img {
    transform: scale(1.05);
}

.pillar-content {
    padding: 32px;
    flex-grow: 1;
    display: flex;
    flex-direction: column;
}

.pillar-header {
    margin-bottom: 16px;
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 12px;
}

.pillar-header h3 {
    font-size: 18px !important;
    color: var(--text-dark) !important;
    margin: 0 !important;
    line-height: 1.3 !important;
    font-weight: 700 !important;
}

.pillar-badge {
    font-size: 10px;
    font-weight: 700;
    padding: 4px 8px;
    border-radius: 4px;
    letter-spacing: 0.5px;
    flex-shrink: 0;
    margin-top: 4px;
    text-transform: uppercase;
}

.badge-essential {
    background: rgba(0, 86, 179, 0.1);
    color: var(--primary-blue);
}

.badge-optional {
    background: rgba(100, 116, 139, 0.1);
    color: #64748b;
}

.pillar-content p {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.6;
    margin-bottom: 24px;
}

.pillar-components {
    margin-bottom: 32px;
}

.pillar-components strong {
    display: block;
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--text-light);
    margin-bottom: 12px;
}

.pillar-components ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.pillar-components li {
    font-size: 13px;
    color: var(--text-gray);
    margin-bottom: 8px;
    position: relative;
    padding-left: 18px;
}

.pillar-components li::before {
    content: '•';
    position: absolute;
    left: 0;
    color: var(--primary-blue);
    font-weight: bold;
}

.pillar-link {
    font-size: 14px;
    font-weight: 600;
    color: var(--primary-blue);
    text-decoration: none;
    margin-top: auto;
    display: inline-block;
    transition: 0.2s;
}

.pillar-link:hover {
    color: var(--dark-blue);
    text-decoration: underline;
}

.pillar-closing-note {
    text-align: center;
    max-width: 800px;
    margin: 48px auto 0;
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    padding: 28px;
    background: var(--bg-light);
    border-radius: 12px;
    border: 1px solid var(--border-light);
}

/* ── END Section D ─────────────────────────────────────────── */


/* ============================================================
   SECTION E: Pricing & Investment Cards
   .pricing-card, .size-badge, .prop-types, .price-wrap,
   .price-range, .pricing-body, .pricing-callout
   ============================================================ */

.pricing-card {
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    padding: 40px 32px;
    display: flex;
    flex-direction: column;
    height: 100%;
    transition: 0.3s;
}

.pricing-card:hover {
    transform: translateY(-8px);
    box-shadow: 0 12px 40px rgba(0, 86, 179, 0.12);
    border-color: var(--primary-blue);
}

.size-badge {
    display: inline-block;
    background: var(--bg-light);
    color: var(--text-light);
    font-size: 11px;
    font-weight: 700;
    padding: 4px 10px;
    border-radius: 4px;
    margin-bottom: 16px;
    text-transform: uppercase;
}

.pricing-card h3 {
    font-size: 20px !important;
    margin-bottom: 8px !important;
    color: var(--text-dark) !important;
    line-height: 1.3 !important;
    font-weight: 700 !important;
}

.prop-types {
    font-size: 13px;
    color: var(--text-light);
    margin-bottom: 24px;
}

.price-wrap {
    margin-bottom: 32px;
    padding-bottom: 24px;
    border-bottom: 1px solid var(--border-light);
}

.price-range {
    font-size: 24px !important;
    font-weight: 700 !important;
    color: var(--primary-blue) !important;
    font-family: 'Montserrat', sans-serif !important;
    display: block;
}

.pricing-body {
    flex-grow: 1;
    margin-bottom: 32px;
}

.pricing-body ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.pricing-body li {
    font-size: 15px;
    color: var(--text-gray);
    margin-bottom: 12px;
    position: relative;
    padding-left: 20px;
    line-height: 1.6;
}

.pricing-body li::before {
    content: '✓';
    position: absolute;
    left: 0;
    color: var(--accent-green);
    font-weight: bold;
}

.pricing-footer p {
    font-size: 12px;
    color: var(--text-light);
    font-style: italic;
    margin: 0;
}

.pricing-callout {
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    padding: 48px;
    text-align: center;
    max-width: 850px;
    margin: 80px auto 40px;
}

.pricing-callout h3 {
    font-size: 24px !important;
    margin-bottom: 16px !important;
    color: var(--text-dark) !important;
    font-weight: 700 !important;
}

.pricing-callout p {
    font-size: 16px;
    color: var(--text-gray);
    line-height: 1.7;
    margin-bottom: 20px;
}

.pricing-callout ol {
    display: inline-block;
    text-align: left;
    margin: 24px auto;
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.7;
    padding-left: 40px;
}

/* ── END Section E ─────────────────────────────────────────── */


/* ============================================================
   SECTION F: FAQ Component
   .faq-item, .faq-grid, .faq-grid--single, .faq-list
   Two layout options: grid (all visible) or accordion (details)
   ============================================================ */

/* ── Shared item shell ── */
.faq-item {
    background: var(--white);
    border: 1px solid var(--border-light);
    border-radius: 12px;
    transition: border-color 0.2s, box-shadow 0.2s;
}

.faq-item:hover {
    border-color: var(--page-accent, var(--primary-blue));
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
}

/* ── Option A: Grid layout (static, all visible) ── */
.faq-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
    margin-top: 40px;
}

.faq-grid--single {
    grid-template-columns: 1fr;
}

.faq-grid .faq-item {
    padding: 28px 32px;
}

.faq-grid .faq-question {
    font-family: 'Montserrat', sans-serif;
    font-size: 17px;
    font-weight: 600;
    color: var(--text-dark);
    margin-bottom: 12px;
    line-height: 1.4;
    padding-left: 34px;
    /* badge width 24px + gap 10px — reserves space so wrap indents */
}

.faq-grid .faq-question::before {
    content: 'Q';
    display: inline-block;
    width: 24px;
    height: 24px;
    background: var(--page-accent, var(--primary-blue));
    color: #fff;
    border-radius: 50%;
    font-size: 11px;
    font-weight: 700;
    font-family: 'Montserrat', sans-serif;
    text-align: center;
    line-height: 24px;
    margin-left: -34px;
    /* pulls badge back into the reserved padding space */
    margin-right: 10px;
    vertical-align: middle;
    flex-shrink: 0;
}

.faq-grid .faq-answer {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    margin: 0;
    padding-left: 34px;
}

/* ── Option B: Accordion list (native <details>) ── */
.faq-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-top: 40px;
}

.faq-list .faq-item {
    overflow: hidden;
}

.faq-list summary.faq-question {
    list-style: none;
}

.faq-list summary.faq-question::-webkit-details-marker {
    display: none;
}

.faq-list .faq-question {
    font-family: 'Montserrat', sans-serif;
    font-size: 16px;
    font-weight: 600;
    color: var(--text-dark);
    padding: 20px 56px 20px 24px;
    cursor: pointer;
    position: relative;
    user-select: none;
    line-height: 1.4;
    display: block;
    transition: color 0.2s;
}

.faq-list .faq-question::after {
    content: '';
    position: absolute;
    right: 24px;
    top: 50%;
    width: 10px;
    height: 10px;
    border-right: 2px solid var(--page-accent, var(--primary-blue));
    border-bottom: 2px solid var(--page-accent, var(--primary-blue));
    transform: translateY(-65%) rotate(45deg);
    transition: transform 0.25s ease;
}

.faq-list details[open] .faq-question::after {
    transform: translateY(-35%) rotate(225deg);
}

.faq-list details[open] .faq-question {
    color: var(--page-accent, var(--primary-blue));
}

.faq-list details[open] {
    border-color: var(--page-accent, var(--primary-blue));
}

.faq-list .faq-answer {
    padding: 0 24px 20px 24px;
    border-top: 1px solid var(--border-light);
}

.faq-list .faq-answer p {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    margin-top: 16px;
    margin-bottom: 0;
}

/* ── Responsive ── */
@media (max-width: 768px) {
    .faq-grid {
        grid-template-columns: 1fr;
    }

    .faq-grid .faq-item {
        padding: 24px;
    }

    .faq-list .faq-question {
        padding: 16px 48px 16px 20px;
        font-size: 15px;
    }

    .faq-list .faq-answer {
        padding: 0 20px 16px 20px;
    }
}

/* ── END Section F ─────────────────────────────────────────── */


/* ============================================================
   SECTION G: Solution Layout Responsive Overrides
   These classes use inline style for desktop grid definition.
   Only responsive overrides are needed here.
   ============================================================ */

@media (max-width: 992px) {

    .solution-personas,
    .solution-related,
    .solution-lifecycle {
        grid-template-columns: repeat(2, 1fr);
    }

    .proof-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .step-row {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 992px) and (min-width: 769px) {
    .solution-lifecycle {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {

    .solution-personas,
    .solution-pillars,
    .solution-related,
    .solution-lifecycle {
        grid-template-columns: 1fr;
    }

    .solution-proof-card {
        flex-direction: column !important;
        gap: 24px !important;
    }

    .step-row {
        grid-template-columns: 1fr;
    }

    .proof-grid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 480px) {
    .proof-grid {
        grid-template-columns: 1fr;
    }
}

/* ── END Section G ─────────────────────────────────────────── */


/* ============================================================
   SECTION H: Persona Sub-Page Components
   Classes previously defined as inline styles in HTML files.
   Now canonical here — remove <style> blocks from HTML.
   Uses var(--page-accent) so each sector's colour applies.
   ============================================================ */

/* ── H1. Pain points grid (home-upgrade, reduce-manpower etc.) ── */
.pain-points {
    background: var(--bg-light);
    padding: 100px 0;
}

.pain-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
    margin-top: 56px;
}

.pain-card {
    background: #fff;
    padding: 32px;
    border-radius: 10px;
    border: 1px solid var(--border-light);
    transition: 0.3s;
}

.pain-card:hover {
    border-color: var(--page-accent, var(--primary-blue));
}

.pain-icon {
    font-size: 32px;
    margin-bottom: 20px;
    display: block;
}

.pain-card h4 {
    font-size: 18px;
    margin-bottom: 12px;
    color: var(--page-accent, var(--primary-blue));
}

.pain-card .problem {
    font-size: 15px;
    color: var(--text-gray);
    margin-bottom: 16px;
    font-style: italic;
}

.pain-card .resolution {
    font-size: 15px;
    color: var(--text-dark);
    font-weight: 500;
    border-top: 1px solid var(--border-light);
    padding-top: 16px;
}

/* ── H2. Framework choice grid (home-upgrade) ── */
.framework-choice {
    background: #fff;
    padding: 100px 0;
}

.framework-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 32px;
    margin-top: 56px;
}

.framework-card {
    padding: 40px;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    transition: 0.3s;
}

.framework-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
    border-color: var(--page-accent, var(--primary-blue));
}

.framework-card h3 {
    font-size: 22px;
    margin-bottom: 16px;
    color: var(--page-accent, var(--primary-blue));
}

/* ── H3. Service upgrade grid (home-upgrade) ── */
.service-upgrade-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
    margin-top: 56px;
}

.service-card {
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    padding: 32px;
    transition: 0.3s;
}

.service-card:hover {
    transform: translateY(-4px);
    border-color: var(--page-accent, var(--primary-blue));
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.05);
}

.service-card h4 {
    font-size: 18px;
    margin-bottom: 12px;
    color: var(--page-accent, var(--primary-blue));
}

/* ── H4. Process steps (home-upgrade) ── */
.process-steps {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    margin-top: 56px;
}

.step-card {
    background: #fff;
    padding: 32px;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    transition: 0.3s;
    height: 100%;
    text-align: center;
}

.step-card:hover {
    border-color: var(--page-accent, var(--primary-blue));
    transform: translateY(-4px);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
}

.step-badge {
    width: 32px;
    height: 32px;
    background: var(--page-accent, var(--primary-blue));
    color: #fff;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    margin: 0 auto 20px;
    font-size: 13px;
}

.step-content h4 {
    font-size: 18px;
    margin-bottom: 12px;
    color: var(--text-dark);
    text-align: center;
    min-height: 50px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.step-content p {
    font-size: 15px;
    line-height: 1.6;
    color: var(--text-gray);
    text-align: center;
}

/* ── H5. Assessment split layout ── */
.assessment-depth {
    background: #fff;
    padding: 100px 0;
}

.assessment-content {
    max-width: 900px;
    line-height: 1.7;
}

.assessment-split {
    display: grid;
    gap: 60px;
    align-items: center;
}

/* ── H5b. Assessment image column
   Portrait-format image column in the assessment split layout.
   Box shadow and border-radius match the original inline style.   ── */
.assessment-image {
    border-radius: 20px;
    overflow: hidden;
    box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
}

.assessment-image img {
    width: 100%;
    height: auto;
    display: block;
    aspect-ratio: 9 / 16;
    object-fit: cover;
}

/* ── H6. Tech spec mini (landed-home page) ── */
.tech-spec-mini {
    background: var(--bg-light);
    border: 1px solid var(--border-light);
    border-radius: 10px;
    padding: 20px 24px;
    margin-top: 16px;
}

.tech-spec-mini h4 {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--text-light);
    margin-bottom: 12px;
}

.tech-spec-mini ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.tech-spec-mini li {
    font-size: 13px;
    color: var(--text-gray);
    padding: 4px 0;
    border-bottom: 1px solid var(--border-light);
}

.tech-spec-mini li:last-child {
    border-bottom: none;
}

/* ── H7. Testimonial (architects page) ── */
.testimonial-text {
    font-size: 17px;
    color: var(--text-dark);
    line-height: 1.7;
    font-style: italic;
    margin-bottom: 16px;
}

.testimonial-attr {
    font-size: 13px;
    color: var(--text-light);
    font-weight: 600;
    font-family: 'Montserrat', sans-serif;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* ── H8. Card hover utility ── */
.card-hover {
    transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.card-hover:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
    border-color: var(--page-accent, var(--primary-blue));
}

/* ── H9. Responsive overrides for sub-page components ── */
@media (max-width: 992px) {

    .framework-grid,
    .pain-grid,
    .service-upgrade-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .process-steps {
        grid-template-columns: repeat(2, 1fr);
    }

    .assessment-split {
        grid-template-columns: 1fr !important;
        gap: 40px !important;
    }
}

@media (max-width: 768px) {

    .framework-grid,
    .pain-grid,
    .service-upgrade-grid,
    .process-steps {
        grid-template-columns: 1fr;
    }
}

/* ── END Section H ─────────────────────────────────────────── */

/* ============================================================
   SECTION I: Group icon sizing inside .card
   Mirrors the rule in systems.css — needed on solutions pages
   that use .card + .group-icon (e.g. landed-home-security-systems.html
   Brands section). Without this the SVGs render full-size.
   ============================================================ */

.card .group-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 16px;
    flex-shrink: 0;
}

.card .group-icon svg {
    width: 20px;
    height: 20px;
}

/* ── END Section I ─────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section J: Systems Block Injectable
   sv-sys-* classes for systems-block.js (.sv-systems-block
   placeholder). Used on solutions/index.html and any solutions
   page that includes the 3+3 systems grid component.
   All solutions pages load sv-solutions.css so this is the
   correct home within the /solutions/ folder.
   ============================================================ */

.sv-systems-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-top: 40px;
}

.sv-sys-card {
    background: var(--bg-light);
    border: 1px solid var(--border-light);
    border-radius: 10px;
    border-top: 3px solid var(--primary-blue);
    padding: 0;
    text-decoration: none;
    color: var(--text-dark);
    display: flex;
    flex-direction: column;
    transition: 0.3s;
    overflow: hidden;
}

.sv-sys-card:hover {
    box-shadow: 0 8px 28px rgba(0, 0, 0, 0.10);
    transform: translateY(-4px);
    background: #fff;
}

.sv-sys-card--platform {
    border-top-color: #003d82;
}

.sv-sys-badge {
    display: inline-block;
    font-family: 'Montserrat', sans-serif;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #003d82;
    background: #e6f0fa;
    padding: 3px 10px;
    border-radius: 4px;
    margin: 12px 20px 0;
    align-self: flex-start;
}

.sv-sys-img {
    width: 100%;
    aspect-ratio: 4 / 3;
    overflow: hidden;
}

.sv-sys-img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.sv-sys-card h3 {
    font-size: 15px;
    font-family: 'Montserrat', sans-serif;
    font-weight: 700;
    margin: 16px 20px 8px;
    color: var(--text-dark);
}

.sv-sys-card p {
    font-size: 13px;
    color: var(--text-light);
    line-height: 1.6;
    flex: 1;
    margin: 0 20px 16px;
}

.sv-sys-link {
    font-size: 12px;
    font-weight: 700;
    font-family: 'Montserrat', sans-serif;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--primary-blue);
    padding: 0 20px 20px;
    margin-top: auto;
    /* pushes link to bottom of card regardless of content height */
}

@media (max-width: 768px) {
    .sv-systems-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 480px) {
    .sv-systems-grid {
        grid-template-columns: 1fr;
    }
}

/* ── END Section J ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section K: Integration Section Layout
   Used on all solutions pages for the "How Systems Work
   Together" editorial section.
   Replaces inline grid and badge pill styles across all 8
   solutions pages.
   ============================================================ */

/* Two-column split: prose left, image right */
.integration-split {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 64px;
    align-items: center;
    margin-top: 48px;
}

/* Prose column */
.integration-prose p {
    font-family: 'Inter', sans-serif;
    font-size: 17px;
    color: var(--text-gray);
    line-height: 1.7;
    margin-bottom: 24px;
}

.integration-prose p:last-of-type {
    margin-bottom: 0;
}

/* Badge pill row */
.integration-badges {
    display: flex;
    justify-content: flex-start;
    gap: 16px;
    flex-wrap: wrap;
    margin-top: 32px;
}

/* Centred variant — for pages without a split image */
.integration-badges.center {
    justify-content: center;
}

/* Individual badge pill — use <span> not <a>, no links */
.integration-badge {
    border: 1px solid var(--border-light);
    padding: 12px 24px;
    border-radius: 8px;
    background: var(--white);
    font-family: 'Montserrat', sans-serif;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--text-dark);
}

/* Image column */
.integration-image img {
    width: 100%;
    border-radius: 16px;
    box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
    display: block;
}

@media (max-width: 992px) {
    .integration-split {
        grid-template-columns: 1fr;
        gap: 40px;
    }

    .integration-image {
        order: -1;
    }
}

/* ── END Section K ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section L: Content Component Classes
   Classes previously missing or defined as inline styles.
   Now canonical here for all solutions pages.

   v1.2  May 2026   Added Section L. Covers:
                    - .callout-box (highlighted prose block)
                    - .proof-sector-pill (case study tag)
                    - .proof-stat-value / .proof-stat-label
                    - .pillar-link (standalone link — outside pillar-card)
                    - .section-intro (large lead paragraph)
                    - .img-float-right / .img-float-left (floated images)
                    - .img-fluid / .img-rounded (image utilities)
                    - .hide-mobile (responsive visibility)
   ============================================================ */

/* ── L1. Callout box
   Highlighted prose block within a section — for key statements,
   platform descriptions, or important single-focus callouts.
   Max-width keeps it from stretching too wide on large screens. ── */
.callout-box {
    background: var(--bg-light);
    border: 1px solid var(--border-light);
    border-left: 4px solid var(--page-accent, var(--primary-blue));
    border-radius: 0 12px 12px 0;
    padding: 36px 40px;
    max-width: 860px;
    margin-top: 40px;
}

.callout-box h3 {
    font-family: 'Montserrat', sans-serif;
    font-size: 20px;
    font-weight: 700;
    color: var(--text-dark);
    margin-bottom: 14px;
}

.callout-box p {
    font-size: 16px;
    color: var(--text-gray);
    line-height: 1.7;
    margin-bottom: 14px;
}

.callout-box p:last-child {
    margin-bottom: 0;
}

/* ── L2. Proof card components
   Used inside .proof-grid > .card on solution pages.
   Replaces the inline-styled flex split that previously
   used style="font-size:36px; font-weight:800" etc.    ── */
.proof-sector-pill {
    display: inline-block;
    font-family: 'Montserrat', sans-serif;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    background: rgba(0, 86, 179, 0.08);
    color: var(--primary-blue);
    padding: 4px 10px;
    border-radius: 4px;
    margin-bottom: 16px;
}

.proof-stat-value {
    font-family: 'Montserrat', sans-serif;
    font-size: 40px;
    font-weight: 800;
    color: var(--page-accent, var(--primary-blue));
    line-height: 1;
    margin: 20px 0 6px;
    display: block;
}

.proof-stat-label {
    font-size: 13px;
    color: var(--text-light);
    margin-bottom: 20px;
    display: block;
}

/* ── L3. Pillar link — standalone "Explore →" anchor
   Used outside of .pillar-card (e.g. inside .card or .callout-box).
   The full .pillar-link inside .pillar-card is already in Section D. ── */
.pillar-link {
    font-family: 'Montserrat', sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: var(--page-accent, var(--primary-blue));
    text-decoration: none;
    display: inline-block;
    margin-top: 8px;
    transition: color 0.2s;
}

.pillar-link:hover {
    color: var(--dark-blue);
    text-decoration: underline;
}

/* ── L4. Section intro
   Large lead paragraph sitting below an H2, wider than body text.
   Used on landed-home and systems deep-dive pages.               ── */
.section-intro {
    font-size: 17px;
    color: var(--text-gray);
    line-height: 1.7;
    max-width: 800px;
    margin-bottom: 24px;
}

/* ── L5. Floated images
   Used on landed-home-security-systems.html and other long-form
   solution pages. Floats image to the right with text wrapping.
   .clearfix on the parent ensures the section clears the float. ── */
.img-float-right {
    float: right;
    width: 42%;
    max-width: 480px;
    margin: 0 0 24px 40px;
    border-radius: 12px;
    display: block;
}

.img-float-left {
    float: left;
    width: 42%;
    max-width: 480px;
    margin: 0 40px 24px 0;
    border-radius: 12px;
    display: block;
}

.clearfix::after {
    content: '';
    display: table;
    clear: both;
}

@media (max-width: 768px) {

    .img-float-right,
    .img-float-left {
        float: none;
        width: 100%;
        max-width: 100%;
        margin: 0 0 24px 0;
    }
}

/* ── L6. Image utilities
   .img-fluid — responsive full-width image
   .img-rounded — 12px border-radius                             ── */
.img-fluid {
    width: 100%;
    height: auto;
    display: block;
}

.img-rounded {
    border-radius: 12px;
}

/* ── L7. Visibility utility
   .hide-mobile — hides element below 768px.
   Used on image columns in two-column layouts where the image
   is decorative and layout collapses to single column on mobile. ── */
.hide-mobile {
    display: block;
}

@media (max-width: 768px) {
    .hide-mobile {
        display: none !important;
    }
}

/* ── L8. Card image wrap
   Used inside .card when a full-bleed top image is needed without
   the .rel-card-img bleed calculation. Sits above .card-body.
   Default aspect ratio 16:9. Square variant via --square modifier. ── */
.card-img-wrap {
    width: calc(100% + 56px);
    margin: -36px -28px 0 -28px;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    flex-shrink: 0;
}

.card-img-wrap--square {
    aspect-ratio: 1 / 1;
}

.card-img-wrap img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.card-body {
    padding-top: 24px;
    flex-grow: 1;
    display: flex;
    flex-direction: column;
}

.card-body h3 {
    font-size: 18px;
    margin-bottom: 12px;
    color: var(--primary-blue);
}

.card-body p {
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.7;
    margin-bottom: 16px;
}

.card-body ul {
    list-style: none;
    padding: 0;
    margin: 0;
    margin-top: auto;
}

.card-body ul li {
    font-size: 13px;
    color: var(--text-gray);
    padding: 5px 0 5px 16px;
    position: relative;
    border-top: 1px solid var(--border-light);
    line-height: 1.6;
}

.card-body ul li::before {
    content: '→';
    position: absolute;
    left: 0;
    color: var(--page-accent, var(--primary-blue));
    font-size: 11px;
    top: 6px;
}

/* ── L9. Stat bar
   Horizontal progress bar with label and value.
   Used in impact/results cards on solution pages.
   Only the fill width is set via inline style="width:X%;" — 
   all other presentation is handled here.                         ── */
.stat-bar-group {
    display: flex;
    flex-direction: column;
    gap: 20px;
    margin-top: 16px;
}

.stat-bar-item {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.stat-bar-label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 13px;
    font-weight: 600;
    color: var(--text-dark);
}

.stat-bar-value {
    font-family: 'Montserrat', sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: var(--page-accent, var(--primary-blue));
}

.stat-bar-track {
    height: 6px;
    background: var(--border-light);
    border-radius: 3px;
    overflow: hidden;
}

.stat-bar-fill {
    height: 100%;
    background: var(--page-accent, var(--primary-blue));
    border-radius: 3px;
    transition: width 0.6s ease;
}

/* ── END Section L ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section M: Card & Layout Utilities
   Classes introduced by improve-visitor-management rebuild.

   v1.3  May 2026   Added Section M:
                    .card-emoji — large emoji icon above card h3.
                    .card-img-placeholder — fallback when no hero
                    image exists; shows icon + label in bg-light.
                    .impact-list, .impact-list-label — styled
                    outcome list used in proof/result sections.
                    .outcome-stat-grid, .outcome-stat,
                    .outcome-stat-value — 2-up mini stat boxes.
                    .trust-badge-row, .trust-badge — inline
                    credential pills for trust reinforcement strips.
   ============================================================ */

/* ── M1. Card emoji
   Large emoji displayed above the card H3.
   Use a plain text emoji inside a <div class="card-emoji">.    ── */
.card-emoji {
    font-size: 32px;
    line-height: 1;
    margin-bottom: 16px;
    display: block;
}

/* ── M2. Card image placeholder
   Used when a card should have a top image but none exists yet.
   Maintains the same visual weight as .card-img-wrap.            ── */
.card-img-placeholder {
    background: var(--bg-light);
    display: flex;
    align-items: center;
    justify-content: center;
}

.card-img-placeholder-inner {
    text-align: center;
    padding: 24px;
}

.card-img-placeholder-icon {
    font-size: 48px;
    display: block;
    margin-bottom: 8px;
}

.card-img-placeholder-inner p {
    font-size: 12px;
    color: var(--text-light);
    margin: 0;
}

/* ── M3. Impact list
   Styled outcome/result list used in proof sections.
   Pairs with .impact-list-label as a small heading above it.    ── */
.impact-list-label {
    font-family: 'Montserrat', sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: var(--text-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 16px;
    display: block;
}

.impact-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.impact-list li {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.6;
    padding: 10px 0 10px 20px;
    border-bottom: 1px solid var(--border-light);
    position: relative;
}

.impact-list li:last-child {
    border-bottom: none;
}

.impact-list li::before {
    content: '✓';
    position: absolute;
    left: 0;
    color: var(--page-accent, var(--primary-blue));
    font-weight: 700;
    font-size: 13px;
}

/* Used inside .callout-box — tighter spacing variant */
.callout-box .impact-list li {
    font-size: 13px;
    padding: 8px 0 8px 20px;
}

/* ── M4. Outcome stat grid
   2-up mini stat boxes used in proof/result sections.
   Shows a bold headline value + short descriptor label.          ── */
.outcome-stat-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-top: 28px;
}

.outcome-stat {
    background: var(--bg-light);
    border: 1px solid var(--border-light);
    border-radius: 10px;
    padding: 20px;
}

.outcome-stat-value {
    display: block;
    font-family: 'Montserrat', sans-serif;
    font-size: 18px;
    font-weight: 700;
    color: var(--page-accent, var(--primary-blue));
    margin-bottom: 4px;
}

.outcome-stat p {
    font-size: 13px;
    color: var(--text-light);
    margin: 0;
    line-height: 1.4;
}

@media (max-width: 480px) {
    .outcome-stat-grid {
        grid-template-columns: 1fr;
    }
}

/* ── M5. Trust badge row
   Inline credential pills for trust reinforcement sections.
   Replaces inline flex + font-family + letter-spacing styles.    ── */
.trust-badge-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 32px;
}

.trust-badge {
    font-family: 'Montserrat', sans-serif;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--page-accent, var(--primary-blue));
    background: rgba(0, 86, 179, 0.07);
    border: 1px solid rgba(0, 86, 179, 0.15);
    border-radius: 4px;
    padding: 6px 14px;
}

/* ── M6. Card featured variant
   Highlighted card with primary-blue border and tinted background.
   Used for recommended or spotlight cards within a grid.
   Apply as a modifier: <div class="card card--featured">         ── */
.card--featured {
    border: 2px solid var(--page-accent, var(--primary-blue)) !important;
    background: #f0f7ff !important;
}

.card--featured .card-body h3 {
    color: var(--page-accent, var(--primary-blue));
}

.card--featured.card-clickable:hover {
    background: var(--page-accent, var(--primary-blue)) !important;
    color: #fff;
}

.card--featured.card-clickable:hover h3,
.card--featured.card-clickable:hover p {
    color: rgba(255, 255, 255, 0.95);
}

.card--featured.card-clickable:hover .pillar-link {
    color: #fff;
}

/* ── M7. Stat bar danger variant
   Red fill for declining metrics (e.g. spare part availability).
   Apply as modifier on .stat-bar-fill:
   <div class="stat-bar-fill stat-bar-fill--danger">              ── */
.stat-bar-fill--danger {
    background: #e53e3e !important;
}

/* ── END Section M ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section N: New Build & Construction Classes
   Classes introduced by new-build.html rebuild.

   v1.4  May 2026   Added Section N:
                    .solution-lifecycle (desktop grid definition —
                    previously only had responsive overrides).
                    .lifecycle-step, .lifecycle-num, .lifecycle-label
                    — construction stage step with accent outline circle.
                    .rel-card-header — flex row for card title + badge
                    inside a .rel-card (replaces inline div pattern).
                    .checklist-grid, .checklist-item, .checklist-num,
                    .checklist-item--wide — 6-col masonry-style grid
                    for architect checklist and FAQ cards.
   ============================================================ */

/* ── N1. Solution lifecycle grid
   Desktop definition was missing — only responsive overrides existed.
   4-col equal grid, centre-aligned text per step.                ── */
.solution-lifecycle {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 24px;
    margin-top: 48px;
    text-align: center;
}

/* ── N2. Lifecycle step
   Numbered construction stage with accent outline circle.
   Used inside .solution-lifecycle on new-build page.             ── */
.lifecycle-step {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.lifecycle-num {
    width: 50px;
    height: 50px;
    min-width: 50px;
    border: 2px solid var(--page-accent, var(--primary-blue));
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 16px;
    font-size: 22px;
    font-weight: 800;
    color: var(--page-accent, var(--primary-blue));
    font-family: 'Montserrat', sans-serif;
    flex-shrink: 0;
}

.lifecycle-label {
    font-family: 'Montserrat', sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: var(--text-dark);
    margin-bottom: 8px;
    text-align: center;
}

.lifecycle-step p:not(.lifecycle-label) {
    font-size: 13px;
    color: var(--text-gray);
    line-height: 1.6;
    text-align: center;
    margin: 0;
}

/* ── N3. Rel-card header
   Flex row holding the card title + pillar-badge pill.
   Used inside .rel-card on new-build Section 3.
   Replaces the inline div with justify-content:space-between.    ── */
.rel-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 12px;
}

.rel-card-header h3 {
    margin: 0;
    font-size: 18px;
    color: var(--text-dark);
    line-height: 1.3;
}

/* ── N4. Checklist grid
   6-column grid where cards span 2 or 3 columns.
   Standard items: span 2 (3 across). Wide items: span 3 (2 across).
   Used for architect checklist and FAQ on new-build page.        ── */
.checklist-grid {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 24px;
}

/* Standard item — spans 2 of 6 cols (3 cards per row) */
.checklist-item {
    grid-column: span 2;
    display: flex;
    gap: 20px;
    align-items: flex-start;
}

/* Wide item — spans 3 of 6 cols (2 cards per row) */
.checklist-item--wide {
    grid-column: span 3;
}

.checklist-item.checklist-item--wide {
    display: flex;
    gap: 20px;
    align-items: flex-start;
}

.checklist-num {
    flex: 0 0 44px;
    width: 44px;
    height: 44px;
    min-width: 44px;
    background: var(--page-accent, var(--primary-blue));
    color: #fff;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-family: 'Montserrat', sans-serif;
    font-size: 16px;
    line-height: 1;
    flex-shrink: 0;
}

.checklist-item h3,
.checklist-item--wide h3 {
    margin-top: 0;
    margin-bottom: 8px;
}

/* FAQ cards in checklist-grid (no .checklist-item — just span) */
.checklist-grid .card:not(.checklist-item):not(.checklist-item--wide) {
    grid-column: span 2;
}

.checklist-grid .card.checklist-item--wide:not(.checklist-item) {
    grid-column: span 3;
}

/* ── Responsive ── */
@media (max-width: 992px) {
    .solution-lifecycle {
        grid-template-columns: repeat(2, 1fr);
    }

    .checklist-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .checklist-item,
    .checklist-item--wide,
    .checklist-grid .card:not(.checklist-item):not(.checklist-item--wide),
    .checklist-grid .card.checklist-item--wide:not(.checklist-item) {
        grid-column: span 1;
    }
}

@media (max-width: 768px) {
    .solution-lifecycle {
        grid-template-columns: 1fr;
    }

    .checklist-grid {
        grid-template-columns: 1fr;
    }
}

/* ── END Section N ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section O: Dark Interstitial Section
   Used on residential.html and commercial.html for the
   "See It In Practice" band between content sections.

   v1.5  May 2026   Added Section O:
                    .sv-section-dark — mid-blue band (#2d4a6b)
                    with white text, 72px vertical padding.
                    Replaces inline style="background:#2d4a6b;
                    padding:72px 0;" on interstitial sections.
                    .sv-section-dark h2 — white heading with
                    clamped size matching original inline style.
                    .sv-section-dark .subtitle — muted white text.
   ============================================================ */

.sv-section-dark {
    background: #2d4a6b;
    padding: 72px 0;
    color: #fff;
}

.sv-section-dark h2 {
    font-family: 'Montserrat', sans-serif;
    font-size: clamp(22px, 3vw, 32px);
    font-weight: 700;
    color: #ffffff;
    margin: 16px 0 20px;
    line-height: 1.3;
}

.sv-section-dark .subtitle {
    font-size: 17px;
    color: rgba(255, 255, 255, 0.75);
    max-width: 560px;
    margin: 0 auto 36px;
    line-height: 1.7;
}

.sv-section-dark .eyebrow-light {
    color: rgba(255, 255, 255, 0.6);
}

/* ── END Section O ──────────────────────────────────────────── */

/* ============================================================
   sv-solutions.css — Section P: Commercial & Persona Page Classes
   Classes introduced by retail, hotel, office, mcst,
   security-contractors, managing-agents, day-care, aged-care.

   v1.6  May 2026   Added Section P:
                    .split-grid — 2-col image+text layout replacing
                    retail-grid-2/hotel-grid-2/office-grid-2.
                    .feature-box-grid — 2/3/4-col grid of white
                    feature boxes replacing inline white-bg divs
                    with strong title + paragraph.
                    .feature-box — individual white feature box.
                    .feature-box__title — uppercase label above text.
                    .numbered-label — large accent number (01/02/03)
                    above card h3 in process step cards.
                    .bordered-heading — h3 with accent left border
                    used in mcst/managing-agents scope lists.
                    .proof-stat-grid — inline stat callout grid
                    inside a bordered bg-light container.
                    .proof-stat-item — individual stat with bold
                    value + descriptor text.
                    .solution-proof-card — desktop flex definition
                    for the proof split card (image + text).
                    .stat-number / .stat-label — large text stat
                    used in day-care proof section.
                    .trust-callout — centred trust card replacing
                    inline card with max-width:860px + text-center.
                    .callout-highlight — inline blue accent box
                    replacing style="background:var(--primary-blue);
                    color:#fff; padding:24px; border-radius: 8px;
                    .sv-trust-note — slim editorial note below hero.
                    Hero/mobile background rules for retail, hotel,
                    office, mcst, security-contractors, managing-agents.
   ============================================================ */

/* ── P1. Hero background rules
   Retail already had hero-retail + cta-retail in its <style> block.
   Now canonical here. All six heroes get desktop + mobile swap.   ── */
.hero-retail {
    background: linear-gradient(rgba(14, 26, 43, 0.72), rgba(14, 26, 43, 0.72)), url('/images/solutions/solution-commercial-retail-hero.webp') no-repeat center/cover;
}

@media (max-width: 768px) {
    .hero-retail {
        background-position: 70% center;
    }
}

.hero-hotel {
    background: linear-gradient(rgba(14, 26, 43, 0.72), rgba(14, 26, 43, 0.72)), url('/images/solutions/solution-commercial-hotel-hero.png') no-repeat center/cover;
}

@media (max-width: 768px) {
    .hero-hotel {
        background-position: 70% center;
    }
}

.hero-office {
    background: linear-gradient(rgba(14, 26, 43, 0.72), rgba(14, 26, 43, 0.72)), url('/images/solutions/solution-commercial-office-hero.webp') no-repeat center/cover;
}

.hero-mcst {
    background: linear-gradient(rgba(14, 26, 43, 0.75), rgba(14, 26, 43, 0.75)), url('/images/solutions/solution-condominiums-mcst-hero.webp') no-repeat center/cover;
}

.hero-security-contractors {
    background: linear-gradient(rgba(14, 26, 43, 0.75), rgba(14, 26, 43, 0.75)), url('/images/solutions/solution-condominiums-security-contractors-hero.webp') no-repeat center/cover;
}

.hero-managing-agents {
    background: linear-gradient(rgba(14, 26, 43, 0.75), rgba(14, 26, 43, 0.75)), url('/images/solutions/solution-condominiums-managing-agents-hero.webp') no-repeat center/cover;
}

/* Mobile swap — day-care and aged-care */
.hero-day-care {
    background: #0e1a2b url('/images/solutions/solution-healthcare-daycare-hero.webp') no-repeat center/cover;
}

.hero-aged-care {
    background: #0e1a2b url('/images/solutions/solution-healthcare-aged-care-hero.webp') no-repeat center/cover;
}

/* ── P2. Split grid
   2-col image + text layout. Replaces retail/hotel/office-grid-2
   and the inline display:grid 1fr 1fr pattern.
   Align-center variant available via .split-grid.align-center.  ── */
.split-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
}

.split-grid.align-center {
    align-items: center;
}

.split-grid img {
    width: 100%;
    border-radius: 16px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
    display: block;
}

@media (max-width: 768px) {
    .split-grid {
        grid-template-columns: 1fr;
        gap: 32px;
    }

    /* Swap image below text on mobile */
    .split-grid .mobile-order-1 {
        order: 1;
    }

    .split-grid .mobile-order-2 {
        order: 2;
    }
}

/* ── P3. Problem grid
   2-col grid for core problem cards. Used on retail/hotel/office
   Section 2. Replaces .problem-grid from page <style> blocks.   ── */
.problem-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 32px;
    margin-top: 48px;
}

@media (max-width: 768px) {
    .problem-grid {
        grid-template-columns: 1fr;
        gap: 24px;
    }
}

/* ── P4. Feature box grid + individual feature box
   White rounded boxes with uppercase label + description.
   Used in retail/hotel/office Section 3 "bridge" sections.
   Replaces inline div with background:#fff; padding:32px etc.   ── */
.feature-box-grid {
    display: grid;
    gap: 24px;
}

.feature-box-grid--3 {
    grid-template-columns: repeat(3, 1fr);
}

.feature-box-grid--4 {
    grid-template-columns: repeat(4, 1fr);
}

.feature-box {
    background: #fff;
    padding: 32px;
    border-radius: 12px;
    border: 1px solid var(--border-light);
}

.feature-box__title {
    display: block;
    margin-bottom: 12px;
    color: var(--page-accent, var(--primary-blue));
    font-family: 'Montserrat', sans-serif;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.feature-box p {
    font-size: 15px;
    color: var(--text-gray);
    margin: 0;
    line-height: 1.6;
}

@media (max-width: 992px) {

    .feature-box-grid--3,
    .feature-box-grid--4 {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {

    .feature-box-grid--3,
    .feature-box-grid--4 {
        grid-template-columns: 1fr;
    }
}

/* ── P5. Numbered label
   Large accent number (01 / 02 / 03) above a card h3.
   Replaces inline div with font-size:24px; font-weight:700;
   color:var(--page-accent) in mcst/security-contractors/
   managing-agents process step cards.                            ── */
.numbered-label {
    font-family: 'Montserrat', sans-serif;
    font-size: 24px;
    font-weight: 700;
    color: var(--page-accent, var(--primary-blue));
    margin-bottom: 12px;
    display: block;
    line-height: 1;
}

/* ── P6. Bordered heading
   H3 with left accent border. Used in mcst/managing-agents
   "What We Typically Help Review" scope lists.                   ── */
.bordered-heading {
    border-left: 4px solid var(--page-accent, var(--primary-blue));
    padding-left: 15px;
    margin-bottom: 12px;
}

/* ── P7. Proof stat grid
   Bordered bg-light container with 2/3-col inline stat items.
   Replaces inline grid+border+padding+border-radius containers
   in retail/hotel/office proof sections.                         ── */
.proof-stat-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 32px;
    border: 1px solid var(--border-light);
    padding: 32px;
    border-radius: 12px;
    background: var(--bg-light);
    margin-top: 32px;
}

.proof-stat-grid--flex {
    display: flex;
    gap: 32px;
    flex-wrap: wrap;
    border: 1px solid var(--border-light);
    padding: 32px;
    border-radius: 12px;
    background: var(--bg-light);
    margin-top: 32px;
}

.proof-stat-item {
    flex: 1;
    min-width: 160px;
}

.proof-stat-item strong {
    display: block;
    font-family: 'Montserrat', sans-serif;
    font-size: 24px;
    font-weight: 800;
    color: var(--page-accent, var(--primary-blue));
    margin-bottom: 4px;
}

@media (max-width: 768px) {
    .proof-stat-grid {
        grid-template-columns: 1fr;
        gap: 16px;
    }
}

/* ── P8. Solution proof card — desktop definition
   Flex split: text left, image right. Was inline only.
   Responsive override already existed in Section G.              ── */
.solution-proof-card {
    max-width: 960px;
    margin: 40px auto 0;
    display: flex;
    gap: 40px;
    align-items: center;
    flex-wrap: wrap;
}

.solution-proof-card>div {
    flex: 1;
    min-width: 280px;
}

.solution-proof-card img {
    width: 100%;
    border-radius: 12px;
    aspect-ratio: 4 / 3;
    object-fit: cover;
}

/* ── P9. Stat number / stat label
   Large text stat used in day-care proof cards.
   Replaces the undefined .stat-number / .stat-label classes.    ── */
.stat-number {
    font-family: 'Montserrat', sans-serif;
    font-size: 28px;
    font-weight: 800;
    color: var(--page-accent, var(--primary-blue));
    margin-bottom: 8px;
    display: block;
    line-height: 1.2;
}

.stat-label {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.6;
}

/* ── P10. Trust callout card
   Centred trust statement inside a card. Replaces inline
   card with max-width:860px; margin:0 auto; text-align:center.  ── */
.trust-callout {
    max-width: 860px;
    margin: 0 auto;
    text-align: center;
    padding: 48px;
}

.trust-callout h2 {
    font-size: clamp(20px, 2.5vw, 28px) !important;
    margin-bottom: 16px !important;
}

.trust-callout p {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    margin: 0;
}

/* ── P11. Callout highlight
   Inline accent box — blue background with white text.
   Replaces inline style="background:var(--primary-blue);
   color:#fff; padding:24px; border-radius: 8px;                 ── */
.callout-highlight {
    background: var(--page-accent, var(--primary-blue));
    color: #fff;
    padding: 24px 28px;
    border-radius: 8px;
    display: inline-block;
}

.callout-highlight p {
    font-family: 'Montserrat', sans-serif;
    font-weight: 600;
    margin: 0;
    color: #fff;
    font-size: 15px;
}

/* ── P12. sv-trust-note
   Slim editorial note below hero on retail/hotel pages.
   Replaces the bare .sv-trust-note div with no styling.         ── */
.sv-trust-note {
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-light);
    padding: 10px 0;
    font-family: 'Inter', sans-serif;
    font-size: 13px;
    color: var(--text-light);
    text-align: center;
}

/* ── END Section P ──────────────────────────────────────────── */
/* ============================================================
   SECTION Q: Solutions Sector Hub — Inline Style Extraction
   Added June 2026

   Covers recurring inline patterns across all 8 sector hub pages:
   - .systems-deepdive-card   Deep-dive link card (all 8 pages)
   - .sol-grid-3              3-column section grid
   - .sol-grid-4              4-column section grid
   - .sol-grid-4-auto         Auto-fit 4-col (min 260px)
   - .sol-card-flush          Card with flush top image
   - .sol-card-flush-img      Image inside flush card (standard height)
   - .sol-card-flush-img--lg  Taller image variant
   - .sol-card-body           Padded body inside flush card
   - .sol-card-link           CTA link inside flush card
   - .sol-step-num-lg         Large grey step number (data-centres)
   - .sol-stat-display        Large accent stat (data-centres)
   - .sol-checklist-split     2-col checklist/guide download box
   - .sol-checklist-img       Image column inside checklist split
   - .sol-badge-grid          4-col compliance badge grid
   - .sol-badge-item          Individual compliance badge card
   - .sol-approach-card       Numbered approach step card (industrial)
   - .sol-approach-num        Numbered label inside approach card
   - .sol-mistake-list        Risk/mistake list with icon marker
   - .sol-mistake-item        Individual mistake list item
   - .sol-mistake-icon        Icon/marker inside mistake item
   - .sol-section-intro-wrap  Constrained intro paragraph wrapper
   ============================================================ */


/* ── Q1. Systems Deep-Dive Card
   Full-width link card: image left (340px), text right.
   Appears on every sector hub page as the deep-dive CTA.
   The mobile override (flex-direction:column) was previously
   hardcoded in condominiums.html style block — now lives here. ── */

.systems-deepdive-card {
    display: flex;
    gap: 40px;
    align-items: center;
    background: var(--white, #fff);
    border-radius: 12px;
    padding: 20px;
    text-decoration: none;
    color: inherit;
    border: 1px solid var(--border-light, #E8EAED);
    transition: box-shadow 0.2s ease;
}

.systems-deepdive-card:hover {
    box-shadow: 0 8px 32px rgba(0, 86, 179, 0.10);
}

.systems-deepdive-card__img {
    flex: 0 0 340px;
    height: 240px;
    overflow: hidden;
    border-radius: 8px;
    flex-shrink: 0;
}

.systems-deepdive-card__img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.systems-deepdive-card__body {
    flex: 1;
    padding: 20px 20px 20px 0;
}

.systems-deepdive-card__body h3 {
    margin: 12px 0 16px;
    font-size: clamp(18px, 2vw, 24px);
    line-height: 1.3;
    color: var(--text-dark);
}

.systems-deepdive-card__body p {
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.7;
    margin-bottom: 24px;
}

.systems-deepdive-card__cta {
    color: var(--primary-blue);
    font-weight: 700;
    font-size: 15px;
    display: inline-block;
}

@media (max-width: 768px) {
    .systems-deepdive-card {
        flex-direction: column;
    }

    .systems-deepdive-card__img {
        flex: 0 0 200px;
        width: 100%;
        height: 200px;
    }

    .systems-deepdive-card__body {
        padding: 0;
    }
}


/* ── Q2. Section Grids
   Standard multi-column grids for solution sections.
   Replace inline display:grid declarations.               ── */

/* 3-column equal grid — gap 32px */
.sol-grid-3 {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 32px;
    margin-top: 48px;
}

/* 4-column equal grid — gap 32px */
.sol-grid-4 {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    margin-top: 48px;
}

/* 4-column auto-fit — wraps at 260px min */
.sol-grid-4-auto {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 24px;
    margin-top: 48px;
}

/* 2-column equal grid — gap 28px (personas, pillars) */
.sol-grid-2-pillars {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 28px;
    margin-top: 48px;
}

@media (max-width: 900px) {

    .sol-grid-3,
    .sol-grid-4,
    .sol-grid-4-auto,
    .sol-grid-2-pillars {
        grid-template-columns: 1fr 1fr;
    }
}

@media (max-width: 600px) {

    .sol-grid-3,
    .sol-grid-4,
    .sol-grid-4-auto,
    .sol-grid-2-pillars {
        grid-template-columns: 1fr;
    }
}


/* ── Q3. Flush Card (card with full-bleed top image)
   Replaces: card card-clickable style="padding:0; overflow:hidden"
   Used on institutions (3×), commercial (3×), data-centres (3×). ── */

.sol-card-flush {
    background: var(--white);
    border: 1px solid var(--border-light);
    border-radius: 12px;
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    display: flex;
    flex-direction: column;
    transition: box-shadow 0.2s ease, transform 0.2s ease;
    cursor: pointer;
}

.sol-card-flush:hover {
    box-shadow: 0 8px 24px rgba(0, 86, 179, 0.10);
    transform: translateY(-3px);
}

/* Standard flush card image — 200px */
.sol-card-flush-img {
    width: 100%;
    height: 200px;
    object-fit: cover;
    display: block;
    flex-shrink: 0;
}

/* Taller variant — 220px (institutions) */
.sol-card-flush-img--lg {
    height: 220px;
}

.sol-card-body {
    padding: 32px;
    flex: 1;
    display: flex;
    flex-direction: column;
}

.sol-card-body h3 {
    font-size: 18px;
    font-weight: 600;
    color: var(--text-dark);
    margin-bottom: 12px;
    line-height: 1.4;
}

.sol-card-body p {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    margin-bottom: 20px;
    flex: 1;
}

.sol-card-link {
    color: var(--primary-blue);
    font-weight: 700;
    font-size: 15px;
    text-decoration: none;
    display: inline-block;
    margin-top: auto;
}

.sol-card-link:hover {
    text-decoration: underline;
}

/* Card contrast — flush cards follow section background rules */
.sv-section-grey .sol-card-flush {
    background: var(--white);
}

.sv-section-white .sol-card-flush {
    background: var(--bg-light, #EEF2F7);
}


/* ── Q4. Large Step Number
   Large grey sequential number above card heading.
   Used on data-centres process steps (01–04).
   Replaces: style="font-size:40px; font-weight:700;
             color:#d1d5db; line-height:1; margin-bottom:16px" ── */

.sol-step-num-lg {
    font-size: 40px;
    font-weight: 700;
    color: #d1d5db;
    line-height: 1;
    margin-bottom: 16px;
    font-family: 'Montserrat', sans-serif;
    display: block;
}


/* ── Q5. Large Stat Display
   Large accent-coloured stat for proof sections.
   Replaces: style="font-size:48px; font-weight:700;
             color:var(--page-accent); font-family:Montserrat"
   Uses --primary-blue directly (page-accent standardised).  ── */

.sol-stat-display {
    font-size: 48px;
    font-weight: 700;
    color: var(--primary-blue);
    font-family: 'Montserrat', sans-serif;
    line-height: 1;
    margin-bottom: 8px;
    display: block;
}

.sol-stat-display-label {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.6;
}


/* ── Q6. Checklist Split
   Two-column box: text/checklist left, image right.
   Appears on commercial, institutions, healthcare guide download.
   Replaces: style="background:var(--white); border-radius:24px;
             padding:60px; display:grid;
             grid-template-columns:1fr 1fr; gap:60px;
             align-items:center"                             ── */

.sol-checklist-split {
    background: var(--white);
    border-radius: 24px;
    padding: 60px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 60px;
    align-items: center;
}

.sol-checklist-split p {
    margin-bottom: 28px;
    color: var(--text-gray);
    font-size: 15px;
    line-height: 1.7;
}

.sol-checklist-img {
    text-align: center;
}

.sol-checklist-img img {
    max-width: 100%;
    filter: drop-shadow(0 20px 40px rgba(0, 0, 0, 0.10));
}

@media (max-width: 768px) {
    .sol-checklist-split {
        grid-template-columns: 1fr;
        padding: 32px;
        gap: 32px;
    }

    .sol-checklist-img {
        display: none;
    }
}


/* ── Q7. Compliance Badge Grid
   4-column grid of small bordered badge cards.
   Appears on institutions and healthcare compliance sections.
   Replaces: style="display:grid;
             grid-template-columns:repeat(4,1fr);
             gap:20px; margin-top:40px"                      ── */

.sol-badge-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    margin-top: 40px;
}

.sol-badge-item {
    padding: 24px;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    background: var(--white);
}

.sol-badge-item strong {
    display: block;
    margin-bottom: 8px;
    font-family: 'Montserrat', sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: var(--text-dark);
    line-height: 1.4;
}

.sol-badge-item p {
    font-size: 13px;
    color: var(--text-gray);
    line-height: 1.6;
    margin: 0;
}

@media (max-width: 900px) {
    .sol-badge-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 600px) {
    .sol-badge-grid {
        grid-template-columns: 1fr;
    }
}


/* ── Q8. Numbered Approach Card
   Card with bold numbered label (01. / 02. / 03.) above H3.
   Used on industrial and commercial approach/process sections.
   Replaces: style="background:var(--bg-light);
             border:none; padding:40px"
             + style="font-family:'Montserrat'; font-weight:800;
               color:var(--primary-blue); margin-bottom:12px"  ── */

.sol-approach-card {
    background: var(--bg-light, #EEF2F7);
    border: none;
    border-radius: 12px;
    padding: 40px;
}

.sol-approach-num {
    font-family: 'Montserrat', sans-serif;
    font-weight: 800;
    font-size: 13px;
    color: var(--primary-blue);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 12px;
    display: block;
}

.sol-approach-card h3 {
    font-size: 18px;
    font-weight: 600;
    color: var(--text-dark);
    margin-bottom: 12px;
    line-height: 1.4;
}

.sol-approach-card p {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
    margin: 0;
}

/* Card contrast */
.sv-section-grey .sol-approach-card {
    background: var(--white);
}

.sv-section-white .sol-approach-card {
    background: var(--bg-light, #EEF2F7);
}


/* ── Q9. Mistake / Risk List
   Two-column list with coloured warning icon.
   Used on industrial "common mistakes" section.
   Replaces: style="list-style:none; padding:0"
             + style="margin-bottom:16px; display:flex; gap:12px"
             + style="color:#e11d48; font-weight:bold"       ── */

.sol-mistake-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.sol-mistake-item {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
}

.sol-mistake-icon {
    color: #e11d48;
    font-weight: 700;
    font-size: 16px;
    flex-shrink: 0;
    line-height: 1.7;
}


/* ── Q10. Checklist Tick List
   Tick list with blue ✓ marker.
   Used on commercial and institutions checklist sections.
   Replaces: style="list-style:none; padding:0; margin-bottom:32px"
             + style="margin-bottom:12px; display:flex; gap:12px"
             + style="color:var(--primary-blue)"             ── */

.sol-tick-list {
    list-style: none;
    padding: 0;
    margin: 0 0 32px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.sol-tick-list li {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.7;
}

.sol-tick-icon {
    color: var(--primary-blue);
    font-weight: 700;
    font-size: 15px;
    flex-shrink: 0;
    line-height: 1.7;
}


/* ── Q11. Section Intro Wrapper
   Constrains intro paragraph to readable max-width.
   Replaces inline max-width:760px / 800px on p or div tags.  ── */

.sol-section-intro {
    font-family: 'Inter', sans-serif;
    font-size: 17px;
    color: var(--text-gray);
    line-height: 1.7;
    max-width: 800px;
    margin-bottom: 48px;
}

/* ── Q12. section-intro line-height fix
   sv-solutions.css Section L defined section-intro at 1.8 —
   standardised to 1.7 to match site-wide line-height system.  ── */

.section-intro {
    line-height: 1.7 !important;
}


/* ── Q13. stat-label font size fix
   stat-label was 14px — raised to 15px per no-14px rule.     ── */

.stat-label {
    font-size: 15px;
    color: var(--text-gray);
    line-height: 1.6;
}


/* ── Q14. Card contrast — approach and badge cards
   Ensure correct contrast against section background.         ── */

.sv-section-grey .sol-badge-item {
    background: var(--white);
}

.sv-section-white .sol-badge-item {
    background: var(--bg-light, #EEF2F7);
    border-color: transparent;
}


/* ── END Section Q ──────────────────────────────────────────── */

/* ── Q15. stat-bar-value colour variants
   Replaces inline style="color:#0056b3" and style="color:#e53e3e"
   on stat-bar-value spans in upgrade-intercom-system and similar pages. ── */
.stat-bar-value--up {
    color: var(--primary-blue);
}

.stat-bar-value--down {
    color: #e53e3e;
}

/* ============================================================
   SECTION R: Residual Hub Page Inline Style Extraction
   Added June 2026

   - .sol-emoji-icon        Emoji block above card text
   - .sol-numbered-h3       Numbered accent heading in card
   - .sol-lifecycle-step    Centred lifecycle step column
   - .sol-lifecycle-emoji   Emoji in lifecycle step
   - .sol-stat-flex         Flex row of centred stat blocks
   - .sol-stat-item         Individual stat in flex row
   - .sol-section-bordered  Section with top/bottom border accent
   - .sol-constrained       Max-width constrained container block
   - .sol-split-2col        2-col split layout (text left, content right)
   - .sol-split-image-card  Full-bleed image+text card in split
   - .sol-split-card-img    Image inside split card
   - .sol-split-card-body   Body inside split card
   - .sol-tick-badge        Blue circle tick badge (institutions/healthcare)
   - .hero-btn-group-left   Left-aligned btn-group in hero (managed-living fix)
   ============================================================ */


/* ── R1. Emoji icon block
   Replaces: style="font-size:32px; display:block; margin-bottom:16px;" ── */
.sol-emoji-icon {
    font-size: 32px;
    display: block;
    margin-bottom: 16px;
    line-height: 1;
}


/* ── R2. Numbered accent card heading
   Replaces: h3 style="color:var(--page-accent);"
   Colour via CSS — no inline colour needed.                  ── */
.sol-numbered-h3 {
    color: var(--primary-blue);
    font-family: 'Montserrat', sans-serif;
    font-size: 18px;
    font-weight: 700;
    margin-bottom: 12px;
    line-height: 1.4;
}


/* ── R3. Lifecycle step (centred column)
   Replaces: style="text-align:center;" on div inside solution-lifecycle ── */
.sol-lifecycle-step {
    text-align: center;
}

.sol-lifecycle-emoji {
    font-size: 32px;
    margin-bottom: 16px;
    display: block;
    line-height: 1;
}

/* Fix solution-lifecycle desktop grid — was only 2-col, should be 4-col ── */
.solution-lifecycle {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    margin-top: 0;
}

@media (max-width: 900px) {
    .solution-lifecycle {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 600px) {
    .solution-lifecycle {
        grid-template-columns: 1fr;
    }
}


/* ── R4. Stat flex row (data-centres proof section)
   Replaces: style="display:flex; justify-content:center; gap:40px;
             flex-wrap:wrap; margin-bottom:32px;"              ── */
.sol-stat-flex {
    display: flex;
    justify-content: center;
    gap: 40px;
    flex-wrap: wrap;
    margin-bottom: 32px;
}

.sol-stat-item {
    text-align: center;
}


/* ── R5. Bordered section accent
   Replaces: section style="border-top:1px solid; border-bottom:1px solid"
   Used on data-centres MAS TRM callout section.              ── */
.sv-section-grey.sol-bordered {
    border-top: 1px solid var(--border-light);
    border-bottom: 1px solid var(--border-light);
}


/* ── R6. Constrained prose block
   Replaces: style="max-width:800px; margin:0 auto;"
             style="max-width:860px;" (card)
             style="max-width:900px;" (container)             ── */
.sol-constrained {
    max-width: 800px;
    margin: 0 auto;
}

.sol-constrained-sm {
    max-width: 860px;
}


/* ── R7. Split 2-col layout (commercial proof section)
   Replaces: style="display:grid; grid-template-columns:1fr 1fr;
             gap:80px; align-items:center;"                   ── */
.sol-split-2col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 80px;
    align-items: center;
}

.sol-split-2col-tight {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}

@media (max-width: 768px) {

    .sol-split-2col,
    .sol-split-2col-tight {
        grid-template-columns: 1fr;
        gap: 32px;
    }
}


/* ── R8. Image+text card (commercial)
   Replaces: style="background:#fff; padding:0; border:1px solid;
             position:relative; overflow:hidden;"             ── */
.sol-image-card {
    background: var(--white);
    padding: 0;
    border: 1px solid var(--border-light);
    border-radius: 12px;
    position: relative;
    overflow: hidden;
}

.sol-image-card-img {
    width: 100%;
    height: 280px;
    object-fit: cover;
    display: block;
}

.sol-image-card-body {
    padding: 40px;
}

.sol-image-card-body h3 {
    font-family: 'Montserrat', sans-serif;
    font-size: 18px;
    font-weight: 600;
    color: var(--text-dark);
    margin-bottom: 12px;
    line-height: 1.4;
}

/* Card contrast */
.sv-section-grey .sol-image-card {
    background: var(--white);
}

.sv-section-white .sol-image-card {
    background: var(--bg-light, #EEF2F7);
}


/* ── R9. Tick badge (institutions, healthcare)
   Replaces: style="background:var(--primary-blue); color:#fff;
             width:28px; height:28px; border-radius:50%;
             display:flex; align-items:center; justify-content:center;
             flex-shrink:0;"                                   ── */
.sol-tick-badge {
    background: var(--primary-blue);
    color: #fff;
    width: 28px;
    height: 28px;
    min-width: 28px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 14px;
    font-weight: 700;
}


/* ── R10. Left-aligned hero btn-group
   Replaces: style="justify-content:left;" on btn-group       ── */
.btn-group.btn-group-left {
    justify-content: flex-start;
}


/* ── END Section R ──────────────────────────────────────────── */

/* ── R11. Guide/cover image — constrained width ── */
.sol-guide-img {
    max-width: 300px;
    width: 100%;
}

/* ── R12. Vertical Card Stack ── */
.card-stack {
    display: flex;
    flex-direction: column;
    gap: 20px;
    margin-top: 48px;
}