{"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-07-09T12:00:17","modified_gmt":"2026-07-09T10:00:17","slug":"karnisze-ks-warszawa","status":"publish","type":"page","link":"https:\/\/karniszewarszawa.pl\/","title":{"rendered":"Karnisze KS Warszawa"},"content":{"rendered":"\n<div class=\"wp-block-cover alignfull is-light has-parallax\" style=\"min-height:593px;aspect-ratio:unset;\"><div class=\"wp-block-cover__image-background wp-image-319 size-full has-parallax\" style=\"background-position:50% 50%;background-image:url(https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/karnisze-ks-warszawa.webp)\"><\/div><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\" style=\"background-color:#000000\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"padding-top:var(--wp--preset--spacing--80)\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-87215469 wp-block-columns-is-layout-flex\" style=\"margin-top:var(--wp--preset--spacing--80);padding-top:var(--wp--preset--spacing--80)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<style class=\"wp-elements-0cb861d3dac1e15c254229f5f7acd0ca\">\n  \/* AZHOME: subtelny b\u0142ysk po tek\u015bcie H1 *\/\n  .az-shine-title{\n    position:relative;\n    display:inline-block;            \/* wa\u017cne, \u017ceby b\u0142ysk by\u0142 \u201ena tek\u015bcie\u201d, nie na ca\u0142ej szeroko\u015bci *\/\n    color:#222222;\n    overflow:hidden;                 \/* ucina b\u0142ysk poza literami *\/\n    -webkit-text-fill-color: currentColor;\n  }\n\n  .az-shine-title::after{\n    content:\"\";\n    position:absolute;\n    top:-20%;\n    left:-35%;\n    width:28%;\n    height:140%;\n    transform:skewX(-18deg);\n    pointer-events:none;\n    \/* sam b\u0142ysk *\/\n    background:linear-gradient(\n      90deg,\n      rgba(255,255,255,0) 0%,\n      rgba(255,255,255,.75) 45%,\n      rgba(255,255,255,.05) 65%,\n      rgba(255,255,255,0) 100%\n    );\n    filter:blur(.3px);\n    opacity:.85;\n    animation:azTitleShine 3.8s ease-in-out infinite;\n  }\n\n  @keyframes azTitleShine{\n    0%   { left:-35%; opacity:0; }\n    12%  { opacity:.9; }\n    28%  { left:110%; opacity:0; }\n    100% { left:110%; opacity:0; }\n  }\n\n  \/* szanuj preferencje u\u017cytkownika *\/\n  @media (prefers-reduced-motion: reduce){\n    .az-shine-title::after{ animation:none; opacity:0; }\n  }\n<\/style>\n\n\n<h1 class=\"wp-block-heading has-text-color has-link-color az-shine-title wp-elements-25c01fd54072343c7faa4b0fd88ff25a\" style=\"color:#222222\">\nKarnisze KS Warszawa\n<\/h1>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n<\/div><\/div>\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<\/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> \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\n<p class=\"has-text-color has-link-color wp-elements-133deadf6da6268a511b0d5a0e8c73b8 wp-block-paragraph\" style=\"color:#222222;margin-right:var(--wp--preset--spacing--40);margin-left:var(--wp--preset--spacing--40);letter-spacing:1px;line-height:2.2\">Karnisze KS Warszawa, jeste\u015bmy producentem aluminiowych szyn sufitowych typu KS. Karnisze KS to minimalistyczne, solidne i proste rozwi\u0105zanie do wieszania zas\u0142on i firanek. Karnisze mo\u017cemy wykona\u0107 w wersji prostej lub gi\u0119te z zakr\u0119tami. Dzi\u0119ki temu masz mo\u017cliwo\u015b\u0107 idealnego dopasowania karniszy do swojego domu lub biura.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:23px\"><strong>Karnisze ks z monta\u017cem w Warszawie.<\/strong><\/h2>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-4aebb3edaec20eef0b059a0550b45d84 wp-block-paragraph\" style=\"color:#222222;margin-right:var(--wp--preset--spacing--40);margin-left:var(--wp--preset--spacing--40);letter-spacing:1px;line-height:2.2\">Karnisze wykonujemy na dok\u0142adny rozmiar. Je\u017celi <strong>potrzebujesz 439 cm, otrzymasz 439 cm<\/strong>. Maksymalna d\u0142ugo\u015b\u0107 szyny <strong>w jednym odcinku to 7 metr\u00f3w<\/strong>. Aluminiowe szyny sufitowe mo\u017ce zam\u00f3wi\u0107 z monta\u017cem w Warszawie i okolicach Warszawy.<\/p>\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\/02\/aluminiowe-szyny-sufitowe-warszawa.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-1453ba14223521fceced549d2dbed664\" 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-902e282ab620a162d29e86bb7b2cb90d 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<style>\r\n  \/* ===== AZHOME OPINIE GOOGLE \u2014 animowany licznik + litery GOOGLE jedna po drugiej ===== *\/\r\n\r\n  @keyframes azReviewBgFloat{\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 azReviewFloat{\r\n    0%,100%{ transform:translateY(0); }\r\n    50%{ transform:translateY(-3px); }\r\n  }\r\n\r\n  @keyframes azReviewShine{\r\n    0%{ left:-45%; opacity:0; }\r\n    10%{ opacity:1; }\r\n    28%{ left:115%; opacity:0; }\r\n    100%{ left:115%; opacity:0; }\r\n  }\r\n\r\n  @keyframes azReviewNumberBoom{\r\n    0%{ transform:scale(1); }\r\n    35%{ transform:scale(1.18); }\r\n    65%{ transform:scale(.96); }\r\n    100%{ transform:scale(1); }\r\n  }\r\n\r\n  .az-review-wrap{\r\n    width:100%;\r\n    margin:24px auto;\r\n    padding:0;\r\n    text-align:center;\r\n    box-sizing:border-box;\r\n    isolation:isolate;\r\n  }\r\n\r\n  .az-review-card{\r\n    max-width:620px;\r\n    margin:0 auto;\r\n    padding:14px;\r\n    border:1px solid rgba(184,137,45,.52);\r\n    border-radius:22px;\r\n    text-align:center;\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(66, 133, 244, .52) 0%,\r\n        rgba(66, 133, 244, .28) 34%,\r\n        rgba(255,255,255, 0) 72%),\r\n      radial-gradient(900px 360px at 86% 22%,\r\n        rgba(251, 188, 5, .50) 0%,\r\n        rgba(251, 188, 5, .26) 42%,\r\n        rgba(255,255,255, 0) 74%),\r\n      radial-gradient(980px 520px at 58% 92%,\r\n        rgba(234, 67, 53, .42) 0%,\r\n        rgba(52, 168, 83, .30) 38%,\r\n        rgba(255,255,255, 0) 74%),\r\n      linear-gradient(180deg,\r\n        rgba(255,255,255, .90) 0%,\r\n        rgba(255,255,255, .82) 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      azReviewBgFloat 3.6s ease-in-out infinite,\r\n      azReviewFloat 3.2s ease-in-out infinite;\r\n    box-shadow:\r\n      0 18px 46px rgba(0,0,0,.15),\r\n      0 0 26px rgba(66,133,244,.18),\r\n      0 0 24px rgba(251,188,5,.18),\r\n      0 0 22px rgba(234,67,53,.14),\r\n      inset 0 0 0 1px rgba(255,255,255,.72);\r\n  }\r\n\r\n  .az-review-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-review-inner{\r\n    position:relative;\r\n    z-index:1;\r\n    display:flex;\r\n    align-items:stretch;\r\n    justify-content:center;\r\n    gap:0;\r\n    background:rgba(255,255,255,.82);\r\n    border:1px solid rgba(0,0,0,.08);\r\n    border-radius:18px;\r\n    overflow:hidden;\r\n    box-shadow:0 12px 30px rgba(0,0,0,.10);\r\n    backdrop-filter:blur(6px);\r\n  }\r\n\r\n  .az-review-google{\r\n    width:155px;\r\n    min-height:168px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border-right:1px solid rgba(0,0,0,.10);\r\n    background:rgba(255,255,255,.62);\r\n    padding:12px 8px;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-review-g{\r\n    font-size:70px;\r\n    line-height:1;\r\n    font-weight:900;\r\n    font-family:Arial, sans-serif;\r\n    letter-spacing:-.04em;\r\n  }\r\n\r\n  .az-review-google-letter{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    width:1.05em;\r\n    height:1em;\r\n    line-height:1;\r\n    color:#4285f4;\r\n    transform-origin:center;\r\n    transition:\r\n      color .18s ease,\r\n      transform .18s ease,\r\n      opacity .18s ease;\r\n  }\r\n\r\n  .az-review-google-letter.az-letter-pop{\r\n    transform:scale(1.16);\r\n  }\r\n\r\n  .az-review-count{\r\n    margin-top:4px;\r\n    text-align:center;\r\n    font-family:Arial, sans-serif;\r\n    line-height:1;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n  }\r\n\r\n  .az-review-count-small{\r\n    display:block;\r\n    font-size:11px;\r\n    font-weight:700;\r\n    color:#222222;\r\n    letter-spacing:.02em;\r\n    margin-bottom:2px;\r\n    line-height:1.1;\r\n    order:1;\r\n  }\r\n\r\n  .az-review-count-number{\r\n    display:block;\r\n    font-size:44px;\r\n    font-weight:900;\r\n    color:#222222;\r\n    letter-spacing:-.06em;\r\n    line-height:.95;\r\n    order:2;\r\n    will-change:transform;\r\n  }\r\n\r\n  .az-review-count-number.az-review-count-number--boom{\r\n    animation:azReviewNumberBoom .48s cubic-bezier(.2,.9,.2,1.25);\r\n  }\r\n\r\n  .az-review-count-label{\r\n    display:block;\r\n    font-size:15px;\r\n    font-weight:900;\r\n    color:#222222;\r\n    letter-spacing:.02em;\r\n    margin-top:1px;\r\n    line-height:1;\r\n    order:3;\r\n  }\r\n\r\n  .az-review-content{\r\n    flex:1;\r\n    padding:18px 22px;\r\n    text-align:left;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-review-stars{\r\n    display:flex;\r\n    align-items:center;\r\n    gap:4px;\r\n    margin:0 0 4px;\r\n    font-size:34px;\r\n    line-height:1;\r\n    color:#fbbc04;\r\n    letter-spacing:1px;\r\n    text-shadow:\r\n      0 1px 0 rgba(0,0,0,.12),\r\n      0 0 10px rgba(251,188,4,.25);\r\n  }\r\n\r\n  .az-review-score{\r\n    display:inline-block;\r\n    margin-left:10px;\r\n    color:#111;\r\n    font-size:26px;\r\n    font-weight:900;\r\n    letter-spacing:0;\r\n    vertical-align:middle;\r\n  }\r\n\r\n  .az-review-title{\r\n    margin:4px 0 4px;\r\n    font-size:24px;\r\n    line-height:1.18;\r\n    font-weight:900;\r\n    color:#111;\r\n    letter-spacing:-.02em;\r\n  }\r\n\r\n  .az-review-sub{\r\n    margin:0 0 14px;\r\n    color:rgba(0,0,0,.76);\r\n    font-size:16px;\r\n    line-height:1.35;\r\n  }\r\n\r\n  .az-review-btn{\r\n    position:relative;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:44px;\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:900;\r\n    font-size:14px;\r\n    line-height:1.15;\r\n    box-shadow:\r\n      0 12px 24px rgba(0,0,0,.20),\r\n      0 0 14px rgba(66,133,244,.16);\r\n    overflow:hidden;\r\n    isolation:isolate;\r\n    transition:transform .16s ease, box-shadow .16s ease;\r\n  }\r\n\r\n  .az-review-btn::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    top:-30%;\r\n    left:-45%;\r\n    width:38%;\r\n    height:160%;\r\n    transform:skewX(-18deg);\r\n    pointer-events:none;\r\n    background:linear-gradient(\r\n      90deg,\r\n      rgba(255,255,255,0) 0%,\r\n      rgba(255,255,255,.95) 45%,\r\n      rgba(255,255,255,.10) 65%,\r\n      rgba(255,255,255,0) 100%\r\n    );\r\n    filter:blur(.35px);\r\n    opacity:.9;\r\n    animation:azReviewShine 2.1s ease-in-out infinite;\r\n  }\r\n\r\n  .az-review-btn:hover{\r\n    transform:translateY(-1px);\r\n    box-shadow:\r\n      0 15px 30px rgba(0,0,0,.24),\r\n      0 0 18px rgba(251,188,5,.20);\r\n  }\r\n\r\n  .az-review-btn:focus-visible{\r\n    outline:3px solid rgba(66,133,244,.50);\r\n    outline-offset:3px;\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce){\r\n    .az-review-card,\r\n    .az-review-btn::after,\r\n    .az-review-count-number.az-review-count-number--boom{\r\n      animation:none !important;\r\n    }\r\n  }\r\n\r\n  @media (max-width:640px){\r\n    .az-review-card{\r\n      max-width:94%;\r\n      padding:10px;\r\n      border-radius:18px;\r\n    }\r\n\r\n    .az-review-inner{\r\n      flex-direction:column;\r\n      border-radius:16px;\r\n    }\r\n\r\n    .az-review-google{\r\n      width:100%;\r\n      min-height:108px;\r\n      border-right:0;\r\n      border-bottom:1px solid rgba(0,0,0,.10);\r\n      padding:12px 14px;\r\n      box-sizing:border-box;\r\n      display:grid;\r\n      grid-template-columns:1fr auto auto 1fr;\r\n      align-items:center;\r\n      justify-content:center;\r\n      column-gap:10px;\r\n      text-align:center;\r\n    }\r\n\r\n    .az-review-g{\r\n      grid-column:2;\r\n      grid-row:1;\r\n      font-size:58px;\r\n      line-height:1;\r\n      justify-self:end;\r\n      align-self:center;\r\n      margin:0;\r\n    }\r\n\r\n    .az-review-count{\r\n      grid-column:3;\r\n      grid-row:1;\r\n      margin:0;\r\n      display:grid;\r\n      grid-template-columns:auto auto;\r\n      grid-template-rows:auto auto;\r\n      column-gap:8px;\r\n      row-gap:0;\r\n      align-items:center;\r\n      justify-content:center;\r\n      text-align:left;\r\n      font-family:Arial, sans-serif;\r\n      line-height:1;\r\n      color:#222222;\r\n    }\r\n\r\n    .az-review-count-number{\r\n      grid-column:1;\r\n      grid-row:1 \/ span 2;\r\n      display:block;\r\n      font-size:46px;\r\n      font-weight:900;\r\n      color:#222222;\r\n      letter-spacing:-.06em;\r\n      line-height:.92;\r\n      text-align:center;\r\n      align-self:center;\r\n      margin:0;\r\n    }\r\n\r\n    .az-review-count-small{\r\n      grid-column:2;\r\n      grid-row:1;\r\n      display:block;\r\n      font-size:11px;\r\n      font-weight:700;\r\n      color:#222222;\r\n      letter-spacing:.02em;\r\n      line-height:1.1;\r\n      margin:0 0 1px;\r\n      white-space:nowrap;\r\n      text-align:left;\r\n      align-self:end;\r\n    }\r\n\r\n    .az-review-count-label{\r\n      grid-column:2;\r\n      grid-row:2;\r\n      display:block;\r\n      font-size:15px;\r\n      font-weight:900;\r\n      color:#222222;\r\n      letter-spacing:.02em;\r\n      line-height:1;\r\n      margin:0;\r\n      white-space:nowrap;\r\n      text-align:left;\r\n      align-self:start;\r\n    }\r\n\r\n    .az-review-content{\r\n      width:100%;\r\n      padding:16px;\r\n      text-align:center;\r\n      box-sizing:border-box;\r\n    }\r\n\r\n    .az-review-stars{\r\n      justify-content:center;\r\n      font-size:28px;\r\n    }\r\n\r\n    .az-review-score{\r\n      font-size:22px;\r\n      margin-left:8px;\r\n    }\r\n\r\n    .az-review-title{\r\n      font-size:20px;\r\n    }\r\n\r\n    .az-review-sub{\r\n      font-size:15px;\r\n    }\r\n\r\n    .az-review-btn{\r\n      width:100%;\r\n      box-sizing:border-box;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"az-review-wrap\">\r\n  <div class=\"az-review-card\">\r\n    <div class=\"az-review-inner\">\r\n\r\n      <div class=\"az-review-google\" aria-label=\"Google, na podstawie 460 opinii\">\r\n        <div class=\"az-review-g\" aria-label=\"Google\">\r\n          <span class=\"az-review-google-letter\">G<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"az-review-count\">\r\n          <span class=\"az-review-count-number\" data-az-review-target=\"460\">0<\/span>\r\n          <span class=\"az-review-count-small\">na podstawie<\/span>\r\n          <span class=\"az-review-count-label\">opinii<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"az-review-content\">\r\n        <div class=\"az-review-stars\" aria-label=\"Ocena 5.0 na 5\">\r\n          \u2605\u2605\u2605\u2605\u2605 <span class=\"az-review-score\">5.0<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"az-review-title\">Najwy\u017cej oceniana us\u0142uga<\/div>\r\n\r\n        <p class=\"az-review-sub\"><\/p>\r\n\r\n        <a\r\n          class=\"az-review-btn\"\r\n          href=\"https:\/\/www.google.com\/maps?cid=10805085060045519056&amp;g_mp=CiVnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLkdldFBsYWNlEAMYASAF&amp;hl=pl&amp;source=embed\"\r\n          target=\"_blank\"\r\n          rel=\"noopener nofollow\"\r\n          aria-label=\"Kliknij i przeczytaj opinie o AZHOME w Google Maps\">\r\n          Kliknij i przeczytaj opinie o AZHOME\r\n        <\/a>\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 counters = document.querySelectorAll('.az-review-count-number[data-az-review-target]');\r\n  const googleLetters = document.querySelectorAll('.az-review-google-letter');\r\n\r\n  const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  const googleSequence = [\r\n    { letter: 'G', color: '#4285F4' },\r\n    { letter: 'O', color: '#DB4437' },\r\n    { letter: 'O', color: '#F4B400' },\r\n    { letter: 'G', color: '#4285F4' },\r\n    { letter: 'L', color: '#0F9D58' },\r\n    { letter: 'E', color: '#DB4437' }\r\n  ];\r\n\r\n  let googleIndex = 0;\r\n\r\n  function startGoogleLetters(){\r\n    googleLetters.forEach((el) => {\r\n      function changeLetter(){\r\n        const item = googleSequence[googleIndex];\r\n\r\n        el.classList.remove('az-letter-pop');\r\n        el.textContent = item.letter;\r\n        el.style.color = item.color;\r\n\r\n        void el.offsetWidth;\r\n        el.classList.add('az-letter-pop');\r\n\r\n        googleIndex = (googleIndex + 1) % googleSequence.length;\r\n      }\r\n\r\n      changeLetter();\r\n      setInterval(changeLetter, 500);\r\n    });\r\n  }\r\n\r\n  if(prefersReducedMotion){\r\n    googleLetters.forEach((el) => {\r\n      el.textContent = 'G';\r\n      el.style.color = '#4285F4';\r\n    });\r\n\r\n    counters.forEach((counter) => {\r\n      const target = parseInt(counter.getAttribute('data-az-review-target'), 10) || 0;\r\n      counter.textContent = target;\r\n    });\r\n\r\n    return;\r\n  }\r\n\r\n  startGoogleLetters();\r\n\r\n  counters.forEach((counter) => {\r\n    const target = parseInt(counter.getAttribute('data-az-review-target'), 10) || 0;\r\n    const duration = 1900;\r\n    const pause = 5000;\r\n\r\n    function animate(){\r\n      const startTime = performance.now();\r\n\r\n      counter.classList.remove('az-review-count-number--boom');\r\n      counter.textContent = '0';\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 = Math.pow(progress, 1.85);\r\n        const current = Math.floor(eased * target);\r\n\r\n        counter.textContent = current;\r\n\r\n        if(progress < 1){\r\n          requestAnimationFrame(tick);\r\n        } else {\r\n          counter.textContent = target;\r\n\r\n          counter.classList.remove('az-review-count-number--boom');\r\n          void counter.offsetWidth;\r\n          counter.classList.add('az-review-count-number--boom');\r\n\r\n          setTimeout(animate, pause);\r\n        }\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    animate();\r\n  });\r\n})();\r\n<\/script>\n<!-- \/end HFCM by 99 Robots -->\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.3\"><span style=\"text-decoration: underline;\">Zadzwo\u0144 i um\u00f3w spotkanie w biurze handlowym<br><\/span><strong>ul. Wa\u0142 Miedzeszy\u0144ski 262 bud. A1<\/strong><br>04-792 Warszawa<br>\u2139 Zaparkujesz bez problemu. Posiadamy miejsca parkingowe.<\/p>\n<\/div>\n<\/div>\n\n<!-- HFCM by 99 Robots - Snippet # 8: szyna mini -->\n<section class=\"az-mini-rail-box\" aria-label=\"Nowo\u015b\u0107 w AZHOME \u2014 aluminiowa szyna sufitowa mini\">\r\n  <style>\r\n    @keyframes azMiniRailBgFloat{\r\n      0%{ background-position:0% 0%, 100% 0%, 30% 100%, 0% 0%; }\r\n      50%{ background-position:55% 18%, 62% 32%, 72% 70%, 0% 0%; }\r\n      100%{ background-position:0% 0%, 100% 0%, 30% 100%, 0% 0%; }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce){\r\n      .az-mini-rail-card{ animation:none !important; }\r\n    }\r\n\r\n    .az-mini-rail-box{\r\n      width:100%;\r\n      margin:28px auto;\r\n      padding:0;\r\n      box-sizing:border-box;\r\n      isolation:isolate;\r\n      font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\r\n    }\r\n\r\n    .az-mini-rail-card{\r\n      max-width:1120px;\r\n      margin:0 auto;\r\n      padding:16px;\r\n      border:1px solid rgba(184,137,45,.52);\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(66,133,244,.34) 0%,\r\n          rgba(66,133,244,.16) 34%,\r\n          rgba(255,255,255,0) 72%),\r\n        radial-gradient(900px 360px at 86% 22%,\r\n          rgba(251,188,5,.42) 0%,\r\n          rgba(251,188,5,.20) 42%,\r\n          rgba(255,255,255,0) 74%),\r\n        radial-gradient(980px 520px at 58% 92%,\r\n          rgba(234,67,53,.24) 0%,\r\n          rgba(52,168,83,.18) 38%,\r\n          rgba(255,255,255,0) 74%),\r\n        linear-gradient(180deg,\r\n          rgba(255,255,255,.94) 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:azMiniRailBgFloat 6s ease-in-out infinite;\r\n      box-shadow:\r\n        0 18px 46px rgba(0,0,0,.12),\r\n        0 0 26px rgba(66,133,244,.12),\r\n        0 0 24px rgba(251,188,5,.16),\r\n        inset 0 0 0 1px rgba(255,255,255,.75);\r\n    }\r\n\r\n    .az-mini-rail-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-mini-rail-inner{\r\n      position:relative;\r\n      z-index:1;\r\n      background:rgba(255,255,255,.90);\r\n      border:1px solid rgba(0,0,0,.08);\r\n      border-radius:20px;\r\n      overflow:hidden;\r\n      box-shadow:0 12px 30px rgba(0,0,0,.10);\r\n      backdrop-filter:blur(6px);\r\n    }\r\n\r\n    .az-mini-rail-image{\r\n      width:100%;\r\n      background:#fff;\r\n      border-bottom:1px solid rgba(0,0,0,.08);\r\n      padding:0;\r\n      margin:0;\r\n      overflow:hidden;\r\n    }\r\n\r\n    .az-mini-rail-image img{\r\n      display:block;\r\n      width:100%;\r\n      height:auto;\r\n      max-width:100%;\r\n      object-fit:contain;\r\n      object-position:center;\r\n    }\r\n\r\n    .az-mini-rail-content{\r\n      padding:28px 28px 30px;\r\n      box-sizing:border-box;\r\n      max-width:920px;\r\n      margin:0 auto;\r\n      text-align:center;\r\n    }\r\n\r\n    .az-mini-rail-kicker{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      gap:8px;\r\n      margin:0 0 12px;\r\n      padding:7px 12px;\r\n      border-radius:999px;\r\n      background:linear-gradient(135deg, rgba(17,17,17,.95), rgba(64,51,34,.95));\r\n      color:#fff;\r\n      font-size:11px;\r\n      line-height:1.2;\r\n      font-weight:900;\r\n      letter-spacing:.14em;\r\n      text-transform:uppercase;\r\n      box-shadow:0 8px 18px rgba(0,0,0,.16);\r\n    }\r\n\r\n    .az-mini-rail-kicker::before{\r\n      content:\"\";\r\n      width:8px;\r\n      height:8px;\r\n      border-radius:50%;\r\n      background:#d9b35f;\r\n      box-shadow:0 0 0 4px rgba(217,179,95,.18);\r\n      flex:0 0 auto;\r\n    }\r\n\r\n    .az-mini-rail-title{\r\n      margin:0 0 12px;\r\n      font-size:30px;\r\n      line-height:1.12;\r\n      letter-spacing:-.03em;\r\n      font-weight:950;\r\n      color:#111;\r\n    }\r\n\r\n    .az-mini-rail-text{\r\n      margin:0 auto;\r\n      color:rgba(0,0,0,.74);\r\n      font-size:16px;\r\n      line-height:1.75;\r\n      max-width:860px;\r\n    }\r\n\r\n    .az-mini-rail-text strong{\r\n      color:#111;\r\n      font-weight:900;\r\n    }\r\n\r\n    .az-mini-rail-badges{\r\n      display:flex;\r\n      flex-wrap:wrap;\r\n      justify-content:center;\r\n      gap:8px;\r\n      margin-top:18px;\r\n    }\r\n\r\n    .az-mini-rail-badge{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      justify-content:center;\r\n      min-height:34px;\r\n      padding:7px 12px;\r\n      border-radius:999px;\r\n      border:1px solid rgba(184,137,45,.34);\r\n      background:rgba(255,255,255,.78);\r\n      color:#111;\r\n      font-size:13px;\r\n      font-weight:900;\r\n      box-shadow:0 8px 18px rgba(0,0,0,.06);\r\n    }\r\n\r\n    @media (max-width:860px){\r\n      .az-mini-rail-card{\r\n        max-width:94%;\r\n        padding:10px;\r\n        border-radius:20px;\r\n      }\r\n\r\n      .az-mini-rail-inner{\r\n        border-radius:18px;\r\n      }\r\n\r\n      .az-mini-rail-content{\r\n        padding:22px 16px 24px;\r\n      }\r\n\r\n      .az-mini-rail-title{\r\n        font-size:24px;\r\n        line-height:1.16;\r\n      }\r\n\r\n      .az-mini-rail-text{\r\n        font-size:15px;\r\n        line-height:1.7;\r\n      }\r\n\r\n      .az-mini-rail-badges{\r\n        gap:7px;\r\n      }\r\n\r\n      .az-mini-rail-badge{\r\n        font-size:12.5px;\r\n        min-height:32px;\r\n        padding:7px 10px;\r\n      }\r\n    }\r\n\r\n    @media (max-width:480px){\r\n      .az-mini-rail-card{\r\n        max-width:96%;\r\n        padding:8px;\r\n        border-radius:18px;\r\n      }\r\n\r\n      .az-mini-rail-content{\r\n        padding:20px 14px 22px;\r\n      }\r\n\r\n      .az-mini-rail-kicker{\r\n        font-size:10px;\r\n        letter-spacing:.11em;\r\n      }\r\n\r\n      .az-mini-rail-title{\r\n        font-size:22px;\r\n      }\r\n\r\n      .az-mini-rail-text{\r\n        font-size:14.5px;\r\n      }\r\n\r\n      .az-mini-rail-badge{\r\n        width:100%;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"az-mini-rail-card\">\r\n    <div class=\"az-mini-rail-inner\">\r\n\r\n      <figure class=\"az-mini-rail-image\">\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/05\/szyna-mini-standard-wymiary-techniczne.webp\"\r\n          alt=\"Por\u00f3wnanie aluminiowej szyny sufitowej MINI i STANDARD \u2014 wymiary techniczne AZHOME\"\r\n          loading=\"lazy\">\r\n      <\/figure>\r\n\r\n      <div class=\"az-mini-rail-content\">\r\n        <span class=\"az-mini-rail-kicker\">Nowo\u015b\u0107 w AZHOME<\/span>\r\n\r\n        <h2 class=\"az-mini-rail-title\">\r\n          Aluminiowa szyna sufitowa MINI.<br>Dyskretniejszy efekt przy suficie.\r\n        <\/h2>\r\n\r\n        <p class=\"az-mini-rail-text\">\r\n          W AZHOME wprowadzamy now\u0105 aluminiow\u0105 szyn\u0119 sufitow\u0105 w wersji <strong>MINI<\/strong>, stworzon\u0105 do lekkich, minimalistycznych aran\u017cacji okien.\r\n          Standardowa szyna ma <strong>14 mm wysoko\u015bci<\/strong>, a nowa szyna MINI tylko <strong>8 mm<\/strong>, co daje zauwa\u017calnie subtelniejszy efekt wizualny.\r\n          To szczeg\u00f3lnie wa\u017cne tam, gdzie nie planujemy zabudowy, maskownicy ani wn\u0119ki sufitowej.\r\n          Dzi\u0119ki ni\u017cszemu profilowi szyna wygl\u0105da l\u017cej, spokojniej i bardziej nowocze\u015bnie, zachowuj\u0105c estetyk\u0119 potrzebn\u0105 przy firanach i zas\u0142onach na wymiar.\r\n          To dobry wyb\u00f3r do wn\u0119trz, w kt\u00f3rych liczy si\u0119 czysta linia, dyskrecja i mo\u017cliwie najmniej widoczny system prowadzenia tkaniny.\r\n        <\/p>\r\n\r\n        <div class=\"az-mini-rail-badges\" aria-label=\"Najwa\u017cniejsze cechy szyny MINI\">\r\n          <span class=\"az-mini-rail-badge\">MINI: 8 mm<\/span>\r\n          <span class=\"az-mini-rail-badge\">STANDARD: 14 mm<\/span>\r\n          <span class=\"az-mini-rail-badge\">szeroko\u015b\u0107: 20 mm<\/span>\r\n          <span class=\"az-mini-rail-badge\">minimalistyczny efekt<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n\n<section id=\"kalkulator-ks\">\n<\/section><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><!-- 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<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><!-- HFCM by 99 Robots - Snippet # 5: kalkulator ks 2 -->\n<!-- ===== KALKULATOR CEN \u2014 Karnisz KS + por\u00f3wnanie karniszy elektrycznych (z detalami po klikni\u0119ciu) ===== -->\r\n<section class=\"sz-kscalc\" aria-label=\"Kalkulator cen: Karnisz KS + por\u00f3wnanie elektrycznych\">\r\n  <style>\r\n    :root{ --szGlowCycle: 10s; }\r\n\r\n    .sz-kscalc{margin:26px 0;font-family:inherit}\r\n    .sz-kscalc *{box-sizing:border-box}\r\n    .sz-kscalc__wrap{max-width:980px;margin:0 auto;padding:0 14px}\r\n    .sz-kscalc__title{margin:0 0 8px;font-size:22px;line-height:1.2;letter-spacing:-.01em}\r\n    .sz-kscalc__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-kscalc__panel{\r\n      position:relative;\r\n      isolation:isolate;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      border-radius:18px;\r\n      background:linear-gradient(180deg, rgba(255,255,255,1), rgba(0,0,0,.012));\r\n      box-shadow:0 10px 26px rgba(0,0,0,.05);\r\n      overflow:hidden;\r\n    }\r\n\r\n    \/* ===== Mieni\u0105ce si\u0119 kolorowe t\u0142o (subtelnie, powoli) ===== *\/\r\n    .sz-kscalc__panel::before{\r\n      content:\"\";\r\n      position:absolute;\r\n      inset:-40px;\r\n      z-index:0;\r\n      pointer-events:none;\r\n      background: linear-gradient(\r\n        90deg,\r\n        rgba(66,133,244,.22) 0%,\r\n        rgba(52,168,83,.22) 25%,\r\n        rgba(251,188,5,.22) 50%,\r\n        rgba(234,67,53,.22) 75%,\r\n        rgba(66,133,244,.22) 100%\r\n      );\r\n      background-size: 220% 100%;\r\n      filter: blur(26px) saturate(1.35);\r\n      opacity:.60;\r\n      animation: szGlowDrift var(--szGlowCycle) ease-in-out infinite;\r\n      transform: translate3d(-8%,0,0);\r\n    }\r\n    .sz-kscalc__panel::after{\r\n      content:\"\";\r\n      position:absolute;\r\n      inset:-70px;\r\n      z-index:0;\r\n      pointer-events:none;\r\n      background: linear-gradient(\r\n        90deg,\r\n        rgba(66,133,244,.16) 0%,\r\n        rgba(52,168,83,.16) 25%,\r\n        rgba(251,188,5,.16) 50%,\r\n        rgba(234,67,53,.16) 75%,\r\n        rgba(66,133,244,.16) 100%\r\n      );\r\n      background-size: 260% 100%;\r\n      filter: blur(52px) saturate(1.6);\r\n      opacity:.55;\r\n      animation: szGlowDrift2 calc(var(--szGlowCycle) * 1.35) ease-in-out infinite;\r\n      transform: translate3d(-10%,0,0);\r\n      mix-blend-mode: multiply;\r\n    }\r\n\r\n    @keyframes szGlowDrift{\r\n      0%   { background-position: 0% 50%;  transform: translate3d(-8%,0,0);  opacity:.55; }\r\n      50%  { background-position: 100% 50%; transform: translate3d(8%,0,0);  opacity:.70; }\r\n      100% { background-position: 0% 50%;  transform: translate3d(-8%,0,0);  opacity:.55; }\r\n    }\r\n    @keyframes szGlowDrift2{\r\n      0%   { background-position: 0% 50%;  transform: translate3d(-10%,0,0); opacity:.50; }\r\n      50%  { background-position: 100% 50%; transform: translate3d(10%,0,0); opacity:.62; }\r\n      100% { background-position: 0% 50%;  transform: translate3d(-10%,0,0); opacity:.50; }\r\n    }\r\n\r\n    .sz-kscalc__panel > *{position:relative;z-index:1}\r\n\r\n    @media (prefers-reduced-motion: reduce){\r\n      .sz-kscalc__panel::before,\r\n      .sz-kscalc__panel::after{animation:none;opacity:.55}\r\n    }\r\n\r\n    .sz-kscalc__top{padding:14px 14px 0}\r\n    .sz-kscalc__label{display:block;font-weight:800;color:#222;margin:0 0 8px}\r\n    .sz-kscalc__hint{margin:0 0 10px;color:rgba(0,0,0,.62);font-size:13px;line-height:1.5}\r\n\r\n    .sz-kscalc__ta{\r\n      width:100%;min-height:92px;resize:vertical;\r\n      border:1px solid rgba(0,0,0,.14);\r\n      border-radius:14px;\r\n      padding:12px 12px;\r\n      font-size:14px;line-height:1.5;\r\n      background:#fff;\r\n      outline:none;\r\n    }\r\n    .sz-kscalc__ta:focus{border-color:rgba(0,0,0,.28);box-shadow:0 0 0 3px rgba(0,0,0,.06)}\r\n\r\n    .sz-kscalc__actions{\r\n      display:flex;gap:10px;flex-wrap:wrap;\r\n      padding:12px 14px 14px;\r\n      border-top:1px solid rgba(0,0,0,.08);\r\n      background:rgba(255,255,255,.55);\r\n      backdrop-filter: blur(4px);\r\n    }\r\n    .sz-kscalc__btn{\r\n      appearance:none;border:none;cursor:pointer;\r\n      padding:10px 14px;border-radius:999px;\r\n      font-weight:800;font-size:13.5px;\r\n      background:#111;color:#fff;\r\n      box-shadow:0 12px 26px rgba(0,0,0,.10);\r\n    }\r\n    .sz-kscalc__btn--ghost{\r\n      background:#fff;color:#111;\r\n      border:1px solid rgba(0,0,0,.14);\r\n      box-shadow:none;\r\n    }\r\n\r\n    .sz-kscalc__out{padding:14px}\r\n    .sz-kscalc__grid{\r\n      display:grid;grid-template-columns:1fr 1fr;gap:12px;\r\n      margin-top:10px;\r\n    }\r\n    .sz-kscalc__card{\r\n      border:1px solid rgba(0,0,0,.10);\r\n      border-radius:16px;\r\n      background:rgba(255,255,255,.92);\r\n      overflow:hidden;\r\n      box-shadow:0 10px 28px rgba(0,0,0,.06);\r\n      backdrop-filter: blur(4px);\r\n    }\r\n    .sz-kscalc__card h3{\r\n      margin:0;padding:12px 12px;\r\n      font-size:14px;letter-spacing:-.01em;\r\n      background:rgba(0,0,0,.02);\r\n      border-bottom:1px solid rgba(0,0,0,.08);\r\n    }\r\n\r\n    .sz-kscalc__list{margin:0;padding:10px 12px;list-style:none}\r\n    .sz-kscalc__list li{\r\n      display:flex;justify-content:space-between;gap:10px;\r\n      padding:8px 0;border-bottom:1px dashed rgba(0,0,0,.12);\r\n      font-size:13.5px;color:rgba(0,0,0,.78)\r\n    }\r\n    .sz-kscalc__list li:last-child{border-bottom:none}\r\n    .sz-kscalc__muted{color:rgba(0,0,0,.56)}\r\n    .sz-kscalc__note{\r\n      font-size:12px;\r\n      font-weight:800;\r\n      color:rgba(0,0,0,.56);\r\n      margin-left:8px;\r\n      white-space:nowrap;\r\n    }\r\n    .sz-kscalc__sum{\r\n      display:flex;justify-content:space-between;gap:10px;\r\n      padding:10px 12px;border-top:1px solid rgba(0,0,0,.08);\r\n      font-weight:900;color:#111;background:rgba(0,0,0,.012)\r\n    }\r\n\r\n    .sz-kscalc__badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}\r\n    .sz-kscalc__badge{\r\n      font-size:12.5px;line-height:1.2;\r\n      padding:8px 10px;border-radius:999px;\r\n      border:1px solid rgba(0,0,0,.12);\r\n      background:rgba(255,255,255,.92);\r\n      color:rgba(0,0,0,.72);\r\n      backdrop-filter: blur(4px);\r\n    }\r\n\r\n    \/* ===== Klikalne linie elektrycznych + detale ===== *\/\r\n    .sz-kscalc__clickable{cursor:pointer}\r\n    .sz-kscalc__clickable:hover{background:rgba(0,0,0,.015)}\r\n    .sz-kscalc__pick{background:rgba(255,244,205,.50)}\r\n    .sz-kscalc__pick span{font-weight:900;color:#111}\r\n\r\n    .sz-kscalc__detail{\r\n      display:none;\r\n      margin:10px 12px 12px;\r\n      padding:10px 12px;\r\n      border-radius:14px;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      background:rgba(255,255,255,.92);\r\n      box-shadow:0 10px 26px rgba(0,0,0,.06);\r\n      color:rgba(0,0,0,.78);\r\n      font-size:13px;\r\n      line-height:1.55;\r\n    }\r\n    .sz-kscalc__detail.is-open{display:block}\r\n    .sz-kscalc__detail strong{color:#111}\r\n\r\n    .sz-kscalc__detailhead{\r\n      display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;\r\n      padding-bottom:8px;margin-bottom:10px;\r\n      border-bottom:1px dashed rgba(0,0,0,.12);\r\n    }\r\n    .sz-kscalc__detailmeta{\r\n      display:flex;gap:8px;flex-wrap:wrap;\r\n      font-size:12.5px;color:rgba(0,0,0,.68);\r\n    }\r\n    .sz-kscalc__pill{\r\n      display:inline-block;\r\n      padding:6px 10px;\r\n      border-radius:999px;\r\n      border:1px solid rgba(0,0,0,.12);\r\n      background:rgba(0,0,0,.02);\r\n      font-weight:800;\r\n      white-space:nowrap;\r\n    }\r\n\r\n    .sz-kscalc__dlist{\r\n      margin:0;padding:0;list-style:none;\r\n      max-height:260px; overflow:auto;\r\n      border:1px solid rgba(0,0,0,.08);\r\n      border-radius:12px;\r\n      background:#fff;\r\n    }\r\n    .sz-kscalc__dlist li{\r\n      display:flex;justify-content:space-between;gap:10px;\r\n      padding:10px 12px;\r\n      border-bottom:1px solid rgba(0,0,0,.06);\r\n      font-size:13px;\r\n    }\r\n    .sz-kscalc__dlist li:last-child{border-bottom:none}\r\n    .sz-kscalc__dleft{color:rgba(0,0,0,.78)}\r\n    .sz-kscalc__dright{font-weight:900;color:#111;white-space:nowrap}\r\n    .sz-kscalc__dright.is-oob{color:rgba(176,0,32,.9);font-weight:900}\r\n\r\n    @media (max-width: 820px){\r\n      .sz-kscalc__grid{grid-template-columns:1fr}\r\n    }\r\n    @media (max-width: 430px){\r\n      .sz-kscalc__wrap{padding:0 12px}\r\n      .sz-kscalc__ta{min-height:110px}\r\n      .sz-kscalc__title{font-size:20px}\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"sz-kscalc__wrap\">\r\n    <h2 class=\"sz-kscalc__title\">Kalkulator cen aluminiowych szyn sufitowych<\/h2>\r\n    <p class=\"sz-kscalc__lead\">\r\n      Wpisz lub wklej d\u0142ugo\u015bci jakie potrzebujesz, w cm (po przecinku lub w nowych liniach).<br>\r\n      Dla warto\u015bci <strong>&gt; 600 cm<\/strong> (tylko KS) kalkulator dzieli d\u0142ugo\u015b\u0107 na <strong>2 r\u00f3wne odcinki<\/strong> (np. 650 \u2192 325 + 325).\r\n      <br><strong>Dla por\u00f3wnania<\/strong> poka\u017ce te\u017c ceny karniszy elektrycznych. Kliknij typ karnisza elektrycznego, aby zobaczy\u0107 szczeg\u00f3\u0142y (cena dla ka\u017cdego rozmiaru).\r\n    <\/p>\r\n\r\n    <div class=\"sz-kscalc__panel\">\r\n      <div class=\"sz-kscalc__top\">\r\n        <label class=\"sz-kscalc__label\" for=\"szKsInput\">Wymiary (cm)<\/label>\r\n        <p class=\"sz-kscalc__hint\">Przyk\u0142ad: <strong>120, 147.5, 650, 980<\/strong> albo ka\u017cda warto\u015b\u0107 w nowej linii. Akceptuje te\u017c zapis \u201e250,5\u201d.<\/p>\r\n        <textarea id=\"szKsInput\" class=\"sz-kscalc__ta\" placeholder=\"np. 120, 147.5, 650&#10;albo: 120&#10;147,5&#10;650\"><\/textarea>\r\n      <\/div>\r\n\r\n      <div class=\"sz-kscalc__actions\">\r\n        <button class=\"sz-kscalc__btn\" type=\"button\" id=\"szKsCalcBtn\">Policz cen\u0119<\/button>\r\n        <button class=\"sz-kscalc__btn sz-kscalc__btn--ghost\" type=\"button\" id=\"szKsClearBtn\">Zacznij od nowa<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"sz-kscalc__out\" id=\"szKsOut\">\r\n        <div class=\"sz-kscalc__badges\" id=\"szKsBadges\" style=\"display:none\"><\/div>\r\n\r\n        <div class=\"sz-kscalc__grid\">\r\n          <div class=\"sz-kscalc__card\">\r\n            <h3>Podsumowanie \u2014 Karnisz KS<\/h3>\r\n            <ul class=\"sz-kscalc__list\" id=\"szKsList\">\r\n              <li class=\"sz-kscalc__muted\">Wpisz wymiary i kliknij \u201ePolicz\u201d.<\/li>\r\n            <\/ul>\r\n            <div class=\"sz-kscalc__sum\" id=\"szKsSum\">\r\n              <span>Razem KS<\/span><span>\u2014<\/span>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"sz-kscalc__card\">\r\n            <h3>Podsumowanie \u2014 karnisze elektryczne<br>(kliknij pozycj\u0119 i zobacz ceny dla rozmiar\u00f3w)<\/h3>\r\n            <ul class=\"sz-kscalc__list\" id=\"szElecList\">\r\n              <li class=\"sz-kscalc__muted\">Pojawi si\u0119 po wyliczeniu KS.<\/li>\r\n            <\/ul>\r\n\r\n            <!-- Detale po klikni\u0119ciu -->\r\n            <div class=\"sz-kscalc__detail\" id=\"szElecDetail\" aria-live=\"polite\"><\/div>\r\n\r\n            <div class=\"sz-kscalc__sum\" id=\"szElecSum\">\r\n              <span>Razem elektryczne<\/span><span>\u2014<\/span>\r\n            <\/div>\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      \/* =========================\r\n         PROGI\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      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 prettyCm(n){\r\n        var x = Math.round(n * 10) \/ 10;\r\n        return (String(x).replace('.', ',') + ' cm');\r\n      }\r\n\r\n      \/* =========================\r\n         CENNIK KS\r\n      ========================= *\/\r\n      var KS = {\r\n        100:{base:75, bend1:189, bend2:289, wave:23},\r\n        150:{base:79, bend1:199, bend2:299, wave:28},\r\n        200:{base:101,bend1:221, bend2:321, wave:32},\r\n        250:{base:123,bend1:243, bend2:343, wave:37},\r\n        300:{base:146,bend1:266, bend2:366, wave:42},\r\n        350:{base:168,bend1:288, bend2:388, wave:47},\r\n        400:{base:190,bend1:310, bend2:410, wave:52},\r\n        450:{base:212,bend1:332, bend2:432, wave:57},\r\n        500:{base:234,bend1:354, bend2:454, wave:62},\r\n        550:{base:306,bend1:426, bend2:526, wave:67},\r\n        600:{base:328,bend1:448, bend2:548, wave:72}\r\n      };\r\n\r\n      \/* =========================\r\n         CENNIK ELEKTRYCZNYCH\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      \/* =========================\r\n         UI\r\n      ========================= *\/\r\n      var input   = document.getElementById('szKsInput');\r\n      var btnCalc = document.getElementById('szKsCalcBtn');\r\n      var btnClear= document.getElementById('szKsClearBtn');\r\n\r\n      var ksList  = document.getElementById('szKsList');\r\n      var ksSum   = document.getElementById('szKsSum');\r\n      var elecList= document.getElementById('szElecList');\r\n      var elecSum = document.getElementById('szElecSum');\r\n      var elecDetail = document.getElementById('szElecDetail');\r\n      var badges  = document.getElementById('szKsBadges');\r\n\r\n      \/\/ przechowywanie szczeg\u00f3\u0142\u00f3w po kalkulacji\r\n      var LAST_ELEC_DETAILS = null;\r\n      var LAST_PICK = null;\r\n\r\n      function money(n){\r\n        n = Math.round(n);\r\n        return String(n).replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ' ') + ' z\u0142';\r\n      }\r\n\r\n      function parseNumbers(str){\r\n        var matches = (str.match(\/(\\d+(?:[.,]\\d+)?)\/g) || []);\r\n        return matches.map(function(m){ return parseFloat(m.replace(',', '.')); })\r\n                      .filter(function(n){ return isFinite(n) && n > 0; });\r\n      }\r\n\r\n      function clearUI(){\r\n        ksList.innerHTML   = '<li class=\"sz-kscalc__muted\">Wpisz wymiary i kliknij \u201ePolicz\u201d.<\/li>';\r\n        elecList.innerHTML = '<li class=\"sz-kscalc__muted\">Pojawi si\u0119 po wyliczeniu KS.<\/li>';\r\n        ksSum.innerHTML    = '<span>Razem KS<\/span><span>\u2014<\/span>';\r\n        elecSum.innerHTML  = '<span>Razem elektryczne<\/span><span>\u2014<\/span>';\r\n        badges.style.display = 'none';\r\n        badges.innerHTML = '';\r\n        elecDetail.classList.remove('is-open');\r\n        elecDetail.innerHTML = '';\r\n        LAST_ELEC_DETAILS = null;\r\n        LAST_PICK = null;\r\n      }\r\n\r\n      function liRowHtml(left, rightHtml, typeKey){\r\n        var data = typeKey ? (' data-elec-type=\"' + typeKey + '\"') : '';\r\n        var cls  = typeKey ? ' class=\"sz-kscalc__clickable\"' : '';\r\n        return '<li'+cls+data+'><span>' + left + '<\/span><span>' + rightHtml + '<\/span><\/li>';\r\n      }\r\n\r\n      function renderBadges(meta){\r\n        var html = '';\r\n        html += '<span class=\"sz-kscalc__badge\"><strong>Ilo\u015b\u0107 wpis\u00f3w:<\/strong> ' + meta.inputs + '<\/span>';\r\n        html += '<span class=\"sz-kscalc__badge\"><strong>Odcinki KS do wyceny:<\/strong> ' + meta.ksSegments + '<\/span>';\r\n        if (meta.ksSplits){\r\n          html += '<span class=\"sz-kscalc__badge\"><strong>Podzia\u0142y KS (&gt;600):<\/strong> ' + meta.ksSplits + '<\/span>';\r\n        }\r\n        badges.innerHTML = html;\r\n        badges.style.display = 'flex';\r\n      }\r\n\r\n      \/* =========================\r\n         KS: podzia\u0142 >600 na r\u00f3wne odcinki a\u017c do <=600\r\n      ========================= *\/\r\n      function splitToMax(n, max, counter){\r\n        if (n <= max) return [n];\r\n        counter.count += 1;\r\n        var half = n \/ 2;\r\n        var a = splitToMax(half, max, counter);\r\n        var b = splitToMax(half, max, counter);\r\n        return a.concat(b);\r\n      }\r\n\r\n      \/* ===== DETAL: poka\u017c list\u0119 cen dla rozmiar\u00f3w (dla wybranego typu) ===== *\/\r\n      function showElecDetails(typeKey){\r\n        if (!LAST_ELEC_DETAILS) return;\r\n\r\n        \/\/ toggle\r\n        if (LAST_PICK === typeKey && elecDetail.classList.contains('is-open')){\r\n          elecDetail.classList.remove('is-open');\r\n          elecDetail.innerHTML = '';\r\n          LAST_PICK = null;\r\n          elecList.querySelectorAll('li[data-elec-type]').forEach(function(li){ li.classList.remove('sz-kscalc__pick'); });\r\n          return;\r\n        }\r\n        LAST_PICK = typeKey;\r\n\r\n        elecList.querySelectorAll('li[data-elec-type]').forEach(function(li){\r\n          li.classList.toggle('sz-kscalc__pick', li.getAttribute('data-elec-type') === typeKey);\r\n        });\r\n\r\n        var d = LAST_ELEC_DETAILS[typeKey];\r\n        if (!d){ elecDetail.classList.remove('is-open'); elecDetail.innerHTML=''; return; }\r\n\r\n        var html = '';\r\n        html += '<div class=\"sz-kscalc__detailhead\">';\r\n        html +=   '<div><strong>' + d.label + '<\/strong> <span class=\"sz-kscalc__note\">(' + d.range + ')<\/span><\/div>';\r\n        html +=   '<div class=\"sz-kscalc__detailmeta\">';\r\n        html +=     '<span class=\"sz-kscalc__pill\">Policzone: ' + d.inCount + ' szt.<\/span>';\r\n        html +=     '<span class=\"sz-kscalc__pill\">Poza zakresem: ' + d.outCount + ' szt.<\/span>';\r\n        html +=   '<\/div>';\r\n        html += '<\/div>';\r\n\r\n        html += '<div style=\"margin:0 0 10px;color:rgba(0,0,0,.72);font-size:12.5px;\">Lista cen dla wpisanych rozmiar\u00f3w (wg progu):<\/div>';\r\n\r\n        html += '<ul class=\"sz-kscalc__dlist\">';\r\n        d.items.forEach(function(it){\r\n          var left = prettyCm(it.input) + ' \u2192 pr\u00f3g ' + it.bracket + ' cm';\r\n          var right = it.inRange ? money(it.price) : 'poza zakresem';\r\n          html += '<li><span class=\"sz-kscalc__dleft\">' + left + '<\/span><span class=\"sz-kscalc__dright ' + (it.inRange ? '' : 'is-oob') + '\">' + right + '<\/span><\/li>';\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 calc(){\r\n        var nums = parseNumbers(input.value);\r\n        if(!nums.length){\r\n          clearUI();\r\n          ksList.innerHTML = '<li class=\"sz-kscalc__muted\">Brak poprawnych warto\u015bci. Wpisz np. 120, 147,5, 650.<\/li>';\r\n          return;\r\n        }\r\n\r\n        \/* ===== KS: segmenty (z podzia\u0142em >600) ===== *\/\r\n        var splitCounter = {count:0};\r\n        var ksSegments = [];\r\n        nums.forEach(function(n){\r\n          var parts = splitToMax(n, 600, splitCounter);\r\n          ksSegments = ksSegments.concat(parts);\r\n        });\r\n\r\n        \/* Zlicz progi KS *\/\r\n        var ksCounts = {};\r\n        BRACKETS_KS.forEach(function(b){ ksCounts[b]=0; });\r\n        ksSegments.forEach(function(n){\r\n          var use = Math.max(n, 100); \/\/ 80\u2013100 jak 100\r\n          var b = ceilToBracket(use, BRACKETS_KS);\r\n          if (b) ksCounts[b] += 1;\r\n        });\r\n\r\n        renderBadges({inputs: nums.length, ksSegments: ksSegments.length, ksSplits: splitCounter.count});\r\n\r\n        \/* ===== KS suma (cena bazowa) ===== *\/\r\n        var ksTotal = 0;\r\n        var ksRows = '';\r\n        BRACKETS_KS.forEach(function(b){\r\n          var c = ksCounts[b];\r\n          if(!c) return;\r\n          var sum = c * KS[b].base;\r\n          ksTotal += sum;\r\n          ksRows += liRowHtml('do ' + b + ' cm \u2014 ' + c + ' szt.', '<strong>' + money(sum) + '<\/strong>');\r\n        });\r\n        ksList.innerHTML = ksRows || '<li class=\"sz-kscalc__muted\">Brak odcink\u00f3w KS do wyceny.<\/li>';\r\n        ksSum.innerHTML  = '<span>Razem KS (cena bazowa)<\/span><span>' + money(ksTotal) + '<\/span>';\r\n\r\n        \/* ===== ELEKTRYCZNE: sumy + detale per wpisany rozmiar ===== *\/\r\n        var totals = { am50:0, am50bat:0, am75wifi:0, am75zig:0 };\r\n        var inCount = { am50:0, am50bat:0, am75wifi:0, am75zig:0 };\r\n        var outCount= { am50:0, am50bat:0, am75wifi:0, am75zig:0 };\r\n\r\n        \/\/ items: [{input, bracket, price, inRange}]\r\n        var itemsByType = { am50:[], am50bat:[], am75wifi:[], am75zig:[] };\r\n\r\n        function pushItem(type, inputVal, bracket, price, inRange){\r\n          itemsByType[type].push({ input: inputVal, bracket: bracket, price: price, inRange: inRange });\r\n        }\r\n\r\n        function calcElectricFor(type, n){\r\n          var use = Math.max(n, 100); \/\/ 80\u2013100 jak 100\r\n\r\n          \/\/ AM50 \/ AM50 bat: 100\u2013600\r\n          if (type === 'am50' || type === 'am50bat'){\r\n            if (use > 600){\r\n              outCount[type] += 1;\r\n              pushItem(type, n, '\u2014', 0, false);\r\n              return;\r\n            }\r\n            var br = ceilToBracket(use, BRACKETS_AM50);\r\n            var ok = !!(br && ELEC[br] && Number.isFinite(ELEC[br][type]));\r\n            if (!ok){\r\n              outCount[type] += 1;\r\n              pushItem(type, n, br || '\u2014', 0, false);\r\n              return;\r\n            }\r\n            var price = ELEC[br][type];\r\n            totals[type] += price;\r\n            inCount[type] += 1;\r\n            pushItem(type, n, br, price, true);\r\n            return;\r\n          }\r\n\r\n          \/\/ AM75: 100\u20131200\r\n          if (use > 1200){\r\n            outCount[type] += 1;\r\n            pushItem(type, n, '\u2014', 0, false);\r\n            return;\r\n          }\r\n          var br75 = ceilToBracket(use, BRACKETS_AM75);\r\n          var ok75 = !!(br75 && ELEC[br75] && Number.isFinite(ELEC[br75][type]));\r\n          if (!ok75){\r\n            outCount[type] += 1;\r\n            pushItem(type, n, br75 || '\u2014', 0, false);\r\n            return;\r\n          }\r\n          var price75 = ELEC[br75][type];\r\n          totals[type] += price75;\r\n          inCount[type] += 1;\r\n          pushItem(type, n, br75, price75, true);\r\n        }\r\n\r\n        nums.forEach(function(n){\r\n          calcElectricFor('am50', n);\r\n          calcElectricFor('am50bat', n);\r\n          calcElectricFor('am75wifi', n);\r\n          calcElectricFor('am75zig', n);\r\n        });\r\n\r\n        \/\/ zapami\u0119taj szczeg\u00f3\u0142y do klikni\u0119\u0107\r\n        LAST_ELEC_DETAILS = {\r\n          am50:     { label:'AM50',            range:'100\u2013600 cm',  inCount: inCount.am50,     outCount: outCount.am50,     items: itemsByType.am50 },\r\n          am50bat:  { label:'AM50 bateryjny',  range:'100\u2013600 cm',  inCount: inCount.am50bat,  outCount: outCount.am50bat,  items: itemsByType.am50bat },\r\n          am75wifi: { label:'AM75 Wi-Fi \/ 5W', range:'100\u20131200 cm', inCount: inCount.am75wifi, outCount: outCount.am75wifi, items: itemsByType.am75wifi },\r\n          am75zig:  { label:'AM75 Zigbee',     range:'100\u20131200 cm', inCount: inCount.am75zig,  outCount: outCount.am75zig,  items: itemsByType.am75zig }\r\n        };\r\n        LAST_PICK = null;\r\n        elecDetail.classList.remove('is-open');\r\n        elecDetail.innerHTML = '';\r\n        elecList.querySelectorAll('li[data-elec-type]').forEach(function(li){ li.classList.remove('sz-kscalc__pick'); });\r\n\r\n        function line(label, key){\r\n          var note = outCount[key] ? ('<span class=\"sz-kscalc__note\">(poza zakresem: ' + outCount[key] + ')<\/span>') : '';\r\n          var val  = inCount[key] ? ('<strong>' + money(totals[key]) + '<\/strong>' + note) : ('<strong>\u2014<\/strong>' + note);\r\n          return liRowHtml(label, val, key);\r\n        }\r\n\r\n        elecList.innerHTML =\r\n          line('AM50 \u2014 suma', 'am50') +\r\n          line('AM50 bateryjny \u2014 suma', 'am50bat') +\r\n          line('AM75 Wi-Fi \/ 5W \u2014 suma', 'am75wifi') +\r\n          line('AM75 Zigbee \u2014 suma', 'am75zig');\r\n\r\n        \/\/ \u201eRazem elektryczne\u201d: min\u2013max tylko z typ\u00f3w, kt\u00f3re maj\u0105 cokolwiek policzone w zakresie\r\n        var vals = [];\r\n        ['am50','am50bat','am75wifi','am75zig'].forEach(function(k){\r\n          if (inCount[k] > 0) vals.push(totals[k]);\r\n        });\r\n        var anyOut = outCount.am50 + outCount.am50bat + outCount.am75wifi + outCount.am75zig;\r\n\r\n        if (!vals.length && anyOut > 0){\r\n          elecSum.innerHTML = '<span>Razem elektryczne<\/span><span>\u2014 <span class=\"sz-kscalc__note\">(wszystko poza zakresem)<\/span><\/span>';\r\n        } else if (vals.length){\r\n          var minTotal = Math.min.apply(null, vals);\r\n          var maxTotal = Math.max.apply(null, vals);\r\n          elecSum.innerHTML =\r\n            '<span>Razem elektryczne (min\u2013max z pozycji w zakresie)<\/span>' +\r\n            '<span>' + money(minTotal) + ' \u2013 ' + money(maxTotal) +\r\n            (anyOut ? ' <span class=\"sz-kscalc__note\">(cz\u0119\u015b\u0107 wymiar\u00f3w poza zakresem)<\/span>' : '') +\r\n            '<\/span>';\r\n        } else {\r\n          elecSum.innerHTML = '<span>Razem elektryczne<\/span><span>\u2014<\/span>';\r\n        }\r\n      }\r\n\r\n      \/\/ klik w linijk\u0119 elektrycznych = poka\u017c detale + lista cen\r\n      elecList.addEventListener('click', function(e){\r\n        var li = e.target && e.target.closest ? e.target.closest('li[data-elec-type]') : null;\r\n        if (!li) return;\r\n        var key = li.getAttribute('data-elec-type');\r\n        if (!key) return;\r\n        showElecDetails(key);\r\n      });\r\n\r\n      btnCalc.addEventListener('click', calc);\r\n      btnClear.addEventListener('click', function(){ input.value=''; clearUI(); });\r\n\r\n      clearUI();\r\n    })();\r\n  <\/script>\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n<\/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\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"mailto:kontakt@karniszewarszawa.pl\">Wy\u015blij zapytanie: kontakt@karniszewarszawa.pl<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><!-- 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\r\n    <div class=\"cc-table-note\">\r\n      Na telefonie pokazuj\u0119 cennik jako kafelki (jeden pr\u00f3g = jeden kafelek) \u2014 szybciej si\u0119 to przegl\u0105da.\r\n    <\/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<\/p>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-f12bd7f8 wp-block-columns-is-layout-flex\" 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)\">\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 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<\/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-7b09f27626329dcfd8967343e528079b\" style=\"color:#222222\">Szyny aluminiowe gi\u0119te<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" 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\n\n\n<p class=\"wp-block-paragraph\" 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<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-f12bd7f8 wp-block-columns-is-layout-flex\" 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)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Aluminiowe szyny sufitowe z zakr\u0119tami bez zacinania. Karnisze aluminiowe do zas\u0142on w Warszawie.\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/3aw4Z1-AaKs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/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-5d4306adda6c48af4e0c7358c8681567\" style=\"color:#222222\">Jak robimy karnisze z zakr\u0119tem bez zacinania?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.2\">Zobacz film jak zmieniamy plastikowe karnisze z \u0142\u0105cznikiem kt\u00f3re si\u0119 zacinaj\u0105, na aluminiowe szyny sufitowe gi\u0119te. Tak wykonane karnisze to komfort u\u017cytkowania bez zerwanych zas\u0142on i firan.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"tel:+48667067777\" title=\"Karnisze elektryczne Warszawa\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Zam\u00f3w na wymiar +48 667 067 777<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-ad4afbe1 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\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 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<\/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\">Karnisze do zas\u0142on wave oraz na flexach.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" 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\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\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<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-ad4afbe1 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\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 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<\/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-a1ad8b9e40f1c4bfe1149a4f630b66ec\" style=\"color:#222222\">Karnisze elektryczne i akumulatorowe.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" 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\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\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\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/okarnisze.pl\" title=\"Karnisze elektryczne\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Sklep online<\/a><\/div>\n\n\n\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<\/div>\n<\/div>\n<\/div>\n<section id=\"porownanie\">\n<\/section>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-610fb7d4 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Karnisze elektryczne na wymiar z zakr\u0119tami bez \u0142\u0105cze\u0144 i zacinania. Karnisze elektryczne A-OK.\" width=\"720\" height=\"405\" src=\"https:\/\/www.youtube.com\/embed\/MUlbOAXNK2g?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n<p><\/p>\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\">Jaki wybra\u0107 karnisz elektryczny?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.5\">Staramy si\u0119 nie tylko pisa\u0107, ale tak\u017ce pokazywa\u0107 jakie s\u0105 r\u00f3\u017cnice i co masz do wyboru. Na filmie pokazujemy karnisz elektryczny do samodzielnego z\u0142o\u017cenia i dopasowania, oraz karnisz elektryczny wykonany na idealny wymiar z monta\u017cem. R\u00f3\u017cnica polega na tym \u017ce p\u0142acisz raz i dzia\u0142a. Na przedstawionym filmie klient musia\u0142 niestety zap\u0142aci\u0107 dwa razy. Przynajmniej za drugim razem, klient zam\u00f3wi\u0142 <strong>karnisz elektryczny AM75 WiFi Tuya<\/strong> z kompleksow\u0105 us\u0142ug\u0105 i <strong>otrzyma\u0142 6 letni\u0105 gwarancj\u0119 <\/strong>od nas.<\/br>My <strong>jeste\u015bmy pewni <\/strong>\u017ce ju\u017c ma spok\u00f3j i wygodne zas\u0142ony sterowane pilotem lub aplikacj\u0105.<\/p>\n<\/div>\n<\/div>\n\n\n<section id=\"cennik-karniszy-elektrycznych\">\n<\/section>\n\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\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\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-ad4afbe1 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\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 loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"617\" src=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/pomiar-karniszy.webp\" alt=\"\" class=\"wp-image-412\" srcset=\"https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/pomiar-karniszy.webp 650w, https:\/\/karniszewarszawa.pl\/wp-content\/uploads\/2026\/02\/pomiar-karniszy-300x285.webp 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/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\" style=\"font-size:23px\">Zam\u00f3w profesjonalny pomiar karniszy i doradztwo u siebie.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.2\">Oferujemy dojazd z pr\u00f3bnikami, pomiar i doradztwo. Koszt? Tak us\u0142uga jest p\u0142atna 250 z\u0142 poniewa\u017c \u015bwiadczymy profesjonalne us\u0142ugi poparte do\u015bwiadczeniem. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.2\">Inwestycja w t\u0105 us\u0142ug\u0119 bardzo cz\u0119sto pozwala na wcze\u015bniejsze zaplanowanie budowy sufit\u00f3w, idealne dopasowanie produkt\u00f3w, oraz unikniesz dodatkowych koszt\u00f3w zwi\u0105zanych z przer\u00f3bkami.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"letter-spacing:1px;line-height:2.2\">Zadzwo\u0144 lub wy\u015blij mail i zapytaj o szczeg\u00f3\u0142y.<\/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\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"mailto:kontakt@karniszewarszawa.pl\">Wy\u015blij zapytanie: kontakt@karniszewarszawa.pl<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-a9f0fd84 wp-block-columns-is-layout-flex\" 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)\">\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\/05\/jak-wycenic-zaslony.webp\" alt=\"Zas\u0142ony na wymiar Warszawa\" class=\"wp-image-306\"\/><\/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\">Zas\u0142ony na wymiar w Warszawie?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" 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\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=\"https:\/\/szyciezaslon.pl\" title=\"Zas\u0142ony Warszawa\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Przejd\u017a do dedykowanej strony o zas\u0142onach<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-ad4afbe1 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\"><p><!-- HFCM by 99 Robots - Snippet # 9: opinie -->\n<style>\r\n  \/* ===== AZHOME OPINIE GOOGLE \u2014 animowany licznik + litery GOOGLE jedna po drugiej ===== *\/\r\n\r\n  @keyframes azReviewBgFloat{\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 azReviewFloat{\r\n    0%,100%{ transform:translateY(0); }\r\n    50%{ transform:translateY(-3px); }\r\n  }\r\n\r\n  @keyframes azReviewShine{\r\n    0%{ left:-45%; opacity:0; }\r\n    10%{ opacity:1; }\r\n    28%{ left:115%; opacity:0; }\r\n    100%{ left:115%; opacity:0; }\r\n  }\r\n\r\n  @keyframes azReviewNumberBoom{\r\n    0%{ transform:scale(1); }\r\n    35%{ transform:scale(1.18); }\r\n    65%{ transform:scale(.96); }\r\n    100%{ transform:scale(1); }\r\n  }\r\n\r\n  .az-review-wrap{\r\n    width:100%;\r\n    margin:24px auto;\r\n    padding:0;\r\n    text-align:center;\r\n    box-sizing:border-box;\r\n    isolation:isolate;\r\n  }\r\n\r\n  .az-review-card{\r\n    max-width:620px;\r\n    margin:0 auto;\r\n    padding:14px;\r\n    border:1px solid rgba(184,137,45,.52);\r\n    border-radius:22px;\r\n    text-align:center;\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(66, 133, 244, .52) 0%,\r\n        rgba(66, 133, 244, .28) 34%,\r\n        rgba(255,255,255, 0) 72%),\r\n      radial-gradient(900px 360px at 86% 22%,\r\n        rgba(251, 188, 5, .50) 0%,\r\n        rgba(251, 188, 5, .26) 42%,\r\n        rgba(255,255,255, 0) 74%),\r\n      radial-gradient(980px 520px at 58% 92%,\r\n        rgba(234, 67, 53, .42) 0%,\r\n        rgba(52, 168, 83, .30) 38%,\r\n        rgba(255,255,255, 0) 74%),\r\n      linear-gradient(180deg,\r\n        rgba(255,255,255, .90) 0%,\r\n        rgba(255,255,255, .82) 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      azReviewBgFloat 3.6s ease-in-out infinite,\r\n      azReviewFloat 3.2s ease-in-out infinite;\r\n    box-shadow:\r\n      0 18px 46px rgba(0,0,0,.15),\r\n      0 0 26px rgba(66,133,244,.18),\r\n      0 0 24px rgba(251,188,5,.18),\r\n      0 0 22px rgba(234,67,53,.14),\r\n      inset 0 0 0 1px rgba(255,255,255,.72);\r\n  }\r\n\r\n  .az-review-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-review-inner{\r\n    position:relative;\r\n    z-index:1;\r\n    display:flex;\r\n    align-items:stretch;\r\n    justify-content:center;\r\n    gap:0;\r\n    background:rgba(255,255,255,.82);\r\n    border:1px solid rgba(0,0,0,.08);\r\n    border-radius:18px;\r\n    overflow:hidden;\r\n    box-shadow:0 12px 30px rgba(0,0,0,.10);\r\n    backdrop-filter:blur(6px);\r\n  }\r\n\r\n  .az-review-google{\r\n    width:155px;\r\n    min-height:168px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border-right:1px solid rgba(0,0,0,.10);\r\n    background:rgba(255,255,255,.62);\r\n    padding:12px 8px;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-review-g{\r\n    font-size:70px;\r\n    line-height:1;\r\n    font-weight:900;\r\n    font-family:Arial, sans-serif;\r\n    letter-spacing:-.04em;\r\n  }\r\n\r\n  .az-review-google-letter{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    width:1.05em;\r\n    height:1em;\r\n    line-height:1;\r\n    color:#4285f4;\r\n    transform-origin:center;\r\n    transition:\r\n      color .18s ease,\r\n      transform .18s ease,\r\n      opacity .18s ease;\r\n  }\r\n\r\n  .az-review-google-letter.az-letter-pop{\r\n    transform:scale(1.16);\r\n  }\r\n\r\n  .az-review-count{\r\n    margin-top:4px;\r\n    text-align:center;\r\n    font-family:Arial, sans-serif;\r\n    line-height:1;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n  }\r\n\r\n  .az-review-count-small{\r\n    display:block;\r\n    font-size:11px;\r\n    font-weight:700;\r\n    color:#222222;\r\n    letter-spacing:.02em;\r\n    margin-bottom:2px;\r\n    line-height:1.1;\r\n    order:1;\r\n  }\r\n\r\n  .az-review-count-number{\r\n    display:block;\r\n    font-size:44px;\r\n    font-weight:900;\r\n    color:#222222;\r\n    letter-spacing:-.06em;\r\n    line-height:.95;\r\n    order:2;\r\n    will-change:transform;\r\n  }\r\n\r\n  .az-review-count-number.az-review-count-number--boom{\r\n    animation:azReviewNumberBoom .48s cubic-bezier(.2,.9,.2,1.25);\r\n  }\r\n\r\n  .az-review-count-label{\r\n    display:block;\r\n    font-size:15px;\r\n    font-weight:900;\r\n    color:#222222;\r\n    letter-spacing:.02em;\r\n    margin-top:1px;\r\n    line-height:1;\r\n    order:3;\r\n  }\r\n\r\n  .az-review-content{\r\n    flex:1;\r\n    padding:18px 22px;\r\n    text-align:left;\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  .az-review-stars{\r\n    display:flex;\r\n    align-items:center;\r\n    gap:4px;\r\n    margin:0 0 4px;\r\n    font-size:34px;\r\n    line-height:1;\r\n    color:#fbbc04;\r\n    letter-spacing:1px;\r\n    text-shadow:\r\n      0 1px 0 rgba(0,0,0,.12),\r\n      0 0 10px rgba(251,188,4,.25);\r\n  }\r\n\r\n  .az-review-score{\r\n    display:inline-block;\r\n    margin-left:10px;\r\n    color:#111;\r\n    font-size:26px;\r\n    font-weight:900;\r\n    letter-spacing:0;\r\n    vertical-align:middle;\r\n  }\r\n\r\n  .az-review-title{\r\n    margin:4px 0 4px;\r\n    font-size:24px;\r\n    line-height:1.18;\r\n    font-weight:900;\r\n    color:#111;\r\n    letter-spacing:-.02em;\r\n  }\r\n\r\n  .az-review-sub{\r\n    margin:0 0 14px;\r\n    color:rgba(0,0,0,.76);\r\n    font-size:16px;\r\n    line-height:1.35;\r\n  }\r\n\r\n  .az-review-btn{\r\n    position:relative;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:44px;\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:900;\r\n    font-size:14px;\r\n    line-height:1.15;\r\n    box-shadow:\r\n      0 12px 24px rgba(0,0,0,.20),\r\n      0 0 14px rgba(66,133,244,.16);\r\n    overflow:hidden;\r\n    isolation:isolate;\r\n    transition:transform .16s ease, box-shadow .16s ease;\r\n  }\r\n\r\n  .az-review-btn::after{\r\n    content:\"\";\r\n    position:absolute;\r\n    top:-30%;\r\n    left:-45%;\r\n    width:38%;\r\n    height:160%;\r\n    transform:skewX(-18deg);\r\n    pointer-events:none;\r\n    background:linear-gradient(\r\n      90deg,\r\n      rgba(255,255,255,0) 0%,\r\n      rgba(255,255,255,.95) 45%,\r\n      rgba(255,255,255,.10) 65%,\r\n      rgba(255,255,255,0) 100%\r\n    );\r\n    filter:blur(.35px);\r\n    opacity:.9;\r\n    animation:azReviewShine 2.1s ease-in-out infinite;\r\n  }\r\n\r\n  .az-review-btn:hover{\r\n    transform:translateY(-1px);\r\n    box-shadow:\r\n      0 15px 30px rgba(0,0,0,.24),\r\n      0 0 18px rgba(251,188,5,.20);\r\n  }\r\n\r\n  .az-review-btn:focus-visible{\r\n    outline:3px solid rgba(66,133,244,.50);\r\n    outline-offset:3px;\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce){\r\n    .az-review-card,\r\n    .az-review-btn::after,\r\n    .az-review-count-number.az-review-count-number--boom{\r\n      animation:none !important;\r\n    }\r\n  }\r\n\r\n  @media (max-width:640px){\r\n    .az-review-card{\r\n      max-width:94%;\r\n      padding:10px;\r\n      border-radius:18px;\r\n    }\r\n\r\n    .az-review-inner{\r\n      flex-direction:column;\r\n      border-radius:16px;\r\n    }\r\n\r\n    .az-review-google{\r\n      width:100%;\r\n      min-height:108px;\r\n      border-right:0;\r\n      border-bottom:1px solid rgba(0,0,0,.10);\r\n      padding:12px 14px;\r\n      box-sizing:border-box;\r\n      display:grid;\r\n      grid-template-columns:1fr auto auto 1fr;\r\n      align-items:center;\r\n      justify-content:center;\r\n      column-gap:10px;\r\n      text-align:center;\r\n    }\r\n\r\n    .az-review-g{\r\n      grid-column:2;\r\n      grid-row:1;\r\n      font-size:58px;\r\n      line-height:1;\r\n      justify-self:end;\r\n      align-self:center;\r\n      margin:0;\r\n    }\r\n\r\n    .az-review-count{\r\n      grid-column:3;\r\n      grid-row:1;\r\n      margin:0;\r\n      display:grid;\r\n      grid-template-columns:auto auto;\r\n      grid-template-rows:auto auto;\r\n      column-gap:8px;\r\n      row-gap:0;\r\n      align-items:center;\r\n      justify-content:center;\r\n      text-align:left;\r\n      font-family:Arial, sans-serif;\r\n      line-height:1;\r\n      color:#222222;\r\n    }\r\n\r\n    .az-review-count-number{\r\n      grid-column:1;\r\n      grid-row:1 \/ span 2;\r\n      display:block;\r\n      font-size:46px;\r\n      font-weight:900;\r\n      color:#222222;\r\n      letter-spacing:-.06em;\r\n      line-height:.92;\r\n      text-align:center;\r\n      align-self:center;\r\n      margin:0;\r\n    }\r\n\r\n    .az-review-count-small{\r\n      grid-column:2;\r\n      grid-row:1;\r\n      display:block;\r\n      font-size:11px;\r\n      font-weight:700;\r\n      color:#222222;\r\n      letter-spacing:.02em;\r\n      line-height:1.1;\r\n      margin:0 0 1px;\r\n      white-space:nowrap;\r\n      text-align:left;\r\n      align-self:end;\r\n    }\r\n\r\n    .az-review-count-label{\r\n      grid-column:2;\r\n      grid-row:2;\r\n      display:block;\r\n      font-size:15px;\r\n      font-weight:900;\r\n      color:#222222;\r\n      letter-spacing:.02em;\r\n      line-height:1;\r\n      margin:0;\r\n      white-space:nowrap;\r\n      text-align:left;\r\n      align-self:start;\r\n    }\r\n\r\n    .az-review-content{\r\n      width:100%;\r\n      padding:16px;\r\n      text-align:center;\r\n      box-sizing:border-box;\r\n    }\r\n\r\n    .az-review-stars{\r\n      justify-content:center;\r\n      font-size:28px;\r\n    }\r\n\r\n    .az-review-score{\r\n      font-size:22px;\r\n      margin-left:8px;\r\n    }\r\n\r\n    .az-review-title{\r\n      font-size:20px;\r\n    }\r\n\r\n    .az-review-sub{\r\n      font-size:15px;\r\n    }\r\n\r\n    .az-review-btn{\r\n      width:100%;\r\n      box-sizing:border-box;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"az-review-wrap\">\r\n  <div class=\"az-review-card\">\r\n    <div class=\"az-review-inner\">\r\n\r\n      <div class=\"az-review-google\" aria-label=\"Google, na podstawie 460 opinii\">\r\n        <div class=\"az-review-g\" aria-label=\"Google\">\r\n          <span class=\"az-review-google-letter\">G<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"az-review-count\">\r\n          <span class=\"az-review-count-number\" data-az-review-target=\"460\">0<\/span>\r\n          <span class=\"az-review-count-small\">na podstawie<\/span>\r\n          <span class=\"az-review-count-label\">opinii<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"az-review-content\">\r\n        <div class=\"az-review-stars\" aria-label=\"Ocena 5.0 na 5\">\r\n          \u2605\u2605\u2605\u2605\u2605 <span class=\"az-review-score\">5.0<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"az-review-title\">Najwy\u017cej oceniana us\u0142uga<\/div>\r\n\r\n        <p class=\"az-review-sub\"><\/p>\r\n\r\n        <a\r\n          class=\"az-review-btn\"\r\n          href=\"https:\/\/www.google.com\/maps?cid=10805085060045519056&amp;g_mp=CiVnb29nbGUubWFwcy5wbGFjZXMudjEuUGxhY2VzLkdldFBsYWNlEAMYASAF&amp;hl=pl&amp;source=embed\"\r\n          target=\"_blank\"\r\n          rel=\"noopener nofollow\"\r\n          aria-label=\"Kliknij i przeczytaj opinie o AZHOME w Google Maps\">\r\n          Kliknij i przeczytaj opinie o AZHOME\r\n        <\/a>\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 counters = document.querySelectorAll('.az-review-count-number[data-az-review-target]');\r\n  const googleLetters = document.querySelectorAll('.az-review-google-letter');\r\n\r\n  const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n  const googleSequence = [\r\n    { letter: 'G', color: '#4285F4' },\r\n    { letter: 'O', color: '#DB4437' },\r\n    { letter: 'O', color: '#F4B400' },\r\n    { letter: 'G', color: '#4285F4' },\r\n    { letter: 'L', color: '#0F9D58' },\r\n    { letter: 'E', color: '#DB4437' }\r\n  ];\r\n\r\n  let googleIndex = 0;\r\n\r\n  function startGoogleLetters(){\r\n    googleLetters.forEach((el) => {\r\n      function changeLetter(){\r\n        const item = googleSequence[googleIndex];\r\n\r\n        el.classList.remove('az-letter-pop');\r\n        el.textContent = item.letter;\r\n        el.style.color = item.color;\r\n\r\n        void el.offsetWidth;\r\n        el.classList.add('az-letter-pop');\r\n\r\n        googleIndex = (googleIndex + 1) % googleSequence.length;\r\n      }\r\n\r\n      changeLetter();\r\n      setInterval(changeLetter, 500);\r\n    });\r\n  }\r\n\r\n  if(prefersReducedMotion){\r\n    googleLetters.forEach((el) => {\r\n      el.textContent = 'G';\r\n      el.style.color = '#4285F4';\r\n    });\r\n\r\n    counters.forEach((counter) => {\r\n      const target = parseInt(counter.getAttribute('data-az-review-target'), 10) || 0;\r\n      counter.textContent = target;\r\n    });\r\n\r\n    return;\r\n  }\r\n\r\n  startGoogleLetters();\r\n\r\n  counters.forEach((counter) => {\r\n    const target = parseInt(counter.getAttribute('data-az-review-target'), 10) || 0;\r\n    const duration = 1900;\r\n    const pause = 5000;\r\n\r\n    function animate(){\r\n      const startTime = performance.now();\r\n\r\n      counter.classList.remove('az-review-count-number--boom');\r\n      counter.textContent = '0';\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 = Math.pow(progress, 1.85);\r\n        const current = Math.floor(eased * target);\r\n\r\n        counter.textContent = current;\r\n\r\n        if(progress < 1){\r\n          requestAnimationFrame(tick);\r\n        } else {\r\n          counter.textContent = target;\r\n\r\n          counter.classList.remove('az-review-count-number--boom');\r\n          void counter.offsetWidth;\r\n          counter.classList.add('az-review-count-number--boom');\r\n\r\n          setTimeout(animate, pause);\r\n        }\r\n      }\r\n\r\n      requestAnimationFrame(tick);\r\n    }\r\n\r\n    animate();\r\n  });\r\n})();\r\n<\/script>\n<!-- \/end HFCM by 99 Robots -->\n<br \/>\n<!-- HFCM by 99 Robots - Snippet # 12: radar -->\n<!-- BOX LOKALNY \u2014 OS\u0141ONY OKIENNE WARSZAWA \/ RADAR + OPIS POD SPODEM -->\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    :root{\r\n      --azWawGlowCycle:10s;\r\n    }\r\n\r\n    .az-waw-local-area-box{\r\n      width:100%;\r\n      max-width:980px;\r\n      margin:42px auto 34px;\r\n      padding:0 14px;\r\n      font-family:inherit;\r\n      overflow:hidden;\r\n      box-sizing:border-box;\r\n    }\r\n\r\n    .az-waw-local-area-box *{\r\n      box-sizing:border-box;\r\n    }\r\n\r\n    .az-waw-local-area-inner{\r\n      position:relative;\r\n      overflow:hidden;\r\n      isolation:isolate;\r\n      border-radius:18px;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      background:linear-gradient(180deg, rgba(255,255,255,1), rgba(0,0,0,.012));\r\n      color:#222222;\r\n      padding:18px;\r\n      box-shadow:0 10px 26px rgba(0,0,0,.05);\r\n    }\r\n\r\n    .az-waw-local-area-inner::before{\r\n      content:\"\";\r\n      position:absolute;\r\n      inset:-60px;\r\n      z-index:0;\r\n      pointer-events:none;\r\n      background:linear-gradient(\r\n        90deg,\r\n        rgba(66,133,244,.22) 0%,\r\n        rgba(52,168,83,.22) 25%,\r\n        rgba(251,188,5,.22) 50%,\r\n        rgba(234,67,53,.22) 75%,\r\n        rgba(66,133,244,.22) 100%\r\n      );\r\n      background-size:220% 100%;\r\n      filter:blur(30px) saturate(1.35);\r\n      opacity:.62;\r\n      animation:azWawGlowDrift var(--azWawGlowCycle) ease-in-out infinite;\r\n      transform:translate3d(-8%,0,0);\r\n    }\r\n\r\n    .az-waw-local-area-inner::after{\r\n      content:\"\";\r\n      position:absolute;\r\n      inset:-90px;\r\n      z-index:0;\r\n      pointer-events:none;\r\n      background:linear-gradient(\r\n        90deg,\r\n        rgba(66,133,244,.16) 0%,\r\n        rgba(52,168,83,.16) 25%,\r\n        rgba(251,188,5,.16) 50%,\r\n        rgba(234,67,53,.16) 75%,\r\n        rgba(66,133,244,.16) 100%\r\n      );\r\n      background-size:260% 100%;\r\n      filter:blur(58px) saturate(1.6);\r\n      opacity:.55;\r\n      animation:azWawGlowDrift2 calc(var(--azWawGlowCycle) * 1.35) ease-in-out infinite;\r\n      transform:translate3d(-10%,0,0);\r\n      mix-blend-mode:multiply;\r\n    }\r\n\r\n    @keyframes azWawGlowDrift{\r\n      0%{\r\n        background-position:0% 50%;\r\n        transform:translate3d(-8%,0,0);\r\n        opacity:.55;\r\n      }\r\n      50%{\r\n        background-position:100% 50%;\r\n        transform:translate3d(8%,0,0);\r\n        opacity:.72;\r\n      }\r\n      100%{\r\n        background-position:0% 50%;\r\n        transform:translate3d(-8%,0,0);\r\n        opacity:.55;\r\n      }\r\n    }\r\n\r\n    @keyframes azWawGlowDrift2{\r\n      0%{\r\n        background-position:0% 50%;\r\n        transform:translate3d(-10%,0,0);\r\n        opacity:.50;\r\n      }\r\n      50%{\r\n        background-position:100% 50%;\r\n        transform:translate3d(10%,0,0);\r\n        opacity:.64;\r\n      }\r\n      100%{\r\n        background-position:0% 50%;\r\n        transform:translate3d(-10%,0,0);\r\n        opacity:.50;\r\n      }\r\n    }\r\n\r\n    .az-waw-local-area-column{\r\n      position:relative;\r\n      z-index:2;\r\n      width:100%;\r\n      max-width:100%;\r\n      margin:0 auto;\r\n      padding:0;\r\n      display:flex;\r\n      flex-direction:column;\r\n      gap:16px;\r\n    }\r\n\r\n    .az-waw-local-map-box{\r\n      position:relative;\r\n      width:100%;\r\n      padding:0;\r\n      overflow:hidden;\r\n    }\r\n\r\n    .az-waw-radar-stage{\r\n      position:relative;\r\n      width:100%;\r\n      min-height:420px;\r\n      overflow:hidden;\r\n      border-radius:18px;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      background:\r\n        linear-gradient(rgba(0,0,0,.035) 1px, transparent 1px),\r\n        linear-gradient(90deg, rgba(0,0,0,.035) 1px, transparent 1px),\r\n        linear-gradient(180deg, rgba(255,255,255,.92), rgba(255,255,255,.76));\r\n      background-size:24px 24px, 24px 24px, 100% 100%;\r\n      box-shadow:\r\n        0 10px 26px rgba(0,0,0,.05),\r\n        inset 0 1px 0 rgba(255,255,255,.78);\r\n    }\r\n\r\n    .az-waw-radar-stage::before{\r\n      content:\"\";\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      width:250px;\r\n      height:250px;\r\n      transform:translate(-50%,-50%);\r\n      border-radius:999px;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      box-shadow:\r\n        0 0 0 54px rgba(66,133,244,.050),\r\n        0 0 0 108px rgba(52,168,83,.040),\r\n        0 0 0 162px rgba(251,188,5,.030);\r\n      pointer-events:none;\r\n      z-index:1;\r\n    }\r\n\r\n    .az-waw-radar-stage::after{\r\n      content:\"\";\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      width:430px;\r\n      height:430px;\r\n      transform-origin:center;\r\n      transform:translate(-50%,-50%) rotate(0deg);\r\n      border-radius:999px;\r\n      pointer-events:none;\r\n      background:\r\n        conic-gradient(\r\n          from 0deg,\r\n          rgba(66,133,244,0) 0deg,\r\n          rgba(66,133,244,0) 245deg,\r\n          rgba(66,133,244,.10) 286deg,\r\n          rgba(52,168,83,.22) 312deg,\r\n          rgba(251,188,5,.26) 330deg,\r\n          rgba(255,255,255,.55) 342deg,\r\n          rgba(234,67,53,.16) 352deg,\r\n          rgba(66,133,244,0) 360deg\r\n        );\r\n      animation:azWawRadarSweep 5.6s linear infinite;\r\n      mix-blend-mode:multiply;\r\n      opacity:.85;\r\n      z-index:2;\r\n    }\r\n\r\n    @keyframes azWawRadarSweep{\r\n      0%{\r\n        transform:translate(-50%,-50%) rotate(0deg);\r\n      }\r\n      100%{\r\n        transform:translate(-50%,-50%) rotate(360deg);\r\n      }\r\n    }\r\n\r\n    .az-waw-outline{\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      width:74%;\r\n      max-width:360px;\r\n      transform:translate(-50%,-50%);\r\n      z-index:3;\r\n      opacity:.96;\r\n      filter:drop-shadow(0 16px 22px rgba(0,0,0,.10));\r\n    }\r\n\r\n    .az-waw-outline svg{\r\n      display:block;\r\n      width:100%;\r\n      height:auto;\r\n    }\r\n\r\n    .az-waw-outline-glow{\r\n      fill:none;\r\n      stroke:rgba(66,133,244,.18);\r\n      stroke-width:7;\r\n      stroke-linejoin:round;\r\n      filter:blur(4px);\r\n    }\r\n\r\n    .az-waw-outline-path{\r\n      fill:rgba(255,255,255,.62);\r\n      stroke:rgba(0,0,0,.42);\r\n      stroke-width:2.3;\r\n      stroke-linejoin:round;\r\n    }\r\n\r\n    .az-waw-outline-river{\r\n      fill:none;\r\n      stroke:rgba(66,133,244,.48);\r\n      stroke-width:3.2;\r\n      stroke-linecap:round;\r\n      stroke-dasharray:6 8;\r\n      animation:azWawRiverMove 3.2s linear infinite;\r\n    }\r\n\r\n    @keyframes azWawRiverMove{\r\n      0%{\r\n        stroke-dashoffset:0;\r\n      }\r\n      100%{\r\n        stroke-dashoffset:-28;\r\n      }\r\n    }\r\n\r\n    .az-waw-center-dot{\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      z-index:7;\r\n      width:14px;\r\n      height:14px;\r\n      border-radius:999px;\r\n      transform:translate(-50%,-50%);\r\n      background:#111;\r\n      box-shadow:\r\n        0 0 0 7px rgba(66,133,244,.14),\r\n        0 0 24px rgba(66,133,244,.45);\r\n    }\r\n\r\n    .az-waw-radar-echo{\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      z-index:4;\r\n      width:42px;\r\n      height:42px;\r\n      border-radius:999px;\r\n      border:2px solid rgba(66,133,244,.32);\r\n      transform:translate(-50%,-50%) scale(.35);\r\n      opacity:0;\r\n      pointer-events:none;\r\n      animation:azWawRadarEcho 2.8s ease-out infinite;\r\n    }\r\n\r\n    .az-waw-radar-echo:nth-child(2){\r\n      animation-delay:.7s;\r\n    }\r\n\r\n    .az-waw-radar-echo:nth-child(3){\r\n      animation-delay:1.4s;\r\n    }\r\n\r\n    @keyframes azWawRadarEcho{\r\n      0%{\r\n        opacity:.72;\r\n        transform:translate(-50%,-50%) scale(.35);\r\n      }\r\n      70%{\r\n        opacity:.13;\r\n      }\r\n      100%{\r\n        opacity:0;\r\n        transform:translate(-50%,-50%) scale(7.4);\r\n      }\r\n    }\r\n\r\n    .az-waw-map-label{\r\n      position:absolute;\r\n      z-index:8;\r\n      display:inline-flex;\r\n      align-items:center;\r\n      justify-content:center;\r\n      gap:7px;\r\n      padding:7px 10px;\r\n      border-radius:999px;\r\n      border:1px solid rgba(0,0,0,.12);\r\n      background:rgba(255,255,255,.86);\r\n      -webkit-backdrop-filter:blur(10px);\r\n      backdrop-filter:blur(10px);\r\n      color:#111;\r\n      font-size:11px;\r\n      font-weight:900;\r\n      line-height:1;\r\n      letter-spacing:.5px;\r\n      box-shadow:0 10px 24px rgba(0,0,0,.08);\r\n      white-space:nowrap;\r\n      pointer-events:none;\r\n    }\r\n\r\n    .az-waw-map-label::before{\r\n      content:\"\";\r\n      flex:0 0 auto;\r\n      width:6px;\r\n      height:6px;\r\n      border-radius:999px;\r\n      background:#4285f4;\r\n      box-shadow:0 0 0 4px rgba(66,133,244,.13);\r\n    }\r\n\r\n    .az-waw-map-label--warszawa{\r\n      left:50%;\r\n      top:50%;\r\n      transform:translate(12px,-34px);\r\n      z-index:10;\r\n      background:#111;\r\n      color:#fff;\r\n      border-color:rgba(0,0,0,.24);\r\n      box-shadow:\r\n        0 10px 24px rgba(0,0,0,.15),\r\n        0 0 18px rgba(66,133,244,.24);\r\n    }\r\n\r\n    .az-waw-map-label--warszawa::before{\r\n      background:#fff;\r\n      box-shadow:0 0 0 4px rgba(255,255,255,.18);\r\n    }\r\n\r\n    .az-waw-random-label{\r\n      max-width:none;\r\n      min-width:max-content;\r\n      text-align:center;\r\n      white-space:nowrap;\r\n      line-height:1;\r\n      opacity:0;\r\n      transform:translate(-50%,-50%) scale(.88);\r\n      transition:\r\n        opacity .58s ease,\r\n        transform .58s cubic-bezier(.2,.9,.2,1.18),\r\n        filter .58s ease;\r\n    }\r\n\r\n    .az-waw-random-label--enter{\r\n      opacity:0;\r\n      transform:translate(-50%,-50%) scale(.82);\r\n      filter:blur(3px);\r\n    }\r\n\r\n    .az-waw-random-label--active{\r\n      opacity:1;\r\n      transform:translate(-50%,-50%) scale(1);\r\n      filter:blur(0);\r\n    }\r\n\r\n    .az-waw-random-label--leave{\r\n      opacity:0;\r\n      transform:translate(-50%,-50%) scale(.84);\r\n      filter:blur(2px);\r\n    }\r\n\r\n    .az-waw-random-label::after{\r\n      content:\"\";\r\n      position:absolute;\r\n      left:50%;\r\n      top:50%;\r\n      width:34px;\r\n      height:34px;\r\n      border-radius:999px;\r\n      border:1px solid rgba(66,133,244,.30);\r\n      transform:translate(-50%,-50%) scale(.5);\r\n      opacity:.9;\r\n      z-index:-1;\r\n      animation:azWawPlacePingSoft 2.2s ease-out infinite;\r\n    }\r\n\r\n    @keyframes azWawPlacePingSoft{\r\n      0%{\r\n        opacity:.44;\r\n        transform:translate(-50%,-50%) scale(.5);\r\n      }\r\n      100%{\r\n        opacity:0;\r\n        transform:translate(-50%,-50%) scale(2.45);\r\n      }\r\n    }\r\n\r\n    .az-waw-local-area-content{\r\n      position:relative;\r\n      z-index:2;\r\n      width:100%;\r\n    }\r\n\r\n    .az-waw-local-simple-text{\r\n      width:100%;\r\n      margin:0;\r\n      padding:20px 24px;\r\n      border-radius:18px;\r\n      border:1px solid rgba(0,0,0,.10);\r\n      background:rgba(255,255,255,.88);\r\n      box-shadow:0 10px 26px rgba(0,0,0,.05);\r\n      color:#333;\r\n      font-size:17px;\r\n      line-height:1.75;\r\n      letter-spacing:.25px;\r\n    }\r\n\r\n    .az-waw-local-simple-text strong{\r\n      color:#111;\r\n      font-weight:900;\r\n    }\r\n\r\n    @media (prefers-reduced-motion:reduce){\r\n      .az-waw-local-area-inner::before,\r\n      .az-waw-local-area-inner::after,\r\n      .az-waw-radar-stage::after,\r\n      .az-waw-radar-echo,\r\n      .az-waw-outline-river,\r\n      .az-waw-random-label,\r\n      .az-waw-random-label::after{\r\n        animation:none !important;\r\n        transition:none !important;\r\n      }\r\n\r\n      .az-waw-radar-echo{\r\n        opacity:.18;\r\n        transform:translate(-50%,-50%) scale(4.5);\r\n      }\r\n\r\n      .az-waw-random-label{\r\n        opacity:1;\r\n        filter:none;\r\n      }\r\n    }\r\n\r\n    @media (max-width:781px){\r\n      .az-waw-local-area-box{\r\n        width:100%;\r\n        max-width:100%;\r\n        margin:30px auto 24px;\r\n        padding:0 12px;\r\n      }\r\n\r\n      .az-waw-local-area-inner{\r\n        border-radius:18px;\r\n        padding:12px;\r\n      }\r\n\r\n      .az-waw-local-area-column{\r\n        width:100%;\r\n        max-width:100%;\r\n        padding:0;\r\n        gap:14px;\r\n      }\r\n\r\n      .az-waw-radar-stage{\r\n        width:100%;\r\n        min-height:300px;\r\n        border-radius:16px;\r\n      }\r\n\r\n      .az-waw-outline{\r\n        width:82%;\r\n      }\r\n\r\n      .az-waw-map-label{\r\n        font-size:10px;\r\n        padding:6px 8px;\r\n      }\r\n\r\n      .az-waw-map-label--warszawa{\r\n        transform:translate(8px,-30px);\r\n      }\r\n\r\n      .az-waw-random-label{\r\n        max-width:none;\r\n        min-width:max-content;\r\n        white-space:nowrap;\r\n        font-size:8.7px;\r\n        line-height:1;\r\n        padding:5px 7px;\r\n      }\r\n\r\n      .az-waw-local-simple-text{\r\n        width:100%;\r\n        padding:16px 16px;\r\n        font-size:15px;\r\n        line-height:1.7;\r\n        border-radius:16px;\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>\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-map-label az-waw-map-label--warszawa\">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      const stage = document.querySelector('[data-az-waw-radar]');\r\n      if(!stage) return;\r\n\r\n      const clockwisePlaces = [\r\n        {name:'\u0141omianki', x:34, y:16, ox:-12, oy:0},\r\n        {name:'Bielany', x:38, y:28, ox:-10, oy:-6},\r\n        {name:'Bia\u0142o\u0142\u0119ka', x:58, y:25, ox:8, oy:-8},\r\n        {name:'Radzymin', x:86, y:18, ox:-18, oy:2},\r\n        {name:'Marki', x:72, y:31, ox:12, oy:-6},\r\n        {name:'Koby\u0142ka', x:84, y:34, ox:-16, oy:-8},\r\n        {name:'Wo\u0142omin', x:91, y:30, ox:-24, oy:5},\r\n        {name:'Zielonka', x:75, y:39, ox:12, oy:2},\r\n        {name:'Z\u0105bki', x:70, y:44, ox:14, oy:0},\r\n        {name:'Targ\u00f3wek', x:62, y:38, ox:10, oy:-4},\r\n        {name:'Praga-P\u00f3\u0142noc', x:58, y:44, ox:20, oy:-8},\r\n        {name:'Praga-Po\u0142udnie', x:59, y:55, ox:22, oy:4},\r\n        {name:'Rembert\u00f3w', x:72, y:58, ox:12, oy:4},\r\n        {name:'Sulej\u00f3wek', x:85, y:58, ox:-20, oy:-8},\r\n        {name:'Halin\u00f3w', x:90, y:64, ox:-24, oy:4},\r\n        {name:'Weso\u0142a', x:78, y:66, ox:12, oy:6},\r\n        {name:'Wawer', x:66, y:70, ox:16, oy:8},\r\n        {name:'J\u00f3zef\u00f3w', x:69, y:84, ox:12, oy:6},\r\n        {name:'Otwock', x:76, y:92, ox:-18, oy:-4},\r\n        {name:'Wilan\u00f3w', x:53, y:73, ox:8, oy:10},\r\n        {name:'Konstancin-Jeziorna', x:55, y:89, ox:18, oy:0},\r\n        {name:'Piaseczno', x:42, y:92, ox:-10, oy:-6},\r\n        {name:'J\u00f3zefos\u0142aw', x:43, y:86, ox:-20, oy:4},\r\n        {name:'Ursyn\u00f3w', x:44, y:76, ox:-12, oy:10},\r\n        {name:'Mokot\u00f3w', x:45, y:62, ox:0, oy:14},\r\n        {name:'Raszyn', x:34, y:76, ox:-18, oy:0},\r\n        {name:'Micha\u0142owice', x:28, y:70, ox:-12, oy:8},\r\n        {name:'Pruszk\u00f3w', x:20, y:68, ox:12, oy:-6},\r\n        {name:'W\u0142ochy', x:31, y:63, ox:-14, oy:6},\r\n        {name:'Ursus', x:25, y:61, ox:-12, oy:-8},\r\n        {name:'Ochota', x:38, y:54, ox:-16, oy:5},\r\n        {name:'Wola', x:36, y:47, ox:-16, oy:-4},\r\n        {name:'Bemowo', x:27, y:45, ox:-14, oy:4},\r\n        {name:'O\u017car\u00f3w Mazowiecki', x:16, y:49, ox:24, oy:-6},\r\n        {name:'Stare Babice', x:20, y:38, ox:18, oy:-8},\r\n        {name:'Izabelin', x:24, y:25, ox:14, oy:-4},\r\n        {name:'\u017boliborz', x:43, y:35, ox:-12, oy:-8},\r\n        {name:'\u015ar\u00f3dmie\u015bcie', x:48, y:48, ox:-18, oy:18}\r\n      ];\r\n\r\n      let currentIndex = 0;\r\n      const visibleLimit = 3;\r\n      const addInterval = 1450;\r\n      const fadeOutDelay = 620;\r\n      const removeDelay = 900;\r\n\r\n      function nextPlace(){\r\n        const place = clockwisePlaces[currentIndex];\r\n        currentIndex = (currentIndex + 1) % clockwisePlaces.length;\r\n        return place;\r\n      }\r\n\r\n      function createLabel(place){\r\n        const label = document.createElement('span');\r\n        const offsetX = place.ox || 0;\r\n        const offsetY = place.oy || 0;\r\n\r\n        label.className = 'az-waw-map-label az-waw-random-label az-waw-random-label--enter';\r\n        label.textContent = place.name;\r\n        label.style.left = 'calc(' + place.x + '% + ' + offsetX + 'px)';\r\n        label.style.top = 'calc(' + place.y + '% + ' + offsetY + 'px)';\r\n\r\n        stage.appendChild(label);\r\n\r\n        window.setTimeout(function(){\r\n          label.classList.remove('az-waw-random-label--enter');\r\n          label.classList.add('az-waw-random-label--active');\r\n        }, 40);\r\n\r\n        return label;\r\n      }\r\n\r\n      function getLabels(){\r\n        return Array.from(stage.querySelectorAll('.az-waw-random-label'));\r\n      }\r\n\r\n      function removeOldestLabel(){\r\n        const labels = getLabels();\r\n\r\n        if(labels.length <= visibleLimit) return;\r\n\r\n        const oldest = labels[0];\r\n\r\n        oldest.classList.remove('az-waw-random-label--active');\r\n        oldest.classList.add('az-waw-random-label--leave');\r\n\r\n        window.setTimeout(function(){\r\n          if(oldest && oldest.parentNode){\r\n            oldest.parentNode.removeChild(oldest);\r\n          }\r\n        }, removeDelay);\r\n      }\r\n\r\n      function addNextLabel(){\r\n        createLabel(nextPlace());\r\n\r\n        window.setTimeout(function(){\r\n          removeOldestLabel();\r\n        }, fadeOutDelay);\r\n      }\r\n\r\n      createLabel(nextPlace());\r\n      window.setTimeout(function(){ createLabel(nextPlace()); }, 220);\r\n      window.setTimeout(function(){ createLabel(nextPlace()); }, 440);\r\n\r\n      window.setInterval(function(){\r\n        addNextLabel();\r\n      }, addInterval);\r\n    })();\r\n  <\/script>\r\n\r\n<\/section>\n<!-- \/end HFCM by 99 Robots -->\n<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\"><!-- 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<\/div>\n<\/div>\n\n\n<p style=\"text-align:center;font-size:11px;line-height:1.35;color:rgba(0,0,0,.50);letter-spacing:.2px;\">\n  Aktualizacja strony \u2013 Lipiec 2026\n<\/p>\n<p><!-- \/wp:post-content --><\/p>\n<p><!-- wp:shortcode --><\/p>\n<section id=\"kontakt\">\n<\/section>\n<\/p>\n<p><!-- \/wp:shortcode --><\/p>","protected":false},"excerpt":{"rendered":"<p>Zam\u00f3w profesjonalny pomiar karniszy i doradztwo u siebie. Oferujemy dojazd z pr\u00f3bnikami, pomiar i doradztwo. Koszt? Tak us\u0142uga jest p\u0142atna 250 z\u0142 poniewa\u017c \u015bwiadczymy profesjonalne us\u0142ugi poparte do\u015bwiadczeniem. Inwestycja w t\u0105 us\u0142ug\u0119 bardzo cz\u0119sto pozwala na wcze\u015bniejsze zaplanowanie budowy sufit\u00f3w, idealne dopasowanie produkt\u00f3w, oraz unikniesz dodatkowych koszt\u00f3w zwi\u0105zanych z przer\u00f3bkami. Zadzwo\u0144 lub wy\u015blij mail i&#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":"default","_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.0 - 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-07-09T10:00:17+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=\"6 minut\" \/>\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-07-09T10:00:17+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-07-09T10:00:17+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":"6 minut"},"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-07-09T10:00:17+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":198,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":497,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions\/497"}],"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}]}}