{"id":9,"date":"2026-07-05T17:42:17","date_gmt":"2026-07-05T17:42:17","guid":{"rendered":"https:\/\/ejectwater.com\/?page_id=9"},"modified":"2026-09-04T20:42:25","modified_gmt":"2026-09-04T20:42:25","slug":"eject-water","status":"publish","type":"page","link":"https:\/\/ejectwater.com\/zh\/","title":{"rendered":"\u6392\u6c34"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4becd34 e-con-full e-flex e-con e-parent\" data-id=\"4becd34\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b49ad5a elementor-widget elementor-widget-html\" data-id=\"b49ad5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Syne:wght@600;700;800&amp;family=Inter:wght@400;500;600&amp;display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n\/* =============================================\r\n   RESET\r\n============================================= *\/\r\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\nhtml { scroll-behavior: smooth; }\r\nbody {\r\n  font-family: 'Inter', sans-serif;\r\n  background: #0B1F3A;\r\n  color: #F8FBFF;\r\n  overflow-x: hidden;\r\n  line-height: 1.6;\r\n  -webkit-text-size-adjust: 100%;\r\n}\r\nimg { max-width: 100%; display: block; }\r\na { color: inherit; text-decoration: none; }\r\nbutton { cursor: pointer; border: none; background: none; font-family: inherit; }\r\n\r\n\/* =============================================\r\n   CSS VARIABLES\r\n============================================= *\/\r\n:root {\r\n  --navy:    #0B1F3A;\r\n  --navy2:   #0F2847;\r\n  --cyan:    #00D4FF;\r\n  --cyan2:   #00A8CC;\r\n  --white:   #F8FBFF;\r\n  --gray:    #B0C4D8;\r\n  --amber:   #FFB347;\r\n  --card:    rgba(255,255,255,0.05);\r\n  --border:  rgba(0,212,255,0.18);\r\n  --glow:    0 0 40px rgba(0,212,255,0.25);\r\n\r\n  \/* Spacing scale *\/\r\n  --space-xs:  0.5rem;\r\n  --space-sm:  1rem;\r\n  --space-md:  1.5rem;\r\n  --space-lg:  2.5rem;\r\n  --space-xl:  4rem;\r\n  --space-2xl: 6rem;\r\n\r\n  \/* Section padding \u2014 overridden per breakpoint *\/\r\n  --section-py: 4rem;\r\n\r\n  \/* Container *\/\r\n  --container-px: 1.25rem;\r\n  --container-max: 1200px;\r\n  --container-narrow: 780px;\r\n}\r\n\r\n\/* =============================================\r\n   TYPOGRAPHY \u2014 fluid clamp() for every level\r\n============================================= *\/\r\n.display-xl {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(2rem, 5.5vw, 5rem);\r\n  font-weight: 800;\r\n  line-height: 1.08;\r\n  letter-spacing: -0.025em;\r\n}\r\n.display-lg {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(1.6rem, 3.8vw, 2.8rem);\r\n  font-weight: 700;\r\n  line-height: 1.15;\r\n  letter-spacing: -0.015em;\r\n}\r\n.display-md {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(1.15rem, 2.4vw, 1.65rem);\r\n  font-weight: 600;\r\n  line-height: 1.3;\r\n}\r\n.body-lg  { font-size: clamp(1rem, 1.5vw, 1.125rem); line-height: 1.75; }\r\n.body-md  { font-size: clamp(0.9rem, 1.2vw, 1rem);   line-height: 1.7; }\r\n.body-sm  { font-size: 0.875rem; line-height: 1.6; }\r\n.eyebrow  {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.72rem;\r\n  font-weight: 700;\r\n  letter-spacing: 0.16em;\r\n  text-transform: uppercase;\r\n  color: var(--cyan);\r\n}\r\n\r\n\/* =============================================\r\n   UTILITY\r\n============================================= *\/\r\n.text-cyan   { color: var(--cyan); }\r\n.text-amber  { color: var(--amber); }\r\n.text-gray   { color: var(--gray); }\r\n.text-center { text-align: center; }\r\n\r\n\/* =============================================\r\n   LAYOUT \u2014 container\r\n============================================= *\/\r\n.container {\r\n  width: 100%;\r\n  max-width: var(--container-max);\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  padding-left: var(--container-px);\r\n  padding-right: var(--container-px);\r\n}\r\n.container-narrow {\r\n  width: 100%;\r\n  max-width: var(--container-narrow);\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  padding-left: var(--container-px);\r\n  padding-right: var(--container-px);\r\n}\r\n\r\n\/* =============================================\r\n   SECTIONS\r\n============================================= *\/\r\n.section        { padding: var(--section-py) 0; position: relative; }\r\n.section-alt    { background: var(--navy2); }\r\n\r\n\/* =============================================\r\n   NAVBAR\r\n============================================= *\/\r\n.navbar {\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 200;\r\n  background: rgba(11,31,58,0.94);\r\n  backdrop-filter: blur(14px);\r\n  -webkit-backdrop-filter: blur(14px);\r\n  border-bottom: 1px solid var(--border);\r\n}\r\n.navbar__inner {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  height: 64px;\r\n  padding-left: var(--container-px);\r\n  padding-right: var(--container-px);\r\n  max-width: var(--container-max);\r\n  margin: 0 auto;\r\n  gap: 1rem;\r\n}\r\n.navbar__logo {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 1.15rem;\r\n  font-weight: 800;\r\n  color: var(--white);\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.45rem;\r\n  flex-shrink: 0;\r\n  white-space: nowrap;\r\n}\r\n.navbar__logo-icon {\r\n  width: 30px; height: 30px;\r\n  background: linear-gradient(135deg, var(--cyan), var(--cyan2));\r\n  border-radius: 7px;\r\n  display: flex; align-items: center; justify-content: center;\r\n  font-size: 0.9rem;\r\n  flex-shrink: 0;\r\n}\r\n.navbar__nav {\r\n  display: flex;\r\n  gap: 1.75rem;\r\n  list-style: none;\r\n  align-items: center;\r\n}\r\n.navbar__nav a {\r\n  font-size: 0.875rem;\r\n  font-weight: 500;\r\n  color: var(--gray);\r\n  transition: color 0.2s;\r\n  white-space: nowrap;\r\n}\r\n.navbar__nav a:hover { color: var(--cyan); }\r\n.navbar__cta {\r\n  background: var(--cyan);\r\n  color: var(--navy);\r\n  font-weight: 700;\r\n  font-size: 0.825rem;\r\n  padding: 0.5rem 1.1rem;\r\n  border-radius: 8px;\r\n  transition: all 0.2s;\r\n  white-space: nowrap;\r\n  flex-shrink: 0;\r\n  display: inline-block;\r\n}\r\n.navbar__cta:hover {\r\n  background: #33DDFF;\r\n  transform: translateY(-1px);\r\n  box-shadow: 0 4px 16px rgba(0,212,255,0.35);\r\n}\r\n\r\n\/* Mobile menu toggle *\/\r\n.navbar__hamburger {\r\n  display: none;\r\n  flex-direction: column;\r\n  gap: 5px;\r\n  padding: 6px;\r\n  flex-shrink: 0;\r\n  cursor: pointer;\r\n  background: none;\r\n  border: none;\r\n}\r\n.navbar__hamburger span {\r\n  display: block;\r\n  width: 22px; height: 2px;\r\n  background: var(--gray);\r\n  border-radius: 2px;\r\n  transition: all 0.25s;\r\n}\r\n.navbar__hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }\r\n.navbar__hamburger.open span:nth-child(2) { opacity: 0; }\r\n.navbar__hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }\r\n\r\n\/* Mobile drawer *\/\r\n.navbar__drawer {\r\n  display: none;\r\n  flex-direction: column;\r\n  background: rgba(11,31,58,0.98);\r\n  border-top: 1px solid var(--border);\r\n  padding: 1.25rem var(--container-px);\r\n  gap: 0.25rem;\r\n}\r\n.navbar__drawer.open { display: flex; }\r\n.navbar__drawer a {\r\n  font-size: 1rem;\r\n  font-weight: 500;\r\n  color: var(--gray);\r\n  padding: 0.75rem 0;\r\n  border-bottom: 1px solid rgba(255,255,255,0.05);\r\n  transition: color 0.2s;\r\n}\r\n.navbar__drawer a:last-child { border-bottom: none; }\r\n.navbar__drawer a:hover { color: var(--cyan); }\r\n.navbar__drawer .drawer-cta {\r\n  margin-top: 0.75rem;\r\n  background: var(--cyan);\r\n  color: var(--navy);\r\n  font-weight: 700;\r\n  text-align: center;\r\n  padding: 0.85rem;\r\n  border-radius: 10px;\r\n  font-size: 0.95rem;\r\n}\r\n\r\n\/* =============================================\r\n   HERO\r\n============================================= *\/\r\n.hero {\r\n  padding: clamp(3rem,7vw,6rem) 0 clamp(2rem,4vw,3.5rem);\r\n  position: relative;\r\n  overflow: hidden;\r\n}\r\n.hero__bg {\r\n  position: absolute;\r\n  inset: 0;\r\n  pointer-events: none;\r\n  overflow: hidden;\r\n}\r\n.hero__circle {\r\n  position: absolute;\r\n  border-radius: 50%;\r\n  background: radial-gradient(circle, rgba(0,212,255,0.09) 0%, transparent 70%);\r\n  animation: pulse-circle 4s ease-in-out infinite;\r\n}\r\n.hero__circle:nth-child(1) { width: 55vw; height: 55vw; max-width: 650px; max-height: 650px; top: -30%; right: -15%; }\r\n.hero__circle:nth-child(2) { width: 40vw; height: 40vw; max-width: 450px; max-height: 450px; bottom: -20%; left: -10%; animation-delay: 2s; }\r\n@keyframes pulse-circle {\r\n  0%,100% { opacity:0.55; transform:scale(1); }\r\n  50%      { opacity:1;    transform:scale(1.07); }\r\n}\r\n.hero__inner { position: relative; z-index: 1; }\r\n\r\n.hero__badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 0.45rem;\r\n  background: rgba(0,212,255,0.1);\r\n  border: 1px solid var(--border);\r\n  border-radius: 50px;\r\n  padding: 0.3rem 0.9rem;\r\n  margin-bottom: 1.25rem;\r\n}\r\n.hero__badge-dot {\r\n  width: 7px; height: 7px;\r\n  background: var(--cyan);\r\n  border-radius: 50%;\r\n  animation: blink 1.6s ease-in-out infinite;\r\n  flex-shrink: 0;\r\n}\r\n@keyframes blink { 0%,100%{opacity:1;} 50%{opacity:0.25;} }\r\n\r\n.hero__title span { color: var(--cyan); }\r\n\r\n.hero__subtitle {\r\n  color: var(--gray);\r\n  max-width: 580px;\r\n  margin: 1.1rem auto 0;\r\n}\r\n\r\n\/* Trust strip *\/\r\n.trust-strip {\r\n  display: flex;\r\n  justify-content: center;\r\n  flex-wrap: wrap;\r\n  gap: 0.75rem 1.5rem;\r\n  margin-top: 1.75rem;\r\n  opacity: 0.65;\r\n}\r\n.trust-strip span {\r\n  font-size: 0.8rem;\r\n  color: var(--gray);\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.3rem;\r\n  white-space: nowrap;\r\n}\r\n\r\n\/* =============================================\r\n   DEVICE DETECTION BANNER\r\n============================================= *\/\r\n.detect-banner {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 0.9rem;\r\n  background: rgba(0,212,255,0.07);\r\n  border: 1px solid var(--border);\r\n  border-radius: 16px;\r\n  padding: 0.7rem 1.2rem;\r\n  margin: 0 auto 1.5rem;\r\n  max-width: 100%;\r\n}\r\n.detect-banner__icon {\r\n  font-size: 1.6rem;\r\n  flex-shrink: 0;\r\n}\r\n.detect-banner__text { text-align: left; }\r\n.detect-banner__label {\r\n  font-size: 0.68rem;\r\n  font-weight: 700;\r\n  letter-spacing: 0.1em;\r\n  text-transform: uppercase;\r\n  color: var(--gray);\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.35rem;\r\n}\r\n.detect-banner__dot {\r\n  width: 6px; height: 6px;\r\n  border-radius: 50%;\r\n  background: #4ADE80;\r\n  animation: blink 1.6s ease-in-out infinite;\r\n  flex-shrink: 0;\r\n}\r\n.detect-banner__device {\r\n  font-family: 'Syne', sans-serif;\r\n  font-weight: 700;\r\n  font-size: 0.95rem;\r\n  color: var(--white);\r\n  margin-top: 0.15rem;\r\n}\r\n.detect-banner__freq {\r\n  font-family: 'Syne', sans-serif;\r\n  font-weight: 800;\r\n  color: var(--cyan);\r\n}\r\n\r\n\/* =============================================\r\n   TOOL CARD\r\n============================================= *\/\r\n.tool-card {\r\n  background: rgba(255,255,255,0.04);\r\n  border: 1px solid var(--border);\r\n  border-radius: 22px;\r\n  padding: clamp(1.4rem,4vw,2.5rem) clamp(1rem,3vw,2rem);\r\n  width: 100%;\r\n  max-width: 580px;\r\n  margin: 2.25rem auto 0;\r\n  backdrop-filter: blur(6px);\r\n  box-shadow: var(--glow), inset 0 1px 0 rgba(255,255,255,0.07);\r\n  position: relative;\r\n  overflow: hidden;\r\n  transition: box-shadow 0.4s ease;\r\n}\r\n.tool-card.is-playing {\r\n  box-shadow: 0 0 60px rgba(0,212,255,0.45), inset 0 1px 0 rgba(255,255,255,0.07);\r\n}\r\n.tool-card__shimmer {\r\n  position: absolute;\r\n  top: 0; left: -100%;\r\n  width: 60%; height: 100%;\r\n  background: linear-gradient(90deg,transparent,rgba(0,212,255,0.04),transparent);\r\n  animation: shimmer 3.5s ease-in-out infinite;\r\n  pointer-events: none;\r\n}\r\n@keyframes shimmer { 0%{left:-100%;} 100%{left:200%;} }\r\n\r\n\/* Frequency selector *\/\r\n.freq-selector {\r\n  display: flex;\r\n  gap: 0.45rem;\r\n  justify-content: center;\r\n  flex-wrap: wrap;\r\n  margin-bottom: 1.5rem;\r\n}\r\n.freq-btn {\r\n  padding: 0.45rem 0.9rem;\r\n  border-radius: 50px;\r\n  border: 1px solid var(--border);\r\n  background: transparent;\r\n  color: var(--gray);\r\n  font-size: 0.78rem;\r\n  font-weight: 700;\r\n  font-family: 'Syne', sans-serif;\r\n  transition: all 0.2s;\r\n  cursor: pointer;\r\n  line-height: 1.3;\r\n  text-align: center;\r\n}\r\n.freq-btn small { font-weight: 400; opacity: 0.7; display: block; font-size: 0.68rem; }\r\n.freq-btn:hover { border-color: var(--cyan); color: var(--cyan); }\r\n.freq-btn.active { background: var(--cyan); border-color: var(--cyan); color: var(--navy); }\r\n\r\n\/* Mode selector *\/\r\n.mode-selector {\r\n  display: flex;\r\n  gap: 0.4rem;\r\n  justify-content: center;\r\n  flex-wrap: wrap;\r\n  margin-bottom: 1.5rem;\r\n}\r\n.mode-btn {\r\n  padding: 0.5rem 0.85rem;\r\n  border-radius: 12px;\r\n  border: 1px solid var(--border);\r\n  background: transparent;\r\n  color: var(--gray);\r\n  font-size: 0.74rem;\r\n  font-weight: 700;\r\n  font-family: 'Syne', sans-serif;\r\n  transition: all 0.2s;\r\n  cursor: pointer;\r\n  line-height: 1.3;\r\n  text-align: center;\r\n  flex: 1 1 auto;\r\n  min-width: 90px;\r\n}\r\n.mode-btn small { font-weight: 400; opacity: 0.7; display: block; font-size: 0.66rem; margin-top: 2px; }\r\n.mode-btn:hover { border-color: var(--cyan); color: var(--cyan); }\r\n.mode-btn.active { background: var(--cyan); border-color: var(--cyan); color: var(--navy); }\r\n\r\n\/* Live water animation stage *\/\r\n.eject-stage {\r\n  position: relative;\r\n  height: 110px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  margin-bottom: 1.25rem;\r\n}\r\n.eject-stage__speaker {\r\n  font-size: 2.6rem;\r\n  position: relative;\r\n  z-index: 2;\r\n  filter: drop-shadow(0 0 0 rgba(0,212,255,0));\r\n  transition: filter 0.3s ease, transform 0.3s ease;\r\n}\r\n.eject-stage.is-active .eject-stage__speaker {\r\n  filter: drop-shadow(0 0 18px rgba(0,212,255,0.85));\r\n  animation: speaker-shake 0.35s ease-in-out infinite;\r\n}\r\n@keyframes speaker-shake {\r\n  0%,100% { transform: translateX(0) scale(1); }\r\n  25%     { transform: translateX(-2px) scale(1.02); }\r\n  75%     { transform: translateX(2px) scale(1.02); }\r\n}\r\n.eject-stage__glow {\r\n  position: absolute;\r\n  width: 130px; height: 130px;\r\n  border-radius: 50%;\r\n  background: radial-gradient(circle, rgba(0,212,255,0.28) 0%, transparent 70%);\r\n  opacity: 0;\r\n  transition: opacity 0.3s ease;\r\n  z-index: 1;\r\n}\r\n.eject-stage.is-active .eject-stage__glow {\r\n  opacity: 1;\r\n  animation: glow-pulse 1.1s ease-in-out infinite;\r\n}\r\n@keyframes glow-pulse { 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.18); } }\r\n.droplet {\r\n  position: absolute;\r\n  top: 50%; left: 50%;\r\n  font-size: 1rem;\r\n  opacity: 0;\r\n  pointer-events: none;\r\n  z-index: 3;\r\n}\r\n.eject-stage.is-active .droplet { animation: droplet-fly 1.4s ease-in infinite; }\r\n.droplet:nth-child(1) { animation-delay: 0s;    --dx: -70px; --dy: -55px; }\r\n.droplet:nth-child(2) { animation-delay: 0.25s; --dx: 70px;  --dy: -60px; }\r\n.droplet:nth-child(3) { animation-delay: 0.5s;  --dx: -85px; --dy: 15px; }\r\n.droplet:nth-child(4) { animation-delay: 0.75s; --dx: 85px;  --dy: 20px; }\r\n.droplet:nth-child(5) { animation-delay: 1s;    --dx: -30px; --dy: -80px; }\r\n.droplet:nth-child(6) { animation-delay: 0.4s;  --dx: 30px;  --dy: -80px; }\r\n@keyframes droplet-fly {\r\n  0%   { opacity: 0; transform: translate(-50%,-50%) translate(0,0) scale(0.5); }\r\n  15%  { opacity: 1; }\r\n  100% { opacity: 0; transform: translate(-50%,-50%) translate(var(--dx),var(--dy)) scale(1); }\r\n}\r\n@media (prefers-reduced-motion: reduce) {\r\n  .eject-stage.is-active .eject-stage__speaker,\r\n  .eject-stage.is-active .eject-stage__glow,\r\n  .eject-stage.is-active .droplet { animation: none; }\r\n}\r\n\r\n\/* Waveform *\/\r\n.waveform-wrap {\r\n  height: 72px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 3px;\r\n  margin-bottom: 1.5rem;\r\n}\r\n.wave-bar {\r\n  width: 4px;\r\n  border-radius: 4px;\r\n  background: var(--cyan);\r\n  opacity: 0.22;\r\n  height: 6px;\r\n  transition: height 0.1s, opacity 0.1s;\r\n}\r\n.wave-bar.active {\r\n  animation: bar-dance 0.5s ease-in-out infinite alternate;\r\n  opacity: 1;\r\n}\r\n@keyframes bar-dance { from{height:8px;} to{height:var(--h,38px);} }\r\n@media (prefers-reduced-motion: reduce) { .wave-bar.active { animation:none; height:38px!important; } }\r\n\r\n\/* Volume *\/\r\n.vol-wrap {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.65rem;\r\n  margin-top: 1rem;\r\n}\r\n.vol-icon { font-size: 0.95rem; color: var(--gray); flex-shrink: 0; }\r\n.vol-slider {\r\n  flex: 1;\r\n  min-width: 0;\r\n  -webkit-appearance: none;\r\n  appearance: none;\r\n  height: 4px;\r\n  border-radius: 4px;\r\n  background: rgba(255,255,255,0.12);\r\n  outline: none;\r\n  cursor: pointer;\r\n}\r\n.vol-slider::-webkit-slider-thumb {\r\n  -webkit-appearance: none;\r\n  width: 18px; height: 18px;\r\n  border-radius: 50%;\r\n  background: var(--cyan);\r\n  box-shadow: 0 0 8px rgba(0,212,255,0.5);\r\n}\r\n.vol-slider::-moz-range-thumb {\r\n  width: 18px; height: 18px;\r\n  border-radius: 50%;\r\n  background: var(--cyan);\r\n  border: none;\r\n  box-shadow: 0 0 8px rgba(0,212,255,0.5);\r\n}\r\n.vol-label { font-size: 0.78rem; color: var(--gray); min-width: 34px; text-align: right; flex-shrink: 0; }\r\n\r\n\/* Eject button *\/\r\n.eject-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 0.7rem;\r\n  width: 100%;\r\n  padding: 1.05rem 1.5rem;\r\n  margin-top: 1.25rem;\r\n  border-radius: 13px;\r\n  background: linear-gradient(135deg, var(--cyan) 0%, var(--cyan2) 100%);\r\n  color: var(--navy);\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(1rem, 2vw, 1.1rem);\r\n  font-weight: 700;\r\n  transition: all 0.22s;\r\n  position: relative;\r\n  overflow: hidden;\r\n  -webkit-tap-highlight-color: transparent;\r\n}\r\n.eject-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 28px rgba(0,212,255,0.45); }\r\n.eject-btn:active { transform: translateY(0); }\r\n.eject-btn.playing {\r\n  background: linear-gradient(135deg, #FF6B6B 0%, #EE5A24 100%);\r\n  animation: btn-pulse 1.2s ease-in-out infinite;\r\n}\r\n@keyframes btn-pulse {\r\n  0%,100%{box-shadow:0 0 0 0 rgba(255,107,107,0.4);}\r\n  50%{box-shadow:0 0 0 14px rgba(255,107,107,0);}\r\n}\r\n.eject-btn__icon { font-size: 1.3rem; flex-shrink: 0; }\r\n\r\n\/* Progress circle *\/\r\n.tool-progress {\r\n  margin-top: 1.1rem;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 1.1rem;\r\n}\r\n.progress-ring {\r\n  position: relative;\r\n  width: 78px; height: 78px;\r\n  flex-shrink: 0;\r\n}\r\n.progress-ring svg { transform: rotate(-90deg); width: 78px; height: 78px; }\r\n.progress-ring__track { fill: none; stroke: rgba(255,255,255,0.08); stroke-width: 6; }\r\n.progress-ring__fill  { fill: none; stroke: var(--cyan); stroke-width: 6; stroke-linecap: round; transition: stroke-dashoffset 0.3s linear; }\r\n.progress-ring__label {\r\n  position: absolute; inset: 0;\r\n  display: flex; align-items: center; justify-content: center;\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.95rem;\r\n  font-weight: 800;\r\n  color: var(--white);\r\n}\r\n.tool-progress__meta { text-align: left; }\r\n.tool-progress__remaining {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.95rem;\r\n  font-weight: 700;\r\n  color: var(--white);\r\n}\r\n.tool-progress__mode-label { font-size: 0.78rem; color: var(--gray); margin-top: 0.15rem; }\r\n\r\n.tool-status {\r\n  text-align: center;\r\n  margin-top: 0.9rem;\r\n  font-size: 0.85rem;\r\n  color: var(--gray);\r\n  min-height: 1.4em;\r\n  transition: color 0.3s;\r\n}\r\n.tool-status.active { color: var(--cyan); }\r\n\r\n\/* Tip *\/\r\n.tool-tip {\r\n  margin-top: 1.1rem;\r\n  padding: 0.7rem 0.9rem;\r\n  background: rgba(255,179,71,0.07);\r\n  border: 1px solid rgba(255,179,71,0.2);\r\n  border-radius: 10px;\r\n  display: flex;\r\n  gap: 0.55rem;\r\n  align-items: flex-start;\r\n  font-size: 0.8rem;\r\n  color: #CFA050;\r\n  line-height: 1.55;\r\n}\r\n.tool-tip__icon { flex-shrink: 0; margin-top: 1px; }\r\n\r\n\/* Success confirmation *\/\r\n.confirm-card {\r\n  margin-top: 1.1rem;\r\n  padding: 1rem 1.1rem;\r\n  background: rgba(0,212,255,0.06);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  text-align: center;\r\n  display: none;\r\n}\r\n.confirm-card.show { display: block; }\r\n.confirm-card p { font-size: 0.9rem; color: var(--white); font-weight: 600; margin-bottom: 0.8rem; }\r\n.confirm-actions { display: flex; gap: 0.6rem; justify-content: center; }\r\n.vote-btn {\r\n  padding: 0.55rem 1.2rem;\r\n  border-radius: 10px;\r\n  border: 1px solid var(--border);\r\n  background: transparent;\r\n  color: var(--gray);\r\n  font-size: 0.85rem;\r\n  font-weight: 700;\r\n  font-family: 'Syne', sans-serif;\r\n  transition: all 0.2s;\r\n}\r\n.vote-btn:hover { border-color: var(--cyan); color: var(--cyan); }\r\n.confirm-followup {\r\n  margin-top: 0.85rem;\r\n  font-size: 0.83rem;\r\n  color: var(--amber);\r\n  display: none;\r\n}\r\n.confirm-followup.show { display: block; }\r\n\r\n\/* Inline speaker test \u2014 shown immediately after playback completes *\/\r\n.inline-test-card {\r\n  margin-top: 1.1rem;\r\n  padding: 1.1rem 1.15rem;\r\n  background: rgba(0,212,255,0.06);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  display: none;\r\n}\r\n.inline-test-card.show { display: block; animation: reveal-pop 0.4s ease; }\r\n@keyframes reveal-pop { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }\r\n.inline-test-card__title {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.95rem;\r\n  font-weight: 800;\r\n  color: #4ADE80;\r\n  text-align: center;\r\n}\r\n.inline-test-card__subtitle {\r\n  font-size: 0.72rem;\r\n  font-weight: 700;\r\n  letter-spacing: 0.1em;\r\n  text-transform: uppercase;\r\n  color: var(--gray);\r\n  text-align: center;\r\n  margin-top: 0.6rem;\r\n  margin-bottom: 0.7rem;\r\n}\r\n.inline-test-list {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 0.55rem;\r\n}\r\n.inline-test-btn {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.55rem;\r\n  padding: 0.65rem 0.85rem;\r\n  border-radius: 10px;\r\n  border: 1px solid var(--border);\r\n  background: rgba(255,255,255,0.03);\r\n  color: var(--white);\r\n  font-size: 0.82rem;\r\n  font-weight: 600;\r\n  transition: all 0.2s;\r\n}\r\n.inline-test-btn__icon { color: var(--cyan); font-size: 0.75rem; flex-shrink: 0; }\r\n.inline-test-btn.playing { border-color: var(--cyan); background: rgba(0,212,255,0.12); }\r\n.inline-test-btn.playing .inline-test-btn__icon { color: var(--cyan); }\r\n@media (max-width: 479px) {\r\n  .inline-test-list { grid-template-columns: 1fr; }\r\n}\r\n\r\n\/* =============================================\r\n   WAVE DIVIDERS\r\n============================================= *\/\r\n.wave-divider { width:100%; overflow:hidden; line-height:0; display:block; }\r\n.wave-divider svg { display:block; width:100%; }\r\n\r\n\/* =============================================\r\n   HOW IT WORKS\r\n============================================= *\/\r\n.steps-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  gap: 1.25rem;\r\n  margin-top: 3rem;\r\n}\r\n.step-card {\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 18px;\r\n  padding: 1.75rem 1.35rem;\r\n  transition: border-color 0.2s, transform 0.2s;\r\n}\r\n.step-card:hover { border-color: rgba(0,212,255,0.4); transform: translateY(-3px); }\r\n.step-num {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 2.2rem;\r\n  font-weight: 800;\r\n  color: rgba(0,212,255,0.14);\r\n  line-height: 1;\r\n  margin-bottom: 0.6rem;\r\n}\r\n.step-icon { font-size: 1.9rem; margin-bottom: 0.85rem; display: block; }\r\n.step-card h3 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 1rem;\r\n  font-weight: 700;\r\n  margin-bottom: 0.4rem;\r\n  color: var(--white);\r\n}\r\n.step-card p { font-size: 0.875rem; color: var(--gray); line-height: 1.65; }\r\n\r\n\/* =============================================\r\n   DEVICES\r\n============================================= *\/\r\n.devices-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  gap: 1rem;\r\n  margin-top: 3rem;\r\n}\r\n.device-card {\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 16px;\r\n  padding: 1.4rem 1rem;\r\n  text-align: center;\r\n  transition: all 0.22s;\r\n}\r\n.device-card:hover {\r\n  border-color: var(--cyan);\r\n  background: rgba(0,212,255,0.06);\r\n  transform: translateY(-3px);\r\n  box-shadow: 0 8px 24px rgba(0,212,255,0.12);\r\n}\r\n.device-icon { font-size: 2rem; margin-bottom: 0.65rem; display: block; }\r\n.device-card h3 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.9rem;\r\n  font-weight: 700;\r\n  margin-bottom: 0.2rem;\r\n  color: var(--white);\r\n}\r\n.device-card p { font-size: 0.78rem; color: var(--gray); }\r\n.device-tag {\r\n  display: inline-block;\r\n  margin-top: 0.55rem;\r\n  padding: 0.18rem 0.6rem;\r\n  border-radius: 50px;\r\n  font-size: 0.68rem;\r\n  font-weight: 700;\r\n  font-family: 'Syne', sans-serif;\r\n  background: rgba(0,212,255,0.12);\r\n  color: var(--cyan);\r\n  letter-spacing: 0.04em;\r\n}\r\n\r\n\/* =============================================\r\n   BENEFITS\r\n============================================= *\/\r\n.benefits-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  gap: 1.1rem;\r\n  margin-top: 3rem;\r\n}\r\n.benefit-item {\r\n  display: flex;\r\n  gap: 0.9rem;\r\n  align-items: flex-start;\r\n  padding: 1.35rem;\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  transition: border-color 0.2s, transform 0.2s;\r\n}\r\n.benefit-item:hover { border-color: rgba(0,212,255,0.35); transform: translateY(-2px); }\r\n.benefit-icon-wrap {\r\n  flex-shrink: 0;\r\n  width: 42px; height: 42px;\r\n  border-radius: 11px;\r\n  background: rgba(0,212,255,0.1);\r\n  display: flex; align-items: center; justify-content: center;\r\n  font-size: 1.15rem;\r\n}\r\n.benefit-item h3 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.95rem;\r\n  font-weight: 700;\r\n  margin-bottom: 0.25rem;\r\n  color: var(--white);\r\n}\r\n.benefit-item p { font-size: 0.84rem; color: var(--gray); line-height: 1.6; }\r\n\r\n\/* =============================================\r\n   WHY CHOOSE\r\n============================================= *\/\r\n.why-grid {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 3rem;\r\n  align-items: center;\r\n  margin-top: 3rem;\r\n}\r\n.why-stats {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 1rem;\r\n}\r\n.stat-box {\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 16px;\r\n  padding: 1.4rem 1rem;\r\n  text-align: center;\r\n}\r\n.stat-num {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(1.8rem, 3vw, 2.4rem);\r\n  font-weight: 800;\r\n  color: var(--cyan);\r\n  line-height: 1;\r\n}\r\n.stat-num sub { font-size: 1.1rem; }\r\n.stat-label { font-size: 0.78rem; color: var(--gray); margin-top: 0.3rem; line-height: 1.4; }\r\n.why-list { list-style: none; display: flex; flex-direction: column; gap: 0.8rem; }\r\n.why-list li {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 0.7rem;\r\n  font-size: 0.925rem;\r\n  color: var(--gray);\r\n  line-height: 1.55;\r\n}\r\n.why-list li::before {\r\n  content: '\u2713';\r\n  flex-shrink: 0;\r\n  width: 21px; height: 21px;\r\n  border-radius: 50%;\r\n  background: rgba(0,212,255,0.15);\r\n  color: var(--cyan);\r\n  font-size: 0.7rem;\r\n  font-weight: 700;\r\n  display: flex; align-items: center; justify-content: center;\r\n  margin-top: 2px;\r\n}\r\n\r\n\/* =============================================\r\n   TONE COMPARISON\r\n============================================= *\/\r\n.tone-table {\r\n  margin-top: 3rem;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0.7rem;\r\n}\r\n.tone-row {\r\n  display: grid;\r\n  grid-template-columns: 90px 1fr auto;\r\n  align-items: center;\r\n  gap: 1rem;\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  padding: 1rem 1.25rem;\r\n  transition: border-color 0.2s;\r\n}\r\n.tone-row:hover { border-color: rgba(0,212,255,0.35); }\r\n.tone-row__freq {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 1.15rem;\r\n  font-weight: 800;\r\n  color: var(--cyan);\r\n  text-align: left;\r\n}\r\n.tone-row__freq small { display: block; font-size: 0.62rem; font-weight: 700; color: var(--gray); letter-spacing: 0.06em; text-transform: uppercase; }\r\n.tone-row__desc { text-align: left; font-size: 0.86rem; color: var(--gray); line-height: 1.55; }\r\n.tone-row__desc strong { color: var(--white); }\r\n.tone-preview-btn {\r\n  flex-shrink: 0;\r\n  width: 42px; height: 42px;\r\n  border-radius: 50%;\r\n  border: 1px solid var(--border);\r\n  background: transparent;\r\n  color: var(--cyan);\r\n  font-size: 1rem;\r\n  transition: all 0.2s;\r\n}\r\n.tone-preview-btn.playing { background: var(--cyan); color: var(--navy) !important; }\r\n\r\n\/* =============================================\r\n   SPEAKER TEST\r\n============================================= *\/\r\n.test-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(5, 1fr);\r\n  gap: 0.9rem;\r\n  margin-top: 3rem;\r\n}\r\n.test-btn {\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  padding: 1.35rem 0.9rem;\r\n  text-align: center;\r\n  transition: all 0.22s;\r\n  color: var(--white);\r\n}\r\n.test-btn:hover { border-color: var(--cyan); transform: translateY(-3px); background: rgba(0,212,255,0.06); }\r\n.test-btn.playing { border-color: var(--cyan); background: rgba(0,212,255,0.1); }\r\n.test-btn__icon { font-size: 1.6rem; margin-bottom: 0.6rem; display: block; }\r\n.test-btn__label { font-family: 'Syne', sans-serif; font-size: 0.82rem; font-weight: 700; }\r\n.test-btn__sub { font-size: 0.7rem; color: var(--gray); margin-top: 0.2rem; }\r\n\r\n\/* =============================================\r\n   FAQ\r\n============================================= *\/\r\n.faq-list {\r\n  margin-top: 3rem;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0.65rem;\r\n}\r\n.faq-item {\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 14px;\r\n  overflow: hidden;\r\n  transition: border-color 0.2s;\r\n}\r\n.faq-item.open { border-color: rgba(0,212,255,0.35); }\r\n.faq-q {\r\n  width: 100%;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  gap: 1rem;\r\n  padding: 1rem 1.35rem;\r\n  text-align: left;\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(0.9rem, 1.5vw, 1rem);\r\n  font-weight: 600;\r\n  color: var(--white);\r\n  background: transparent;\r\n  border: none;\r\n  cursor: pointer;\r\n  transition: color 0.2s;\r\n  -webkit-tap-highlight-color: transparent;\r\n}\r\n.faq-q:hover { color: var(--cyan); }\r\n.faq-icon { font-size: 1.15rem; color: var(--cyan); transition: transform 0.25s; flex-shrink: 0; }\r\n.faq-item.open .faq-icon { transform: rotate(45deg); }\r\n.faq-a {\r\n  max-height: 0;\r\n  overflow: hidden;\r\n  transition: max-height 0.35s ease, padding 0.35s ease;\r\n  padding: 0 1.35rem;\r\n  font-size: 0.9rem;\r\n  color: var(--gray);\r\n  line-height: 1.7;\r\n}\r\n.faq-item.open .faq-a { max-height: 400px; padding: 0 1.35rem 1.1rem; }\r\n\r\n\/* =============================================\r\n   DEVICE GUIDES \/ INTERNAL LINKS\r\n============================================= *\/\r\n.links-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  gap: 1rem;\r\n  margin-top: 2.5rem;\r\n}\r\n.link-card {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.8rem;\r\n  padding: 1rem 1.1rem;\r\n  background: var(--card);\r\n  border: 1px solid var(--border);\r\n  border-radius: 12px;\r\n  transition: all 0.22s;\r\n  color: var(--white);\r\n  -webkit-tap-highlight-color: transparent;\r\n}\r\n.link-card:hover {\r\n  border-color: var(--cyan);\r\n  background: rgba(0,212,255,0.06);\r\n  transform: translateX(4px);\r\n  color: var(--cyan);\r\n}\r\n.link-card__icon { font-size: 1.3rem; flex-shrink: 0; }\r\n.link-card__text { min-width: 0; }\r\n.link-card__text h4 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.875rem;\r\n  font-weight: 700;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n.link-card__text p { font-size: 0.73rem; color: var(--gray); }\r\n.link-card__arrow { margin-left: auto; font-size: 0.8rem; color: var(--gray); transition: color 0.2s; flex-shrink: 0; }\r\n.link-card:hover .link-card__arrow { color: var(--cyan); }\r\n\r\n\/* =============================================\r\n   FINAL CTA\r\n============================================= *\/\r\n.cta-section {\r\n  padding: clamp(4rem,8vw,6rem) 0;\r\n  text-align: center;\r\n  background: linear-gradient(180deg, var(--navy) 0%, #071427 100%);\r\n  position: relative;\r\n  overflow: hidden;\r\n}\r\n.cta-section::before {\r\n  content:'';\r\n  position: absolute;\r\n  top:50%; left:50%;\r\n  transform: translate(-50%,-50%);\r\n  width: min(700px, 100vw);\r\n  height: min(700px, 100vw);\r\n  border-radius: 50%;\r\n  background: radial-gradient(circle, rgba(0,212,255,0.07) 0%, transparent 65%);\r\n  pointer-events: none;\r\n}\r\n.cta-btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 0.6rem;\r\n  background: linear-gradient(135deg, var(--cyan) 0%, var(--cyan2) 100%);\r\n  color: var(--navy);\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: clamp(0.95rem, 1.8vw, 1.05rem);\r\n  font-weight: 700;\r\n  padding: 0.95rem 2rem;\r\n  border-radius: 12px;\r\n  transition: all 0.22s;\r\n  box-shadow: 0 4px 24px rgba(0,212,255,0.3);\r\n  margin-top: 1.75rem;\r\n  border: none;\r\n  cursor: pointer;\r\n  -webkit-tap-highlight-color: transparent;\r\n}\r\n.cta-btn:hover { transform: translateY(-3px); box-shadow: 0 10px 36px rgba(0,212,255,0.5); }\r\n\r\n\/* =============================================\r\n   FOOTER\r\n============================================= *\/\r\nfooter {\r\n  background: #07121F;\r\n  border-top: 1px solid rgba(255,255,255,0.06);\r\n  padding: 3rem 0 1.75rem;\r\n}\r\n.footer-inner {\r\n  display: grid;\r\n  grid-template-columns: 1.6fr 1fr 1fr 1fr;\r\n  gap: 2.5rem 2rem;\r\n  max-width: var(--container-max);\r\n  margin: 0 auto;\r\n  padding: 0 var(--container-px);\r\n}\r\n.footer-brand h2 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 1.1rem;\r\n  font-weight: 800;\r\n  color: var(--white);\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 0.45rem;\r\n  flex-wrap: wrap;\r\n}\r\n.footer-brand p { font-size: 0.85rem; color: var(--gray); margin-top: 0.5rem; line-height: 1.6; }\r\n.footer-links h4 {\r\n  font-family: 'Syne', sans-serif;\r\n  font-size: 0.72rem;\r\n  font-weight: 700;\r\n  letter-spacing: 0.12em;\r\n  text-transform: uppercase;\r\n  color: var(--gray);\r\n  margin-bottom: 0.85rem;\r\n}\r\n.footer-links ul { list-style: none; display: flex; flex-direction: column; gap: 0.5rem; }\r\n.footer-links a { font-size: 0.865rem; color: rgba(176,196,216,0.7); transition: color 0.2s; }\r\n.footer-links a:hover { color: var(--cyan); }\r\n.footer-bottom {\r\n  max-width: var(--container-max);\r\n  margin: 2rem auto 0;\r\n  padding: 1.35rem var(--container-px) 0;\r\n  border-top: 1px solid rgba(255,255,255,0.06);\r\n  text-align: center;\r\n  font-size: 0.78rem;\r\n  color: rgba(176,196,216,0.4);\r\n  line-height: 1.6;\r\n}\r\n\r\n\/* =============================================\r\n   BREAKPOINTS\r\n   1. Large monitors  \u2265 1440px\r\n   2. Desktop         1280\u20131440px   (default above already handles)\r\n   3. Laptop          1024\u20131280px\r\n   4. Tablet landscape 768\u20131024px\r\n   5. Tablet portrait  600\u2013768px\r\n   6. Large phone      480\u2013600px\r\n   7. Small phone      320\u2013480px\r\n   8. Tiny             < 320px\r\n============================================= *\/\r\n\r\n\/* --- 1. Large monitors \u2265 1440px --- *\/\r\n@media (min-width: 1440px) {\r\n  :root { --container-max: 1360px; --section-py: 5.5rem; }\r\n  .display-xl { font-size: 5.2rem; }\r\n}\r\n\r\n\/* --- 3. Laptop 1024\u20131279px --- *\/\r\n@media (max-width: 1279px) {\r\n  :root { --section-py: 4.5rem; }\r\n  .steps-grid    { grid-template-columns: repeat(2, 1fr); }\r\n  .devices-grid  { grid-template-columns: repeat(4, 1fr); }\r\n  .benefits-grid { grid-template-columns: repeat(2, 1fr); }\r\n  .footer-inner  { grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 2rem 1.5rem; }\r\n  .test-grid     { grid-template-columns: repeat(5, 1fr); }\r\n}\r\n\r\n\/* --- 4. Tablet landscape 768\u20131023px --- *\/\r\n@media (max-width: 1023px) {\r\n  :root { --section-py: 4rem; --container-px: 1.5rem; }\r\n  .navbar__nav { gap: 1.25rem; }\r\n  .steps-grid    { grid-template-columns: repeat(2, 1fr); gap: 1rem; }\r\n  .devices-grid  { grid-template-columns: repeat(4, 1fr); gap: 0.85rem; }\r\n  .benefits-grid { grid-template-columns: repeat(2, 1fr); gap: 1rem; }\r\n  .why-grid      { gap: 2rem; }\r\n  .links-grid    { grid-template-columns: repeat(2, 1fr); }\r\n  .footer-inner  { grid-template-columns: repeat(2, 1fr); }\r\n  .test-grid     { grid-template-columns: repeat(3, 1fr); }\r\n  .tone-row      { grid-template-columns: 74px 1fr auto; }\r\n}\r\n\r\n\/* --- 5. Tablet portrait 600\u2013767px --- *\/\r\n@media (max-width: 767px) {\r\n  :root { --section-py: 3.5rem; --container-px: 1.25rem; }\r\n\r\n  \/* Navbar \u2014 show hamburger, hide desktop nav *\/\r\n  .navbar__nav  { display: none; }\r\n  .navbar__cta  { display: none; }\r\n  .navbar__hamburger { display: flex; }\r\n  .navbar__inner { height: 58px; }\r\n\r\n  .steps-grid    { grid-template-columns: repeat(2, 1fr); gap: 0.9rem; }\r\n  .devices-grid  { grid-template-columns: repeat(3, 1fr); gap: 0.85rem; }\r\n  .benefits-grid { grid-template-columns: repeat(2, 1fr); gap: 0.9rem; }\r\n  .why-grid      { grid-template-columns: 1fr; gap: 2rem; }\r\n  .why-stats     { order: -1; grid-template-columns: repeat(4, 1fr); }\r\n  .links-grid    { grid-template-columns: repeat(2, 1fr); }\r\n  .footer-inner  { grid-template-columns: 1fr 1fr; }\r\n  .footer-brand  { grid-column: span 2; }\r\n  .test-grid     { grid-template-columns: repeat(3, 1fr); }\r\n\r\n  .tool-card { border-radius: 18px; }\r\n}\r\n\r\n\/* --- 6. Large phone 480\u2013599px --- *\/\r\n@media (max-width: 599px) {\r\n  :root { --section-py: 3rem; --container-px: 1rem; }\r\n\r\n  .steps-grid    { grid-template-columns: 1fr 1fr; gap: 0.85rem; }\r\n  .devices-grid  { grid-template-columns: repeat(2, 1fr); gap: 0.75rem; }\r\n  .benefits-grid { grid-template-columns: 1fr; }\r\n  .why-stats     { grid-template-columns: repeat(2, 1fr); }\r\n  .links-grid    { grid-template-columns: 1fr 1fr; }\r\n  .footer-inner  { grid-template-columns: 1fr; }\r\n  .footer-brand  { grid-column: span 1; }\r\n  .test-grid     { grid-template-columns: repeat(2, 1fr); }\r\n  .tone-row      { grid-template-columns: 1fr; text-align: center; }\r\n  .tone-row__freq, .tone-row__desc { text-align: center; }\r\n\r\n  .freq-btn      { font-size: 0.73rem; padding: 0.4rem 0.7rem; }\r\n  .waveform-wrap { height: 60px; }\r\n}\r\n\r\n\/* --- 7. Small phone 320\u2013479px --- *\/\r\n@media (max-width: 479px) {\r\n  :root { --section-py: 2.75rem; --container-px: 0.9rem; }\r\n\r\n  .display-xl    { font-size: clamp(1.75rem, 8.5vw, 2.4rem); }\r\n  .display-lg    { font-size: clamp(1.4rem, 6.5vw, 1.9rem); }\r\n\r\n  .hero { padding: 2.5rem 0 2rem; }\r\n  .hero__badge { padding: 0.28rem 0.75rem; }\r\n  .hero__badge .eyebrow { font-size: 0.65rem; letter-spacing: 0.06em; }\r\n\r\n  .trust-strip   { gap: 0.5rem 1rem; }\r\n  .trust-strip span { font-size: 0.73rem; }\r\n\r\n  .tool-card     { border-radius: 15px; }\r\n  .freq-selector { gap: 0.35rem; }\r\n  .freq-btn      { font-size: 0.7rem; padding: 0.38rem 0.6rem; }\r\n  .freq-btn small { font-size: 0.62rem; }\r\n  .waveform-wrap { height: 52px; gap: 2px; }\r\n  .wave-bar      { width: 3px; }\r\n  .eject-btn     { font-size: 1rem; padding: 0.95rem 1.25rem; }\r\n\r\n  .steps-grid    { grid-template-columns: 1fr; }\r\n  .step-card     { padding: 1.35rem 1.1rem; }\r\n  .devices-grid  { grid-template-columns: repeat(2, 1fr); }\r\n  .benefits-grid { grid-template-columns: 1fr; }\r\n  .why-stats     { grid-template-columns: repeat(2, 1fr); }\r\n  .links-grid    { grid-template-columns: 1fr; }\r\n  .test-grid     { grid-template-columns: repeat(2, 1fr); }\r\n\r\n  .faq-q         { font-size: 0.875rem; padding: 0.9rem 1.1rem; }\r\n  .faq-a         { padding: 0 1.1rem; }\r\n  .faq-item.open .faq-a { padding: 0 1.1rem 1rem; }\r\n\r\n  .footer-inner  { grid-template-columns: 1fr; gap: 1.75rem; }\r\n  .footer-brand  { grid-column: span 1; }\r\n}\r\n\r\n\/* --- 8. Tiny < 320px --- *\/\r\n@media (max-width: 319px) {\r\n  :root { --container-px: 0.75rem; }\r\n  .freq-selector { flex-direction: column; align-items: center; }\r\n  .freq-btn { width: 100%; max-width: 200px; }\r\n  .devices-grid { grid-template-columns: 1fr; }\r\n  .test-grid { grid-template-columns: 1fr; }\r\n}\r\n\r\n\/* =============================================\r\n   SCROLL REVEAL (set via JS)\r\n============================================= *\/\r\n.reveal { opacity:0; transform:translateY(18px); }\r\n.reveal.visible { opacity:1; transform:translateY(0); transition: opacity 0.5s ease, transform 0.5s ease; }\r\n<\/style>\r\n\r\n\r\n\r\n<div class=\"ew-page\">\r\n<!-- ======== NAVBAR ======== -->\r\n<nav class=\"navbar\" role=\"navigation\" aria-label=\"Main navigation\">\r\n  <div class=\"navbar__inner\">\r\n    <a href=\"\/\" class=\"navbar__logo\" aria-label=\"EjectWater home\">\r\n      <span class=\"navbar__logo-icon\" aria-hidden=\"true\">\ud83d\udca7<\/span>\r\n      EjectWater<span class=\"text-cyan\">.com<\/span>\r\n    <\/a>\r\n    <ul class=\"navbar__nav\" role=\"list\">\r\n      <li><a href=\"#how-it-works\">How It Works<\/a><\/li>\r\n      <li><a href=\"#devices\">Devices<\/a><\/li>\r\n      <li><a href=\"#benefits\">Benefits<\/a><\/li>\r\n      <li><a href=\"#faq\">FAQ<\/a><\/li>\r\n    <\/ul>\r\n    <a href=\"#tool\" class=\"navbar__cta\" aria-label=\"Jump to water eject tool\">Eject Water \u2193<\/a>\r\n    <button class=\"navbar__hamburger\" id=\"menuToggle\" aria-label=\"Open navigation menu\" aria-expanded=\"false\" aria-controls=\"mobileDrawer\">\r\n      <span><\/span><span><\/span><span><\/span>\r\n    <\/button>\r\n  <\/div>\r\n  <!-- Mobile drawer -->\r\n  <div class=\"navbar__drawer\" id=\"mobileDrawer\" role=\"menu\" aria-hidden=\"true\">\r\n    <a href=\"#how-it-works\" role=\"menuitem\">How It Works<\/a>\r\n    <a href=\"#devices\" role=\"menuitem\">Supported Devices<\/a>\r\n    <a href=\"#benefits\" role=\"menuitem\">Benefits<\/a>\r\n    <a href=\"#faq\" role=\"menuitem\">FAQ<\/a>\r\n    <a href=\"#tool\" class=\"drawer-cta\" role=\"menuitem\">\ud83d\udca7 Eject Water Now<\/a>\r\n  <\/div>\r\n<\/nav>\r\n\r\n<!-- ======== HERO ======== -->\r\n<header class=\"hero\" role=\"banner\">\r\n  <div class=\"hero__bg\" aria-hidden=\"true\">\r\n    <div class=\"hero__circle\"><\/div>\r\n    <div class=\"hero__circle\"><\/div>\r\n  <\/div>\r\n  <div class=\"container hero__inner text-center\">\r\n    <div class=\"hero__badge\">\r\n      <span class=\"hero__badge-dot\" aria-hidden=\"true\"><\/span>\r\n      <span class=\"eyebrow\">Free Online Tool \u2014 No Download Needed<\/span>\r\n    <\/div>\r\n\r\n    <h1 class=\"display-xl hero__title\">\r\n      Eject Water From<br>\r\n      <span>Any Device Speaker<\/span>\r\n    <\/h1>\r\n\r\n    <p class=\"body-lg hero__subtitle\">\r\n      Play a precision sound wave that pushes trapped water out of your speaker grille in seconds. Works on iPhone, Android, AirPods, Apple Watch &amp; more.\r\n    <\/p>\r\n\r\n    <!-- ===== DEVICE DETECTION BANNER ===== -->\r\n    <div style=\"margin-top:1.75rem;\">\r\n      <div class=\"detect-banner\" id=\"detectBanner\" role=\"status\" aria-live=\"polite\">\r\n        <span class=\"detect-banner__icon\" id=\"detectIcon\" aria-hidden=\"true\">\ud83d\udd0d<\/span>\r\n        <div class=\"detect-banner__text\">\r\n          <div class=\"detect-banner__label\"><span class=\"detect-banner__dot\" aria-hidden=\"true\"><\/span> We Detected<\/div>\r\n          <div class=\"detect-banner__device\" id=\"detectDevice\">Detecting your device\u2026<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- ===== MAIN TOOL CARD ===== -->\r\n    <div class=\"tool-card\" id=\"tool\" role=\"main\" aria-label=\"Water eject sound player\">\r\n      <div class=\"tool-card__shimmer\" aria-hidden=\"true\"><\/div>\r\n\r\n      <p class=\"eyebrow\" style=\"margin-bottom:0.8rem;\">Select Frequency<\/p>\r\n      <div class=\"freq-selector\" role=\"group\" aria-label=\"Choose ejection frequency\">\r\n        <button class=\"freq-btn active\" data-freq=\"165\" aria-pressed=\"true\">165 Hz<small>Standard<\/small><\/button>\r\n        <button class=\"freq-btn\" data-freq=\"175\" aria-pressed=\"false\">175 Hz<small>Android<\/small><\/button>\r\n        <button class=\"freq-btn\" data-freq=\"180\" aria-pressed=\"false\">180 Hz<small>Galaxy<\/small><\/button>\r\n        <button class=\"freq-btn\" data-freq=\"200\" aria-pressed=\"false\">200 Hz<small>Medium<\/small><\/button>\r\n        <button class=\"freq-btn\" data-freq=\"250\" aria-pressed=\"false\">250 Hz<small>Deep<\/small><\/button>\r\n      <\/div>\r\n\r\n      <p class=\"eyebrow\" style=\"margin-bottom:0.8rem;\">Cleaning Mode<\/p>\r\n      <div class=\"mode-selector\" role=\"group\" aria-label=\"Choose cleaning mode\">\r\n        <button class=\"mode-btn active\" data-mode=\"quick\" aria-pressed=\"true\">\u26a1 Quick Clean<small>30 sec<\/small><\/button>\r\n        <button class=\"mode-btn\" data-mode=\"deep\" aria-pressed=\"false\">\ud83c\udf0a Deep Clean<small>60 sec<\/small><\/button>\r\n        <button class=\"mode-btn\" data-mode=\"pulse\" aria-pressed=\"false\">\ud83d\udc93 Pulse Mode<small>On\/off bursts<\/small><\/button>\r\n        <button class=\"mode-btn\" data-mode=\"sweep\" aria-pressed=\"false\">\ud83d\udd01 Sweep Mode<small>Freq. sweep<\/small><\/button>\r\n        <button class=\"mode-btn\" data-mode=\"max\" aria-pressed=\"false\">\ud83d\ude80 Maximum<small>Full power<\/small><\/button>\r\n      <\/div>\r\n\r\n      <div class=\"eject-stage\" id=\"ejectStage\" aria-hidden=\"true\">\r\n        <div class=\"eject-stage__glow\"><\/div>\r\n        <span class=\"eject-stage__speaker\">\ud83d\udd0a<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n        <span class=\"droplet\">\ud83d\udca7<\/span>\r\n      <\/div>\r\n\r\n      <div class=\"waveform-wrap\" id=\"waveform\" aria-hidden=\"true\"><\/div>\r\n\r\n      <div class=\"vol-wrap\">\r\n        <span class=\"vol-icon\" aria-hidden=\"true\">\ud83d\udd08<\/span>\r\n        <input type=\"range\" class=\"vol-slider\" id=\"volumeSlider\" min=\"0\" max=\"100\" value=\"80\" aria-label=\"Volume control\">\r\n        <span class=\"vol-label\" id=\"volLabel\" aria-live=\"polite\">80%<\/span>\r\n        <span class=\"vol-icon\" aria-hidden=\"true\">\ud83d\udd0a<\/span>\r\n      <\/div>\r\n\r\n      <button class=\"eject-btn\" id=\"ejectBtn\" aria-label=\"Start water ejection\">\r\n        <span class=\"eject-btn__icon\" id=\"btnIcon\" aria-hidden=\"true\">\ud83d\udca7<\/span>\r\n        <span id=\"btnText\">Eject Water Now<\/span>\r\n      <\/button>\r\n\r\n      <div class=\"tool-progress\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"30\" aria-valuenow=\"0\" aria-label=\"Ejection progress\">\r\n        <div class=\"progress-ring\">\r\n          <svg viewBox=\"0 0 78 78\">\r\n            <circle class=\"progress-ring__track\" cx=\"39\" cy=\"39\" r=\"33\"><\/circle>\r\n            <circle class=\"progress-ring__fill\" id=\"progressRing\" cx=\"39\" cy=\"39\" r=\"33\" stroke-dasharray=\"207.3\" stroke-dashoffset=\"207.3\"><\/circle>\r\n          <\/svg>\r\n          <div class=\"progress-ring__label\" id=\"progressPct\">0%<\/div>\r\n        <\/div>\r\n        <div class=\"tool-progress__meta\">\r\n          <div class=\"tool-progress__remaining\" id=\"progressRemaining\">30 sec remaining<\/div>\r\n          <div class=\"tool-progress__mode-label\" id=\"progressModeLabel\">Quick Clean \u00b7 165 Hz<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <p class=\"tool-status\" id=\"toolStatus\" aria-live=\"polite\">Turn volume to max for best results, then press Eject<\/p>\r\n\r\n      <div class=\"inline-test-card\" id=\"inlineTestCard\" role=\"group\" aria-label=\"Test your speaker\">\r\n        <p class=\"inline-test-card__title\">\u2705 Water Ejection Complete<\/p>\r\n        <p class=\"inline-test-card__subtitle\">Test Your Speaker<\/p>\r\n        <div class=\"inline-test-list\">\r\n          <button class=\"test-btn inline-test-btn\" data-test=\"left\"><span class=\"inline-test-btn__icon\" aria-hidden=\"true\">\u25b6<\/span> Left Speaker<\/button>\r\n          <button class=\"test-btn inline-test-btn\" data-test=\"right\"><span class=\"inline-test-btn__icon\" aria-hidden=\"true\">\u25b6<\/span> Right Speaker<\/button>\r\n          <button class=\"test-btn inline-test-btn\" data-test=\"stereo\"><span class=\"inline-test-btn__icon\" aria-hidden=\"true\">\u25b6<\/span> Stereo Test<\/button>\r\n          <button class=\"test-btn inline-test-btn\" data-test=\"bass\"><span class=\"inline-test-btn__icon\" aria-hidden=\"true\">\u25b6<\/span> Bass Test<\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"confirm-card\" id=\"confirmCard\" role=\"group\" aria-label=\"Did it work?\">\r\n        <p>Did it work?<\/p>\r\n        <div class=\"confirm-actions\">\r\n          <button class=\"vote-btn\" id=\"voteYes\">\ud83d\udc4d Yes<\/button>\r\n          <button class=\"vote-btn\" id=\"voteNo\">\ud83d\udc4e Not Yet<\/button>\r\n        <\/div>\r\n        <p class=\"confirm-followup\" id=\"confirmFollowup\">Let's try another cycle \u2014 switching to Deep Clean for extra power.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"tool-tip\" role=\"note\">\r\n        <span class=\"tool-tip__icon\" aria-hidden=\"true\">\u26a1<\/span>\r\n        <span><strong style=\"color:var(--amber);\">Pro tip:<\/strong> Maximize your device volume before pressing. Hold your phone speaker-side down during the cycle for faster water removal.<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"trust-strip\" aria-label=\"Key benefits\">\r\n      <span>\u2705 100% Free<\/span>\r\n      <span>\u2705 No App Needed<\/span>\r\n      <span>\u2705 All Devices<\/span>\r\n      <span>\u2705 Safe Frequencies<\/span>\r\n      <span>\u2705 No Signup<\/span>\r\n    <\/div>\r\n  <\/div>\r\n<\/header>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 56 480 0 720 28C960 56 1200 0 1440 28V56H0V28Z\" fill=\"#0F2847\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== HOW IT WORKS ======== -->\r\n<section class=\"section section-alt\" id=\"how-it-works\" aria-labelledby=\"how-heading\">\r\n  <div class=\"container text-center\">\r\n    <p class=\"eyebrow\">The Science<\/p>\r\n    <h2 class=\"display-lg\" id=\"how-heading\" style=\"margin-top:0.4rem;\">How Water Eject Works<\/h2>\r\n    <p class=\"body-md text-gray\" style=\"max-width:620px;margin:1rem auto 0;\">\r\n      Your speaker driver vibrates at a specific frequency. When that frequency matches the resonant properties of trapped water, it generates enough vibrational force to break surface tension and physically expel the liquid.\r\n    <\/p>\r\n    <div class=\"steps-grid\">\r\n      <div class=\"step-card reveal\">\r\n        <span class=\"step-icon\" aria-hidden=\"true\">\ud83c\udfb5<\/span>\r\n        <div class=\"step-num\" aria-hidden=\"true\">01<\/div>\r\n        <h3>Sound Wave Generated<\/h3>\r\n        <p>Our tool produces a pure sine tone tuned to your device \u2014 the same principle Apple uses for Apple Watch's built-in Water Lock eject feature.<\/p>\r\n      <\/div>\r\n      <div class=\"step-card reveal\">\r\n        <span class=\"step-icon\" aria-hidden=\"true\">\ud83d\udcf3<\/span>\r\n        <div class=\"step-num\" aria-hidden=\"true\">02<\/div>\r\n        <h3>Speaker Resonates<\/h3>\r\n        <p>The low-frequency wave causes your speaker membrane to vibrate rapidly, generating force strong enough to displace trapped liquid droplets.<\/p>\r\n      <\/div>\r\n      <div class=\"step-card reveal\">\r\n        <span class=\"step-icon\" aria-hidden=\"true\">\ud83d\udca6<\/span>\r\n        <div class=\"step-num\" aria-hidden=\"true\">03<\/div>\r\n        <h3>Water Pushed Out<\/h3>\r\n        <p>Surface tension breaks. Water is expelled outward through the speaker grille openings \u2014 you may see or feel droplets leaving the device.<\/p>\r\n      <\/div>\r\n      <div class=\"step-card reveal\">\r\n        <span class=\"step-icon\" aria-hidden=\"true\">\u2705<\/span>\r\n        <div class=\"step-num\" aria-hidden=\"true\">04<\/div>\r\n        <h3>Clear Sound Restored<\/h3>\r\n        <p>One or two cycles removes virtually all water, returning your speaker to full clarity without muffled or distorted output.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 0 480 56 720 28C960 0 1200 56 1440 28V56H0V28Z\" fill=\"#0B1F3A\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== DEVICES ======== -->\r\n<section class=\"section\" id=\"devices\" aria-labelledby=\"devices-heading\">\r\n  <div class=\"container text-center\">\r\n    <p class=\"eyebrow\">Compatibility<\/p>\r\n    <h2 class=\"display-lg\" id=\"devices-heading\" style=\"margin-top:0.4rem;\">Works on All Your Devices<\/h2>\r\n    <p class=\"body-md text-gray\" style=\"max-width:600px;margin:1rem auto 0;\">\r\n      Browser-based and OS-agnostic \u2014 compatible with virtually every modern device that has a speaker.\r\n    <\/p>\r\n    <div class=\"devices-grid\">\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83d\udcf1<\/span><h3>iPhone<\/h3><p>All models iPhone 6 and newer<\/p><span class=\"device-tag\">iOS<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83e\udd16<\/span><h3>Android<\/h3><p>Samsung, Pixel, OnePlus &amp; more<\/p><span class=\"device-tag\">Android<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83c\udfa7<\/span><h3>AirPods<\/h3><p>AirPods, AirPods Pro &amp; Max<\/p><span class=\"device-tag\">Apple<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\u231a<\/span><h3>Apple Watch<\/h3><p>Series 2 and later<\/p><span class=\"device-tag\">watchOS<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83d\udcbb<\/span><h3>MacBook<\/h3><p>MacBook Air &amp; Pro speakers<\/p><span class=\"device-tag\">macOS<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83d\udd0a<\/span><h3>BT Speakers<\/h3><p>JBL, Sony, Bose &amp; others<\/p><span class=\"device-tag\">Universal<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83c\udfae<\/span><h3>Gaming Headsets<\/h3><p>PS5, Xbox, PC gaming audio<\/p><span class=\"device-tag\">Gaming<\/span><\/div>\r\n      <div class=\"device-card reveal\"><span class=\"device-icon\" aria-hidden=\"true\">\ud83d\udcdf<\/span><h3>Smart Speakers<\/h3><p>Echo, HomePod, Nest Audio<\/p><span class=\"device-tag\">Smart Home<\/span><\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 56 480 0 720 28C960 56 1200 0 1440 28V56H0V28Z\" fill=\"#0F2847\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== BENEFITS ======== -->\r\n<section class=\"section section-alt\" id=\"benefits\" aria-labelledby=\"benefits-heading\">\r\n  <div class=\"container text-center\">\r\n    <p class=\"eyebrow\">Why It Works<\/p>\r\n    <h2 class=\"display-lg\" id=\"benefits-heading\" style=\"margin-top:0.4rem;\">Safe, Fast &amp; Effective<\/h2>\r\n    <p class=\"body-md text-gray\" style=\"max-width:560px;margin:1rem auto 0;\">No tools, no disassembly, no risk. Just physics.<\/p>\r\n    <div class=\"benefits-grid\">\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\u26a1<\/div>\r\n        <div>\r\n          <h3>Instant Results<\/h3>\r\n          <p>A single cycle handles most water exposure cases. Two cycles clear even heavy splashes or brief submersion.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\ud83d\udee1\ufe0f<\/div>\r\n        <div>\r\n          <h3>Completely Safe<\/h3>\r\n          <p>All frequencies are within safe listening limits and well within your speaker's normal operating range. Zero damage risk.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\ud83c\udf10<\/div>\r\n        <div>\r\n          <h3>No App Required<\/h3>\r\n          <p>Runs entirely in your browser using the Web Audio API. No install, no account, no storage space used on your device.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\ud83d\udcb0<\/div>\r\n        <div>\r\n          <h3>100% Free Forever<\/h3>\r\n          <p>EjectWater.com is and will always be free. No ads during your eject cycle, no paywalls, no limits on usage.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\ud83d\udcd0<\/div>\r\n        <div>\r\n          <h3>5 Frequency Modes<\/h3>\r\n          <p>Choose 165, 175, 180, 200, or 250 Hz to match your specific device type and get the most effective water ejection possible.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"benefit-item reveal\">\r\n        <div class=\"benefit-icon-wrap\" aria-hidden=\"true\">\ud83d\udd07<\/div>\r\n        <div>\r\n          <h3>Prevents Corrosion<\/h3>\r\n          <p>Water left in a speaker causes corrosion, muffled output, and eventual failure. Ejecting it fast protects your investment.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 0 480 56 720 28C960 0 1200 56 1440 28V56H0V28Z\" fill=\"#0B1F3A\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== WHY CHOOSE ======== -->\r\n<section class=\"section\" id=\"why\" aria-labelledby=\"why-heading\">\r\n  <div class=\"container\">\r\n    <div class=\"text-center\">\r\n      <p class=\"eyebrow\">Our Edge<\/p>\r\n      <h2 class=\"display-lg\" id=\"why-heading\" style=\"margin-top:0.4rem;\">Why Choose EjectWater.com?<\/h2>\r\n    <\/div>\r\n    <div class=\"why-grid\">\r\n      <div class=\"why-stats\">\r\n        <div class=\"stat-box reveal\"><div class=\"stat-num\">165<sub>Hz<\/sub><\/div><div class=\"stat-label\">Apple Watch\u2013grade frequency<\/div><\/div>\r\n        <div class=\"stat-box reveal\"><div class=\"stat-num\">30<sub>s<\/sub><\/div><div class=\"stat-label\">Average eject cycle time<\/div><\/div>\r\n        <div class=\"stat-box reveal\"><div class=\"stat-num\">5<\/div><div class=\"stat-label\">Frequency modes available<\/div><\/div>\r\n        <div class=\"stat-box reveal\"><div class=\"stat-num\">$0<\/div><div class=\"stat-label\">Cost \u2014 always free<\/div><\/div>\r\n      <\/div>\r\n      <div>\r\n        <h3 class=\"display-md\" style=\"margin-bottom:1.4rem;\">The fastest way to restore your speaker<\/h3>\r\n        <ul class=\"why-list\">\r\n          <li>Works directly in your browser \u2014 no install, no permissions<\/li>\r\n          <li>Same principle as Apple Watch's built-in Water Lock feature<\/li>\r\n          <li>Automatic device detection recommends the right frequency for you<\/li>\r\n          <li>Five cleaning modes including Pulse, Sweep and Maximum Ejection<\/li>\r\n          <li>Live waveform and droplet visualizer gives real-time feedback while ejecting<\/li>\r\n          <li>Built-in speaker test checks left, right, bass and treble after cleaning<\/li>\r\n          <li>Responsive design \u2014 works on the very device you're drying out<\/li>\r\n          <li>Privacy-first \u2014 zero data collection and zero user tracking<\/li>\r\n        <\/ul>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 56 480 0 720 28C960 56 1200 0 1440 28V56H0V28Z\" fill=\"#0F2847\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== TONE COMPARISON ======== -->\r\n<section class=\"section section-alt\" id=\"tones\" aria-labelledby=\"tones-heading\">\r\n  <div class=\"container-narrow\">\r\n    <div class=\"text-center\">\r\n      <p class=\"eyebrow\">Compare Frequencies<\/p>\r\n      <h2 class=\"display-lg\" id=\"tones-heading\" style=\"margin-top:0.4rem;\">Which Tone Should You Use?<\/h2>\r\n      <p class=\"body-md text-gray\" style=\"max-width:560px;margin:1rem auto 0;\">Preview each frequency and see which device or scenario it works best for.<\/p>\r\n    <\/div>\r\n    <div class=\"tone-table\">\r\n      <div class=\"tone-row reveal\">\r\n        <div class=\"tone-row__freq\">165 Hz<small>Standard<\/small><\/div>\r\n        <div class=\"tone-row__desc\"><strong>Best for iPhone &amp; AirPods.<\/strong> Matches Apple Watch's Water Lock frequency \u2014 a safe, reliable default for most Apple devices.<\/div>\r\n        <button class=\"tone-preview-btn\" data-tone=\"165\" aria-label=\"Preview 165 Hz tone\">\u25b6<\/button>\r\n      <\/div>\r\n      <div class=\"tone-row reveal\">\r\n        <div class=\"tone-row__freq\">175 Hz<small>Android<\/small><\/div>\r\n        <div class=\"tone-row__desc\"><strong>Best for Android phones.<\/strong> A touch higher than 165 Hz, tuned for the smaller speaker drivers common in Android handsets.<\/div>\r\n        <button class=\"tone-preview-btn\" data-tone=\"175\" aria-label=\"Preview 175 Hz tone\">\u25b6<\/button>\r\n      <\/div>\r\n      <div class=\"tone-row reveal\">\r\n        <div class=\"tone-row__freq\">180 Hz<small>Galaxy<\/small><\/div>\r\n        <div class=\"tone-row__desc\"><strong>Best for Samsung Galaxy.<\/strong> Fine-tuned for Galaxy's speaker enclosure design and works well on similarly-built flagships.<\/div>\r\n        <button class=\"tone-preview-btn\" data-tone=\"180\" aria-label=\"Preview 180 Hz tone\">\u25b6<\/button>\r\n      <\/div>\r\n      <div class=\"tone-row reveal\">\r\n        <div class=\"tone-row__freq\">200 Hz<small>Medium<\/small><\/div>\r\n        <div class=\"tone-row__desc\"><strong>Best for tablets &amp; laptops.<\/strong> A mid-range tone that suits larger speaker grilles found on MacBooks and bigger devices.<\/div>\r\n        <button class=\"tone-preview-btn\" data-tone=\"200\" aria-label=\"Preview 200 Hz tone\">\u25b6<\/button>\r\n      <\/div>\r\n      <div class=\"tone-row reveal\">\r\n        <div class=\"tone-row__freq\">250 Hz<small>Deep<\/small><\/div>\r\n        <div class=\"tone-row__desc\"><strong>Best for stubborn water.<\/strong> A deeper tone with more low-end punch \u2014 try this if lighter frequencies didn't fully clear the speaker.<\/div>\r\n        <button class=\"tone-preview-btn\" data-tone=\"250\" aria-label=\"Preview 250 Hz tone\">\u25b6<\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 0 480 56 720 28C960 0 1200 56 1440 28V56H0V28Z\" fill=\"#0B1F3A\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== SPEAKER TEST ======== -->\r\n<section class=\"section\" id=\"speaker-test\" aria-labelledby=\"test-heading\">\r\n  <div class=\"container text-center\">\r\n    <p class=\"eyebrow\">After You Clean<\/p>\r\n    <h2 class=\"display-lg\" id=\"test-heading\" style=\"margin-top:0.4rem;\">Test Your Speaker<\/h2>\r\n    <p class=\"body-md text-gray\" style=\"max-width:560px;margin:1rem auto 0;\">Confirm the water is really gone with a quick audio test across channels and frequency ranges.<\/p>\r\n    <div class=\"test-grid\">\r\n      <button class=\"test-btn reveal\" data-test=\"left\"><span class=\"test-btn__icon\" aria-hidden=\"true\">\u25c0\ud83d\udd0a<\/span><span class=\"test-btn__label\">Left Speaker<\/span><span class=\"test-btn__sub\">Left channel only<\/span><\/button>\r\n      <button class=\"test-btn reveal\" data-test=\"right\"><span class=\"test-btn__icon\" aria-hidden=\"true\">\ud83d\udd0a\u25b6<\/span><span class=\"test-btn__label\">Right Speaker<\/span><span class=\"test-btn__sub\">Right channel only<\/span><\/button>\r\n      <button class=\"test-btn reveal\" data-test=\"stereo\"><span class=\"test-btn__icon\" aria-hidden=\"true\">\ud83c\udf9a\ufe0f<\/span><span class=\"test-btn__label\">Stereo Test<\/span><span class=\"test-btn__sub\">Both channels<\/span><\/button>\r\n      <button class=\"test-btn reveal\" data-test=\"bass\"><span class=\"test-btn__icon\" aria-hidden=\"true\">\ud83d\udd08<\/span><span class=\"test-btn__label\">Bass Test<\/span><span class=\"test-btn__sub\">Low frequency<\/span><\/button>\r\n      <button class=\"test-btn reveal\" data-test=\"treble\"><span class=\"test-btn__icon\" aria-hidden=\"true\">\ud83c\udfb6<\/span><span class=\"test-btn__label\">Treble Test<\/span><span class=\"test-btn__sub\">High frequency<\/span><\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 56 480 0 720 28C960 56 1200 0 1440 28V56H0V28Z\" fill=\"#0F2847\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== FAQ ======== -->\r\n<section class=\"section section-alt\" id=\"faq\" aria-labelledby=\"faq-heading\">\r\n  <div class=\"container-narrow\">\r\n    <div class=\"text-center\">\r\n      <p class=\"eyebrow\">Got Questions?<\/p>\r\n      <h2 class=\"display-lg\" id=\"faq-heading\" style=\"margin-top:0.4rem;\">Frequently Asked Questions<\/h2>\r\n    <\/div>\r\n    <div class=\"faq-list\" itemscope=\"\" itemtype=\"https:\/\/schema.org\/FAQPage\">\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">Does water eject actually work?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Yes \u2014 it works by generating a low-frequency sine wave that causes your speaker membrane to vibrate rapidly. This vibrational force breaks the surface tension of water droplets and physically pushes them through the speaker grille. It's the same principle used by Apple's built-in Water Lock feature on Apple Watch.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">Is it safe for my speakers?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Absolutely. The 165\u2013250 Hz range we use is completely within the normal operating range of your device speaker. Your phone plays music in this frequency band every single day. Even the longest cycle will not damage speaker membranes, voice coils, or any internal components.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">What volume should I use?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Turn your device volume to maximum (100%) before pressing Eject. Higher volume means greater speaker membrane displacement, which means more force to push water out. Use our on-screen volume slider to set the output level for the generated tone.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">Which frequency should I choose?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Our device detection feature recommends a starting frequency automatically. As a rule of thumb, 165 Hz works great for iPhones and AirPods, 175\u2013180 Hz suits Android and Galaxy phones, and 200\u2013250 Hz helps with larger speakers or stubborn water.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">What's the difference between the cleaning modes?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Quick Clean runs a standard 30-second cycle, while Deep Clean extends it to 60 seconds for heavier soaking. Pulse Mode turns the tone on and off in bursts, Sweep Mode gradually moves through a range of frequencies, and Maximum Ejection runs the longest cycle at full output for the toughest cases.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">How many cycles should I run?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">One cycle handles minor splashing or rain. For heavy soaking or brief submersion, run 2\u20133 cycles. Use the \"Did it work?\" prompt after each cycle \u2014 if the answer is no, we'll suggest a stronger mode automatically. Shake your phone gently between cycles to help dislodge remaining water droplets.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">Does it work on Android?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">Yes! The water ejection principle is entirely hardware-based and works the same on any OS. Our tool is browser-based and works on Samsung Galaxy, Google Pixel, OnePlus, Xiaomi, and any other Android device. Open this page on your phone, max the volume, and press Eject.<\/div><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"faq-item\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\r\n        <button class=\"faq-q\" aria-expanded=\"false\"><span itemprop=\"name\">Do I need to download an app?<\/span><span class=\"faq-icon\" aria-hidden=\"true\">+<\/span><\/button>\r\n        <div class=\"faq-a\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\"><div itemprop=\"text\">No download required. EjectWater.com runs entirely in your mobile or desktop browser via the Web Audio API. Just open the page, press the button, and you're done. Works on Safari, Chrome, Firefox, and Edge \u2014 including iOS Safari.<\/div><\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WAVE DIVIDER -->\r\n<div class=\"wave-divider\" aria-hidden=\"true\">\r\n<svg viewBox=\"0 0 1440 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"none\"><path d=\"M0 28C240 0 480 56 720 28C960 0 1200 56 1440 28V56H0V28Z\" fill=\"#0B1F3A\"><\/path><\/svg>\r\n<\/div>\r\n\r\n<!-- ======== DEVICE GUIDES ======== -->\r\n<section class=\"section\" id=\"device-guides\" aria-labelledby=\"guides-heading\">\r\n  <div class=\"container text-center\">\r\n    <p class=\"eyebrow\">Device Guides<\/p>\r\n    <h2 class=\"display-lg\" id=\"guides-heading\" style=\"margin-top:0.4rem;\">Water Eject for Your Device<\/h2>\r\n    <p class=\"body-md text-gray\" style=\"max-width:560px;margin:1rem auto 0;\">Step-by-step guides tailored to your exact device \u2014 with tips for the fastest, safest drying experience.<\/p>\r\n    <div class=\"links-grid\">\r\n      <a href=\"\/water-eject-iphone\/\" class=\"link-card reveal\">\r\n        <span class=\"link-card__icon\" aria-hidden=\"true\">\ud83d\udcf1<\/span>\r\n        <div class=\"link-card__text\"><h4>iPhone Water Eject<\/h4><p>All iPhone models<\/p><\/div>\r\n        <span class=\"link-card__arrow\" aria-hidden=\"true\">\u2192<\/span>\r\n      <\/a>\r\n      <a href=\"\/water-eject-airpods\/\" class=\"link-card reveal\">\r\n        <span class=\"link-card__icon\" aria-hidden=\"true\">\ud83c\udfa7<\/span>\r\n        <div class=\"link-card__text\"><h4>AirPods Water Eject<\/h4><p>AirPods &amp; AirPods Pro<\/p><\/div>\r\n        <span class=\"link-card__arrow\" aria-hidden=\"true\">\u2192<\/span>\r\n      <\/a>\r\n      <a href=\"\/apple-watch-water-eject\/\" class=\"link-card reveal\">\r\n        <span class=\"link-card__icon\" aria-hidden=\"true\">\u231a<\/span>\r\n        <div class=\"link-card__text\"><h4>Apple Watch Eject<\/h4><p>Series 2 and later<\/p><\/div>\r\n        <span class=\"link-card__arrow\" aria-hidden=\"true\">\u2192<\/span>\r\n      <\/a>\r\n      <a href=\"\/android-water-eject\/\" class=\"link-card reveal\">\r\n        <span class=\"link-card__icon\" aria-hidden=\"true\">\ud83e\udd16<\/span>\r\n        <div class=\"link-card__text\"><h4>Android Water Eject<\/h4><p>Samsung, Pixel &amp; more<\/p><\/div>\r\n        <span class=\"link-card__arrow\" aria-hidden=\"true\">\u2192<\/span>\r\n      <\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- ======== FINAL CTA ======== -->\r\n<section class=\"cta-section\" aria-labelledby=\"cta-heading\">\r\n  <div class=\"container-narrow\">\r\n    <p class=\"eyebrow text-center\">Ready?<\/p>\r\n    <h2 class=\"display-lg text-center\" id=\"cta-heading\" style=\"margin-top:0.4rem;position:relative;z-index:1;\">\r\n      Got Water in Your Speaker?<br>\r\n      <span class=\"text-cyan\">Fix It in 30 Seconds<\/span>\r\n    <\/h2>\r\n    <p class=\"body-md text-gray text-center\" style=\"margin-top:1rem;position:relative;z-index:1;\">Free. Instant. No download. Works on any device, any browser.<\/p>\r\n    <div class=\"text-center\" style=\"position:relative;z-index:1;\">\r\n      <a href=\"#tool\" class=\"cta-btn\">\ud83d\udca7 Eject Water Now<\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- ======== FOOTER ======== -->\r\n<footer role=\"contentinfo\">\r\n  <div class=\"footer-inner\">\r\n    <div class=\"footer-brand\">\r\n      <h2><span aria-hidden=\"true\">\ud83d\udca7<\/span> EjectWater<span class=\"text-cyan\">.com<\/span><\/h2>\r\n      <p>The free, instant water ejection tool for every device and every browser. No download needed \u2014 ever.<\/p>\r\n    <\/div>\r\n    <div class=\"footer-links\">\r\n      <h4>Device Guides<\/h4>\r\n      <ul>\r\n        <li><a href=\"\/water-eject-iphone\/\">iPhone Water Eject<\/a><\/li>\r\n        <li><a href=\"\/water-eject-airpods\/\">AirPods Water Eject<\/a><\/li>\r\n        <li><a href=\"\/apple-watch-water-eject\/\">Apple Watch Eject<\/a><\/li>\r\n        <li><a href=\"\/android-water-eject\/\">Android Water Eject<\/a><\/li>\r\n      <\/ul>\r\n    <\/div>\r\n    <div class=\"footer-links\">\r\n      <h4>Resources<\/h4>\r\n      <ul>\r\n        <li><a href=\"\/#how-it-works\">How It Works<\/a><\/li>\r\n        <li><a href=\"\/#faq\">FAQs<\/a><\/li>\r\n        <li><a href=\"\/blog\/\">Water Damage Tips<\/a><\/li>\r\n        <li><a href=\"\/contact\/\">Contact<\/a><\/li>\r\n      <\/ul>\r\n    <\/div>\r\n    <div class=\"footer-links\">\r\n      <h4>Legal<\/h4>\r\n      <ul>\r\n        <li><a href=\"\/privacy\/\">Privacy Policy<\/a><\/li>\r\n        <li><a href=\"\/terms\/\">Terms of Use<\/a><\/li>\r\n        <li><a href=\"\/disclaimer\/\">Disclaimer<\/a><\/li>\r\n      <\/ul>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"footer-bottom\">\r\n    <p>\u00a9 2026 EjectWater.com \u00b7 Free Water Eject Tool \u00b7 Not affiliated with Apple Inc. All trademarks belong to their respective owners. <\/p>\r\n  <\/div>\r\n<\/footer>\r\n\r\n<!-- ======== STRUCTURED DATA ======== -->\r\n<script type=\"application\/ld+json\">\r\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"name\":\"EjectWater.com\",\"url\":\"https:\/\/ejectwater.com\",\"description\":\"Free online water eject tool \u2014 remove water from any device speaker instantly using sound wave technology.\"},{\"@type\":\"SoftwareApplication\",\"name\":\"Water Eject Tool\",\"applicationCategory\":\"UtilitiesApplication\",\"operatingSystem\":\"Web Browser\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"description\":\"Browser-based water ejection tool that uses tuned sound wave frequencies and multiple cleaning modes to remove water from device speakers.\"}]}\r\n<\/script>\r\n\r\n<!-- ======== JAVASCRIPT ======== -->\r\n<script>\r\n(function () {\r\n  'use strict';\r\n\r\n  \/* =========================================================\r\n     1. DEVICE DETECTION\r\n  ========================================================= *\/\r\n  const DEVICE_MAP = [\r\n    { test: \/iPhone.*OS 1[7-9]|iPhone.*OS 2\/i, name: 'iPhone (Recent Model)', icon: '\ud83d\udcf1', freq: 165 },\r\n    { test: \/iPhone\/i,                          name: 'iPhone',                icon: '\ud83d\udcf1', freq: 165 },\r\n    { test: \/iPad\/i,                            name: 'iPad',                  icon: '\ud83d\udcf1', freq: 200 },\r\n    { test: \/Macintosh\/i,                       name: 'MacBook',               icon: '\ud83d\udcbb', freq: 200 },\r\n    { test: \/SM-S9|SM-S91|Galaxy S2\/i,          name: 'Samsung Galaxy S-Series', icon: '\ud83d\udcf1', freq: 180 },\r\n    { test: \/SM-|Samsung\/i,                     name: 'Samsung Galaxy',        icon: '\ud83d\udcf1', freq: 180 },\r\n    { test: \/Pixel\/i,                           name: 'Google Pixel',          icon: '\ud83d\udcf1', freq: 175 },\r\n    { test: \/OnePlus\/i,                         name: 'OnePlus Phone',         icon: '\ud83d\udcf1', freq: 175 },\r\n    { test: \/Android\/i,                         name: 'Android Device',        icon: '\ud83e\udd16', freq: 175 },\r\n    { test: \/Windows\/i,                         name: 'Windows PC',            icon: '\ud83d\udcbb', freq: 200 },\r\n    { test: \/Linux\/i,                           name: 'Linux Device',          icon: '\ud83d\udcbb', freq: 200 }\r\n  ];\r\n\r\n  function detectDevice() {\r\n    const ua = navigator.userAgent || '';\r\n    let match = DEVICE_MAP.find(d => d.test.test(ua));\r\n    if (!match) match = { name: 'Your Device', icon: '\ud83d\udcf6', freq: 165 };\r\n\r\n    const detectIcon   = document.getElementById('detectIcon');\r\n    const detectDevice = document.getElementById('detectDevice');\r\n    detectIcon.textContent = match.icon;\r\n    detectDevice.innerHTML = match.name + ' \u00b7 Recommended <span class=\"detect-banner__freq\">' + match.freq + ' Hz<\/span>';\r\n\r\n    \/\/ Auto-select the closest available frequency button\r\n    const freqButtons = Array.from(document.querySelectorAll('.freq-btn'));\r\n    let closest = freqButtons[0];\r\n    let closestDiff = Infinity;\r\n    freqButtons.forEach(btn => {\r\n      const diff = Math.abs(parseInt(btn.dataset.freq) - match.freq);\r\n      if (diff < closestDiff) { closestDiff = diff; closest = btn; }\r\n    });\r\n    if (closest) closest.click();\r\n  }\r\n\r\n  \/* =========================================================\r\n     2. MODE CONFIG\r\n  ========================================================= *\/\r\n  const MODES = {\r\n    quick: { label: 'Quick Clean',   duration: 30, pattern: 'steady' },\r\n    deep:  { label: 'Deep Clean',    duration: 60, pattern: 'steady' },\r\n    pulse: { label: 'Pulse Mode',    duration: 40, pattern: 'pulse'  },\r\n    sweep: { label: 'Sweep Mode',    duration: 45, pattern: 'sweep'  },\r\n    max:   { label: 'Maximum Ejection', duration: 60, pattern: 'max' }\r\n  };\r\n  let selectedMode = 'quick';\r\n\r\n  \/* \u2500\u2500 Waveform bars \u2500\u2500 *\/\r\n  const wf = document.getElementById('waveform');\r\n  const BAR_COUNT = 36;\r\n  const bars = [];\r\n  for (let i = 0; i < BAR_COUNT; i++) {\r\n    const b = document.createElement('div');\r\n    b.className = 'wave-bar';\r\n    const midDist = Math.abs(i - BAR_COUNT \/ 2) \/ (BAR_COUNT \/ 2);\r\n    const h = Math.max(5, Math.round((1 - midDist * 0.55) * 46));\r\n    b.style.height = '6px';\r\n    b.style.setProperty('--h', h + 'px');\r\n    wf.appendChild(b);\r\n    bars.push({ el: b, baseH: h });\r\n  }\r\n\r\n  \/* \u2500\u2500 Audio engine \u2500\u2500 *\/\r\n  let audioCtx = null, oscillator = null, gainNode = null;\r\n  let isPlaying = false, selectedFreq = 165, progress = 0, progressInterval = null, pulseInterval = null;\r\n  let currentDuration = 30;\r\n  const RING_CIRCUMFERENCE = 2 * Math.PI * 33;\r\n\r\n  const progressRing     = document.getElementById('progressRing');\r\n  const progressPct      = document.getElementById('progressPct');\r\n  const progressRemaining = document.getElementById('progressRemaining');\r\n  const progressModeLabel = document.getElementById('progressModeLabel');\r\n  const toolStatus   = document.getElementById('toolStatus');\r\n  const ejectBtn     = document.getElementById('ejectBtn');\r\n  const btnIcon      = document.getElementById('btnIcon');\r\n  const btnText      = document.getElementById('btnText');\r\n  const toolCard     = document.getElementById('tool');\r\n  const ejectStage   = document.getElementById('ejectStage');\r\n  const confirmCard  = document.getElementById('confirmCard');\r\n  const confirmFollowup = document.getElementById('confirmFollowup');\r\n  const inlineTestCard = document.getElementById('inlineTestCard');\r\n\r\n  progressRing.setAttribute('stroke-dasharray', RING_CIRCUMFERENCE);\r\n  progressRing.setAttribute('stroke-dashoffset', RING_CIRCUMFERENCE);\r\n\r\n  function initAudio() {\r\n    if (!audioCtx) audioCtx = new (window.AudioContext || window.webkitAudioContext)();\r\n  }\r\n\r\n  function updateModeLabel() {\r\n    progressModeLabel.textContent = MODES[selectedMode].label + ' \u00b7 ' + selectedFreq + ' Hz';\r\n    progressRemaining.textContent = MODES[selectedMode].duration + ' sec remaining';\r\n  }\r\n  updateModeLabel();\r\n\r\n  function startEject() {\r\n    initAudio();\r\n    if (audioCtx.state === 'suspended') audioCtx.resume();\r\n    confirmCard.classList.remove('show');\r\n    confirmFollowup.classList.remove('show');\r\n    inlineTestCard.classList.remove('show');\r\n    stopTest();\r\n\r\n    const mode = MODES[selectedMode];\r\n    currentDuration = mode.duration;\r\n\r\n    oscillator = audioCtx.createOscillator();\r\n    gainNode   = audioCtx.createGain();\r\n    oscillator.type = 'sine';\r\n    oscillator.frequency.setValueAtTime(selectedFreq, audioCtx.currentTime);\r\n    const vol = parseInt(document.getElementById('volumeSlider').value) \/ 100;\r\n    const effectiveVol = mode.pattern === 'max' ? Math.max(vol, 0.95) : vol;\r\n    gainNode.gain.setValueAtTime(effectiveVol * 0.8, audioCtx.currentTime);\r\n    oscillator.connect(gainNode);\r\n    gainNode.connect(audioCtx.destination);\r\n    oscillator.start();\r\n\r\n    isPlaying = true;\r\n    progress  = 0;\r\n    updateUI(true);\r\n    animateBars(true);\r\n    ejectStage.classList.add('is-active');\r\n    toolCard.classList.add('is-playing');\r\n\r\n    \/\/ Pattern-specific behavior\r\n    if (mode.pattern === 'pulse') {\r\n      let on = true;\r\n      pulseInterval = setInterval(() => {\r\n        on = !on;\r\n        gainNode.gain.setValueAtTime(on ? effectiveVol * 0.8 : 0, audioCtx.currentTime);\r\n      }, 400);\r\n    } else if (mode.pattern === 'sweep') {\r\n      pulseInterval = setInterval(() => {\r\n        const t = (progress \/ currentDuration);\r\n        const sweepFreq = 150 + Math.sin(t * Math.PI * 4) * 60;\r\n        oscillator.frequency.setValueAtTime(sweepFreq, audioCtx.currentTime);\r\n      }, 250);\r\n    }\r\n\r\n    progressInterval = setInterval(() => {\r\n      progress++;\r\n      const pct = Math.min(100, (progress \/ currentDuration) * 100);\r\n      const offset = RING_CIRCUMFERENCE - (pct \/ 100) * RING_CIRCUMFERENCE;\r\n      progressRing.setAttribute('stroke-dashoffset', offset);\r\n      progressPct.textContent = Math.round(pct) + '%';\r\n      const remaining = Math.max(0, currentDuration - progress);\r\n      progressRemaining.textContent = remaining + ' sec remaining';\r\n      document.querySelector('[role=progressbar]').setAttribute('aria-valuenow', progress);\r\n      if (progress >= currentDuration) stopEject(true);\r\n    }, 1000);\r\n  }\r\n\r\n  function stopEject(completed) {\r\n    if (oscillator) { try { oscillator.stop(); } catch(e){} oscillator.disconnect(); oscillator = null; }\r\n    if (gainNode)   { gainNode.disconnect(); gainNode = null; }\r\n    clearInterval(progressInterval);\r\n    clearInterval(pulseInterval);\r\n    isPlaying = false;\r\n    animateBars(false);\r\n    ejectStage.classList.remove('is-active');\r\n    toolCard.classList.remove('is-playing');\r\n    updateUI(false, completed);\r\n    if (!completed) {\r\n      progressRing.setAttribute('stroke-dashoffset', RING_CIRCUMFERENCE);\r\n      progressPct.textContent = '0%';\r\n      progressRemaining.textContent = currentDuration + ' sec remaining';\r\n    } else {\r\n      inlineTestCard.classList.add('show');\r\n      confirmCard.classList.add('show');\r\n    }\r\n  }\r\n\r\n  function updateUI(playing, completed) {\r\n    if (playing) {\r\n      ejectBtn.classList.add('playing');\r\n      btnIcon.textContent = '\u23f9';\r\n      btnText.textContent = 'Stop Ejecting';\r\n      toolStatus.textContent = '\ud83c\udf0a Ejecting water\u2026 keep your volume at maximum!';\r\n      toolStatus.classList.add('active');\r\n    } else if (completed) {\r\n      ejectBtn.classList.remove('playing');\r\n      btnIcon.textContent = '\u2705';\r\n      btnText.textContent = 'Run Again';\r\n      toolStatus.textContent = '\u2705 Cycle complete! Let us know below if it worked.';\r\n      toolStatus.classList.add('active');\r\n      setTimeout(() => { btnIcon.textContent = '\ud83d\udca7'; btnText.textContent = 'Eject Water Now'; }, 4500);\r\n    } else {\r\n      ejectBtn.classList.remove('playing');\r\n      btnIcon.textContent = '\ud83d\udca7';\r\n      btnText.textContent = 'Eject Water Now';\r\n      toolStatus.textContent = 'Turn volume to max for best results, then press Eject';\r\n      toolStatus.classList.remove('active');\r\n    }\r\n  }\r\n\r\n  \/* \u2500\u2500 Waveform animation \u2500\u2500 *\/\r\n  let animFrame = null;\r\n  function animateBars(active) {\r\n    cancelAnimationFrame(animFrame);\r\n    if (active) {\r\n      (function loop() {\r\n        bars.forEach(bar => {\r\n          bar.el.classList.add('active');\r\n          const jitter = (Math.random() - 0.5) * 0.42;\r\n          bar.el.style.setProperty('--h', Math.max(5, bar.baseH + bar.baseH * jitter) + 'px');\r\n          bar.el.style.animationDelay = (Math.random() * 0.28) + 's';\r\n        });\r\n        animFrame = requestAnimationFrame(loop);\r\n      })();\r\n    } else {\r\n      bars.forEach(bar => { bar.el.classList.remove('active'); bar.el.style.height = '6px'; });\r\n    }\r\n  }\r\n\r\n  \/* \u2500\u2500 Eject button \u2500\u2500 *\/\r\n  ejectBtn.addEventListener('click', () => { isPlaying ? stopEject(false) : startEject(); });\r\n\r\n  \/* \u2500\u2500 Frequency selector \u2500\u2500 *\/\r\n  document.querySelectorAll('.freq-btn').forEach(btn => {\r\n    btn.addEventListener('click', () => {\r\n      document.querySelectorAll('.freq-btn').forEach(b => { b.classList.remove('active'); b.setAttribute('aria-pressed','false'); });\r\n      btn.classList.add('active'); btn.setAttribute('aria-pressed','true');\r\n      selectedFreq = parseInt(btn.dataset.freq);\r\n      updateModeLabel();\r\n      if (isPlaying && oscillator) oscillator.frequency.setValueAtTime(selectedFreq, audioCtx.currentTime);\r\n    });\r\n  });\r\n\r\n  \/* \u2500\u2500 Mode selector \u2500\u2500 *\/\r\n  document.querySelectorAll('.mode-btn').forEach(btn => {\r\n    btn.addEventListener('click', () => {\r\n      document.querySelectorAll('.mode-btn').forEach(b => { b.classList.remove('active'); b.setAttribute('aria-pressed','false'); });\r\n      btn.classList.add('active'); btn.setAttribute('aria-pressed','true');\r\n      selectedMode = btn.dataset.mode;\r\n      updateModeLabel();\r\n    });\r\n  });\r\n\r\n  \/* \u2500\u2500 Volume slider \u2500\u2500 *\/\r\n  const slider = document.getElementById('volumeSlider');\r\n  const vlabel = document.getElementById('volLabel');\r\n  slider.addEventListener('input', () => {\r\n    vlabel.textContent = slider.value + '%';\r\n    if (gainNode) gainNode.gain.setValueAtTime(parseInt(slider.value) \/ 100 * 0.8, audioCtx ? audioCtx.currentTime : 0);\r\n  });\r\n\r\n  \/* =========================================================\r\n     5. SUCCESS CONFIRMATION\r\n  ========================================================= *\/\r\n  document.getElementById('voteYes').addEventListener('click', () => {\r\n    confirmFollowup.classList.remove('show');\r\n    confirmCard.classList.remove('show');\r\n    toolStatus.textContent = '\ud83c\udf89 Great! Your speaker should be clear now.';\r\n    toolStatus.classList.add('active');\r\n  });\r\n  document.getElementById('voteNo').addEventListener('click', () => {\r\n    confirmFollowup.classList.add('show');\r\n    \/\/ Bump to a stronger mode automatically for the next run\r\n    const nextMode = selectedMode === 'quick' ? 'deep' : (selectedMode === 'deep' ? 'max' : 'max');\r\n    document.querySelector('.mode-btn[data-mode=\"' + nextMode + '\"]').click();\r\n    confirmFollowup.textContent = \"Let's try another cycle \u2014 switching to \" + MODES[nextMode].label + ' for extra power.';\r\n    setTimeout(() => { startEject(); }, 900);\r\n  });\r\n\r\n  \/* =========================================================\r\n     6. SPEAKER TEST\r\n  ========================================================= *\/\r\n  let testOsc = null, testGain = null, testPanner = null, testTimeout = null;\r\n  function stopTest() {\r\n    if (testOsc) { try { testOsc.stop(); } catch(e){} testOsc.disconnect(); testOsc = null; }\r\n    if (testGain) { testGain.disconnect(); testGain = null; }\r\n    if (testPanner) { testPanner.disconnect(); testPanner = null; }\r\n    clearTimeout(testTimeout);\r\n    document.querySelectorAll('.test-btn').forEach(b => b.classList.remove('playing'));\r\n  }\r\n  const TEST_CONFIG = {\r\n    left:   { freq: 440, pan: -1, duration: 2000 },\r\n    right:  { freq: 440, pan: 1,  duration: 2000 },\r\n    stereo: { freq: 440, pan: 0,  duration: 2500 },\r\n    bass:   { freq: 80,  pan: 0,  duration: 2000 },\r\n    treble: { freq: 3000,pan: 0,  duration: 2000 }\r\n  };\r\n  document.querySelectorAll('.test-btn').forEach(btn => {\r\n    btn.addEventListener('click', () => {\r\n      initAudio();\r\n      if (audioCtx.state === 'suspended') audioCtx.resume();\r\n      const wasPlaying = btn.classList.contains('playing');\r\n      stopTest();\r\n      if (wasPlaying) return;\r\n      const cfg = TEST_CONFIG[btn.dataset.test];\r\n      testOsc = audioCtx.createOscillator();\r\n      testGain = audioCtx.createGain();\r\n      testOsc.type = 'sine';\r\n      testOsc.frequency.setValueAtTime(cfg.freq, audioCtx.currentTime);\r\n      testGain.gain.setValueAtTime(0.7, audioCtx.currentTime);\r\n      if (audioCtx.createStereoPanner) {\r\n        testPanner = audioCtx.createStereoPanner();\r\n        testPanner.pan.setValueAtTime(cfg.pan, audioCtx.currentTime);\r\n        testOsc.connect(testGain);\r\n        testGain.connect(testPanner);\r\n        testPanner.connect(audioCtx.destination);\r\n      } else {\r\n        testOsc.connect(testGain);\r\n        testGain.connect(audioCtx.destination);\r\n      }\r\n      testOsc.start();\r\n      btn.classList.add('playing');\r\n      testTimeout = setTimeout(stopTest, cfg.duration);\r\n    });\r\n  });\r\n\r\n  \/* =========================================================\r\n     9. TONE COMPARISON PREVIEW\r\n  ========================================================= *\/\r\n  let previewOsc = null, previewGain = null, previewTimeout = null;\r\n  function stopPreview() {\r\n    if (previewOsc) { try { previewOsc.stop(); } catch(e){} previewOsc.disconnect(); previewOsc = null; }\r\n    if (previewGain) { previewGain.disconnect(); previewGain = null; }\r\n    clearTimeout(previewTimeout);\r\n    document.querySelectorAll('.tone-preview-btn').forEach(b => { b.classList.remove('playing'); b.textContent = '\u25b6'; });\r\n  }\r\n  document.querySelectorAll('.tone-preview-btn').forEach(btn => {\r\n    btn.addEventListener('click', () => {\r\n      initAudio();\r\n      if (audioCtx.state === 'suspended') audioCtx.resume();\r\n      const wasPlaying = btn.classList.contains('playing');\r\n      stopPreview();\r\n      if (wasPlaying) return;\r\n      previewOsc = audioCtx.createOscillator();\r\n      previewGain = audioCtx.createGain();\r\n      previewOsc.type = 'sine';\r\n      previewOsc.frequency.setValueAtTime(parseInt(btn.dataset.tone), audioCtx.currentTime);\r\n      previewGain.gain.setValueAtTime(0.6, audioCtx.currentTime);\r\n      previewOsc.connect(previewGain);\r\n      previewGain.connect(audioCtx.destination);\r\n      previewOsc.start();\r\n      btn.classList.add('playing');\r\n      btn.textContent = '\u23f9';\r\n      previewTimeout = setTimeout(stopPreview, 2500);\r\n    });\r\n  });\r\n\r\n  \/* \u2500\u2500 FAQ accordion \u2500\u2500 *\/\r\n  document.querySelectorAll('.faq-q').forEach(btn => {\r\n    btn.addEventListener('click', () => {\r\n      const item   = btn.closest('.faq-item');\r\n      const isOpen = item.classList.contains('open');\r\n      document.querySelectorAll('.faq-item').forEach(i => i.classList.remove('open'));\r\n      document.querySelectorAll('.faq-q').forEach(b => b.setAttribute('aria-expanded','false'));\r\n      if (!isOpen) { item.classList.add('open'); btn.setAttribute('aria-expanded','true'); }\r\n    });\r\n  });\r\n\r\n  \/* \u2500\u2500 Mobile nav \u2500\u2500 *\/\r\n  const toggle = document.getElementById('menuToggle');\r\n  const drawer = document.getElementById('mobileDrawer');\r\n  toggle.addEventListener('click', () => {\r\n    const open = drawer.classList.toggle('open');\r\n    toggle.classList.toggle('open', open);\r\n    toggle.setAttribute('aria-expanded', open);\r\n    drawer.setAttribute('aria-hidden', !open);\r\n  });\r\n  drawer.querySelectorAll('a').forEach(a => {\r\n    a.addEventListener('click', () => {\r\n      drawer.classList.remove('open');\r\n      toggle.classList.remove('open');\r\n      toggle.setAttribute('aria-expanded','false');\r\n      drawer.setAttribute('aria-hidden','true');\r\n    });\r\n  });\r\n\r\n  \/* \u2500\u2500 Scroll reveal \u2500\u2500 *\/\r\n  if ('IntersectionObserver' in window) {\r\n    const io = new IntersectionObserver(entries => {\r\n      entries.forEach((e, i) => {\r\n        if (e.isIntersecting) {\r\n          setTimeout(() => e.target.classList.add('visible'), i * 55);\r\n          io.unobserve(e.target);\r\n        }\r\n      });\r\n    }, { threshold: 0.08, rootMargin: '0px 0px -30px 0px' });\r\n    document.querySelectorAll('.reveal').forEach(el => io.observe(el));\r\n  } else {\r\n    document.querySelectorAll('.reveal').forEach(el => el.classList.add('visible'));\r\n  }\r\n\r\n  \/* \u2500\u2500 Init device detection on load \u2500\u2500 *\/\r\n  detectDevice();\r\n\r\n})();\r\n<\/script>\r\n\r\n<\/div><!-- \/.ew-page -->\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\ud83d\udca7 EjectWater.com How It Works Devices Benefits FAQ Eject Water \u2193 How It Works Supported Devices Benefits FAQ \ud83d\udca7 Eject Water Now Free Online Tool \u2014 No Download Needed Eject Water From Any Device Speaker Play a precision sound wave that pushes trapped water out of your speaker grille in seconds. Works on iPhone, Android, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":49,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9","page","type-page","status-publish","has-post-thumbnail","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":16,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":163,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages\/9\/revisions\/163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/media\/49"}],"wp:attachment":[{"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}