/* DIVI-BASE: supplied by Divi builder assets on builder pages, absent on
   the IR page, therefore explicit here. Provenance: RULEBOOK "values
   nobody set" + the Divi 5 flex row model. Registry rules follow and
   override on ties. */
/* Divi 5 structural base, CDP-verified against the bridged pilot at 1200:
   every builder box is position:relative; the layout wrapper stacks at 1;
   a column stacks at 2, holds min-height:1px and carries float:left (inert
   inside the flex rows, stated so the computed diff is exact). */
.ns-ir :is(.ns-sec,.nst-hdr-eyebrow-row,.nst-hdr-main-row,.ns-hdr-col,.nst-hdr-text,.nst-hdr-aside,.nst-eyebrow,.nst-hdr-prose,.ns-quote,.ns-quote-breaker,.nst-tabset-head-row,.nst-tabset-head-col,.nst-tabset-heading,.nst-tiles,.nst-tile,.nst-tile-blurb,.nst-tile-icon,.nst-panel-main-row,.nst-panel-content,.nst-panel-lead,.nst-panel-grid,.nst-panel-grid-col,.nst-panel-grid-text,.nst-rail,.nst-rail-text,.nst-faq-row,.nst-faq-col,.nst-faq-heading,.nst-faq,.nst-faq-item,.nst-prose-row,.nst-prose-col,.nst-prose-text,.nst-embed-row,.nst-embed-col,.nst-embed-widget,.nst-cta-row,.nst-cta-text,.nst-cta-aside,.nst-inner){position:relative}
.ns-ir-inner{position:relative;z-index:1}
/* Divi paints every module, row and column with a background shorthand even
   when no image is set; restated so a painted role behaves identically. */
.ns-ir :is(.nst-hdr-eyebrow-row,.nst-hdr-main-row,.ns-hdr-col,.nst-hdr-text,.nst-hdr-aside,.nst-eyebrow,.nst-hdr-prose,.ns-quote,.ns-quote-breaker,.nst-tabset-head-row,.nst-tabset-head-col,.nst-tabset-heading,.nst-tiles,.nst-tile,.nst-tile-blurb,.nst-tile-icon,.nst-panel-main-row,.nst-panel-content,.nst-panel-lead,.nst-panel-grid,.nst-panel-grid-col,.nst-panel-grid-text,.nst-rail,.nst-rail-text,.nst-faq-row,.nst-faq-col,.nst-faq-heading,.nst-faq,.nst-faq-item,.nst-prose-row,.nst-prose-col,.nst-prose-text,.nst-embed-row,.nst-embed-col,.nst-embed-widget,.nst-cta-row,.nst-cta-text,.nst-cta-aside){
  background-size:cover;background-position:center;background-repeat:no-repeat}
.ns-ir .ns-sec{background-size:cover;background-position:center}
/* Divi's stacked-column gutter: below 980 every module inside a column
   carries a 30px bottom margin. It is what separates stacked tiles and FAQ
   cards on a phone, so it is stated for the module roles by name. */
@media (max-width:980px){
  .ns-ir :is(.nst-eyebrow,.nst-hdr-prose,.ns-quote,.ns-quote-breaker,.nst-tabset-heading,.nst-tile-blurb,.nst-tile-icon,.nst-panel-lead,.nst-panel-grid-text,.nst-rail-text,.nst-faq-heading,.nst-faq,.nst-faq-item,.nst-prose-text,.nst-embed-widget,.nst-btn-wrap){
    margin-bottom:30px}
  /* ...and Divi's companion: the last module in its parent closes the stack. */
  .ns-ir :is(.nst-eyebrow,.nst-hdr-prose,.ns-quote,.ns-quote-breaker,.nst-tabset-heading,.nst-tile-blurb,.nst-tile-icon,.nst-panel-lead,.nst-panel-grid-text,.nst-rail-text,.nst-faq-heading,.nst-faq,.nst-faq-item,.nst-prose-text,.nst-embed-widget,.nst-cta-text,.nst-btn-wrap):last-child{
    margin-bottom:0}
}
.ns-ir a.nst-btn{background-size:cover,cover;background-position:center,center;background-repeat:no-repeat,no-repeat}
/* .et_pb_text{word-wrap:break-word} is an inherited Divi base value, so it
   reached every word inside a text module. Found by rendered diff: without
   it a long rail list item re-wraps and the panel loses a line. */
.ns-ir :is(.nst-eyebrow,.nst-hdr-prose,.ns-quote,.ns-quote-breaker,.nst-tabset-heading,.nst-panel-lead,.nst-panel-grid-text,.nst-rail-text,.nst-faq-heading,.nst-prose-text){
  overflow-wrap:break-word;word-wrap:break-word}
.ns-ir :is(.ns-hdr-col,.nst-hdr-text,.nst-hdr-aside,.nst-tabset-head-col,.nst-tile,.nst-panel-content,.nst-rail,.nst-panel-grid-col,.nst-faq-col,.nst-prose-col,.nst-embed-col,.nst-cta-text,.nst-cta-aside){z-index:2;min-height:1px}
/* Only the nested-row cells float on the bridged page (their et_flex_column /
   accordion lineage); every other column computes float:none there. Inert in
   the flex rows either way - stated for computed-diff exactness. */
.ns-ir .nst-faq-col{float:left}
.ns-ir :is(.nst-hdr-eyebrow-row,.nst-hdr-main-row,.nst-tiles,.nst-tabset-head-row,.nst-panel-main-row,.nst-panel-grid,.nst-prose-row,.nst-embed-row,.nst-cta-row,.nst-faq-row){display:flex;position:relative;width:100%;max-width:1080px;margin-left:auto;margin-right:auto;padding:0}
.ns-ir .ns-sec{padding-top:0;padding-bottom:0}
/* BLOCK-MARGIN rhythm on block-level sections (registry spacing) */
.ns-ir :is(.ns-sec.ns-tabset,.ns-sec.ns-embed){margin:36px auto 40px auto}
/* ── panel interior: Divi's authored per-module CSS, transplanted
   verbatim from the reference page's cached builder styles + the
   matched Divi 5 structural rules (CDP-verified). ── */
.ns-ir :is(.nst-hdr-text,.nst-hdr-aside,.nst-tabset-head-col,.nst-tile,.nst-panel-content,.nst-rail,.nst-panel-grid-col,.nst-prose-col,.nst-embed-col,.nst-faq-col,.nst-cta-text,.nst-cta-aside){flex:1 1 0;min-width:0;position:relative}
/* authored header frame (CDP-measured on the reference):
   the main row has no top margin (registry says 14px -- drift),
   and the vector-map module pulls up by 15px. */
/* authored panel frame (CDP-measured on the reference): the
   section pads 0 10 34 and the main row pads 104px 32px 0 -- the
   row padding is what makes calc(100% - 352px + 18px) = 662. */
.ns-ir .ns-sec.ns-panel{padding:0 10px 34px}
.ns-ir .ns-panel .nst-panel-main-row{padding:104px 32px 0;max-width:100%}
.ns-ir .ns-panel .nst-panel-content{flex:0 0 auto;width:calc(100% - var(--ns-rail-w,352px) + 18px);max-width:none;padding:0 18px 12px 0}
.ns-ir .ns-panel .nst-rail{flex:0 0 auto;width:var(--ns-rail-w,352px);max-width:var(--ns-rail-w,352px)}
/* the canonical rail mechanism: lab.css sizes the panel rail via width:var(--ns-rail-w,...)!important and lab.js freezes the measured value back into the var. Real pages feed it (authored 352px, or per-section style attrs like --ns-rail-w:264px on the students/teachers pages). The twin feeds it the reference's authored value. */
.ns-ir .ns-panel{--ns-rail-w:352px}
.ns-ir .nst-panel-grid{background-color:#17203B;margin:16px -18px 0 -18px;padding:24px 0 0 0;max-width:none;column-gap:24px;row-gap:24px;align-items:stretch;flex-wrap:wrap}
.ns-ir .nst-panel-grid > .nst-panel-grid-col{width:calc((100% - (var(--ns-grid-l,2) - 1) * 24px) / var(--ns-grid-l,2));flex:0 1 auto;margin:0;display:flex;flex-direction:column;row-gap:30px;column-gap:30px/*Divi-base flex gutter, inert in column direction*/}
@media (max-width:980px){.ns-ir .nst-panel-grid{flex-direction:column}.ns-ir .nst-panel-grid > .nst-panel-grid-col{width:100%}}
.ns-ir .ns-tabset .nst-tile{margin:0}
/* tile columns carry no margins on the reference; the rail width is DERIVED by lab.js from the last tile's left edge, so a stray tile margin shifts the rail (the 336-vs-352). */
.ns-ir .ns-tabset .nst-tiles > .nst-tile{margin:0 !important}
/* the #trigger-* anchors live inside the tiles row; as zero-width
   flex items they still cost one 24px gap each, squeezing the
   tiles (312 vs 328) and, via lab.js, the rail. Out of flow: */
.ns-ir .nst-tiles > *:not(.nst-tile){position:absolute;width:0;height:0}
/* !important: Divi theme column-gutter margins also use it; the row
   gap (24px) is the one legitimate spacing source for tiles. */
/* FAQ toggle chrome: Divi accordion base + measured reference states (restored after the 1.4.74 splice deleted them). */
.ns-ir .nst-faq-q{position:relative;cursor:pointer}
.ns-ir .nst-faq-btn{background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;text-align:inherit;letter-spacing:inherit;width:100%;display:block;cursor:pointer}
.ns-ir .nst-faq-q::before{content:"\33";font-family:ETmodules;font-size:25px;font-weight:400;position:absolute;right:5px;top:50%;transform:translateY(-50%)}
.ns-ir .nst-faq-q, .ns-ir .nst-faq-q::before{transition:color .3s ease}
.ns-ir .nst-faq .nst-faq-open .nst-faq-q{color:#58A7F9;border-color:#58A7F9}
.ns-ir .nst-faq .nst-faq-q:hover{color:#58A7F9}
.ns-ir .ns-panel .nst-faq .nst-faq-q:hover::before{color:#58A7F9}
.ns-ir .ns-panel .nst-faq .nst-faq-open .nst-faq-q::before{color:#58A7F9}
.ns-ir .nst-faq .nst-faq-q:hover::before{color:#58A7F9}
.ns-ir .nst-faq .nst-faq-open .nst-faq-q::before{color:#58A7F9}
/* heading roles per element (registry type_for_level) */
.ns-ir .ns-panel .nst-faq-heading h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-panel .nst-faq-heading h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-prose .nst-prose-text .ns-bridge h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .nst-panel-grid h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.833vw, 22px);line-height:1.15em}
.ns-ir .nst-panel-grid .nst-panel-grid-text h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.833vw, 22px);line-height:1.15em}
.ns-ir .nst-panel-grid .nst-panel-grid-text h4{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(16px, 1.583vw, 19px);line-height:1.3em}
.ns-ir .ns-emboss .nst-embed-col h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-emboss .nst-embed-col h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-emboss .ns-block-heading h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-emboss .ns-block-heading h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-hdr .nst-hdr-prose h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-panel .nst-panel-lead h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-panel .nst-panel-lead h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-panel .nst-panel-lead h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-tabset .nst-tabset-heading h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.0em}
.ns-ir .nst-prose-text h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.25em}
.ns-ir .ns-panel .nst-rail-text h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em}
.ns-ir .ns-tabset .nst-tabset-heading h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);line-height:1.0em}
/* Button. The DESIGN (face, material, rim, hover glow) comes from lab.css's
   neutral .ns-btn hook, which the twin's anchor carries. The METRICS a Divi
   button used to get from lab.css's et_pb_button-only block are stated here
   with the same tokens. */
.ns-ir a.nst-btn{display:inline-block;line-height:1.7em;text-decoration:none;text-align:center;padding:var(--ns-btn-pad-y) var(--ns-btn-pad-x)!important;font-size:var(--ns-btn-fs)!important;letter-spacing:var(--ns-btn-track)!important;color:var(--ns-accent)!important}
.ns-ir a.nst-btn:hover{font-size:var(--ns-btn-fs-hover)!important}
/* BLOCK-INSET on the emboss column (registry spacing token; stored per-module on builder pages) */
.ns-ir .nst-embed-col.ns-emboss{padding:clamp(27px, 3.083vw, 37px) 24px clamp(20px, 2.833vw, 34px) 24px}

/* Structural lists are Editorial-owned. Do not inherit or reproduce Divi's
   entry-content / text-module list padding. The list itself contributes no
   terminal bottom inset; spacing to the next block belongs to the Editorial
   prose rhythm / structural row boundary. */
.ns-ir :is(ol,ul){margin:0!important;padding:0 0 0 1.35em!important;line-height:inherit;list-style-position:outside}
.ns-ir ol{list-style-type:decimal}
.ns-ir ul{list-style-type:disc}
.ns-ir :is(ol,ul)>li{margin:0!important;padding:0!important;line-height:inherit}
.ns-ir :is(ol,ul)>li+li{margin-top:var(--ns-sp-1,8px)!important}
.ns-ir :is(ol,ul) :is(ol,ul){margin-top:var(--ns-sp-1,8px)!important;padding-left:1.35em!important}
/* ── STRUCTURAL (IR) VALUES — GENERATED from ns-rules.json v1.0 (gen v1).
   Breakpoints: base / <=980 / <=767 (Divi). Every selector scoped
   under .ns-ir (managed structural pages only). rules2css.py is the only writer. ── */
.ns-ir .ns-cta .nst-btn-wrap{background-color:RGBA(255,255,255,0);box-shadow:6px 6px 18px 0px rgba(255, 255, 255, 0.3);max-width:min(240px,100%)}
.ns-ir .ns-cta .nst-btn-wrap a{border-color:rgba(255,255,255,0);border-style:solid;border-width:0px;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.6vw, 22px);font-weight:500;letter-spacing:2px;text-align:center}
.ns-ir .ns-cta .nst-cta-row{display:block;max-width:1080px;padding-bottom:0px;padding-top:0px;width:100%}
.ns-ir .ns-cta .nst-cta-row > :nth-child(1){flex:2 1 0}
.ns-ir .ns-cta .nst-cta-row > :nth-child(2){flex:1 1 0}
.ns-ir .ns-emboss .ns-block-heading{display:block;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);font-weight:400;line-height:1.7em;max-width:none}
.ns-ir .ns-emboss .ns-block-heading a{color:#58A7F9;line-height:1.7em}
.ns-ir .ns-emboss .ns-block-heading h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);font-weight:400;line-height:1.2em;text-align:left}
.ns-ir .ns-emboss .nst-embed-col{display:block}
.ns-ir .ns-hdr .ns-quote{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.7em;margin-bottom:24px;margin-left:clamp(0px, 10vw, 140px);margin-top:0px;text-align:right;width:calc(100% + 20px - clamp(0px, 10vw, 140px))}
.ns-ir .ns-hdr .ns-quote blockquote{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:26px;font-weight:400;line-height:1.2em;text-align:right}
.ns-ir .ns-hdr .nst-btn-wrap{background-color:RGBA(255,255,255,0);box-shadow:6px 6px 18px 0px rgba(255, 255, 255, 0.3);flex:0 0 auto;margin-top:24px;max-width:100%;width:100%}
.ns-ir .ns-hdr .nst-btn-wrap a{border-color:rgba(255,255,255,0);border-style:solid;border-width:0px;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.6vw, 22px);font-weight:500;letter-spacing:2px;text-align:center}
.ns-ir .ns-hdr .nst-eyebrow{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(15px, 1.333vw, 16px);letter-spacing:0.05em;line-height:1.7em;margin-bottom:0px;margin-top:18px;text-transform:uppercase}
.ns-ir .ns-hdr .nst-hdr-aside{display:block;flex:0 0 auto;max-width:clamp(165px, calc(90vw - 730px), 260px);width:clamp(165px, calc(90vw - 730px), 260px)}
.ns-ir .ns-hdr .nst-hdr-eyebrow-row{margin-bottom:0px;margin-top:0px;max-width:1020px;padding-bottom:0px;padding-top:0px;width:100%}
.ns-ir .ns-hdr .nst-hdr-main-row{align-items:flex-start;column-gap:clamp(30px, calc(90vw - 960px), 60px);display:flex;flex-direction:row;margin-bottom:0px;margin-top:0px;max-width:1020px;padding-bottom:0px;padding-top:0px;width:100%}
.ns-ir .ns-hdr .nst-hdr-main-row > :nth-child(1){flex:2 1 0}
.ns-ir .ns-hdr .nst-hdr-main-row > :nth-child(2){flex:1 1 0}
.ns-ir .ns-hdr .nst-hdr-prose{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;margin-bottom:0px;margin-top:24px}
.ns-ir .ns-hdr .nst-hdr-prose a{color:#58A7F9;line-height:1.7em}
.ns-ir .ns-hdr .nst-hdr-text{display:block;flex:0 0 auto;max-width:700px;width:min(700px, calc(90vw - 195px))}
.ns-ir .ns-hdr h1{margin-bottom:0px;margin-top:clamp(11px, 0.175em, 14px)}
.ns-ir .ns-panel .nst-faq{display:flex;flex-direction:column;margin-bottom:0px;margin-top:0px;row-gap:18px}
.ns-ir .ns-panel .nst-faq-col{background-color:#17203B;display:block;flex:0 0 auto;margin-bottom:0px;margin-left:-18px;margin-right:-18px;margin-top:0px;max-width:none;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:26px;width:calc(100% + 36px)}
.ns-ir .ns-panel .nst-faq-heading{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;margin-bottom:0px;margin-top:0px;padding-bottom:0px;padding-top:0px}
.ns-ir .ns-panel .nst-faq-row{max-width:1080px;width:100%}
/* CASCADE, verified on the bridged pilot (procedure 7a): the stock row keeps
   margin:auto on the vertical axis (no rule states one), and the body-level
   et_pb_gutters3 last-child rule pins the column's margin-right to 0 over the
   generated -18px. Both outcomes reproduced by name: */
/* Foldout continuation spacing is owned by the preceding structural row.
   The original structural stylesheet did NOT have a generic 16px closure. Its
   authored content-column bottom inset was 12px; 16px occurred elsewhere
   (notably grid/top rhythm) and was never a universal after-text value. Use
   that original 12px content closure exactly once after flex has resolved the
   tallest column. The following block (FAQ, explainer, widget, grid, etc.)
   does not manufacture a second gap. */
.ns-ir .ns-panel{--ns-panel-close:12px}
.ns-ir .ns-panel > .nst-faq-row{margin-top:0!important;margin-bottom:0!important;padding-top:0}
.ns-ir .ns-panel > .nst-panel-main-row:not(:last-child){padding-bottom:var(--ns-panel-close)}
.ns-ir .ns-panel > .nst-panel-main-row:not(:last-child) > .nst-panel-content{padding-bottom:0}
.ns-ir .ns-panel > .nst-panel-main-row:not(:last-child) > .nst-rail:last-child:not(:first-child){padding-bottom:0}
.ns-ir .ns-panel > .nst-panel-main-row:not(:last-child) > .nst-rail:last-child:not(:first-child)::after{content:"";position:absolute;left:0;right:0;bottom:calc(-1 * var(--ns-panel-close));height:var(--ns-panel-close);background:inherit;pointer-events:none}
.ns-ir .ns-panel > .nst-panel-grid:not(:last-child){margin-bottom:var(--ns-panel-close)}
/* When a 2/3/4-up card grid is shorter than the rail, the content column is
   stretch-sized to the rail but the grid correctly keeps its natural height.
   Preserve that card geometry and extend only the COLUMN GUTTERS through the
   leftover height and the single closure beat. No card is stretched. */
@media (min-width:981px){
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:2"]),
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:3"]),
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:4"]){--ns-grid-tail-l:2}
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:3"]){--ns-grid-tail-l:3}
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:4"]){--ns-grid-tail-l:4}
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:2"])::after,
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:3"])::after,
  .ns-ir .ns-panel:not(.ns-norail) > .nst-panel-main-row:not(:last-child) .nst-panel-content:has(> .nst-panel-grid[style*="--ns-grid-l:4"])::after{
    content:"";display:block;flex:1 1 0;min-height:0;width:calc(100% + 36px);margin-left:-18px;margin-right:-18px;margin-bottom:calc(-1 * var(--ns-panel-close));padding-bottom:var(--ns-panel-close);pointer-events:none;
    background:repeating-linear-gradient(to right,transparent 0 calc((100% - (var(--ns-grid-tail-l) - 1) * 24px) / var(--ns-grid-tail-l)),#17203B calc((100% - (var(--ns-grid-tail-l) - 1) * 24px) / var(--ns-grid-tail-l)) calc((100% - (var(--ns-grid-tail-l) - 1) * 24px) / var(--ns-grid-tail-l) + 24px));
  }
}
.ns-ir .ns-panel .nst-faq-col{margin-right:0}
.ns-ir .ns-panel .nst-panel-content{display:block;max-width:none;padding-bottom:12px;padding-left:0px;padding-right:18px;padding-top:0px}
.ns-ir .ns-panel .nst-panel-grid{align-items:stretch;column-gap:24px;display:flex;flex-direction:row;margin-bottom:0px;margin-top:16px;max-width:none;row-gap:24px;width:calc(100% + 36px)}
.ns-ir .ns-panel .nst-panel-lead{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:16px}
.ns-ir .ns-panel .nst-panel-lead h3{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em;text-align:left}
.ns-ir .ns-panel .nst-panel-main-row{align-items:stretch;column-gap:0px;display:flex;flex-direction:row;margin-bottom:0px;margin-top:0px;max-width:100%;padding-bottom:0px;padding-left:32px;padding-right:32px;padding-top:0px;width:100%}
.ns-ir .ns-panel .nst-rail{background-color:rgba(255,255,255,0.055);display:block;margin-bottom:0px;margin-left:0px;margin-right:-18px;margin-top:0px;padding-bottom:var(--ns-panel-close,12px);padding-left:24px;padding-right:4px;padding-top:29px}
.ns-ir .ns-panel .nst-rail-text{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;margin-bottom:0px;margin-top:0px}
.ns-ir .ns-panel .nst-rail-text h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);font-weight:400;line-height:1.2em;text-align:left}
.ns-ir .ns-prose .nst-prose-text .ns-bridge{font-size:clamp(14px, 1.333vw, 16px);font-weight:400;line-height:1.7em;margin-bottom:0px;margin-top:0px;padding-bottom:0px;padding-top:0px}
.ns-ir .ns-prose .nst-prose-text .ns-bridge a{color:#58A7F9;line-height:1.7em}
.ns-ir .ns-prose .nst-prose-text .ns-bridge h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);font-weight:400;line-height:1.25em;text-align:left}
.ns-ir .ns-prose .nst-prose-text, .ns-ir .ns-cta .nst-prose-text{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em}
.ns-ir .ns-quote-breaker{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.7em;margin-bottom:24px;margin-left:clamp(0px, 10vw, 140px);margin-right:;margin-top:0px;max-width:700px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:right;width:65%}
.ns-ir .ns-quote-breaker blockquote{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:26px;font-weight:400;line-height:1.2em;text-align:right}
.ns-ir .ns-sec.ns-hdr{background-color:rgba(255, 255, 255, 0);padding-bottom:0px;padding-left:clamp(20px, 5vw, 60px);padding-right:clamp(20px, 5vw, 60px);padding-top:clamp(80px, 14.583vw, 175px)}
.ns-ir .ns-sec.ns-panel{background-color:rgba(255, 255, 255, 0);flex-wrap:wrap;margin-bottom:40px;margin-left:auto;margin-right:auto;margin-top:0px;max-width:1080px;padding-bottom:34px;padding-left:10px;padding-right:10px;padding-top:0px}
.ns-ir .ns-sec.ns-tabset{background-color:rgba(255, 255, 255, 0.075);margin-bottom:40px;margin-left:auto;margin-right:auto;margin-top:36px;max-width:1080px;padding-bottom:clamp(20px, 2.833vw, 34px);padding-left:10px;padding-right:10px;padding-top:clamp(27px, 3.083vw, 37px)}
.ns-ir .ns-tabset .nst-tabset-head-row{margin-bottom:0px;margin-top:0px;max-width:100%;padding-bottom:0px;padding-left:14px;padding-right:14px;padding-top:0px;width:100%}
.ns-ir .ns-tabset .nst-tabset-heading{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;margin-bottom:0px;margin-left:;margin-right:;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px}
.ns-ir .ns-tabset .nst-tabset-heading h2{font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(24px, 2.667vw, 32px);font-weight:400;line-height:1.0em;text-align:left}
.ns-ir .ns-tabset .nst-tile{background-color:rgba(255, 255, 255, 0);box-shadow:6px 6px 18px 0px rgba(255,255,255,0.3);column-gap:0px;display:flex;flex-direction:column;padding-bottom:22px;padding-left:18px;padding-right:18px;padding-top:22px;row-gap:0px}
.ns-ir .ns-tabset .nst-tiles{align-items:stretch;column-gap:24px;display:flex;flex-direction:row;margin-bottom:0px;margin-top:0px;max-width:100%;padding-bottom:0px;padding-left:14px;padding-right:14px;padding-top:12px;row-gap:24px;width:100%}
.ns-ir .ns-tabset .nst-tiles > .nst-tile{flex:1 1 0}
.ns-ir .nst-faq .nst-faq-a{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);font-weight:400;line-height:1.7em;margin-bottom:0px;margin-top:-5px;padding-bottom:13px;padding-left:18px;padding-right:24px;padding-top:0px}
.ns-ir .nst-faq .nst-faq-item{background-color:#0E1834;border-color:rgba(0,0,0,0);border-style:solid;border-width:0px;box-shadow:6px 6px 18px 0px rgba(255,255,255,0.3);font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px}
.ns-ir .nst-faq .nst-faq-q{color:#E0E2E6;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(16px, 1.583vw, 19px);line-height:1.3em;padding-bottom:11px;padding-left:18px;padding-right:34px;padding-top:17px}
.ns-ir .nst-panel-grid .nst-panel-grid-col{background-color:#0E1834;flex:0 0 auto;margin-bottom:0px;margin-top:0px;padding-bottom:12px;padding-left:18px;padding-right:18px;padding-top:22px;width:calc((100% - (var(--ns-grid-l,2) - 1) * 24px) / var(--ns-grid-l,2))}
.ns-ir .nst-panel-grid .nst-panel-grid-text{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;text-align:left}
.ns-ir .nst-panel-grid .nst-panel-grid-text h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.833vw, 22px);line-height:1.15em;text-align:left}
.ns-ir .nst-panel-grid .nst-panel-grid-text h4{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(19px, 2.000vw, 24px);line-height:1.2em;text-align:left}
.ns-ir .nst-panel-grid h3{display:block;max-width:700px}
.ns-ir .nst-panel-grid h3 h3{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.833vw, 22px);font-weight:400;line-height:1.15em}
.ns-ir .nst-prose-text{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);font-weight:400;line-height:1.7em}
.ns-ir .nst-tile .nst-tile-body{font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:clamp(15px, 1.778vw, 16px);line-height:1.7em;text-align:justify}
.ns-ir .nst-tile .nst-tile-icon{color:#B3B3B3;font-size:38px;line-height:38px;margin-bottom:-12px;margin-top:auto;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:8px;text-align:center}
.ns-ir .nst-tile .nst-tile-icon .nst-tile-glyph{color:#B3B3B3;font-size:38px;font-family:ETmodules;font-weight:400;font-style:normal;font-variant:normal;text-transform:none;letter-spacing:0;speak:none;-webkit-font-smoothing:antialiased}
.ns-ir .nst-tile .nst-tile-title{color:#58A7F9;font-family:'Special Elite','Courier New',Courier,monospace;font-size:clamp(18px, 1.833vw, 22px);line-height:1.15em}
@media (max-width:980px){
  .ns-ir .ns-hdr .nst-hdr-aside{flex:0 0 auto;max-width:clamp(165px, calc(90vw - 730px), 260px);width:clamp(165px, calc(90vw - 730px), 260px)}
  .ns-ir .ns-hdr .nst-hdr-main-row{align-items:flex-start;column-gap:clamp(30px, calc(90vw - 960px), 60px);display:flex;flex-direction:row}
  .ns-ir .ns-hdr .nst-hdr-text{flex:0 0 auto;max-width:700px;width:min(700px, calc(90vw - 195px))}
  .ns-ir .ns-panel .nst-panel-content{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-panel .nst-panel-grid{display:flex;flex-direction:column;row-gap:24px}
  .ns-ir .ns-panel .nst-panel-main-row{display:flex;flex-direction:column;row-gap:24px}
  .ns-ir .ns-tabset .nst-tile{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-tabset .nst-tiles{display:flex;flex-direction:column;row-gap:24px}
}
@media (max-width:767px){
  .ns-ir .ns-hdr .nst-hdr-aside{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-hdr .nst-hdr-main-row{display:flex;flex-direction:column;row-gap:24px}
  .ns-ir .ns-hdr .nst-hdr-text{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-panel .nst-panel-content{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-panel .nst-panel-grid{display:flex;flex-direction:column;row-gap:24px}
  .ns-ir .ns-panel .nst-panel-main-row{display:flex;flex-direction:column;row-gap:24px}
  .ns-ir .ns-tabset .nst-tile{flex:0 0 auto;max-width:100%;width:100%}
  .ns-ir .ns-tabset .nst-tiles{display:flex;flex-direction:column;row-gap:24px}
}
/* !important: a theme rule with id-weight specificity (invisible to
   CSSOM enumeration, cross-origin) re-adds a 14px default row margin. */
.ns-ir .ns-hdr .nst-hdr-main-row{margin-top:0 !important}
/* The dark strip under the grid: the content column keeps a
   bottom padding, and the column itself is transparent, so the
   page background shows between the grid band and the FAQ block. */
.ns-ir .ns-panel .nst-panel-content{padding-bottom:0}
/* The dark band is the content column being SHORTER than the
   rail: the leftover strip is transparent, so the page colour
   shows between the grid band and the FAQ block. Let the grid
   band grow into that leftover instead. */
.ns-ir .ns-panel .nst-panel-content{display:flex;flex-direction:column}
/* THE BAND. A panel row is as tall as its TALLEST COLUMN PLUS THAT COLUMN'S
   BOTTOM SPACING - nothing else may add to it, and nothing shorter may be
   inflated to reach it. So the grid band takes its natural height and stops
   with the cards (a line still equalises its own cards), and whatever the
   taller column leaves over is plain panel surface, not paint and not empty
   card interior. */
.ns-ir .ns-panel .nst-panel-grid{flex:0 0 auto;align-content:flex-start}
/* FAQ heading sits 18px in from the block edge on the reference. */
.ns-ir .ns-panel .nst-faq-heading{padding-left:18px}
/* AUTHORED, found via CDP matched-styles on the reference:
     .et_pb_code_1 .ns-aix{padding-top:0!important;padding-bottom:0!important}
   i.e. the code module zeroes the widget padding on that page.
   Without it the explainer keeps its own 16/24 and runs tall.
   Registry drift: belongs in ns-rules.json as the embed widget. */
.ns-ir .nst-embed-widget .ns-aix{padding-top:0 !important;padding-bottom:0 !important}
/* Row geometry: rows are centred boxes (max-width + auto inline
   margins); authored spacing is vertical only. See generator. */
.ns-ir .ns-sec > :is(.nst-hdr-eyebrow-row,.nst-hdr-main-row,.nst-tiles,.nst-tabset-head-row,.nst-panel-main-row,.nst-prose-row,.nst-embed-row,.nst-cta-row,.nst-faq-row){margin-left:auto;margin-right:auto}
.ns-ir .ns-hdr .nst-hdr-main-row > :is(.nst-hdr-text,.nst-hdr-aside){flex:0 1 auto}
.ns-ir .ns-cta .nst-cta-row{margin-top:36px}
.ns-ir .ns-hdr .nst-hdr-eyebrow-row > .ns-hdr-col > *{flex:1 1 auto;width:100%}
/* Remaining authored values, CDP/geometry-measured on the
   reference and absent from the registry:
     header quote module   margin-bottom 24  (743 vs 767 tall)
     CTA button            width/max-width 240 (it wraps to two
                           lines: 208x57 vs 240x84)
     CTA button wrapper    margin-top 50, left aligned         */
.ns-ir .ns-hdr .nst-hdr-text > *:last-child{margin-bottom:24px !important}
.ns-ir .ns-hdr .nst-hdr-text{padding-top:14px}
.ns-ir .ns-hdr .nst-hdr-text > .entry-title{margin-top:0 !important}
/* Tile icons hang off the BOTTOM of a flex tile on the reference
   (margin-top:auto, margin-bottom:-12px). Without the flex column
   the auto margin does nothing and the icon sits inline. */
.ns-ir .ns-tabset .nst-tile{display:flex;flex-direction:column}
.ns-ir .ns-tabset .nst-tile > .nst-tile-icon{margin-top:auto !important;margin-bottom:-12px !important}
/* Tile description sits 8px under its heading on the reference
   (et_pb_blurb_description margin-top:8px) -- the 8px that made
   every tile column 239 instead of 247. */
.ns-ir .ns-tabset .nst-tile-body{margin-top:8px}
.ns-ir .ns-cta .nst-btn-wrap{margin-top:50px;text-align:left;width:100%}
.ns-ir .ns-cta .nst-btn-wrap > a{width:240px;max-width:min(240px,100%)}
.ns-ir .ns-sec.ns-embed > .nst-embed-row:has(.ns-aix){margin-top:36px;margin-bottom:40px}
.ns-ir .ns-sec.ns-embed > .nst-embed-row:has(.airc){width:80%;max-width:1080px}
/* The 2x2 cells sit on the page colour, not on their own panel
   tint: requested design change, deliberate divergence from the
   reference (#0E1834). Belongs in ns-rules.json. */
.ns-ir .ns-panel .nst-panel-grid-col{background-color:#050F2C}
/* Mobile: the reference insets the embed SECTION by 20px and
   moves the authored margin onto the row; and the explainer
   widget scrolls its own step list wider than the screen, so
   the IR root clips instead of letting the page scroll sideways.
   Measured: pilot scrollWidth 504 -> viewport 390. */
@media (max-width:767px){
  .ns-ir .ns-sec.ns-embed{padding:0 20px}
  .ns-ir .ns-sec.ns-embed > .nst-embed-row:has(.airc){width:100%}
}
/* SECTION INSET. The reference states clamp(20px,5vw,60px) per section; the
   twin only carries it where the IR captured one, so .ns-prose and .ns-cta
   computed 0 below 768 and their text reached the viewport edge. Stated once
   as the section default - a section with its own value is more specific and
   is untouched, and above 768 the CONTENT-WIDTH law in lab.css governs. */
@media (max-width:767px){
  .ns-ir .ns-sec{padding-left:clamp(20px,5vw,60px);padding-right:clamp(20px,5vw,60px)}
}
.ns-ir{overflow-x:clip}
/* CANON DRIFT (registry says display:block for the CTA row, the
   authored page is a two-column flex row like the header). Measured
   on the reference: flex, 90px gap, 700 + 290. Reconcile into
   ns-rules.json, then delete these three lines. */
.ns-ir .ns-cta .nst-cta-row{display:flex;flex-direction:row;align-items:flex-start;column-gap:90px}
.ns-ir .ns-cta .nst-cta-row > .nst-cta-text{flex:0 1 auto;width:700px}
.ns-ir .ns-cta .nst-cta-row > .nst-cta-aside{flex:0 1 auto;width:290px}
@media (max-width:767px){
  .ns-ir .ns-cta .nst-cta-row{flex-direction:column;column-gap:0}
  .ns-ir .ns-cta .nst-cta-row > .nst-cta-text,
  .ns-ir .ns-cta .nst-cta-row > .nst-cta-aside{width:100%}
  .ns-ir .ns-cta .nst-btn-wrap{margin-top:24px}
}
/* the eyebrow column shrink-wrapped its text; the reference column
   is a full-width flex column. */
.ns-ir .ns-hdr .nst-hdr-eyebrow-row > .ns-hdr-col{display:flex;width:100%;flex:0 1 auto}
.ns-ir .ns-hdr .nst-hdr-aside > :first-child{margin-top:-15px}

/* state overrides, deliberately last; !important because the Divi
   customizer emits its toggle-icon colour with !important too: */
.ns-ir .nst-faq .nst-faq-item .nst-faq-q:hover::before{color:#58A7F9 !important}
.ns-ir .nst-faq .nst-faq-item.nst-faq-open .nst-faq-q::before{color:#58A7F9 !important}
.ns-ir .ns-panel .nst-faq .nst-faq-item .nst-faq-q:hover::before{color:#58A7F9 !important}
.ns-ir .ns-panel .nst-faq .nst-faq-item.nst-faq-open .nst-faq-q::before{color:#58A7F9 !important}

/* unmapped (extend the generator, do not hand-write): */
/* aside CTA button :: button.decoration.border.desktop.value.radius.bottomLeft = '0px' */
/* aside CTA button :: button.decoration.border.desktop.value.radius.bottomRight = '0px' */
/* aside CTA button :: button.decoration.border.desktop.value.radius.sync = 'off' */
/* aside CTA button :: button.decoration.border.desktop.value.radius.topLeft = '0px' */
/* aside CTA button :: button.decoration.border.desktop.value.radius.topRight = '0px' */
/* aside CTA button :: button.decoration.button.desktop.value.icon.enable = 'off' */
/* card column (in a panel lead) :: module.decoration.sizing.desktop.value.flexType = '12_24' */
/* page button :: button.decoration.border.desktop.value.radius.bottomLeft = '0px' */
/* page button :: button.decoration.border.desktop.value.radius.bottomRight = '0px' */
/* page button :: button.decoration.border.desktop.value.radius.sync = 'off' */
/* page button :: button.decoration.border.desktop.value.radius.topLeft = '0px' */
/* page button :: button.decoration.border.desktop.value.radius.topRight = '0px' */
/* page button :: button.decoration.button.desktop.value.icon.enable = 'off' */
/* ================================================================== */
/* 1.4.91 — ELEMENT COVERAGE. Values are the registry's named tokens   */
/* plus CDP-measured reference instances (chatbot-audit 3×1 grid,      */
/* why-9senses stat cards, customer-interaction counters + norail,     */
/* education standalone FAQ, generative-ai-audit-framework table block */
/* + header aside image, legal 4-tile foldout), measured 2026-08-23    */
/* at 1200. Everything stays inside the .ns-ir scope.                  */
/* ================================================================== */

/* ---- top-level card grid (role: cards). card_grid canon: ONE row    */
/* that wraps; columnGap = rowGap = CARD-GAP so vertical spacing       */
/* equals horizontal; the row owns BLOCK-MARGIN. --ns-grid-l is the    */
/* stored cards-per-line; column width is the canon formula.           */
.ns-ir .nst-cards-row{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;align-items:stretch;column-gap:24px;row-gap:24px;width:100%;max-width:1080px;margin:36px auto 40px;padding:0}
.ns-ir .nst-card-col{position:relative;z-index:2;min-height:1px;flex:0 0 auto;display:flex;flex-direction:column;margin:0;width:calc((100% - (var(--ns-grid-l,3) - 1) * 24px) / var(--ns-grid-l,3));padding:22px 18px}
/* card_inset_by_width: a column wider than 330px takes 24px sides
   (chatbot-audit 3-up at 344px measures 22/24; why-9senses 4-up at
   252px measures 22/18). At the 1080 measure that is per-line 2. */
.ns-ir :is(.ns-l2,.ns-l3) > .nst-card-col{padding-left:24px;padding-right:24px}
/* part rhythm inside a card: consecutive parts sit 14px apart (the
   blurb→body and body→bars gaps on the reference cards). */
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) > * + *{margin-top:14px}
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) > .et_pb_module,
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) > .nst-card-text{margin-bottom:0}
/* lab.css twins the sheet cannot reach (its selectors pair .ns-emboss
   with et inner classes only): justified body, the pinned right-hand
   closing link, the whole-card link overlay. */
.ns-ir .ns-emboss:not(.ns-table) .nst-inner{hyphens:auto;-webkit-hyphens:auto;text-align:justify}
.ns-ir .ns-emboss:not(.ns-table) .nst-card-text:not(:first-child):last-child{margin-top:auto;padding-top:12px}
.ns-ir .ns-emboss:not(.ns-table) .nst-card-text:not(:first-child):last-child .nst-inner{text-align:right;hyphens:none;-webkit-hyphens:none}
.ns-ir :is(.nst-card-col,.nst-panel-grid-col).ns-linked{cursor:pointer}
.ns-ir :is(.nst-card-col,.nst-panel-grid-col).ns-linked .nst-card-text:last-child a::after{content:"";position:absolute;inset:0}

/* ---- card parts ---- */
/* blurb head: icon beside a vertically centred TYPE-H3-STAT title */
.ns-ir .nst-card-blurb{display:flex;align-items:center}
.ns-ir .nst-card-blurb-icon{flex:0 0 auto;width:54px;font-size:48px;line-height:1;color:#58A7F9;margin-right:15px;font-style:normal}
.ns-ir .nst-card-blurb-icon.nst-glyph-fa{font-family:FontAwesome}
.ns-ir .nst-card-blurb-icon.nst-glyph-divi{font-family:ETmodules}
.ns-ir .nst-card-blurb-icon[data-weight="900"]{font-weight:900}
.ns-ir .nst-card-blurb-title{font-family:'Special Elite',fantasy;font-weight:400;font-size:clamp(20px,1.9vw,26px);line-height:1.15em;color:#58A7F9;margin:0;padding:0}
/* stat (number counter at rest): centred Special Elite 54/1.1 accent
   number, 18/1.3 dimmed title 8px under it. The module keeps the
   authored second inset (22/18) inside the card column, as measured. */
.ns-ir .nst-stat{padding:22px 18px;text-align:center}
.ns-ir .nst-stat-number{font-family:'Special Elite',fantasy;font-weight:400;font-size:54px;line-height:1.1em;color:#58A7F9;padding-bottom:13px}
.ns-ir .nst-stat-title{font-family:'Special Elite',fantasy;font-weight:400;font-size:18px;line-height:1.3em;color:rgba(224,226,230,.88);margin:8px 0 0;padding:0}
/* bar counters at rest: 15px Special Elite label over a 20px wash
   track, 11px radius, 10px between bars; the fill clips at 100%. */
.ns-ir .nst-bars{margin:0;padding:0}
.ns-ir .nst-bars-title{font-family:'Special Elite',fantasy;font-size:15px;line-height:1.6em;color:#FFFFFF;margin-bottom:4px}
.ns-ir .nst-bar{display:block;margin-bottom:10px}
.ns-ir .nst-bar:last-child{margin-bottom:0}
.ns-ir .nst-bar-label{display:block;font-family:'Special Elite',fantasy;font-weight:400;font-size:15px;line-height:1.6em;color:#FFFFFF}
.ns-ir .nst-bar-track{display:block;height:20px;background:rgba(255,255,255,0.075);border-radius:11px;overflow:hidden}
.ns-ir .nst-bar-fill{display:block;height:100%;background:#58A7F9;border-radius:11px}
/* image card part */
.ns-ir .nst-card-figure{margin:0;padding:0}
.ns-ir .nst-card-figure img{width:100%;height:auto;display:block}
.ns-ir .nst-card-caption{font-size:13px;line-height:1.7em;margin-top:6px}
/* widget-in-card (the [audit_stats] card) */
.ns-ir .nst-card-widget{margin:0}

/* ---- standalone FAQ (role: faq). BLOCK-MARGIN row; the column is    */
/* the wash + BLOCK-INSET box (education and chatbot-audit agree);     */
/* heading flush (no panel 18px indent); 18px between items. Item      */
/* look and behaviour come from the existing .nst-faq rules + faq.js.  */
.ns-ir .ns-faqsec .nst-faq-row{margin-top:36px;margin-bottom:40px}
.ns-ir .ns-faqsec .nst-faq-col{background-color:rgba(255,255,255,0.075);width:100%;max-width:none;margin:0;padding:clamp(27px,3.083vw,37px) 24px clamp(20px,2.833vw,34px) 24px}
.ns-ir .ns-faqsec .nst-faq-heading{padding-left:0}
.ns-ir .ns-faqsec .nst-faq{display:flex;flex-direction:column;row-gap:18px}

/* ---- table block, derived from the content (a prose module holding  */
/* table.data — the authored .table-wrap form and the Editorial's      */
/* .ns-obj--tablewrap serialisation alike). The module carries         */
/* ns-emboss ns-table ns-block, so lab.css's own table rules (type,    */
/* row shading, header, caption) apply verbatim; the sheet only owns   */
/* the box geometry. Inner capped at 700 like the live reference       */
/* (whose text module falls under the prose measure).                  */
.ns-ir .nst-tableblock{width:100%;max-width:none;margin:36px 0 40px;padding:clamp(27px,3.083vw,37px) 24px clamp(20px,2.833vw,34px) 24px}
/* The block's default measure. A table is reading matter, so it sits at the
   prose measure unless the editor says otherwise; what it must NOT do is
   start indented, which is why the first column goes flush with the block's
   inner edge (the Editorial's 1.26.12 reasoning, applied here). The cap is on
   the plain .table-wrap / bare-table forms only — where a figure is present,
   the figure's own width governs and the inner must not fight it. */
.ns-ir .nst-tableblock .nst-inner > .table-wrap,
.ns-ir .nst-tableblock .nst-inner > table.data{max-width:700px}
/* Canonical Editorial table figures are intentionally not restyled here.
   Their box, float, width, caption and responsive behaviour come from the
   shared ns-editorial stylesheet. The rules above remain only for legacy
   bare .table-wrap/table.data blocks in the pilot IR. */

/* ---- Editorial insert boxes in page prose ------------------------- */
/* Base appearance, float rules, type and responsive behaviour come from the
   canonical ns-editorial stylesheet. Structural CSS is extension-only: page
   sections may position those objects, but must not redefine their design. */

/* ---- header aside image + caption (gen-ai-review): 24px under the   */
/* widget, bottom-right 5px radius, 13/1.7 caption 6px under (the      */
/* registry's aside_caption + CAPTION-GAP; the caption size is the     */
/* registry's 13px — the reference inner measures the same).           */
.ns-ir .nst-aside-figure{display:block;margin:24px 0 0;padding:0}
.ns-ir .nst-aside-figure a{display:block}
.ns-ir .nst-aside-img{width:100%;height:auto;display:block;border-radius:0 0 5px 0}
.ns-ir .nst-aside-caption{display:block;font-size:13px;line-height:1.7em;margin-top:6px;padding:0}
.ns-ir .nst-aside-caption p{margin:0;padding:0;font-size:13px;line-height:1.7em}
.ns-ir .nst-aside-caption a{color:#58A7F9}

/* ---- no-rail panels are true one-column panels. The renderer omits   */
/* the rail node and the content column takes the available row width. */
/* The older reference-compatible empty gutter is intentionally gone.  */

/* narrow ladder for the new blocks: cards stack by the same rule the  */
/* panel grid uses; the table inner releases its cap once the box is   */
/* narrower than the measure anyway (the cap is inert, kept as is).    */
@media (max-width:980px){
  .ns-ir .nst-cards-row{flex-direction:column}
  .ns-ir .nst-cards-row > .nst-card-col{width:100%}
}

/* the table block heading: TYPE-H3-BLOCK, accent — page-owned (the
   reference's module heading settings; no lab.css rule reaches an h3
   here). */
.ns-ir .nst-tableblock .nst-inner h3{font-family:'Special Elite',fantasy;font-weight:400;font-size:clamp(19px,2vw,24px);line-height:1.2em;color:#58A7F9}
/* norail grid band: the reference (customer-interaction) carries the
   panel grid as its own full-width row after the main row — FAQ-BG band,
   24px head, 26px off the lead, tile-row side margins. */
.ns-ir .ns-panel.ns-norail > .nst-panel-grid{width:auto;max-width:none;margin:14px 14px 0;padding:24px 0 0;background-color:#17203B}
/* A no-rail structural panel is genuinely one-column. Earlier builds
   deliberately kept the old rail width empty; that made "no rail" cosmetic
   rather than structural. The content column now consumes the available row. */
@media (min-width:981px){
body:not(.ns-vb-canvas):not([class*="et-fb"]):not([class*="et_fb"]):not(:has(#et-fb-app-body-root)) .ns-ir .ns-panel.ns-norail>.nst-panel-main-row:first-of-type>.nst-panel-content:first-child:last-child{width:100%!important;max-width:none!important;flex:1 1 100%!important}
}
/* below the stacking point every grid cell takes the full line — the
   references stack (Divi columns below 980). Stated here, after the
   generated fixed-width rule it must outrank by order. */
@media (max-width:980px){
  .ns-ir .nst-panel-grid > .nst-panel-grid-col{width:100%}
}

/* ================================================================== */
/* 1.4.92 — corrections from the text-matched A/B against the live     */
/* references (2026-08-23). Each entry names what supplied the value   */
/* on the reference and why it did not reach the twin.                 */
/* ================================================================== */

/* (1) TABLE CELL PADDING. On an authored page the cell padding comes from
   Divi's own theme rules — `.entry-content thead th` (9px 24px) and
   `.entry-content tr td` (6px 24px) — NOT from lab.css. The structural
   renderer drops the legacy entry-content class by design, so nothing
   supplied it and the browser's 1px default stood: crammed cells and
   collapsed column widths. Restated here at the same values, scoped to
   the table block, so the twin no longer depends on a theme class it
   deliberately does not carry. */
.ns-ir .nst-tableblock table.data thead th{padding:9px 24px}
.ns-ir .nst-tableblock table.data tbody td,
.ns-ir .nst-tableblock table.data tbody th{padding:6px 24px}

/* (2) CARD HEADING = TYPE-H3-CARD. lab.css's .ns-emboss h3 sets only
   hyphenation; on the reference the accent and 1.15em leading come from
   the module's own heading settings, which an IR card has no equivalent
   of. Stated from the registry token. */
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) .nst-inner h3{
  font-family:'Special Elite',fantasy;font-weight:400;
  font-size:clamp(18px,1.833vw,22px);line-height:1.15em;color:#58A7F9;
  margin:0;padding:0 0 10px}
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) .nst-inner h3:only-child{padding-bottom:0}

/* (3) CARD BODY = TYPE-BODY (1.7em). The card text was inheriting the
   global 1.8 leading. Size is left to the token's clamp: two reference
   pages render 14px here, which is below the registry's own floor and is
   not copied. */
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) .nst-inner{
  font-size:clamp(15px,1.778vw,16px);line-height:1.7em}
.ns-ir :is(.nst-card-col,.nst-panel-grid-col) .nst-inner :is(p,li){line-height:1.7em}

/* (4) STANDALONE FAQ HEADING. The twin's FAQ heading rules are scoped
   .ns-panel, so a page-level FAQ matched none of them and its h2 fell
   back to a generic size. Same values, restated for the standalone
   section: h2 is TYPE-H2, h3 is TYPE-H3-BLOCK. */
.ns-ir .ns-faqsec .nst-faq-heading h2{
  font-family:'Special Elite','Courier New',Courier,monospace;
  font-size:clamp(24px,2.667vw,32px);line-height:1.25em}
.ns-ir .ns-faqsec .nst-faq-heading h3{
  font-family:'Special Elite','Courier New',Courier,monospace;
  font-size:clamp(19px,2.000vw,24px);line-height:1.2em}
.ns-ir .ns-faqsec .nst-faq-heading{
  font-family:'Open Sans',Helvetica,Arial,sans-serif;
  font-size:clamp(15px,1.778vw,16px);line-height:1.7em;
  margin:0;padding:0}

/* (6b) the blurb title takes the rest of the line, as the reference's blurb
   container does (lab.css gives it flex:1 1 auto) — otherwise it shrinks to
   its text and the card's right-hand space reads as a ragged gap. */
.ns-ir .nst-card-blurb-title{flex:1 1 auto;min-width:0}

/* (8b) the stat title is now an h3 (matching the reference's semantics), which
   brings it under the panel-grid heading rule. Its own type wins back. */
.ns-ir .nst-stat h3.nst-stat-title{
  font-family:'Special Elite',fantasy;font-weight:400;
  font-size:18px;line-height:1.3em;color:rgba(224,226,230,.88);
  margin:8px 0 0;padding:0}

/* (4b) the FAQ answer's inset differs by context on the site: inside a panel
   it is padding-bottom 13px with a -5px pull-up (which the twin already
   implements, derived from the panel references), but a page-level FAQ uses
   22px and no pull-up. Restated for the standalone section only. */
.ns-ir .ns-faqsec .nst-faq .nst-faq-a{margin-top:0;padding-bottom:22px}

/* First and last column go flush with the block's inner edge, so the table
   shares one origin with the heading above it instead of being indented by a
   cell padding. This is the Editorial's own resolution of the same problem
   (1.26.12: "the caption and the first column now share one origin ... rather
   than by a number that has to be kept in step"), applied to the page-level
   table block for the same reason. */
.ns-ir .nst-tableblock table.data :is(th,td):first-child{padding-left:0}
.ns-ir .nst-tableblock table.data :is(th,td):last-child{padding-right:0}

/* The table block is flush with its row, like every other page-level block.
   lab.css centres a .ns-block at 95% with auto margins (a body-prefixed rule
   that outranks a plain class selector), which left the table box inset 27px
   while the prose above it and the FAQ block below it both start at the row's
   edge. Restated at the same weight, for the table block only. */
body:not(.ns-vb-canvas):not([class*="et-fb"]):not([class*="et_fb"]):not(:has(#et-fb-app-body-root)) .ns-ir .nst-tableblock{width:100%;margin-left:0;margin-right:0}

/* ---- text under a widget, in the widget's own column (the about page's
   carousel rows). The 40px belongs to the first text module after the
   widget, and the text takes the prose measure — lab.css supplies that cap
   only inside .ns-prose, and an embed section is not one. */
.ns-ir .nst-embed-widget + .nst-embed-text{margin-top:40px}
.ns-ir .ns-embed .nst-embed-text .nst-inner{max-width:700px}

/* A stated column distribution has to be authoritative, so a table that
   carries a colgroup switches to the fixed algorithm — otherwise the browser
   treats the widths as hints and content overrides them. Without a colgroup
   nothing changes: the browser distributes by content, as before. */
.ns-ir .nst-tableblock table.data:has(colgroup){table-layout:fixed}
.ns-ir .nst-tableblock table.data:has(colgroup) :is(th,td){overflow-wrap:break-word}
