{"id":15729,"date":"2026-08-25T07:59:41","date_gmt":"2026-08-25T11:59:41","guid":{"rendered":"https:\/\/gradiant.com\/?page_id=15729"},"modified":"2026-09-04T04:04:30","modified_gmt":"2026-09-04T08:04:30","slug":"water-layer-of-ai","status":"publish","type":"page","link":"https:\/\/gradiant.com\/es\/water-layer-of-ai\/","title":{"rendered":"The Water Layer of the AI Economy"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15729\" class=\"elementor elementor-15729\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1d8c0be ai-economy-hero e-flex e-con-boxed e-con e-parent\" data-id=\"1d8c0be\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<header class=\"elementor-element elementor-element-ed5b18c e-con e-atomic-element e-div-block-base e-ed5b18c-1ae931b \" data-id=\"ed5b18c\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"ed5b18c\" data-e-type=\"e-div-block\" data-id=\"ed5b18c\">\n    \t\t\t<a href=\"https:\/\/gradiant.com\/\" target=\"_self\" class=\"e-image-link-base\" data-interaction-id=\"78756dc\"\n\t><img decoding=\"async\" class=\"e-image-base e-78756dc-08739ec\" data-e-type=\"widget\" data-id=\"78756dc\" id=\"15736\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/Gradiant-Logo-TM-horizontal-reverse-RGB-2.svg\" width=\"239\" height=\"51\" srcset=\"\" alt=\"\"\/>\t<\/a>\t\t\n<\/header>\n<div class=\"elementor-element elementor-element-0112bd2 e-con e-atomic-element e-div-block-base e-0112bd2-44e2c4b \" data-id=\"0112bd2\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"0112bd2\" data-e-type=\"e-div-block\" data-id=\"0112bd2\">\n    \t\t\t<h1 data-interaction-id=\"57f0298\" class=\"e-57f0298-2dbc597 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"57f0298\">THE WATER LAYER OF THE AI ECONOMY<\/h1>\n\t\t\t\t<div class=\"elementor-element elementor-element-f750c20 elementor-widget__width-initial fadeInDown fadeInLines elementor-widget elementor-widget-heading\" data-id=\"f750c20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The <br class=\"mbr\">AI economy runs on \n<span>Gradiant Water.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-c0f2559-6d6b8fe fadeIn e-paragraph-base\" data-interaction-id=\"c0f2559\" data-e-type=\"widget\" data-id=\"c0f2559\">Every layer of the AI economy runs on water. The energy that powers it. The chips it computes on. The data centers it lives in. The factories it transforms. <br><br>Gradiant built and operates the water layer for all of them. One accountable partner, already embedded with the champions of the AI economy.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-b7f603a e-con e-atomic-element e-div-block-base e-b7f603a-06e6620 ai-economy-hero-image-wrapper \" data-id=\"b7f603a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"b7f603a\" id=\"hero-dollhouse-carousel\" data-e-type=\"e-div-block\" data-id=\"b7f603a\">\n    \t\t\t<img fetchpriority=\"high\" decoding=\"async\" class=\"e-image-base e-01798e5-60de3d4 fadeIn\" data-interaction-id=\"01798e5\" id=\"hero-dollhouse-carousel-1\" data-e-type=\"widget\" data-id=\"01798e5\" fetchpriority=\"high\" loading=\"eager\" id=\"16227\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1.webp\" width=\"1800\" height=\"1820\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1.webp 1800w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-297x300.webp 297w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-1013x1024.webp 1013w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-768x777.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-1519x1536.webp 1519w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-12x12.webp 12w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-64x64.webp 64w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-96x96.webp 96w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-hero-1-150x152.webp 150w\" alt=\"\"\/>\t\t\n<\/div>\n\t\t\t<p class=\"e-bccd5b0-7df500a e-paragraph-base\" data-interaction-id=\"bccd5b0\" data-e-type=\"widget\" data-id=\"bccd5b0\"><a href=\"http:\/\/hero-body-mobile\" target=\"_self\" class=\"e-paragraph-link-base\">\n\t\tEvery layer of the AI economy runs on water. The energy that powers it. The chips it computes on. The data centers it lives in. The factories it transforms. <br><br>Gradiant built and operates the water layer for all of them. One accountable partner, already embedded with the champions of the AI economy.\n\t<\/a><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b4cb658 economy-layers e-flex e-con-boxed e-con e-parent\" data-id=\"b4cb658\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"78eebec\" class=\"e-78eebec-21ca756 fadeInDown fadeInLines e-heading-base\" data-e-type=\"widget\" data-id=\"78eebec\">Five layers of the AI economy. <br>One water layer runs through them.<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0de459 fadeIn elementor-widget elementor-widget-heading\" data-id=\"e0de459\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">The AI economy has limits, and it isn\u2019t just energy or chips. <br>\n<br class=\"mbr\">\nIt\u2019s whether there\u2019s enough water to run everything being built. <br>\n<br class=\"mbr\">\nGradiant makes sure there is.<\/h3>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5dc3082 e-con e-atomic-element e-grid-base e-5dc3082-6b138be motion-stagger \" data-id=\"5dc3082\" data-element_type=\"e-grid\" data-e-type=\"e-grid\" data-interaction-id=\"5dc3082\" data-e-type=\"e-grid\" data-id=\"5dc3082\">\n    <a class=\"elementor-element elementor-element-6ed3322 e-con e-atomic-element e-div-block-base e-6ed3322-9d2dd07 layer-anchor fadeIn \" data-id=\"6ed3322\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"6ed3322\" href=\"#chips\" target=\"_self\" data-e-type=\"e-div-block\" data-id=\"6ed3322\">\n    \t\t\t<h3 data-interaction-id=\"3aba697\" class=\"e-3aba697-4cbe40f e-heading-base\" data-e-type=\"widget\" data-id=\"3aba697\">Chips<\/h3>\n\t\t\n<\/a>\n<a class=\"elementor-element elementor-element-37ee75d e-con e-atomic-element e-div-block-base e-6ed3322-9d2dd07 layer-anchor fadeIn \" data-id=\"37ee75d\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"37ee75d\" href=\"#data-centers\" target=\"_self\" data-e-type=\"e-div-block\" data-id=\"37ee75d\">\n    \t\t\t<h3 data-interaction-id=\"b9492a0\" class=\"e-3aba697-4cbe40f e-heading-base\" data-e-type=\"widget\" data-id=\"b9492a0\">DATA <br>CENTERS<\/h3>\n\t\t\n<\/a>\n<a class=\"elementor-element elementor-element-ce631e1 e-con e-atomic-element e-div-block-base e-6ed3322-9d2dd07 layer-anchor fadeIn \" data-id=\"ce631e1\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"ce631e1\" href=\"#energy\" target=\"_self\" data-e-type=\"e-div-block\" data-id=\"ce631e1\">\n    \t\t\t<h3 data-interaction-id=\"acf8ff1\" class=\"e-3aba697-4cbe40f e-heading-base\" data-e-type=\"widget\" data-id=\"acf8ff1\">energy<\/h3>\n\t\t\n<\/a>\n<a class=\"elementor-element elementor-element-ce9ae8e e-con e-atomic-element e-div-block-base e-6ed3322-9d2dd07 layer-anchor fadeIn \" data-id=\"ce9ae8e\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"ce9ae8e\" href=\"#applied-industries\" target=\"_self\" data-e-type=\"e-div-block\" data-id=\"ce9ae8e\">\n    \t\t\t<h3 data-interaction-id=\"722f98f\" class=\"e-3aba697-4cbe40f e-heading-base\" data-e-type=\"widget\" data-id=\"722f98f\">applied <br>industries<\/h3>\n\t\t\n<\/a>\n<a class=\"elementor-element elementor-element-4710b8a e-con e-atomic-element e-div-block-base e-6ed3322-9d2dd07 layer-anchor fadeIn \" data-id=\"4710b8a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4710b8a\" href=\"#models\" target=\"_self\" data-e-type=\"e-div-block\" data-id=\"4710b8a\">\n    \t\t\t<h3 data-interaction-id=\"0436c41\" class=\"e-3aba697-4cbe40f e-heading-base\" data-e-type=\"widget\" data-id=\"0436c41\">MODELS<\/h3>\n\t\t\n<\/a>\n\n<\/div>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9cc26e1 e-con e-atomic-element e-flexbox-base e-b8c61a3 segway-animation \" data-id=\"9cc26e1\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"9cc26e1\" data-e-type=\"e-flexbox\" data-id=\"9cc26e1\">\n    \t\t\t<h2 data-interaction-id=\"189a444\" class=\"e-189a444-84e22aa e-heading-base\" data-e-type=\"widget\" data-id=\"189a444\">Gradiant Water<\/h2>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-59b5d64 e-flex e-con-boxed e-con e-parent\" data-id=\"59b5d64\" data-element_type=\"container\" data-e-type=\"container\" id=\"chips\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<section class=\"elementor-element elementor-element-2178ed4 e-con e-atomic-element e-flexbox-base e-2178ed4-81c32cf dollhouse-section img-left \" data-id=\"2178ed4\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"2178ed4\" data-e-type=\"e-flexbox\" data-id=\"2178ed4\">\n    <div class=\"elementor-element elementor-element-1a18e0c e-con e-atomic-element e-div-block-base e-1a18e0c-6385ba5 \" data-id=\"1a18e0c\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"1a18e0c\" data-e-type=\"e-div-block\" data-id=\"1a18e0c\">\n    \t\t\t<img decoding=\"async\" class=\"e-image-base e-5bddf27-b4a9fef\" data-interaction-id=\"5bddf27\" data-e-type=\"widget\" data-id=\"5bddf27\" id=\"16225\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1.webp\" width=\"1680\" height=\"1487\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1.webp 1680w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-300x266.webp 300w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-1024x906.webp 1024w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-768x680.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-1536x1360.webp 1536w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-14x12.webp 14w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-semiconductor-fabrication-section-1-150x133.webp 150w\" alt=\"\"\/>\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-62d5b8a e-con e-atomic-element e-div-block-base e-62d5b8a-f2dbc61 \" data-id=\"62d5b8a\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"62d5b8a\" data-e-type=\"e-div-block\" data-id=\"62d5b8a\">\n    \t\t\t<h2 data-interaction-id=\"cc756c1\" class=\"e-cc756c1-d45c094 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"cc756c1\">Semiconductors<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-634617a fadeInLines fadeInDown elementor-widget elementor-widget-heading\" data-id=\"634617a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"it-heading-gradient\">It<\/span> purifies<br> \nthe chips.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-68a0a61-ec88b78 e-paragraph-base\" data-interaction-id=\"68a0a61\" data-e-type=\"widget\" data-id=\"68a0a61\">The most complete water solution in semiconductor manufacturing, ultrapure water to parts-per-quadrillion, wastewater reuse and zero liquid discharge, engineered and delivered as one accountable system across the fab.<\/p>\n\t\t\t\t\t<p class=\"e-94a55ea-bfbca0c e-paragraph-base\" data-interaction-id=\"94a55ea\" data-e-type=\"widget\" data-id=\"94a55ea\">More chips, from less water, on more sites, faster.<\/p>\n\t\t\t\t\t<a href=\"https:\/\/gradiant.com\/ai-applications\/chips\/\" target=\"_blank\" class=\"e-511c11e-57d032f e-button-base\" data-interaction-id=\"511c11e\" data-e-type=\"widget\" data-id=\"511c11e\">\n\t\t explore CHIPS solutions\n\t<\/a>\t\t<div class=\"elementor-element elementor-element-1247c11 e-con e-atomic-element e-div-block-base e-1247c11-c3cd264 motion-stagger motion-late \" data-id=\"1247c11\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"1247c11\" data-e-type=\"e-div-block\" data-id=\"1247c11\">\n    \t\t\t<h4 data-interaction-id=\"b4b83fd\" class=\"e-b4b83fd-7ed482d e-heading-base\" data-e-type=\"widget\" data-id=\"b4b83fd\">Partnering with<\/h4>\n\t\t\t\t\t<img decoding=\"async\" class=\"e-image-base e-8df7f2d-d27791f fadeIn\" data-interaction-id=\"8df7f2d\" data-e-type=\"widget\" data-id=\"8df7f2d\" id=\"15752\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/micron.svg\" width=\"78\" height=\"17\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-f2820eb-7157504 fadeIn\" data-interaction-id=\"f2820eb\" data-e-type=\"widget\" data-id=\"f2820eb\" id=\"15751\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/tsmc.svg\" width=\"49\" height=\"39\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-b8bfc07-67a5202 fadeIn\" data-interaction-id=\"b8bfc07\" data-e-type=\"widget\" data-id=\"b8bfc07\" id=\"15750\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/globalfoundries.svg\" width=\"103\" height=\"22\" srcset=\"\" alt=\"\"\/>\t\t\n<\/div>\n\n<\/div>\n\n<\/section>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e556189 e-flex e-con-boxed e-con e-parent\" data-id=\"e556189\" data-element_type=\"container\" data-e-type=\"container\" id=\"data-centers\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<section class=\"elementor-element elementor-element-5edd092 e-con e-atomic-element e-flexbox-base e-5edd092-119ee55 dollhouse-section img-right \" data-id=\"5edd092\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"5edd092\" data-e-type=\"e-flexbox\" data-id=\"5edd092\">\n    <div class=\"elementor-element elementor-element-5046e45 e-con e-atomic-element e-div-block-base e-5046e45-1d89466 \" data-id=\"5046e45\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"5046e45\" data-e-type=\"e-div-block\" data-id=\"5046e45\">\n    \t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-5cbaaf9-3fd1c38\" data-interaction-id=\"5cbaaf9\" data-e-type=\"widget\" data-id=\"5cbaaf9\" id=\"16229\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1.webp\" width=\"1680\" height=\"1487\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1.webp 1680w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-300x266.webp 300w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-1024x906.webp 1024w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-768x680.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-1536x1360.webp 1536w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-14x12.webp 14w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-data-centers-section-1-150x133.webp 150w\" alt=\"\"\/>\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-f927a41 e-con e-atomic-element e-div-block-base e-f927a41-dbb2c3a \" data-id=\"f927a41\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"f927a41\" data-e-type=\"e-div-block\" data-id=\"f927a41\">\n    \t\t\t<h2 data-interaction-id=\"ef95b22\" class=\"e-ef95b22-20d9e0c fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"ef95b22\">Data Centers<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-e98550b fadeInLines fadeInDown elementor-widget elementor-widget-heading\" data-id=\"e98550b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"it-heading-gradient\">It<\/span> cools<br> \nthe compute.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-278b9bc-b5ce1d3 e-paragraph-base\" data-interaction-id=\"278b9bc\" data-e-type=\"widget\" data-id=\"278b9bc\">HyperSolved is the most complete cooling water solution for AI Hyperscalers, delivering feed water from almost any source, protecting cooling performance, and minimizing discharge. All deployed fast enough to keep pace with the build-out.<\/p>\n\t\t\t\t\t<p class=\"e-3b1135f-e7ab2b8 e-paragraph-base\" data-interaction-id=\"3b1135f\" data-e-type=\"widget\" data-id=\"3b1135f\">So the compute never stops.<\/p>\n\t\t\t\t\t<a href=\"https:\/\/gradiant.com\/ai-applications\/data-centers\/\" target=\"_blank\" class=\"e-155d210-3c8f120 e-button-base\" data-interaction-id=\"155d210\" data-e-type=\"widget\" data-id=\"155d210\">\n\t\tExplore data center solutions\n\t<\/a>\t\t<div class=\"elementor-element elementor-element-df13545 e-con e-atomic-element e-div-block-base e-df13545-1ed7935 motion-stagger motion-late \" data-id=\"df13545\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"df13545\" data-e-type=\"e-div-block\" data-id=\"df13545\">\n    \t\t\t<h4 data-interaction-id=\"491f362\" class=\"e-491f362-dca2c60 e-heading-base\" data-e-type=\"widget\" data-id=\"491f362\">Partnering with<\/h4>\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-adc369c-dc71863 fadeIn\" data-interaction-id=\"adc369c\" data-e-type=\"widget\" data-id=\"adc369c\" id=\"15758\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/aws-light-logo.svg\" width=\"47\" height=\"28\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-f874b01-bf18f57 fadeIn\" data-interaction-id=\"f874b01\" data-e-type=\"widget\" data-id=\"f874b01\" id=\"15757\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/google.svg\" width=\"80\" height=\"26\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-72dd268-73aec6d fadeIn\" data-interaction-id=\"72dd268\" data-e-type=\"widget\" data-id=\"72dd268\" id=\"15756\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/microsoft.svg\" width=\"94\" height=\"20\" srcset=\"\" alt=\"\"\/>\t\t\n<\/div>\n\n<\/div>\n\n<\/section>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f19711 e-flex e-con-boxed e-con e-parent\" data-id=\"7f19711\" data-element_type=\"container\" data-e-type=\"container\" id=\"energy\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<section class=\"elementor-element elementor-element-f1848fa e-con e-atomic-element e-flexbox-base e-f1848fa-168783d dollhouse-section img-left \" data-id=\"f1848fa\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"f1848fa\" data-e-type=\"e-flexbox\" data-id=\"f1848fa\">\n    <div class=\"elementor-element elementor-element-b0a1b7f e-con e-atomic-element e-div-block-base e-b0a1b7f-2a91170 \" data-id=\"b0a1b7f\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"b0a1b7f\" data-e-type=\"e-div-block\" data-id=\"b0a1b7f\">\n    \t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-ce6cecc-0f68f5b\" data-interaction-id=\"ce6cecc\" data-e-type=\"widget\" data-id=\"ce6cecc\" id=\"16228\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2.webp\" width=\"1680\" height=\"1487\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2.webp 1680w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-300x266.webp 300w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-1024x906.webp 1024w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-768x680.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-1536x1360.webp 1536w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-14x12.webp 14w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-energy-section-2-150x133.webp 150w\" alt=\"\"\/>\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-219b857 e-con e-atomic-element e-div-block-base e-219b857-39c62ee \" data-id=\"219b857\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"219b857\" data-e-type=\"e-div-block\" data-id=\"219b857\">\n    \t\t\t<h2 data-interaction-id=\"2a959f0\" class=\"e-2a959f0-0d1045f fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"2a959f0\">Energy<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-12d63de fadeInLines fadeInDown elementor-widget elementor-widget-heading\" data-id=\"12d63de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"it-heading-gradient\">It<\/span> generates<br> \nthe energy.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-a617893-26d8199 e-paragraph-base\" data-interaction-id=\"a617893\" data-e-type=\"widget\" data-id=\"a617893\">The trusted water partner across the entire energy value chain, from power plants and renewables, to solar-cell manufacturing, green hydrogen, oil and gas. Gradiant treats, recovers and reuses the water that is critical to powering the AI economy.<\/p>\n\t\t\t\t\t<p class=\"e-620cf21-f90a516 e-paragraph-base\" data-interaction-id=\"620cf21\" data-e-type=\"widget\" data-id=\"620cf21\">No water, no power. No power, no AI. <\/p>\n\t\t\t\t\t<a href=\"https:\/\/gradiant.com\/ai-applications\/energy\/\" target=\"_blank\" class=\"e-da5cc78-ab1b39b e-button-base\" data-interaction-id=\"da5cc78\" data-e-type=\"widget\" data-id=\"da5cc78\">\n\t\tExplore energy solutions\n\t<\/a>\t\t<div class=\"elementor-element elementor-element-833a73c e-con e-atomic-element e-div-block-base e-833a73c-55453f5 motion-stagger motion-late \" data-id=\"833a73c\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"833a73c\" data-e-type=\"e-div-block\" data-id=\"833a73c\">\n    \t\t\t<h4 data-interaction-id=\"ebe5f39\" class=\"e-ebe5f39-cd0cb33 e-heading-base\" data-e-type=\"widget\" data-id=\"ebe5f39\">Partnering with<\/h4>\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-480ca96-c40bb49 fadeIn\" data-interaction-id=\"480ca96\" data-e-type=\"widget\" data-id=\"480ca96\" id=\"15761\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/BP-1.svg\" width=\"32\" height=\"42\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-312ea7a-3d7d7f9 fadeIn\" data-interaction-id=\"312ea7a\" data-e-type=\"widget\" data-id=\"312ea7a\" id=\"15760\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/edf-ps-logo-white-1.svg\" width=\"106\" height=\"36\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-9a62a94-b8b9aa8 fadeIn\" data-interaction-id=\"9a62a94\" data-e-type=\"widget\" data-id=\"9a62a94\" id=\"15759\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/shell-logo.svg\" width=\"41\" height=\"39\" srcset=\"\" alt=\"\"\/>\t\t\n<\/div>\n\n<\/div>\n\n<\/section>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-353a3d4 e-flex e-con-boxed e-con e-parent\" data-id=\"353a3d4\" data-element_type=\"container\" data-e-type=\"container\" id=\"applied-industries\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<section class=\"elementor-element elementor-element-c66ca31 e-con e-atomic-element e-flexbox-base e-c66ca31-4cfdcdf dollhouse-section img-right \" data-id=\"c66ca31\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"c66ca31\" data-e-type=\"e-flexbox\" data-id=\"c66ca31\">\n    <div class=\"elementor-element elementor-element-b14c77b e-con e-atomic-element e-div-block-base e-b14c77b-50a7831 \" data-id=\"b14c77b\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"b14c77b\" data-e-type=\"e-div-block\" data-id=\"b14c77b\">\n    \t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-77e31f9-0d8cce9\" data-interaction-id=\"77e31f9\" data-e-type=\"widget\" data-id=\"77e31f9\" id=\"16230\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1.webp\" width=\"1680\" height=\"1486\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1.webp 1680w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-300x265.webp 300w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-1024x906.webp 1024w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-768x679.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-1536x1359.webp 1536w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-14x12.webp 14w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-applied-industries-section-1-150x133.webp 150w\" alt=\"\"\/>\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-ea645b3 e-con e-atomic-element e-div-block-base e-ea645b3-519b96a \" data-id=\"ea645b3\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"ea645b3\" data-e-type=\"e-div-block\" data-id=\"ea645b3\">\n    \t\t\t<h2 data-interaction-id=\"c3edf75\" class=\"e-c3edf75-ab03492 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"c3edf75\">Applied Industries<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-0efeaf1 fadeInLines fadeInDown elementor-widget elementor-widget-heading\" data-id=\"0efeaf1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"it-heading-gradient\">It<\/span> runs advanced manufacturing.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-e78903d-7c52efa e-paragraph-base\" data-interaction-id=\"e78903d\" data-e-type=\"widget\" data-id=\"e78903d\">AI is transforming the industries Gradiant has served for years: pharmaceuticals, food and beverage, mining, chemicals, and advanced manufacturing. Delivering the same reliable consistency the world\u2019s major brands already demand, in the sectors AI is rebuilding.<\/p>\n\t\t\t\t\t<p class=\"e-a623f04-50bb6a3 e-paragraph-base\" data-interaction-id=\"a623f04\" data-e-type=\"widget\" data-id=\"a623f04\">We were in these factories before AI was.<\/p>\n\t\t\t\t\t<a href=\"https:\/\/gradiant.com\/applied-industries\/\" target=\"_blank\" class=\"e-93bb189-6b56330 e-button-base\" data-interaction-id=\"93bb189\" data-e-type=\"widget\" data-id=\"93bb189\">\n\t\tExplore Manufacturing solutions\n\t<\/a>\t\t<div class=\"elementor-element elementor-element-20d7a99 e-con e-atomic-element e-div-block-base e-20d7a99-af33672 motion-stagger motion-late \" data-id=\"20d7a99\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"20d7a99\" data-e-type=\"e-div-block\" data-id=\"20d7a99\">\n    \t\t\t<h4 data-interaction-id=\"c5a0a46\" class=\"e-c5a0a46-bffe26c e-heading-base\" data-e-type=\"widget\" data-id=\"c5a0a46\">Partnering with<\/h4>\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-4b2f8b0-beeb88a fadeIn\" data-interaction-id=\"4b2f8b0\" data-e-type=\"widget\" data-id=\"4b2f8b0\" id=\"15764\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/tesla.svg\" width=\"81\" height=\"10\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-cbde189-18dd1fd fadeIn\" data-interaction-id=\"cbde189\" data-e-type=\"widget\" data-id=\"cbde189\" id=\"15763\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/pfizer.svg\" width=\"86\" height=\"36\" srcset=\"\" alt=\"\"\/>\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-1af72c3-16d078a fadeIn\" data-interaction-id=\"1af72c3\" data-e-type=\"widget\" data-id=\"1af72c3\" id=\"15762\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/gsk.svg\" width=\"68\" height=\"20\" srcset=\"\" alt=\"\"\/>\t\t\n<\/div>\n\n<\/div>\n\n<\/section>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3c7f65e e-flex e-con-boxed e-con e-parent\" data-id=\"3c7f65e\" data-element_type=\"container\" data-e-type=\"container\" id=\"models\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<section class=\"elementor-element elementor-element-2b95a18 e-con e-atomic-element e-flexbox-base e-2b95a18-4703de5 dollhouse-section img-left \" data-id=\"2b95a18\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"2b95a18\" data-e-type=\"e-flexbox\" data-id=\"2b95a18\">\n    <div class=\"elementor-element elementor-element-c8ca7b8 e-con e-atomic-element e-div-block-base e-c8ca7b8-f41e4b6 \" data-id=\"c8ca7b8\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"c8ca7b8\" data-e-type=\"e-div-block\" data-id=\"c8ca7b8\">\n    \t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-5febc8c-4807f77\" data-interaction-id=\"5febc8c\" data-e-type=\"widget\" data-id=\"5febc8c\" id=\"16226\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1.webp\" width=\"1680\" height=\"1665\" srcset=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1.webp 1680w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-300x297.webp 300w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-1024x1015.webp 1024w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-150x149.webp 150w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-768x761.webp 768w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-1536x1522.webp 1536w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-12x12.webp 12w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-64x64.webp 64w, https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/new-models-industry-section-1-96x96.webp 96w\" alt=\"\"\/>\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-529151f e-con e-atomic-element e-div-block-base e-529151f-0be8c8b \" data-id=\"529151f\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"529151f\" data-e-type=\"e-div-block\" data-id=\"529151f\">\n    \t\t\t<h2 data-interaction-id=\"48777a8\" class=\"e-48777a8-73cfbf3 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"48777a8\">Models<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-46115a1 fadeInLines fadeInDown elementor-widget elementor-widget-heading\" data-id=\"46115a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"it-heading-gradient\">It<\/span> enables the intelligence.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-57928e7-f47be31 e-paragraph-base\" data-interaction-id=\"57928e7\" data-e-type=\"widget\" data-id=\"57928e7\">The models delivering the intelligence create the demand for the chips, data centers, energy, and the water required by all of them. Gradiant applies that same intelligence on the water layer with SmartOps. Customized AI for water, optimizing every system we operate, to yield savings in water, energy and OPEX from day one.<\/p>\n\t\t\t\t\t<p class=\"e-91abf3a-05330c1 e-paragraph-base\" data-interaction-id=\"91abf3a\" data-e-type=\"widget\" data-id=\"91abf3a\">AI runs on water. Now water runs on AI.<\/p>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f9c79c elementor-widget elementor-widget-html\" data-id=\"8f9c79c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Gradiant AI Economy LP \u2014 \"Explore SmartOps\" CTA (HTML widget drop-in)\n     ------------------------------------------------------------------\n     Replaces the atomic Elementor button for this one CTA, because the\n     atomic widget stores its label as plain text and strips markup, so the\n     camelCase lift (a larger S and O) cannot be authored in the editor.\n\n     Paste into an Elementor HTML widget placed where the button was, then\n     delete the original button widget.\n\n     Styling deliberately does NOT copy the button's generated class\n     (e-756d56e-0f6fddf): that class's CSS only exists while that widget\n     exists, so a drop-in leaning on it would lose its styling the moment\n     the original is deleted. Instead it carries two stable hooks:\n       .e-button-base  shared behaviour already in the head sheet\n                       (transparent border, transitions, hover state,\n                       the 14px mobile step)\n       .wl-cta         the pill's own look, block 09b of the head sheet,\n                       matched to the atomic button's computed values\n     Nothing here depends on Elementor regenerating anything.\n\n     If the destination ever changes, edit the href below. -->\n\n<a class=\"wl-cta e-button-base\"\n   href=\"https:\/\/gradiant.com\/ai-applications\/models\/\"\n   target=\"_blank\"\n   rel=\"noopener\">Explore S<span class=\"cc-cap\">mart<\/span>O<span class=\"cc-cap\">ps<\/span><\/a>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/section>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-03b7b57 e-flex e-con-boxed e-con e-parent\" data-id=\"03b7b57\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"3471c7a\" class=\"e-3471c7a-e061cf8 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"3471c7a\">PROVEN AT SCALE<\/h2>\n\t\t\t\t\t<h2 data-interaction-id=\"56c1991\" class=\"e-56c1991-f3d3f73 fadeInDown fadeInLines e-heading-base\" data-e-type=\"widget\" data-id=\"56c1991\">One water layer. Already built.<br>One partner. Already trusted.<\/h2>\n\t\t<div class=\"elementor-element elementor-element-b43f2bb e-grid e-con-full motion-stagger e-con e-child\" data-id=\"b43f2bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-0f6636f e-con e-atomic-element e-div-block-base e-0f6636f-55af224 fadeIn \" data-id=\"0f6636f\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"0f6636f\" data-e-type=\"e-div-block\" data-id=\"0f6636f\">\n    \t\t<div class=\"elementor-element elementor-element-41f1f94 fadeIn elementor-widget elementor-widget-counter\" data-id=\"41f1f94\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">years of innovation<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2000\" data-to-value=\"13\" data-from-value=\"13\" data-delimiter=\",\">13<\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-4320d54 e-con e-atomic-element e-div-block-base e-4320d54-ab2cb46 fadeIn \" data-id=\"4320d54\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4320d54\" data-e-type=\"e-div-block\" data-id=\"4320d54\">\n    \t\t<div class=\"elementor-element elementor-element-8ec67dc fadeIn elementor-widget elementor-widget-counter\" data-id=\"8ec67dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Countries with our Solutions<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2200\" data-to-value=\"92\" data-from-value=\"92\" data-delimiter=\",\">92<\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-3819cf6 e-con e-atomic-element e-div-block-base e-3819cf6-ac4de23 fadeIn \" data-id=\"3819cf6\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"3819cf6\" data-e-type=\"e-div-block\" data-id=\"3819cf6\">\n    \t\t<div class=\"elementor-element elementor-element-220ed40 fadeIn elementor-widget elementor-widget-counter\" data-id=\"220ed40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Water &amp; Wastewater Treatment  Plants Built<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2400\" data-to-value=\"3000\" data-from-value=\"3000\" data-delimiter=\",\">3000<\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-104103c e-con e-atomic-element e-div-block-base e-104103c-ae5f9c4 fadeIn \" data-id=\"104103c\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"104103c\" data-e-type=\"e-div-block\" data-id=\"104103c\">\n    \t\t<div class=\"elementor-element elementor-element-e170046 fadeIn elementor-widget elementor-widget-counter\" data-id=\"e170046\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"counter.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-counter\">\n\t\t\t<div class=\"elementor-counter-title\">Patents Approved &amp; Pending<\/div>\t\t\t<div class=\"elementor-counter-number-wrapper\">\n\t\t\t\t<span class=\"elementor-counter-number-prefix\"><\/span>\n\t\t\t\t<span class=\"elementor-counter-number\" data-duration=\"2600\" data-to-value=\"325\" data-from-value=\"325\" data-delimiter=\",\">325<\/span>\n\t\t\t\t<span class=\"elementor-counter-number-suffix\"><\/span>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<section class=\"elementor-element elementor-element-f8418a1 e-flex e-con-boxed e-con e-parent\" data-id=\"f8418a1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d678153 e-con-full e-flex e-con e-child\" data-id=\"d678153\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;position&quot;:&quot;absolute&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d9bc9b elementor-widget elementor-widget-html\" data-id=\"8d9bc9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Gradiant AI Economy LP \u2014 SUCCESS STORIES carousel (HTML-widget drop-in)\n     Paste into an Elementor HTML widget INSIDE section f8418a1, replacing the\n     nested-carousel widget (the section itself \u2014 bay background, padding \u2014\n     stays in Elementor). Styles: block 04 in ai-waterlayer-lp-css-head.html.\n     Dots\/behavior: \"carousel drop-ins\" script in ai-waterlayer-lp-js.html.\n     The dots container stays empty \u2014 the script builds one dot per card, so\n     adding\/removing an <article> below is the only edit a new story needs.\n     Copy is the six approved stories from Figma 65:44 (Google Haskell, AWS\n     Didcot, Micron, ESMC Dresden, T1 Energy, Tesla Berlin).\n\n     Each story ships TWO crops, art-directed rather than resolution-picked:\n     the desktop card frames a square (Figma 505x505), the stacked card a\n     282x150 banner, so one file cannot serve both \u2014 a srcset\/w descriptor\n     would let the browser choose either at any width. Hence <picture> +\n     media, whose 1024px switch MUST track the @media (max-width: 1024px)\n     block that restacks the card in block 04 of the head sheet; change one\n     and change the other.\n\n     Srcs are root-relative on purpose \u2014 the same markup then works on\n     staging and live without a domain rewrite. The -mobile crop also feeds\n     tablet, where block 04 letterboxes it to a 240px cap rather than deal a\n     478px hero above the headline; keep its subject vertically centered.\n\n     alt=\"\" is deliberate: the photography is decorative, and an empty alt\n     is what drops it from the accessibility tree. Every fact it illustrates\n     is already in the story text beside it, so describing it only makes a\n     screen reader read the same story twice. -->\n<div class=\"wl-carousel wl-stories\">\n  <div class=\"wl-track\" tabindex=\"0\" role=\"group\" aria-roledescription=\"carousel\" aria-label=\"Success stories\">\n\n    <!-- 1 \u2014 Google Data Center, Haskell, TX -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - data centers<\/p>\n        <h3 class=\"wl-story-title\">Water secured. Nothing discharged.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>One of the world&rsquo;s largest hyperscalers needed a secure water supply and fully contained wastewater treatment for a West Texas campus, on an aggressive construction timeline.<\/p>\n          <p>Gradiant is delivering the whole package, sole-sourced, design through commissioning.<\/p>\n          <p>Engineered to cut discharge loads. Zero discharge to surface water at full buildout.<\/p>\n          <p><strong>Zero discharge. Built for the buildout.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-1-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-1-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n    <!-- 2 \u2014 AWS, Didcot, UK -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - data centers<\/p>\n        <h3 class=\"wl-story-title\">One site. <br>Two eras of demand.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>An existing European power plant&rsquo;s treatment system couldn&rsquo;t cover its own needs plus the cooling demand of a new data center for one of the world&rsquo;s largest hyperscalers.<\/p>\n          <p>Gradiant is designing, building, and commissioning a new plant with three parallel treatment trains: filtration, ultrafiltration, and reverse osmosis, sized for full redundancy during maintenance. All on a tight construction schedule.<\/p>\n          <p>Full N+1 redundancy, reduced reliance on city water, online in 2027, building on a decade-long relationship.<\/p>\n          <p><strong>Built for power. Ready for AI.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-2-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-2-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n    <!-- 3 \u2014 Micron -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - chips<\/p>\n        <h3 class=\"wl-story-title\">More chips. Less water. Zero discharge.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>One of the world&rsquo;s largest chipmakers built India&rsquo;s first-of-its-kind fab in a drought-prone region, with a zero-discharge mandate.<\/p>\n          <p>Gradiant delivered one accountable platform: UPW, wastewater recycling, zero liquid discharge.<\/p>\n          <p>Delivering 96% water recovery and turning a permitting risk into the blueprint for future fabs.<\/p>\n          <p><strong>The same water. Used, recovered, and returned. Again and again.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-3-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-3-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n    <!-- 4 \u2014 ESMC, Dresden, Germany -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - chips<\/p>\n        <h3 class=\"wl-story-title\">Global expertise. German execution.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>One of the world&rsquo;s largest chipmakers needed a proven UPW design rebuilt to meet the local engineering, regulatory and supplier standards for its first German fab.<\/p>\n          <p>Gradiant is delivering an integrated UPW system, equipment supply, installation, and commissioning. Combining membrane, ion exchange, and degassing technologies.<\/p>\n          <p>Global design, local execution, less delivery risk. A flagship EU Chips Act project on track for 2028.<\/p>\n          <p><strong>Nothing lost in translation.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-4-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-4-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n    <!-- 5 \u2014 T1 Energy, Austin, TX -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - energy<\/p>\n        <h3 class=\"wl-story-title\">Not a vendor. <br>A co-investor.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>A solar cell manufacturer needed ultrapure water and zero liquid discharge for acid, alkali, and silane streams at its Western US site, without owning and operating it.<\/p>\n          <p>Gradiant structured a DBOOM partnership with the owner-operator: design, build, own, operate, maintain, sold as a service, not equipment.<\/p>\n          <p>Gradiant took a 25% stake in the build, cutting the customer&rsquo;s upfront capital and staying invested in performance.<\/p>\n          <p><strong>We didn&rsquo;t just build it. We backed it.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-5-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-5-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n    <!-- 6 \u2014 Tesla Berlin Gigafactory -->\n    <article class=\"wl-story-card\">\n      <div class=\"wl-story-copy\">\n        <p class=\"wl-eyebrow\">success story - advanced manufacturing<\/p>\n        <h3 class=\"wl-story-title\">More capacity. Full reuse. Zero delay.<\/h3>\n        <div class=\"wl-story-body\">\n          <p>One of the world&rsquo;s largest EV manufacturers needed pure water for two production lines at its German site, and a path to closed loop process water, all without slowing output.<\/p>\n          <p>Gradiant designed, built and commissioned two integrated ultrapure water plants, plus high-concentration RO for the site&rsquo;s zero-liquid-discharge system.<\/p>\n          <p>Today: 100% of process effluent reused, freshwater use 50% below benchmark, three systems added, no delays.<\/p>\n          <p><strong>50% less water. Zero missed deadlines.<\/strong><\/p>\n        <\/div>\n      <\/div>\n      <div class=\"wl-story-visual\">\n        <picture>\n          <source media=\"(max-width: 1024px)\" srcset=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-6-mobile.webp\">\n          <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/08\/waterlayer-lp-success-story-6-desktop.webp\" alt=\"\" loading=\"lazy\">\n        <\/picture>\n      <\/div>\n    <\/article>\n\n  <\/div>\n  <div class=\"wl-dots\"><\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-40271da e-con-full e-flex e-con e-child\" data-id=\"40271da\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;position&quot;:&quot;absolute&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/section>\n\t\t<section class=\"elementor-element elementor-element-8b600c8 e-flex e-con-boxed e-con e-parent\" data-id=\"8b600c8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"3a35504\" class=\"e-3a35504-b53ca23 fadeInDown e-heading-base\" data-e-type=\"widget\" data-id=\"3a35504\">LATEST NEWS<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-8bbc1c2 fadeInDown fadeInLines elementor-widget elementor-widget-heading\" data-id=\"8bbc1c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Making headlines <br class=\"mbr\">across the AI economy<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c89ab1d elementor-widget elementor-widget-html\" data-id=\"c89ab1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<div class=\"wl-carousel wl-news wl-news-collapsed\">\n  <div class=\"wl-track\" id=\"wl-news-track\" tabindex=\"0\" role=\"group\" aria-roledescription=\"carousel\" aria-label=\"Latest news\">\n      \n      <a class=\"wl-news-card\" href=\"https:\/\/gradiant.com\/press-release\/gradiant-secures-water-contract-hyperscaler-ai-data-center-west-texas\/\">\n      <span class=\"wl-news-meta\">\n        <span class=\"wl-news-cat\">Press Release\n<\/span>\n        <time class=\"wl-news-date\" datetime=\"2026-05-28\">September 2, 2026<\/time>\n      <\/span>\n      <span class=\"wl-news-title\">Gradiant Secures Major Water Contract for Hyperscale AI Data Center in West\nTexas<\/span>\n      <span class=\"wl-news-excerpt\">New HyperSolved contract for a hyperscale AI data center in West Texas reinforces Gradiant's role as the water layer for AI data centers.<\/span>\n      <span class=\"e-button-base wl-news-cta\">Read more<\/span>\n    <\/a>\n\n\n    <a class=\"wl-news-card\" href=\"https:\/\/gradiant.com\/press-release\/gradiant-expands-us-operations\/\">\n      <span class=\"wl-news-meta\">\n        <span class=\"wl-news-cat\">Press Release<\/span>\n        <time class=\"wl-news-date\" datetime=\"2026-08-18\">August 18, 2026<\/time>\n      <\/span>\n      <span class=\"wl-news-title\">Gradiant Expands US Operations with New Leadership, Offices, and Service Contracts<\/span>\n      <span class=\"wl-news-excerpt\">Gradiant expands across the US with new leadership, four new offices, a Houston innovation center, and new long-term water treatment contracts nationwide.<\/span>\n      <span class=\"e-button-base wl-news-cta\">Read more<\/span>\n    <\/a>\n\n    <a class=\"wl-news-card\" href=\"https:\/\/gradiant.com\/external-media\/inc-data-centers-need-water\/\">\n      <span class=\"wl-news-meta\">\n        <span class=\"wl-news-cat\">External Media<\/span>\n        <time class=\"wl-news-date\" datetime=\"2026-08-03\">August 3, 2026<\/time>\n      <\/span>\n      <span class=\"wl-news-title\">Data Centers Have Problems. These Founders Built the Solutions | Inc. Magazine<\/span>\n      <span class=\"wl-news-excerpt\">Inc. Magazine examines how Gradiant is solving water, AI&rsquo;s toughest constraint, for data centers and semiconductor fabs, featuring Prakash Govindan and Steven Lam.<\/span>\n      <span class=\"e-button-base wl-news-cta\">Read more<\/span>\n    <\/a>\n\n    <a class=\"wl-news-card\" href=\"https:\/\/gradiant.com\/press-release\/gradiant-supports-landmark-semiconductor-manufacturing-expansion-in-dresden\/\">\n      <span class=\"wl-news-meta\">\n        <span class=\"wl-news-cat\">Press Release<\/span>\n        <time class=\"wl-news-date\" datetime=\"2026-07-21\">July 21, 2026<\/time>\n      <\/span>\n      <span class=\"wl-news-title\">Gradiant Supports Landmark Semiconductor Expansion in Dresden, Ahead of Schedule<\/span>\n      <span class=\"wl-news-excerpt\">Gradiant delivered ultrapure water and water recovery systems for a new &euro;5 billion semiconductor facility in Dresden, delivered three months early.<\/span>\n      <span class=\"e-button-base wl-news-cta\">Read more<\/span>\n    <\/a>\n\n    <a class=\"wl-news-card\" href=\"https:\/\/gradiant.com\/external-media\/gradiant-named-one-of-inc-magazines-17-startups-rebuilding-america-in-2026\/\">\n      <span class=\"wl-news-meta\">\n        <span class=\"wl-news-cat\">External Media<\/span>\n        <time class=\"wl-news-date\" datetime=\"2026-05-28\">May 28, 2026<\/time>\n      <\/span>\n      <span class=\"wl-news-title\">17 Startups Rebuilding America in 2026 | Inc. Magazine<\/span>\n      <span class=\"wl-news-excerpt\">Inc. Magazine names Gradiant one of 17 Startups Rebuilding America in 2026, for advancing water infrastructure across essential industries.<\/span>\n      <span class=\"e-button-base wl-news-cta\">Read more<\/span>\n    <\/a>\n    \n  <\/div>\n  <div class=\"wl-dots\"><\/div>\n  <button type=\"button\" class=\"wl-news-more\" aria-expanded=\"false\" aria-controls=\"wl-news-track\">\n    <span class=\"wl-news-more-label\">More News<\/span>\n  <\/button>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/section>\n\t\t<section class=\"elementor-element elementor-element-127da39 e-flex e-con-boxed e-con e-parent\" data-id=\"127da39\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"473de3c\" class=\"e-473de3c-3007517 fadeInDown fadeInLines e-heading-base\" data-e-type=\"widget\" data-id=\"473de3c\">What the champions of the AI economy say.<\/h2>\n\t\t\t\t<div class=\"elementor-element elementor-element-d77f7e9 fadeIn elementor-widget elementor-widget-customers\" data-id=\"d77f7e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"customers.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"customers-container\">\n\t<div class=\"customers\" id=\"customers\">\n\n\t\t\t\t\t<div class=\"customers-item-wrapper\">\n\t\t\t\t<div class=\"customers-item\" style=\"background-image:url(\/wp-content\/themes\/gradiant_corporation\/assets\/img\/customers\/bg2.jpg)\">\n\t\t\t\t\t<div class=\"customers-item-content\">\n\t\t\t\t\t\t<p class=\"customers-item-review\">\u201cGradiant is our contractor of choice \u2014 competitive, proactive, and exactly what you look for in a supplier. Excellent communication, strong relationships, and never overly contractual.\u201d<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-name\">Facilities & Utilities Director <br> Top-5 Global Semiconductor Manufacturer<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-logo\"><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<div class=\"customers-item-wrapper\">\n\t\t\t\t<div class=\"customers-item\" style=\"background-image:url(\/wp-content\/themes\/gradiant_corporation\/assets\/img\/customers\/bg3.jpg)\">\n\t\t\t\t\t<div class=\"customers-item-content\">\n\t\t\t\t\t\t<p class=\"customers-item-review\">\u201cGenuinely thoughtful, creative people \u2014 very informed and practical with engineering. Open, bold, and fast. A highly differentiated offering for what we're building.\u201d<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-name\">Global Head of Sustainability <br>Leading Hyperscale Data Center Operator<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-logo\"><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<div class=\"customers-item-wrapper\">\n\t\t\t\t<div class=\"customers-item\" style=\"background-image:url(\/wp-content\/themes\/gradiant_corporation\/assets\/img\/customers\/bg4.jpg)\">\n\t\t\t\t\t<div class=\"customers-item-content\">\n\t\t\t\t\t\t<p class=\"customers-item-review\">\u201cTechnical capability first, then references and reputation. Price is a benchmark \u2014 and price was never the issue with Gradiant.\u201d<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-name\">VP, Site Selection & Utilities<\/br>Top-3 Cloud Infrastructure Provider<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-logo\"><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<div class=\"customers-item-wrapper\">\n\t\t\t\t<div class=\"customers-item\" style=\"background-image:url(\/wp-content\/themes\/gradiant_corporation\/assets\/img\/customers\/bg1.jpg)\">\n\t\t\t\t\t<div class=\"customers-item-content\">\n\t\t\t\t\t\t<p class=\"customers-item-review\">\u201cThe quality of the team is outstanding \u2014 very innovative, very informed, and practical with engineering. A highly differentiated offering.\u201d<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-name\">Managing Director, New Energy <br> Global Energy Company<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-logo\"><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<div class=\"customers-item-wrapper\">\n\t\t\t\t<div class=\"customers-item\" style=\"background-image:url(\/wp-content\/themes\/gradiant_corporation\/assets\/img\/customers\/bg5.jpg)\">\n\t\t\t\t\t<div class=\"customers-item-content\">\n\t\t\t\t\t\t<p class=\"customers-item-review\">\"SmartOps didn't just predict problems \u2014 it cut our OPEX by 20% and freed up half our operating team from manual monitoring. That's not a nice-to-have, that's the business case.\"<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-name\">VP, Asset Performance <bR> Leading Power Producer<\/p>\n\t\t\t\t\t\t<p class=\"customers-item-logo\"><svg width=\"97\" height=\"97\" viewBox=\"0 0 97 97\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M87.5827 25.1129L84.2948 32.1648H89.2638L92.5963 25.1129H87.5827Z\" fill=\"black\"\/>\n<path d=\"M89.5614 35.7352H84.3989V62.2466H89.5614V35.7352Z\" fill=\"black\"\/>\n<path d=\"M8.46521 66.1147V70.3994H10.9646V69.8638H9.0603V66.1147H8.46521Z\" fill=\"black\"\/>\n<path d=\"M21.9589 66.814L22.7623 68.8224H21.1555L21.9589 66.814ZM21.706 66.1147L19.8612 70.3845H20.5307L20.9621 69.3431H22.9854L23.4169 70.3845H24.0864L22.2565 66.1147H21.706Z\" fill=\"black\"\/>\n<path d=\"M24.6368 66.1147V70.3994H27.1362V69.8638H25.2319V66.1147H24.6368Z\" fill=\"black\"\/>\n<path d=\"M33.7417 66.1147L32.8045 69.5216H32.7896L31.8077 66.1147H31.1382L30.1414 69.5216H30.1266L29.1893 66.1147H28.5496L29.7993 70.3994H30.4241L31.4506 66.9628H31.4655L32.5069 70.3994H33.1318L34.3815 66.1147H33.7417Z\" fill=\"black\"\/>\n<path d=\"M36.5089 66.814L37.3123 68.8224H35.7056L36.5089 66.814ZM36.2411 66.1147L34.3964 70.3845H35.0658L35.4973 69.3431H37.5206L37.952 70.3845H38.6215L36.7916 66.1147H36.2411Z\" fill=\"black\"\/>\n<path d=\"M38.3389 66.1296V66.6503H39.7076V70.3994H40.3027V66.6503H41.6714V66.1296H38.3389Z\" fill=\"black\"\/>\n<path d=\"M42.2367 66.1147V70.3994H45.0634V69.8638H42.8318V68.4356H44.8551V67.9298H42.8318V66.6503H44.9741V66.1147H42.2367Z\" fill=\"black\"\/>\n<path d=\"M46.4618 67.9893H47.1461C47.28 67.9893 47.4139 67.9744 47.533 67.9595C47.652 67.9298 47.7561 67.9 47.8454 67.8405C47.9346 67.781 48.009 67.7215 48.0537 67.6322C48.1132 67.543 48.1281 67.4388 48.1281 67.3049C48.1281 67.171 48.0983 67.0669 48.0537 66.9776C48.009 66.8884 47.9346 66.8289 47.8454 66.7694C47.7561 66.7099 47.652 66.6801 47.5478 66.6652C47.4288 66.6503 47.3098 66.6355 47.1759 66.6355H46.4469V67.9893H46.4618ZM46.4618 70.3994H45.8667V66.1296H47.2354C47.4437 66.1296 47.6371 66.1594 47.8156 66.1891C47.9942 66.2338 48.1578 66.2933 48.3066 66.3826C48.4405 66.4718 48.5595 66.5908 48.6339 66.7545C48.7083 66.9181 48.7529 67.0818 48.7529 67.3049C48.7529 67.6174 48.6488 67.8703 48.4554 68.0637C48.2619 68.2571 48.009 68.3761 47.7115 68.4356L48.9017 70.3994H48.1727L47.0866 68.4951H46.4469L46.4618 70.3994Z\" fill=\"black\"\/>\n<path d=\"M51.6688 66.1296H51.0737V70.3994H51.6688V66.1296Z\" fill=\"black\"\/>\n<path d=\"M55.7304 66.1147V69.5365H55.7155L53.4839 66.1147H52.7103V70.3994H53.3054V66.9032H53.3203L55.5668 70.3994H56.3255V66.1147H55.7304Z\" fill=\"black\"\/>\n<path d=\"M56.8907 66.1296V66.6503H58.2595V70.3994H58.8546V66.6503H60.2233V66.1296H56.8907Z\" fill=\"black\"\/>\n<path d=\"M60.7887 66.1147V70.3994H63.6154V69.8638H61.3838V68.4356H63.3922V67.9298H61.3838V66.6503H63.5261V66.1147H60.7887Z\" fill=\"black\"\/>\n<path d=\"M64.4187 66.1147V70.3994H66.9181V69.8638H65.0138V66.1147H64.4187Z\" fill=\"black\"\/>\n<path d=\"M67.4983 66.1147V70.3994H69.9977V69.8638H68.0934V66.1147H67.4983Z\" fill=\"black\"\/>\n<path d=\"M71.1581 66.1296H70.563V70.3994H71.1581V66.1296Z\" fill=\"black\"\/>\n<path d=\"M75.4279 67.0073C75.294 66.8734 75.1304 66.7544 74.9369 66.68C74.7435 66.5908 74.5204 66.5461 74.2675 66.5461C74.0146 66.5461 73.7914 66.5908 73.598 66.68C73.4046 66.7693 73.2261 66.8883 73.0922 67.052C72.9583 67.2156 72.8392 67.3941 72.7649 67.6024C72.6905 67.8107 72.6458 68.0339 72.6458 68.2719C72.6458 68.5099 72.6756 68.7331 72.7649 68.9414C72.8392 69.1497 72.9434 69.3282 73.0922 69.4918C73.2261 69.6406 73.4046 69.7596 73.6129 69.8638C73.8211 69.953 74.0443 69.9977 74.2972 69.9977C74.4906 69.9977 74.684 69.9828 74.8477 69.9382C75.0113 69.9084 75.1601 69.8489 75.2791 69.7745V68.5843H74.327V68.0785H75.8742V70.1464C75.6511 70.2655 75.413 70.3547 75.1452 70.4291C74.8774 70.4886 74.5948 70.5332 74.2823 70.5332C73.955 70.5332 73.6426 70.4737 73.36 70.3696C73.0773 70.2655 72.8392 70.1018 72.6458 69.9084C72.4524 69.715 72.2888 69.477 72.1846 69.1943C72.0805 68.9265 72.021 68.6141 72.021 68.2868C72.021 67.9595 72.0805 67.647 72.1846 67.3793C72.3037 67.1115 72.4524 66.8734 72.6607 66.68C72.869 66.4866 73.107 66.3378 73.3748 66.2188C73.6575 66.1147 73.955 66.0552 74.2823 66.0552C74.6245 66.0552 74.9221 66.0998 75.1899 66.2039C75.4577 66.3081 75.6808 66.442 75.8593 66.6056L75.4279 67.0073Z\" fill=\"black\"\/>\n<path d=\"M76.8859 66.1147V70.3994H79.7274V69.8638H77.481V68.4356H79.5043V67.9298H77.481V66.6503H79.6233V66.1147H76.8859Z\" fill=\"black\"\/>\n<path d=\"M83.5361 66.1147V69.5365H83.5212L81.2896 66.1147H80.516V70.3994H81.1111V66.9032H81.126L83.3724 70.3994H84.1312V66.1147H83.5361Z\" fill=\"black\"\/>\n<path d=\"M88.8323 69.73C88.6687 69.968 88.4455 70.1465 88.1777 70.2953C87.9099 70.4441 87.5826 70.5036 87.2107 70.5036C86.8834 70.5036 86.5859 70.4441 86.3032 70.3399C86.0205 70.2358 85.7974 70.0721 85.5891 69.8787C85.3957 69.6853 85.232 69.4473 85.1279 69.1646C85.0237 68.8968 84.9642 68.5844 84.9642 68.2571C84.9642 67.9298 85.0237 67.6174 85.1279 67.3496C85.2469 67.0818 85.3957 66.8438 85.604 66.6504C85.8122 66.457 86.0503 66.3082 86.3181 66.1892C86.6007 66.085 86.8983 66.0255 87.2256 66.0255C87.3744 66.0255 87.5231 66.0404 87.657 66.0701C87.7909 66.0999 87.9546 66.1445 88.0885 66.204C88.2224 66.2636 88.3563 66.3379 88.4604 66.4123C88.5645 66.5016 88.6687 66.5909 88.7579 66.695L88.2968 67.0669C88.1926 66.9182 88.0438 66.7991 87.8504 66.7099C87.657 66.6206 87.4487 66.576 87.2405 66.576C86.9876 66.576 86.7644 66.6206 86.571 66.7099C86.3776 66.7991 86.1991 66.9182 86.0652 67.0818C85.9313 67.2455 85.8122 67.424 85.7379 67.6323C85.6635 67.8405 85.6188 68.0637 85.6188 68.3017C85.6188 68.5398 85.6486 68.7629 85.723 68.9712C85.7974 69.1795 85.9015 69.358 86.0503 69.5217C86.1842 69.6705 86.3478 69.7895 86.5561 69.8936C86.7644 69.9978 86.9727 70.0275 87.2256 70.0275C87.4785 70.0275 87.6868 69.9829 87.8802 69.8787C88.0736 69.7746 88.2372 69.6407 88.3711 69.4622L88.8323 69.73Z\" fill=\"black\"\/>\n<path d=\"M89.4424 66.1147V70.3994H92.2691V69.8638H90.0375V68.4356H92.0459V67.9298H90.0375V66.6503H92.1798V66.1147H89.4424Z\" fill=\"black\"\/>\n<path d=\"M83.2683 25.1129H78.6266L66.6652 52.7549L56.3999 25.0831H56.3106H56.2362L45.6882 52.7549L38.8 36.5535C37.0891 32.4623 33.9947 29.1149 30.0522 27.1064C26.0799 25.0831 21.4977 24.5922 17.1982 25.708C7.33453 28.2817 1.36873 38.5025 3.91275 48.5C5.96582 56.6081 13.0028 62.1425 20.8431 62.5591H41.0167L32.9086 44.6914H28.2818L34.3666 58.2H20.858C14.8773 57.8727 9.65539 53.6178 8.0784 47.3991C6.15923 39.8265 10.5927 32.0903 17.9867 29.9926C24.6963 28.0883 31.7482 31.5101 34.7236 37.8925L45.718 62.5442L56.147 35.5716H56.2213L66.695 62.5442L83.2683 25.1129Z\" fill=\"black\"\/>\n<path d=\"M6.99234 67.0073C6.85844 66.8734 6.69479 66.7544 6.50138 66.68C6.30798 66.5908 6.08482 66.5461 5.83191 66.5461C5.57899 66.5461 5.35583 66.5908 5.16243 66.68C4.96902 66.7693 4.7905 66.8883 4.6566 67.052C4.5227 67.2156 4.40369 67.3941 4.3293 67.6024C4.25491 67.8107 4.21028 68.0339 4.21028 68.2719C4.21028 68.5099 4.24004 68.7331 4.3293 68.9414C4.40369 69.1497 4.50783 69.3282 4.6566 69.4918C4.7905 69.6406 4.96902 69.7596 5.1773 69.8638C5.38559 69.953 5.60875 69.9977 5.86166 69.9977C6.05507 69.9977 6.24847 69.9828 6.41212 69.9382C6.57577 69.9084 6.72454 69.8489 6.84356 69.7745V68.5843H5.90629V68.0785H7.43865V70.1464C7.2155 70.2655 6.97746 70.3547 6.70967 70.4291C6.44188 70.4886 6.15921 70.5332 5.84678 70.5332C5.51948 70.5332 5.20706 70.4737 4.92439 70.3696C4.64172 70.2655 4.40369 70.1018 4.1954 69.9084C4.002 69.715 3.83835 69.477 3.73421 69.1943C3.63007 68.9265 3.57056 68.6141 3.57056 68.2868C3.57056 67.9595 3.63007 67.647 3.73421 67.3793C3.85323 67.1115 4.002 66.8734 4.21028 66.68C4.41856 66.4866 4.6566 66.3378 4.92439 66.2188C5.20706 66.1147 5.50461 66.0552 5.83191 66.0552C6.17408 66.0552 6.47163 66.0998 6.73942 66.2039C7.00721 66.3081 7.23037 66.442 7.4089 66.6056L6.99234 67.0073Z\" fill=\"black\"\/>\n<path d=\"M17.0791 69.8936H17.823C17.942 69.8936 18.0759 69.8787 18.1949 69.8638C18.3288 69.8341 18.4329 69.8043 18.5371 69.7448C18.6412 69.6853 18.7156 69.6109 18.79 69.5217C18.8495 69.4175 18.8792 69.3134 18.8792 69.1646C18.8792 68.9117 18.79 68.7332 18.6263 68.6141C18.4627 68.4951 18.1949 68.4505 17.8825 68.4505H17.0791V69.8936V69.8936ZM17.0791 67.9298H17.8527C17.9568 67.9298 18.0759 67.9149 18.18 67.8852C18.2841 67.8554 18.3734 67.8257 18.4478 67.7661C18.5222 67.7066 18.5817 67.6471 18.6263 67.5579C18.671 67.4686 18.6858 67.3793 18.6858 67.2603C18.6858 67.0223 18.5966 66.8586 18.4329 66.7694C18.2693 66.6652 18.0312 66.6206 17.7486 66.6206H17.0642V67.9298H17.0791ZM16.484 66.1296H17.9568C18.1205 66.1296 18.2841 66.1445 18.4329 66.1891C18.5966 66.2189 18.7305 66.2933 18.8644 66.3677C18.9983 66.4569 19.1024 66.5611 19.1768 66.695C19.2512 66.8289 19.2958 66.9925 19.2958 67.2008C19.2958 67.4388 19.2363 67.6322 19.0875 67.7959C18.9536 67.9595 18.7751 68.0637 18.5519 68.1232V68.1381C18.6858 68.153 18.8197 68.1827 18.9239 68.2422C19.0429 68.3017 19.147 68.3761 19.2214 68.4505C19.3107 68.5398 19.3702 68.6439 19.4148 68.7629C19.4595 68.8819 19.4743 69.0158 19.4743 69.1646C19.4743 69.3729 19.4297 69.5514 19.3404 69.7002C19.2512 69.849 19.147 69.9829 18.9983 70.0721C18.8495 70.1763 18.6858 70.2507 18.4924 70.2953C18.299 70.3399 18.0907 70.3697 17.8676 70.3697H16.4691L16.484 66.1296Z\" fill=\"black\"\/>\n<path d=\"M15.0261 68.2571C15.0261 68.0191 14.9963 67.8108 14.907 67.6025C14.8327 67.3942 14.7285 67.2157 14.5797 67.0521C14.4458 66.8884 14.2673 66.7694 14.0739 66.6801C13.8805 66.5909 13.6573 66.5462 13.4044 66.5462C13.1664 66.5462 12.9432 66.5909 12.735 66.6801C12.5415 66.7694 12.363 66.8884 12.2291 67.0521C12.0952 67.2157 11.9911 67.3942 11.9018 67.6025C11.8274 67.8108 11.7828 68.0339 11.7828 68.2571C11.7828 68.4951 11.8126 68.7183 11.9018 68.9266C11.9762 69.1349 12.0952 69.3134 12.2291 69.477C12.363 69.6258 12.5415 69.7448 12.735 69.849C12.9284 69.9382 13.1515 69.9829 13.4044 69.9829C13.6425 69.9829 13.8656 69.9382 14.0739 69.849C14.2673 69.7597 14.4458 69.6407 14.5797 69.477C14.7136 69.3134 14.8327 69.1497 14.907 68.9266C14.9814 68.7183 15.0261 68.4951 15.0261 68.2571ZM15.6658 68.2571C15.6658 68.5844 15.6063 68.8968 15.5021 69.1646C15.3831 69.4324 15.2343 69.6705 15.0261 69.8787C14.8327 70.0721 14.5946 70.2358 14.3119 70.3399C14.0293 70.4441 13.7317 70.5036 13.4044 70.5036C13.0771 70.5036 12.7796 70.4441 12.4969 70.3399C12.2291 70.2358 11.9911 70.0721 11.7828 69.8787C11.5894 69.6853 11.4258 69.4473 11.3216 69.1646C11.2026 68.8968 11.158 68.5844 11.158 68.2571C11.158 67.9298 11.2175 67.6174 11.3216 67.3496C11.4258 67.0818 11.5894 66.8438 11.7828 66.6504C11.9762 66.457 12.2142 66.3082 12.4969 66.1892C12.7796 66.0701 13.0771 66.0255 13.4044 66.0255C13.7317 66.0255 14.0293 66.085 14.3119 66.1892C14.5797 66.2933 14.8327 66.457 15.0261 66.6504C15.2195 66.8438 15.3831 67.0818 15.5021 67.3496C15.6063 67.6174 15.6658 67.9149 15.6658 68.2571Z\" fill=\"black\"\/>\n<\/svg>\n<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\n\n\t<\/div>\n\n\t<ul class=\"customers-nav\">\n\t\t\t\t\t<li>\n\t\t\t\t<a href=\"#\" data-slide=\"0\">\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t<a href=\"#\" data-slide=\"1\">\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t<a href=\"#\" data-slide=\"2\">\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t<a href=\"#\" data-slide=\"3\">\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t<a href=\"#\" data-slide=\"4\">\n\t\t\t\t\t<svg width=\"97\" height=\"97\" viewBox=\"0 0 97 97\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M87.5827 25.1129L84.2948 32.1648H89.2638L92.5963 25.1129H87.5827Z\" fill=\"black\"\/>\n<path d=\"M89.5614 35.7352H84.3989V62.2466H89.5614V35.7352Z\" fill=\"black\"\/>\n<path d=\"M8.46521 66.1147V70.3994H10.9646V69.8638H9.0603V66.1147H8.46521Z\" fill=\"black\"\/>\n<path d=\"M21.9589 66.814L22.7623 68.8224H21.1555L21.9589 66.814ZM21.706 66.1147L19.8612 70.3845H20.5307L20.9621 69.3431H22.9854L23.4169 70.3845H24.0864L22.2565 66.1147H21.706Z\" fill=\"black\"\/>\n<path d=\"M24.6368 66.1147V70.3994H27.1362V69.8638H25.2319V66.1147H24.6368Z\" fill=\"black\"\/>\n<path d=\"M33.7417 66.1147L32.8045 69.5216H32.7896L31.8077 66.1147H31.1382L30.1414 69.5216H30.1266L29.1893 66.1147H28.5496L29.7993 70.3994H30.4241L31.4506 66.9628H31.4655L32.5069 70.3994H33.1318L34.3815 66.1147H33.7417Z\" fill=\"black\"\/>\n<path d=\"M36.5089 66.814L37.3123 68.8224H35.7056L36.5089 66.814ZM36.2411 66.1147L34.3964 70.3845H35.0658L35.4973 69.3431H37.5206L37.952 70.3845H38.6215L36.7916 66.1147H36.2411Z\" fill=\"black\"\/>\n<path d=\"M38.3389 66.1296V66.6503H39.7076V70.3994H40.3027V66.6503H41.6714V66.1296H38.3389Z\" fill=\"black\"\/>\n<path d=\"M42.2367 66.1147V70.3994H45.0634V69.8638H42.8318V68.4356H44.8551V67.9298H42.8318V66.6503H44.9741V66.1147H42.2367Z\" fill=\"black\"\/>\n<path d=\"M46.4618 67.9893H47.1461C47.28 67.9893 47.4139 67.9744 47.533 67.9595C47.652 67.9298 47.7561 67.9 47.8454 67.8405C47.9346 67.781 48.009 67.7215 48.0537 67.6322C48.1132 67.543 48.1281 67.4388 48.1281 67.3049C48.1281 67.171 48.0983 67.0669 48.0537 66.9776C48.009 66.8884 47.9346 66.8289 47.8454 66.7694C47.7561 66.7099 47.652 66.6801 47.5478 66.6652C47.4288 66.6503 47.3098 66.6355 47.1759 66.6355H46.4469V67.9893H46.4618ZM46.4618 70.3994H45.8667V66.1296H47.2354C47.4437 66.1296 47.6371 66.1594 47.8156 66.1891C47.9942 66.2338 48.1578 66.2933 48.3066 66.3826C48.4405 66.4718 48.5595 66.5908 48.6339 66.7545C48.7083 66.9181 48.7529 67.0818 48.7529 67.3049C48.7529 67.6174 48.6488 67.8703 48.4554 68.0637C48.2619 68.2571 48.009 68.3761 47.7115 68.4356L48.9017 70.3994H48.1727L47.0866 68.4951H46.4469L46.4618 70.3994Z\" fill=\"black\"\/>\n<path d=\"M51.6688 66.1296H51.0737V70.3994H51.6688V66.1296Z\" fill=\"black\"\/>\n<path d=\"M55.7304 66.1147V69.5365H55.7155L53.4839 66.1147H52.7103V70.3994H53.3054V66.9032H53.3203L55.5668 70.3994H56.3255V66.1147H55.7304Z\" fill=\"black\"\/>\n<path d=\"M56.8907 66.1296V66.6503H58.2595V70.3994H58.8546V66.6503H60.2233V66.1296H56.8907Z\" fill=\"black\"\/>\n<path d=\"M60.7887 66.1147V70.3994H63.6154V69.8638H61.3838V68.4356H63.3922V67.9298H61.3838V66.6503H63.5261V66.1147H60.7887Z\" fill=\"black\"\/>\n<path d=\"M64.4187 66.1147V70.3994H66.9181V69.8638H65.0138V66.1147H64.4187Z\" fill=\"black\"\/>\n<path d=\"M67.4983 66.1147V70.3994H69.9977V69.8638H68.0934V66.1147H67.4983Z\" fill=\"black\"\/>\n<path d=\"M71.1581 66.1296H70.563V70.3994H71.1581V66.1296Z\" fill=\"black\"\/>\n<path d=\"M75.4279 67.0073C75.294 66.8734 75.1304 66.7544 74.9369 66.68C74.7435 66.5908 74.5204 66.5461 74.2675 66.5461C74.0146 66.5461 73.7914 66.5908 73.598 66.68C73.4046 66.7693 73.2261 66.8883 73.0922 67.052C72.9583 67.2156 72.8392 67.3941 72.7649 67.6024C72.6905 67.8107 72.6458 68.0339 72.6458 68.2719C72.6458 68.5099 72.6756 68.7331 72.7649 68.9414C72.8392 69.1497 72.9434 69.3282 73.0922 69.4918C73.2261 69.6406 73.4046 69.7596 73.6129 69.8638C73.8211 69.953 74.0443 69.9977 74.2972 69.9977C74.4906 69.9977 74.684 69.9828 74.8477 69.9382C75.0113 69.9084 75.1601 69.8489 75.2791 69.7745V68.5843H74.327V68.0785H75.8742V70.1464C75.6511 70.2655 75.413 70.3547 75.1452 70.4291C74.8774 70.4886 74.5948 70.5332 74.2823 70.5332C73.955 70.5332 73.6426 70.4737 73.36 70.3696C73.0773 70.2655 72.8392 70.1018 72.6458 69.9084C72.4524 69.715 72.2888 69.477 72.1846 69.1943C72.0805 68.9265 72.021 68.6141 72.021 68.2868C72.021 67.9595 72.0805 67.647 72.1846 67.3793C72.3037 67.1115 72.4524 66.8734 72.6607 66.68C72.869 66.4866 73.107 66.3378 73.3748 66.2188C73.6575 66.1147 73.955 66.0552 74.2823 66.0552C74.6245 66.0552 74.9221 66.0998 75.1899 66.2039C75.4577 66.3081 75.6808 66.442 75.8593 66.6056L75.4279 67.0073Z\" fill=\"black\"\/>\n<path d=\"M76.8859 66.1147V70.3994H79.7274V69.8638H77.481V68.4356H79.5043V67.9298H77.481V66.6503H79.6233V66.1147H76.8859Z\" fill=\"black\"\/>\n<path d=\"M83.5361 66.1147V69.5365H83.5212L81.2896 66.1147H80.516V70.3994H81.1111V66.9032H81.126L83.3724 70.3994H84.1312V66.1147H83.5361Z\" fill=\"black\"\/>\n<path d=\"M88.8323 69.73C88.6687 69.968 88.4455 70.1465 88.1777 70.2953C87.9099 70.4441 87.5826 70.5036 87.2107 70.5036C86.8834 70.5036 86.5859 70.4441 86.3032 70.3399C86.0205 70.2358 85.7974 70.0721 85.5891 69.8787C85.3957 69.6853 85.232 69.4473 85.1279 69.1646C85.0237 68.8968 84.9642 68.5844 84.9642 68.2571C84.9642 67.9298 85.0237 67.6174 85.1279 67.3496C85.2469 67.0818 85.3957 66.8438 85.604 66.6504C85.8122 66.457 86.0503 66.3082 86.3181 66.1892C86.6007 66.085 86.8983 66.0255 87.2256 66.0255C87.3744 66.0255 87.5231 66.0404 87.657 66.0701C87.7909 66.0999 87.9546 66.1445 88.0885 66.204C88.2224 66.2636 88.3563 66.3379 88.4604 66.4123C88.5645 66.5016 88.6687 66.5909 88.7579 66.695L88.2968 67.0669C88.1926 66.9182 88.0438 66.7991 87.8504 66.7099C87.657 66.6206 87.4487 66.576 87.2405 66.576C86.9876 66.576 86.7644 66.6206 86.571 66.7099C86.3776 66.7991 86.1991 66.9182 86.0652 67.0818C85.9313 67.2455 85.8122 67.424 85.7379 67.6323C85.6635 67.8405 85.6188 68.0637 85.6188 68.3017C85.6188 68.5398 85.6486 68.7629 85.723 68.9712C85.7974 69.1795 85.9015 69.358 86.0503 69.5217C86.1842 69.6705 86.3478 69.7895 86.5561 69.8936C86.7644 69.9978 86.9727 70.0275 87.2256 70.0275C87.4785 70.0275 87.6868 69.9829 87.8802 69.8787C88.0736 69.7746 88.2372 69.6407 88.3711 69.4622L88.8323 69.73Z\" fill=\"black\"\/>\n<path d=\"M89.4424 66.1147V70.3994H92.2691V69.8638H90.0375V68.4356H92.0459V67.9298H90.0375V66.6503H92.1798V66.1147H89.4424Z\" fill=\"black\"\/>\n<path d=\"M83.2683 25.1129H78.6266L66.6652 52.7549L56.3999 25.0831H56.3106H56.2362L45.6882 52.7549L38.8 36.5535C37.0891 32.4623 33.9947 29.1149 30.0522 27.1064C26.0799 25.0831 21.4977 24.5922 17.1982 25.708C7.33453 28.2817 1.36873 38.5025 3.91275 48.5C5.96582 56.6081 13.0028 62.1425 20.8431 62.5591H41.0167L32.9086 44.6914H28.2818L34.3666 58.2H20.858C14.8773 57.8727 9.65539 53.6178 8.0784 47.3991C6.15923 39.8265 10.5927 32.0903 17.9867 29.9926C24.6963 28.0883 31.7482 31.5101 34.7236 37.8925L45.718 62.5442L56.147 35.5716H56.2213L66.695 62.5442L83.2683 25.1129Z\" fill=\"black\"\/>\n<path d=\"M6.99234 67.0073C6.85844 66.8734 6.69479 66.7544 6.50138 66.68C6.30798 66.5908 6.08482 66.5461 5.83191 66.5461C5.57899 66.5461 5.35583 66.5908 5.16243 66.68C4.96902 66.7693 4.7905 66.8883 4.6566 67.052C4.5227 67.2156 4.40369 67.3941 4.3293 67.6024C4.25491 67.8107 4.21028 68.0339 4.21028 68.2719C4.21028 68.5099 4.24004 68.7331 4.3293 68.9414C4.40369 69.1497 4.50783 69.3282 4.6566 69.4918C4.7905 69.6406 4.96902 69.7596 5.1773 69.8638C5.38559 69.953 5.60875 69.9977 5.86166 69.9977C6.05507 69.9977 6.24847 69.9828 6.41212 69.9382C6.57577 69.9084 6.72454 69.8489 6.84356 69.7745V68.5843H5.90629V68.0785H7.43865V70.1464C7.2155 70.2655 6.97746 70.3547 6.70967 70.4291C6.44188 70.4886 6.15921 70.5332 5.84678 70.5332C5.51948 70.5332 5.20706 70.4737 4.92439 70.3696C4.64172 70.2655 4.40369 70.1018 4.1954 69.9084C4.002 69.715 3.83835 69.477 3.73421 69.1943C3.63007 68.9265 3.57056 68.6141 3.57056 68.2868C3.57056 67.9595 3.63007 67.647 3.73421 67.3793C3.85323 67.1115 4.002 66.8734 4.21028 66.68C4.41856 66.4866 4.6566 66.3378 4.92439 66.2188C5.20706 66.1147 5.50461 66.0552 5.83191 66.0552C6.17408 66.0552 6.47163 66.0998 6.73942 66.2039C7.00721 66.3081 7.23037 66.442 7.4089 66.6056L6.99234 67.0073Z\" fill=\"black\"\/>\n<path d=\"M17.0791 69.8936H17.823C17.942 69.8936 18.0759 69.8787 18.1949 69.8638C18.3288 69.8341 18.4329 69.8043 18.5371 69.7448C18.6412 69.6853 18.7156 69.6109 18.79 69.5217C18.8495 69.4175 18.8792 69.3134 18.8792 69.1646C18.8792 68.9117 18.79 68.7332 18.6263 68.6141C18.4627 68.4951 18.1949 68.4505 17.8825 68.4505H17.0791V69.8936V69.8936ZM17.0791 67.9298H17.8527C17.9568 67.9298 18.0759 67.9149 18.18 67.8852C18.2841 67.8554 18.3734 67.8257 18.4478 67.7661C18.5222 67.7066 18.5817 67.6471 18.6263 67.5579C18.671 67.4686 18.6858 67.3793 18.6858 67.2603C18.6858 67.0223 18.5966 66.8586 18.4329 66.7694C18.2693 66.6652 18.0312 66.6206 17.7486 66.6206H17.0642V67.9298H17.0791ZM16.484 66.1296H17.9568C18.1205 66.1296 18.2841 66.1445 18.4329 66.1891C18.5966 66.2189 18.7305 66.2933 18.8644 66.3677C18.9983 66.4569 19.1024 66.5611 19.1768 66.695C19.2512 66.8289 19.2958 66.9925 19.2958 67.2008C19.2958 67.4388 19.2363 67.6322 19.0875 67.7959C18.9536 67.9595 18.7751 68.0637 18.5519 68.1232V68.1381C18.6858 68.153 18.8197 68.1827 18.9239 68.2422C19.0429 68.3017 19.147 68.3761 19.2214 68.4505C19.3107 68.5398 19.3702 68.6439 19.4148 68.7629C19.4595 68.8819 19.4743 69.0158 19.4743 69.1646C19.4743 69.3729 19.4297 69.5514 19.3404 69.7002C19.2512 69.849 19.147 69.9829 18.9983 70.0721C18.8495 70.1763 18.6858 70.2507 18.4924 70.2953C18.299 70.3399 18.0907 70.3697 17.8676 70.3697H16.4691L16.484 66.1296Z\" fill=\"black\"\/>\n<path d=\"M15.0261 68.2571C15.0261 68.0191 14.9963 67.8108 14.907 67.6025C14.8327 67.3942 14.7285 67.2157 14.5797 67.0521C14.4458 66.8884 14.2673 66.7694 14.0739 66.6801C13.8805 66.5909 13.6573 66.5462 13.4044 66.5462C13.1664 66.5462 12.9432 66.5909 12.735 66.6801C12.5415 66.7694 12.363 66.8884 12.2291 67.0521C12.0952 67.2157 11.9911 67.3942 11.9018 67.6025C11.8274 67.8108 11.7828 68.0339 11.7828 68.2571C11.7828 68.4951 11.8126 68.7183 11.9018 68.9266C11.9762 69.1349 12.0952 69.3134 12.2291 69.477C12.363 69.6258 12.5415 69.7448 12.735 69.849C12.9284 69.9382 13.1515 69.9829 13.4044 69.9829C13.6425 69.9829 13.8656 69.9382 14.0739 69.849C14.2673 69.7597 14.4458 69.6407 14.5797 69.477C14.7136 69.3134 14.8327 69.1497 14.907 68.9266C14.9814 68.7183 15.0261 68.4951 15.0261 68.2571ZM15.6658 68.2571C15.6658 68.5844 15.6063 68.8968 15.5021 69.1646C15.3831 69.4324 15.2343 69.6705 15.0261 69.8787C14.8327 70.0721 14.5946 70.2358 14.3119 70.3399C14.0293 70.4441 13.7317 70.5036 13.4044 70.5036C13.0771 70.5036 12.7796 70.4441 12.4969 70.3399C12.2291 70.2358 11.9911 70.0721 11.7828 69.8787C11.5894 69.6853 11.4258 69.4473 11.3216 69.1646C11.2026 68.8968 11.158 68.5844 11.158 68.2571C11.158 67.9298 11.2175 67.6174 11.3216 67.3496C11.4258 67.0818 11.5894 66.8438 11.7828 66.6504C11.9762 66.457 12.2142 66.3082 12.4969 66.1892C12.7796 66.0701 13.0771 66.0255 13.4044 66.0255C13.7317 66.0255 14.0293 66.085 14.3119 66.1892C14.5797 66.2933 14.8327 66.457 15.0261 66.6504C15.2195 66.8438 15.3831 67.0818 15.5021 67.3496C15.6063 67.6174 15.6658 67.9149 15.6658 68.2571Z\" fill=\"black\"\/>\n<\/svg>\n\t\t\t\t<\/a>\n\t\t\t<\/li>\n\t\t\n\n\n\n\t<\/ul>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-3b973d4 e-flex e-con-boxed e-con e-parent\" data-id=\"3b973d4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<h2 data-interaction-id=\"5f7cae3\" class=\"e-5f7cae3-9b2d1a6 fadeInDown fadeInLines e-heading-base\" data-e-type=\"widget\" data-id=\"5f7cae3\">One partner for your <br>complete water journey.<\/h2>\n\t\t\t\t\t<p class=\"e-15f8dda-50cbb05 fadeIn e-paragraph-base\" data-interaction-id=\"15f8dda\" data-e-type=\"widget\" data-id=\"15f8dda\">From first assessment to long-term operations, Gradiant covers the whole lifecycle of AI infrastructure water. <br><br>Fewer handoffs. Faster execution. One accountable partner.<\/p>\n\t\t<div class=\"elementor-element elementor-element-d08dff6 e-con e-atomic-element e-grid-base journey-grid \" data-id=\"d08dff6\" data-element_type=\"e-grid\" data-e-type=\"e-grid\" data-interaction-id=\"d08dff6\" data-e-type=\"e-grid\" data-id=\"d08dff6\">\n    <div class=\"elementor-element elementor-element-72ad6f6 e-con e-atomic-element e-div-block-base e-72ad6f6-f632b95 \" data-id=\"72ad6f6\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"72ad6f6\" data-e-type=\"e-div-block\" data-id=\"72ad6f6\">\n    \t\t\t<div class=\"e-3f9c44f-a35843a e-svg-base\" data-interaction-id=\"3f9c44f\" data-e-type=\"widget\" data-id=\"3f9c44f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width: 100%; height: 100%; overflow: unset;\" width=\"31\" height=\"31\" viewBox=\"0 0 31 31\" fill=\"currentColor\"><circle cx=\"15.3271\" cy=\"15.3271\" r=\"14.8271\" fill=\"#1E1555\" stroke=\"white\"><\/circle><\/svg><\/div>\t\t\t\t<div class=\"elementor-element elementor-element-99c358a elementor-widget elementor-widget-heading\" data-id=\"99c358a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">ONE<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f3bb17c elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"f3bb17c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">DESIGN<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-ae78556-9f21182 e-paragraph-base\" data-interaction-id=\"ae78556\" data-e-type=\"widget\" data-id=\"ae78556\">Integrated systems shaped around each site.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-ba5cbb0 e-con e-atomic-element e-div-block-base e-ba5cbb0-68e7d8a \" data-id=\"ba5cbb0\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"ba5cbb0\" data-e-type=\"e-div-block\" data-id=\"ba5cbb0\">\n    \t\t\t<div class=\"e-d2150a2-f3d60b5 e-svg-base\" data-interaction-id=\"d2150a2\" data-e-type=\"widget\" data-id=\"d2150a2\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width: 100%; height: 100%; overflow: unset;\" width=\"31\" height=\"31\" viewBox=\"0 0 31 31\" fill=\"currentColor\"><circle cx=\"15.3271\" cy=\"15.3271\" r=\"14.8271\" fill=\"#1E1555\" stroke=\"white\"><\/circle><\/svg><\/div>\t\t\t\t<div class=\"elementor-element elementor-element-93daa46 elementor-widget elementor-widget-heading\" data-id=\"93daa46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">TWO<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ccde8a7 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"ccde8a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">DELIVER<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-b29841f-a389be2 e-paragraph-base\" data-interaction-id=\"b29841f\" data-e-type=\"widget\" data-id=\"b29841f\">Technology, equipment, and project execution.<\/p>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-42f91a4 e-con e-atomic-element e-div-block-base e-42f91a4-a9d4025 \" data-id=\"42f91a4\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"42f91a4\" data-e-type=\"e-div-block\" data-id=\"42f91a4\">\n    \t\t\t<div class=\"e-3571dc8-8c15803 e-svg-base\" data-interaction-id=\"3571dc8\" data-e-type=\"widget\" data-id=\"3571dc8\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width: 100%; height: 100%; overflow: unset;\" width=\"31\" height=\"31\" viewBox=\"0 0 31 31\" fill=\"currentColor\"><circle cx=\"15.3271\" cy=\"15.3271\" r=\"14.8271\" fill=\"#1E1555\" stroke=\"white\"><\/circle><\/svg><\/div>\t\t\t\t<div class=\"elementor-element elementor-element-5c3fc74 elementor-widget elementor-widget-heading\" data-id=\"5c3fc74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">THREE<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68aa396 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"68aa396\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">OPERATE<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<p class=\"e-aabe84b-da9b942 e-paragraph-base\" data-interaction-id=\"aabe84b\" data-e-type=\"widget\" data-id=\"aabe84b\">AI-powered operations, service, and lifecycle support.<\/p>\n\t\t\n<\/div>\n\n<\/div>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<footer class=\"elementor-element elementor-element-f8b4cc0 e-flex e-con-boxed e-con e-parent\" data-id=\"f8b4cc0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc0eead elementor-widget__width-inherit elementor-absolute elementor-widget elementor-widget-heading\" data-id=\"fc0eead\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Copyright  \u00a9 2026 Gradiant<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-91e8336 e-con e-atomic-element e-div-block-base e-91e8336-6f7c0e3 \" data-id=\"91e8336\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"91e8336\" data-e-type=\"e-div-block\" data-id=\"91e8336\">\n    \t\t\t<h2 data-interaction-id=\"20944fa\" class=\"e-20944fa-6c8e257 fadeInDown fadeInLines e-heading-base\" data-e-type=\"widget\" data-id=\"20944fa\">Gradiant built and operates the <br>water layer of the AI economy.<\/h2>\n\t\t\t\t\t<p class=\"e-ea86e0f-2a1b335 fadeIn e-paragraph-base\" data-interaction-id=\"ea86e0f\" data-e-type=\"widget\" data-id=\"ea86e0f\">Explore the company, the technologies and the global solutions that run the water infrastructure of the AI economy.<\/p>\n\t\t\t\t<div class=\"elementor-element elementor-element-66cad6f elementor-widget elementor-widget-html\" data-id=\"66cad6f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Gradiant AI Economy LP \u2014 \"Speak with an expert\" modal (HTML widget)\n     ==================================================================\n     Paste into an Elementor HTML widget. Placement does not matter much \u2014\n     the JS relocates this element to <body> on load, because any ancestor\n     carrying a transform (the entrance animations end on translate3d(0,0,0),\n     which still counts) would otherwise become the containing block for\n     position:fixed and the overlay would be trapped inside the footer.\n\n     THE FORM IS RENDERED ONCE, ON PAGE LOAD, AND STAYS IN THE DOM.\n     HubSpot measures and wires up its fields at create time, so building it\n     on a trigger \u2014 or hiding its container with display:none \u2014 is what\n     causes the flaky embeds. The modal is therefore always present and\n     always laid out; only visibility \/ opacity \/ pointer-events change.\n     Styling of the form itself is HubSpot's own.\n\n     `target` is required: without it HubSpot injects the form wherever the\n     script tag sits, which would land it outside the panel. The readiness\n     poll covers the case where the embed script has not finished loading\n     by the time this inline script runs. -->\n\n<div class=\"wl-modal\" id=\"wl-expert-modal\" role=\"dialog\" aria-modal=\"true\"\n     aria-label=\"Speak with an expert\" aria-hidden=\"true\">\n  <div class=\"wl-modal-scrim\" data-wl-close><\/div>\n\n  <div class=\"wl-modal-panel\" tabindex=\"-1\">\n    <button type=\"button\" class=\"wl-modal-close\" data-wl-close aria-label=\"Close\">\n      <svg viewBox=\"0 0 36 36\" width=\"36\" height=\"36\" aria-hidden=\"true\" focusable=\"false\">\n        <path d=\"M10 10 L26 26 M26 10 L10 26\" fill=\"none\" stroke=\"currentColor\"\n              stroke-width=\"2\" stroke-linecap=\"round\" \/>\n      <\/svg>\n    <\/button>\n\n    <div class=\"wl-modal-body\">\n      <div id=\"wl-expert-form\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script charset=\"utf-8\" type=\"text\/javascript\" src=\"\/\/js.hsforms.net\/forms\/embed\/v2.js\"><\/script>\n<script>\n(function () {\n  var tries = 0;\n  function build() {\n    hbspt.forms.create({\n      portalId: \"23884196\",\n      formId: \"0f9f580d-52fe-457d-98ec-401fbe78690f\",\n      region: \"na1\",\n      target: \"#wl-expert-form\"\n    });\n  }\n  function ready() {\n    if (window.hbspt && window.hbspt.forms) { build(); return; }\n    if (++tries > 200) return; \/\/ ~10s, then give up quietly\n    setTimeout(ready, 50);\n  }\n  ready();\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8f2d85c e-con e-atomic-element e-div-block-base e-8f2d85c-2021dd0 motion-stagger motion-late \" data-id=\"8f2d85c\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"8f2d85c\" data-e-type=\"e-div-block\" data-id=\"8f2d85c\">\n    \t\t\t<a href=\"https:\/\/gradiant.com\/\" target=\"_self\" class=\"e-e1a9d3f-76f341f fadeIn e-button-base\" data-interaction-id=\"e1a9d3f\" data-e-type=\"widget\" data-id=\"e1a9d3f\">\n\t\tExplore Gradiant\n\t<\/a>\t\t\t\t\t<a href=\"https:\/\/gradiant.com\/contact\/\" target=\"_self\" class=\"e-dfeeb8a-f226f99 fadeIn btn-outline e-button-base\" data-interaction-id=\"dfeeb8a\" data-e-type=\"widget\" data-id=\"dfeeb8a\">\n\t\tSPEAK WITH an expert\n\t<\/a>\t\t\n<\/div>\n\n<\/div>\n<div class=\"elementor-element elementor-element-b66892c e-con e-atomic-element e-flexbox-base e-b66892c-a2e1ad9 \" data-id=\"b66892c\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"b66892c\" data-e-type=\"e-flexbox\" data-id=\"b66892c\">\n    \t\t\t<a href=\"https:\/\/gradiant.com\/\" target=\"_self\" class=\"e-image-link-base\" data-interaction-id=\"b1760ee\"\n\t><img loading=\"lazy\" decoding=\"async\" class=\"e-image-base e-b1760ee-88f17b5\" data-e-type=\"widget\" data-id=\"b1760ee\" id=\"15736\" src=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/08\/Gradiant-Logo-TM-horizontal-reverse-RGB-2.svg\" width=\"239\" height=\"51\" srcset=\"\" alt=\"\"\/>\t<\/a>\t\t<div class=\"elementor-element elementor-element-4e817ae e-con e-atomic-element e-div-block-base e-4e817ae-9182fee \" data-id=\"4e817ae\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"4e817ae\" data-e-type=\"e-div-block\" data-id=\"4e817ae\">\n    \t\t\t<h3 data-interaction-id=\"38c4e0f\" class=\"e-38c4e0f-a965061 e-heading-base\" data-e-type=\"widget\" data-id=\"38c4e0f\">STAY UP TO DATE WITH OUR LATEST NEWS<\/h3>\n\t\t\t\t<div class=\"elementor-element elementor-element-d02d0a6 elementor-widget elementor-widget-html\" data-id=\"d02d0a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"lp-footer-form\"><\/div>\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\nvar el = document.getElementById('lp-footer-form');\r\nif (!el) return;\r\nvar loaded = false;\r\nfunction load() {\r\n  if (loaded) return;\r\n  loaded = true;\r\n  HubSpotFormWrapper.create({\r\n\tregion: \"na1\",\r\n\ttarget: \"#lp-footer-form\",\r\n\tportalId: \"23884196\",\r\n\tformId: \"8d843213-cd8f-4c50-9abc-3bc02999ceff\",\r\n  });\r\n}\r\nif (window.IntersectionObserver) {\r\n  var observer = new IntersectionObserver(function(entries) {\r\n\tentries.forEach(function(entry) {\r\n\t  if (entry.isIntersecting) {\r\n\t\tload();\r\n\t\tobserver.disconnect();\r\n\t  }\r\n\t});\r\n  }, { rootMargin: '200px' });\r\n  observer.observe(el);\r\n} else {\r\n  load();\r\n}\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n\t\t<div class=\"elementor-element elementor-element-3f3731e elementor-widget elementor-widget-html\" data-id=\"3f3731e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\n\/* Hero \"lights on\" \u2014 replaces the scrapped hero-crossfade.js.\n   Builds masked light layers over the static dollhouse image; all visuals\n   (masks, blend modes, breathing animations) live in the HERO LIGHTS section\n   of waterlayer-lp.css. Layers are clones of the hero image itself, so they\n   register pixel-perfectly at every viewport size with no extra requests. *\/\n(function () {\n  function init() {\n    var wrap = document.querySelector('.ai-economy-hero .ai-economy-hero-image-wrapper');\n    if (!wrap || wrap.querySelector('.hero-light-layer')) return;\n    var img = wrap.querySelector('img.e-image-base');\n    if (!img) return;\n\n    function build() {\n      var halo = document.createElement('div');\n      halo.className = 'hero-light-layer hl-halo';\n      halo.setAttribute('aria-hidden', 'true');\n      wrap.insertBefore(halo, img);\n\n      ['hl-bay-a', 'hl-bay-b', 'hl-bay-c', 'hl-strip', 'hl-refl'].forEach(function (cls) {\n        var c = img.cloneNode(false);\n        c.removeAttribute('id');\n        c.removeAttribute('loading');\n        c.removeAttribute('fetchpriority');\n        c.setAttribute('aria-hidden', 'true');\n        \/* Strip the entrance classes before copying the class list. These are\n           clones of the hero image, so they inherit whatever it carries \u2014 and\n           once fadeIn was added to the hero image, the entrance system claimed\n           every light layer: block 10's rule outranks the .hl-* rules and sets\n           the `animation` SHORTHAND, which replaces hl-breathe outright, while\n           fill-mode:both then pins each layer at opacity 1 permanently. The\n           result looks like someone raised the saturation on the render \u2014 the\n           lights sit brighter than their intended peak and never move.\n           Paired with a :not(.hero-light-layer) guard on block 10. *\/\n        c.className = img.className.split(\/\\s+\/)\n          .filter(function (n) {\n            return n && !\/^(fadeIn|fadeInDown|hyper-in|animated)$\/.test(n);\n          })\n          .join(' ') + ' hero-light-layer ' +\n          (cls === 'hl-refl' ? '' : 'hl-bloom ') + cls;\n        wrap.appendChild(c);\n      });\n    }\n\n    if (img.complete) build();\n    else img.addEventListener('load', build, { once: true });\n\n    \/* Off-screen gate. The light layers run infinite animations, and the\n       travelling sweep repaints a large blurred, masked layer every frame \u2014\n       fine while the hero is on screen, pure battery drain once it is not.\n       Pausing is instant and resumes mid-cycle with no visible jump, so there\n       is nothing to restart. rootMargin gives it a screen of slack either side\n       so a small scroll never thrashes it. *\/\n    var hero = document.querySelector('.ai-economy-hero');\n    if (hero && typeof IntersectionObserver !== 'undefined') {\n      new IntersectionObserver(function (entries) {\n        hero.classList.toggle('hl-idle', !entries[0].isIntersecting);\n      }, { rootMargin: '100% 0px' }).observe(hero);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 hero horizon lock.\n   The designer's fixed point is where the dollhouse PLATFORM meets the\n   sunset HORIZON in the background photo. Both move independently as the\n   viewport changes: the horizon rides the background's cover-scaling\n   (driven by the hero's aspect ratio), while the dollhouse rides the\n   text flow above it. The old pure-CSS vw\/px math only held at the two\n   widths it was authored for \u2014 it drifted ~70px by 430px wide, and at\n   tablet the horizon fell hundreds of px BELOW the hero entirely.\n\n   This measures both each time layout can change and sets the image's\n   top so the platform lands a fixed fraction of the image's height from\n   the horizon. Because the image is absolutely positioned, moving it\n   cannot change the hero's height \u2014 no feedback loop.\n\n   Constants:\n     HORIZON  horizon row \/ height, measured per background asset\n     PLATFORM 1036\/1820 \u2014 the row in the artwork where the plinth ends\n              and its mirror begins\n     offset() how far below the horizon the platform sits, as a fraction\n              of the image height. Two values because the comps treat the\n              breakpoints differently; each reproduces the sign-off\n              rendering at its own reference width (1440 \/ 390). *\/\n(function () {\n  var HORIZON = [\n    { test: \/mobile@3x\/i,  frac: 0.6925 },\n    { test: \/desktop@2x\/i, frac: 0.6520 }\n  ];\n  var PLATFORM = 1036 \/ 1820;\n\n  \/* How far below the horizon the platform settles, as a fraction of the\n     image height \u2014 the house sits in the water just in front of the\n     horizon, not on it. Desktop reproduces the signed-off rendering;\n     phones sit a touch shallower (art-directed: the mobile crop puts the\n     horizon much lower in frame, so the same figure read as wading). The\n     mobile value is what the CSS calc in the \u22641024 block folds in. *\/\n  function offset() {\n    return window.innerWidth < 768 ? 0.068 : 0.1163;\n  }\n\n  var natCache = {};\n  function natural(url, cb) {\n    if (natCache[url]) return cb(natCache[url]);\n    var i = new Image();\n    i.onload = function () {\n      natCache[url] = { w: i.naturalWidth, h: i.naturalHeight };\n      cb(natCache[url]);\n    };\n    i.onerror = function () { cb(null); };\n    i.src = url;\n  }\n\n  function place() {\n    var hero = document.querySelector('.ai-economy-hero');\n    if (!hero) return;\n    var wrap = hero.querySelector('.ai-economy-hero-image-wrapper');\n    var img = wrap && wrap.querySelector('img.e-image-base');\n    if (!img || !img.complete || !img.naturalHeight) return;\n\n    var cs = getComputedStyle(hero);\n    var m = cs.backgroundImage.match(\/url\\([\"']?([^\"')]+)[\"']?\\)\/);\n    if (!m) return;\n    var url = m[1];\n    var rule = HORIZON.filter(function (r) { return r.test.test(url); })[0];\n    if (!rule) return;\n\n    natural(url, function (nat) {\n      if (!nat) return;\n      var hr = hero.getBoundingClientRect();\n      \/\/ background-size: cover \u2014 the scale is whichever axis needs more\n      var scale = Math.max(hr.width \/ nat.w, hr.height \/ nat.h);\n      var scaledH = nat.h * scale;\n      \/* background-position Y decides which slice of the overflow shows,\n         and it comes in two forms that mean different things: a PERCENTAGE\n         aligns that point of the image to the same point of the box (so it\n         scales with the overflow), while a LENGTH is a straight offset of\n         the image's top edge. The mobile rule uses a length (-18vw, which\n         computed style resolves to px) to lift the horizon; reading that as\n         0 would silently put the dollhouse 70px too low. *\/\n      var posY = cs.backgroundPosition.split(' ')[1] || '0px';\n      var offsetY = posY.indexOf('%') > -1\n        ? (hr.height - scaledH) * (parseFloat(posY) \/ 100)\n        : parseFloat(posY) || 0;\n      var horizonY = offsetY + scaledH * rule.frac;\n\n      var imgH = img.getBoundingClientRect().height;\n      if (!imgH) return;\n      var wrapTop = wrap.getBoundingClientRect().top - hr.top;\n      var top = horizonY + offset() * imgH - PLATFORM * imgH - wrapTop;\n\n      \/* Hard ceiling, mirroring the CSS min(): keep the PLATFORM within\n         the wrapper box (+10px) so the solid dollhouse can never reach\n         the body copy. Binds on the largest phones, where following the\n         horizon exactly would push the plinth into the text \u2014 there the\n         house stops tracking the horizon rather than collide. *\/\n      var wr = wrap.getBoundingClientRect();\n      top = Math.min(top, wr.height + 10 - PLATFORM * imgH);\n      \/* ...and a floor, mirroring the CSS max(): the dollhouse must never\n         ride up into the headline on small screens. Better a hero that\n         runs past one screen than one that collapses into itself. *\/\n      top = Math.max(12, top);\n\n      \/\/ stylesheet rules set top with !important, so match that priority\n      wrap.querySelectorAll('img').forEach(function (el) {\n        el.style.setProperty('top', top + 'px', 'important');\n      });\n      var halo = hero.querySelector('.hl-halo');\n      if (halo) halo.style.setProperty('top', top + 'px', 'important');\n\n    });\n  }\n\n  function watch() {\n    place();\n    var t;\n    function queue() { clearTimeout(t); t = setTimeout(place, 120); }\n    window.addEventListener('resize', queue, { passive: true });\n    window.addEventListener('orientationchange', queue);\n    \/\/ late layout shifts: webfont swap, the hero image decoding, and the\n    \/\/ light-layer clones being appended\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(place);\n    var img = document.querySelector('.ai-economy-hero .ai-economy-hero-image-wrapper img.e-image-base');\n    if (img && !img.complete) img.addEventListener('load', place, { once: true });\n    if (typeof ResizeObserver !== 'undefined') {\n      var hero = document.querySelector('.ai-economy-hero');\n      if (hero) new ResizeObserver(queue).observe(hero);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', watch);\n  } else {\n    watch();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 anchor jumps.\n   The overview tiles link to the five industry sections. Historically every\n   jump crossed the segway band mid-exhale (the page got SHORTER in flight,\n   measured 91-210px off across breakpoints); segway V10 has constant\n   document height, so that failure mode is gone \u2014 but lazy images above a\n   target still grow the page mid-flight, which is what the glide and the\n   landing hold below are for.\n\n   Three parts to the fix:\n\n   1. (RETIRED with segway V10.) The band used to exhale ~150px of layout\n      height mid-jump, so the flight fast-forwarded and froze its\n      ScrollTrigger. The V10 band is a sticky in-flow section with CONSTANT\n      document height \u2014 there is no exhale left to spend. freeze()\/thaw()\n      below are kept as no-ops so the flight logic keeps its shape.\n\n   2. GLIDE ANYWAY. Lazy images above the target can still grow the page\n      mid-flight, so each frame re-reads the target's LIVE position and\n      eases a share of what's left \u2014 the shift is absorbed as it happens\n      rather than landing as a correction after the scroll has stopped.\n      ~63% of the way in 130ms, settled by ~450ms, decelerating in.\n\n   3. HOLD ON LANDING. For a beat after arrival the target stays pinned to\n      the viewport top, so anything that finishes loading above it shifts\n      the page under a stationary target rather than sliding it away.\n\n   The same routine serves deep links (\/water-layer-of-ai\/#energy) and\n   back\/forward, which the browser otherwise resolves at parse time \u2014\n   before the images load or the band has ever animated. Reduced motion\n   lands instantly but still freezes and holds. *\/\n(function () {\n  var EASE     = 0.14;   \/\/ share of the remaining gap taken per frame\n  var TIMEOUT  = 2000;   \/\/ ms \u2014 hard stop on the glide, then snap the rest\n  var HOLD     = 900;    \/\/ ms the target stays pinned after landing\n  var HOLD_NAV = 1600;   \/\/ ...longer for deep links, where more is still loading\n\n  \/* behavior:'instant' on every step is essential \u2014 the theme sets\n     html{scroll-behavior:smooth}, which would make each frame's move its\n     own queued smooth animation and the glide crawls to a halt. WE do the\n     easing; the browser must apply each step verbatim. *\/\n  function jump(delta) {\n    if (delta) window.scrollTo({ top: window.scrollY + delta, behavior: 'instant' });\n  }\n\n  \/* ---- the segway band ----\n     V10: the band is a sticky in-flow section; document height is constant,\n     so there is nothing to freeze. No-ops keep the flight logic's shape\n     (active.st is always null; thaw(null) already returned early before). *\/\n\n  function freeze() {\n    \/* Not a freeze any more (V10 has no exhale to stop) \u2014 it hides the\n       band's TITLE for the duration of the flight, so the scrub racing\n       through its range at speed is never seen. The backdrop keeps\n       painting, so the band still scrolls past as a continuous surface.\n       Returns null to keep the flight's shape: active.st stays null. *\/\n    document.documentElement.classList.add('wl-transit');\n    return null;\n  }\n\n  function thaw() {\n    \/\/ called both at landing and again at release; removal is idempotent\n    document.documentElement.classList.remove('wl-transit');\n  }\n\n  \/* ---- the flight ---- *\/\n\n  var active = null;      \/\/ { el, st, started, hold, landedAt } or null\n  var engaged = false;    \/\/ the visitor has taken the scroll back\n\n  function release() {\n    if (!active) return;\n    thaw(active.st);\n    active = null;\n  }\n\n  function step() {\n    if (!active) return;\n    var a = active;\n    var d = a.el.getBoundingClientRect().top;\n    var t = performance.now() - a.started;\n\n    if (a.landedAt !== null) {\n      \/\/ pinned: absorb late layout shifts verbatim, no easing to see\n      if (Math.abs(d) > 0.5) jump(d);\n      if (t - a.landedAt > a.hold) { release(); return; }\n    } else {\n      var move = d * EASE;\n      \/* Sub-pixel guard. On a DPR-1 display scrollTo rounds a sub-pixel ask\n         away entirely, so the loop stalls a few px short and only TIMEOUT\n         resolves it \u2014 measured at 1440x900: stuck 3px out from 0.6s to\n         2.5s, then a visible 3px snap, on every single jump. Once the ask\n         gets that small, take the whole remaining gap instead. *\/\n      if (Math.abs(move) < 0.5) move = d;\n      if (Math.abs(d) < 0.5 || t > TIMEOUT) {\n        jump(d);\n        a.landedAt = t;\n        \/* Hand the band back NOW, not when the hold expires: re-arming the\n           trigger re-measures and can shift the page a few px, and that has\n           to happen while the pin is still live to absorb it. (Thawing at\n           release instead left one target 10px out.) *\/\n        thaw(a.st);\n        a.st = null;\n        focusTarget(a.el);\n      } else {\n        jump(move);\n      }\n    }\n    requestAnimationFrame(step);\n  }\n\n  \/* Keyboard and screen-reader users have to end up INSIDE the section they\n     asked for, not still on the tile. tabindex -1 makes the container\n     focusable without putting it in the tab order; the inline outline reset\n     keeps a focus ring off a full-width section. *\/\n  function focusTarget(el) {\n    if (el.getAttribute('tabindex') === null) {\n      el.setAttribute('tabindex', '-1');\n      el.style.outline = 'none';\n    }\n    try { el.focus({ preventScroll: true }); } catch (e) { \/* older Safari *\/ }\n  }\n\n  function go(el, opts) {\n    opts = opts || {};\n    release();\n    engaged = false;\n    active = {\n      el: el,\n      st: freeze(),\n      started: performance.now(),\n      hold: opts.hold || HOLD,\n      landedAt: null\n    };\n    if (opts.instant) {\n      jump(el.getBoundingClientRect().top);\n      active.landedAt = 0;\n      thaw(active.st);           \/\/ same ordering as the glide: inside the pin\n      active.st = null;\n      if (opts.focus !== false) focusTarget(el);\n    }\n    requestAnimationFrame(step);\n  }\n\n  function target() {\n    var id = location.hash.slice(1);\n    return id ? document.getElementById(id) : null;\n  }\n\n  \/* ---- history position ----\n     The tiles never navigate \u2014 the click is prevented and the jump is\n     ours \u2014 so the browser has no fragment navigation to restore on Back.\n     It does record a scroll position per entry, but we pushState and then\n     scroll in the same task, so the OUTGOING entry can end up recording\n     where the jump ended rather than where the visitor actually was. Back\n     then \"restores\" to roughly where you already are, which reads as not\n     restoring at all. So the position is stamped into the entry's state\n     at click time and put back by hand. *\/\n  var popping = false;\n\n  function restoreY(y) {\n    release();        \/\/ a live glide, or the post-landing pin, would fight this\n    engaged = false;  \/\/ Alt+Left \/ swipe-back trips the \"user took over\" listeners\n    window.scrollTo({ top: y, behavior: 'instant' });\n    \/* Images above the restore point can still be loading and changing the\n       page height, so hold the position briefly \u2014 the same reason the\n       flight holds its target on landing. Any real scroll input cancels it. *\/\n    var until = performance.now() + 600;\n    (function hold() {\n      if (engaged) return;\n      if (Math.abs(window.scrollY - y) > 1) window.scrollTo({ top: y, behavior: 'instant' });\n      if (performance.now() < until) requestAnimationFrame(hold);\n    })();\n  }\n\n  function init() {\n    var reduce = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n    \/\/ Any real scroll input hands control back immediately \u2014 never fight it.\n    ['wheel', 'touchstart', 'keydown', 'mousedown'].forEach(function (evt) {\n      window.addEventListener(evt, function () {\n        engaged = true;\n        release();\n      }, { passive: true, capture: true });\n    });\n\n    \/* Delegated, so it also covers any in-page link added later (a nav, a\n       CTA) \u2014 not just the five overview tiles it was written for. *\/\n    document.addEventListener('click', function (e) {\n      if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button > 0) return;\n      var a = e.target.closest && e.target.closest('a[href^=\"#\"]');\n      if (!a) return;\n      var id = a.getAttribute('href').slice(1);\n      var el = id && document.getElementById(id);\n      if (!el) return;  \/\/ \"#\" toggles and unresolvable targets stay the browser's\n      e.preventDefault();\n      if (history.pushState) {\n        \/\/ where the visitor is NOW, on the entry they are leaving...\n        history.replaceState({ wlY: Math.round(window.scrollY) }, '');\n        \/\/ ...and what the new entry is for\n        history.pushState({ wlAnchor: id }, '', '#' + id);\n      }\n      go(el, { instant: reduce.matches });\n    });\n\n    \/* A deep link is resolved by the browser at parse time \u2014 before the\n       images below the fold have any height, so it lands short (measured\n       73px at 1440, and only self-corrects because Chrome happens to apply\n       scroll anchoring). Re-assert it, hold it while the page settles, then\n       assert once more when everything has real height. (V10: this second\n       pass replaces the old \"once GSAP is up, spend the exhale\" step \u2014 the\n       band no longer changes document height, but late images still do.) *\/\n    if (location.hash && target()) {\n      go(target(), { instant: true, hold: HOLD_NAV, focus: false });\n      var reassert = function () {\n        var el = target();\n        if (el && !engaged) go(el, { instant: true, hold: HOLD_NAV, focus: false });\n      };\n      if (document.readyState === 'complete') setTimeout(reassert, 300);\n      else window.addEventListener('load', reassert);\n    }\n\n    window.addEventListener('hashchange', function () {\n      \/* A history traversal fires popstate and THEN hashchange, and the\n         handler below has already decided what to do \u2014 without this guard\n         it would immediately re-jump to the hash and undo a restore. *\/\n      if (popping) return;\n      var el = target();\n      if (el) go(el, { instant: reduce.matches });\n    });\n\n    \/* Back\/forward. A stamped position wins over the hash: going back\n       means \"put me where I was\", even though the URL it returns to may\n       still carry the fragment of an earlier jump. Entries from before\n       this ran (arriving from another page) have no state \u2014 those stay\n       the browser's to restore. *\/\n    window.addEventListener('popstate', function (e) {\n      popping = true;\n      setTimeout(function () { popping = false; }, 0);\n\n      var st = e.state;\n      if (st && typeof st.wlY === 'number') { restoreY(st.wlY); return; }\n\n      var el = target();\n      if (el) go(el, { instant: true, focus: false });\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 unified entrance motion (atomic + classic).\n   Elements opt in by carrying the classes fadeIn \/ fadeInDown in their\n   markup (Elementor: Advanced \u2192 CSS Classes on classic widgets, the\n   Classes field on atomic elements). Same names as Elementor's own\n   entrance-animation classes \u2014 but note Elementor ADDS these classes at\n   trigger time on widgets using native Motion Effects; those never carry\n   them at load, so this observer only picks up hand-applied ones, and the\n   CSS guards with :not(.animated) for the same reason.\n   Pairs with block 10 in waterlayer-lp.css. The html gate class means\n   no-JS (or reduced-motion) visitors simply see the content \u2014 nothing is\n   pre-hidden without it. *\/\n(function () {\n  function init() {\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n    var els = document.querySelectorAll('.fadeIn, .fadeInDown');\n    if (!els.length) return;\n    document.documentElement.classList.add('hyper-motion');\n    \/\/ Stagger groups: a .motion-stagger parent hands each animated child an\n    \/\/ incremental delay (default 0.15s step, tune per group with\n    \/\/ data-stagger=\"0.1\"). The index counts PER VISUAL ROW \u2014 children whose\n    \/\/ rendered tops match (\u00b112px) cascade together, and the count restarts\n    \/\/ on each new row. When a grid collapses to one column, every item is\n    \/\/ its own row, so delays drop to 0 without any breakpoint logic.\n    \/\/ Recomputed on resize since layout changes move items between rows.\n    \/\/ Children still self-trigger on viewport entry; the delay applies on\n    \/\/ top, so rows entering together cascade.\n    function applyStagger() {\n      document.querySelectorAll('.motion-stagger').forEach(function (parent) {\n        var step = parseFloat(parent.getAttribute('data-stagger')) || 0.15;\n        var rows = [];\n        parent.querySelectorAll('.fadeIn, .fadeInDown').forEach(function (el) {\n          var top = el.getBoundingClientRect().top;\n          var row = null;\n          for (var r = 0; r < rows.length; r++) {\n            if (Math.abs(rows[r].top - top) < 12) { row = rows[r]; break; }\n          }\n          if (!row) { row = { top: top, count: 0 }; rows.push(row); }\n          el.style.setProperty('--hyper-delay', (row.count * step).toFixed(2) + 's');\n          row.count++;\n        });\n      });\n    }\n    \/* ---- line-by-line headings (.fadeInLines) --------------------------\n       Wraps every WORD in a span, then gives each word a delay from the\n       LINE it rendered on, so a heading drops line by line instead of as\n       one block. Words are wrapped in place \u2014 the existing markup is left\n       standing around them \u2014 because rebuilding lines as block wrappers\n       would break any heading whose line spans an inline element.\n\n       Deliberately opt-in, not automatic on headings: an element whose\n       text is painted through a clipped gradient (the hero headline, the\n       stat counters) has ONE background ramp shared across all its glyphs,\n       and transforming pieces of it separately drags the fill out of\n       register. Such elements are skipped even if the class is applied,\n       and simply keep the whole-element drop.\n\n       Re-split on resize, since where the lines break changes with it. *\/\n    var LINE_STEP = 0.12; \/\/ seconds between consecutive lines\n\n    function isGradientText(el) {\n      function clipped(e) {\n        var cs = getComputedStyle(e);\n        return cs.webkitBackgroundClip === 'text' || cs.backgroundClip === 'text' ||\n               cs.webkitTextFillColor === 'rgba(0, 0, 0, 0)';\n      }\n      if (clipped(el)) return true;\n      return Array.prototype.some.call(el.querySelectorAll('*'), clipped);\n    }\n\n    function wrapWords(node, out) {\n      if (node.nodeType === 3) {\n        var parts = node.textContent.split(\/(\\s+)\/);\n        if (!parts.length) return;\n        var frag = document.createDocumentFragment();\n        parts.forEach(function (part) {\n          if (!part) return;\n          if (\/^\\s+$\/.test(part)) { frag.appendChild(document.createTextNode(part)); return; }\n          var w = document.createElement('span');\n          w.className = 'wl-word';\n          w.textContent = part;\n          frag.appendChild(w);\n          out.push(w);\n        });\n        node.parentNode.replaceChild(frag, node);\n        return;\n      }\n      if (node.nodeType !== 1 || node.classList.contains('wl-word')) return;\n      Array.prototype.slice.call(node.childNodes).forEach(function (c) { wrapWords(c, out); });\n    }\n\n    \/* Assign each word the delay of the LINE it rendered on, so the\n       heading drops a line at a time. Words are wrapped in place \u2014 the\n       existing markup is left standing around them \u2014 rather than\n       rebuilding lines as block wrappers, which would strip any inline\n       element a line happens to span.\n\n       ORDER IS BOTTOM-UP: the lowest line leaves first and the line above\n       follows, settling on top of it. Reading the delay backwards off the\n       line index is the whole trick.\n\n       SINGLE-LINE HEADINGS ARE LEFT ALONE ENTIRELY \u2014 not split, no word\n       spans, no per-line anything. There is nothing to stagger on one\n       line, and splitting it would animate fragments of a heading that\n       reads as one unit. Whether a heading qualifies depends on the\n       viewport, so this is re-decided on every width change: a heading\n       that wraps on mobile and fits on desktop gets the cascade on one\n       and the plain whole-element drop on the other. *\/\n    function splitLines(el) {\n      if (isGradientText(el)) return;\n\n      \/* Where the lines break changes with width, so this has to be\n         re-decided on resize \u2014 but ONLY on a real width change. Mobile\n         browsers fire resize as the address bar collapses during scroll,\n         and re-splitting there would replay the animation mid-scroll. *\/\n      var w = Math.round(el.getBoundingClientRect().width);\n      if (el.dataset.wlSplit === undefined) el.dataset.wlSplit = el.innerHTML;\n      else if (el.dataset.wlW === String(w)) return;\n      else el.innerHTML = el.dataset.wlSplit;\n      el.dataset.wlW = String(w);\n\n      var words = [];\n      wrapWords(el, words);\n      if (!words.length) { el.classList.remove('wl-split'); return; }\n\n      \/\/ group the words into rendered lines\n      var lines = [], lineTop = null;\n      words.forEach(function (word) {\n        var top = word.offsetTop;\n        if (lineTop === null || Math.abs(top - lineTop) > 4) { lineTop = top; lines.push([]); }\n        lines[lines.length - 1].push(word);\n      });\n\n      if (lines.length < 2) {\n        \/\/ one line at this width: hand it back untouched to the normal drop\n        el.innerHTML = el.dataset.wlSplit;\n        el.classList.remove('wl-split');\n        return;\n      }\n\n      var last = lines.length - 1;\n      lines.forEach(function (group, i) {\n        var delay = ((last - i) * LINE_STEP).toFixed(2) + 's';\n        group.forEach(function (word) { word.style.setProperty('--hyper-delay', delay); });\n      });\n      el.classList.add('wl-split');\n    }\n\n    function applyLines() {\n      document.querySelectorAll('.fadeInLines').forEach(splitLines);\n    }\n    applyLines();\n\n    applyStagger();\n    var resizeTimer;\n    window.addEventListener('resize', function () {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(function () { applyStagger(); applyLines(); }, 150);\n    }, { passive: true });\n    \/\/ Same trigger geometry as Elementor's own entrance-animation observer\n    \/\/ (Scroll.scrollObserver with no offset\/sensitivity): rootMargin 0,\n    \/\/ threshold 0 \u2014 fire once on the first visible pixel \u2014 so classic and\n    \/\/ atomic sections animate at identical scroll positions.\n    function makeObserver(rootMargin) {\n      var o = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) {\n          if (e.isIntersecting) {\n            e.target.classList.add('hyper-in');\n            o.unobserve(e.target);\n          }\n        });\n      }, { threshold: 0, rootMargin: rootMargin });\n      return o;\n    }\n\n    \/* How far into the viewport an element must come before it animates,\n       as a fraction of viewport height (0.78 = its top has reached 78%\n       down the screen). First-pixel triggering fired everything at the\n       very bottom edge, where the entrance had played before the eye\n       arrived \u2014 the client couldn't register that a heading was even\n       animating line by line.\n\n       Counter-intuitively this HELPS tall multi-line headings rather than\n       hurting them: firing later means more of the element is on screen\n       at the moment it starts. At 0.78 on an 844px phone the first 186px\n       of the element is already visible, which covers a four-line\n       heading; at first-pixel, none of it was. *\/\n    var LINE_MAIN = 0.78;\n    var LINE_LATE = 0.68; \/\/ .motion-late \u2014 held back further still\n\n    var io = makeObserver('0px 0px -' + Math.round((1 - LINE_MAIN) * 100) + '% 0px');\n\n    \/* LATE group. First-pixel triggering means a row at the very bottom\n       edge of the screen has already played by the time the eye reaches\n       it \u2014 which is why the industry logo rows \"build up\" invisibly. A\n       second observer holds those back until they are ~22% into the\n       viewport, so the cascade happens where it can be seen. Opt in with\n       .motion-late on the element or any ancestor; the industry logo rows\n       get it automatically so no Elementor edit is needed. *\/\n    document.querySelectorAll('.dollhouse-section .motion-stagger')\n      .forEach(function (row) { row.classList.add('motion-late'); });\n\n    var ioLate = makeObserver('0px 0px -' + Math.round((1 - LINE_LATE) * 100) + '% 0px');\n\n    els.forEach(function (el) {\n      (el.closest('.motion-late') ? ioLate : io).observe(el);\n    });\n\n    \/\/ Failsafe sweep: if any classed element is inside the viewport but the\n    \/\/ observer somehow never fired for it (layout-skipping features,\n    \/\/ responsive variants toggling display, browser quirks), catch it on\n    \/\/ scroll with the same first-pixel geometry. Zero-size (display:none)\n    \/\/ elements are skipped until they actually render.\n    var elList = Array.prototype.slice.call(els);\n    function sweep() {\n      var vh = window.innerHeight;\n      var atBottom = (window.innerHeight + window.scrollY) >=\n                     (document.documentElement.scrollHeight - 2);\n      elList.forEach(function (el) {\n        if (el.classList.contains('hyper-in')) return;\n        var r = el.getBoundingClientRect();\n        \/\/ the sweep must use the SAME lines as the observers, or it would\n        \/\/ undo the hold-back it exists to back up\n        var line = vh * (el.closest('.motion-late') ? LINE_LATE : LINE_MAIN);\n        \/* End-of-document safeguard. Holding the trigger inside the\n           viewport means anything in the last stretch of the page has a\n           top that can NEVER reach the line \u2014 there is no scroll left to\n           bring it there \u2014 and it would sit at opacity 0 permanently.\n           Once the page is scrolled to the bottom, everything still\n           waiting is released. *\/\n        if ((r.width || r.height) && r.bottom > 0 && (r.top < line || atBottom)) {\n          el.classList.add('hyper-in');\n          io.unobserve(el);\n        }\n      });\n    }\n    var sweeping = false;\n    window.addEventListener('scroll', function () {\n      if (sweeping) return;\n      sweeping = true;\n      requestAnimationFrame(function () { sweep(); sweeping = false; });\n    }, { passive: true });\n    sweep();\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 \"It\" gradient reveal (.it-heading-gradient).\n   The industry titles are rebuilt as classic heading widgets with the word\n   \"It\" wrapped in <span class=\"it-heading-gradient\">; the client wants that\n   word in the sunset gradient (--grad-sunset, the segway band's ramp) once\n   the heading has finished dropping in. Pairs with block 03b in the head\n   sheet, which holds the paint.\n\n   The paint cannot be authored from the start: hyper-motion's splitter\n   skips any heading whose text is already gradient-clipped (a shared ramp\n   cannot be dropped in pieces), so the span waits in ink and is lit here,\n   keyed to ITS OWN entrance:\n     - split heading: its .wl-word's drop. The cascade is bottom-up, so\n       the top line \u2014 where \"It\" sits \u2014 lands last: \"It\" landing IS the\n       heading landing;\n     - unsplit heading (one line at this width, or Elementor's own\n       .animated drop): the host element's drop.\n   No entrance at all (reduced motion, gate never set, span outside any\n   fadeIn\/fadeInDown element): lit immediately.\n\n   WHEN: not on animationend. The Hyper curve, cubic-bezier(0.23,1,0.32,1),\n   is a hard ease-out \u2014 the word is visually parked well before the clock\n   runs out, and waiting for the formal end read as a lag before the color\n   turned. So the light is scheduled from animationstart (which fires\n   once the line's delay has elapsed) at START of the drop's duration,\n   and the fade is stretched so it still ENDS at SETTLE of the drop plus\n   the base fade: the color begins turning while the word is still easing\n   in (~80% of the travel done at START) and completes at the same moment\n   it did when it began at SETTLE \u2014 a longer, softer turn, not an earlier\n   finish. The per-element fade length goes to CSS as --it-fade on the\n   span (block 03b reads it). animationend still lights as a fallback (a\n   timer that never got scheduled, a browser without getAnimations).\n\n   The spans are re-queried per event rather than cached: the splitter\n   rebuilds a heading's innerHTML on a real width change, and a cached\n   span would then point at a node no longer in the document.\n   Add this AFTER hyper-motion.js. *\/\n(function () {\n  var NAMES = \/^(wlFadeInDownLine|wlFadeInDown|wlFadeIn|fadeInDownHyper|fadeInHyper|fadeInDown|fadeIn)$\/;\n  var HOSTS = '.fadeIn, .fadeInDown';\n  var START = 0.35;     \/\/ fraction of the drop's duration at which the color begins turning\n  var SETTLE = 0.55;    \/\/ fraction at which the word reads as landed (where the fade used to start)\n  var FADE = 350;       \/\/ ms \u2014 the fade length when it starts at SETTLE; earlier starts stretch it\n  var FALLBACK = 1100;  \/\/ ms \u2014 the line drop's duration, if the timing API is unavailable\n\n  function light(span) {\n    if (span.classList.contains('wl-done')) return;\n    span.classList.add('wl-done');\n    \/* the paint goes on exactly one box: the word boxes when the splitter\n       has wrapped them (see block 03b for why), the span itself otherwise *\/\n    var words = span.querySelectorAll('.wl-word');\n    if (words.length) {\n      Array.prototype.forEach.call(words, function (w) { w.classList.add('wl-lit'); });\n    } else {\n      span.classList.add('wl-lit');\n    }\n  }\n\n  function spans() {\n    return Array.prototype.slice.call(document.querySelectorAll('.it-heading-gradient:not(.wl-done)'));\n  }\n\n  function init() {\n    if (!document.querySelector('.it-heading-gradient')) return;\n    var motion = document.documentElement.classList.contains('hyper-motion');\n\n    spans().forEach(function (span) {\n      if (!motion || !span.closest(HOSTS)) light(span);\n    });\n    if (!motion) return;\n\n    \/* the spans this entrance owns: the one the animating node sits in\n       (word drop) or the ones inside the animating host (element drop) *\/\n    function owned(t) {\n      return spans().filter(function (span) {\n        return span.contains(t) || span.closest(HOSTS) === t;\n      });\n    }\n\n    function durationOf(t, name) {\n      try {\n        var anims = t.getAnimations();\n        for (var i = 0; i < anims.length; i++) {\n          if (anims[i].animationName === name) {\n            var d = anims[i].effect.getTiming().duration;\n            if (typeof d === 'number' && d > 0) return d;\n          }\n        }\n      } catch (err) { \/* fall through *\/ }\n      return FALLBACK;\n    }\n\n    document.addEventListener('animationstart', function (e) {\n      if (!NAMES.test(e.animationName)) return;\n      var t = e.target;\n      if (!t || t.nodeType !== 1) return;\n      var mine = owned(t);\n      if (!mine.length) return;\n      var d = durationOf(t, e.animationName);\n      var fade = Math.round(FADE + d * (SETTLE - START));\n      mine.forEach(function (span) { span.style.setProperty('--it-fade', fade + 'ms'); });\n      setTimeout(function () { mine.forEach(light); }, d * START);\n    }, true);\n\n    document.addEventListener('animationend', function (e) {\n      if (!NAMES.test(e.animationName)) return;\n      var t = e.target;\n      if (!t || t.nodeType !== 1) return;\n      owned(t).forEach(light);\n    }, true);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 segway morph V10 \"full-frame + gap-close\"\n   (designer-approved 2026-08-28) + news morph + journey rail.\n\n   The segway needs NO GSAP: the section becomes a tall in-flow slot\n   (100vh + travel) and .segway-frame pins inside it with position:sticky;\n   one scroll fraction drives the morph (type shrinks at centre, wash\n   lightens, gradient develops, rule draws), then the gap-close (the frame\n   shrinks its own height 1:1 with scroll \u2014 which is what extends the pin \u2014\n   until the next section sits at natural padding under the rule), then\n   sticky releases natively. Document height is CONSTANT throughout: no\n   layout tween, no exhale, nothing for iOS momentum to fight.\n\n   Pairs with block 12 in waterlayer-lp.css. GSAP still loads (shared\n   promise) for the news morph + journey timelines; the page now has ZERO\n   ScrollTriggers, so initLayoutRefresh's refresh path never fires.\n   Add this AFTER hyper-motion.js. *\/\n(function () {\n  var GSAP_BASE = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.5\/';\n\n  function loadScript(src, cb) {\n    var s = document.createElement('script');\n    s.src = src;\n    s.onload = cb;\n    document.head.appendChild(s);\n  }\n\n  var gsapReady = null;\n  function withGsap(cb) {\n    if (window.gsap && window.ScrollTrigger) return cb();\n    if (!gsapReady) {\n      gsapReady = new Promise(function (resolve) {\n        function loadST() { loadScript(GSAP_BASE + 'ScrollTrigger.min.js', resolve); }\n        if (window.gsap) loadST();\n        else loadScript(GSAP_BASE + 'gsap.min.js', loadST);\n      });\n    }\n    gsapReady.then(cb);\n  }\n\n  \/* Content loading above a trigger (lazy images \u2014 native OR Elementor's\n     own mechanism \u2014 embeds, late fonts) pushes it down AFTER positions\n     were measured, so first-scroll animations fire at stale positions.\n     A ResizeObserver on body catches EVERY document-height change and\n     re-measures (debounced), whatever caused it.\n\n     Both guards below exist for the same reason: ScrollTrigger.refresh()\n     WRITES the scroll position \u2014 it saves the offset, jumps the document to\n     0 to measure, then restores it \u2014 and a programmatic scroll write during\n     an iOS momentum fling cancels the momentum, so the page stops dead\n     instead of coasting to rest. A refresh is worth that cost only when\n     something a trigger depends on has actually moved, and never while the\n     user is still travelling.\n\n       1. Never refresh mid-scroll. Postpone until scrolling has stopped\n          (isScrolling() clears ~200ms after the last scroll event); a lazy\n          image landing during a fling would otherwise kill that fling.\n       2. Only refresh if a trigger element actually MOVED. \"The body\n          resized\" is far too broad a proxy: the segway scrub animates the\n          band's own height every frame, so the observer kept scheduling a\n          re-measure of the very animation that woke it, landing ~150ms\n          later \u2014 mid-fling. The band's TOP edge never moves (only its\n          bottom rises), and content growing BELOW a trigger cannot affect\n          it either, so comparing trigger tops skips both of those while\n          still catching the case this whole routine exists for: content\n          loading ABOVE a trigger and pushing it down. *\/\n  function initLayoutRefresh() {\n    if (document.documentElement.dataset.layoutRefreshInit) return;\n    document.documentElement.dataset.layoutRefreshInit = '1';\n    if (typeof ResizeObserver === 'undefined') return;\n    withGsap(function () {\n      var t, lastTops;\n\n      \/\/ Document-space top of every registered trigger, as one comparable\n      \/\/ key. Also changes when triggers are added\/removed, so a trigger\n      \/\/ created after this observer starts gets picked up on the next\n      \/\/ resize rather than being missed.\n      function triggerTops() {\n        return ScrollTrigger.getAll().map(function (st) {\n          var el = st.trigger;\n          return el && el.getBoundingClientRect\n            ? Math.round(el.getBoundingClientRect().top + window.scrollY)\n            : '';\n        }).join(',');\n      }\n\n      function schedule() { clearTimeout(t); t = setTimeout(settle, 150); }\n\n      function settle() {\n        if (ScrollTrigger.isScrolling()) { schedule(); return; }  \/\/ guard 1\n        var tops = triggerTops();\n        if (tops === lastTops) return;                            \/\/ guard 2\n        lastTops = tops;\n        ScrollTrigger.refresh();\n      }\n\n      lastTops = triggerTops();\n      new ResizeObserver(schedule).observe(document.body);\n    });\n  }\n\n  function initNewsMorph() {\n    var sec = document.querySelector('.elementor-element-8b600c8');\n    if (!sec || sec.dataset.newsMorphInit) return;\n    sec.dataset.newsMorphInit = '1';\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; \/\/ CSS shows finished state\n\n    withGsap(function () {\n      gsap.registerPlugin(ScrollTrigger);\n      \/* the display heading is a CLASSIC widget (8bbc1c2 \u2014 rebuilt to hold\n         the inline .mbr span, which atomic headings can't), so the classic\n         .elementor-heading-title shape is part of the morph set *\/\n      var heads = sec.querySelectorAll('h2.e-heading-base, h3.e-heading-base, .elementor-widget-heading .elementor-heading-title');\n      \/* fromTo with explicit endpoints so the scroll-back reversal is\n         unconditional (a from captured mid-state would tween white->white).\n         TRIGGERED BY IntersectionObserver, NOT ScrollTrigger positions:\n         the lazy-loading page grows by ~2000px under ScrollTrigger while\n         the user scrolls, and the debounced refresh never reliably caught\n         up \u2014 cached start positions went stale and the morph fired ~2\n         screens early, finishing before the section was ever visible. IO\n         reads live geometry, so it cannot go stale. rootMargin -45% at the\n         bottom reproduces the old 'top 55%' trigger line. *\/\n      var tl = gsap.timeline({ paused: true });\n      tl.fromTo(sec, { backgroundColor: '#153b69' },\n          { backgroundColor: '#fffcf9', duration: 0.8, ease: 'power2.inOut' }, 0)\n        .fromTo(heads, { color: '#ffffff' },\n          { color: '#2a1b5c', duration: 0.8, ease: 'power2.inOut' }, 0)\n        .fromTo(sec, { '--news-dot': 'rgba(255,255,255,0.5)', '--news-dot-active': '#ffffff' },\n          { '--news-dot': '#dbdbdb', '--news-dot-active': '#6b6b6b', duration: 0.8, ease: 'power2.inOut' }, 0);\n\n      new IntersectionObserver(function (entries) {\n        var e = entries[0];\n        if (e.isIntersecting) tl.play();\n        \/* reverse ONLY on leave-back (section dropping below the trigger\n           line while scrolling up) \u2014 leaving upward keeps the landed state *\/\n        else if (e.boundingClientRect.top > 0) tl.reverse();\n      }, { rootMargin: '0px 0px -45% 0px', threshold: 0 }).observe(sec);\n    });\n  }\n\n  \/* Segway V10.1. Three phases off one scroll fraction p = -secTop \/ T:\n       morph      p in [0, ~mS] \u2014 the authored segue (its tail deliberately\n                                  overlaps the first ~100px of the close so\n                                  the rule lands as content is already\n                                  rising \u2014 no dead scroll between them);\n       gap-close  p in (mS, 1]  \u2014 NO JS AT ALL: the frame is hEnd tall from\n                                  the start, so sticky itself holds it at\n                                  top:0 until the section bottom reaches\n                                  hEnd, and the backdrop (absolute inset:0\n                                  on the SECTION) has its bottom edge glued\n                                  to the section bottom by layout;\n       release    p = 1         \u2014 sticky lets go on its own.\n     V10 shipped the close as per-frame height writes from this rAF loop \u2014\n     but sticky is resolved by the browser DURING scroll, before rAF, so\n     every tick pushed the frame up against the stale height and the rAF\n     snapped it back: visible heading jitter. Nothing the loop writes now\n     affects sticky geometry (transform\/fill\/opacity only), so the pin is\n     native and jitter is impossible by construction. Resize re-measures\n     everything, debounced. *\/\n  function init() {\n    var sec = document.querySelector('.segway-animation');\n    if (!sec || sec.dataset.segwayInit) return; \/\/ double-paste guard\n    sec.dataset.segwayInit = '1';\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; \/\/ CSS shows the static compact divider\n\n    var h2 = sec.querySelector('h2');\n    if (!h2) return;\n\n    var RULE_GAP = 40;  \/\/ heading bottom -> rule\n    var PAD = 24;       \/\/ rule -> incoming section (the \"natural padding\")\n\n    \/* Two layers, split by WHO moves them:\n       - .segway-backdrop: absolute inset:0 on the SECTION \u2014 carries the\n         authored gradient + the paper wash. Its bottom edge IS the section\n         bottom, so during the gap-close it rises 1:1 with the incoming\n         content, computed by layout, never by us.\n       - .segway-frame: the sticky element \u2014 transparent, hEnd tall from\n         the start, holds only the type and the rule. Its height never\n         changes between resizes, so sticky is never fighting a stale\n         value (the V10 jitter).\n       Read the background BEFORE the segway-ready gate repaints the\n       section. *\/\n    var secCs = getComputedStyle(sec);\n    var backdrop = document.createElement('div');\n    backdrop.className = 'segway-backdrop';\n    backdrop.style.background = secCs.backgroundImage !== 'none'\n      ? secCs.backgroundImage : secCs.backgroundColor;\n    var wash = document.createElement('div');\n    wash.className = 'segway-wash';\n    backdrop.appendChild(wash);\n    var frame = document.createElement('div');\n    frame.className = 'segway-frame';\n    while (sec.firstChild) frame.appendChild(sec.firstChild);\n    var rule = document.createElement('div');\n    rule.className = 'segway-rule';\n    frame.appendChild(rule);\n    sec.appendChild(backdrop);\n    sec.appendChild(frame);\n\n    \/\/ Gate the CSS: tall transparent section, absolute h2, armed gradient clip.\n    document.documentElement.classList.add('segway-ready');\n\n    var M = {};\n    function measure() {\n      M.vh = window.innerHeight;\n      var secCs2 = getComputedStyle(sec);\n      var endPx = parseFloat(secCs2.getPropertyValue('--segway-end')) || 64;\n      \/* morph scrub length in viewports \u2014 a breakpoint value like\n         --segway-end (phones flick through far more px per gesture, so the\n         same 2.2 screens that pace well on desktop reads as \"too much\n         scrolling\" on mobile); re-read on every resize like the rest *\/\n      var travel = parseFloat(secCs2.getPropertyValue('--segway-travel')) || 2.2;\n      M.ratio = endPx \/ parseFloat(getComputedStyle(h2).fontSize);\n      M.th = h2.offsetHeight;              \/\/ natural title height (offsetHeight ignores transforms)\n      M.D = Math.round(travel * M.vh);     \/\/ morph travel\n      M.hEnd = Math.round(M.vh \/ 2 + (M.th * M.ratio) \/ 2 + RULE_GAP + PAD);\n      M.T = M.D + (M.vh - M.hEnd);         \/\/ + the gap-close travel\n      sec.style.setProperty('height', (M.vh + M.D) + 'px', 'important');\n      \/* constant per viewport size \u2014 this is what makes the pin native:\n         sticky holds the frame at top:0 exactly until secBottom = hEnd *\/\n      frame.style.height = M.hEnd + 'px';\n    }\n\n    function clamp01(v) { return v < 0 ? 0 : v > 1 ? 1 : v; }\n    function seg(p, a, b) { return clamp01((p - a) \/ (b - a)); }\n    function smooth(v) { return v * v * (3 - 2 * v); }\n\n    \/* fill cover over the armed gradient clip: white -> ink -> transparent\n       (the type is never white-on-white against the lightening wash) *\/\n    function fill(f) {\n      var c;\n      if (f < 0.5) {\n        var u = f \/ 0.5;\n        c = 'rgb(' + Math.round(255 - 213 * u) + ',' + Math.round(255 - 228 * u) + ',' + Math.round(255 - 163 * u) + ')';\n      } else {\n        c = 'rgba(42,27,92,' + (1 - (f - 0.5) \/ 0.5).toFixed(3) + ')';\n      }\n      h2.style.webkitTextFillColor = c;\n    }\n\n    var last = -1;\n    function render(p) {\n      if (p === last) return;\n      last = p;\n      \/* the morph window runs ~100px past the start of the close, so its\n         tail (the rule landing) plays while the content is already rising\n         into view \u2014 the dead scroll the designer flagged is gone *\/\n      var mEnd = (M.D + 100) \/ M.T;\n      var q = seg(p, 0, mEnd);             \/\/ the morph, in its own window\n      var t = smooth(seg(q, 0.05, 0.68));  \/\/ shrink at centre\n      var g = smooth(seg(q, 0.28, 0.72));  \/\/ gradient -> paper\n      var rl = smooth(seg(q, 0.74, 0.98)); \/\/ rule draw \u2014 done as content arrives\n\n      h2.style.transform = 'translate3d(0,' + ((M.vh - M.th) \/ 2).toFixed(1) +\n        'px,0) scale(' + (1 + (M.ratio - 1) * t).toFixed(4) + ')';\n      fill(seg(q, 0.32, 0.82));\n      wash.style.opacity = g.toFixed(3);\n\n      rule.style.opacity = rl.toFixed(3);\n      rule.style.transform = 'translate3d(-50%,' +\n        (M.vh \/ 2 + (M.th * M.ratio) \/ 2 + RULE_GAP).toFixed(1) +\n        'px,0) scaleX(' + rl.toFixed(4) + ')';\n    }\n\n    var raf = 0;\n    function tick() {\n      raf = requestAnimationFrame(tick);\n      render(clamp01(-sec.getBoundingClientRect().top \/ M.T));\n    }\n    new IntersectionObserver(function (entries) {\n      if (entries[0].isIntersecting) { if (!raf) tick(); }\n      else if (raf) { cancelAnimationFrame(raf); raf = 0; }\n    }, { rootMargin: '100% 0px 100% 0px' }).observe(sec);\n\n    var rt;\n    window.addEventListener('resize', function () {\n      clearTimeout(rt);\n      rt = setTimeout(function () { measure(); last = -1; }, 150);\n    });\n\n    measure();\n    render(clamp01(-sec.getBoundingClientRect().top \/ M.T));\n  }\n\n  function initJourney() {\n    var grid = document.querySelector('.journey-grid');\n    if (!grid || grid.dataset.journeyInit) return;\n    grid.dataset.journeyInit = '1';\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; \/\/ CSS default shows the finished rail\n\n    withGsap(function () {\n      gsap.registerPlugin(ScrollTrigger);\n      var cols = grid.querySelectorAll(':scope > .e-div-block-base');\n      if (!cols.length) return;\n\n      var STEP = 0.38; \/\/ line-segment duration; also the per-column offset,\n                       \/\/ so each dot pops exactly as the previous line lands\n\n      \/* Explicit fromTo endpoints \u2014 same rationale as the news morph.\n         And the same IO trigger swap: ScrollTrigger's cached start went\n         ~2 screens stale on the lazy-growing page, so the cascade played\n         while the rail was still far below the fold \u2014 reading as \"the\n         animation is gone\". IO fires on live geometry when the grid\n         actually crosses the old 'top 75%' line. *\/\n      var tl = gsap.timeline({ paused: true });\n\n      new IntersectionObserver(function (entries) {\n        var e = entries[0];\n        if (e.isIntersecting) tl.play();\n        else if (e.boundingClientRect.top > 0) tl.reverse();\n      }, { rootMargin: '0px 0px -25% 0px', threshold: 0 }).observe(grid);\n\n      cols.forEach(function (col, i) {\n        var at = i * STEP;\n        var icon = col.querySelector('.e-svg-base');\n        var texts = col.querySelectorAll('.elementor-widget-heading, p');\n\n        \/\/ pre-states applied at init (not at play), so nothing flashes\n        gsap.set(col, { '--jl': 0 });\n        if (icon) gsap.set(icon, { scale: 0, opacity: 0 });\n        if (texts.length) gsap.set(texts, { opacity: 0, y: 14 });\n\n        if (icon) tl.fromTo(icon, { scale: 0, opacity: 0 },\n          { scale: 1, opacity: 1, duration: 0.32, ease: 'back.out(2)', immediateRender: false }, at);\n        tl.fromTo(col, { '--jl': 0 }, { '--jl': 1, duration: STEP, ease: 'none', immediateRender: false }, at);\n        if (texts.length) tl.fromTo(texts, { opacity: 0, y: 14 },\n          { opacity: 1, y: 0, duration: 0.4, ease: 'power2.out', stagger: 0.07, immediateRender: false }, at + 0.1);\n      });\n    });\n  }\n\n  function boot() {\n    init();\n    initNewsMorph();\n    initJourney();\n    initLayoutRefresh();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 carousel drop-ins (wl-stories \/ wl-news).\n   Markup lives in HTML widgets (ai-waterlayer-lp-stories-carousel.html,\n   ai-waterlayer-lp-news-carousel.html); styles in block 04\/06 of the head\n   sheet. ALL motion is the browser's native scroll (snap points + smooth\n   scrollTo) \u2014 this script only:\n     - builds one dot per DISTINCT REACHABLE scroll position, not per card:\n       near the end of the track several cards' start-alignments clamp to\n       the same max scroll (a 4-card news row showing 3-up has just two\n       positions, so two dots), exactly matching where a swipe can land,\n     - scrolls the track when a dot is clicked,\n     - hides the dots whenever the track can't actually scroll (stacked\n       mobile news, or any card set that fits), and\n     - flips .wl-static on when EVERY card could fit on screen at once\n       (~1700px+ viewports for the news): the bleed retires and the row\n       sits INSIDE the content box, cards flexing down to fill it 4-up\n       (block 04 handles the layout side).\n   Re-measures on window resize (not just the track's ResizeObserver \u2014 the\n   track content box pins at Elementor's 1276px cap, so viewport changes\n   above ~1360px never resize it) and rebuilds the dots when the position\n   count changes. Reduced motion swaps smooth scrolling for instant jumps;\n   nothing else changes \u2014 a scroller is a scroller. *\/\n(function () {\n  function initOne(root) {\n    if (root.dataset.wlInit) return;\n    root.dataset.wlInit = '1';\n    var track = root.querySelector('.wl-track');\n    var dotsWrap = root.querySelector('.wl-dots');\n    if (!track || !dotsWrap) return;\n    var cards = Array.prototype.slice.call(track.children);\n    if (cards.length < 2) { dotsWrap.hidden = true; return; }\n    var reduce = window.matchMedia('(prefers-reduced-motion: reduce)');\n    var targets = [];\n    var dots = [];\n    var active = -1;\n\n    function padLeft() { return parseFloat(getComputedStyle(track).paddingLeft) || 0; }\n\n    function snapTargets() {\n      var pl = padLeft();\n      var max = track.scrollWidth - track.clientWidth;\n      var ts = [];\n      cards.forEach(function (c) {\n        var t = Math.max(0, Math.min(c.offsetLeft - pl, max));\n        if (!ts.length || t - ts[ts.length - 1] > 2) ts.push(t);\n      });\n      return ts;\n    }\n\n    function buildDots() {\n      dotsWrap.textContent = '';\n      active = -1;\n      dots = targets.map(function (t, i) {\n        var b = document.createElement('button');\n        b.type = 'button';\n        b.className = 'wl-dot';\n        b.setAttribute('aria-label', 'Go to position ' + (i + 1) + ' of ' + targets.length);\n        b.addEventListener('click', function () {\n          setActive(i); \/\/ instant feedback; the scroll listener re-confirms\n          track.scrollTo({ left: t, behavior: reduce.matches ? 'auto' : 'smooth' });\n        });\n        dotsWrap.appendChild(b);\n        return b;\n      });\n    }\n\n    function setActive(i) {\n      if (i === active) return;\n      active = i;\n      dots.forEach(function (d, j) {\n        if (j === i) d.setAttribute('aria-current', 'true');\n        else d.removeAttribute('aria-current');\n      });\n    }\n\n    function update() {\n      if (!targets.length) return;\n      var x = track.scrollLeft, best = 0, bestD = Infinity;\n      targets.forEach(function (t, i) {\n        var d = Math.abs(t - x);\n        if (d < bestD) { bestD = d; best = i; }\n      });\n      setActive(best);\n    }\n\n    function measure() {\n      \/* the fits check needs the cards' NATURAL span, so drop the static\n         layout before measuring, then re-decide. Horizontal (grid) tracks\n         only \u2014 the stacked mobile news column never goes static. *\/\n      var fits = false;\n      root.classList.remove('wl-static');\n      if (getComputedStyle(track).display === 'grid') {\n        var last = cards[cards.length - 1];\n        var span = last.offsetLeft + last.offsetWidth - cards[0].offsetLeft;\n        fits = span + 48 <= document.documentElement.clientWidth;\n        root.classList.toggle('wl-static', fits);\n      }\n      var scrollable = !fits && track.scrollWidth > track.clientWidth + 1;\n      if (scrollable) {\n        targets = snapTargets();\n        if (targets.length !== dots.length) buildDots();\n      } else {\n        targets = [];\n      }\n      dotsWrap.hidden = !scrollable;\n      update();\n    }\n\n    var ticking = false;\n    track.addEventListener('scroll', function () {\n      if (ticking) return;\n      ticking = true;\n      requestAnimationFrame(function () { update(); ticking = false; });\n    }, { passive: true });\n\n    var resizeTimer;\n    function queueMeasure() {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(measure, 150);\n    }\n    window.addEventListener('resize', queueMeasure, { passive: true });\n    if (typeof ResizeObserver !== 'undefined') {\n      new ResizeObserver(queueMeasure).observe(track);\n    }\n    measure();\n  }\n\n  function init() {\n    document.querySelectorAll('.wl-carousel').forEach(initOne);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 news mobile fold (\"More News\", Figma 57:39).\n   \u2264767 the news stack shows three cards; this unfolds the rest on tap and\n   retires the button. The collapsed state is authored in the markup\n   (.wl-news-collapsed) and executed by the head sheet, so the fold is\n   correct at first paint and this script only ever has to OPEN it \u2014 there\n   is no flash, and no breakpoint bookkeeping (above 767 the class is inert\n   and the button is display:none, so a rotation needs no resync).\n\n   The motion, rather than a display toggle: the track's height is tweened\n   from its measured collapsed height to its measured open height (both\n   read in the same frame, before anything paints, so the snap-back is\n   invisible), while the freed cards ride in on transform + opacity, which\n   the compositor owns. Height is the only property that costs layout, over\n   a four-item flex column, once per tap \u2014 not a scroll-linked tween, so it\n   can't interact with the segway ScrollTrigger or the momentum-scroll\n   fixes. The card set is below every trigger on the page, so growing it\n   moves no trigger top and the body ResizeObserver in the GSAP block\n   no-ops (its \"did a trigger actually move\" guard).\n\n   The button lives outside .wl-track because the carousel drop-ins script\n   treats every track child as a card. *\/\n(function () {\n  var VISIBLE = 3;   \/* keep in step with the head sheet's nth-child(n+4) *\/\n  var GROW = 460;    \/* ms \u2014 matches the .is-retiring transition *\/\n  var STAGGER = 70;\n  var LEAD = 90;\n  var CARD_IN = 420;\n\n  function init() {\n    var root = document.querySelector('.wl-carousel.wl-news');\n    if (!root || root.dataset.wlFoldInit) return;\n    root.dataset.wlFoldInit = '1';\n\n    var track = root.querySelector('.wl-track');\n    var btn = root.querySelector('.wl-news-more');\n    if (!track || !btn) return;\n\n    var cards = Array.prototype.slice.call(track.children);\n    if (cards.length <= VISIBLE) {\n      \/* nothing folded away \u2014 unfold and drop the affordance *\/\n      root.classList.remove('wl-news-collapsed');\n      btn.hidden = true;\n      return;\n    }\n\n    var done = false;\n\n    function finish(folded) {\n      track.style.transition = '';\n      track.style.height = '';\n      track.classList.remove('is-unfolding');\n      btn.hidden = true;\n      btn.style.height = '';\n      btn.classList.remove('is-retiring');\n      folded.forEach(function (c) {\n        c.classList.remove('is-revealing', 'is-revealed');\n        c.style.transitionDelay = '';\n      });\n      \/* the button the user just pressed is gone \u2014 put focus on the first\n         card that appeared so keyboard\/SR users are not dropped at the top\n         of the document. preventScroll: the card is already in view and a\n         scroll here would fight the tail of the transition. *\/\n      if (folded[0] && folded[0].focus) {\n        try { folded[0].focus({ preventScroll: true }); } catch (e) { folded[0].focus(); }\n      }\n    }\n\n    btn.addEventListener('click', function () {\n      if (done) return;\n      done = true;\n      btn.setAttribute('aria-expanded', 'true');\n\n      var folded = cards.slice(VISIBLE);\n\n      if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n        root.classList.remove('wl-news-collapsed');\n        finish(folded);\n        return;\n      }\n\n      \/* measure, unfold, measure \u2014 all inside one task, so the open layout\n         is never painted before the start height is pinned back on *\/\n      var startH = track.offsetHeight;\n      folded.forEach(function (c) { c.classList.add('is-revealing'); });\n      root.classList.remove('wl-news-collapsed');\n      var endH = track.offsetHeight;\n\n      track.classList.add('is-unfolding');\n      track.style.height = startH + 'px';\n      btn.style.height = btn.offsetHeight + 'px';\n      void track.offsetHeight;                     \/* commit both start states *\/\n\n      requestAnimationFrame(function () {\n        track.style.transition = 'height ' + GROW + 'ms cubic-bezier(0.23, 1, 0.32, 1)';\n        track.style.height = endH + 'px';\n        btn.classList.add('is-retiring');\n        btn.style.height = '0px';\n        folded.forEach(function (c, i) {\n          c.style.transitionDelay = (LEAD + i * STAGGER) + 'ms';\n          c.classList.add('is-revealed');\n        });\n      });\n\n      \/* one timer for the whole thing: transitionend on the track alone\n         would land before the last staggered card has arrived *\/\n      setTimeout(function () {\n        finish(folded);\n      }, Math.max(GROW, LEAD + (folded.length - 1) * STAGGER + CARD_IN) + 60);\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 news card truncation on word boundaries.\n   The CSS in block 06 caps titles at 3 lines and excerpts at 5 so every\n   card's excerpt starts on the same line. -webkit-line-clamp does that\n   cheaply but cuts wherever the line happens to end \u2014 mid-word, giving\n   \"...featuring Prakash Govindan and Steve...\". This trims back to the\n   last whole word instead, then adds the ellipsis itself.\n\n   Measurement runs with the clamp lifted (display:block, no max-height),\n   because a clamped box reports its capped height and the binary search\n   would have nothing to compare against. The clamp stays in the\n   stylesheet as the no-JS fallback: if this never runs, cards still\n   truncate and stay aligned, just less prettily.\n\n   Only where the cards sit side by side (>=1025). Below that they stack,\n   nothing needs aligning, and the full text is restored. *\/\n(function () {\n  var TARGETS = [\n    { sel: '.wl-news-title', lines: 3 },\n    { sel: '.wl-news-excerpt', lines: 5 }\n  ];\n\n  function fit(el, lines) {\n    var full = el.dataset.wlFull || el.textContent.trim();\n    el.dataset.wlFull = full;\n\n    \/\/ matches the stylesheet's breakpoint: below this the cards stack\n    if (!window.matchMedia('(min-width: 1025px)').matches) {\n      if (el.textContent !== full) el.textContent = full;\n      return;\n    }\n\n    el.classList.add('wl-measuring');\n    el.textContent = full;\n\n    var lh = parseFloat(getComputedStyle(el).lineHeight);\n    if (!lh) { el.classList.remove('wl-measuring'); return; }\n    \/* Count LINES rather than compare pixel heights. Line boxes round to\n       whole pixels, so a legitimately 3-line block can measure 84px\n       against an 82.5px budget and get trimmed a line early \u2014 which is\n       exactly what a pixel comparison did here. *\/\n    var fits = function () { return Math.round(el.scrollHeight \/ lh) <= lines; };\n\n    if (!fits()) {\n      var words = full.split(\/\\s+\/);\n      var lo = 1, hi = words.length;\n      \/\/ largest word count whose text (plus the ellipsis) still fits\n      while (lo < hi) {\n        var mid = Math.ceil((lo + hi) \/ 2);\n        el.textContent = words.slice(0, mid).join(' ') + '\\u2026';\n        if (fits()) lo = mid; else hi = mid - 1;\n      }\n      \/\/ drop any trailing punctuation the cut left dangling before the dots\n      el.textContent = words.slice(0, lo).join(' ').replace(\/[\\s,;:.\\u2013\\u2014-]+$\/, '') + '\\u2026';\n    }\n\n    el.classList.remove('wl-measuring');\n  }\n\n  function run() {\n    TARGETS.forEach(function (t) {\n      document.querySelectorAll(t.sel).forEach(function (el) { fit(el, t.lines); });\n    });\n  }\n\n  function init() {\n    run();\n    \/\/ late webfont swap changes metrics, so the fitted length changes too\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(run);\n    var timer;\n    window.addEventListener('resize', function () {\n      clearTimeout(timer);\n      timer = setTimeout(run, 150);\n    }, { passive: true });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 \"Speak with an expert\" modal.\n   Markup: ai-waterlayer-lp-expert-modal.html (an Elementor HTML widget).\n   Styles: block 20 of the head sheet.\n\n   This script only ever toggles VISIBILITY. The dialog and the HubSpot\n   form inside it are built once on page load and stay in the DOM \u2014 the\n   form is wired up at create time and goes flaky if it is built on a\n   trigger or parked in a display:none container.\n\n   The trigger is the footer's outline button, which is a real link to\n   \/contact\/. That is deliberate: preventDefault only happens once this\n   script is running, so with no JS the button still goes somewhere\n   useful instead of doing nothing. *\/\n(function () {\n  var TRIGGERS = '.elementor-element-f8b4cc0 .btn-outline.e-button-base, [data-wl-modal=\"expert\"]';\n  var FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), ' +\n                  'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n  function init() {\n    var modal = document.getElementById('wl-expert-modal');\n    if (!modal || modal.dataset.wlInit) return;\n    modal.dataset.wlInit = '1';\n\n    \/* Reparent to <body>. The widget sits inside the footer, and the\n       entrance animations leave their elements on translate3d(0,0,0) \u2014\n       a transform that is not `none` still establishes a containing block\n       for position:fixed, which would trap this overlay inside the footer\n       instead of the viewport. Moving it early also means HubSpot's\n       `target` lookup (which runs later, after its script loads) resolves\n       to the element in its final home. *\/\n    if (modal.parentNode !== document.body) document.body.appendChild(modal);\n\n    var panel = modal.querySelector('.wl-modal-panel');\n    var closeBtn = modal.querySelector('.wl-modal-close');\n    var opener = null;\n\n    function lockScroll(on) {\n      var root = document.documentElement;\n      if (on) {\n        \/\/ compensate for the scrollbar the lock removes, or the page shifts\n        var gap = window.innerWidth - root.clientWidth;\n        if (gap > 0) root.style.paddingRight = gap + 'px';\n        root.classList.add('wl-modal-open');\n      } else {\n        root.classList.remove('wl-modal-open');\n        root.style.removeProperty('padding-right');\n      }\n    }\n\n    function open(trigger) {\n      if (modal.classList.contains('is-open')) return;\n      opener = trigger || null;\n      lockScroll(true);\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      \/* Focus the PANEL, not the close button and not the first field:\n         it moves focus into the dialog for screen readers and for Tab\n         order, without painting a ring on the X or scrolling a long form\n         to its first input. *\/\n      if (panel) panel.focus({ preventScroll: true });\n    }\n\n    function close() {\n      if (!modal.classList.contains('is-open')) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      lockScroll(false);\n      if (opener && document.contains(opener)) opener.focus({ preventScroll: true });\n      opener = null;\n    }\n\n    document.addEventListener('click', function (e) {\n      var trigger = e.target.closest && e.target.closest(TRIGGERS);\n      if (trigger) { e.preventDefault(); open(trigger); return; }\n      if (modal.classList.contains('is-open') && e.target.closest('[data-wl-close]')) {\n        e.preventDefault();\n        close();\n      }\n    });\n\n    document.addEventListener('keydown', function (e) {\n      if (!modal.classList.contains('is-open')) return;\n\n      if (e.key === 'Escape') { close(); return; }\n\n      if (e.key !== 'Tab') return;\n\n      \/* HubSpot renders this form inside an IFRAME, and its fields are\n         therefore invisible to querySelectorAll. Trapping on what we can\n         see would leave the close button as the only focusable element\n         and Tab would never reach the form at all \u2014 worse than no trap.\n         So when there is an iframe, hand focus back to the browser. *\/\n      if (panel.querySelector('iframe')) return;\n\n      \/* Otherwise keep Tab inside the dialog. Queried live on every press\n         because the form's own fields are what is being trapped, and they\n         change as it validates. *\/\n      var items = Array.prototype.filter.call(\n        panel.querySelectorAll(FOCUSABLE),\n        function (el) { return el.offsetWidth || el.offsetHeight || el.getClientRects().length; }\n      );\n      if (!items.length) return;\n      var first = items[0], last = items[items.length - 1];\n      if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n      else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<script>\n\/* Gradiant AI Economy LP \u2014 stories drag-to-scroll (desktop mouse only).\n   Styles: block 21 of the head sheet.\n\n   The track is already a native scroller with mandatory snap, so this\n   does not implement a carousel: it moves scrollLeft while the mouse is\n   down and lets the browser own the scrolling and the landing. The dots\n   need no wiring \u2014 they already sync off the track's scroll event.\n\n   MOUSE ONLY, and that is the whole safety story. Touch and pen keep the\n   browser's native scrolling, which has real momentum and snap and\n   already feels right on mobile; intercepting those pointers would swap\n   it for a hand-rolled imitation and make phones worse to fix a mouse\n   problem. A desktop breakpoint would not be enough either \u2014 touch\n   laptops and tablets in landscape would fall through it \u2014 so the test is\n   on the pointer itself. *\/\n(function () {\n  var THRESHOLD = 4;    \/\/ px of travel before a press counts as a drag\n  var FLICK     = 0.35; \/\/ px\/ms of pointer speed that counts as a flick\n  var SETTLE_MS = 520;  \/\/ fallback when scrollend is unsupported\n\n  function setup(track) {\n    if (track.dataset.wlDrag) return;\n    track.dataset.wlDrag = '1';\n\n    var reduce = window.matchMedia('(prefers-reduced-motion: reduce)');\n    var pid = null, startX = 0, startLeft = 0, moved = false;\n    var samples = [], token = 0;\n\n    \/\/ the reachable scroll positions, same derivation the dots use\n    function targets() {\n      var pl = parseFloat(getComputedStyle(track).paddingLeft) || 0;\n      var max = track.scrollWidth - track.clientWidth;\n      var out = [];\n      Array.prototype.forEach.call(track.children, function (c) {\n        var t = Math.max(0, Math.min(c.offsetLeft - pl, max));\n        if (!out.length || t - out[out.length - 1] > 2) out.push(t);\n      });\n      return out;\n    }\n\n    function endDrag(e) {\n      if (pid === null || (e && e.pointerId !== pid)) return;\n      var dragged = moved;\n      try { if (track.hasPointerCapture(pid)) track.releasePointerCapture(pid); } catch (err) {}\n      pid = null;\n      moved = false;\n      if (!dragged) { track.classList.remove('is-dragging'); return; }\n\n      \/* Velocity over the last few samples, in px\/ms of POINTER travel.\n         Negative means the pointer went left, which advances the row. *\/\n      var v = 0;\n      if (samples.length > 1) {\n        var a = samples[0], b = samples[samples.length - 1];\n        var dt = b.t - a.t;\n        if (dt > 0) v = (b.x - a.x) \/ dt;\n      }\n\n      var list = targets();\n      if (!list.length) { track.classList.remove('is-dragging'); return; }\n\n      function nearest(x) {\n        var idx = 0, d = Infinity;\n        list.forEach(function (t, i) {\n          var dd = Math.abs(t - x);\n          if (dd < d) { d = dd; idx = i; }\n        });\n        return idx;\n      }\n\n      \/* Two ways to land, because distance alone feels broken here: a card\n         is a full viewport wide, so anything short of ~640px of travel\n         would spring back \u2014 including a fast, obviously deliberate flick.\n         So a flick advances exactly one card from wherever the drag began,\n         regardless of how far it got, and only a slow drag is judged on\n         distance. This is the difference between \"works\" and \"feels right\". *\/\n      var idx = Math.abs(v) > FLICK\n        ? nearest(startLeft) + (v < 0 ? 1 : -1)\n        : nearest(track.scrollLeft);\n\n      var best = list[Math.max(0, Math.min(idx, list.length - 1))];\n\n      var mine = ++token;\n      \/\/ explicit behavior beats any scroll-behavior on the element\n      track.scrollTo({ left: best, behavior: reduce.matches ? 'auto' : 'smooth' });\n\n      \/* Snap stays OFF until the settle lands. Restoring it the instant\n         the button lifts would let mandatory snap yank the track to the\n         NEAREST point \u2014 visibly undoing a flick before the smooth scroll\n         to the intended card has even started. *\/\n      function restore() {\n        if (mine !== token) return; \/\/ a newer drag owns the track now\n        track.classList.remove('is-dragging');\n        track.removeEventListener('scrollend', restore);\n      }\n      if ('onscrollend' in track) track.addEventListener('scrollend', restore, { once: true });\n      setTimeout(restore, SETTLE_MS);\n    }\n\n    track.addEventListener('pointerdown', function (e) {\n      if (e.pointerType !== 'mouse' || e.button !== 0) return;\n      if (e.target.closest('a, button, input, select, textarea, [contenteditable]')) return;\n      pid = e.pointerId;\n      startX = e.clientX;\n      startLeft = track.scrollLeft;\n      moved = false;\n      samples = [{ t: e.timeStamp, x: e.clientX }];\n    });\n\n    track.addEventListener('pointermove', function (e) {\n      if (e.pointerId !== pid) return;\n      var dx = e.clientX - startX;\n      if (!moved) {\n        if (Math.abs(dx) < THRESHOLD) return;\n        moved = true;\n        track.classList.add('is-dragging');\n        \/\/ a selection begun in those first few px would persist under the\n        \/\/ drag; user-select:none only stops it growing\n        var sel = window.getSelection && window.getSelection();\n        if (sel && sel.removeAllRanges) sel.removeAllRanges();\n        try { track.setPointerCapture(pid); } catch (err) {}\n      }\n      \/* One property write per event and no layout reads \u2014 everything\n         needed was cached on pointerdown. This is the same code path a\n         trackpad swipe already takes, so it adds no paint cost. *\/\n      track.scrollLeft = startLeft - dx;\n      samples.push({ t: e.timeStamp, x: e.clientX });\n      if (samples.length > 5) samples.shift();\n      e.preventDefault();\n    });\n\n    track.addEventListener('pointerup', endDrag);\n    track.addEventListener('pointercancel', endDrag);\n\n    track.addEventListener('dragstart', function (e) {\n      if (moved || track.classList.contains('is-dragging')) e.preventDefault();\n    });\n  }\n\n  function init() {\n    document.querySelectorAll('.wl-stories .wl-track').forEach(setup);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n<!-- Start of HubSpot Embed Code -->\n<script type=\"text\/javascript\" id=\"hs-script-loader\" async defer src=\"\/\/js.hs-scripts.com\/23884196.js\"><\/script>\n<!-- End of HubSpot Embed Code -->\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/footer>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>THE WATER LAYER OF THE AI ECONOMY The AI economy runs on Gradiant Water. Every layer of the AI economy runs on water. The energy that powers it. The chips it computes on. The data centers it lives in. The factories it transforms. Gradiant built and operates the water layer for all of them. One [&hellip;]<\/p>\n","protected":false},"author":50,"featured_media":16411,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-15729","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gradiant I The Water Layer of the AI Economy<\/title>\n<meta name=\"description\" content=\"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gradiant I The Water Layer of the AI Economy\" \/>\n<meta property=\"og:description\" content=\"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gradiant.com\/es\/water-layer-of-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"Gradiant\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-04T08:04:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1080\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Gradiant I The Water Layer of the AI Economy\" \/>\n<meta name=\"twitter:description\" content=\"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg\" \/>\n<meta name=\"twitter:site\" content=\"@Gradiant_Corp\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/\",\"url\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/\",\"name\":\"Gradiant I The Water Layer of the AI Economy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gradiant.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gradiant.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/water-layer-meta-image.jpg\",\"datePublished\":\"2026-08-25T11:59:41+00:00\",\"dateModified\":\"2026-09-04T08:04:30+00:00\",\"description\":\"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gradiant.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/water-layer-meta-image.jpg\",\"contentUrl\":\"https:\\\/\\\/gradiant.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/water-layer-meta-image.jpg\",\"width\":1080,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gradiant.com\\\/water-layer-of-ai\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Gradiant\",\"item\":\"https:\\\/\\\/gradiant.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Water Layer of the AI Economy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gradiant.com\\\/#website\",\"url\":\"https:\\\/\\\/gradiant.com\\\/\",\"name\":\"Gradiant\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/gradiant.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gradiant.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Corporation\",\"@id\":\"https:\\\/\\\/www.gradiant.com\\\/#organization\",\"name\":\"Gradiant\",\"legalName\":\"Gradiant Corporation\",\"url\":\"https:\\\/\\\/www.gradiant.com\\\/\",\"description\":\"Gradiant is a global water technology company that designs, builds, and operates advanced water and wastewater treatment systems for industrial clients. An MIT spinout founded in 2013, Gradiant helps companies reduce freshwater consumption, reclaim wastewater, and recover valuable resources through proprietary technologies achieving up to 99% water recovery.\",\"slogan\":\"Ensuring water for generations to come\",\"foundingDate\":\"2013\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Massachusetts Institute of Technology\",\"address\":{\"@type\":\"PostalAddress\",\"addressLocality\":\"Cambridge\",\"addressRegion\":\"MA\",\"addressCountry\":\"US\"}},\"founder\":[{\"@type\":\"Person\",\"name\":\"Anurag Bajpayee\",\"jobTitle\":\"Chief Executive Officer\"},{\"@type\":\"Person\",\"name\":\"Prakash Govindan\",\"jobTitle\":\"Chief Operating Officer\"}],\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":1000,\"maxValue\":1500},\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"130 New Boston St, Suite 200\",\"addressLocality\":\"Woburn\",\"addressRegion\":\"MA\",\"postalCode\":\"01801\",\"addressCountry\":\"US\"},\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.gradiant.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.gradiant.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Gradiant.svg\",\"contentUrl\":\"https:\\\/\\\/www.gradiant.com\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Gradiant.svg\",\"width\":117,\"height\":26,\"caption\":\"Gradiant\"},\"image\":{\"@id\":\"https:\\\/\\\/www.gradiant.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/Gradiant_Corp\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/gradiant-corporation\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@gradiantcorp\"],\"subOrganization\":[{\"@type\":\"Organization\",\"name\":\"alkaLi\",\"url\":\"https:\\\/\\\/alkali3.com\\\/\",\"description\":\"Gradiant spin-out company specializing in direct lithium extraction from produced water and brines using proprietary EC\u00b2 technology.\"},{\"@type\":\"Organization\",\"name\":\"Gradiant Energy Services\",\"description\":\"Gradiant subsidiary providing produced water treatment solutions for oil and gas operations.\"}],\"areaServed\":{\"@type\":\"Place\",\"name\":\"Worldwide\"},\"knowsAbout\":[\"Industrial water treatment\",\"Wastewater treatment\",\"Water recycling\",\"Desalination\",\"PFAS removal\",\"Ultrapure water\",\"Zero liquid discharge\",\"Direct lithium extraction\",\"Semiconductor water treatment\",\"Produced water treatment\"],\"award\":[\"Global Water Intelligence Water Technology Company of the Year 2024\",\"Global Water Intelligence Water Technology Company of the Year 2022\",\"TIME Best Inventions 2024\",\"Gold Edison Award 2025\",\"Global Cleantech 100 2023\"],\"naics\":\"221310\",\"isicV4\":\"3600\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gradiant I The Water Layer of the AI Economy","description":"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"es_ES","og_type":"article","og_title":"Gradiant I The Water Layer of the AI Economy","og_description":"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.","og_url":"https:\/\/gradiant.com\/es\/water-layer-of-ai\/","og_site_name":"Gradiant","article_modified_time":"2026-09-04T08:04:30+00:00","og_image":[{"width":1080,"height":1080,"url":"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_title":"Gradiant I The Water Layer of the AI Economy","twitter_description":"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.","twitter_image":"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg","twitter_site":"@Gradiant_Corp","twitter_misc":{"Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gradiant.com\/water-layer-of-ai\/","url":"https:\/\/gradiant.com\/water-layer-of-ai\/","name":"Gradiant I The Water Layer of the AI Economy","isPartOf":{"@id":"https:\/\/gradiant.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gradiant.com\/water-layer-of-ai\/#primaryimage"},"image":{"@id":"https:\/\/gradiant.com\/water-layer-of-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg","datePublished":"2026-08-25T11:59:41+00:00","dateModified":"2026-09-04T08:04:30+00:00","description":"Gradiant built and operates the water layer for the AI economy. One accountable partner, already embedded with the champions of the AI economy.","breadcrumb":{"@id":"https:\/\/gradiant.com\/water-layer-of-ai\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gradiant.com\/water-layer-of-ai\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/gradiant.com\/water-layer-of-ai\/#primaryimage","url":"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg","contentUrl":"https:\/\/gradiant.com\/wp-content\/uploads\/2026\/09\/water-layer-meta-image.jpg","width":1080,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/gradiant.com\/water-layer-of-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Gradiant","item":"https:\/\/gradiant.com\/"},{"@type":"ListItem","position":2,"name":"The Water Layer of the AI Economy"}]},{"@type":"WebSite","@id":"https:\/\/gradiant.com\/#website","url":"https:\/\/gradiant.com\/","name":"Gradiant","description":"","publisher":{"@id":"https:\/\/gradiant.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gradiant.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Corporation","@id":"https:\/\/www.gradiant.com\/#organization","name":"Gradiant","legalName":"Gradiant Corporation","url":"https:\/\/www.gradiant.com\/","description":"Gradiant is a global water technology company that designs, builds, and operates advanced water and wastewater treatment systems for industrial clients. An MIT spinout founded in 2013, Gradiant helps companies reduce freshwater consumption, reclaim wastewater, and recover valuable resources through proprietary technologies achieving up to 99% water recovery.","slogan":"Ensuring water for generations to come","foundingDate":"2013","foundingLocation":{"@type":"Place","name":"Massachusetts Institute of Technology","address":{"@type":"PostalAddress","addressLocality":"Cambridge","addressRegion":"MA","addressCountry":"US"}},"founder":[{"@type":"Person","name":"Anurag Bajpayee","jobTitle":"Chief Executive Officer"},{"@type":"Person","name":"Prakash Govindan","jobTitle":"Chief Operating Officer"}],"numberOfEmployees":{"@type":"QuantitativeValue","minValue":1000,"maxValue":1500},"address":{"@type":"PostalAddress","streetAddress":"130 New Boston St, Suite 200","addressLocality":"Woburn","addressRegion":"MA","postalCode":"01801","addressCountry":"US"},"logo":{"@type":"ImageObject","@id":"https:\/\/www.gradiant.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.gradiant.com\/wp-content\/uploads\/2023\/01\/Gradiant.svg","contentUrl":"https:\/\/www.gradiant.com\/wp-content\/uploads\/2023\/01\/Gradiant.svg","width":117,"height":26,"caption":"Gradiant"},"image":{"@id":"https:\/\/www.gradiant.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/Gradiant_Corp","https:\/\/www.linkedin.com\/company\/gradiant-corporation\/","https:\/\/www.youtube.com\/@gradiantcorp"],"subOrganization":[{"@type":"Organization","name":"alkaLi","url":"https:\/\/alkali3.com\/","description":"Gradiant spin-out company specializing in direct lithium extraction from produced water and brines using proprietary EC\u00b2 technology."},{"@type":"Organization","name":"Gradiant Energy Services","description":"Gradiant subsidiary providing produced water treatment solutions for oil and gas operations."}],"areaServed":{"@type":"Place","name":"Worldwide"},"knowsAbout":["Industrial water treatment","Wastewater treatment","Water recycling","Desalination","PFAS removal","Ultrapure water","Zero liquid discharge","Direct lithium extraction","Semiconductor water treatment","Produced water treatment"],"award":["Global Water Intelligence Water Technology Company of the Year 2024","Global Water Intelligence Water Technology Company of the Year 2022","TIME Best Inventions 2024","Gold Edison Award 2025","Global Cleantech 100 2023"],"naics":"221310","isicV4":"3600"}]}},"_links":{"self":[{"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/pages\/15729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/users\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/comments?post=15729"}],"version-history":[{"count":250,"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/pages\/15729\/revisions"}],"predecessor-version":[{"id":16468,"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/pages\/15729\/revisions\/16468"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/media\/16411"}],"wp:attachment":[{"href":"https:\/\/gradiant.com\/es\/wp-json\/wp\/v2\/media?parent=15729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}