{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/hatar-resenas.js?nc=25969"],
  "sourcesContent": ["/* hatar-resenas.js \u2014 clon del bloque de rese\u00F1as de Trustoo (APPS_REPLICA \u00A75 \u00B7 25-sep-2026).\n * Generado por resenas_js.py a partir de hatar-resenas.src.js (los iconos se insertan en {\"estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" width=\\\"24\\\" height=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 18 17\\\" fill=\\\"none\\\"><path fill=\\\"#FFA800\\\" d=\\\"M8.89062 0.565613L11.4299 6.07066L17.4501 6.78446L12.9992 10.9006L14.1807 16.8468L8.89062 13.8856L3.60056 16.8468L4.78206 10.9006L0.331117 6.78446L6.35139 6.07066L8.89062 0.565613Z\\\"></path></svg>\", \"verificado\": \"<svg class=\\\"trustoo-badge-icon\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"14\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM6.21017 11.4497C6.36872 11.6094 6.57573 11.6896 6.78357 11.6896C6.99058 11.6896 7.19842 11.6094 7.35697 11.4497L12.5 6.5C12.8163 6.17988 12.8163 5.66125 12.5 5.34113C12.1829 5.02019 11.6695 5.02019 11.3532 5.34113L6.78357 9.71017L4.11293 7.01029C3.79665 6.69018 3.28323 6.69018 2.96613 7.01029C2.64986 7.33041 2.64986 7.84987 2.96613 8.16998L6.21017 11.4497Z\\\" fill=\\\"#333333\\\"></path></svg>\", \"multi\": \"<svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 22 22\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <g id=\\\"Frame\\\" clip-path=\\\"url(#clip0_19222_33518)\\\"> <g id=\\\"Vector\\\" filter=\\\"url(#filter0_d_19222_33518)\\\"> <path d=\\\"M15.9499 13.6124V5.04154C15.9499 3.71237 14.8957 2.6582 13.5665 2.6582H5.04154C3.71237 2.6582 2.6582 3.71237 2.6582 5.04154V13.6124C2.6582 14.9415 3.71237 15.9957 5.04154 15.9957H13.6124C14.8957 15.9499 15.9499 14.8957 15.9499 13.6124ZM17.9665 6.87487V14.254C17.9665 16.3165 16.2707 18.0124 14.2082 18.0124H6.82904C6.55404 18.0124 6.41654 18.3332 6.59987 18.5165C7.0582 19.0207 7.69987 19.3415 8.47904 19.3415H14.6207C17.2332 19.3415 19.3415 17.2332 19.3415 14.6207V8.47904C19.3415 7.7457 19.0207 7.0582 18.5165 6.59987C18.2874 6.41654 17.9665 6.59987 17.9665 6.87487Z\\\" fill=\\\"white\\\"></path> </g> </g> <defs> <filter id=\\\"filter0_d_19222_33518\\\" x=\\\"-1.3418\\\" y=\\\"-1.3418\\\" width=\\\"24.6836\\\" height=\\\"24.6836\\\" filterUnits=\\\"userSpaceOnUse\\\" color-interpolation-filters=\\\"sRGB\\\"> <feFlood flood-opacity=\\\"0\\\" result=\\\"BackgroundImageFix\\\"></feFlood> <feColorMatrix in=\\\"SourceAlpha\\\" type=\\\"matrix\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\\\" result=\\\"hardAlpha\\\"></feColorMatrix> <feOffset></feOffset> <feGaussianBlur stdDeviation=\\\"2\\\"></feGaussianBlur> <feComposite in2=\\\"hardAlpha\\\" operator=\\\"out\\\"></feComposite> <feColorMatrix type=\\\"matrix\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\\\"></feColorMatrix> <feBlend mode=\\\"normal\\\" in2=\\\"BackgroundImageFix\\\" result=\\\"effect1_dropShadow_19222_33518\\\"></feBlend> <feBlend mode=\\\"normal\\\" in=\\\"SourceGraphic\\\" in2=\\\"effect1_dropShadow_19222_33518\\\" result=\\\"shape\\\"></feBlend> </filter> <clipPath id=\\\"clip0_19222_33518\\\"> <rect width=\\\"22\\\" height=\\\"22\\\" fill=\\\"white\\\"></rect> </clipPath> </defs> </svg>\", \"ordenar\": \"<svg data-tt-sort=\\\"\\\" width=\\\"19\\\" height=\\\"18\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M17.905 8.274H7.675a2.609 2.609 0 0 0-5.018 0H.714a.714.714 0 0 0 0 1.429h1.943a2.609 2.609 0 0 0 5.018 0h10.23a.714.714 0 0 0 0-1.429zM5.165 10.17a1.181 1.181 0 1 1-.001-2.363 1.181 1.181 0 0 1 .002 2.363zm12.74-8.296h-1.381a2.609 2.609 0 0 0-5.006 0H.718a.714.714 0 0 0 0 1.428h10.79a2.609 2.609 0 0 0 5.027 0h1.372a.714.714 0 1 0-.002-1.428zM14.02 3.79a1.18 1.18 0 1 1 .003 0h-.003zm3.885 10.886h-3.344a2.609 2.609 0 0 0-5.019 0H.718a.714.714 0 0 0 0 1.429h8.824a2.61 2.61 0 0 0 5.019 0h3.344a.714.714 0 0 0 0-1.429zm-5.853 1.895a1.181 1.181 0 1 1-.003-2.363 1.181 1.181 0 0 1 .003 2.363z\\\" fill=\\\"#000000\\\"></path> </svg>\", \"marca\": \"<svg width=\\\"14\\\" height=\\\"10\\\" viewBox=\\\"0 0 14 10\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M4.95902 6.78757L11.8702 0.242483C12.0341 0.0871857 12.256 0 12.4874 0C12.7187 0 12.9406 0.0871857 13.1046 0.242483L13.7423 0.84642C13.824 0.92377 13.8888 1.01571 13.933 1.11696C13.9772 1.21821 14 1.32677 14 1.43642C14 1.54606 13.9772 1.65462 13.933 1.75587C13.8888 1.85712 13.824 1.94906 13.7423 2.02641L5.59196 9.74524C5.55018 9.78491 5.50431 9.82047 5.45505 9.85138C5.28683 9.9625 5.08298 10.0139 4.879 9.99675C4.67502 9.97957 4.48384 9.89483 4.33876 9.75731L0.257673 5.89228C0.176006 5.81493 0.111202 5.72299 0.0669826 5.62174C0.0227634 5.52049 0 5.41193 0 5.30228C0 5.19264 0.0227634 5.08408 0.0669826 4.98283C0.111202 4.88158 0.176006 4.78964 0.257673 4.71229L0.895425 4.10835C1.05937 3.95305 1.28129 3.86587 1.51262 3.86587C1.74395 3.86587 1.96587 3.95305 2.12981 4.10835L4.95902 6.78757Z\\\" fill=\\\"#2A2A37\\\"></path> </svg>\", \"ant\": \"<svg style=\\\"width:13px;height:13px\\\" viewBox=\\\"0 0 7 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.84 2.066V1.031c0-.09-.104-.14-.173-.084L.629 5.662a.427.427 0 0 0 0 .674l6.038 4.716a.107.107 0 0 0 .173-.085V9.932a.217.217 0 0 0-.082-.169L1.936 6l4.822-3.765a.217.217 0 0 0 .082-.169z\\\" fill=\\\"#000000\\\"></path></svg>\", \"sig\": \"<svg style=\\\"width:13px;height:13px\\\" viewBox=\\\"0 0 7 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.398 5.663L.36.947a.107.107 0 0 0-.172.085v1.035c0 .065.03.128.081.169L5.091 6 .269 9.765a.213.213 0 0 0-.081.169v1.035c0 .09.103.14.172.084l6.038-4.715a.428.428 0 0 0 0-.675z\\\" fill=\\\"#000000\\\" fill-opacity=\\\".85\\\"></path></svg>\", \"flecha_orden\": \"<svg data-tt-sort=\\\"\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"6\\\" viewBox=\\\"0 0 10 6\\\" fill=\\\"none\\\"> <path d=\\\"M10 1.00024C10.0001 1.07086 9.98523 1.1407 9.95626 1.2051C9.92729 1.2695 9.88493 1.32699 9.83199 1.37374L5.33187 5.3737C5.24042 5.45506 5.12227 5.5 4.99986 5.5C4.87746 5.5 4.75931 5.45506 4.66785 5.3737L0.167731 1.37374C0.118681 1.33014 0.0786984 1.27731 0.0500671 1.21826C0.0214358 1.15921 0.00471592 1.0951 0.00086218 1.02959C-0.00299156 0.964078 0.00609628 0.898449 0.0276068 0.83645C0.0491174 0.774451 0.0826294 0.717296 0.126229 0.668248C0.169829 0.6192 0.222664 0.579219 0.281716 0.550589C0.340767 0.521958 0.40488 0.505239 0.470394 0.501386C0.535907 0.497532 0.601538 0.506619 0.66354 0.528129C0.725541 0.549639 0.782699 0.583149 0.831749 0.626748L4.99986 4.33171L9.16798 0.626748C9.23994 0.562557 9.32895 0.520568 9.42425 0.505852C9.51956 0.491135 9.61708 0.504318 9.70506 0.543811C9.79303 0.583304 9.8677 0.647416 9.92004 0.728409C9.97237 0.809403 10.0001 0.903813 10 1.00024Z\\\" fill=\\\"#000000\\\"></path> </svg>\", \"car_estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" viewBox=\\\"0 0 20 19\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M10 0L12.8214 6.11672L19.5106 6.90983L14.5651 11.4833L15.8779 18.0902L10 14.8L4.12215 18.0902L5.43493 11.4833L0.489435 6.90983L7.17863 6.11672L10 0Z\\\"></path> </svg>\", \"car_verif\": \"<svg class=\\\"trustoo-badge-icon\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M7 14C10.866 14 14 10.866 14 7C14 3.13401 10.866 0 7 0C3.13401 0 0 3.13401 0 7C0 10.866 3.13401 14 7 14ZM5.30236 10.7724C5.45276 10.9239 5.64913 11 5.84629 11C6.04267 11 6.23982 10.9239 6.39022 10.7724L11.775 5.32765C12.075 5.02399 12.075 4.532 11.775 4.22834C11.4742 3.92389 10.9871 3.92389 10.6871 4.22834L5.84629 9.1223L3.31288 6.56115C3.01286 6.25748 2.52581 6.25748 2.22501 6.56115C1.925 6.86481 1.925 7.35758 2.22501 7.66125L5.30236 10.7724Z\\\" fill=\\\"#000\\\"></path> </svg>\", \"car_ant\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"18\\\" viewBox=\\\"0 0 10 18\\\" fill=\\\"none\\\"> <path d=\\\"M8.92884 18C8.65455 18 8.38022 17.8949 8.17094 17.6839L0.313949 9.76416C-0.10465 9.34296 -0.10465 8.65889 0.313949 8.23695L8.17094 0.316457C8.58954 -0.105486 9.26745 -0.105486 9.68605 0.316457C10.1046 0.737664 10.1046 1.42173 9.68605 1.84367L2.58696 9.00017L9.68605 16.156C10.1046 16.5779 10.1046 17.2612 9.68605 17.6832C9.47746 17.8949 9.20313 18 8.92884 18Z\\\" fill=\\\"#202123\\\"></path> </svg>\", \"car_sig\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"18\\\" viewBox=\\\"0 0 10 18\\\" fill=\\\"none\\\"> <path d=\\\"M8.92884 18C8.65455 18 8.38022 17.8949 8.17094 17.6839L0.313949 9.76416C-0.10465 9.34296 -0.10465 8.65889 0.313949 8.23695L8.17094 0.316457C8.58954 -0.105486 9.26745 -0.105486 9.68605 0.316457C10.1046 0.737664 10.1046 1.42173 9.68605 1.84367L2.58696 9.00017L9.68605 16.156C10.1046 16.5779 10.1046 17.2612 9.68605 17.6832C9.47746 17.8949 9.20313 18 8.92884 18Z\\\" fill=\\\"#202123\\\"></path> </svg>\", \"cerrar\": \"<svg style=\\\"width:20px;height:20px\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M6.99968 5.95621L1.25984 0.216371C1.12066 0.0819462 0.934254 0.00756417 0.740764 0.00924555C0.547273 0.0109269 0.362184 0.0885372 0.225361 0.225361C0.0885372 0.362184 0.010927 0.547273 0.00924558 0.740764C0.0075642 0.934254 0.0819463 1.12066 0.216371 1.25984L5.95547 6.99968L0.216371 12.7395C0.147807 12.808 0.0934101 12.8894 0.056285 12.9789C0.01916 13.0685 3.431e-05 13.1644 4.612e-08 13.2614C-3.42178e-05 13.3583 0.0190236 13.4543 0.0560853 13.5439C0.0931471 13.6334 0.147487 13.7148 0.216002 13.7834C0.284518 13.8519 0.365867 13.9063 0.455405 13.9435C0.544944 13.9806 0.640917 13.9997 0.737847 13.9997C0.834777 13.9998 0.930764 13.9807 1.02033 13.9437C1.10989 13.9066 1.19128 13.8523 1.25984 13.7837L6.99968 8.04316L12.7395 13.7837C12.8081 13.8523 12.8895 13.9067 12.9791 13.9438C13.0687 13.9809 13.1647 14 13.2616 14C13.3586 14 13.4546 13.9809 13.5442 13.9438C13.6338 13.9067 13.7152 13.8523 13.7837 13.7837C13.8523 13.7152 13.9067 13.6338 13.9438 13.5442C13.9809 13.4546 14 13.3586 14 13.2616C14 13.1647 13.9809 13.0687 13.9438 12.9791C13.9067 12.8895 13.8523 12.8081 13.7837 12.7395L8.04316 6.99968L13.7837 1.25984C13.9221 1.12137 13.9998 0.933605 13.9997 0.737847C13.9997 0.542089 13.9218 0.354375 13.7834 0.216002C13.6449 0.0776292 13.4571 -6.91476e-05 13.2614 4.61754e-08C13.0656 6.92399e-05 12.8779 0.0779003 12.7395 0.216371L6.99968 5.95547V5.95621Z\\\" fill=\\\" #000000\\\"></path> </svg>\", \"det_cerrar\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" style=\\\"width: 18px;height: 18px;\\\" width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 18 18\\\" fill=\\\"none\\\"> <path d=\\\"M10.2732 9.00016L15.9369 3.33646C16.1057 3.1677 16.2005 2.93882 16.2005 2.70016C16.2005 2.4615 16.1057 2.23261 15.9369 2.06386C15.7682 1.8951 15.5393 1.80029 15.3006 1.80029C15.062 1.80029 14.8331 1.8951 14.6643 2.06386L9.00065 7.72756L3.33695 2.06386C3.25339 1.9803 3.15418 1.91401 3.04501 1.86879C2.93583 1.82357 2.81882 1.80029 2.70065 1.80029C2.58247 1.80029 2.46546 1.82357 2.35628 1.86879C2.24711 1.91401 2.14791 1.9803 2.06435 2.06386C1.89559 2.23261 1.80078 2.4615 1.80078 2.70016C1.80078 2.93882 1.89559 3.1677 2.06435 3.33646L7.72805 9.00016L2.06435 14.6639C1.89559 14.8326 1.80078 15.0615 1.80078 15.3002C1.80078 15.5388 1.89559 15.7677 2.06435 15.9365C2.2331 16.1052 2.46199 16.2 2.70065 16.2C2.9393 16.2 3.16819 16.1052 3.33695 15.9365L9.00065 10.2728L14.6643 15.9365C14.7477 16.0203 14.8469 16.0869 14.9561 16.1323C15.0653 16.1777 15.1824 16.2011 15.3006 16.2011C15.4189 16.2011 15.536 16.1777 15.6452 16.1323C15.7544 16.0869 15.8536 16.0203 15.9369 15.9365C16.0206 15.8529 16.087 15.7538 16.1322 15.6446C16.1775 15.5354 16.2008 15.4184 16.2008 15.3002C16.2008 15.182 16.1775 15.0649 16.1322 14.9557C16.087 14.8465 16.0206 14.7474 15.9369 14.6639L10.2732 9.00016Z\\\" fill=\\\"white\\\"></path> </svg>\", \"det_ant\": \"<svg style=\\\"transform: rotate(180deg);width:14px;height:24px;\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"24\\\" viewBox=\\\"0 0 14 24\\\" fill=\\\"none\\\"> <path d=\\\"M1.49962 1.10498e-06C1.88363 1.07104e-06 2.26769 0.14017 2.56068 0.421441L13.5605 10.9811C14.1465 11.5427 14.1465 12.4548 13.5605 13.0174L2.56069 23.5781C1.97465 24.1406 1.02557 24.1406 0.43953 23.5781C-0.146508 23.0164 -0.146508 22.1044 0.43953 21.5418L10.3783 11.9998L0.439529 2.45871C-0.14651 1.89612 -0.14651 0.985011 0.439528 0.422422C0.731552 0.140172 1.11561 1.13893e-06 1.49962 1.10498e-06Z\\\" fill=\\\"white\\\"></path> </svg>\", \"det_sig\": \"<svg style=\\\"transform: none;width:14px;height:24px;\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"24\\\" viewBox=\\\"0 0 14 24\\\" fill=\\\"none\\\"> <path d=\\\"M1.49962 1.10498e-06C1.88363 1.07104e-06 2.26769 0.14017 2.56068 0.421441L13.5605 10.9811C14.1465 11.5427 14.1465 12.4548 13.5605 13.0174L2.56069 23.5781C1.97465 24.1406 1.02557 24.1406 0.43953 23.5781C-0.146508 23.0164 -0.146508 22.1044 0.43953 21.5418L10.3783 11.9998L0.439529 2.45871C-0.14651 1.89612 -0.14651 0.985011 0.439528 0.422422C0.731552 0.140172 1.11561 1.13893e-06 1.49962 1.10498e-06Z\\\" fill=\\\"white\\\"></path> </svg>\", \"form_cerrar\": \"<svg style=\\\"width:14px;height:14px\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M6.99968 5.95621L1.25984 0.216371C1.12066 0.0819462 0.934254 0.00756417 0.740764 0.00924555C0.547273 0.0109269 0.362184 0.0885372 0.225361 0.225361C0.0885372 0.362184 0.010927 0.547273 0.00924558 0.740764C0.0075642 0.934254 0.0819463 1.12066 0.216371 1.25984L5.95547 6.99968L0.216371 12.7395C0.147807 12.808 0.0934101 12.8894 0.056285 12.9789C0.01916 13.0685 3.431e-05 13.1644 4.612e-08 13.2614C-3.42178e-05 13.3583 0.0190236 13.4543 0.0560853 13.5439C0.0931471 13.6334 0.147487 13.7148 0.216002 13.7834C0.284518 13.8519 0.365867 13.9063 0.455405 13.9435C0.544944 13.9806 0.640917 13.9997 0.737847 13.9997C0.834777 13.9998 0.930764 13.9807 1.02033 13.9437C1.10989 13.9066 1.19128 13.8523 1.25984 13.7837L6.99968 8.04316L12.7395 13.7837C12.8081 13.8523 12.8895 13.9067 12.9791 13.9438C13.0687 13.9809 13.1647 14 13.2616 14C13.3586 14 13.4546 13.9809 13.5442 13.9438C13.6338 13.9067 13.7152 13.8523 13.7837 13.7837C13.8523 13.7152 13.9067 13.6338 13.9438 13.5442C13.9809 13.4546 14 13.3586 14 13.2616C14 13.1647 13.9809 13.0687 13.9438 12.9791C13.9067 12.8895 13.8523 12.8081 13.7837 12.7395L8.04316 6.99968L13.7837 1.25984C13.9221 1.12137 13.9998 0.933605 13.9997 0.737847C13.9997 0.542089 13.9218 0.354375 13.7834 0.216002C13.6449 0.0776292 13.4571 -6.91476e-05 13.2614 4.61754e-08C13.0656 6.92399e-05 12.8779 0.0779003 12.7395 0.216371L6.99968 5.95547V5.95621Z\\\" fill=\\\" #5c5f62\\\"></path> </svg>\", \"form_estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" width=\\\"24\\\" height=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 18 17\\\" fill=\\\"none\\\"><path fill=\\\"#FFA800\\\" d=\\\"M8.89062 0.565613L11.4299 6.07066L17.4501 6.78446L12.9992 10.9006L14.1807 16.8468L8.89062 13.8856L3.60056 16.8468L4.78206 10.9006L0.331117 6.78446L6.35139 6.07066L8.89062 0.565613Z\\\"></path></svg>\"}). No editar el .js.\n *\n * Pinta LA MISMA estructura, con los mismos nombres de piezas, que el bloque de Trustoo medido en la tienda\n * (backups/trustoo_referencia): as\u00ED la hoja hatar-resenas.css lo deja igual al p\u00EDxel. Reglas medidas y copiadas:\n *   \u00B7 muro: 2 col (280-500 px) \u00B7 3 (501-919) \u00B7 4 (920-1149) \u00B7 5 (1150-1419) \u00B7 6 (\u22651420); ancho = (W \u2212 12\u00B7(col\u22121))/col;\n *     cada tarjeta a la columna m\u00E1s baja; hueco vertical 16 px (tambi\u00E9n en m\u00F3vil: el \u00AB18\u00BB de la 1\u00AA medici\u00F3n era falso,\n *     medido al p\u00EDxel el 25-sep 19:46 \u2192 el clon bajaba 2 px por fila);\n *   \u00B7 foto: solo la primera, fondo = color medio mientras carga, alto = ancho / proporci\u00F3n; icono \u00ABvarias fotos\u00BB si hay >1;\n *   \u00B7 texto de m\u00E1s de 200 caracteres (100 en m\u00F3vil) \u2192 se corta a 200 \u2212 18 = 182 y \u00AB...Mostrar rese\u00F1a completa\u00BB;\n *   \u00B7 nota con un decimal y media estrella proporcional; reparto en % con un decimal (o \u00AB0\u00BB si no hay ninguna);\n *   \u00B7 ficha: 19 por p\u00E1gina con n\u00FAmeros y flechas; p\u00E1gina de rese\u00F1as: 15 y carga al bajar.\n * Mejoras (orden de Sergio): al llegar al final vuelve a empezar desde la primera (ficha y p\u00E1gina) \u00B7 el enlace al producto\n * va en el idioma del cliente \u00B7 textos ya traducidos al pintar (sin parpadeo en ingl\u00E9s) \u00B7 fotos servidas por Shopify.\n */\n(function () {\n  \"use strict\";\n  var IC = {\"estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" width=\\\"24\\\" height=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 18 17\\\" fill=\\\"none\\\"><path fill=\\\"#FFA800\\\" d=\\\"M8.89062 0.565613L11.4299 6.07066L17.4501 6.78446L12.9992 10.9006L14.1807 16.8468L8.89062 13.8856L3.60056 16.8468L4.78206 10.9006L0.331117 6.78446L6.35139 6.07066L8.89062 0.565613Z\\\"></path></svg>\", \"verificado\": \"<svg class=\\\"trustoo-badge-icon\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"14\\\" viewBox=\\\"0 0 16 16\\\" fill=\\\"none\\\"><path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM6.21017 11.4497C6.36872 11.6094 6.57573 11.6896 6.78357 11.6896C6.99058 11.6896 7.19842 11.6094 7.35697 11.4497L12.5 6.5C12.8163 6.17988 12.8163 5.66125 12.5 5.34113C12.1829 5.02019 11.6695 5.02019 11.3532 5.34113L6.78357 9.71017L4.11293 7.01029C3.79665 6.69018 3.28323 6.69018 2.96613 7.01029C2.64986 7.33041 2.64986 7.84987 2.96613 8.16998L6.21017 11.4497Z\\\" fill=\\\"#333333\\\"></path></svg>\", \"multi\": \"<svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 22 22\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <g id=\\\"Frame\\\" clip-path=\\\"url(#clip0_19222_33518)\\\"> <g id=\\\"Vector\\\" filter=\\\"url(#filter0_d_19222_33518)\\\"> <path d=\\\"M15.9499 13.6124V5.04154C15.9499 3.71237 14.8957 2.6582 13.5665 2.6582H5.04154C3.71237 2.6582 2.6582 3.71237 2.6582 5.04154V13.6124C2.6582 14.9415 3.71237 15.9957 5.04154 15.9957H13.6124C14.8957 15.9499 15.9499 14.8957 15.9499 13.6124ZM17.9665 6.87487V14.254C17.9665 16.3165 16.2707 18.0124 14.2082 18.0124H6.82904C6.55404 18.0124 6.41654 18.3332 6.59987 18.5165C7.0582 19.0207 7.69987 19.3415 8.47904 19.3415H14.6207C17.2332 19.3415 19.3415 17.2332 19.3415 14.6207V8.47904C19.3415 7.7457 19.0207 7.0582 18.5165 6.59987C18.2874 6.41654 17.9665 6.59987 17.9665 6.87487Z\\\" fill=\\\"white\\\"></path> </g> </g> <defs> <filter id=\\\"filter0_d_19222_33518\\\" x=\\\"-1.3418\\\" y=\\\"-1.3418\\\" width=\\\"24.6836\\\" height=\\\"24.6836\\\" filterUnits=\\\"userSpaceOnUse\\\" color-interpolation-filters=\\\"sRGB\\\"> <feFlood flood-opacity=\\\"0\\\" result=\\\"BackgroundImageFix\\\"></feFlood> <feColorMatrix in=\\\"SourceAlpha\\\" type=\\\"matrix\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\\\" result=\\\"hardAlpha\\\"></feColorMatrix> <feOffset></feOffset> <feGaussianBlur stdDeviation=\\\"2\\\"></feGaussianBlur> <feComposite in2=\\\"hardAlpha\\\" operator=\\\"out\\\"></feComposite> <feColorMatrix type=\\\"matrix\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\\\"></feColorMatrix> <feBlend mode=\\\"normal\\\" in2=\\\"BackgroundImageFix\\\" result=\\\"effect1_dropShadow_19222_33518\\\"></feBlend> <feBlend mode=\\\"normal\\\" in=\\\"SourceGraphic\\\" in2=\\\"effect1_dropShadow_19222_33518\\\" result=\\\"shape\\\"></feBlend> </filter> <clipPath id=\\\"clip0_19222_33518\\\"> <rect width=\\\"22\\\" height=\\\"22\\\" fill=\\\"white\\\"></rect> </clipPath> </defs> </svg>\", \"ordenar\": \"<svg data-tt-sort=\\\"\\\" width=\\\"19\\\" height=\\\"18\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M17.905 8.274H7.675a2.609 2.609 0 0 0-5.018 0H.714a.714.714 0 0 0 0 1.429h1.943a2.609 2.609 0 0 0 5.018 0h10.23a.714.714 0 0 0 0-1.429zM5.165 10.17a1.181 1.181 0 1 1-.001-2.363 1.181 1.181 0 0 1 .002 2.363zm12.74-8.296h-1.381a2.609 2.609 0 0 0-5.006 0H.718a.714.714 0 0 0 0 1.428h10.79a2.609 2.609 0 0 0 5.027 0h1.372a.714.714 0 1 0-.002-1.428zM14.02 3.79a1.18 1.18 0 1 1 .003 0h-.003zm3.885 10.886h-3.344a2.609 2.609 0 0 0-5.019 0H.718a.714.714 0 0 0 0 1.429h8.824a2.61 2.61 0 0 0 5.019 0h3.344a.714.714 0 0 0 0-1.429zm-5.853 1.895a1.181 1.181 0 1 1-.003-2.363 1.181 1.181 0 0 1 .003 2.363z\\\" fill=\\\"#000000\\\"></path> </svg>\", \"marca\": \"<svg width=\\\"14\\\" height=\\\"10\\\" viewBox=\\\"0 0 14 10\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M4.95902 6.78757L11.8702 0.242483C12.0341 0.0871857 12.256 0 12.4874 0C12.7187 0 12.9406 0.0871857 13.1046 0.242483L13.7423 0.84642C13.824 0.92377 13.8888 1.01571 13.933 1.11696C13.9772 1.21821 14 1.32677 14 1.43642C14 1.54606 13.9772 1.65462 13.933 1.75587C13.8888 1.85712 13.824 1.94906 13.7423 2.02641L5.59196 9.74524C5.55018 9.78491 5.50431 9.82047 5.45505 9.85138C5.28683 9.9625 5.08298 10.0139 4.879 9.99675C4.67502 9.97957 4.48384 9.89483 4.33876 9.75731L0.257673 5.89228C0.176006 5.81493 0.111202 5.72299 0.0669826 5.62174C0.0227634 5.52049 0 5.41193 0 5.30228C0 5.19264 0.0227634 5.08408 0.0669826 4.98283C0.111202 4.88158 0.176006 4.78964 0.257673 4.71229L0.895425 4.10835C1.05937 3.95305 1.28129 3.86587 1.51262 3.86587C1.74395 3.86587 1.96587 3.95305 2.12981 4.10835L4.95902 6.78757Z\\\" fill=\\\"#2A2A37\\\"></path> </svg>\", \"ant\": \"<svg style=\\\"width:13px;height:13px\\\" viewBox=\\\"0 0 7 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.84 2.066V1.031c0-.09-.104-.14-.173-.084L.629 5.662a.427.427 0 0 0 0 .674l6.038 4.716a.107.107 0 0 0 .173-.085V9.932a.217.217 0 0 0-.082-.169L1.936 6l4.822-3.765a.217.217 0 0 0 .082-.169z\\\" fill=\\\"#000000\\\"></path></svg>\", \"sig\": \"<svg style=\\\"width:13px;height:13px\\\" viewBox=\\\"0 0 7 12\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.398 5.663L.36.947a.107.107 0 0 0-.172.085v1.035c0 .065.03.128.081.169L5.091 6 .269 9.765a.213.213 0 0 0-.081.169v1.035c0 .09.103.14.172.084l6.038-4.715a.428.428 0 0 0 0-.675z\\\" fill=\\\"#000000\\\" fill-opacity=\\\".85\\\"></path></svg>\", \"flecha_orden\": \"<svg data-tt-sort=\\\"\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"6\\\" viewBox=\\\"0 0 10 6\\\" fill=\\\"none\\\"> <path d=\\\"M10 1.00024C10.0001 1.07086 9.98523 1.1407 9.95626 1.2051C9.92729 1.2695 9.88493 1.32699 9.83199 1.37374L5.33187 5.3737C5.24042 5.45506 5.12227 5.5 4.99986 5.5C4.87746 5.5 4.75931 5.45506 4.66785 5.3737L0.167731 1.37374C0.118681 1.33014 0.0786984 1.27731 0.0500671 1.21826C0.0214358 1.15921 0.00471592 1.0951 0.00086218 1.02959C-0.00299156 0.964078 0.00609628 0.898449 0.0276068 0.83645C0.0491174 0.774451 0.0826294 0.717296 0.126229 0.668248C0.169829 0.6192 0.222664 0.579219 0.281716 0.550589C0.340767 0.521958 0.40488 0.505239 0.470394 0.501386C0.535907 0.497532 0.601538 0.506619 0.66354 0.528129C0.725541 0.549639 0.782699 0.583149 0.831749 0.626748L4.99986 4.33171L9.16798 0.626748C9.23994 0.562557 9.32895 0.520568 9.42425 0.505852C9.51956 0.491135 9.61708 0.504318 9.70506 0.543811C9.79303 0.583304 9.8677 0.647416 9.92004 0.728409C9.97237 0.809403 10.0001 0.903813 10 1.00024Z\\\" fill=\\\"#000000\\\"></path> </svg>\", \"car_estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" viewBox=\\\"0 0 20 19\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M10 0L12.8214 6.11672L19.5106 6.90983L14.5651 11.4833L15.8779 18.0902L10 14.8L4.12215 18.0902L5.43493 11.4833L0.489435 6.90983L7.17863 6.11672L10 0Z\\\"></path> </svg>\", \"car_verif\": \"<svg class=\\\"trustoo-badge-icon\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M7 14C10.866 14 14 10.866 14 7C14 3.13401 10.866 0 7 0C3.13401 0 0 3.13401 0 7C0 10.866 3.13401 14 7 14ZM5.30236 10.7724C5.45276 10.9239 5.64913 11 5.84629 11C6.04267 11 6.23982 10.9239 6.39022 10.7724L11.775 5.32765C12.075 5.02399 12.075 4.532 11.775 4.22834C11.4742 3.92389 10.9871 3.92389 10.6871 4.22834L5.84629 9.1223L3.31288 6.56115C3.01286 6.25748 2.52581 6.25748 2.22501 6.56115C1.925 6.86481 1.925 7.35758 2.22501 7.66125L5.30236 10.7724Z\\\" fill=\\\"#000\\\"></path> </svg>\", \"car_ant\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"18\\\" viewBox=\\\"0 0 10 18\\\" fill=\\\"none\\\"> <path d=\\\"M8.92884 18C8.65455 18 8.38022 17.8949 8.17094 17.6839L0.313949 9.76416C-0.10465 9.34296 -0.10465 8.65889 0.313949 8.23695L8.17094 0.316457C8.58954 -0.105486 9.26745 -0.105486 9.68605 0.316457C10.1046 0.737664 10.1046 1.42173 9.68605 1.84367L2.58696 9.00017L9.68605 16.156C10.1046 16.5779 10.1046 17.2612 9.68605 17.6832C9.47746 17.8949 9.20313 18 8.92884 18Z\\\" fill=\\\"#202123\\\"></path> </svg>\", \"car_sig\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"18\\\" viewBox=\\\"0 0 10 18\\\" fill=\\\"none\\\"> <path d=\\\"M8.92884 18C8.65455 18 8.38022 17.8949 8.17094 17.6839L0.313949 9.76416C-0.10465 9.34296 -0.10465 8.65889 0.313949 8.23695L8.17094 0.316457C8.58954 -0.105486 9.26745 -0.105486 9.68605 0.316457C10.1046 0.737664 10.1046 1.42173 9.68605 1.84367L2.58696 9.00017L9.68605 16.156C10.1046 16.5779 10.1046 17.2612 9.68605 17.6832C9.47746 17.8949 9.20313 18 8.92884 18Z\\\" fill=\\\"#202123\\\"></path> </svg>\", \"cerrar\": \"<svg style=\\\"width:20px;height:20px\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M6.99968 5.95621L1.25984 0.216371C1.12066 0.0819462 0.934254 0.00756417 0.740764 0.00924555C0.547273 0.0109269 0.362184 0.0885372 0.225361 0.225361C0.0885372 0.362184 0.010927 0.547273 0.00924558 0.740764C0.0075642 0.934254 0.0819463 1.12066 0.216371 1.25984L5.95547 6.99968L0.216371 12.7395C0.147807 12.808 0.0934101 12.8894 0.056285 12.9789C0.01916 13.0685 3.431e-05 13.1644 4.612e-08 13.2614C-3.42178e-05 13.3583 0.0190236 13.4543 0.0560853 13.5439C0.0931471 13.6334 0.147487 13.7148 0.216002 13.7834C0.284518 13.8519 0.365867 13.9063 0.455405 13.9435C0.544944 13.9806 0.640917 13.9997 0.737847 13.9997C0.834777 13.9998 0.930764 13.9807 1.02033 13.9437C1.10989 13.9066 1.19128 13.8523 1.25984 13.7837L6.99968 8.04316L12.7395 13.7837C12.8081 13.8523 12.8895 13.9067 12.9791 13.9438C13.0687 13.9809 13.1647 14 13.2616 14C13.3586 14 13.4546 13.9809 13.5442 13.9438C13.6338 13.9067 13.7152 13.8523 13.7837 13.7837C13.8523 13.7152 13.9067 13.6338 13.9438 13.5442C13.9809 13.4546 14 13.3586 14 13.2616C14 13.1647 13.9809 13.0687 13.9438 12.9791C13.9067 12.8895 13.8523 12.8081 13.7837 12.7395L8.04316 6.99968L13.7837 1.25984C13.9221 1.12137 13.9998 0.933605 13.9997 0.737847C13.9997 0.542089 13.9218 0.354375 13.7834 0.216002C13.6449 0.0776292 13.4571 -6.91476e-05 13.2614 4.61754e-08C13.0656 6.92399e-05 12.8779 0.0779003 12.7395 0.216371L6.99968 5.95547V5.95621Z\\\" fill=\\\" #000000\\\"></path> </svg>\", \"det_cerrar\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" style=\\\"width: 18px;height: 18px;\\\" width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 18 18\\\" fill=\\\"none\\\"> <path d=\\\"M10.2732 9.00016L15.9369 3.33646C16.1057 3.1677 16.2005 2.93882 16.2005 2.70016C16.2005 2.4615 16.1057 2.23261 15.9369 2.06386C15.7682 1.8951 15.5393 1.80029 15.3006 1.80029C15.062 1.80029 14.8331 1.8951 14.6643 2.06386L9.00065 7.72756L3.33695 2.06386C3.25339 1.9803 3.15418 1.91401 3.04501 1.86879C2.93583 1.82357 2.81882 1.80029 2.70065 1.80029C2.58247 1.80029 2.46546 1.82357 2.35628 1.86879C2.24711 1.91401 2.14791 1.9803 2.06435 2.06386C1.89559 2.23261 1.80078 2.4615 1.80078 2.70016C1.80078 2.93882 1.89559 3.1677 2.06435 3.33646L7.72805 9.00016L2.06435 14.6639C1.89559 14.8326 1.80078 15.0615 1.80078 15.3002C1.80078 15.5388 1.89559 15.7677 2.06435 15.9365C2.2331 16.1052 2.46199 16.2 2.70065 16.2C2.9393 16.2 3.16819 16.1052 3.33695 15.9365L9.00065 10.2728L14.6643 15.9365C14.7477 16.0203 14.8469 16.0869 14.9561 16.1323C15.0653 16.1777 15.1824 16.2011 15.3006 16.2011C15.4189 16.2011 15.536 16.1777 15.6452 16.1323C15.7544 16.0869 15.8536 16.0203 15.9369 15.9365C16.0206 15.8529 16.087 15.7538 16.1322 15.6446C16.1775 15.5354 16.2008 15.4184 16.2008 15.3002C16.2008 15.182 16.1775 15.0649 16.1322 14.9557C16.087 14.8465 16.0206 14.7474 15.9369 14.6639L10.2732 9.00016Z\\\" fill=\\\"white\\\"></path> </svg>\", \"det_ant\": \"<svg style=\\\"transform: rotate(180deg);width:14px;height:24px;\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"24\\\" viewBox=\\\"0 0 14 24\\\" fill=\\\"none\\\"> <path d=\\\"M1.49962 1.10498e-06C1.88363 1.07104e-06 2.26769 0.14017 2.56068 0.421441L13.5605 10.9811C14.1465 11.5427 14.1465 12.4548 13.5605 13.0174L2.56069 23.5781C1.97465 24.1406 1.02557 24.1406 0.43953 23.5781C-0.146508 23.0164 -0.146508 22.1044 0.43953 21.5418L10.3783 11.9998L0.439529 2.45871C-0.14651 1.89612 -0.14651 0.985011 0.439528 0.422422C0.731552 0.140172 1.11561 1.13893e-06 1.49962 1.10498e-06Z\\\" fill=\\\"white\\\"></path> </svg>\", \"det_sig\": \"<svg style=\\\"transform: none;width:14px;height:24px;\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"24\\\" viewBox=\\\"0 0 14 24\\\" fill=\\\"none\\\"> <path d=\\\"M1.49962 1.10498e-06C1.88363 1.07104e-06 2.26769 0.14017 2.56068 0.421441L13.5605 10.9811C14.1465 11.5427 14.1465 12.4548 13.5605 13.0174L2.56069 23.5781C1.97465 24.1406 1.02557 24.1406 0.43953 23.5781C-0.146508 23.0164 -0.146508 22.1044 0.43953 21.5418L10.3783 11.9998L0.439529 2.45871C-0.14651 1.89612 -0.14651 0.985011 0.439528 0.422422C0.731552 0.140172 1.11561 1.13893e-06 1.49962 1.10498e-06Z\\\" fill=\\\"white\\\"></path> </svg>\", \"form_cerrar\": \"<svg style=\\\"width:14px;height:14px\\\" viewBox=\\\"0 0 14 14\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"> <path d=\\\"M6.99968 5.95621L1.25984 0.216371C1.12066 0.0819462 0.934254 0.00756417 0.740764 0.00924555C0.547273 0.0109269 0.362184 0.0885372 0.225361 0.225361C0.0885372 0.362184 0.010927 0.547273 0.00924558 0.740764C0.0075642 0.934254 0.0819463 1.12066 0.216371 1.25984L5.95547 6.99968L0.216371 12.7395C0.147807 12.808 0.0934101 12.8894 0.056285 12.9789C0.01916 13.0685 3.431e-05 13.1644 4.612e-08 13.2614C-3.42178e-05 13.3583 0.0190236 13.4543 0.0560853 13.5439C0.0931471 13.6334 0.147487 13.7148 0.216002 13.7834C0.284518 13.8519 0.365867 13.9063 0.455405 13.9435C0.544944 13.9806 0.640917 13.9997 0.737847 13.9997C0.834777 13.9998 0.930764 13.9807 1.02033 13.9437C1.10989 13.9066 1.19128 13.8523 1.25984 13.7837L6.99968 8.04316L12.7395 13.7837C12.8081 13.8523 12.8895 13.9067 12.9791 13.9438C13.0687 13.9809 13.1647 14 13.2616 14C13.3586 14 13.4546 13.9809 13.5442 13.9438C13.6338 13.9067 13.7152 13.8523 13.7837 13.7837C13.8523 13.7152 13.9067 13.6338 13.9438 13.5442C13.9809 13.4546 14 13.3586 14 13.2616C14 13.1647 13.9809 13.0687 13.9438 12.9791C13.9067 12.8895 13.8523 12.8081 13.7837 12.7395L8.04316 6.99968L13.7837 1.25984C13.9221 1.12137 13.9998 0.933605 13.9997 0.737847C13.9997 0.542089 13.9218 0.354375 13.7834 0.216002C13.6449 0.0776292 13.4571 -6.91476e-05 13.2614 4.61754e-08C13.0656 6.92399e-05 12.8779 0.0779003 12.7395 0.216371L6.99968 5.95547V5.95621Z\\\" fill=\\\" #5c5f62\\\"></path> </svg>\", \"form_estrella\": \"<svg class=\\\"trustoo-rating-icon\\\" width=\\\"24\\\" height=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 18 17\\\" fill=\\\"none\\\"><path fill=\\\"#FFA800\\\" d=\\\"M8.89062 0.565613L11.4299 6.07066L17.4501 6.78446L12.9992 10.9006L14.1807 16.8468L8.89062 13.8856L3.60056 16.8468L4.78206 10.9006L0.331117 6.78446L6.35139 6.07066L8.89062 0.565613Z\\\"></path></svg>\"};\n  var ORDENES = [[\"comprehensive-descending\", \"d\", 4], [\"image-descending\", \"f\", 0], [\"commented-at-descending\", \"n\", 1], [\"rating-descending\", \"h\", 2], [\"rating-ascending\", \"l\", 3]];\n  // 30-sep (Sergio: \u00ABal pulsar la H de HatarShop, que te lleve al sitio indicado\u00BB): el logo del formulario y de \u00ABgracias\u00BB lleva\n  // a la portada, en el idioma en que est\u00E1 el cliente.\n  function inicio() { try { return (window.Shopify && Shopify.routes && Shopify.routes.root) || \"/\"; } catch (e) { return \"/\"; } }\n  function esc(s) { return String(s == null ? \"\" : s).replace(/[&<>\"']/g, function (c) { return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[c]; }); }\n\n  // \u2500\u2500 estrellas \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function estrellasNota(nota) {\n    var h = \"\", n = Number(nota) || 0;\n    for (var i = 1; i <= 5; i++) {\n      if (n >= i) h += '<div class=\"star-item\">' + IC.estrella + \"</div>\";\n      else if (n > i - 1) h += '<div class=\"star-item half-star\"> <div class=\"item-nostar\">' + IC.estrella + '</div> <div class=\"item-star\" style=\"width:' + Math.round((n - (i - 1)) * 100) + '%\"> ' + IC.estrella + \" </div> </div>\";\n      else h += '<div class=\"star-item nostar\">' + IC.estrella + \"</div>\";\n    }\n    return h;\n  }\n  function estrellasResena(s) {\n    var h = \"\";\n    for (var i = 1; i <= 5; i++) h += '<div class=\"star-item' + (i > s ? \" nostar\" : \"\") + '\">' + IC.estrella + \"</div>\";\n    return h + '<span class=\"rev-rating-num\"></span>';\n  }\n\n  // \u2500\u2500 cabecera \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function cabecera(d, T, o) {\n    var nota = (Number(o.nota) || 0).toFixed(1);   // como Trustoo: toFixed(1) de su nota (4.85 \u2192 \"4.8\" por la coma flotante, igual que all\u00ED)\n    var filas = \"\";\n    for (var s = 5; s >= 1; s--) {\n      var n = d.reparto[5 - s] || 0, p = n ? (n / d.total * 100).toFixed(1) + \"%\" : \"0\", w = n ? (n / d.total * 100).toFixed(1) + \"%\" : \"0\";\n      filas += '<div class=\"star-raw\"><span class=\"star-classify\"> <span class=\"number\">' + s + '</span> <span data-tt-lang-path=\"' + (s === 1 ? \"star\" : \"stars|star\") + '\">' + esc(T.estrellas) +\n        '</span></span><span class=\"star-range\" index=\"' + s + '\" style=\"background: linear-gradient(to right, var(--star-color) 0%, var(--star-color) ' + w + \",var(--nostar-color) \" + w +\n        ', var(--nostar-color));\"></span><span class=\"star-num\">' + p + \"</span> </div>\";\n    }\n    var derecha = o.pagina ? \"\" :\n      '<button class=\"head-button tt-write-reviews\" type=\"button\" data-type=\"all-reviews\" data-tt-lang-path=\"write_reviews\" style=\"display: block;\">' + esc(T.escribir) + \"</button>\" + ordenar(T, o.orden, false);\n    return '<div id=\"reviews-head\"> <p class=\"tt-head-title\" data-tt-lang-path=\"customer_reviews\" style=\"\">' + esc(T.titulo) + '</p> <div class=\"tt-head-content\" style=\"\"> <div class=\"tt-head-left \" style=\"\"> <div class=\"head-left\"> <div class=\"product-rating\"> <p class=\"point\"> <span class=\"big-point\">' + nota +\n      '</span> </p> <div class=\"vstar-star\"> ' + estrellasNota(nota) + ' </div> <p class=\"reviews-num\">' + esc(T.satisfaccion) +\n      '</p> </div> </div><div class=\"tt-dividing\" style=\"width: 1px;background: var(--line-color);height: 110px;opacity: 1;display: block;\"></div><div class=\"head-center\"> ' + filas +\n      ' </div> </div> <div class=\"tt-head-right\" style=\"\">' + derecha + \"</div> </div> </div>\";\n  }\n  function listaOrden(T, activo) {\n    var h = '<ul class=\"sort-list\"> <li class=\"sort-title\" data-tt-lang-path=\"sort_by\">' + esc(T.ordenar) + \"</li> \";\n    ORDENES.forEach(function (x, i) {\n      h += '<li index=\"' + i + '\" sort-value=\"' + x[0] + '\" class=\"sort-item ' + (x[0] === activo ? \"active\" : \"\") + '\" data-tt-lang-path=\"sort_by_options.' + x[2] + '\">' + esc(T.opciones[x[2]]) + \"</li>\";\n    });\n    var fila = 0; ORDENES.forEach(function (x, i) { if (x[0] === activo) fila = i; });\n    return h + ' </ul> <div class=\"sort-active\" style=\"top:' + (54 + fila * 44) + 'px\">' + IC.marca + \" </div>\";\n  }\n  function ordenar(T, activo) {\n    return '<div class=\"head-sort\" data-tt-sort=\"\"><div class=\"sort-content\" data-tt-sort=\"\"> <div class=\"sort-icon\">' + IC.ordenar + ' </div> <div class=\"sort-popup\"> ' + listaOrden(T, activo) + \" </div> </div></div>\";\n  }\n  // total: solo en la ventana lateral (Trustoo: \u00ABClientes Satisfechos (<span class=\"tt-number\" data-product-reviews>762</span>)\u00BB);\n  // aqu\u00ED va el INFLADO de la tienda (regla 29-sep), nunca el real. En la p\u00E1gina de rese\u00F1as Trustoo no pintaba n\u00FAmero.\n  function filaOrdenPagina(T, activo, total, lang) {\n    var nombre = T.opciones[ORDENES.filter(function (x) { return x[0] === activo; })[0][2]];\n    return '<div class=\"tt-tabs-list\"> <span class=\"tt-tab active\" index=\"0\">' + esc(T.pestana) + (total > 0 ? ' (<span class=\"tt-number\" data-product-reviews=\"\">' + esc(Number(total).toLocaleString(lang || \"en\")) + \"</span>)\" : \"\") + '</span> </div><div class=\"tt-reviews-sort\"> <div class=\"tt-sort-content\" style=\"text-align:right\"><span data-tt-sort=\"\" style=\"margin-right:8px;font-size:14px\">' +\n      esc(nombre) + \"</span>\" + IC.flecha_orden + '</div> <div class=\"sort-popup\"> ' + listaOrden(T, activo) + \" </div> </div>\";\n  }\n\n  // \u2500\u2500 V8 (03-oct): rese\u00F1as en el idioma de la p\u00E1gina \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // traducciones_auto.py --resenas publica hatar-resenas-tr-<fichero>-<idioma>.json = {id: [texto, t\u00EDtulo] | 0}.\n  // [..] = se pinta la traducci\u00F3n (la original queda en r.ot / r.oti) \u00B7 0 = promesa de salud: fuera de su idioma no se\n  // ense\u00F1a \u00B7 sin clave o sin fichero = la rese\u00F1a original, igual que siempre (nunca se rompe nada por faltar uno).\n  function datosTraducidos(cfg) {\n    var tr = cfg.tr ? fetch(cfg.tr).then(function (r) { return r.ok ? r.json() : {}; }).catch(function () { return {}; }) : Promise.resolve({});\n    return Promise.all([fetch(cfg.datos).then(function (r) { return r.json(); }), tr]).then(function (x) { return aplicarTraduccion(x[0], x[1] || {}); });\n  }\n  function aplicarTraduccion(d, TR) {\n    if (!d || !d.r) return d;\n    var nuevo = [], mapa = {};\n    d.r.forEach(function (r, i) {\n      var t = TR[r.i];\n      if (t === 0) return;\n      if (t && t.length) { r.ot = r.t; r.oti = r.ti; if (t[0]) r.t = t[0]; if (r.ti && t[1]) r.ti = t[1]; }\n      mapa[i] = nuevo.length; nuevo.push(r);\n    });\n    if (nuevo.length === d.r.length) { d.r = nuevo; return d; }\n    var o = {};\n    for (var k in (d.orden || {})) o[k] = d.orden[k].filter(function (i) { return i in mapa; }).map(function (i) { return mapa[i]; });\n    d.r = nuevo; d.orden = o; d.vis = nuevo.length;\n    return d;\n  }\n\n  // \u2500\u2500 tarjeta \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function cortar(t, T, no, movil) {\n    var lim = movil ? 100 : 200;\n    if (t.length <= lim) return esc(t);\n    var n = lim - T.largo_corte - 2;               // Trustoo resta la longitud de \u00ABShow full review\u00BB (16) + 2\n    return esc(t.substr(0, n)) + '<span class=\"display-text\" data-card-no=\"' + no + '\">...<span data-tt-lang-path=\"show_full_review\">' + esc(T.completa) +\n      '</span></span><span hidden=\"\" class=\"remain-text\">' + esc(t.substr(n)) + \"</span>\";\n  }\n  function tarjeta(r, i, pag, T, o) {\n    var no = i + 1, f = r.f || [], foto = \"\";\n    if (f.length) {\n      var x = f[0], w = o.ancho || 266;\n      foto = (f.length > 1 ? '<div class=\"multi-photo-wrapper\"> ' + IC.multi + \" </div>\" : \"\") +\n        '<div class=\"resource-list\"><div class=\"resource-item\" style=\"background-color: ' + esc(x[3] || \"#eee\") + \"; width: \" + w + \"px; height: \" + (w / (x[4] || 1)) + 'px;\" new-grid-img=\"\" proportion=\"' + Number(x[4] || 1).toFixed(2) + '\">' +\n        ' <img index=\"0\" loading=\"lazy\" style=\"display: block;\" data-index=\"0\" data-page=\"' + pag + '\" data-review-index=\"' + i + '\" alt=\"0\" no=\"' + no + '\" src=\"' + esc(tam(x[0], 600)) + '\" width=\"' + w + '\"> </div></div>';\n    }\n    var prod = \"\";\n    if (o.pagina && r.p && o.productos[r.p]) {\n      // nombre como Trustoo: el ingl\u00E9s cortado a 50 + \u00AB...\u00BB (el diccionario de la tienda lo traduce, igual que hoy);\n      // direcci\u00F3n: el producto en el idioma del cliente (Trustoo mandaba siempre a la versi\u00F3n inglesa)\n      var P = o.productos[r.p], nom = P.n.length > 50 ? P.n.substr(0, 50) + \"...\" : P.n, url = o.url ? o.url(r.p) : o.raiz + \"products/\" + r.p;\n      prod = '<a class=\"related-product\" url=\"' + esc(url) + '\" href=\"' + esc(url) + '\" target=\"_blank\"> <div class=\"product-image\"><div style=\"background-image:url(' + esc(tam(P.i, 360)) +\n        ')\" class=\"related-product-image\"></div></div> <div class=\"product-name\">' + esc(nom) + \"</div> </a>\";\n    }\n    return '<div class=\"grid-review\" data-index=\"' + i + '\" data-page=\"' + pag + '\" data-rating=\"' + r.s + '\" no=\"' + no + '\" review-id=\"' + esc(r.i) + '\">' + foto +\n      ' <div class=\"grid-review-head\"> <div class=\"review-row-one\"> <div class=\"vstar-star\">' + estrellasResena(r.s) + '</div> </div> <div class=\"grid-mobile\" style=\"\"> </div> <div class=\"user-message\"> <div> <span class=\"user-name\"> <span class=\"author-name\"> ' +\n      esc(String(r.a).trim()) + \" </span> </span> \" + (r.v ? '<div class=\"user-verified\">' + IC.verificado + '<span class=\"verified-text\" data-tt-lang-path=\"verified_purchase\">' + esc(T.verificada) + \"</span></div>\" : \"\") +\n      ' </div> </div> </div> <div class=\"grid-review-body\"> ' + (r.ti ? '<p class=\"reviews-title\">' + esc(r.ti) + \"</p>\" : \"\") + '<p class=\"reviews-text\">' + cortar(String(r.t || \"\"), T, no, o.movil) + \"</p> \" + respuesta(r) + prod + \" </div> </div>\";\n  }\n  // 1-oct (auditor\u00EDa final Trustoo H2): respuesta de la tienda debajo de la rese\u00F1a, calcada de seal-review (bloque\n  // \u00ABmerchant-reply\u00BB: avatar de la tienda de 32 px, nombre en negrita y el texto; fondo --reply-bg-color #F2F2F2)\n  var AVATAR_TIENDA = \"https://cdn.shopify.com/s/files/1/0645/9539/4828/files/hatar-resenas-avatar-tienda.png?v=1790349784\";\n  function respuesta(r) {\n    if (!r.rp) return \"\";\n    return '<div class=\"merchant-reply\">          <div style=\"display:flex;align-items: center; margin-bottom:12px\"><div class=\"tt-shop-avatar\"><img src=\"' + AVATAR_TIENDA +\n      '\" /></div><div style=\"font-size: 14px;font-weight: 700;\">HatarShop</div></div>          <div class=\"reply-content\">' + esc(r.rp) + \"</div>        </div>\";\n  }\n  function tam(u, w) { return u ? u + (u.indexOf(\"?\") < 0 ? \"?\" : \"&\") + \"width=\" + w : u; }\n\n  // \u00ABM\u00F3vil\u00BB como lo decide Trustoo: por el identificador del aparato (Android, o iPhone que no sea iPad), no por el ancho.\n  // De esto dependen el corte de texto (100/200) y el hueco vertical del muro (18/16).\n  function esMovil() {\n    var t = navigator.userAgent, e = /Android/.test(t), i = /Firefox/.test(t), s = /iPad|PlayBook/.test(t) || (e && !/Mobile/.test(t)) || (i && /Tablet/.test(t));\n    return e || (/iPhone/.test(t) && !s);\n  }\n\n  // \u2500\u2500 muro (posiciones como Trustoo) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function columnas(W) { return W >= 1420 ? 6 : W >= 1150 ? 5 : W >= 920 ? 4 : W >= 501 ? 3 : W >= 280 ? 2 : 1; }\n  function colocar(lista, cartas, movil, desde) {\n    var W = parseInt(getComputedStyle(lista).width, 10) || lista.clientWidth, c = columnas(W), ancho = (W - 12 * (c - 1)) / c, gap = 16;\n    var alt = desde && lista.__alt && lista.__alt.length === c ? lista.__alt : [];\n    if (!alt.length) for (var k = 0; k < c; k++) alt.push(0);\n    cartas.forEach(function (el) {\n      el.style.width = ancho + \"px\";\n      var ri = el.querySelector(\".resource-item\");\n      if (ri) {\n        // solo la caja que a\u00FAn espera su foto lleva alto calculado; con la foto cargada manda la foto (como Trustoo)\n        if (ri.hasAttribute(\"new-grid-img\")) { ri.style.width = ancho + \"px\"; ri.style.height = ancho / Number(ri.getAttribute(\"proportion\") || 1) + \"px\"; }\n        var im = ri.querySelector(\"img\"); if (im) { im.width = ancho; if (im.__alto) im.style.height = ancho * im.__alto + \"px\"; }\n      }\n    });\n    cartas.forEach(function (el) {\n      var m = Math.min.apply(null, alt), col = alt.indexOf(m);\n      el.classList.add(\"column\" + (col + 1)); el.setAttribute(\"data-column\", col + 1);\n      el.style.left = col * (ancho + 12) + \"px\"; el.style.top = m + \"px\";\n      alt[col] = m + el.offsetHeight + gap;\n    });\n    lista.__alt = alt; lista.style.height = Math.max.apply(null, alt) + \"px\";\n    return ancho;\n  }\n\n  // \u2500\u2500 montaje \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function montar(raiz, cfg, ventana) {\n    // se coloca donde lo pon\u00EDa Trustoo (p. ej. el hueco #vstar-all-reviews de la p\u00E1gina de rese\u00F1as)\n    var destino = cfg.destino && document.querySelector(cfg.destino);\n    if (destino && !destino.contains(raiz)) destino.appendChild(raiz);\n    // ficha: como Trustoo, detr\u00E1s de la secci\u00F3n del producto (fuera de ella) dentro de #trustoo-widget-wrapper en columna\n    if (cfg.modo === \"producto\" && !ventana && !raiz.closest(\"#trustoo-widget-wrapper\")) {\n      var sec = raiz.closest(\".shopify-section\");\n      if (sec) {\n        var cont = document.getElementById(\"trustoo-widget-wrapper\") || document.createElement(\"div\");\n        if (!cont.id) { cont.id = \"trustoo-widget-wrapper\"; cont.setAttribute(\"style\", \"display: flex;flex-direction: column;\"); sec.parentNode.insertBefore(cont, sec.nextSibling); }\n        cont.insertBefore(raiz, cont.firstChild);\n      }\n    }\n    var T = cfg.textos, pagina = cfg.modo === \"pagina\" || !!ventana, porPag = pagina ? 15 : 19, movil = esMovil();\n    // 1-oct (auditor\u00EDa final Trustoo H9): producto SIN rese\u00F1as \u2192 el bloque vac\u00EDo de Trustoo (funci\u00F3n E de seal-review:\n    // #vstar-noreviews, t\u00EDtulo, bot\u00F3n \u00ABEscribe una rese\u00F1a\u00BB, 5 estrellas grises y \u00ABA\u00FAn no hay comentarios\u00BB), para poder recibir la primera\n    if (cfg.vacio) {\n      raiz.insertAdjacentHTML(\"beforeend\", '<div id=\"vstar-noreviews\" show-type=\"reviews\" class=\"trustoo-widget page-width\" data-product-id=\"' + esc(cfg.producto || \"\") +\n        '\"><div id=\"tt-first-row\"><div class=\"noreviews-title\" data-tt-lang-path=\"customer_reviews\">' + esc(T.titulo) + '</div><div id=\"tt-buttons\"><button class=\"noreviews-button tt-write-reviews\" type=\"button\" data-tt-lang-path=\"write_reviews\">' +\n        esc(T.escribir) + '</button></div></div><div class=\"noreviews-center\"><div class=\"nostar-wrapper\"><div class=\"noreviews-nostar vstar-star\">' + estrellasNota(0) +\n        '</div></div><p class=\"noreviews-text\" data-tt-lang-path=\"no_reviews\">' + esc(T.sin || \"\") + '</p></div><div id=\"reviews-body\"></div></div>');\n      raiz.querySelector(\".tt-write-reviews\").onclick = function () { abrirFormulario(cfg, T); };\n      return;\n    }\n    datosTraducidos(cfg).then(function (d) {\n      if (!d.total) return;\n      var st = { orden: \"comprehensive-descending\", pag: 1 };\n      var raizUrl = (window.Shopify && Shopify.routes && Shopify.routes.root) || \"/\";\n      var o = { pagina: pagina, movil: movil, productos: d.productos || {}, raiz: location.origin + raizUrl, nota: pagina ? d.nota : (cfg.nota || d.nota), orden: st.orden };\n      var w = document.createElement(\"div\");\n      w.id = \"vstar-reviews\"; w.className = ventana ? \"trustoo-widget\" : \"trustoo-widget page-width\"; w.setAttribute(\"show-type\", \"reviews\"); if (!ventana) w.setAttribute(\"not-wdo-rev\", \"\");\n      if (pagina) { w.setAttribute(\"all-reviews\", \"\"); w.setAttribute(\"data-tabs\", \"1\"); } else w.setAttribute(\"data-product-id\", cfg.producto || \"\");\n      w.setAttribute(\"review_sort_by\", st.orden); w.setAttribute(\"layout\", \"gird\"); w.setAttribute(\"data-is-render\", \"1\");\n      raiz.appendChild(w);\n      function orden() {\n        var k = ORDENES.filter(function (x) { return x[0] === st.orden; })[0][1], base = d.orden[k];\n        return st.filtro ? base.filter(function (i) { return d.r[i].s === st.filtro; }) : base;   // filtro por estrellas (barras de la cabecera)\n      }\n      function paginas() { return Math.ceil((st.filtro ? orden().length : (d.vis || d.total)) / porPag); }\n      function cartasDe(p) {\n        var idx = orden(), n = idx.length, out = \"\";\n        for (var j = 0; j < porPag; j++) {\n          var g = (p - 1) * porPag + j;\n          if ((!pagina || st.filtro) && g >= n) break;        // en la ficha la \u00FAltima p\u00E1gina se queda corta, como en Trustoo (y con filtro, sin repetir)\n          var k = g % n;                                      // en la p\u00E1gina, al acabar vuelve a empezar (orden de Sergio)\n          porIndice[g] = d.r[idx[k]];\n          out += tarjeta(d.r[idx[k]], g, p, T, o);\n        }\n        return out;\n      }\n      function pie() {\n        if (pagina) return '<div class=\"loader\" style=\"display:none;\"></div>';\n        var t = paginas(), h = '<ul class=\"page-control\" type=\"reviews\" style=\"display: flex;\"> <li ' + (st.pag > 1 ? \"\" : 'style=\"display:none\" ') + 'class=\"page-control-button pre-page\"> ' + IC.ant + \" </li>\";\n        for (var p = 1; p <= t; p++) h += '<li class=\"page-control-item' + (p === st.pag ? \" active\" : \"\") + '\" data-index=\"' + (p - 1) + '\" data-number=\"' + p + '\">' + p + \"</li>\";\n        // la flecha sigue en la \u00FAltima: vuelve a la 1 (orden de Sergio); con UNA sola p\u00E1gina se esconde, como Trustoo (togglePageButton)\n        return h + '<li class=\"page-control-button next-page\" style=\"display: ' + (t > 1 ? \"flex\" : \"none\") + ';\"> ' + IC.sig + \" </li> </ul>\";\n      }\n      var porIndice = {};                                  // \u00EDndice de tarjeta \u2192 rese\u00F1a (para abrir su detalle)\n      function pintarBase() {\n        w.innerHTML = cabecera(d, T, o) + (pagina ? filaOrdenPagina(T, st.orden, ventana ? Number(cfg.total) || 0 : 0, cfg.lang) : \"\") + '<div id=\"tt-reviews-loading\" data-common=\"\" style=\"display: none;\"></div><div id=\"reviews-body\"><div class=\"tt-review-list\"></div></div><div id=\"reviews-footer\">' + pie() + \"</div>\";\n      }\n      function pintarLista(anadir) {\n        var lista = w.querySelector(\".tt-review-list\"), tmp = document.createElement(\"div\");\n        if (!anadir) { lista.innerHTML = \"\"; lista.__alt = null; porIndice = {}; }\n        tmp.innerHTML = cartasDe(st.pag);\n        var nuevas = Array.prototype.slice.call(tmp.children);\n        nuevas.forEach(function (c) { lista.appendChild(c); });\n        colocar(lista, nuevas, movil, anadir);\n        // Como Trustoo (medido el 25-sep bajando por la ficha): cuando la foto de una tarjeta termina de cargar, quita la\n        // caja provisional (color medio + alto calculado), marca la foto loaded=\"true\" y recoloca con la altura REAL.\n        // Sin esto el clon quedaba 1-6 px m\u00E1s alto o m\u00E1s bajo por tarjeta y el mosaico se descuadraba.\n        // \u2026y la altura sale de la MINIATURA de Trustoo (la foto encajada en 400\u00D7500, tambi\u00E9n ampliando, con medidas\n        // redondeadas: 640\u00D71137 \u2192 281\u00D7500 \u00B7 960\u00D7861 \u2192 400\u00D7359 \u00B7 165\u00D7220 \u2192 375\u00D7500, medido el 25-sep); nuestras copias\n        // tienen otra resoluci\u00F3n y su proporci\u00F3n difer\u00EDa en d\u00E9cimas de p\u00EDxel por tarjeta, que se acumulaban por columna.\n        var cargada = function (im) {\n          var it = im.closest(\".resource-item\"); if (it) { it.removeAttribute(\"style\"); it.removeAttribute(\"new-grid-img\"); }\n          im.setAttribute(\"loaded\", \"true\");\n          var r = porIndice[im.getAttribute(\"data-review-index\")], x = r && r.f && r.f[0];\n          if (x && x[1] && x[2]) { var e = Math.min(400 / x[1], 500 / x[2]); im.__alto = Math.round(x[2] * e) / Math.round(x[1] * e); im.style.height = im.width * im.__alto + \"px\"; }\n        };\n        var yaEnCache = false;\n        nuevas.forEach(function (c) {\n          var im = c.querySelector(\".resource-item img\"); if (!im) return;\n          if (im.complete && im.naturalWidth) { cargada(im); yaEnCache = true; }\n          else im.addEventListener(\"load\", function () { cargada(im); recolocar(); }, { once: true });\n        });\n        if (yaEnCache) recolocar();\n        // MEJORA sobre Trustoo (medido 25-sep 20:45, p\u00E1gina en rumano): si una tarjeta cambia de alto DESPU\u00C9S de colocarse\n        // (el traductor de la tienda alarga el nombre del producto, se expande un texto\u2026) nadie recolocaba y quedaban\n        // huecos de ~2 px en vez de 16 entre tarjetas (a Trustoo le pasa igual). Aqu\u00ED cada tarjeta se vigila y se recoloca.\n        if (window.ResizeObserver) {\n          if (!w.__ro) { var pend = false; w.__ro = new ResizeObserver(function () { if (pend) return; pend = true; requestAnimationFrame(function () { pend = false; recolocar(); }); }); }\n          nuevas.forEach(function (c) { w.__ro.observe(c); });\n        }\n        if (!pagina && !anadir) w.querySelector(\"#reviews-footer\").innerHTML = pie();\n        w.setAttribute(\"reviews-page-no\", st.pag);\n      }\n      function recolocar() { var l = w.querySelector(\".tt-review-list\"); if (l) colocar(l, Array.prototype.slice.call(l.children), movil, false); }\n      pintarBase(); pintarLista(false);\n      // Filtrar por estrellas como Trustoo (rating_filter=1, seal-review @227731): solo las barras CON rese\u00F1as; un clic filtra,\n      // otro clic en la misma lo quita; al pasar el rat\u00F3n se marca la fila (.active) y la cabecera (.tt-hover).\n      Array.prototype.forEach.call(w.querySelectorAll(\".star-range\"), function (el) {\n        var s = Number(el.getAttribute(\"index\")), fila = el.parentNode, centro = w.querySelector(\".head-center\");\n        if (!(d.reparto[5 - s] > 0)) return;\n        el.style.cursor = \"pointer\";\n        el.onclick = function () { st.filtro = st.filtro === s ? 0 : s; st.pag = 1; pintarLista(false); };\n        fila.onmouseover = function () { centro.classList.add(\"tt-hover\"); fila.classList.add(\"active\"); };\n        fila.onmouseout = function () { centro.classList.remove(\"tt-hover\"); fila.classList.remove(\"active\"); };\n      });\n      var popup = w.querySelector(\".sort-popup\");\n      window.addEventListener(\"click\", function (e) {         // como Trustoo: el icono abre/cierra el men\u00FA; pulsar fuera lo cierra\n        if (!popup) return;\n        if (e.target.closest && e.target.closest(\".sort-icon,.tt-sort-content\") && w.contains(e.target)) popup.style.display = popup.style.display === \"block\" ? \"none\" : \"block\";\n        else if (!popup.contains(e.target)) popup.style.display = \"none\";\n      });\n      w.addEventListener(\"click\", function (e) {\n        var t = e.target;\n        var foto = t.closest(\".resource-item\");\n        if (foto) {\n          var im = foto.querySelector(\"img\"); var k = Number(im.getAttribute(\"data-review-index\")); if (!porIndice[k]) return;\n          // Como Trustoo (tt-review-detail.js getTTDetailReviewsList: hasResource + review_sort_by): las flechas del detalle\n          // recorren las rese\u00F1as CON foto en el orden que tiene elegido el cliente; al acabar las fotos de una, pasan a la siguiente.\n          var conFoto = orden().map(function (i) { return d.r[i]; }).filter(function (x) { return x.f && x.f.length; });\n          abrirDetalle(porIndice[k], 0, T, o, cfg, { lista: conFoto, pos: Math.max(0, conFoto.indexOf(porIndice[k])) }); return;\n        }\n        var dt = t.closest(\".display-text\");\n        if (dt) { var p = dt.parentNode, rest = p.querySelector(\".remain-text\"); dt.remove(); if (rest) rest.removeAttribute(\"hidden\"); recolocar(); return; }\n        var so = t.closest(\".sort-item\");\n        if (so) {\n          if (!so.classList.contains(\"active\")) {\n            var act = w.querySelector(\".sort-item.active\"); if (act) act.classList.remove(\"active\"); so.classList.add(\"active\");\n            var sa = popup.querySelector(\".sort-active\"); if (sa) sa.style.top = so.offsetTop + 3 + \"px\";\n            st.orden = so.getAttribute(\"sort-value\"); w.setAttribute(\"review_sort_by\", st.orden); o.orden = st.orden;\n            var sp = w.querySelector(\".tt-sort-content>span\"); if (sp) sp.textContent = so.textContent;\n            st.pag = 1; pintarLista(false);\n          }\n          popup.style.display = \"none\"; return;\n        }\n        if (t.closest(\".tt-write-reviews\")) { abrirFormulario(cfg, T); return; }\n        var it = t.closest(\".page-control-item,.pre-page,.next-page\");\n        if (it) {\n          var tot = paginas();\n          st.pag = it.classList.contains(\"pre-page\") ? Math.max(1, st.pag - 1) : it.classList.contains(\"next-page\") ? (st.pag >= tot ? 1 : st.pag + 1) : Number(it.getAttribute(\"data-number\"));\n          pintarLista(false); if (w.scrollIntoView) w.scrollIntoView({ behavior: \"smooth\", block: \"start\" }); return;\n        }\n      });\n      if (pagina && \"IntersectionObserver\" in window) {\n        var ob = new IntersectionObserver(function (en) { if (en[0].isIntersecting) { st.pag++; pintarLista(true); } }, { rootMargin: \"600px\" });\n        ob.observe(w.querySelector(\"#reviews-footer\"));\n      }\n      var tw; window.addEventListener(\"resize\", function () { clearTimeout(tw); tw = setTimeout(recolocar, 150); });\n      if (cfg.vista) try { if (Math.random() < 0.05) navigator.sendBeacon(cfg.vista, \"{}\"); } catch (_) {}\n    });\n  }\n\n  // \u2500\u2500 m\u00E1scara compartida (detalle de una rese\u00F1a, formulario y \u00ABgracias\u00BB), como #trustoo-mask de Trustoo \u2500\u2500\n  var MASK = null, HASH = null;\n  function mascara() {\n    if (MASK) return MASK;\n    MASK = document.createElement(\"div\"); MASK.id = \"trustoo-mask\"; MASK.style.display = \"none\";\n    document.body.appendChild(MASK);\n    MASK.addEventListener(\"click\", function (e) { if (e.target === MASK && MASK.__hijo && MASK.__hijo.id === \"trustoo-review-detail\") cerrarMascara(); });\n    // Bot\u00F3n \u00ABatr\u00E1s\u00BB (como Trustoo: #tt-reviews-detail-open / #tt-write-reviews-open + hashchange): cierra la ventana en vez de\n    // sacar al cliente de la ficha.\n    // mejora sobre Trustoo (APPS_REPLICA \u00A75): Escape cierra la ventana abierta en PC\n    document.addEventListener(\"keydown\", function (e) { if (e.key === \"Escape\" && MASK.style.display !== \"none\") cerrarMascara(); });\n    window.addEventListener(\"hashchange\", function () { if (HASH && location.hash.indexOf(HASH) < 0 && MASK.style.display !== \"none\") cerrarMascara(true); });\n    return MASK;\n  }\n  function abrirMascara(hijo) {\n    var m = mascara();\n    // Como Trustoo: al formulario le pone display:block en l\u00EDnea, al detalle NINGUNO (su hoja lo hace flex en PC y\n    // block en m\u00F3vil; un block en l\u00EDnea pisaba el flex y apilaba foto y texto, cazado al comparar al p\u00EDxel el 25-sep).\n    Array.prototype.forEach.call(m.children, function (c) { c.style.display = c !== hijo ? \"none\" : c.id === \"trustoo-review-detail\" ? \"\" : \"block\"; });\n    m.style.display = \"flex\"; document.body.classList.add(\"trustoo-open\"); m.__hijo = hijo;\n    var h = hijo.id === \"trustoo-review-detail\" ? \"tt-reviews-detail-open\" : \"tt-write-reviews-open\";\n    try { if (location.hash.indexOf(h) < 0) { if (HASH) history.replaceState(history.state, \"\", location.href.split(\"#\")[0] + \"#\" + h); else location.hash = h; } } catch (_) {}\n    HASH = h;\n  }\n  function cerrarMascara(porAtras) {\n    // al cerrar con la X se quita la marca con replaceState, como Trustoo (history.back() era as\u00EDncrono: si el cliente abr\u00EDa otra\n    // foto enseguida, el \u00ABatr\u00E1s\u00BB retrasado le cerraba la nueva \u2014 cazado por t_resenas_dom el 26-sep)\n    if (HASH) { var h = HASH; HASH = null; if (porAtras !== true && location.hash.indexOf(h) >= 0) try { history.replaceState(history.state, \"\", location.href.split(\"#\")[0]); } catch (_) {} }\n    if (MASK) MASK.style.display = \"none\"; if (!document.querySelector(\".window-review-mask[style*=block]\")) document.body.classList.remove(\"trustoo-open\");\n    var f = MASK && MASK.__alCerrar; if (f) { MASK.__alCerrar = null; try { f(); } catch (_) {} }   // p. ej. el carrusel vuelve a girar (onTrustooDetailClose)\n  }\n\n  // \u2500\u2500 detalle de una rese\u00F1a (se abre al pulsar su foto, como en Trustoo) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // nav = { lista, pos } (ficha y p\u00E1gina: pasa de rese\u00F1a en rese\u00F1a) \u00B7 { carrusel: true, alCerrar } (portada: da la vuelta a las fotos)\n  function abrirDetalle(r, ix, T, o, cfg, nav) {\n    nav = nav || {};\n    var m = mascara(), det = m.querySelector(\"#trustoo-review-detail\");\n    if (!det) {\n      det = document.createElement(\"div\"); det.id = \"trustoo-review-detail\"; det.setAttribute(\"style\", \"--photo-radius:4px\");\n      m.appendChild(det);\n    }\n    var f = r.f || [], est = \"\";\n    for (var k = 1; k <= 5; k++) est += '<div class=\"star-item' + (k > r.s ? \" nostar\" : \"\") + '\">' + IC.estrella + \"</div>\";\n    var P = (o.pagina || nav.carrusel) && r.p && o.productos && o.productos[r.p], url = P ? (o.url ? o.url(r.p) : o.raiz + \"products/\" + r.p) : \"\";\n    det.className = \"trustoo-widget trustoo-ltr\" + (f.length ? \" has-image\" : \" no-image\");\n    det.setAttribute(\"data-opened\", \"1\"); det.setAttribute(\"type\", \"trustoo_reviews\"); det.setAttribute(\"data-review-type\", \"trustoo_reviews\"); det.setAttribute(\"data-show-badge\", \"1\");\n    det.innerHTML = '<div class=\"close-wrapper\">' + IC.det_cerrar + '</div> <div class=\"media-swiper\"> <div class=\"image-btn-wrapper pre-btn-wrapper\">' + IC.det_ant + ' </div> <div class=\"image-btn-wrapper next-btn-wrapper\">' + IC.det_sig +\n      ' </div> </div> <div class=\"review-detail\"> <div class=\"review-info\"> <div class=\"review-row-one\"> <div class=\"vstar-star\">' + est + ' </div> </div> <div class=\"user-message\"> <span class=\"user-name\"> <span class=\"author-name\"> ' + esc(String(r.a).trim()) +\n      \" </span> </span> \" + (r.v ? '<div class=\"user-verified\"> ' + IC.verificado + '<span class=\"verified-text\" data-tt-lang-path=\"verified_purchase\">' + esc(T.verificada) + \"</span></div>\" : \"\") + \" </div> \" +\n      (f.length > 1 ? '<div class=\"resource-list\">' + f.map(function (x, j) { var pr = Number(x[4] || (x[1] && x[2] ? x[1] / x[2] : 1)); return '<div class=\"resource-item' + (j === ix ? \" active\" : \"\") + '\" proportion=\"' + pr.toFixed(2) + '\"><img index=\"' + j + '\" alt=\"' + j + '\" src=\"' + esc(tam(x[0], 1200)) + '\" style=\"display: block; ' + (pr > 1 ? \"height\" : \"width\") + ': 100%;\"> </div>'; }).join(\"\") + \"</div>\" : \"\") +\n      ' <p class=\"reviews-text\">' + esc(r.t) + '</p> ' + respuesta(r) + '</div> <div class=\"product-info\" style=\"display: ' + (P ? \"flex\" : \"none\") + ';\"> <div class=\"product-image\"' + (P ? ' style=\"background-image: url(&quot;' + esc(tam(P.i, 360)) + '&quot;);\"' : \"\") + '></div> <div> <div class=\"tt-product-name\">' +\n      (P ? esc(P.n.length > 50 ? P.n.substr(0, 50) + \"...\" : P.n) : \"\") + '</div> <div class=\"product-shop\">' + (P ? '<a target=\"_Blank\" href=\"' + esc(url) + '\"> <span class=\"tt-shop\"></span><span>' + esc(T.comprar || \"Shop Now\") + \"</span> </a> \" : \"\") + \"</div> </div> </div> </div>\";\n    function verFoto(n) {\n      ix = n; var x = f[n], ms = det.querySelector(\".media-swiper\");\n      // tama\u00F1o como switchResourceShow de Trustoo: recorta solo si la proporci\u00F3n (1 decimal) est\u00E1 entre 0,7 y 1; si no, la ense\u00F1a entera\n      var p = x[1] && x[2] ? Math.round(x[1] / x[2] * 10) / 10 : Math.round(Number(x[4] || 1) * 10) / 10;\n      var tamFondo = p >= 0.7 && p <= 1 ? \"cover\" : (x[1] && x[2] ? x[1] <= x[2] : p <= 1) ? \"auto 100%\" : \"100% auto\";\n      ms.style.cssText = \"background-color: \" + (x[3] || \"#cec9b6\") + \"; background-size: \" + tamFondo + \"; background-image: url(\\\"\" + tam(x[0], 1200) + \"\\\"); display: block;\";\n      var L = nav.lista, p0 = nav.pos || 0;\n      // como switchVisibleStatus/switchImgVisibleStatus de Trustoo: solo se esconden en la primera foto de la primera rese\u00F1a y\n      // en la \u00FAltima foto de la \u00FAltima; en el carrusel siempre dan la vuelta (y con una sola foto no hay flechas: hide-btn)\n      det.querySelector(\".pre-btn-wrapper\").style.display = nav.carrusel || n > 0 || (L && p0 > 0) ? \"flex\" : \"none\";\n      det.querySelector(\".next-btn-wrapper\").style.display = nav.carrusel || n < f.length - 1 || (L && p0 < L.length - 1) ? \"flex\" : \"none\";\n      Array.prototype.forEach.call(det.querySelectorAll(\".resource-list .resource-item\"), function (el, j) { el.classList.toggle(\"active\", j === n); });\n    }\n    if (f.length) verFoto(ix || 0); else det.querySelector(\".media-swiper\").style.display = \"none\";\n    det.querySelector(\".close-wrapper\").onclick = cerrarMascara;\n    if (nav.carrusel && f.length <= 1) det.querySelector(\".media-swiper\").classList.add(\"hide-btn\"); else det.querySelector(\".media-swiper\").classList.remove(\"hide-btn\");\n    det.querySelector(\".pre-btn-wrapper\").onclick = function () {\n      if (ix > 0) return verFoto(ix - 1);\n      if (nav.carrusel) return verFoto(f.length - 1);\n      var L = nav.lista, p = nav.pos || 0;\n      if (L && p > 0) { var q = L[p - 1]; abrirDetalle(q, (q.f || []).length - 1, T, o, cfg, { lista: L, pos: p - 1 }); }\n    };\n    det.querySelector(\".next-btn-wrapper\").onclick = function () {\n      if (ix < f.length - 1) return verFoto(ix + 1);\n      if (nav.carrusel) return verFoto(0);\n      var L = nav.lista, p = nav.pos || 0;\n      if (L && p < L.length - 1) abrirDetalle(L[p + 1], 0, T, o, cfg, { lista: L, pos: p + 1 });\n    };\n    MASK.__alCerrar = nav.alCerrar || null;\n    Array.prototype.forEach.call(det.querySelectorAll(\".resource-list .resource-item\"), function (el, j) { el.onclick = function () { verFoto(j); }; });\n    abrirMascara(det);\n  }\n\n  // \u2500\u2500 formulario de escribir rese\u00F1a (#trustoo-allinone) y \u00ABgracias\u00BB (#success-window) \u2500\u2500\u2500\u2500\u2500\u2500\n  // Los textos son los que pinta hoy Trustoo en cada idioma (textos.form); el enlace legal es el de HatarShop, no el de CWILL.\n  var FORM = { s: 0, fotos: [] };\n  function comprimir(file) {\n    return new Promise(function (ok) {\n      var img = new Image(), url = URL.createObjectURL(file);\n      img.onload = function () {\n        var k = Math.min(1, 1600 / Math.max(img.width, img.height)), c = document.createElement(\"canvas\");\n        c.width = Math.round(img.width * k); c.height = Math.round(img.height * k);\n        c.getContext(\"2d\").drawImage(img, 0, 0, c.width, c.height); URL.revokeObjectURL(url);\n        ok({ tipo: \"image/jpeg\", b64: c.toDataURL(\"image/jpeg\", 0.85).split(\",\")[1], vista: c.toDataURL(\"image/jpeg\", 0.6) });\n      };\n      img.onerror = function () { ok(null); }; img.src = url;\n    });\n  }\n  function abrirFormulario(cfg, T, previo) {\n    var F = T.form || {}, tx = function (k, d) { return F[k] || d; };\n    var m = mascara(), w = m.querySelector(\"#trustoo-allinone\");\n    FORM = { s: (previo && previo.s) || 0, fotos: [], cfg: cfg, T: T, extra: previo || {} };\n    if (w) w.remove();\n    var logo = cfg.logo ? '<div id=\"tt-write-logo\" style=\"text-align: center;\"> <a href=\"' + esc(inicio()) + '\" aria-label=\"HatarShop\" style=\"display:inline-block;line-height:0\"><img src=\"' + esc(cfg.logo) + '\" alt=\"logo\" style=\"width: 150px;\"></a> </div>' : \"\";\n    var est = \"\"; for (var k = 1; k <= 5; k++) est += '<div class=\"star-item nostar\">' + IC.form_estrella + \"</div>\";\n    m.insertAdjacentHTML(\"beforeend\", '<div id=\"trustoo-allinone\" class=\"trustoo-widget trustoo-write-review\" data-review-type=\"normal\" write-review=\"true\"> <div class=\"tt-write-content\"> ' + logo +\n      ' <div class=\"window-head\"> <div class=\"window-close\"> ' + IC.form_cerrar + ' </div> <span class=\"head-title\" data-tt-lang-path=\"all_in_one_from.write_reviews\">' + esc(tx(\"all_in_one_from.write_reviews\", T.escribir)) + '</span> </div><form action=\"\" class=\"review-message\">' +\n      (cfg.productoImg ? '<div class=\"window-product\"><div class=\"product-image\" style=\"background-image: url(&quot;' + esc(cfg.productoImg) + '&quot;); background-size: auto 100%;\"></div><div class=\"product-right\">' + esc(cfg.productoNombre || \"\") + \"</div></div>\" : \"\") +\n      '<div class=\"tt-write-rating\"> <div class=\"tt-rating-title\" data-tt-lang-path=\"you_rating\">' + esc(tx(\"you_rating\", \"Your rating\")) + '</div> <div class=\"vstar-star\" data-type=\"1\"> ' + est + ' </div></div> <div class=\"feedback-area inline\"> <div class=\"tt-input-title\" data-tt-lang-path=\"all_in_one_from.review\">' +\n      esc(tx(\"all_in_one_from.review\", \"Review\")) + '</div> <div class=\"feedback-count\"><span>0/2000</span></div> <textarea input-type=\"content\" maxlength=\"2000\" class=\"big-input user-input require\" placeholder=\"' + esc(tx(\"__placeholder\", \"\")) +\n      '\" style=\"font-family: Arial;\"></textarea> <div class=\"error-tip feedback-tip\"></div> </div> <div class=\"upload-area\"> <div class=\"tt-uploader tt-image-uploader\" style=\"display : flex\"> <input type=\"file\" multiple=\"\" class=\"upload-input\" tabindex=\"-1\" accept=\"image/*,.gif,.jpeg,.jpg,.png\" style=\"\"> <span style=\"font-size: 30px; line-height: 30px;\">+</span> <span class=\"upload-image-text\" data-tt-lang-path=\"add_photo\">' +\n      esc(tx(\"add_photo\", \"Add photo\")) + '</span> <span class=\"images-num\">0/5</span> </div> </div> <div class=\"name-area inline\"> <div class=\"tt-input-title\" data-tt-lang-path=\"name\">' + esc(tx(\"name\", \"Your name\")) +\n      '</div> <input type=\"text\" maxlength=\"50\" input-type=\"author\" class=\"small-input user-input require\" style=\"\"> <div class=\"error-tip name-tip\"></div> </div> <input type=\"text\" name=\"hx_web\" tabindex=\"-1\" autocomplete=\"off\" style=\"position:absolute;left:-9999px;opacity:0\"> </form>' +\n      '<div class=\"discount-tip\">' + esc(tx(\"__discount_tip\", \"\")) + '</div><div id=\"tt-protection-wrapper\"><div id=\"tt-protection\"> <input type=\"checkbox\" id=\"tt-protection-checkbox\" style=\"\"><label for=\"tt-protection-checkbox\">' + String(T.legal || \"\").replace(/\\{raiz\\}/g, (window.Shopify && Shopify.routes && Shopify.routes.root) || \"/\") +\n      '</label> </div><div class=\"error-tip checkbox-tip\"></div></div><button disabled=\"\" class=\"form-submit\" type=\"button\" data-tt-lang-path=\"submit\">' + esc(tx(\"__submit\", \"Submit\")) + \"</button></div></div>\");\n    w = m.querySelector(\"#trustoo-allinone\");\n    // enlaces de los correos: \u00ABa\u00F1ade una foto\u00BB (solo fotos) y \u00ABactualiza tu rese\u00F1a\u00BB (estrellas y texto, sin nombre)\n    var modo = FORM.extra.modo || \"\";\n    if (modo === \"foto\") [\"tt-write-rating\", \"feedback-area\", \"name-area\"].forEach(function (c) { var e = w.querySelector(\".\" + c); if (e) e.style.display = \"none\"; });\n    if (modo === \"actualizar\") { var na = w.querySelector(\".name-area\"); if (na) na.style.display = \"none\"; }\n    var estrellas = w.querySelectorAll(\".tt-write-rating .star-item\"), ta = w.querySelector(\"textarea\"), nom = w.querySelector('input[input-type=\"author\"]'),\n      chk = w.querySelector(\"#tt-protection-checkbox\"), btn = w.querySelector(\".form-submit\"), subir = w.querySelector(\".tt-image-uploader\"), inp = subir.querySelector(\"input\");\n    function pintarEstrellas(n) { Array.prototype.forEach.call(estrellas, function (e, j) { e.classList.toggle(\"nostar\", j >= n); }); }\n    // Como Trustoo (seal-review, funciones M y F): el bot\u00F3n se enciende con las ESTRELLAS (o con una foto en \u00ABa\u00F1ade una foto\u00BB);\n    // lo que falte se dice al pulsar, en rojo bajo cada campo (\u00ABPor favor, rellena este campo\u00BB), y se borra al escribir.\n    function listo() { btn.disabled = !(modo === \"foto\" ? FORM.fotos.length > 0 : FORM.s > 0); }\n    function aviso(el, clave) {\n      if (!el) return;\n      if (!clave) { el.innerHTML = \"\"; el.classList.remove(\"display\"); return; }\n      el.innerHTML = '<div class=\"input-tip\"><span class=\"tt-error_tip\"></span><span data-tt-lang-path=\"' + clave + '\">' + esc(tx(clave, \"\")) + \"</span></div>\"; el.classList.add(\"display\");\n    }\n    function vacio(campo) { return campo.parentNode.style.display !== \"none\" && !campo.value.trim(); }\n    function revisarCampo(campo) { var e = vacio(campo); aviso(campo.nextElementSibling, e ? \"required\" : \"\"); campo.classList.toggle(\"error-border\", e); return !e; }\n    function valido() {\n      var ok = true;\n      [ta, nom].forEach(function (c) { if (vacio(c)) ok = revisarCampo(c) && ok; });\n      if (!chk.checked) { aviso(w.querySelector(\".checkbox-tip\"), \"required\"); ok = false; }\n      if (FORM.fotos.some(function (f) { return f.cargando; })) { aviso(w.querySelector(\".feedback-tip\"), \"all_in_one_from.upload_tip\"); ok = false; }\n      return ok;\n    }\n    Array.prototype.forEach.call(estrellas, function (e, j) {\n      e.onclick = function () { FORM.s = j + 1; pintarEstrellas(FORM.s); listo(); };\n      if (!esMovil()) { e.onmouseenter = function () { pintarEstrellas(j + 1); }; }\n    });\n    if (!esMovil()) w.querySelector(\".tt-write-rating .vstar-star\").onmouseleave = function () { pintarEstrellas(FORM.s); };\n    pintarEstrellas(FORM.s);\n    ta.oninput = function () { w.querySelector(\".feedback-count span\").textContent = ta.value.length + \"/2000\"; revisarCampo(ta); listo(); };\n    nom.oninput = function () { revisarCampo(nom); listo(); };\n    [ta, nom].forEach(function (c) { c.onblur = function () { setTimeout(function () { if (vacio(c)) revisarCampo(c); }, 100); }; });\n    chk.onchange = function () { if (chk.checked) aviso(w.querySelector(\".checkbox-tip\"), \"\"); listo(); };\n    inp.onchange = function () {\n      var libres = 5 - FORM.fotos.length, fs = Array.prototype.slice.call(inp.files || []).filter(function (x) { return /^image\\//.test(x.type); }).slice(0, libres);\n      fs.forEach(function (file) {\n        var v = document.createElement(\"div\"); v.className = \"uploaded-item\"; v.setAttribute(\"data-type\", \"image\");\n        v.innerHTML = '<div class=\"hover-image\"> <div class=\"tt-delete_image\"></div> </div>' + (esMovil() ? '<div class=\"image-delete tt-mobile_delete_image\"></div>' : \"\");\n        subir.parentNode.insertBefore(v, subir);\n        var foto = { cargando: true }; FORM.fotos.push(foto);\n        comprimir(file).then(function (x) {\n          if (!x) { v.remove(); FORM.fotos.splice(FORM.fotos.indexOf(foto), 1); return actualizar(); }\n          foto.tipo = x.tipo; foto.b64 = x.b64; delete foto.cargando;\n          v.style.backgroundImage = \"url(\" + x.vista + \")\"; v.style.backgroundSize = \"cover\";\n        });\n        v.addEventListener(\"click\", function (e) {\n          if (!/tt-delete_image|hover-image|tt-mobile_delete_image/.test(e.target.className)) return;\n          v.remove(); FORM.fotos.splice(FORM.fotos.indexOf(foto), 1); actualizar();\n        });\n      });\n      inp.value = \"\"; actualizar();\n    };\n    function actualizar() { subir.querySelector(\".images-num\").textContent = FORM.fotos.length + \"/5\"; subir.style.display = FORM.fotos.length >= 5 ? \"none\" : \"flex\"; listo(); }\n    w.querySelector(\".window-close\").onclick = cerrarMascara;\n    btn.onclick = function () {\n      if (btn.disabled) return;\n      if (!valido()) return;\n      btn.disabled = true; var textoBtn = btn.textContent; btn.textContent = tx(\"submitting\", textoBtn);\n      var fotos = FORM.fotos.map(function (f) { return { tipo: f.tipo, b64: f.b64 }; });\n      var cuerpo = modo ? { review: FORM.extra.review, rk: FORM.extra.rk || \"\", f: fotos, s: modo === \"actualizar\" ? FORM.s : \"\", t: modo === \"actualizar\" ? ta.value.trim() : \"\" }\n        : { h: cfg.handle, s: FORM.s, t: ta.value.trim(), n: nom.value.trim(), lang: cfg.lang, hp: w.querySelector('input[name=\"hx_web\"]').value, f: fotos, o: FORM.extra.o || \"\", k: FORM.extra.k || \"\" };\n      fetch(modo ? cfg.apiCambiar : cfg.api, { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(cuerpo) })\n        .then(function (r) { return r.json(); })\n        .then(function (res) { if (res && res.ok) gracias(cfg, T, res.code || \"\"); else { btn.disabled = false; btn.textContent = textoBtn; aviso(w.querySelector(\".feedback-tip\"), \"error_tip\"); } })\n        .catch(function () { btn.disabled = false; btn.textContent = textoBtn; aviso(w.querySelector(\".feedback-tip\"), \"error_tip\"); });\n    };\n    abrirMascara(w);\n  }\n  function gracias(cfg, T, code) {\n    var F = T.form || {}, tx = function (k, d) { return F[k] || d; }, m = mascara(), s = m.querySelector(\"#success-window\");\n    if (s) s.remove();\n    m.insertAdjacentHTML(\"beforeend\", '<div id=\"success-window\" class=\"trustoo-widget\">' + (cfg.logo ? '<div id=\"tt-write-logo\" style=\"text-align: center;font-size: 0;\"><a href=\"' + esc(inicio()) + '\" aria-label=\"HatarShop\" style=\"display:inline-block;line-height:0\"><img src=\"' + esc(cfg.logo) + '\" alt=\"logo\" style=\"width: 150px;\"></a></div>' : \"\") +\n      '<div class=\"window-close\"> ' + IC.form_cerrar + ' </div> <div class=\"window-title\" data-tt-lang-path=\"success_message\">' + esc(tx(\"success.success_message\", \"Thank you for your feedback!\")) +\n      '</div><div class=\"window-content\" data-tt-lang-path=\"submitted_successfully\">' + esc(tx(\"success.submitted_successfully\", \"Your review has been submitted successfully\")) + '</div><div class=\"window-discount\" style=\"display:' + (code ? \"flex\" : \"none\") +\n      '\"> <span class=\"discount-code\">' + esc(code) + '</span> <span class=\"discount-copy\" data-tt-lang-path=\"all_in_one_from.discount_setting.copy\">' + esc(tx(\"success.all_in_one_from.discount_setting.copy\", \"Copy\")) +\n      '</span> </div><div class=\"window-button\"><button data-tt-lang-path=\"continue_shopping\">' + esc(tx(\"success.continue_shopping\", \"Continue shopping\")) + \"</button></div></div>\");\n    s = m.querySelector(\"#success-window\");\n    s.querySelector(\".window-close\").onclick = cerrarMascara; s.querySelector(\".window-button button\").onclick = cerrarMascara;\n    var cp = s.querySelector(\".discount-copy\");\n    cp.onclick = function () { try { navigator.clipboard.writeText(code); } catch (_) {} cp.textContent = \"\u2713\"; };\n    abrirMascara(s);\n  }\n\n  // \u2500\u2500 carrusel de la portada (r\u00E9plica del \u00ABcard carousel\u00BB primario de Trustoo) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Reglas medidas en su c\u00F3digo: 30 rese\u00F1as (las primeras de \u00ABDestacado\u00BB), Swiper 11 con bucle, 300 ms, 12 px entre tarjetas,\n  // avance cada 3 s con pausa al pasar el rat\u00F3n; columnas: contenedor <400 \u2192 1 \u00B7 <700 \u2192 2 \u00B7 si no por ventana 300/550/968 \u2192 1/2/3.\n  function tarjetaCarrusel(r, i, T) {\n    var est = \"\"; for (var k = 1; k <= 5; k++) est += '<div class=\"star-item' + (k > r.s ? \" nostar\" : \"\") + '\">' + IC.car_estrella + \" </div>\";\n    var fotos = (r.f || []).map(function (x, j) {\n      var h = 44 / (x[4] || 1);\n      return '<div class=\"resource-item tt-reviews-image\"> <img index=\"' + j + '\" width=\"44px\" height=\"' + (Math.round(h * 100) / 100) + 'px\" alt=\"' + j + '\" style=\"width:100%;\" src=\"' + esc(tam(x[0], 120)) + '\"> </div>';\n    }).join(\"\");\n    return '<div class=\"swiper-slide\"> <div class=\"tt-card-wrapper\"> <div class=\"tt-card\" no=\"' + i + '\" data-reply=\"\"> <div class=\"tt-card-head\"> <div class=\"card-head-row1\"> <div class=\"tt-review-name\">' + esc(String(r.a).trim()) +\n      ' </div> <div class=\"tt-review-star vstar-star\">' + est + '</div> </div> <div class=\"card-head-row2\">' + (r.v ? IC.car_verif + '<span class=\"tt-review-verify\">' + esc(T.verificada) + \"</span>\" : \"\") +\n      '</div> </div> <div class=\"tt-card-body\"> ' + esc(r.t) + ' </div> <div class=\"tt-card-footer\"> <div class=\"resource-list\">' + fotos + '</div> <div> <div class=\"tt-card-info\"> <span class=\"tt-review-country\">' + esc(r.c || \"\") +\n      '</span> <span class=\"tt-review-date\">' + esc(r.fe || \"\") + \"</span> </div> </div> </div> </div> </div></div>\";\n  }\n  function cabeceraCarrusel(d, T) {\n    var n = Number(d.nota) || 0, est = \"\";\n    for (var k = 1; k <= 5; k++) {\n      if (n >= k) est += '<div class=\"star-item\">' + IC.car_estrella + \" </div>\";\n      else if (n > k - 1) est += '<div class=\"star-item half\"><div class=\"trustoo-swiper-nostar\">' + IC.car_estrella + ' </div><div style=\"width:' + Math.round((n - (k - 1)) * 100) + '%\" class=\"trustoo-swiper-star\">' + IC.car_estrella + \" </div></div>\";\n      else est += '<div class=\"star-item nostar\">' + IC.car_estrella + \" </div>\";\n    }\n    // el total real de rese\u00F1as NO se pinta (el tema ya lo ocultaba; lo acordado: nunca el n\u00FAmero real a la vista)\n    return '<div class=\"tt-swiper-header\"> <div class=\"swiper-header-title\">' + esc(T.car_titulo) + '</div> <div class=\"swiper-header-stars vstar-star\">' + est +\n      '</div> <div class=\"swiper-header-rating\">' + esc(String(T.car_nota).replace(\"{n}\", n.toFixed(1))) + '</div> <div class=\"swiper-header-count\"></div> </div>';\n  }\n  function columnasCarrusel(ancho) {\n    if (ancho < 400) return 1; if (ancho < 700) return 2;\n    var w = window.innerWidth; return w >= 968 ? 3 : w >= 550 ? 2 : 1;\n  }\n  var SWIPER_ESPERA = [];\n  function cargarSwiper(url, hecho) {\n    if (window.Swiper) return hecho();\n    SWIPER_ESPERA.push(hecho);\n    if (SWIPER_ESPERA.length > 1) return;              // ya se est\u00E1 descargando: solo se apunta a la espera\n    var s = document.createElement(\"script\"); s.src = url; s.onload = function () { SWIPER_ESPERA.splice(0).forEach(function (f) { f(); }); }; document.head.appendChild(s);\n  }\n  function montarCarrusel(raiz, cfg) {\n    var T = cfg.textos;\n    cargarSwiper(cfg.swiper, function () {});           // la librer\u00EDa se pide YA, a la vez que los datos (antes iba despu\u00E9s, en fila)\n    datosTraducidos(cfg).then(function (d) {\n      if (!d.r || !d.r.length) return;\n      var cols = columnasCarrusel(raiz.parentElement ? raiz.parentElement.clientWidth : window.innerWidth);\n      var c = document.createElement(\"div\");\n      c.id = \"tt-carousel\"; c.setAttribute(\"data-hx\", \"1\"); c.setAttribute(\"data-type\", \"primary\"); c.className = \"tt-swiper column-\" + cols + \" page-width\" + (d.r.length <= cols ? \" hide-btn\" : \"\");\n      c.setAttribute(\"data-rating\", d.nota);\n      c.innerHTML = cabeceraCarrusel(d, T) + '<div class=\"tt-swiper-wrapper \"> <div id=\"tt-carousel-content\"> <div id=\"tt-carousel-list\" data-index=\"0\" class=\"tt-card-list\"> <div class=\"tt-swiper-container swiper-wrapper\" data-index=\"0\" data-count=\"' + d.r.length +\n        '\" navigation=\"false\" space-between=\"12\" loop=\"true\" slides-per-view=\"' + cols + '\" autoplay=\"\" autoplay-pause-on-mouse-enter=\"true\" speed=\"300\">' +\n        d.r.map(function (r, i) { return tarjetaCarrusel(r, i, T); }).join(\"\") + '</div> </div> </div> <div class=\"tt-swiper-pre tt-swiper-btn\">' + IC.car_ant + ' </div> <div class=\"tt-swiper-next tt-swiper-btn\">' + IC.car_sig + \" </div> </div></div>\";\n      raiz.appendChild(c);\n      cargarSwiper(cfg.swiper, function () {\n        var ancho = c.clientWidth, v = ancho < 400 ? 1 : ancho < 700 ? 2 : 0;\n        var sw = new window.Swiper(c.querySelector(\"#tt-carousel-list\"), {\n          loop: true, speed: 300, spaceBetween: 12, slidesPerView: v || 3,\n          autoplay: d.r.length > (v || 3) ? { delay: 3000, pauseOnMouseEnter: true } : false,\n          breakpoints: v ? undefined : { 300: { slidesPerView: 1 }, 550: { slidesPerView: 2 }, 968: { slidesPerView: 3 }, 1368: { slidesPerView: 3 } },\n          centerInsufficientSlides: true\n        });\n        // Como Trustoo (swiper-reviews: r.on(\"click\") \u2192 showTTReviewDetail(..., \"trustoo_swiper_review\")): pulsar cualquier parte\n        // de una tarjeta abre esa rese\u00F1a desde su primera foto y para el giro autom\u00E1tico hasta cerrar.\n        var raizUrl = (window.Shopify && Shopify.routes && Shopify.routes.root) || \"/\";\n        var oc = { productos: d.productos || {}, raiz: location.origin + raizUrl };\n        sw.on(\"click\", function (s) {\n          var sl = s.clickedSlide, cd = sl && sl.querySelector(\".tt-card\"), r = cd && d.r[Number(cd.getAttribute(\"no\"))];\n          if (!r) return;\n          var giraba = !!(sw.autoplay && sw.autoplay.running); if (giraba) sw.autoplay.stop();\n          abrirDetalle(r, 0, T, oc, cfg, { carrusel: true, alCerrar: function () { if (giraba) sw.autoplay.start(); } });\n        });\n        c.querySelector(\".tt-swiper-pre\").addEventListener(\"click\", function () { sw.slidePrev(); });\n        c.querySelector(\".tt-swiper-next\").addEventListener(\"click\", function () { sw.slideNext(); });\n      });\n    });\n  }\n\n  // Mientras Trustoo siga instalada su bloque manda; el nuestro solo con ?hx_rev=force (pruebas).\n  // \u2500\u2500 pesta\u00F1a lateral \u00AB\u2605Rese\u00F1as\u00BB y su ventana (como Trustoo: m\u00E1scara + #vstar-window-review + cerrar) \u2500\u2500\n  function montarVentana(raiz, cfg) {\n    var tab = document.createElement(\"div\"); tab.id = \"vstar-tab\"; tab.textContent = cfg.textos.tab || \"\u2605Reviews\";\n    document.body.appendChild(tab);\n    var mask = null;\n    function cerrar() { mask.style.display = \"none\"; document.body.classList.remove(\"trustoo-open\"); }\n    tab.addEventListener(\"click\", function () {\n      if (!mask) {\n        document.body.insertAdjacentHTML(\"beforeend\", '<div class=\"mask window-review-mask\" style=\"display:none\"><div id=\"vstar-window-review\"><div class=\"window-close\">' + IC.cerrar + \"</div></div></div>\");\n        mask = document.body.lastElementChild;\n        mask.addEventListener(\"click\", function (e) { if (!mask.querySelector(\"#vstar-window-review\").contains(e.target)) cerrar(); });\n        mask.querySelector(\".window-close\").addEventListener(\"click\", cerrar);\n        var cont = document.createElement(\"div\"); cont.id = \"reviews-wrapper\"; cont.className = \"trustoo-reviews-wrapper\";\n        var win = mask.querySelector(\"#vstar-window-review\"); win.insertBefore(cont, win.firstChild);\n        montar(cont, cfg, true);                       // las rese\u00F1as se cargan la primera vez que se abre\n      }\n      document.body.classList.add(\"trustoo-open\"); mask.style.display = \"block\";\n    });\n  }\n\n  function arrancar() {\n    var force = /[?&]hx_rev=force/.test(location.search);\n    if (esMovil()) document.documentElement.classList.add(\"hx-movil\");   // reglas de CSS que Trustoo solo aplicaba en m\u00F3vil\n    document.querySelectorAll(\"[data-hx-resenas]\").forEach(function (raiz) {\n      if (raiz.hasAttribute(\"data-hx-ok\")) return;\n      // el bloque puede estar llegando a\u00FAn (se monta mientras el navegador lee la p\u00E1gina): solo se marca si su configuraci\u00F3n\n      // se lee ENTERA; si no, se reintenta en la siguiente vuelta del observador\n      var sc = raiz.querySelector(\"script[data-hx-cfg]\"), cfg; if (!sc) return;\n      try { cfg = JSON.parse(sc.textContent); } catch (_) { return; }\n      raiz.setAttribute(\"data-hx-ok\", \"\");   // nunca montar dos veces\n      var ajeno = cfg.modo === \"carrusel\" ? document.querySelector(\"#tt-carousel:not([data-hx])\") : cfg.modo === \"ventana\" ? document.querySelector(\"#vstar-tab\") :\n        document.querySelector(\".trustoo-reviews-wrapper:not([data-hx-resenas])\");\n      if (ajeno && !force) return;                     // Trustoo sigue instalado: manda el suyo\n      if (ajeno && force) ajeno.style.display = \"none\";\n      if (cfg.modo === \"carrusel\") montarCarrusel(raiz, cfg);\n      else if (cfg.modo === \"ventana\") montarVentana(raiz, cfg);\n      else if (cfg.modo === \"formulario\") enlaceCorreo(cfg);   // ficha sin bloque de rese\u00F1as: solo el enlace del correo\n      else { montar(raiz, cfg, false); enlaceCorreo(cfg); }\n    });\n  }\n  // Enlaces de los correos de rese\u00F1as: ?req=review[&stars=N][&o=&k=] abre el formulario (con las estrellas ya marcadas).\n  // Una sola vez por p\u00E1gina: lo abre el bloque de la ficha si existe; si no, el contenedor oculto \u00ABformulario\u00BB.\n  var ENLACE_ABIERTO = false;\n  function enlaceCorreo(cfg) {\n    if (ENLACE_ABIERTO) return;\n    var q = new URLSearchParams(location.search), rid = q.get(\"review\") || \"\", s = Math.max(0, Math.min(5, Number(q.get(\"stars\")) || 0));\n    if (q.get(\"req\") === \"review\" && q.get(\"photo\") === \"1\" && rid) abrirFormulario(cfg, cfg.textos, { modo: \"foto\", review: rid, rk: q.get(\"rk\") || \"\" });\n    else if (q.get(\"req\") === \"update\" && rid) abrirFormulario(cfg, cfg.textos, { modo: \"actualizar\", review: rid, rk: q.get(\"rk\") || \"\", s: s });\n    else if (q.get(\"req\") === \"review\") abrirFormulario(cfg, cfg.textos, { s: s, o: q.get(\"o\") || \"\", k: q.get(\"k\") || \"\" });\n    else return;\n    ENLACE_ABIERTO = true;\n  }\n  if (typeof module !== \"undefined\") module.exports = { tarjeta: tarjeta, cabecera: cabecera, cortar: cortar, columnas: columnas, estrellasNota: estrellasNota, esc: esc };\n  else {\n    // 26-sep 01:55: el script corre desde el <head>; mientras el navegador lee la p\u00E1gina, cada bloque se monta EN CUANTO\n    // aparece (una comprobaci\u00F3n por fotograma), en vez de esperar a que acabe de leerla entera (1,5-2 s medidos).\n    arrancar();\n    if (document.readyState === \"loading\") {\n      var pend = false, mo = window.MutationObserver && new MutationObserver(function () { if (pend) return; pend = true; (window.requestAnimationFrame || setTimeout)(function () { pend = false; arrancar(); }); });\n      if (mo) mo.observe(document.documentElement, { childList: true, subtree: true });\n      document.addEventListener(\"DOMContentLoaded\", function () { if (mo) mo.disconnect(); arrancar(); });\n    }\n  }\n})();\n"],
  "mappings": "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",
  "names": ["pend", "k"]
}
