/* ==================================================================
   DOTWEB IT SOLUTIONS — SIGNAL design system
   Every selector is scoped under .dw-page so nothing leaks into
   WordPress, Elementor or the active theme. Every section declares
   its own background so no theme colour can bleed through.
   ================================================================== */

.dw-page{
  --paper:#F2F3F1; --paper-2:#EAE9E3; --ink:#111114;
  --blue:#2B3CFF; --blue-dark:#A9B4FF;
  --blue-08:rgba(43,60,255,.08); --blue-14:rgba(43,60,255,.14);
  --sec:#3F4046; --mut:#5F6167;
  --line:#D8D9D4; --d-line:#2A2B31; --d-sec:#B9BAC1;
  --err:#B3261E;
  --fd:'Bricolage Grotesque',system-ui,sans-serif;
  --fb:'Inter',system-ui,sans-serif;
  --fm:'JetBrains Mono',ui-monospace,monospace;
  --w:1280px;
  background:var(--paper);
  color:var(--ink);
  font:400 16.5px/1.65 var(--fb);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
.dw-page *{box-sizing:border-box}
.dw-page h1,.dw-page h2,.dw-page h3,.dw-page h4,.dw-page p,
.dw-page ul,.dw-page ol,.dw-page figure{margin:0;padding:0}
.dw-page a{color:inherit;text-decoration:none}
.dw-page img,.dw-page svg{display:block;max-width:100%}
.dw-page :focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.dw-page .wrap{max-width:var(--w);margin-inline:auto;padding-inline:32px}
.dw-page .skip{position:absolute;left:-9999px;top:0;background:var(--ink);
  color:var(--paper);padding:12px 20px;z-index:200;font:700 .85rem var(--fb)}
.dw-page .skip:focus{left:0}

/* ==================================================================
   THEME ISOLATION LAYER

   This stylesheet loads only on DotWeb managed pages, which run on the
   Elementor Canvas template. Even so, WordPress and the active theme
   still emit global CSS on every page: root font scaling, heading and
   paragraph resets, link colours, button and form-control styling, and
   block-theme layout constraints.

   Rather than neutralise one specific theme, this block restores a known
   baseline for every element our markup actually uses. It is written at
   .dw-page / .dw-home / .dw-quote specificity (0,1,1), which beats bare
   tag selectors, :root :where(...) global styles, and ties with
   .entry-content-style rules — and our stylesheet loads after the theme's,
   so ties resolve in our favour.

   It sits BEFORE the component styles, so those still win over it.
   ================================================================== */

/* A theme that rescales the document root silently resizes every rem on
   the page. Astra did this below 921px; others do it too. */
html:root{font-size:100%}
html:root body{margin:0;padding:0}

/* The <main> element sits between the header and footer wrappers, so a bare
   `main{max-width:...}` theme rule would box the whole page. An id selector
   (1,0,0) cannot be beaten by any class or tag rule a theme might ship. */
#dw-main{max-width:none;width:auto;margin:0;padding:0;border:0;background:none;
  float:none;clear:none;display:block;box-shadow:none;
  font:400 16.5px/1.68 'Inter',system-ui,sans-serif;color:#111114;
  letter-spacing:normal;text-align:left;text-transform:none}

.dw-page,.dw-home,.dw-quote{box-sizing:border-box}

/* Layout elements: themes set margins, padding, max-widths, borders and
   backgrounds on these constantly. Component rules below restore ours. */
.dw-page section,.dw-home section,.dw-quote section,
.dw-page header,.dw-home header,.dw-quote header,
.dw-page footer,.dw-home footer,.dw-quote footer,
.dw-page nav,.dw-home nav,.dw-quote nav,
.dw-page article,.dw-page aside,.dw-page main,.dw-home main,.dw-quote main,
.dw-home article,.dw-quote article,.dw-home aside,.dw-quote aside,
.dw-page div,.dw-home div,.dw-quote div,
.dw-page form,.dw-home form,.dw-quote form,
.dw-page fieldset,.dw-home fieldset,.dw-quote fieldset,
.dw-page legend,.dw-home legend,.dw-quote legend,
.dw-page label,.dw-home label,.dw-quote label,
.dw-page span,.dw-home span,.dw-quote span{
  margin:0;padding:0;max-width:none;min-width:0;width:auto;
  border:0;border-radius:0;box-shadow:none;background:none;
  float:none;clear:none;text-indent:0}
.dw-page *,.dw-home *,.dw-quote *,
.dw-page *::before,.dw-home *::before,.dw-quote *::before,
.dw-page *::after,.dw-home *::after,.dw-quote *::after{box-sizing:border-box}

/* Text elements: themes commonly set margins, weights and colours here. */
.dw-page h1,.dw-page h2,.dw-page h3,.dw-page h4,.dw-page h5,.dw-page h6,
.dw-home h1,.dw-home h2,.dw-home h3,.dw-home h4,.dw-home h5,.dw-home h6,
.dw-quote h1,.dw-quote h2,.dw-quote h3,.dw-quote h4,.dw-quote h5,.dw-quote h6,
.dw-page p,.dw-home p,.dw-quote p,
.dw-page ul,.dw-home ul,.dw-quote ul,
.dw-page ol,.dw-home ol,.dw-quote ol,
.dw-page li,.dw-home li,.dw-quote li,
.dw-page figure,.dw-home figure,.dw-quote figure,
.dw-page dl,.dw-page dd,.dw-page dt,
.dw-page blockquote,.dw-home blockquote,.dw-quote blockquote{
  margin:0;padding:0;text-indent:0;max-width:none;float:none;clear:none;
  /* A theme rule on a bare tag beats inheritance, so these must be restated. */
  font-family:inherit;font-size:inherit;font-weight:inherit;font-style:inherit;
  line-height:inherit;letter-spacing:inherit;color:inherit;
  text-transform:none;text-decoration:none;text-align:inherit;
  border:0;background:none;box-shadow:none}

.dw-page ul,.dw-home ul,.dw-quote ul,
.dw-page ol,.dw-home ol,.dw-quote ol{list-style:none}

/* Links: themes set colour, underline and hover backgrounds. */
.dw-page a,.dw-home a,.dw-quote a{
  color:inherit;text-decoration:none;box-shadow:none;background:none;
  border-bottom:0;outline-offset:2px}

/* Form controls and buttons: themes force heights, radii, shadows and padding. */
.dw-page button,.dw-home button,.dw-quote button,
.dw-page input,.dw-home input,.dw-quote input,
.dw-page select,.dw-home select,.dw-quote select,
.dw-page textarea,.dw-home textarea,.dw-quote textarea{
  border-radius:0;box-shadow:none;text-shadow:none;text-transform:none;
  height:auto;min-height:0;max-width:none;min-width:0;
  margin:0;padding:0;letter-spacing:normal;float:none;
  font-family:inherit;font-size:inherit;font-weight:inherit;line-height:normal;
  -webkit-appearance:none;appearance:none}

/* Media */
.dw-page img,.dw-home img,.dw-quote img,
.dw-page svg,.dw-home svg,.dw-quote svg{
  border-radius:0;box-shadow:none;max-width:100%;vertical-align:middle}

/* Tables, in case a theme styles them globally. */
.dw-page table,.dw-home table,.dw-quote table{
  border-collapse:collapse;border-spacing:0;width:auto;margin:0}

/* ------------------------------------------------------------------
   ELEMENTOR CONTAINER BREAKOUT

   Elementor Canvas removes the theme shell, but not Elementor's own
   containers. An HTML widget sits inside a boxed container whose inner
   wrapper is capped at the content width (1140px by default, 940px in
   the legacy section layout), so full-width sections stop short of the
   viewport edges.

   The :has() rules below neutralise those wrappers wherever they contain
   our markup. For browsers without :has(), the @supports block falls back
   to a viewport-width breakout on the three top-level blocks.
   ------------------------------------------------------------------ */
.elementor:has(.dw-page),.elementor:has(.dw-home),.elementor:has(.dw-quote),
.elementor-section:has(.dw-page),.elementor-section:has(.dw-home),.elementor-section:has(.dw-quote),
.elementor-container:has(.dw-page),.elementor-container:has(.dw-home),.elementor-container:has(.dw-quote),
.elementor-column:has(.dw-page),.elementor-column:has(.dw-home),.elementor-column:has(.dw-quote),
.elementor-widget-wrap:has(.dw-page),.elementor-widget-wrap:has(.dw-home),.elementor-widget-wrap:has(.dw-quote),
.elementor-widget:has(.dw-page),.elementor-widget:has(.dw-home),.elementor-widget:has(.dw-quote),
.elementor-widget-container:has(.dw-page),.elementor-widget-container:has(.dw-home),
.elementor-widget-container:has(.dw-quote),
.e-con:has(.dw-page),.e-con:has(.dw-home),.e-con:has(.dw-quote),
.e-con-inner:has(.dw-page),.e-con-inner:has(.dw-home),.e-con-inner:has(.dw-quote),
.elementor-element:has(.dw-page),.elementor-element:has(.dw-home),.elementor-element:has(.dw-quote){
  max-width:none!important;width:100%!important;
  margin-inline:0!important;padding-inline:0!important;padding-block:0!important;
  border:0!important;background:none!important;box-shadow:none!important;
  --content-width:100%!important;--width:100%!important}

@supports not selector(:has(*)){
  #dw-main,.dw-page.dw-chrome{width:100vw;margin-inline:calc(50% - 50vw)}
}

/* Block-theme layout constraints. Twenty Twenty-Five and other block themes
   cap direct children of the content area to a narrow measure and centre
   them. On Elementor Canvas these wrappers are absent, but if a page ever
   renders through the theme template they would box the whole design. */
.dw-page .is-layout-constrained > *,
.dw-page .is-layout-flow > *,
.wp-site-blocks .dw-page,
.entry-content .dw-page,
.wp-block-post-content .dw-page,
.is-layout-constrained > .dw-page,
.is-layout-flow > .dw-page,
.is-layout-constrained > .dw-home,
.is-layout-flow > .dw-home,
.is-layout-constrained > .dw-quote,
.is-layout-flow > .dw-quote{max-width:none!important;width:100%!important;margin-inline:0!important}

/* ---------- typography ---------- */
.dw-page h1,.dw-page h2,.dw-page h3{font-family:var(--fd)}
/* Explicit colours: a WordPress theme styling bare h2/li would otherwise win,
   since our rules only set the font. Dark/CTA overrides come later and still apply. */
.dw-page h1,.dw-page h2,.dw-page h3,.dw-page h4{color:var(--ink)}
.dw-page li,.dw-page span,.dw-page td,.dw-page th{color:inherit}
.dw-page strong,.dw-page b,.dw-page em{color:inherit}
.dw-page h1{font-size:clamp(2.4rem,4.6vw,3.95rem);font-weight:800;line-height:.99;
  letter-spacing:-.035em;text-transform:uppercase}
.dw-page h1 .b{color:var(--blue)}
.dw-page h2{font-size:clamp(1.9rem,3.6vw,3rem);font-weight:800;line-height:1.06;letter-spacing:-.025em}
.dw-page h3{font-size:1.1rem;font-weight:700;line-height:1.32;letter-spacing:-.01em}
.dw-page p{color:var(--sec)}
.dw-page .kick{font:700 .72rem/1 var(--fb);letter-spacing:.22em;text-transform:uppercase;color:var(--blue)}
.dw-page .mono{font:600 .68rem/1 var(--fm);letter-spacing:.12em;text-transform:uppercase}
.dw-page .lead{font-size:1.1rem;max-width:58ch}

/* ---------- buttons ---------- */
.dw-page .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font:700 .94rem var(--fb);padding:16px 28px;border:2px solid var(--ink);cursor:pointer;
  background:var(--paper);color:var(--ink);
  transition:transform .16s,box-shadow .16s,background .16s,color .16s}
.dw-page .btn .ar{transition:transform .16s}
.dw-page .btn:hover .ar{transform:translateX(5px)}
.dw-page .btn-b{background:var(--blue);border-color:var(--ink);color:#fff;box-shadow:6px 6px 0 var(--ink)}
.dw-page .btn-b:hover{transform:translate(-2px,-2px);box-shadow:9px 9px 0 var(--ink)}
.dw-page .btn-b:active{transform:translate(3px,3px);box-shadow:2px 2px 0 var(--ink)}
.dw-page .btn-o:hover{background:var(--ink);color:var(--paper)}

/* ---------- logo ---------- */
.dw-page .logo{display:flex;align-items:center;gap:12px;color:var(--ink)}
.dw-page .logo-mk{width:40px;height:40px;flex-shrink:0;transition:transform .2s}
.dw-page .logo:hover .logo-mk{transform:translateY(-2px)}
.dw-page .logo-tx .l1{font:800 1.22rem/1 var(--fd);letter-spacing:-.015em;display:block;margin-bottom:3px}
.dw-page .logo-tx .l2{font:600 .55rem/1.4 var(--fm);letter-spacing:.26em;color:var(--mut);
  display:block;text-transform:uppercase}

/* ---------- utility bar + nav ---------- */
.dw-page .util{background:var(--ink);color:#9C9EA6}
.dw-page .util .wrap{display:flex;flex-wrap:wrap;gap:6px 26px;align-items:center;
  padding-top:9px;padding-bottom:9px;font:600 .64rem var(--fm);letter-spacing:.16em;text-transform:uppercase}
.dw-page .util .sep{color:#4A4C54}
.dw-page .util .right{margin-left:auto;display:flex;gap:22px}
.dw-page .util a:hover{color:var(--paper)}
/* The utility bar and the header stick together as one band. Making the
   wrapper sticky rather than each element avoids hard-coding the utility
   bar's height as an offset, which would break if its content wrapped. */
.dw-top{position:sticky;top:0;z-index:80}
.dw-page .hdr{position:relative;z-index:1;background:var(--paper);border-bottom:2px solid var(--ink)}
.dw-page .nav{display:flex;align-items:center;height:78px;gap:28px}
.dw-page .links{display:flex;gap:2px;margin-left:auto}
.dw-page .links a{font:700 .84rem var(--fb);letter-spacing:.04em;padding:10px 16px;
  text-transform:uppercase;position:relative;overflow:hidden;z-index:1}
.dw-page .links a::before{content:'';position:absolute;inset:0;background:var(--ink);
  transform:translateY(101%);transition:transform .2s cubic-bezier(.4,0,.2,1);z-index:-1}
.dw-page .links a:hover{color:var(--paper)}
.dw-page .links a:hover::before{transform:translateY(0)}
.dw-page .links a[aria-current="page"]{color:var(--blue)}
.dw-page .nav .btn{padding:12px 22px;box-shadow:4px 4px 0 var(--ink)}
.dw-page .burger{display:none;margin-left:auto;background:var(--paper);border:2px solid var(--ink);
  width:44px;height:44px;flex:0 0 44px;font-size:1.05rem;cursor:pointer;color:var(--ink);
  align-items:center;justify-content:center;padding:0}

/* ---------- figures / SVG language ---------- */
.dw-page .fig{position:relative;border:2px solid var(--ink);background:var(--paper);
  box-shadow:12px 12px 0 var(--ink);transition:transform .2s,box-shadow .2s}
.dw-page .fig:hover{transform:translate(-3px,-3px);box-shadow:15px 15px 0 var(--blue)}
.dw-page .fig-bar{display:flex;justify-content:space-between;align-items:center;gap:14px;
  padding:10px 16px;border-bottom:2px solid var(--ink);background:var(--paper)}
.dw-page .fig-bar .mono{color:var(--mut)}
.dw-page .fig-bar .live{color:var(--blue);display:flex;align-items:center;gap:7px}
.dw-page .fig-bar .live i{width:7px;height:7px;background:var(--blue);border-radius:50%;
  animation:dwblink 2.2s infinite}
@keyframes dwblink{0%,100%{opacity:1}50%{opacity:.25}}
.dw-page .fig-in{padding:18px}
.dw-page .stk{stroke:var(--ink);stroke-width:2;fill:none}
.dw-page .stk15{stroke:var(--ink);stroke-width:1.5;fill:none}
.dw-page .fill-p{fill:var(--paper)} .dw-page .fill-i{fill:var(--ink)}
.dw-page .fill-b{fill:var(--blue)} .dw-page .fill-t{fill:var(--blue-14)}
.dw-page .fill-l{fill:#DEDDD6} .dw-page .fill-m{fill:#C9C8C0}
.dw-page .flow{stroke:var(--blue);stroke-width:2.4;fill:none;stroke-dasharray:5 11;
  animation:dwdash 2.4s linear infinite}
@keyframes dwdash{to{stroke-dashoffset:-32}}
.dw-page .np{animation:dwpulse 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.dw-page .np.d2{animation-delay:-.9s} .dw-page .np.d3{animation-delay:-1.8s}
@keyframes dwpulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.55}}
.dw-page svg .lab{font:600 14px var(--fm);letter-spacing:.06em;fill:var(--mut)}
.dw-page svg .lab-b{fill:var(--blue)} .dw-page svg .lab-i{fill:var(--ink)}
.dw-page svg .lab-w{fill:#fff;font:700 14px var(--fb);letter-spacing:.04em}
.dw-page svg .tag{font:600 11px var(--fm);letter-spacing:.06em;fill:var(--mut)}

/* ---------- sections ---------- */
.dw-page .s{background:var(--paper)}
.dw-page section.s{padding:clamp(58px,7vw,96px) 0;position:relative}
.dw-page .vert{position:absolute;left:26px;top:92px;writing-mode:vertical-rl;transform:rotate(180deg);
  font:600 .66rem var(--fm);letter-spacing:.32em;text-transform:uppercase;color:var(--mut)}
.dw-page .s-head{margin-bottom:44px;max-width:820px}
.dw-page .s-head .kick{display:block;margin-bottom:16px}
.dw-page .s-head p{max-width:58ch;margin-top:16px;font-size:1.05rem}
.dw-page .dark{background:var(--ink);color:var(--paper)}
.dw-page .dark h2,.dw-page .dark h3{color:var(--paper)}
.dw-page .dark p{color:var(--d-sec)}
.dw-page .dark .kick{color:var(--blue-dark)}
.dw-page .dark .vert{color:#6E7077}
.dw-page .alt{background:var(--paper-2);
  background-image:linear-gradient(rgba(17,17,20,.035) 1px,transparent 1px),
    linear-gradient(90deg,rgba(17,17,20,.035) 1px,transparent 1px);
  background-size:52px 52px}

/* reveal (JS-gated: content never lost without JS) */
.dw-js .dw-page .rv{opacity:0;transform:translateY(20px);
  transition:opacity .7s,transform .7s cubic-bezier(.2,.7,.2,1)}
.dw-js .dw-page .rv.in{opacity:1;transform:none}
.dw-js .dw-page .rv.d1{transition-delay:.08s}
.dw-js .dw-page .rv.d2{transition-delay:.16s}

/* ---------- page hero ---------- */
.dw-page .p-hero{border-bottom:2px solid var(--ink);position:relative;overflow:hidden;
  background-color:var(--paper);
  background-image:radial-gradient(rgba(17,17,20,.09) 1.2px,transparent 1.2px);
  background-size:26px 26px}
.dw-page .p-hero .wrap{display:grid;grid-template-columns:minmax(0,1.14fr) minmax(0,.86fr);
  gap:clamp(34px,4.5vw,60px);align-items:center;
  padding-top:clamp(42px,5vw,70px);padding-bottom:clamp(42px,5vw,70px)}
.dw-page .crumb{display:flex;align-items:center;gap:10px;margin-bottom:22px;color:var(--mut);
  font:600 .66rem var(--fm);letter-spacing:.16em;text-transform:uppercase;flex-wrap:wrap}
.dw-page .crumb a:hover{color:var(--blue)}
.dw-page .p-hero h1{margin-bottom:20px}
.dw-page .h-btns{display:flex;gap:16px;flex-wrap:wrap;margin-top:28px}
.dw-page .h-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 24px;
  margin-top:30px;padding-top:20px;border-top:2px solid var(--ink)}
.dw-page .h-meta div{display:flex;flex-direction:column;gap:4px}
.dw-page .h-meta .k{font:600 .62rem var(--fm);letter-spacing:.18em;text-transform:uppercase;color:var(--mut)}
.dw-page .h-meta .v{font:600 .88rem var(--fb);color:var(--ink)}

/* spec panel */
.dw-page .spec-rows{padding:4px 22px 10px}
.dw-page .spec-row{display:grid;grid-template-columns:120px minmax(0,1fr);gap:16px;align-items:baseline;
  padding:13px 0;border-bottom:1px solid var(--line)}
.dw-page .spec-row:last-child{border-bottom:0}
.dw-page .spec-row .k{font:600 .62rem var(--fm);letter-spacing:.16em;text-transform:uppercase;color:var(--mut)}
.dw-page .spec-row .v{font:600 .92rem var(--fb);color:var(--ink)}

/* ---------- figure band ---------- */
.dw-page .band{border-bottom:2px solid var(--ink);background:var(--paper-2)}
.dw-page .band .wrap{padding-top:clamp(44px,5vw,68px);padding-bottom:clamp(48px,5.5vw,80px)}
.dw-page .band-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;
  flex-wrap:wrap;margin-bottom:32px}
.dw-page .band-head h2{font-size:clamp(1.6rem,2.9vw,2.3rem);max-width:20ch}
.dw-page .band-head p{max-width:42ch;font-size:.97rem}
.dw-page .band .fig{margin-inline:auto}

/* ---------- split ---------- */
.dw-page .split{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr);
  gap:clamp(34px,4.5vw,60px);align-items:start}
.dw-page .split h2{margin-bottom:18px}
.dw-page .split p+p{margin-top:14px}
.dw-page .checks{list-style:none;border-top:2px solid var(--ink)}
.dw-page .checks li{display:grid;grid-template-columns:24px 1fr;gap:14px;align-items:start;
  padding:16px 0;border-bottom:1px solid var(--line);font-size:.98rem;color:var(--sec)}
.dw-page .checks li:last-child{border-bottom:0}
.dw-page .checks b{color:var(--ink);font-weight:700}
.dw-page .dark .checks{border-top-color:var(--paper)}
.dw-page .dark .checks li{border-bottom-color:var(--d-line);color:var(--d-sec)}
.dw-page .dark .checks b{color:var(--paper)}
.dw-page .tick{width:20px;height:20px;margin-top:2px}
.dw-page .tick path{stroke:var(--blue);stroke-width:2.6;fill:none;stroke-linecap:round}
.dw-page .dark .tick path{stroke:var(--blue-dark)}

/* ---------- cell grids (capabilities / standards) ---------- */
.dw-page .grid3,.dw-page .grid4{display:grid;border:2px solid var(--ink);background:var(--paper)}
.dw-page .grid3{grid-template-columns:repeat(3,minmax(0,1fr))}
.dw-page .grid4{grid-template-columns:repeat(4,minmax(0,1fr))}
.dw-page .cell{padding:26px 24px 30px;border-right:2px solid var(--ink);
  border-bottom:2px solid var(--ink);transition:background .16s;position:relative}
.dw-page .cell:hover{background:var(--blue-08)}
.dw-page .cell .no{font:600 .68rem var(--fm);letter-spacing:.14em;color:var(--mut);
  display:block;margin-bottom:12px}
.dw-page .cell:hover .no{color:var(--blue)}
.dw-page .cell .k{display:block;font:600 .66rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);margin-bottom:13px}
.dw-page .cell h3{margin-bottom:7px;font-size:1.03rem}
.dw-page .cell p{font-size:.9rem;color:var(--mut);line-height:1.55;margin:0}
.dw-page .grid3 .cell:nth-child(3n){border-right:0}
.dw-page .grid4 .cell:nth-child(4n){border-right:0}
.dw-page .cell.last-row{border-bottom:0}

/* ---------- stack strip ---------- */
.dw-page .stack{margin-top:32px;border:2px solid var(--ink);background:var(--paper);
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:20px 22px}
.dw-page .stack .k{font:600 .64rem var(--fm);letter-spacing:.18em;text-transform:uppercase;
  color:var(--mut);margin-right:8px}
.dw-page .stack .t{font:600 .78rem var(--fm);letter-spacing:.04em;border:1.5px solid var(--ink);
  padding:7px 12px;background:var(--paper);transition:.15s}
.dw-page .stack .t:hover{background:var(--ink);color:var(--paper)}

/* ---------- process rail ---------- */
.dw-page .rail{border-top:2px solid var(--ink)}
.dw-page .step{display:grid;grid-template-columns:92px minmax(0,1fr) minmax(0,.8fr);
  gap:clamp(18px,3vw,40px);align-items:start;padding:24px 0;
  border-bottom:2px solid var(--line);transition:background .16s}
.dw-page .step:last-child{border-bottom:0}
.dw-page .step:hover{background:var(--blue-08)}
.dw-page .step .no{font:800 1.8rem/1 var(--fd);letter-spacing:-.03em;color:var(--blue)}
.dw-page .step h3{margin-bottom:6px}
.dw-page .step p{font-size:.96rem}
.dw-page .step .out{font:600 .64rem var(--fm);letter-spacing:.14em;text-transform:uppercase;
  color:var(--mut);line-height:1.9;padding-top:4px}
.dw-page .step .out b{color:var(--ink);font-weight:600}

/* ---------- statement band (dark) ---------- */
.dw-page .stmt .wrap{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
  gap:clamp(28px,4.5vw,60px);align-items:center}
.dw-page .stmt .num{font:800 clamp(2.8rem,7vw,5.4rem)/0.9 var(--fd);letter-spacing:-.045em;color:var(--paper)}
.dw-page .stmt .num em{font-style:normal;color:var(--blue-dark)}
.dw-page .stmt .cap-l{display:block;margin-top:14px;font:600 .66rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:#8B8D95}
.dw-page .stmt .cond{margin-top:20px;padding-top:18px;border-top:1px solid var(--d-line);
  font-size:.93rem;color:#8B8D95}

/* ---------- commercial rail ---------- */
.dw-page .comm{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  border:2px solid var(--ink);background:var(--paper)}
.dw-page .comm div{padding:22px 22px 26px;border-right:2px solid var(--ink)}
.dw-page .comm div:last-child{border-right:0}
.dw-page .comm .k{display:block;font:600 .62rem var(--fm);letter-spacing:.18em;
  text-transform:uppercase;color:var(--mut);margin-bottom:9px}
.dw-page .comm .v{font:600 .94rem/1.5 var(--fb);color:var(--ink)}

/* ---------- info rail (about / contact) ---------- */
.dw-page .info{border-top:2px solid var(--ink)}
.dw-page .info-row{display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;
  align-items:baseline;padding:16px 0;border-bottom:1px solid var(--line)}
.dw-page .info-row:last-child{border-bottom:0}
.dw-page .info-row .k{font:600 .62rem var(--fm);letter-spacing:.16em;
  text-transform:uppercase;color:var(--mut)}
.dw-page .info-row .v{font:600 .96rem var(--fb);color:var(--ink);overflow-wrap:anywhere}
.dw-page .info-row a.v:hover{color:var(--blue)}
.dw-page .dark .info{border-top-color:var(--paper)}
.dw-page .dark .info-row{border-bottom-color:var(--d-line)}
.dw-page .dark .info-row .k{color:#8B8D95}
.dw-page .dark .info-row .v{color:var(--paper)}
.dw-page .dark .info-row a.v:hover{color:var(--blue-dark)}

/* ---------- contact cards ---------- */
.dw-page .cgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.dw-page .ccard{border:2px solid var(--ink);background:var(--paper);padding:26px 24px 30px;
  box-shadow:6px 6px 0 var(--ink);transition:transform .16s,box-shadow .16s}
.dw-page .ccard:hover{transform:translate(-2px,-2px);box-shadow:9px 9px 0 var(--blue)}
.dw-page .ccard .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);margin-bottom:14px}
.dw-page .ccard .v{font:700 1.05rem var(--fb);color:var(--ink);display:block;
  margin-bottom:6px;overflow-wrap:anywhere}
.dw-page .ccard p{font-size:.9rem;margin:0}

/* ---------- legal prose ---------- */
.dw-page .legal{max-width:860px}
.dw-page .legal .updated{display:block;font:600 .68rem var(--fm);letter-spacing:.16em;
  text-transform:uppercase;color:var(--mut);margin-bottom:32px;padding-bottom:16px;
  border-bottom:2px solid var(--ink)}
.dw-page .legal h2{font-size:1.35rem;margin:40px 0 12px;letter-spacing:-.02em}
.dw-page .legal h2:first-of-type{margin-top:0}
.dw-page .legal p{margin-bottom:13px;font-size:.99rem}
.dw-page .legal ul{padding-left:22px;margin:0 0 14px;display:grid;gap:8px}
.dw-page .legal li{color:var(--sec);font-size:.99rem}
.dw-page .legal a{color:var(--blue);font-weight:600}
.dw-page .legal a:hover{text-decoration:underline}
.dw-page .box{border:2px solid var(--ink);background:var(--paper-2);
  padding:22px 24px;margin:22px 0}
.dw-page .box p{margin:0}
.dw-page .box .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);margin-bottom:10px}
.dw-page .pending{border:2px solid var(--err);background:rgba(179,38,30,.05);
  padding:20px 24px;margin:22px 0}
.dw-page .pending .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--err);margin-bottom:10px}
.dw-page .pending p{margin:0;font-size:.95rem}
.dw-page .toc{border:2px solid var(--ink);background:var(--paper);padding:22px 24px;margin-bottom:34px}
.dw-page .toc .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--mut);margin-bottom:14px}
.dw-page .toc ol{margin:0;padding-left:20px;columns:2;column-gap:32px;font-size:.92rem}
.dw-page .toc li{margin-bottom:6px;color:var(--sec)}
.dw-page .toc a:hover{color:var(--blue)}

/* ---------- service index ---------- */
.dw-page .svc-list{border-top:2px solid var(--ink)}
.dw-page .svc-row{display:grid;grid-template-columns:64px minmax(0,1fr) minmax(0,1.1fr) 44px;
  gap:26px;align-items:center;padding:24px 0;border-bottom:2px solid var(--ink);
  position:relative;overflow:hidden}
.dw-page .svc-row::before{content:'';position:absolute;inset:0;background:rgba(43,60,255,.16);
  transform:scaleX(0);transform-origin:left;transition:transform .22s cubic-bezier(.4,0,.2,1)}
.dw-page .svc-row::after{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--blue);transform:scaleY(0);transform-origin:top;
  transition:transform .22s cubic-bezier(.4,0,.2,1)}
.dw-page .svc-row:hover::before{transform:scaleX(1)}
.dw-page .svc-row:hover::after{transform:scaleY(1)}
.dw-page .svc-row>*{position:relative;z-index:1}
.dw-page .svc-row .no{font:600 .9rem var(--fm);color:#9DA1AC;transition:.18s}
.dw-page .svc-row h3{transition:transform .18s}
.dw-page .svc-row p{font-size:.94rem;margin:0}
.dw-page .svc-row .go{font:600 1.1rem var(--fb);color:var(--mut);text-align:right;transition:.18s}
.dw-page .svc-row:hover .no,.dw-page .svc-row:hover .go{color:var(--blue);transform:translateX(5px)}
.dw-page .svc-row:hover h3{transform:translateX(5px)}

/* ---------- CTA ---------- */
.dw-page .cta{background:var(--blue);color:#fff;border-top:2px solid var(--ink);text-align:center;
  position:relative;overflow:hidden;
  background-image:radial-gradient(rgba(255,255,255,.16) 1.2px,transparent 1.2px);
  background-size:24px 24px}
.dw-page .cta .wrap{padding:clamp(56px,6.5vw,96px) 32px}
.dw-page .cta h2{color:#fff;max-width:20ch;margin:0 auto 16px}
.dw-page .cta p{color:#DDE2FF;max-width:52ch;margin:0 auto 32px;font-size:1.04rem}
.dw-page .cta .row{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}
.dw-page .cta .btn{border-color:#fff;color:#fff;background:transparent;box-shadow:none}
.dw-page .cta .btn:hover{background:#fff;color:var(--blue)}
.dw-page .cta .btn.solid{background:var(--ink);border-color:var(--ink);color:#fff;
  box-shadow:6px 6px 0 rgba(17,17,20,.35)}
.dw-page .cta .btn.solid:hover{background:#fff;color:var(--ink);border-color:#fff}
.dw-page .cta small{display:block;margin-top:24px;font:600 .68rem var(--fm);
  letter-spacing:.16em;text-transform:uppercase;color:#CDD4FF}

/* ---------- footer ---------- */
.dw-page .ftr{background:var(--ink);color:var(--d-sec)}
.dw-page .f-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:44px;
  padding:60px 0 44px;border-bottom:2px solid var(--d-line)}
.dw-page .f-grid h4{font:600 .68rem var(--fm);letter-spacing:.24em;text-transform:uppercase;
  color:var(--paper);margin-bottom:18px}
.dw-page .f-grid a{display:block;padding:5px 0;font-size:.92rem;transition:.14s}
.dw-page .f-grid a:hover{color:var(--paper);transform:translateX(4px)}
.dw-page .f-grid p{font-size:.92rem;color:var(--d-sec)}
.dw-page .ftr .logo{color:var(--paper);margin-bottom:16px}
.dw-page .ftr .logo-tx .l2{color:#7C7E86}
.dw-page .f-bot{display:flex;flex-wrap:wrap;gap:10px 34px;justify-content:space-between;
  padding:22px 0 30px;font-size:.83rem}

/* ---------- responsive ---------- */
@media(max-width:1080px){
  .dw-page .p-hero .wrap,.dw-page .split,.dw-page .stmt .wrap{grid-template-columns:minmax(0,1fr)}
  .dw-page .grid3,.dw-page .grid4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dw-page .grid3 .cell,.dw-page .grid4 .cell{border-right:2px solid var(--ink);
    border-bottom:2px solid var(--ink)}
  .dw-page .grid3 .cell:nth-child(2n),.dw-page .grid4 .cell:nth-child(2n){border-right:0}
  .dw-page .cell.last-row{border-bottom:2px solid var(--ink)}
  .dw-page .cell.last-row-m{border-bottom:0}
  .dw-page .comm{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dw-page .comm div{border-bottom:2px solid var(--ink)}
  .dw-page .comm div:nth-child(2n){border-right:0}
  .dw-page .comm div:nth-child(n+3){border-bottom:0}
  .dw-page .cgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dw-page .step{grid-template-columns:70px minmax(0,1fr)}
  .dw-page .step .out{grid-column:2;padding-top:10px}
  .dw-page .vert{display:none}
  .dw-page .f-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:900px){
  .dw-page .links{position:absolute;top:100%;left:0;right:0;background:var(--paper);
    border-bottom:2px solid var(--ink);flex-direction:column;gap:0;padding:6px 32px 18px;
    opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-10px);
    transition:opacity .2s ease,transform .26s cubic-bezier(.2,.7,.2,1),visibility 0s .26s;z-index:70}
  .dw-page .links.open{opacity:1;visibility:visible;pointer-events:auto;transform:none;
    transition:opacity .2s ease,transform .26s cubic-bezier(.2,.7,.2,1)}
  .dw-page .links a{padding:14px 0;border-bottom:1px solid var(--line)}
  .dw-page .links a::before{display:none}
  .dw-page .links a:hover{color:var(--ink)}
  .dw-page .burger{display:flex}
  .dw-page .nav>.btn{display:none}
}
@media(max-width:640px){
  .dw-page .util{display:none}
  .dw-page .wrap{padding-inline:22px}
  .dw-page .grid3,.dw-page .grid4,.dw-page .comm,.dw-page .cgrid{grid-template-columns:minmax(0,1fr)}
  .dw-page .cell,.dw-page .comm div{border-right:0!important}
  .dw-page .cell:last-child,.dw-page .comm div:last-child{border-bottom:0!important}
  .dw-page .cell.last-row,.dw-page .cell.last-row-m{border-bottom:2px solid var(--ink)}
  .dw-page .h-meta{grid-template-columns:minmax(0,1fr);gap:12px;margin-top:24px;padding-top:18px}
  .dw-page .h-meta div{flex-direction:row;align-items:baseline;gap:10px;flex-wrap:wrap}
  .dw-page .h-meta .k{min-width:106px}
  .dw-page .h-btns{flex-direction:column;align-items:stretch}
  .dw-page .h-btns .btn{width:100%}
  .dw-page .cta .row{flex-direction:column;align-items:stretch}
  .dw-page .cta .row .btn{width:100%}
  .dw-page .fig{box-shadow:6px 6px 0 var(--ink)}
  .dw-page .fig:hover{box-shadow:8px 8px 0 var(--blue)}
  .dw-page .fig-bar{padding:9px 12px;gap:10px}
  .dw-page .fig-bar .mono{font-size:.58rem;letter-spacing:.08em;line-height:1.25}
  /* SVG text scales with the viewBox, so bump it on small screens */
  .dw-page svg .tag{font-size:15px;letter-spacing:.03em}
  .dw-page svg .lab{font-size:18px;letter-spacing:.03em}
  .dw-page svg .lab-w{font-size:18px}
  .dw-page .sm-hide{display:none}
  .dw-page .step{grid-template-columns:54px minmax(0,1fr);gap:14px;padding:20px 0}
  .dw-page .step .no{font-size:1.45rem}
  .dw-page .info-row{grid-template-columns:112px minmax(0,1fr);gap:14px}
  .dw-page .spec-row{grid-template-columns:106px minmax(0,1fr);gap:12px}
  .dw-page .toc ol{columns:1}
  .dw-page .f-grid{grid-template-columns:1fr}
  .dw-page .svc-row{grid-template-columns:48px minmax(0,1fr) 36px;grid-template-rows:auto auto;
    gap:4px 14px;padding:20px 0}
  .dw-page .svc-row .no{grid-row:1/3}
  .dw-page .svc-row p{grid-column:2}
  .dw-page .svc-row .go{grid-row:1/3;align-self:center}
}
@media(prefers-reduced-motion:reduce){
  .dw-page *,.dw-page *::before,.dw-page *::after{
    animation:none!important;transition:none!important}
  .dw-js .dw-page .rv{opacity:1;transform:none}
}

/* ---------- pricing tiers ---------- */
.dw-page .tiers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  border:2px solid var(--ink);background:var(--paper)}
.dw-page .tier{padding:26px 24px 30px;border-right:2px solid var(--ink);
  border-bottom:2px solid var(--ink);display:flex;flex-direction:column;
  transition:background .16s;position:relative}
.dw-page .tier:hover{background:var(--blue-08)}
.dw-page .tier:nth-child(3n){border-right:0}
.dw-page .tier:nth-child(n+4){border-bottom:0}
.dw-page .tier .name{display:block;font:600 .66rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--mut);margin-bottom:12px}
.dw-page .tier:hover .name{color:var(--blue)}
.dw-page .tier .price{font:800 1.5rem/1.1 var(--fd);letter-spacing:-.03em;
  color:var(--ink);display:block;margin-bottom:16px}
.dw-page .tier ul{list-style:none;margin:0 0 18px;padding:0;display:grid;gap:7px}
.dw-page .tier li{font-size:.88rem;color:var(--mut);line-height:1.5;
  padding-left:16px;position:relative}
.dw-page .tier li::before{content:'';position:absolute;left:0;top:9px;
  width:8px;height:1.5px;background:var(--blue)}
.dw-page .tier .when{margin-top:auto;padding-top:14px;border-top:1px solid var(--line);
  font:600 .64rem var(--fm);letter-spacing:.12em;text-transform:uppercase;color:var(--mut)}
.dw-page .tier .when b{display:block;margin-top:5px;color:var(--ink);
  font-weight:600;letter-spacing:.06em;text-transform:none;font-size:.78rem}
.dw-page .price-note{margin-top:26px;border:2px solid var(--ink);background:var(--paper-2);
  padding:22px 24px}
.dw-page .price-note .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);margin-bottom:10px}
.dw-page .price-note p{margin:0;font-size:.94rem}
.dw-page .price-note p+p{margin-top:12px}
@media(max-width:1080px){
  .dw-page .tiers{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dw-page .tier{border-right:2px solid var(--ink);border-bottom:2px solid var(--ink)}
  .dw-page .tier:nth-child(2n){border-right:0}
  .dw-page .tier:nth-child(n+5){border-bottom:0}
}
@media(max-width:640px){
  .dw-page .tiers{grid-template-columns:minmax(0,1fr)}
  .dw-page .tier{border-right:0!important;border-bottom:2px solid var(--ink)!important}
  .dw-page .tier:last-child{border-bottom:0!important}
}

/* ---------- statement descriptor disclosure ---------- */
.dw-page .descriptor{margin-top:18px;border:2px solid var(--ink);background:var(--paper);
  border-left:6px solid var(--blue);padding:22px 24px}
.dw-page .descriptor .k{display:block;font:600 .64rem var(--fm);letter-spacing:.2em;
  text-transform:uppercase;color:var(--blue);margin-bottom:10px}
.dw-page .descriptor p{margin:0;font-size:.94rem}
.dw-page .descriptor p+p{margin-top:10px}
.dw-page .descriptor strong{color:var(--ink);font-weight:700}
.dw-page .dark .descriptor{background:rgba(255,255,255,.04);border-color:var(--paper);
  border-left-color:var(--blue-dark)}
.dw-page .dark .descriptor .k{color:var(--blue-dark)}
.dw-page .dark .descriptor p{color:var(--d-sec)}
.dw-page .dark .descriptor strong{color:var(--paper)}

/* ==================================================================
   FULL-WIDTH ARCHITECTURE
   Elementor Canvas already removes the theme shell. These rules make the
   result reliable even if a theme or plugin re-introduces a wrapper.
   ================================================================== */
.dw-page{width:100%;max-width:none;margin:0;padding:0}
.dw-chrome{width:100%;max-width:none;margin:0;padding:0}

/* Section backgrounds run edge to edge; content is constrained inside them. */
.dw-page section,
.dw-page .util,
.dw-page .ftr,
.dw-page .facts,
.dw-page .marq{width:100%;max-width:none;margin-inline:0}

/* The single content container. Full-width site, controlled measure. */
.dw-page .wrap{width:min(calc(100% - 48px), 1280px);max-width:none;margin-inline:auto;padding-inline:0}

/* Neutralise common theme wrappers if a page ever renders outside Canvas. */
.dw-page .ast-container,
.dw-page .site-content,
.dw-page .content-area,
.dw-page .entry-content,
.dw-page .container,
.dw-page .site-main{width:100%!important;max-width:none!important;margin:0!important;padding:0!important}

@media(max-width:640px){
  .dw-page .wrap{width:calc(100% - 40px)}
}

/* ---------- phone emphasis ---------- */
/* A small pulsing indicator marks the phone number wherever it appears.
   It uses the same signal language as the FIG. status dots. */
.dw-page.dw-page a[href^="tel:"],.dw-home.dw-home a[href^="tel:"],.dw-quote.dw-quote a[href^="tel:"]{
  display:inline-flex;align-items:center;gap:9px;position:relative}
.dw-page.dw-page a[href^="tel:"]::before,.dw-home.dw-home a[href^="tel:"]::before,
.dw-quote.dw-quote a[href^="tel:"]::before{
  content:'';width:8px;height:8px;flex:0 0 8px;border-radius:50%;
  background:var(--blue);animation:dwring 2.6s ease-in-out infinite}
.dw-page.dw-page .ftr a[href^="tel:"]::before,.dw-home.dw-home .ftr a[href^="tel:"]::before,
.dw-quote.dw-quote .ftr a[href^="tel:"]::before,
.dw-page.dw-page .dark a[href^="tel:"]::before{background:var(--blue-dark)}
@keyframes dwring{
  0%,100%{box-shadow:0 0 0 0 rgba(43,60,255,.5);opacity:1}
  50%{box-shadow:0 0 0 7px rgba(43,60,255,0);opacity:.65}}
.dw-page.dw-page a[href^="tel:"]:hover,.dw-home.dw-home a[href^="tel:"]:hover,
.dw-quote.dw-quote a[href^="tel:"]:hover{color:var(--blue)}
.dw-page.dw-page .ftr a[href^="tel:"]:hover,.dw-page.dw-page .dark a[href^="tel:"]:hover{color:var(--blue-dark)}

/* ---------- card-network marks in the footer ---------- */
.dw-page .dw-cards{margin-top:22px}
.dw-page .dw-cards .k{display:block;margin-bottom:11px;
  font:600 .62rem/1 var(--fm);letter-spacing:.18em;text-transform:uppercase;color:#8A8C94}
.dw-page .dw-card-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  margin:0;padding:0;list-style:none}
.dw-page .dw-card{display:flex;align-items:center;justify-content:center;
  margin:0;padding:0;list-style:none;background:none;border:0}
.dw-page .dw-card svg{width:46px;height:32px;display:block;fill:var(--d-sec);max-width:none;
  transition:fill .15s ease,transform .15s ease}
.dw-page .dw-card img{width:auto;height:30px;max-width:48px;display:block;object-fit:contain}
.dw-page .dw-card:hover svg{fill:var(--paper);transform:translateY(-2px)}
@media(max-width:640px){
  .dw-page .dw-card svg{width:42px;height:29px}
}
