{"id":32718,"date":"2026-08-20T15:32:10","date_gmt":"2026-08-20T13:32:10","guid":{"rendered":"https:\/\/www.festadelcactus.it\/?page_id=32718"},"modified":"2026-09-16T11:38:07","modified_gmt":"2026-09-16T09:38:07","slug":"plant-finder","status":"publish","type":"page","link":"https:\/\/www.festadelcactus.it\/en\/plant-finder\/","title":{"rendered":"Plant Finder"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background hundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:95px;--awb-padding-right:30px;--awb-padding-bottom:90px;--awb-padding-left:30px;--awb-background-color:#050505;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><div style=\"max-width: 1000px; margin: 0 auto; text-align: center;\">\n<div style=\"margin-bottom: 22px; color: #ff150d; font-size: 13px; font-weight: bold; letter-spacing: .18em;\">PLANT FINDER<\/div>\n<h1 style=\"margin: 0; color: #ffffff; font-size: clamp(48px,7vw,82px); line-height: 1.02; font-weight: bold;\">Looking for a plant?<\/h1>\n<p style=\"max-width: 790px; margin: 30px auto 0px; color: #b8b8b8; font-size: clamp(18px, 2vw, 24px); line-height: 1.55; letter-spacing: normal;\" data-fusion-font=\"true\">Find out which exhibitors have said they\u2019ll bring it to Festa del Cactus and locate them on the map.<\/p>\n<\/div>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1216.8px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><!-- PLANT FINDER -->\n\n<div id=\"fdc-plantfinder\">\n\n  <div class=\"pf-search-wrap\">\n    <label for=\"pf-search\">What are you looking for?<\/label>\n    <div class=\"pf-search-box\">\n      <input type=\"search\" id=\"pf-search\" placeholder=\"Search for a plant or speciality\" autocomplete=\"off\">\n      <span class=\"pf-search-icon\" aria-hidden=\"true\">\u2315<\/span>\n    <\/div>\n  <\/div>\n\n  <div class=\"pf-group-label\">Plants<\/div>\n\n  <div class=\"pf-macro\" id=\"pf-plant-categories\">\n    <button type=\"button\" data-category=\"Cactus\">Cacti<\/button>\n    <button type=\"button\" data-category=\"Succulente\">Succulents<\/button>\n    <button type=\"button\" data-category=\"Tropicali\">Tropical plants<\/button>\n    <button type=\"button\" data-category=\"Orchidee\">Orchids<\/button>\n    <button type=\"button\" data-category=\"Carnivore\">Carnivorous plants<\/button>\n    <button type=\"button\" data-category=\"Acquatiche\">Aquatic plants<\/button>\n  <\/div>\n\n  <div class=\"pf-group-label pf-group-label-secondary\">Other<\/div>\n\n  <div class=\"pf-macro pf-macro-secondary\" id=\"pf-other-categories\">\n    <button type=\"button\" data-category=\"Semi\">Seeds<\/button>\n    <button type=\"button\" data-category=\"Artigianato creativo\">Creative crafts<\/button>\n    <button type=\"button\" data-category=\"Gadget\">Gadgets<\/button>\n    <button type=\"button\" data-category=\"Materiali per la coltivazione\">Growing supplies<\/button>\n  <\/div>\n\n  <div id=\"pf-subcategories\" class=\"pf-subcategories\"><\/div>\n\n  <div class=\"pf-status\">Data is available for 73 exhibitors.<\/div>\n\n  <div id=\"pf-results\" class=\"pf-results\">\n    <p class=\"pf-start\">Select a category or type what you are looking for.<\/p>\n  <\/div>\n\n<\/div>\n\n<style>\n#fdc-plantfinder {\n  width: 100%;\n  max-width: 1050px;\n  margin: 0 auto;\n  padding: 35px 20px 60px;\n  box-sizing: border-box;\n  font-family: inherit;\n}\n\n.pf-search-wrap {\n  max-width: 720px;\n  margin: 0 auto 28px;\n}\n\n.pf-search-wrap label {\n  display: block;\n  margin-bottom: 10px;\n  font-size: 22px;\n  font-weight: 400;\n  text-align: center;\n}\n\n.pf-search-box {\n  position: relative;\n}\n\n.pf-search-box input {\n  width: 100%;\n  height: 58px;\n  padding: 0 55px 0 20px;\n  border: 1px solid #cfcfcf;\n  border-radius: 0;\n  background: #fff;\n  color: #111;\n  font-family: inherit;\n  font-size: 17px;\n  outline: none;\n  box-sizing: border-box;\n}\n\n.pf-search-box input:focus {\n  border-color: #111;\n}\n\n.pf-search-icon {\n  position: absolute;\n  right: 19px;\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 28px;\n  line-height: 1;\n  pointer-events: none;\n}\n\n.pf-group-label {\n  margin: 0 0 10px;\n  text-align: center;\n  font-size: 13px;\n  text-transform: uppercase;\n  letter-spacing: .08em;\n  color: #777;\n}\n\n.pf-group-label-secondary {\n  margin-top: 22px;\n}\n\n.pf-macro {\n  display: flex;\n  justify-content: center;\n  flex-wrap: wrap;\n  gap: 9px;\n  margin: 0 auto;\n}\n\n.pf-macro button,\n.pf-subcategories button {\n  appearance: none;\n  border: 1px solid #111;\n  border-radius: 0;\n  background: #fff;\n  color: #111;\n  padding: 10px 17px;\n  font-family: inherit;\n  font-size: 14px;\n  cursor: pointer;\n  transition: all .15s ease;\n}\n\n.pf-macro-secondary button {\n  border-color: #888;\n}\n\n.pf-macro button:hover,\n.pf-macro button.active {\n  background: #111;\n  color: #fff;\n}\n\n.pf-subcategories {\n  display: flex;\n  justify-content: center;\n  flex-wrap: wrap;\n  gap: 7px;\n  max-width: 900px;\n  margin: 28px auto 0;\n}\n\n.pf-subcategories:empty {\n  display: none;\n}\n\n.pf-subcategories button {\n  border-color: #bdbdbd;\n  padding: 8px 13px;\n  font-size: 13px;\n}\n\n.pf-subcategories button:hover,\n.pf-subcategories button.active {\n  border-color: #ff0000;\n  background: #ff0000;\n  color: #fff;\n}\n\n.pf-status {\n  margin: 18px auto 0;\n  text-align: center;\n  color: #999;\n  font-size: 11px;\n  line-height: 1.5;\n}\n\n.pf-results {\n  margin-top: 24px;\n  border-top: 1px solid #ddd;\n  padding-top: 28px;\n}\n\n.pf-start,\n.pf-empty {\n  margin: 0;\n  text-align: center;\n  color: #777;\n  font-size: 15px;\n  line-height: 1.6;\n}\n\n.pf-results-head {\n  margin: 0 0 18px;\n  font-size: 14px;\n  color: #777;\n}\n\n.pf-card {\n  padding: 20px 0;\n  border-bottom: 1px solid #ddd;\n}\n\n.pf-card:first-of-type {\n  padding-top: 0;\n}\n\n.pf-card h3 {\n  margin: 0 0 3px;\n  font-size: 22px;\n  line-height: 1.2;\n  font-weight: 500;\n}\n\n.pf-id {\n  display: block;\n  margin-bottom: 10px;\n  color: #aaa;\n  font-size: 11px;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n}\n\n.pf-tags {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 5px;\n  margin: 0 0 10px;\n}\n\n.pf-tag {\n  display: inline-block;\n  padding: 4px 8px;\n  background: #f1f1f1;\n  color: #333;\n  font-size: 12px;\n}\n\n.pf-details {\n  margin: 8px 0 0;\n  color: #555;\n  font-size: 14px;\n  line-height: 1.55;\n}\n\n.pf-special {\n  margin: 12px 0 0;\n  padding-left: 13px;\n  border-left: 3px solid #ff0000;\n  color: #333;\n  font-size: 14px;\n  line-height: 1.55;\n}\n\n.pf-special strong {\n  font-weight: 500;\n}\n\n.pf-frost {\n  margin: 9px 0 0;\n  color: #777;\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n.pf-actions {\n  margin-top: 14px;\n}\n\n.pf-map-link {\n  display: inline-block;\n  border: 1px solid #111;\n  padding: 8px 12px;\n  color: #111 !important;\n  text-decoration: none !important;\n  font-size: 12px;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n}\n\n.pf-map-link:hover {\n  background: #111;\n  color: #fff !important;\n}\n\n@media (max-width: 640px) {\n  #fdc-plantfinder {\n    padding: 25px 15px 45px;\n  }\n\n  .pf-search-wrap label {\n    font-size: 20px;\n  }\n\n  .pf-search-box input {\n    height: 54px;\n    font-size: 16px;\n  }\n\n  .pf-macro {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 7px;\n  }\n\n  .pf-macro button {\n    width: 100%;\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  .pf-card h3 {\n    font-size: 20px;\n  }\n}\n\n\/* Fase 2A \u2014 sola preview delle schede risultato *\/\n.pf-results {\n  margin-top: 28px;\n  border-top: 1px solid #dedede;\n  padding-top: 28px;\n}\n\n.pf-results-head {\n  margin: 0 0 18px;\n  color: #5f5f5f;\n  font-size: 15px;\n  line-height: 1.5;\n}\n\n.pf-results-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 22px;\n  align-items: stretch;\n}\n\n.pf-card,\n.pf-card:first-of-type {\n  position: relative;\n  display: flex;\n  min-width: 0;\n  height: 100%;\n  padding: 25px;\n  border: 1px solid #dedede;\n  background: #fff;\n  box-sizing: border-box;\n}\n\n.pf-card-inner {\n  display: flex;\n  flex: 1;\n  min-width: 0;\n  flex-direction: column;\n}\n\n.pf-card h3 {\n  position: relative;\n  z-index: 1;\n  margin: 0 76px 17px 0;\n  color: #161616;\n  font-size: 25px;\n  font-weight: 600;\n  line-height: 1.18;\n}\n\n.pf-code {\n  position: absolute;\n  z-index: 0;\n  top: 6px;\n  right: 17px;\n  color: #ededed;\n  font-size: 72px;\n  font-weight: 700;\n  letter-spacing: -.055em;\n  line-height: 1;\n  pointer-events: none;\n  user-select: none;\n}\n\n.pf-tags,\n.pf-detail-tags {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin: 0;\n}\n\n.pf-detail-tags {\n  display: block;\n  margin-top: 14px;\n  color: #3d3d3d;\n  font-size: 12px;\n  font-weight: 600;\n  line-height: 1.8;\n}\n\n.pf-tag-button {\n  appearance: none;\n  min-height: 28px;\n  padding: 4px 8px;\n  border: 1px solid transparent;\n  border-radius: 0;\n  background: #f1f1f1;\n  color: #555;\n  font: inherit;\n  font-size: 11px;\n  font-weight: 500;\n  line-height: 1.35;\n  text-align: left;\n  cursor: pointer;\n}\n\n.pf-tag-button.pf-category-tag {\n  border-color: #e8e8e8;\n  background: #f1f1f1;\n  color: #4b4b4b;\n  font-weight: 500;\n}\n\n.pf-tag-button:hover,\n.pf-tag-button:focus-visible {\n  border-color: #ed1c24;\n  background: #fff;\n  color: #c90d16;\n  outline: none;\n}\n\n.pf-detail-link,\n.pf-frost-link {\n  appearance: none;\n  display: inline;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  color: inherit;\n  font: inherit;\n  line-height: inherit;\n  cursor: pointer;\n}\n\n.pf-detail-link:hover,\n.pf-detail-link:focus-visible,\n.pf-frost-link:hover,\n.pf-frost-link:focus-visible {\n  color: #c90d16;\n  text-decoration: underline;\n  text-underline-offset: 3px;\n  outline: none;\n}\n\n.pf-detail-separator {\n  color: #aaa;\n  font-weight: 400;\n}\n\n.pf-atomic-match {\n  position: relative;\n  z-index: 1;\n  margin: 16px 0 0;\n  color: #222;\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 1.55;\n}\n\n.pf-atomic-match .pf-atomic-label {\n  display: block;\n  margin-bottom: 3px;\n  color: #ed1c24;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .055em;\n  text-transform: uppercase;\n}\n\n.pf-special {\n  position: relative;\n  z-index: 1;\n  margin: 20px 0 0;\n  padding: 2px 0 2px 14px;\n  border: 0;\n  border-left: 2px solid #ed1c24;\n  background: transparent;\n  color: #333;\n  font-size: 14px;\n  line-height: 1.6;\n  white-space: normal;\n}\n\n.pf-special strong {\n  display: block;\n  margin-bottom: 5px;\n  color: #ed1c24;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .055em;\n  text-transform: uppercase;\n}\n\n.pf-frost {\n  position: relative;\n  z-index: 1;\n  margin: 16px 0 0;\n  color: #6d6d6d;\n  font-size: 13px;\n  line-height: 1.5;\n}\n\n.pf-frost strong {\n  display: inline;\n  color: #444;\n  font-weight: 500;\n  white-space: normal;\n}\n\n.pf-frost-link {\n  white-space: normal;\n}\n\n.pf-actions {\n  margin-top: auto;\n  padding-top: 22px;\n}\n\n.pf-map-link {\n  display: inline-flex;\n  min-height: 40px;\n  align-items: center;\n  justify-content: center;\n  padding: 9px 13px;\n  border: 1px solid #111;\n  background: transparent;\n  color: #111 !important;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .045em;\n  line-height: 1.2;\n  text-decoration: none !important;\n  text-transform: uppercase;\n  box-sizing: border-box;\n}\n\n.pf-map-link:hover,\n.pf-map-link:focus-visible {\n  border-color: #111;\n  background: #111;\n  color: #fff !important;\n  outline: none;\n}\n\n.pf-map-arrow {\n  margin-left: 18px;\n  font-size: 18px;\n  line-height: 1;\n}\n\n@media (max-width: 760px) {\n  .pf-results-grid {\n    grid-template-columns: 1fr;\n    gap: 16px;\n  }\n\n  .pf-card,\n  .pf-card:first-of-type {\n    padding: 21px;\n  }\n\n  .pf-card h3 {\n    margin-right: 66px;\n    font-size: 21px;\n  }\n\n  .pf-code {\n    top: 8px;\n    right: 15px;\n    font-size: 60px;\n  }\n}\n\n<\/style>\n\n<script>\n(function () {\n\n  const DATASET_URL = \"https:\/\/fdc-area-espositori-beta.utriculus.chatgpt.site\/api\/public\/plant-finder\";\n  const SIDECAR_URL = \"https:\/\/fdc-area-espositori-beta.utriculus.chatgpt.site\/api\/public\/plant-finder-atomic\";\n  const FALLBACK_EXHIBITORS = [{\"id\":\"exh-001\",\"name\":\"Afreakplants\",\"categories\":[\"Succulente\",\"Semi\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Aloe\",\"Euphorbia\",\"Mesembryanthemaceae\",\"Asclepiadoideae\",\"Bulbose succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-002\",\"name\":\"Agribernardo Luigi\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Altri cactus\"],\"Succulente\":[\"Euphorbia\",\"Agave\",\"Crassulaceae\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-003\",\"name\":\"Angelo Quarnero\",\"categories\":[\"Cactus\",\"Succulente\",\"Tropicali\"],\"details\":{\"Cactus\":[\"Altri cactus\"],\"Succulente\":[\"Asclepiadoideae\",\"Altre succulente\"],\"Tropicali\":[\"Hoya\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-004\",\"name\":\"Aquaponica\",\"categories\":[\"Materiali per la coltivazione\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-005\",\"name\":\"Astrocactus\",\"categories\":[\"Cactus\",\"Succulente\",\"Materiali per la coltivazione\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Astrophytum\",\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Agave\",\"Crassulaceae\",\"Asclepiadoideae\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-006\",\"name\":\"Attila Szabados\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Copiapoa\",\"Gymnocalycium\",\"Mammillaria\",\"Astrophytum\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-007\",\"name\":\"Autore\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Astrophytum\",\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Crassulaceae\",\"Asclepiadoideae\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-008\",\"name\":\"Cactis\",\"categories\":[\"Cactus\",\"Succulente\",\"Altro\"],\"details\":{\"Cactus\":[\"Echinocereus\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Agave\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-009\",\"name\":\"Cactus Colombo\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Astrophytum\",\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Agave\",\"Crassulaceae\",\"Mesembryanthemaceae\",\"Asclepiadoideae\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-010\",\"name\":\"Cactus Dream\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-011\",\"name\":\"Cactus Life\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-012\",\"name\":\"Cactus Meraviglie Tina\",\"categories\":[\"Cactus\",\"Succulente\",\"Tropicali\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-013\",\"name\":\"Cactus Stuff\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-014\",\"name\":\"Cactuslover\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-015\",\"name\":\"Cactusmania\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-016\",\"name\":\"Carnosa e Spinosa\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-017\",\"name\":\"Desert Style\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Agave\",\"Crassulaceae\",\"Mesembryanthemaceae\",\"Asclepiadoideae\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-019\",\"name\":\"Duben Kaktus\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Astrophytum\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Altri cactus\"],\"Succulente\":[\"Euphorbia\",\"Crassulaceae\",\"Mesembryanthemaceae\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-020\",\"name\":\"Effettoserra\",\"categories\":[\"Artigianato creativo\",\"Gadget\",\"Materiali per la coltivazione\"],\"details\":{},\"frost\":[],\"special\":\"A new line of Effettoserra-designed 3D-printed clay pots\"},{\"id\":\"exh-021\",\"name\":\"Epiphyllum E.P.R.I.C.\",\"categories\":[\"Cactus\",\"Succulente\",\"Materiali per la coltivazione\",\"Altro\",\"Tropicali\"],\"details\":{\"Cactus\":[\"Altri cactus\"],\"Succulente\":[\"Agave\",\"Asclepiadoideae\",\"Altre succulente\"],\"Tropicali\":[\"Hoya\",\"Bromeliaceae\",\"Piante su zattera\",\"Altre tropicali\"]},\"frost\":[\"Piante tropicali resistenti al gelo\"],\"special\":\"Schlumbergera Chiba Purple Sky, japanese hybrid with opuntioides., schlumbergera Bologna, Italy Epiphyllum Bologna\"},{\"id\":\"exh-022\",\"name\":\"Equadorquideas\",\"categories\":[\"Tropicali\",\"Orchidee\"],\"details\":{\"Tropicali\":[\"Aroidi\",\"Piante su zattera\",\"Altre tropicali\"],\"Orchidee\":[\"Specie botaniche\",\"Miniature\",\"Piante su zattera\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-023\",\"name\":\"Esoticando\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-025\",\"name\":\"FeNeN Haworthia\",\"categories\":[\"Succulente\",\"Semi\"],\"details\":{\"Succulente\":[\"Altre succulente\"]},\"frost\":[],\"special\":\"Unique Haworthia specimens, both green and variegated, not produced through large-scale in vitro propagation.\"},{\"id\":\"exh-026\",\"name\":\"Floricoltura Piazzera\",\"categories\":[\"Orchidee\"],\"details\":{\"Orchidee\":[\"Miniature\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-027\",\"name\":\"Flornova\",\"categories\":[\"Tropicali\",\"Artigianato creativo\"],\"details\":{\"Tropicali\":[\"Aroidi\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-028\",\"name\":\"Foscart\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-029\",\"name\":\"Gerard Geling\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-030\",\"name\":\"Gerrit Melissen\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-031\",\"name\":\"Ghibly Creazioni\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-032\",\"name\":\"Green Link\",\"categories\":[\"Cactus\",\"Succulente\",\"Gadget\",\"Altro\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Gymnocalycium\",\"Mammillaria\"],\"Succulente\":[\"Euphorbia\",\"Agave\"]},\"frost\":[],\"special\":\"Caudex Plants like: Senna, Adenia, Boswellia, Euphorbia etc. Also i'll bring special pots for plants\"},{\"id\":\"exh-033\",\"name\":\"Hoyamia\",\"categories\":[\"Succulente\",\"Tropicali\"],\"details\":{\"Tropicali\":[\"Hoya\"]},\"frost\":[],\"special\":\"More than 100 different Hoya varieties selected from the HoyaMia collection on display\"},{\"id\":\"exh-034\",\"name\":\"HoyaVeronika\",\"categories\":[\"Tropicali\"],\"details\":{\"Tropicali\":[\"Hoya\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-035\",\"name\":\"Il Cactus Quotidiano\",\"categories\":[\"Cactus\",\"Succulente\",\"Gadget\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Altri cactus\"],\"Succulente\":[\"Asclepiadoideae\",\"Altre succulente\"]},\"frost\":[],\"special\":\"Astrophytum greenhouse clearance\"},{\"id\":\"exh-036\",\"name\":\"Italycactus\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Altri cactus\"],\"Succulente\":[\"Euphorbia\",\"Aloe\",\"Agave\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-037\",\"name\":\"Kakteen PH\",\"categories\":[\"Cactus\",\"Succulente\",\"Materiali per la coltivazione\"],\"details\":{\"Cactus\":[\"Copiapoa\"],\"Succulente\":[\"Caudiciformi\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-038\",\"name\":\"KissyFrott\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Agave\",\"Crassulaceae\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"New rare Aloes will be available this year.\"},{\"id\":\"exh-039\",\"name\":\"Kodama Lab\",\"categories\":[\"Tropicali\",\"Acquatiche\"],\"details\":{\"Tropicali\":[\"Aroidi\",\"Bromeliaceae\",\"Piante su zattera\",\"Altre tropicali\"],\"Acquatiche\":[\"Ninfee\",\"Piante palustri\",\"Piante sommerse\",\"Piante galleggianti\",\"Altre acquatiche\"]},\"frost\":[\"Piante tropicali resistenti al gelo\",\"Piante acquatiche resistenti al gelo\"],\"special\":\"\"},{\"id\":\"exh-040\",\"name\":\"La Casa del Cactus\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Agave\",\"Asclepiadoideae\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"It will be a surprise.\"},{\"id\":\"exh-041\",\"name\":\"Lifestyle Seeds\",\"categories\":[\"Succulente\",\"Semi\"],\"details\":{\"Succulente\":[\"Bulbose succulente\",\"Caudiciformi\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-042\",\"name\":\"Little One Plant\",\"categories\":[\"Succulente\",\"Tropicali\",\"Orchidee\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Euphorbia\"],\"Tropicali\":[\"Bromeliaceae\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-043\",\"name\":\"Lovely Cactus\",\"categories\":[\"Artigianato creativo\",\"Gadget\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-044\",\"name\":\"Malej Jarda\",\"categories\":[\"Cactus\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-045\",\"name\":\"Manifattura Cactus\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-046\",\"name\":\"Maremmacactus\",\"categories\":[\"Succulente\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[],\"special\":\"Oxalis, some particularly rare (and dwarf) bulbs such as Austronea, and some succulent orchids (Oeceoclades and Eulophia).\"},{\"id\":\"exh-047\",\"name\":\"Mbuyu\",\"categories\":[\"Succulente\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Asclepiadoideae\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-048\",\"name\":\"Mondocactus\",\"categories\":[\"Cactus\",\"Succulente\",\"Tropicali\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Bulbose succulente\",\"Altre succulente\"],\"Tropicali\":[\"Bromeliaceae\"]},\"frost\":[],\"special\":\"Welwitschia, Blossfeldia, Aztekium\"},{\"id\":\"exh-049\",\"name\":\"Oasi Cactus\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-050\",\"name\":\"Orchideria Morosolo\",\"categories\":[\"Orchidee\",\"Tropicali\"],\"details\":{\"Tropicali\":[\"Bromeliaceae\"],\"Orchidee\":[\"Specie botaniche\",\"Ibridi\",\"Miniature\",\"Piante su zattera\",\"Altre orchidee\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-051\",\"name\":\"Oro creativo\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-052\",\"name\":\"Ortoflor\",\"categories\":[\"Tropicali\"],\"details\":{\"Tropicali\":[\"Aroidi\",\"Piante su zattera\",\"Altre tropicali\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-053\",\"name\":\"Palkowitschia\",\"categories\":[\"Succulente\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-054\",\"name\":\"PaNaturArte\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Crassulaceae\",\"Bulbose succulente\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"Plants purchased at Festa del Cactus can be repotted on site into a PaNaturArte ceramic pot. The repotting service and specially prepared substrate are provided free of charge.\"},{\"id\":\"exh-055\",\"name\":\"Paolo Calbini\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Copiapoa\",\"Echinocereus\",\"Gymnocalycium\",\"Mammillaria\",\"Altri cactus\"],\"Succulente\":[\"Mesembryanthemaceae\",\"Altre succulente\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\"],\"special\":\"Aizoaceae, Conophytum, Lithops\"},{\"id\":\"exh-056\",\"name\":\"Punto e a Cactus\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-057\",\"name\":\"Rarecacti\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Cactus\":[\"Ariocarpus\",\"Mammillaria\",\"Altri cactus\"],\"Succulente\":[\"Aloe\",\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-058\",\"name\":\"SeedsCactus.com\",\"categories\":[\"Semi\",\"Materiali per la coltivazione\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-059\",\"name\":\"Selvatica\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-060\",\"name\":\"Stranger plants\",\"categories\":[\"Carnivore\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-061\",\"name\":\"Suculentitis\",\"categories\":[\"Succulente\"],\"details\":{\"Succulente\":[\"Altre succulente\",\"Crassulaceae\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-062\",\"name\":\"Sukulenty\",\"categories\":[\"Succulente\"],\"details\":{\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-063\",\"name\":\"Tilaria\",\"categories\":[\"Succulente\",\"Tropicali\"],\"details\":{\"Tropicali\":[\"Bromeliaceae\"]},\"frost\":[\"Piante tropicali resistenti al gelo\"],\"special\":\"As a specialty, we will be offering for the first time at Festa del Cactus some new Tillandsia cultivars and hybrids made by us, in very limited quantities. You will find a wide range selected offer of Tillandsia and other bromeliads, mainly xeric.\"},{\"id\":\"exh-064\",\"name\":\"Uhlig Kakteen\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-065\",\"name\":\"Vivai Brugna\",\"categories\":[\"Tropicali\"],\"details\":{\"Tropicali\":[\"Aroidi\",\"Altre tropicali\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-066\",\"name\":\"Vivaio Corazza\",\"categories\":[\"Cactus\",\"Succulente\",\"Tropicali\"],\"details\":{\"Cactus\":[\"Astrophytum\",\"Echinocereus\",\"Opuntioideae\",\"Altri cactus\"],\"Succulente\":[\"Caudiciformi\",\"Euphorbia\",\"Aloe\",\"Agave\",\"Crassulaceae\",\"Asclepiadoideae\",\"Bulbose succulente\",\"Altre succulente\"],\"Tropicali\":[\"Aroidi\",\"Begonia\",\"Bromeliaceae\",\"Altre tropicali\"]},\"frost\":[\"Cactus e succulente resistenti al gelo\",\"Piante tropicali resistenti al gelo\"],\"special\":\"Welwitschia mirabilis\"},{\"id\":\"exh-067\",\"name\":\"Yuccaland\",\"categories\":[\"Cactus\",\"Succulente\",\"Gadget\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-068\",\"name\":\"Jan Beliancin\",\"categories\":[\"Cactus\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-069\",\"name\":\"Stella Lane Bortoli\",\"categories\":[\"Artigianato creativo\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-070\",\"name\":\"Il Poggetto\",\"categories\":[\"Cactus\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-071\",\"name\":\"Stefania Zini Art\",\"categories\":[\"Tropicali\",\"Artigianato creativo\",\"Altro\"],\"details\":{\"Tropicali\":[\"Hoya\",\"Altre tropicali\"]},\"frost\":[],\"special\":\"Not only traditional kokedama, but also artistic kokedama with unusual details or shapes\"},{\"id\":\"exh-072\",\"name\":\"Giardino Carnivoro\",\"categories\":[\"Carnivore\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-073\",\"name\":\"Progetto Aura\",\"categories\":[\"Materiali per la coltivazione\"],\"details\":{},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-074\",\"name\":\"Cactus Italia\",\"categories\":[\"Cactus\",\"Succulente\"],\"details\":{\"Succulente\":[\"Altre succulente\"]},\"frost\":[],\"special\":\"\"},{\"id\":\"exh-075\",\"name\":\"Vivaio Sala\",\"categories\":[\"Cactus\"],\"details\":{},\"frost\":[],\"special\":\"\"}];\n\n  function isCanonicalDataset(value) {\n    const keys = [\"categories\", \"details\", \"frost\", \"id\", \"name\", \"special\"];\n    return Array.isArray(value) && value.length > 0 && value.every(function (record) {\n      return record && typeof record === \"object\" &&\n        JSON.stringify(Object.keys(record).sort()) === JSON.stringify(keys) &&\n        typeof record.id === \"string\" && typeof record.name === \"string\" &&\n        typeof record.special === \"string\" && Array.isArray(record.categories) &&\n        Array.isArray(record.frost) && record.details && typeof record.details === \"object\";\n    });\n  }\n\n  async function loadExhibitors() {\n    try {\n      const response = await fetch(DATASET_URL, { headers: { \"Accept\": \"application\/json\" } });\n      if (!response.ok) throw new Error(\"Dataset HTTP \" + response.status);\n      const dataset = await response.json();\n      if (!isCanonicalDataset(dataset)) throw new Error(\"Dataset non compatibile\");\n      return dataset;\n    } catch (error) {\n      console.warn(\"Plant Finder: using the embedded emergency dataset.\", error);\n      return FALLBACK_EXHIBITORS;\n    }\n  }\n\n  async function loadAtomicSidecar() {\n    try {\n      const response = await fetch(SIDECAR_URL + \"?v=\" + Date.now(), { headers: { \"Accept\": \"application\/json\" } });\n      if (!response.ok) throw new Error(\"Sidecar HTTP \" + response.status);\n      const values = await response.json();\n      if (!Array.isArray(values) || !values.every(function (item) {\n        return item && typeof item.exhibitorId === \"string\" && typeof item.term === \"string\";\n      })) throw new Error(\"Incompatible sidecar\");\n      return values;\n    } catch (error) {\n      console.warn(\"Plant Finder: atomic index temporarily unavailable.\", error);\n      return [];\n    }\n  }\n\n  Promise.all([loadExhibitors(), loadAtomicSidecar()]).then(function (loaded) {\n  const exhibitors = loaded[0];\n  const atomicTerms = loaded[1];\n\n  \/*\n   * Quando l'URL definitivo della mappa sar\u00e0 stabilito,\n   * inserire qui la base del deep link, per esempio:\n   * const MAP_BASE = \"\/mappa\/?exh=\";\n   *\/\n  const MAP_BASE = \"https:\/\/www.festadelcactus.it\/mappa3d\/?exh=\";\n  const EXHIBITOR_CODES = {\"exh-001\":\"AF\",\"exh-002\":\"AL\",\"exh-003\":\"AQ\",\"exh-004\":\"AP\",\"exh-005\":\"AC\",\"exh-006\":\"AZ\",\"exh-007\":\"AU\",\"exh-008\":\"CA\",\"exh-009\":\"CC\",\"exh-010\":\"CD\",\"exh-011\":\"CL\",\"exh-012\":\"CT\",\"exh-013\":\"CF\",\"exh-014\":\"CR\",\"exh-015\":\"CM\",\"exh-016\":\"CS\",\"exh-017\":\"DS\",\"exh-019\":\"DK\",\"exh-020\":\"ES\",\"exh-021\":\"EP\",\"exh-022\":\"EQ\",\"exh-023\":\"ET\",\"exh-025\":\"FN\",\"exh-026\":\"FP\",\"exh-027\":\"FL\",\"exh-028\":\"FO\",\"exh-029\":\"GG\",\"exh-030\":\"GM\",\"exh-031\":\"GC\",\"exh-032\":\"GL\",\"exh-033\":\"HM\",\"exh-034\":\"HV\",\"exh-035\":\"CQ\",\"exh-036\":\"IC\",\"exh-037\":\"KA\",\"exh-038\":\"KF\",\"exh-039\":\"KL\",\"exh-040\":\"LD\",\"exh-041\":\"LS\",\"exh-042\":\"LO\",\"exh-043\":\"LC\",\"exh-044\":\"MJ\",\"exh-045\":\"MA\",\"exh-046\":\"MC\",\"exh-047\":\"MB\",\"exh-048\":\"MO\",\"exh-049\":\"OA\",\"exh-050\":\"OM\",\"exh-051\":\"OC\",\"exh-052\":\"OR\",\"exh-053\":\"PA\",\"exh-054\":\"PN\",\"exh-055\":\"PC\",\"exh-056\":\"PU\",\"exh-057\":\"RC\",\"exh-058\":\"SC\",\"exh-059\":\"SE\",\"exh-060\":\"SP\",\"exh-061\":\"SU\",\"exh-062\":\"SK\",\"exh-063\":\"TL\",\"exh-064\":\"UK\",\"exh-065\":\"VB\",\"exh-066\":\"VC\",\"exh-067\":\"YU\",\"exh-068\":\"JB\",\"exh-069\":\"ST\",\"exh-070\":\"IP\",\"exh-071\":\"SF\",\"exh-072\":\"GI\",\"exh-073\":\"PR\",\"exh-074\":\"CI\",\"exh-075\":\"VS\"};\n  const PRESENTATION_TERM_ALIASES = {\"Opuntioidee\":\"Opuntioideae\"};\n  const FROST_PRESENTATION = {\"Cactus e succulente resistenti al gelo\":[{\"category\":\"Cactus\",\"value\":\"Cactus resistenti al gelo\",\"label\":\"Frost-hardy cacti\"},{\"category\":\"Succulente\",\"value\":\"Succulente resistenti al gelo\",\"label\":\"Frost-hardy succulents\"}],\"Piante tropicali resistenti al gelo\":[{\"category\":\"Tropicali\",\"value\":\"Piante tropicali resistenti al gelo\",\"label\":\"Frost-hardy tropical plants\"}],\"Piante carnivore resistenti al gelo\":[{\"category\":\"Carnivore\",\"value\":\"Piante carnivore resistenti al gelo\",\"label\":\"Frost-hardy carnivorous plants\"}],\"Piante acquatiche resistenti al gelo\":[{\"category\":\"Acquatiche\",\"value\":\"Piante acquatiche resistenti al gelo\",\"label\":\"Frost-hardy aquatic plants\"}]};\n\n  const aliases = {\n    \"cacti\": \"cactus\",\n    \"succulents\": \"succulente\",\n    \"tropical plants\": \"tropicali\",\n    \"orchids\": \"orchidee\",\n    \"carnivorous plants\": \"carnivore\",\n    \"aquatic plants\": \"acquatiche\",\n    \"seeds\": \"semi\",\n    \"creative crafts\": \"artigianato creativo\",\n    \"gadgets\": \"gadget\",\n    \"growing supplies\": \"materiali per la coltivazione\",\n    \"caudex\": \"caudiciformi\",\n    \"caudiciform\": \"caudiciformi\",\n    \"caudiciforms\": \"caudiciformi\",\n    \"aroid\": \"aroidi\",\n    \"aroids\": \"aroidi\",\n    \"mesembs\": \"mesembryanthemaceae\",\n    \"aizoaceae\": \"mesembryanthemaceae\",\n    \"stapeliads\": \"asclepiadoideae\",\n    \"other cacti\": \"altri cactus\",\n    \"other succulents\": \"altre succulente\",\n    \"bulbous succulents\": \"bulbose succulente\",\n    \"mounted plants\": \"piante su zattera\",\n    \"other tropical plants\": \"altre tropicali\",\n    \"botanical species\": \"specie botaniche\",\n    \"other orchids\": \"altre orchidee\",\n    \"water lilies\": \"ninfee\",\n    \"marsh plants\": \"piante palustri\",\n    \"submerged plants\": \"piante sommerse\",\n    \"floating plants\": \"piante galleggianti\",\n    \"other aquatic plants\": \"altre acquatiche\"\n  };\n\n\n  const termTranslations = {\n    \"Cactus\": \"Cacti\",\n    \"Succulente\": \"Succulents\",\n    \"Tropicali\": \"Tropical plants\",\n    \"Orchidee\": \"Orchids\",\n    \"Carnivore\": \"Carnivorous plants\",\n    \"Acquatiche\": \"Aquatic plants\",\n    \"Semi\": \"Seeds\",\n    \"Artigianato creativo\": \"Creative crafts\",\n    \"Gadget\": \"Gadgets\",\n    \"Materiali per la coltivazione\": \"Growing supplies\",\n    \"Altro\": \"Other\",\n    \"Caudiciformi\": \"Caudiciforms\",\n    \"Altri cactus\": \"Other cacti\",\n    \"Bulbose succulente\": \"Bulbous succulents\",\n    \"Altre succulente\": \"Other succulents\",\n    \"Aroidi\": \"Aroids\",\n    \"Piante su zattera\": \"Mounted plants\",\n    \"Altre tropicali\": \"Other tropical plants\",\n    \"Specie botaniche\": \"Botanical species\",\n    \"Ibridi\": \"Hybrids\",\n    \"Altre orchidee\": \"Other orchids\",\n    \"Ninfee\": \"Water lilies\",\n    \"Piante palustri\": \"Marsh plants\",\n    \"Piante sommerse\": \"Submerged plants\",\n    \"Piante galleggianti\": \"Floating plants\",\n    \"Altre acquatiche\": \"Other aquatic plants\",\n    \"Cactus e succulente resistenti al gelo\": \"Frost-hardy cacti and succulents\",\n    \"Piante tropicali resistenti al gelo\": \"Frost-hardy tropical plants\",\n    \"Piante acquatiche resistenti al gelo\": \"Frost-hardy aquatic plants\"\n  };\n\n  function displayTerm(value) {\n    return termTranslations[value] || value;\n  }\n\n  const searchInput = document.getElementById(\"pf-search\");\n  const categoryButtons = document.querySelectorAll(\".pf-macro button\");\n  const subContainer = document.getElementById(\"pf-subcategories\");\n  const results = document.getElementById(\"pf-results\");\n\n  let selectedCategory = \"\";\n  let selectedDetail = \"\";\n\n  function normalize(value) {\n    return String(value || \"\")\n      .normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\n      .toLowerCase()\n      .trim();\n  }\n\n  function escapeHtml(value) {\n    const div = document.createElement(\"div\");\n    div.textContent = String(value || \"\");\n    return div.innerHTML;\n  }\n\n  function searchableText(record) {\n    const rawDetailValues = Object.values(record.details || {}).flat();\n    const detailValues = rawDetailValues.concat(rawDetailValues.map(canonicalUiTerm));\n    const frostValues = normalizedFrostTerms(record).flatMap(function (term) {\n      return [term.value, term.label];\n    });\n\n    return normalize([\n      record.id,\n      record.name,\n      ...(record.categories || []),\n      ...detailValues,\n      ...(record.frost || []),\n      ...frostValues,\n      record.special || \"\"\n    ].join(\" \"));\n  }\n\n  function expandedQueries(rawQuery) {\n    const query = normalize(rawQuery);\n    if (!query) return [];\n\n    const queries = [query];\n\n    Object.keys(aliases).forEach(function (key) {\n      if (query.includes(key)) {\n        queries.push(normalize(query.replace(key, aliases[key])));\n      }\n    });\n\n    return [...new Set(queries)];\n  }\n\n  function matchingAtomicTerms(record, rawQuery) {\n    const queries = expandedQueries(rawQuery);\n    if (!queries.length) return [];\n    return atomicTerms.filter(function (item) {\n      if (item.exhibitorId !== record.id) return false;\n      const term = normalize(item.term);\n      return queries.some(function (query) { return term.includes(query); });\n    }).map(function (item) { return item.term; }).filter(function (term, index, list) {\n      return list.indexOf(term) === index;\n    });\n  }\n\n  function recordMatchesSearch(record, query) {\n    const haystack = searchableText(record);\n    const queries = expandedQueries(query);\n\n    return queries.some(function (q) {\n      return haystack.includes(q);\n    }) || matchingAtomicTerms(record, query).length > 0;\n  }\n\n  function recordMatchesCategory(record, category) {\n    return (record.categories || []).includes(category) ||\n      Object.prototype.hasOwnProperty.call(record.details || {}, category);\n  }\n\n  function recordMatchesDetail(record, category, detail) {\n    const items = (record.details && record.details[category]) || [];\n    const detailMatches = items.some(function (item) { return canonicalUiTerm(item) === detail; });\n    const frostMatches = normalizedFrostTerms(record).some(function (term) {\n      return term.category === category && term.value === detail;\n    });\n    return detailMatches || frostMatches;\n  }\n\n  function getSubcategories(category) {\n    const found = new Set();\n\n    exhibitors.forEach(function (record) {\n      const values = (record.details && record.details[category]) || [];\n      values.forEach(function (value) {\n        found.add(canonicalUiTerm(value));\n      });\n      normalizedFrostTerms(record).forEach(function (term) {\n        if (term.category === category) found.add(term.value);\n      });\n    });\n\n    return Array.from(found).sort(function (a, b) {\n      return a.localeCompare(b, \"en\");\n    });\n  }\n\n  function showSubcategories(category) {\n    subContainer.innerHTML = \"\";\n\n    const items = getSubcategories(category);\n\n    items.forEach(function (item) {\n      const button = document.createElement(\"button\");\n      button.type = \"button\";\n      const frostTerm = Object.values(FROST_PRESENTATION).flat().find(function (term) { return term.value === item; });\n      button.textContent = frostTerm ? frostTerm.label : displayTerm(item);\n\n      button.addEventListener(\"click\", function () {\n        subContainer.querySelectorAll(\"button\").forEach(function (b) {\n          b.classList.remove(\"active\");\n        });\n\n        button.classList.add(\"active\");\n        selectedDetail = item;\n        searchInput.value = \"\";\n        renderResults();\n      });\n\n      subContainer.appendChild(button);\n    });\n  }\n\n  function clearActiveCategories() {\n    categoryButtons.forEach(function (button) {\n      button.classList.remove(\"active\");\n    });\n  }\n\n  function allDetails(record) {\n    const values = [];\n\n    Object.keys(record.details || {}).forEach(function (category) {\n      (record.details[category] || []).forEach(function (detail) {\n        values.push(canonicalUiTerm(detail));\n      });\n    });\n\n    return [...new Set(values)];\n  }\n\n  function canonicalUiTerm(value) {\n      return PRESENTATION_TERM_ALIASES[value] || value;\n    }\n  \n    function normalizedFrostTerms(record) {\n      const terms = [];\n      (record.frost || []).forEach(function (rawValue) {\n        const mapped = FROST_PRESENTATION[rawValue];\n        if (mapped) {\n          mapped.forEach(function (term) {\n            const hasCategory = (record.categories || []).includes(term.category) ||\n              Object.prototype.hasOwnProperty.call(record.details || {}, term.category);\n            if (hasCategory) terms.push(term);\n          });\n        } else {\n          terms.push({ category: \"\", value: rawValue, label: rawValue });\n        }\n      });\n      return terms.filter(function (term, index) {\n        return terms.findIndex(function (candidate) {\n          return candidate.category === term.category && candidate.value === term.value;\n        }) === index;\n      });\n    }\n  \n    function renderSpecialForDisplay(value) {\n      const original = String(value || \"\");\n      const normalized = original.replace(\/\\r\\n?\/g, \"\\n\");\n      const lines = normalized.split(\"\\n\");\n      const items = lines.map(function (line) { return line.trim(); }).filter(Boolean);\n      const isShortList = items.length > 1 &&\n        !lines.some(function (line) { return !line.trim(); }) &&\n        items.every(function (item) {\n          return item.length <= 120 && !\/[.!?\u2026][\"'\u2019\u201d)]?$\/.test(item);\n        });\n  \n      if (isShortList) return escapeHtml(items.join(\", \"));\n      return escapeHtml(normalized).replace(\/\\n\/g, \"<br>\");\n    }\n  \n    function renderCard(record) {\n      const categories = (record.categories || []).filter(function (category) {\n        return category !== \"Altro\";\n      });\n      const details = allDetails(record);\n      const code = EXHIBITOR_CODES[record.id] || \"\";\n  \n      let html = '<article class=\"pf-card\"><div class=\"pf-card-inner\">';\n      html += '<h3>' + escapeHtml(record.name) + '<\/h3>';\n      if (code) {\n        html += '<span class=\"pf-code\" aria-hidden=\"true\">' + escapeHtml(code) + '<\/span>';\n      }\n  \n      if (categories.length) {\n        html += '<div class=\"pf-tags\">';\n        categories.forEach(function (category) {\n          html += '<button class=\"pf-tag-button pf-category-tag\" type=\"button\" data-result-category=\"' +\n            escapeHtml(category) + '\">' + escapeHtml(displayTerm(category)) + '<\/button>';\n        });\n        html += '<\/div>';\n      }\n  \n      if (details.length) {\n        html += '<div class=\"pf-detail-tags\">';\n        details.forEach(function (detail, index) {\n          if (index) html += '<span class=\"pf-detail-separator\" aria-hidden=\"true\"> \u00b7 <\/span>';\n          html += '<button class=\"pf-detail-link\" type=\"button\" data-result-detail=\"' +\n            escapeHtml(detail) + '\">' + escapeHtml(displayTerm(detail)) + '<\/button>';\n        });\n        html += '<\/div>';\n      }\n\n      const atomicMatches = matchingAtomicTerms(record, searchInput.value.trim());\n      if (atomicMatches.length) {\n        html += '<p class=\"pf-atomic-match\"><span class=\"pf-atomic-label\">Matched term<\/span>' +\n          atomicMatches.map(escapeHtml).join('<span class=\"pf-detail-separator\" aria-hidden=\"true\"> \u00b7 <\/span>') + '<\/p>';\n      }\n\n      if (record.special) {\n        html += '<p class=\"pf-special\"><strong>Something special<\/strong>' +\n          renderSpecialForDisplay(record.special) + '<\/p>';\n      }\n  \n      const frostTerms = normalizedFrostTerms(record);\n      if (frostTerms.length) {\n        html += '<p class=\"pf-frost\"><strong>Frost resistance:<\/strong> ';\n        frostTerms.forEach(function (term, index) {\n          if (index) html += '<span class=\"pf-detail-separator\" aria-hidden=\"true\"> \u00b7 <\/span>';\n          html += '<button class=\"pf-frost-link\" type=\"button\" data-result-detail=\"' +\n            escapeHtml(term.value) + '\">' + escapeHtml(term.label) + '<\/button>';\n        });\n        html += '<\/p>';\n      }\n  \n      if (MAP_BASE) {\n        html += '<div class=\"pf-actions\"><a class=\"pf-map-link\" href=\"' +\n          escapeHtml(MAP_BASE + encodeURIComponent(record.id)) +\n          '\" target=\"fdc_mappa3d\" rel=\"noopener\"><span>Find on the 3D map<\/span>' +\n          '<span class=\"pf-map-arrow\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div>';\n      }\n  \n      html += '<\/div><\/article>';\n      return html;\n    }\n\n  function renderResults() {\n    const query = searchInput.value.trim();\n\n    let matches = exhibitors.filter(function (record) {\n\n      if (query) {\n        return recordMatchesSearch(record, query);\n      }\n\n      if (selectedDetail && selectedCategory) {\n        return recordMatchesDetail(record, selectedCategory, selectedDetail);\n      }\n\n      if (selectedCategory) {\n        return recordMatchesCategory(record, selectedCategory);\n      }\n\n      return false;\n    });\n\n    matches.sort(function (a, b) {\n      return a.name.localeCompare(b.name, \"en\");\n    });\n\n    if (!query && !selectedCategory) {\n      results.innerHTML =\n        '<p class=\"pf-start\">Select a category or type what you are looking for.<\/p>';\n      return;\n    }\n\n    if (!matches.length) {\n      results.innerHTML =\n        '<p class=\"pf-empty\">No results among the exhibitors currently listed in the Plant Finder.<\/p>';\n      return;\n    }\n\n    let label = \"\";\n\n    if (query) {\n      label = 'Results for <strong>' + escapeHtml(query) + '<\/strong>';\n    } else if (selectedDetail) {\n      label = '<strong>' + escapeHtml(displayTerm(selectedDetail)) + '<\/strong>';\n    } else {\n      label = '<strong>' + escapeHtml(displayTerm(selectedCategory)) + '<\/strong>';\n    }\n\n    let html =\n      '<div class=\"pf-results-head\">' +\n      label + ' \u00b7 ' + matches.length +\n      (matches.length === 1 ? ' exhibitor' : ' exhibitors') +\n      '<\/div>';\n\n    html += '<div class=\"pf-results-grid\">';\n    matches.forEach(function (record) {\n      html += renderCard(record);\n    });\n    html += '<\/div>';\n\n    results.innerHTML = html;\n  }\n\n  categoryButtons.forEach(function (button) {\n    button.addEventListener(\"click\", function () {\n      const category = button.dataset.category;\n\n      if (selectedCategory === category && button.classList.contains(\"active\")) {\n        selectedCategory = \"\";\n        selectedDetail = \"\";\n        button.classList.remove(\"active\");\n        subContainer.innerHTML = \"\";\n        renderResults();\n        return;\n      }\n\n      clearActiveCategories();\n      button.classList.add(\"active\");\n\n      selectedCategory = category;\n      selectedDetail = \"\";\n      searchInput.value = \"\";\n\n      showSubcategories(category);\n      renderResults();\n    });\n  });\n\n  results.addEventListener(\"click\", function (event) {\n    const categoryTag = event.target.closest(\"[data-result-category]\");\n    const detailTag = event.target.closest(\"[data-result-detail]\");\n\n    if (categoryTag) {\n      selectedCategory = categoryTag.dataset.resultCategory;\n      selectedDetail = \"\";\n      searchInput.value = \"\";\n      clearActiveCategories();\n      categoryButtons.forEach(function (button) {\n        button.classList.toggle(\"active\", button.dataset.category === selectedCategory);\n      });\n      showSubcategories(selectedCategory);\n      renderResults();\n      document.getElementById(\"pf-results\").scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n\n    if (detailTag) {\n      selectedCategory = \"\";\n      selectedDetail = \"\";\n      clearActiveCategories();\n      subContainer.innerHTML = \"\";\n      const frostTerm = Object.values(FROST_PRESENTATION).flat().find(function (term) { return term.value === detailTag.dataset.resultDetail; });\n      searchInput.value = frostTerm ? frostTerm.label : displayTerm(detailTag.dataset.resultDetail);\n      renderResults();\n      document.getElementById(\"pf-results\").scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n  });\n\n  searchInput.addEventListener(\"input\", function () {\n    selectedCategory = \"\";\n    selectedDetail = \"\";\n    clearActiveCategories();\n    subContainer.innerHTML = \"\";\n\n    if (searchInput.value.trim().length >= 2) {\n      renderResults();\n    } else {\n      results.innerHTML =\n        '<p class=\"pf-start\">Select a category or type what you are looking for.<\/p>';\n    }\n  });\n\n    const status = document.querySelector(\"#fdc-plantfinder .pf-status\");\n    if (status) status.textContent = \"Data is available for __COUNT__ exhibitors.\".replace(\"__COUNT__\", exhibitors.length);\n  });\n})();\n<\/script>\n\n<\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"footnotes":"","fdc_exhibitor_id":""},"class_list":["post-32718","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/pages\/32718","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/comments?post=32718"}],"version-history":[{"count":18,"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/pages\/32718\/revisions"}],"predecessor-version":[{"id":35461,"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/pages\/32718\/revisions\/35461"}],"wp:attachment":[{"href":"https:\/\/www.festadelcactus.it\/en\/wp-json\/wp\/v2\/media?parent=32718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}