diff --git a/src/App.vue b/src/App.vue
index 3e51eb0158b7666b5353e4ea0d48bc5194a8d329..b37282dad9b22e06e7ad6a9fb1005e34c5a45f37 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -42,6 +42,8 @@
 /* Fonts */
 @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@200;300;400;500;600;700;800&display=swap');
 $SourceSans: 'Source Sans Pro', sans-serif;
+@import url('https://fonts.googleapis.com/css2?family=Dosis:wght@200..800&family=Inter+Tight:ital,wght@0,100..900;1,100..900&display=swap');
+$Dosis: 'Inter Tight', sans-serif;
 $textcolor: #000000;
 $linkcolor: #d66853;
 
@@ -87,28 +89,29 @@ iframe, video {
 }
 
 body {
-      height: 100%;
-      background-color: white;
-      margin: 0;
-      padding: 0;
-      line-height: 1.35;
-      font-size: 1.9rem;
-      font-weight: 400;
-      -webkit-font-smoothing: antialiased;
-      -moz-osx-font-smoothing: grayscale;
-      width: 100%;
-      @media screen and (max-width: 600px) {
-        font-size: 1.6rem;
-      }
+  height: 100%;
+  background-color: white;
+  margin: 0;
+  padding: 0;
+  line-height: 1.2;
+  font-size: 1.75rem;
+  font-weight: 400;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  width: 100%;
+  @media screen and (max-width: 600px) {
+    font-size: 1.6rem;
   }
+}
 h1{
-  font-size: 6rem;
+  font-size: 9rem;
   font-weight: 700;
-  font-family: $SourceSans;
+  font-family: $Dosis;
   line-height: 1;
+  padding-top: 0.25em;
   text-align: left;
-  //text-shadow: 1px 1px 1px rgba(0,0,0,.8);
-    color: $textcolor;
+  //text-shadow: 2px 2px 2px rgba(0,0,0,.1);
+  color: $textcolor;
   @media screen and (max-width: 600px) {
     font-size: 4.75rem;
   }
@@ -128,10 +131,10 @@ h2{
 }
 h3{
   font-size: 3rem;
-  padding-top: 1em;
+  padding-top: 0.5em;
   padding-bottom: .25em;
-  font-family: $SourceSans;
-  font-weight: 600;
+  font-family: $Dosis;
+  font-weight: 400;
   color: $textcolor;
   @media screen and (max-width: 600px) {
       font-size: 3.2rem;
diff --git a/src/components/VizTitle.vue b/src/components/VizTitle.vue
index f4a734c1be16894e01785b890958a66b48125323..6110669f9fae4be6729d68d122ded1c092f0bb96 100644
--- a/src/components/VizTitle.vue
+++ b/src/components/VizTitle.vue
@@ -1,62 +1,141 @@
 <template>
   <header id="grid-container">
-    <div id="title-container" :class="{ mobile: mobileView }">
+    <div id="image-container">
       <img
+        ref="heroImage"
         id="title-image"
         :class="{ mobile: mobileView }"
         src="@/assets/images/hero_img_cutout_less-stylized_feather.png"
         alt="Social vulnerability and water insecurity"
+        @load="updateSvgDimensions"
       />
+      <img
+        ref="bwHeroImage"
+        id="bw-title-image"
+        :class="{ mobile: mobileView }"
+        src="@/assets/images/hero_img_cutout_less-stylized_feather.png"
+        alt="Social vulnerability and water insecurity (grayscale)"
+      />
+      <!-- Using svg masks with a circle shape to reveal color image where circles are on top of bw -->
+      <svg ref="overlay" id="overlay" xmlns="http://www.w3.org/2000/svg">
+        <defs>
+          <mask id="circleMask">
+            <rect width="100%" height="100%" fill="white" />
+            <circle cx="100" cy="100" r="50" fill="black" />
+            <circle cx="200" cy="150" r="30" fill="black" />
+            <circle cx="300" cy="250" r="90" fill="black" />
+            <circle cx="600" cy="200" r="50" fill="black" />
+            <circle cx="700" cy="550" r="100" fill="black" />
+            <circle cx="800" cy="200" r="70" fill="black" />
+            <circle cx="70" cy="310" r="50" fill="black" />
+            <circle cx="500" cy="450" r="130" fill="black" />
+            <circle cx="420" cy="180" r="40" fill="black" />
+            <circle cx="600" cy="200" r="75" fill="black" />
+            <circle cx="700" cy="350" r="130" fill="black" />
+            <circle cx="800" cy="20" r="110" fill="black" />
+          </mask>
+        </defs>
+      </svg>
+    </div>
+      <div id="text-container">
         <h1>Unequal access to water</h1>
         <h3>
-          How societal factors shape exposure to water-related hazards, likelihood to suffer harm, and ability to cope and recover from losses
+          How societal factors shape vulnerability to water insecurity
         </h3>
-    </div>
+      </div>
   </header>
 </template>
 
 <script setup>
-import { ref } from 'vue';
+import { ref, onMounted, watch } from 'vue';
 import { isMobile } from 'mobile-device-detect';
 
 const mobileView = ref(isMobile);
+const heroImage = ref(null);
+const bwHeroImage = ref(null);
+const overlay = ref(null);
+
+const updateSvgDimensions = () => {
+  if (heroImage.value && bwHeroImage.value && overlay.value) {
+    const { width, height } = heroImage.value.getBoundingClientRect();
+    overlay.value.setAttribute('width', width);
+    overlay.value.setAttribute('height', height);
+    bwHeroImage.value.style.width = `${width}px`;
+    bwHeroImage.value.style.height = `${height}px`;
+    bwHeroImage.value.style.top = '0';
+    bwHeroImage.value.style.left = '0';
+  }
+};
+
+onMounted(() => {
+  updateSvgDimensions();
+  window.addEventListener('resize', updateSvgDimensions);
+});
+
+watch(mobileView, () => {
+  updateSvgDimensions();
+});
 </script>
 
 <style lang="scss" scoped>
-
 #grid-container {
   display: grid;
-  padding: 0px 0;
-  gap: 0px;
-  grid-template-columns: 1fr;
-  grid-template-areas: 
-    "title";
+  grid-template-rows: auto auto;
   width: 100vw;
-  justify-content: center;
   margin: auto;
-  @media screen and (max-width: 600px) {
-    padding: 0 0 20px;
-    grid-template-columns: 100%;
-    grid-template-rows: max-content max-content;
-  }
 }
 
-#title-container  {
-  grid-area: title;
-  text-align: center;
+#image-container {
+  position: relative;
+  width: 100%;
+}
+
+#title-image,
+#bw-title-image {
+  width: 100%;
 }
 
 #title-image {
-  width: 100vw;
-  max-width: 100%;
-  margin: auto;
+  display: block;
+}
+
+#bw-title-image {
+  filter: grayscale(100%);
+  position: absolute;
+  top: 0;
+  left: 0;
+  pointer-events: none; /* Ensure the grayscale image doesn't interfere with other interactions */
+  mask: url(#circleMask); /* Apply the SVG mask */
 }
 
-h1, h3 {
-  margin-left: 50px; 
-  margin-right: 50px; 
-  margin-top: 20px;
-  text-align: left;  
+#overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  pointer-events: none; /* Ensure the SVG overlay doesn't interfere with other interactions */
+}
+
+#text-container {
+  width: 100%;
+  background: rgba(0, 0, 0, 0.95); 
+  color: black; 
+  padding: 20px; 
+  box-sizing: border-box;
+}
+#image-container {
+  color: black; 
+  background: rgba(0, 0, 0, 0.95);
+}
+
+h1 {
+  margin: -20px 20px;
+  color: white;
+  text-align: left; /* Optional: Align text to the left */
+}
+h3 {
+  margin: 20px 20px 0px 20px;
+  color: white;
+  text-align: left; /* Optional: Align text to the left */
 }
 
 </style>