/* CRYPTALIC ↔ WordPress/Elementor bridge (unlayered on purpose: it has to beat Elementor's CSS).
   On the live page Elementor's wrappers take no box, so each section's markup lays out exactly as
   a direct child of <main>, like the original. In the Elementor editor they stay normal boxes. */
body.cx-site:not(.elementor-editor-active) :is(.elementor, .e-con, .e-con-inner, .e-con-full, .e-con-boxed,
  .elementor-element, .elementor-widget-container, .elementor-section-wrap, .elementor-template) {
  display: contents;
}
/* Elementor's own resets that would beat the layered site CSS: hand them back to the layers.
   Only the properties Elementor sets, and never inside the lab modules ([data-lab]), whose own CSS
   is unlayered and must keep its values. */
body.cx-site .elementor img:not([data-lab] *) {
  height: revert-layer;
  max-width: revert-layer;
  border: revert-layer;
  border-radius: revert-layer;
  box-shadow: revert-layer;
}
body.cx-site .elementor a:not([data-lab] *) { box-shadow: revert-layer; text-decoration: revert-layer; }
body.cx-site.cx-site .elementor .elementor-widget figure:not([data-lab] *) { margin: revert-layer; }
body.cx-site .elementor :is(video, iframe, embed, object):not([data-lab] *) { border: revert-layer; line-height: revert-layer; margin: revert-layer; max-width: revert-layer; width: revert-layer; }
body.cx-site.elementor-editor-active .e-con { --padding-top:0; --padding-bottom:0; --padding-left:0; --padding-right:0; --gap:0; }
/* WordPress admin bar: keep the fixed nav below it for logged-in users. */
body.cx-site.admin-bar .fixed.inset-x-0.top-0.z-40 { top: var(--wp-admin--admin-bar--height, 32px); }
/* Phase 3 placeholders: module stills inside the empty [data-lab] holders, and the P1 still. */
.cx-still { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; object-fit: contain; pointer-events: none; }
.cx-stream-still img { position: fixed; top: 0; left: 0; width: 100%; height: 100lvh; max-width: none; object-fit: cover; mix-blend-mode: screen; pointer-events: none; transition: opacity .6s; }
html[data-past-hero] .cx-stream-still img { opacity: .5; }
/* Motion hold (P3/P5): while JS motion is on, entrances wait at their start until motion.js plays them. */
html.js-motion [data-inview]:is([data-motion="rise"], [data-motion="fade"], [data-motion="focus"]):not([data-cx-done]) { opacity: 0 !important; }
html.js-motion [data-inview][data-motion="type"]:not([data-cx-done]) { --typed: 0 !important; }
html.js-motion [data-inview][data-motion="draw"]:not([data-cx-done]) { transform: scaleX(0) !important; }
html.js-motion header[data-inview]:not([data-cx-done]) { opacity: 0 !important; }
/* P2 intro (short): shown only while html.cx-intro is set (desktop Home, head script, 3 s escape). */
html.cx-intro { overflow: hidden; }
html.cx-intro [data-cx-intro] { display: block; }
/* Form settings containers (Elementor Pro Form widgets that hold the forms' settings): editor only. */
body.cx-site:not(.elementor-editor-active) .cx-form-config { display: none !important; }
