:root{
--dsk-layout-shell-max:var(--site-max-width,1320px);
  --dsk-layout-shell-gutter:var(--mobile-gutter,20px);
  --dsk-layout-content-max:1100px;
  --dsk-layout-copy-max:1040px;
--dsk-service-shell-max:var(--dsk-layout-shell-max);
  --dsk-service-shell-gutter:var(--dsk-layout-shell-gutter);
  --dsk-service-content-max:var(--dsk-layout-content-max);
  --dsk-service-copy-max:var(--dsk-layout-copy-max);
}.dsk-blog-article, .dsk-blog-hub{
  --dsk-blog-shell-max:var(--dsk-layout-shell-max);
  --dsk-blog-gutter:var(--dsk-layout-shell-gutter);
  --dsk-blog-copy-max:var(--dsk-layout-copy-max);
}

@media (min-width:1024px){.dsk-blog-article, .dsk-blog-hub{
--dsk-blog-shell-max:var(--dsk-layout-shell-max);
    --dsk-blog-inner-max:var(--dsk-layout-shell-max);
    --dsk-blog-copy-max:var(--dsk-layout-shell-max);
    --dsk-blog-gutter:var(--dsk-layout-shell-gutter);
--dsk-blog-copy-max:var(--dsk-layout-copy-max);
}}

/* Global content hardening: keep text / links / media inside the established shell */
main,
main .sb-row,
main .sb-column,
main .sb-column-content,
main .sb-item-view,
main .sb-item-view__body,
main .sb-text-image__content,
main .sb-text-image__content-paragraph,
main .sb-paragraph,
main .sb-section-title,
main .sb-section-subtitle,
main .option-width,
main .dsk-seo-blurb__wrap,
main .dsk-faq-wrap,
main .dsk-about-card,
main .dsk-about-panel,
main .dsk-servicebar__wrap,
main .dsk-about-intro-grid,
main .dsk-about-panels,
main .dsk-hub-filters__inner,
main .dsk-blog-quicknav,
main .dsk-blog-pagination,
main .section-intro,
main .section-intro__inner,
main .dsk-wrap{
  min-width:0;
  box-sizing:border-box;
}

main :where(p,li,a,h1,h2,h3,h4,h5,h6,blockquote,figcaption,code,strong,em){
  max-width:100%;
  overflow-wrap:anywhere;
  word-break:break-word;
  hyphens:auto;
}

main :where(img,svg,video,iframe,canvas,figure,table,pre){
  max-width:100%;
  box-sizing:border-box;
}@media (min-width:769px){
  /* Common desktop shell for all non-home page containers inside main */
  body:not(.dsk-page-home) main .container.sb-container-fixed.sb-container{
    width:min(var(--dsk-layout-shell-max),calc(100% - (var(--dsk-layout-shell-gutter) * 2)));
    max-width:var(--dsk-layout-shell-max);
    margin-left:auto;
    margin-right:auto;
    padding-left:var(--dsk-layout-shell-gutter);
    padding-right:var(--dsk-layout-shell-gutter);
    box-sizing:border-box;
  }body:not(.dsk-page-home) main #local-area-links .option-width, body:not(.dsk-page-home) main .ds-price__container, body:not(.dsk-page-home) main .dsk-seo-blurb__wrap, body:not(.dsk-page-home) main #faq .dsk-faq-wrap, body:not(.dsk-page-home) main #faq .sb-section-title.option-width, body:not(.dsk-page-home) main #faq .sb-section-subtitle.option-width, body:not(.dsk-page-home) main #blank-hero.dsk-ship-page .sb-text-image-vertical__content, body:not(.dsk-page-home) main #blank-hero.dsk-ship-page .sb-text-image-vertical__content-cta, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-about-hero__inner, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-cta-lab__inner, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-servicebar__wrap, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-breadcrumbs, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-about-intro-grid, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-about-panels, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-hub-filters__inner, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-blog-quicknav, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .dsk-blog-pagination, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .section-intro, body:not(.dsk-page-home):not(.dsk-page-uslugi):not(.dsk-blog-article):not(.dsk-blog-hub) .section-intro__inner, body:not(.dsk-page-home) #main.dsk-process-main > .dsk-process > .dsk-wrap, body:not(.dsk-page-home):not(.dsk-page-uslugi) .dsk-uslugi-surface > .dsk-breadcrumbs, body:not(.dsk-page-home):not(.dsk-page-uslugi) .dsk-uslugi-surface > .dsk-svc, body:not(.dsk-page-home):not(.dsk-page-uslugi) .dsk-uslugi-surface > .dsk-why{
    width:min(var(--dsk-layout-shell-max),calc(100% - (var(--dsk-layout-shell-gutter) * 2))) !important;
    max-width:var(--dsk-layout-shell-max) !important;
    margin-left:auto !important;
    margin-right:auto !important;
    padding-left:var(--dsk-layout-shell-gutter) !important;
    padding-right:var(--dsk-layout-shell-gutter) !important;
    box-sizing:border-box;
  }}

@media (min-width:1024px){body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub){
    --section-container-width:100%;
  }body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .sb-section.option-content-width-default .sb-column, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .option-width, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .option-width-default .option-width, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .option-width-6col .option-width, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .option-width-8col .option-width, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .option-width-12col .option-width, body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub) main .sb-section-alignable:not(.contact-details){
    width:100%;
    max-width:100% !important;
    flex:0 0 100%;
    box-sizing:border-box;
  }body:not(.dsk-page-home):not(.dsk-blog-article):not(.dsk-blog-hub){
    --dsk-shared-top-shell-max:var(--dsk-layout-shell-max);
    --dsk-shared-top-shell-gutter:var(--dsk-layout-shell-gutter);
  }.dsk-blog-hub{
    --dsk-blog-top-shell-max:var(--dsk-layout-shell-max);
    --dsk-blog-top-shell-gutter:var(--dsk-layout-shell-gutter);
    --dsk-blog-shell-max:var(--dsk-layout-shell-max);
    --dsk-blog-gutter:var(--dsk-layout-shell-gutter);
    --dsk-blog-copy-max:var(--dsk-layout-shell-max);
  }.dsk-blog-hub .dsk-cta-lab__inner{
    width:min(var(--dsk-layout-shell-max),calc(100% - (var(--dsk-layout-shell-gutter) * 2)));
    max-width:var(--dsk-layout-shell-max);
    margin-left:auto;
    margin-right:auto;
    box-sizing:border-box;
  }.dsk-blog-hub .dsk-about-hero__subtitle, .dsk-blog-hub .section-intro__text, .dsk-blog-hub .dsk-cta-lab__copy, .dsk-blog-hub .dsk-cta-lab__text{
    max-width:none;
  }


  /* Stage 6 — desktop pre-footer utility family: remove late local caps that still make CTA/pricing blocks visibly narrower than the shared header/footer shell. */
  body:not(.dsk-page-home) #default-contact-cta-section-template .sb-text-image__content{
    flex:1 1 auto;
    width:100%;
    max-width:none;
    margin-left:0;
    margin-right:0;
  }

  body:not(.dsk-page-home) #default-contact-cta-section-template .sb-text-image__content-title,
  body:not(.dsk-page-home) #default-contact-cta-section-template .sb-title .display-font,
  body:not(.dsk-page-home) #default-contact-cta-section-template .sb-text-image__content-paragraph,
  body:not(.dsk-page-home) #default-contact-cta-section-template .sb-subtitle{
    width:100%;
    max-width:none;
  }[data-page-type="pricing"] #pricing .ds-price__container{
    width:100%;
    max-width:none;
    padding-left:0;
    padding-right:0;
    box-sizing:border-box;
  }
  /* Stage 9 — desktop single-column B12 rows: remove the extra 10px+10px column gutter when a section already sits inside the shared shell. These full-width one-column rows were still reading as narrower than header/footer because the shell padding and the bootstrap/B12 column padding stacked together. */
  body:not(.dsk-page-home) main .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12:only-child{
    padding-left:0;
    padding-right:0;
  }}

@media (min-width:821px){body:not(.dsk-page-home):not(.dsk-blog-article) #default-contact-cta-section-template .dsk-cta-lab__inner, .dsk-blog-hub .dsk-cta-lab__inner{
    width:min(var(--dsk-layout-shell-max),calc(100% - (var(--dsk-layout-shell-gutter) * 2)));
    max-width:var(--dsk-layout-shell-max);
    margin-left:auto;
    margin-right:auto;
    box-sizing:border-box;
  }body:not(.dsk-page-home):not(.dsk-blog-article) #default-contact-cta-section-template .dsk-cta-lab__copy, body:not(.dsk-page-home):not(.dsk-blog-article) #default-contact-cta-section-template .dsk-cta-lab__text, body:not(.dsk-page-home):not(.dsk-blog-article) #default-contact-cta-section-template .dsk-cta-lab__title, .dsk-blog-hub .dsk-cta-lab__copy, .dsk-blog-hub .dsk-cta-lab__text, .dsk-blog-hub .dsk-cta-lab__title{
    max-width:none;
  }
}

@media (min-width:768px){
  /* Stage 13C — default-contact CTA sb-text-image parity: neutralize 860/760/18ch/62ch caps from the late bundles as soon as those tablet/desktop rules begin applying. */
  #default-contact-cta-section-template .sb-text-image__content,
  #default-contact-cta-section-template .sb-text-image__content-title,
  #default-contact-cta-section-template .sb-title .display-font,
  #default-contact-cta-section-template .sb-text-image__content-paragraph,
  #default-contact-cta-section-template .sb-subtitle{
    width:100%;
    max-width:none;
  }
}


@media (min-width:821px) and (max-width:1023.98px){}

/* Stage 15 retired — service-template desktop width ownership lives in
   `dsk-service-layout-unify.v2.css`. Keeping these page-class selectors here
   caused cross-page leakage because many non-HDD services still carry the
   `.dsk-page-hdd` class in HTML. */

/* Stage 16 retired — readability parity for the service family now belongs
   to `dsk-service-layout-unify.v2.css`, which scopes by `#service-template`
   instead of fragile per-page HTML classes. */


/* Stage 38 — service family ownership moved to dsk-service-layout-unify.v2.css.
   Keep the global layout layer out of ordinary `#service-template` widths so the
   service family has one desktop source of truth. */

@media (min-width:769px){body:not(.dsk-page-home) footer.dsk-site-footer .dsk-custom-footer, body:not(.dsk-page-home) .sb-footer.dsk-site-footer .dsk-custom-footer{
    width:min(var(--dsk-layout-shell-max),calc(100% - (var(--dsk-layout-shell-gutter) * 2)));
    max-width:var(--dsk-layout-shell-max);
    margin-left:auto;
    margin-right:auto;
    padding-left:var(--dsk-layout-shell-gutter);
    padding-right:var(--dsk-layout-shell-gutter);
    box-sizing:border-box;
  }}

/* Stage 176A — local_lp family shell ownership: Warsaw local landing pages were
   still inheriting the ordinary service family widths while Bialoleka used the
   location family. Keep geometry unchanged (1320 / 1100 / 1040 / 20), but route
   both patterns through one shared local_lp token layer keyed by body[data-page-type="local_lp"],
   with body.dsk-page-location-bialoleka as the CSS-only fallback for the PL Bialoleka page
   that still lacks the local_lp body dataset. This isolates local landing ownership without
   touching HTML, JS, sticky, nav or copy. */
:root{
  --dsk-local-lp-shell-max:var(--dsk-layout-shell-max,1320px);
  --dsk-local-lp-shell-gutter:var(--dsk-layout-shell-gutter,20px);
  --dsk-local-lp-content-max:var(--dsk-layout-content-max,1100px);
  --dsk-local-lp-copy-max:var(--dsk-layout-copy-max,1040px);
}

@media (min-width:769px){[data-page-type="local_lp"], .dsk-page-location-bialoleka{
    --dsk-local-lp-shell-max:var(--dsk-layout-shell-max,var(--site-max-width,1320px));
    --dsk-local-lp-shell-gutter:var(--dsk-layout-shell-gutter,var(--mobile-gutter,20px));
    --dsk-local-lp-content-max:var(--dsk-layout-content-max,1100px);
    --dsk-local-lp-copy-max:var(--dsk-layout-copy-max,1040px);
    --dsk-service-shell-max:var(--dsk-local-lp-shell-max);
    --dsk-service-shell-gutter:var(--dsk-local-lp-shell-gutter);
    --dsk-service-content-max:var(--dsk-local-lp-content-max);
    --dsk-service-copy-max:var(--dsk-local-lp-copy-max);
    --dsk-location-shell-max:var(--dsk-local-lp-shell-max);
    --dsk-location-shell-gutter:var(--dsk-local-lp-shell-gutter);
    --dsk-location-content-max:var(--dsk-local-lp-content-max);
    --dsk-location-copy-max:var(--dsk-local-lp-copy-max);
  }[data-page-type="local_lp"] main .container.sb-container-fixed.sb-container, .dsk-page-location-bialoleka main .container.sb-container-fixed.sb-container, [data-page-type="local_lp"] footer.dsk-site-footer .dsk-custom-footer, .dsk-page-location-bialoleka footer.dsk-site-footer .dsk-custom-footer, [data-page-type="local_lp"] .sb-footer.dsk-site-footer .dsk-custom-footer, .dsk-page-location-bialoleka .sb-footer.dsk-site-footer .dsk-custom-footer{
    width:min(var(--dsk-local-lp-shell-max),calc(100% - (var(--dsk-local-lp-shell-gutter) * 2)));
    max-width:var(--dsk-local-lp-shell-max);
    margin-left:auto;
    margin-right:auto;
    padding-left:var(--dsk-local-lp-shell-gutter);
    padding-right:var(--dsk-local-lp-shell-gutter);
    box-sizing:border-box;
  }[data-page-type="local_lp"] #service-template .sb-text-image__content.sb-text-image__content, .dsk-page-location-bialoleka #service-template .sb-text-image__content.sb-text-image__content, [data-page-type="local_lp"] #service-template .sb-title.sb-title, .dsk-page-location-bialoleka #service-template .sb-title.sb-title, [data-page-type="local_lp"] #service-template .sb-subtitle.sb-subtitle, .dsk-page-location-bialoleka #service-template .sb-subtitle.sb-subtitle, [data-page-type="local_lp"] #service-template .sb-text-image__content-cta.sb-text-image__content-cta, .dsk-page-location-bialoleka #service-template .sb-text-image__content-cta.sb-text-image__content-cta, [data-page-type="local_lp"] #service-template .dsk-subnav.dsk-subnav, .dsk-page-location-bialoleka #service-template .dsk-subnav.dsk-subnav, [data-page-type="local_lp"] #service-template h1.sb-text-image__content-title.sb-text-image__content-title, .dsk-page-location-bialoleka #service-template h1.sb-text-image__content-title.sb-text-image__content-title, [data-page-type="local_lp"] #service-template .sb-text-image__content-title.sb-text-image__content-title, .dsk-page-location-bialoleka #service-template .sb-text-image__content-title.sb-text-image__content-title{
    width:100%;
    max-width:var(--dsk-local-lp-content-max) !important;
    margin-left:0;
    margin-right:auto;
    align-self:flex-start;
    justify-self:start;
    text-align:left;
  }[data-page-type="local_lp"] #service-template .sb-text-image__content-paragraph.sb-text-image__content-paragraph, .dsk-page-location-bialoleka #service-template .sb-text-image__content-paragraph.sb-text-image__content-paragraph, [data-page-type="local_lp"] #service-template .alert-box.alert-box, .dsk-page-location-bialoleka #service-template .alert-box.alert-box, [data-page-type="local_lp"] #service-template .dsk-steps-ol.dsk-steps-ol, .dsk-page-location-bialoleka #service-template .dsk-steps-ol.dsk-steps-ol, [data-page-type="local_lp"] #service-template .dsk-icon-list.dsk-icon-list, .dsk-page-location-bialoleka #service-template .dsk-icon-list.dsk-icon-list, [data-page-type="local_lp"] #service-template .dsk-method-list.dsk-method-list, .dsk-page-location-bialoleka #service-template .dsk-method-list.dsk-method-list{
    width:100%;
    max-width:var(--dsk-local-lp-copy-max);
    margin-left:0;
    margin-right:auto;
    align-self:flex-start;
    justify-self:start;
    text-align:left;
  }
}


@media (max-width:768px){
  /* Stage 497 — services hub mobile shell now lives in assets/css/page-uslugi.min.css.
     Keep global layout ownership off /uslugi and leave only non-services families below. */


  /* Stage 202 / Etap 3 — contact primary content owner.
     The outer contact shell is already locked to 16px, but the visible right-hand content card
     still keeps a local 20px inline padding (`.contact-full__location .contact-details`) on both
     kontakt.html and en/contact.html. Normalize only the primary mobile content frame of the
     contact family; footer parity stays on its own stage. */
  html body[data-page-type="contact"] #formularz-zgloszeniowy .sb-container,
  html body[data-page-type="contact"] #formularz-zgloszeniowy .sb-container-fixed,
  html body[data-page-type="contact"] #contact-form .sb-container,
  html body[data-page-type="contact"] #contact-form .sb-container-fixed,
  html body[data-page-type="contact"] .dsk-seo-blurb,
  html body[data-page-type="contact"] :is(#formularz-zgloszeniowy,#contact-form) .contact-full__form,
  html body[data-page-type="contact"] :is(#formularz-zgloszeniowy,#contact-form) .contact-full__location .contact-details,
  html body[data-page-type="contact"] footer.dsk-site-footer .dsk-custom-footer,
  html body[data-page-type="contact"] .sb-footer.dsk-site-footer .dsk-custom-footer,
  html body[data-page-type="contact"] footer.dsk-site-footer .dsk-copyright,
  html body[data-page-type="contact"] .sb-footer.dsk-site-footer .dsk-copyright{
    padding-left:16px !important;
    padding-right:16px !important;
  }  /* Etap 5 — case form primary shell.
     The previous case_form lock only covered the lower #uslugi section plus footer parity,
     but the actual first-screen form lives in #formularz-zgloszeniowy / #contact-form.
     Keep the family scope narrow and normalize only the real mobile outer shells of the
     submission section, leaving footer logic and desktop untouched. */
  html body[data-page-type="case_form"] :is(#formularz-zgloszeniowy,#contact-form) > .container.sb-container-fixed.sb-container,
  html body[data-page-type="case_form"] #uslugi .sb-container,
  html body[data-page-type="case_form"] footer.dsk-site-footer .dsk-custom-footer,
  html body[data-page-type="case_form"] .sb-footer.dsk-site-footer .dsk-custom-footer,
  html body[data-page-type="case_form"] footer.dsk-site-footer .dsk-copyright,
  html body[data-page-type="case_form"] .sb-footer.dsk-site-footer .dsk-copyright{
    padding-left:16px !important;
    padding-right:16px !important;
  }

  /* Etap 6 — case form lower-box parity.
     The case form footer already sits inside the shared 16px lock above, but the actual green
     submission panel still comes from late inline HTML with `padding:18px 16px`. Later stage
     tweaks only changed `padding-top`, leaving the bottom edge heavier than the rest of the
     family. Normalize only the lower edge of that panel on mobile for PL/EN, without touching
     the footer, HTML or desktop. */
  html body[data-page-type="case_form"] :is(#formularz-zgloszeniowy,#contact-form) .contact-full__form{
    padding-bottom:16px !important;
    box-sizing:border-box !important;
  }/* Etap 11 — 404 shell + footer parity.
     The 404 templates (PL/EN) are the remaining standard outliers: unlike home/services/contact/pricing/case-form,
     they ship without a family body class or data-page-type, so none of the existing mobile 16px locks reach them.
     Both 404 pages can be identified safely by the unique #przydatne-linki section. Lock only the visible 404 section
     containers plus footer shell to the same 16px mobile axis, without touching home (which also uses #strona-glowna). */
  html body:has(main #przydatne-linki) #sb-page-structure > :is(#strona-glowna,#przydatne-linki,#szybki-kontakt,#quick-contact) > .container.sb-container-fixed.sb-container,
  html body:has(main #przydatne-linki) footer.dsk-site-footer :is(.dsk-custom-footer,.dsk-copyright),
  html body:has(main #przydatne-linki) .sb-footer.dsk-site-footer :is(.dsk-custom-footer,.dsk-copyright){
    padding-left:16px !important;
    padding-right:16px !important;
    box-sizing:border-box !important;
  }
}

@media (max-width:768px){}

@media (max-width:768px){}

@media (max-width:768px){
  /* Stage 202 — service-detail family mobile gutter parity.
     The previous shared fix normalized only html.dsk-page-hdd, but other service-detail templates
     (SSD / RAID / MacBook / CCTV, PL+EN) still keep the same late inline
     `#sb-page-structure .sb-container-fixed { 20px !important; }` owner in their HTML.
     Keep each page structure intact and only remap the confirmed outer wrappers for the whole
     service-detail family to the shared 16px mobile shell. */
  html:is(.dsk-page-hdd,.dsk-page-ssd,.dsk-page-raid,.dsk-page-macbook,.dsk-page-cctv) body #sb-page-structure .sb-container-fixed,
  html:is(.dsk-page-hdd,.dsk-page-ssd,.dsk-page-raid,.dsk-page-macbook,.dsk-page-cctv) body #sb-page-structure .container.sb-container-fixed.sb-container{
    padding-left:16px !important;
    padding-right:16px !important;
    box-sizing:border-box !important;
  }
}

@media (max-width:768px){:where(.dsk-page-home) #sb-page-structure :is(p,li,blockquote,figcaption,.sb-paragraph,.sb-rich-text,.sb-text-image__content-paragraph,.items-grid__summary,.dsk-hero-subtitle), body:not(.dsk-page-home) main :is(p,li,blockquote,figcaption,.sb-paragraph,.sb-rich-text,.sb-text-image__content-paragraph,.items-grid__summary,.sb-item-view__body,.sb-item-view__body p,.sb-item-view__body li,.dsk-about-hero__subtitle,.dsk-card-meta,.dsk-contact-optional__hint,.dsk-contact-optional__inner p), :where(.dsk-page-home) #sb-page-structure :is(p a,li a,blockquote a,figcaption a,.items-grid__summary a), body:not(.dsk-page-home) main :is(p a,li a,blockquote a,figcaption a,.items-grid__summary a,.sb-item-view__body a){
    overflow-wrap:break-word !important;
    word-break:normal !important;
    hyphens:manual !important;
  }:where(.dsk-page-home) #sb-page-structure :is(h1,h2,h3,h4,h5,h6,.sb-title .display-font,.sb-subtitle span,.items-grid__header,.sb-item-view__title,.dsk-hero-eyebrow,.dsk-hero-proof li,.dsk-hero-benefits--grid p), body:not(.dsk-page-home) main :is(h1,h2,h3,h4,h5,h6,.sb-title .display-font,.sb-subtitle span,.items-grid__header,.sb-item-view__title,.dsk-servicecard__label,.dsk-subnav__item,.dsk-badge,.hours-list__day,.contact-details a[href^="mailto:"],.contact-details a[href^="tel:"]){
    overflow-wrap:normal !important;
    word-break:normal;
    hyphens:none;
    text-wrap:balance;
  }}


@media (max-width:768px){
  /* Stage 198 — local LP mobile gutter owner parity.
     The Warsaw local landing PL/EN still ships a late inline `#sb-page-structure .sb-container-fixed { 20px }` rule,
     which leaves those sections visually heavier than the shared 16px mobile shell already used by home/services.
     Keep the page-local card styling and only make the local LP family containers resolve to the same 16px gutter. */
  html body[data-page-type="local_lp"],
  html body.dsk-page-location-bialoleka{
    --dsk-local-lp-shell-gutter:16px !important;
  }[data-page-type="local_lp"] #sb-page-structure > :is(.sb-section,section) > .container.sb-container-fixed.sb-container, .dsk-page-location-bialoleka #sb-page-structure > :is(.sb-section,section) > .container.sb-container-fixed.sb-container, [data-page-type="local_lp"] #sb-page-structure .dsk-subnav-wrap .sb-container-fixed.sb-container, .dsk-page-location-bialoleka #sb-page-structure .dsk-subnav-wrap .sb-container-fixed.sb-container, [data-page-type="local_lp"] main .container.sb-container-fixed.sb-container, .dsk-page-location-bialoleka main .container.sb-container-fixed.sb-container{
    padding-left:var(--dsk-local-lp-shell-gutter,16px);
    padding-right:var(--dsk-local-lp-shell-gutter,16px);
    box-sizing:border-box;
  }
}

@media (max-width:768px){
  /* Stage 22 — HDD sample runtime owner hardening.
     Runtime confirm on the HDD PL/EN sample shows the late page-local `.dsk-page-hdd #sb-page-structure .sb-container-fixed { 20px !important; }`
     still wins on the main service shell, while the footer has no HDD-specific 16px lock in the source-of-truth package.
     Keep the fix narrowly scoped to the confirmed HDD pair via html class + canonical hook and remap only the runtime shell + footer wrappers to 16px. */
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body #service-template > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body #service-template + section > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body #default-contact-cta-section-template > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body #service-template > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body #service-template + section > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body #default-contact-cta-section-template > .container.sb-container-fixed.sb-container.sb-container-fixed.sb-container{
    padding-left:16px !important;
    padding-right:16px !important;
    box-sizing:border-box !important;
  }

  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body footer.dsk-site-footer > .dsk-custom-footer.dsk-custom-footer,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body .sb-footer.dsk-site-footer > .dsk-custom-footer.dsk-custom-footer,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body footer.dsk-site-footer > .dsk-custom-footer.dsk-custom-footer,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body .sb-footer.dsk-site-footer > .dsk-custom-footer.dsk-custom-footer,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/odzyskiwanie-danych-z-hdd"]) body .dsk-custom-footer > .dsk-copyright.dsk-copyright,
  html.dsk-page-hdd:has(link[rel="canonical"][href$="/en/hdd-data-recovery"]) body .dsk-custom-footer > .dsk-copyright.dsk-copyright{
    padding-left:16px !important;
    padding-right:16px !important;
    box-sizing:border-box !important;
  }
}


/* Etap 87 — hide footer opening hours on every PL/EN page without touching main contact/hour sections. */
footer.dsk-site-footer .dsk-nap-block > p:nth-of-type(5),
.sb-footer.dsk-site-footer .dsk-nap-block > p:nth-of-type(5){
  display:none;
}

/* Etap 90 — central sticky call owner: make every PL/EN page use the same mobile sticky bar visuals as PL home. */
@media (max-width:768px), (hover:none) and (pointer:coarse){
  .dsk-stickybar{
    bottom:calc(env(safe-area-inset-bottom, 0px) + 8px) !important;
    left:0 !important;
    right:0 !important;
    padding:0 12px !important;
    height:auto !important;
    background:transparent !important;
    border:0 !important;
    box-shadow:none !important;
    z-index:9999 !important;
    pointer-events:none !important;
    display:block !important;
  }

  .dsk-stickybar__inner{
    max-width:720px !important;
    margin:0 auto !important;
  }

  .dsk-stickybar__card{
    pointer-events:auto !important;
    display:flex !important;
    gap:6px !important;
    width:100% !important;
    padding:4px !important;
    border-radius:999px !important;
    background:rgba(255,255,255,0.78) !important;
    border:1px solid rgba(148,163,184,0.24) !important;
    box-shadow:0 10px 28px rgba(15,23,42,0.16) !important;
    backdrop-filter:blur(14px) saturate(140%) !important;
    -webkit-backdrop-filter:blur(14px) saturate(140%) !important;
  }

  .dsk-stickybar__btn{
    flex:1 1 0 !important;
    width:50% !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    gap:8px !important;
    min-height:44px !important;
    height:44px !important;
    padding:0 12px !important;
    border-radius:999px !important;
    font-size:0.875rem !important;
    line-height:1 !important;
    letter-spacing:-0.01em !important;
    white-space:nowrap !important;
    text-decoration:none !important;
    box-shadow:none !important;
  }

  .dsk-stickybar__btn::before{
    width:16px !important;
    height:16px !important;
    flex:0 0 16px !important;
    background-size:16px 16px !important;
    background-position:center center !important;
    transform:translateY(0) !important;
  }

  .dsk-stickybar__chat{
    background:rgba(19,84,146,0.92) !important;
    color:rgba(255,255,255,0.96) !important;
    border:1px solid rgba(255,255,255,0.14) !important;
    box-shadow:0 6px 18px rgba(19,84,146,0.18) !important;
    text-shadow:none !important;
  }

  .dsk-stickybar__call{
    background:linear-gradient(180deg, rgba(15,153,74,0.94) 0%, rgba(11,122,60,0.98) 100%) !important;
    color:rgba(255,255,255,0.96) !important;
    border:1px solid rgba(255,255,255,0.14) !important;
    box-shadow:0 7px 18px rgba(11,122,60,0.22) !important;
    text-shadow:none !important;
  }}

/* pl-sitewide-nav-footer-axis-generic-v1
   Generic PL non-blog service-template rail closure for legacy root pages that
   do not load the service landing owner. Excludes home, blog/article shells,
   forms and protected navigation/runtime. */
@media (min-width: 900px) {:not(.dsk-page-home):not(.dsk-blog-article) #service-template > .container.sb-container-fixed.sb-container, :not(.dsk-page-home):not(.dsk-blog-article) .dsk-guides-section > .container.sb-container-fixed.sb-container, :not(.dsk-page-home):not(.dsk-blog-article) #default-contact-cta-section-template > .container.sb-container-fixed.sb-container{
    width: min(1236px, calc(100vw - 30px));
    max-width: 1236px;
    margin-left: auto;
    margin-right: auto;
    padding-left: 0;
    padding-right: 0;
    box-sizing: border-box;
    transform: none;
  }
}

/* pl-sitewide-nav-footer-axis-root-containers-v1
   Align legacy PL non-blog root containers to the current nav/footer rail.
   This does not touch EN, blog/article shells, nav/footer HTML, forms,
   tracking, cookies, schema or CTA/link data. */
@media (min-width: 900px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure > section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure .sb-section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container {
    width: min(1236px, calc(100vw - 30px)) !important;
    max-width: 1236px !important;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    box-sizing: border-box !important;
    transform: none !important;
  }
}

@media (max-width: 899px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure > section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure .sb-section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container {
    width: min(calc(100% - 40px), calc(100vw - 60px)) !important;
    max-width: min(calc(100% - 40px), calc(100vw - 60px)) !important;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    box-sizing: border-box !important;
    transform: none !important;
  }
}

@media (max-width: 430px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure > section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) #sb-page-structure .sb-section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container {
    width: calc(100vw - 30px) !important;
    max-width: calc(100vw - 30px) !important;
  }
}

/* pl-dsk-sb-container-owner-v1
   DSK takes ownership of the legacy B12 `.sb-container` rail in PL main
   content. The old builder defaults used `flex:1 1 100%`, Bootstrap max-widths
   and stacked padding, which made width fixes look correct while flex-basis
   still moved margins. This owner sets width/max-width/flex-basis together.
   Scope excludes EN, home and blog article shells; nav/footer/cookie runtime
   are outside `main#main-content`. */
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) {
  --dsk-sb-container-rail: var(--dsk-global-nav-footer-rail, min(calc(100vw - 130px), 1236px));
  --dsk-sb-container-margin-left: auto;
  --dsk-sb-container-margin-right: auto;
}

@media (max-width: 360px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) {
    --dsk-sb-container-rail: calc(100vw - 32px);
  }
}

@media (min-width: 361px) and (max-width: 767px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) {
    --dsk-sb-container-rail: calc(100vw - 40px);
  }
}

@media (min-width: 768px) and (max-width: 899px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) {
    --dsk-sb-container-rail: calc(100vw - 47px);
  }
}

@media (min-width: 900px) and (max-width: 1180px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) {
    --dsk-sb-container-rail: calc(100vw - 63px);
  }
}

html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content #sb-page-structure > section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content #sb-page-structure .sb-section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container {
  width: var(--dsk-sb-container-rail) !important;
  max-width: var(--dsk-sb-container-rail) !important;
  flex: 0 0 var(--dsk-sb-container-rail) !important;
  min-width: 0 !important;
  margin-left: var(--dsk-sb-container-margin-left) !important;
  margin-right: var(--dsk-sb-container-margin-right) !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  box-sizing: border-box !important;
  transform: none !important;
}:not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row, :not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12:only-child, :not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12:only-child > .sb-column-content, :not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12:only-child .sb-item-view-wrapper, :not(.dsk-page-home):not(.dsk-blog-article) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12:only-child .sb-item-view{
  width: 100%;
  max-width: 100%;
  flex: 0 0 100%;
  min-width: 0;
  margin-left: 0;
  margin-right: 0;
  padding-left: 0;
  padding-right: 0;
  box-sizing: border-box;
  transform: none;
}

/* pl-dsk-sb-container-owner-v2
   Extends the B12 shell owner to all active PL main pages except home,
   including blog articles. The selector no longer depends on :only-child
   because some builder pages keep hidden sibling columns in the DOM while the
   rendered shell is a single full-width column. */
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) {
  --dsk-sb-container-rail: var(--dsk-global-nav-footer-rail, min(calc(100vw - 130px), 1236px));
  --dsk-sb-container-margin-left: auto;
  --dsk-sb-container-margin-right: auto;
}

@media (max-width: 360px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) {
    --dsk-sb-container-rail: calc(100vw - 32px);
  }
}

@media (min-width: 361px) and (max-width: 767px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) {
    --dsk-sb-container-rail: calc(100vw - 40px);
  }
}

@media (min-width: 768px) and (max-width: 899px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) {
    --dsk-sb-container-rail: calc(100vw - 47px);
  }
}

@media (min-width: 900px) and (max-width: 1180px) {
  html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) {
    --dsk-sb-container-rail: calc(100vw - 63px);
  }
}

html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) main#main-content #sb-page-structure > section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) main#main-content #sb-page-structure .sb-section:not(#sb-navigation):not(#dsk-cookie-consent):not(.dsk-site-footer) > .container.sb-container-fixed.sb-container,
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container {
  width: var(--dsk-sb-container-rail) !important;
  max-width: var(--dsk-sb-container-rail) !important;
  flex: 0 0 var(--dsk-sb-container-rail) !important;
  min-width: 0 !important;
  margin-left: var(--dsk-sb-container-margin-left) !important;
  margin-right: var(--dsk-sb-container-margin-right) !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  box-sizing: border-box !important;
  transform: none !important;
}:not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row, :not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12, :not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12 > .sb-column-content, :not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12 .sb-item-view-wrapper, :not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row > .sb-column.col-xs-12.col-sm-12.col-md-12.col-lg-12.col-xl-12 .sb-item-view{
  width: 100%;
  max-width: 100% !important;
  flex: 0 0 100%;
  min-width: 0;
  margin-left: 0;
  margin-right: 0;
  padding-left: 0;
  padding-right: 0;
  box-sizing: border-box;
  transform: none;
}

html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row:has(> .sb-column:first-child:last-child) > .sb-column,
html[lang="pl"] body#sb-body-data-attr:not(.dsk-page-home) main#main-content .container.sb-container-fixed.sb-container > .row.sb-row:has(> .sb-column:first-child:last-child) > .sb-column > .sb-column-content {
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  box-sizing: border-box !important;
  transform: none !important;
}
