/* ==========================================================================
   ELEMENTOR SKIN
   Every form on the site is built with Elementor. This sheet is enqueued with
   a dependency on Elementor's own frontend stylesheet so it loads after it —
   without that ordering, Elementor's defaults win on equal specificity and
   the fields render as white boxes.
   ========================================================================== */

body .elementor-form .elementor-form-fields-wrapper{
  display:flex;flex-wrap:wrap;gap:1.35rem 1rem;
}
/* Elementor's column widths are exact percentages; with a gap on the row two
   50% fields no longer fit, so they stack. Subtract the gap from the basis. */
body .elementor-form .elementor-field-group.elementor-col-50{width:calc(50% - .5rem)}
body .elementor-form .elementor-field-group.elementor-col-100{width:100%}
@media (max-width:640px){
  body .elementor-form .elementor-field-group.elementor-col-50{width:100%}
}
body .elementor-form .elementor-field-group{margin-bottom:0}

body .elementor-form .elementor-field-label{
  font-family:var(--nx-font-mono);font-size:var(--fs-eyebrow);letter-spacing:.12em;
  text-transform:uppercase;color:var(--nx-fg-faint);margin-bottom:.55rem;font-weight:500;
  line-height:1.4;
}

body .elementor-form .elementor-field-textual,
body .elementor-form input.elementor-field,
body .elementor-form textarea.elementor-field,
body .elementor-form select.elementor-field{
  width:100%;
  background-color:transparent;
  color:var(--nx-fg);
  border:0;border-bottom:1px solid var(--nx-line);border-radius:0;
  padding:.75rem 0;
  font-family:var(--nx-font);font-size:1.0625rem;line-height:1.5;
  box-shadow:none;
  transition:border-color var(--dur-ui) var(--ease-standard);
}
body .elementor-form .elementor-field-textual::placeholder{color:var(--nx-fg-faint);opacity:1}
body .elementor-form .elementor-field-textual:focus{
  outline:none;background-color:transparent;box-shadow:none;
  border-bottom-color:var(--nx-purple);
}
body .elementor-form textarea.elementor-field-textual{resize:vertical;min-height:6.5rem}
body .elementor-form select.elementor-field-textual{padding-right:1.5rem}

body .elementor-form .elementor-field-type-submit{margin-top:.75rem}
body .elementor-form .elementor-button,
body .elementor-form button[type="submit"].elementor-button{
  position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.65rem;
  padding:1rem 1.6rem;
  font-family:var(--nx-font);font-size:.9375rem;font-weight:500;letter-spacing:-.01em;
  background-color:var(--nx-paper);color:var(--nx-ink);
  border:1px solid transparent;border-radius:var(--nx-radius);
  overflow:hidden;isolation:isolate;text-decoration:none;
  transition:color var(--dur-ui) var(--ease-standard);
}
body .elementor-form .elementor-button::before{
  content:'';position:absolute;inset:0;z-index:-1;background:var(--nx-purple);
  transform:scaleX(0);transform-origin:left center;
  transition:transform var(--dur-card) var(--ease-standard);
}
body .elementor-form .elementor-button:hover,
body .elementor-form .elementor-button:focus-visible{
  color:#fff;background-color:var(--nx-paper);
}
body .elementor-form .elementor-button:hover::before,
body .elementor-form .elementor-button:focus-visible::before{transform:scaleX(1)}
body .elementor-form .elementor-button .elementor-button-text{
  transition:transform var(--dur-card) var(--ease-standard);
}
body .elementor-form .elementor-button:hover .elementor-button-text{transform:translateX(3px)}
body .elementor-form .elementor-button-content-wrapper{gap:.5rem}

body .elementor-message{
  font-size:var(--fs-small);margin-top:1rem;padding-left:1rem;position:relative;
  color:var(--nx-fg-muted);line-height:1.5;
}
body .elementor-message::before{
  content:'';position:absolute;left:0;top:.65em;width:.5rem;height:1px;background:var(--nx-purple);
}
body .elementor-message.elementor-message-success{color:var(--nx-fg)}
body .elementor-message.elementor-message-danger{color:#E2564B}
body .elementor-message.elementor-message-danger::before{background:#E2564B}
body .elementor-form .elementor-field-group.elementor-error .elementor-field-textual{
  border-bottom-color:#E2564B;
}

/* Compact variant for the journal sidebar. */
body .nx-aside .elementor-form .elementor-field-textual{font-size:.9375rem;padding:.6rem 0}
body .nx-aside .elementor-form .elementor-button{width:100%}
body .nx-aside .elementor-widget-form .elementor-widget-container{padding:0}
body .nx-aside .elementor-form .elementor-form-fields-wrapper{gap:.9rem}
body .nx-aside .elementor-form .elementor-field-label{margin-bottom:.35rem}
body .nx-aside .elementor-form textarea.elementor-field-textual{min-height:4.5rem}

@media (prefers-reduced-motion:reduce){
  body .elementor-form .elementor-button::before{transition:none}
  body .elementor-form .elementor-button .elementor-button-text{transition:none}
}

/* ==========================================================================
   THEME BUILDER HEADER & FOOTER
   The header and footer are Elementor Theme Builder templates. Elementor's
   container styles (.e-con) load after the theme's and set position, padding
   and a 100% width on every widget — so the layout primitives have to be
   restated here, where they come after.
   ========================================================================== */

/* The location wrapper must not add a box of its own. */
body .elementor-location-header{position:relative;z-index:80}

/* .nx-header carries the fixed positioning and the compact-on-scroll state. */
body .e-con.nx-header{
  position:fixed;inset:0 0 auto 0;z-index:80;width:100%;
  padding-block:clamp(1rem,1.7vw,1.5rem);
  padding-inline:0;
  border-bottom:1px solid transparent;
}
body .e-con.nx-header.is-compact{padding-block:.7rem}
.admin-bar body .e-con.nx-header,
body.admin-bar .e-con.nx-header{top:32px}
@media (max-width:782px){
  body.admin-bar .e-con.nx-header{top:46px}
}

/* The centred rail, restated for containers. */
body .e-con.nx-wrap{
  max-width:var(--nx-max);width:100%;margin-inline:auto;
  padding-inline:var(--sp-gutter);
}

/* Widgets in a flex container default to full width, which crams the header
   to one side and wraps the wordmark. */
body .e-con.nx-header__inner > .elementor-widget{width:auto;flex:0 0 auto}
body .e-con.nx-header__inner > .e-con{width:auto;flex:0 0 auto}
body .e-con.nx-header__inner > .elementor-widget-nexcore-site-nav{flex:1 1 auto;justify-content:center;display:flex}
body .elementor-widget-nexcore-site-nav > .elementor-widget-container{width:100%;display:flex;justify-content:center}
body .nx-logo__type{white-space:nowrap}
body .e-con.nx-header__cta{width:auto;flex:0 0 auto}

/* Footer: the container carries the surface, the inner rail the gutter. */
body .e-con.nx-footer{
  width:100%;background:var(--nx-ink);color:var(--nx-paper);
  border-top:1px solid var(--nx-line);padding-inline:0;
}
body .e-con.nx-footer > .e-con.nx-wrap{display:block}
body .e-con.nx-footer__cta{padding-block:clamp(4rem,9vw,8rem);width:100%}
/* Blocks stacked directly in the footer rail run full width; widgets sitting
   in a row container size to their content. */
body .e-con.nx-footer > .e-con.nx-wrap > .elementor-widget{width:100%}
body .e-con.nx-footer .e-con[class*="e-flex"] > .elementor-widget{width:auto;flex:0 0 auto}
body .e-con.nx-footer__cta > .elementor-widget{width:100%}

/* The footer reveal only engages once motion.js confirms it fits. */
@media (min-width:1024px){
  body.nx-reveal-footer .elementor-location-footer{position:sticky;bottom:0;z-index:1}
}
body .elementor-location-footer{background:var(--nx-ink)}

@media (max-width:900px){
  body .e-con.nx-header__inner > .elementor-widget-nexcore-site-nav{display:none}
}

/* ==========================================================================
   SECTION + SPLIT CONTAINERS
   Section rhythm and the two-column split, restated for Elementor containers
   (its .e-con rules load after the theme's).
   ========================================================================== */
body .e-con.nx-section{
  width:100%;padding-inline:0;
  padding-block:var(--sp-section);
}
body .e-con.nx-section--tight{padding-block:calc(var(--sp-section) * .6)}
body .e-con.nx-invert{
  --nx-bg:var(--nx-paper); --nx-fg:var(--nx-ink);
  --nx-fg-muted:rgba(16,17,18,.64); --nx-fg-faint:rgba(16,17,18,.60);
  --nx-line:rgba(16,17,18,.14); --nx-line-soft:rgba(16,17,18,.07);
  --nx-surface:var(--nx-paper-2);
  background:var(--nx-bg);color:var(--nx-fg);
}

/* Two columns that collapse to one below the tablet breakpoint (§25). */
body .e-con.nx-split{
  display:flex;flex-direction:row;align-items:flex-start;
  gap:clamp(2rem,5vw,5rem);width:100%;
}
body .e-con.nx-split > .e-con{flex:1 1 0;min-width:0}
/* A proportional split rather than a fixed cap: the text column has to hold a
   two-line display headline at any width, and a hard max squeezed it to three. */
body .e-con.nx-split > .e-con.nx-split__aside{flex:0 1 42%;min-width:19rem}
@media (max-width:1023px){
  body .e-con.nx-split{flex-direction:column}
  body .e-con.nx-split > .e-con,
  body .e-con.nx-split > .e-con.nx-split__aside{flex:1 1 auto;width:100%}
}

/* A bordered contact panel, matching the journal sidebar treatment. */
body .e-con.nx-panel{
  border:1px solid var(--nx-line);border-radius:var(--nx-radius);
  background:var(--nx-ink-raise);
  padding:clamp(1.5rem,2.6vw,2.25rem);
  width:100%;
}
body .e-con.nx-invert .e-con.nx-panel{background:var(--nx-paper-2)}

/* Contact detail rows. */
.nx-detail{display:grid;gap:.4rem;padding-block:1.1rem;border-top:1px solid var(--nx-line)}
.nx-detail:first-of-type{border-top:0;padding-top:0}
.nx-detail__label{font-family:var(--nx-font-mono);font-size:var(--fs-eyebrow);letter-spacing:.14em;
  text-transform:uppercase;color:var(--nx-fg-faint)}
.nx-detail__value{font-size:1.0625rem}
.nx-detail__value a{color:var(--nx-fg)}
.nx-detail__note{font-size:var(--fs-small);color:var(--nx-fg-muted)}

/* Select fields keep the underline treatment and get our own caret. */
body .elementor-form select.elementor-field-textual{
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23F7F5FA' stroke-opacity='.55' stroke-width='1.25' stroke-linecap='square'/%3E%3C/svg%3E");
  background-position:right .1rem center;
  background-size:10px 6px;
  background-repeat:no-repeat;
  padding-right:1.75rem;cursor:pointer;
}
body .elementor-form select.elementor-field-textual option{background:var(--nx-ink);color:var(--nx-fg)}

/* Elementor draws its own caret into a wrapper; ours is on the select itself,
   so hide theirs rather than ending up with two. */
body .elementor-form .elementor-select-wrapper .select-caret-down-wrapper{display:none}
body .elementor-form .elementor-select-wrapper{display:block}

/* --------------------------------------------------------------------------
   Footer call to action on a phone.
   Three buttons at their natural widths stack with ragged right edges; full
   width gives them one aligned column and a larger tap target.
   -------------------------------------------------------------------------- */
@media (max-width:640px){
  body .e-con.nx-footer .e-con[class*="e-flex"] > .elementor-widget{width:100%;flex:1 1 100%}
  body .nx-footer__cta .nx-btnwrap{width:100%}
  body .nx-footer__cta .nx-btn,
  body .nx-footer__cta .nx-whatsapp{
    width:100%;display:flex;justify-content:space-between;text-align:left;
  }
  body .nx-footer__cta .nx-whatsapp span{flex:1}
  /* Keep the arrow hard right rather than trailing the label. */
  body .nx-footer__cta .nx-btn .nx-btn__label{flex:1}
}
