/*
Theme Name: Hello Elementor Child
Theme URI: https://elementor.com/hello-theme/?utm_source=wp-themes&utm_campaign=theme-uri&utm_medium=wp-dash
Template: hello-elementor
Author: Elementor Team
Author URI: https://elementor.com/?utm_source=wp-themes&utm_campaign=author-uri&utm_medium=wp-dash
Description: Hello Elementor is a lightweight and minimalist WordPress theme that was built specifically to work seamlessly with the Elementor site builder plugin. The theme is free, open-source, and designed for users who want a flexible, easy-to-use, and customizable website. The theme, which is optimized for performance, provides a solid foundation for users to build their own unique designs using the Elementor drag-and-drop site builder. Its simplicity and flexibility make it a great choice for both beginners and experienced Web Creators.
Tags: accessibility-ready,flexible-header,custom-colors,custom-menu,custom-logo,featured-images,rtl-language-support,threaded-comments,translation-ready
Version: 3.4.9.1786026418
Updated: 2026-08-06 14:26:58

*/

/* ═══════════════════════════════════════════════════════════════
   SAEGIC — the two things Elementor cannot express natively.
   Everything else on this site is built with Elementor widgets.

   1. Diagonal wedges. Elementor's Shape Divider is a single solid
      fill, so it cannot leave one side transparent — which is what
      lets the CurvedGrid run through the diagonal instead of
      stopping at a flat band.
   2. The vertical side rails (rotation / writing-mode).
   ═══════════════════════════════════════════════════════════════ */:root{ --sg-green:#1DB57C; --sg-navy:#12303E; --sg-paper:#FCFCFC; --sg-rise1:90px; --sg-rise2:85px; --sg-rise3:114px; --sg-rise4:114px; --sg-rise5:105px; /* Ship the pattern art with the theme and reference it RELATIVE to this file.
     These were absolute https://saegic.local/wp-content/uploads/... URLs, which
     404 on any other host — every grid texture and every wedge light half went
     flat after a migration. Relative paths survive any domain or environment. */
  --sg-grid-dark:url("patterns/curvedgrid-dark.jpg"); --sg-grid-light:url("patterns/curvedgrid-light.jpg"); /* icon masks, inlined so the CSP-free data: URI travels with the stylesheet */
  --sg-arrow-e:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 12'><path d='M0 6h41M35.5 1 41 6l-5.5 5' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); --sg-arrow-ne:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 17 17 7M8.5 7H17v8.5' fill='none' stroke='%2312303E' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); --sg-search:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='10.5' cy='10.5' r='7.5' fill='none' stroke='black' stroke-width='2'/><line x1='16' y1='16' x2='21.5' y2='21.5' stroke='black' stroke-width='2' stroke-linecap='round'/></svg>"); --sg-chev-d:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 8'><path d='M1 1.5 7 6.5 13 1.5' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); --sg-chev-l:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><polyline points='15.5 4 8 12 15.5 20' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); --sg-chev-r:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><polyline points='8.5 4 16 12 8.5 20' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }

/* ── wedges ─────────────────────────────────────────────────── */.sg-wedge{ position:relative; z-index:3; pointer-events:none; }.sg-wedge::before,.sg-wedge::after{ content:''; position:absolute; inset:0; }

/* overlaps the section ABOVE — that section shows through the top */.sg-wedge-over{ height:calc(var(--sg-rise) + var(--sg-stripe,0px)); margin-top:calc(-1 * var(--sg-rise)); }.sg-wedge-over::before{ clip-path:polygon(0 var(--sg-rise),100% 0,100% 100%,0 100%); }.sg-wedge-over::after{ inset:0 0 -1px 0; clip-path:polygon(0 100%,100% var(--sg-stripe,0px),100% 100%); }

/* overlaps the section BELOW — that section shows through the bottom */.sg-wedge-under{ height:var(--sg-rise); margin-bottom:calc(-1 * var(--sg-rise)); }.sg-wedge-under::before{ inset:-1px 0 0 0; clip-path:polygon(0 0,100% 0,0 var(--sg-rise)); }.sg-wedge-under::after{ display:none; }.sg-wedge-1{ --sg-rise:var(--sg-rise1); --sg-stripe:24px; }.sg-wedge-2{ --sg-rise:var(--sg-rise2); }.sg-wedge-3{ --sg-rise:var(--sg-rise3); --sg-stripe:25px; }.sg-wedge-4{ --sg-rise:var(--sg-rise4); }.sg-wedge-5{ --sg-rise:var(--sg-rise5); }.sg-wedge-5::before,.sg-wedge-5::after{ background:var(--sg-green); }

/* the light grid's origin sits at the top of the wedge above, so the
   wedge's lower triangle continues the same texture seamlessly */

/* ── side rails ─────────────────────────────────────────────── */.sg-rail{ top:128px; z-index:4; display:flex; align-items:center; justify-content:center; width:51px; padding:24px 0; writing-mode:vertical-rl; transform:rotate(180deg); background:var(--sg-green); color:#000; font-family:"Figtree",sans-serif; font-weight:500; font-size:16px; line-height:1; letter-spacing:0; text-transform:uppercase; }.sg-rail-push2{ top:calc(128px + var(--sg-rise2)); }.sg-rail-push4{ top:calc(128px + var(--sg-rise4)); }

@media (max-width:980px){:root{ --sg-rise1:52px; --sg-rise2:48px; --sg-rise3:64px; --sg-rise4:64px; --sg-rise5:58px; }.sg-rail{ display:none; }
}

/* continuous dark grid across Benefits + By the Numbers */

/* ── Elementor's container CSS loads after the theme, so the wedge
      geometry needs to win explicitly. Nothing here is decorative;
      it is the same clip-path system, just at higher priority. ── */.e-con.sg-wedge{ height:calc(var(--sg-rise) + var(--sg-stripe,0px)) !important; min-height:0 !important; padding:0 !important; margin-inline:0 !important; width:100% !important; max-width:none !important; display:block !important; --width:100%; }.e-con.sg-wedge-over{ margin-top:calc(-1 * var(--sg-rise)) !important; margin-bottom:0 !important; }.e-con.sg-wedge-under{ height:var(--sg-rise) !important; margin-bottom:calc(-1 * var(--sg-rise)) !important; margin-top:0 !important; }

/* images fill their card/figure box */.sg-post > .elementor-element img{ width:100% !important; height:auto; display:block; }.sg-post > .elementor-element:first-child{ width:100%; }

/* section content should stack and centre; Elementor defaults containers to row */

/* ═══════════ SAEGIC — structural layout ═══════════
   Design tokens (colour, type, spacing) live in Elementor Global
   Classes and stay editable there. This block only carries layout
   Elementor's container controls can't express: the two-column
   splits, media aspect ratios and the absolutely-positioned rails. */

/* section shells */

/* ── ABOUT: 552 / 626 split, then two 611 images ── */

/* ── BENEFITS: 3 cards, 413 wide, 16 gap ── */

/* ── STATS: 3 equal columns ── */

/* ── SOLUTIONS: 588 list / 455 panel, 120 gutter ── */

/* ── BLOG: 3 cards 349 wide, 100 gutter ── */.sg-post img{ width:100%; aspect-ratio:349/219; object-fit:cover; }

/* ── rails sit against the section edge ── */.sg-rail{ position:absolute !important; }

/* ── header sits transparent over the hero (comp: logo x60, nav right) ── */body{ --sg-hdr:0px; }.sg-header{ background:transparent !important; }
/* the hero already carries the top padding the absolute header sits on */

/* ── footer ── */

/* ── header must overlay the hero, not collapse ── */.elementor-location-header{ position:absolute !important; top:0; left:0; right:0; z-index:60; height:auto !important; }

/* ── About: media row must not overflow ── */

/* ── Solutions pills: active pill must be dark, both labels on one row ── */

/* ── Blog: 3 up, 349/100 ── */

/* ── CTA: two lines like the comp ── */

/* ── Footer layout ── */

/* ── section rails anchored to viewport edge ── */.sg-rail{ left:0 !important; }

/* image widgets size from the element, not the inner <img> */

/* atomic e-image renders as a bare <img>, so size it directly */.sg-post img{ width:100% !important; height:auto; }

/* bare <img> children are the flex items, so constrain them directly */

/* footer: lead left, full logo right, legal on its own row */

/* Elementor's container rules reset z-index, which lets the next section
   paint over the wedge and hides the diagonal entirely. */.e-con.sg-wedge{ position:relative !important; }.e-con.sg-wedge::before, .e-con.sg-wedge::after{ z-index:1; }

/* sections must be below the wedges in the stacking order */.e-con.sg-hero, .e-con.sg-about, .e-con.sg-benefits, .e-con.sg-stats,
.e-con.sg-solutions, .e-con.sg-blog, .e-con.sg-cta, .e-con.sg-darkblock{ position:relative !important; z-index:1 !important; }/* sections must be below the wedges in the stacking order */.e-con.sg-wedge{ z-index:5 !important; isolation:auto !important; }

/* Elementor defines .e-con::before/::after itself, so ours must be explicit */.e-con.sg-wedge::before, .e-con.sg-wedge::after{ content:'' !important; display:block !important; position:absolute !important; top:0; left:0; right:0; bottom:0; width:auto; height:auto; opacity:1 !important; }.e-con.sg-wedge-over::before{ clip-path:polygon(0 var(--sg-rise),100% 0,100% 100%,0 100%) !important; }.e-con.sg-wedge-over::after{ bottom:-1px; clip-path:polygon(0 100%,100% var(--sg-stripe,0px),100% 100%) !important; }.e-con.sg-wedge-under::before{ top:-1px; clip-path:polygon(0 0,100% 0,0 var(--sg-rise)) !important; }.e-con.sg-wedge-under::after{ display:none !important; }.sg-wedge-1::before{ background:#1DB57C !important; }
/* The light half of a wedge must carry the CurvedGrid of the section it borders,
   not flat paper — otherwise the texture stops dead at the diagonal and the white
   side reads as a flat cut-out. Positions match build/index.html: the wedge shows
   rows 0..rise of the image and the section it meets picks up at -rise, so the
   grid runs continuously through the diagonal. */.sg-wedge-1::after{ background:var(--sg-paper) var(--sg-grid-light) center top/100% auto repeat !important; }.sg-wedge-2::before{ background:var(--sg-paper) var(--sg-grid-light) center top/100% auto repeat !important; }.sg-wedge-3::before{ background:#1DB57C !important; }.sg-wedge-3::after{ background:var(--sg-paper) var(--sg-grid-light) center top/100% auto repeat !important; }.sg-wedge-4::before{ background:var(--sg-paper) var(--sg-grid-light) center top/100% auto repeat !important; }.sg-wedge-5::before, .sg-wedge-5::after{ background:#1DB57C !important; }

/* buttons: long thin arrow like the comp */
/* Elementor's .e-button-base sets display:block, which beat a plain
   `display:inline-flex` here — so align-items/justify-content were inert on every
   button. Harmless-looking on the ghost buttons (their arrow is only 12px tall),
   but it dropped "View All Products" text below its 60px disc. Needs !important. */button.sg-btn-ghost, button.sg-btn-ghost-light, button.sg-btn-ghost-navy, button.sg-btn-green{ display:inline-flex !important; align-items:center !important; gap:16px; cursor:pointer; line-height:1; }button[class*="sg-btn"]::after{ content:''; display:inline-block; width:36px; height:12px; flex:0 0 auto; background:currentColor; -webkit-mask:no-repeat center/contain; mask:no-repeat center/contain; -webkit-mask-image:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 12'><path d='M0 6h41M35.5 1 41 6l-5.5 5' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); mask-image:url("data:image/svg+xml; utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 12'><path d='M0 6h41M35.5 1 41 6l-5.5 5' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }

/* explicit wedge heights + overlaps (no calc dependency) */
/* Wedge heights and overlaps match build/index.html exactly. Do NOT nudge a wedge
   with its own margins to reposition the diagonal: a positive margin-bottom opens a
   real gap below it (a dark band across the page), and a negative one pulls the next
   section up so its background blunts the point of the diagonal at the shallow end.
   Both were visible bugs. The diagonal IS the section boundary — move it by taking N
   off the preceding section's padding-bottom and adding N to the next section's
   padding-top, which shifts the boundary and leaves all content where it was. */.e-con.sg-wedge-1{ height:114px !important; margin-top:-90px !important; margin-bottom:0 !important; }.e-con.sg-wedge-2{ height:85px  !important; margin-top:0 !important; margin-bottom:-85px !important; }.e-con.sg-wedge-3{ height:139px !important; margin-top:-114px !important; margin-bottom:0 !important; }.e-con.sg-wedge-4{ height:114px !important; margin-top:0 !important; margin-bottom:-114px !important; }.e-con.sg-wedge-5{ height:105px !important; margin-top:-105px !important; margin-bottom:0 !important; }

/* ── footer: lead left, logo hard right, legal on its own row below ── */

/* buttons render 46px tall in the comp (92 for the big green one) */button[class*="sg-btn"]{ height:46px; align-items:center; justify-content:center; }button.sg-btn-green{ height:92px; font-size:19px; }
/* CTA headline leads at 60.5px/line in the comp (121px for two lines) */

/* ── About: match the HTML exactly — container 1190, cols 552/626, gap 12 ── */

/* Elementor gives every .e-con 10px inline padding; our containers are measured
   edge-to-edge against the comp, so zero it on the layout rows. */

/* the --padding-inline-* override doesn't win; set the property directly.
   Layout rows go to zero; components keep their own measured padding. */

/* Elementor emits logical border-*-radius longhands, but a later
   `border-radius` shorthand zeroes them. Restate as shorthand. */

/* match build/index.html: CTA headline uses the standard h2 leading, legal sits
   directly under the footer row */
/* solutions: head -> body gap is 54 in the HTML */

/* .e-con also carries default block padding (38px) — zero it on layout rows so a
   row is exactly as tall as its tallest child, like the HTML. */
/* solutions head: h2 column must be wide enough for the HTML's 3-line break */  /* loop grid is 9px taller than the old static row */

/* ─────────────────────────────────────────────────────────────────────────
   Section-by-section pass against build/index.html — fixes for things that
   were missing rather than merely mis-sized.
   ───────────────────────────────────────────────────────────────────────── */

/* Safe Fleet lockup ships as a grayscale JPEG with a black field. The HTML
   knocks the field out with mix-blend-mode; without it the logo renders as a
   black box on the dark benefits background. */

/* Header nav filled the row and left-aligned itself against the logo. */

/* Blog card: the .e-con default padding inset the image, leaving a 10px card-
   coloured border around the photo instead of a full-bleed top image. */

/* "View More Posts" sits at the right end of the grid in the HTML. sg-right
   only set align-items, which does nothing on a row. */

/* CTA headline: first line is Unbounded 400, only "with confidence." is 700.
   sg-h2 carries 500 for every other section heading, so override here only. */

/* Support row stacks and centres (global class now sets column). */

/* ── Missing decorations ──────────────────────────────────────────────────
   The reference draws these as inline <svg><use>. Elementor has no e-svg node
   in this document and they are purely ornamental, so they are masked
   pseudo-elements here — the same technique the button arrows already use.
   Note the `content:'' !important`: Elementor defines .e-con::before/::after
   itself and silently suppresses ours otherwise. */

/* "View All Products" carries a white disc with a NE arrow, not the thin line */button.sg-btn-green{ width:455px; padding:0 16px 0 40px !important; justify-content:space-between !important; gap:20px; }button.sg-btn-green::after{ width:60px; height:60px; border-radius:50%; background:#FFFFFF; -webkit-mask:none; mask:none; background-image:var(--sg-arrow-ne); background-repeat:no-repeat; background-position:center; background-size:16px 16px; }

/* benefits carousel chevrons, 60px outside the 1272 card row */.sg-benefits > .e-con.sg-ben-cards::before,
.sg-chevrons::after{ content:'' !important; display:block !important; position:absolute; top:50%; transform:translateY(-50%); width:34px; height:34px; background:#1DB57C; -webkit-mask:no-repeat center/contain; mask:no-repeat center/contain; }.sg-chevrons::before{ left:-60px; -webkit-mask-image:var(--sg-chev-l); mask-image:var(--sg-chev-l); }.sg-chevrons::after{ right:-60px; -webkit-mask-image:var(--sg-chev-r); mask-image:var(--sg-chev-r); }

/* blog lede is 22px/591 in the reference; sg-lede is 20px for the benefits lede */

/* solutions panel caption: heading run is 700 uppercase, body stays 400 */

/* The Safe Fleet lockup is a grayscale JPEG on a black field; mix-blend-mode
   knocks the field out. But .sg-benefits carried z-index:1, which makes it a
   stacking context, so the blend had nothing but transparency to work against
   and the black stayed. Benefits/Stats sit inside .sg-darkblock, which already
   provides the layer the wedges need, so neither needs its own z-index. */.e-con.sg-benefits, .e-con.sg-stats{ z-index:auto !important; }/* The Safe Fleet lockup is a grayscale JPEG on a black field; mix-blend-mode
   knocks the field out. But .sg-benefits carried z-index:1, which makes it a
   stacking context, so the blend had nothing but transparency to work against
   and the black stayed. Benefits/Stats sit inside .sg-darkblock, which already
   provides the layer the wedges need, so neither needs its own z-index. */

/* Solutions panel caption: the heading run is Figtree 700 uppercase black. */
/* the caption heading renders as <h3>, not <h2> */
/* about H2 sat 10px low against the reference */

/* CTA sub sits 15px tighter under the headline than it was */

/* The cobrand→H2 gap was 21 too large and H2→lede 21 too small; tightening the
   first alone dragged the whole section up, so the 21 goes back below the H2. */

/* Stats columns are 313 wide in both, but the WP cells centred on the cross axis,
   which shrink-wrapped each line instead of centring text inside the full column.
   That is why "100+ YEARS" stayed on one line instead of breaking like the comp. */

/* ── Hover states ─────────────────────────────────────────────────────────
   Matching build/index.html: ghost buttons fill with their own outline colour,
   the solid green darkens, nav links and pills go green. */button[class*="sg-btn"]{ transition:background-color .15s ease, color .15s ease, border-color .15s ease; }button.sg-btn-ghost:hover, button.sg-btn-ghost-light:hover{ background-color:#1DB57C !important; color:#FFFFFF !important; border-color:#1DB57C !important; }button.sg-btn-ghost-navy:hover{ background-color:#12303E !important; color:#1DB57C !important; border-color:#12303E !important; }button.sg-btn-green:hover{ background-color:#17A06E !important; }

/* ── Solutions: Elementor Pro Nested Tabs ─────────────────────────────────
   Replaces the six static e-div-block "pills" and the single hard-coded panel.
   Real tabs: keyboard support, aria-selected, one pane per product.
   Note e-tabs (the atomic tabs widget) does NOT exist in Elementor 4.2.1 —
   only 19 atomic widgets are registered and tabs is not one of them.

   The 01-06 numbers come from a CSS counter rather than markup, so the tab
   title stays a single plain-text field that is editable in the UI. */.sg-solutions .e-n-tabs{ display:flex !important; flex-direction:row !important; align-items:flex-start; width:1163px; max-width:100%; }.sg-solutions .e-n-tabs-heading{ display:flex !important; flex-direction:column !important; flex:0 0 588px; width:588px; counter-reset:sgprod; border:0 !important; }.sg-solutions .e-n-tabs-content{ padding:0 !important; }

/* tab title == the pill */.sg-solutions .e-n-tab-title{ display:flex !important; align-items:center; width:588px; padding:0 40px !important; margin:0 !important; background:#FFFFFF !important; border:1px solid #DDDDDD !important; border-radius:120px !important; cursor:pointer; text-align:left; transition:background-color .15s ease, border-color .15s ease; }.sg-solutions .e-n-tab-title::before{ counter-increment:sgprod; content:counter(sgprod, decimal-leading-zero); flex:0 0 auto; font-family:'Unbounded','Unbounded Fallback',sans-serif; font-size:24px; font-weight:400; line-height:1; letter-spacing:0; color:#444444; }.sg-solutions .e-n-tab-title::after{ content:''; flex:0 0 auto; margin-left:auto; width:36px; height:12px; background:#444444; -webkit-mask:no-repeat center/contain; mask:no-repeat center/contain; -webkit-mask-image:var(--sg-arrow-e); mask-image:var(--sg-arrow-e); }.sg-solutions .e-n-tab-title-text{ font-family:'Figtree','Figtree Fallback',sans-serif !important; font-size:24px !important; font-weight:500 !important; line-height:1 !important; letter-spacing:-0.01em !important; color:#444444; }.sg-solutions .e-n-tab-title:hover{ border-color:#1DB57C !important; }

/* active pill: near-black fill, green number, white label */.sg-solutions .e-n-tab-title[aria-selected="true"]{ background:#101010 !important; border-color:#101010 !important; }.sg-solutions .e-n-tab-title[aria-selected="true"]::before{ color:#1DB57C; }.sg-solutions .e-n-tab-title[aria-selected="true"]::after{ background:#FFFFFF; }.sg-solutions .e-n-tab-title[aria-selected="true"] .e-n-tab-title-text{ color:#FFFFFF; }

/* pane */.sg-solutions .e-n-tabs-content > .e-con{ padding:0 !important; }.sg-solutions .e-n-tabs-content .e-con-inner{ display:flex; flex-direction:column; align-items:flex-start; gap:0 !important; padding:0 !important; }
/* reference spacing lives on the image's margins, not a flex gap */

/* Elementor drives nested-tabs metrics through --n-tabs-* custom properties
   (gap:var(--n-tabs-gap) etc.), which beat a plain declaration. These need
   !important rather than a more specific selector. */.sg-solutions .e-n-tabs{ gap:120px !important; }.sg-solutions .e-n-tabs-heading{ gap:32px !important; }.sg-solutions .e-n-tab-title{ height:94px !important; min-height:94px !important; gap:24px !important; }.sg-solutions .e-n-tabs-content{ flex:0 0 455px !important; width:455px !important; }

/* ── Blog: Pro Loop Grid ──────────────────────────────────────────────────
   The three cards were hand-built atomic containers carrying the g-sg-post*
   Global Classes. They are now a loop-grid driven by the "Saegic Blog Card"
   loop-item template (post 137), which is a CLASSIC document — classic widgets
   cannot reference Global Classes, so the card's design tokens had to move
   here. Page 9 no longer uses g-sg-post*, so Elementor stopped emitting that
   CSS entirely (see §2: global-class CSS is only emitted for classes the post
   actually uses).

   Note containers take `css_classes`, widgets take `_css_classes`, and the
   widget class lands on the WRAPPER div — the text is in .elementor-heading-title. */.sg-blog .sg-loop .elementor-grid{ display:grid !important; grid-template-columns:repeat(3,1fr) !important; gap:100px !important; width:100%; max-width:1240px; margin-inline:auto; }.sg-blog .sg-loop .elementor-loop-container{ width:100%; }.sg-blog .e-loop-item{ display:flex; }.e-con.sg-post{ background-color:#F4F4F4 !important; border-radius:20px !important; overflow:hidden; flex-direction:column !important; align-items:flex-start !important; width:100%; padding:0 !important; gap:0 !important; }.sg-post-img{ width:100%; line-height:0; overflow:hidden; }.sg-post-img a{ display:block; }.sg-post-img img{ width:100%; aspect-ratio:347/218; object-fit:cover; display:block; }.e-con.sg-post-body{ padding:26px 26px 28px !important; gap:20px !important; flex-direction:column !important; align-items:flex-start !important; width:100%; flex:1 1 auto; }.sg-post-title{ flex:1 1 auto; }.sg-post-title .elementor-heading-title,
.sg-post-title .elementor-heading-title a{ font-family:'Figtree','Figtree Fallback',sans-serif !important; font-size:18px !important; font-weight:400 !important; line-height:1.7 !important; letter-spacing:-0.01em !important; color:#444444 !important; text-decoration:none; }.sg-readmore .elementor-heading-title,
.sg-readmore .elementor-heading-title a{ font-family:'Figtree','Figtree Fallback',sans-serif !important; font-size:18px !important; font-weight:700 !important; line-height:1.7 !important; letter-spacing:-0.01em !important; color:#12303E !important; text-decoration:underline; }.sg-post-title .elementor-heading-title a:hover,
.sg-readmore .elementor-heading-title a:hover{ color:#1DB57C !important; }.sg-post-img img{ transition:transform .3s ease; }.sg-post:hover .sg-post-img img{ transform:scale(1.03); }

/* ── Header outside the landing page ──────────────────────────────────────
   The header is absolutely positioned so the hero's CurvedGrid runs underneath
   it; the hero carries 260px of top padding to compensate. Every OTHER page
   (posts, archives) has no such hero, so the header was overlapping the first
   line of content — and its white text sat on a white background.
   Restrict the overlay to the landing page and give the header its own navy
   band everywhere else. */body:not(.page-id-9) .elementor-location-header{ position:relative !important; height:auto !important; }body:not(.page-id-9) .sg-header,
body:not(.page-id-9) .elementor-location-header{ position:relative; background-color:#12303E !important; }

/* ── Single post: readable defaults on the brand ──────────────────────────
   There is no Theme Builder single template and no comp for one — this is
   sane typography, not a design. */body.single-post .site-main,
body.single-post .page-content{ max-width:760px; margin-inline:auto; padding:72px 24px 96px; font-family:'Figtree','Figtree Fallback',sans-serif; font-size:18px; line-height:1.7; letter-spacing:-0.01em; color:#444444; }body.single-post .entry-title{ font-family:'Unbounded','Unbounded Fallback',sans-serif; font-size:42px; font-weight:500; line-height:1.24; letter-spacing:0; text-transform:uppercase; color:#12303E; margin-bottom:32px; }body.single-post .site-main h2{ font-family:'Figtree','Figtree Fallback',sans-serif; font-size:24px; font-weight:700; letter-spacing:-0.01em; color:#12303E; margin:40px 0 12px; }body.single-post .site-main p{ margin:0 0 20px; }body.single-post .site-main a{ color:#1DB57C; }

/* ── CTA: even vertical rhythm ────────────────────────────────────────────
   The reference runs 26px then 30px between headline → sub → button; the build
   had drifted to 25 then 67. Both are now 28 so the three blocks are evenly
   spaced. (The two headline lines stay flush — they are one heading, not two
   elements.) The 36px this removes goes back into the section's bottom padding
   so the footer stays put.
   Sub colour is black rather than the reference's #444: #444 on #1DB57C is
   about 3.3:1, under the 4.5:1 WCAG AA threshold for body text. */

/* ── Header navigation — Elementor Pro Nav Menu ───────────────────────────
   Was four atomic e-paragraph widgets: no submenus, no links, no keyboard or
   mobile behaviour. Now the real nav-menu widget bound to the "Primary" WP
   menu, restyled to the comp. The design values are unchanged: Figtree 17px,
   -0.9% tracking, 56px between items, green chevrons. Item colours (normal, hover,
   active) are NOT set here — they come from the header's Nav Menu widget settings so
   they stay editable in Elementor. Don't reintroduce color !important on .elementor-item.

   The search icon used to hang off .sg-nav::after. .sg-nav is now the widget
   wrapper (a block div), so it moved to .sg-header::after where it is still a
   flex item of the header row. */.sg-header .sg-nav{ margin-left:auto; width:auto; }.sg-header .sg-nav .elementor-widget-container{ display:flex; justify-content:flex-end; }
/* Elementor's nav-menu CSS carries the kit's global typography and loads after
   the child theme, so these need !important rather than more specificity. */.sg-nav .elementor-nav-menu--main > .elementor-nav-menu{ display:flex !important; flex-direction:row !important; flex-wrap:nowrap !important; gap:56px !important; align-items:center !important; }.sg-nav .elementor-nav-menu--main .elementor-item{ font-family:'Figtree','Figtree Fallback',sans-serif !important; font-size:16px !important; font-weight:400 !important; line-height:1 !important; letter-spacing:-0.009em !important; padding:0 !important; display:inline-flex !important; align-items:center; gap:9px; white-space:nowrap; transition:color .15s ease; }.sg-nav .elementor-nav-menu--main .elementor-nav-menu > li{ margin:0 !important; }.sg-nav .elementor-nav-menu--main .elementor-item:hover,
.sg-nav .elementor-nav-menu--main .elementor-item:focus,
.sg-nav .elementor-nav-menu--main .elementor-item.elementor-item-active{ background:transparent !important; }
/* the comp's chevron is a thin 14x8 stroke, not Font Awesome's solid caret */
/* Elementor pads .sub-arrow 10px 0 10px 10px, which made every item 10px wider
   than the comp. The 9px text→chevron gap is set on the <a> instead. The mobile
   dropdown needs its own gap, since the sub-arrow margin is zeroed here. */.sg-nav .elementor-nav-menu--dropdown .elementor-item.has-submenu{ gap:12px; }.sg-nav .sub-arrow{ display:inline-flex !important; align-items:center; margin:0 !important; padding:0 !important; }.sg-nav .sub-arrow svg, .sg-nav .sub-arrow i{ width:14px !important; height:8px !important; font-size:0; background:#1DB57C; -webkit-mask:no-repeat center/contain; mask:no-repeat center/contain; -webkit-mask-image:var(--sg-chev-d); mask-image:var(--sg-chev-d); }.sg-nav .sub-arrow svg path{ display:none; }

/* dropdown panel */.sg-nav .elementor-nav-menu--dropdown{ background-color:#12303E !important; border-radius:12px !important; padding:12px 0 !important; min-width:232px !important; width:auto !important; box-shadow:0 18px 40px rgba(0,0,0,.28); border:0 !important; overflow:hidden; }.sg-nav .elementor-nav-menu--dropdown a.elementor-sub-item{ font-family:'Figtree','Figtree Fallback',sans-serif; font-size:16px; font-weight:400; line-height:1.5; letter-spacing:-0.01em; color:#FFFFFF; padding:11px 24px; background:transparent; transition:color .15s ease, background-color .15s ease; }.sg-nav .elementor-nav-menu--dropdown a.elementor-sub-item:hover,
.sg-nav .elementor-nav-menu--dropdown a.elementor-sub-item:focus{ color:#1DB57C; background-color:rgba(255,255,255,.04); }

/* search icon, now a flex item of the header row */.e-con.sg-header::after{ content:'' !important; display:block !important; width:22px; height:22px; flex:0 0 auto; margin-left:34px; background:#1DB57C; cursor:pointer; -webkit-mask:no-repeat center/contain; mask:no-repeat center/contain; -webkit-mask-image:var(--sg-search); mask-image:var(--sg-search); }

/* burger (phones) */.sg-nav .elementor-menu-toggle{ color:#FFFFFF; background:transparent; }.sg-nav .elementor-nav-menu--dropdown.elementor-nav-menu__container{ background-color:#12303E; }
