{"id":3381,"date":"2026-10-21T15:23:27","date_gmt":"2026-10-21T14:23:27","guid":{"rendered":"https:\/\/komplast.pl\/?page_id=3381"},"modified":"2026-11-02T12:15:34","modified_gmt":"2026-11-02T11:15:34","slug":"wieszak-na-reklamowki","status":"publish","type":"page","link":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/","title":{"rendered":"Wieszak na reklam\u00f3wki"},"content":{"rendered":"  <section class=\"wrap hero\">\r\n      <img decoding=\"async\" id=\"wieszakGIF\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_01.gif\">\r\n      <div class=\"note\">\r\n        <div class=\"tagLine\">Praktyczne akcesoria do sklep\u00f3w i miejsc pracy<\/div>\r\n        <h1>Wieszak na reklam\u00f3wki<\/h1>\r\n        <p class=\"desc\">Praktyczny wieszak na rolki z reklam\u00f3wkami, r\u0119cznikami papierowymi lub innymi produktami odwijanymi z rolek.<\/p>\r\n      <\/div>\r\n  <\/section>\r\n  <section class=\"pricing wrap\">\r\n      <details>\r\n        <summary><\/summary>\r\n        <p>Sprzeda\u017c w opakowaniach 20, 40 lub 100 sztuk.<\/p>\r\n        <div class=\"prices\">\r\n          <div class=\"labels table\">\r\n            <div class=\"packSize\">\r\n              <!-- Wielko\u015b\u0107 paczki<br> -->\r\n              Ilo\u015b\u0107 w opakowaniu<\/div>\r\n            <div class=\"aPiece\">\r\n              <!-- Cena netto \/ szt.<br> -->\r\n              Cena netto <span class=\"nowrap\">\/ szt<\/span><\/div>\r\n            <div class=\"totalNet\">\r\n              <!-- Warto\u015b\u0107 netto paczki<br> -->\r\n              Warto\u015b\u0107 netto<\/div>\r\n            <div class=\"totalGross\">\r\n              <!-- Warto\u015b\u0107 brutto paczki (23% VAT)<br> -->\r\n              Warto\u015b\u0107 brutto <span class=\"nowrap\">(VAT 23%)<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"packSize\">20 szt.<\/div>\r\n            <div class=\"aPiece\">3,00 z\u0142<\/div>\r\n            <div class=\"totalNet\">60,00 z\u0142<\/div>\r\n            <div class=\"totalGross\">73,80 z\u0142<\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"packSize\">40 szt.<\/div>\r\n            <div class=\"aPiece\">2,50 z\u0142<\/div>\r\n            <div class=\"totalNet\">100,00 z\u0142<\/div>\r\n            <div class=\"totalGross\">123,00 z\u0142<\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"packSize\">100 szt.<\/div>\r\n            <div class=\"aPiece\">2,00 z\u0142<\/div>\r\n            <div class=\"totalNet\">200,00 z\u0142<\/div>\r\n            <div class=\"totalGross\">246,00 z\u0142<\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p>Koszty dostawy &#8211; wysy\u0142ka kurierska DPD:<\/p>\r\n        <div class=\"shipping\">\r\n          <div class=\"labels table\">\r\n            <div class=\"shipPack\">Liczba sztuk <span class=\"nowrap\">w jednej paczce<\/span><\/div>\r\n            <div class=\"shipNet\">Koszt netto<\/div>\r\n            <div class=\"shipGross\">Koszt brutto<\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"shipPack\">Do 100 sztuk<\/div>\r\n            <div class=\"shipNet\">18,70 z\u0142<\/div>\r\n            <div class=\"shipGross\">23 z\u0142<\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"shipPack\">Do 1 000 sztuk<\/div>\r\n            <div class=\"shipNet\">25,70 z\u0142<\/div>\r\n            <div class=\"shipGross\">31,61 z\u0142<\/div>\r\n          <\/div>\r\n          <div class=\"row\">\r\n            <div class=\"shipPack\">Do 1 400 sztuk<\/div>\r\n            <div class=\"shipNet\">30,70 z\u0142<\/div>\r\n            <div class=\"shipGross\">37,76 z\u0142<\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"desc\">Podane koszty dostawy s\u0105 orientacyjne i obejmuj\u0105 opakowanie transportowe. Kwoty brutto zawieraj\u0105 23% VAT.<\/p><hr>\r\n        <p class=\"desc\">W jednym kartonie mo\u017cemy wys\u0142a\u0107 maksymalnie 1 400 sztuk. Wi\u0119ksze zam\u00f3wienia dzielimy na dwie lub wi\u0119cej paczek. Podzia\u0142 zam\u00f3wienia na paczki dobieramy tak, aby zminimalizowa\u0107 \u0142\u0105czny koszt dostawy. Ostateczny koszt podajemy przed zatwierdzeniem zam\u00f3wienia.<\/p><hr>\r\n        <p class=\"desc\">Koszty dostawy mog\u0105 ulec zmianie w przypadku zmiany stawek firmy kurierskiej.<\/p>\r\n      <\/details>\r\n  <\/section>\r\n  <section class=\"oneMany\">\r\n    <div class=\"tagLine\">Uniwersalne zastosowanie<\/div>\r\n    <h2>Jeden wieszak na r\u00f3\u017cne produkty<\/h2>\r\n    <p class=\"desc\">Dzi\u0119ki wieszakowi produkty na rolkach maj\u0105 swoje sta\u0142e miejsce, s\u0105 \u0142atwo dost\u0119pne dla klient\u00f3w i pracownik\u00f3w, a rolki nie musz\u0105 by\u0107 odk\u0142adane luzem.<\/p>\r\n    <div class=\"grid3col\">\r\n      <div class=\"picText\">\r\n        <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_02.jpg\" alt=\"\">\r\n        <div>\r\n          <h3 class=\"usage\">Wieszak na r\u0119czniki papierowe<\/h3>\r\n          <span class=\"desc\">Praktyczne wykorzystanie w przestrzeniach roboczych i gospodarczych.<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"picText\">\r\n        <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_03.jpg\" alt=\"\">\r\n        <div>\r\n          <h3 class=\"usage\">Wieszak na reklam\u00f3wki i zrywki<\/h3>\r\n          <span class=\"desc\">Wygodny dost\u0119p do woreczk\u00f3w przy stoiskach i rega\u0142ach.<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"picText\">\r\n        <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_04.jpg\" alt=\"\">\r\n        <div>\r\n          <h3 class=\"usage\">Wieszak na r\u00f3\u017cne produkty odwijane z rolek<\/h3>\r\n          <span class=\"desc\">Rolka zawsze w wyznaczonym, \u0142atwo dost\u0119pnym miejscu.<\/span>  \r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"convenience\">\r\n    <div class=\"tagLine\">Dopasowany do Twojej przestrzeni<\/div>\r\n    <h2>Porz\u0105dek i wygoda korzystania.<\/h2>\r\n    <p class=\"desc\">Wieszak na rolki pomaga lepiej zorganizowa\u0107 przestrze\u0144 sprzeda\u017cow\u0105 lub miejsce pracy. Sprawdzi si\u0119 mi\u0119dzy innymi w:<\/p>\r\n    <div class=\"grid3mixed\">\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_05.jpg\" alt=\"\">\r\n      <ul>\r\n        <li>sklepach i punktach sprzeda\u017cy<\/li>\r\n        <li>na zapleczach i w magazynach<\/li>\r\n        <li>pomieszczeniach gospodarczych<\/li>\r\n        <li>innych przestrzeniach, w kt\u00f3rych wykorzystuje si\u0119 produkty rozwijane z rolek<\/li>\r\n      <\/ul>\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_06.jpg\" alt=\"\">\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"mount\">\r\n    <div class=\"tagLine\">Monta\u017c<\/div>\r\n    <h2>Zawie\u015b tam, gdzie potrzebujesz.<\/h2>\r\n    <div class=\"grid2by2\">\r\n      <div class=\"textPart\">\r\n        <p class=\"desc\">\r\n          Wieszak zosta\u0142 zaprojektowany z my\u015bl\u0105 o rega\u0142ach z p\u00f3\u0142kami drucianymi, ale jego zastosowanie nie ogranicza si\u0119 do tego typu konstrukcji.<br><br>\r\n          Elastyczne, rozpinane zaczepy umo\u017cliwiaj\u0105 zamocowanie r\u00f3wnie\u017c na innych elementach, do kt\u00f3rych mo\u017cna bezpiecznie zaczepi\u0107 uchwyt.<br><br>\r\n          Mo\u017cliwo\u015b\u0107 monta\u017cu m.in. na:\r\n        <\/p>\r\n        <ul>\r\n          <li>drucianych p\u00f3\u0142kach<\/li>\r\n          <li>kratkach<\/li>\r\n          <li>haczykach<\/li>\r\n          <li>rega\u0142ach itp.<\/li>\r\n        <\/ul>\r\n      <\/div>\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_07.jpg\" alt=\"\">\r\n    <\/div>\r\n    <div class=\"grid2by2\">\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_08.jpg\" alt=\"\">\r\n      <div class=\"textPart\">\r\n        <h3 class=\"usage\">Prosty monta\u017c. Swoboda zmiany miejsca.<\/h3>\r\n        <p class=\"desc\">Wieszak mo\u017cna \u0142atwo zdj\u0105\u0107 i zawiesi\u0107 w innym miejscu, dostosowuj\u0105c jego po\u0142o\u017cenie do aktualnych potrzeb. Nie wymaga on wiercenia ani trwa\u0142ego mocowania.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"functional\">\r\n    <div class=\"tagLine\">Funkcjonalno\u015b\u0107<\/div>\r\n    <h2>Rozpinane zaczepy z blokad\u0105<\/h2>\r\n    \r\n    <div class=\"grid2by2\">\r\n      <div class=\"subGrid\">\r\n        <div class=\"desc\">\r\n          Elastyczne zaczepy z blokad\u0105 pomagaj\u0105 utrzyma\u0107 wieszak w wybranym po\u0142o\u017ceniu\r\n        <\/div>\r\n        <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/\r\nwieszak_09.jpg\" alt=\"\">\r\n      <\/div>\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg\" alt=\"\">\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"elastic\">\r\n    <div class=\"tagLine\">Elastyczna konstrukcja<\/div>\r\n    <h2>Dopasowuje si\u0119 do miejsca monta\u017cu<\/h3>\r\n    <div class=\"desc\">\r\n      Dzi\u0119ki elastycznej konstrukcji wieszak mo\u017cna zamocowa\u0107 na elementach o rozstawie od <span class=\"bold\">26 do 43 cm<\/span>.\r\n      <br><br>\r\n      Na poni\u017cszym modelu interaktywnym wybierz i kliknij przycisk. Aby obr\u00f3ci\u0107 wieszak, przytrzymaj lewy klawisz myszy i przesuwaj po ekranie.\r\n    <\/div>\r\n    <div id=\"demoWrapper\">\r\n      <input type=\"radio\" name=\"spread\" id=\"spreadN\">\r\n      <input type=\"radio\" name=\"spread\" id=\"spreadM\" checked>\r\n      <input type=\"radio\" name=\"spread\" id=\"spreadW\">\r\n      <input type=\"checkbox\" name=\"closeCap\" id=\"closeCap\">\r\n      <input type=\"checkbox\" name=\"twist\" id=\"twist\">\r\n\r\n      <input type=\"checkbox\" name=\"clicked\" id=\"clicked\">\r\n\r\n      <div class=\"controls\" id=\"top\">\r\n          <span>Rozstaw ramion:<\/span>\r\n          <label id=\"spreadNBtn\" for=\"spreadN\">w\u0105ski<\/label>\r\n          <label id=\"spreadMBtn\" for=\"spreadM\">normalny<\/label>\r\n          <label id=\"spreadWBtn\" for=\"spreadW\">szeroki<\/label>\r\n      <\/div>\r\n\r\n      \r\n      <div id=\"glWrapper\">\r\n          <canvas id=\"myCanvas\" title=\"Przytrzymaj lewy klawisz myszy i przesuwaj po ekranie, by obraca\u0107 detal\"><\/canvas>\r\n          <label id=\"clickedBtn\" for=\"clicked\">Kliknij i przesuwaj po ekranie,<br>by obraca\u0107 detal<\/label>\r\n      <\/div> <!-- end of .glWrapper  -->\r\n\r\n      <div class=\"controls\" id=\"bottom\">\r\n          <label id=\"closeBtn\" for=\"closeCap\"><span><\/span> skuwk\u0119<\/label>\r\n          <label id=\"twistBtn\" for=\"twist\"><span><\/span>ramiona<\/label>\r\n          <div id=\"resetBtn\">Resetuj widok<\/div>\r\n      <\/div>\r\n    <\/div> <!-- end of .demoWrapper -->\r\n    \r\n  <\/section>\r\n  <section class=\"parameters\">\r\n    <div class=\"grid2by2\">\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_12.png\" alt=\"\">\r\n      <div>\r\n        <ul class=\"desc\">\r\n          Wieszak jest przeznaczony do rolek o:\r\n          <li>\u015brednicy wewn\u0119trznej minimum 25 mm,<\/li>\r\n          <li>d\u0142ugo\u015bci maksymalnej 25 cm.<\/li>\r\n          Parametry te odpowiadaj\u0105 m.in. standardowym rolkom z reklam\u00f3wkami HDPE typu T-shirt o wymiarach oko\u0142o 22 \u00d7 43 cm, kt\u00f3rych tuleja ma zazwyczaj \u015brednic\u0119 wewn\u0119trzn\u0105 25\u201330 mm, a d\u0142ugo\u015b\u0107 rolki oko\u0142o 23\u201325 cm.\r\n        <\/ul>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"quickEasy\">\r\n    <div class=\"grid2by2\">\r\n      <div>\r\n        <div class=\"tagLine\">Wygoda u\u017cytkowania<\/div>\r\n        <h2>Szybka wymiana rolki<\/h2>\r\n        <div class=\"desc\">Wymiana rolki jest prosta i nie wymaga demonta\u017cu ca\u0142ego wieszaka. Wystarczy wypi\u0105\u0107 uchwyt z jednej strony, prze\u0142o\u017cy\u0107 go przez tulej\u0119 rolki, a nast\u0119pnie ponownie zapi\u0105\u0107.<\/div>\r\n      <\/div>\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_11.gif\" alt=\"\">\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"practical\">\r\n    <div class=\"tagLine\">W praktyce<\/div>\r\n    <h2>Porz\u0105dek i \u0142atwy dost\u0119p<\/h2>\r\n    <div class=\"grid2by2\">\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_13.jpg\" alt=\"\">\r\n      <div class=\"desc\">Rolki pozostaj\u0105 na swoim miejscu zamiast le\u017ce\u0107 luzem. Takie rozwi\u0105zanie pomaga uporz\u0105dkowa\u0107 przestrze\u0144 sprzeda\u017cow\u0105 i miejsce pracy.<\/div>\r\n      <img decoding=\"async\" src=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_14.jpg\" alt=\"\">\r\n    <\/div>\r\n  <\/section>\r\n  <section class=\"conclusion\">\r\n    <h2>\r\n      Ma\u0142y detal. Wi\u0119cej porz\u0105dku.\r\n    <\/h2>\r\n    <div class=\"desc\">\r\n      Wieszak na reklam\u00f3wki &#8211; wygodny dost\u0119p do produkt\u00f3w odwijanych z rolki.\r\n    <\/div>\r\n  <\/section>\r\n\r\n\r\n<style>\r\n\r\n#wieszakGIF, :where(img) { width: 100%; }\r\n\r\nbody {\r\n  margin: 0;\r\n  padding: 0;\r\n  min-height: 100vh;\r\n  --bg: #f0f2ef;\r\n\r\n}\r\n\r\narticle { padding-bottom: 0; }\r\n\r\n.entry-content {\r\n  padding-inline: 0;\r\n  padding-block: 0;\r\n  --padSec: max(calc(50% - 620px), 30px);\r\n\r\n  & header {\r\n    padding: 23px max(5vw,20px);\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n\r\n    & * { padding: 0; }\r\n  }\r\n}\r\n\r\nhr {\r\n  height: 1em;\r\n}\r\n\r\n:where(*) {\r\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-size: 15px;\r\n  text-align: unset;\r\n  text-align-last: unset;\r\n}\r\n\r\nsection {\r\n  \/* --padIn: 20.5%; *\/\r\n  \/* padding-inline: var(--padIn); *\/\r\n  position: relative;\r\n  \r\n  display: grid;\r\n\r\n  :where(&) {\r\n    padding-inline: var(--padSec); \r\n    padding-block: 78px;\r\n   }\r\n\r\n  :where(&:nth-of-type(2n+3)) { background-color: var(--bg); }\r\n\r\n  h1 { \r\n    font-size: clamp(36px,5vw,68px);\r\n    margin-block: 20px;\r\n    line-height: 1;\r\n    letter-spacing: -.045em;\r\n  }\r\n\r\n  h2 {\r\n    line-height: 1.25;\r\n    font-size: clamp(30px,3.4vw,46px);\r\n    margin-block: 15px 0;\r\n  }\r\n\r\n  h3 {\r\n    letter-spacing: 0;\r\n    line-height: 1.2;\r\n    margin: 0;\r\n\r\n    &.usage { \r\n      font-size: 22px;\r\n      font-weight: bold;\r\n    }\r\n  }\r\n\r\n}\r\n\r\nsummary {\r\n  cursor: pointer;\r\n  text-transform: uppercase;\r\n  font-size: 18px;\r\n  letter-spacing: .075em;\r\n  padding: .75em 1.25em;\r\n  background-image: linear-gradient(to bottom right, #f9fcfe,#d1dce4);\r\n  border: 1px solid #0003;\r\n  border-radius: 9px;\r\n  justify-self: end;\r\n  display: grid;\r\n  align-items: center;\r\n  \/* width: fit-content; *\/\r\n  width: 15ch;\r\n  height: 1em;\r\n  gap: 1em;\r\n\r\n  &::before, &::after {\r\n    position: absolute;\r\n  }\r\n\r\n  &::before {\r\n    content: 'Cennik';\r\n    justify-self: center;\r\n    font-family: Montserrat;\r\n    font-weight: 750;\r\n  }\r\n\r\n  &::after {\r\n    content: '\\25BC';\r\n    justify-self: end;\r\n    color: #666;\r\n    text-transform: lowercase;\r\n    transition: rotate .75s ease-in-out;\r\n  }\r\n\r\n  details:open > &::after { rotate: 180deg; }\r\n}\r\n\r\ndetails { display: grid; }\r\n\r\n\r\n.hero {\r\n  display: grid;\r\n  align-items: center;\r\n  grid-template-columns: 1.1fr .9fr;\r\n  grid-template-rows: unset;\r\n  gap: 60px;\r\n  padding-block: 60px 35px;\r\n}\r\n\r\n.tagLine {\r\n  text-transform: uppercase;\r\n  letter-spacing: .18em;\r\n  font-weight: bold;\r\n  \r\n  section & { \r\n    font-size: 12px;\r\n    color: #727873;\r\n  }\r\n}\r\n\r\n.desc {\r\n  font-size: 17px;\r\n  line-height: 1.6;\r\n\r\n  .hero & { font-size: 20px; }\r\n\r\n  h2 + & { margin-block: 1.5em 1.8em; }\r\n}\r\n\r\n.pricing { padding-block: 1.5em; }\r\n\r\n.prices, .shipping {\r\n  margin-block: 1em;\r\n\r\n  & > * {\r\n    display: grid;\r\n\r\n    & > * {\r\n      text-align: center;\r\n    } \r\n  }\r\n\r\n  .row { border-bottom: 1px solid var(--bg); }\r\n}\r\n\r\n.prices > * { grid-template-columns: repeat(4, 1fr); }\r\n.shipping > * { grid-template-columns: repeat(3, 1fr); }\r\n\r\n:is(.prices, .shipping) > * { padding: 1.5em; }\r\n\r\n.labels {\r\n  background-color: var(--bg);\r\n  border-radius: 10px;\r\n  font-weight: bold;\r\n\r\n  & div {\r\n    margin: 1em;\r\n  }\r\n}\r\n\r\n.nowrap { white-space: nowrap;}\r\n\r\n.grid3col {\r\n  display: grid;\r\n  gap: 1em;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  grid-template-rows: unset;\r\n}\r\n\r\n.picText {\r\n  background-color: #fff;\r\n\r\n  & div {\r\n    padding: 1.5em 1em;\r\n    display: grid;\r\n    gap: 25px;\r\n  }\r\n\r\n  & :is(h3, span) { \r\n    text-wrap: balance;\r\n    text-align: center;\r\n  }\r\n}\r\n\r\nsection ul {\r\n  padding: 0;\r\n  margin: 0;\r\n  list-style-position: inside;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  li {\r\n    font-size: 17px;\r\n    font-weight: bold;\r\n\r\n    &::marker {\r\n      content: \"\u2713  \";\r\n      font-size: 20px;\r\n      color: #42714b;\r\n    }\r\n  }\r\n}\r\n\r\n.grid2by2 {\r\n  display: grid;\r\n  grid-template-rows: unset;\r\n  padding-block: 20px;\r\n  gap: 60px;\r\n\r\n  .textPart:nth-child(2) {\r\n    align-self: center;\r\n    display: grid;\r\n    gap: 25px;\r\n  }\r\n\r\n  & :where(img) { margin-inline: 0; }\r\n\r\n  .mount :nth-child(1 of &) { \r\n    grid-template-columns: 1.25fr 1fr;\r\n    \r\n    & img { \r\n      height: min(45vw, 50vh); \r\n      width: auto;\r\n      \/*justify-self: end;*\/\r\n    }\r\n  }\r\n  .mount :nth-child(2 of &) { grid-template-columns: 1fr 1.25fr; }\r\n}\r\n\r\n.grid3mixed {\r\n  display: flex;\r\n  gap: 30px;\r\n  align-items: center;\r\n  justify-content: space-around;\r\n\r\n  & ul { \r\n    gap: 1.5em;\r\n    grid-column: unset;\r\n    list-style-position: inside;\r\n  }\r\n\r\n  & img {\r\n    background: red;\r\n    width: auto;\r\n    height: min(60vw, 80vh);\r\n    aspect-ratio: unset;\r\n  }\r\n}\r\n\r\n.grid2flex {\r\n  display: flex;\r\n  justify-content: space-around;\r\n  position: relative;\r\n\r\n  & > * { width: min(40vh, 45%); }\r\n}\r\n\r\n.elastic {\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n:is(.elastic, .functional) {\r\n  .grid2by2 {\r\n    grid-template-columns: repeat(2, 1fr);\r\n\r\n    & > img { align-self: center; }\r\n  }\r\n\r\n  .subGrid {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n}\r\n\r\n.quickEasy .grid2by2 {\r\n  grid-template-columns: .8fr 1.2fr;\r\n}\r\n\r\n.parameters {\r\n\r\n  padding-block: 0;\r\n\r\n  .grid2by2 {\r\n    grid-template-columns: 1.15fr .85fr;\r\n\r\n    & > div {\r\n      align-self: center;\r\n    }\r\n\r\n    .desc {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 1em;\r\n    }\r\n  }\r\n}\r\n\r\n.practical {\r\n  .grid2by2 {\r\n    grid-template-columns: repeat(2, 1fr);\r\n    justify-items: center;\r\n    row-gap: 2.5em;\r\n  }\r\n\r\n  .desc {\r\n      justify-self: start;\r\n      grid-row: 1;\r\n      grid-column: 1\/-1;\r\n  }\r\n\r\n  img { width: calc(100% - 5vw); }\r\n}\r\n\r\n.conclusion {\r\n  background-color: #e8ebe5;\r\n  display: grid;\r\n  justify-items: center;\r\n}\r\n\r\n#demoWrapper {\r\n    position: relative;\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100%;\r\n\r\n    input { display: none; }\r\n}\r\n\r\n#glWrapper {\r\n    width: 100%;\r\n    aspect-ratio: 1.5;\r\n    position: relative;\r\n}\r\n\r\n#myCanvas {\r\n    width: 100%;\r\n    height: 100%;\r\n    display: block;\r\n}\r\n\r\n.controls {\r\n  position: absolute;\r\n  inset-inline: 0;\r\n  display: flex;\r\n  padding: 25px;\r\n  gap: 25px;\r\n  font-family: Verdana, Geneva, Tahoma, sans-serif;\r\n  font-weight: bold;\r\n  text-transform: uppercase;\r\n  align-items: center;\r\n  z-index: 3;\r\n\r\n  & > span { color: #fff; }\r\n}\r\n\r\n.controls > *, #clickedBtn { text-align: center; }\r\n\r\n#top { justify-content: center; }\r\n#bottom { bottom: 0; }\r\n\r\nlabel:not([for=\"clicked\"]), #resetBtn {\r\n  padding: 1em 1.25em;\r\n  width: min-content;\r\n  display: grid;\r\n  background: linear-gradient(to bottom right, #fff, hsl(210deg 100% 75%));\r\n  border-radius: 10px;\r\n  box-shadow: inset -5px -5px 5px #014d7c;\r\n  transition: scale .25s ease-in-out;\r\n  place-items: center;\r\n  \r\n  &:hover {\r\n    scale: 1.1;\r\n  }\r\n}\r\n\r\n#resetBtn {\r\n    margin-left: auto;\r\n}\r\n\r\nlabel[for=\"closeCap\"] span::before { content: \"Zasu\u0144\" }\r\nlabel[for=\"twist\"] span::before { content: \"Skr\u0119\u0107\" }\r\n#clickedBtn {\r\n    position: absolute;\r\n    inset: 0 0 40% 0;\r\n    color: #fff;\r\n    font-family: Montserrat;\r\n    font-size: min(4vw, 30px);\r\n    font-weight: bold;\r\n    text-shadow: 0 0 1em .5em #000;\r\n    display: grid;\r\n    place-content: center;\r\n    pointer-events: none;\r\n    opacity: 1;\r\n    transition: opacity .5s ease-in-out;\r\n\r\n    &.yes {\r\n        opacity: 0;\r\n    }\r\n}\r\n\r\n#closeCap:checked ~ .controls label[for=\"closeCap\"] span::before { content: \"Zdejmij\" }\r\n#twist:checked ~ .controls label[for=\"twist\"] span::before { content: \"Wyprostuj\" }\r\n\r\n\r\n\r\n@media (max-width: 900px) {\r\n\r\n  .quickEasy .grid2by2 {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  section {  \r\n    --padIn: 1em;\r\n    :where(&) { padding-block: 58px; }\r\n  }\r\n\r\n  .hero {\r\n    padding-block: 1em;\r\n    grid-template-columns: unset;\r\n    grid-template-rows: auto;\r\n    gap: 1em;\r\n\r\n    img { grid-row: 3; }\r\n  }\r\n\r\n  .grid3mixed {\r\n    display: grid;\r\n    grid-template-columns: repeat(2, 1fr);\r\n\r\n    & ul { \r\n      gap: 1.2em;\r\n      grid-row: 1;\r\n      grid-column: 1\/-1;\r\n    }\r\n    & img { \r\n      grid-row: 2;\r\n      justify-self: center;\r\n      width: 100%;\r\n      height: unset;\r\n      aspect-ratio: 0.445\r\n    }\r\n  }\r\n  \r\n}\r\n\r\n@media (max-width: 735px) {\r\n  .grid3col {\r\n    grid-template-columns: unset;\r\n    grid-template-rows: auto;\r\n  }\r\n\r\n  .oneMany {\r\n\r\n    & { padding-inline: 0; }\r\n\r\n    & > *:not(.grid3col), .picText { padding-inline: var(--padSec); }\r\n\r\n    .picText { \r\n      \r\n      &:nth-child(2) { padding-top: 2.5em; }\r\n      &:nth-child(2) { grid-row: 1; }      \r\n      &:not(:nth-child(1)) { background-color: unset; }\r\n    }\r\n\r\n  }\r\n\r\n  .grid2by2 {\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    .parameters & { gap: 0; }\r\n\r\n    .mount :nth-child(1 of &) {\r\n      & img {\r\n        width: 70%;\r\n        height: auto;\r\n        margin-inline: auto;\r\n      }\r\n    }\r\n\r\n    .mount :nth-child(2 of &) { flex-direction: column-reverse; }\r\n  \r\n    .practical & { \r\n      row-gap: 2em; \r\n\r\n      img { margin-inline: auto; }\r\n    }\r\n  }\r\n\r\n  .subGrid {\r\n    gap: inherit;\r\n\r\n    .desc { order: 2; }\r\n  }\r\n\r\n  .glWrapper, .controls { position: relative; }\r\n\r\n  .controls {\r\n    padding: 0;\r\n    justify-content: space-between;\r\n\r\n    & > span { color: #000; }\r\n  }\r\n}\r\n\r\n@media (max-width: 600px) {\r\n\r\n  :where(section) { padding-block: 38px; }\r\n\r\n  summary { \r\n    justify-self: center;\r\n\r\n    &::before {\r\n      font-weight: 600;\r\n    }\r\n  }\r\n\r\n  .table { display: none; }\r\n\r\n  .row {\r\n    display: block;\r\n    border: 1px solid #ccc;\r\n    border-radius: 10px;\r\n    padding-inline: 0;\r\n\r\n    & > * { \r\n      padding-inline: 1.5em;\r\n      display: flex;\r\n      justify-content: space-between;\r\n\r\n      &:nth-child(1) {\r\n        padding-bottom: 1em;\r\n        margin-bottom: 5px;\r\n        border-bottom: 1px solid #bbb;\r\n      }\r\n\r\n      &:not(:nth-child(1)) { padding-block: 5px; }\r\n    }\r\n  }\r\n\r\n  .packSize::before { content: 'Paczka:'; }\r\n  .aPiece::before { content: 'Cena netto \/ szt.'; }\r\n  .totalNet::before { content: 'Warto\u015b\u0107 netto'; }\r\n  .totalGross::before { content: 'Warto\u015b\u0107 brutto (23% VAT)'; }\r\n\r\n  .shipPack::before { content: 'Szt. w 1 paczce'; }\r\n  .shipNet::before { content: 'Koszt netto'; }\r\n  .shipGross::before { content: 'Koszt brutto'; }\r\n\r\n  .grid3mixed {\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & img {\r\n      width: auto;\r\n      height: 70vh;\r\n      aspect-ratio: unset;\r\n    }\r\n  }\r\n\r\n  .controls {\r\n    gap: 0;\r\n\r\n    & > * { \r\n        font-weight: normal;\r\n        text-transform: none;\r\n        width: min-content;\r\n    }\r\n  }\r\n\r\n  #top > span { margin: auto; }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\n\r\nconst spreadNinput = document.getElementById('spreadN');\r\nconst spreadMinput = document.getElementById('spreadM');\r\nconst spreadWinput = document.getElementById('spreadW');\r\nconst closeInput = document.getElementById('closeCap');\r\nconst twistInput = document.getElementById('twist');\r\nspreadWinput.checked = false;\r\ncloseInput.checked = false;\r\ntwistInput.checked = false;\r\n\r\nconst resetBtn = document.getElementById('resetBtn');\r\nconst clickedBtn = document.getElementById('clickedBtn');\r\n\r\nlet spreadFactor = 0.;\r\n\/\/let spreadDir = 0.;\r\nlet closeFactor = 0.;\r\nlet closeDir = 0.;\r\nlet twistFactor = 0.;\r\nlet twistDir = 0.;\r\n\r\nlet spreadState = 0;\r\nlet spreadGoal = 0;\r\nlet spreadDir = 0;\r\n\r\nconst clamp = (val, min, max) => Math.min(Math.max(val, min), max);\r\n\r\nconst controls = document.getElementsByClassName('controls');\r\n\/\/controls[0].style.left += 50 + 'px';\r\nlet controlsLeft = 0.;\r\n\r\nconst spreadNBtn = document.getElementById('spreadNBtn');\r\nconst spreadMBtn = document.getElementById('spreadMBtn');\r\nconst spreadWBtn = document.getElementById('spreadWBtn');\r\nconst closeBtn = document.getElementById('closeBtn');\r\nconst twistBtn = document.getElementById('twistBtn');\r\n\r\nconst glWrapper = document.getElementById('glWrapper');\r\nlet glRect = glWrapper.getBoundingClientRect();\r\n\r\nconst canvas = document.getElementById('myCanvas');\r\nconst gl = canvas.getContext('webgl2');\r\n\r\nconst vertexShaderSource = `#version 300 es\r\n\r\nin vec2 a_position;\r\n\r\nvoid main() {\r\n    gl_Position = vec4(a_position, 0.0, 1.0);\r\n}\r\n`;\r\n\r\nconst fragmentShaderSource = `#version 300 es\r\n\r\nprecision highp float;\r\n\r\nuniform vec2 iResolution; \/\/ Declare as vec2 (canvas width and height)\r\nuniform vec2 iMouse;\r\nuniform float iTime;\r\nuniform vec3 iControls;\r\n\r\nout vec4 fragColor;\r\n\r\n\/\/ Shadertoy code here\r\n\r\n#define PI 3.14159265359\r\n#define HALFPI 1.570796326\r\n#define RES iResolution\r\n#define PT iMouse\r\n#define rot(a) mat2(cos(a-vec4(0,11,33,0)))\r\n#define frot(a) mat2(cos(a), -fcos(a - (PI * 0.5)), fcos(a - (PI * 0.5)), fcos(a))\r\n\r\nfloat smin(float d1, float d2, float k) {\r\n  float h = max(k - abs(d1 - d2), 0.) \/ k;\r\n  return min(d1, d2) - h * h * k * (1. \/ 4.);\r\n}\r\n\r\nfloat smax(float d1, float d2, float k) {\r\n    float h = max(k - abs(d1 - d2), 0.) \/ k;\r\n    return max(d1, d2) + h * h * k * (1. \/ 4.);\r\n}\r\n\r\nfloat fr1(float axis, float m) { \/\/ modulo via fract() for 1 axis (p.x, p.y, p.z)\r\n    float size = 2.0 * m;\r\n    return (fract((axis - m) \/ size) - 0.5) * size;\r\n}\r\n\r\nvec2 fr2(vec2 p, float m) { \/\/ modulo via fract() for 2 axes (p.xy, p.xz, p.yz) simultaneously\r\n    float size = 2.0 * m;\r\n    return (fract((p - m) \/ size) - 0.5) * size;\r\n}\r\n\r\n\/\/ fast polynomial approximation of sin(x) by creating a half-cycle peak and mirroring it vertically\r\nfloat fsin(float x) {\r\n    float t = x \/ PI;\r\n    float f = fract(t);\r\n    float wave = 4.0 * f * (1.0 - f);\r\n    float signFlip = 1.0 - 2.0 * step(0.5, fract(t * 0.5));\r\n    return wave * signFlip;\r\n}\r\n\r\n\/\/ fast polynomial approximation of cos(x) by creating a half-cycle peak and mirroring it vertically\r\nfloat fcos(float x) {\r\n    return fsin(x + HALFPI);\r\n}\r\n\r\n\/\/ fast sincos\r\nvec2 fsincos(float x) {\r\n    \/\/ Phase offset: x vector contains [x, x + PI\/2]\r\n    vec2 t = (vec2(x) + vec2(0.0, HALFPI)) \/ PI;\r\n    \r\n    vec2 f = fract(t);\r\n    vec2 wave = 4.0 * f * (1.0 - f);\r\n    \r\n    vec2 signFlip = 1.0 - 2.0 * step(vec2(0.5), fract(t * 0.5));\r\n    \r\n    return wave * signFlip;\r\n}\r\n\r\n\/\/ fast atan\r\nfloat fatan2b(float y, float x) {\r\n    float ax = abs(x);\r\n    float ay = abs(y);\r\n    \r\n    float a = min(ax, ay) \/ (max(ax, ay) + 1e-10); \/\/ Prevent div by zero\r\n    float s = a * a;\r\n    float r = ((-0.04649647 * s + 0.15931422) * s - 0.32762276) * s * a + a;\r\n    \r\n    r = ax > ay ? r : HALFPI - r;\r\n    r = x > 0. ? r : PI - r;\r\n    \r\n    float sy = y < 0. ? -1.0 : 1.; \/\/ flips y based on whether above or below 0\r\n    \r\n    return r * sy;\r\n}\r\n\r\nfloat TIME = 0.0; \r\n\r\n\/\/ 2. SURFACE DATA STRUCT\r\nstruct Surface {\r\n    float sd;       \/\/ Signed distance\r\n    int matID;      \/\/ Material Index\r\n    vec3 localPos;  \/\/ Useful for procedural texturing\/triplanar mapping\r\n};\r\n\r\nSurface opUnion(Surface a, Surface b) {\r\n    if (a.sd < b.sd) return a;\r\n    return b;\r\n}\r\n\r\n\/\/ 3. MAP FUNCTION (Has direct access to TIME)\r\nSurface map(vec3 p) {\r\n    \/\/ Example animated object using global TIME\r\n\r\n    float SPREAD = iControls.x;\r\n    float CLOSE  = iControls.y;\r\n    float TWIST  = iControls.z;\r\n\r\n    p.y += .25;\r\n    \r\n    float angleX = -PI*2.*iMouse.x\/iResolution.x;\r\n    float angleY = PI*iMouse.y\/iResolution.y;\r\n\r\n    p.xz*=rot(angleX);\r\n    p.yz*=rot(angleY);\r\n\r\n    \/\/vec3 p1 = p; \/\/ - vec3(fsin(TIME), 0.0, 0.0);\r\n    float bend = .75 + .25*(1. - SPREAD); \/\/ STRETCH\r\n    float deg = PI * 1.\/180.;\r\n\r\n    vec3 p0 = p;\r\n\r\n    float hanger = 1.;\r\n\r\n    float rod = p.y;\r\n\r\n    p.y += 11.95;\r\n\r\n    float arch = length(p.xy) - 12.;\r\n\r\n    p = p0;\r\n\r\n    rod = mix(rod, arch, SPREAD); \/\/ abs(fsin(TIME\/2.)));\r\n\r\n    p.x = -abs(p.x);\r\n\r\n    p.x += 1.107; \/\/ offset to the contact of hanger with circle\r\n\r\n    p.xy *= rot(18.5*deg*bend); \/\/ turn by 20deg\r\n\r\n    p.x += .065;\r\n\r\n    vec3 p1 = p;\r\n\r\n    p.y += .04;\r\n\r\n    float circle = mix(length(p.xy), abs(p.x) - p.y\/3., step(-p.y, 0.)) - .075;\r\n\r\n    p = p1;\r\n\r\n    p.x += .065;\r\n\r\n    p.xy *= rot(24.*deg*bend); \/\/ turn by 20deg\r\n\r\n    p.x += 0.4115;\r\n\r\n    float arms = p.y;\r\n\r\n    float cutArms = p.x;\r\n\r\n    float nub = max(length(p.yz) - .027, abs(p.x) - .005);\r\n\r\n    hanger = min(hanger, rod);\r\n\r\n    hanger = min(hanger, arms);\r\n\r\n    hanger = smax(hanger, -circle, .025);\r\n\r\n    hanger = abs(hanger) - .02375;\r\n\r\n    float hContour = hanger;\r\n\r\n    hanger = smax(hanger, abs(p.z) - .02375, .025);\r\n\r\n    hanger = max(hanger, -cutArms);\r\n\r\n    p.yz *= rot((PI\/3. - p.x)*TWIST); \/\/ TWIST\r\n\r\n    vec3 p2 = p;\r\n\r\n    p.x \/= 2.5;\r\n\r\n    float hookW = p.x > 0. ? .08 : .08 - p.x\/10.;\r\n\r\n    float hook = smax(abs(p.y) - hookW, p.x - .08, .08); \r\n\r\n    \r\n    p = p2;\r\n    \r\n    float hookTrim = hook;\r\n\r\n    p.y = abs(p.y);\r\n\r\n    float grooves = p.x > 0. ? length(p.xy + vec2(0., .8)) - .88 : p.y - .08 + p.x\/25.;\r\n\r\n    grooves = abs(grooves) - .02;\r\n\r\n    grooves = max(grooves, hookTrim);\r\n\r\n    grooves = max(grooves, p.z);\r\n\r\n    grooves = smax(grooves, -(p.x + .16), .01);\r\n\r\n    grooves = smax(grooves, p.x - .175, .01);\r\n\r\n    p.x += .09;\r\n\r\n    for (float i = 0.; i < 5.; i++) {\r\n        p.x -= .07*i;\r\n        grooves = smax(grooves, -(abs(p.x) - .005), .01);\r\n    }\r\n\r\n    p = p2;\r\n\r\n    grooves = smax(grooves, -(abs(p.x - .05) - .005), .01);\r\n\r\n    grooves = smax(grooves, -p.z - .015, .0075);\r\n\r\n\r\n\r\n\r\n\r\n\r\n    p = p2;\r\n\r\n    float capOff = .08 - .155*iControls.y;\r\n\r\n    p.x += .175 - capOff;\r\n\r\n    float cap = abs(p.y) - .1 + p.x\/11.;\r\n    cap = smax(cap, abs(p.z) - .03, .03);\r\n    cap = abs(cap) - .005;\r\n    cap \/= 1.2; \/\/ geometry correction\r\n    cap = max(cap, -p.x - .09);\r\n    float capArc = length(p.xy) + p.x*2.5 - .3;\r\n    cap = max(cap, capArc);\r\n\r\n    float capCarve = abs(abs(p.y) - .04);\r\n    capCarve = max(capCarve, -p.x + .03) - .002;\r\n    capCarve = max(capCarve, -(abs(p.z) - .027));\r\n    cap = smax(cap, -capCarve, .01)\/2.;\r\n    \/\/cap = min(cap, capCarve);\r\n\r\n    p.x += 0.175 + capOff;\r\n\r\n    hook = max(hook, -p.x - .01); \/\/ slight overlap at the seam\r\n\r\n    float teeth = p.y;\r\n    float teethRim = p.x - .15;\r\n    p.x -= .03;\r\n\r\n    float tooth = max(-p.x, mix(p.x, p.y, .72));\r\n    tooth = max(tooth, -p.y);\r\n    teeth = smin(teeth, tooth - .015, .01);\r\n\r\n    p.x -= .06;\r\n\r\n    tooth = smax(-p.x, mix(p.x, p.y, .72), .01);\r\n    teeth = smin(teeth, tooth - .015, .005);\r\n\r\n    teeth = smax(teeth, teethRim, .02);\r\n\r\n    p.x += .09;\r\n\r\n    hook = max(hook, -teeth);\r\n\r\n    float head = p.x;\r\n    float head1 = head;\r\n\r\n    p.x += .10;\r\n\r\n    vec3 p3 = p;\r\n\r\n    float headHole = length(p.xy) - .09;\r\n    float headTrim = p.x < 0. ? length(p.xy) - .12 : abs(p.y) - .12;\r\n    head1 = smax(head1, headTrim, .04);\r\n    head1 = max(head1, -headHole);\r\n    float ol = p.x < 0. ? .01 : 0.;\r\n    head1 = max(head1, -p.y - ol); \/\/ slight overlap at the seam\r\n\r\n    p = p3;\r\n\r\n    vec3 p4 = p;\r\n\r\n    p.x += .09;\r\n    p.y += p.x\/8.*(1. - min(iControls.y*3., 1.)); \/\/ CLOSE TEETH;\r\n    p.x -= .09;\r\n\r\n    float head2 = head;\r\n\r\n    headHole = length(p.xy) - .09;\r\n\r\n    headTrim = p.x < 0. ? length(p.xy) - .12 : abs(p.y) - .12;\r\n    head2 = smax(head2, headTrim, .04);\r\n    head2 = max(head2, p.y);\r\n\r\n    p.x -= .10;\r\n        \r\n    teeth = max(-p.x - .015, p.y);\r\n    teethRim = smax(p.x - .14, -p.y - .09, .02);\r\n\r\n    p.x -= .035;\r\n    \r\n    tooth = smax(-p.x, mix(p.x, p.y, .72), .01);\r\n    tooth = max(tooth, -p.y);\r\n    teeth = smin(teeth, tooth - .015, .01);\r\n\r\n    p.x -= .06;\r\n\r\n    tooth = smax(-p.x, mix(p.x, p.y, .72), .01);\r\n    teeth = smin(teeth, tooth - .015, .01);\r\n   \r\n    \r\n    teeth = smax(teeth, teethRim, .02);\r\n        \r\n    head2 = min(head2, teeth);\r\n    head2 = max(head2, -headHole);\r\n\r\n    head = min(head1, head2);\r\n    hook = min(hook, head);\r\n\r\n    hook = smax(hook, p.z - .015, .004);\r\n\r\n    p.x -= .09;\r\n\r\n    float hRim = max(-p.x, p.z);\r\n\r\n    hRim = max(hRim, -(length(p.xy + vec2(.03,0.)) - .065));\r\n\r\n    hook = max(hook, smax(-hRim, -p.z - .015, .01));\r\n\r\n    hook = min(hook, grooves);\r\n\r\n    hanger = min(hanger, hook);\r\n\r\n    hanger = min(hanger, nub);\r\n\r\n    float cube, cubeHole = 1.;\r\n\r\n    for (float i = -1.; i < 2.; i++) {\r\n        p = p0;\r\n        p.x += 1.02 * i;\r\n        \r\n        float cOff = i == 0. ? .05 : .006;\r\n        p.y -= cOff * SPREAD;\r\n\r\n        if (i != 0.) p.xy *= rot(-0.125 * i * SPREAD);\r\n\r\n        cubeHole = min(cubeHole, length(p.xy) - .015);\r\n        cube = smax(abs(p.x) - .035, hContour, .01);\r\n        cube = max(cube, max(p.z - .02375, -p.z - .035));\r\n        \r\n        hanger = min(hanger, cube);\r\n    }\r\n    \r\n    cubeHole = max(cubeHole, p.z + .02375);\r\n    hanger = max(hanger, -cubeHole); \r\n\r\n    Surface shape1 = Surface(hanger, 1, p);\r\n\r\n    Surface shape2 = Surface(cap, 2, p);\r\n\r\n    return opUnion(shape1, shape2);\r\n}\r\n\r\nfloat rez = 1e-3;\r\n\r\nvec3 norm(vec3 p) {\r\n    float h = rez;\r\n    vec2 k = vec2(-1.0, 1.0);\r\n    return normalize(\r\n        k.xyy * map(p + k.xyy * h).sd +\r\n        k.yxy * map(p + k.yxy * h).sd +\r\n        k.yyx * map(p + k.yyx * h).sd +\r\n        k.xxx * map(p + k.xxx * h).sd\r\n    );\r\n}\r\n\r\nfloat maxD = 5.;\r\n\r\nSurface raymarch(vec3 ro, vec3 rd) {\r\n    float dd = 0.0;\r\n    Surface hit = Surface(maxD, 0, vec3(0.0)); \/\/ 0.0 is the default background, only use you are using materials, otherwise just pass maxD\r\n    \r\n    for (float i = 0.0; i < 100.0; i++) {\r\n        vec3 currentSamplePos = ro + rd * dd;\r\n        Surface res = map(currentSamplePos);\r\n        \r\n        if (res.sd < rez) {\r\n            hit = res; \/\/ only use if struct includes material id\r\n            hit.sd = dd; \/\/ Store total ray distance traveled\r\n            return hit;\r\n        }\r\n        if (dd > maxD) break;\r\n        \r\n        dd += res.sd;\r\n    }\r\n    return hit;\r\n}\r\n\r\nvec3 render(vec3 ro, vec3 rd) {\r\n    Surface hit = raymarch(ro, rd);\r\n    vec3 col = vec3(0.05);\r\n\r\n    vec3 hues[3] = vec3[](\r\n        vec3(1,0,0),\r\n        vec3(1),\r\n        vec3(0)\r\n    );\r\n\r\n    if (hit.sd < maxD) {\r\n        vec3 surfaceHitPos = ro + rd * hit.sd;\r\n        vec3 n = norm(surfaceHitPos);\r\n        \r\n        vec3 l1 = normalize(vec3(-1.0, 3.0, -5.0) - surfaceHitPos);\r\n        float diffuse = clamp(dot(l1, n), 0.0, 1.0);\r\n        \r\n        float spec = pow(clamp(dot(reflect(rd, n), l1), 0.0, 1.0), 8.0);\r\n        float ambient = 0.15; \/\/ Soft ambient shadow base instead of subtracting 0.5\r\n\r\n        vec3 matColor = hues[hit.matID]; \/\/ Clean int indexing directly!\r\n        col = matColor * (diffuse + ambient) + vec3(spec);\r\n    }\r\n    else { \r\n        col = vec3(0,.5*(1. - rd.y),1); \/\/ Background ID\r\n    }\r\n\r\n    return col;\r\n}\r\n\r\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\r\n  vec2 uv = (fragCoord.xy - .5 * RES.xy) \/ RES.y;\r\n\r\n  TIME = iTime;\r\n\r\n  float camR = 3.;  \/\/ Rotate around the x- and y-axis based on mouse position\r\n  vec3 target = vec3(0.0); \/\/ Center of the cube\r\n\r\n  vec3 ro = vec3(0,0,-1.)*camR;\r\n\r\n  \/\/ Calculate the ray direction\r\n\r\n  vec3 fwd = normalize(target - ro), \/\/ fwd direction\r\n      right = normalize(cross(vec3(0., 1., 0.), fwd)), \/\/ Right direction\r\n      up = cross(fwd, right); \/\/ Up direction\r\n\r\n  vec3 col;\r\n  vec3 rd;\r\n\r\n\r\n  rd = normalize(fwd + uv.x * right + uv.y * up); \/\/ Ray direction\r\n  col = render(ro, rd); \/\/ max(col, render(ro, rd));\r\n\r\n\r\n  fragColor = vec4(col, 1);\r\n}\r\n\r\n\/\/ Shadertoy code ends here\r\n\r\nvoid main() {\r\n    mainImage(fragColor, gl_FragCoord.xy);\r\n}\r\n\r\n`;\r\n\r\nconst vertexShader = gl.createShader(gl.VERTEX_SHADER);\r\ngl.shaderSource(vertexShader, vertexShaderSource);\r\ngl.compileShader(vertexShader);  \r\n\r\n\r\nconst fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\r\ngl.shaderSource(fragmentShader, fragmentShaderSource);\r\ngl.compileShader(fragmentShader);\r\n\r\nconst program = gl.createProgram();\r\ngl.attachShader(program, vertexShader);\r\ngl.attachShader(program, fragmentShader);\r\ngl.linkProgram(program);\r\ngl.useProgram(program);  \r\n\r\n\r\nconst positions = [\r\n    -1.0, -1.0,\r\n    1.0, -1.0,\r\n    -1.0, 1.0,\r\n    1.0, 1.0,\r\n];\r\n\r\nconst positionBuffer = gl.createBuffer();\r\ngl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\r\ngl.bufferData(gl.ARRAY_BUFFER, new  \r\n Float32Array(positions), gl.STATIC_DRAW);\r\n\r\nconst positionAttributeLocation = gl.getAttribLocation(program, 'a_position');\r\ngl.enableVertexAttribArray(positionAttributeLocation);  \r\n\r\ngl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);  \r\n\r\n\r\nconst iResolutionLocation = gl.getUniformLocation(program, 'iResolution');\r\nconst iMouseLocation = gl.getUniformLocation(program, 'iMouse');\r\nconst iTimeLocation = gl.getUniformLocation(program, 'iTime');\r\nconst iControlsLocation = gl.getUniformLocation(program, 'iControls')\r\n\r\nconst resizeObserver = new ResizeObserver(entries => {\r\n    for (let entry of entries) {\r\n        \/\/ Get the layout size from the observer\r\n        const width = entry.contentRect.width;\r\n        const height = entry.contentRect.height;\r\n\r\n        \/\/ Account for high-DPI (Retina) screens for sharp rendering\r\n        const dpr = window.devicePixelRatio || 1;\r\n        const displayWidth = Math.round(width * dpr);\r\n        const displayHeight = Math.round(height * dpr);\r\n\r\n        \/\/ GUARD: Only update if the pixel size actually changed\r\n        \/\/ This prevents infinite loops and layout thrashing\r\n        if (canvas.width !== displayWidth || canvas.height !== displayHeight) {\r\n            canvas.width = displayWidth;\r\n            canvas.height = displayHeight;\r\n        }\r\n    }\r\n});\r\n\r\nresizeObserver.observe(glWrapper);\r\n\r\nlet isMouseDown = false;\r\nlet mouseX = 0;\r\nlet mouseY = 0;\r\n\r\nlet dragStartX = 0;\r\nlet deltaX = 0;\r\nlet totalX = 0; \/\/ The locked-in accumulated distance from previous drags\r\n\r\nlet dragStartY = 0;\r\nlet deltaY = 0;\r\nlet totalY = 0;\r\n\r\nconst rect = canvas.getBoundingClientRect();\r\n\r\ncanvas.addEventListener('mousedown', (event) => {\r\n    isMouseDown = true;\r\n\r\n    if (!clickedBtn.classList.contains('yes')) clickedBtn.classList.add('yes');\r\n    \r\n    \/\/ Snapshot the EXACT canvas-relative pixel coordinate where drag began\r\n    dragStartX = event.clientX - rect.left;\r\n    deltaX = 0; \/\/ Reset active delta for this new drag\r\n    dragStartY = event.clientY - rect.top;\r\n    deltaY = 0; \/\/ Reset active delta for this new drag\r\n\r\n    \/\/console.log('LMB clicked at X:', dragStartX, '| Previous Total:', totalX);    \r\n});\r\n\r\ncanvas.addEventListener('mousemove', (event) => {\r\n    const x = event.clientX - rect.left;\r\n    const y = event.clientY - rect.top;\r\n\r\n    if (isMouseDown) {\r\n        mouseX = x;\r\n        mouseY = y;\r\n        \r\n        \/\/ Active delta is strictly current X minus drag start X\r\n        deltaX = x - dragStartX;\r\n        deltaY = y - dragStartY;\r\n        \r\n        const currentX = totalX + deltaX;\r\n        const currentY = totalY + deltaY;\r\n        \/\/console.log('Mouse at:', x, '| Active Delta:', deltaX, '| Combined:', currentX);\r\n\r\n        \/\/ Send accumulated total + active delta straight to GLSL\r\n        gl.uniform2f(iMouseLocation, currentX, currentY);\r\n    }\r\n});\r\n\r\n\/\/ IMPORTANT: Use 'window' so releasing outside the canvas still triggers mouseup!\r\nwindow.addEventListener('mouseup', (event) => {\r\n    if (!isMouseDown) return;\r\n\r\n    \/\/ Lock the completed delta into totalX permanently\r\n    totalX += deltaX;\r\n    deltaX = 0; \/\/ Reset delta so it's ready for next time\r\n    totalY += deltaY;\r\n    deltaY = 0; \/\/ Reset delta so it's ready for next time\r\n\r\n    \/\/console.log('LMB released. Locked-in Total:', totalX);\r\n    isMouseDown = false;\r\n});\r\n\r\nspreadNBtn.addEventListener('click', (event) => {\r\n  spreadGoal = -1.5;\r\n  spreadDir = spreadGoal > spreadState ? 1 : -1;\r\n})\r\n\r\nspreadMBtn.addEventListener('click', (event) => {\r\n  spreadGoal = 0;\r\n  spreadDir = spreadGoal > spreadState ? 1 : -1;\r\n})\r\n\r\nspreadWBtn.addEventListener('click', (event) => {\r\n  spreadGoal = 1;\r\n  spreadDir = spreadGoal > spreadState ? 1 : -1;\r\n})\r\n\r\ncloseBtn.addEventListener('click', (event) => {\r\n  closeDir = closeInput.checked === false ? 1. : -1.; \r\n})\r\n\r\ntwistBtn.addEventListener('click', (event) => {\r\n  twistDir = twistInput.checked === false ? 1. : -1.; \r\n})\r\n\r\nresetBtn.addEventListener('click', (event) => { \/\/ resetting accumulated mouse coords\r\n    dragStartX = 0;\r\n    deltaX = 0;\r\n    totalX = 0; \/\/ The locked-in accumulated distance from previous drags\r\n\r\n    dragStartY = 0;\r\n    deltaY = 0;\r\n    totalY = 0;\r\n\r\n    const currentX = totalX + deltaX;\r\n    const currentY = totalY + deltaY;\r\n\r\n    closeFactor = 0;\r\n    closeDir = -1;\r\n    twistFactor = 0;\r\n    twistDir = -1;\r\n    closeInput.checked = false;\r\n    twistInput.checked = false;\r\n    \r\n    spreadState = 0;\r\n    spreadGoal = 0;\r\n    spreadDir = spreadGoal > spreadState ? 1 : -1;\r\n\r\n    spreadMinput.checked = true;\r\n\r\n    gl.uniform2f(iMouseLocation, currentX, currentY);\r\n})\r\n\r\nfunction render() {\r\n    gl.viewport(0, 0, canvas.width, canvas.height);\r\n    gl.clearColor(0, 0, 0, 1);\r\n    gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n    \/\/spreadFactor = clamp(spreadFactor + spreadDir\/25, -1, 1);\r\n    if (spreadState != spreadGoal) spreadState += spreadDir\/16;\r\n    closeFactor = clamp(closeFactor + closeDir\/25, 0, 1);\r\n    twistFactor = clamp(twistFactor + twistDir\/25, 0, 1);\r\n\r\n    gl.uniform2f(iResolutionLocation, canvas.width, canvas.height);\r\n    gl.uniform1f(iTimeLocation, performance.now() * 0.001);\r\n    gl.uniform3f(iControlsLocation, spreadState, closeFactor, twistFactor);\r\n\r\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n\r\n    requestAnimationFrame(render);\r\n}\r\n\r\nrender();\r\n\r\n<\/script>","protected":false},"excerpt":{"rendered":"<p>Praktyczne akcesoria do sklep\u00f3w i miejsc pracy Wieszak na reklam\u00f3wki Praktyczny wieszak na rolki z reklam\u00f3wkami, r\u0119cznikami papierowymi lub innymi produktami odwijanymi z rolek. Sprzeda\u017c w opakowaniach 20, 40 lub 100 sztuk. Ilo\u015b\u0107 w opakowaniu Cena netto \/ szt Warto\u015b\u0107 &hellip; <a href=\"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":44,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-3381","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\" \/>\n<meta property=\"og:description\" content=\"Praktyczne akcesoria do sklep\u00f3w i miejsc pracy Wieszak na reklam\u00f3wki Praktyczny wieszak na rolki z reklam\u00f3wkami, r\u0119cznikami papierowymi lub innymi produktami odwijanymi z rolek. Sprzeda\u017c w opakowaniach 20, 40 lub 100 sztuk. Ilo\u015b\u0107 w opakowaniu Cena netto \/ szt Warto\u015b\u0107 &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/\" \/>\n<meta property=\"og:site_name\" content=\"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-02T11:15:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg\" \/>\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=\"7 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/\",\"url\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/\",\"name\":\"Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/komplast.pl\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/wieszak_10.jpg\",\"datePublished\":\"2026-10-21T14:23:27+00:00\",\"dateModified\":\"2026-11-02T11:15:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/#primaryimage\",\"url\":\"https:\\\/\\\/komplast.pl\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/wieszak_10.jpg\",\"contentUrl\":\"https:\\\/\\\/komplast.pl\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/wieszak_10.jpg\",\"width\":2048,\"height\":1537},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/index.php\\\/oferta\\\/wieszak-na-reklamowki\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/komplast.pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OFERTA\",\"item\":\"https:\\\/\\\/komplast.pl\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wieszak na reklam\u00f3wki\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/#website\",\"url\":\"https:\\\/\\\/komplast.pl\\\/\",\"name\":\"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\",\"description\":\"Zapinki do pomidor\u00f3w oraz inne detale z tworzyw sztucznych\",\"publisher\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/komplast.pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/#organization\",\"name\":\"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\",\"url\":\"https:\\\/\\\/komplast.pl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/komplast.pl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/komplast.pl\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/Klogo.svg\",\"contentUrl\":\"https:\\\/\\\/komplast.pl\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/Klogo.svg\",\"width\":1,\"height\":1,\"caption\":\"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST\"},\"image\":{\"@id\":\"https:\\\/\\\/komplast.pl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","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:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/","og_locale":"pl_PL","og_type":"article","og_title":"Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","og_description":"Praktyczne akcesoria do sklep\u00f3w i miejsc pracy Wieszak na reklam\u00f3wki Praktyczny wieszak na rolki z reklam\u00f3wkami, r\u0119cznikami papierowymi lub innymi produktami odwijanymi z rolek. Sprzeda\u017c w opakowaniach 20, 40 lub 100 sztuk. Ilo\u015b\u0107 w opakowaniu Cena netto \/ szt Warto\u015b\u0107 &hellip; Continue reading &rarr;","og_url":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/","og_site_name":"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","article_modified_time":"2026-11-02T11:15:34+00:00","og_image":[{"url":"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Szacowany czas czytania":"7 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/","url":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/","name":"Wieszak na reklam\u00f3wki | Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","isPartOf":{"@id":"https:\/\/komplast.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/#primaryimage"},"image":{"@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/#primaryimage"},"thumbnailUrl":"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg","datePublished":"2026-10-21T14:23:27+00:00","dateModified":"2026-11-02T11:15:34+00:00","breadcrumb":{"@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/#primaryimage","url":"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg","contentUrl":"https:\/\/komplast.pl\/wp-content\/uploads\/2026\/10\/wieszak_10.jpg","width":2048,"height":1537},{"@type":"BreadcrumbList","@id":"https:\/\/komplast.pl\/index.php\/oferta\/wieszak-na-reklamowki\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/komplast.pl\/"},{"@type":"ListItem","position":2,"name":"OFERTA","item":"https:\/\/komplast.pl\/"},{"@type":"ListItem","position":3,"name":"Wieszak na reklam\u00f3wki"}]},{"@type":"WebSite","@id":"https:\/\/komplast.pl\/#website","url":"https:\/\/komplast.pl\/","name":"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","description":"Zapinki do pomidor\u00f3w oraz inne detale z tworzyw sztucznych","publisher":{"@id":"https:\/\/komplast.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/komplast.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/komplast.pl\/#organization","name":"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST","url":"https:\/\/komplast.pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/komplast.pl\/#\/schema\/logo\/image\/","url":"https:\/\/komplast.pl\/wp-content\/uploads\/2019\/03\/Klogo.svg","contentUrl":"https:\/\/komplast.pl\/wp-content\/uploads\/2019\/03\/Klogo.svg","width":1,"height":1,"caption":"Przetw\u00f3rstwo Tworzyw Sztucznych KOMPLAST"},"image":{"@id":"https:\/\/komplast.pl\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/pages\/3381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/comments?post=3381"}],"version-history":[{"count":38,"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/pages\/3381\/revisions"}],"predecessor-version":[{"id":3463,"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/pages\/3381\/revisions\/3463"}],"up":[{"embeddable":true,"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/pages\/44"}],"wp:attachment":[{"href":"https:\/\/komplast.pl\/index.php\/wp-json\/wp\/v2\/media?parent=3381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}