{"id":7758,"date":"2026-09-17T10:20:25","date_gmt":"2026-09-17T08:20:25","guid":{"rendered":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/?page_id=7758"},"modified":"2026-09-17T11:32:51","modified_gmt":"2026-09-17T09:32:51","slug":"prestec-jocs","status":"publish","type":"page","link":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/prestec-jocs\/","title":{"rendered":"Pr\u00e9stec jocs"},"content":{"rendered":"\n<!-- CATALEG DE JOCS - Servei Educatiu Baix Llobregat II -->\n<!-- Enganxa TOT aquest contingut dins UN bloc \"HTML personalitzat\" de WordPress -->\n\n<style>\n.bll5-app{\n  --bg:#F5FAF9;\n  --surface:#FFFFFF;\n  --surface2:#E7F3F1;\n  --border:rgba(0,0,0,0.08);\n  --border2:rgba(0,0,0,0.13);\n  --text:#173B39;\n  --text2:#5F7774;\n  --text3:#8BA09D;\n\n  --accent:#087F7A;\n  --accent-light:#E2F4F2;\n\n  --radius:14px;\n  --shadow:\n    0 1px 3px rgba(0,0,0,0.06),\n    0 4px 12px rgba(0,0,0,0.04);\n\n  font-family:Arial,Helvetica,sans-serif;\n  color:var(--text);\n  background:var(--bg);\n  max-width:1200px;\n  margin:0 auto;\n  padding:20px;\n  box-sizing:border-box;\n}\n\n.bll5-app *,\n.bll5-app *::before,\n.bll5-app *::after{\n  box-sizing:border-box;\n}\n\n\/* =========================================================\n   HERO\n   ========================================================= *\/\n\n.bll5-app .hero{\n  background:linear-gradient(135deg,#087F7A,#159A94);\n  color:white;\n  border-radius:22px;\n  padding:34px 32px;\n  margin-bottom:25px;\n  box-shadow:0 8px 25px rgba(8,127,122,0.18);\n}\n\n.bll5-app .hero-badge{\n  display:inline-block;\n  background:rgba(255,255,255,0.16);\n  border:1px solid rgba(255,255,255,0.22);\n  padding:6px 12px;\n  border-radius:30px;\n  font-size:13px;\n  margin-bottom:12px;\n}\n\n.bll5-app .hero h1{\n  margin:0 0 10px;\n  font-size:32px;\n  line-height:1.15;\n  font-weight:700;\n}\n\n.bll5-app .hero p{\n  margin:0;\n  max-width:760px;\n  font-size:16px;\n  line-height:1.55;\n  opacity:.95;\n}\n\n\/* =========================================================\n   CERCA\n   ========================================================= *\/\n\n.bll5-app .search-wrap{\n  position:relative;\n  margin-bottom:18px;\n}\n\n.bll5-app #q{\n  width:100%;\n  padding:15px 18px;\n  border:1px solid var(--border2);\n  border-radius:13px;\n  background:white;\n  color:var(--text);\n  font-size:16px;\n  outline:none;\n  transition:.2s;\n}\n\n.bll5-app #q:focus{\n  border-color:var(--accent);\n  box-shadow:0 0 0 3px rgba(8,127,122,.12);\n}\n\n.bll5-app #q::placeholder{\n  color:var(--text3);\n}\n\n\/* =========================================================\n   FILTRES\n   ========================================================= *\/\n\n.bll5-app .tags{\n  display:flex;\n  flex-wrap:wrap;\n  gap:9px;\n  margin-bottom:28px;\n}\n\n.bll5-app .tag{\n  border:1px solid var(--border2);\n  background:white;\n  color:var(--text2);\n  padding:9px 15px;\n  border-radius:30px;\n  cursor:pointer;\n  font-size:14px;\n  transition:.2s;\n}\n\n.bll5-app .tag:hover{\n  border-color:var(--accent);\n  color:var(--accent);\n}\n\n.bll5-app .tag.active{\n  background:var(--accent);\n  border-color:var(--accent);\n  color:white;\n}\n\n\/* =========================================================\n   SECCIONS\n   ========================================================= *\/\n\n.bll5-app .category-section{\n  margin-bottom:32px;\n}\n\n.bll5-app .category-title{\n  display:flex;\n  align-items:center;\n  gap:12px;\n  margin-bottom:15px;\n}\n\n.bll5-app .category-icon{\n  width:46px;\n  height:46px;\n  border-radius:13px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  flex:none;\n}\n\n.bll5-app .category-icon svg{\n  width:25px;\n  height:25px;\n}\n\n.bll5-app .category-title h2{\n  margin:0;\n  font-size:21px;\n  line-height:1.2;\n}\n\n.bll5-app .category-title p{\n  margin:3px 0 0;\n  color:var(--text2);\n  font-size:13px;\n}\n\n.bll5-app .section-count{\n  margin-left:auto;\n  padding:5px 10px;\n  border-radius:20px;\n  font-size:12px;\n  font-weight:600;\n  white-space:nowrap;\n}\n\n\/* =========================================================\n   COLORS DELS CICLES\n   ========================================================= *\/\n\n.bll5-app .cat-inf .category-icon{\n  background:#F4E9F7;\n}\n\n.bll5-app .cat-inf .category-icon svg{\n  stroke:#8A4F9F;\n}\n\n.bll5-app .cat-ci .category-icon{\n  background:#E8F3FB;\n}\n\n.bll5-app .cat-ci .category-icon svg{\n  stroke:#2878A8;\n}\n\n.bll5-app .cat-cm .category-icon{\n  background:#E8F4ED;\n}\n\n.bll5-app .cat-cm .category-icon svg{\n  stroke:#39805A;\n}\n\n.bll5-app .cat-cs .category-icon{\n  background:#FFF0DD;\n}\n\n.bll5-app .cat-cs .category-icon svg{\n  stroke:#A86816;\n}\n\n.bll5-app .cat-grans .category-icon{\n  background:#F2EAF8;\n}\n\n.bll5-app .cat-grans .category-icon svg{\n  stroke:#734B91;\n}\n\n.bll5-app .cat-sense .category-icon{\n  background:#F0F0F0;\n}\n\n.bll5-app .cat-sense .category-icon svg{\n  stroke:#666666;\n}\n\n\/* =========================================================\n   MATERIALS\n   ========================================================= *\/\n\n.bll5-app .items{\n  display:grid;\n  grid-template-columns:repeat(auto-fill,minmax(230px,1fr));\n  gap:12px;\n}\n\n.bll5-app .item{\n  position:relative;\n  background:var(--surface);\n  border:1px solid var(--border);\n  border-radius:var(--radius);\n  padding:17px 42px 17px 18px;\n  min-height:88px;\n  cursor:pointer;\n  box-shadow:var(--shadow);\n  transition:\n    transform .18s ease,\n    box-shadow .18s ease,\n    border-color .18s ease;\n}\n\n.bll5-app .item:hover{\n  transform:translateY(-2px);\n  border-color:rgba(8,127,122,.28);\n  box-shadow:0 5px 18px rgba(0,0,0,.08);\n}\n\n.bll5-app .item-name{\n  font-size:15px;\n  line-height:1.4;\n  font-weight:600;\n  margin-bottom:6px;\n}\n\n.bll5-app .item-category{\n  color:var(--text2);\n  font-size:12px;\n  line-height:1.4;\n}\n\n.bll5-app .item::after{\n  content:\"\u2192\";\n  position:absolute;\n  right:15px;\n  top:50%;\n  transform:translateY(-50%);\n  color:var(--accent);\n  font-size:18px;\n  opacity:.65;\n}\n\n\/* =========================================================\n   SENSE RESULTATS\n   ========================================================= *\/\n\n.bll5-app .no-results{\n  display:none;\n  background:white;\n  border:1px dashed var(--border2);\n  border-radius:14px;\n  padding:25px;\n  text-align:center;\n  color:var(--text2);\n  margin-bottom:25px;\n}\n\n\/* =========================================================\n   MODAL\n   ========================================================= *\/\n\n.bll5-app .modal{\n  display:none;\n  position:fixed;\n  inset:0;\n  z-index:999999;\n  background:rgba(0,0,0,.48);\n  padding:20px;\n  overflow-y:auto;\n}\n\n.bll5-app .modal.open{\n  display:flex;\n  align-items:center;\n  justify-content:center;\n}\n\n.bll5-app .modal-box{\n  width:100%;\n  max-width:900px;\n  background:white;\n  border-radius:20px;\n  padding:28px;\n  position:relative;\n  box-shadow:0 20px 60px rgba(0,0,0,.25);\n  max-height:90vh;\n  overflow-y:auto;\n}\n\n.bll5-app .modal-close{\n  position:absolute;\n  right:18px;\n  top:16px;\n  width:36px;\n  height:36px;\n  border:0;\n  border-radius:50%;\n  background:#EEF4F3;\n  color:var(--text);\n  font-size:22px;\n  cursor:pointer;\n}\n\n.bll5-app .modal-title{\n  margin:0 40px 5px 0;\n  font-size:24px;\n  color:var(--text);\n}\n\n.bll5-app .modal-subtitle{\n  margin:0 0 22px;\n  color:var(--text2);\n  font-size:14px;\n}\n\n\/* =========================================================\n   FORMULARI\n   ========================================================= *\/\n\n.bll5-app .form-grid{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:14px;\n}\n\n.bll5-app .form-group{\n  margin-bottom:14px;\n}\n\n.bll5-app .form-group.full{\n  grid-column:1 \/ -1;\n}\n\n.bll5-app label{\n  display:block;\n  font-size:13px;\n  font-weight:600;\n  margin-bottom:6px;\n  color:var(--text);\n}\n\n.bll5-app input,\n.bll5-app textarea{\n  width:100%;\n  padding:11px 12px;\n  border:1px solid var(--border2);\n  border-radius:9px;\n  font-family:inherit;\n  font-size:14px;\n  color:var(--text);\n  background:white;\n  outline:none;\n}\n\n.bll5-app input:focus,\n.bll5-app textarea:focus{\n  border-color:var(--accent);\n  box-shadow:0 0 0 3px rgba(8,127,122,.1);\n}\n\n.bll5-app textarea{\n  min-height:90px;\n  resize:vertical;\n}\n\n.bll5-app .form-actions{\n  display:flex;\n  justify-content:flex-end;\n  gap:10px;\n  margin-top:8px;\n}\n\n.bll5-app .btn{\n  border:0;\n  border-radius:10px;\n  padding:11px 18px;\n  cursor:pointer;\n  font-size:14px;\n  font-weight:600;\n}\n\n.bll5-app .btn-secondary{\n  background:#EEF4F3;\n  color:var(--text);\n}\n\n.bll5-app .btn-primary{\n  background:var(--accent);\n  color:white;\n}\n\n.bll5-app .btn-primary:hover{\n  background:#066B67;\n}\n\n\/* =========================================================\n   INFORMACI\u00d3\n   ========================================================= *\/\n\n.bll5-app .info-actions{\n  display:flex;\n  gap:10px;\n  margin-top:20px;\n  padding-top:18px;\n  border-top:1px solid var(--border);\n}\n\n.bll5-app .info-btn{\n  border:1px solid rgba(8,127,122,.22);\n  background:var(--accent-light);\n  color:var(--accent);\n  border-radius:10px;\n  padding:10px 15px;\n  cursor:pointer;\n  font-size:14px;\n  font-weight:600;\n  transition:.2s;\n}\n\n.bll5-app .info-btn:hover{\n  background:#D5EEEB;\n  border-color:var(--accent);\n}\n\n.bll5-app .info-btn.hide{\n  background:white;\n  color:var(--text2);\n  border-color:var(--border2);\n}\n\n\/* =========================================================\n   CANVA \/ RECURSOS\n   ========================================================= *\/\n\n.bll5-app .resource{\n  margin-top:20px;\n  padding-top:20px;\n  border-top:1px solid var(--border);\n}\n\n.bll5-app .resource h3{\n  margin:0 0 12px;\n  font-size:17px;\n}\n\n.bll5-app .resource iframe{\n  width:100%;\n  max-width:100%;\n  border:0;\n  border-radius:10px;\n}\n\n\/* =========================================================\n   MISSATGES\n   ========================================================= *\/\n\n.bll5-app .success-message,\n.bll5-app .error-message{\n  display:none;\n  padding:14px;\n  border-radius:10px;\n  margin-bottom:15px;\n  font-size:14px;\n}\n\n.bll5-app .success-message{\n  background:#E5F4EA;\n  color:#27643D;\n}\n\n.bll5-app .error-message{\n  background:#FCEAEA;\n  color:#8A3030;\n}\n\n\/* =========================================================\n   RESPONSIVE\n   ========================================================= *\/\n\n@media(max-width:700px){\n\n  .bll5-app{\n    padding:12px;\n  }\n\n  .bll5-app .hero{\n    padding:25px 20px;\n    border-radius:18px;\n  }\n\n  .bll5-app .hero h1{\n    font-size:26px;\n  }\n\n  .bll5-app .items{\n    grid-template-columns:1fr;\n  }\n\n  .bll5-app .form-grid{\n    grid-template-columns:1fr;\n  }\n\n  .bll5-app .form-group.full{\n    grid-column:auto;\n  }\n\n  .bll5-app .modal{\n    padding:10px;\n  }\n\n  .bll5-app .modal-box{\n    padding:22px 18px;\n  }\n\n  .bll5-app .info-actions{\n    flex-direction:column;\n  }\n\n  .bll5-app .info-btn{\n    width:100%;\n  }\n\n  .bll5-app .section-count{\n    display:none;\n  }\n}\n<\/style>\n\n\n<div class=\"bll5-app\">\n\n  <!-- HERO -->\n  <section class=\"hero\">\n\n    <div class=\"hero-badge\">\n      Cat\u00e0leg de jocs\n    <\/div>\n\n    <h1>\n      Jocs disponibles en pr\u00e9stec\n    <\/h1>\n\n    <p>\n      Tots els jocs del Servei Educatiu Baix Llobregat II\n      disponibles en pr\u00e9stec gratu\u00eft. Fes clic sobre un joc\n      per sol\u00b7licitar-lo i\/o tenir m\u00e9s informaci\u00f3.\n    <\/p>\n\n  <\/section>\n\n\n  <!-- CERCA -->\n  <div class=\"search-wrap\">\n\n    <input\n      type=\"search\"\n      id=\"q\"\n      placeholder=\"Cerca joc o categoria...\"\n      oninput=\"applyFilters()\"\n      autocomplete=\"off\"\n    >\n\n  <\/div>\n\n\n  <!-- FILTRES -->\n  <div class=\"tags\">\n\n    <button\n      class=\"tag active\"\n      onclick=\"setTag('all',this)\"\n      type=\"button\">\n      Tots\n    <\/button>\n\n    <button\n      class=\"tag\"\n      onclick=\"setTag('inf',this)\"\n      type=\"button\">\n      \ud83e\uddf8 Educaci\u00f3 infantil\n    <\/button>\n\n    <button\n      class=\"tag\"\n      onclick=\"setTag('ci',this)\"\n      type=\"button\">\n      \ud83c\udf31 Cicle inicial\n    <\/button>\n\n    <button\n      class=\"tag\"\n      onclick=\"setTag('cm',this)\"\n      type=\"button\">\n      \ud83d\udcd8 Cicle mitj\u00e0\n    <\/button>\n\n    <button\n      class=\"tag\"\n      onclick=\"setTag('cs',this)\"\n      type=\"button\">\n      \ud83d\ude80 Cicle superior\n    <\/button>\n\n    <button\n      class=\"tag\"\n      onclick=\"setTag('grans',this)\"\n      type=\"button\">\n      \ud83c\udf93 Grans\n    <\/button>\n\n  <\/div>\n\n\n  <div class=\"no-results\" id=\"noResults\">\n    No s&#8217;han trobat jocs que coincideixin amb la cerca.\n  <\/div>\n\n\n  <!-- LES SECCIONS ES GENEREN AUTOM\u00c0TICAMENT -->\n  <main id=\"jocsContent\"><\/main>\n\n\n  <!-- =====================================================\n       MODAL SOL\u00b7LICITUD\n       ===================================================== -->\n\n  <div class=\"modal\" id=\"materialModal\">\n\n    <div class=\"modal-box\">\n\n      <button\n        class=\"modal-close\"\n        type=\"button\"\n        onclick=\"closeModal()\">\n        \u00d7\n      <\/button>\n\n      <h2 class=\"modal-title\" id=\"modalTitle\">\n        Sol\u00b7licitud de joc\n      <\/h2>\n\n      <p class=\"modal-subtitle\">\n        Omple les dades seg\u00fcents per sol\u00b7licitar aquest joc.\n      <\/p>\n\n      <div\n        class=\"success-message\"\n        id=\"successMessage\">\n        La sol\u00b7licitud s&#8217;ha enviat correctament.\n      <\/div>\n\n      <div\n        class=\"error-message\"\n        id=\"errorMessage\">\n        S&#8217;ha produ\u00eft un error en enviar la sol\u00b7licitud.\n      <\/div>\n\n      <form id=\"loanForm\">\n\n        <div class=\"form-grid\">\n\n          <div class=\"form-group full\">\n\n            <label for=\"nomMaterial\">\n              Joc\n            <\/label>\n\n            <input\n              type=\"text\"\n              id=\"nomMaterial\"\n              name=\"material\"\n              readonly>\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"nom\">\n              Nom i cognoms\n            <\/label>\n\n            <input\n              type=\"text\"\n              id=\"nom\"\n              name=\"nom\"\n              required>\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"centre\">\n              Centre educatiu\n            <\/label>\n\n            <input\n              type=\"text\"\n              id=\"centre\"\n              name=\"centre\"\n              required>\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"email\">\n              Correu electr\u00f2nic\n            <\/label>\n\n            <input\n              type=\"email\"\n              id=\"email\"\n              name=\"email\"\n              required>\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"telefon\">\n              Tel\u00e8fon\n            <\/label>\n\n            <input\n              type=\"tel\"\n              id=\"telefon\"\n              name=\"telefon\">\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"dataRecollida\">\n              Data de recollida\n            <\/label>\n\n            <input\n              type=\"date\"\n              id=\"dataRecollida\"\n              name=\"dataRecollida\"\n              required\n              onchange=\"calcularRetorn()\">\n\n          <\/div>\n\n\n          <div class=\"form-group\">\n\n            <label for=\"dataRetorn\">\n              Data prevista de retorn\n            <\/label>\n\n            <input\n              type=\"date\"\n              id=\"dataRetorn\"\n              name=\"dataRetorn\"\n              readonly>\n\n          <\/div>\n\n\n          <div class=\"form-group full\">\n\n            <label for=\"observacions\">\n              Observacions\n            <\/label>\n\n            <textarea\n              id=\"observacions\"\n              name=\"observacions\"\n              placeholder=\"Pots afegir qualsevol informaci\u00f3 que consideris necess\u00e0ria...\"><\/textarea>\n\n          <\/div>\n\n        <\/div>\n\n\n        <div class=\"form-actions\">\n\n          <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            onclick=\"closeModal()\">\n            Cancel\u00b7lar\n          <\/button>\n\n          <button\n            type=\"submit\"\n            class=\"btn btn-primary\">\n            Enviar sol\u00b7licitud\n          <\/button>\n\n        <\/div>\n\n      <\/form>\n\n\n      <!-- BOTONS INFORMACI\u00d3 -->\n\n      <div\n        class=\"info-actions\"\n        id=\"infoActions\"\n        style=\"display:none;\">\n\n        <button\n          type=\"button\"\n          class=\"info-btn\"\n          id=\"showInfoBtn\"\n          onclick=\"mostrarInformacio()\">\n          + M\u00e9s informaci\u00f3\n        <\/button>\n\n        <button\n          type=\"button\"\n          class=\"info-btn hide\"\n          id=\"hideInfoBtn\"\n          onclick=\"amagarInformacio()\"\n          style=\"display:none;\">\n          \u2212 Amagar informaci\u00f3\n        <\/button>\n\n      <\/div>\n\n\n      <!-- RECURS CANVA -->\n\n      <div\n        class=\"resource\"\n        id=\"resourceContainer\"\n        style=\"display:none;\">\n\n        <h3>\n          Informaci\u00f3 del joc\n        <\/h3>\n\n        <div id=\"resourceContent\"><\/div>\n\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n\n<script>\n\n\/* =========================================================\n   CONFIGURACI\u00d3\n   ========================================================= *\/\n\nconst DIES_PRESTEC = 30;\n\nconst GOOGLE_SCRIPT_URL =\n  'https:\/\/script.google.com\/macros\/s\/AKfycbxPNLvDsg8jW9VG1tIPtYkEuHueXEzSYu21C5syq4y_TZE1mF52HFYlBYFzNQ9GX22UIw\/exec';\n\n\n\/* =========================================================\n   DADES DEL CSV\n   NOM JOC \/ CATEGORIES \/ CICLES\n   ========================================================= *\/\n\nconst JOCS = [\n  [\"Bits & Bytes\",\"Pensament computacional, Matem\u00e0tiques\",\"INF\"],\n  [\"Set\",\"Competititu, Rapidesa\",\"CI\"],\n  [\"MANCALA\",\"Matem\u00e0tiques, Estrat\u00e8gia, Cooperatiu\",\"CI\"],\n  [\"Domino\",\"Competititu, Estrat\u00e8gia, Matem\u00e0tiques\",\"CI\"],\n  [\"Qwirkle\",\"Logica, Estrat\u00e8gia, Matem\u00e0tiques\",\"CI\"],\n  [\"Camelot Jr\",\"Matem\u00e0tiques\",\"INF\"],\n  [\"Los tres cerditos\",\"Cooperatiu\",\"INF\"],\n  [\"Code masters\",\"Pensament computacional, Matem\u00e0tiques\",\"CM\"],\n  [\"C\u00f3digo secreto 13+4\",\"Competititu, Matem\u00e0tiques\",\"CM\"],\n  [\"Gravity Maze\",\"Logica, Matem\u00e0tiques\",\"CM\"],\n  [\"Piratas de la suerte\",\"Competititu, Atzar\",\"INF\"],\n  [\"Dr. Eureka\",\"Competititu, Matem\u00e0tiques\",\"CM\"],\n  [\"Feminismos reunidos\",\"Coeducaci\u00f3\",\"CS\"],\n  [\"Herst\u00f3ricas Pioneras\",\"Coeducaci\u00f3\",\"INF\"],\n  [\"Cient\u00edficas e inventoras\",\"Coeducaci\u00f3\",\"INF\"],\n  [\"Who's she?\",\"Competititu, Coeducaci\u00f3\",\"Grans\"],\n  [\"El lince\",\"Mem\u00f2ria, Competititu\",\"INF\"],\n  [\"Mental Blox\",\"Logica, Matem\u00e0tiques, Visi\u00f3 espacial\",\"INF\"],\n  [\"Pillado\",\"Logica, Cooperatiu\",\"CI\"],\n  [\"Triovisi\u00f3n\",\"Visi\u00f3 espacial, Matem\u00e0tiques\",\"CI\"],\n  [\"Emotio\",\"Emocions\",\"INF\"],\n  [\"Un\u00e1nimo\",\"Imaginaci\u00f3, Competititu, Lleng\u00fces\",\"CM\"],\n  [\"Time's Up\",\"Cooperatiu, Rapidesa, Imaginaci\u00f3, Lleng\u00fces\",\"INF\"],\n  [\"Ikonikus\",\"Imaginaci\u00f3, Emocions\",\"CI\"],\n  [\"Similo historia\",\"Hist\u00f2ria\",\"CM\"],\n  [\"Similo animales salvajes\",\"Science\",\"CM\"],\n  [\"Timeline Cl\u00e1sico\",\"Hist\u00f2ria\",\"CM\"],\n  [\"Timeline Eventos\",\"Hist\u00f2ria\",\"CM\"],\n  [\"\u00a1S\u00ed, Se\u00f1or oscuro!\",\"Jocs de Rol, Lleng\u00fces\",\"CM\"],\n  [\"Sherlock: la tomba de l'arque\u00f2leg\",\"Logica, Investigaci\u00f3\",\"CM\"],\n  [\"Sherlock Jr: Suriguri\",\"Logica, Investigaci\u00f3\",\"CM\"],\n  [\"Sherlock: \u00faltim av\u00eds\",\"Logica, Investigaci\u00f3\",\"CM\"],\n  [\"Sherlock: Incidente canino\",\"Logica, Investigaci\u00f3\",\"CM\"],\n  [\"Los inseparables\",\"Cooperatiu, Emocions\",\"CS\"],\n  [\"Club A Verita la monstruita\",\"Atenci\u00f3\",\"CI\"],\n  [\"Club A Luca el escritor\",\"Lleng\u00fces\",\"CI\"],\n  [\"Cartzzle Exploraci\u00f3n extrema\",\"Logica\",\"Grans\"],\n  [\"Cartzzle Brocelianda interminable\",\"Logica, Cooperatiu\",\"Grans\"],\n  [\"El rey de los dados\",\"Logica, Atzar, Estrat\u00e8gia\",\"CM\"],\n  [\"Calderilla\",\"Matem\u00e0tiques, Estrat\u00e8gia, Competititu\",\"CM\"],\n  [\"Unlock Kids\",\"Logica\",\"INF\"],\n  [\"Virus\",\"Competititu, Rapidesa, Estrat\u00e8gia\",\"CM\"],\n  [\"Amazonia\",\"Science, Estrat\u00e8gia, Logica\",\"CM\"],\n  [\"Lucas el escritor\",\"\",\"\"],\n  [\"Dobble\",\"Rapidesa, Mem\u00f2ria\",\"CI\"],\n  [\"El a\u00f1o tranquilo\",\"Cooperatiu, Filosofia\",\"CS\"],\n  [\"Alice is Missing\",\"Jocs de Rol, Filosofia\",\"CS\"],\n  [\"Dixit Odissey\",\"Logica, Competititu, Lleng\u00fces\",\"CM\"],\n  [\"Dixit Memories\",\"Logica, Competititu, Lleng\u00fces\",\"CM\"],\n  [\"The Island\",\"Competititu, Estrat\u00e8gia\",\"CM\"],\n  [\"Cytosis\",\"Competititu, Estrat\u00e8gia, Science\",\"CS\"],\n  [\"Chronicles of Crime\",\"Logica, Cooperatiu\",\"CS\"],\n  [\"Cr\u00f3nicas del crimen\",\"Logica, Cooperatiu\",\"CS\"],\n  [\"Cr\u00f3nicas del crimen: bienvenidos a Redview\",\"Logica, Cooperatiu\",\"CS\"],\n  [\"Kids Chronicles: en busca de las piedras lunares\",\"Logica, Cooperatiu\",\"CI\"],\n  [\"Magic Maze\",\"Cooperatiu\",\"CM\"],\n  [\"Just One\",\"Cooperatiu, Lleng\u00fces, Imaginaci\u00f3\",\"CM\"],\n  [\"L'illa prohibida\",\"Jocs de Rol\",\"CS\"],\n  [\"Micro Macro Crime City: Full House\",\"Logica, Cooperatiu\",\"CM\"],\n  [\"Tranv\u00eda mortal\",\"Filosofia, Emocions\",\"CS\"],\n  [\"Happy Salmon\",\"Rapidesa\",\"CI\"],\n  [\"Cat Crimes\",\"Matem\u00e0tiques, Logica\",\"INF\"],\n  [\"Karuba\",\"Competititu, Estrat\u00e8gia\",\"CM\"],\n  [\"Karuba JR\",\"Cooperatiu, Atzar\",\"CI\"],\n  [\"Pistas cruzadas\",\"Cooperatiu, Lleng\u00fces\",\"CI\"],\n  [\"Arcoiris Musical\",\"M\u00fasica, Competititu\",\"INF\"],\n  [\"Icon\",\"Competititu, Imaginaci\u00f3\",\"CM\"],\n  [\"Off Beat\",\"M\u00fasica\",\"INF\"],\n  [\"Asesinato en la mansi\u00f3n cthulhu\",\"Logica, Competititu, Estrat\u00e8gia\",\"CS\"],\n  [\"Concept\",\"Logica, Rapidesa\",\"INF\"],\n  [\"Dixit Universe\",\"Logica, Competititu, Lleng\u00fces\",\"CM\"],\n  [\"Timelife Twist\",\"Mem\u00f2ria, Competititu, Lleng\u00fces\",\"INF\"],\n  [\"Trapwords\",\"Imaginaci\u00f3, Lleng\u00fces\",\"CM\"],\n  [\"Lapsus\",\"Imaginaci\u00f3, Cooperatiu, Lleng\u00fces\",\"CM\"],\n  [\"Sisset\",\"Lleng\u00fces, Competititu\",\"CM\"],\n  [\"ABC Magia\",\"Competititu, Rapidesa, Lleng\u00fces\",\"INF\"],\n  [\"Codi secret\",\"Competititu, Lleng\u00fces\",\"CS\"],\n  [\"Qwerty\",\"Rapidesa, Lleng\u00fces\",\"CS\"],\n  [\"Hues and Cues\",\"Imaginaci\u00f3, Cooperatiu, Lleng\u00fces\",\"CM\"],\n  [\"Demundus\",\"Cooperatiu, Emocions\",\"CS\"],\n  [\"Hanabi\",\"Mem\u00f2ria, Cooperatiu\",\"CM\"],\n  [\"Exit ticket\",\"Cooperatiu\",\"CI\"],\n  [\"Treu la llengua\",\"Science, Cooperatiu\",\"CM\"],\n  [\"Party and co\",\"Competititu\",\"CM\"],\n  [\"Sinthesis\",\"Science, Competititu, Estrat\u00e8gia\",\"CM\"],\n  [\"Emboscat\",\"Science, Competititu, Estrat\u00e8gia\",\"CM\"],\n  [\"Electropolis\",\"Estrat\u00e8gia, Competititu\",\"CS\"],\n  [\"Celulose\",\"Science, Estrat\u00e8gia, Competititu\",\"CS\"],\n  [\"Evergreen\",\"Competititu, Estrat\u00e8gia, Science\",\"CM\"],\n  [\"Orbito\",\"Estrat\u00e8gia, Mem\u00f2ria\",\"CI\"],\n  [\"Sheepland\",\"Competititu, Estrat\u00e8gia\",\"CM\"],\n  [\"Cortex Challenge\",\"Mem\u00f2ria, Rapidesa\",\"CI\"],\n  [\"Cortex 2 Challenge\",\"Mem\u00f2ria, Rapidesa\",\"CM\"],\n  [\"Abejitas Zum Zum\",\"Mem\u00f2ria, Competititu\",\"INF\"],\n  [\"Dobble acces\",\"Mem\u00f2ria, Rapidesa\",\"CI\"],\n  [\"When I dream\",\"Jocs de Rol, Lleng\u00fces\",\"CM\"],\n  [\"Grimm forest\",\"Jocs de Rol\",\"CS\"],\n  [\"Piko Piko el gusanito\",\"Competititu, Estrat\u00e8gia, Matem\u00e0tiques\",\"CM\"],\n  [\"F\u00f3rmula\",\"Matem\u00e0tiques, Competititu, Rapidesa\",\"CI\"],\n  [\"Pattern Party\",\"Rapidesa, Matem\u00e0tiques\",\"INF\"],\n  [\"Kids anc bytes\",\"Matem\u00e0tiques, Pensament computacional\",\"INF\"],\n  [\"Halli Galli\",\"Competititu, Rapidesa, Matem\u00e0tiques\",\"CM\"],\n  [\"Lucky Numbers\",\"Rapidesa, Competititu, Matem\u00e0tiques\",\"CI\"],\n  [\"Las ni\u00f1as de Sacaranda\",\"Cooperatiu, Coeducaci\u00f3\",\"INF\"],\n  [\"Iguales\",\"Cooperatiu, Coeducaci\u00f3\",\"INF\"],\n  [\"Ritmo y bola\",\"M\u00fasica\",\"CS\"],\n  [\"Fastasma blitz\",\"Rapidesa\",\"CM\"],\n  [\"Monster kit\",\"Matem\u00e0tiques\",\"INF\"],\n  [\"Durian\",\"Matem\u00e0tiques\",\"CM\"],\n  [\"Konekta f\u00e1cil\",\"Emocions\",\"INF\"],\n  [\"Traidores a bordo\",\"Estrat\u00e8gia, Logica\",\"CS\"],\n  [\"10 ladrones\",\"Rapidesa, Matem\u00e0tiques\",\"CI\"],\n  [\"La \u00faltima meiga\",\"Estrat\u00e8gia, Lleng\u00fces\",\"CS\"],\n  [\"La \u00faltima c\u00e1psula\",\"Estrat\u00e8gia, Lleng\u00fces\",\"CS\"],\n  [\"La \u00faltima pirata\",\"Estrat\u00e8gia, Lleng\u00fces\",\"CS\"],\n  [\"Quien soy?\",\"Emocions, Lleng\u00fces\",\"INF\"],\n  [\"Hombres lobo de Castronegro\",\"Estrat\u00e8gia, Jocs de Rol\",\"CS\"],\n  [\"Las brujas de Farrab\u00fas\",\"Coeducaci\u00f3\",\"CM\"],\n  [\"Little office\",\"Coeducaci\u00f3\",\"CI\"]\n];\n\n\n\n\/* =========================================================\n   CONFIGURACI\u00d3 DELS CICLES\n   ========================================================= *\/\n\nconst CICLES_CONFIG = {\n\n  inf:{\n    nom:'Educaci\u00f3 infantil',\n    descripcio:'Jocs adaptats a l\u2019etapa d\u2019educaci\u00f3 infantil.',\n    emoji:'\ud83e\uddf8',\n    classe:'cat-inf'\n  },\n\n  ci:{\n    nom:'Cicle inicial',\n    descripcio:'Jocs per a 1r i 2n d\u2019educaci\u00f3 prim\u00e0ria.',\n    emoji:'\ud83c\udf31',\n    classe:'cat-ci'\n  },\n\n  cm:{\n    nom:'Cicle mitj\u00e0',\n    descripcio:'Jocs per a 3r i 4t d\u2019educaci\u00f3 prim\u00e0ria.',\n    emoji:'\ud83d\udcd8',\n    classe:'cat-cm'\n  },\n\n  cs:{\n    nom:'Cicle superior',\n    descripcio:'Jocs per a 5\u00e8 i 6\u00e8 d\u2019educaci\u00f3 prim\u00e0ria.',\n    emoji:'\ud83d\ude80',\n    classe:'cat-cs'\n  },\n\n  grans:{\n    nom:'Grans',\n    descripcio:'Jocs destinats a grups de m\u00e9s edat.',\n    emoji:'\ud83c\udf93',\n    classe:'cat-grans'\n  },\n\n\n};\n\n\n\/* =========================================================\n   ICONA\n   ========================================================= *\/\n\nfunction obtenirIcona(cicle){\n\n  if(cicle === 'inf'){\n    return `\n      <svg viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\">\n        <circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle>\n        <circle cx=\"9\" cy=\"10\" r=\"1\"><\/circle>\n        <circle cx=\"15\" cy=\"10\" r=\"1\"><\/circle>\n        <path d=\"M8 15c1.2 1.3 2.5 2 4 2s2.8-.7 4-2\"><\/path>\n      <\/svg>\n    `;\n  }\n\n  if(cicle === 'ci'){\n    return `\n      <svg viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\">\n        <path d=\"M12 3v18\"><\/path>\n        <path d=\"M5 7h14\"><\/path>\n        <path d=\"M7 17h10\"><\/path>\n      <\/svg>\n    `;\n  }\n\n  if(cicle === 'cm'){\n    return `\n      <svg viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\">\n        <path d=\"M4 19h16\"><\/path>\n        <path d=\"M6 17V7l6-4 6 4v10\"><\/path>\n        <path d=\"M9 17v-5h6v5\"><\/path>\n      <\/svg>\n    `;\n  }\n\n  if(cicle === 'cs'){\n    return `\n      <svg viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\">\n        <path d=\"M12 3v18\"><\/path>\n        <path d=\"M5 8l7-5 7 5\"><\/path>\n        <path d=\"M7 21l5-8 5 8\"><\/path>\n      <\/svg>\n    `;\n  }\n\n  if(cicle === 'grans'){\n    return `\n      <svg viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\">\n        <circle cx=\"12\" cy=\"8\" r=\"4\"><\/circle>\n        <path d=\"M5 21c.8-4 3-6 7-6s6.2 2 7 6\"><\/path>\n      <\/svg>\n    `;\n  }\n\n  return `\n    <svg viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\">\n      <circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle>\n      <path d=\"M9.5 9a2.5 2.5 0 015 0c0 2-2.5 2-2.5 4\"><\/path>\n      <circle cx=\"12\" cy=\"17.5\" r=\".5\"><\/circle>\n    <\/svg>\n  `;\n}\n\n\n\/* =========================================================\n   NORMALITZAR CICLE\n   ========================================================= *\/\n\nfunction normalitzarCicle(valor){\n\n  if(!valor){\n    return 'sense';\n  }\n\n  const v =\n    String(valor)\n      .trim()\n      .toUpperCase();\n\n  if(v === 'INF') return 'inf';\n  if(v === 'CI') return 'ci';\n  if(v === 'CM') return 'cm';\n  if(v === 'CS') return 'cs';\n  if(v === 'GRANS') return 'grans';\n\n  return 'sense';\n}\n\n\n\/* =========================================================\n   GENERAR CAT\u00c0LEG\n   ========================================================= *\/\n\nfunction generarCatalog(){\n\n  const container =\n    document.getElementById('jocsContent');\n\n  if(!container) return;\n\n  container.innerHTML = '';\n\n  const grups = {\n\n    inf:[],\n    ci:[],\n    cm:[],\n    cs:[],\n    grans:[],\n    sense:[]\n\n  };\n\n\n  JOCS.forEach(function(joc){\n\n    const nom =\n      String(joc[0] || '').trim();\n\n    const categories =\n      String(joc[1] || '').trim();\n\n    const cicle =\n      normalitzarCicle(joc[2]);\n\n    if(!nom) return;\n\n    grups[cicle].push({\n\n      nom:nom,\n      categories:categories\n\n    });\n\n  });\n\n\n  Object.keys(CICLES_CONFIG).forEach(function(cicle){\n\n    const config =\n      CICLES_CONFIG[cicle];\n\n    const jocs =\n      grups[cicle];\n\n    if(!jocs.length) return;\n\n\n    const section =\n      document.createElement('section');\n\n    section.className =\n      'category-section ' + config.classe;\n\n    section.dataset.cat =\n      cicle;\n\n\n    const title =\n      document.createElement('div');\n\n    title.className =\n      'category-title';\n\n\n    const icon =\n      document.createElement('div');\n\n    icon.className =\n      'category-icon';\n\n    icon.innerHTML =\n      obtenirIcona(cicle);\n\n\n    const titleText =\n      document.createElement('div');\n\n\n    const h2 =\n      document.createElement('h2');\n\n    h2.textContent =\n      config.emoji + ' ' + config.nom;\n\n\n    const p =\n      document.createElement('p');\n\n    p.textContent =\n      config.descripcio;\n\n\n    titleText.appendChild(h2);\n    titleText.appendChild(p);\n\n\n    const count =\n      document.createElement('span');\n\n    count.className =\n      'section-count';\n\n    count.textContent =\n      jocs.length +\n      (jocs.length === 1 ? ' joc' : ' jocs');\n\n\n    title.appendChild(icon);\n    title.appendChild(titleText);\n    title.appendChild(count);\n\n\n    const items =\n      document.createElement('div');\n\n    items.className =\n      'items';\n\n\n    jocs.forEach(function(joc){\n\n      const item =\n        document.createElement('div');\n\n      item.className =\n        'item';\n\n      item.dataset.cat =\n        cicle;\n\n      item.dataset.name =\n        joc.nom;\n\n      item.dataset.categories =\n        joc.categories;\n\n\n      const name =\n        document.createElement('div');\n\n      name.className =\n        'item-name';\n\n      name.textContent =\n        joc.nom;\n\n\n      const category =\n        document.createElement('div');\n\n      category.className =\n        'item-category';\n\n      category.textContent =\n        joc.categories || '';\n\n\n      item.appendChild(name);\n\n      if(joc.categories){\n\n        item.appendChild(category);\n\n      }\n\n\n      item.addEventListener(\n        'click',\n        function(){\n\n          toggleForm(item);\n\n        }\n      );\n\n\n      items.appendChild(item);\n\n    });\n\n\n    section.appendChild(title);\n    section.appendChild(items);\n\n    container.appendChild(section);\n\n  });\n\n}\n\n\n\/* =========================================================\n   FILTRES\n   ========================================================= *\/\n\nlet activeTag = 'all';\n\n\nfunction setTag(tag,button){\n\n  activeTag =\n    tag;\n\n\n  document\n    .querySelectorAll('.bll5-app .tag')\n    .forEach(function(btn){\n\n      btn.classList.remove('active');\n\n    });\n\n\n  button.classList.add('active');\n\n  applyFilters();\n\n}\n\n\nfunction applyFilters(){\n\n  const input =\n    document.getElementById('q');\n\n  if(!input) return;\n\n\n  const query =\n    input.value\n      .toLowerCase()\n      .trim();\n\n\n  let totalVisible = 0;\n\n\n  document\n    .querySelectorAll(\n      '.bll5-app .category-section'\n    )\n    .forEach(function(section){\n\n      const category =\n        section.dataset.cat;\n\n\n      const categoryMatch =\n        activeTag === 'all' ||\n        activeTag === category;\n\n\n      let visibleInSection = 0;\n\n\n      section\n        .querySelectorAll('.item')\n        .forEach(function(item){\n\n          const name =\n            (\n              item.dataset.name || ''\n            ).toLowerCase();\n\n\n          const categories =\n            (\n              item.dataset.categories || ''\n            ).toLowerCase();\n\n\n          const textMatch =\n            !query ||\n            name.includes(query) ||\n            categories.includes(query);\n\n\n          const visible =\n            categoryMatch &&\n            textMatch;\n\n\n          item.style.display =\n            visible ? '' : 'none';\n\n\n          if(visible){\n\n            visibleInSection++;\n            totalVisible++;\n\n          }\n\n        });\n\n\n      section.style.display =\n        visibleInSection > 0\n          ? ''\n          : 'none';\n\n    });\n\n\n  const noResults =\n    document.getElementById(\n      'noResults'\n    );\n\n\n  noResults.style.display =\n    totalVisible === 0\n      ? 'block'\n      : 'none';\n\n}\n\n\n\/* =========================================================\n   MODAL\n   ========================================================= *\/\n\nfunction toggleForm(item){\n\n  const name =\n    item\n      .querySelector('.item-name')\n      .innerText\n      .trim();\n\n\n  document\n    .getElementById('nomMaterial')\n    .value =\n      name;\n\n\n  document\n    .getElementById('modalTitle')\n    .textContent =\n      'Sol\u00b7licitud: ' + name;\n\n\n  document\n    .getElementById('successMessage')\n    .style.display =\n      'none';\n\n\n  document\n    .getElementById('errorMessage')\n    .style.display =\n      'none';\n\n\n  const resource =\n    obtenirRecursHTML(name);\n\n\n  const resourceContainer =\n    document.getElementById(\n      'resourceContainer'\n    );\n\n\n  const resourceContent =\n    document.getElementById(\n      'resourceContent'\n    );\n\n\n  const infoActions =\n    document.getElementById(\n      'infoActions'\n    );\n\n\n  const showInfoBtn =\n    document.getElementById(\n      'showInfoBtn'\n    );\n\n\n  const hideInfoBtn =\n    document.getElementById(\n      'hideInfoBtn'\n    );\n\n\n  resourceContent.innerHTML =\n    '';\n\n  resourceContainer.style.display =\n    'none';\n\n  showInfoBtn.style.display =\n    'none';\n\n  hideInfoBtn.style.display =\n    'none';\n\n\n  if(resource){\n\n    resourceContent.innerHTML =\n      resource;\n\n    infoActions.style.display =\n      'flex';\n\n    showInfoBtn.style.display =\n      'inline-block';\n\n  }else{\n\n    infoActions.style.display =\n      'none';\n\n  }\n\n\n  document\n    .getElementById('materialModal')\n    .classList.add('open');\n\n\n  document.body.style.overflow =\n    'hidden';\n\n}\n\n\n\/* =========================================================\n   INFORMACI\u00d3\n   ========================================================= *\/\n\nfunction mostrarInformacio(){\n\n  const resourceContainer =\n    document.getElementById(\n      'resourceContainer'\n    );\n\n  const showInfoBtn =\n    document.getElementById(\n      'showInfoBtn'\n    );\n\n  const hideInfoBtn =\n    document.getElementById(\n      'hideInfoBtn'\n    );\n\n\n  resourceContainer.style.display =\n    'block';\n\n  showInfoBtn.style.display =\n    'none';\n\n  hideInfoBtn.style.display =\n    'inline-block';\n\n}\n\n\nfunction amagarInformacio(){\n\n  const resourceContainer =\n    document.getElementById(\n      'resourceContainer'\n    );\n\n  const showInfoBtn =\n    document.getElementById(\n      'showInfoBtn'\n    );\n\n  const hideInfoBtn =\n    document.getElementById(\n      'hideInfoBtn'\n    );\n\n\n  resourceContainer.style.display =\n    'none';\n\n  showInfoBtn.style.display =\n    'inline-block';\n\n  hideInfoBtn.style.display =\n    'none';\n\n}\n\n\n\/* =========================================================\n   TANCAR MODAL\n   ========================================================= *\/\n\nfunction closeModal(){\n\n  document\n    .getElementById('materialModal')\n    .classList.remove('open');\n\n  document.body.style.overflow =\n    '';\n\n}\n\n\ndocument\n  .getElementById('materialModal')\n  .addEventListener(\n    'click',\n    function(e){\n\n      if(e.target === this){\n\n        closeModal();\n\n      }\n\n    }\n  );\n\n\ndocument.addEventListener(\n  'keydown',\n  function(e){\n\n    if(e.key === 'Escape'){\n\n      closeModal();\n\n    }\n\n  }\n);\n\n\n\/* =========================================================\n   RECURSOS CANVA\n   ========================================================= *\/\n\nconst RECURSOS_HTML = {\n\n  \/*\n   * AFEGIR AQU\u00cd ELS CODIS CANVA.\n   *\n   * Exemple:\n   *\n   * 'Bits & Bytes': `\n   *   <iframe ...><\/iframe>\n   * `,\n   *\n   *\/\n\n};\n\n\nfunction obtenirRecursHTML(nomMaterial){\n\n  const nom =\n    String(nomMaterial || '').trim();\n\n\n  if(\n    Object.prototype.hasOwnProperty.call(\n      RECURSOS_HTML,\n      nom\n    )\n  ){\n\n    return RECURSOS_HTML[nom];\n\n  }\n\n\n  return '';\n\n}\n\n\n\/* =========================================================\n   DATES\n   ========================================================= *\/\n\nfunction calcularRetorn(){\n\n  const input =\n    document.getElementById(\n      'dataRecollida'\n    );\n\n\n  const retorn =\n    document.getElementById(\n      'dataRetorn'\n    );\n\n\n  if(!input.value){\n\n    retorn.value = '';\n\n    return;\n\n  }\n\n\n  const data =\n    new Date(\n      input.value + 'T00:00:00'\n    );\n\n\n  data.setDate(\n    data.getDate() + DIES_PRESTEC\n  );\n\n\n  const any =\n    data.getFullYear();\n\n\n  const mes =\n    String(\n      data.getMonth() + 1\n    ).padStart(2,'0');\n\n\n  const dia =\n    String(\n      data.getDate()\n    ).padStart(2,'0');\n\n\n  retorn.value =\n    `${any}-${mes}-${dia}`;\n\n}\n\n\n\/* =========================================================\n   FORMULARI\n   ========================================================= *\/\n\ndocument\n  .getElementById('loanForm')\n  .addEventListener(\n    'submit',\n    async function(e){\n\n      e.preventDefault();\n\n\n      const form =\n        this;\n\n\n      const submit =\n        form.querySelector(\n          'button[type=\"submit\"]'\n        );\n\n\n      const success =\n        document.getElementById(\n          'successMessage'\n        );\n\n\n      const error =\n        document.getElementById(\n          'errorMessage'\n        );\n\n\n      success.style.display =\n        'none';\n\n      error.style.display =\n        'none';\n\n\n      submit.disabled =\n        true;\n\n      submit.textContent =\n        'Enviant...';\n\n\n      const data = {\n\n        material:\n          document.getElementById(\n            'nomMaterial'\n          ).value,\n\n        nom:\n          document.getElementById(\n            'nom'\n          ).value,\n\n        centre:\n          document.getElementById(\n            'centre'\n          ).value,\n\n        email:\n          document.getElementById(\n            'email'\n          ).value,\n\n        telefon:\n          document.getElementById(\n            'telefon'\n          ).value,\n\n        dataRecollida:\n          document.getElementById(\n            'dataRecollida'\n          ).value,\n\n        dataRetorn:\n          document.getElementById(\n            'dataRetorn'\n          ).value,\n\n        observacions:\n          document.getElementById(\n            'observacions'\n          ).value\n\n      };\n\n\n      try{\n\n        await fetch(\n          GOOGLE_SCRIPT_URL,\n          {\n\n            method:'POST',\n\n            mode:'no-cors',\n\n            headers:{\n              'Content-Type':\n                'text\/plain;charset=utf-8'\n            },\n\n            body:\n              JSON.stringify(data)\n\n          }\n        );\n\n\n        success.style.display =\n          'block';\n\n\n        form.reset();\n\n\n        document\n          .getElementById('nomMaterial')\n          .value =\n            data.material;\n\n\n        document\n          .getElementById('modalTitle')\n          .textContent =\n            'Sol\u00b7licitud enviada';\n\n\n        submit.disabled =\n          false;\n\n        submit.textContent =\n          'Enviar sol\u00b7licitud';\n\n\n      }catch(err){\n\n        console.error(err);\n\n\n        error.style.display =\n          'block';\n\n\n        submit.disabled =\n          false;\n\n        submit.textContent =\n          'Enviar sol\u00b7licitud';\n\n      }\n\n    }\n  );\n\n\n\/* =========================================================\n   INICIALITZACI\u00d3\n   ========================================================= *\/\n\nfunction iniciarCatalog(){\n\n  generarCatalog();\n\n  applyFilters();\n\n}\n\n\nif(\n  document.readyState !== 'loading'\n){\n\n  iniciarCatalog();\n\n}else{\n\n  document.addEventListener(\n    'DOMContentLoaded',\n    iniciarCatalog\n  );\n\n}\n\n<\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cat\u00e0leg de jocs Jocs disponibles en pr\u00e9stec Tots els jocs del Servei Educatiu Baix Llobregat II disponibles en pr\u00e9stec gratu\u00eft. Fes clic sobre un joc per sol\u00b7licitar-lo i\/o tenir m\u00e9s informaci\u00f3. Tots \ud83e\uddf8 Educaci\u00f3 infantil \ud83c\udf31 Cicle inicial \ud83d\udcd8 Cicle mitj\u00e0 \ud83d\ude80 Cicle superior \ud83c\udf93 Grans No s&#8217;han trobat jocs que coincideixin amb la cerca. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"close","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"normal-width-container","site-content-style":"unboxed","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-7758","page","type-page","status-publish","hentry"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/pages\/7758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/comments?post=7758"}],"version-history":[{"count":3,"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/pages\/7758\/revisions"}],"predecessor-version":[{"id":7775,"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/pages\/7758\/revisions\/7775"}],"wp:attachment":[{"href":"https:\/\/serveiseducatius.xtec.cat\/baixllobregat2\/wp-json\/wp\/v2\/media?parent=7758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}