body,#ai-main-content{font-family:'Open Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}
h1,h2,h3,h4,h5,h6,.wp-block-heading{font-family:'Montserrat',Georgia,serif;}
:root{--uw-heading-font:'Montserrat',Georgia,serif;--uw-body-font:'Open Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}
.wp-block-cover {
    position: relative;
    background-size: cover;
    background-position: 50%;
    min-height: 430px;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 1em;
    overflow: hidden;
    box-sizing: border-box;
}
.wp-block-cover__background,
.wp-block-cover__image-background,
.wp-block-cover__video-background {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    max-width: none;
    max-height: none;
    object-fit: cover;
}
.wp-block-cover__inner-container {
    width: 100%;
    z-index: 1;
    color: #fff;
    box-sizing: border-box;
}
.wp-block-columns {
    display: flex;
    box-sizing: border-box;
    flex-wrap: wrap;
    align-items: stretch;
}
.wp-block-column {
    flex-grow: 1;
    min-width: 0;
    word-break: break-word;
    overflow-wrap: break-word;
    box-sizing: border-box;
}
.wp-block-buttons {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75em;
    box-sizing: border-box;
}
.wp-block-button { box-sizing: border-box; }
.wp-block-button__link {
    display: inline-block;
    text-decoration: none;
    box-sizing: border-box;
    word-break: break-word;
}
.wp-block-group { box-sizing: border-box; }
.wp-block-image { box-sizing: border-box; }
.wp-block-image img { max-width: 100%; height: auto; }
.wp-block-media-text {
    display: grid;
    grid-template-columns: 50% 1fr;
    box-sizing: border-box;
}
.alignfull { width: 100%; max-width: none; }
.alignwide { max-width: 1200px; margin-left: auto; margin-right: auto; }
.has-text-align-center { text-align: center; }
.has-text-align-left { text-align: left; }
.has-text-align-right { text-align: right; }
.has-background { box-sizing: border-box; }
@media (max-width: 781px) {
    .wp-block-columns:not(.is-not-stacked-on-mobile) { flex-direction: column; }
    .wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column { flex-basis: 100% !important; width: 100%; }
    .wp-block-media-text { grid-template-columns: 1fr !important; }
}
.wp-block-button.is-style-outline > .wp-block-button__link { border-style: solid; }
:where(.wp-block-button.is-style-outline > .wp-block-button__link) { border-width: 2px; }

/* The site's Contact Form 7 form (ContactForm7). CF7's own stylesheet styles almost
   nothing, so without these the form published as bare browser-default inputs.
   :where() keeps them below anything the page sets itself. */
:where(.wpcf7) form { display: grid; gap: 14px; margin: 0; }
:where(.wpcf7) form > p { margin: 0; }
:where(.wpcf7) label { display: block; font-weight: 600; font-size: 14px; }
:where(.wpcf7) :is(input[type="text"], input[type="email"], input[type="tel"], input[type="url"],
    input[type="number"], input[type="date"], select, textarea) {
    display: block;
    width: 100%;
    margin-top: 6px;
    padding: 12px 14px;
    border: 1px solid rgba(0, 0, 0, .2);
    border-radius: 8px;
    background: #fff;
    color: #1f2937;
    font: inherit;
    box-sizing: border-box;
}
:where(.wpcf7) textarea { min-height: 140px; resize: vertical; }
:where(.wpcf7) :is(input[type="submit"], .wpcf7-submit) {
    padding: 14px 32px;
    border: 0;
    border-radius: var(--uw-btn-radius, 100px);
    background: var(--uw-primary, #1f2937);
    color: #fff;
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}
:where(.wpcf7) .wpcf7-not-valid-tip { margin-top: 4px; font-size: 13px; color: #b91c1c; }
:where(.wpcf7) .wpcf7-response-output { margin: 4px 0 0; padding: 10px 14px; border: 1px solid transparent; border-radius: 8px; }
/* What CF7's own stylesheet does, for a WordPress that does not load it — the live bridge
   plugin's canvas template did not. Without these, a submitted form showed the screen-reader
   copy of its errors above the fields, the hidden-fields fieldset as a double rule, and
   "sent" and "failed" as the same plain line. */
:where(.wpcf7) .screen-reader-response {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
    clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); border: 0; white-space: nowrap;
}
:where(.wpcf7) .hidden-fields-container,
:where(.wpcf7) form:is(.init, .resetting, .submitting) .wpcf7-response-output,
:where(.wpcf7) .wpcf7-response-output:empty { display: none; }
:where(.wpcf7) form.sent .wpcf7-response-output { border-color: #16a34a; background: #f0fdf4; color: #14532d; }
:where(.wpcf7) form:is(.invalid, .unaccepted, .payment-required) .wpcf7-response-output { border-color: #d97706; background: #fffbeb; color: #78350f; }
:where(.wpcf7) form:is(.failed, .aborted, .spam) .wpcf7-response-output { border-color: #dc2626; background: #fef2f2; color: #7f1d1d; }
.wp-block-buttons.uw-contact-actions { gap: 12px; }

/* GutenbergNormalizer::convertCovers() publishes a wp:cover as a .uw-hero group and unwraps
   the cover's inner container, which in the preview is a centred 900px column. Its
   contentSize:900px layout only takes effect through do_blocks(), which the bridge canvas
   does not run, so the column is restated here — without it the headline ran the full
   1200px on one line, and the hero's centring shrank each row to its own width. The
   24px side padding is the inner container's own. !important because a hero is also a
   full-width group, whose loose headings and paragraphs the foundation gives a 1200px box. */
html body .wp-block-group.uw-hero > :not(figure) {
    box-sizing: border-box;
    width: 100%;
    max-width: 900px !important;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: 24px !important;
    padding-right: 24px !important;
}:root { --uw-primary:#0b5d6b; --uw-secondary:#133b4f; }

/* ── RESET ── */
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
html, body { overflow-x:hidden; width:100%; }
body { font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color:#333; background:#fff; }
main { width:100%; max-width:100%; padding:0; margin:0; overflow-x:hidden; }
img { max-width:100%; display:block; }
a { text-decoration:none; }

/* ══════════════════════════════════════════════════
COVER BLOCK — Hero & CTA full width fix
══════════════════════════════════════════════════ */
.wp-block-cover,
.wp-block-cover.alignfull {
    position:relative;
    overflow:hidden;
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:500px;
    width:100% !important;
    max-width:100% !important;
    margin-left:0 !important;
    margin-right:0 !important;
    left:0 !important;
    right:0 !important;
}

/* Cover background dim */
.wp-block-cover__background {
    position:absolute;
    inset:0;
    background:#000;
    opacity:.5;
    z-index:1;
}
.has-background-dim-60 { opacity:.6 !important; }

.wp-block-cover__inner-container .wp-block-buttons {
    justify-content: center !important;
    align-items: center;
}
.wp-block-cover__inner-container .wp-block-button.is-style-outline {
    display: flex;
    justify-content: center;
}

/* Cover image — must fill full area */
.wp-block-cover__image-background {
    position:absolute !important;
    top:0 !important;
    left:0 !important;
    width:100% !important;
    height:100% !important;
    object-fit:cover !important;
    object-position:center !important;
    z-index:0 !important;
}

/* Cover inner content */
.wp-block-cover__inner-container {
    position:relative;
    z-index:2;
    width:100%;
    max-width:900px;
    margin:0 auto;
    padding:80px 24px;
    text-align:center;
}
.wp-block-cover__inner-container h1,
.wp-block-cover__inner-container h2,
.wp-block-cover__inner-container p { color:#fff; }

/* ── COVER BUTTONS ── */
/* All buttons inside cover default to white text */
.wp-block-cover .wp-block-button__link {
    color:#ffffff !important;
}
/* White background button — must show DARK text */
.wp-block-cover .wp-block-button__link[style*="background-color:#ffffff"],
.wp-block-cover .wp-block-button__link[style*="background-color:#fff"],
.wp-block-cover .wp-block-button__link[style*="background-color: #ffffff"],
.wp-block-cover .wp-block-button__link[style*="background-color: #fff"] {
    color:var(--uw-secondary) !important;
    background-color:#ffffff !important;
}

/* ══════════════════════════════════════════════════
GROUP BLOCK
══════════════════════════════════════════════════ */
.wp-block-group { width:100%; display:block; }
.wp-block-group.alignfull { width:100%; }

/* ══════════════════════════════════════════════════
COLUMNS — nowrap fix (beats WP CDN)
══════════════════════════════════════════════════ */
html body .wp-block-columns,
html body .wp-block-columns:not(.is-not-stacked-on-mobile) {
    display:flex !important;
    flex-wrap:nowrap !important;
    gap:60px !important;
    align-items:center;
    max-width:1200px;
    margin:0 auto;
    padding:0 60px;
}
html body .wp-block-columns.alignwide { max-width:1200px; }
html body .wp-block-columns.are-vertically-aligned-center { align-items:center !important; }
html body .wp-block-column { flex:1 !important; min-width:0 !important; }
html body .wp-block-column[style*="flex-basis:50%"] { flex:0 0 calc(50% - 30px) !important; }
html body .wp-block-column[style*="flex-basis:55%"] { flex:0 0 calc(55% - 30px) !important; }
html body .wp-block-column[style*="flex-basis:45%"] { flex:0 0 calc(45% - 30px) !important; }
html body .wp-block-column[style*="flex-basis:40%"] { flex:0 0 calc(40% - 30px) !important; }

/* ══════════════════════════════════════════════════
IMAGES
══════════════════════════════════════════════════ */
.wp-block-image { width:100%; }
.wp-block-image img { width:100%; height:auto; border-radius:10px; object-fit:cover; }
.wp-block-image.alignwide { max-width:1200px; margin:0 auto; padding:0 60px; }
.wp-block-image.alignwide img { max-height:500px; object-fit:cover; border-radius:0; }

/* ══════════════════════════════════════════════════
HEADINGS & TEXT
══════════════════════════════════════════════════ */
h1 { font-size:clamp(2rem,5vw,3.5rem); font-weight:800; margin-bottom:20px; color:var(--uw-secondary); line-height:1.1; }
h2 { font-size:2.2rem; font-weight:700; margin-bottom:16px; color:var(--uw-secondary); line-height:1.2; }
h4 { font-size:1.1rem; font-weight:700; margin-bottom:8px; color:var(--uw-secondary); }
p  { font-size:1rem; line-height:1.7; color:#555; margin-bottom:14px; }
.has-text-align-center { text-align:center; }

/* ══════════════════════════════════════════════════
BUTTONS
══════════════════════════════════════════════════ */
.wp-block-buttons { display:flex; gap:14px; flex-wrap:wrap; margin-top:20px; }
.wp-block-button__link {
    display:inline-block;
    padding:14px 32px;
    border-radius:100px;
    font-weight:700;
    font-size:15px;
    cursor:pointer;
    background-color:var(--uw-primary);
    /* Defaults, not !important — see the same rule in GutenbergParser::buildStyles():
       forced, they beat each button's own colour and hid outline buttons on dark bands. */
    color:#fff;
    border:2px solid var(--uw-primary);

}
.wp-block-button__link:hover { opacity:.88; }
.wp-block-button.is-style-outline .wp-block-button__link {
    background:transparent !important;
    color:var(--uw-primary);
    border-color:var(--uw-primary);
}
/* No rule here for a button whose wrapper carries a uwg-* class. There used to
   be one that made the link transparent, because GutenbergNormalizer painted the
   button's design onto the WRAPPER and the bare link drew a second pill inside
   it. The normaliser now writes that design onto the link itself
   (".uwg-x > .wp-block-button__link"), and the old rule's !important blanked
   it: every published button lost its padding, fill and border. */

/* ══════════════════════════════════════════════════
SECTION: Promise / light green bg
══════════════════════════════════════════════════ */
.wp-block-group.uw-section-tint { padding:80px 0; }
.wp-block-group.uw-section-tint .wp-block-columns { padding:0 60px !important; }

/* ══════════════════════════════════════════════════
SECTION: Testimonials / dark green bg
══════════════════════════════════════════════════ */
.wp-block-group.uw-section-dark { padding:80px 0; }
.wp-block-group.uw-section-dark .wp-block-columns { padding:0 24px !important; }
.wp-block-group.uw-section-dark p { color:rgba(255,255,255,.85) !important; }
.wp-block-group.uw-section-dark h1,
.wp-block-group.uw-section-dark h2 { color:#fff !important; }

/* ══════════════════════════════════════════════════
SERVICES INTRO
══════════════════════════════════════════════════ */
.uw-services-intro { max-width:1200px; margin:0 auto 40px; padding:0 60px; }

/* ══════════════════════════════════════════════════
SECTION BADGE
══════════════════════════════════════════════════ */
.uw-section-badge {
    display:inline-block;
    border:1px solid var(--uw-primary);
    color:var(--uw-primary);
    border-radius:100px;
    padding:4px 14px;
    font-size:13px;
    margin-bottom:20px;
    font-weight:500;
}

/* ══════════════════════════════════════════════════
CARD — the AI-authored pipeline's one shared card treatment
(className "uw-card"). Kept in sync with GutenbergParser::buildStyles()'s
copy of the same rule so a card looks identical in the local preview and
after publishing to WordPress.
══════════════════════════════════════════════════ */
.uw-card {
    background:#fff;
    border:1px solid #e5e7eb;
    border-radius:var(--uw-radius-card,14px);
    padding:32px;
    box-shadow:var(--uw-shadow-card,0 4px 16px rgba(0,0,0,.06));
}
.uw-card h3, .uw-card h4 { margin-bottom:10px; }
.uw-card p:last-child { margin-bottom:0; }

/* ══════════════════════════════════════════════════
FAQ
══════════════════════════════════════════════════ */
.uw-faq-item { margin-bottom:16px; }
.uw-faq-item details { border:1px solid #ddd; border-radius:8px; overflow:hidden; }
.uw-faq-item summary {
    padding:18px 22px;
    cursor:pointer;
    font-weight:700;
    font-size:18px;
    color:var(--uw-secondary);
    list-style:none;
    display:flex;
    justify-content:space-between;
    align-items:center;
}
.uw-faq-item summary::-webkit-details-marker { display:none; }
.uw-faq-item details[open] summary { border-bottom:1px solid #eee; }
.uw-faq-item details p { padding:16px 22px; color:#555; line-height:1.6; margin:0; font-size:15px; }

/* ── Modern Dark centered FAQ ── */
.uw-faq-item-centered { margin-bottom:16px; }
.uw-faq-item-centered details { border:1px solid #ddd; border-radius:8px; overflow:hidden; }
.uw-faq-item-centered summary {
    padding:18px 22px; cursor:pointer; font-weight:700;
    font-size:20px; color:var(--uw-secondary); list-style:none;
    display:flex; justify-content:space-between; align-items:center;
}
.uw-faq-item-centered summary::-webkit-details-marker { display:none; }
.uw-faq-item-centered details[open] summary { border-bottom:1px solid #eee; }
.uw-faq-item-centered details div { padding:16px 22px; color:#555; line-height:1.7; font-size:17px; }

/* ══════════════════════════════════════════════════
CONTACT FORM
══════════════════════════════════════════════════ */
.uw-contact-cards {
    max-width:1200px;
    margin:60px auto;
    border-radius:14px;
    overflow:hidden;
    box-shadow:0 15px 50px rgba(0,0,0,.1);
}
.uw-contact-cards .wp-block-columns { padding:0 !important; flex-wrap:nowrap; }
.wp-block-column.uw-form-col { background-color:var(--uw-primary) !important; }
.uw-sage-form-ui { display:flex; flex-direction:column; gap:14px; }
.uw-sage-form-ui input,
.uw-sage-form-ui textarea {
    border:none;
    border-radius:8px;
    padding:14px;
    font-size:14px;
    width:100%;
    font-family:inherit;
}
.uw-sage-form-ui textarea { resize:vertical; }
.uw-sage-form-ui button {
    background:#fff;
    color:var(--uw-primary);
    border:none;
    padding:14px 32px;
    border-radius:8px;
    font-weight:800;
    cursor:pointer;
    width:fit-content;
}

/* ── Modern Dark: testimonial green cards ── */
.uw-testimonial-card-green p { color:#fff !important; }

/* ══════════════════════════════════════════════════
ALIGNMENTS
══════════════════════════════════════════════════ */
.alignfull  { width:100%; }
.alignwide  { max-width:1200px; margin-left:auto; margin-right:auto; }
.aligncenter { display:block; margin:0 auto; }

/* ══════════════════════════════════════════════════
RESPONSIVE — mobile
══════════════════════════════════════════════════ */
@media (max-width:900px) {
    html body .wp-block-columns,
    html body .wp-block-columns:not(.is-not-stacked-on-mobile) {
        flex-wrap:wrap !important;
        flex-direction:column !important;
        padding:0 20px !important;
        gap:30px !important;
    }
    html body .wp-block-column,
    html body .wp-block-column[style*="flex-basis:50%"],
    html body .wp-block-column[style*="flex-basis:55%"],
    html body .wp-block-column[style*="flex-basis:45%"],
    html body .wp-block-column[style*="flex-basis:40%"] {
        flex:0 0 100% !important;
        min-width:100% !important;
    }
    .uw-services-intro,.wp-block-image.alignwide { padding:0 20px; }
    .wp-block-group.uw-section-tint .wp-block-columns { padding:0 20px !important; }
    h1 { font-size:2rem !important; }
    h2 { font-size:1.6rem !important; }
    h3 {
        font-size: 1.2rem;
        font-weight: 700;
        margin-bottom: 10px;
        color: var(--uw-secondary);
        line-height: 1.3;
    }
    .wp-block-cover__inner-container { padding:50px 20px; }
    .wp-block-cover,
    .wp-block-cover.alignfull {
        width:100% !important;
        max-width:100% !important;
        margin-left:0 !important;
        margin-right:0 !important;
    }
}
        .wp-block-group.uw-section-dark { padding:80px 0; }
        .wp-block-group.uw-section-dark .wp-block-columns { padding:0 24px !important; }
        .wp-block-group.uw-section-dark p { color:rgba(255,255,255,.85) !important; }
        .wp-block-group.uw-section-dark p[style*="font-weight:600"] { color:#fff !important; }
        /* ══ SEPARATOR ═════════════════════════════════════════ */
.wp-block-separator {
    border: none;
    height: 1px;
    background-color: currentColor;
    opacity: .6;
    margin: 24px 0;
}
.wp-block-separator.is-style-wide { width: 100%; }

/* ══ MEDIA & TEXT ══════════════════════════════════════
   Used by the AI-authored pipeline's alternating showcase sections — additive only,
   the fixed structured-pipeline renderers never emit this block.

   has-media-on-the-right is ordered explicitly rather than with row-reverse. Core saves
   that position with the text pane FIRST and the photo second, and row-reverse — which
   assumes photo-first — put the photo on the left: the opposite of what the block says,
   and the opposite of where WordPress draws it. Stacked, the photo goes on top, as core
   stacks it. */
.wp-block-media-text {
    display: flex;
    align-items: center;
    gap: 40px;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 60px;
}
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__media { order: 2; }
.wp-block-media-text.has-media-on-the-right > .wp-block-media-text__content { order: 1; }
.wp-block-media-text__media { flex: 1; margin: 0; }
.wp-block-media-text__media img { width: 100%; height: auto; display: block; }
.wp-block-media-text__content { flex: 1; padding: 24px 0; }
@media (max-width: 782px) {
    .wp-block-media-text {
        flex-direction: column;
        padding: 0 20px;
    }
    .wp-block-media-text.has-media-on-the-right > .wp-block-media-text__media { order: 0; }
}

/* ══ QUOTE ═════════════════════════════════════════════ */
.wp-block-quote {
    border-left: 4px solid currentColor;
    margin: 0;
    padding: 8px 0 8px 24px;
}
.wp-block-quote p { font-size: 18px; font-style: italic; margin: 0 0 8px; }
.wp-block-quote cite,
.wp-block-quote__citation { font-size: 14px; font-style: normal; opacity: .75; }/* ══ MOTION + MICRO-INTERACTIONS (uw-* utility classes) ══ */
@keyframes uwFadeRise { from { opacity:0; transform:translateY(24px); } to { opacity:1; transform:none; } }

.uw-animate-in { animation: uwFadeRise .7s cubic-bezier(.22,.61,.36,1) both; }
.uw-animate-delay-1 { animation-delay:.12s; }
.uw-animate-delay-2 { animation-delay:.24s; }
.uw-animate-delay-3 { animation-delay:.36s; }

/* Scroll-driven entrance, where the browser supports it.
   The rule above fires every animation at page LOAD, so a section eight screens down has
   finished animating long before the visitor scrolls to it — they see a static page and no
   motion at all, which is exactly how "Our Process" and "Testimonials" looked. Tying the
   animation to a view() timeline makes each section animate as it actually enters the
   viewport, with no JavaScript, which this pipeline cannot ship.

   Wrapped in @supports so browsers without scroll-driven animations keep the load-time
   behaviour rather than losing the animation altogether. animation-delay is cleared
   because on a view() timeline a time-based delay would consume part of the scroll range
   instead of staggering; the stagger comes from animation-range instead. */
@supports (animation-timeline: view()) {
    .uw-animate-in {
        animation-timeline: view();
        animation-range: entry 5% cover 30%;
        animation-delay: 0s;
    }
    .uw-animate-delay-1 { animation-range: entry 8% cover 33%; animation-delay: 0s; }
    .uw-animate-delay-2 { animation-range: entry 11% cover 36%; animation-delay: 0s; }
    .uw-animate-delay-3 { animation-range: entry 14% cover 39%; animation-delay: 0s; }
}
.uw-animate-delay-4 { animation-delay:.48s; }

.uw-hover-lift { transition: transform .3s cubic-bezier(.22,.61,.36,1), box-shadow .3s ease; }
.uw-hover-lift:hover { transform: translateY(-6px); box-shadow: 0 18px 40px rgba(0,0,0,.14) !important; }

.uw-hover-zoom { overflow: hidden; }
.uw-hover-zoom img { transition: transform .5s cubic-bezier(.22,.61,.36,1); }
.uw-hover-zoom:hover img { transform: scale(1.06); }

/* core/media-text has exactly one slot for an author class — className, on the block
   root — so a uw-hover-zoom the generator put on the image pane arrives here instead
   (GutenbergNormalizer::rebuildMediaText). Point the clipping back at the photo, or the
   scaled image spills across the copy beside it. */
.wp-block-media-text.uw-hover-zoom { overflow: visible; }
.wp-block-media-text.uw-hover-zoom .wp-block-media-text__media { overflow: hidden; }

.uw-underline a { position: relative; display: inline-block; }
.uw-underline a::after {
    content: ""; position: absolute; left: 0; bottom: -3px;
    width: 100%; height: 2px; background: currentColor;
    transform: scaleX(0); transform-origin: left;
    transition: transform .28s cubic-bezier(.22,.61,.36,1);
}
.uw-underline a:hover::after { transform: scaleX(1); }

.uw-btn .wp-block-button__link,
a.uw-btn {
    transition: transform .25s cubic-bezier(.22,.61,.36,1), box-shadow .25s ease, opacity .25s ease;
}
.uw-btn .wp-block-button__link:hover,
a.uw-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.18); opacity: .95; }

/* Respect users who ask for reduced motion — animations off, layout unaffected. */
@media (prefers-reduced-motion: reduce) {
    .uw-animate-in { animation: none; }
    .uw-hover-lift, .uw-hover-zoom img, .uw-btn .wp-block-button__link, a.uw-btn { transition: none; }
}

/* ══ HEADER / NAV CHROME ═══════════════════════════════
   The AI builds nav as real <a> tags inside wp:paragraph blocks (wp:navigation is a
   dynamic block and would render as nothing here). These rules lay that row out and
   give it its mobile behavior: the link row wraps and centers instead of overflowing,
   which is the mobile menu — a JS hamburger isn't possible in this pipeline. */
/* The AI's header markup relies on Gutenberg's own flex layout support, which this
   preview stylesheet doesn't implement — so the row layout has to be supplied here or
   the logo, nav and CTA get no arrangement and no spacing at all. */
/* Scoped to div.uw-header / div.uw-nav on purpose. The AI-authored chrome is always a
   wp-block-group DIV, in preview and in WordPress alike, whereas the legacy preview chrome
   in previewshow.blade.php is <header class="uw-header"> / <nav class="uw-nav">. Without
   the element qualifier these rules — which carry !important — outranked the legacy
   stylesheet on every legacy preview page and silently reset its nav spacing. */
html body div.uw-header:not(.ai-site-header) {
    position: sticky; top: 0; z-index: 100;
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    gap: 32px;
    flex-wrap: nowrap;
    /* Legacy CSS forces 50px vertical padding onto every .alignfull group with
       !important, which the header's own inline padding cannot outrank. Restated here so
       the sticky bar stays a compact strip rather than a 100px-tall band.
       .ai-site-header keeps the AI's own padding/alignment. */
    padding-top: 18px !important;
    padding-bottom: 18px !important;
}
html body div.uw-header.ai-site-header {
    display: flex !important;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: space-between;
    gap: 16px 32px;
}
html body div.uw-header > p { margin: 0 !important; flex-shrink: 0; }
/* Links no longer carry their own inline color (a style attribute on an <a> nested inside
   a wp:paragraph's rich text does not survive Gutenberg's block validation — see the
   STYLE ATTRIBUTE CONTRACT in SimpleWebsiteBuilderService's prompt). The AI instead colors
   the wrapping <p>/<span> via a valid has-text-color style, so the anchor must explicitly
   inherit that color — browsers otherwise fall back to the default link blue. */
html body div.uw-header a,
html body div.uw-nav a,
html body div.uw-nav .uw-svc-menu-panel a,
html body .uw-footer a {
    color: inherit;
}

/* The nav owns the space between the logo and the CTA, and centres itself in it.
   The value said flex-end for as long as the comment said it centred, which is why the
   links sat hard right against the CTA instead of in the middle of the row. */
html body div.uw-nav {
    display: flex !important;
    flex: 1 1 auto;
    width: auto;
    min-width: 0;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: center;
    gap: 6px 26px !important;   /* the jammed-together nav links */
    margin: 0;
}

/* The legacy base rule ".wp-block-group { width: 100% }" also matches the groups NESTED
   inside the nav — so the services submenu wrapper demanded a full line, pushing every
   item after it onto the next row. The nav rendered as three stacked lines that overflowed
   the header and sat on top of the hero. Specificity alone beats the base rule here, so no
   !important: the mobile block below must still be able to make the submenu full-width. */
html body div.uw-nav > *,
html body div.uw-nav .uw-svc-menu {
    width: auto;
    flex: 0 0 auto;
}

/* ── Header columns size to their content ───────────────────────────────────────────────
   The other half of the bug above, and the reason the nav would not centre however its
   justify-content was set. ".wp-block-group { width: 100% }" matches the nav's SIBLINGS
   as well as its children, so on a 1345px row the logo column asked for 1345px and the
   CTA column asked for 1345px. Both carry an inline flex-shrink:0, so neither gave any of
   it back, and the nav — the one column left that could shrink — resolved to exactly 0px
   wide. Centring inside a zero-width box puts the links wherever that box happens to sit,
   which is why they spilled out to the right and the CTA ended up past the edge of the
   window entirely: the row measured 2730px of content in a 1425px viewport, and being a
   ratio between the columns it came out the same way at every window size.

   Sizing the columns to their content is what leaves the row free space to distribute,
   and free space is what every centring rule here depends on.

   Scoped through :has() to the one row that actually holds the nav, rather than to the
   header by class. Written the broad way first — every descendant of .gn-custom-header —
   it also reached headers built as stacked full-width bars, where the logo and the contact
   details are laid out in a bar of their own and do rely on the full width: on site 213
   they collapsed onto each other and the text overlapped. The nav itself is excluded
   because its own rule above already gives it width:auto. :has() is already load-bearing
   in this sheet for the burger guard below, so it is not a new dependency. */
html body .wp-block-group:has(> .uw-nav) > *:not(.uw-nav) {
    width: auto;
}

/* Where the row really is three columns — logo, nav, actions — the outer two take an equal
   share of what is left over, so the links sit on the middle of the header rather than on
   the middle of the gap beside a logo and a CTA that do not measure the same (93px against
   136px here, which landed the nav 29px left of centre). The column count is part of the
   selector so a two-column header, where the nav should simply fill the space next to the
   logo, keeps the behaviour above untouched. The inline flex-shrink:0 on each outer column
   still stands and min-width resolves to auto, so neither can be squeezed below its own
   content by the basis of 0. */
html body .wp-block-group:has(> .uw-nav) > *:first-child:nth-last-child(3),
html body .wp-block-group:has(> .uw-nav) > *:first-child:nth-last-child(3) ~ *:last-child {
    flex-grow: 1;
    flex-basis: 0%;
}
html body div.uw-nav p { margin: 0 !important; padding: 0 !important; max-width: none !important; white-space: nowrap; }

/* Keep the CTA a single line — it was wrapping to "Join / Now" in a squashed pill. */
html body div.uw-header .wp-block-buttons { margin: 0; flex-shrink: 0; }
html body div.uw-header .wp-block-button__link { white-space: nowrap; border: 0; }

/* ── Content images — a cap that survives publishing ────────────────────────────────────
   Every image rule in the two stylesheets targets ".wp-block-image img" or
   ".wp-block-column figure img", so an <img> the model emitted WITHOUT its <figure
   class="wp-block-image"> wrapper matched none of them: no height cap, no object-fit, no
   radius. Card thumbnails rendered at full natural height and turned 200px cards into
   1000px ones.

   The wrapper is repaired deterministically (WebsiteQualityAudit::wrapBareImages()), but
   this is the belt-and-braces for markup that has not been through that pass — and it
   lives here rather than in the preview-only overrides so it also applies on the published
   WordPress page. Child selectors keep it off legacy markup, which always wraps in figure,
   and the exclusions keep it off cover backgrounds and the header logo. */
html body .wp-block-column > img,
html body .wp-block-group > img,
html body .wp-block-column > figure > img,
html body .wp-block-group > figure > img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 260px;
    object-fit: cover;
    border-radius: 12px;
}
html body .uw-header img,
html body .uw-header > figure > img {
    max-height: 56px;
    width: auto;
    object-fit: contain;
    border-radius: 0;
}
html body img.wp-block-cover__image-background {
    max-height: none;
    border-radius: 0;
}

/* ── Services submenu ──────────────────────────────────────────────────────────────────
   Individual service pages hang under the services nav item instead of sitting beside
   Home. Pure CSS: Gutenberg's saved markup carries no JavaScript, and wp:navigation is a
   dynamic block that renders as nothing here.

   The uw-svc-* names are deliberately NOT the uw-nav-dropdown* names used by the legacy
   (non-AI) preview chrome in previewshow.blade.php. This stylesheet loads on every preview
   page AND is the only one included in the WordPress publish payload, so reusing those
   names would have this override the legacy dropdown on legacy sites. Distinct names keep
   the two independent while still reaching WordPress. */
html body div.uw-nav .uw-svc-menu { position: relative; display: flex !important; align-items: center; }
/* Real vertical hit area, or a 1px mouse slip between trigger and panel closes it.
   Needs !important to beat ".uw-nav p { padding: 0 !important }" above. */
html body div.uw-nav .uw-svc-menu-trigger {
    margin: 0 !important;
    padding: 6px 0 !important;
    white-space: nowrap;
    cursor: pointer;
}

html body div.uw-nav .uw-svc-menu-panel {
    display: none;
    position: absolute;
    top: 100%;
    /* Centred and viewport-clamped rather than left-anchored: the services item can be
       the last thing in the nav (the synthesised-parent case), where a 230px panel
       anchored left runs off the right edge with nothing to clip it back. */
    left: 50%;
    right: auto;
    transform: translateX(-50%);
    /* width:max-content — an absolutely positioned box is sized against its containing
       block, and that is the narrow nav item it hangs under, so the panel stopped at its
       min-width while a long service name ("Insta Dry Fast Drying Nail Enamel") ran on
       past its edge. Sized to its content it fits the longest name up to the max-width;
       beyond that the names wrap (rule below) and overflow:hidden keeps the box honest. */
    width: max-content;
    min-width: 230px;
    max-width: min(360px, 88vw);
    overflow: hidden;
    padding: 8px;
    background: #fff;
    border: 1px solid rgba(0, 0, 0, .08);
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, .14);
    text-align: left;
    z-index: 9999;
}
/* Inside the panel the nav's single-line rule stands down: a name longer than the panel
   wraps onto a second line instead of running out of the box. */
html body div.uw-nav .uw-svc-menu-panel p {
    white-space: normal;
    overflow-wrap: anywhere;
}
/* previewshow.blade.php sets the dir attribute from the site's text_direction column, so
   RTL sites really do occur here. (No "%s" sigils in this heredoc — it interpolates.) */
html[dir="rtl"] body div.uw-nav .uw-svc-menu-panel {
    left: auto;
    right: 0;
    transform: none;
    text-align: right;
}
/* :focus-within as well as :hover so keyboard tabbing reaches the panel. */
html body div.uw-nav .uw-svc-menu:hover .uw-svc-menu-panel,
html body div.uw-nav .uw-svc-menu:focus-within .uw-svc-menu-panel { display: block; }

/* Beats the ".uw-nav p { margin:0 !important; padding:0 !important }" rule above, which
   would otherwise collapse every row in the panel into an unreadable stack. */
html body div.uw-nav .uw-svc-menu-panel .uw-svc-link {
    margin: 0 !important;
    padding: 9px 12px !important;
    border-radius: 8px;
    /* Was nowrap: a name longer than the panel ran out of it. The panel is sized to its
       content up to a max-width (rule above); past that the name wraps. */
    white-space: normal;
    overflow-wrap: anywhere;
    transition: background-color .15s ease;
}
html body div.uw-nav .uw-svc-menu-panel .uw-svc-link:hover { background: rgba(0, 0, 0, .06); }
/* The panel is our chrome, not the AI's palette. On a dark-header site the AI writes a
   light inline colour on these links, which is invisible against the white panel — so
   deterministic legibility wins over palette fidelity here. */
html body div.uw-nav .uw-svc-menu-panel .uw-svc-link a { display: block; color: #111827 !important; }

/* ── Hero band ─────────────────────────────────────────────────────────────────────────
   GutenbergNormalizer converts wp:cover into a plain wp:group tagged .uw-hero (cover's
   save output is too particular to reproduce), leaving the photo as an ordinary in-flow
   wp:image. These rules lay that image back out as a backdrop with the copy over it.
   They live HERE rather than in embeddedChromeCss() because only this method reaches the
   published page — getStyles() sends it as custom_css. */
.uw-hero:has(> figure.wp-block-image) { position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; }
.uw-hero > figure.wp-block-image { position: absolute; inset: 0; margin: 0; z-index: 0; }
.uw-hero > figure.wp-block-image img {
    width: 100%; height: 100%; max-height: none !important;
    object-fit: cover; border-radius: 0;
}
/* Paint order: photo 0, dim 1, copy 2 — the same order the cover block uses.
   Scoped to heroes with an actual direct-child backdrop photo: markHeroSection() tags any
   band with an h1 plus a figure ANYWHERE inside it, which also matches a plain text+photo-
   row hero with no backdrop at all — confirmed live on Wooden Factory's homepage, where a
   text-and-gallery hero came out under a flat dark scrim it was never designed to have. */
.uw-hero:has(> figure.wp-block-image)::after { content: ""; position: absolute; inset: 0; background: rgba(17, 24, 39, .5); z-index: 1; }
.uw-hero:has(> figure.wp-block-image) > *:not(figure) { position: relative; z-index: 2; width: 100%; }
.uw-hero:has(> figure.wp-block-image) h1, .uw-hero:has(> figure.wp-block-image) h2, .uw-hero:has(> figure.wp-block-image) p { color: #fff; }
.uw-hero:has(> figure.wp-block-image) .wp-block-buttons { justify-content: center; }

/* ── Photo-row galleries ("Shop by Room" etc.) ───────────────────────────────────────────
   A wp:columns block where every column holds nothing but one image is a plain photo
   gallery, not a layout the AI hand-tuned widths for. The generic column rule elsewhere
   gives each one flex: 1 1 260px, but a theme's actual available width for an un-aligned
   block varies (Twenty Twenty-Five constrains it well under the 1200px this stylesheet
   assumes), so 260px-basis items can fit 3 per row with room to shrink and leave a
   lone 4th to wrap alone and stretch to fill the whole row by itself — confirmed live on
   Wooden Factory's homepage. Grid with auto-fit sidesteps the arithmetic entirely: every
   column is always an equal fraction of whatever width is actually available. */
.wp-block-columns:has(> .wp-block-column > figure.wp-block-image:only-child) {
    display: grid !important;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
}
.wp-block-columns:has(> .wp-block-column > figure.wp-block-image:only-child) > .wp-block-column {
    flex: none;
    width: auto;
    min-width: 0;
}

@media (max-width: 900px) {
    .uw-hero { padding: 72px 20px !important; min-height: 0 !important; }

    /* The class list here was the reason none of this reached a generated SEO site. Those
       headers carry .gn-custom-header; only .uw-header was ever listed, so on a phone the
       header kept its inline flex-wrap:nowrap while the submenu rules further down DID
       match and dropped the panel into the flow — a full services list laid over the logo
       on one unbreakable line. The nav's own row is asked to wrap as well, since on these
       headers it is the row, not the header, that holds the columns. flex-wrap is inline
       on both, so only !important reaches them. */
    div.uw-header,
    html body .gn-custom-header,
    html body .wp-block-group:has(> .uw-nav) {
        flex-wrap: wrap !important;
        justify-content: center !important;
        gap: 12px;
    }
    div.uw-header,
    html body .wp-block-group:has(> .uw-nav) {
        /* The row's own 40px inline gutter is too wide once everything is stacked. */
        padding-left: 20px !important;
        padding-right: 20px !important;
    }

    /* The three-column desktop split stands down: the nav takes a line of its own beneath
       the logo and the CTA, so it needs the full width back and the outer columns stop
       claiming an equal share of it. Stated at this weight because the desktop rules above
       are more specific than the plain "div.uw-nav" this block used to rely on. */
    html body .wp-block-group:has(> .uw-nav) > *:first-child:nth-last-child(3),
    html body .wp-block-group:has(> .uw-nav) > *:first-child:nth-last-child(3) ~ *:last-child {
        flex-grow: 0;
        flex-basis: auto;
    }
    html body div.uw-nav {
        width: 100% !important;
        flex: 1 1 100% !important;
        /* The submenu below becomes a full-width block in the flow, so the link row has to
           be able to break around it — otherwise the five links stay on one line with a
           100%-wide item wedged in the middle and spill off both edges at once. The nav
           carries flex-wrap:nowrap inline, which is why this has to be stated this firmly. */
        flex-wrap: wrap !important;
        justify-content: center;
        gap: 4px 14px;
    }

    /* Touch screens have no hover, so the panel stops being a dropdown and becomes a
       permanently visible indented list under its parent. */
    html body div.uw-nav .uw-svc-menu { display: block !important; width: 100%; flex: 1 1 100%; text-align: center; }
    html body div.uw-nav .uw-svc-menu-panel {
        display: block;
        position: static;
        min-width: 0;
        padding: 2px 0 6px !important;
        background: transparent;
        border: 0;
        border-radius: 0;
        box-shadow: none;
    }
    html body div.uw-nav .uw-svc-menu-panel .uw-svc-link { padding: 5px 0 !important; opacity: .85; }
    /* Undo the desktop centring/clamping now that the panel is part of the page flow. */
    html body div.uw-nav .uw-svc-menu-panel {
        left: auto;
        transform: none;
        max-width: none;
        text-align: center;
    }

    /* ── Hero / banner ──────────────────────────────────────────────────────────────
       GutenbergNormalizer::convertCovers() bakes "display:flex" into the generated
       uwg-* class for a converted cover. It now also writes flex-direction:column,
       but every page generated BEFORE that has the class stored without it, and a
       plain flex container defaults to ROW — so the headline, subheadline and buttons
       line up as three columns that each get ~100px on a phone and wrap one character
       per line. These !important rules re-stack those already-published heroes; the
       generated class is emitted after this stylesheet, so equal specificity loses. */
    .uw-hero {
        flex-direction: column !important;
        align-items: center !important;
        justify-content: center !important;
        text-align: center;
    }
    /* Give each child the full width of the stack rather than shrink-to-fit, so long
       Danish/German words wrap on spaces instead of mid-word. */
    .uw-hero > * { width: 100%; max-width: 100%; min-width: 0; }

    /* The AI writes desktop type sizes inline (56px h1 here), which have no mobile
       variant of their own. Cap them rather than restate a size, so a hero that chose
       a smaller heading is left alone. */
    .uw-hero h1, .uw-hero h2 { font-size: clamp(28px, 8vw, 40px) !important; line-height: 1.2 !important; }
    .uw-hero p { font-size: clamp(15px, 4vw, 17px) !important; }

    /* Buttons: never let a label collapse into a vertical character stack, and let the
       row wrap to a second line instead of squeezing both buttons into one. */
    .uw-hero .wp-block-buttons { justify-content: center; flex-wrap: wrap; width: 100%; }
    .wp-block-button__link { white-space: nowrap; }

    /* Header: tighten so the wrapped nav does not push the hero off the first screen. */
    div.uw-header,
    html body .gn-custom-header { gap: 8px !important; padding-top: 12px !important; padding-bottom: 12px !important; }
    div.uw-header > p a { font-size: 18px; }
    div.uw-nav a { font-size: 14px !important; }

    /* ── Hamburger ───────────────────────────────────────────────────────────────────
       Swap the wrapped link row for the core/details burger the header spec emits.
       The :has() guard is load-bearing: a site generated BEFORE the burger existed has
       no .uw-burger in its stored header, and hiding .uw-nav unconditionally would
       leave those phones with no navigation at all. Only hide the row where a burger
       is actually present to replace it. */
    div.uw-header:has(.uw-burger) div.uw-nav,
    .gn-custom-header:has(.uw-burger) div.uw-nav { display: none !important; }

    /* Phone header bar: logo left, toggle right, nothing else on the row. The CTA is
       hidden here and reappears inside the open menu (a copy of it lives in the panel),
       because the bar has no room for logo + button + toggle at 320px. */
    div.uw-header:has(.uw-burger) {
        position: relative;
        flex-wrap: nowrap !important;
        justify-content: space-between !important;
        align-items: center !important;
    }
    div.uw-header:has(.uw-burger) > p { flex: 1 1 auto; text-align: left !important; margin: 0 !important; }
    div.uw-header:has(.uw-burger) > .wp-block-buttons { display: none !important; }

    /* static, not relative: the panel below anchors to the HEADER, not to this box —
       the box is only as wide as the word "Menu". */
    .uw-burger { display: block !important; position: static; flex: 0 0 auto; border: 0; padding: 0; }
    .uw-burger > summary {
        list-style: none;
        cursor: pointer;
        text-align: right;
        padding: 8px 0;
        font-size: 16px;
        font-weight: 700;
    }

    /* The open menu: a full-width sheet under the bar, rather than content pushed into
       the narrow toggle column. */
    .uw-burger .uw-burger-panel {
        position: absolute;
        left: 0;
        right: 0;
        top: 100%;
        z-index: 200;
        background: #fff;
        padding: 8px 20px 18px;
        box-shadow: 0 12px 28px rgba(0,0,0,.14);
        border-top: 1px solid rgba(0,0,0,.06);
    }
    .uw-burger .uw-burger-panel .wp-block-buttons { justify-content: center; margin-top: 12px; }
    /* Replace the default disclosure triangle with a burger glyph.
       Literal ☰ / ✕ rather than hex CSS escapes on purpose: this
       stylesheet is stored with update_post_meta() on the WordPress side, and the meta
       API runs values through wp_unslash(), which eats the backslash. The escape then
       renders as the literal text "2630" next to the toggle — which is exactly what it
       did. Keep every backslash out of this stylesheet for the same reason. */
    .uw-burger > summary::-webkit-details-marker { display: none; }
    .uw-burger > summary::marker { content: ""; }
    .uw-burger > summary::before { content: "☰"; margin-right: 8px; font-size: 18px; }
    .uw-burger[open] > summary::before { content: "✕"; }

    .uw-burger .uw-burger-link { margin: 0 !important; text-align: center; }
    .uw-burger .uw-burger-link a { display: block; padding: 10px 0; font-size: 16px; font-weight: 600; }
    .uw-burger .uw-burger-sub a { font-size: 14px; font-weight: 500; opacity: .8; }
}

/* The burger is mobile-only; the desktop row above already covers wide screens. */
@media (min-width: 901px) {
    .uw-burger { display: none !important; }
}
/* ══ SOCIAL PROFILE LINKS (SocialLinks::footerRow()) ══ */
.uw-social { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 20px 0 0; }
.uw-social > a {
    position: relative;
    display: inline-flex;
    width: 40px;
    height: 40px;
    flex: 0 0 40px;
    border: 1px solid currentColor;
    border-radius: 50%;
    color: inherit;
    font-size: 0;
    line-height: 0;
    text-decoration: none;
    overflow: hidden;
    opacity: .85;
    transition: opacity .2s ease, transform .2s ease;
}
.uw-social > a:hover,
.uw-social > a:focus-visible { opacity: 1; transform: translateY(-2px); }
.uw-social > a::before {
    content: "";
    position: absolute;
    inset: 0;
    margin: auto;
    width: 18px;
    height: 18px;
    background-color: currentColor;
    -webkit-mask: var(--uw-social-icon) center / contain no-repeat;
    mask: var(--uw-social-icon) center / contain no-repeat;
}
.has-text-align-center .uw-social,
.uw-social:only-child { justify-content: center; }
.uw-social > a[data-platform="facebook"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M18%202h-3a5%205%200%200%200-5%205v3H7v4h3v8h4v-8h3l1-4h-4V7a1%201%200%200%201%201-1h3z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="instagram"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%3E%3Crect%20x%3D%222%22%20y%3D%222%22%20width%3D%2220%22%20height%3D%2220%22%20rx%3D%225%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%224%22%2F%3E%3C%2Fg%3E%3Ccircle%20fill%3D%22%23000%22%20cx%3D%2217.5%22%20cy%3D%226.5%22%20r%3D%221.25%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="x"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M18.244%202.25h3.308l-7.227%208.26%208.502%2011.24H16.17l-5.214-6.817L4.99%2021.75H1.68l7.73-8.835L1.254%202.25H8.08l4.713%206.231zm-1.161%2017.52h1.833L7.084%204.126H5.117z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="linkedin"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M16%208a6%206%200%200%201%206%206v7h-4v-7a2%202%200%200%200-4%200v7h-4v-7a6%206%200%200%201%206-6z%22%2F%3E%3Crect%20fill%3D%22%23000%22%20x%3D%222%22%20y%3D%229%22%20width%3D%224%22%20height%3D%2212%22%2F%3E%3Ccircle%20fill%3D%22%23000%22%20cx%3D%224%22%20cy%3D%224%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="youtube"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22evenodd%22%20d%3D%22M23%207.2a3%203%200%200%200-2.1-2.1C19%204.6%2012%204.6%2012%204.6s-7%200-8.9.5A3%203%200%200%200%201%207.2%2031%2031%200%200%200%20.5%2012a31%2031%200%200%200%20.5%204.8%203%203%200%200%200%202.1%202.1c1.9.5%208.9.5%208.9.5s7%200%208.9-.5a3%203%200%200%200%202.1-2.1%2031%2031%200%200%200%20.5-4.8%2031%2031%200%200%200-.5-4.8zM9.75%2015.02V8.98L15.5%2012z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="tiktok"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M16.6%205.82A4.28%204.28%200%200%201%2015.54%203h-3.09v12.4a2.59%202.59%200%201%201-2.59-2.6c.27%200%20.53.04.78.12V9.77a5.7%205.7%200%200%200-.78-.05%205.69%205.69%200%201%200%205.69%205.68V9.01a7.35%207.35%200%200%200%204.3%201.38V7.3a4.3%204.3%200%200%201-3.25-1.48z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="pinterest"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M12%202a10%2010%200%200%200-3.64%2019.31c-.09-.78-.17-1.98.03-2.83l1.2-5.08s-.3-.62-.3-1.53c0-1.43.83-2.5%201.87-2.5.88%200%201.3.66%201.3%201.45%200%20.88-.56%202.2-.85%203.43-.24%201.02.52%201.86%201.53%201.86%201.84%200%203.25-1.94%203.25-4.74%200-2.48-1.78-4.21-4.33-4.21-2.95%200-4.68%202.21-4.68%204.5%200%20.89.34%201.84.77%202.36a.31.31%200%200%201%20.07.3l-.29%201.18c-.04.19-.15.23-.35.14-1.3-.6-2.11-2.5-2.11-4.03%200-3.28%202.38-6.29%206.87-6.29%203.6%200%206.41%202.57%206.41%206.01%200%203.58-2.26%206.47-5.39%206.47-1.05%200-2.04-.55-2.38-1.2l-.65%202.47c-.23.9-.86%202.03-1.29%202.72A10%2010%200%201%200%2012%202z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="whatsapp"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M12.05%200C5.5%200%20.16%205.34.16%2011.89c0%202.1.55%204.14%201.59%205.95L.06%2024l6.3-1.65a11.88%2011.88%200%200%200%205.68%201.45h.01c6.55%200%2011.89-5.34%2011.89-11.89%200-3.18-1.24-6.16-3.48-8.41A11.82%2011.82%200%200%200%2012.05%200zm0%2021.79h-.01a9.87%209.87%200%200%201-5.03-1.38l-.36-.21-3.74.98%201-3.65-.24-.37a9.86%209.86%200%200%201-1.51-5.26c0-5.45%204.44-9.88%209.89-9.88%202.64%200%205.12%201.03%206.99%202.9a9.82%209.82%200%200%201%202.89%206.99c0%205.45-4.44%209.88-9.88%209.88zm5.42-7.4c-.3-.15-1.76-.87-2.03-.97-.27-.1-.47-.15-.67.15-.2.3-.77.97-.94%201.16-.17.2-.35.22-.64.07-.3-.15-1.26-.46-2.39-1.47a8.97%208.97%200%200%201-1.65-2.06c-.17-.3-.02-.46.13-.61.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.03-.52-.07-.15-.67-1.61-.92-2.21-.24-.58-.49-.5-.67-.51h-.57c-.2%200-.52.07-.79.37-.27.3-1.04%201.02-1.04%202.48s1.07%202.88%201.21%203.07c.15.2%202.1%203.2%205.08%204.49.71.31%201.26.49%201.7.63.71.22%201.36.19%201.87.12.57-.09%201.76-.72%202-1.41.25-.7.25-1.29.17-1.41-.07-.13-.27-.2-.57-.35z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a[data-platform="telegram"] { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M21.94%204.3%2018.7%2019.6c-.24%201.08-.88%201.35-1.79.84l-4.94-3.64-2.38%202.3c-.26.26-.48.48-.99.48l.35-5.02%209.14-8.26c.4-.35-.09-.55-.62-.2L6.17%2013.2l-4.86-1.52c-1.06-.33-1.08-1.06.22-1.57l19-7.32c.88-.33%201.65.2%201.41%201.51z%22%2F%3E%3C%2Fsvg%3E"); }
.uw-social > a { --uw-social-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cg%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpath%20d%3D%22M2%2012h20M12%202a15.3%2015.3%200%200%201%204%2010%2015.3%2015.3%200%200%201-4%2010%2015.3%2015.3%200%200%201-4-10%2015.3%2015.3%200%200%201%204-10z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
/* ══ AI-AUTHORED PAGES — layout foundation ═════════════
   Two jobs here, and the split matters:

   1. Undo the legacy "!important" constraints (nowrap, forced 60px gap) that would
      otherwise crush a card grid. These need !important to win.
   2. Supply sane container defaults (max-width, centering, gutter) WITHOUT !important,
      so the AI's own inline styles still take precedence wherever it specified them,
      but content is never left flush against the viewport edge where it didn't. An
      earlier version of this block zeroed the constraints without replacing them,
      which is precisely how content ended up at x=0 spanning the full viewport. */

/* ── 1. undo the legacy hard constraints ── */
html body:not(.uw-unscoped) .wp-block-columns,
html body:not(.uw-unscoped) .wp-block-columns:not(.is-not-stacked-on-mobile) {
    flex-wrap: wrap !important;   /* card grids must be free to wrap onto more rows */
    gap: 32px !important;
    align-items: stretch;
}

/* ── 2. container defaults (inline styles still win) ── */
html body:not(.uw-unscoped) .wp-block-columns,
html body:not(.uw-unscoped) .wp-block-media-text {
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
    padding-left: 24px;
    padding-right: 24px;
}
/* A heading/paragraph sitting directly in a full-width band still needs a gutter —
   but NOT inside the header or footer nav, where this rule was handing the logo <p> a
   1200px max-width plus auto margins and destroying the header row. */
html body:not(.uw-unscoped) .wp-block-group.alignfull:not(.uw-header):not(.uw-nav) > .wp-block-heading,
html body:not(.uw-unscoped) .wp-block-group.alignfull:not(.uw-header):not(.uw-nav) > p {
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
    padding-left: 24px;
    padding-right: 24px;
}
html body:not(.uw-unscoped) .wp-block-group.alignwide:not(:has(> .wp-block-columns)) {
    padding-left: 24px !important;
    padding-right: 24px !important;
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
}
/* Columns share the row evenly unless the markup asked for a specific basis. */
html body:not(.uw-unscoped) .wp-block-column { flex: 1 1 260px !important; min-width: 0; }

/* ── HERO — guarantee a readable, stacked hero ──
   The model keeps laying the headline/subheadline/buttons out as a horizontal row
   (usually by nesting wp:columns inside the cover), which reads as broken. Force the
   hero's contents to stack and stay centered regardless of what it emitted, and make
   sure the dim overlay actually paints so white hero text is never on pale grey. */
html body:not(.uw-unscoped) .wp-block-cover { padding-left: 24px; padding-right: 24px; }
html body:not(.uw-unscoped) .wp-block-cover__inner-container {
    max-width: 900px;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}
html body:not(.uw-unscoped) .wp-block-cover .wp-block-columns {
    flex-direction: column !important;
    align-items: center !important;
    max-width: 900px;
    padding: 0;
    gap: 20px !important;
}
html body:not(.uw-unscoped) .wp-block-cover .wp-block-column { width: 100% !important; flex: 1 1 auto !important; }
/* Belt-and-braces: if the model omitted the overlay span, the cover still darkens. */
html body:not(.uw-unscoped) .wp-block-cover::before {
    content: "";
    position: absolute;
    inset: 0;
    background: rgba(17, 24, 39, .45);
    z-index: 1;
}
/* Paint order matters: photo underneath (0), dim overlay above it (1), text on top (2).
   Both previously sat at z-index 1, so the overlay hid the photo entirely and the hero
   rendered as a flat grey band. */
html body:not(.uw-unscoped) .wp-block-cover > .wp-block-cover__image-background,
html body:not(.uw-unscoped) .wp-block-cover > img { z-index: 0 !important; }
html body:not(.uw-unscoped) .wp-block-cover > .wp-block-cover__background { z-index: 1; }
html body:not(.uw-unscoped) .wp-block-cover > .wp-block-cover__inner-container { z-index: 2; }

/* ── IMAGES — never let one blow out the layout ──
   An unresolved placeholder has a 1200x800 intrinsic size and would otherwise render
   enormous (and overflow) inside a hero or card. */
html body:not(.uw-unscoped) figure.wp-block-image { margin: 0; }
html body:not(.uw-unscoped) figure.wp-block-image img,
html body:not(.uw-unscoped) .wp-block-media-text__media img {
    width: 100%;
    height: auto;
    max-height: 520px;
    object-fit: cover;
    border-radius: 12px;
}
html body:not(.uw-unscoped) .wp-block-cover__inner-container img { max-height: 320px; width: auto; margin: 0 auto; }

@media (max-width: 900px) {
    /* Keep the stacking (that's what isStackedOnMobile means), tighten the gutter. */
    html body:not(.uw-unscoped) .wp-block-columns,
    html body:not(.uw-unscoped) .wp-block-columns:not(.is-not-stacked-on-mobile) {
        flex-direction: column !important;
        gap: 24px !important;
        padding-left: 20px;
        padding-right: 20px;
    }
    html body:not(.uw-unscoped) .wp-block-column { flex: 1 1 auto !important; width: 100% !important; }
    html body:not(.uw-unscoped) .wp-block-group.alignfull,
    html body:not(.uw-unscoped) .wp-block-cover {
        padding-left: 20px !important;
        padding-right: 20px !important;
    }
    html body:not(.uw-unscoped) .wp-block-media-text {
        display: block;
        padding-left: 20px;
        padding-right: 20px;
    }
    html body:not(.uw-unscoped) .wp-block-media-text__media { margin-bottom: 24px; }
}/* ══ DESIGN FIRST — one page container ═════════════════ */
html body {
    --uw-df-container: 1200px;
    --uw-df-gutter: 40px;
}

/* ── Top-level bands: full-bleed background, content in the container ──
   The second selector restates the first at the specificity of the foundation's
   alignwide-group rule, whose 24px !important inset would otherwise still win on a
   top-level alignwide group. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > *:not(.alignwide.has-background):not(.alignwide[style*="background"]):not(.alignwide.uw-bg),
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignwide:not(.has-background):not([style*="background"]):not(.uw-bg) {
    box-sizing: border-box !important;
    width: 100% !important;
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: max(var(--uw-df-gutter), calc((100% - var(--uw-df-container)) / 2)) !important;
    padding-right: max(var(--uw-df-gutter), calc((100% - var(--uw-df-container)) / 2)) !important;
}

/* The header's outer columns take an equal share of the row so the nav centres (see the
   three-column rule in motionAndChromeStyles()), which leaves the CTA at the START of a
   column wider than itself — 26px short of the container's right edge while the logo sat
   exactly on the left one. Pin it to the far edge so the row is symmetric. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .uw-header > .wp-block-buttons:last-child:not(:first-child) {
    justify-content: flex-end;
}

/* An alignwide section with its own background is a card, not a band: it stays a box on
   the container's edges and keeps its own inner padding. On WordPress the background has
   moved into a uwg-* class and has-background is gone, so GutenbergNormalizer marks the
   block uw-bg instead; every background check in this sheet reads that too. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .alignwide.has-background,
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .alignwide[style*="background"],
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .alignwide.uw-bg {
    box-sizing: border-box !important;
    width: auto !important;
    max-width: min(var(--uw-df-container), calc(100% - 2 * var(--uw-df-gutter))) !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* ── Inside a band the gutter is already paid ──
   A nested block that adds a side inset of its own starts that much inside the line
   everything else starts on. Blocks that paint their own background keep theirs: on them
   it is the space between their edge and their content, not a page gutter.

   Columns and nested alignwide groups need !important — the legacy sheet forces 20px and
   60px onto them with it. Media-text and loose text do not, so the AI's own inline
   padding still wins there. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * .wp-block-columns:not(.has-background):not([style*="background"]):not(.uw-bg),
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * .wp-block-group.alignwide:not(.has-background):not([style*="background"]):not(.uw-bg) {
    padding-left: 0 !important;
    padding-right: 0 !important;
}
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * .wp-block-media-text:not(.has-background):not([style*="background"]):not(.uw-bg),
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignfull:not(.uw-header):not(.uw-nav) > .wp-block-heading,
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignfull:not(.uw-header):not(.uw-nav) > p {
    padding-left: 0;
    padding-right: 0;
}

/* A paragraph set straight on a band runs the full 1200px container — 140-character
   lines (site 329: "Four things, done properly: …"). Measure it like body copy; a centred
   one stays centred. Copy inside columns, cards and media-text is already narrower. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignfull:not(.uw-header):not(.uw-nav):not(.uw-footer) > p {
    max-width: 76ch;
}
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignfull:not(.uw-header):not(.uw-nav):not(.uw-footer) > p.has-text-align-center,
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > .wp-block-group.alignfull:not(.uw-header):not(.uw-nav):not(.uw-footer) > p[style*="text-align:center"] {
    margin-left: auto;
    margin-right: auto;
}

/* A block authored with its own text colour hands it to the text inside. The base
   sheet's `p { color: #555 }` otherwise wins over the inherited colour: site 328's
   white-on-dark testimonial kept a white cite above a grey paragraph. */
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * [class*="wp-block-"].has-text-color p:not(.has-text-color),
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * [class*="wp-block-"].has-text-color li:not(.has-text-color),
html body :is(.uw-ai-page, .wp-block-post-content, .entry-content) > * [class*="wp-block-"].has-text-color cite {
    color: inherit;
}

@media (max-width: 900px) {
    html body { --uw-df-gutter: 20px; }
}/* Laravel preview has no block-theme chrome. */
.wp-site-blocks > header,
.wp-site-blocks > footer,
header.wp-block-template-part,
footer.wp-block-template-part,
.wp-block-template-part[class*="header"],
.wp-block-template-part[class*="footer"],
.wp-block-post-title,
.wp-block-template-part .wp-block-post-title,
.wp-block-post-featured-image {
    display: none !important;
}
body,
.wp-site-blocks,
.wp-site-blocks > main,
main.wp-block-group {
    margin: 0 !important;
    padding: 0 !important;
    background: #fff;
    max-width: none !important;
    width: 100% !important;
}
.has-global-padding {
    padding-right: 0 !important;
    padding-left: 0 !important;
}
/* The theme constrains .wp-block-post-content; Laravel's <main> is full bleed. */
.wp-block-post-content,
.entry-content,
.wp-block-post-content.uw-ai-page,
.entry-content.uw-ai-page,
.uw-ai-page,
.uw-ai-page.alignfull {
    max-width: none !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
}
.wp-block-post-content-is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)),
.wp-block-post-content > .uw-ai-page,
.entry-content > .uw-ai-page {
    max-width: none !important;
    width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
/* do_blocks() adds is-layout-constrained + wp-container-* width rules from
   layout:{"type":"constrained"} in the comment. GutenbergParser::render()
   strips those comments, so Laravel preview never gets this squeeze. */
.uw-ai-page .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull):not(.alignwide)),
.uw-ai-page [class*="wp-container-core-group"] > :where(:not(.alignleft):not(.alignright):not(.alignfull):not(.alignwide)) {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
.uw-ai-page .is-layout-constrained > .alignwide,
.uw-ai-page [class*="wp-container-core-group"] > .alignwide {
    max-width: 1200px !important;
    width: 100% !important;
    margin-left: auto !important;
    margin-right: auto !important;
}
.wp-block-post-content > .alignfull,
.entry-content > .alignfull,
.uw-ai-page > .alignfull,
.uw-ai-page.alignfull {
    width: 100% !important;
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
/* Synced-pattern wrapper must not become its own flex/content box. */
.wp-block-block:has(.uw-header),
.wp-block-block:has(.uw-footer),
.wp-block-block:has(.ai-site-header),
.wp-block-block:has(.ai-site-footer) {
    display: contents;
}
body .uw-ai-page,
body .uw-ai-page p {
    font-family: var(--uw-body-font, inherit);
}
body .uw-ai-page h1,
body .uw-ai-page h2,
body .uw-ai-page h3,
body .uw-ai-page h4,
body .uw-ai-page h5,
body .uw-ai-page h6,
body .uw-ai-page .wp-block-heading {
    font-family: var(--uw-heading-font, inherit) !important;
}
.uwg-842bb07:not(#uw-inline){background-image:linear-gradient(rgba(16,42,51,0.6),rgba(16,42,51,0.6)),url('https://cvdevelopment.ultimawriter.ai/generated-images/ai-a-burst-pipe-spraying-water-under-a-kitchen-sink-at-night-in-4Hrb0Y.jpg');position:relative;padding:120px 24px;background-size:cover;background-position:center;min-height:620px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.uwg-8c026fb:not(#uw-inline){background-color:#ffffff;padding:18px 40px;position:sticky;top:0;z-index:100;box-shadow:0 1px 12px rgba(0,0,0,.06);padding-top:18px;padding-right:40px;padding-bottom:18px;padding-left:40px;background-color:#ffffff}
.uwg-4ac7ea1:not(#uw-inline){font-size:22px;font-weight:800;color:#0B5D6B;color:#0B5D6B;font-size:22px;font-weight:800}
.uwg-43b07d4:not(#uw-inline){font-size:15px;font-weight:600;color:#102A33;color:#102A33;font-size:15px;font-weight:600}
.uwg-0f4dd94:not(#uw-inline){color:#102A33;color:#102A33}
.uwg-d488da4:not(#uw-inline) > .wp-block-button__link{padding-top:12px;padding-right:26px;padding-bottom:12px;padding-left:26px;background-color:#0B5D6B;color:#ffffff;font-weight:700;border-radius:100px}
.uwg-68401cf:not(#uw-inline){color:#ffffff;font-size:56px;line-height:1.15;color:#ffffff;font-size:56px;line-height:1.15}
.uwg-1bc5ce7:not(#uw-inline){color:#F2EFE9;font-size:19px;color:#F2EFE9;font-size:19px}
.uwg-8028452:not(#uw-inline) > .wp-block-button__link{padding-top:16px;padding-right:32px;padding-bottom:16px;padding-left:32px;background-color:#E8793A;color:#ffffff;font-weight:700;border-radius:100px}
.uwg-992ca57:not(#uw-inline) > .wp-block-button__link{padding-top:16px;padding-right:32px;padding-bottom:16px;padding-left:32px;color:#ffffff;font-weight:700;border-color:#ffffff;border-width:2px;border-radius:100px}
.uwg-e90a3de:not(#uw-inline){background-color:#F2EFE9;padding-top:48px;padding-bottom:48px;padding-left:40px;padding-right:40px;padding-top:48px;padding-right:40px;padding-bottom:48px;padding-left:40px;background-color:#F2EFE9}
.uwg-cd4550d:not(#uw-inline){color:#102A33;font-size:17px;font-weight:700;color:#102A33;font-size:17px;font-weight:700}
.uwg-b042818:not(#uw-inline){background-color:#ffffff;padding-top:96px;padding-bottom:96px;padding-left:40px;padding-right:40px;padding-top:96px;padding-right:40px;padding-bottom:96px;padding-left:40px;background-color:#ffffff}
.uwg-5bcd384:not(#uw-inline){color:#102A33;font-size:38px;color:#102A33;font-size:38px}
.uwg-5fe2a0b:not(#uw-inline){color:#133B4F;font-size:18px;color:#133B4F;font-size:18px}
.uwg-c79fb28:not(#uw-inline){margin-top:40px;margin-top:40px}
.uwg-17548e8:not(#uw-inline){color:#102A33;font-size:23px;color:#102A33;font-size:23px}
.uwg-f45e547:not(#uw-inline){color:#133B4F;color:#133B4F}
.uwg-0048f4f:not(#uw-inline) > .wp-block-button__link{padding-top:12px;padding-right:24px;padding-bottom:12px;padding-left:24px;color:#0B5D6B;font-weight:700;border-color:#0B5D6B;border-width:2px;border-radius:100px}
.uwg-7490fcf:not(#uw-inline){background-color:#F2EFE9;padding-top:64px;padding-bottom:64px;padding-left:40px;padding-right:40px;padding-top:64px;padding-right:40px;padding-bottom:64px;padding-left:40px;background-color:#F2EFE9}
.uwg-726b28c:not(#uw-inline){color:#102A33;font-size:36px;color:#102A33;font-size:36px}
.uwg-5a6cd3e:not(#uw-inline){color:#133B4F;font-size:17px;color:#133B4F;font-size:17px}
.uwg-f5919ef:not(#uw-inline){color:#E8793A;font-size:48px;font-weight:700;color:#E8793A;font-size:48px;font-weight:700}
.uwg-1a9c698:not(#uw-inline){color:#102A33;font-size:22px;color:#102A33;font-size:22px}
.uwg-f8450fb:not(#uw-inline){margin-top:24px;margin-top:24px}
.uwg-2773f4e:not(#uw-inline){background-color:#133B4F;padding-top:80px;padding-bottom:80px;padding-left:40px;padding-right:40px;padding-top:80px;padding-right:40px;padding-bottom:80px;padding-left:40px;background-color:#133B4F}
.uwg-b6f5479:not(#uw-inline){color:#ffffff;font-size:34px;color:#ffffff;font-size:34px}
.uwg-dfad04f:not(#uw-inline){margin-top:32px;margin-top:32px}
.uwg-48bb4eb:not(#uw-inline){color:#102A33;font-size:20px;color:#102A33;font-size:20px}
.uwg-beab645:not(#uw-inline){color:#F2EFE9;margin-top:32px;margin-top:32px;color:#F2EFE9}
.uwg-862ddf4:not(#uw-inline){background-color:#F2EFE9;padding-top:80px;padding-bottom:80px;padding-left:40px;padding-right:40px;padding-top:80px;padding-right:40px;padding-bottom:80px;padding-left:40px;background-color:#F2EFE9}
.uwg-9586ec1:not(#uw-inline){color:#102A33;font-size:34px;color:#102A33;font-size:34px}
.uwg-bce04e6:not(#uw-inline){margin-top:16px;margin-top:16px}
.uwg-5c8e31f:not(#uw-inline) > .wp-block-button__link{padding-top:16px;padding-right:32px;padding-bottom:16px;padding-left:32px;background-color:#0B5D6B;color:#ffffff;font-weight:700;border-radius:100px}
.uwg-96a2382:not(#uw-inline){padding-top:64px;padding-bottom:64px;padding-left:40px;padding-right:40px;padding-top:64px;padding-right:40px;padding-bottom:64px;padding-left:40px}
.uwg-c7d7b74:not(#uw-inline){color:#102A33;font-size:24px;color:#102A33;font-size:24px}
.uwg-3b85870:not(#uw-inline){background-color:#102A33;padding-top:96px;padding-bottom:96px;padding-left:40px;padding-right:40px;padding-top:96px;padding-right:40px;padding-bottom:96px;padding-left:40px;background-color:#102A33}
.uwg-887461b:not(#uw-inline){color:#ffffff;font-size:38px;color:#ffffff;font-size:38px}
.uwg-8bc114a:not(#uw-inline){color:#F2EFE9;font-size:18px;color:#F2EFE9;font-size:18px}
.uwg-db01cfe:not(#uw-inline){color:#F2EFE9;margin-top:20px;font-size:15px;margin-top:20px;color:#F2EFE9;font-size:15px}
.uwg-cf5912b:not(#uw-inline){background-color:#102A33;padding:72px 40px 32px;padding-top:72px;padding-right:40px;padding-bottom:32px;padding-left:40px;background-color:#102A33}
.uwg-ab238b5:not(#uw-inline){font-size:22px;font-weight:800;color:#ffffff;color:#ffffff;font-size:22px;font-weight:800}
.uwg-8e667cf:not(#uw-inline){font-size:15px;line-height:1.6;color:#cdd8da;color:#cdd8da;font-size:15px;line-height:1.6}
.uwg-1460cd1:not(#uw-inline){font-size:17px;font-weight:700;color:#ffffff;color:#ffffff;font-size:17px;font-weight:700}
.uwg-70b70a1:not(#uw-inline){color:#cdd8da;color:#cdd8da}
.uwg-30668e6:not(#uw-inline){color:#2b4a54;color:#2b4a54}
.uwg-e198bc7:not(#uw-inline){font-size:14px;color:#9fb0b4;color:#9fb0b4;font-size:14px}