/* ==========================================================================
   GLORINDA — Elementor compatibility layer

   Loaded only on Glorinda pages, and only when they are Elementor documents.
   It reconciles two layout systems that each assume they own the page.

   Nothing here restyles the site. Every rule either neutralises an Elementor
   default that would otherwise be added on top of the design system, or hands
   a layout job back to the stylesheet that was written for it.

   Section index
     1  Neutralise Elementor's structural defaults
     2  Hand grid and split layout back to the design system
     3  Editor-only affordances
     4  Generated: the design system restated above Elementor's global kit
   ========================================================================== */

/* --------------------------------------------------------------------------
   1  NEUTRALISE ELEMENTOR'S STRUCTURAL DEFAULTS

   Elementor spaces widgets with a 20px bottom margin and pads columns by 10px.
   The design system already owns vertical rhythm through .g-section, the
   utility margins and each component's own spacing, so Elementor's layer would
   be a second, competing set of numbers.

   Every top-level section the exporter creates carries `.g-el-band` alongside
   its own classes. Scoping to that rather than to `.g-section, .g-hero, .g-cta,
   …` means a new kind of band cannot quietly miss out on these rules — which is
   what happened to the 43 product heroes, whose class is `.g-phero` and which
   were therefore keeping Elementor's 20px widget margin and 10px column padding.

   It also keeps the scope honest: an Elementor template dropped into a Glorinda
   page by shortcode is not inside a band, so it spaces itself normally.
   -------------------------------------------------------------------------- */

.g-el-band > .elementor-container{
  padding:0;
  max-inline-size:none;
}

.g-el-band .elementor-widget-wrap{ padding:0; }

/* The design system's own margins decide the gaps between blocks. */
.g-el-band .elementor-widget:not(:last-child){ margin-block-end:0; }

/* Elementor's heading widget wraps the heading in two divs. Neither should
   introduce a box of its own. */
.g-el-band .elementor-widget-container{ margin:0; padding:0; }

/* A column carrying .g-wrap must keep the container's centring behaviour
   rather than Elementor's flex stretch. */
.elementor-column.g-wrap{
  display:block;
  inline-size:100%;
  max-inline-size:var(--g-container);
  margin-inline:auto;
  padding-inline:var(--g-gutter);
}

/* --------------------------------------------------------------------------
   2  GRID AND SPLIT

   These two were CSS grids in the static build. As Elementor inner sections
   they become flex rows, so each card and each side of a split is an
   independently editable element. The measurements are the same ones the
   grid used.

   The gap between items is set here, on the flex container, and the sections are
   exported with Elementor's column gap switched off. Elementor implements a
   column gap as padding *inside* each column, so using it would have pushed
   every card 24px away from its own border while this gap still separated the
   columns — two spacings doing one job, in the wrong places.
   -------------------------------------------------------------------------- */

.g-grid-el > .elementor-container{
  display:flex;
  flex-wrap:wrap;
  gap:var(--g-s5);
  align-items:stretch;
}
.g-grid-el > .elementor-container > .elementor-column{
  inline-size:auto;
  flex:1 1 16.5rem;   /* matches .g-grid--3's minmax() track */
}
.g-grid--2.g-grid-el > .elementor-container > .elementor-column{ flex-basis:19rem; }
.g-grid--4.g-grid-el > .elementor-container > .elementor-column{ flex-basis:13rem; }

/* Cards fill the column so a row of them still lines up along the bottom. */
.g-grid-el .elementor-column > .elementor-widget-wrap,
.g-grid-el .elementor-widget-html,
.g-grid-el .elementor-widget-html > .elementor-widget-container,
.g-grid-el .g-card,
.g-grid-el .g-mcard{ block-size:100%; }

.g-split-el > .elementor-container{
  display:flex;
  flex-wrap:wrap;
  gap:var(--g-s6);
}
.g-split-el > .elementor-container > .elementor-column{ inline-size:100%; }

@media (min-width:60rem){
  .g-split-el > .elementor-container{ flex-wrap:nowrap; gap:var(--g-s8); }
  .g-split-el > .elementor-container > .g-split__aside{
    flex:0 0 17rem;
    inline-size:17rem;
    align-self:start;
    position:sticky;
    inset-block-start:6.5rem;
  }
  .g-split-el > .elementor-container > .g-split__main{ flex:1 1 0; min-inline-size:0; }
}

/* --------------------------------------------------------------------------
   3  EDITOR-ONLY AFFORDANCES

   Inside the Elementor editor, an empty-looking section is hard to grab. These
   rules apply only in the editor preview, never on the published page.
   -------------------------------------------------------------------------- */

.elementor-editor-active .g-section{ min-block-size:4rem; }
.elementor-editor-active .g-hero__media{ pointer-events:none; }
/* ==========================================================================
   GLORINDA — native Elementor widget styling

   The components that used to be hand-written markup are now core Elementor
   widgets: heading, icon-box, image-box, accordion, button. A native widget
   renders Elementor's own markup, so the design system's `.g-card` and friends no
   longer reach it. This file restates that design against Elementor's classes
   instead.

   These are DEFAULTS, not locks. Elementor writes per-element CSS at a higher
   specificity than anything here, so the moment you change a colour, a size or
   a spacing in the Style tab, your change wins. That is the whole point: the
   page arrives looking right, and every part of it is yours to adjust.

   Section index
     1  Eyebrow labels        (heading)
     2  Cards                 (icon-box)
     3  Media cards           (image-box)
     4  FAQ                   (accordion)
     5  Row lists: definitions, steps, links, downloads   (icon-box per row)
     6  Buttons               (button)
     7  Elementor's "Optimized Markup" experiment
   ========================================================================== */

/* --------------------------------------------------------------------------
   1  EYEBROW LABELS

   Elementor puts the custom class on the widget wrapper, not on the <p>, so the
   type is set on the wrapper and inherited. The sector rule that precedes the
   label is drawn on the inner heading, where it can sit beside the text.
   -------------------------------------------------------------------------- */

.g-eyebrow.elementor-widget-heading{ margin-block-end:var(--g-s4); }

.g-eyebrow .elementor-heading-title{
  display:flex; flex-wrap:wrap; align-items:center; gap:var(--g-s3);
  font-family:var(--g-font-mono);
  font-size:var(--g-fs-eyebrow);
  font-weight:500;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--g-ink-muted);
  line-height:1.2;
}

.g-eyebrow .elementor-heading-title::before{
  content:""; flex:none;
  inline-size:var(--g-s6); block-size:2px;
  background:var(--g-sector);
}

.g-section--dark .g-eyebrow .elementor-heading-title,
.g-hero .g-eyebrow .elementor-heading-title,
.g-phero .g-eyebrow .elementor-heading-title,
.g-cta .g-eyebrow .elementor-heading-title{ color:var(--g-ink-invert-2); }

/* --------------------------------------------------------------------------
   2  CARDS  (icon-box)

   The rating-plate top rule in the sector colour is the card's signature. It is
   drawn on the widget wrapper so it survives whatever you do to the inner
   layout.
   -------------------------------------------------------------------------- */

.g-card-el{ display:flex; }

.g-card-el > .elementor-widget-container{
  display:flex; flex-direction:column;
  inline-size:100%;
  padding:var(--g-s5);
  background:var(--g-white);
  border:1px solid var(--g-rule);
  border-block-start:3px solid var(--g-sector);
  border-radius:0 0 var(--g-radius) var(--g-radius);
  transition:border-color var(--g-dur-2) var(--g-ease),
             box-shadow var(--g-dur-2) var(--g-ease),
             transform var(--g-dur-2) var(--g-ease);
}

.g-card-el:hover > .elementor-widget-container{
  border-color:var(--g-sector);
  box-shadow:0 12px 28px rgb(38 50 56 / 10%);
  transform:translateY(-2px);
}

.g-card-el .elementor-icon-box-icon{
  margin-block-end:var(--g-s4);
  text-align:start;
}
.g-card-el .elementor-icon{
  color:var(--g-sector-ink);
  font-size:1.75rem;
}
/* Size only. The brand icons are stroked, not filled, and they declare
   fill="none" stroke="currentColor" on the <svg> itself — forcing a fill here
   would turn every one of them into a solid blob. A Font Awesome icon renders as
   an <i> with a webfont glyph and never reaches this rule at all. */
.g-card-el .elementor-icon svg{ inline-size:1.75rem; block-size:1.75rem; }

.g-card-el .elementor-icon-box-content{ text-align:start; }

.g-card-el .elementor-icon-box-title{
  margin:0 0 var(--g-s3);
  font-size:var(--g-fs-h3);
  font-weight:600;
  letter-spacing:-.01em;
  color:var(--g-ink);
}
.g-card-el .elementor-icon-box-title a{ color:inherit; text-decoration:none; }

.g-card-el .elementor-icon-box-description{
  margin:0;
  font-size:var(--g-fs-small);
  color:var(--g-ink-2);
}

/* A card on an alternate or washed band keeps a white face. */
.g-section--alt .g-card-el > .elementor-widget-container,
.g-section--wash .g-card-el > .elementor-widget-container{ background:var(--g-white); }

.g-section--dark .g-card-el > .elementor-widget-container{
  background:var(--g-surface-dark-2);
  border-color:var(--g-rule-invert);
}
.g-section--dark .g-card-el .elementor-icon-box-title{ color:var(--g-ink-invert); }
.g-section--dark .g-card-el .elementor-icon-box-description{ color:var(--g-ink-invert-2); }

/* The slider card carries a mono kicker instead of an icon. */
.g-card-el--kicker .elementor-icon-box-icon{ display:none; }

/* --------------------------------------------------------------------------
   3  MEDIA CARDS  (image-box)
   -------------------------------------------------------------------------- */

.g-mcard-el{ display:flex; }

.g-mcard-el > .elementor-widget-container{
  display:flex; flex-direction:column;
  inline-size:100%;
  background:var(--g-white);
  border:1px solid var(--g-rule);
  overflow:hidden;
}

.g-mcard-el .elementor-image-box-wrapper{
  display:flex; flex-direction:column;
  block-size:100%;
}

.g-mcard-el .elementor-image-box-img{
  margin:0 !important;   /* Elementor's default spacing between image and text */
  inline-size:100%;
  aspect-ratio:16/10;
  overflow:hidden;
  background:var(--g-light);
}
.g-mcard-el .elementor-image-box-img img{
  inline-size:100%; block-size:100%;
  object-fit:cover;
  transition:transform var(--g-dur-3) var(--g-ease);
}
.g-mcard-el:hover .elementor-image-box-img img{ transform:scale(1.03); }

.g-mcard-el .elementor-image-box-content{
  display:flex; flex-direction:column; flex:1;
  padding:var(--g-s5);
  border-block-start:3px solid var(--g-sector);
  text-align:start;
}

.g-mcard-el .elementor-image-box-title{
  margin:0 0 var(--g-s3);
  font-size:var(--g-fs-h3);
  font-weight:600;
  letter-spacing:-.01em;
  color:var(--g-ink);
}
.g-mcard-el .elementor-image-box-title a{ color:inherit; text-decoration:none; }

.g-mcard-el .elementor-image-box-description{
  margin:0;
  font-size:var(--g-fs-small);
  color:var(--g-ink-2);
}

/* --------------------------------------------------------------------------
   4  FAQ  (accordion)

   Reproduces the plus-to-cross toggle the hand-written <details> version used,
   including the 135° rotation on open.
   -------------------------------------------------------------------------- */

.g-faq-el .elementor-accordion{ border-block-start:1px solid var(--g-rule); }

.g-faq-el .elementor-accordion-item{
  border:0;
  border-block-end:1px solid var(--g-rule);
}

.g-faq-el .elementor-tab-title{
  display:flex; align-items:center; justify-content:space-between; gap:var(--g-s4);
  min-block-size:3.5rem;
  padding:var(--g-s4) 0;
  background:none;
  font-size:var(--g-fs-h4);
  font-weight:600;
  letter-spacing:-.01em;
  color:var(--g-ink);
}
.g-faq-el .elementor-tab-title a{ color:inherit; text-decoration:none; }

/* Elementor's own chevron is replaced by the design's plus/cross mark. */
.g-faq-el .elementor-accordion-icon{ inline-size:auto; }
.g-faq-el .elementor-accordion-icon i,
.g-faq-el .elementor-accordion-icon svg{ display:none; }

.g-faq-el .elementor-accordion-icon::after{
  content:""; display:block; flex:none;
  inline-size:1rem; block-size:1rem;
  background:var(--g-sector-ink);
  clip-path:polygon(46% 0,54% 0,54% 46%,100% 46%,100% 54%,54% 54%,54% 100%,46% 100%,46% 54%,0 54%,0 46%,46% 46%);
  transition:transform var(--g-dur-2) var(--g-ease);
}
.g-faq-el .elementor-tab-title.elementor-active .elementor-accordion-icon::after{
  transform:rotate(135deg);
}

.g-faq-el .elementor-tab-content{
  padding:0 0 var(--g-s5);
  border:0;
  color:var(--g-ink-2);
}
.g-faq-el .elementor-tab-content p{ color:var(--g-ink-2); }

/* --------------------------------------------------------------------------
   5  ROW LISTS  (icon-box, one per row)

   Definitions, numbered steps, resource links and downloads are lists whose
   every row carries a label and a body. Each row is its own icon-box widget —
   label in the title, body in the description — grouped inside an inner section
   so the list is still one thing to move or duplicate.

   The row rules live on the widget element itself rather than on
   `.elementor-widget-container`, because a hairline between rows is list
   structure, not decoration on a box: it has to hold whether or not that wrapper
   is rendered. Everything a row is decorated *with* stays on the container,
   where Elementor's own Style tab writes.
   -------------------------------------------------------------------------- */

.g-defs-el .elementor-widget,
.g-steps-el .elementor-widget,
.g-links-el .elementor-widget,
.g-dl-list-el .elementor-widget{
  inline-size:100%;
  border-block-start:1px solid var(--g-rule);
}
.g-defs-el .elementor-widget:last-child,
.g-steps-el .elementor-widget:last-child,
.g-links-el .elementor-widget:last-child,
.g-dl-list-el .elementor-widget:last-child{ border-block-end:1px solid var(--g-rule); }

.g-section--dark .g-defs-el .elementor-widget,
.g-section--dark .g-steps-el .elementor-widget,
.g-section--dark .g-links-el .elementor-widget,
.g-section--dark .g-dl-list-el .elementor-widget{ border-color:var(--g-rule-invert); }

/* 5.1  Definition rows — challenge beside its answer */

.g-def-el{ padding-block:var(--g-s5); }

.g-def-el .elementor-icon-box-content{ display:grid; gap:var(--g-s3); }

@media (min-width:48rem){
  .g-def-el .elementor-icon-box-content{
    grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);
    gap:var(--g-s6);
    align-items:start;
  }
}

.g-def-el .elementor-icon-box-title{
  margin:0;
  font-size:var(--g-fs-body);
  font-weight:600;
  letter-spacing:-.01em;
  color:var(--g-ink);
}
.g-def-el .elementor-icon-box-description{
  margin:0;
  font-size:var(--g-fs-small);
  color:var(--g-ink-2);
}
.g-def-el .elementor-icon-box-description a{ color:var(--g-primary); }

.g-section--dark .g-def-el .elementor-icon-box-title{ color:var(--g-white); }
.g-section--dark .g-def-el .elementor-icon-box-description{ color:var(--g-ink-invert-2); }

/* 5.2  Numbered steps

   The number was never in the markup — it is a CSS counter — so it is a counter
   here too, which means it keeps counting correctly however you reorder, insert
   or delete steps in Elementor. */

.g-steps-el .elementor-widget-wrap{ counter-reset:g-step; }
.g-step-el{ counter-increment:g-step; padding-block:var(--g-s5); }

.g-step-el .elementor-icon-box-wrapper{ display:grid; gap:var(--g-s4); }

.g-step-el .elementor-icon-box-wrapper::before{
  content:counter(g-step,decimal-leading-zero);
  font-family:var(--g-font-mono);
  font-size:var(--g-fs-h3);
  font-weight:500;
  line-height:1;
  color:var(--g-sector-ink);
}

@media (min-width:48rem){
  .g-step-el .elementor-icon-box-wrapper{
    grid-template-columns:6rem minmax(0,1fr);
    gap:var(--g-s6);
    align-items:start;
  }
}

.g-step-el .elementor-icon-box-title{
  margin:0 0 var(--g-s3);
  font-size:var(--g-fs-h3);
  font-weight:600;
  letter-spacing:-.01em;
  color:var(--g-ink);
}
.g-step-el .elementor-icon-box-description{ margin:0; color:var(--g-ink-2); }

.g-section--dark .g-step-el .elementor-icon-box-wrapper::before{ color:var(--g-sector); }
.g-section--dark .g-step-el .elementor-icon-box-title{ color:var(--g-ink-invert); }
.g-section--dark .g-step-el .elementor-icon-box-description{ color:var(--g-ink-invert-2); }

/* 5.3  Resource links — label and note on the left, arrow on the right */

.g-link-el{ min-block-size:3.25rem; padding-block:var(--g-s3); }

.g-link-el .elementor-icon-box-wrapper{
  display:flex; flex-direction:row-reverse;
  align-items:center; justify-content:space-between; gap:var(--g-s4);
}
.g-link-el .elementor-icon-box-icon{ margin:0; flex:none; }
.g-link-el .elementor-icon{
  color:var(--g-sector-ink);
  font-size:1rem;
  transition:transform var(--g-dur-1) var(--g-ease);
}
.g-link-el .elementor-icon svg{ inline-size:1rem; block-size:1rem; }
.g-link-el:hover .elementor-icon{ transform:translateX(3px); }

.g-link-el .elementor-icon-box-content{ text-align:start; }

.g-link-el .elementor-icon-box-title{
  margin:0;
  font-size:var(--g-fs-small);
  font-weight:600;
  color:var(--g-ink);
}
.g-link-el .elementor-icon-box-title a{ color:inherit; text-decoration:none; }
.g-link-el:hover .elementor-icon-box-title a{ color:var(--g-sector-ink); }

.g-link-el .elementor-icon-box-description{
  margin:0;
  font-size:var(--g-fs-micro);
  color:var(--g-ink-muted);
}

/* 5.4  Downloads — icon, title, then the format pushed to the right */

.g-dl-el{ min-block-size:3.5rem; padding-block:var(--g-s3); }

.g-dl-el .elementor-icon-box-wrapper{
  display:flex; align-items:center; gap:var(--g-s4);
}
.g-dl-el .elementor-icon-box-icon{ margin:0; flex:none; }
.g-dl-el .elementor-icon{ color:var(--g-sector-ink); font-size:1.25rem; }
.g-dl-el .elementor-icon svg{ inline-size:1.25rem; block-size:1.25rem; }

.g-dl-el .elementor-icon-box-content{
  display:flex; align-items:center; gap:var(--g-s4);
  flex:1;
  text-align:start;
}

.g-dl-el .elementor-icon-box-title{
  margin:0;
  font-size:var(--g-fs-body);
  font-weight:600;
  color:var(--g-ink);
}
.g-dl-el .elementor-icon-box-title a{ color:inherit; text-decoration:none; }
.g-dl-el:hover .elementor-icon-box-title a{ color:var(--g-primary); }

.g-dl-el .elementor-icon-box-description{
  margin-inline-start:auto;
  margin-block:0;
  font-family:var(--g-font-mono);
  font-size:var(--g-fs-micro);
  color:var(--g-ink-muted);
  white-space:nowrap;
}

/* --------------------------------------------------------------------------
   6  BUTTONS
   -------------------------------------------------------------------------- */

.g-btn-el .elementor-button{
  display:inline-flex; align-items:center; gap:var(--g-s2);
  padding:var(--g-s3) var(--g-s5);
  border:1px solid transparent;
  border-radius:var(--g-radius);
  font-family:var(--g-font);
  font-size:var(--g-fs-body);
  font-weight:600;
  letter-spacing:0;
  text-decoration:none;
  transition:background var(--g-dur-2) var(--g-ease),
             border-color var(--g-dur-2) var(--g-ease),
             color var(--g-dur-2) var(--g-ease);
}

.g-btn-el--primary .elementor-button{
  background:var(--g-primary);
  color:var(--g-white);
}
.g-btn-el--primary .elementor-button:hover{ background:var(--g-deep); color:var(--g-white); }

.g-btn-el--ghost .elementor-button{
  background:transparent;
  border-color:var(--g-primary);
  color:var(--g-primary);
}
.g-btn-el--ghost .elementor-button:hover{ background:var(--g-primary); color:var(--g-white); }

/* On dark bands both variants invert, as they do in the design system. */
.g-hero .g-btn-el--primary .elementor-button,
.g-phero .g-btn-el--primary .elementor-button,
.g-cta .g-btn-el--primary .elementor-button,
.g-section--dark .g-btn-el--primary .elementor-button{
  background:var(--g-white); color:var(--g-charcoal);
}
.g-hero .g-btn-el--ghost .elementor-button,
.g-phero .g-btn-el--ghost .elementor-button,
.g-cta .g-btn-el--ghost .elementor-button,
.g-section--dark .g-btn-el--ghost .elementor-button{
  border-color:var(--g-white); color:var(--g-white);
}
.g-hero .g-btn-el--ghost .elementor-button:hover,
.g-phero .g-btn-el--ghost .elementor-button:hover,
.g-cta .g-btn-el--ghost .elementor-button:hover,
.g-section--dark .g-btn-el--ghost .elementor-button:hover{
  background:var(--g-white); color:var(--g-charcoal);
}

/* Button rows sit side by side, as .g-btnrow did. */
.g-btn-el{ display:inline-block; margin-inline-end:var(--g-s3); margin-block-start:var(--g-s5); }

/* The inline "Read more" link is a button widget wearing link clothes, so it
   stays editable without looking like a button. */
.g-alink-el .elementor-button{
  padding:0;
  background:none;
  border:0;
  color:var(--g-primary);
  font-weight:600;
  text-decoration:none;
  border-block-end:1px solid currentColor;
  border-radius:0;
}
.g-alink-el .elementor-button:hover{ background:none; color:var(--g-deep); }
.g-alink-el{ display:inline-block; margin-block-start:var(--g-s5); }

.g-hero .g-alink-el .elementor-button,
.g-cta .g-alink-el .elementor-button,
.g-section--dark .g-alink-el .elementor-button{ color:var(--g-white); }

/* --------------------------------------------------------------------------
   7  ELEMENTOR'S "OPTIMIZED MARKUP" EXPERIMENT

   Cards and media cards wear their chrome — the face, the border, the sector
   rule along the top — on `> .elementor-widget-container`, because that is the
   element Elementor's own Background and Border controls write to. Style a card
   in the Style tab and your rule lands on the same element as ours and wins,
   which is the arrangement worth keeping.

   Elementor > Settings > Features has an experiment called Optimized Markup
   that stops rendering that wrapper. When it is on, Elementor's controls move to
   the widget itself — and so must ours, or 452 cards lose their design at once.

   The experiment is off on this installation (it defaults on only for sites
   first installed with Elementor 3.30 or later), so this section is insurance,
   not current behaviour. The declarations are duplicated rather than shared with
   section 2 on purpose: they have to be reachable without the wrapper, and a
   selector list that mentions a wrapper that does not exist matches nothing.
   -------------------------------------------------------------------------- */

@supports selector(:has(*)){

  .g-card-el:not(:has(> .elementor-widget-container)){
    display:flex; flex-direction:column;
    inline-size:100%;
    padding:var(--g-s5);
    background:var(--g-white);
    border:1px solid var(--g-rule);
    border-block-start:3px solid var(--g-sector);
    border-radius:0 0 var(--g-radius) var(--g-radius);
    transition:border-color var(--g-dur-2) var(--g-ease),
               box-shadow var(--g-dur-2) var(--g-ease),
               transform var(--g-dur-2) var(--g-ease);
  }
  .g-card-el:not(:has(> .elementor-widget-container)):hover{
    border-color:var(--g-sector);
    box-shadow:0 12px 28px rgb(38 50 56 / 10%);
    transform:translateY(-2px);
  }
  .g-section--dark .g-card-el:not(:has(> .elementor-widget-container)){
    background:var(--g-surface-dark-2);
    border-color:var(--g-rule-invert);
  }

  .g-mcard-el:not(:has(> .elementor-widget-container)){
    display:flex; flex-direction:column;
    inline-size:100%;
    background:var(--g-white);
    border:1px solid var(--g-rule);
    overflow:hidden;
  }
}

/* --------------------------------------------------------------------------
   4  GENERATED — the design system, restated above Elementor's global kit

   Do not edit. Produced by build/elementor_export.py from glorinda.css.
   See build_compat_css() for why this exists.
   -------------------------------------------------------------------------- */

body[class*="elementor-kit"]{ font-family:var(--g-font); font-size:var(--g-fs-body); line-height:var(--g-lh-body); color:var(--g-ink); }
body[class*="elementor-kit"] button{ color:inherit; }
body[class*="elementor-kit"] ::selection{ color:var(--g-white); }
body[class*="elementor-kit"] .g-skip{ color:var(--g-white); font-weight:600; text-decoration:none; }
body[class*="elementor-kit"] h1,
body[class*="elementor-kit"] h2,
body[class*="elementor-kit"] h3,
body[class*="elementor-kit"] h4,
body[class*="elementor-kit"] h5,
body[class*="elementor-kit"] h6{ font-weight:600; line-height:var(--g-lh-head); letter-spacing:-.02em; color:var(--g-ink); text-wrap:balance; }
body[class*="elementor-kit"] h1{ font-size:var(--g-fs-h1); line-height:var(--g-lh-tight); letter-spacing:-.03em; }
body[class*="elementor-kit"] h2{ font-size:var(--g-fs-h2); letter-spacing:-.025em; }
body[class*="elementor-kit"] h3{ font-size:var(--g-fs-h3); }
body[class*="elementor-kit"] h4{ font-size:var(--g-fs-h4); letter-spacing:-.01em; }
body[class*="elementor-kit"] code{ font-family:var(--g-font-mono); font-size:.9em; }
body[class*="elementor-kit"] .g-lead{ font-size:var(--g-fs-lead); line-height:1.55; color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-small{ font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-micro{ font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-muted{ color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-mono{ font-family:var(--g-font-mono); font-variant-numeric:tabular-nums; font-feature-settings:"tnum" 1; }
body[class*="elementor-kit"] .g-prose ol > li::before{ font-family:var(--g-font-mono); font-size:var(--g-fs-micro); color:var(--g-sector-ink); font-weight:500; }
body[class*="elementor-kit"] .g-prose strong{ font-weight:600; color:var(--g-ink); }
body[class*="elementor-kit"] .g-section--dark{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-section--dark h2,
body[class*="elementor-kit"] .g-section--dark h3,
body[class*="elementor-kit"] .g-section--dark h4{ color:var(--g-ink-invert); }
body[class*="elementor-kit"] .g-section--dark .g-lead{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-section--dark .g-muted,
body[class*="elementor-kit"] .g-section--dark .g-micro{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-eyebrow{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); font-weight:500; letter-spacing:.14em; text-transform:uppercase; color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-section--dark .g-eyebrow{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-plate__k{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.14em; text-transform:uppercase; color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-plate__v{ font-size:var(--g-fs-h4); font-weight:600; color:var(--g-ink-invert); letter-spacing:-.01em; line-height:1.3; }
body[class*="elementor-kit"] .g-plate__v .g-mono{ font-size:var(--g-fs-small); font-weight:500; }
body[class*="elementor-kit"] .g-chip{ color:var(--g-sector-ink); font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); font-weight:500; letter-spacing:.08em; text-transform:uppercase; text-decoration:none; }
body[class*="elementor-kit"] a.g-chip:hover{ color:var(--g-white); }
body[class*="elementor-kit"] .g-chip--sample{ color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-crumbs li{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-crumbs li + li::before{ color:var(--g-rule-strong); }
body[class*="elementor-kit"] .g-crumbs a{ color:var(--g-ink-muted); text-decoration:none; }
body[class*="elementor-kit"] .g-crumbs a:hover{ color:var(--g-primary); text-decoration:underline; }
body[class*="elementor-kit"] .g-crumbs [aria-current]{ color:var(--g-ink); font-weight:500; }
body[class*="elementor-kit"] a{ color:var(--g-primary); }
body[class*="elementor-kit"] a:hover{ color:var(--g-deep); }
body[class*="elementor-kit"] .g-btn{ font-size:var(--g-fs-small); font-weight:600; letter-spacing:.01em; text-decoration:none; }
body[class*="elementor-kit"] .g-btn--primary{ color:var(--g-white); }
body[class*="elementor-kit"] .g-btn--primary:hover{ color:var(--g-white); }
body[class*="elementor-kit"] .g-btn--ghost{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-btn--ghost:hover{ color:var(--g-white); }
body[class*="elementor-kit"] .g-btn--onDark{ color:var(--g-charcoal); }
body[class*="elementor-kit"] .g-btn--onDark:hover{ color:var(--g-charcoal); }
body[class*="elementor-kit"] .g-btn--onDarkGhost{ color:var(--g-white); }
body[class*="elementor-kit"] .g-btn--onDarkGhost:hover{ color:var(--g-white); }
body[class*="elementor-kit"] .g-alink{ font-size:var(--g-fs-small); font-weight:600; color:var(--g-primary); text-decoration:none; }
body[class*="elementor-kit"] .g-alink:hover{ text-decoration:underline; }
body[class*="elementor-kit"] .g-section--dark .g-alink{ color:var(--g-white); }
body[class*="elementor-kit"] .g-header__logo{ text-decoration:none; color:var(--g-primary); }
body[class*="elementor-kit"] .g-header__logo b{ font-size:1.1875rem; font-weight:700; letter-spacing:-.02em; }
body[class*="elementor-kit"] .g-header__logo span{ font-family:var(--g-font-mono); font-size:.5625rem; letter-spacing:.16em; text-transform:uppercase; color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-nav__link,
body[class*="elementor-kit"] .g-nav__toggle{ font-size:var(--g-fs-small); font-weight:500; color:var(--g-ink-2); text-decoration:none; }
body[class*="elementor-kit"] .g-nav__link:hover,
body[class*="elementor-kit"] .g-nav__toggle:hover{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-nav__toggle[aria-expanded="true"]{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-nav__item.is-current > .g-nav__link,
body[class*="elementor-kit"] .g-nav__item.is-current > .g-nav__toggle{ color:var(--g-primary); font-weight:600; }
body[class*="elementor-kit"] .g-mega__title{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.14em; text-transform:uppercase; color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-mega__col a{ font-size:var(--g-fs-small); color:var(--g-ink); text-decoration:none; }
body[class*="elementor-kit"] .g-mega__col a:hover{ color:var(--g-sector-ink); text-decoration:underline; }
body[class*="elementor-kit"] .g-mega__col a strong{ font-weight:600; }
body[class*="elementor-kit"] .g-mega__col a em{ font-style:normal; font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-mega__foot{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-burger{ color:var(--g-ink); }
body[class*="elementor-kit"] .g-drawer summary{ font-weight:600; }
body[class*="elementor-kit"] .g-drawer__sub a,
body[class*="elementor-kit"] .g-drawer > a{ font-size:var(--g-fs-small); color:var(--g-ink); text-decoration:none; }
body[class*="elementor-kit"] .g-drawer > a{ font-weight:600; }
body[class*="elementor-kit"] .g-drawer__sub a:hover{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-hero{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-hero__media img{ color:transparent; }
body[class*="elementor-kit"] .g-hero h1{ color:var(--g-white); }
body[class*="elementor-kit"] .g-hero .g-lead{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-hero .g-eyebrow{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-hero--home h1{ font-size:var(--g-fs-display); }
body[class*="elementor-kit"] .g-phero{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-phero h1{ color:var(--g-white); }
body[class*="elementor-kit"] .g-phero .g-lead{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-phero .g-eyebrow{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-spectrum__link{ text-decoration:none; color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-spectrum__link:hover{ color:var(--g-white); }
body[class*="elementor-kit"] .g-spectrum__code{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.16em; color:var(--g-seg); }
body[class*="elementor-kit"] .g-spectrum__name{ font-size:var(--g-fs-h4); font-weight:600; color:var(--g-white); letter-spacing:-.01em; }
body[class*="elementor-kit"] .g-spectrum__desc{ font-size:var(--g-fs-micro); line-height:1.5; }
body[class*="elementor-kit"] .g-spectrum__link:hover .g-spectrum__name{ text-decoration:underline; }
body[class*="elementor-kit"] .g-card p{ font-size:var(--g-fs-small); color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-card__icon{ color:var(--g-sector-ink); }
body[class*="elementor-kit"] .g-card__k{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.14em; text-transform:uppercase; color:var(--g-ink-muted); }
body[class*="elementor-kit"] a.g-card{ text-decoration:none; color:inherit; }
body[class*="elementor-kit"] a.g-card h3,
body[class*="elementor-kit"] a.g-card h4{ color:var(--g-ink); }
body[class*="elementor-kit"] a.g-card:hover h3,
body[class*="elementor-kit"] a.g-card:hover h4{ color:var(--g-sector-ink); }
body[class*="elementor-kit"] .g-section--dark .g-card{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-section--dark .g-card p{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-section--dark a.g-card:hover h3,
body[class*="elementor-kit"] .g-section--dark a.g-card:hover h4{ color:var(--g-sector); }
body[class*="elementor-kit"] .g-mcard__body p{ font-size:var(--g-fs-small); color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-mcard__flag{ color:var(--g-white); font-family:var(--g-font-mono); font-size:.6875rem; letter-spacing:.1em; text-transform:uppercase; }
body[class*="elementor-kit"] .g-step__n{ font-family:var(--g-font-mono); font-size:var(--g-fs-h3); font-weight:500; color:var(--g-sector-ink); line-height:1; }
body[class*="elementor-kit"] .g-step p{ color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-section--dark .g-step__n{ color:var(--g-sector); }
body[class*="elementor-kit"] .g-def__t{ font-weight:600; color:var(--g-ink); letter-spacing:-.01em; }
body[class*="elementor-kit"] .g-def__d{ color:var(--g-ink-2); font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-def__d p{ font-size:inherit; }
body[class*="elementor-kit"] .g-section--dark .g-def__t{ color:var(--g-white); }
body[class*="elementor-kit"] .g-section--dark .g-def__d{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-links a{ color:var(--g-ink); text-decoration:none; font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-links a:hover{ color:var(--g-sector-ink); }
body[class*="elementor-kit"] .g-links a svg{ color:var(--g-sector-ink); }
body[class*="elementor-kit"] .g-links strong{ font-weight:600; }
body[class*="elementor-kit"] .g-links em{ font-style:normal; color:var(--g-ink-muted); font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-figure figcaption{ font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-dl a{ color:var(--g-ink); text-decoration:none; }
body[class*="elementor-kit"] .g-dl a:hover{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-dl svg{ color:var(--g-sector-ink); }
body[class*="elementor-kit"] .g-dl__meta{ font-family:var(--g-font-mono); font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-cta{ color:var(--g-white); }
body[class*="elementor-kit"] .g-cta h2{ color:var(--g-white); }
body[class*="elementor-kit"] .g-cta p{ color:rgba(255,255,255,.88); }
body[class*="elementor-kit"] .g-cta .g-eyebrow{ color:rgba(255,255,255,.8); }
body[class*="elementor-kit"] .g-convert h3{ font-size:var(--g-fs-h4); }
body[class*="elementor-kit"] .g-table{ font-family:var(--g-font-mono); font-variant-numeric:tabular-nums; font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-table caption{ font-family:var(--g-font); font-size:var(--g-fs-small); font-weight:600; color:var(--g-ink); }
body[class*="elementor-kit"] .g-table thead th{ color:var(--g-white); font-weight:500; letter-spacing:.06em; text-transform:uppercase; font-size:.6875rem; }
body[class*="elementor-kit"] .g-table tbody th{ font-weight:600; color:var(--g-ink); }
body[class*="elementor-kit"] .g-tablenote{ font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-fig__v{ font-family:var(--g-font-mono); font-variant-numeric:tabular-nums; font-size:clamp(1.5rem,1.1rem + 1.2vw,2rem); font-weight:600; color:var(--g-ink); letter-spacing:-.02em; line-height:1.1; }
body[class*="elementor-kit"] .g-fig__k{ font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-section--dark .g-fig__v{ color:var(--g-white); }
body[class*="elementor-kit"] .g-section--dark .g-fig__k{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-faq summary{ font-size:var(--g-fs-h4); font-weight:600; letter-spacing:-.01em; }
body[class*="elementor-kit"] .g-faq__a p{ color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-slider__btn{ color:var(--g-ink); }
body[class*="elementor-kit"] .g-slider__btn:hover{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-typing__quote{ font-size:var(--g-fs-h3); font-weight:600; letter-spacing:-.02em; color:var(--g-white); line-height:1.3; }
body[class*="elementor-kit"] .g-typing__answer{ font-family:var(--g-font-mono); font-size:var(--g-fs-small); font-weight:500; letter-spacing:.02em; color:var(--g-sector); }
body[class*="elementor-kit"] .g-typing__static li{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-form legend{ font-size:var(--g-fs-h4); font-weight:600; letter-spacing:-.01em; }
body[class*="elementor-kit"] .g-form legend .g-mono{ font-size:var(--g-fs-eyebrow); letter-spacing:.14em; color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-field > label{ font-size:var(--g-fs-small); font-weight:600; }
body[class*="elementor-kit"] .g-field .g-hint{ font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-req{ color:#B3261E; }
body[class*="elementor-kit"] .g-input,
body[class*="elementor-kit"] .g-select,
body[class*="elementor-kit"] .g-textarea{ font-size:var(--g-fs-small); color:var(--g-ink); }
body[class*="elementor-kit"] .g-error{ font-size:var(--g-fs-micro); color:#B3261E; font-weight:500; }
body[class*="elementor-kit"] .g-choice{ font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-choice em{ font-style:normal; font-size:var(--g-fs-micro); color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-consent{ font-size:var(--g-fs-micro); line-height:1.55; }
body[class*="elementor-kit"] .g-form__progress{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.1em; text-transform:uppercase; }
body[class*="elementor-kit"] .g-form__progress li{ color:var(--g-ink-muted); }
body[class*="elementor-kit"] .g-form__progress li[aria-current="step"]{ color:var(--g-primary); font-weight:600; }
body[class*="elementor-kit"] .g-form__progress li[data-done="true"]{ color:var(--g-ink-2); }
body[class*="elementor-kit"] .g-form__status{ font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-formdone h3{ color:var(--g-primary); }
body[class*="elementor-kit"] .g-prefill{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-cookie{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-cookie h2{ font-size:var(--g-fs-h4); color:var(--g-white); }
body[class*="elementor-kit"] .g-cookie p{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-cookie a{ color:var(--g-white); }
body[class*="elementor-kit"] .g-cookie__opts label{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-footer{ color:var(--g-ink-invert-2); }
body[class*="elementor-kit"] .g-footer a{ color:var(--g-ink-invert-2); text-decoration:none; }
body[class*="elementor-kit"] .g-footer a:hover{ color:var(--g-white); text-decoration:underline; }
body[class*="elementor-kit"] .g-footer__brand svg{ color:var(--g-white); }
body[class*="elementor-kit"] .g-footer h2{ font-size:var(--g-fs-eyebrow); }
body[class*="elementor-kit"] .g-footer__title{ font-family:var(--g-font-mono); font-size:var(--g-fs-eyebrow); letter-spacing:.14em; text-transform:uppercase; color:var(--g-white); }
body[class*="elementor-kit"] .g-footer li{ font-size:var(--g-fs-small); }
body[class*="elementor-kit"] .g-footer address{ font-style:normal; font-size:var(--g-fs-small); line-height:1.7; }
body[class*="elementor-kit"] .g-footer__bottom{ font-size:var(--g-fs-micro); }
body[class*="elementor-kit"] .g-external::after{ font-size:.85em; }
