{"product_id":"extractor-fans","title":"Nukeson Extraction Fans 0.25kw-2.2kw","description":"\u003cdiv style=\"max-width:1600px;margin:0 auto 20px;padding:0 16px;font-family:Arial,sans-serif;color:#111;\"\u003e\n  \u003ch2 style=\"font-size:28px;font-weight:800;margin:0 0 10px;\"\u003eNukeson Centrifugal Fans\u003c\/h2\u003e\n  \u003cp style=\"font-size:15px;line-height:1.7;margin:0 0 10px;\"\u003e\n    Heavy-duty centrifugal extraction fans manufactured in the UK for industrial ventilation, welding fume extraction, grinding bays, dust collection systems, and general airflow applications.\n  \u003c\/p\u003e\n  \u003cp style=\"font-size:15px;line-height:1.7;margin:0;\"\u003e\n    Use the fan selector below to compare fan models, check airflow and static pressure performance, review estimated running costs, and choose a suitable fan and motor switching panel for your system.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv id=\"its-fan-selector-page\"\u003e\u003c\/div\u003e\n\n\u003cscript\u003e\n(function () {\n  function initFanSelectorPage() {\n    var container = document.getElementById(\"its-fan-selector-page\");\n    if (!container) return;\n\n    var FAN_SIZE_IMAGE_URL = \"https:\/\/cdn.shopify.com\/s\/files\/1\/0700\/4412\/3456\/files\/Fan_Size_Chart.png?v=1775566204\";\n    var MOTOR_PANEL_URL = \"https:\/\/www.industrialtechstore.co.uk\/products\/fan-dol-starter\";\n\n    container.innerHTML = `\n      \u003cstyle\u003e\n        #its-fan-selector-page{\n          max-width:1600px;\n          margin:0 auto;\n          padding:16px;\n          font-family:Arial,sans-serif;\n          color:#111;\n          background:#f4f6fa;\n        }\n        #its-fan-selector-page *{box-sizing:border-box;}\n        #its-fan-selector-page h1,\n        #its-fan-selector-page h2,\n        #its-fan-selector-page h3,\n        #its-fan-selector-page h4{margin-top:0;}\n        #its-fan-selector-page h1{\n          font-size:28px;\n          font-weight:800;\n          margin-bottom:8px;\n        }\n        #its-fan-selector-page h2{\n          font-size:18px;\n          font-weight:800;\n          margin-bottom:8px;\n        }\n        #its-fan-selector-page h3{\n          font-size:15px;\n          font-weight:700;\n          margin-bottom:8px;\n        }\n\n        .its-topnote{\n          color:#4b5563;\n          font-size:13px;\n          line-height:1.6;\n          margin:0 0 18px;\n          max-width:1100px;\n        }\n\n        .its-top-layout{\n          display:grid;\n          grid-template-columns:360px minmax(0,1fr);\n          gap:18px;\n          align-items:start;\n          margin-bottom:18px;\n        }\n\n        .its-side-panel{\n          background:#eef2f7;\n          border:1px solid #d9e2f0;\n          border-radius:16px;\n          padding:16px;\n          box-shadow:0 8px 24px rgba(0,0,0,0.05);\n          position:sticky;\n          top:20px;\n        }\n\n        .its-top-content{\n          min-width:0;\n        }\n\n        .its-panel{\n          background:#fff;\n          border:1px solid #e5e7eb;\n          border-radius:16px;\n          padding:18px;\n          box-shadow:0 8px 24px rgba(0,0,0,0.05);\n          min-width:0;\n          margin-bottom:18px;\n        }\n\n        .its-field{margin-bottom:12px;}\n        .its-field label{\n          display:block;\n          margin-bottom:5px;\n          font-size:13px;\n          font-weight:700;\n        }\n        .its-field input,\n        .its-field select{\n          width:100%;\n          min-height:42px;\n          padding:8px 10px;\n          border:1px solid #cfd6e4;\n          border-radius:10px;\n          background:#fff;\n          font-size:14px;\n        }\n        .its-field small{\n          display:block;\n          margin-top:4px;\n          color:#667085;\n          font-size:12px;\n          line-height:1.35;\n        }\n\n        .its-row{\n          display:grid;\n          grid-template-columns:1fr 1fr;\n          gap:10px;\n        }\n\n        .its-btns{\n          display:flex;\n          gap:8px;\n          flex-wrap:wrap;\n          margin-top:8px;\n        }\n\n        .its-btn{\n          min-height:40px;\n          padding:0 14px;\n          border:none;\n          border-radius:999px;\n          background:#111827;\n          color:#fff;\n          font-weight:700;\n          cursor:pointer;\n          font-size:13px;\n          text-decoration:none;\n          display:inline-flex;\n          align-items:center;\n          justify-content:center;\n        }\n        .its-btn:hover{background:#1f2937;}\n\n        .its-btn-alt{\n          background:#fff;\n          color:#111;\n          border:1px solid #cfd6e4;\n        }\n        .its-btn-alt:hover{background:#f8fafc;}\n\n        .its-main-title{\n          font-size:24px;\n          line-height:1.2;\n          font-weight:800;\n          margin-bottom:12px;\n        }\n\n        .its-details-grid{\n          display:grid;\n          grid-template-columns:1.25fr 1fr;\n          gap:16px;\n        }\n\n        .its-subcard{\n          background:#fdfdfd;\n          border:1px solid #e8edf5;\n          border-radius:14px;\n          padding:16px;\n          min-width:0;\n        }\n\n        .its-meta{\n          display:grid;\n          grid-template-columns:repeat(3,minmax(0,1fr));\n          gap:8px;\n          margin-bottom:12px;\n        }\n        .its-meta div{\n          background:#f8fafc;\n          border:1px solid #e5e7eb;\n          border-radius:10px;\n          padding:8px;\n          min-width:0;\n        }\n        .its-meta span{\n          display:block;\n          color:#6b7280;\n          font-size:10px;\n          margin-bottom:3px;\n        }\n        .its-meta strong{\n          display:block;\n          font-size:12px;\n          line-height:1.25;\n          word-break:break-word;\n        }\n\n        .its-inline-section{\n          margin-top:14px;\n          padding-top:12px;\n          border-top:1px solid #e5e7eb;\n        }\n        .its-inline-section h4{\n          margin:0 0 8px;\n          font-size:14px;\n          font-weight:800;\n        }\n\n        .its-list{\n          margin:0;\n          padding-left:18px;\n        }\n        .its-list li{\n          margin-bottom:5px;\n          font-size:13px;\n          line-height:1.45;\n        }\n\n        .its-chart-head{\n          display:flex;\n          align-items:center;\n          justify-content:space-between;\n          gap:10px;\n          margin-bottom:10px;\n          flex-wrap:wrap;\n        }\n        .its-chart-label{\n          font-size:13px;\n          font-weight:800;\n          color:#334155;\n        }\n\n        .its-wide-panels{\n          width:100%;\n          display:block;\n        }\n\n        svg.its-svg{\n          width:100%;\n          height:620px;\n          display:block;\n          border-radius:10px;\n          background:#fff;\n          border:1px solid #edf2f7;\n          shape-rendering:geometricPrecision;\n          text-rendering:optimizeLegibility;\n          overflow:visible;\n        }\n\n        .its-note{\n          color:#555;\n          font-size:12px;\n          line-height:1.5;\n        }\n\n        .its-compare-table-wrap{\n          overflow-x:auto;\n          overflow-y:hidden;\n          margin-top:10px;\n          width:100%;\n          -webkit-overflow-scrolling:touch;\n        }\n\n        .its-compare-table{\n          width:100%;\n          min-width:0;\n          table-layout:fixed;\n          border-collapse:collapse;\n          background:#fff;\n          border:1px solid #e5e7eb;\n          border-radius:12px;\n          overflow:hidden;\n        }\n\n        .its-compare-table th,\n        .its-compare-table td{\n          border-bottom:1px solid #e5e7eb;\n          border-right:1px solid #e5e7eb;\n          padding:8px;\n          text-align:left;\n          vertical-align:top;\n          font-size:12px;\n          line-height:1.3;\n          word-break:break-word;\n        }\n\n        .its-compare-table th{\n          background:#f8fbff;\n          font-size:12px;\n          font-weight:800;\n        }\n        .its-compare-table tr:last-child td{border-bottom:none;}\n        .its-compare-table th:last-child,\n        .its-compare-table td:last-child{border-right:none;}\n\n        .its-compare-table th:first-child,\n        .its-compare-table td:first-child{\n          width:18%;\n        }\n\n        .its-compare-table th:not(:first-child),\n        .its-compare-table td:not(:first-child){\n          width:27.33%;\n        }\n\n        .its-tag{\n          display:inline-block;\n          padding:5px 8px;\n          border-radius:999px;\n          background:#eef2ff;\n          color:#3730a3;\n          font-size:10px;\n          font-weight:700;\n          white-space:nowrap;\n        }\n\n        .its-callout{\n          background:linear-gradient(135deg,#eef6ff,#f8fbff);\n          border:1px solid #dbeafe;\n          border-radius:16px;\n          padding:14px;\n          margin-top:14px;\n        }\n        .its-callout p{\n          margin:0 0 8px;\n          font-size:13px;\n          line-height:1.5;\n          color:#334155;\n        }\n\n        .its-size-image{\n          width:100%;\n          height:auto;\n          display:block;\n          border-radius:10px;\n          border:1px solid #edf2f7;\n          background:#fff;\n          object-fit:contain;\n        }\n\n        .its-modal{\n          position:fixed;\n          inset:0;\n          background:rgba(15,23,42,0.82);\n          z-index:99999;\n          display:none;\n          align-items:center;\n          justify-content:center;\n          padding:24px;\n        }\n        .its-modal-inner{\n          width:min(1450px,96vw);\n          max-height:92vh;\n          overflow:auto;\n          background:#fff;\n          border-radius:18px;\n          padding:18px;\n          box-shadow:0 20px 60px rgba(0,0,0,0.35);\n        }\n        .its-modal-top{\n          display:flex;\n          justify-content:space-between;\n          align-items:center;\n          gap:10px;\n          margin-bottom:10px;\n        }\n        .its-modal-title{\n          font-size:18px;\n          font-weight:800;\n        }\n        .its-close{\n          border:none;\n          background:#111827;\n          color:#fff;\n          width:38px;\n          height:38px;\n          border-radius:999px;\n          font-size:18px;\n          cursor:pointer;\n        }\n        .its-modal-chart svg{\n          width:100%;\n          height:720px;\n          display:block;\n          border:1px solid #edf2f7;\n          border-radius:10px;\n          background:#fff;\n          shape-rendering:geometricPrecision;\n          text-rendering:optimizeLegibility;\n        }\n\n        .its-cta-card{\n          margin-top:14px;\n          background:linear-gradient(135deg,#111827,#1f2937);\n          color:#fff;\n          border-radius:16px;\n          padding:16px;\n          border:1px solid #111827;\n        }\n        .its-cta-card h3{\n          margin:0 0 8px;\n          font-size:16px;\n          font-weight:800;\n          color:#fff;\n        }\n        .its-cta-card p{\n          margin:0 0 12px;\n          font-size:13px;\n          line-height:1.55;\n          color:rgba(255,255,255,0.92);\n        }\n        .its-cta-actions{\n          display:flex;\n          gap:8px;\n          flex-wrap:wrap;\n        }\n        .its-btn-light{\n          background:#fff;\n          color:#111827;\n          border:1px solid #fff;\n        }\n        .its-btn-light:hover{\n          background:#f3f4f6;\n        }\n\n        @media (max-width: 1200px){\n          .its-top-layout{grid-template-columns:1fr;}\n          .its-side-panel{position:static;}\n          .its-details-grid,\n          .its-row,\n          .its-meta{grid-template-columns:1fr;}\n          svg.its-svg{height:430px;}\n          .its-modal-chart svg{height:560px;}\n\n          .its-compare-table{\n            min-width:900px;\n          }\n        }\n      \u003c\/style\u003e\n\n      \u003ch1\u003eFan Comparison \u0026 Performance Selector\u003c\/h1\u003e\n      \u003cp class=\"its-topnote\"\u003e\n        Compare fan models, review airflow and static pressure performance, and estimate electrical running costs for your application.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"its-top-layout\"\u003e\n        \u003cdiv class=\"its-side-panel\"\u003e\n          \u003ch2\u003eChoose fans\u003c\/h2\u003e\n\n          \u003cdiv class=\"its-field\"\u003e\n            \u003clabel for=\"its_main_fan\"\u003eSelect fan\u003c\/label\u003e\n            \u003cselect id=\"its_main_fan\"\u003e\u003c\/select\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-field\"\u003e\n            \u003clabel for=\"its_compare_1\"\u003eCompare fan 2\u003c\/label\u003e\n            \u003cselect id=\"its_compare_1\"\u003e\u003c\/select\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-field\"\u003e\n            \u003clabel for=\"its_compare_2\"\u003eCompare fan 3\u003c\/label\u003e\n            \u003cselect id=\"its_compare_2\"\u003e\u003c\/select\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-field\"\u003e\n            \u003clabel for=\"its_target_flow\"\u003eRequired airflow (m³\/h)\u003c\/label\u003e\n            \u003cinput id=\"its_target_flow\" type=\"number\" min=\"0\" step=\"10\" value=\"2000\"\u003e\n            \u003csmall\u003eUsed to estimate the available static pressure at your required airflow.\u003c\/small\u003e\n          \u003c\/div\u003e\n\n          \u003ch2 style=\"margin-top:16px;\"\u003eElectrical settings\u003c\/h2\u003e\n\n          \u003cdiv class=\"its-row\"\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_phase_type\"\u003eSupply type\u003c\/label\u003e\n              \u003cselect id=\"its_phase_type\"\u003e\n                \u003coption value=\"1ph\"\u003eSingle phase 230V\u003c\/option\u003e\n                \u003coption value=\"3ph\" selected\u003eThree phase 400V\u003c\/option\u003e\n              \u003c\/select\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_load_factor\"\u003eAverage motor load\u003c\/label\u003e\n              \u003cinput id=\"its_load_factor\" type=\"number\" min=\"0.1\" max=\"1\" step=\"0.01\" value=\"0.75\"\u003e\n              \u003csmall\u003eTypical running load often 70–80%.\u003c\/small\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-row\"\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_hours_day\"\u003eHours running per day\u003c\/label\u003e\n              \u003cinput id=\"its_hours_day\" type=\"number\" min=\"1\" max=\"24\" step=\"1\" value=\"8\"\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_efficiency\"\u003eMotor efficiency\u003c\/label\u003e\n              \u003cinput id=\"its_efficiency\" type=\"number\" min=\"0.5\" max=\"1\" step=\"0.01\" value=\"0.88\"\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-row\"\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_pf\"\u003ePower factor\u003c\/label\u003e\n              \u003cinput id=\"its_pf\" type=\"number\" min=\"0.5\" max=\"1\" step=\"0.01\" value=\"0.97\"\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"its-field\"\u003e\n              \u003clabel for=\"its_tariff\"\u003eElectricity cost (£\/kWh)\u003c\/label\u003e\n              \u003cinput id=\"its_tariff\" type=\"number\" min=\"0\" step=\"0.01\" value=\"0.24\"\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"its-btns\"\u003e\n            \u003cbutton class=\"its-btn\" onclick=\"window.itsRenderFanSelector(); return false;\"\u003eUpdate\u003c\/button\u003e\n            \u003cbutton class=\"its-btn its-btn-alt\" onclick=\"window.itsResetFanSelector(); return false;\"\u003eReset\u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"its-top-content\"\u003e\n          \u003cdiv id=\"its_main_output\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"its-wide-panels\"\u003e\n        \u003cdiv id=\"its_curve_output\"\u003e\u003c\/div\u003e\n        \u003cdiv id=\"its_size_output\"\u003e\u003c\/div\u003e\n        \u003cdiv id=\"its_compare_output\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"its-modal\" id=\"its_curve_modal\"\u003e\n        \u003cdiv class=\"its-modal-inner\"\u003e\n          \u003cdiv class=\"its-modal-top\"\u003e\n            \u003cdiv class=\"its-modal-title\" id=\"its_curve_modal_title\"\u003eLarge performance curve\u003c\/div\u003e\n            \u003cbutton class=\"its-close\" id=\"its_curve_modal_close\" aria-label=\"Close\"\u003e×\u003c\/button\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"its-modal-chart\" id=\"its_curve_modal_chart\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    var fans = [\n      {\n        id: \"fan1\",\n        series: \"ITS057\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.25KW 150mm Inlet\/Outlet- 1000m3\/h, 660Pa Back Curved Fan\",\n        impellerType: \"backward-curved\",\n        motorKw: 0.25,\n        inletMm: 150,\n        outletMm: 150,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Compact cleaner-air fan\", \"Good for small extraction systems\", \"Suitable for spray and light fume duties\"],\n        note: \"Cleaner-air duties, smaller fan.\",\n        curve: [\n          { flow: 0, pressure: 660 },\n          { flow: 70, pressure: 660 },\n          { flow: 340, pressure: 530 },\n          { flow: 690, pressure: 350 },\n          { flow: 920, pressure: 160 },\n          { flow: 1010, pressure: 80 }\n        ]\n      },\n      {\n        id: \"fan2\",\n        series: \"ITS057\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.37KW 150mm Inlet\/Outlet- 1250m3\/h, 650Pa Radial Fan\",\n        impellerType: \"radial\",\n        motorKw: 0.37,\n        inletMm: 150,\n        outletMm: 150,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Good for dustier airflow\", \"Better for tougher extraction duties\", \"Compact industrial radial model\"],\n        note: \"Better suited to heavier dust and tougher extraction duties.\",\n        curve: [\n          { flow: 0, pressure: 650 },\n          { flow: 70, pressure: 650 },\n          { flow: 380, pressure: 550 },\n          { flow: 730, pressure: 390 },\n          { flow: 1090, pressure: 190 },\n          { flow: 1250, pressure: 100 }\n        ]\n      },\n      {\n        id: \"fan3\",\n        series: \"ITS057\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.55KW 150mm Inlet\/Outlet- 1450m3\/h, 920Pa Radial Fan\",\n        impellerType: \"radial\",\n        motorKw: 0.55,\n        inletMm: 150,\n        outletMm: 150,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Higher pressure small fan\", \"Better for restrictive ducting\", \"Strong radial option\"],\n        note: \"Good for dustier airflow than backward-curved versions.\",\n        curve: [\n          { flow: 0, pressure: 900 },\n          { flow: 90, pressure: 900 },\n          { flow: 420, pressure: 800 },\n          { flow: 940, pressure: 550 },\n          { flow: 1380, pressure: 250 },\n          { flow: 1470, pressure: 130 }\n        ]\n      },\n      {\n        id: \"fan4\",\n        series: \"ITS057\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.37KW 150mm Inlet\/Outlet- 1400m3\/h, 1000Pa Back Curved Fan\",\n        impellerType: \"backward-curved\",\n        motorKw: 0.37,\n        inletMm: 150,\n        outletMm: 150,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Cleaner-air high-pressure option\", \"Good for spray and fume work\", \"Strong pressure for its size\"],\n        note: \"Cleaner-air extraction and spray-type duties.\",\n        curve: [\n          { flow: 0, pressure: 1000 },\n          { flow: 90, pressure: 1000 },\n          { flow: 470, pressure: 880 },\n          { flow: 940, pressure: 580 },\n          { flow: 1330, pressure: 250 },\n          { flow: 1430, pressure: 120 }\n        ]\n      },\n      {\n        id: \"fan5\",\n        series: \"ITS057\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.75KW 150mm Inlet\/Outlet- 1680m3\/h, 1200Pa Radial Fan\",\n        impellerType: \"radial\",\n        motorKw: 0.75,\n        inletMm: 150,\n        outletMm: 150,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"High-pressure small fan\", \"Good for longer duct runs\", \"Strong radial extraction model\"],\n        note: \"Higher pressure radial option for smaller connection size.\",\n        curve: [\n          { flow: 0, pressure: 1210 },\n          { flow: 160, pressure: 1200 },\n          { flow: 500, pressure: 1020 },\n          { flow: 1110, pressure: 730 },\n          { flow: 1570, pressure: 320 },\n          { flow: 1640, pressure: 130 }\n        ]\n      },\n      {\n        id: \"fan6\",\n        series: \"ITS067\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.55KW 200mm Inlet\/Outlet- 2050m3\/h, 660Pa Back Curved Fan\",\n        impellerType: \"backward-curved\",\n        motorKw: 0.55,\n        inletMm: 200,\n        outletMm: 200,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Cleaner-air 200 mm model\", \"Good medium airflow\", \"Useful for spray and canopy systems\"],\n        note: \"Cleaner-air option with 200 mm connections.\",\n        curve: [\n          { flow: 0, pressure: 660 },\n          { flow: 170, pressure: 660 },\n          { flow: 640, pressure: 580 },\n          { flow: 1280, pressure: 330 },\n          { flow: 1920, pressure: 90 },\n          { flow: 2060, pressure: 20 }\n        ]\n      },\n      {\n        id: \"fan7\",\n        series: \"ITS067\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.75KW 200mm Inlet\/Outlet- 2260m3\/h, 760Pa Radial Fan\",\n        impellerType: \"radial\",\n        motorKw: 0.75,\n        inletMm: 200,\n        outletMm: 200,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Good for dustier 200 mm systems\", \"Moderate to strong pressure\", \"Useful industrial radial option\"],\n        note: \"Radial option for dirtier or more aggressive extraction.\",\n        curve: [\n          { flow: 0, pressure: 760 },\n          { flow: 190, pressure: 760 },\n          { flow: 790, pressure: 650 },\n          { flow: 1570, pressure: 390 },\n          { flow: 2230, pressure: 120 },\n          { flow: 2260, pressure: 40 }\n        ]\n      },\n      {\n        id: \"fan8\",\n        series: \"ITS067\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"0.75KW 200mm Inlet\/Outlet- 2550m3\/h, 880Pa Back Curved Fan\",\n        impellerType: \"backward-curved\",\n        motorKw: 0.75,\n        inletMm: 200,\n        outletMm: 200,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Good flow with cleaner-air handling\", \"Suitable for spray and fume systems\", \"Stronger 200 mm backward-curved option\"],\n        note: \"Cleaner-air 200 mm option with stronger flow than the 225 impeller.\",\n        curve: [\n          { flow: 0, pressure: 880 },\n          { flow: 200, pressure: 880 },\n          { flow: 840, pressure: 760 },\n          { flow: 1560, pressure: 470 },\n          { flow: 2280, pressure: 120 },\n          { flow: 2580, pressure: 30 }\n        ]\n      },\n      {\n        id: \"fan9\",\n        series: \"ITS067\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"1.5KW 200mm Inlet\/Outlet- 2650m3\/h, 1000Pa Radial Fan\",\n        impellerType: \"radial\",\n        motorKw: 1.50,\n        inletMm: 200,\n        outletMm: 200,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Heavy-duty radial model\", \"Good for demanding extraction\", \"Strong pressure reserve\"],\n        note: \"Highest-output 200 mm radial option in this set.\",\n        curve: [\n          { flow: 0, pressure: 990 },\n          { flow: 220, pressure: 990 },\n          { flow: 900, pressure: 890 },\n          { flow: 1890, pressure: 560 },\n          { flow: 2630, pressure: 160 },\n          { flow: 2870, pressure: 20 }\n        ]\n      },\n      {\n        id: \"fan10\",\n        series: \"ITS020\",\n        leadTime: \"Made to order - typical lead time 5-7 working days\",\n        name: \"2.2KW 300mm Inlet\/250mm Outlet- 5120m3\/h, 1120Pa Back Curved Fan\",\n        impellerType: \"backward-curved\",\n        motorKw: 2.20,\n        inletMm: 300,\n        outletMm: 250,\n        phases: [\"1ph\",\"3ph\"],\n        keyPoints: [\"Large high-flow model\", \"Suitable for bigger extraction systems\", \"Strong airflow with useful static pressure\"],\n        note: \"ITS020 larger centrifugal fan option.\",\n        curve: [\n          { flow: 30, pressure: 1050 },\n          { flow: 180, pressure: 1080 },\n          { flow: 610, pressure: 1120 },\n          { flow: 1090, pressure: 1000 },\n          { flow: 2030, pressure: 620 },\n          { flow: 3160, pressure: 200 },\n          { flow: 5120, pressure: 0 }\n        ]\n      }\n    ];\n\n    function el(id){ return document.getElementById(id); }\n\n    function fmt(n, dp){\n      if (n === null || typeof n === \"undefined\" || isNaN(n)) return \"-\";\n      return Number(n).toLocaleString(\"en-GB\", {\n        minimumFractionDigits: dp,\n        maximumFractionDigits: dp\n      });\n    }\n\n    function esc(str){\n      return String(str || \"\")\n        .replace(\/\u0026\/g, \"\u0026amp;\")\n        .replace(\/\u003c\/g, \"\u0026lt;\")\n        .replace(\/\u003e\/g, \"\u0026gt;\")\n        .replace(\/\"\/g, \"\u0026quot;\");\n    }\n\n    function titleCaseImpeller(str){\n      if (!str) return \"\";\n      return String(str)\n        .split(\"-\")\n        .map(function(part){\n          return part.charAt(0).toUpperCase() + part.slice(1);\n        })\n        .join(\"-\");\n    }\n\n    function getFanById(id){\n      for (var i = 0; i \u003c fans.length; i++) {\n        if (fans[i].id === id) return fans[i];\n      }\n      return null;\n    }\n\n    function populateSelect(selectId, allowBlank){\n      var select = el(selectId);\n      if (!select) return;\n      var html = allowBlank ? '\u003coption value=\"\"\u003eNone\u003c\/option\u003e' : '';\n      html += fans.map(function(f){\n        return '\u003coption value=\"' + f.id + '\"\u003e' + esc(f.name) + '\u003c\/option\u003e';\n      }).join('');\n      select.innerHTML = html;\n    }\n\n    function maxFlow(curve){\n      var maxVal = 0;\n      for (var i = 0; i \u003c curve.length; i++) {\n        if (curve[i].flow \u003e maxVal) maxVal = curve[i].flow;\n      }\n      return maxVal;\n    }\n\n    function maxPressure(curve){\n      var m = 0;\n      for (var i = 0; i \u003c curve.length; i++) {\n        if (curve[i].pressure \u003e m) m = curve[i].pressure;\n      }\n      return m;\n    }\n\n    function interpolatePressure(curve, flow){\n      if (!curve || curve.length \u003c 2) return null;\n      var sorted = curve.slice().sort(function(a,b){ return a.flow - b.flow; });\n      if (flow \u003c sorted[0].flow || flow \u003e sorted[sorted.length - 1].flow) return null;\n\n      for (var i = 0; i \u003c sorted.length - 1; i++){\n        var p1 = sorted[i];\n        var p2 = sorted[i + 1];\n        if (flow === p1.flow) return p1.pressure;\n        if (flow === p2.flow) return p2.pressure;\n        if (flow \u003e p1.flow \u0026\u0026 flow \u003c p2.flow){\n          var t = (flow - p1.flow) \/ (p2.flow - p1.flow);\n          return p1.pressure + t * (p2.pressure - p1.pressure);\n        }\n      }\n      return null;\n    }\n\n    function estimateFullLoadCurrent1ph(motorKw, voltage, pf, eff){\n      if (!voltage || !pf || !eff) return null;\n      return (motorKw * 1000) \/ (voltage * pf * eff);\n    }\n\n    function estimateFullLoadCurrent3ph(motorKw, voltage, pf, eff){\n      if (!voltage || !pf || !eff) return null;\n      return (motorKw * 1000) \/ (Math.sqrt(3) * voltage * pf * eff);\n    }\n\n    function estimateInputKwAtLoad(motorKw, loadFactor, eff){\n      if (!eff) return null;\n      return (motorKw * loadFactor) \/ eff;\n    }\n\n    function uniqueFans(list){\n      var out = [];\n      var seen = {};\n      for (var i = 0; i \u003c list.length; i++){\n        if (list[i] \u0026\u0026 !seen[list[i].id]){\n          seen[list[i].id] = true;\n          out.push(list[i]);\n        }\n      }\n      return out;\n    }\n\n    function buildCurveSvg(curve, selectedFlow, largeMode){\n      var width = largeMode ? 1400 : 980;\n      var height = largeMode ? 680 : 560;\n      var padL = largeMode ? 100 : 80;\n      var padR = largeMode ? 28 : 24;\n      var padT = largeMode ? 26 : 24;\n      var padB = largeMode ? 76 : 64;\n\n      var maxX = maxFlow(curve);\n      var maxY = maxPressure(curve);\n\n      function x(flow){\n        return padL + (flow \/ maxX) * (width - padL - padR);\n      }\n      function y(pressure){\n        return height - padB - (pressure \/ maxY) * (height - padT - padB);\n      }\n\n      var path = \"\";\n      for (var i = 0; i \u003c curve.length; i++){\n        path += (i === 0 ? \"M\" : \"L\") + x(curve[i].flow) + \" \" + y(curve[i].pressure) + \" \";\n      }\n\n      var grid = \"\";\n      for (var gxStep = 0; gxStep \u003c= 5; gxStep++){\n        var gx = padL + ((width - padL - padR) \/ 5) * gxStep;\n        var xVal = (maxX \/ 5) * gxStep;\n        grid += '\u003cline x1=\"' + gx + '\" y1=\"' + padT + '\" x2=\"' + gx + '\" y2=\"' + (height - padB) + '\" stroke=\"#e8eef7\" stroke-width=\"1\"\u003e\u003c\/line\u003e';\n        grid += '\u003ctext x=\"' + gx + '\" y=\"' + (height - 22) + '\" font-size=\"' + (largeMode ? 18 : 12) + '\" text-anchor=\"middle\" fill=\"#475569\"\u003e' + Math.round(xVal) + '\u003c\/text\u003e';\n      }\n\n      for (var gyStep = 0; gyStep \u003c= 5; gyStep++){\n        var gy = padT + ((height - padT - padB) \/ 5) * gyStep;\n        var yVal = maxY - ((maxY \/ 5) * gyStep);\n        grid += '\u003cline x1=\"' + padL + '\" y1=\"' + gy + '\" x2=\"' + (width - padR) + '\" y2=\"' + gy + '\" stroke=\"#e8eef7\" stroke-width=\"1\"\u003e\u003c\/line\u003e';\n        grid += '\u003ctext x=\"' + (padL - 12) + '\" y=\"' + (gy + 5) + '\" font-size=\"' + (largeMode ? 18 : 12) + '\" text-anchor=\"end\" fill=\"#475569\"\u003e' + Math.round(yVal) + '\u003c\/text\u003e';\n      }\n\n      var dutyPressure = interpolatePressure(curve, selectedFlow);\n      var dutyLine = '';\n      var dutyDot = '';\n      var dutyText = '';\n\n      if (selectedFlow \u003c= maxX) {\n        dutyLine = '\u003cline x1=\"' + x(selectedFlow) + '\" y1=\"' + padT + '\" x2=\"' + x(selectedFlow) + '\" y2=\"' + (height - padB) + '\" stroke=\"#ef4444\" stroke-width=\"' + (largeMode ? 3 : 2) + '\" stroke-dasharray=\"' + (largeMode ? '10 10' : '6 6') + '\"\u003e\u003c\/line\u003e';\n      }\n\n      if (dutyPressure !== null){\n        dutyDot = '\u003ccircle cx=\"' + x(selectedFlow) + '\" cy=\"' + y(dutyPressure) + '\" r=\"' + (largeMode ? 8 : 5) + '\" fill=\"#dc2626\"\u003e\u003c\/circle\u003e';\n        dutyText = '\u003ctext x=\"' + (x(selectedFlow) + (largeMode ? 14 : 10)) + '\" y=\"' + (y(dutyPressure) - (largeMode ? 14 : 10)) + '\" font-size=\"' + (largeMode ? 18 : 12) + '\" fill=\"#b91c1c\"\u003eDuty point\u003c\/text\u003e';\n      }\n\n      return `\n        \u003csvg class=\"${largeMode ? '' : 'its-svg'}\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n          ${grid}\n          \u003cline x1=\"${padL}\" y1=\"${height - padB}\" x2=\"${width - padR}\" y2=\"${height - padB}\" stroke=\"#64748b\" stroke-width=\"${largeMode ? 2.5 : 2}\"\u003e\u003c\/line\u003e\n          \u003cline x1=\"${padL}\" y1=\"${padT}\" x2=\"${padL}\" y2=\"${height - padB}\" stroke=\"#64748b\" stroke-width=\"${largeMode ? 2.5 : 2}\"\u003e\u003c\/line\u003e\n          \u003cpath d=\"${path}\" fill=\"none\" stroke=\"#2563eb\" stroke-width=\"${largeMode ? 6 : 4}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n          ${dutyLine}\n          ${dutyDot}\n          ${dutyText}\n          \u003ctext x=\"${width \/ 2}\" y=\"${height - 10}\" font-size=\"${largeMode ? 20 : 13}\" text-anchor=\"middle\" fill=\"#334155\"\u003eAirflow (m³\/h)\u003c\/text\u003e\n          \u003ctext x=\"26\" y=\"${height \/ 2}\" font-size=\"${largeMode ? 20 : 13}\" text-anchor=\"middle\" fill=\"#334155\" transform=\"rotate(-90 26 ${height \/ 2})\"\u003ePressure (Pa)\u003c\/text\u003e\n        \u003c\/svg\u003e\n      `;\n    }\n\n    function getSettings(){\n      var phaseType = el(\"its_phase_type\").value;\n      return {\n        targetFlow: parseFloat(el(\"its_target_flow\").value) || 0,\n        phaseType: phaseType,\n        loadFactor: parseFloat(el(\"its_load_factor\").value) || 0.75,\n        hoursDay: parseFloat(el(\"its_hours_day\").value) || 8,\n        eff: parseFloat(el(\"its_efficiency\").value) || 0.88,\n        pf: parseFloat(el(\"its_pf\").value) || 0.97,\n        tariff: parseFloat(el(\"its_tariff\").value) || 0.24\n      };\n    }\n\n    function getFanCalc(fan, settings){\n      var dutyPressure = interpolatePressure(fan.curve, settings.targetFlow);\n      var inputKw = estimateInputKwAtLoad(fan.motorKw, settings.loadFactor, settings.eff);\n      var costHour = inputKw * settings.tariff;\n      var costDay = costHour * settings.hoursDay;\n\n      var fullLoadCurrent = null;\n      if (settings.phaseType === \"1ph\") {\n        fullLoadCurrent = fan.phases.indexOf(\"1ph\") \u003e -1 ? estimateFullLoadCurrent1ph(fan.motorKw, 230, settings.pf, settings.eff) : null;\n      } else {\n        fullLoadCurrent = fan.phases.indexOf(\"3ph\") \u003e -1 ? estimateFullLoadCurrent3ph(fan.motorKw, 400, settings.pf, settings.eff) : null;\n      }\n\n      var runningCurrent = fullLoadCurrent !== null ? fullLoadCurrent * settings.loadFactor : null;\n\n      return {\n        dutyPressure: dutyPressure,\n        maxFlow: maxFlow(fan.curve),\n        maxPressure: maxPressure(fan.curve),\n        inputKw: inputKw,\n        costHour: costHour,\n        costDay: costDay,\n        fullLoadCurrent: fullLoadCurrent,\n        runningCurrent: runningCurrent\n      };\n    }\n\n    function renderMainFan(fan, calc, settings){\n      el(\"its_main_output\").innerHTML = `\n        \u003cdiv class=\"its-panel\"\u003e\n          \u003cdiv class=\"its-main-title\"\u003e${esc(fan.name)}\u003c\/div\u003e\n          \u003cdiv class=\"its-details-grid\"\u003e\n            \u003cdiv class=\"its-subcard\"\u003e\n              \u003cdiv class=\"its-meta\"\u003e\n                \u003cdiv\u003e\u003cspan\u003eSeries\u003c\/span\u003e\u003cstrong\u003e${esc(fan.series)}\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eImpeller type\u003c\/span\u003e\u003cstrong\u003e${esc(titleCaseImpeller(fan.impellerType))}\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eMotor size\u003c\/span\u003e\u003cstrong\u003e${fmt(fan.motorKw,2)} kW\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eSupply options\u003c\/span\u003e\u003cstrong\u003e${esc(fan.phases.join(\", \"))}\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eInlet\u003c\/span\u003e\u003cstrong\u003e${fmt(fan.inletMm,0)} mm\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eOutlet\u003c\/span\u003e\u003cstrong\u003e${fmt(fan.outletMm,0)} mm\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eMax flow\u003c\/span\u003e\u003cstrong\u003e${fmt(calc.maxFlow,0)} m³\/h\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003eMax static pressure\u003c\/span\u003e\u003cstrong\u003e${fmt(calc.maxPressure,0)} Pa\u003c\/strong\u003e\u003c\/div\u003e\n                \u003cdiv\u003e\u003cspan\u003ePressure at required airflow\u003c\/span\u003e\u003cstrong\u003e${calc.dutyPressure !== null ? fmt(calc.dutyPressure,0) + ' Pa' : 'Outside tested curve'}\u003c\/strong\u003e\u003c\/div\u003e\n              \u003c\/div\u003e\n\n              \u003cdiv class=\"its-inline-section\"\u003e\n                \u003ch4\u003e${settings.phaseType === \"1ph\" ? \"Single phase 230V estimate\" : \"Three phase 400V estimate\"}\u003c\/h4\u003e\n                \u003cul class=\"its-list\"\u003e\n                  \u003cli\u003eFull-load current: \u003cstrong\u003e${fmt(calc.fullLoadCurrent,2)} A\u003c\/strong\u003e\u003c\/li\u003e\n                  \u003cli\u003eAverage running current: \u003cstrong\u003e${fmt(calc.runningCurrent,2)} A\u003c\/strong\u003e\u003c\/li\u003e\n                  \u003cli\u003eEstimated running cost \/ hour: \u003cstrong\u003e£${fmt(calc.costHour,2)}\u003c\/strong\u003e\u003c\/li\u003e\n                  \u003cli\u003eEstimated running cost \/ day: \u003cstrong\u003e£${fmt(calc.costDay,2)}\u003c\/strong\u003e\u003c\/li\u003e\n                \u003c\/ul\u003e\n              \u003c\/div\u003e\n\n              \u003cdiv class=\"its-inline-section\"\u003e\n                \u003ch4\u003eBuild details\u003c\/h4\u003e\n                \u003cul class=\"its-list\"\u003e\n                  \u003cli\u003eUK manufactured welded steel construction\u003c\/li\u003e\n                  \u003cli\u003eQuality TEC motor fitted\u003c\/li\u003e\n                  \u003cli\u003eMachine-balanced impeller for smoother running\u003c\/li\u003e\n                  \u003cli\u003eEPDM sealing used on the body\u003c\/li\u003e\n                  ${fan.impellerType === \"radial\" ? '\u003cli\u003eRadial version can be configured with motor on left or right side\u003c\/li\u003e' : ''}\n                  \u003cli\u003e\u003cstrong\u003e${esc(fan.leadTime)}\u003c\/strong\u003e\u003c\/li\u003e\n                \u003c\/ul\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"its-subcard\"\u003e\n              \u003ch2\u003eQuick overview\u003c\/h2\u003e\n              \u003cul class=\"its-list\"\u003e\n                \u003cli\u003e\u003cstrong\u003eRequired airflow:\u003c\/strong\u003e ${fmt(settings.targetFlow,0)} m³\/h\u003c\/li\u003e\n                \u003cli\u003e\u003cstrong\u003eSelected supply:\u003c\/strong\u003e ${settings.phaseType === \"1ph\" ? \"Single phase 230V\" : \"Three phase 400V\"}\u003c\/li\u003e\n                \u003cli\u003e\u003cstrong\u003eAverage motor load:\u003c\/strong\u003e ${fmt(settings.loadFactor * 100,0)}%\u003c\/li\u003e\n                \u003cli\u003e\u003cstrong\u003eHours running per day:\u003c\/strong\u003e ${fmt(settings.hoursDay,0)}\u003c\/li\u003e\n                \u003cli\u003e\u003cstrong\u003eRunning cost per hour:\u003c\/strong\u003e £${fmt(calc.costHour,2)}\u003c\/li\u003e\n                \u003cli\u003e\u003cstrong\u003eRunning cost per day:\u003c\/strong\u003e £${fmt(calc.costDay,2)}\u003c\/li\u003e\n              \u003c\/ul\u003e\n\n              \u003cdiv class=\"its-inline-section\"\u003e\n                \u003ch4\u003eKey points\u003c\/h4\u003e\n                \u003cul class=\"its-list\"\u003e\n                  ${fan.keyPoints.map(function(point){ return '\u003cli\u003e' + esc(point) + '\u003c\/li\u003e'; }).join('')}\n                \u003c\/ul\u003e\n              \u003c\/div\u003e\n\n              \u003cdiv class=\"its-callout\"\u003e\n                \u003cp\u003e\u003cstrong\u003eFan type note:\u003c\/strong\u003e ${esc(fan.note || '')}\u003c\/p\u003e\n                \u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e ${esc(fan.leadTime)}\u003c\/p\u003e\n              \u003c\/div\u003e\n\n              \u003cdiv class=\"its-cta-card\"\u003e\n                \u003ch3\u003eNeed a switching panel for this fan?\u003c\/h3\u003e\n                \u003cp\u003eWe also offer made-to-order Fan \u0026amp; Motor Switching Panels with isolator, thermal overload protection, cable and plug options, plus direct motor wiring options for easy installation.\u003c\/p\u003e\n                \u003cdiv class=\"its-cta-actions\"\u003e\n                  \u003ca class=\"its-btn its-btn-light\" href=\"${MOTOR_PANEL_URL}\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eView Fan \u0026amp; Motor Switching Panel\u003c\/a\u003e\n                \u003c\/div\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      `;\n    }\n\n    function renderCurvePanel(fan, settings){\n      el(\"its_curve_output\").innerHTML = `\n        \u003cdiv class=\"its-panel\"\u003e\n          \u003cdiv class=\"its-chart-head\"\u003e\n            \u003cdiv class=\"its-chart-label\"\u003ePerformance curve\u003c\/div\u003e\n            \u003cbutton class=\"its-btn its-btn-alt\" type=\"button\" onclick=\"window.itsOpenCurveModal('${fan.id}')\"\u003eOpen large curve\u003c\/button\u003e\n          \u003c\/div\u003e\n          ${buildCurveSvg(fan.curve, settings.targetFlow, false)}\n        \u003c\/div\u003e\n      `;\n    }\n\n    function renderSizeImage(){\n      el(\"its_size_output\").innerHTML = `\n        \u003cdiv class=\"its-panel\"\u003e\n          \u003cdiv class=\"its-chart-label\" style=\"margin-bottom:10px;\"\u003eFan size \/ dimensions\u003c\/div\u003e\n          \u003cimg\n            src=\"${esc(FAN_SIZE_IMAGE_URL)}\"\n            alt=\"Nukeson fan size dimensions\"\n            class=\"its-size-image\"\n          \u003e\n        \u003c\/div\u003e\n      `;\n    }\n\n    function renderCompare(fanList, settings){\n      if (fanList.length \u003c= 1) {\n        el(\"its_compare_output\").innerHTML = \"\";\n        return;\n      }\n\n      var calcs = fanList.map(function(fan){\n        return { fan: fan, calc: getFanCalc(fan, settings) };\n      });\n\n      var rows = [\n        { label: \"Model\", custom: function(x){ return esc(x.fan.name); } },\n        { label: \"Series\", custom: function(x){ return esc(x.fan.series); } },\n        { label: \"Impeller type\", custom: function(x){ return esc(titleCaseImpeller(x.fan.impellerType)); } },\n        { label: \"Motor size\", custom: function(x){ return fmt(x.fan.motorKw,2) + \" kW\"; } },\n        { label: \"Supply options\", custom: function(x){ return esc(x.fan.phases.join(\", \")); } },\n        { label: \"Inlet \/ Outlet\", custom: function(x){ return fmt(x.fan.inletMm,0) + \" \/ \" + fmt(x.fan.outletMm,0) + \" mm\"; } },\n        { label: \"Max flow\", custom: function(x){ return fmt(x.calc.maxFlow,0) + \" m³\/h\"; } },\n        { label: \"Max pressure\", custom: function(x){ return fmt(x.calc.maxPressure,0) + \" Pa\"; } },\n        { label: \"Pressure at required airflow\", custom: function(x){ return x.calc.dutyPressure !== null ? fmt(x.calc.dutyPressure,0) + \" Pa\" : \"Outside tested curve\"; } },\n        { label: \"Full-load current\", custom: function(x){ return fmt(x.calc.fullLoadCurrent,2) + \" A\"; } },\n        { label: \"Average running current\", custom: function(x){ return fmt(x.calc.runningCurrent,2) + \" A\"; } },\n        { label: \"Estimated cost \/ hour\", custom: function(x){ return \"£\" + fmt(x.calc.costHour,2); } },\n        { label: \"Estimated cost \/ day\", custom: function(x){ return \"£\" + fmt(x.calc.costDay,2); } },\n        { label: \"Key points\", custom: function(x){ return esc(x.fan.keyPoints.join(\", \")); } }\n      ];\n\n      el(\"its_compare_output\").innerHTML = `\n        \u003cdiv class=\"its-panel\"\u003e\n          \u003ch2\u003eCompare selected fans\u003c\/h2\u003e\n          \u003cdiv class=\"its-note\"\u003eSide-by-side comparison of up to 3 selected models.\u003c\/div\u003e\n          \u003cdiv class=\"its-compare-table-wrap\"\u003e\n            \u003ctable class=\"its-compare-table\"\u003e\n              \u003cthead\u003e\n                \u003ctr\u003e\n                  \u003cth\u003eSpecification\u003c\/th\u003e\n                  ${calcs.map(function(x, i){\n                    return '\u003cth\u003e\u003cspan class=\"its-tag\"\u003e' + (i === 0 ? 'Selected fan' : 'Compare fan ' + (i + 1)) + '\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e' + esc(x.fan.name) + '\u003c\/th\u003e';\n                  }).join('')}\n                \u003c\/tr\u003e\n              \u003c\/thead\u003e\n              \u003ctbody\u003e\n                ${rows.map(function(row){\n                  return '\u003ctr\u003e\u003ctd\u003e\u003cstrong\u003e' + esc(row.label) + '\u003c\/strong\u003e\u003c\/td\u003e' +\n                    calcs.map(function(x){\n                      return '\u003ctd\u003e' + row.custom(x) + '\u003c\/td\u003e';\n                    }).join('') +\n                    '\u003c\/tr\u003e';\n                }).join('')}\n              \u003c\/tbody\u003e\n            \u003c\/table\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      `;\n    }\n\n    function syncTargetFlowToMainFan(){\n      var mainFan = getFanById(el(\"its_main_fan\").value);\n      if (!mainFan) return;\n      el(\"its_target_flow\").value = maxFlow(mainFan.curve);\n    }\n\n    function openCurveModal(fanId){\n      var fan = getFanById(fanId);\n      if (!fan) return;\n      var settings = getSettings();\n      el(\"its_curve_modal_title\").textContent = fan.name + \" - Large Performance Curve\";\n      el(\"its_curve_modal_chart\").innerHTML = buildCurveSvg(fan.curve, settings.targetFlow, true);\n      el(\"its_curve_modal\").style.display = \"flex\";\n    }\n\n    function closeCurveModal(){\n      el(\"its_curve_modal\").style.display = \"none\";\n      el(\"its_curve_modal_chart\").innerHTML = \"\";\n    }\n\n    window.itsOpenCurveModal = openCurveModal;\n    window.itsCloseCurveModal = closeCurveModal;\n\n    window.itsRenderFanSelector = function(){\n      var mainId = el(\"its_main_fan\").value;\n      var compare1 = el(\"its_compare_1\").value;\n      var compare2 = el(\"its_compare_2\").value;\n\n      var mainFan = getFanById(mainId);\n      if (!mainFan) {\n        el(\"its_main_output\").innerHTML = \"\";\n        el(\"its_curve_output\").innerHTML = \"\";\n        el(\"its_size_output\").innerHTML = \"\";\n        el(\"its_compare_output\").innerHTML = \"\";\n        return;\n      }\n\n      var selectedFans = uniqueFans([\n        mainFan,\n        getFanById(compare1),\n        getFanById(compare2)\n      ]);\n\n      var settings = getSettings();\n      var mainCalc = getFanCalc(mainFan, settings);\n\n      renderMainFan(mainFan, mainCalc, settings);\n      renderCurvePanel(mainFan, settings);\n      renderSizeImage();\n      renderCompare(selectedFans, settings);\n    };\n\n    window.itsResetFanSelector = function(){\n      el(\"its_main_fan\").value = \"fan2\";\n      el(\"its_compare_1\").value = \"\";\n      el(\"its_compare_2\").value = \"\";\n      el(\"its_phase_type\").value = \"3ph\";\n      el(\"its_load_factor\").value = 0.75;\n      el(\"its_hours_day\").value = 8;\n      el(\"its_efficiency\").value = 0.88;\n      el(\"its_pf\").value = 0.97;\n      el(\"its_tariff\").value = 0.24;\n      syncTargetFlowToMainFan();\n      window.itsRenderFanSelector();\n    };\n\n    populateSelect(\"its_main_fan\", false);\n    populateSelect(\"its_compare_1\", true);\n    populateSelect(\"its_compare_2\", true);\n\n    el(\"its_main_fan\").value = \"fan2\";\n    el(\"its_compare_1\").value = \"\";\n    el(\"its_compare_2\").value = \"\";\n\n    el(\"its_main_fan\").addEventListener(\"change\", function(){\n      syncTargetFlowToMainFan();\n      window.itsRenderFanSelector();\n    });\n    el(\"its_compare_1\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_compare_2\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_target_flow\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_phase_type\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_load_factor\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_hours_day\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_efficiency\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_pf\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n    el(\"its_tariff\").addEventListener(\"change\", function(){ window.itsRenderFanSelector(); });\n\n    el(\"its_curve_modal_close\").addEventListener(\"click\", closeCurveModal);\n    el(\"its_curve_modal\").addEventListener(\"click\", function(e){\n      if (e.target === el(\"its_curve_modal\")) closeCurveModal();\n    });\n\n    syncTargetFlowToMainFan();\n    window.itsRenderFanSelector();\n  }\n\n  setTimeout(initFanSelectorPage, 250);\n})();\n\u003c\/script\u003e","brand":"Industrial Tech Store UK","offers":[{"title":"0.37KW 150mm Inlet\/Outlet- 1250m3\/h, 650Pa Radial Fan \/ Single Phase 230V","offer_id":55518881317240,"sku":"ITS057-150X150-RAD-200-0.37KW 1P 230V","price":360.0,"currency_code":"GBP","in_stock":true},{"title":"0.37KW 150mm Inlet\/Outlet- 1250m3\/h, 650Pa Radial Fan \/ Three Phase 400V","offer_id":55521304379768,"sku":"ITS057-150X150-RAD-200-0.37KW 3P 400V","price":360.0,"currency_code":"GBP","in_stock":true},{"title":"0.55KW 150mm Inlet\/Outlet- 1450m3\/h, 920Pa Radial Fan \/ Single Phase 230V","offer_id":55518881350008,"sku":"ITS057-150X150-RAD-225-0.55KW 1P 230V","price":370.0,"currency_code":"GBP","in_stock":true},{"title":"0.55KW 150mm Inlet\/Outlet- 1450m3\/h, 920Pa Radial Fan \/ Three Phase 400V","offer_id":55521304412536,"sku":"ITS057-150X150-RAD-225-0.55KW 3P 400V","price":370.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 150MM Inlet\/Outlet-1680m3\/h, 1200Pa Radial Fan \/ Single Phase 230V","offer_id":55518886789496,"sku":"ITS057-150X150-RAD-250-0.75KW 1P 230V","price":400.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 150MM Inlet\/Outlet-1680m3\/h, 1200Pa Radial Fan \/ Three Phase 400V","offer_id":55521304445304,"sku":"ITS057-150X150-RAD-250-0.75KW 3P 400V","price":400.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 200MM Inlet\/Outlet-2250m3\/h, 760Pa Radial Fan \/ Single Phase 230V","offer_id":55518885282168,"sku":"ITS067-200X200-RAD-225-0.75KW 1P 230V","price":420.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 200MM Inlet\/Outlet-2250m3\/h, 760Pa Radial Fan \/ Three Phase 400V","offer_id":55521304478072,"sku":"ITS067-200X200-RAD-225-0.75KW 3P 400V","price":420.0,"currency_code":"GBP","in_stock":true},{"title":"1.5KW 200MM Inlet\/Outlet-2650m3\/h, 1000Pa Radial Fan \/ Single Phase 230V","offer_id":55518885314936,"sku":"ITS067-200X200-RAD-250-1.5KW 1P 230V","price":500.0,"currency_code":"GBP","in_stock":true},{"title":"1.5KW 200MM Inlet\/Outlet-2650m3\/h, 1000Pa Radial Fan \/ Three Phase 400V","offer_id":55521304510840,"sku":"ITS067-200X200-RAD-250-1.5KW 3P 400V","price":500.0,"currency_code":"GBP","in_stock":true},{"title":"0.25KW 150MM Inlet\/Outlet-1000m3\/h, 660Pa Back Curved Fan \/ Single Phase 230V","offer_id":55519259918712,"sku":"ITS057-150X150-BACK-200-0.25KW 1P 230V","price":340.0,"currency_code":"GBP","in_stock":true},{"title":"0.25KW 150MM Inlet\/Outlet-1000m3\/h, 660Pa Back Curved Fan \/ Three Phase 400V","offer_id":55521304543608,"sku":"ITS057-150X150-BACK-200-0.25KW 3P 400V","price":340.0,"currency_code":"GBP","in_stock":true},{"title":"0.37KW 150MM Inlet\/Outlet-1400m3\/h, 1000Pa Back Curved Fan \/ Single Phase 230V","offer_id":55519259951480,"sku":"ITS057-150X150-BACK-250-0.37KW 1P 230V","price":360.0,"currency_code":"GBP","in_stock":true},{"title":"0.37KW 150MM Inlet\/Outlet-1400m3\/h, 1000Pa Back Curved Fan \/ Three Phase 400V","offer_id":55521304576376,"sku":"ITS057-150X150-BACK-250-0.37KW 3P 400V","price":360.0,"currency_code":"GBP","in_stock":true},{"title":"0.55KW 200MM Inlet\/Outlet-2050m3\/h, 660Pa Back Curved Fan \/ Single Phase 230V","offer_id":55519259984248,"sku":"ITS067-200X200-BACK-225-0.55KW 1P 230V","price":390.0,"currency_code":"GBP","in_stock":true},{"title":"0.55KW 200MM Inlet\/Outlet-2050m3\/h, 660Pa Back Curved Fan \/ Three Phase 400V","offer_id":55521304609144,"sku":"ITS067-200X200-BACK-225-0.55KW 3P 400V","price":390.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 200MM Inlet\/Outlet-2550m3\/h, 880Pa Back Curved Fan \/ Single Phase 230V","offer_id":55519260017016,"sku":"ITS067-200X200-BACK-250-0.75KW 1P 230V","price":420.0,"currency_code":"GBP","in_stock":true},{"title":"0.75KW 200MM Inlet\/Outlet-2550m3\/h, 880Pa Back Curved Fan \/ Three Phase 400V","offer_id":55521304641912,"sku":"ITS067-200X200-BACK-250-0.75KW 3P 4000V","price":420.0,"currency_code":"GBP","in_stock":true},{"title":"2.2KW 300mm Inlet\/ 250mm Outlet-5120m3\/h, 1120Pa Back Curved Fan \/ Single Phase 230V","offer_id":55521209483640,"sku":"ITS020-300X250-300-BACK-2.2KW 1P 230V","price":720.0,"currency_code":"GBP","in_stock":true},{"title":"2.2KW 300mm Inlet\/ 250mm Outlet-5120m3\/h, 1120Pa Back Curved Fan \/ Three Phase 400V","offer_id":55521304674680,"sku":"ITS020-300X250-300-BACK-2.2KW 3P 400V","price":720.0,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0700\/4412\/3456\/files\/NukesonFAB-CentrifugalFans-19.jpg?v=1777540554","url":"https:\/\/www.industrialtechstore.co.uk\/products\/extractor-fans","provider":"Industrial Tech Store UK","version":"1.0","type":"link"}