{"id":6,"date":"2024-01-08T16:30:20","date_gmt":"2024-01-08T15:30:20","guid":{"rendered":"http:\/\/karniszewarszawa.pl\/?page_id=6"},"modified":"2026-09-28T08:43:23","modified_gmt":"2026-09-28T06:43:23","slug":"karnisze-ks-warszawa","status":"publish","type":"page","link":"https:\/\/karniszewarszawa.pl\/","title":{"rendered":"Karnisze KS Warszawa"},"content":{"rendered":"<!-- HFCM by 99 Robots - Snippet # 21: HERO H1 -->\n<!-- AZHOME \u2014 HERO \/ NIERUCHOME T\u0141O -->\r\n<style>\r\n.kw-fixed-hero {\r\n  box-sizing: border-box;\r\n  position: relative;\r\n  display: flex;\r\n  align-items: flex-end;\r\n\r\n  width: 100%;\r\n  max-width: none !important;\r\n  min-height: clamp(220px, 70vw, 650px);\r\n  margin: 0 0 30px !important;\r\n  padding: 0 !important;\r\n\r\n  background-color: #fff;\r\n  background-image: url(\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-ks-warszawa.webp\");\r\n  background-repeat: no-repeat;\r\n  background-position: center center;\r\n  background-size: cover;\r\n  background-attachment: fixed;\r\n}\r\n\r\n.kw-fixed-hero *,\r\n.kw-fixed-hero *::before,\r\n.kw-fixed-hero *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n\/* H1 blisko dolnej kraw\u0119dzi \u2014 bez pustego pasa poni\u017cej. *\/\r\n.kw-fixed-hero__content {\r\n  width: 100%;\r\n  margin: 0;\r\n  padding: 24px 7% 22px;\r\n}\r\n\r\n.kw-fixed-hero .kw-fixed-hero__title {\r\n  display: inline-block;\r\n  max-width: 100%;\r\n  margin: 0 !important;\r\n  padding: 4px 0 !important;\r\n\r\n  font-family: inherit;\r\n  font-size: clamp(28px, 3.1vw, 50px);\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  letter-spacing: -.035em;\r\n  text-transform: none;\r\n  color: #222;\r\n\r\n  background-image: linear-gradient(\r\n    110deg,\r\n    #222 0%,\r\n    #222 40%,\r\n    #899785 47%,\r\n    #eef3e9 50%,\r\n    #899785 53%,\r\n    #222 60%,\r\n    #222 100%\r\n  );\r\n  background-size: 300% 100%;\r\n  background-position: 100% 50%;\r\n  -webkit-background-clip: text;\r\n  background-clip: text;\r\n  -webkit-text-fill-color: transparent;\r\n\r\n  animation: kwFixedHeroShine 5s ease-in-out infinite;\r\n}\r\n\r\n\/* Ograniczenie odst\u0119pu dodawanego przez nast\u0119pny blok. *\/\r\n.kw-fixed-hero + * {\r\n  margin-top: 0 !important;\r\n}\r\n\r\n@keyframes kwFixedHeroShine {\r\n  0%, 12% {\r\n    background-position: 100% 50%;\r\n  }\r\n  45%, 100% {\r\n    background-position: 0% 50%;\r\n  }\r\n}\r\n\r\n@media (max-width: 767px) {\r\n  .kw-fixed-hero {\r\n    min-height: 420px;\r\n    min-height: clamp(360px, 100svh - 160px, 480px);\r\n    margin-bottom: 12px !important;\r\n\r\n    background-attachment: scroll;\r\n    background-position: right center;\r\n    background-size: cover;\r\n  }\r\n\r\n  .kw-fixed-hero__content {\r\n    padding: 50px 20px 20px;\r\n    background: linear-gradient(\r\n      180deg,\r\n      rgba(255, 255, 255, 0),\r\n      rgba(255, 255, 255, .94)\r\n    );\r\n  }\r\n\r\n  .kw-fixed-hero .kw-fixed-hero__title {\r\n    font-size: clamp(27px, 7vw, 38px);\r\n    line-height: 1.18;\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .kw-fixed-hero {\r\n    background-attachment: scroll;\r\n  }\r\n\r\n  .kw-fixed-hero .kw-fixed-hero__title {\r\n    animation: none;\r\n    background: none;\r\n    -webkit-text-fill-color: #222;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"kw-fixed-hero\" aria-label=\"Karnisze KS Warszawa\">\r\n  <div class=\"kw-fixed-hero__content\">\r\n    <h1 class=\"kw-fixed-hero__title\">\r\n      Karnisze KS Warszawa\r\n    <\/h1>\r\n  <\/div>\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- HFCM by 99 Robots - Snippet # 10: pasek wymiaru -->\n<style>\r\n  \/* ===== AZHOME \u2014 pasek wymiar\u00f3w + podpowied\u017a tylko na kropce ===== *\/\r\n\r\n  @keyframes azTrackBgFloat{\r\n    0%{ background-position:0% 0%, 100% 0%, 30% 100%, 0% 0%; }\r\n    35%{ background-position:55% 16%, 58% 32%, 68% 68%, 0% 0%; }\r\n    70%{ background-position:100% 28%, 18% 62%, 95% 42%, 0% 0%; }\r\n    100%{ background-position:0% 0%, 100% 0%, 30% 100%, 0% 0%; }\r\n  }\r\n\r\n  @keyframes azTrackFloat{\r\n    0%,100%{ transform:translateY(0); }\r\n    50%{ transform:translateY(-3px); }\r\n  }\r\n\r\n  @keyframes azTrackPulse{\r\n    0%{ box-shadow:0 0 0 rgba(53,214,41,0); }\r\n    50%{ box-shadow:0 0 28px rgba(53,214,41,.48); }\r\n    100%{ box-shadow:0 0 0 rgba(53,214,41,0); }\r\n  }\r\n\r\n  @keyframes azTrackBoom{\r\n    0%{ transform:scale(1); }\r\n    34%{ transform:scale(1.24); }\r\n    68%{ transform:scale(.96); }\r\n    100%{ transform:scale(1); }\r\n  }\r\n\r\n  @keyframes azTrackMessageIn{\r\n    0%{ opacity:0; transform:translateY(8px); }\r\n    100%{ opacity:1; transform:translateY(0); }\r\n  }\r\n\r\n  @keyframes azTrackHintPop{\r\n    0%{ opacity:0; transform:translate(-50%, 8px) scale(.92); }\r\n    65%{ opacity:1; transform:translate(-50%, -2px) scale(1.06); }\r\n    100%{ opacity:1; transform:translate(-50%, 0) scale(1); }\r\n  }\r\n\r\n  @keyframes azTrackHintGlow{\r\n    0%,100%{\r\n      box-shadow:\r\n        0 10px 24px rgba(0,0,0,.18),\r\n        0 0 0 rgba(53,214,41,0);\r\n    }\r\n    50%{\r\n      box-shadow:\r\n        0 12px 28px rgba(0,0,0,.22),\r\n        0 0 22px rgba(53,214,41,.36);\r\n    }\r\n  }\r\n\r\n  .az-track-wrap{\r\n    width:100%;\r\n    margin:24px auto;\r\n    padding:0;\r\n    box-sizing:border-box;\r\n    isolation:isolate;\r\n    text-align:center;\r\n  }\r\n\r\n  .az-track-card{\r\n    max-width:820px;\r\n    margin:0 auto;\r\n    padding:16px;\r\n    border:1px solid rgba(184,137,45,.50);\r\n    border-radius:24px;\r\n    position:relative;\r\n    overflow:hidden;\r\n    isolation:isolate;\r\n    box-sizing:border-box;\r\n    background:\r\n      radial-gradient(1200px 420px at 18% 12%,\r\n        rgba(48,190,34,.30) 0%,\r\n        rgba(48,190,34,.13) 36%,\r\n        rgba(255,255,255,0) 72%),\r\n      radial-gradient(900px 360px at 86% 22%,\r\n        rgba(117,28,34,.18) 0%,\r\n        rgba(117,28,34,.08) 42%,\r\n        rgba(255,255,255,0) 74%),\r\n      radial-gradient(980px 520px at 58% 92%,\r\n        rgba(184,137,45,.22) 0%,\r\n        rgba(184,137,45,.12) 38%,\r\n        rgba(255,255,255,0) 74%),\r\n      linear-gradient(180deg,\r\n        rgba(255,255,255,.95) 0%,\r\n        rgba(255,255,255,.88) 100%);\r\n    background-color:#fff;\r\n    background-size:230% 230%, 250% 250%, 240% 240%, 100% 100%;\r\n    background-position:0% 0%, 100% 0%, 30% 100%, 0% 0%;\r\n    animation:\r\n      azTrackBgFloat 4s ease-in-out infinite,\r\n      azTrackFloat 3.4s ease-in-out infinite;\r\n    box-shadow:\r\n      0 18px 46px rgba(0,0,0,.14),\r\n      0 0 26px rgba(48,190,34,.12),\r\n      inset 0 0 0 1px rgba(255,255,255,.70);\r\n  }\r\n\r\n  .az-track-card::before{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:0;\r\n    z-index:0;\r\n    pointer-events:none;\r\n    border-radius:inherit;\r\n    box-shadow:\r\n      inset 0 0 0 1px rgba(255,255,255,.78),\r\n      inset 0 0 34px rgba(255,255,255,.42);\r\n  }\r\n\r\n  .az-track-inner{\r\n    position:relative;\r\n    z-index:1;\r\n    padding:18px 16px 16px;\r\n    border:1px solid rgba(0,0,0,.08);\r\n    border-radius:20px;\r\n    background:rgba(255,255,255,.86);\r\n    box-shadow:0 12px 30px rgba(0,0,0,.08);\r\n    backdrop-filter:blur(6px);\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-track-head{\r\n    display:flex;\r\n    align-items:flex-end;\r\n    justify-content:space-between;\r\n    gap:14px;\r\n    margin:0 0 16px;\r\n    text-align:left;\r\n  }\r\n\r\n  .az-track-title{\r\n    margin:0;\r\n    font-size:15px;\r\n    line-height:1.18;\r\n    font-weight:900;\r\n    color:#111;\r\n    letter-spacing:-.025em;\r\n  }\r\n\r\n  .az-track-live{\r\n    display:flex;\r\n    align-items:baseline;\r\n    justify-content:flex-end;\r\n    gap:6px;\r\n    min-width:145px;\r\n    text-align:right;\r\n    white-space:nowrap;\r\n  }\r\n\r\n  .az-track-live-label{\r\n    font-size:12px;\r\n    color:rgba(0,0,0,.58);\r\n    font-weight:700;\r\n  }\r\n\r\n  .az-track-live-number{\r\n    display:inline-block;\r\n    font-family:Arial, sans-serif;\r\n    font-size:30px;\r\n    line-height:.95;\r\n    font-weight:900;\r\n    letter-spacing:-.06em;\r\n    color:#16a34a;\r\n    transform-origin:center;\r\n  }\r\n\r\n  .az-track-live-number.az-track-live-number--boom{\r\n    animation:azTrackBoom .56s cubic-bezier(.2,.9,.2,1.25);\r\n  }\r\n\r\n  .az-track-live-unit{\r\n    font-size:14px;\r\n    font-weight:900;\r\n    color:#111;\r\n  }\r\n\r\n  .az-track-scale{\r\n    position:relative;\r\n    height:44px;\r\n    margin:0 0 8px;\r\n    user-select:none;\r\n  }\r\n\r\n  .az-track-scale-label{\r\n    position:absolute;\r\n    top:0;\r\n    transform:translateX(-50%);\r\n    font-size:10px;\r\n    line-height:1;\r\n    color:rgba(0,0,0,.58);\r\n    font-weight:800;\r\n    white-space:nowrap;\r\n  }\r\n\r\n  .az-track-scale-label::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    left:50%;\r\n    top:15px;\r\n    width:1px;\r\n    height:18px;\r\n    background:rgba(0,0,0,.16);\r\n    transform:translateX(-50%);\r\n  }\r\n\r\n  .az-track-bar-area{\r\n    position:relative;\r\n    padding:18px 0 0;\r\n  }\r\n\r\n  .az-track-bar-shell{\r\n    position:relative;\r\n    height:24px;\r\n    border-radius:999px;\r\n    background:\r\n      linear-gradient(180deg, rgba(0,0,0,.10), rgba(0,0,0,.035)),\r\n      rgba(255,255,255,.92);\r\n    border:1px solid rgba(0,0,0,.12);\r\n    overflow:visible;\r\n    box-shadow:\r\n      inset 0 2px 5px rgba(0,0,0,.10),\r\n      0 8px 18px rgba(0,0,0,.06);\r\n    cursor:pointer;\r\n    touch-action:none;\r\n  }\r\n\r\n  .az-track-bar-fill{\r\n    position:absolute;\r\n    left:0;\r\n    top:0;\r\n    height:100%;\r\n    width:0%;\r\n    border-radius:999px;\r\n    background:\r\n      linear-gradient(90deg,\r\n        rgba(53,214,41,.95) 0%,\r\n        rgba(31,184,44,.98) 42%,\r\n        rgba(8,145,55,.98) 100%);\r\n    box-shadow:\r\n      0 0 18px rgba(53,214,41,.42),\r\n      inset 0 1px 0 rgba(255,255,255,.44);\r\n    transition:width 1.55s cubic-bezier(.18,.9,.22,1);\r\n    pointer-events:none;\r\n  }\r\n\r\n  .az-track-bar-fill.az-track-bar-fill--pulse{\r\n    animation:azTrackPulse .7s ease-in-out;\r\n  }\r\n\r\n  .az-track-pointer{\r\n    position:absolute;\r\n    top:50%;\r\n    left:0%;\r\n    width:30px;\r\n    height:30px;\r\n    border-radius:50%;\r\n    background:#fff;\r\n    border:4px solid #16a34a;\r\n    box-shadow:\r\n      0 8px 18px rgba(0,0,0,.20),\r\n      0 0 18px rgba(53,214,41,.40);\r\n    transform:translate(-50%,-50%);\r\n    transition:left 1.55s cubic-bezier(.18,.9,.22,1), transform .15s ease;\r\n    z-index:4;\r\n    cursor:pointer;\r\n    touch-action:none;\r\n  }\r\n\r\n  .az-track-pointer::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:5px;\r\n    border-radius:50%;\r\n    background:#16a34a;\r\n  }\r\n\r\n  .az-track-pointer:hover{\r\n    transform:translate(-50%,-50%) scale(1.14);\r\n  }\r\n\r\n  .az-track-wrap.az-track-manual .az-track-pointer{\r\n    transform:translate(-50%,-50%) scale(1.08);\r\n  }\r\n\r\n  .az-track-wrap.az-track-dragging .az-track-pointer{\r\n    cursor:grabbing;\r\n    transform:translate(-50%,-50%) scale(1.14);\r\n  }\r\n\r\n  .az-track-wrap.az-track-manual .az-track-bar-fill,\r\n  .az-track-wrap.az-track-manual .az-track-pointer{\r\n    transition:none;\r\n  }\r\n\r\n  .az-track-hint{\r\n    position:absolute;\r\n    left:0%;\r\n    top:-18px;\r\n    z-index:8;\r\n    transform:translateX(-50%);\r\n    display:none;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:34px;\r\n    padding:8px 14px;\r\n    border-radius:999px;\r\n    background:#111;\r\n    color:#fff !important;\r\n    text-decoration:none !important;\r\n    font-size:13px;\r\n    line-height:1;\r\n    font-weight:900;\r\n    white-space:nowrap;\r\n    box-shadow:0 10px 24px rgba(0,0,0,.18);\r\n    cursor:pointer;\r\n  }\r\n\r\n  .az-track-hint::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    left:50%;\r\n    bottom:-6px;\r\n    width:12px;\r\n    height:12px;\r\n    background:#111;\r\n    transform:translateX(-50%) rotate(45deg);\r\n    border-radius:2px;\r\n  }\r\n\r\n  .az-track-hint.az-track-hint--show{\r\n    display:inline-flex;\r\n    animation:\r\n      azTrackHintPop .30s ease both,\r\n      azTrackHintGlow 1.6s ease-in-out infinite;\r\n  }\r\n\r\n  .az-track-message{\r\n    min-height:58px;\r\n    margin:14px 0 0;\r\n    padding:12px 14px;\r\n    border-radius:16px;\r\n    border:1px solid rgba(48,190,34,.26);\r\n    background:\r\n      linear-gradient(135deg, rgba(48,190,34,.08), rgba(255,255,255,.90) 48%, rgba(184,137,45,.10));\r\n    color:rgba(0,0,0,.76);\r\n    font-size:15px;\r\n    line-height:1.45;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-track-message.az-track-message--show{\r\n    animation:azTrackMessageIn .34s ease both;\r\n  }\r\n\r\n  .az-track-message strong{\r\n    color:#111;\r\n    font-weight:900;\r\n  }\r\n\r\n  @media (max-width:760px){\r\n    .az-track-card{\r\n      max-width:94%;\r\n      padding:10px;\r\n      border-radius:20px;\r\n    }\r\n\r\n    .az-track-inner{\r\n      padding:16px 10px 12px;\r\n      border-radius:18px;\r\n    }\r\n\r\n    .az-track-head{\r\n      flex-direction:column;\r\n      align-items:center;\r\n      text-align:center;\r\n      gap:10px;\r\n    }\r\n\r\n    .az-track-title{\r\n      font-size:15px;\r\n      text-align:center;\r\n    }\r\n\r\n    .az-track-live{\r\n      justify-content:center;\r\n      text-align:center;\r\n      min-width:0;\r\n    }\r\n\r\n    .az-track-live-number{\r\n      font-size:34px;\r\n    }\r\n\r\n    .az-track-scale{\r\n      height:54px;\r\n      margin-top:4px;\r\n    }\r\n\r\n    .az-track-scale-label{\r\n      font-size:9px;\r\n    }\r\n\r\n    .az-track-scale-label:nth-child(even){\r\n      top:22px;\r\n    }\r\n\r\n    .az-track-scale-label:nth-child(even)::after{\r\n      top:-7px;\r\n      height:12px;\r\n    }\r\n\r\n    .az-track-hint{\r\n      font-size:12px;\r\n      padding:8px 12px;\r\n      top:-17px;\r\n    }\r\n\r\n    .az-track-message{\r\n      font-size:14px;\r\n      min-height:70px;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce){\r\n    .az-track-card,\r\n    .az-track-bar-fill,\r\n    .az-track-pointer,\r\n    .az-track-live-number.az-track-live-number--boom,\r\n    .az-track-message.az-track-message--show,\r\n    .az-track-hint.az-track-hint--show{\r\n      animation:none !important;\r\n      transition:none !important;\r\n    }\r\n  }\r\n\r\n  \/* Mobile: zewn\u0119trzny box 5 px od obu kraw\u0119dzi ekranu. *\/\r\n  @media (max-width:781px){\r\n    .az-track-wrap{\r\n      box-sizing:border-box!important;\r\n      width:calc(var(--az-track-viewport,100vw) - 10px)!important;\r\n      max-width:none!important;\r\n      min-width:0!important;\r\n      padding-left:0!important;\r\n      padding-right:0!important;\r\n      margin-left:var(--az-track-offset,calc(50% - 50vw + 5px))!important;\r\n      margin-right:0!important;\r\n    }\r\n    .az-track-wrap > .az-track-card{\r\n      box-sizing:border-box!important;\r\n      width:100%!important;\r\n      max-width:none!important;\r\n      margin-left:0!important;\r\n      margin-right:0!important;\r\n    }\r\n  }\r\n\r\n<\/style>\r\n\r\n<div class=\"az-track-wrap\">\r\n  <div class=\"az-track-card\">\r\n    <div class=\"az-track-inner\">\r\n\r\n      <div class=\"az-track-head\">\r\n        <h3 class=\"az-track-title\">Kompletne szyny aluminiowe + akcesoria. Do 7 metr\u00f3w w jednym odcinku.<\/h3>\r\n\r\n        <div class=\"az-track-live\" aria-label=\"Wylosowany wymiar szyny\">\r\n          <span class=\"az-track-live-label\">wymiar<\/span>\r\n          <span class=\"az-track-live-number\">50<\/span>\r\n          <span class=\"az-track-live-unit\">cm<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"az-track-scale\" aria-hidden=\"true\"><\/div>\r\n\r\n      <div class=\"az-track-bar-area\">\r\n        <div\r\n          class=\"az-track-bar-shell\"\r\n          role=\"slider\"\r\n          aria-label=\"Wybierz d\u0142ugo\u015b\u0107 szyny aluminiowej\"\r\n          aria-valuemin=\"50\"\r\n          aria-valuemax=\"700\"\r\n          aria-valuenow=\"50\"\r\n          tabindex=\"0\">\r\n          <div class=\"az-track-bar-fill\"><\/div>\r\n          <div class=\"az-track-pointer\"><\/div>\r\n        <\/div>\r\n\r\n        <a\r\n          class=\"az-track-hint\"\r\n          href=\"https:\/\/karniszewarszawa.pl\/#kontakt\"\r\n          target=\"_blank\"\r\n          rel=\"noopener\"\r\n          aria-label=\"Kliknij i zam\u00f3w szyn\u0119 aluminiow\u0105\">\r\n          Kliknij i zam\u00f3w.\r\n        <\/a>\r\n      <\/div>\r\n\r\n      <div class=\"az-track-message\">\r\n        Tw\u00f3j karnisz wykonamy na dok\u0142adny rozmiar, jaki potrzebujesz.\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  const min = 50;\r\n  const max = 700;\r\n  const step = 50;\r\n  const orderUrl = 'https:\/\/osklep.pl\/products\/karnisz-elektryczny-warszawa-rf-wifi-5w-zigbee';\r\n\r\n  const wrap = document.querySelector('.az-track-wrap');\r\n  if(!wrap) return;\r\n\r\n  const card = wrap.querySelector('.az-track-card');\r\n  const scale = wrap.querySelector('.az-track-scale');\r\n  const bar = wrap.querySelector('.az-track-bar-shell');\r\n  const fill = wrap.querySelector('.az-track-bar-fill');\r\n  const pointer = wrap.querySelector('.az-track-pointer');\r\n  const numberEl = wrap.querySelector('.az-track-live-number');\r\n  const message = wrap.querySelector('.az-track-message');\r\n  const hint = wrap.querySelector('.az-track-hint');\r\n\r\n  const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  let currentValue = min;\r\n  let autoTimer = null;\r\n  let hintHideTimer = null;\r\n  let isManual = false;\r\n  let isDragging = false;\r\n  let lastUserValue = min;\r\n\r\n  function clamp(value, minValue, maxValue){\r\n    return Math.max(minValue, Math.min(maxValue, value));\r\n  }\r\n\r\n  function valueToPercent(value){\r\n    return ((value - min) \/ (max - min)) * 100;\r\n  }\r\n\r\n  function percentToValue(percent){\r\n    return Math.round(min + ((max - min) * (percent \/ 100)));\r\n  }\r\n\r\n  function randomBetweenRanges(){\r\n    const rangesCount = Math.floor((max - min) \/ step);\r\n    const rangeIndex = Math.floor(Math.random() * rangesCount);\r\n    const rangeStart = min + (rangeIndex * step);\r\n\r\n    return Math.floor(rangeStart + 1 + Math.random() * (step - 2));\r\n  }\r\n\r\n  function renderScale(){\r\n    scale.innerHTML = '';\r\n\r\n    for(let value = min; value <= max; value += step){\r\n      const label = document.createElement('span');\r\n      label.className = 'az-track-scale-label';\r\n      label.textContent = value;\r\n      label.style.left = valueToPercent(value) + '%';\r\n      scale.appendChild(label);\r\n    }\r\n  }\r\n\r\n  function setPosition(value){\r\n    const safeValue = clamp(value, min, max);\r\n    const percent = valueToPercent(safeValue);\r\n\r\n    fill.style.width = percent + '%';\r\n    pointer.style.left = percent + '%';\r\n    hint.style.left = percent + '%';\r\n    bar.setAttribute('aria-valuenow', safeValue);\r\n\r\n    currentValue = safeValue;\r\n  }\r\n\r\n  function setMessage(value){\r\n    message.innerHTML =\r\n      'Tw\u00f3j karnisz wykonamy na dok\u0142adny rozmiar, jaki potrzebujesz. <strong>' +\r\n      value +\r\n      ' cm<\/strong>';\r\n\r\n    message.classList.remove('az-track-message--show');\r\n    void message.offsetWidth;\r\n    message.classList.add('az-track-message--show');\r\n  }\r\n\r\n  function boomNumber(){\r\n    numberEl.classList.remove('az-track-live-number--boom');\r\n    void numberEl.offsetWidth;\r\n    numberEl.classList.add('az-track-live-number--boom');\r\n  }\r\n\r\n  function pulseFill(){\r\n    fill.classList.remove('az-track-bar-fill--pulse');\r\n    void fill.offsetWidth;\r\n    fill.classList.add('az-track-bar-fill--pulse');\r\n  }\r\n\r\n  function animateNumber(from, to, duration){\r\n    const startTime = performance.now();\r\n\r\n    function tick(now){\r\n      const elapsed = now - startTime;\r\n      const progress = Math.min(elapsed \/ duration, 1);\r\n      const eased = 1 - Math.pow(1 - progress, 2.2);\r\n      const current = Math.round(from + ((to - from) * eased));\r\n\r\n      numberEl.textContent = current;\r\n\r\n      if(progress < 1){\r\n        requestAnimationFrame(tick);\r\n      } else {\r\n        numberEl.textContent = to;\r\n        boomNumber();\r\n      }\r\n    }\r\n\r\n    requestAnimationFrame(tick);\r\n  }\r\n\r\n  function clearAuto(){\r\n    if(autoTimer){\r\n      clearTimeout(autoTimer);\r\n      autoTimer = null;\r\n    }\r\n  }\r\n\r\n  function clearHintTimer(){\r\n    if(hintHideTimer){\r\n      clearTimeout(hintHideTimer);\r\n      hintHideTimer = null;\r\n    }\r\n  }\r\n\r\n  function hideHint(){\r\n    clearHintTimer();\r\n    hint.classList.remove('az-track-hint--show');\r\n  }\r\n\r\n  function showHint(value){\r\n    clearHintTimer();\r\n    hint.style.left = valueToPercent(value) + '%';\r\n    hint.classList.remove('az-track-hint--show');\r\n    void hint.offsetWidth;\r\n    hint.classList.add('az-track-hint--show');\r\n  }\r\n\r\n  function scheduleHintHide(){\r\n    clearHintTimer();\r\n    hintHideTimer = setTimeout(function(){\r\n      if(!hint.matches(':hover') && !pointer.matches(':hover')){\r\n        hideHint();\r\n      }\r\n    }, 260);\r\n  }\r\n\r\n  function manualValueFromEvent(event){\r\n    const rect = bar.getBoundingClientRect();\r\n    const clientX = event.touches && event.touches[0] ? event.touches[0].clientX : event.clientX;\r\n    const percent = clamp(((clientX - rect.left) \/ rect.width) * 100, 0, 100);\r\n    return percentToValue(percent);\r\n  }\r\n\r\n  function updateManual(event){\r\n    const value = manualValueFromEvent(event);\r\n    lastUserValue = value;\r\n\r\n    setPosition(value);\r\n    numberEl.textContent = value;\r\n    setMessage(value);\r\n  }\r\n\r\n  function startManual(){\r\n    isManual = true;\r\n    clearAuto();\r\n    wrap.classList.add('az-track-manual');\r\n  }\r\n\r\n  function stopManual(){\r\n    isManual = false;\r\n    isDragging = false;\r\n    wrap.classList.remove('az-track-manual');\r\n    wrap.classList.remove('az-track-dragging');\r\n    hideHint();\r\n    autoTimer = setTimeout(loop, 1200);\r\n  }\r\n\r\n  function loop(){\r\n    if(isManual || isDragging) return;\r\n\r\n    const fromValue = currentValue;\r\n    const nextValue = randomBetweenRanges();\r\n\r\n    message.classList.remove('az-track-message--show');\r\n    fill.classList.remove('az-track-bar-fill--pulse');\r\n    hideHint();\r\n\r\n    setPosition(nextValue);\r\n\r\n    if(prefersReducedMotion){\r\n      numberEl.textContent = nextValue;\r\n      setMessage(nextValue);\r\n      return;\r\n    }\r\n\r\n    animateNumber(fromValue, nextValue, 1500);\r\n\r\n    setTimeout(function(){\r\n      if(isManual || isDragging) return;\r\n\r\n      pulseFill();\r\n      setMessage(nextValue);\r\n      boomNumber();\r\n\r\n      currentValue = nextValue;\r\n    }, 1580);\r\n\r\n    autoTimer = setTimeout(loop, 4300);\r\n  }\r\n\r\n  renderScale();\r\n  setPosition(min);\r\n\r\n  card.addEventListener('mouseenter', function(){\r\n    startManual();\r\n  });\r\n\r\n  card.addEventListener('mouseleave', function(){\r\n    stopManual();\r\n  });\r\n\r\n  pointer.addEventListener('mouseenter', function(){\r\n    showHint(currentValue);\r\n  });\r\n\r\n  pointer.addEventListener('mouseleave', function(){\r\n    scheduleHintHide();\r\n  });\r\n\r\n  hint.addEventListener('mouseenter', function(){\r\n    clearHintTimer();\r\n  });\r\n\r\n  hint.addEventListener('mouseleave', function(){\r\n    scheduleHintHide();\r\n  });\r\n\r\n  pointer.addEventListener('click', function(event){\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    window.open(orderUrl, '_blank', 'noopener');\r\n  });\r\n\r\n  hint.addEventListener('click', function(event){\r\n    event.stopPropagation();\r\n  });\r\n\r\n  bar.addEventListener('pointerdown', function(event){\r\n    event.preventDefault();\r\n    startManual();\r\n    isDragging = true;\r\n    wrap.classList.add('az-track-dragging');\r\n    bar.setPointerCapture(event.pointerId);\r\n    updateManual(event);\r\n    hideHint();\r\n  });\r\n\r\n  bar.addEventListener('pointermove', function(event){\r\n    if(!isManual && !isDragging) return;\r\n    updateManual(event);\r\n  });\r\n\r\n  bar.addEventListener('pointerup', function(event){\r\n    isDragging = false;\r\n    wrap.classList.remove('az-track-dragging');\r\n\r\n    try{\r\n      bar.releasePointerCapture(event.pointerId);\r\n    }catch(e){}\r\n\r\n    boomNumber();\r\n\r\n    if(pointer.matches(':hover')){\r\n      showHint(lastUserValue);\r\n    }\r\n  });\r\n\r\n  bar.addEventListener('click', function(event){\r\n    if(event.target === hint || event.target === pointer) return;\r\n    updateManual(event);\r\n    boomNumber();\r\n    pulseFill();\r\n  });\r\n\r\n  bar.addEventListener('keydown', function(event){\r\n    let value = currentValue;\r\n\r\n    if(event.key === 'ArrowLeft') value -= 1;\r\n    if(event.key === 'ArrowRight') value += 1;\r\n    if(event.key === 'PageDown') value -= 50;\r\n    if(event.key === 'PageUp') value += 50;\r\n    if(event.key === 'Home') value = min;\r\n    if(event.key === 'End') value = max;\r\n\r\n    if(value !== currentValue){\r\n      event.preventDefault();\r\n      startManual();\r\n\r\n      value = clamp(value, min, max);\r\n      lastUserValue = value;\r\n\r\n      setPosition(value);\r\n      numberEl.textContent = value;\r\n      setMessage(value);\r\n      boomNumber();\r\n      pulseFill();\r\n\r\n      if(pointer.matches(':hover')){\r\n        showHint(value);\r\n      }\r\n    }\r\n  });\r\n\r\n  autoTimer = setTimeout(loop, 700);\r\n})();\r\n<\/script> \r\n<!-- Dopasowanie do faktycznej pozycji kontenera Kadence. -->\r\n<script>\r\n(function(){\r\n  'use strict';\r\n  function initWidths(){\r\n    document.querySelectorAll('.az-track-wrap').forEach(function(wrap){\r\n      if(wrap.dataset.viewportFit==='true') return;\r\n      wrap.dataset.viewportFit='true';\r\n      const mobile=window.matchMedia('(max-width:781px)');\r\n      let frame=null;\r\n      function fit(){\r\n        frame=null;\r\n        if(!wrap.isConnected) return;\r\n        if(!mobile.matches){\r\n          wrap.style.removeProperty('--az-track-viewport');\r\n          wrap.style.removeProperty('--az-track-offset');\r\n          return;\r\n        }\r\n        const viewport=document.documentElement.clientWidth;\r\n        if(!viewport) return;\r\n        wrap.style.setProperty('--az-track-viewport',viewport+'px');\r\n        const current=parseFloat(window.getComputedStyle(wrap).marginLeft)||0;\r\n        const correction=5-wrap.getBoundingClientRect().left;\r\n        if(Math.abs(correction)>.1){\r\n          wrap.style.setProperty('--az-track-offset',(current+correction)+'px');\r\n        }\r\n      }\r\n      function schedule(){\r\n        if(frame!==null) window.cancelAnimationFrame(frame);\r\n        frame=window.requestAnimationFrame(fit);\r\n      }\r\n      fit();\r\n      window.addEventListener('resize',schedule);\r\n      if(mobile.addEventListener) mobile.addEventListener('change',schedule);\r\n      if('ResizeObserver' in window){\r\n        const observer=new ResizeObserver(schedule);\r\n        observer.observe(wrap);\r\n        if(wrap.parentElement) observer.observe(wrap.parentElement);\r\n      }\r\n      if(document.fonts) document.fonts.ready.then(schedule);\r\n    });\r\n  }\r\n  initWidths();\r\n  if(document.readyState==='loading'){\r\n    document.addEventListener('DOMContentLoaded',initWidths,{once:true});\r\n  }\r\n})();\r\n<\/script>\r\n\n<!-- \/end HFCM by 99 Robots -->\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"tel:+48667067777\">Szybki kontakt +48 667 067 777<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"mailto:kontakt@karniszewarszawa.pl\">kontakt@karniszewarszawa.pl<\/a><\/div>\n<\/div>\n\n\n<!-- HFCM by 99 Robots - Snippet # 17: 3 box info -->\n<!-- AZHOME \u2014 KARNISZE KS NA WYMIAR -->\r\n<style>\r\n.kw-ks-info {\r\n  --ks-green: #38533a;\r\n  --ks-text: #262c25;\r\n  --ks-muted: #62695e;\r\n  --ks-line: #dfe5d9;\r\n\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  max-width: 1240px;\r\n  margin: 28px auto;\r\n  padding: clamp(20px, 4vw, 44px);\r\n\r\n  border: 1px solid var(--ks-line);\r\n  border-radius: 24px;\r\n  background: linear-gradient(135deg, #ffffff 35%, #f5f7f2);\r\n  box-shadow: 0 14px 40px rgba(40, 58, 35, .06);\r\n\r\n  color: var(--ks-text);\r\n  font-family: inherit;\r\n}\r\n\r\n.kw-ks-info *,\r\n.kw-ks-info *::before,\r\n.kw-ks-info *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__eyebrow {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  margin: 0 0 14px;\r\n  color: var(--ks-green);\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n  line-height: 1.5;\r\n  letter-spacing: .12em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.kw-ks-info__eyebrow::before {\r\n  content: \"\";\r\n  flex: 0 0 8px;\r\n  height: 8px;\r\n  border-radius: 50%;\r\n  background: var(--ks-green);\r\n  box-shadow: 0 0 0 5px rgba(56, 83, 58, .08);\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__title {\r\n  margin: 0 0 16px;\r\n  padding: 0;\r\n  color: var(--ks-text);\r\n  font-size: clamp(25px, 3vw, 38px);\r\n  font-weight: 800;\r\n  line-height: 1.18;\r\n  letter-spacing: -.035em;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-ks-info__title span {\r\n  color: var(--ks-green);\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__lead {\r\n  max-width: 850px;\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--ks-muted);\r\n  font-size: 16px;\r\n  line-height: 1.75;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__features {\r\n  display: grid;\r\n  grid-template-columns: repeat(3, minmax(0, 1fr));\r\n  gap: 14px;\r\n  margin: 26px 0;\r\n  padding: 0;\r\n  list-style: none;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__feature {\r\n  min-width: 0;\r\n  margin: 0;\r\n  padding: 22px;\r\n  border: 1px solid var(--ks-line);\r\n  border-radius: 16px;\r\n  background: rgba(255, 255, 255, .85);\r\n  list-style: none;\r\n}\r\n\r\n.kw-ks-info__number {\r\n  display: inline-grid;\r\n  place-items: center;\r\n  width: 34px;\r\n  height: 34px;\r\n  margin-bottom: 15px;\r\n  border-radius: 10px;\r\n  background: #eff3eb;\r\n  color: var(--ks-green);\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__feature h3 {\r\n  margin: 0 0 8px;\r\n  padding: 0;\r\n  color: var(--ks-text);\r\n  font-size: 18px;\r\n  font-weight: 750;\r\n  line-height: 1.3;\r\n  letter-spacing: -.02em;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__feature p {\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--ks-muted);\r\n  font-size: 14px;\r\n  line-height: 1.65;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__feature strong {\r\n  color: var(--ks-green);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-ks-info__bottom {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 18px;\r\n  padding-top: 22px;\r\n  border-top: 1px solid var(--ks-line);\r\n}\r\n\r\n.kw-ks-info__icon {\r\n  display: grid;\r\n  place-items: center;\r\n  flex: 0 0 44px;\r\n  height: 44px;\r\n  border: 1px solid var(--ks-line);\r\n  border-radius: 13px;\r\n  background: #fff;\r\n  color: var(--ks-green);\r\n}\r\n\r\n.kw-ks-info__icon svg {\r\n  display: block;\r\n  width: 23px;\r\n  height: 23px;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__bottom h3 {\r\n  margin: 0 0 5px;\r\n  padding: 0;\r\n  color: var(--ks-green);\r\n  font-size: 18px;\r\n  font-weight: 750;\r\n  line-height: 1.35;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-ks-info .kw-ks-info__bottom p {\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--ks-muted);\r\n  font-size: 14px;\r\n  line-height: 1.65;\r\n}\r\n\r\n@media (max-width: 767px) {\r\n  .kw-ks-info {\r\n    margin: 20px auto;\r\n    padding: 20px 16px;\r\n    border-radius: 18px;\r\n  }\r\n\r\n  .kw-ks-info .kw-ks-info__lead {\r\n    font-size: 14px;\r\n    line-height: 1.7;\r\n  }\r\n\r\n  .kw-ks-info .kw-ks-info__features {\r\n    grid-template-columns: minmax(0, 1fr);\r\n    gap: 10px;\r\n    margin: 22px 0;\r\n  }\r\n\r\n  .kw-ks-info .kw-ks-info__feature {\r\n    display: grid;\r\n    grid-template-columns: 34px minmax(0, 1fr);\r\n    align-items: start;\r\n    gap: 12px;\r\n    padding: 16px;\r\n    border-radius: 13px;\r\n  }\r\n\r\n  .kw-ks-info__number {\r\n    margin: 0;\r\n  }\r\n\r\n  .kw-ks-info .kw-ks-info__feature h3 {\r\n    font-size: 17px;\r\n  }\r\n\r\n  .kw-ks-info__bottom {\r\n    align-items: flex-start;\r\n    gap: 12px;\r\n    padding-top: 18px;\r\n  }\r\n\r\n  .kw-ks-info .kw-ks-info__bottom h3 {\r\n    font-size: 17px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"kw-ks-info\"\r\n  aria-label=\"Karnisze KS na wymiar z monta\u017cem w Warszawie\">\r\n\r\n  <p class=\"kw-ks-info__eyebrow\">\r\n    AZHOME \u00b7 producent szyn aluminiowych\r\n  <\/p>\r\n\r\n  <h2 class=\"kw-ks-info__title\">\r\n    Karnisze KS Warszawa.<br>\r\n    <span>Dok\u0142adnie na Tw\u00f3j wymiar.<\/span>\r\n  <\/h2>\r\n\r\n  <p class=\"kw-ks-info__lead\">\r\n    Produkujemy aluminiowe szyny sufitowe KS \u2014 minimalistyczne,\r\n    solidne i wygodne rozwi\u0105zanie do zawieszania zas\u0142on oraz firan.\r\n    Wykonujemy karnisze proste i gi\u0119te, dopasowane do uk\u0142adu\r\n    Twojego domu lub biura.\r\n  <\/p>\r\n\r\n  <ul class=\"kw-ks-info__features\">\r\n\r\n    <li class=\"kw-ks-info__feature\">\r\n      <span class=\"kw-ks-info__number\" aria-hidden=\"true\">01<\/span>\r\n      <div>\r\n        <h3>Dok\u0142adny wymiar<\/h3>\r\n        <p>\r\n          Potrzebujesz <strong>439 cm?<\/strong>\r\n          Otrzymasz szyn\u0119 o d\u0142ugo\u015bci <strong>439 cm<\/strong>,\r\n          przygotowan\u0105 na Twoje zam\u00f3wienie.\r\n        <\/p>\r\n      <\/div>\r\n    <\/li>\r\n\r\n    <li class=\"kw-ks-info__feature\">\r\n      <span class=\"kw-ks-info__number\" aria-hidden=\"true\">02<\/span>\r\n      <div>\r\n        <h3>Do 7 metr\u00f3w w jednym odcinku<\/h3>\r\n        <p>\r\n          Maksymalna d\u0142ugo\u015b\u0107 pojedynczej szyny wynosi\r\n          <strong>7 metr\u00f3w<\/strong> \u2014 bez \u0142\u0105czenia kr\u00f3tszych element\u00f3w.\r\n        <\/p>\r\n      <\/div>\r\n    <\/li>\r\n\r\n    <li class=\"kw-ks-info__feature\">\r\n      <span class=\"kw-ks-info__number\" aria-hidden=\"true\">03<\/span>\r\n      <div>\r\n        <h3>Proste lub gi\u0119te<\/h3>\r\n        <p>\r\n          Wybierz szyn\u0119 prost\u0105 albo wersj\u0119\r\n          <strong>z zakr\u0119tami<\/strong>, dopasowan\u0105 do naro\u017cnik\u00f3w\r\n          i uk\u0142adu pomieszczenia.\r\n        <\/p>\r\n      <\/div>\r\n    <\/li>\r\n\r\n  <\/ul>\r\n\r\n  <div class=\"kw-ks-info__bottom\">\r\n    <span class=\"kw-ks-info__icon\" aria-hidden=\"true\">\r\n      <svg viewBox=\"0 0 24 24\"\r\n        fill=\"none\"\r\n        stroke=\"currentColor\"\r\n        stroke-width=\"1.6\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\">\r\n        <path d=\"M20 10c0 6-8 12-8 12S4 16 4 10a8 8 0 1 1 16 0Z\"\/>\r\n        <circle cx=\"12\" cy=\"10\" r=\"2.5\"\/>\r\n      <\/svg>\r\n    <\/span>\r\n\r\n    <div>\r\n      <h3>Karnisze KS z monta\u017cem w Warszawie<\/h3>\r\n      <p>\r\n        Zam\u00f3w aluminiowe szyny sufitowe na wymiar wraz z monta\u017cem.\r\n        Obs\u0142ugujemy Warszaw\u0119 i okolice.\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-4bf43a18 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/09\/aluminiowe-szyny-poprawiony-cien.webp\" alt=\"Aluminiowe szyny sufitowe Warszawa\" class=\"wp-image-231\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading has-text-color has-link-color wp-elements-1\" style=\"color:#222222;font-size:23px\"><strong>Producent karniszy z Warszawy<\/strong><\/h2>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-2 wp-block-paragraph\" style=\"color:#222222;letter-spacing:1px;line-height:2.2\">Nasza oferta skierowana jest do <strong>klient\u00f3w indywidualnych<\/strong>, firm, hoteli, a tak\u017ce do firm wyko\u0144czeniowych, firm z bran\u017cy wystroju wn\u0119trz, architekt\u00f3w. Oferujemy elementy do produkcji karniszy lub gotowe produkty w atrakcyjnych cenach. Nasza produkcja pozwala na <strong>termin realizacji w 24 godziny<\/strong>. Jeste\u015bmy tak\u017ce <a title=\"Szycie zas\u0142on Warszawa\" href=\"https:\/\/szyciezaslon.pl\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">producentem zas\u0142on<\/a> i firan. Mo\u017cesz zam\u00f3wi\u0107 zas\u0142ony do ka\u017cdego wn\u0119trza i w ka\u017cdej ilo\u015bci. Posiadamy du\u017ce do\u015bwiadczenie w realizacjach dla klient\u00f3w indywidualnych oraz w przypadku zam\u00f3wie\u0144 komercyjnych.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"tel:+48667067777\">Szybki kontakt +48 667 067 777<\/a><\/div>\n<\/div>\n\n\n<!-- HFCM by 99 Robots - Snippet # 9: opinie -->\n<!-- AZHOME \u2014 opinie Google, wersja 2. Liczba i ocena pochodz\u0105 z podanego modu\u0142u. -->\r\n<section class=\"kw-reviews-v2\" aria-label=\"Opinie klient\u00f3w AZHOME w Google\">\r\n<style>\r\n.kw-reviews-v2{\r\n  --kw-green:#38533a;--kw-ink:#242820;--kw-muted:#62685e;--kw-line:#dce2d7;\r\n  width:100%;max-width:980px;margin:30px auto;padding:0 12px;\r\n  font-family:inherit;color:var(--kw-ink);box-sizing:border-box;\r\n}\r\n.kw-reviews-v2 *,.kw-reviews-v2 *::before,.kw-reviews-v2 *::after{box-sizing:border-box}\r\n.kw-reviews-v2 .kw-panel{background:#fff;border:1px solid var(--kw-line);border-radius:22px;overflow:hidden;box-shadow:0 16px 40px rgba(25,40,20,.07)}\r\n.kw-reviews-v2 .kw-main{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(230px,.9fr);gap:32px;align-items:center;padding:34px}\r\n.kw-reviews-v2 .kw-copy{min-width:0}\r\n.kw-reviews-v2 .kw-rating{display:flex;align-items:center;gap:18px;margin-bottom:19px}\r\n.kw-reviews-v2 .kw-score{color:var(--kw-ink);font-size:64px;font-weight:800;line-height:1;letter-spacing:-3px;white-space:nowrap}\r\n.kw-reviews-v2 .kw-stars{color:#ae7b22;font-size:23px;line-height:1.2;letter-spacing:2px;white-space:nowrap}\r\n.kw-reviews-v2 .kw-rating-label{margin-top:5px;font-size:12px;line-height:1.4;color:var(--kw-muted)}\r\n.kw-reviews-v2 h2{margin:0 0 11px;color:var(--kw-ink);font-size:clamp(26px,3.6vw,34px);line-height:1.13;font-weight:750;letter-spacing:-1px;text-wrap:balance}\r\n.kw-reviews-v2 .kw-description{margin:0;font-size:15px;line-height:1.6;color:var(--kw-muted)}\r\n.kw-reviews-v2 .kw-action{min-width:0;border-left:1px solid var(--kw-line);padding-left:32px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px}\r\n.kw-reviews-v2 .kw-google{font-family:Arial,sans-serif;font-size:25px;line-height:1.2;font-weight:600;letter-spacing:-1px}\r\n.kw-reviews-v2 .kw-google span:nth-child(1),.kw-reviews-v2 .kw-google span:nth-child(4){color:#4285f4}\r\n.kw-reviews-v2 .kw-google span:nth-child(2),.kw-reviews-v2 .kw-google span:nth-child(6){color:#ea4335}\r\n.kw-reviews-v2 .kw-google span:nth-child(3){color:#b98400}\r\n.kw-reviews-v2 .kw-google span:nth-child(5){color:#25823a}\r\n.kw-reviews-v2 .kw-count-box{display:flex;flex-direction:column;align-items:center}\r\n.kw-reviews-v2 .kw-count{display:block;min-width:3ch;font-family:Arial,sans-serif;font-size:clamp(72px,9vw,92px);line-height:1.03;font-weight:800;letter-spacing:-5px;font-variant-numeric:tabular-nums;color:var(--kw-green)}\r\n.kw-reviews-v2 .kw-count-caption{font-size:15px;line-height:1.4;color:var(--kw-muted);margin-top:3px}\r\n.kw-reviews-v2 .kw-button{display:flex;align-items:center;justify-content:center;gap:20px;min-height:48px;width:100%;margin-top:4px;padding:14px 18px;border-radius:10px;background:var(--kw-green);color:#fff!important;text-decoration:none!important;font-size:14px;line-height:1.3;font-weight:700;transition:transform .2s,background .2s}\r\n.kw-reviews-v2 .kw-button:hover{background:#283d2a;transform:translateY(-2px)}\r\n.kw-reviews-v2 .kw-button:focus-visible{outline:3px solid #4285f4;outline-offset:3px}\r\n.kw-reviews-v2 .kw-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:17px 28px;background:#f3f5ef;border-top:1px solid var(--kw-line);font-size:12px;line-height:1.5;color:var(--kw-muted)}\r\n.kw-reviews-v2 .kw-foot strong{font-weight:750;letter-spacing:1.2px;color:var(--kw-green)}\r\n.kw-reviews-v2 .kw-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\r\n@media(max-width:560px){\r\n  .kw-reviews-v2{margin:24px auto;padding:0 8px}\r\n  .kw-reviews-v2 .kw-panel{border-radius:18px}\r\n  .kw-reviews-v2 .kw-main{grid-template-columns:1fr;gap:24px;padding:24px 20px}\r\n  .kw-reviews-v2 .kw-rating{gap:16px;margin-bottom:18px}\r\n  .kw-reviews-v2 .kw-score{font-size:58px}\r\n  .kw-reviews-v2 .kw-stars{font-size:22px}\r\n  .kw-reviews-v2 h2{font-size:29px}\r\n  .kw-reviews-v2 .kw-description{font-size:14px}\r\n  .kw-reviews-v2 .kw-action{border-left:0;border-top:1px solid var(--kw-line);padding:22px 0 0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:17px 12px;align-items:center}\r\n  .kw-reviews-v2 .kw-google{font-size:30px;justify-self:center}\r\n  .kw-reviews-v2 .kw-count{font-size:76px;letter-spacing:-4px}\r\n  .kw-reviews-v2 .kw-count-caption{font-size:13px}\r\n  .kw-reviews-v2 .kw-button{grid-column:1\/-1;margin:0;min-height:50px}\r\n  .kw-reviews-v2 .kw-foot{padding:15px 20px;font-size:11px}\r\n}\r\n@media(max-width:350px){\r\n  .kw-reviews-v2 .kw-main{padding:22px 16px}\r\n  .kw-reviews-v2 h2{font-size:26px}\r\n  .kw-reviews-v2 .kw-count{font-size:66px}\r\n  .kw-reviews-v2 .kw-google{font-size:26px}\r\n}\r\n@media(prefers-reduced-motion:reduce){.kw-reviews-v2 .kw-button{transition:none}}\r\n<\/style>\r\n<div class=\"kw-panel\">\r\n  <div class=\"kw-main\">\r\n    <div class=\"kw-copy\">\r\n      <div class=\"kw-rating\" aria-label=\"Ocena 5 na 5 w Google\">\r\n        <span class=\"kw-score\" aria-hidden=\"true\">5,0<\/span>\r\n        <div aria-hidden=\"true\"><div class=\"kw-stars\">\u2605\u2605\u2605\u2605\u2605<\/div><div class=\"kw-rating-label\">Ocena klient\u00f3w w Google<\/div><\/div>\r\n      <\/div>\r\n      <h2>Sprawd\u017a, komu<br>powierzasz monta\u017c.<\/h2>\r\n      <p class=\"kw-description\">Opinie klient\u00f3w o AZHOME.<\/p>\r\n    <\/div>\r\n    <div class=\"kw-action\">\r\n      <div class=\"kw-google\" aria-label=\"Google\"><span>G<\/span><span>o<\/span><span>o<\/span><span>g<\/span><span>l<\/span><span>e<\/span><\/div>\r\n      <div class=\"kw-count-box\">\r\n        <!-- Zmieniaj\u0105c liczb\u0119 opinii, zmie\u0144 data-target, tekst licznika i tekst dla czytnika. -->\r\n        <span class=\"kw-count\" data-target=\"544\" aria-hidden=\"true\">544<\/span>\r\n        <span class=\"kw-count-caption\" aria-hidden=\"true\">opinii klient\u00f3w<\/span>\r\n        <span class=\"kw-sr\">544 opinii klient\u00f3w<\/span>\r\n      <\/div>\r\n      <a class=\"kw-button\" href=\"https:\/\/www.google.com\/maps?cid=10805085060045519056\" target=\"_blank\" rel=\"noopener nofollow\" aria-label=\"Przeczytaj opinie o AZHOME w Google \u2014 otwiera now\u0105 kart\u0119\">Przeczytaj opinie <span aria-hidden=\"true\">\u2197<\/span><\/a>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"kw-foot\"><strong>AZHOME<\/strong><span>Pomiar \u00b7 wykonanie \u00b7 monta\u017c<\/span><\/div>\r\n<\/div>\r\n<script>\r\n(function(){\r\n  'use strict';\r\n  function initAll(){\r\n  document.querySelectorAll('.kw-reviews-v2').forEach(function(root){\r\n  if(root.dataset.ready==='true') return;\r\n  const counter=root.querySelector('.kw-count');\r\n  if(!counter) return;\r\n  const target=Number(counter.dataset.target);\r\n  if(!Number.isFinite(target)) return;\r\n  root.dataset.ready='true';\r\n  const motion=window.matchMedia('(prefers-reduced-motion: reduce)');\r\n  const duration=1900;\r\n  const pause=5000;\r\n  let frame=null;\r\n  let timer=null;\r\n  let visible=!('IntersectionObserver' in window);\r\n  let observer=null;\r\n  function stop(){\r\n    window.cancelAnimationFrame(frame);\r\n    window.clearTimeout(timer);\r\n    frame=null;timer=null;\r\n    counter.textContent=String(target);\r\n  }\r\n  function allowed(){return root.isConnected && visible && !document.hidden && !motion.matches;}\r\n  function animate(){\r\n    if(!allowed()){stop();return;}\r\n    const start=performance.now();\r\n    counter.textContent='0';\r\n    function tick(now){\r\n      if(!allowed()){stop();return;}\r\n      const progress=Math.min((now-start)\/duration,1);\r\n      \/\/ Tempo zgodne z pierwotnym modu\u0142em: \u0142agodny start i przyspieszenie.\r\n      counter.textContent=String(Math.floor(Math.pow(progress,1.85)*target));\r\n      if(progress<1){frame=window.requestAnimationFrame(tick);}\r\n      else{\r\n        frame=null;\r\n        counter.textContent=String(target);\r\n        timer=window.setTimeout(animate,pause);\r\n      }\r\n    }\r\n    frame=window.requestAnimationFrame(tick);\r\n  }\r\n  function sync(){stop();if(allowed()) animate();}\r\n  if('IntersectionObserver' in window){\r\n    observer=new IntersectionObserver(function(entries){\r\n      const next=entries[0].isIntersecting;\r\n      if(next!==visible){visible=next;sync();}\r\n    },{threshold:0.15});\r\n    observer.observe(root);\r\n  }\r\n  document.addEventListener('visibilitychange',sync);\r\n  if(motion.addEventListener) motion.addEventListener('change',sync);\r\n  sync();\r\n  });\r\n  }\r\n  initAll();\r\n  if(document.readyState==='loading'){\r\n    document.addEventListener('DOMContentLoaded',initAll,{once:true});\r\n  }\r\n})();\r\n<\/script>\r\n<\/section>\r\n\n<!-- \/end HFCM by 99 Robots -->\n\n\n\n<\/div>\n<\/div>\n<!-- \/wp:post-content -->\n<!-- HFCM by 99 Robots - Snippet # 16: zestaw dla klienta -->\n<style>\r\n.kw-ks-kit {\r\n  --kit-green: #38533a;\r\n  --kit-text: #242820;\r\n  --kit-muted: #62685e;\r\n  --kit-line: #dce2d7;\r\n  --kit-soft: #f3f5ef;\r\n\r\n  width: 100%;\r\n  max-width: 1240px;\r\n  margin: 38px auto;\r\n  padding: 0 14px;\r\n  color: var(--kit-text);\r\n  font-family: inherit;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-ks-kit *,\r\n.kw-ks-kit *::before,\r\n.kw-ks-kit *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-ks-kit__panel {\r\n  display: grid;\r\n  grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);\r\n  align-items: stretch;\r\n  background: #fff;\r\n  border: 1px solid var(--kit-line);\r\n  border-radius: 22px;\r\n  overflow: hidden;\r\n  box-shadow: 0 16px 40px rgba(25, 40, 20, .07);\r\n}\r\n\r\n\/* LEWA KOLUMNA \u2014 NAG\u0141\u00d3WEK I ZDJ\u0118CIE *\/\r\n\r\n.kw-ks-kit__left {\r\n  display: flex;\r\n  flex-direction: column;\r\n  min-width: 0;\r\n  padding: clamp(24px, 3vw, 38px);\r\n  border-right: 1px solid var(--kit-line);\r\n  background: #fff;\r\n  container-type: inline-size;\r\n}\r\n\r\n.kw-ks-kit__header {\r\n  margin: 0 0 24px;\r\n}\r\n\r\n.kw-ks-kit__eyebrow {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  margin-bottom: 14px;\r\n  color: var(--kit-green);\r\n  font-size: 11px;\r\n  line-height: 1.4;\r\n  font-weight: 750;\r\n  letter-spacing: .13em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.kw-ks-kit__eyebrow::before {\r\n  content: \"\";\r\n  width: 7px;\r\n  height: 7px;\r\n  flex: 0 0 7px;\r\n  border-radius: 50%;\r\n  background: var(--kit-green);\r\n  box-shadow: 0 0 0 4px rgba(56, 83, 58, .09);\r\n}\r\n\r\n\/* TYTU\u0141 W JEDNYM WIERSZU *\/\r\n\r\n.kw-ks-kit .kw-ks-kit__title {\r\n  display: block;\r\n  width: 100%;\r\n  margin: 0 0 14px;\r\n  padding: 0;\r\n  color: var(--kit-text);\r\n  font-family: Arial, Helvetica, sans-serif;\r\n  font-size: 20px;\r\n  font-size: min(32px, 6.1cqi);\r\n  font-weight: 700;\r\n  line-height: 1.25;\r\n  letter-spacing: -.035em;\r\n  white-space: nowrap;\r\n  text-wrap: nowrap;\r\n}\r\n\r\n.kw-ks-kit__title span {\r\n  color: var(--kit-green);\r\n}\r\n\r\n.kw-ks-kit .kw-ks-kit__intro {\r\n  margin: 0;\r\n  color: var(--kit-muted);\r\n  font-size: 15px;\r\n  line-height: 1.7;\r\n}\r\n\r\n\/* ZDJ\u0118CIE POD WST\u0118PEM *\/\r\n\r\n.kw-ks-kit__visual {\r\n  min-width: 0;\r\n  width: 100%;\r\n  margin: 0;\r\n  padding: 0;\r\n}\r\n\r\n.kw-ks-kit__visual img {\r\n  display: block;\r\n  width: 100%;\r\n  max-width: 100%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  border: 0;\r\n  border-radius: 0;\r\n  box-shadow: none;\r\n}\r\n\r\n.kw-ks-kit__caption {\r\n  margin-top: 20px;\r\n  padding-top: 16px;\r\n  border-top: 1px solid var(--kit-line);\r\n  color: var(--kit-muted);\r\n  font-size: 12px;\r\n  line-height: 1.6;\r\n  text-align: center;\r\n}\r\n\r\n.kw-ks-kit__caption strong {\r\n  color: var(--kit-green);\r\n  font-weight: 750;\r\n  letter-spacing: .08em;\r\n}\r\n\r\n\/* PRAWA KOLUMNA \u2014 LISTA ELEMENT\u00d3W *\/\r\n\r\n.kw-ks-kit__content {\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  min-width: 0;\r\n  padding: clamp(24px, 3vw, 38px);\r\n  background: linear-gradient(145deg, #fff 45%, #f7f8f4);\r\n}\r\n\r\n.kw-ks-kit .kw-ks-kit__list {\r\n  display: grid;\r\n  gap: 0;\r\n  margin: 0;\r\n  padding: 0;\r\n  list-style: none;\r\n  counter-reset: kit-item;\r\n}\r\n\r\n.kw-ks-kit .kw-ks-kit__item {\r\n  display: grid;\r\n  grid-template-columns: 30px minmax(0, 1fr);\r\n  align-items: start;\r\n  gap: 12px;\r\n  margin: 0;\r\n  padding: 15px 0;\r\n  border-bottom: 1px solid var(--kit-line);\r\n  counter-increment: kit-item;\r\n}\r\n\r\n.kw-ks-kit .kw-ks-kit__item:first-child {\r\n  padding-top: 0;\r\n}\r\n\r\n.kw-ks-kit .kw-ks-kit__item:last-child {\r\n  border-bottom: 0;\r\n  padding-bottom: 0;\r\n}\r\n\r\n.kw-ks-kit__item::before {\r\n  content: counter(kit-item, decimal-leading-zero);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 30px;\r\n  height: 30px;\r\n  border-radius: 8px;\r\n  background: var(--kit-soft);\r\n  color: var(--kit-green);\r\n  font-size: 11px;\r\n  line-height: 1;\r\n  font-weight: 750;\r\n  font-variant-numeric: tabular-nums;\r\n}\r\n\r\n.kw-ks-kit__item strong {\r\n  display: block;\r\n  margin-bottom: 4px;\r\n  color: var(--kit-text);\r\n  font-size: 14px;\r\n  line-height: 1.35;\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-ks-kit__item p {\r\n  margin: 0;\r\n  color: var(--kit-muted);\r\n  font-size: 13px;\r\n  line-height: 1.6;\r\n}\r\n\r\n\/* TABLETY I TELEFONY *\/\r\n\r\n@media (max-width: 800px) {\r\n  .kw-ks-kit__panel {\r\n    grid-template-columns: 1fr;\r\n  }\r\n\r\n  .kw-ks-kit__left {\r\n    padding: 26px;\r\n    border-right: 0;\r\n    border-bottom: 1px solid var(--kit-line);\r\n  }\r\n\r\n  .kw-ks-kit__header {\r\n    margin-bottom: 22px;\r\n  }\r\n\r\n  .kw-ks-kit__visual img {\r\n    max-width: 650px;\r\n  }\r\n\r\n  .kw-ks-kit__content {\r\n    padding: 26px;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .kw-ks-kit {\r\n    margin: 26px auto;\r\n    padding: 0 8px;\r\n  }\r\n\r\n  .kw-ks-kit__panel {\r\n    border-radius: 18px;\r\n  }\r\n\r\n  .kw-ks-kit__left,\r\n  .kw-ks-kit__content {\r\n    padding: 24px 20px;\r\n  }\r\n\r\n  .kw-ks-kit .kw-ks-kit__title {\r\n    font-size: 16px;\r\n    font-size: min(26px, 6.1cqi);\r\n  }\r\n\r\n  .kw-ks-kit .kw-ks-kit__intro {\r\n    font-size: 14px;\r\n    line-height: 1.65;\r\n  }\r\n\r\n  .kw-ks-kit__eyebrow {\r\n    font-size: 10px;\r\n    letter-spacing: .1em;\r\n  }\r\n\r\n  .kw-ks-kit__header {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  .kw-ks-kit__caption {\r\n    margin-top: 16px;\r\n    padding-top: 13px;\r\n    font-size: 11px;\r\n  }\r\n\r\n  .kw-ks-kit .kw-ks-kit__item {\r\n    gap: 10px;\r\n    padding: 14px 0;\r\n  }\r\n}\r\n\r\n\/* Mobile: zewn\u0119trzna ramka modu\u0142u 5 px od brzeg\u00f3w ekranu. *\/\r\n@media (max-width:781px){\r\n  .kw-ks-kit{\r\n    box-sizing:border-box!important;\r\n    width:calc(var(--kw-kit-viewport,100vw) - 10px)!important;\r\n    max-width:none!important;\r\n    min-width:0!important;\r\n    padding-left:0!important;\r\n    padding-right:0!important;\r\n    margin-left:var(--kw-kit-offset,calc(50% - 50vw + 5px))!important;\r\n    margin-right:0!important;\r\n  }\r\n  .kw-ks-kit > .kw-ks-kit__panel{\r\n    box-sizing:border-box;\r\n    width:100%;\r\n    max-width:none;\r\n    margin-left:0;\r\n    margin-right:0;\r\n  }\r\n}\r\n\r\n<\/style>\r\n\r\n<section\r\n  class=\"kw-ks-kit\"\r\n  aria-label=\"Zawarto\u015b\u0107 zestawu karnisza KS\"\r\n>\r\n  <div class=\"kw-ks-kit__panel\">\r\n\r\n    <!-- LEWA STRONA \u2014 WST\u0118P NAD ZDJ\u0118CIEM -->\r\n    <div class=\"kw-ks-kit__left\">\r\n\r\n      <header class=\"kw-ks-kit__header\">\r\n        <div class=\"kw-ks-kit__eyebrow\">\r\n          Karnisze KS \u00b7 zawarto\u015b\u0107 zestawu\r\n        <\/div>\r\n\r\n        <h2 class=\"kw-ks-kit__title\">Co otrzymujesz <span>w zestawie?<\/span><\/h2>\r\n\r\n        <p class=\"kw-ks-kit__intro\">\r\n          Zamawiaj\u0105c nasze karnisze KS, otrzymujesz\r\n          aluminiow\u0105 szyn\u0119 doci\u0119t\u0105 na wybrany wymiar\r\n          oraz akcesoria do monta\u017cu i zawieszenia tkanin.\r\n          Zobacz, co znajduje si\u0119 w komplecie.\r\n        <\/p>\r\n      <\/header>\r\n\r\n      <figure class=\"kw-ks-kit__visual\">\r\n        <img\r\n          src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/09\/zestaw-karnisza-ks-z-opisami.webp\"\r\n          alt=\"Zestaw karnisza KS: szyna aluminiowa na wymiar, ko\u0142ki z wkr\u0119tami, uchwyty sufitowe, ko\u0144c\u00f3wki szyny, \u015blizgi, agrafki francuskie i stopery.\"\r\n          width=\"1536\"\r\n          height=\"1024\"\r\n          loading=\"lazy\"\r\n          decoding=\"async\"\r\n        >\r\n\r\n        <figcaption class=\"kw-ks-kit__caption\">\r\n          <strong>AZHOME<\/strong>\r\n          &nbsp;\u00b7&nbsp; Karnisze KS na wymiar\r\n          &nbsp;\u00b7&nbsp; Warszawa\r\n        <\/figcaption>\r\n      <\/figure>\r\n\r\n    <\/div>\r\n\r\n    <!-- PRAWA STRONA \u2014 OPIS ELEMENT\u00d3W -->\r\n    <div class=\"kw-ks-kit__content\">\r\n      <ul class=\"kw-ks-kit__list\">\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Szyna aluminiowa KS na wymiar<\/strong>\r\n            <p>\r\n              Przygotowana na zam\u00f3wion\u0105 d\u0142ugo\u015b\u0107,\r\n              dopasowan\u0105 do Twojego okna i wn\u0119trza.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Ko\u0142ki monta\u017cowe z wkr\u0119tami<\/strong>\r\n            <p>\r\n              Elementy mocuj\u0105ce uchwyty.\r\n              Spos\u00f3b mocowania nale\u017cy dobra\u0107 do rodzaju sufitu.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Uchwyty sufitowe<\/strong>\r\n            <p>\r\n              Metalowe klipsy do zamocowania szyny KS przy suficie.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Ko\u0144c\u00f3wki szyny<\/strong>\r\n            <p>\r\n              Wyko\u0144czenie otwartych ko\u0144c\u00f3w aluminiowego profilu.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>\u015alizgi<\/strong>\r\n            <p>\r\n              Poruszaj\u0105 si\u0119 wewn\u0105trz szyny\r\n              i umo\u017cliwiaj\u0105 przesuwanie firan oraz zas\u0142on.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Agrafki francuskie<\/strong>\r\n            <p>\r\n              \u0141\u0105cz\u0105 ta\u015bm\u0119 marszcz\u0105c\u0105 tkaniny\r\n              z oczkami \u015blizg\u00f3w.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n        <li class=\"kw-ks-kit__item\">\r\n          <div>\r\n            <strong>Stopery<\/strong>\r\n            <p>\r\n              Ograniczaj\u0105 przesuw \u015blizg\u00f3w\r\n              w wybranym miejscu szyny.\r\n            <\/p>\r\n          <\/div>\r\n        <\/li>\r\n\r\n      <\/ul>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\r\n<!-- Dopasowanie do faktycznej pozycji kontenera Kadence. -->\r\n<script>\r\n(function(){\r\n  'use strict';\r\n  function initWidths(){\r\n    document.querySelectorAll('.kw-ks-kit').forEach(function(wrap){\r\n      if(wrap.dataset.viewportFit==='true') return;\r\n      wrap.dataset.viewportFit='true';\r\n      const mobile=window.matchMedia('(max-width:781px)');\r\n      let frame=null;\r\n      function fit(){\r\n        frame=null;\r\n        if(!wrap.isConnected) return;\r\n        if(!mobile.matches){\r\n          wrap.style.removeProperty('--kw-kit-viewport');\r\n          wrap.style.removeProperty('--kw-kit-offset');\r\n          return;\r\n        }\r\n        const viewport=document.documentElement.clientWidth;\r\n        if(!viewport) return;\r\n        wrap.style.setProperty('--kw-kit-viewport',viewport+'px');\r\n        const current=parseFloat(window.getComputedStyle(wrap).marginLeft)||0;\r\n        const correction=5-wrap.getBoundingClientRect().left;\r\n        if(Math.abs(correction)>.1){\r\n          wrap.style.setProperty('--kw-kit-offset',(current+correction)+'px');\r\n        }\r\n      }\r\n      function schedule(){\r\n        if(frame!==null) window.cancelAnimationFrame(frame);\r\n        frame=window.requestAnimationFrame(fit);\r\n      }\r\n      fit();\r\n      window.addEventListener('resize',schedule);\r\n      if(mobile.addEventListener) mobile.addEventListener('change',schedule);\r\n      if('ResizeObserver' in window){\r\n        const observer=new ResizeObserver(schedule);\r\n        observer.observe(wrap);\r\n        if(wrap.parentElement) observer.observe(wrap.parentElement);\r\n      }\r\n      if(document.fonts) document.fonts.ready.then(schedule);\r\n    });\r\n  }\r\n  initWidths();\r\n  if(document.readyState==='loading'){\r\n    document.addEventListener('DOMContentLoaded',initWidths,{once:true});\r\n  }\r\n})();\r\n<\/script>\r\n\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- wp:paragraph -->\n<!-- HFCM by 99 Robots - Snippet # 4: color line -->\n<style>\r\n  .sz-divider-wrap{\r\n    display:block;\r\n    width:100%;\r\n    margin: 18px 0;\r\n    isolation: isolate;\r\n    contain: layout paint;\r\n  }\r\n\r\n  .sz-divider-line{\r\n    display:block;\r\n    width:100%;\r\n    height:2px;\r\n    border-radius:999px;\r\n    background: transparent;\r\n    position:relative;\r\n    overflow:hidden;\r\n  }\r\n\r\n  :root{\r\n    --szDivCycle: 6s;\r\n  }\r\n\r\n  .sz-divider-line::before{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:-34px -10;\r\n    background: linear-gradient(\r\n      90deg,\r\n      transparent 0%,\r\n      rgba(66,133,244,1) 25%,\r\n      rgba(52,168,83,1) 45%,\r\n      rgba(251,188,5,1) 65%,\r\n      rgba(234,67,53,1) 85%,\r\n      transparent 100%\r\n    );\r\n    transform: translate3d(-130%,0,0);\r\n    opacity:0;\r\n    animation: szDividerPulse var(--szDivCycle) ease-in-out infinite;\r\n    pointer-events:none;\r\n    filter: blur(2px);\r\n  }\r\n\r\n  \/* \u2705 wi\u0119kszy glow *\/\r\n  .sz-divider-line::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:-28px -6px; \/* by\u0142o: -14px 0 *\/\r\n    background: linear-gradient(\r\n      90deg,\r\n      transparent 0%,\r\n      rgba(66,133,244,.70) 25%,\r\n      rgba(52,168,83,.70) 45%,\r\n      rgba(251,188,5,.70) 65%,\r\n      rgba(234,67,53,.70) 85%,\r\n      transparent 100%\r\n    );\r\n    transform: translate3d(-130%,0,0);\r\n    opacity:0;\r\n    animation: szDividerPulse var(--szDivCycle) ease-in-out infinite;\r\n    pointer-events:none;\r\n\r\n    filter: blur(40px) saturate(3); \/* by\u0142o: blur(16px) *\/\r\n  }\r\n\r\n  @keyframes szDividerPulse{\r\n    0%   { transform: translate3d(-130%,0,0); opacity:0; }\r\n    58%  { transform: translate3d(-130%,0,0); opacity:0; }\r\n    66%  { opacity:1; }\r\n    92%  { opacity:1; }\r\n    95%  { transform: translate3d(130%,0,0); opacity:0; }\r\n    100% { transform: translate3d(130%,0,0); opacity:0; }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce){\r\n    .sz-divider-line::before,\r\n    .sz-divider-line::after{\r\n      animation:none;\r\n      transform:none;\r\n      opacity:1;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"sz-divider-wrap\" aria-hidden=\"true\">\r\n  <span class=\"sz-divider-line\"><\/span>\r\n<\/div>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:paragraph -->\n<!-- wp:shortcode -->\n<section id=\"kalkulator-ks\">\n<\/section><p><\/p>\n<!-- \/wp:shortcode -->\n<!-- wp:paragraph -->\n<!-- HFCM by 99 Robots - Snippet # 5: kalkulator ks 2 -->\n<section class=\"zw-kscalc\" aria-label=\"Kalkulator cen karniszy KS i elektrycznych Warszawa\">\r\n\r\n<style>\r\n.zw-kscalc,\r\n.zw-kscalc *,\r\n.zw-kscalc *::before,\r\n.zw-kscalc *::after{\r\n  box-sizing:border-box;\r\n}\r\n\r\n.zw-kscalc{\r\n  --zwc-text:#1e2225;\r\n  --zwc-muted:rgba(30,34,37,.72);\r\n  --zwc-line:rgba(25,29,32,.14);\r\n  --zwc-grid:rgba(58,58,58,.040);\r\n  --zwc-grid-fine:rgba(58,58,58,.022);\r\n  --zwc-gold:#9f7332;\r\n  --zwc-gold-soft:rgba(159,115,50,.10);\r\n  --zwc-green:#173f2a;\r\n\r\n  width:100%;\r\n  margin:34px 0;\r\n  color:var(--zwc-text);\r\n  font-family:inherit;\r\n}\r\n\r\n.zw-kscalc__head,\r\n.zw-kscalc__panel{\r\n  width:min(1180px,calc(100% - 40px));\r\n  margin-left:auto;\r\n  margin-right:auto;\r\n}\r\n\r\n.zw-kscalc__head{\r\n  max-width:940px;\r\n  margin-bottom:20px;\r\n  text-align:center;\r\n}\r\n\r\n.zw-kscalc__kicker{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  gap:9px;\r\n  margin:0 0 12px;\r\n  color:var(--zwc-gold);\r\n  font-size:11px;\r\n  line-height:1.2;\r\n  font-weight:850;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.zw-kscalc__kicker::before{\r\n  content:\"\";\r\n  width:7px;\r\n  height:7px;\r\n  border-radius:50%;\r\n  background:var(--zwc-gold);\r\n  box-shadow:0 0 0 5px var(--zwc-gold-soft);\r\n}\r\n\r\n.zw-kscalc__title{\r\n  margin:0 0 10px;\r\n  color:#43474a;\r\n  font-size:clamp(25px,3vw,36px);\r\n  line-height:1.18;\r\n  letter-spacing:-.035em;\r\n  font-weight:850;\r\n  text-align:center;\r\n}\r\n\r\n.zw-kscalc__lead{\r\n  max-width:940px;\r\n  margin:0 auto;\r\n  color:var(--zwc-muted);\r\n  font-size:15px;\r\n  line-height:1.75;\r\n  text-align:center;\r\n}\r\n\r\n.zw-kscalc__panel{\r\n  position:relative;\r\n  isolation:isolate;\r\n  overflow:hidden;\r\n  border:1px solid var(--zwc-line);\r\n  border-radius:18px;\r\n  background:\r\n    linear-gradient(var(--zwc-grid) 1px,transparent 1px),\r\n    linear-gradient(90deg,var(--zwc-grid) 1px,transparent 1px),\r\n    linear-gradient(var(--zwc-grid-fine) 1px,transparent 1px),\r\n    linear-gradient(90deg,var(--zwc-grid-fine) 1px,transparent 1px),\r\n    linear-gradient(180deg,rgba(255,255,255,.96),rgba(247,244,238,.84));\r\n  background-size:\r\n    34px 34px,\r\n    34px 34px,\r\n    17px 17px,\r\n    17px 17px,\r\n    auto;\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.98),\r\n    0 18px 42px rgba(57,48,37,.10);\r\n}\r\n\r\n.zw-kscalc__panel::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-120px;\r\n  z-index:0;\r\n  pointer-events:none;\r\n  background:\r\n    radial-gradient(circle at 14% 18%,rgba(159,115,50,.14),transparent 32%),\r\n    radial-gradient(circle at 86% 82%,rgba(23,63,42,.12),transparent 34%);\r\n  filter:blur(30px);\r\n  opacity:.72;\r\n  animation:zwKsPanelGlow 12s ease-in-out infinite;\r\n}\r\n\r\n.zw-kscalc__panel::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:0;\r\n  pointer-events:none;\r\n  background:\r\n    linear-gradient(\r\n      120deg,\r\n      transparent 0%,\r\n      rgba(255,255,255,.28) 42%,\r\n      rgba(255,255,255,.72) 50%,\r\n      rgba(255,255,255,.24) 58%,\r\n      transparent 100%\r\n    );\r\n  background-size:220% 100%;\r\n  background-position:-140% 0;\r\n  opacity:.32;\r\n  animation:zwKsPanelShine 10s ease-in-out infinite;\r\n}\r\n\r\n.zw-kscalc__panel > *{\r\n  position:relative;\r\n  z-index:1;\r\n}\r\n\r\n@keyframes zwKsPanelGlow{\r\n  0%,100%{transform:translate3d(-2%,0,0)}\r\n  50%{transform:translate3d(2%,-1%,0)}\r\n}\r\n\r\n@keyframes zwKsPanelShine{\r\n  0%{background-position:-140% 0}\r\n  35%,100%{background-position:145% 0}\r\n}\r\n\r\n\/* ===== POLE WYMIAR\u00d3W \/ PRYZMAT ===== *\/\r\n\r\n.zw-kscalc__top{\r\n  position:relative;\r\n  isolation:isolate;\r\n  overflow:hidden;\r\n  margin:clamp(18px,3vw,28px) clamp(18px,3vw,28px) 0;\r\n  padding:clamp(18px,2.6vw,24px);\r\n  border:1px solid rgba(159,115,50,.24);\r\n  border-radius:16px;\r\n  background:rgba(255,255,255,.68);\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.94),\r\n    0 12px 28px rgba(57,48,37,.08);\r\n}\r\n\r\n.zw-kscalc__top::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  z-index:0;\r\n  top:-100%;\r\n  left:-75%;\r\n  width:250%;\r\n  height:300%;\r\n  border-radius:42%;\r\n  pointer-events:none;\r\n  opacity:.52;\r\n  background:\r\n    conic-gradient(\r\n      from 0deg,\r\n      rgba(143,70,190,.28),\r\n      rgba(77,92,224,.26),\r\n      rgba(47,145,240,.26),\r\n      rgba(38,202,220,.24),\r\n      rgba(44,204,113,.24),\r\n      rgba(241,196,15,.27),\r\n      rgba(243,145,18,.27),\r\n      rgba(231,76,60,.25),\r\n      rgba(214,48,122,.26),\r\n      rgba(143,70,190,.28)\r\n    );\r\n  filter:blur(42px) saturate(1.08);\r\n  transform-origin:50% 50%;\r\n  animation:zwKsPrismOrbit 4.6s linear infinite;\r\n}\r\n\r\n.zw-kscalc__top::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  z-index:1;\r\n  top:-70%;\r\n  left:-55%;\r\n  width:28%;\r\n  height:250%;\r\n  pointer-events:none;\r\n  opacity:.42;\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent 0%,\r\n      rgba(255,255,255,.12) 24%,\r\n      rgba(255,255,255,.68) 50%,\r\n      rgba(255,255,255,.18) 76%,\r\n      transparent 100%\r\n    );\r\n  filter:blur(1px);\r\n  transform:rotate(18deg);\r\n  animation:zwKsPrismBeam 3.6s ease-in-out infinite;\r\n}\r\n\r\n.zw-kscalc__top > *{\r\n  position:relative;\r\n  z-index:3;\r\n}\r\n\r\n@keyframes zwKsPrismOrbit{\r\n  0%{transform:translate3d(-5%,-3%,0) rotate(0deg) scale(1)}\r\n  25%{transform:translate3d(8%,4%,0) rotate(90deg) scale(1.08)}\r\n  50%{transform:translate3d(3%,9%,0) rotate(180deg) scale(1.12)}\r\n  75%{transform:translate3d(-8%,5%,0) rotate(270deg) scale(1.06)}\r\n  100%{transform:translate3d(-5%,-3%,0) rotate(360deg) scale(1)}\r\n}\r\n\r\n@keyframes zwKsPrismBeam{\r\n  0%{left:-55%;opacity:0}\r\n  12%{opacity:.64}\r\n  42%,100%{left:130%;opacity:0}\r\n}\r\n\r\n.zw-kscalc__label{\r\n  display:block;\r\n  margin:0 0 8px;\r\n  color:#292d2f;\r\n  font-size:14px;\r\n  font-weight:850;\r\n  text-align:left;\r\n}\r\n\r\n.zw-kscalc__hint{\r\n  max-width:820px;\r\n  margin:0 0 11px;\r\n  color:var(--zwc-muted);\r\n  font-size:13px;\r\n  line-height:1.55;\r\n  text-align:left;\r\n}\r\n\r\n.zw-kscalc__ta{\r\n  width:100%;\r\n  min-height:108px;\r\n  padding:14px;\r\n  resize:vertical;\r\n  border:1px solid rgba(25,29,32,.15);\r\n  border-radius:13px;\r\n  background:rgba(255,255,255,.88);\r\n  color:var(--zwc-text);\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.98),\r\n    0 8px 20px rgba(57,48,37,.05);\r\n  -webkit-backdrop-filter:blur(10px);\r\n  backdrop-filter:blur(10px);\r\n  font:inherit;\r\n  font-size:14px;\r\n  line-height:1.55;\r\n  outline:none;\r\n}\r\n\r\n.zw-kscalc__ta:focus{\r\n  border-color:rgba(159,115,50,.58);\r\n  background:rgba(255,255,255,.97);\r\n  box-shadow:\r\n    0 0 0 3px rgba(159,115,50,.12),\r\n    0 10px 24px rgba(57,48,37,.07);\r\n}\r\n\r\n\/* ===== PRZYCISKI ===== *\/\r\n\r\n.zw-kscalc__actions{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  justify-content:flex-start;\r\n  gap:10px;\r\n  padding:14px clamp(18px,3vw,28px) 18px;\r\n}\r\n\r\n.zw-kscalc__btn{\r\n  position:relative;\r\n  isolation:isolate;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  min-height:46px;\r\n  padding:11px 17px;\r\n  overflow:hidden;\r\n  border:1px solid rgba(159,115,50,.30);\r\n  border-radius:12px;\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(255,255,255,.96),\r\n      rgba(255,255,255,.68)\r\n    );\r\n  color:#202326;\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.98),\r\n    0 8px 18px rgba(57,48,37,.08);\r\n  font:inherit;\r\n  font-size:13px;\r\n  font-weight:850;\r\n  cursor:pointer;\r\n  transition:\r\n    transform .25s ease,\r\n    border-color .25s ease,\r\n    box-shadow .25s ease,\r\n    background .25s ease,\r\n    color .25s ease;\r\n}\r\n\r\n.zw-kscalc__btn::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  top:-60%;\r\n  left:-70%;\r\n  width:42%;\r\n  height:240%;\r\n  transform:rotate(18deg);\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent,\r\n      rgba(255,255,255,.92),\r\n      transparent\r\n    );\r\n  opacity:.55;\r\n  pointer-events:none;\r\n  animation:zwKsCalcShine 5.4s ease-in-out infinite;\r\n}\r\n\r\n.zw-kscalc__btn:nth-child(2)::before{\r\n  animation-delay:.55s;\r\n}\r\n\r\n.zw-kscalc__btn:hover,\r\n.zw-kscalc__btn:focus-visible{\r\n  color:var(--zwc-green);\r\n  border-color:rgba(23,63,42,.48);\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(23,63,42,.11),\r\n      rgba(23,63,42,.035)\r\n    );\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.96),\r\n    0 12px 24px rgba(57,48,37,.11),\r\n    0 0 20px rgba(23,63,42,.08);\r\n  transform:translateY(-1px);\r\n}\r\n\r\n@keyframes zwKsCalcShine{\r\n  0%{left:-70%;opacity:0}\r\n  12%{opacity:.55}\r\n  38%{left:125%;opacity:0}\r\n  100%{left:125%;opacity:0}\r\n}\r\n\r\n\/* ===== WYNIKI ===== *\/\r\n\r\n.zw-kscalc__out{\r\n  padding:0 clamp(18px,3vw,28px) clamp(20px,3vw,28px);\r\n}\r\n\r\n.zw-kscalc__badges{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  justify-content:flex-start;\r\n  gap:8px;\r\n  margin:12px 0 14px;\r\n}\r\n\r\n.zw-kscalc__badge{\r\n  padding:8px 11px;\r\n  border:1px solid rgba(159,115,50,.24);\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.86);\r\n  color:var(--zwc-muted);\r\n  font-size:12px;\r\n  line-height:1.2;\r\n}\r\n\r\n.zw-kscalc__grid{\r\n  display:grid;\r\n  grid-template-columns:1fr 1fr;\r\n  gap:16px;\r\n  margin-top:12px;\r\n}\r\n\r\n.zw-kscalc__card{\r\n  overflow:hidden;\r\n  border:1px solid rgba(25,29,32,.12);\r\n  border-radius:16px;\r\n  background:rgba(255,255,255,.86);\r\n  box-shadow:\r\n    inset 0 1px 0 rgba(255,255,255,.98),\r\n    0 12px 28px rgba(57,48,37,.08);\r\n}\r\n\r\n.zw-kscalc__card h3{\r\n  margin:0;\r\n  padding:14px;\r\n  border-bottom:1px solid var(--zwc-line);\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(23,63,42,.065),\r\n      rgba(23,63,42,.025)\r\n    );\r\n  color:#303437;\r\n  font-size:14px;\r\n  line-height:1.4;\r\n  font-weight:850;\r\n  text-align:left;\r\n}\r\n\r\n.zw-kscalc__list{\r\n  margin:0;\r\n  padding:10px 13px;\r\n  list-style:none;\r\n}\r\n\r\n.zw-kscalc__list li{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:10px;\r\n  padding:9px 0;\r\n  border-bottom:1px dashed rgba(25,29,32,.12);\r\n  color:rgba(30,34,37,.80);\r\n  font-size:13.5px;\r\n  line-height:1.45;\r\n}\r\n\r\n.zw-kscalc__list li:last-child{\r\n  border-bottom:0;\r\n}\r\n\r\n.zw-kscalc__muted{\r\n  color:var(--zwc-muted);\r\n}\r\n\r\n.zw-kscalc__sum{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  padding:13px 14px;\r\n  border-top:1px solid var(--zwc-line);\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(159,115,50,.075),\r\n      rgba(159,115,50,.025)\r\n    );\r\n  color:#191c1f;\r\n  font-size:13.5px;\r\n  font-weight:900;\r\n}\r\n\r\n.zw-kscalc__clickable{\r\n  cursor:pointer;\r\n  transition:background .18s ease;\r\n}\r\n\r\n.zw-kscalc__clickable:hover{\r\n  background:rgba(159,115,50,.045);\r\n}\r\n\r\n.zw-kscalc__pick{\r\n  background:rgba(159,115,50,.10);\r\n}\r\n\r\n.zw-kscalc__note{\r\n  margin-left:6px;\r\n  color:var(--zwc-muted);\r\n  font-size:11px;\r\n  font-weight:800;\r\n  white-space:nowrap;\r\n}\r\n\r\n.zw-kscalc__detail{\r\n  display:none;\r\n  margin:10px 12px 13px;\r\n  padding:12px;\r\n  border:1px solid var(--zwc-line);\r\n  border-radius:13px;\r\n  background:rgba(255,255,255,.94);\r\n  color:var(--zwc-muted);\r\n  font-size:13px;\r\n  line-height:1.55;\r\n}\r\n\r\n.zw-kscalc__detail.is-open{\r\n  display:block;\r\n}\r\n\r\n.zw-kscalc__detailhead{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-bottom:10px;\r\n  padding-bottom:9px;\r\n  border-bottom:1px dashed rgba(25,29,32,.13);\r\n}\r\n\r\n.zw-kscalc__detailmeta{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:7px;\r\n}\r\n\r\n.zw-kscalc__pill{\r\n  display:inline-block;\r\n  padding:6px 9px;\r\n  border:1px solid rgba(23,63,42,.16);\r\n  border-radius:999px;\r\n  background:rgba(23,63,42,.045);\r\n  color:var(--zwc-green);\r\n  font-size:12px;\r\n  font-weight:800;\r\n}\r\n\r\n.zw-kscalc__dlist{\r\n  max-height:260px;\r\n  margin:0;\r\n  padding:0;\r\n  overflow:auto;\r\n  border:1px solid rgba(25,29,32,.09);\r\n  border-radius:11px;\r\n  background:#fff;\r\n  list-style:none;\r\n}\r\n\r\n.zw-kscalc__dlist li{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:10px;\r\n  padding:10px 11px;\r\n  border-bottom:1px solid rgba(25,29,32,.07);\r\n  font-size:13px;\r\n}\r\n\r\n.zw-kscalc__dlist li:last-child{\r\n  border-bottom:0;\r\n}\r\n\r\n.zw-kscalc__dright{\r\n  color:#191c1f;\r\n  font-weight:900;\r\n  white-space:nowrap;\r\n}\r\n\r\n.zw-kscalc__dright.is-oob{\r\n  color:#9e2638;\r\n}\r\n\r\n@media(max-width:820px){\r\n  .zw-kscalc__grid{\r\n    grid-template-columns:1fr;\r\n  }\r\n}\r\n\r\n@media(max-width:600px){\r\n  .zw-kscalc{\r\n    margin:24px 0;\r\n  }\r\n\r\n  .zw-kscalc__head,\r\n  .zw-kscalc__panel{\r\n    width:calc(100% - 20px);\r\n  }\r\n\r\n  .zw-kscalc__lead{\r\n    font-size:14px;\r\n    text-align:left;\r\n  }\r\n\r\n  .zw-kscalc__top{\r\n    margin:12px 12px 0;\r\n    padding:15px 12px;\r\n    border-radius:14px;\r\n  }\r\n\r\n  .zw-kscalc__actions{\r\n    padding:12px;\r\n    flex-direction:column;\r\n  }\r\n\r\n  .zw-kscalc__btn{\r\n    width:100%;\r\n  }\r\n\r\n  .zw-kscalc__out{\r\n    padding:0 12px 14px;\r\n  }\r\n\r\n  .zw-kscalc__list li,\r\n  .zw-kscalc__sum{\r\n    flex-direction:column;\r\n    gap:4px;\r\n  }\r\n\r\n  .zw-kscalc__top::before{\r\n    animation-duration:5.2s;\r\n    filter:blur(36px) saturate(1.06);\r\n  }\r\n\r\n  .zw-kscalc__top::after{\r\n    animation-duration:4.1s;\r\n  }\r\n}\r\n\r\n@media(max-width:380px){\r\n  .zw-kscalc__head,\r\n  .zw-kscalc__panel{\r\n    width:calc(100% - 12px);\r\n  }\r\n\r\n  .zw-kscalc__top{\r\n    margin:8px 8px 0;\r\n    padding:14px 10px;\r\n  }\r\n\r\n  .zw-kscalc__out{\r\n    padding-left:8px;\r\n    padding-right:8px;\r\n  }\r\n}\r\n\r\n@media(prefers-reduced-motion:reduce){\r\n  .zw-kscalc__btn::before,\r\n  .zw-kscalc__panel::before,\r\n  .zw-kscalc__panel::after,\r\n  .zw-kscalc__top::before,\r\n  .zw-kscalc__top::after{\r\n    animation:none!important;\r\n  }\r\n\r\n  .zw-kscalc__btn{\r\n    transition:none;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"zw-kscalc__head\">\r\n\r\n\r\n\r\n  <h2 class=\"zw-kscalc__title\">\r\n    Kalkulator cen aluminiowych szyn sufitowych KS\r\n  <\/h2>\r\n\r\n  <p class=\"zw-kscalc__lead\">\r\n    Wpisz lub wklej potrzebne d\u0142ugo\u015bci w centymetrach.\r\n    Kalkulator policzy cen\u0119 bazow\u0105 szyn KS i por\u00f3wna j\u0105\r\n    z wariantami karniszy elektrycznych AM75.\r\n    D\u0142ugo\u015bci KS wi\u0119ksze ni\u017c 600 cm zostan\u0105 automatycznie\r\n    podzielone na r\u00f3wne odcinki.\r\n  <\/p>\r\n<\/div>\r\n\r\n<div class=\"zw-kscalc__panel\">\r\n\r\n  <div class=\"zw-kscalc__top\">\r\n    <label class=\"zw-kscalc__label\" for=\"zwKsInput\">\r\n      Wymiary szyn w centymetrach\r\n    <\/label>\r\n\r\n    <p class=\"zw-kscalc__hint\">\r\n      Przyk\u0142ad: <strong>120, 147,5, 650, 980<\/strong>\r\n      albo ka\u017cda warto\u015b\u0107 w nowej linii.\r\n    <\/p>\r\n\r\n    <textarea\r\n      id=\"zwKsInput\"\r\n      class=\"zw-kscalc__ta\"\r\n      placeholder=\"np. 120, 147,5, 650&#10;albo:&#10;120&#10;147,5&#10;650\"><\/textarea>\r\n  <\/div>\r\n\r\n  <div class=\"zw-kscalc__actions\">\r\n    <button class=\"zw-kscalc__btn\" type=\"button\" id=\"zwKsCalcBtn\">\r\n      Policz cen\u0119\r\n    <\/button>\r\n\r\n    <button class=\"zw-kscalc__btn\" type=\"button\" id=\"zwKsClearBtn\">\r\n      Zacznij od nowa\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <div class=\"zw-kscalc__out\">\r\n\r\n    <div\r\n      class=\"zw-kscalc__badges\"\r\n      id=\"zwKsBadges\"\r\n      style=\"display:none\">\r\n    <\/div>\r\n\r\n    <div class=\"zw-kscalc__grid\">\r\n\r\n      <div class=\"zw-kscalc__card\">\r\n        <h3>Podsumowanie \u2014 karnisze KS<\/h3>\r\n\r\n        <ul class=\"zw-kscalc__list\" id=\"zwKsList\">\r\n          <li class=\"zw-kscalc__muted\">\r\n            Wpisz wymiary i kliknij \u201ePolicz cen\u0119\u201d.\r\n          <\/li>\r\n        <\/ul>\r\n\r\n        <div class=\"zw-kscalc__sum\" id=\"zwKsSum\">\r\n          <span>Razem KS<\/span>\r\n          <span>\u2014<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"zw-kscalc__card\">\r\n        <h3>\r\n          Por\u00f3wnanie karniszy elektrycznych \u2014\r\n          kliknij wariant, aby zobaczy\u0107 szczeg\u00f3\u0142y\r\n        <\/h3>\r\n\r\n        <ul class=\"zw-kscalc__list\" id=\"zwElecList\">\r\n          <li class=\"zw-kscalc__muted\">\r\n            Por\u00f3wnanie pojawi si\u0119 po obliczeniu KS.\r\n          <\/li>\r\n        <\/ul>\r\n\r\n        <div\r\n          class=\"zw-kscalc__detail\"\r\n          id=\"zwElecDetail\"\r\n          aria-live=\"polite\">\r\n        <\/div>\r\n\r\n        <div class=\"zw-kscalc__sum\" id=\"zwElecSum\">\r\n          <span>Razem elektryczne<\/span>\r\n          <span>\u2014<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  var section = document.currentScript && document.currentScript.closest('.zw-kscalc');\r\n  if(!section || section.dataset.ready === '1') return;\r\n  section.dataset.ready = '1';\r\n\r\n  var BRACKETS_KS = [100,150,200,250,300,350,400,450,500,550,600];\r\n  var BRACKETS_AM50 = [100,150,200,250,300,350,400,450,500,550,600];\r\n  var BRACKETS_AM75 = [100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200];\r\n\r\n  var KS = {\r\n    100:{base:75},150:{base:79},200:{base:101},250:{base:123},\r\n    300:{base:146},350:{base:168},400:{base:190},450:{base:212},\r\n    500:{base:234},550:{base:306},600:{base:328}\r\n  };\r\n\r\n  var ELEC = {\r\n    100:{am50:973,am50bat:1192,am75wifi:1068,am75zig:1117},\r\n    150:{am50:1042,am50bat:1252,am75wifi:1137,am75zig:1186},\r\n    200:{am50:1111,am50bat:1312,am75wifi:1205,am75zig:1255},\r\n    250:{am50:1180,am50bat:1373,am75wifi:1274,am75zig:1323},\r\n    300:{am50:1249,am50bat:1443,am75wifi:1343,am75zig:1392},\r\n    350:{am50:1317,am50bat:1493,am75wifi:1412,am75zig:1461},\r\n    400:{am50:1386,am50bat:1553,am75wifi:1481,am75zig:1530},\r\n    450:{am50:1453,am50bat:1614,am75wifi:1547,am75zig:1597},\r\n    500:{am50:1522,am50bat:1674,am75wifi:1616,am75zig:1665},\r\n    550:{am50:1591,am50bat:1734,am75wifi:1685,am75zig:1734},\r\n    600:{am50:1659,am50bat:1795,am75wifi:1754,am75zig:1803},\r\n    650:{am75wifi:1823,am75zig:1872},\r\n    700:{am75wifi:1892,am75zig:1941},\r\n    750:{am75wifi:1961,am75zig:2010},\r\n    800:{am75wifi:2030,am75zig:2079},\r\n    850:{am75wifi:2098,am75zig:2148},\r\n    900:{am75wifi:2165,am75zig:2214},\r\n    950:{am75wifi:2234,am75zig:2283},\r\n    1000:{am75wifi:2303,am75zig:2352},\r\n    1050:{am75wifi:2371,am75zig:2421},\r\n    1100:{am75wifi:2440,am75zig:2490},\r\n    1150:{am75wifi:2509,am75zig:2558},\r\n    1200:{am75wifi:2578,am75zig:2627}\r\n  };\r\n\r\n  var input = section.querySelector('#zwKsInput');\r\n  var btnCalc = section.querySelector('#zwKsCalcBtn');\r\n  var btnClear = section.querySelector('#zwKsClearBtn');\r\n  var ksList = section.querySelector('#zwKsList');\r\n  var ksSum = section.querySelector('#zwKsSum');\r\n  var elecList = section.querySelector('#zwElecList');\r\n  var elecSum = section.querySelector('#zwElecSum');\r\n  var elecDetail = section.querySelector('#zwElecDetail');\r\n  var badges = section.querySelector('#zwKsBadges');\r\n\r\n  var lastDetails = null;\r\n  var lastPick = null;\r\n\r\n  function ceilToBracket(value,brackets){\r\n    for(var i=0;i<brackets.length;i++){\r\n      if(value <= brackets[i]) return brackets[i];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  function money(value){\r\n    return Math.round(value).toLocaleString('pl-PL') + ' z\u0142';\r\n  }\r\n\r\n  function prettyCm(value){\r\n    return (Math.round(value * 10) \/ 10).toLocaleString('pl-PL') + ' cm';\r\n  }\r\n\r\n  function parseNumbers(value){\r\n    var matches = value.match(\/(\\d+(?:[.,]\\d+)?)\/g) || [];\r\n\r\n    return matches\r\n      .map(function(item){\r\n        return parseFloat(item.replace(',','.'));\r\n      })\r\n      .filter(function(number){\r\n        return Number.isFinite(number) && number > 0;\r\n      });\r\n  }\r\n\r\n  function row(left,right,type){\r\n    var cls = type ? ' class=\"zw-kscalc__clickable\"' : '';\r\n    var data = type ? ' data-type=\"' + type + '\"' : '';\r\n    return '<li' + cls + data + '><span>' + left + '<\/span><span>' + right + '<\/span><\/li>';\r\n  }\r\n\r\n  function clearUI(){\r\n    ksList.innerHTML =\r\n      '<li class=\"zw-kscalc__muted\">Wpisz wymiary i kliknij \u201ePolicz cen\u0119\u201d.<\/li>';\r\n\r\n    elecList.innerHTML =\r\n      '<li class=\"zw-kscalc__muted\">Por\u00f3wnanie pojawi si\u0119 po obliczeniu KS.<\/li>';\r\n\r\n    ksSum.innerHTML =\r\n      '<span>Razem KS<\/span><span>\u2014<\/span>';\r\n\r\n    elecSum.innerHTML =\r\n      '<span>Razem elektryczne<\/span><span>\u2014<\/span>';\r\n\r\n    badges.style.display = 'none';\r\n    badges.innerHTML = '';\r\n    elecDetail.classList.remove('is-open');\r\n    elecDetail.innerHTML = '';\r\n    lastDetails = null;\r\n    lastPick = null;\r\n  }\r\n\r\n  function splitToMax(value,max,counter){\r\n    if(value <= max) return [value];\r\n\r\n    counter.count += 1;\r\n    var half = value \/ 2;\r\n\r\n    return splitToMax(half,max,counter)\r\n      .concat(splitToMax(half,max,counter));\r\n  }\r\n\r\n  function showDetails(type){\r\n    if(!lastDetails || !lastDetails[type]) return;\r\n\r\n    if(lastPick === type && elecDetail.classList.contains('is-open')){\r\n      elecDetail.classList.remove('is-open');\r\n      elecDetail.innerHTML = '';\r\n      lastPick = null;\r\n\r\n      elecList.querySelectorAll('[data-type]').forEach(function(item){\r\n        item.classList.remove('zw-kscalc__pick');\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    lastPick = type;\r\n\r\n    elecList.querySelectorAll('[data-type]').forEach(function(item){\r\n      item.classList.toggle(\r\n        'zw-kscalc__pick',\r\n        item.getAttribute('data-type') === type\r\n      );\r\n    });\r\n\r\n    var detail = lastDetails[type];\r\n    var html = '<div class=\"zw-kscalc__detailhead\">';\r\n\r\n    html +=\r\n      '<div><strong>' +\r\n      detail.label +\r\n      '<\/strong> <span class=\"zw-kscalc__note\">(' +\r\n      detail.range +\r\n      ')<\/span><\/div>';\r\n\r\n    html += '<div class=\"zw-kscalc__detailmeta\">';\r\n    html +=\r\n      '<span class=\"zw-kscalc__pill\">Policzone: ' +\r\n      detail.inCount +\r\n      '<\/span>';\r\n\r\n    html +=\r\n      '<span class=\"zw-kscalc__pill\">Poza zakresem: ' +\r\n      detail.outCount +\r\n      '<\/span>';\r\n\r\n    html += '<\/div><\/div>';\r\n    html += '<ul class=\"zw-kscalc__dlist\">';\r\n\r\n    detail.items.forEach(function(item){\r\n      html += '<li>';\r\n      html +=\r\n        '<span>' +\r\n        prettyCm(item.input) +\r\n        ' \u2192 pr\u00f3g ' +\r\n        item.bracket +\r\n        ' cm<\/span>';\r\n\r\n      html +=\r\n        '<span class=\"zw-kscalc__dright ' +\r\n        (item.inRange ? '' : 'is-oob') +\r\n        '\">';\r\n\r\n      html +=\r\n        item.inRange\r\n          ? money(item.price)\r\n          : 'poza zakresem';\r\n\r\n      html += '<\/span><\/li>';\r\n    });\r\n\r\n    html += '<\/ul>';\r\n\r\n    elecDetail.innerHTML = html;\r\n    elecDetail.classList.add('is-open');\r\n  }\r\n\r\n  function calculate(){\r\n    var values = parseNumbers(input.value);\r\n\r\n    if(!values.length){\r\n      clearUI();\r\n\r\n      ksList.innerHTML =\r\n        '<li class=\"zw-kscalc__muted\">Brak poprawnych warto\u015bci. Wpisz np. 120, 147,5, 650.<\/li>';\r\n\r\n      return;\r\n    }\r\n\r\n    var splitCounter = {count:0};\r\n    var segments = [];\r\n\r\n    values.forEach(function(value){\r\n      segments = segments.concat(\r\n        splitToMax(value,600,splitCounter)\r\n      );\r\n    });\r\n\r\n    var counts = {};\r\n\r\n    BRACKETS_KS.forEach(function(bracket){\r\n      counts[bracket] = 0;\r\n    });\r\n\r\n    segments.forEach(function(value){\r\n      var bracket = ceilToBracket(\r\n        Math.max(value,100),\r\n        BRACKETS_KS\r\n      );\r\n\r\n      if(bracket){\r\n        counts[bracket] += 1;\r\n      }\r\n    });\r\n\r\n    badges.innerHTML =\r\n      '<span class=\"zw-kscalc__badge\"><strong>Ilo\u015b\u0107 wpis\u00f3w:<\/strong> ' +\r\n      values.length +\r\n      '<\/span>' +\r\n\r\n      '<span class=\"zw-kscalc__badge\"><strong>Odcinki KS:<\/strong> ' +\r\n      segments.length +\r\n      '<\/span>' +\r\n\r\n      (\r\n        splitCounter.count\r\n          ? '<span class=\"zw-kscalc__badge\"><strong>Podzia\u0142y powy\u017cej 600 cm:<\/strong> ' +\r\n            splitCounter.count +\r\n            '<\/span>'\r\n          : ''\r\n      );\r\n\r\n    badges.style.display = 'flex';\r\n\r\n    var ksTotal = 0;\r\n    var ksRows = '';\r\n\r\n    BRACKETS_KS.forEach(function(bracket){\r\n      var count = counts[bracket];\r\n\r\n      if(!count) return;\r\n\r\n      var sum = count * KS[bracket].base;\r\n\r\n      ksTotal += sum;\r\n\r\n      ksRows += row(\r\n        'do ' + bracket + ' cm \u2014 ' + count + ' szt.',\r\n        '<strong>' + money(sum) + '<\/strong>'\r\n      );\r\n    });\r\n\r\n    ksList.innerHTML = ksRows;\r\n\r\n    ksSum.innerHTML =\r\n      '<span>Razem KS \u2014 cena bazowa<\/span>' +\r\n      '<span>' +\r\n      money(ksTotal) +\r\n      '<\/span>';\r\n\r\n    var totals = {\r\n      am50:0,\r\n      am50bat:0,\r\n      am75wifi:0,\r\n      am75zig:0\r\n    };\r\n\r\n    var inCount = {\r\n      am50:0,\r\n      am50bat:0,\r\n      am75wifi:0,\r\n      am75zig:0\r\n    };\r\n\r\n    var outCount = {\r\n      am50:0,\r\n      am50bat:0,\r\n      am75wifi:0,\r\n      am75zig:0\r\n    };\r\n\r\n    var items = {\r\n      am50:[],\r\n      am50bat:[],\r\n      am75wifi:[],\r\n      am75zig:[]\r\n    };\r\n\r\n    function calculateType(type,value){\r\n      var use = Math.max(value,100);\r\n\r\n      var brackets =\r\n        (type === 'am50' || type === 'am50bat')\r\n          ? BRACKETS_AM50\r\n          : BRACKETS_AM75;\r\n\r\n      var max =\r\n        (type === 'am50' || type === 'am50bat')\r\n          ? 600\r\n          : 1200;\r\n\r\n      if(use > max){\r\n        outCount[type] += 1;\r\n\r\n        items[type].push({\r\n          input:value,\r\n          bracket:'\u2014',\r\n          price:0,\r\n          inRange:false\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      var bracket = ceilToBracket(use,brackets);\r\n\r\n      var valid =\r\n        bracket &&\r\n        ELEC[bracket] &&\r\n        Number.isFinite(ELEC[bracket][type]);\r\n\r\n      if(!valid){\r\n        outCount[type] += 1;\r\n\r\n        items[type].push({\r\n          input:value,\r\n          bracket:bracket || '\u2014',\r\n          price:0,\r\n          inRange:false\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      var price = ELEC[bracket][type];\r\n\r\n      totals[type] += price;\r\n      inCount[type] += 1;\r\n\r\n      items[type].push({\r\n        input:value,\r\n        bracket:bracket,\r\n        price:price,\r\n        inRange:true\r\n      });\r\n    }\r\n\r\n    values.forEach(function(value){\r\n      calculateType('am50',value);\r\n      calculateType('am50bat',value);\r\n      calculateType('am75wifi',value);\r\n      calculateType('am75zig',value);\r\n    });\r\n\r\n    lastDetails = {\r\n      am50:{\r\n        label:'AM50',\r\n        range:'100\u2013600 cm',\r\n        inCount:inCount.am50,\r\n        outCount:outCount.am50,\r\n        items:items.am50\r\n      },\r\n\r\n      am50bat:{\r\n        label:'AM50 bateryjny',\r\n        range:'100\u2013600 cm',\r\n        inCount:inCount.am50bat,\r\n        outCount:outCount.am50bat,\r\n        items:items.am50bat\r\n      },\r\n\r\n      am75wifi:{\r\n        label:'AM75 Wi-Fi \/ 5W',\r\n        range:'100\u20131200 cm',\r\n        inCount:inCount.am75wifi,\r\n        outCount:outCount.am75wifi,\r\n        items:items.am75wifi\r\n      },\r\n\r\n      am75zig:{\r\n        label:'AM75 Zigbee',\r\n        range:'100\u20131200 cm',\r\n        inCount:inCount.am75zig,\r\n        outCount:outCount.am75zig,\r\n        items:items.am75zig\r\n      }\r\n    };\r\n\r\n    lastPick = null;\r\n    elecDetail.classList.remove('is-open');\r\n    elecDetail.innerHTML = '';\r\n\r\n    function electricRow(label,type){\r\n      var note =\r\n        outCount[type]\r\n          ? '<span class=\"zw-kscalc__note\">(poza zakresem: ' +\r\n            outCount[type] +\r\n            ')<\/span>'\r\n          : '';\r\n\r\n      var value =\r\n        inCount[type]\r\n          ? '<strong>' +\r\n            money(totals[type]) +\r\n            '<\/strong>' +\r\n            note\r\n          : '<strong>\u2014<\/strong>' + note;\r\n\r\n      return row(label,value,type);\r\n    }\r\n\r\n    elecList.innerHTML =\r\n      electricRow('AM50 \u2014 suma','am50') +\r\n      electricRow('AM50 bateryjny \u2014 suma','am50bat') +\r\n      electricRow('AM75 Wi-Fi \/ 5W \u2014 suma','am75wifi') +\r\n      electricRow('AM75 Zigbee \u2014 suma','am75zig');\r\n\r\n    var available = [];\r\n\r\n    ['am50','am50bat','am75wifi','am75zig'].forEach(function(type){\r\n      if(inCount[type] > 0){\r\n        available.push(totals[type]);\r\n      }\r\n    });\r\n\r\n    if(available.length){\r\n      elecSum.innerHTML =\r\n        '<span>Razem elektryczne \u2014 zakres<\/span>' +\r\n        '<span>' +\r\n        money(Math.min.apply(null,available)) +\r\n        ' \u2013 ' +\r\n        money(Math.max.apply(null,available)) +\r\n        '<\/span>';\r\n    }else{\r\n      elecSum.innerHTML =\r\n        '<span>Razem elektryczne<\/span><span>\u2014<\/span>';\r\n    }\r\n  }\r\n\r\n  elecList.addEventListener('click',function(event){\r\n    var item = event.target.closest('[data-type]');\r\n\r\n    if(item){\r\n      showDetails(\r\n        item.getAttribute('data-type')\r\n      );\r\n    }\r\n  });\r\n\r\n  btnCalc.addEventListener('click',calculate);\r\n\r\n  btnClear.addEventListener('click',function(){\r\n    input.value = '';\r\n    clearUI();\r\n  });\r\n\r\n  clearUI();\r\n})();\r\n<\/script>\r\n\r\n<\/section>\r\n<!-- \/wp:html -->\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<!-- HFCM by 99 Robots - Snippet # 2: tabelka karniszy ks -->\n<!-- ===== Cennik Karnisz KS \u2014 ten sam styl co cennik elektryczny (cc-...) ===== -->\r\n<section class=\"cc-price-section cc-ks-price\" aria-label=\"Cennik szyn sufitowych KS\">\r\n\r\n  <h3 class=\"cc-price-title\">Cennik szyn sufitowych KS<\/h3>\r\n  <p class=\"cc-price-sub\">\r\n    Ceny dotycz\u0105 prog\u00f3w d\u0142ugo\u015bci \u201edo \u2026 cm\u201d. Dop\u0142aty: gi\u0119cie (1 lub 2) oraz system Wave.\r\n  <\/p>\r\n\r\n  <!-- ===================== DESKTOP ===================== -->\r\n  <div class=\"cc-table cc-ks-table--desktop\" role=\"region\" aria-label=\"Tabela cenowa Karnisz KS (desktop)\">\r\n    <div class=\"cc-table-scroll\" tabindex=\"0\">\r\n      <table class=\"cc-pricetable cc-ks-pricetable\">\r\n        <thead>\r\n          <tr>\r\n            <th>Produkt<\/th>\r\n            <th>Wymiar<\/th>\r\n            <th class=\"cc-num\">Cena<\/th>\r\n            <th class=\"cc-num\">Cena z 1 gi\u0119ciem<\/th>\r\n            <th class=\"cc-num\">Cena z 2 gi\u0119ciami<\/th>\r\n            <th class=\"cc-num\">Dop\u0142ata do Wave<\/th>\r\n          <\/tr>\r\n        <\/thead>\r\n\r\n        <tbody>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 100 cm<\/td>\r\n            <td class=\"cc-num\">75 z\u0142<\/td><td class=\"cc-num\">189 z\u0142<\/td><td class=\"cc-num\">289 z\u0142<\/td><td class=\"cc-num\">23 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 150 cm<\/td>\r\n            <td class=\"cc-num\">79 z\u0142<\/td><td class=\"cc-num\">199 z\u0142<\/td><td class=\"cc-num\">299 z\u0142<\/td><td class=\"cc-num\">28 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 200 cm<\/td>\r\n            <td class=\"cc-num\">101 z\u0142<\/td><td class=\"cc-num\">221 z\u0142<\/td><td class=\"cc-num\">321 z\u0142<\/td><td class=\"cc-num\">32 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 250 cm<\/td>\r\n            <td class=\"cc-num\">123 z\u0142<\/td><td class=\"cc-num\">243 z\u0142<\/td><td class=\"cc-num\">343 z\u0142<\/td><td class=\"cc-num\">37 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 300 cm<\/td>\r\n            <td class=\"cc-num\">146 z\u0142<\/td><td class=\"cc-num\">266 z\u0142<\/td><td class=\"cc-num\">366 z\u0142<\/td><td class=\"cc-num\">42 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 350 cm<\/td>\r\n            <td class=\"cc-num\">168 z\u0142<\/td><td class=\"cc-num\">288 z\u0142<\/td><td class=\"cc-num\">388 z\u0142<\/td><td class=\"cc-num\">47 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 400 cm<\/td>\r\n            <td class=\"cc-num\">190 z\u0142<\/td><td class=\"cc-num\">310 z\u0142<\/td><td class=\"cc-num\">410 z\u0142<\/td><td class=\"cc-num\">52 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 450 cm<\/td>\r\n            <td class=\"cc-num\">212 z\u0142<\/td><td class=\"cc-num\">332 z\u0142<\/td><td class=\"cc-num\">432 z\u0142<\/td><td class=\"cc-num\">57 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 500 cm<\/td>\r\n            <td class=\"cc-num\">234 z\u0142<\/td><td class=\"cc-num\">354 z\u0142<\/td><td class=\"cc-num\">454 z\u0142<\/td><td class=\"cc-num\">62 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 550 cm<\/td>\r\n            <td class=\"cc-num\">306 z\u0142<\/td><td class=\"cc-num\">426 z\u0142<\/td><td class=\"cc-num\">526 z\u0142<\/td><td class=\"cc-num\">67 z\u0142<\/td>\r\n          <\/tr>\r\n          <tr>\r\n            <th>Karnisz KS<\/th><td>do 600 cm<\/td>\r\n            <td class=\"cc-num\">328 z\u0142<\/td><td class=\"cc-num\">448 z\u0142<\/td><td class=\"cc-num\">548 z\u0142<\/td><td class=\"cc-num\">72 z\u0142<\/td>\r\n          <\/tr>\r\n        <\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <div class=\"cc-table-note\">\r\n      <strong>Uwaga<\/strong> Dop\u0142ata Wave jest liczona dodatkowo (do wybranego progu). Gi\u0119cia: osobno 1 lub 2.\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ===================== MOBILE ===================== -->\r\n  <div class=\"cc-table cc-ks-table--mobile\" aria-label=\"Cennik Karnisz KS (mobile)\">\r\n    <div class=\"cc-ks-cards\" data-ks-cards><\/div>\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n<style>\r\n  \/* ===== bazowe (pasuje do Twojego cc- stylu) ===== *\/\r\n  .cc-price-section{max-width:980px;margin:26px auto;padding:0 12px;}\r\n  .cc-price-title{margin:0 0 8px 0;font-size:18px;line-height:1.25;}\r\n  .cc-price-sub{margin:0 0 12px 0;font-size:13px;line-height:1.35;color:#555;}\r\n\r\n  .cc-table-note{\r\n    margin-top:10px;font-size:12px;line-height:1.35;color:#333;\r\n    padding:10px 12px;border-radius:12px;\r\n    border:1px solid rgba(0,0,0,.08);background:#fff;\r\n  }\r\n\r\n  .cc-table-scroll{\r\n    overflow-x:auto;-webkit-overflow-scrolling:touch;\r\n    border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff;\r\n  }\r\n\r\n  .cc-pricetable{\r\n    border-collapse:separate;border-spacing:0;\r\n    width:100%;\r\n    font-size:12px;line-height:1.25;\r\n    min-width:780px;\r\n  }\r\n  .cc-pricetable th,.cc-pricetable td{\r\n    padding:10px 10px;text-align:left;white-space:nowrap;\r\n    border-bottom:1px solid rgba(0,0,0,.06);\r\n    border-right:1px solid rgba(0,0,0,.06);\r\n  }\r\n  .cc-pricetable thead th{\r\n    position:sticky;top:0;z-index:3;\r\n    background:#FFF4CD;\r\n    font-weight:900;\r\n    border-bottom:1px solid rgba(0,0,0,.08);\r\n  }\r\n  .cc-pricetable tbody th{\r\n    font-weight:900;background:#FAFAFA;\r\n  }\r\n  .cc-pricetable tr:last-child th,\r\n  .cc-pricetable tr:last-child td{border-bottom:none;}\r\n  .cc-pricetable th:last-child,\r\n  .cc-pricetable td:last-child{border-right:none;}\r\n\r\n  .cc-num{ text-align:right; }\r\n  .cc-ks-pricetable td.cc-num{ font-weight:900; color:#111; }\r\n  .cc-ks-pricetable tbody tr:hover td,\r\n  .cc-ks-pricetable tbody tr:hover th{ background: rgba(0,0,0,.012); }\r\n\r\n  \/* ===== mobile kafelki ===== *\/\r\n  .cc-ks-table--mobile{display:none;}\r\n  .cc-ks-cards{display:grid;gap:12px;}\r\n\r\n  .cc-ks-card{\r\n    border:1px solid rgba(0,0,0,.10);\r\n    border-radius:16px;\r\n    background:#fff;\r\n    box-shadow:0 10px 28px rgba(0,0,0,.06);\r\n    overflow:hidden;\r\n  }\r\n  .cc-ks-cardhead{\r\n    padding:12px 14px;\r\n    background:rgba(0,0,0,.02);\r\n    border-bottom:1px solid rgba(0,0,0,.08);\r\n    display:flex;align-items:center;justify-content:space-between;gap:10px;\r\n  }\r\n  .cc-ks-title{margin:0;font-weight:900;color:#222;line-height:1.25;font-size:14px;}\r\n  .cc-ks-chip{\r\n    flex:0 0 auto;padding:8px 10px;border-radius:999px;\r\n    border:1px solid rgba(0,0,0,.10);background:#FFF4CD;\r\n    font-size:12px;font-weight:900;color:#333;white-space:nowrap;\r\n  }\r\n  .cc-ks-body{padding:10px 14px 14px;}\r\n  .cc-ks-row{\r\n    display:flex;justify-content:space-between;gap:14px;\r\n    padding:8px 0;border-bottom:1px dashed rgba(0,0,0,.10);\r\n  }\r\n  .cc-ks-row:last-child{border-bottom:none;}\r\n  .cc-ks-k{color:rgba(0,0,0,.62);font-size:12.5px;line-height:1.3;}\r\n  .cc-ks-v{color:rgba(0,0,0,.86);font-weight:900;font-size:13px;line-height:1.3;text-align:right;white-space:nowrap;}\r\n  .cc-ks-v strong{font-size:14px;}\r\n\r\n  \/* ===== prze\u0142\u0105czanie desktop\/mobile ===== *\/\r\n  @media (max-width: 860px){\r\n    .cc-ks-table--desktop{display:none;}\r\n    .cc-ks-table--mobile{display:block;}\r\n    .cc-price-section{max-width:640px;}\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(() => {\r\n  const mount = document.querySelector('[data-ks-cards]');\r\n  if (!mount) return;\r\n\r\n  const rows = [\r\n    {max:100, base:75,  bend1:189, bend2:289, wave:23},\r\n    {max:150, base:79,  bend1:199, bend2:299, wave:28},\r\n    {max:200, base:101, bend1:221, bend2:321, wave:32},\r\n    {max:250, base:123, bend1:243, bend2:343, wave:37},\r\n    {max:300, base:146, bend1:266, bend2:366, wave:42},\r\n    {max:350, base:168, bend1:288, bend2:388, wave:47},\r\n    {max:400, base:190, bend1:310, bend2:410, wave:52},\r\n    {max:450, base:212, bend1:332, bend2:432, wave:57},\r\n    {max:500, base:234, bend1:354, bend2:454, wave:62},\r\n    {max:550, base:306, bend1:426, bend2:526, wave:67},\r\n    {max:600, base:328, bend1:448, bend2:548, wave:72}\r\n  ];\r\n\r\n  const zl = (n) => `${n} z\u0142`;\r\n\r\n  mount.innerHTML = rows.map(r => `\r\n    <article class=\"cc-ks-card\" aria-label=\"Karnisz KS do ${r.max} cm\">\r\n      <div class=\"cc-ks-cardhead\">\r\n        <h3 class=\"cc-ks-title\">Karnisz KS \u2014 do ${r.max} cm<\/h3>\r\n        <span class=\"cc-ks-chip\">${r.max} cm<\/span>\r\n      <\/div>\r\n      <div class=\"cc-ks-body\">\r\n        <div class=\"cc-ks-row\"><div class=\"cc-ks-k\">Cena<\/div><div class=\"cc-ks-v\"><strong>${zl(r.base)}<\/strong><\/div><\/div>\r\n        <div class=\"cc-ks-row\"><div class=\"cc-ks-k\">Cena z 1 gi\u0119ciem<\/div><div class=\"cc-ks-v\">${zl(r.bend1)}<\/div><\/div>\r\n        <div class=\"cc-ks-row\"><div class=\"cc-ks-k\">Cena z 2 gi\u0119ciami<\/div><div class=\"cc-ks-v\">${zl(r.bend2)}<\/div><\/div>\r\n        <div class=\"cc-ks-row\"><div class=\"cc-ks-k\">Dop\u0142ata do Wave<\/div><div class=\"cc-ks-v\">${zl(r.wave)}<\/div><\/div>\r\n      <\/div>\r\n    <\/article>\r\n  `).join('');\r\n})();\r\n<\/script>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:columns {\"verticalAlignment\":\"center\",\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|40\",\"left\":\"var:preset|spacing|40\",\"top\":\"var:preset|spacing|50\",\"bottom\":\"var:preset|spacing|50\"}}}} -->\n<div class=\"wp-block-columns are-vertically-aligned-center\" style=\"padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--40)\"><!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:image {\"id\":241,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1125\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/giete-85.webp\" alt=\"Karnisze KS gi\u0119te z zakr\u0119tami\" class=\"wp-image-241\" srcset=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/giete-85.webp 1536w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/giete-85-300x220.webp 300w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/giete-85-1024x750.webp 1024w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/giete-85-768x563.webp 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n<!-- \/wp:image --><\/div>\n<!-- \/wp:column -->\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:heading {\"style\":{\"color\":{\"text\":\"#222222\"},\"elements\":{\"link\":{\"color\":{\"text\":\"#222222\"}}}}} -->\n<h2 class=\"wp-block-heading has-text-color has-link-color\" style=\"color:#222222\">Szyny aluminiowe gi\u0119te<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"style\":{\"typography\":{\"letterSpacing\":\"1px\",\"lineHeight\":\"2.2\"}}} -->\n<p style=\"letter-spacing:1px;line-height:2.2\">Zam\u00f3w aluminiowe szyny gi\u0119te aby idealnie dopasowa\u0107 karnisze do Twoich potrzeb. Mo\u017cemy wykona\u0107 kilka gi\u0119\u0107 na jednej szynie pod r\u00f3\u017cnymi k\u0105tami.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"style\":{\"typography\":{\"letterSpacing\":\"1px\",\"lineHeight\":\"2.2\"}}} -->\n<p style=\"letter-spacing:1px;line-height:2.2\">Brak ci\u0119\u0107 i \u0142\u0105cznik\u00f3w na zakr\u0119tach, to gwarancja p\u0142ynnego i lekkiego przesuwu <strong>bez zacinania<\/strong> si\u0119 \u015blizg\u00f3w.<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:column --><\/div>\n<!-- \/wp:columns -->\n\n<!-- HFCM by 99 Robots - Snippet # 18: karnisze z zakr\u0119tem bez zacinania -->\n<!-- AZHOME \u2014 KARNISZE GI\u0118TE \/ FILM -->\r\n<style>\r\n.kw-ks-video {\r\n  --kv-green: #38533a;\r\n  --kv-text: #262c25;\r\n  --kv-muted: #62695e;\r\n  --kv-line: #dfe5d9;\r\n\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  max-width: 1240px;\r\n  margin: 28px auto;\r\n  overflow: hidden;\r\n\r\n  border: 1px solid var(--kv-line);\r\n  border-radius: 24px;\r\n  background: linear-gradient(135deg, #fff 35%, #f5f7f2);\r\n  box-shadow: 0 14px 40px rgba(40, 58, 35, .06);\r\n\r\n  color: var(--kv-text);\r\n  font-family: inherit;\r\n}\r\n\r\n.kw-ks-video *,\r\n.kw-ks-video *::before,\r\n.kw-ks-video *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-ks-video__layout {\r\n  display: grid;\r\n  grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);\r\n  align-items: center;\r\n}\r\n\r\n.kw-ks-video__media {\r\n  min-width: 0;\r\n  padding: 26px;\r\n}\r\n\r\n.kw-ks-video__frame {\r\n  position: relative;\r\n  width: 100%;\r\n  aspect-ratio: 16 \/ 9;\r\n  overflow: hidden;\r\n  border: 1px solid var(--kv-line);\r\n  border-radius: 16px;\r\n  background: #e9ede5;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__frame iframe {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: block;\r\n  width: 100%;\r\n  height: 100%;\r\n  max-width: none;\r\n  margin: 0;\r\n  border: 0;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__caption {\r\n  margin: 13px 0 0;\r\n  padding: 0;\r\n  color: var(--kv-muted);\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  text-align: center;\r\n}\r\n\r\n.kw-ks-video__caption strong {\r\n  color: var(--kv-green);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-ks-video__content {\r\n  min-width: 0;\r\n  padding: 34px 34px 34px 12px;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__eyebrow {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  margin: 0 0 14px;\r\n  padding: 0;\r\n  color: var(--kv-green);\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n  line-height: 1.5;\r\n  letter-spacing: .12em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.kw-ks-video__eyebrow::before {\r\n  content: \"\";\r\n  flex: 0 0 8px;\r\n  height: 8px;\r\n  border-radius: 50%;\r\n  background: var(--kv-green);\r\n  box-shadow: 0 0 0 5px rgba(56, 83, 58, .08);\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__title {\r\n  margin: 0 0 16px;\r\n  padding: 0;\r\n  color: var(--kv-text);\r\n  font-size: clamp(25px, 3vw, 36px);\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  letter-spacing: -.035em;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-ks-video__title span {\r\n  color: var(--kv-green);\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__description {\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--kv-muted);\r\n  font-size: 15px;\r\n  line-height: 1.75;\r\n}\r\n\r\n.kw-ks-video__description strong {\r\n  color: var(--kv-text);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__detail {\r\n  margin: 20px 0;\r\n  padding: 14px 16px;\r\n  border: 1px solid var(--kv-line);\r\n  border-left: 3px solid var(--kv-green);\r\n  border-radius: 0 12px 12px 0;\r\n  background: rgba(255, 255, 255, .8);\r\n  color: var(--kv-muted);\r\n  font-size: 14px;\r\n  line-height: 1.6;\r\n}\r\n\r\n.kw-ks-video__detail strong {\r\n  display: block;\r\n  margin-bottom: 4px;\r\n  color: var(--kv-green);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__cta {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 12px;\r\n  max-width: 100%;\r\n  min-height: 56px;\r\n  padding: 13px 20px;\r\n\r\n  border: 1px solid var(--kv-green);\r\n  border-radius: 13px;\r\n  background: var(--kv-green);\r\n  color: #fff !important;\r\n  box-shadow: 0 8px 20px rgba(56, 83, 58, .12);\r\n\r\n  text-decoration: none !important;\r\n  transition: background .2s ease, transform .2s ease;\r\n}\r\n\r\n.kw-ks-video__cta svg {\r\n  display: block;\r\n  flex: 0 0 21px;\r\n  width: 21px;\r\n  height: 21px;\r\n}\r\n\r\n.kw-ks-video__cta-label {\r\n  display: block;\r\n  min-width: 0;\r\n}\r\n\r\n.kw-ks-video__cta-label small {\r\n  display: block;\r\n  color: #fff;\r\n  font-size: 11px;\r\n  line-height: 1.4;\r\n}\r\n\r\n.kw-ks-video__cta-label strong {\r\n  display: block;\r\n  color: #fff;\r\n  font-size: 17px;\r\n  font-weight: 750;\r\n  line-height: 1.4;\r\n  white-space: nowrap;\r\n}\r\n\r\n.kw-ks-video .kw-ks-video__cta:focus-visible {\r\n  outline: 3px solid var(--kv-green);\r\n  outline-offset: 4px;\r\n}\r\n\r\n@media (hover: hover) {\r\n  .kw-ks-video .kw-ks-video__cta:hover {\r\n    background: #29432c;\r\n    transform: translateY(-2px);\r\n  }\r\n}\r\n\r\n@media (max-width: 800px) {\r\n  .kw-ks-video {\r\n    margin: 20px auto;\r\n    border-radius: 18px;\r\n  }\r\n\r\n  .kw-ks-video__layout {\r\n    grid-template-columns: minmax(0, 1fr);\r\n  }\r\n\r\n  .kw-ks-video__media {\r\n    padding: 12px 12px 0;\r\n  }\r\n\r\n  .kw-ks-video__frame {\r\n    border-radius: 12px;\r\n  }\r\n\r\n  .kw-ks-video__content {\r\n    padding: 24px 18px 20px;\r\n  }\r\n\r\n  .kw-ks-video .kw-ks-video__title {\r\n    font-size: clamp(25px, 6vw, 32px);\r\n  }\r\n\r\n  .kw-ks-video .kw-ks-video__description {\r\n    font-size: 14px;\r\n    line-height: 1.7;\r\n  }\r\n\r\n  .kw-ks-video .kw-ks-video__cta {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .kw-ks-video .kw-ks-video__cta {\r\n    transition: none;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"kw-ks-video\"\r\n  aria-label=\"Film o aluminiowych karniszach gi\u0119tych\">\r\n\r\n  <div class=\"kw-ks-video__layout\">\r\n\r\n    <div class=\"kw-ks-video__media\">\r\n      <div class=\"kw-ks-video__frame\">\r\n        <iframe\r\n          src=\"https:\/\/www.youtube-nocookie.com\/embed\/3aw4Z1-AaKs\"\r\n          title=\"Wymiana plastikowych karniszy na aluminiowe szyny sufitowe gi\u0119te \u2014 AZHOME\"\r\n          width=\"560\"\r\n          height=\"315\"\r\n          loading=\"lazy\"\r\n          referrerpolicy=\"strict-origin-when-cross-origin\"\r\n          allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n          allowfullscreen>\r\n        <\/iframe>\r\n      <\/div>\r\n\r\n      <p class=\"kw-ks-video__caption\">\r\n        <strong>AZHOME<\/strong> \u00b7 Karnisze KS na wymiar \u00b7 Warszawa\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"kw-ks-video__content\">\r\n\r\n      <p class=\"kw-ks-video__eyebrow\">\r\n        Zobacz, jak to robimy\r\n      <\/p>\r\n\r\n      <h2 class=\"kw-ks-video__title\">\r\n        Karnisz z zakr\u0119tem.<br>\r\n        <span>P\u0142ynne przesuwanie zas\u0142on.<\/span>\r\n      <\/h2>\r\n\r\n      <p class=\"kw-ks-video__description\">\r\n        Zobacz, jak wymieniamy plastikowe karnisze z \u0142\u0105cznikiem,\r\n        na kt\u00f3rym zacinaj\u0105 si\u0119 \u015blizgi, na\r\n        <strong>aluminiowe szyny sufitowe gi\u0119te<\/strong>.\r\n        Dopasowany zakr\u0119t pozwala wygodnie przesuwa\u0107 firany\r\n        i zas\u0142ony, bez szarpania tkanin.\r\n      <\/p>\r\n\r\n      <div class=\"kw-ks-video__detail\">\r\n        <strong>Zakr\u0119t dopasowany do Twojego wn\u0119trza<\/strong>\r\n        Wykonujemy karnisze KS na dok\u0142adny wymiar\r\n        i oferujemy monta\u017c w Warszawie oraz okolicach.\r\n      <\/div>\r\n\r\n      <a\r\n        class=\"kw-ks-video__cta\"\r\n        href=\"tel:+48667067777\"\r\n        aria-label=\"Zam\u00f3w karnisz na wymiar \u2014 zadzwo\u0144: 667 067 777\">\r\n\r\n        <svg\r\n          viewBox=\"0 0 24 24\"\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          stroke-width=\"1.7\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          aria-hidden=\"true\">\r\n          <path d=\"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.5 2.1L8 10a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.5c.9.3 1.9.6 2.9.7a2 2 0 0 1 1.7 2z\"\/>\r\n        <\/svg>\r\n\r\n        <span class=\"kw-ks-video__cta-label\">\r\n          <small>Zam\u00f3w na wymiar<\/small>\r\n          <strong>+48 667 067 777<\/strong>\r\n        <\/span>\r\n\r\n      <\/a>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n\n<!-- wp:columns {\"verticalAlignment\":\"center\",\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|40\",\"left\":\"var:preset|spacing|40\"}}}} -->\n<div class=\"wp-block-columns are-vertically-aligned-center\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:image {\"id\":312,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/produkt.webp\" alt=\"Karnisze ks do zas\u0142on wave i flex\" class=\"wp-image-312\" srcset=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/produkt.webp 1536w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/produkt-300x200.webp 300w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/produkt-1024x683.webp 1024w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/produkt-768x512.webp 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n<!-- \/wp:image --><\/div>\n<!-- \/wp:column -->\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Karnisze do zas\u0142on wave oraz na flexach.<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"style\":{\"typography\":{\"letterSpacing\":\"1px\",\"lineHeight\":\"2.2\"}}} -->\n<p style=\"letter-spacing:1px;line-height:2.2\">Karnisze KS mo\u017cesz zam\u00f3wi\u0107 z r\u00f3\u017cnego typu \u015blizgami, przystosowanymi <strong>do zas\u0142on i firan wave oraz szytych na flexach<\/strong>. Standardowo stosujemy \u015blizgi z oczkami, i s\u0105 one uniwersalne. Mo\u017cna powiesi\u0107 zas\u0142ony i firanki szyte na flexach lub ta\u015bmach marszcz\u0105cych.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:buttons -->\n<div class=\"wp-block-buttons\"><!-- wp:button -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/szyciezaslon.pl\" title=\"Szycie zas\u0142on Warszawa\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Przeczytaj o zas\u0142onach na wymiar w AZHOME<\/a><\/div>\n<!-- \/wp:button --><\/div>\n<!-- \/wp:buttons --><\/div>\n<!-- \/wp:column --><\/div>\n<!-- \/wp:columns -->\n\n<!-- wp:columns {\"verticalAlignment\":\"center\",\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|40\",\"left\":\"var:preset|spacing|40\"}}}} -->\n<div class=\"wp-block-columns are-vertically-aligned-center\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:image {\"id\":245,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisz-elektryczny.webp\" alt=\"Karnisze elektryczne Warszawa\" class=\"wp-image-245\" srcset=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisz-elektryczny.webp 1536w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisz-elektryczny-300x200.webp 300w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisz-elektryczny-1024x683.webp 1024w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisz-elektryczny-768x512.webp 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n<!-- \/wp:image --><\/div>\n<!-- \/wp:column -->\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:heading {\"style\":{\"color\":{\"text\":\"#222222\"},\"elements\":{\"link\":{\"color\":{\"text\":\"#222222\"}}}}} -->\n<h2 class=\"wp-block-heading has-text-color has-link-color\" style=\"color:#222222\">Karnisze elektryczne i akumulatorowe.<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"style\":{\"typography\":{\"letterSpacing\":\"1px\",\"lineHeight\":\"2.2\"}}} -->\n<p style=\"letter-spacing:1px;line-height:2.2\">Nasza oferta jest kompleksowa. Mo\u017cesz zam\u00f3wi\u0107 karnisze elektryczne i akumulatorowe na wymiar. Oferujemy nowoczesne silniki smart sterowane pilotem lub aplikacj\u0105 Tuya w telefonie przez wbudowany modu\u0142 wifi lub zigbee. <strong>Karnisze elektryczne<\/strong> tak\u017ce wykonujemy <strong>w 24 godziny<\/strong>, z mo\u017cliwo\u015bci\u0105 wykonania gi\u0119cia o promieniu 22 cm.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:buttons -->\n<div class=\"wp-block-buttons\"><!-- wp:button -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/karnisze-warszawa.pl\" title=\"Karnisze elektryczne Warszawa\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Przeczytaj wi\u0119cej o karniszach elektrycznych<\/a><\/div>\n<!-- \/wp:button -->\n\n<!-- wp:button -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"tel:+48667067777\">Zam\u00f3w na wymiar +48 667 067 777<\/a><\/div>\n<!-- \/wp:button --><\/div>\n<!-- \/wp:buttons --><\/div>\n<!-- \/wp:column --><\/div>\n<!-- wp:shortcode -->\n<section id=\"porownanie\">\n<\/section>\n<!-- HFCM by 99 Robots - Snippet # 19: por\u00f3wnanie karniszy -->\n<!-- AZHOME \u2014 JAK WYBRA\u0106 KARNISZ ELEKTRYCZNY -->\r\n<style>\r\n.kw-electric-box {\r\n  --ke-green: #38533a;\r\n  --ke-text: #262c25;\r\n  --ke-muted: #62695e;\r\n  --ke-line: #dfe5d9;\r\n\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  max-width: 1240px;\r\n  margin: 28px auto;\r\n  overflow: hidden;\r\n  border: 1px solid var(--ke-line);\r\n  border-radius: 24px;\r\n  background: linear-gradient(135deg, #fff 35%, #f5f7f2);\r\n  box-shadow: 0 14px 40px rgba(40, 58, 35, .06);\r\n  color: var(--ke-text);\r\n  font-family: inherit;\r\n}\r\n\r\n.kw-electric-box *,\r\n.kw-electric-box *::before,\r\n.kw-electric-box *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-electric-box__layout {\r\n  display: grid;\r\n  grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);\r\n  align-items: center;\r\n}\r\n\r\n.kw-electric-box__media {\r\n  min-width: 0;\r\n  padding: 26px;\r\n}\r\n\r\n.kw-electric-box__frame {\r\n  position: relative;\r\n  width: 100%;\r\n  aspect-ratio: 16 \/ 9;\r\n  overflow: hidden;\r\n  border: 1px solid var(--ke-line);\r\n  border-radius: 16px;\r\n  background: #e9ede5;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__frame iframe {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: block;\r\n  width: 100%;\r\n  height: 100%;\r\n  max-width: none;\r\n  margin: 0;\r\n  border: 0;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__caption {\r\n  margin: 13px 0 0;\r\n  padding: 0;\r\n  color: var(--ke-muted);\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  text-align: center;\r\n}\r\n\r\n.kw-electric-box__caption strong {\r\n  color: var(--ke-green);\r\n}\r\n\r\n.kw-electric-box__content {\r\n  min-width: 0;\r\n  padding: 34px 34px 34px 12px;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__eyebrow {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  margin: 0 0 14px;\r\n  padding: 0;\r\n  color: var(--ke-green);\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n  line-height: 1.5;\r\n  letter-spacing: .12em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.kw-electric-box__eyebrow::before {\r\n  content: \"\";\r\n  flex: 0 0 8px;\r\n  height: 8px;\r\n  border-radius: 50%;\r\n  background: var(--ke-green);\r\n  box-shadow: 0 0 0 5px rgba(56, 83, 58, .08);\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__title {\r\n  margin: 0 0 16px;\r\n  padding: 0;\r\n  color: var(--ke-text);\r\n  font-size: clamp(25px, 3vw, 36px);\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  letter-spacing: -.035em;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-electric-box__title span {\r\n  color: var(--ke-green);\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__text {\r\n  margin: 0 0 14px;\r\n  padding: 0;\r\n  color: var(--ke-muted);\r\n  font-size: 15px;\r\n  line-height: 1.75;\r\n}\r\n\r\n.kw-electric-box__text strong {\r\n  color: var(--ke-text);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-electric-box__highlight {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 13px;\r\n  margin: 22px 0 0;\r\n  padding: 17px;\r\n  border: 1px solid var(--ke-line);\r\n  border-radius: 14px;\r\n  background: rgba(255, 255, 255, .9);\r\n}\r\n\r\n.kw-electric-box__icon {\r\n  display: grid;\r\n  place-items: center;\r\n  flex: 0 0 40px;\r\n  height: 40px;\r\n  border-radius: 11px;\r\n  background: #eff3eb;\r\n  color: var(--ke-green);\r\n}\r\n\r\n.kw-electric-box__icon svg {\r\n  display: block;\r\n  width: 23px;\r\n  height: 23px;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__highlight h3 {\r\n  margin: 0 0 5px;\r\n  padding: 0;\r\n  color: var(--ke-green);\r\n  font-size: 17px;\r\n  font-weight: 800;\r\n  line-height: 1.35;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__highlight p {\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--ke-muted);\r\n  font-size: 13px;\r\n  line-height: 1.65;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__tags {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 7px;\r\n  margin: 18px 0 0;\r\n  padding: 0;\r\n  list-style: none;\r\n}\r\n\r\n.kw-electric-box .kw-electric-box__tags li {\r\n  margin: 0;\r\n  padding: 7px 10px;\r\n  border: 1px solid var(--ke-line);\r\n  border-radius: 999px;\r\n  background: #fff;\r\n  color: var(--ke-green);\r\n  font-size: 11px;\r\n  font-weight: 650;\r\n  line-height: 1.4;\r\n  list-style: none;\r\n}\r\n\r\n@media (max-width: 800px) {\r\n  .kw-electric-box {\r\n    margin: 20px auto;\r\n    border-radius: 18px;\r\n  }\r\n\r\n  .kw-electric-box__layout {\r\n    grid-template-columns: minmax(0, 1fr);\r\n  }\r\n\r\n  .kw-electric-box__media {\r\n    padding: 12px 12px 0;\r\n  }\r\n\r\n  .kw-electric-box__frame {\r\n    border-radius: 12px;\r\n  }\r\n\r\n  .kw-electric-box__content {\r\n    padding: 24px 18px 20px;\r\n  }\r\n\r\n  .kw-electric-box .kw-electric-box__title {\r\n    font-size: clamp(25px, 6vw, 32px);\r\n  }\r\n\r\n  .kw-electric-box .kw-electric-box__text {\r\n    font-size: 14px;\r\n    line-height: 1.7;\r\n  }\r\n\r\n  .kw-electric-box__highlight {\r\n    gap: 11px;\r\n    padding: 14px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"kw-electric-box\"\r\n  aria-label=\"Jak wybra\u0107 karnisz elektryczny \u2014 poradnik wideo\">\r\n\r\n  <div class=\"kw-electric-box__layout\">\r\n\r\n    <div class=\"kw-electric-box__media\">\r\n      <div class=\"kw-electric-box__frame\">\r\n        <iframe\r\n          src=\"https:\/\/www.youtube-nocookie.com\/embed\/MUlbOAXNK2g\"\r\n          title=\"Karnisz elektryczny do samodzielnego z\u0142o\u017cenia czy na wymiar? \u2014 AZHOME\"\r\n          width=\"560\"\r\n          height=\"315\"\r\n          loading=\"lazy\"\r\n          referrerpolicy=\"strict-origin-when-cross-origin\"\r\n          allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n          allowfullscreen>\r\n        <\/iframe>\r\n      <\/div>\r\n\r\n      <p class=\"kw-electric-box__caption\">\r\n        <strong>AZHOME<\/strong> \u00b7 Karnisze elektryczne \u00b7 Warszawa\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"kw-electric-box__content\">\r\n\r\n      <p class=\"kw-electric-box__eyebrow\">\r\n        Poradnik wideo \u00b7 wyb\u00f3r karnisza\r\n      <\/p>\r\n\r\n      <h2 class=\"kw-electric-box__title\">\r\n        Jaki wybra\u0107<br>\r\n        <span>karnisz elektryczny?<\/span>\r\n      <\/h2>\r\n\r\n      <p class=\"kw-electric-box__text\">\r\n        Zestaw do samodzielnego z\u0142o\u017cenia czy karnisz przygotowany\r\n        na dok\u0142adny wymiar z monta\u017cem?\r\n        <strong>Na filmie pokazujemy r\u00f3\u017cnice<\/strong>\r\n        na przyk\u0142adzie realizacji u naszego klienta.\r\n      <\/p>\r\n\r\n      <p class=\"kw-electric-box__text\">\r\n        Po wcze\u015bniejszym zakupie klient zdecydowa\u0142 si\u0119 na\r\n        <strong>AM75 WiFi Tuya<\/strong> z nasz\u0105 kompleksow\u0105 us\u0142ug\u0105.\r\n        Otrzyma\u0142 karnisz dopasowany do wn\u0119trza oraz wygodne\r\n        sterowanie zas\u0142onami pilotem lub aplikacj\u0105.\r\n      <\/p>\r\n\r\n      <div class=\"kw-electric-box__highlight\">\r\n        <span class=\"kw-electric-box__icon\" aria-hidden=\"true\">\r\n          <svg\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"1.7\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\">\r\n            <path d=\"M12 3 4 6v6c0 5 8 9 8 9s8-4 8-9V6l-8-3Z\"\/>\r\n            <path d=\"m8.5 12 2.5 2.5 4.5-5\"\/>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <div>\r\n          <h3>6 lat gwarancji w tej realizacji<\/h3>\r\n          <p>\r\n            Klient przedstawiony na filmie otrzyma\u0142 od nas\r\n            6-letni\u0105 gwarancj\u0119 na zam\u00f3wiony karnisz\r\n            AM75 WiFi Tuya z kompleksow\u0105 us\u0142ug\u0105.\r\n          <\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <ul class=\"kw-electric-box__tags\" aria-label=\"Cechy realizacji\">\r\n        <li>Na dok\u0142adny wymiar<\/li>\r\n        <li>Profesjonalny monta\u017c<\/li>\r\n        <li>Pilot i aplikacja<\/li>\r\n      <\/ul>\r\n\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n<section id=\"cennik-karniszy-elektrycznych\">\n<\/section>\n<!-- wp:shortcode -->\n<!-- HFCM by 99 Robots - Snippet # 3: tabelka cen elektrycznych -->\n<section class=\"cc-price-section\" aria-label=\"Cennik karniszy elektrycznych AZHOME\">\r\n\r\n  <h3 class=\"cc-price-title\">Cennik karniszy elektrycznych AZHOME<\/h3>\r\n<p class=\"cc-price-sub\">\r\n  Wy\u015blij wymiary na mail\r\n  <a href=\"mailto:kontakt@karniszewarszawa.pl\" style=\"font-weight:900;text-decoration:underline;\">\r\n    kontakt@karniszewarszawa.pl\r\n  <\/a>,\r\n  a my przygotujemy kalkulacj\u0119.\r\n<\/p>\r\n\r\n  <!-- ===================== DESKTOP ===================== -->\r\n  <div class=\"cc-table cc-table--desktop\" role=\"region\" aria-label=\"Tabela cenowa desktop\">\r\n    <div class=\"cc-table-scroll\" tabindex=\"0\">\r\n      <table class=\"cc-pricetable\" data-cc-desktop-table>\r\n        <thead>\r\n          <tr>\r\n            <th data-col=\"0\">Rodzaj<\/th>\r\n            <th data-col=\"100\">100<\/th><th data-col=\"150\">150<\/th><th data-col=\"200\">200<\/th><th data-col=\"250\">250<\/th><th data-col=\"300\">300<\/th><th data-col=\"350\">350<\/th>\r\n            <th data-col=\"400\">400<\/th><th data-col=\"450\">450<\/th><th data-col=\"500\">500<\/th><th data-col=\"550\">550<\/th><th data-col=\"600\">600<\/th>\r\n            <th data-col=\"650\">650<\/th><th data-col=\"700\">700<\/th><th data-col=\"750\">750<\/th><th data-col=\"800\">800<\/th><th data-col=\"850\">850<\/th><th data-col=\"900\">900<\/th>\r\n            <th data-col=\"950\">950<\/th><th data-col=\"1000\">1000<\/th><th data-col=\"1050\">1050<\/th><th data-col=\"1100\">1100<\/th><th data-col=\"1150\">1150<\/th><th data-col=\"1200\">1200<\/th>\r\n          <\/tr>\r\n        <\/thead>\r\n\r\n        <tbody>\r\n          <tr data-type=\"AM50\" data-label=\"Karnisz AM50\">\r\n            <th data-col=\"0\">Karnisz AM50<\/th>\r\n            <td data-price=\"973\"  data-col=\"100\">973<\/td>\r\n            <td data-price=\"1042\" data-col=\"150\">1042<\/td>\r\n            <td data-price=\"1111\" data-col=\"200\">1111<\/td>\r\n            <td data-price=\"1180\" data-col=\"250\">1180<\/td>\r\n            <td data-price=\"1249\" data-col=\"300\">1249<\/td>\r\n            <td data-price=\"1317\" data-col=\"350\">1317<\/td>\r\n            <td data-price=\"1386\" data-col=\"400\">1386<\/td>\r\n            <td data-price=\"1453\" data-col=\"450\">1453<\/td>\r\n            <td data-price=\"1522\" data-col=\"500\">1522<\/td>\r\n            <td data-price=\"1591\" data-col=\"550\">1591<\/td>\r\n            <td data-price=\"1659\" data-col=\"600\">1659<\/td>\r\n            <td class=\"cc-na\" data-col=\"650\">\u2014<\/td><td class=\"cc-na\" data-col=\"700\">\u2014<\/td><td class=\"cc-na\" data-col=\"750\">\u2014<\/td><td class=\"cc-na\" data-col=\"800\">\u2014<\/td>\r\n            <td class=\"cc-na\" data-col=\"850\">\u2014<\/td><td class=\"cc-na\" data-col=\"900\">\u2014<\/td><td class=\"cc-na\" data-col=\"950\">\u2014<\/td><td class=\"cc-na\" data-col=\"1000\">\u2014<\/td>\r\n            <td class=\"cc-na\" data-col=\"1050\">\u2014<\/td><td class=\"cc-na\" data-col=\"1100\">\u2014<\/td><td class=\"cc-na\" data-col=\"1150\">\u2014<\/td><td class=\"cc-na\" data-col=\"1200\">\u2014<\/td>\r\n          <\/tr>\r\n\r\n          <tr data-type=\"AM50_BAT\" data-label=\"Karnisz AM50 bateryjny\">\r\n            <th data-col=\"0\">Karnisz AM50 bateryjny<\/th>\r\n            <td data-price=\"1192\" data-col=\"100\">1192<\/td>\r\n            <td data-price=\"1252\" data-col=\"150\">1252<\/td>\r\n            <td data-price=\"1312\" data-col=\"200\">1312<\/td>\r\n            <td data-price=\"1373\" data-col=\"250\">1373<\/td>\r\n            <td data-price=\"1443\" data-col=\"300\">1443<\/td>\r\n            <td data-price=\"1493\" data-col=\"350\">1493<\/td>\r\n            <td data-price=\"1553\" data-col=\"400\">1553<\/td>\r\n            <td data-price=\"1614\" data-col=\"450\">1614<\/td>\r\n            <td data-price=\"1674\" data-col=\"500\">1674<\/td>\r\n            <td data-price=\"1734\" data-col=\"550\">1734<\/td>\r\n            <td data-price=\"1795\" data-col=\"600\">1795<\/td>\r\n            <td class=\"cc-na\" data-col=\"650\">\u2014<\/td><td class=\"cc-na\" data-col=\"700\">\u2014<\/td><td class=\"cc-na\" data-col=\"750\">\u2014<\/td><td class=\"cc-na\" data-col=\"800\">\u2014<\/td>\r\n            <td class=\"cc-na\" data-col=\"850\">\u2014<\/td><td class=\"cc-na\" data-col=\"900\">\u2014<\/td><td class=\"cc-na\" data-col=\"950\">\u2014<\/td><td class=\"cc-na\" data-col=\"1000\">\u2014<\/td>\r\n            <td class=\"cc-na\" data-col=\"1050\">\u2014<\/td><td class=\"cc-na\" data-col=\"1100\">\u2014<\/td><td class=\"cc-na\" data-col=\"1150\">\u2014<\/td><td class=\"cc-na\" data-col=\"1200\">\u2014<\/td>\r\n          <\/tr>\r\n\r\n          <tr data-type=\"AM75_WIFI\" data-label=\"Karnisz AM75 Wi-Fi \/ 5W\">\r\n            <th data-col=\"0\">Karnisz AM75 Wi-Fi \/ 5W<\/th>\r\n            <td data-price=\"1068\" data-col=\"100\">1068<\/td>\r\n            <td data-price=\"1137\" data-col=\"150\">1137<\/td>\r\n            <td data-price=\"1205\" data-col=\"200\">1205<\/td>\r\n            <td data-price=\"1274\" data-col=\"250\">1274<\/td>\r\n            <td data-price=\"1343\" data-col=\"300\">1343<\/td>\r\n            <td data-price=\"1412\" data-col=\"350\">1412<\/td>\r\n            <td data-price=\"1481\" data-col=\"400\">1481<\/td>\r\n            <td data-price=\"1547\" data-col=\"450\">1547<\/td>\r\n            <td data-price=\"1616\" data-col=\"500\">1616<\/td>\r\n            <td data-price=\"1685\" data-col=\"550\">1685<\/td>\r\n            <td data-price=\"1754\" data-col=\"600\">1754<\/td>\r\n            <td data-price=\"1823\" data-col=\"650\">1823<\/td>\r\n            <td data-price=\"1892\" data-col=\"700\">1892<\/td>\r\n            <td data-price=\"1961\" data-col=\"750\">1961<\/td>\r\n            <td data-price=\"2030\" data-col=\"800\">2030<\/td>\r\n            <td data-price=\"2098\" data-col=\"850\">2098<\/td>\r\n            <td data-price=\"2165\" data-col=\"900\">2165<\/td>\r\n            <td data-price=\"2234\" data-col=\"950\">2234<\/td>\r\n            <td data-price=\"2303\" data-col=\"1000\">2303<\/td>\r\n            <td data-price=\"2371\" data-col=\"1050\">2371<\/td>\r\n            <td data-price=\"2440\" data-col=\"1100\">2440<\/td>\r\n            <td data-price=\"2509\" data-col=\"1150\">2509<\/td>\r\n            <td data-price=\"2578\" data-col=\"1200\">2578<\/td>\r\n          <\/tr>\r\n\r\n          <tr data-type=\"AM75_ZIGBEE\" data-label=\"Karnisz AM75 Zigbee\">\r\n            <th data-col=\"0\">Karnisz AM75 Zigbee<\/th>\r\n            <td data-price=\"1117\" data-col=\"100\">1117<\/td>\r\n            <td data-price=\"1186\" data-col=\"150\">1186<\/td>\r\n            <td data-price=\"1255\" data-col=\"200\">1255<\/td>\r\n            <td data-price=\"1323\" data-col=\"250\">1323<\/td>\r\n            <td data-price=\"1392\" data-col=\"300\">1392<\/td>\r\n            <td data-price=\"1461\" data-col=\"350\">1461<\/td>\r\n            <td data-price=\"1530\" data-col=\"400\">1530<\/td>\r\n            <td data-price=\"1597\" data-col=\"450\">1597<\/td>\r\n            <td data-price=\"1665\" data-col=\"500\">1665<\/td>\r\n            <td data-price=\"1734\" data-col=\"550\">1734<\/td>\r\n            <td data-price=\"1803\" data-col=\"600\">1803<\/td>\r\n            <td data-price=\"1872\" data-col=\"650\">1872<\/td>\r\n            <td data-price=\"1941\" data-col=\"700\">1941<\/td>\r\n            <td data-price=\"2010\" data-col=\"750\">2010<\/td>\r\n            <td data-price=\"2079\" data-col=\"800\">2079<\/td>\r\n            <td data-price=\"2148\" data-col=\"850\">2148<\/td>\r\n            <td data-price=\"2214\" data-col=\"900\">2214<\/td>\r\n            <td data-price=\"2283\" data-col=\"950\">2283<\/td>\r\n            <td data-price=\"2352\" data-col=\"1000\">2352<\/td>\r\n            <td data-price=\"2421\" data-col=\"1050\">2421<\/td>\r\n            <td data-price=\"2490\" data-col=\"1100\">2490<\/td>\r\n            <td data-price=\"2558\" data-col=\"1150\">2558<\/td>\r\n            <td data-price=\"2627\" data-col=\"1200\">2627<\/td>\r\n          <\/tr>\r\n        <\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <div class=\"cc-table-note\">\r\n      <strong>TIP dla Ciebie<\/strong> kliknij w dowoln\u0105 cen\u0119 \u2014 pod\u015bwietl\u0119 wiersz i kolumn\u0119 oraz poka\u017c\u0119 szczeg\u00f3\u0142 w dymku.\r\n    <\/div>\r\n\r\n    <!-- Tooltip -->\r\n    <div class=\"cc-tip\" data-cc-tip role=\"status\" aria-live=\"polite\" aria-hidden=\"true\"><\/div>\r\n  <\/div>\r\n\r\n  <!-- ===================== MOBILE ===================== -->\r\n  <div class=\"cc-table cc-table--mobile\" aria-label=\"Tabela cenowa mobile\">\r\n    <div class=\"cc-mobile-head\">\r\n      <label class=\"cc-mobile-field\">\r\n        <span>Wybierz rodzaj karnisza<\/span>\r\n        <select class=\"cc-mobile-select\" data-cc-mobile-select>\r\n          <option value=\"AM50\" selected>Karnisz AM50<\/option>\r\n          <option value=\"AM50_BAT\">Karnisz AM50 bateryjny<\/option>\r\n          <option value=\"AM75_WIFI\">Karnisz AM75 Wi-Fi \/ 5W<\/option>\r\n          <option value=\"AM75_ZIGBEE\">Karnisz AM75 Zigbee<\/option>\r\n        <\/select>\r\n      <\/label>\r\n\r\n      <div class=\"cc-mobile-chip\" data-cc-mobile-max>Max: \u2014<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"cc-mobile-quick\">\r\n      <label class=\"cc-mobile-field\">\r\n        <span>Wpisz d\u0142ugo\u015b\u0107 (cm)<\/span>\r\n        <input class=\"cc-mobile-input\" data-cc-mobile-len type=\"number\" inputmode=\"numeric\" min=\"80\" max=\"1200\" step=\"1\" placeholder=\"np. 101\">\r\n      <\/label>\r\n\r\n      <div class=\"cc-mobile-result\" data-cc-mobile-result aria-live=\"polite\">\r\n        <div class=\"cc-mr-title\">Wycena<\/div>\r\n        <div class=\"cc-mr-line\" data-cc-mobile-bracket>\u2014<\/div>\r\n        <div class=\"cc-mr-price\" data-cc-mobile-price>\u2014<\/div>\r\n        <div class=\"cc-mr-hint\" data-cc-mobile-hint>Wpisz d\u0142ugo\u015b\u0107, a poka\u017c\u0119 pr\u00f3g i cen\u0119.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"cc-mobile-tablewrap\">\r\n      <table class=\"cc-mobile-table\" data-cc-mobile-table>\r\n        <thead>\r\n          <tr>\r\n            <th>Pr\u00f3g d\u0142ugo\u015bci<\/th>\r\n            <th>Cena<\/th>\r\n          <\/tr>\r\n        <\/thead>\r\n        <tbody><!-- JS --><\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <div class=\"cc-table-note\">\r\n      Wy\u015blij wymiary na mail <stron>kontakt@karniszewarszawa.pl<\/stron>, a my przygotujemy kalkulacj\u0119.\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ===================== MIN\/MAX ===================== -->\r\n  <h4 class=\"cc-price-title cc-price-title--sm\">Minimalne i maksymalne d\u0142ugo\u015bci<\/h4>\r\n  <div class=\"cc-limits\">\r\n    <table class=\"cc-limitstable\">\r\n      <thead>\r\n        <tr>\r\n          <th>Rodzaj<\/th>\r\n          <th>Minimalna d\u0142ugo\u015b\u0107<\/th>\r\n          <th>Maksymalna d\u0142ugo\u015b\u0107<\/th>\r\n          <th>Uwagi<\/th>\r\n        <\/tr>\r\n      <\/thead>\r\n      <tbody>\r\n        <tr><th>AM50<\/th><td>80 cm<\/td><td>600 cm<\/td><td>Progi cenowe od 100 cm<\/td><\/tr>\r\n        <tr><th>AM50 bateryjny<\/th><td>80 cm<\/td><td>600 cm<\/td><td>Progi cenowe od 100 cm<\/td><\/tr>\r\n        <tr><th>AM75 Wi-Fi \/ 5W<\/th><td>80 cm<\/td><td>1200 cm<\/td><td>Progi cenowe od 100 cm<\/td><\/tr>\r\n        <tr><th>AM75 Zigbee<\/th><td>80 cm<\/td><td>1200 cm<\/td><td>Progi cenowe od 100 cm<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n\r\n    <div class=\"cc-limits-note\">\r\n      Dla d\u0142ugo\u015bci 80\u2013100 cm kalkulacja jest liczona jak dla 100 cm.\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n<style>\r\n  .cc-price-section{max-width:980px;margin:26px auto;padding:0 12px;}\r\n  .cc-price-title{margin:0 0 8px 0;font-size:18px;line-height:1.25;}\r\n  .cc-price-title--sm{margin-top:18px;font-size:16px;}\r\n  .cc-price-sub{margin:0 0 12px 0;font-size:13px;line-height:1.35;color:#555;}\r\n\r\n  .cc-table-note,.cc-limits-note{\r\n    margin-top:10px;font-size:12px;line-height:1.35;color:#333;\r\n    padding:10px 12px;border-radius:12px;\r\n    border:1px solid rgba(0,0,0,.08);background:#fff;\r\n  }\r\n\r\n  \/* ===== DESKTOP ===== *\/\r\n  .cc-table--desktop{position:relative;}\r\n  .cc-table-scroll{\r\n    overflow-x:auto;-webkit-overflow-scrolling:touch;\r\n    border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff;\r\n  }\r\n\r\n  .cc-pricetable{\r\n    border-collapse:separate;border-spacing:0;\r\n    min-width:980px;width:100%;\r\n    font-size:12px;line-height:1.25;\r\n  }\r\n\r\n  .cc-pricetable th,.cc-pricetable td{\r\n    padding:10px 10px;text-align:center;white-space:nowrap;\r\n    border-bottom:1px solid rgba(0,0,0,.06);\r\n    border-right:1px solid rgba(0,0,0,.06);\r\n  }\r\n\r\n  \/* ===== STICKY: bez prze\u015bwit\u00f3w + poprawny naro\u017cnik ===== *\/\r\n  .cc-pricetable thead th{\r\n    position:sticky;top:0;z-index:3;\r\n    background:#FFF4CD;            \/* pe\u0142ne t\u0142o (bez rgba) *\/\r\n    font-weight:900;\r\n  }\r\n\r\n  .cc-pricetable tbody th{\r\n    position:sticky;left:0;z-index:5;\r\n    text-align:left;font-weight:900;\r\n    background:#FAFAFA;            \/* pe\u0142ne t\u0142o (bez rgba) *\/\r\n    box-shadow: 10px 0 18px rgba(0,0,0,.06);\r\n    background-clip: padding-box;\r\n  }\r\n\r\n  .cc-pricetable thead th:first-child{\r\n    position:sticky;top:0;left:0;\r\n    z-index:7;                     \/* najwy\u017cej *\/\r\n    background:#FFF4CD;            \/* pe\u0142ne t\u0142o *\/\r\n    box-shadow: 10px 0 18px rgba(0,0,0,.06);\r\n    background-clip: padding-box;\r\n    text-align:left;\r\n  }\r\n\r\n  .cc-pricetable td.cc-na{color:#999;background:rgba(0,0,0,.015);}\r\n\r\n  \/* klikane ceny *\/\r\n  .cc-pricetable td[data-price]{\r\n    cursor:pointer;\r\n    transition: background-color .12s ease, box-shadow .12s ease, transform .05s ease;\r\n  }\r\n  .cc-pricetable td[data-price]:active{transform:translateY(1px);}\r\n\r\n  \/* zaznaczenia (wisienka) *\/\r\n  .cc-pricetable.is-picked td,\r\n  .cc-pricetable.is-picked th{transition: background-color .12s ease, box-shadow .12s ease;}\r\n  .cc-pricetable .cc-hl-row td,\r\n  .cc-pricetable .cc-hl-row th{background: rgba(255, 244, 205, .38);}\r\n  .cc-pricetable .cc-hl-col{background: rgba(0, 82, 204, .06);}\r\n  .cc-pricetable .cc-hl-cell{\r\n    background: rgba(34,139,34,.10) !important;\r\n    box-shadow: inset 0 0 0 2px rgba(34,139,34,.28);\r\n  }\r\n\r\n  \/* tooltip *\/\r\n  .cc-tip{\r\n    position:absolute;\r\n    display:none;\r\n    z-index:50;\r\n    max-width:260px;\r\n    padding:10px 12px;\r\n    border-radius:12px;\r\n    border:1px solid rgba(0,0,0,.10);\r\n    background:#fff;\r\n    box-shadow:0 14px 40px rgba(0,0,0,.16);\r\n    font-size:12px;line-height:1.3;color:#111;\r\n  }\r\n  .cc-tip strong{font-weight:900;}\r\n  .cc-tip small{font-size:11px;opacity:.82;}\r\n  .cc-tip::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    left:18px;\r\n    top:100%;\r\n    border:8px solid transparent;\r\n    border-top-color:#fff;\r\n    filter: drop-shadow(0 2px 1px rgba(0,0,0,.08));\r\n  }\r\n\r\n  \/* ===== MOBILE ===== *\/\r\n  .cc-table--mobile{display:none;}\r\n\r\n  .cc-mobile-head{display:flex;gap:10px;align-items:flex-end;justify-content:space-between;margin:10px 0;}\r\n  .cc-mobile-field{flex:1;min-width:0;text-align:left;}\r\n  .cc-mobile-field span{display:block;font-size:12px;color:#555;margin-bottom:6px;}\r\n  .cc-mobile-select,.cc-mobile-input{\r\n    width:100%;padding:11px 12px;border:1px solid rgba(0,0,0,.14);\r\n    border-radius:12px;background:#fff;font-weight:800;outline:none;\r\n  }\r\n  .cc-mobile-select:focus,.cc-mobile-input:focus{\r\n    border-color: rgba(184,137,45,.85);\r\n    box-shadow: 0 0 0 3px rgba(184,137,45,.18);\r\n    background-color: rgba(255, 244, 205, .55);\r\n  }\r\n  .cc-mobile-chip{\r\n    flex:0 0 auto;padding:10px 10px;border-radius:999px;\r\n    border:1px solid rgba(0,0,0,.10);background:rgba(0,0,0,.02);\r\n    font-size:12px;font-weight:900;color:#333;white-space:nowrap;\r\n  }\r\n  .cc-mobile-quick{margin:10px 0 12px 0;display:grid;gap:10px;}\r\n  .cc-mobile-result{\r\n    border:1px solid rgba(34,139,34,.22);\r\n    background:rgba(34,139,34,.08);\r\n    border-radius:14px;\r\n    padding:12px 12px;\r\n    text-align:left;\r\n  }\r\n  .cc-mobile-result.is-error{border-color: rgba(176,0,32,.25);background: rgba(176,0,32,.08);}\r\n  .cc-mr-title{font-weight:900;margin-bottom:6px;}\r\n  .cc-mr-line{font-size:12px;color:#333;margin-bottom:6px;}\r\n  .cc-mr-price{font-weight:900;font-size:18px;color:#1f7a2e;margin-bottom:4px;}\r\n  .cc-mobile-result.is-error .cc-mr-price{color:#b00020;}\r\n  .cc-mr-price small{font-size:12px;font-weight:800;opacity:.85;margin-left:6px;}\r\n  .cc-mr-hint{font-size:12px;color:#333;opacity:.9;}\r\n\r\n  .cc-mobile-tablewrap{border:1px solid rgba(0,0,0,.08);border-radius:14px;overflow:hidden;background:#fff;}\r\n  .cc-mobile-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;line-height:1.25;}\r\n  .cc-mobile-table thead th{\r\n    background:#FFF4CD;\r\n    font-weight:900;text-align:left;padding:12px 12px;border-bottom:1px solid rgba(0,0,0,.06);\r\n  }\r\n  .cc-mobile-table thead th:last-child{text-align:right;}\r\n  .cc-mobile-table tbody td{padding:12px 12px;border-bottom:1px solid rgba(0,0,0,.06);}\r\n  .cc-mobile-table tbody tr:last-child td{border-bottom:none;}\r\n  .cc-mobile-len{font-weight:800;color:#222;}\r\n  .cc-mobile-price{text-align:right;font-weight:900;color:#1f7a2e;}\r\n  .cc-mobile-price small{font-size:11px;font-weight:800;opacity:.8;margin-left:4px;}\r\n  .cc-mobile-na{text-align:right;color:#999;font-weight:800;}\r\n\r\n  \/* ===== Limity ===== *\/\r\n  .cc-limits{border:1px solid rgba(0,0,0,.08);border-radius:14px;background:#fff;padding:10px 12px;}\r\n  .cc-limitstable{width:100%;border-collapse:separate;border-spacing:0;font-size:12px;line-height:1.35;}\r\n  .cc-limitstable th,.cc-limitstable td{padding:10px 10px;border-bottom:1px solid rgba(0,0,0,.06);text-align:left;vertical-align:top;}\r\n  .cc-limitstable thead th{font-weight:900;background:#FFF4CD;}\r\n  .cc-limitstable tbody th{font-weight:900;}\r\n  .cc-limitstable tr:last-child th,.cc-limitstable tr:last-child td{border-bottom:none;}\r\n\r\n  \/* Prze\u0142\u0105czanie desktop\/mobile *\/\r\n  @media (max-width: 860px){\r\n    .cc-table--desktop{display:none;}\r\n    .cc-table--mobile{display:block;}\r\n    .cc-price-section{max-width:640px;}\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(() => {\r\n  const PRICES = {\r\n    AM50: {100:973,150:1042,200:1111,250:1180,300:1249,350:1317,400:1386,450:1453,500:1522,550:1591,600:1659},\r\n    AM50_BAT: {100:1192,150:1252,200:1312,250:1373,300:1443,350:1493,400:1553,450:1614,500:1674,550:1734,600:1795},\r\n    AM75_WIFI: {100:1068,150:1137,200:1205,250:1274,300:1343,350:1412,400:1481,450:1547,500:1616,550:1685,600:1754,650:1823,700:1892,750:1961,800:2030,850:2098,900:2165,950:2234,1000:2303,1050:2371,1100:2440,1150:2509,1200:2578},\r\n    AM75_ZIGBEE: {100:1117,150:1186,200:1255,250:1323,300:1392,350:1461,400:1530,450:1597,500:1665,550:1734,600:1803,650:1872,700:1941,750:2010,800:2079,850:2148,900:2214,950:2283,1000:2352,1050:2421,1100:2490,1150:2558,1200:2627}\r\n  };\r\n\r\n  const MAX_FOR = { AM50:600, AM50_BAT:600, AM75_WIFI:1200, AM75_ZIGBEE:1200 };\r\n\r\n  const ORDER = [100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200];\r\n  const MIN_LEN = 80;\r\n  const MAX_LEN = 1200;\r\n\r\n  const $ = (sel, root=document) => root.querySelector(sel);\r\n\r\n  function fmtInt(n){ return String(n).replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ' '); }\r\n  function ceilToBracket(v, brackets){ for (const b of brackets){ if (v <= b) return b; } return null; }\r\n\r\n  \/* ========= MOBILE ========= *\/\r\n  function renderMobileTable(type){\r\n    const table = $('[data-cc-mobile-table]');\r\n    const maxEl = $('[data-cc-mobile-max]');\r\n    if (!table) return;\r\n\r\n    const tbody = table.querySelector('tbody');\r\n    if (!tbody) return;\r\n\r\n    const max = MAX_FOR[type] ?? null;\r\n    if (maxEl) maxEl.textContent = max ? `Max: ${max} cm` : 'Max: \u2014';\r\n\r\n    const prices = PRICES[type] || {};\r\n    tbody.innerHTML = '';\r\n\r\n    for (const len of ORDER){\r\n      if (max && len > max) continue;\r\n\r\n      const price = prices[len];\r\n      const tr = document.createElement('tr');\r\n\r\n      const tdLen = document.createElement('td');\r\n      tdLen.className = 'cc-mobile-len';\r\n      tdLen.textContent = `${len} cm`;\r\n\r\n      const tdPrice = document.createElement('td');\r\n      if (Number.isFinite(price)){\r\n        tdPrice.className = 'cc-mobile-price';\r\n        tdPrice.innerHTML = `${fmtInt(price)} <small>z\u0142<\/small>`;\r\n      } else {\r\n        tdPrice.className = 'cc-mobile-na';\r\n        tdPrice.textContent = '\u2014';\r\n      }\r\n\r\n      tr.appendChild(tdLen);\r\n      tr.appendChild(tdPrice);\r\n      tbody.appendChild(tr);\r\n    }\r\n  }\r\n\r\n  function renderMobileQuick(type, lenRaw){\r\n    const box = $('[data-cc-mobile-result]');\r\n    const bracketEl = $('[data-cc-mobile-bracket]');\r\n    const priceEl = $('[data-cc-mobile-price]');\r\n    const hintEl = $('[data-cc-mobile-hint]');\r\n    if (!box || !bracketEl || !priceEl || !hintEl) return;\r\n\r\n    const maxT = MAX_FOR[type] ?? null;\r\n    const prices = PRICES[type] || {};\r\n    box.classList.remove('is-error');\r\n\r\n    const len = Number.parseFloat(lenRaw);\r\n\r\n    if (!Number.isFinite(len) || String(lenRaw).trim() === ''){\r\n      bracketEl.textContent = '\u2014';\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = 'Wpisz d\u0142ugo\u015b\u0107, a poka\u017c\u0119 pr\u00f3g i cen\u0119.';\r\n      return;\r\n    }\r\n\r\n    if (len < MIN_LEN){\r\n      box.classList.add('is-error');\r\n      bracketEl.textContent = '\u2014';\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = `Minimalna d\u0142ugo\u015b\u0107 to ${MIN_LEN} cm.`;\r\n      return;\r\n    }\r\n\r\n    if (len > MAX_LEN){\r\n      box.classList.add('is-error');\r\n      bracketEl.textContent = '\u2014';\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = `Maksymalna d\u0142ugo\u015b\u0107 to ${MAX_LEN} cm.`;\r\n      return;\r\n    }\r\n\r\n    const use = Math.max(len, 100);\r\n    const bracket = ceilToBracket(use, ORDER);\r\n\r\n    if (!bracket){\r\n      box.classList.add('is-error');\r\n      bracketEl.textContent = '\u2014';\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = 'Nie uda\u0142o si\u0119 dobra\u0107 progu d\u0142ugo\u015bci.';\r\n      return;\r\n    }\r\n\r\n    if (maxT && bracket > maxT){\r\n      box.classList.add('is-error');\r\n      bracketEl.textContent = `Pr\u00f3g: ${bracket} cm`;\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = `Osi\u0105gni\u0119to maksymaln\u0105 d\u0142ugo\u015b\u0107 dla tego rodzaju (max: ${maxT} cm).`;\r\n      return;\r\n    }\r\n\r\n    const price = prices[bracket];\r\n    if (!Number.isFinite(price)){\r\n      box.classList.add('is-error');\r\n      bracketEl.textContent = `Pr\u00f3g: ${bracket} cm`;\r\n      priceEl.innerHTML = '\u2014';\r\n      hintEl.textContent = 'Brak ceny w tabeli dla tego progu.';\r\n      return;\r\n    }\r\n\r\n    bracketEl.textContent = `Dla ${Math.round(len)} cm obowi\u0105zuje pr\u00f3g ${bracket} cm`;\r\n    priceEl.innerHTML = `${fmtInt(price)} <small>z\u0142<\/small>`;\r\n    hintEl.textContent = (len <= 100)\r\n      ? 'D\u0142ugo\u015b\u0107 80\u2013100 cm liczymy jak 100 cm.'\r\n      : 'Cena dobrana wed\u0142ug najbli\u017cszego wy\u017cszego progu.';\r\n  }\r\n\r\n  function bootMobile(){\r\n    const sel = $('[data-cc-mobile-select]');\r\n    const inp = $('[data-cc-mobile-len]');\r\n    if (!sel) return;\r\n\r\n    const sync = () => {\r\n      const type = sel.value;\r\n      renderMobileTable(type);\r\n      renderMobileQuick(type, inp ? inp.value : '');\r\n    };\r\n\r\n    sync();\r\n    sel.addEventListener('change', sync);\r\n    if (inp){\r\n      inp.addEventListener('input', sync);\r\n      inp.addEventListener('change', sync);\r\n      inp.addEventListener('keyup', sync);\r\n    }\r\n  }\r\n\r\n  \/* ========= DESKTOP \"wisienka\" ========= *\/\r\n  function clearDesktopPick(table, tip){\r\n    if (!table) return;\r\n    table.classList.remove('is-picked');\r\n\r\n    table.querySelectorAll('.cc-hl-row').forEach(tr => tr.classList.remove('cc-hl-row'));\r\n    table.querySelectorAll('.cc-hl-col').forEach(cell => cell.classList.remove('cc-hl-col'));\r\n    table.querySelectorAll('.cc-hl-cell').forEach(cell => cell.classList.remove('cc-hl-cell'));\r\n\r\n    if (tip){\r\n      tip.style.display = 'none';\r\n      tip.setAttribute('aria-hidden','true');\r\n      tip.textContent = '';\r\n    }\r\n  }\r\n\r\n  function positionTip(tip, cell, container){\r\n    if (!tip || !cell || !container) return;\r\n\r\n    const cRect = container.getBoundingClientRect();\r\n    const r = cell.getBoundingClientRect();\r\n\r\n    tip.style.display = 'block';\r\n    tip.style.left = '0px';\r\n    tip.style.top = '0px';\r\n\r\n    const tRect = tip.getBoundingClientRect();\r\n    const tW = tRect.width;\r\n    const tH = tRect.height;\r\n\r\n    let left = (r.left - cRect.left) + Math.min(16, Math.max(8, r.width * 0.2));\r\n    let top  = (r.top  - cRect.top) - (tH + 10);\r\n\r\n    if (top < 6){\r\n      top = (r.bottom - cRect.top) + 10;\r\n      tip.classList.add('cc-tip--bottom');\r\n    } else {\r\n      tip.classList.remove('cc-tip--bottom');\r\n    }\r\n\r\n    const maxLeft = container.clientWidth - tW - 8;\r\n    left = Math.max(8, Math.min(left, maxLeft));\r\n\r\n    tip.style.left = `${left}px`;\r\n    tip.style.top  = `${top}px`;\r\n    tip.setAttribute('aria-hidden','false');\r\n  }\r\n\r\n  function bootDesktopPick(){\r\n    const table = $('[data-cc-desktop-table]');\r\n    if (!table) return;\r\n\r\n    const wrap = table.closest('.cc-table--desktop');\r\n    const scroll = table.closest('.cc-table-scroll');\r\n    const tip = $('[data-cc-tip]');\r\n\r\n    const handlePick = (cell) => {\r\n      const tr = cell.closest('tr');\r\n      if (!tr) return;\r\n\r\n      const label = tr.getAttribute('data-label') || 'Karnisz';\r\n      const col = cell.getAttribute('data-col') || '';\r\n      const price = Number.parseInt(cell.getAttribute('data-price') || '', 10);\r\n\r\n      clearDesktopPick(table, tip);\r\n      table.classList.add('is-picked');\r\n\r\n      tr.classList.add('cc-hl-row');\r\n      table.querySelectorAll(`[data-col=\"${col}\"]`).forEach(el => el.classList.add('cc-hl-col'));\r\n      cell.classList.add('cc-hl-cell');\r\n\r\n      if (tip && Number.isFinite(price)){\r\n        tip.innerHTML = `<strong>${label}<\/strong><br><small>Pr\u00f3g ${col} cm<\/small><br><strong>${fmtInt(price)} z\u0142<\/strong>`;\r\n        positionTip(tip, cell, wrap);\r\n      }\r\n    };\r\n\r\n    table.addEventListener('click', (e) => {\r\n      const cell = e.target && e.target.closest ? e.target.closest('td[data-price]') : null;\r\n      if (!cell) return;\r\n      e.preventDefault();\r\n      handlePick(cell);\r\n    });\r\n\r\n    if (scroll && tip){\r\n      scroll.addEventListener('scroll', () => {\r\n        const picked = table.querySelector('td.cc-hl-cell');\r\n        if (picked && tip.style.display === 'block') positionTip(tip, picked, wrap);\r\n      }, { passive:true });\r\n    }\r\n\r\n    document.addEventListener('click', (e) => {\r\n      if (!wrap.contains(e.target)) clearDesktopPick(table, tip);\r\n    });\r\n\r\n    document.addEventListener('keydown', (e) => {\r\n      if (e.key === 'Escape') clearDesktopPick(table, tip);\r\n    });\r\n\r\n    window.addEventListener('resize', () => {\r\n      const picked = table.querySelector('td.cc-hl-cell');\r\n      if (picked && tip && tip.style.display === 'block') positionTip(tip, picked, wrap);\r\n    }, { passive:true });\r\n  }\r\n\r\n  const styleFix = document.createElement('style');\r\n  styleFix.textContent = `\r\n    .cc-tip.cc-tip--bottom::after{\r\n      top:auto !important;\r\n      bottom:100% !important;\r\n      border-top-color: transparent !important;\r\n      border-bottom-color:#fff !important;\r\n    }\r\n  `;\r\n  document.head.appendChild(styleFix);\r\n\r\n  bootMobile();\r\n  bootDesktopPick();\r\n  document.addEventListener('DOMContentLoaded', () => { bootMobile(); bootDesktopPick(); });\r\n})();\r\n<\/script>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:shortcode -->\n<!-- wp:shortcode -->\n<!-- HFCM by 99 Robots - Snippet # 11: boxy do innych produkt\u00f3w -->\n<style>\r\n  .azhome-products-snippet{\r\n    display:grid;\r\n    grid-template-columns:repeat(3, minmax(0, 1fr));\r\n    gap:24px;\r\n    align-items:start;\r\n    margin:28px auto;\r\n    max-width:1180px;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .azhome-products-snippet *{\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .azhome-product-card{\r\n    position:relative;\r\n    text-align:center;\r\n    padding:22px;\r\n    border-radius:20px;\r\n    background:#fff;\r\n    border:1px solid rgba(0,0,0,.08);\r\n    box-shadow:0 12px 30px rgba(0,0,0,.06);\r\n    overflow:hidden;\r\n  }\r\n\r\n  .azhome-product-card img{\r\n    display:block;\r\n    width:100%;\r\n    height:auto;\r\n    margin:0 auto 18px;\r\n    border-radius:16px;\r\n    pointer-events:none;\r\n    user-select:none;\r\n  }\r\n\r\n  .azhome-product-btn{\r\n    position:relative;\r\n    z-index:20;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:46px;\r\n    padding:12px 18px;\r\n    border-radius:999px;\r\n    background:#111;\r\n    color:#fff !important;\r\n    text-decoration:none !important;\r\n    font-weight:800;\r\n    font-size:14px;\r\n    line-height:1.2;\r\n    text-align:center;\r\n    cursor:pointer;\r\n    box-shadow:0 10px 22px rgba(0,0,0,.16);\r\n  }\r\n\r\n  .azhome-product-btn:hover{\r\n    transform:translateY(-1px);\r\n    box-shadow:0 14px 28px rgba(0,0,0,.20);\r\n  }\r\n\r\n  @media (max-width:900px){\r\n    .azhome-products-snippet{\r\n      grid-template-columns:1fr;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"azhome-products-snippet\">\r\n\r\n  <div class=\"azhome-product-card\">\r\n    <img decoding=\"async\"\r\n      src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/rolety-rzymskie-elektryczne-smart.webp\"\r\n      alt=\"Rolety rzymskie Warszawa\">\r\n    <a\r\n      class=\"azhome-product-btn\"\r\n      href=\"https:\/\/azhome.pl\/rolety-rzymskie-warszawa\/\"\r\n      data-azhome-url=\"https:\/\/azhome.pl\/rolety-rzymskie-warszawa\/\"\r\n      target=\"_blank\"\r\n      rel=\"noopener noreferrer nofollow\">\r\n      Wi\u0119cej o roletach rzymskich\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <div class=\"azhome-product-card\">\r\n    <img decoding=\"async\"\r\n      src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/zaluzja-plisowana-plisa.webp\"\r\n      alt=\"Plisy Warszawa\">\r\n    <a\r\n      class=\"azhome-product-btn\"\r\n      href=\"https:\/\/azhome.pl\/plisy-warszawa\/\"\r\n      data-azhome-url=\"https:\/\/azhome.pl\/plisy-warszawa\/\"\r\n      target=\"_blank\"\r\n      rel=\"noopener noreferrer nofollow\">\r\n      Poka\u017c plisy na wymiar\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <div class=\"azhome-product-card\">\r\n    <img decoding=\"async\"\r\n      src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/zaluzje-drewniane.webp\"\r\n      alt=\"\u017baluzje drewniane Warszawa\">\r\n    <a\r\n      class=\"azhome-product-btn\"\r\n      href=\"https:\/\/azhome.pl\/zaluzje-drewniane-warszawa\/\"\r\n      data-azhome-url=\"https:\/\/ozaluzje.pl\/\"\r\n      target=\"_blank\"\r\n      rel=\"noopener noreferrer nofollow\">\r\n      Poka\u017c \u017caluzje drewniane\r\n    <\/a>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  document.querySelectorAll('.azhome-product-btn[data-azhome-url]').forEach(function(btn){\r\n    btn.addEventListener('click', function(event){\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n\r\n      var url = btn.getAttribute('data-azhome-url');\r\n      if(url){\r\n        window.open(url, '_blank', 'noopener,noreferrer');\r\n      }\r\n    });\r\n  });\r\n})();\r\n<\/script>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:shortcode -->\n\n<!-- HFCM by 99 Robots - Snippet # 20: box walizka -->\n<!-- AZHOME \u2014 POMIAR KARNISZY I DORADZTWO -->\r\n<style>\r\n.kw-measure {\r\n  --km-green: #38533a;\r\n  --km-text: #262c25;\r\n  --km-muted: #62695e;\r\n  --km-line: #dfe5d9;\r\n\r\n  box-sizing: border-box;\r\n  width: 100%;\r\n  max-width: 1240px;\r\n  margin: 28px auto;\r\n  overflow: hidden;\r\n  border: 1px solid var(--km-line);\r\n  border-radius: 24px;\r\n  background: linear-gradient(135deg, #fff 35%, #f5f7f2);\r\n  box-shadow: 0 14px 40px rgba(40, 58, 35, .06);\r\n  color: var(--km-text);\r\n  font-family: inherit;\r\n}\r\n\r\n.kw-measure *,\r\n.kw-measure *::before,\r\n.kw-measure *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.kw-measure__layout {\r\n  display: grid;\r\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);\r\n  align-items: center;\r\n}\r\n\r\n.kw-measure__media {\r\n  min-width: 0;\r\n  margin: 0;\r\n  padding: 26px;\r\n}\r\n\r\n.kw-measure .kw-measure__image {\r\n  display: block;\r\n  width: 100%;\r\n  max-width: 100%;\r\n  height: auto;\r\n  margin: 0;\r\n  border-radius: 16px;\r\n}\r\n\r\n.kw-measure .kw-measure__caption {\r\n  margin: 13px 0 0;\r\n  padding: 0;\r\n  color: var(--km-muted);\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  text-align: center;\r\n}\r\n\r\n.kw-measure__caption strong {\r\n  color: var(--km-green);\r\n}\r\n\r\n.kw-measure__content {\r\n  min-width: 0;\r\n  padding: 34px 34px 34px 12px;\r\n}\r\n\r\n.kw-measure .kw-measure__eyebrow {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 9px;\r\n  margin: 0 0 14px;\r\n  padding: 0;\r\n  color: var(--km-green);\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n  line-height: 1.5;\r\n  letter-spacing: .12em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.kw-measure__eyebrow::before {\r\n  content: \"\";\r\n  flex: 0 0 8px;\r\n  height: 8px;\r\n  border-radius: 50%;\r\n  background: var(--km-green);\r\n  box-shadow: 0 0 0 5px rgba(56, 83, 58, .08);\r\n}\r\n\r\n.kw-measure .kw-measure__title {\r\n  margin: 0 0 16px;\r\n  padding: 0;\r\n  color: var(--km-text);\r\n  font-size: clamp(25px, 3vw, 36px);\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  letter-spacing: -.035em;\r\n  text-transform: none;\r\n}\r\n\r\n.kw-measure__title span {\r\n  color: var(--km-green);\r\n}\r\n\r\n.kw-measure .kw-measure__text {\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--km-muted);\r\n  font-size: 15px;\r\n  line-height: 1.75;\r\n}\r\n\r\n.kw-measure__price {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  flex-wrap: wrap;\r\n  gap: 12px;\r\n  margin: 22px 0;\r\n  padding: 17px 18px;\r\n  border: 1px solid var(--km-line);\r\n  border-radius: 14px;\r\n  background: #fff;\r\n}\r\n\r\n.kw-measure__price-label {\r\n  flex: 1 1 180px;\r\n}\r\n\r\n.kw-measure__price-label strong {\r\n  display: block;\r\n  color: var(--km-text);\r\n  font-size: 15px;\r\n  line-height: 1.4;\r\n}\r\n\r\n.kw-measure__price-label small {\r\n  display: block;\r\n  margin-top: 4px;\r\n  color: var(--km-muted);\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.kw-measure__amount {\r\n  color: var(--km-green);\r\n  font-size: 34px;\r\n  font-weight: 800;\r\n  line-height: 1;\r\n  letter-spacing: -.04em;\r\n  white-space: nowrap;\r\n}\r\n\r\n.kw-measure__amount span {\r\n  font-size: 18px;\r\n  letter-spacing: 0;\r\n}\r\n\r\n.kw-measure .kw-measure__benefits {\r\n  display: grid;\r\n  gap: 11px;\r\n  margin: 0 0 22px;\r\n  padding: 0;\r\n  list-style: none;\r\n}\r\n\r\n.kw-measure .kw-measure__benefits li {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  margin: 0;\r\n  padding: 0;\r\n  color: var(--km-muted);\r\n  font-size: 14px;\r\n  line-height: 1.6;\r\n  list-style: none;\r\n}\r\n\r\n.kw-measure__check {\r\n  display: grid;\r\n  place-items: center;\r\n  flex: 0 0 22px;\r\n  height: 22px;\r\n  margin-top: 1px;\r\n  border-radius: 7px;\r\n  background: #eaf0e5;\r\n  color: var(--km-green);\r\n  font-size: 13px;\r\n  font-weight: 800;\r\n}\r\n\r\n.kw-measure__benefits strong {\r\n  color: var(--km-text);\r\n  font-weight: 750;\r\n}\r\n\r\n.kw-measure__contact {\r\n  padding-top: 20px;\r\n  border-top: 1px solid var(--km-line);\r\n}\r\n\r\n.kw-measure .kw-measure__contact-title {\r\n  margin: 0 0 12px;\r\n  padding: 0;\r\n  color: var(--km-text);\r\n  font-size: 14px;\r\n  font-weight: 750;\r\n  line-height: 1.5;\r\n}\r\n\r\n.kw-measure__actions {\r\n  display: grid;\r\n  gap: 9px;\r\n}\r\n\r\n.kw-measure .kw-measure__button {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  width: 100%;\r\n  min-height: 60px;\r\n  margin: 0;\r\n  padding: 12px 16px;\r\n  border: 1px solid var(--km-green);\r\n  border-radius: 12px;\r\n  background: var(--km-green);\r\n  color: #fff !important;\r\n  text-decoration: none !important;\r\n  transition: background .2s ease, transform .2s ease;\r\n}\r\n\r\n.kw-measure .kw-measure__button--mail {\r\n  border-color: var(--km-line);\r\n  background: #fff;\r\n  color: var(--km-green) !important;\r\n}\r\n\r\n.kw-measure__button svg {\r\n  display: block;\r\n  flex: 0 0 21px;\r\n  width: 21px;\r\n  height: 21px;\r\n}\r\n\r\n.kw-measure__button-label {\r\n  min-width: 0;\r\n}\r\n\r\n.kw-measure__button-label small {\r\n  display: block;\r\n  color: inherit;\r\n  font-size: 11px;\r\n  line-height: 1.4;\r\n}\r\n\r\n.kw-measure__button-label strong {\r\n  display: block;\r\n  margin-top: 2px;\r\n  color: inherit;\r\n  font-size: 16px;\r\n  font-weight: 750;\r\n  line-height: 1.4;\r\n}\r\n\r\n.kw-measure__button--mail strong {\r\n  font-size: 13px;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.kw-measure .kw-measure__button:focus-visible {\r\n  outline: 3px solid var(--km-green);\r\n  outline-offset: 3px;\r\n}\r\n\r\n@media (hover: hover) {\r\n  .kw-measure .kw-measure__button:hover {\r\n    background: #29432c;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .kw-measure .kw-measure__button--mail:hover {\r\n    background: #eef3e9;\r\n  }\r\n}\r\n\r\n@media (max-width: 800px) {\r\n  .kw-measure {\r\n    margin: 20px auto;\r\n    border-radius: 18px;\r\n  }\r\n\r\n  .kw-measure__layout {\r\n    grid-template-columns: minmax(0, 1fr);\r\n  }\r\n\r\n  .kw-measure__media {\r\n    padding: 12px 12px 0;\r\n  }\r\n\r\n  .kw-measure .kw-measure__image {\r\n    border-radius: 12px;\r\n  }\r\n\r\n  .kw-measure__content {\r\n    padding: 24px 18px 20px;\r\n  }\r\n\r\n  .kw-measure .kw-measure__title {\r\n    font-size: clamp(25px, 6vw, 32px);\r\n  }\r\n\r\n  .kw-measure .kw-measure__text {\r\n    font-size: 14px;\r\n    line-height: 1.7;\r\n  }\r\n\r\n  .kw-measure__price {\r\n    padding: 15px;\r\n  }\r\n\r\n  .kw-measure__amount {\r\n    font-size: 32px;\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .kw-measure .kw-measure__button {\r\n    transition: none;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"kw-measure\"\r\n  aria-label=\"Profesjonalny pomiar karniszy i doradztwo\">\r\n\r\n  <div class=\"kw-measure__layout\">\r\n\r\n    <figure class=\"kw-measure__media\">\r\n      <img\r\n        class=\"kw-measure__image\"\r\n        src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/pomiar-karniszy.webp\"\r\n        alt=\"Pomiar karniszy\"\r\n        loading=\"lazy\"\r\n        decoding=\"async\">\r\n\r\n      <figcaption class=\"kw-measure__caption\">\r\n        <strong>AZHOME<\/strong> \u00b7 Pomiar i doradztwo \u00b7 Warszawa\r\n      <\/figcaption>\r\n    <\/figure>\r\n\r\n    <div class=\"kw-measure__content\">\r\n\r\n      <p class=\"kw-measure__eyebrow\">\r\n        Zaplanuj karnisze z fachowcem\r\n      <\/p>\r\n\r\n      <h2 class=\"kw-measure__title\">\r\n        Profesjonalny pomiar.<br>\r\n        <span>Doradztwo u Ciebie.<\/span>\r\n      <\/h2>\r\n\r\n      <p class=\"kw-measure__text\">\r\n        Przyjedziemy z pr\u00f3bnikami, wykonamy pomiar i pomo\u017cemy\r\n        dobra\u0107 rozwi\u0105zanie do Twojego wn\u0119trza. To dobry moment,\r\n        aby om\u00f3wi\u0107 wymiary, spos\u00f3b monta\u017cu i przygotowanie sufitu.\r\n      <\/p>\r\n\r\n      <div class=\"kw-measure__price\">\r\n        <div class=\"kw-measure__price-label\">\r\n          <strong>Wizyta pomiarowa z doradztwem<\/strong>\r\n          <small>Dojazd z pr\u00f3bnikami \u00b7 pomiar \u00b7 konsultacja<\/small>\r\n        <\/div>\r\n\r\n        <div class=\"kw-measure__amount\">\r\n          250 <span>z\u0142<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <ul class=\"kw-measure__benefits\">\r\n\r\n        <li>\r\n          <span class=\"kw-measure__check\" aria-hidden=\"true\">\u2713<\/span>\r\n          <span>\r\n            <strong>Zaplanujesz sufit i monta\u017c<\/strong>\r\n            jeszcze przed zako\u0144czeniem prac wyko\u0144czeniowych.\r\n          <\/span>\r\n        <\/li>\r\n\r\n        <li>\r\n          <span class=\"kw-measure__check\" aria-hidden=\"true\">\u2713<\/span>\r\n          <span>\r\n            <strong>Dopasujesz produkty i wymiary<\/strong>\r\n            do uk\u0142adu okien oraz pomieszczenia.\r\n          <\/span>\r\n        <\/li>\r\n\r\n        <li>\r\n          <span class=\"kw-measure__check\" aria-hidden=\"true\">\u2713<\/span>\r\n          <span>\r\n            <strong>Zmniejszysz ryzyko kosztownych przer\u00f3bek<\/strong>\r\n            dzi\u0119ki wcze\u015bniejszemu ustaleniu szczeg\u00f3\u0142\u00f3w.\r\n          <\/span>\r\n        <\/li>\r\n\r\n      <\/ul>\r\n\r\n      <div class=\"kw-measure__contact\">\r\n\r\n        <p class=\"kw-measure__contact-title\">\r\n          Zapytaj o szczeg\u00f3\u0142y i termin pomiaru\r\n        <\/p>\r\n\r\n        <div class=\"kw-measure__actions\">\r\n\r\n          <a\r\n            class=\"kw-measure__button\"\r\n            href=\"tel:+48667067777\">\r\n\r\n            <svg\r\n              viewBox=\"0 0 24 24\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-width=\"1.7\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              aria-hidden=\"true\">\r\n              <path d=\"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.5 2.1L8 10a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.5c.9.3 1.9.6 2.9.7a2 2 0 0 1 1.7 2z\"\/>\r\n            <\/svg>\r\n\r\n            <span class=\"kw-measure__button-label\">\r\n              <small>Zadzwo\u0144 do nas<\/small>\r\n              <strong>+48 667 067 777<\/strong>\r\n            <\/span>\r\n\r\n          <\/a>\r\n\r\n          <a\r\n            class=\"kw-measure__button kw-measure__button--mail\"\r\n            href=\"mailto:kontakt@karniszewarszawa.pl\">\r\n\r\n            <svg\r\n              viewBox=\"0 0 24 24\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-width=\"1.7\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              aria-hidden=\"true\">\r\n              <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"\/>\r\n              <path d=\"m3 6 9 7 9-7\"\/>\r\n            <\/svg>\r\n\r\n            <span class=\"kw-measure__button-label\">\r\n              <small>Wy\u015blij zapytanie<\/small>\r\n              <strong>kontakt@karniszewarszawa.pl<\/strong>\r\n            <\/span>\r\n\r\n          <\/a>\r\n\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n\n<!-- wp:columns {\"verticalAlignment\":\"center\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"var:preset|spacing|50\",\"bottom\":\"var:preset|spacing|50\",\"left\":\"var:preset|spacing|40\",\"right\":\"var:preset|spacing|40\"}}}} -->\n<div class=\"wp-block-columns are-vertically-aligned-center\" style=\"padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--40)\"><!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:image {\"id\":306,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/05\/jak-wycenic-zaslony.webp\" alt=\"Zas\u0142ony na wymiar Warszawa\" class=\"wp-image-306\"\/><\/figure>\n<!-- \/wp:image --><\/div>\n<!-- \/wp:column -->\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\"><!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Zas\u0142ony na wymiar w Warszawie?<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph {\"style\":{\"typography\":{\"letterSpacing\":\"1px\",\"lineHeight\":\"2.2\"}}} -->\n<p style=\"letter-spacing:1px;line-height:2.2\">Poznaj nasz\u0105 ofert\u0119 zas\u0142on i firan szytych na wymiar. To nie jest przypadkowa oferta dodatkowa, <strong>a profesjonalnie szyte zas\u0142ony<\/strong>, showroom z bogat\u0105 ofert\u0105 tkanin, do\u015bwiadczon\u0105 dekoratork\u0105 i mn\u00f3stwem pozytywnych opinii. Warto sprawdzi\u0107 nasz\u0105 ofert\u0119.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:buttons {\"layout\":{\"type\":\"flex\",\"justifyContent\":\"center\"}} -->\n<div class=\"wp-block-buttons\"><!-- wp:button -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/szyciezaslon.pl\" title=\"Zas\u0142ony Warszawa\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Przejd\u017a do dedykowanej strony o zas\u0142onach<\/a><\/div>\n<!-- \/wp:button --><\/div>\n<!-- \/wp:buttons --><\/div>\n<!-- \/wp:column --><\/div>\n<!-- \/wp:columns -->\n\n<!-- wp:columns {\"verticalAlignment\":\"center\",\"className\":\"kw-radar-mobile-columns\",\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|40\",\"left\":\"var:preset|spacing|40\"}}}} -->\n<div class=\"wp-block-columns are-vertically-aligned-center kw-radar-mobile-columns\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\">\n\n<!-- wp:shortcode -->\n<!-- HFCM by 99 Robots - Snippet # 9: opinie -->\n<!-- AZHOME \u2014 opinie Google, wersja 2. Liczba i ocena pochodz\u0105 z podanego modu\u0142u. -->\r\n<section class=\"kw-reviews-v2\" aria-label=\"Opinie klient\u00f3w AZHOME w Google\">\r\n<style>\r\n.kw-reviews-v2{\r\n  --kw-green:#38533a;--kw-ink:#242820;--kw-muted:#62685e;--kw-line:#dce2d7;\r\n  width:100%;max-width:980px;margin:30px auto;padding:0 12px;\r\n  font-family:inherit;color:var(--kw-ink);box-sizing:border-box;\r\n}\r\n.kw-reviews-v2 *,.kw-reviews-v2 *::before,.kw-reviews-v2 *::after{box-sizing:border-box}\r\n.kw-reviews-v2 .kw-panel{background:#fff;border:1px solid var(--kw-line);border-radius:22px;overflow:hidden;box-shadow:0 16px 40px rgba(25,40,20,.07)}\r\n.kw-reviews-v2 .kw-main{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(230px,.9fr);gap:32px;align-items:center;padding:34px}\r\n.kw-reviews-v2 .kw-copy{min-width:0}\r\n.kw-reviews-v2 .kw-rating{display:flex;align-items:center;gap:18px;margin-bottom:19px}\r\n.kw-reviews-v2 .kw-score{color:var(--kw-ink);font-size:64px;font-weight:800;line-height:1;letter-spacing:-3px;white-space:nowrap}\r\n.kw-reviews-v2 .kw-stars{color:#ae7b22;font-size:23px;line-height:1.2;letter-spacing:2px;white-space:nowrap}\r\n.kw-reviews-v2 .kw-rating-label{margin-top:5px;font-size:12px;line-height:1.4;color:var(--kw-muted)}\r\n.kw-reviews-v2 h2{margin:0 0 11px;color:var(--kw-ink);font-size:clamp(26px,3.6vw,34px);line-height:1.13;font-weight:750;letter-spacing:-1px;text-wrap:balance}\r\n.kw-reviews-v2 .kw-description{margin:0;font-size:15px;line-height:1.6;color:var(--kw-muted)}\r\n.kw-reviews-v2 .kw-action{min-width:0;border-left:1px solid var(--kw-line);padding-left:32px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px}\r\n.kw-reviews-v2 .kw-google{font-family:Arial,sans-serif;font-size:25px;line-height:1.2;font-weight:600;letter-spacing:-1px}\r\n.kw-reviews-v2 .kw-google span:nth-child(1),.kw-reviews-v2 .kw-google span:nth-child(4){color:#4285f4}\r\n.kw-reviews-v2 .kw-google span:nth-child(2),.kw-reviews-v2 .kw-google span:nth-child(6){color:#ea4335}\r\n.kw-reviews-v2 .kw-google span:nth-child(3){color:#b98400}\r\n.kw-reviews-v2 .kw-google span:nth-child(5){color:#25823a}\r\n.kw-reviews-v2 .kw-count-box{display:flex;flex-direction:column;align-items:center}\r\n.kw-reviews-v2 .kw-count{display:block;min-width:3ch;font-family:Arial,sans-serif;font-size:clamp(72px,9vw,92px);line-height:1.03;font-weight:800;letter-spacing:-5px;font-variant-numeric:tabular-nums;color:var(--kw-green)}\r\n.kw-reviews-v2 .kw-count-caption{font-size:15px;line-height:1.4;color:var(--kw-muted);margin-top:3px}\r\n.kw-reviews-v2 .kw-button{display:flex;align-items:center;justify-content:center;gap:20px;min-height:48px;width:100%;margin-top:4px;padding:14px 18px;border-radius:10px;background:var(--kw-green);color:#fff!important;text-decoration:none!important;font-size:14px;line-height:1.3;font-weight:700;transition:transform .2s,background .2s}\r\n.kw-reviews-v2 .kw-button:hover{background:#283d2a;transform:translateY(-2px)}\r\n.kw-reviews-v2 .kw-button:focus-visible{outline:3px solid #4285f4;outline-offset:3px}\r\n.kw-reviews-v2 .kw-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:17px 28px;background:#f3f5ef;border-top:1px solid var(--kw-line);font-size:12px;line-height:1.5;color:var(--kw-muted)}\r\n.kw-reviews-v2 .kw-foot strong{font-weight:750;letter-spacing:1.2px;color:var(--kw-green)}\r\n.kw-reviews-v2 .kw-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\r\n@media(max-width:560px){\r\n  .kw-reviews-v2{margin:24px auto;padding:0 8px}\r\n  .kw-reviews-v2 .kw-panel{border-radius:18px}\r\n  .kw-reviews-v2 .kw-main{grid-template-columns:1fr;gap:24px;padding:24px 20px}\r\n  .kw-reviews-v2 .kw-rating{gap:16px;margin-bottom:18px}\r\n  .kw-reviews-v2 .kw-score{font-size:58px}\r\n  .kw-reviews-v2 .kw-stars{font-size:22px}\r\n  .kw-reviews-v2 h2{font-size:29px}\r\n  .kw-reviews-v2 .kw-description{font-size:14px}\r\n  .kw-reviews-v2 .kw-action{border-left:0;border-top:1px solid var(--kw-line);padding:22px 0 0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:17px 12px;align-items:center}\r\n  .kw-reviews-v2 .kw-google{font-size:30px;justify-self:center}\r\n  .kw-reviews-v2 .kw-count{font-size:76px;letter-spacing:-4px}\r\n  .kw-reviews-v2 .kw-count-caption{font-size:13px}\r\n  .kw-reviews-v2 .kw-button{grid-column:1\/-1;margin:0;min-height:50px}\r\n  .kw-reviews-v2 .kw-foot{padding:15px 20px;font-size:11px}\r\n}\r\n@media(max-width:350px){\r\n  .kw-reviews-v2 .kw-main{padding:22px 16px}\r\n  .kw-reviews-v2 h2{font-size:26px}\r\n  .kw-reviews-v2 .kw-count{font-size:66px}\r\n  .kw-reviews-v2 .kw-google{font-size:26px}\r\n}\r\n@media(prefers-reduced-motion:reduce){.kw-reviews-v2 .kw-button{transition:none}}\r\n<\/style>\r\n<div class=\"kw-panel\">\r\n  <div class=\"kw-main\">\r\n    <div class=\"kw-copy\">\r\n      <div class=\"kw-rating\" aria-label=\"Ocena 5 na 5 w Google\">\r\n        <span class=\"kw-score\" aria-hidden=\"true\">5,0<\/span>\r\n        <div aria-hidden=\"true\"><div class=\"kw-stars\">\u2605\u2605\u2605\u2605\u2605<\/div><div class=\"kw-rating-label\">Ocena klient\u00f3w w Google<\/div><\/div>\r\n      <\/div>\r\n      <h2>Sprawd\u017a, komu<br>powierzasz monta\u017c.<\/h2>\r\n      <p class=\"kw-description\">Opinie klient\u00f3w o AZHOME.<\/p>\r\n    <\/div>\r\n    <div class=\"kw-action\">\r\n      <div class=\"kw-google\" aria-label=\"Google\"><span>G<\/span><span>o<\/span><span>o<\/span><span>g<\/span><span>l<\/span><span>e<\/span><\/div>\r\n      <div class=\"kw-count-box\">\r\n        <!-- Zmieniaj\u0105c liczb\u0119 opinii, zmie\u0144 data-target, tekst licznika i tekst dla czytnika. -->\r\n        <span class=\"kw-count\" data-target=\"544\" aria-hidden=\"true\">544<\/span>\r\n        <span class=\"kw-count-caption\" aria-hidden=\"true\">opinii klient\u00f3w<\/span>\r\n        <span class=\"kw-sr\">544 opinii klient\u00f3w<\/span>\r\n      <\/div>\r\n      <a class=\"kw-button\" href=\"https:\/\/www.google.com\/maps?cid=10805085060045519056\" target=\"_blank\" rel=\"noopener nofollow\" aria-label=\"Przeczytaj opinie o AZHOME w Google \u2014 otwiera now\u0105 kart\u0119\">Przeczytaj opinie <span aria-hidden=\"true\">\u2197<\/span><\/a>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"kw-foot\"><strong>AZHOME<\/strong><span>Pomiar \u00b7 wykonanie \u00b7 monta\u017c<\/span><\/div>\r\n<\/div>\r\n<script>\r\n(function(){\r\n  'use strict';\r\n  function initAll(){\r\n  document.querySelectorAll('.kw-reviews-v2').forEach(function(root){\r\n  if(root.dataset.ready==='true') return;\r\n  const counter=root.querySelector('.kw-count');\r\n  if(!counter) return;\r\n  const target=Number(counter.dataset.target);\r\n  if(!Number.isFinite(target)) return;\r\n  root.dataset.ready='true';\r\n  const motion=window.matchMedia('(prefers-reduced-motion: reduce)');\r\n  const duration=1900;\r\n  const pause=5000;\r\n  let frame=null;\r\n  let timer=null;\r\n  let visible=!('IntersectionObserver' in window);\r\n  let observer=null;\r\n  function stop(){\r\n    window.cancelAnimationFrame(frame);\r\n    window.clearTimeout(timer);\r\n    frame=null;timer=null;\r\n    counter.textContent=String(target);\r\n  }\r\n  function allowed(){return root.isConnected && visible && !document.hidden && !motion.matches;}\r\n  function animate(){\r\n    if(!allowed()){stop();return;}\r\n    const start=performance.now();\r\n    counter.textContent='0';\r\n    function tick(now){\r\n      if(!allowed()){stop();return;}\r\n      const progress=Math.min((now-start)\/duration,1);\r\n      \/\/ Tempo zgodne z pierwotnym modu\u0142em: \u0142agodny start i przyspieszenie.\r\n      counter.textContent=String(Math.floor(Math.pow(progress,1.85)*target));\r\n      if(progress<1){frame=window.requestAnimationFrame(tick);}\r\n      else{\r\n        frame=null;\r\n        counter.textContent=String(target);\r\n        timer=window.setTimeout(animate,pause);\r\n      }\r\n    }\r\n    frame=window.requestAnimationFrame(tick);\r\n  }\r\n  function sync(){stop();if(allowed()) animate();}\r\n  if('IntersectionObserver' in window){\r\n    observer=new IntersectionObserver(function(entries){\r\n      const next=entries[0].isIntersecting;\r\n      if(next!==visible){visible=next;sync();}\r\n    },{threshold:0.15});\r\n    observer.observe(root);\r\n  }\r\n  document.addEventListener('visibilitychange',sync);\r\n  if(motion.addEventListener) motion.addEventListener('change',sync);\r\n  sync();\r\n  });\r\n  }\r\n  initAll();\r\n  if(document.readyState==='loading'){\r\n    document.addEventListener('DOMContentLoaded',initAll,{once:true});\r\n  }\r\n})();\r\n<\/script>\r\n<\/section>\r\n\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- HFCM by 99 Robots - Snippet # 12: radar -->\n\r\n<section class=\"az-waw-local-area-box\" aria-label=\"Obszar pomiaru i monta\u017cu w Warszawie i okolicach\">\r\n\r\n  <style>\r\n.az-waw-local-area-box{--azWawGlowCycle:10s;width:100%;max-width:980px;margin:30px auto;padding:0 10px;font-family:inherit;box-sizing:border-box}\r\n.az-waw-local-area-box *,.az-waw-local-area-box *::before,.az-waw-local-area-box *::after{box-sizing:border-box}\r\n.az-waw-local-area-inner{position:relative;isolation:isolate;overflow:hidden;border:1px solid #dedfd9;border-radius:20px;padding:12px;background:#f5f6ef;box-shadow:0 12px 28px #00000009}\r\n.az-waw-local-area-inner::before{content:\"\";position:absolute;inset:-50%;z-index:-1;background:conic-gradient(from 30deg,#4285f425,#34a85324,#fbbc0530,#ea433526,#4285f425);filter:blur(30px);animation:azWawGlowDrift 16s linear infinite}\r\n@keyframes azWawGlowDrift{to{transform:rotate(360deg)}}\r\n.az-waw-local-area-column{display:grid;gap:12px;min-width:0}\r\n.az-waw-local-map-box{min-width:0}\r\n.az-waw-radar-stage{position:relative;isolation:isolate;width:100%;height:450px;overflow:hidden;border:1px solid #dedfd9;border-radius:16px;background:linear-gradient(#00000006 1px,transparent 1px),linear-gradient(90deg,#00000006 1px,transparent 1px),#ffffffdf;background-size:28px 28px,28px 28px,auto}\r\n.az-waw-radar-stage::before{content:\"\";position:absolute;left:50%;top:50%;width:230px;height:230px;transform:translate(-50%,-50%);border:1px solid #4285f419;border-radius:50%;box-shadow:0 0 0 45px #4285f408,0 0 0 90px #34a85309,0 0 0 135px #fbbc0508;pointer-events:none;z-index:1}\r\n.az-waw-radar-stage::after{content:\"\";position:absolute;left:50%;top:50%;width:420px;height:420px;border-radius:50%;background:conic-gradient(transparent 250deg,#4285f415 285deg,#34a85329 318deg,#fbbc0538 342deg,transparent 360deg);transform:translate(-50%,-50%);animation:azWawRadarSweep 6s linear infinite;pointer-events:none;z-index:2}\r\n@keyframes azWawRadarSweep{to{transform:translate(-50%,-50%) rotate(360deg)}}\r\n.az-waw-outline{position:absolute;left:50%;top:50%;width:65%;max-width:340px;transform:translate(-50%,-50%);z-index:3;pointer-events:none}\r\n.az-waw-outline svg{display:block;width:100%;height:auto}\r\n.az-waw-outline-glow{fill:none;stroke:#4285f418;stroke-width:7;filter:blur(4px)}\r\n.az-waw-outline-path{fill:#ffffff25;stroke:#505c6b66;stroke-width:2.3;stroke-linejoin:round}\r\n.az-waw-outline-river{fill:none;stroke:#4285f46b;stroke-width:3;stroke-linecap:round;stroke-dasharray:6 8}\r\n.az-waw-center-dot{position:absolute;left:50%;top:50%;width:11px;height:11px;border-radius:50%;background:#222;transform:translate(-50%,-50%);z-index:7;box-shadow:0 0 0 7px #4285f41a}\r\n.az-waw-radar-echo{position:absolute;left:50%;top:50%;z-index:4;width:34px;height:34px;border:1px solid #4285f44d;border-radius:50%;opacity:0;animation:azWawRadarEcho 3s ease-out infinite;pointer-events:none}\r\n.az-waw-radar-echo:nth-child(2){animation-delay:1s}.az-waw-radar-echo:nth-child(3){animation-delay:2s}\r\n@keyframes azWawRadarEcho{from{opacity:.55;transform:translate(-50%,-50%) scale(.5)}to{opacity:0;transform:translate(-50%,-50%) scale(6)}}\r\n.az-waw-city-bg{position:absolute;left:50%;top:50%;z-index:1;transform:translate(-50%,-50%) rotate(-17deg);font-size:clamp(24px,5vw,44px);font-weight:900;letter-spacing:.12em;line-height:1;color:#19202012;text-transform:uppercase;white-space:nowrap;pointer-events:none}\r\n.az-waw-local-area-box .az-waw-random-label{position:absolute;z-index:8;display:inline-flex;align-items:center;justify-content:center;gap:6px;width:max-content;min-width:max-content;max-width:none;white-space:nowrap!important;overflow-wrap:normal!important;word-break:normal!important;hyphens:none;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:700;line-height:1.2;letter-spacing:0;padding:7px 10px;border:1px solid #daddd8;border-radius:999px;background:#fffffff5;color:#242824;box-shadow:0 5px 14px #00000009;pointer-events:none;opacity:1;filter:blur(0);transform:translate(-50%,-50%) scale(1);transition:opacity .55s ease,filter .55s ease,transform .55s ease}\r\n.az-waw-random-label::before{content:\"\";width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:#4285f4;box-shadow:0 0 0 3px #4285f418}\r\n.az-waw-random-label[data-kind=\"town\"]::before{background:#34a853;box-shadow:0 0 0 3px #34a85318}\r\n.az-waw-local-area-box .az-waw-random-label.is-soft-out{opacity:0;filter:blur(2px);transform:translate(-50%,-50%) scale(.84)}\r\n.az-waw-local-simple-text{margin:0;padding:16px 18px;border:1px solid #dedfd9;border-radius:14px;background:#fffffff0;color:#51564d;font-size:14px;line-height:1.7}\r\n.az-waw-local-simple-text strong{color:#283828}\r\n@media(max-width:600px){\r\n.az-waw-local-area-box{margin:22px auto;padding:0 5px}\r\n.az-waw-local-area-inner{padding:7px;border-radius:18px}\r\n.az-waw-radar-stage{height:390px;border-radius:13px;background-size:24px 24px,24px 24px,auto}\r\n.az-waw-outline{width:74%;max-width:270px}\r\n.az-waw-radar-stage::before{width:170px;height:170px;box-shadow:0 0 0 35px #4285f408,0 0 0 70px #34a85309,0 0 0 105px #fbbc0508}\r\n.az-waw-radar-stage::after{width:340px;height:340px}\r\n.az-waw-local-area-box .az-waw-random-label{font-size:11px;padding:6px 8px;gap:5px}\r\n.az-waw-local-simple-text{font-size:13px;padding:14px;line-height:1.65}\r\n}\r\n@media(prefers-reduced-motion:reduce){.az-waw-local-area-box *,.az-waw-local-area-box *::before,.az-waw-local-area-box *::after{animation:none!important;transition:none!important}}\r\n\r\n\/* MOBILE: 5 px od kraw\u0119dzi ekranu, niezale\u017cnie od szeroko\u015bci kontenera Kadence. *\/\r\n@media (max-width:781px){\r\n  .wp-block-columns.kw-radar-mobile-columns{\r\n    padding-left:0!important;\r\n    padding-right:0!important;\r\n    flex-direction:column!important;\r\n    flex-wrap:nowrap!important;\r\n    gap:20px!important;\r\n    overflow:visible!important;\r\n    min-width:0!important;\r\n  }\r\n  .wp-block-columns.kw-radar-mobile-columns > .wp-block-column{\r\n    width:100%!important;\r\n    max-width:100%!important;\r\n    min-width:0!important;\r\n    flex-basis:auto!important;\r\n    margin-left:0!important;\r\n    margin-right:0!important;\r\n    padding-left:0!important;\r\n    padding-right:0!important;\r\n    overflow:visible!important;\r\n  }\r\n  .az-waw-local-area-box{\r\n    box-sizing:border-box!important;\r\n    width:calc(var(--az-radar-viewport,100vw) - 10px)!important;\r\n    max-width:none!important;\r\n    min-width:0!important;\r\n    padding-left:0!important;\r\n    padding-right:0!important;\r\n    margin-left:var(--az-radar-shift,calc(50% - 50vw + 5px))!important;\r\n    margin-right:0!important;\r\n    margin-top:22px;\r\n    margin-bottom:22px;\r\n  }\r\n  .az-waw-local-area-box > .az-waw-local-area-inner{\r\n    width:100%;max-width:none;margin:0;\r\n  }\r\n}\r\n\r\n\r\n\/* Jedna wsp\u00f3lna o\u015b czasu dla wi\u0105zki, echa i zmian nazw. *\/\r\n.az-waw-radar-stage::after{\r\n  width:var(--az-sweep-size,1000px)!important;\r\n  height:var(--az-sweep-size,1000px)!important;\r\n  animation:none!important;\r\n  background:conic-gradient(transparent 0deg 285deg,#4285f410 305deg,#34a85328 335deg,#fbbc053d 355deg,#34a85370 359deg,transparent 360deg);\r\n  transform:translate(-50%,-50%) rotate(var(--az-sweep-angle,0deg));\r\n}\r\n.az-waw-radar-echo{animation:none!important}\r\n.az-waw-local-area-box .az-waw-random-label{\r\n  transition:none;\r\n  --az-hit-color:#4285f4;\r\n}\r\n.az-waw-local-area-box .az-waw-random-label[data-kind=\"town\"]{--az-hit-color:#34a853}\r\n.az-waw-random-label::after{\r\n  content:\"\";position:absolute;inset:-3px;border:1px solid var(--az-hit-color);\r\n  border-radius:999px;opacity:0;pointer-events:none;\r\n}\r\n.az-waw-local-area-box .az-waw-random-label.is-detected{\r\n  animation:azRadarNameReveal .48s ease-out both;\r\n}\r\n.az-waw-random-label.is-detected::after{animation:azRadarLabelEcho .9s ease-out both}\r\n@keyframes azRadarNameReveal{\r\n  0%{filter:blur(1.5px);opacity:.6;box-shadow:0 0 0 3px #4285f423}\r\n  45%{filter:blur(0);opacity:1;box-shadow:0 0 18px #34a85340}\r\n  100%{filter:blur(0);opacity:1;box-shadow:0 5px 14px #00000009}\r\n}\r\n@keyframes azRadarLabelEcho{\r\n  from{opacity:.75;transform:scale(1)}\r\n  to{opacity:0;transform:scale(1.45,1.9)}\r\n}\r\n@media(prefers-reduced-motion:reduce){\r\n  .az-waw-local-area-box .az-waw-random-label.is-detected,\r\n  .az-waw-random-label.is-detected::after{animation:none!important}\r\n}\r\n\r\n<\/style>\r\n\r\n  <div class=\"az-waw-local-area-inner\">\r\n    <div class=\"az-waw-local-area-column\">\r\n\r\n      <div class=\"az-waw-local-map-box\">\r\n        <div class=\"az-waw-radar-stage\" data-az-waw-radar aria-hidden=\"true\">\r\n\r\n          <span class=\"az-waw-radar-echo\"><\/span>\r\n          <span class=\"az-waw-radar-echo\"><\/span>\r\n          <span class=\"az-waw-radar-echo\"><\/span>\r\n\r\n          <div class=\"az-waw-outline\">\r\n            <svg viewBox=\"0 0 420 330\" role=\"img\" aria-label=\"Zarys Warszawy i obszaru dzia\u0142ania\">\r\n              <path class=\"az-waw-outline-glow\" d=\"M94 61 L138 42 L183 56 L223 37 L273 66 L313 103 L342 151 L325 202 L352 244 L305 275 L247 263 L207 291 L154 272 L111 247 L75 203 L88 156 L61 111 Z\"\/>\r\n              <path class=\"az-waw-outline-path\" d=\"M94 61 L138 42 L183 56 L223 37 L273 66 L313 103 L342 151 L325 202 L352 244 L305 275 L247 263 L207 291 L154 272 L111 247 L75 203 L88 156 L61 111 Z\"\/>\r\n              <path class=\"az-waw-outline-river\" d=\"M215 25 C190 70, 230 103, 207 145 C184 188, 217 225, 188 298\"\/>\r\n              <path class=\"az-waw-outline-river\" d=\"M237 32 C214 76, 253 115, 229 156 C205 198, 238 236, 210 306\"\/>\r\n            <\/svg>\r\n          <\/div>\r\n\r\n          <span class=\"az-waw-center-dot\"><\/span>\r\n          <span class=\"az-waw-city-bg\" aria-hidden=\"true\">Warszawa<\/span>\r\n\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"az-waw-local-area-content\">\r\n        <p class=\"az-waw-local-simple-text\">\r\n          <strong>Obszar pomiaru i monta\u017cu:<\/strong> Warszawa oraz pobliskie miejscowo\u015bci \u2014 od \u0141omianek i Marek, przez Piaseczno i Konstancin-Jeziorn\u0105, po J\u00f3zef\u00f3w, Otwock, Pruszk\u00f3w i okolice.\r\n        <\/p>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n(function(){\r\n  'use strict';\r\n  function initAll(){\r\n  document.querySelectorAll('.az-waw-local-area-box').forEach(function(root){\r\n  const stage = root.querySelector('[data-az-waw-radar]');\r\n  if (!stage || stage.dataset.initialized === 'true') return;\r\n  stage.dataset.initialized = 'true';\r\n\r\n  \/\/ Schemat kierunk\u00f3w wzgl\u0119dem centrum, nie mapa w skali.\r\n  \/\/ P\u00f3\u0142noc jest u g\u00f3ry; dzielnice s\u0105 bli\u017cej \u015brodka ni\u017c miejscowo\u015bci.\r\n  const sectors = [\r\n    {angle:-90, districts:['Bia\u0142o\u0142\u0119ka'], towns:['Legionowo']},\r\n    {angle:-45, districts:['Targ\u00f3wek','Praga-P\u00f3\u0142noc'], towns:['Marki','Koby\u0142ka','Wo\u0142omin','Z\u0105bki','Zielonka']},\r\n    {angle:0, districts:['Rembert\u00f3w','Weso\u0142a'], towns:['Sulej\u00f3wek','Halin\u00f3w']},\r\n    {angle:45, districts:['Wawer','Praga-Po\u0142udnie'], towns:['J\u00f3zef\u00f3w','Otwock']},\r\n    {angle:90, districts:['Ursyn\u00f3w','Wilan\u00f3w','Mokot\u00f3w'], towns:['Piaseczno','J\u00f3zefos\u0142aw','Konstancin-Jeziorna']},\r\n    {angle:135, districts:['W\u0142ochy','Ochota'], towns:['Raszyn','Micha\u0142owice']},\r\n    {angle:180, districts:['Ursus','Wola','Bemowo'], towns:['Pruszk\u00f3w','Piast\u00f3w','O\u017car\u00f3w Mazowiecki']},\r\n    {angle:225, districts:['Bielany','\u017boliborz'], towns:['\u0141omianki','Izabelin','Stare Babice']}\r\n  ];\r\n  const visibleCount=9;\r\n  const motion=window.matchMedia('(prefers-reduced-motion: reduce)');\r\n  const labels=[];\r\n\r\n  let visible=true;\r\n  let moreDistricts=true;\r\n  function randomItem(items){return items[Math.floor(Math.random()*items.length)];}\r\n  function shuffle(items){\r\n    const result=items.slice();\r\n    for(let i=result.length-1;i>0;i--){\r\n      const j=Math.floor(Math.random()*(i+1));\r\n      [result[i],result[j]]=[result[j],result[i]];\r\n    }\r\n    return result;\r\n  }\r\n  for(let i=0;i<visibleCount;i++){\r\n    const label=document.createElement('span');\r\n    label.className='az-waw-map-label az-waw-random-label';\r\n    stage.appendChild(label);\r\n    labels.push(label);\r\n  }\r\n\r\n  function fitToViewport(){\r\n    if(!root.getBoundingClientRect) return;\r\n    if(window.matchMedia('(max-width:781px)').matches){\r\n      const viewport=document.documentElement.clientWidth;\r\n      if(!viewport) return;\r\n      root.style.setProperty('--az-radar-viewport',viewport+'px');\r\n      const current=parseFloat(window.getComputedStyle(root).marginLeft)||0;\r\n      const correction=5-root.getBoundingClientRect().left;\r\n      if(Math.abs(correction)>.1){\r\n        root.style.setProperty('--az-radar-shift',(current+correction)+'px');\r\n      }\r\n    }else{\r\n      root.style.removeProperty('--az-radar-viewport');\r\n      root.style.removeProperty('--az-radar-shift');\r\n    }\r\n  }\r\n  function layout(){\r\n    fitToViewport();\r\n    const w=stage.clientWidth,h=stage.clientHeight;\r\n    if(!w || !h) return;\r\n    stage.style.setProperty(\"--az-sweep-size\",Math.ceil(Math.hypot(w,h)+40)+\"px\");\r\n    const compact=w<560;\r\n    const margin=9,gap=10;\r\n    const rows=[.10,.25,.45,.74,.90,.74,.45,.25,.59];\r\n    const boxes=[];\r\n    labels.forEach(function(label,index){\r\n      const bw=label.offsetWidth,bh=label.offsetHeight;\r\n      let x=w\/2,y=h*rows[index];\r\n      if(index<8){\r\n        const district=label.dataset.kind==='district';\r\n        const angle=sectors[index].angle*Math.PI\/180;\r\n        x=w\/2+Math.cos(angle)*w*(district?.27:.37);\r\n        if(!compact) y=h\/2+Math.sin(angle)*h*(district?.31:.41);\r\n        \/\/ Reserve separate left\/right halves for opposite labels.\r\n        if([1,2,3].includes(index)) x=Math.max(x,w\/2+gap\/2+bw\/2);\r\n        if([5,6,7].includes(index)) x=Math.min(x,w\/2-gap\/2-bw\/2);\r\n      }\r\n      x=Math.max(margin+bw\/2,Math.min(w-margin-bw\/2,x));\r\n      y=Math.max(margin+bh\/2,Math.min(h-margin-bh\/2,y));\r\n      const offsets=[0,-32,32,-64,64];\r\n      for(const offset of offsets){\r\n        const cy=Math.max(margin+bh\/2,Math.min(h-margin-bh\/2,y+offset));\r\n        const box={left:x-bw\/2,right:x+bw\/2,top:cy-bh\/2,bottom:cy+bh\/2};\r\n        if(!boxes.some(function(b){return box.left<b.right+6 && box.right>b.left-6 && box.top<b.bottom+6 && box.bottom>b.top-6;})){\r\n          y=cy;break;\r\n        }\r\n      }\r\n      label.style.left=x+'px';label.style.top=y+'px';\r\n      boxes.push({left:x-bw\/2,right:x+bw\/2,top:y-bh\/2,bottom:y+bh\/2});\r\n    });\r\n    const overlap=boxes.some(function(b,i){return boxes.slice(i+1).some(function(c){\r\n      return b.left<c.right+6 && b.right>c.left-6 && b.top<c.bottom+6 && b.bottom>c.top-6;\r\n    });});\r\n    if(overlap){\r\n      \/\/ W wyj\u0105tkowo w\u0105skiej kolumnie ka\u017cda nazwa dostaje osobny poziom.\r\n      \/\/ Pozostaj\u0105 kierunki lewo\/prawo oraz p\u00f3\u0142noc u g\u00f3ry, po\u0142udnie na dole.\r\n      [0,7,1,6,8,2,5,3,4].forEach(function(index,row){\r\n        labels[index].style.top=(h*(.07+row*.1075))+'px';\r\n      });\r\n    }\r\n  }\r\n\r\n  function draw(){\r\n    \/\/ \u015ar\u00f3dmie\u015bcie + 4 lub 3 inne dzielnice; pozosta\u0142e to miejscowo\u015bci.\r\n    const districtSectors=new Set(shuffle([0,1,2,3,4,5,6,7]).slice(0,moreDistricts?4:3));\r\n    sectors.forEach(function(sector,index){\r\n      const district=districtSectors.has(index);\r\n      const label=labels[index];\r\n      const pool=district?sector.districts:sector.towns;\r\n      const alternatives=pool.filter(function(name){return name!==label.textContent;});\r\n      label.textContent=randomItem(alternatives.length?alternatives:pool);\r\n      label.dataset.kind=district?'district':'town';\r\n      const angle=sector.angle*Math.PI\/180;\r\n      const rx=district?27:36;\r\n      const ry=district?31:43;\r\n      label.style.left=(50+Math.cos(angle)*rx)+'%';\r\n      label.style.top=(50+Math.sin(angle)*ry)+'%';\r\n      label.classList.remove('is-refreshed');\r\n    });\r\n    const center=labels[8];\r\n    center.textContent='\u015ar\u00f3dmie\u015bcie';\r\n    center.dataset.kind='district';\r\n    center.style.left='50%';\r\n    center.style.top='57%';\r\n    moreDistricts=!moreDistricts;\r\n  }\r\n  draw();\r\n  layout();\r\n  const resizeObserver='ResizeObserver' in window?new ResizeObserver(layout):null;\r\n  if(resizeObserver) resizeObserver.observe(stage);\r\n  window.addEventListener('resize',layout);\r\n  if(document.fonts) document.fonts.ready.then(layout);\r\n  \/\/ Obr\u00f3t w 4,8 s. Zwi\u0119ksz t\u0119 warto\u015b\u0107, aby spowolni\u0107 radar.\r\n  const cycleMs=4800;\r\n  const echoes=Array.from(stage.querySelectorAll('.az-waw-radar-echo'));\r\n  const lastHits=labels.map(function(){return -1;});\r\n  let frame=null,previousTime=null,elapsed=0,destroyed=false;\r\n  let observer=null;\r\n\r\n  function detect(index){\r\n    const label=labels[index];\r\n    if(index<8){\r\n      const districtCount=labels.filter(function(el){return el.dataset.kind==='district';}).length;\r\n      let kind=label.dataset.kind;\r\n      \/\/ W ka\u017cdej chwili pozostaj\u0105 4 lub 5 dzielnic, reszta to miejscowo\u015bci.\r\n      if(kind==='district'&&districtCount===5)kind='town';\r\n      else if(kind==='town'&&districtCount===4)kind='district';\r\n      const sector=sectors[index];\r\n      const pool=kind==='district'?sector.districts:sector.towns;\r\n      const alternatives=pool.filter(function(name){return name!==label.textContent;});\r\n      label.textContent=randomItem(alternatives.length?alternatives:pool);\r\n      label.dataset.kind=kind;\r\n      layout();\r\n    }\r\n    \/\/ \u015ar\u00f3dmie\u015bcie pozostaje sta\u0142ym punktem odniesienia, ale te\u017c odbiera echo.\r\n    label.classList.remove('is-detected');\r\n    void label.offsetWidth;\r\n    label.classList.add('is-detected');\r\n  }\r\n  function targetAngle(label){\r\n    const x=parseFloat(label.style.left)-stage.clientWidth\/2;\r\n    const y=parseFloat(label.style.top)-stage.clientHeight\/2;\r\n    return (Math.atan2(x,-y)*180\/Math.PI+360)%360;\r\n  }\r\n  function paint(){\r\n    stage.style.setProperty('--az-sweep-angle',((elapsed\/cycleMs*360)%360)+'deg');\r\n    echoes.forEach(function(echo,index){\r\n      const phase=((elapsed\/cycleMs*3+index)%3)\/3;\r\n      echo.style.opacity=String(.42*(1-phase));\r\n      echo.style.transform='translate(-50%,-50%) scale('+(.5+phase*6)+')';\r\n    });\r\n  }\r\n  function destroy(){\r\n    destroyed=true;\r\n    cancelAnimationFrame(frame);frame=null;\r\n    if(observer)observer.disconnect();\r\n    if(resizeObserver)resizeObserver.disconnect();\r\n    window.removeEventListener('resize',layout);\r\n    document.removeEventListener('visibilitychange',sync);\r\n    if(motion.removeEventListener)motion.removeEventListener('change',sync);\r\n  }\r\n  function tick(now){\r\n    frame=null;\r\n    if(!root.isConnected){destroy();return;}\r\n    if(motion.matches||document.hidden||!visible){previousTime=null;return;}\r\n    const delta=previousTime===null?0:Math.min(now-previousTime,100);\r\n    previousTime=now;\r\n    const before=elapsed\/cycleMs*360;\r\n    elapsed+=delta;\r\n    const after=elapsed\/cycleMs*360;\r\n    \/\/ Mierzymy pozycje przed wymian\u0105, aby nowa d\u0142ugo\u015b\u0107 napisu nie zmieni\u0142a trafie\u0144 tej klatki.\r\n    const angles=labels.map(targetAngle);\r\n    angles.forEach(function(angle,index){\r\n      const turn=Math.floor((after-angle)\/360);\r\n      const crossing=turn*360+angle;\r\n      if(crossing>before&&crossing<=after&&turn>lastHits[index]){\r\n        lastHits[index]=turn;detect(index);\r\n      }\r\n    });\r\n    paint();\r\n    frame=requestAnimationFrame(tick);\r\n  }\r\n  function sync(){\r\n    if(destroyed)return;\r\n    if(frame!==null)cancelAnimationFrame(frame);\r\n    frame=null;previousTime=null;\r\n    if(!root.isConnected){destroy();return;}\r\n    if(motion.matches){\r\n      labels.forEach(function(label){label.classList.remove('is-detected');});\r\n      echoes.forEach(function(echo){echo.style.opacity='0';});\r\n      return;\r\n    }\r\n    if(!document.hidden&&visible)frame=requestAnimationFrame(tick);\r\n  }\r\n  observer='IntersectionObserver' in window\r\n    ?new IntersectionObserver(function(entries){visible=entries[0].isIntersecting;sync();},{threshold:0})\r\n    :null;\r\n  if(observer)observer.observe(stage);\r\n  document.addEventListener('visibilitychange',sync);\r\n  if(motion.addEventListener)motion.addEventListener('change',sync);\r\n  sync();\r\n  });\r\n  }\r\n  initAll();\r\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',initAll,{once:true});\r\n})();\r\n<\/script>\r\n\r\n\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:shortcode -->\n\n<\/div>\n<!-- \/wp:column -->\n\n<!-- wp:column {\"verticalAlignment\":\"center\"} -->\n<div class=\"wp-block-column is-vertically-aligned-center\">\n\n<!-- wp:shortcode -->\n<!-- HFCM by 99 Robots - Snippet # 6: faq glowna -->\n<!-- ===== FAQ (styl .sz-faq \u2014 iOS chevron + ramki) ===== -->\r\n<section class=\"sz-faq\" aria-label=\"FAQ \u2014 oferta i realizacja (Warszawa)\">\r\n  <style>\r\n    .sz-faq{max-width:980px;margin:26px auto;padding:0 14px;font-family:inherit}\r\n    .sz-faq *{box-sizing:border-box}\r\n    .sz-faq__title{margin:0 0 10px;font-size:22px;line-height:1.2;letter-spacing:-.01em}\r\n    .sz-faq__lead{margin:0 0 14px;color:rgba(0,0,0,.72);line-height:1.65;font-size:14.5px;max-width:860px}\r\n\r\n    .sz-faq__item{\r\n      border:1px solid rgba(0,0,0,.10);\r\n      border-radius:16px;\r\n      background:#fff;\r\n      box-shadow:0 10px 28px rgba(0,0,0,.06);\r\n      overflow:hidden;\r\n      margin:0 0 10px;\r\n    }\r\n\r\n    .sz-faq__item > summary{\r\n      list-style:none;\r\n      cursor:pointer;\r\n      padding:14px 46px 14px 14px;\r\n      font-weight:900;\r\n      color:#111;\r\n      line-height:1.35;\r\n      position:relative;\r\n      background:linear-gradient(180deg, rgba(0,0,0,.018), rgba(0,0,0,.006));\r\n    }\r\n    .sz-faq__item > summary::-webkit-details-marker{display:none}\r\n\r\n    \/* iOS chevron *\/\r\n    .sz-faq__item > summary:after{\r\n      content:\"\";\r\n      position:absolute;\r\n      right:14px;\r\n      top:50%;\r\n      width:10px;height:10px;\r\n      border-right:2px solid rgba(0,0,0,.55);\r\n      border-bottom:2px solid rgba(0,0,0,.55);\r\n      transform:translateY(-60%) rotate(45deg);\r\n      transition:transform .18s ease, opacity .18s ease;\r\n      opacity:.9;\r\n    }\r\n    .sz-faq__item[open] > summary:after{\r\n      transform:translateY(-40%) rotate(-135deg);\r\n      opacity:1;\r\n    }\r\n\r\n    .sz-faq__content{\r\n      padding:12px 14px 14px;\r\n      border-top:1px solid rgba(0,0,0,.08);\r\n      color:rgba(0,0,0,.78);\r\n      line-height:1.7;\r\n      font-size:14.5px;\r\n      background:#fff;\r\n    }\r\n    .sz-faq__content p{margin:0 0 10px}\r\n    .sz-faq__content p:last-child{margin:0}\r\n\r\n    \/* delikatny premium akcent po otwarciu *\/\r\n    .sz-faq__item[open] .sz-faq__content{font-style:italic}\r\n\r\n    @media (max-width: 520px){\r\n      .sz-faq{padding:0 12px}\r\n      .sz-faq__title{font-size:20px}\r\n      .sz-faq__lead{font-size:14px}\r\n      .sz-faq__item > summary{padding:13px 44px 13px 13px}\r\n      .sz-faq__content{font-size:14px}\r\n    }\r\n  <\/style>\r\n\r\n  <h2 class=\"sz-faq__title\">FAQ \u2014 oferta i realizacja w Warszawie (kr\u00f3tko i konkretnie)<\/h2>\r\n  <p class=\"sz-faq__lead\">\r\n    Najcz\u0119stsze pytania o dob\u00f3r produktu, wycen\u0119, pomiar i monta\u017c. Je\u015bli chcesz przyspieszy\u0107 wycen\u0119 \u2014 pode\u015blij wymiary i zdj\u0119cie okna.\r\n  <\/p>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Jakie produkty mog\u0119 u Was zam\u00f3wi\u0107?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Najcz\u0119\u015bciej realizujemy: karnisze i szyny sufitowe (w tym gi\u0119te), zas\u0142ony i firany na wymiar oraz wybrane os\u0142ony okienne. Dob\u00f3r zale\u017cy od okna i efektu, jaki chcesz uzyska\u0107 (\u015bwiat\u0142o, prywatno\u015b\u0107, \u201eczysty sufit\u201d, smart).<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Czy dzia\u0142acie tylko w Warszawie?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Bazujemy w Warszawie i tu realizujemy wi\u0119kszo\u015b\u0107 pomiar\u00f3w oraz monta\u017cy. Okolice te\u017c s\u0105 mo\u017cliwe \u2014 podaj lokalizacj\u0119, a od razu powiemy, jak wygl\u0105da dojazd i terminy.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Jak wygl\u0105da proces: od kontaktu do monta\u017cu?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Kontakt \u2192 kr\u00f3tka rozmowa o potrzebach \u2192 pomiar i doradztwo (je\u015bli potrzebne) \u2192 jasna wycena \u2192 realizacja \u2192 monta\u017c i finalne ustawienia. Cel jest prosty: spokojnie, przewidywalnie i bez niespodzianek.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Co przygotowa\u0107, \u017ceby szybko dosta\u0107 wycen\u0119?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Najlepiej: orientacyjna szeroko\u015b\u0107 i wysoko\u015b\u0107, informacja gdzie ma by\u0107 monta\u017c (sufit\/\u015bciana\/wn\u0119ka) oraz 1\u20132 zdj\u0119cia okna. To zwykle wystarcza, \u017ceby policzy\u0107 sensown\u0105 ofert\u0119 bez domys\u0142\u00f3w.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Czy macie miejsce, gdzie mo\u017cna obejrze\u0107 materia\u0142y \/ rozwi\u0105zania na \u017cywo?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Tak \u2014 i to naprawd\u0119 pomaga. Na \u017cywo \u0142atwiej oceni\u0107 kolor, faktur\u0119, prac\u0119 systemu i detale prowadzenia, kt\u00f3rych nie wida\u0107 na zdj\u0119ciach.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Wi-Fi czy Zigbee \u2014 co lepiej wybra\u0107 w automatyce?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Wi-Fi jest proste, bo zwykle dzia\u0142a bez dodatkowych urz\u0105dze\u0144. Zigbee bywa stabilniejsze w rozbudowanym smart home, ale cz\u0119sto wymaga bramki\/huba. Najlepszy wyb\u00f3r zale\u017cy od tego, z jakiego ekosystemu korzystasz i jakie sceny chcesz ustawi\u0107.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Czy robicie szyny\/karnisze gi\u0119te (zakr\u0119ty, naro\u017cniki, wykusze)?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Tak. Gi\u0119cia robi\u0105 r\u00f3\u017cnic\u0119 zw\u0142aszcza przy du\u017cych przeszkleniach i naro\u017cnikach \u2014 wtedy tkanina pracuje p\u0142ynnie, a ca\u0142o\u015b\u0107 wygl\u0105da \u201edomkni\u0119ta\u201d i premium.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Czy zas\u0142ony\/firany da si\u0119 dobrze dobra\u0107 do system\u00f3w automatycznych?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Tak \u2014 klucz to dopasowanie tkaniny i akcesori\u00f3w (no\u015bniki\/\u015blizgi), \u017ceby przesuw by\u0142 r\u00f3wny i cichy. W automatyce liczy si\u0119 detal: ci\u0119\u017car tkaniny, prowadzenie i spos\u00f3b u\u0142o\u017cenia (np. wave\/flex\/ta\u015bma).<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Ile trwa realizacja i od czego zale\u017cy termin?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Najcz\u0119\u015bciej od dost\u0119pno\u015bci materia\u0142\u00f3w, stopnia skomplikowania (np. gi\u0119cia, nietypowe uk\u0142ady) i zakresu us\u0142ugi (sam produkt czy produkt + monta\u017c). Po kr\u00f3tkiej rozmowie i wymiarach podajemy realny termin.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n\r\n  <details class=\"sz-faq__item\">\r\n    <summary>Czy mog\u0119 zam\u00f3wi\u0107 sam produkt bez monta\u017cu?<\/summary>\r\n    <div class=\"sz-faq__content\">\r\n      <p>Tak. Mo\u017cemy przygotowa\u0107 sam produkt (np. szyn\u0119\/karnisz na wymiar) albo pe\u0142n\u0105 us\u0142ug\u0119 z monta\u017cem. Zwykle podpowiadamy, co ma najwi\u0119kszy sens przy Twoim typie okna, \u017ceby efekt by\u0142 trwa\u0142y i estetyczny.<\/p>\r\n    <\/div>\r\n  <\/details>\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n<!-- \/wp:shortcode -->\n\n<\/div>\n<!-- \/wp:column -->\n\n<\/div>\n<!-- \/wp:columns -->\n\n<p><!-- \/wp:shortcode --><\/p>\n<p><!-- wp:shortcode --><\/p>\n<section id=\"kontakt\">\n<\/section>\n<\/p>\n<p><!-- \/wp:shortcode --><\/p><!-- \/wp:columns -->","protected":false},"excerpt":{"rendered":"<p>Producent karniszy z Warszawy Nasza oferta skierowana jest do klient\u00f3w indywidualnych, firm, hoteli, a tak\u017ce do firm wyko\u0144czeniowych, firm z bran\u017cy wystroju wn\u0119trz, architekt\u00f3w. Oferujemy elementy do produkcji karniszy lub gotowe produkty w atrakcyjnych cenach. Nasza produkcja pozwala na termin realizacji w 24 godziny. Jeste\u015bmy tak\u017ce producentem zas\u0142on i firan. Mo\u017cesz zam\u00f3wi\u0107 zas\u0142ony do ka\u017cdego&#8230;<\/p>\n","protected":false},"author":1,"featured_media":188,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"enable","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-6","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Karnisze KS Warszawa<\/title>\n<meta name=\"description\" content=\"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/karniszewarszawa.pl\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Karnisze KS Warszawa\" \/>\n<meta property=\"og:description\" content=\"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa\" \/>\n<meta property=\"og:url\" content=\"https:\/\/karniszewarszawa.pl\/\" \/>\n<meta property=\"og:site_name\" content=\"Karnisze KS Warszawa\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-28T06:43:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-szyny-skompresowane.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/\",\"url\":\"https:\\\/\\\/karniszewarszawa.pl\\\/\",\"name\":\"Karnisze KS Warszawa\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/karniszewarszawa.pl\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/karnisze-szyny-skompresowane.webp\",\"datePublished\":\"2024-01-08T15:30:20+00:00\",\"dateModified\":\"2026-09-28T06:43:23+00:00\",\"description\":\"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/karniszewarszawa.pl\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#primaryimage\",\"url\":\"https:\\\/\\\/karniszewarszawa.pl\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/karnisze-szyny-skompresowane.webp\",\"contentUrl\":\"https:\\\/\\\/karniszewarszawa.pl\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/karnisze-szyny-skompresowane.webp\",\"width\":1536,\"height\":1024,\"caption\":\"Karnisze KS Warszawa\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/karniszewarszawa.pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Karnisze KS Warszawa\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#website\",\"url\":\"https:\\\/\\\/karniszewarszawa.pl\\\/\",\"name\":\"Karnisze KS Warszawa\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/karniszewarszawa.pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#organization\",\"name\":\"AZHOME\",\"url\":\"https:\\\/\\\/karniszewarszawa.pl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"http:\\\/\\\/karniszewarszawa.pl\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/cropped-blus.jpg\",\"contentUrl\":\"http:\\\/\\\/karniszewarszawa.pl\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/cropped-blus.jpg\",\"width\":512,\"height\":512,\"caption\":\"AZHOME\"},\"image\":{\"@id\":\"https:\\\/\\\/karniszewarszawa.pl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Karnisze KS Warszawa","description":"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/karniszewarszawa.pl\/","og_locale":"pl_PL","og_type":"article","og_title":"Karnisze KS Warszawa","og_description":"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa","og_url":"https:\/\/karniszewarszawa.pl\/","og_site_name":"Karnisze KS Warszawa","article_modified_time":"2026-09-28T06:43:23+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-szyny-skompresowane.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/karniszewarszawa.pl\/","url":"https:\/\/karniszewarszawa.pl\/","name":"Karnisze KS Warszawa","isPartOf":{"@id":"https:\/\/karniszewarszawa.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/karniszewarszawa.pl\/#primaryimage"},"image":{"@id":"https:\/\/karniszewarszawa.pl\/#primaryimage"},"thumbnailUrl":"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-szyny-skompresowane.webp","datePublished":"2024-01-08T15:30:20+00:00","dateModified":"2026-09-28T06:43:23+00:00","description":"Karnisze KS Warszawa, producent karniszy KS w Warszawie. Oferujemy aluminiowe szyny sufitowe KS na wymiar z monta\u017cem do zas\u0142on Forest Warszawa","breadcrumb":{"@id":"https:\/\/karniszewarszawa.pl\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/karniszewarszawa.pl\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/karniszewarszawa.pl\/#primaryimage","url":"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-szyny-skompresowane.webp","contentUrl":"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-szyny-skompresowane.webp","width":1536,"height":1024,"caption":"Karnisze KS Warszawa"},{"@type":"BreadcrumbList","@id":"https:\/\/karniszewarszawa.pl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/karniszewarszawa.pl\/"},{"@type":"ListItem","position":2,"name":"Karnisze KS Warszawa"}]},{"@type":"WebSite","@id":"https:\/\/karniszewarszawa.pl\/#website","url":"https:\/\/karniszewarszawa.pl\/","name":"Karnisze KS Warszawa","description":"","publisher":{"@id":"https:\/\/karniszewarszawa.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/karniszewarszawa.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/karniszewarszawa.pl\/#organization","name":"AZHOME","url":"https:\/\/karniszewarszawa.pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/karniszewarszawa.pl\/#\/schema\/logo\/image\/","url":"http:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2024\/01\/cropped-blus.jpg","contentUrl":"http:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2024\/01\/cropped-blus.jpg","width":512,"height":512,"caption":"AZHOME"},"image":{"@id":"https:\/\/karniszewarszawa.pl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":219,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":536,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions\/536"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/media\/188"}],"wp:attachment":[{"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/media?parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}