:root{
  --dsk-service-shell-max:1240px;
  --dsk-service-shell-gutter:20px;
  --dsk-service-content-max:1100px;
  --dsk-service-copy-max:1040px;
}

#service-template .sb-text-image__content,
#service-template .sb-text-image__content-paragraph,
#service-template .sb-text-image__content-cta,
#service-template .sb-title,
#service-template .sb-subtitle,
#service-template .dsk-subnav,
#service-template .alert-box,
#service-template .dsk-steps-ol,
#service-template .dsk-icon-list,
#service-template .dsk-method-list,
#service-template .sb-column,
#service-template .sb-column-content,
#service-template + section .sb-column,
#service-template + section .sb-column-content,
#service-template + section .sb-text-image__content,
#service-template + section .sb-text-image__content-paragraph,
#service-template + section .sb-text-image__content-cta,
#service-template + section .sb-title,
#service-template + section .sb-subtitle,
#service-template + section .alert-box,
#service-template + section .dsk-steps-ol,
#service-template + section .dsk-icon-list,
#service-template + section .dsk-method-list{
  min-width:0 !important;
  max-width:100%;
  box-sizing:border-box;
}

#service-template .sb-title .display-font,
#service-template .sb-subtitle span,
#service-template .sb-text-image__content-paragraph p,
#service-template .sb-text-image__content-paragraph li,
#service-template .sb-text-image__content-paragraph a,
#service-template .sb-text-image__content-paragraph strong,
#service-template .sb-text-image__content-paragraph em,
#service-template .dsk-subnav__item,
#service-template .alert-box,
#service-template .alert-box a,
#service-template + section p,
#service-template + section li,
#service-template + section a,
#service-template + section .sb-title .display-font,
#service-template + section .sb-subtitle span{
  overflow-wrap:anywhere;
  word-break:break-word;
  hyphens:auto;
}

#service-template img,
#service-template svg,
#service-template video,
#service-template iframe,
#service-template canvas,
#service-template figure,
#service-template table,
#service-template pre,
#service-template code,
#service-template + section img,
#service-template + section svg,
#service-template + section video,
#service-template + section iframe,
#service-template + section canvas,
#service-template + section figure,
#service-template + section table,
#service-template + section pre,
#service-template + section code{
  max-width:100% !important;
  box-sizing:border-box;
}

#service-template pre,
#service-template table,
#service-template + section pre,
#service-template + section table{
  display:block;
  overflow-x:auto;
}

#service-template code,
#service-template + section code{
  white-space:normal !important;
}

@media (min-width:769px){
  :root{
    --dsk-service-shell-max:var(--dsk-layout-shell-max,var(--site-max-width,1320px));
    --dsk-service-shell-gutter:var(--dsk-layout-shell-gutter,var(--mobile-gutter,20px));
    --dsk-service-content-max:var(--dsk-layout-content-max,1100px);
    --dsk-service-copy-max:var(--dsk-layout-copy-max,1040px);
  }

  /* Stage 39 — service family source-of-truth: this shared file is only loaded on service pages, so scope the desktop service stack to `#service-template` itself instead of relying on body-scoped page selectors that miss many live pages. Keep service content/copy tokens on 1100/1040 here; the later shell-promotion for the visible top stack remains intentionally handled by the final stage in dsk-layout-system. */
  #service-template > .container.sb-container-fixed.sb-container,
  #service-template + section > .container.sb-container-fixed.sb-container{
    width:min(var(--dsk-service-shell-max),calc(100% - (var(--dsk-service-shell-gutter) * 2))) !important;
    max-width:var(--dsk-service-shell-max) !important;
    margin-left:auto !important;
    margin-right:auto !important;
    padding-left:var(--dsk-service-shell-gutter) !important;
    padding-right:var(--dsk-service-shell-gutter) !important;
    box-sizing:border-box !important;
  }

  #service-template .sb-text-image__content.sb-text-image__content,
  #service-template .sb-title.sb-title,
  #service-template .sb-subtitle.sb-subtitle,
  #service-template .sb-text-image__content-cta.sb-text-image__content-cta,
  #service-template .dsk-subnav.dsk-subnav,
  #service-template .sb-text-image__content-paragraph.sb-text-image__content-paragraph,
  #service-template .alert-box.alert-box,
  #service-template .dsk-steps-ol.dsk-steps-ol,
  #service-template .dsk-icon-list.dsk-icon-list,
  #service-template .dsk-method-list.dsk-method-list{
    display:block !important;
    width:100% !important;
    max-width:var(--dsk-service-copy-max) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    align-self:flex-start !important;
    justify-self:start !important;
    text-align:left !important;
  }

  #service-template .dsk-subnav.dsk-subnav{
    gap:10px !important;
    margin:14px 0 26px !important;
  }

  /* Keep service H1 titles aligned to the same left edge as the body copy
     and let them use the whole copy measure instead of centering inside a clamp. */
  #service-template h1.sb-text-image__content-title.sb-text-image__content-title,
  #service-template .sb-text-image__content-title.sb-text-image__content-title{
    display:block !important;
    width:100% !important;
    max-width:var(--dsk-service-copy-max) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    align-self:flex-start !important;
    justify-self:start !important;
    text-align:left !important;
    text-wrap:balance;
    word-break:normal !important;
    overflow-wrap:normal !important;
    hyphens:manual !important;
  }
  #service-template h1.sb-text-image__content-title.sb-text-image__content-title *,
  #service-template .sb-text-image__content-title.sb-text-image__content-title *{
    text-align:left !important;
  }

  /* Stage 45A — service family width ownership: keep the ordinary service
     pages on a single source of truth inside this dedicated file.
     Outer service sections stay on the shared shell, the visible hero/subnav/CTA
     stack uses the service shell width, and long copy / alerts / lists stay on
     the readable copy width. This removes the split ownership with the later
     global layout file without touching page HTML or mobile. */
  #service-template .sb-text-image__content,
  #service-template .sb-text-image__content-title,
  #service-template .sb-text-image__content-paragraph,
  #service-template .sb-text-image__content-cta,
  #service-template .sb-title,
  #service-template .sb-subtitle,
  #service-template .dsk-subnav,
  #service-template .alert-box,
  #service-template .dsk-steps-ol,
  #service-template .dsk-icon-list,
  #service-template .dsk-method-list{
    margin-left:0 !important;
    margin-right:auto !important;
    justify-self:start !important;
    align-self:flex-start !important;
    text-align:left !important;
  }

  #service-template .sb-text-image__content,
  #service-template .sb-title,
  #service-template .sb-subtitle,
  #service-template .sb-text-image__content-cta,
  #service-template .dsk-subnav{
    width:100% !important;
    max-width:var(--dsk-service-shell-max) !important;
  }

  #service-template .sb-text-image__content-title,
  #service-template .sb-text-image__content-paragraph,
  #service-template .alert-box,
  #service-template .dsk-steps-ol,
  #service-template .dsk-icon-list,
  #service-template .dsk-method-list{
    width:100% !important;
    max-width:var(--dsk-service-copy-max) !important;
  }

  /* Stage 57 pass 3 — ordinary service intro stack must live on content-width,
     not copy-width. The earlier service block uses duplicated class selectors and
     still wins over the later shell-promotion attempt, so restate the live
     wrappers with higher specificity here. Keep long body copy on copy-width. */
  #service-template .sb-text-image__content.sb-text-image__content,
  #service-template .sb-title.sb-title,
  #service-template .sb-subtitle.sb-subtitle,
  #service-template .sb-text-image__content-cta.sb-text-image__content-cta,
  #service-template .dsk-subnav.dsk-subnav,
  #service-template h1.sb-text-image__content-title.sb-text-image__content-title,
  #service-template .sb-text-image__content-title.sb-text-image__content-title{
    width:100% !important;
    max-width:var(--dsk-service-content-max) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    align-self:flex-start !important;
    justify-self:start !important;
    text-align:left !important;
  }

  #service-template .sb-text-image__content-paragraph.sb-text-image__content-paragraph,
  #service-template .alert-box.alert-box,
  #service-template .dsk-steps-ol.dsk-steps-ol,
  #service-template .dsk-icon-list.dsk-icon-list,
  #service-template .dsk-method-list.dsk-method-list{
    width:100% !important;
    max-width:var(--dsk-service-copy-max) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    align-self:flex-start !important;
    justify-self:start !important;
    text-align:left !important;
  }
}

@media (min-width:769px) and (max-width:1439px){
  /* Stage 57 pass 3 — service pages with a live media column should not force a
     40% left rail on desktop/laptop. The inline page patch flips the media row
     and creates a narrow content island; keep the image below the content until
     there is enough room for a compact right-side visual. */
  #service-template .sb-text-image.sb-text-image{
    display:flex !important;
    flex-direction:column !important;
    align-items:flex-start !important;
    justify-content:flex-start !important;
    gap:20px !important;
  }

  #service-template .sb-text-image__content.sb-text-image__content{
    order:1 !important;
    flex:0 1 auto !important;
    margin-right:0 !important;
  }

  #service-template .sb-text-image__image.sb-text-image__image{
    order:2 !important;
    display:flex !important;
    flex:0 0 auto !important;
    width:min(320px,100%) !important;
    max-width:min(320px,100%) !important;
    margin:0 !important;
    align-self:flex-start !important;
  }

  #service-template .sb-text-image__image .option-image,
  #service-template .sb-text-image__image figure{
    width:100% !important;
    max-width:100% !important;
    margin-left:0 !important;
    margin-right:auto !important;
  }
}

@media (min-width:1440px){
  /* Stage 57 pass 3 — at wide desktop keep the ordinary service text on the
     shared 1100px content axis and park the decorative/service visual inside the
     remaining 160px footer gutter so the whole module still reads as one 1280px
     content band inside the 1320px shell. */
  #service-template .sb-text-image.sb-text-image{
    display:flex !important;
    flex-direction:row !important;
    align-items:flex-start !important;
    justify-content:flex-start !important;
    gap:20px !important;
  }

  #service-template .sb-text-image__content.sb-text-image__content{
    order:1 !important;
    flex:0 1 var(--dsk-service-content-max) !important;
    width:100% !important;
    max-width:var(--dsk-service-content-max) !important;
    margin-right:0 !important;
  }

  #service-template .sb-text-image__image.sb-text-image__image{
    order:2 !important;
    display:flex !important;
    flex:0 0 160px !important;
    width:160px !important;
    max-width:160px !important;
    margin:0 !important;
    align-self:flex-start !important;
  }

  #service-template .sb-text-image__image .option-image,
  #service-template .sb-text-image__image figure{
    width:160px !important;
    max-width:160px !important;
    margin-left:0 !important;
    margin-right:0 !important;
  }
}

@media (min-width:821px){
  /* Stage 57 pass 4 — ordinary service pages: align the visible service stack to
     the same inner band as the footer grid across laptop/desktop, and remove the
     leftover B12 column inset that kept 821–1280 views narrower than footer. */
  #service-template > .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column:only-child,
  #service-template + section > .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column:only-child{
    padding-left:0 !important;
    padding-right:0 !important;
  }

  #service-template .sb-column,
  #service-template .sb-column-content,
  #service-template + section .sb-column,
  #service-template + section .sb-column-content{
    width:100% !important;
    max-width:none !important;
    min-width:0 !important;
    flex:0 0 100% !important;
    box-sizing:border-box !important;
  }

  #service-template .sb-text-image__content.sb-text-image__content,
  #service-template .sb-title.sb-title,
  #service-template .sb-subtitle.sb-subtitle,
  #service-template .dsk-subnav.dsk-subnav,
  #service-template h1.sb-text-image__content-title.sb-text-image__content-title,
  #service-template .sb-text-image__content-title.sb-text-image__content-title{
    width:100% !important;
    max-width:calc(var(--dsk-service-shell-max) - (var(--dsk-service-shell-gutter) * 2)) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    box-sizing:border-box !important;
  }

  #service-template .sb-text-image__content-paragraph.sb-text-image__content-paragraph,
  #service-template .sb-text-image__content-cta.sb-text-image__content-cta,
  #service-template .alert-box.alert-box,
  #service-template .dsk-steps-ol.dsk-steps-ol,
  #service-template .dsk-icon-list.dsk-icon-list,
  #service-template .dsk-method-list.dsk-method-list{
    width:100% !important;
    max-width:min(1200px,calc(var(--dsk-service-shell-max) - (var(--dsk-service-shell-gutter) * 2))) !important;
    margin-left:0 !important;
    margin-right:auto !important;
    box-sizing:border-box !important;
  }
}

@media (min-width:1440px){
  /* Stage 57 pass 4B — no-image service pages should not snap back to the old
     1100px rail on wide desktop. Keep image variants on the compact split layout,
     but let plain service pages use the full inner band with a still-readable
     1200px copy measure. */
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-text-image__content.sb-text-image__content,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-title.sb-title,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-subtitle.sb-subtitle,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .dsk-subnav.dsk-subnav,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) h1.sb-text-image__content-title.sb-text-image__content-title,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-text-image__content-title.sb-text-image__content-title{
    flex:0 1 calc(var(--dsk-service-shell-max) - (var(--dsk-service-shell-gutter) * 2)) !important;
    width:100% !important;
    max-width:calc(var(--dsk-service-shell-max) - (var(--dsk-service-shell-gutter) * 2)) !important;
    margin-left:0 !important;
    margin-right:auto !important;
  }

  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-text-image__content-paragraph.sb-text-image__content-paragraph,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .sb-text-image__content-cta.sb-text-image__content-cta,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .alert-box.alert-box,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .dsk-steps-ol.dsk-steps-ol,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .dsk-icon-list.dsk-icon-list,
  #service-template .sb-text-image:not(:has(.sb-text-image__image)) .dsk-method-list.dsk-method-list{
    width:100% !important;
    max-width:min(1200px,calc(var(--dsk-service-shell-max) - (var(--dsk-service-shell-gutter) * 2))) !important;
    margin-left:0 !important;
    margin-right:auto !important;
  }
}
