/* ==========================================================================
   TXSC — Interior pages and the sticky sidebar
   Loads after txsc-premium.css and reuses its tokens.
   Visual only. No content, colour, font or logo changes.
   ========================================================================== */

/* ---------- Ground for every styled interior page -------------------------- */
body.page{ background:var(--tx-bg); }

/* ---------- Interior hero -------------------------------------------------- */
.tx-page-hero{
  background:var(--tx-deep) !important;
  position:relative; overflow:hidden; isolation:isolate;
}
.tx-page-hero::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(60% 80% at 78% 12%, rgba(0,69,217,.30) 0%, rgba(0,69,217,0) 66%),
    radial-gradient(44% 60% at 8% 96%, rgba(0,69,217,.13) 0%, rgba(0,69,217,0) 70%);
}
.tx-page-hero::after{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none; opacity:.30;
  background-image:
    radial-gradient(78% 70% at 50% 42%, rgba(4,4,7,0) 0%, rgba(4,4,7,1) 82%),
    linear-gradient(to right, rgba(147,166,194,.07) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(147,166,194,.07) 1px, transparent 1px);
  background-size:100% 100%, 64px 64px, 64px 64px;
}
.tx-page-hero > .e-con{
  position:relative; z-index:1;
  width:100%; max-width:1280px; margin-inline:auto;
  padding-block:clamp(72px,8vw,128px) !important;
  padding-inline:clamp(20px,5vw,56px) !important;
}
.tx-page-hero .tx-title .elementor-heading-title{ font-size:clamp(30px,4.2vw,58px) !important; line-height:1.14 !important; }

/* ---------- Generic section rhythm on interior pages ----------------------- */
body:not(.home) .tx-sec:not(.tx-inbody) > .e-con{
  width:100%; max-width:1280px; margin-inline:auto;
  padding-block:clamp(64px,7.5vw,112px) !important;
  padding-inline:clamp(20px,5vw,56px) !important;
}
.tx-band-dark:not(.tx-page-hero):not(.tx-cta-final){
  background:var(--tx-deep) !important;
  border-radius:var(--r-xl) !important;
  position:relative; overflow:hidden; isolation:isolate;
}
.tx-band-dark:not(.tx-page-hero):not(.tx-cta-final)::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background:radial-gradient(58% 46% at 50% -6%, rgba(0,69,217,.24) 0%, rgba(0,69,217,0) 70%);
}
.tx-band-dark > .e-con{ position:relative; z-index:1; }

/* ---------- Generic cards -------------------------------------------------- */
.tx-card{
  border-radius:var(--r-md) !important;
  transition:transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.tx-card:not(.tx-card-dark){
  border:1px solid var(--tx-border);
  box-shadow:var(--sh-1);
}
.tx-card:not(.tx-card-dark):hover{
  transform:translateY(-5px);
  border-color:rgba(0,69,217,.28);
  box-shadow:var(--sh-2);
}
.tx-card-dark{
  border:1px solid rgba(147,166,194,.13);
  border-radius:28px !important;
}
.tx-card-dark:hover{
  transform:translateY(-6px);
  box-shadow:0 28px 58px -22px rgba(0,69,217,.50), 0 10px 20px -12px rgba(0,0,0,.7);
}

/* city chips must stay pills, not cards */
.tx-area .tx-card,
.tx-city-chip{
  border-radius:var(--r-pill) !important;
  background:rgba(0,69,217,.055) !important;
  border:1px solid rgba(0,69,217,.14) !important;
  box-shadow:none !important;
  padding:10px 20px !important;
  width:auto !important; flex:0 0 auto !important;
  transition:transform .3s var(--ease), background-color .3s var(--ease), border-color .3s var(--ease);
}
.tx-area .tx-card:hover,
.tx-city-chip:hover{
  transform:translateY(-2px);
  background:rgba(0,69,217,.11) !important;
  border-color:rgba(0,69,217,.32) !important;
  box-shadow:none !important;
}
.tx-city-chip .elementor-heading-title{
  font-size:14px !important; font-family:"Public Sans",sans-serif !important; font-weight:600 !important;
  color:var(--tx-accent) !important; margin:0 !important; white-space:nowrap; letter-spacing:0 !important;
}

/* ---------- THE STICKY SIDEBAR -------------------------------------------- */
/* The whole Elementor wrapper becomes one full-bleed grid. Full width bands
   span every track; body sections take the main track; the aside takes the
   narrow track and sticks for the height of the body. */
.tx-has-aside .elementor{
  display:grid;
  grid-template-columns:
    [full-start] minmax(20px,1fr)
    [main-start]  minmax(0,872px)
    [gap-start]   clamp(28px,3.4vw,56px)
    [aside-start] 336px
    [aside-end]   minmax(20px,1fr) [full-end];
  align-items:start;
}
.tx-has-aside .elementor > .e-con{ grid-column:full-start / full-end; }
.tx-has-aside .elementor > .tx-inbody{ grid-column:main-start / gap-start; }
.tx-has-aside .tx-aside{ grid-column:aside-start / aside-end; }

/* explicit rows so auto placement can never shuffle a band around the aside */
.tx-has-aside .elementor > .e-con:nth-child(1){ grid-row:1; }
.tx-has-aside .elementor > .e-con:nth-child(2){ grid-row:2; }
.tx-has-aside .elementor > .e-con:nth-child(3){ grid-row:3; }
.tx-has-aside .elementor > .e-con:nth-child(4){ grid-row:4; }
.tx-has-aside .elementor > .e-con:nth-child(5){ grid-row:5; }
.tx-has-aside .elementor > .e-con:nth-child(6){ grid-row:6; }
.tx-has-aside .elementor > .e-con:nth-child(7){ grid-row:7; }
.tx-has-aside .elementor > .e-con:nth-child(8){ grid-row:8; }
.tx-has-aside .elementor > .e-con:nth-child(9){ grid-row:9; }
body.tx-service-page  .tx-aside{ grid-row:2 / 6; }
body.tx-resource-page .tx-aside{ grid-row:2 / 7; }

/* breathing room at the top and bottom of the body column */
.tx-has-aside .elementor > .tx-inbody:first-of-type{ padding-top:clamp(40px,4.6vw,72px); }
.tx-has-aside .tx-aside{ margin-top:clamp(40px,4.6vw,72px); }

/* inside the column the alternating bands become one continuous read */
.tx-inbody{ background:transparent !important; }
.tx-inbody > .e-con{
  padding-block:clamp(26px,3vw,44px) !important;
  padding-inline:0 !important;
  max-width:none !important;
}
.tx-inbody + .tx-inbody > .e-con{ border-top:1px solid var(--tx-border); }
/* except the dark scan band, which stays a dark rounded panel in the column */
.tx-inbody.tx-band-dark{
  background:var(--tx-deep) !important;
  border-radius:var(--r-lg) !important;
  margin-block:clamp(18px,2vw,30px);
}
.tx-inbody.tx-band-dark > .e-con{
  padding:clamp(28px,3.4vw,48px) !important;
  border-top:0 !important;
}
.tx-inbody.tx-band-dark + .tx-inbody > .e-con{ border-top:0; }

/* the aside itself */
/* The three cards sit still and scroll with the page. No pinning: a sidebar
   taller than the viewport can only pin one edge, which hides the other. */
.tx-aside{
  position:static;
  display:flex; flex-direction:column; gap:16px;
  align-self:start;
}

.tx-aside-card{
  background:var(--tx-surface);
  border:1px solid var(--tx-border);
  border-radius:var(--r-md);
  padding:20px;
  box-shadow:var(--sh-1);
}
.tx-aside-eyebrow{
  font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:11px; font-weight:500; letter-spacing:.2em; text-transform:uppercase;
  color:var(--tx-accent); margin:0 0 10px;
}
.tx-aside-title{
  font-family:"Public Sans",sans-serif; font-weight:700;
  font-size:18px; line-height:1.28; color:var(--tx-ink) !important; margin:0 0 8px;
}
.tx-aside-body{
  font-family:"Public Sans",sans-serif;
  font-size:14px; line-height:1.58; color:var(--tx-muted); margin:0 0 10px;
}
.tx-aside-body:last-of-type{ margin-bottom:12px; }
.tx-aside-link{
  display:inline-flex; align-items:center; gap:.45em;
  font-family:"Public Sans",sans-serif; font-size:14px; font-weight:700;
  color:var(--tx-accent) !important; text-decoration:none !important;
}
.tx-aside-link::after{ content:"→"; transition:transform .3s var(--ease); }
.tx-aside-link:hover{ color:var(--tx-accent-h); }
.tx-aside-link:hover::after{ transform:translateX(3px); }

/* numbered services list */
.tx-aside-list{ list-style:none; margin:0; padding:0; }
.tx-aside-item{
  display:flex; gap:12px; align-items:flex-start;
  padding:7px 9px; margin-inline:-9px;
  border-radius:12px;
  transition:background-color .3s var(--ease);
}
.tx-aside-item + .tx-aside-item{ border-top:1px solid var(--tx-border); }
.tx-aside-item:hover{ background:rgba(0,69,217,.045); }
.tx-aside-item.is-current{ background:rgba(0,69,217,.07); }
.tx-aside-num{
  flex:0 0 auto; width:22px; height:22px; margin-top:1px;
  display:grid; place-items:center; border-radius:99px;
  background:rgba(0,69,217,.12); color:var(--tx-accent);
  font-family:"IBM Plex Mono",ui-monospace,monospace; font-size:11px; font-weight:600;
}
.tx-aside-item.is-current .tx-aside-num{ background:var(--tx-accent); color:#fff; }
.tx-aside-item-text{ display:block; min-width:0; }
.tx-aside-item-title{
  display:block; font-family:"Public Sans",sans-serif; font-weight:700;
  font-size:14.5px; line-height:1.35; color:var(--tx-ink) !important; text-decoration:none !important;
}
a.tx-aside-item-title:hover{ color:var(--tx-accent) !important; }
.tx-aside-item-blurb{
  display:block; font-family:"Public Sans",sans-serif;
  font-size:11.5px; line-height:1.4; color:var(--tx-muted); margin-top:1px;
}
.tx-aside-badge{
  display:inline-block; margin-left:7px; vertical-align:2px;
  font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:9.5px; font-weight:500; letter-spacing:.1em; text-transform:uppercase;
  color:var(--tx-accent); background:rgba(0,69,217,.12);
  border-radius:99px; padding:3px 7px;
}

/* the standing call to action */
.tx-aside-cta{
  position:relative; overflow:hidden;
  background:
    radial-gradient(74% 104% at 86% 0%, rgba(0,69,217,.32) 0%, rgba(0,69,217,0) 62%),
    linear-gradient(150deg,#0C0E15 0%, #040407 64%);
  border-color:rgba(147,166,194,.16);
  box-shadow:0 20px 46px -20px rgba(0,0,0,.75);
}
.tx-aside-cta .tx-aside-eyebrow{ color:var(--tx-accent-h); }
.tx-aside-cta .tx-aside-title{ color:#fff !important; }
.tx-aside-cta .tx-aside-body{ color:var(--tx-muted-deep); }
.tx-aside-btn{
  display:block; text-align:center; text-decoration:none !important;
  background:var(--tx-accent); color:#fff !important;
  font-family:"Black Ops One",sans-serif; font-size:13px; letter-spacing:.06em;
  padding:13px 18px; border-radius:var(--r-pill);
  box-shadow:0 10px 24px -8px rgba(0,69,217,.6), inset 0 1px 0 rgba(255,255,255,.18);
  transition:transform var(--dur) var(--ease), background-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.tx-aside-btn:hover{
  background:var(--tx-accent-h); color:#fff; transform:translateY(-2px);
  box-shadow:0 16px 34px -10px rgba(0,69,217,.72), inset 0 1px 0 rgba(255,255,255,.22);
}
.tx-aside-phone{
  display:block; text-align:center; text-decoration:none; margin-top:12px;
  font-family:"IBM Plex Mono",ui-monospace,monospace; font-size:16px; font-weight:600;
  letter-spacing:.02em; color:#fff !important;
}
.tx-aside-phone:hover{ color:var(--tx-accent-h) !important; }
.tx-aside-hours{
  text-align:center; margin:8px 0 0;
  font-family:"Public Sans",sans-serif; font-size:12px; color:var(--tx-muted-deep);
}

/* ---------- Responsive ----------------------------------------------------- */
@media (max-width:1100px){
  .tx-has-aside .elementor{ grid-template-columns:[full-start] minmax(20px,1fr) [main-start] minmax(0,1fr) [gap-start] 32px [aside-start] 300px [aside-end] minmax(20px,1fr) [full-end]; }
}
@media (max-width:900px){
  .tx-has-aside .elementor{ display:block; }
  .tx-aside{
    position:static; max-height:none; overflow:visible;
    display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px;
  }
  .tx-aside-cta{ grid-column:1 / -1; }
}
@media (max-width:767px){
    .tx-aside{ grid-template-columns:minmax(0,1fr); }
  .tx-band-dark:not(.tx-page-hero):not(.tx-cta-final){ border-radius:28px !important; }
  .tx-inbody.tx-band-dark{ border-radius:24px !important; }
  body:not(.home) .tx-sec:not(.tx-inbody) > .e-con{ padding-block:clamp(48px,11vw,72px) !important; padding-inline:20px !important; }
  .tx-page-hero > .e-con{ padding-block:clamp(56px,13vw,84px) !important; }
}
@media (prefers-reduced-motion:reduce){
  .tx-card,.tx-city-chip,.tx-aside-item,.tx-aside-btn,.tx-aside-link::after{ transition:none !important; }
}

@media (max-width:900px){
  .tx-has-aside .elementor > .e-con,
  .tx-has-aside .elementor > .tx-inbody,
  .tx-has-aside .tx-aside{ grid-column:auto !important; grid-row:auto !important; }
  .tx-has-aside .tx-aside{ margin:0 auto clamp(40px,7vw,64px); padding-inline:20px; max-width:760px; }
  .tx-has-aside .elementor > .tx-inbody > .e-con{ padding-inline:clamp(20px,5vw,40px) !important; }
}
/* body-column items that carry only a top rule read as orphans once the band
   behind them goes transparent, so give them a real surface */
.tx-inbody .e-con[style*="border-top"],
.tx-inbody .tx-card:not(.tx-card-dark){ background:var(--tx-surface) !important; }
/* ==========================================================================
   Newsletter modal
   ========================================================================== */
.txnl[hidden]{ display:none; }
.txnl{
  position:fixed; inset:0; z-index:99999;
  display:grid; place-items:start center;
  padding:20px;
  overflow-y:auto;
  overscroll-behavior:contain;
}
/* Centred when there is room, scrollable when there is not. A card centred
   with align-items in a scrolling box puts its own top out of reach on a
   short screen, which is how a popup traps someone in landscape. */
.txnl-card{ margin-block:auto; }
/* The page behind holds still while the popup is up. */
html.txnl-open, html.txnl-open body{ overflow:hidden; }
.txnl-scrim{
  position:fixed; inset:0;
  background:rgba(4,4,7,.74);
  opacity:0; transition:opacity .3s var(--ease);
}
.txnl.is-open .txnl-scrim{ opacity:1; }

.txnl-card{
  position:relative; z-index:1;
  width:100%; max-width:452px;
  background:
    radial-gradient(76% 96% at 88% 0%, rgba(0,69,217,.30) 0%, rgba(0,69,217,0) 62%),
    linear-gradient(150deg,#0C0E15 0%, #040407 64%);
  border:1px solid rgba(147,166,194,.18);
  border-radius:32px;
  padding:clamp(28px,4vw,40px);
  box-shadow:0 40px 90px -28px rgba(0,0,0,.85);
  overflow:hidden;
  opacity:0; transform:translateY(16px) scale(.98);
  transition:opacity .34s var(--ease), transform .34s var(--ease);
}
.txnl.is-open .txnl-card{ opacity:1; transform:none; }

.txnl-x{
  position:absolute; top:14px; right:16px;
  width:34px !important; height:34px !important;
  min-width:0 !important; min-height:0 !important;
  padding:0 !important; margin:0 !important;
  border:0 !important; border-radius:99px !important;
  background:rgba(147,166,194,.14) !important;
  color:var(--tx-muted-deep) !important;
  font-family:"Public Sans",sans-serif !important;
  font-size:22px !important; font-weight:400 !important; line-height:1 !important;
  letter-spacing:0 !important; text-transform:none !important;
  box-shadow:none !important; cursor:pointer;
  display:grid; place-items:center;
  transition:background-color .25s var(--ease), color .25s var(--ease);
}
.txnl-x:hover{ background:rgba(147,166,194,.26) !important; color:#fff !important; }
.txnl-x:focus-visible{ outline:2px solid var(--tx-accent-h); outline-offset:2px; }

.txnl-eyebrow{
  font-family:"IBM Plex Mono",ui-monospace,monospace;
  font-size:11px; font-weight:500; letter-spacing:.22em; text-transform:uppercase;
  color:var(--tx-accent-h); margin:0 0 12px;
}
.txnl-title{
  font-family:"Black Ops One",sans-serif; font-weight:400;
  font-size:clamp(28px,5vw,36px); line-height:1.16;
  color:#fff !important; margin:0 0 12px;
}
.txnl-desc{
  font-family:"Public Sans",sans-serif;
  font-size:15px; line-height:1.6; color:var(--tx-ink-deep); margin:0 0 20px;
}

.txnl-form{ display:flex; flex-direction:column; gap:10px; }
.txnl-input{
  width:100%; box-sizing:border-box;
  background:rgba(255,255,255,.07) !important;
  border:1px solid rgba(147,166,194,.28) !important;
  border-radius:var(--r-pill) !important;
  padding:14px 20px !important;
  font-family:"Public Sans",sans-serif; font-size:15px; color:#fff !important;
  transition:border-color .25s var(--ease), background-color .25s var(--ease);
}
.txnl-input::placeholder{ color:rgba(147,166,194,.75) !important; opacity:1; }
.txnl-input:focus{
  outline:none;
  background:rgba(255,255,255,.11) !important;
  border-color:var(--tx-accent-h) !important;
  box-shadow:0 0 0 3px rgba(0,69,217,.28) !important;
}
.txnl-input:-webkit-autofill,
.txnl-input:-webkit-autofill:focus{
  -webkit-text-fill-color:#fff;
  -webkit-box-shadow:0 0 0 1000px #10131b inset;
  caret-color:#fff;
}
.txnl-btn{
  width:100%; border:0; cursor:pointer;
  background:var(--tx-accent); color:#fff;
  font-family:"Black Ops One",sans-serif; font-size:14px; letter-spacing:.06em;
  padding:15px 20px !important; border-radius:var(--r-pill) !important; width:100% !important;
  box-shadow:0 12px 26px -8px rgba(0,69,217,.6), inset 0 1px 0 rgba(255,255,255,.18);
  transition:transform .3s var(--ease), background-color .3s var(--ease), box-shadow .3s var(--ease);
}
.txnl-btn:hover:not(:disabled){
  background:var(--tx-accent-h); transform:translateY(-2px);
  box-shadow:0 18px 36px -10px rgba(0,69,217,.72), inset 0 1px 0 rgba(255,255,255,.22);
}
.txnl-btn:disabled{ opacity:.7; cursor:default; }
.txnl-btn:focus-visible{ outline:2px solid #fff; outline-offset:2px; }

.txnl-msg{ margin:12px 0 0; font-family:"Public Sans",sans-serif; font-size:13.5px; line-height:1.5; min-height:0; }
.txnl-msg.is-ok{ color:#7FE0A8; }
.txnl-msg.is-error{ color:#FF8A8A; }
.txnl-fine{
  margin:14px 0 0; font-family:"Public Sans",sans-serif;
  font-size:12px; line-height:1.5; color:var(--tx-muted-deep);
}

.txnl-hp{ position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
.txnl-sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }

@media (max-width:767px){
  .txnl{ padding:14px; }
  .txnl-card{ padding:26px 22px 28px; border-radius:26px; }
  .txnl-title{ font-size:clamp(25px,7.2vw,32px); }
  .txnl-desc{ font-size:14.5px; }
  /* 16px or iOS Safari zooms the whole page the moment the field is focused */
  .txnl-input{ font-size:16px !important; padding:15px 18px !important; }
  .txnl-btn{ padding:16px 20px !important; }
  .txnl-x{ top:10px; right:12px; }
}
@media (prefers-reduced-motion:reduce){
  .txnl-card, .txnl-scrim{ transition:none !important; transform:none !important; }
}
/* ==========================================================================
   DIAGNOSTIC SCAN GRID
   Four accent variants cycle so twelve cards never read as twelve of the same
   thing. Card shape, spacing and motion stay identical; only the accent moves.
   ========================================================================== */
.tx-scan-grid{
  display:grid !important;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(16px,1.8vw,26px) !important;
  align-items:stretch;
  padding:0 !important;
  width:auto !important; max-width:none !important;
}
.tx-scan-grid > .e-con{ width:auto !important; max-width:none !important; flex:1 1 auto !important; }

.tx-scan-card{
  position:relative; isolation:isolate; overflow:hidden;
  display:flex !important; flex-direction:column;
  background:linear-gradient(180deg,#0E1118 0%, #08090E 100%) !important;
  border:1px solid rgba(147,166,194,.12) !important;
  border-radius:26px !important;
  padding:clamp(16px,1.7vw,22px) !important;
  box-shadow:none !important;
  transition:transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.tx-scan-card:hover{
  transform:translateY(-6px);
  border-color:rgba(0,69,217,.34) !important;
  box-shadow:0 26px 54px -22px rgba(0,69,217,.50), 0 8px 18px -12px rgba(0,0,0,.72);
}

.tx-scan-media{
  border-radius:18px !important; overflow:hidden;
  margin-bottom:clamp(12px,1.3vw,18px) !important;
  background:rgba(4,4,7,.6);
}
.tx-scan-media svg, .tx-scan-media .txscScan, .tx-scan-media > div{ display:block; width:100%; height:auto; }

.tx-scan-title .elementor-heading-title{
  font-family:"Public Sans",sans-serif !important; font-weight:700 !important;
  font-size:clamp(15px,1.25vw,17.5px) !important;
  line-height:1.3 !important; letter-spacing:0 !important;
  color:#fff !important; margin:0 0 .45em !important;
}
.tx-scan-desc, .tx-scan-desc .elementor-widget-container{
  font-size:clamp(13px,1vw,14.2px) !important; line-height:1.62 !important;
  color:var(--tx-muted-deep) !important;
}


/* --- variant 1: a hairline that widens across the top ------------------- */
.tx-alt-1::before{
  content:""; position:absolute; top:0; left:22%; right:22%; height:1px; z-index:2;
  background:linear-gradient(90deg, rgba(0,69,217,0), rgba(0,69,217,.9), rgba(0,69,217,0));
  opacity:.65; transition:opacity var(--dur) var(--ease), left var(--dur) var(--ease), right var(--dur) var(--ease);
}
.tx-alt-1:hover::before{ opacity:1; left:4%; right:4%; }

/* --- variant 2: a corner bloom in the top right ------------------------- */
.tx-alt-2::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background:radial-gradient(64% 52% at 96% 0%, rgba(0,69,217,.30) 0%, rgba(0,69,217,0) 64%);
  opacity:.7; transition:opacity var(--dur) var(--ease);
}
.tx-alt-2:hover::before{ opacity:1; }
.tx-alt-2 > *{ position:relative; z-index:1; }

/* --- variant 3: an edge bar down the left that grows ------------------- */
.tx-alt-3::before{
  content:""; position:absolute; left:0; top:28%; bottom:28%; width:2px; z-index:2;
  background:linear-gradient(180deg, rgba(0,69,217,0), rgba(0,69,217,.95), rgba(0,69,217,0));
  opacity:.7; transition:opacity var(--dur) var(--ease), top var(--dur) var(--ease), bottom var(--dur) var(--ease);
}
.tx-alt-3:hover::before{ opacity:1; top:8%; bottom:8%; }

/* --- variant 4: a floor wash that rises on hover ----------------------- */
.tx-alt-4::before{
  content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background:linear-gradient(0deg, rgba(0,69,217,.26) 0%, rgba(0,69,217,0) 46%);
  opacity:.55; transition:opacity var(--dur) var(--ease);
}
.tx-alt-4::after{
  content:""; position:absolute; top:0; left:0; right:0; height:1px; z-index:2;
  background:linear-gradient(90deg, rgba(147,166,194,0), rgba(147,166,194,.34), rgba(147,166,194,0));
}
.tx-alt-4:hover::before{ opacity:1; }
.tx-alt-4 > *{ position:relative; z-index:1; }

@media (max-width:900px){
  .tx-scan-grid{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:620px){
  .tx-scan-grid{ grid-template-columns:minmax(0,1fr); }
  .tx-scan-card{ border-radius:22px !important; }
}
@media (prefers-reduced-motion:reduce){
  .tx-scan-card, .tx-scan-card::before{ transition:none !important; }
}
/* scan card internals: left aligned, no dead space between title and copy */
.tx-scan-card,
.tx-scan-card .elementor-widget-container,
.tx-scan-title, .tx-scan-desc{ text-align:left !important; }
.tx-scan-card > .elementor-widget{ width:100% !important; }
.tx-scan-title{ margin:0 0 6px !important; }
.tx-scan-title .elementor-heading-title{ text-align:left !important; }
.tx-scan-desc{ margin:0 !important; }
.tx-scan-desc p{ margin:0 !important; }
.tx-scan-desc p + p{ margin-top:.6em !important; }
.tx-scan-media{ margin-top:0 !important; }
/* ==========================================================================
   GUIDE PAGE RHYTHM
   The intro and the scan showcase run the full width, then the page drops into
   two columns for the reading sections. That keeps the dark scan band from
   sitting in a narrow column with dead light space beside it.
   ========================================================================== */
body.tx-resource-page .elementor > .e-con:nth-child(2),
body.tx-resource-page .elementor > .e-con:nth-child(3){
  grid-column:full-start / full-end !important;
}
body.tx-resource-page .tx-aside{ grid-row:4 / 6; }

/* full width guide sections get the standard page gutter back */
body.tx-resource-page .elementor > .e-con:nth-child(2) > .e-con,
body.tx-resource-page .elementor > .e-con:nth-child(3) > .e-con{
  max-width:1280px !important;
  margin-inline:auto !important;
  padding-inline:clamp(20px,5vw,56px) !important;
  padding-block:clamp(44px,5vw,76px) !important;
  border-top:0 !important;
}
body.tx-resource-page .elementor > .e-con:nth-child(3){
  border-radius:var(--r-xl) !important;
  margin-block:clamp(20px,2.4vw,36px);
}

/* with the full width to work in, the scans go three across */
body.tx-resource-page .tx-scan-grid{ grid-template-columns:repeat(3,minmax(0,1fr)); }

/* first two-column section should not carry a divider rule at its top */
body.tx-resource-page .elementor > .e-con:nth-child(4) > .e-con{ border-top:0 !important; }

@media (max-width:1100px){
  body.tx-resource-page .tx-scan-grid{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:900px){
  body.tx-resource-page .elementor > .e-con:nth-child(2),
  body.tx-resource-page .elementor > .e-con:nth-child(3){ grid-column:auto !important; }
  body.tx-resource-page .tx-aside{ grid-row:auto !important; }
}
@media (max-width:620px){
  body.tx-resource-page .tx-scan-grid{ grid-template-columns:minmax(0,1fr); }
}
/* The FAQ closes each page at full width so nothing sits in a narrow column
   beside empty space once the sidebar has ended. */
body.tx-resource-page .elementor > .e-con:nth-child(6),
body.tx-service-page  .elementor > .e-con:nth-child(4),
body.tx-service-page  .elementor > .e-con:nth-child(5){
  grid-column:full-start / full-end !important;
}
body.tx-service-page .tx-aside{ grid-row:2 / 4; }

body.tx-resource-page .elementor > .e-con:nth-child(6) > .e-con,
body.tx-service-page  .elementor > .e-con:nth-child(4) > .e-con,
body.tx-service-page  .elementor > .e-con:nth-child(5) > .e-con{
  max-width:1280px !important;
  margin-inline:auto !important;
  padding-inline:clamp(20px,5vw,56px) !important;
  padding-block:clamp(52px,6vw,88px) !important;
  border-top:0 !important;
}
/* questions read better on a held measure, centred in the wide band */
body.tx-has-aside .tx-faq .e-n-accordion,
body.tx-has-aside .tx-faq .elementor-widget-nested-accordion{
  max-width:920px; margin-inline:auto;
}

@media (max-width:900px){
  body.tx-resource-page .elementor > .e-con:nth-child(6),
  body.tx-service-page  .elementor > .e-con:nth-child(4),
  body.tx-service-page  .elementor > .e-con:nth-child(5){ grid-column:auto !important; }
}
/* The approach section now has the full width to work in, so its steps spread
   across it instead of hugging the left edge. */
body.tx-service-page .elementor > .e-con:nth-child(4) .e-con-inner > .e-con{
  display:grid !important;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(20px,2.4vw,38px) !important;
  align-items:start;
  width:auto !important; max-width:none !important;
}
body.tx-service-page .elementor > .e-con:nth-child(4) .e-con-inner > .e-con > .e-con{
  width:auto !important; max-width:none !important; flex:1 1 auto !important;
}
@media (max-width:900px){
  body.tx-service-page .elementor > .e-con:nth-child(4) .e-con-inner > .e-con{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
}
@media (max-width:620px){
  body.tx-service-page .elementor > .e-con:nth-child(4) .e-con-inner > .e-con{
    grid-template-columns:minmax(0,1fr);
  }
}
/* ==========================================================================
   Icons removed site wide. Anything left rendering one is collapsed so it
   cannot leave a hole in the layout.
   ========================================================================== */
.txsc-ico{ display:none !important; }
.elementor-widget-html:has(.txsc-ico){ display:none !important; }

/* The guide heroes still carry the empty container the icon used to sit in,
   which renders as a blank dark chip above the eyebrow. Collapse any card
   container that has nothing left inside it. */
.tx-card:empty,
.tx-card:not(:has(*)){ display:none !important; }

/* ==========================================================================
   SERVICES PARENT PAGE
   Six alternating rows become six surfaces instead of text floating on a band,
   and the rhythm tightens so the page is not one long scroll of empty space.
   ========================================================================== */
body.page-id-603 .elementor > .e-con:nth-child(n+2):nth-child(-n+7){
  background:var(--tx-bg) !important;
}
body.page-id-603 .elementor > .e-con:nth-child(n+2):nth-child(-n+7) > .e-con{
  background:var(--tx-surface) !important;
  border:1px solid var(--tx-border);
  border-radius:var(--r-lg) !important;
  box-shadow:var(--sh-1);
  padding:clamp(26px,3vw,48px) !important;
  max-width:min(1280px, calc(100% - 2 * clamp(20px,5vw,56px))) !important;
  margin-inline:auto !important;
  margin-block:clamp(9px,1.1vw,16px);
  transition:box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
body.page-id-603 .elementor > .e-con:nth-child(n+2):nth-child(-n+7) > .e-con:hover{
  border-color:rgba(0,69,217,.26);
  box-shadow:var(--sh-2);
}
/* the scan panel inside each row */
body.page-id-603 .tx-card-dark{
  border-radius:26px !important;
  padding:clamp(14px,1.6vw,22px) !important;
}
/* service name scale on this page sits between a section title and a card title */
body.page-id-603 .tx-title .elementor-heading-title{
  font-size:clamp(26px,2.8vw,40px) !important;
}
/* the closing bands keep the standard rhythm */
body.page-id-603 .elementor > .e-con:nth-child(n+8) > .e-con{
  padding-block:clamp(56px,6.5vw,96px) !important;
}

/* hero headline should break across two or three lines, not four */
.tx-page-hero .tx-title .elementor-heading-title{ max-width:19ch; }
.tx-page-hero .tx-lede{ max-width:60ch; }

@media (max-width:900px){
  body.page-id-603 .elementor > .e-con:nth-child(n+2):nth-child(-n+7) > .e-con{
    padding:clamp(20px,4vw,30px) !important;
    border-radius:26px !important;
  }
}

/* ==========================================================================
   Home service tiles now align with the guide scan cards
   ========================================================================== */
.tx-service-card,
.tx-service-card .elementor-widget-container,
.tx-service-card .tx-card-title,
.tx-service-card .tx-card-title .elementor-heading-title,
.tx-service-card .tx-card-list{ text-align:left !important; }
/* About page: the six trades were wrapping five and one. Hold them on one row,
   then step down cleanly. */
#txsc-whatwedo{
  display:grid !important;
  grid-template-columns:repeat(6,minmax(0,1fr));
  gap:clamp(14px,1.6vw,26px) !important;
  align-items:start;
}
#txsc-whatwedo > .e-con{ width:auto !important; max-width:none !important; flex:1 1 auto !important; }
@media (max-width:1100px){ #txsc-whatwedo{ grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (max-width:620px){ #txsc-whatwedo{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
/* jotform-launcher: Dallas stays visible, just without the coloured halo behind him */
.embedded-agent-container{ z-index:997 !important; }
.ai-agent-chat-avatar-pulse-wrapper,
.ai-agent-chat-avatar-pulse-wrapper::before,
.ai-agent-chat-avatar-pulse-wrapper::after{
  background:transparent !important;
  background-image:none !important;
  box-shadow:none !important;
  border-color:transparent !important;
}
.ai-agent-chat-avatar,
.ai-agent-chat-avatar.size-md{
  background:transparent !important;
  background-image:none !important;
  box-shadow:none !important;
  border:0 !important;
  width:64px !important;
  height:64px !important;
}
.ai-agent-chat-avatar img{ width:100% !important; height:100% !important; object-fit:cover !important; border-radius:50% !important; }
@media (max-width:1024px){
  .embedded-agent-container{ bottom:92px !important; right:10px !important; }
  .ai-agent-chat-avatar,
  .ai-agent-chat-avatar.size-md{ width:54px !important; height:54px !important; }
}
@media (max-width:600px){ .embedded-agent-container{ bottom:88px !important; } }

/* header-nav-centred: menu sits centred in the space between the logo and the action wedge */
@media (min-width:1025px){
  .elementor-element-b4ac561{ align-items:center !important; flex-wrap:nowrap !important; }
  .elementor-element-6b2fe2a{ --width:auto !important; width:auto !important; flex:0 0 auto !important; }
  .elementor-element-d096723{ --width:auto !important; width:auto !important; flex:0 0 auto !important; }
  .elementor-element-4f3caaf{
    --width:auto !important; width:auto !important; flex:1 1 auto !important; min-width:0 !important;
    justify-content:center !important;
    padding-left:clamp(36px,4vw,72px) !important;
    padding-right:clamp(12px,1.4vw,28px) !important;
  }
  .elementor-element-4f3caaf .xpro-elementor-horizontal-navbar-nav{
    display:flex !important; flex-wrap:nowrap !important;
    justify-content:center !important; align-items:center !important;
    width:100% !important; padding:0 !important;
  }
  .elementor-element-4f3caaf .xpro-elementor-horizontal-navbar-nav > li > a{ white-space:nowrap !important; }
}
/* up to 1500 the eight items need slightly tighter type to sit clear of both edges */
@media (min-width:1025px) and (max-width:1500px){
  .elementor-element-4f3caaf .xpro-elementor-horizontal-navbar-nav > li > a{
    font-size:13.5px !important; padding-left:7px !important; padding-right:7px !important; letter-spacing:0 !important;
  }
}
@media (min-width:1025px) and (max-width:1200px){
  .txsc-actions .txsc-phone-num{ display:none !important; }
  .txsc-actions .txsc-phone{ padding-left:14px !important; padding-right:14px !important; }
}
