{"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-05-24T11:27:02","modified_gmt":"2026-05-24T09:27:02","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 407 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=\"407\">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\"><!-- 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 407 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=\"407\">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<\/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 Maj 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 v27.6 - 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-05-24T09:27:02+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-05-24T09:27:02+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-05-24T09:27:02+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-05-24T09:27:02+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":196,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":489,"href":"https:\/\/karniszewarszawa.pl\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions\/489"}],"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}]}}