{"id":54,"date":"2026-07-24T15:56:30","date_gmt":"2026-07-24T15:56:30","guid":{"rendered":"https:\/\/ejectwater.com\/?page_id=54"},"modified":"2026-07-25T17:30:06","modified_gmt":"2026-07-25T17:30:06","slug":"blog","status":"publish","type":"page","link":"https:\/\/ejectwater.com\/zh\/blog\/","title":{"rendered":"The\u00a0Water Damage\u00a0Blog"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"54\" class=\"elementor elementor-54\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08be6fe e-con-full e-flex e-con e-parent\" data-id=\"08be6fe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f7e97a4 elementor-widget elementor-widget-html\" data-id=\"f7e97a4\" 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*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}\r\nhtml{scroll-behavior:smooth;}\r\nbody{font-family:'Inter',sans-serif;background:#0B1F3A;color:#F8FBFF;overflow-x:hidden;line-height:1.6;-webkit-text-size-adjust:100%;}\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\/* VARIABLES *\/\r\n:root{\r\n  --navy:#0B1F3A;--navy2:#0F2847;--cyan:#00D4FF;--cyan2:#00A8CC;\r\n  --white:#F8FBFF;--gray:#B0C4D8;--amber:#FFB347;--green:#00E5A0;\r\n  --card:rgba(255,255,255,0.05);--border:rgba(0,212,255,0.18);\r\n  --container-px:1.25rem;--container-max:1200px;\r\n}\r\n\r\n\/* TYPOGRAPHY *\/\r\n.display-xl{font-family:'Syne',sans-serif;font-size:clamp(2rem,5.5vw,4.6rem);font-weight:800;line-height:1.08;letter-spacing:-0.025em;}\r\n.display-lg{font-family:'Syne',sans-serif;font-size:clamp(1.5rem,3.5vw,2.5rem);font-weight:700;line-height:1.18;letter-spacing:-0.015em;}\r\n.eyebrow{font-family:'Syne',sans-serif;font-size:0.72rem;font-weight:700;letter-spacing:0.16em;text-transform:uppercase;color:var(--cyan);}\r\n.text-cyan{color:var(--cyan);}\r\n.text-gray{color:var(--gray);}\r\n.text-center{text-align:center;}\r\n\r\n\/* LAYOUT *\/\r\n.container{width:100%;max-width:var(--container-max);margin:0 auto;padding:0 var(--container-px);}\r\n.container-narrow{width:100%;max-width:800px;margin:0 auto;padding:0 var(--container-px);}\r\n\r\n\/* NAVBAR *\/\r\n.navbar{position:sticky;top:0;z-index:200;background:rgba(11,31,58,0.94);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);}\r\n.navbar__inner{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 var(--container-px);max-width:var(--container-max);margin:0 auto;gap:1rem;}\r\n.navbar__logo{font-family:'Syne',sans-serif;font-size:1.15rem;font-weight:800;color:var(--white);display:flex;align-items:center;gap:0.45rem;flex-shrink:0;white-space:nowrap;}\r\n.navbar__logo-icon{width:30px;height:30px;background:linear-gradient(135deg,var(--cyan),var(--cyan2));border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:0.9rem;flex-shrink:0;}\r\n.navbar__nav{display:flex;gap:1.75rem;list-style:none;align-items:center;}\r\n.navbar__nav a{font-size:0.875rem;font-weight:500;color:var(--gray);transition:color 0.2s;white-space:nowrap;}\r\n.navbar__cta{background:var(--cyan);color:var(--navy);font-weight:700;font-size:0.825rem;padding:0.5rem 1.1rem;border-radius:8px;transition:all 0.2s;white-space:nowrap;flex-shrink:0;display:inline-block;}\r\n.navbar__hamburger{display:none;flex-direction:column;gap:5px;padding:6px;flex-shrink:0;cursor:pointer;background:none;border:none;}\r\n.navbar__hamburger span{display:block;width:22px;height:2px;background:var(--gray);border-radius:2px;transition:all 0.25s;}\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.navbar__drawer{display:none;flex-direction:column;background:rgba(11,31,58,0.98);border-top:1px solid var(--border);padding:1.25rem var(--container-px);gap:0.25rem;}\r\n.navbar__drawer.open{display:flex;}\r\n.navbar__drawer a{font-size:1rem;font-weight:500;color:var(--gray);padding:0.75rem 0;border-bottom:1px solid rgba(255,255,255,0.05);transition:color 0.2s;}\r\n.navbar__drawer a:last-child{border-bottom:none;}\r\n.navbar__drawer .drawer-cta{margin-top:0.75rem;background:var(--cyan);color:var(--navy);font-weight:700;text-align:center;padding:0.85rem;border-radius:10px;font-size:0.95rem;}\r\n\r\n\/* WAVE *\/\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\/* BREADCRUMB *\/\r\n.breadcrumb{background:rgba(255,255,255,0.03);border-bottom:1px solid rgba(255,255,255,0.05);padding:0.65rem 0;}\r\n.breadcrumb__inner{display:flex;align-items:center;flex-wrap:wrap;gap:0.35rem;font-size:0.78rem;color:var(--gray);max-width:var(--container-max);margin:0 auto;padding:0 var(--container-px);}\r\n.breadcrumb__sep{opacity:0.35;}\r\n.breadcrumb__current{color:var(--cyan);font-weight:500;}\r\n\r\n\/* HERO *\/\r\n.blog-hero{padding:clamp(3rem,6vw,5rem) 0 clamp(2rem,4vw,3rem);position:relative;overflow:hidden;}\r\n.blog-hero__bg{position:absolute;inset:0;pointer-events:none;}\r\n.blog-hero__circle{position:absolute;border-radius:50%;background:radial-gradient(circle,rgba(0,212,255,0.08) 0%,transparent 70%);animation:pulse-bg 5s ease-in-out infinite;}\r\n.blog-hero__circle:nth-child(1){width:50vw;height:50vw;max-width:580px;max-height:580px;top:-30%;right:-12%;}\r\n.blog-hero__circle:nth-child(2){width:35vw;height:35vw;max-width:400px;max-height:400px;bottom:-20%;left:-8%;animation-delay:2.5s;}\r\n@keyframes pulse-bg{0%,100%{opacity:0.5;transform:scale(1);}50%{opacity:0.9;transform:scale(1.06);}}\r\n.blog-hero__inner{position:relative;z-index:1;}\r\n.blog-hero__badge{display:inline-flex;align-items:center;gap:0.45rem;background:rgba(0,212,255,0.1);border:1px solid var(--border);border-radius:50px;padding:0.3rem 0.9rem;margin-bottom:1.25rem;}\r\n.blog-hero__badge-dot{width:7px;height:7px;background:var(--cyan);border-radius:50%;flex-shrink:0;animation:blink 1.6s ease-in-out infinite;}\r\n@keyframes blink{0%,100%{opacity:1;}50%{opacity:0.25;}}\r\n\r\n\/* CATEGORY PILLS *\/\r\n.category-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0.5rem;margin-top:2rem;}\r\n.category-pill{display:inline-flex;align-items:center;gap:0.4rem;font-size:0.8rem;font-weight:600;font-family:'Syne',sans-serif;color:var(--gray);padding:0.45rem 1rem;border:1px solid var(--border);border-radius:50px;cursor:pointer;transition:all 0.2s;background:transparent;-webkit-tap-highlight-color:transparent;}\r\n.category-pill.active{background:rgba(0,212,255,0.1);color:var(--cyan);border-color:rgba(0,212,255,0.4);}\r\n\r\n\/* BLOG LAYOUT *\/\r\n.blog-layout{padding:clamp(2.5rem,5vw,4rem) 0 clamp(3rem,6vw,5rem);}\r\n.blog-grid{display:grid;grid-template-columns:1fr 320px;gap:3rem;align-items:start;}\r\n\r\n\/* FEATURED POST *\/\r\n.featured-card{display:grid;grid-template-columns:1fr 1fr;gap:0;background:var(--card);border:1px solid var(--border);border-radius:20px;overflow:hidden;margin-bottom:2.5rem;transition:border-color 0.22s;text-decoration:none;color:var(--white);}\r\n.featured-card__visual{background:linear-gradient(135deg,#0F2847 0%,#0B1F3A 100%);min-height:260px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}\r\n.featured-card__visual-bg{position:absolute;inset:0;background:radial-gradient(circle at 40% 50%,rgba(0,212,255,0.12) 0%,transparent 65%);}\r\n.featured-card__visual-icon{font-size:4.5rem;position:relative;z-index:1;}\r\n.featured-card__visual img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}\r\n.featured-card__body{padding:2rem 1.75rem;display:flex;flex-direction:column;justify-content:center;}\r\n.featured-label{display:inline-flex;align-items:center;gap:0.4rem;font-size:0.68rem;font-weight:700;font-family:'Syne',sans-serif;letter-spacing:0.1em;text-transform:uppercase;color:var(--cyan);background:rgba(0,212,255,0.1);padding:0.22rem 0.65rem;border-radius:50px;margin-bottom:0.85rem;}\r\n.featured-card__title{font-family:'Syne',sans-serif;font-size:clamp(1.1rem,2.2vw,1.4rem);font-weight:700;color:var(--white);line-height:1.3;margin-bottom:0.75rem;}\r\n.featured-card__excerpt{font-size:0.875rem;color:var(--gray);line-height:1.72;margin-bottom:1.25rem;}\r\n.featured-card__meta{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;}\r\n.post-meta-item{display:flex;align-items:center;gap:0.35rem;font-size:0.75rem;color:var(--gray);}\r\n.read-more{display:inline-flex;align-items:center;gap:0.4rem;font-size:0.82rem;font-weight:600;font-family:'Syne',sans-serif;color:var(--cyan);transition:color 0.2s;margin-top:auto;}\r\n\r\n\/* POST GRID *\/\r\n.posts-section-title{font-family:'Syne',sans-serif;font-size:0.72rem;font-weight:700;letter-spacing:0.14em;text-transform:uppercase;color:var(--gray);margin-bottom:1.25rem;padding-bottom:0.75rem;border-bottom:1px solid rgba(255,255,255,0.07);}\r\n.posts-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.25rem;}\r\n.post-card{background:var(--card);border:1px solid var(--border);border-radius:16px;overflow:hidden;transition:all 0.22s;display:flex;flex-direction:column;animation:fadeInUp 0.4s ease both;}\r\n.post-card__visual{background:linear-gradient(135deg,#0F2847,#0B1F3A);height:140px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;flex-shrink:0;}\r\n.post-card__visual-bg{position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,rgba(0,212,255,0.1) 0%,transparent 65%);}\r\n.post-card__icon{font-size:2.5rem;position:relative;z-index:1;}\r\n.post-card__visual img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}\r\n.post-card__body{padding:1.1rem 1.1rem 1.25rem;display:flex;flex-direction:column;flex:1;}\r\n.post-card__category{display:inline-block;font-size:0.65rem;font-weight:700;font-family:'Syne',sans-serif;letter-spacing:0.09em;text-transform:uppercase;color:var(--cyan);background:rgba(0,212,255,0.1);padding:0.18rem 0.55rem;border-radius:50px;margin-bottom:0.6rem;}\r\n.post-card__title{font-family:'Syne',sans-serif;font-size:0.95rem;font-weight:700;color:var(--white);line-height:1.35;margin-bottom:0.5rem;transition:color 0.2s;}\r\n.post-card__excerpt{font-size:0.8rem;color:var(--gray);line-height:1.65;margin-bottom:0.85rem;flex:1;}\r\n.post-card__footer{display:flex;align-items:center;justify-content:space-between;padding-top:0.75rem;border-top:1px solid rgba(255,255,255,0.06);}\r\n.post-card__date{font-size:0.72rem;color:var(--gray);}\r\n.post-card__read{font-size:0.72rem;font-weight:600;font-family:'Syne',sans-serif;color:var(--cyan);}\r\n\r\n\/* LIST POSTS *\/\r\n.posts-list{display:flex;flex-direction:column;gap:1rem;margin-top:2.5rem;}\r\n.post-list-item{display:flex;gap:1.1rem;align-items:flex-start;background:var(--card);border:1px solid var(--border);border-radius:14px;padding:1.1rem 1.1rem;transition:all 0.22s;animation:fadeInUp 0.4s ease both;}\r\n.post-list-item:hover{border-color:rgba(0,212,255,0.3);transform:translateX(3px);}\r\n.post-list-item__icon-wrap{flex-shrink:0;width:52px;height:52px;border-radius:12px;background:linear-gradient(135deg,rgba(0,212,255,0.12),rgba(0,168,204,0.06));display:flex;align-items:center;justify-content:center;font-size:1.4rem;overflow:hidden;}\r\n.post-list-item__icon-wrap img{width:100%;height:100%;object-fit:cover;}\r\n.post-list-item__body{min-width:0;flex:1;}\r\n.post-list-item__category{font-size:0.65rem;font-weight:700;font-family:'Syne',sans-serif;letter-spacing:0.09em;text-transform:uppercase;color:var(--cyan);margin-bottom:0.25rem;}\r\n.post-list-item__title{font-family:'Syne',sans-serif;font-size:0.92rem;font-weight:700;color:var(--white);line-height:1.35;margin-bottom:0.3rem;transition:color 0.2s;}\r\n.post-list-item:hover .post-list-item__title{color:var(--cyan);}\r\n.post-list-item__meta{font-size:0.73rem;color:var(--gray);}\r\n.post-list-item__arrow{flex-shrink:0;font-size:0.8rem;color:var(--gray);margin-top:2px;transition:color 0.2s;}\r\n.post-list-item:hover .post-list-item__arrow{color:var(--cyan);}\r\n\r\n@keyframes fadeInUp{from{opacity:0;transform:translateY(12px);}to{opacity:1;transform:translateY(0);}}\r\n\r\n\/* SKELETONS *\/\r\n.skeleton{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--border);}\r\n.skeleton::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.06),transparent);animation:shimmer 1.4s infinite;}\r\n@keyframes shimmer{0%{transform:translateX(-100%);}100%{transform:translateX(100%);}}\r\n.skeleton-card{border-radius:16px;height:280px;}\r\n.skeleton-featured{border-radius:20px;height:260px;margin-bottom:2.5rem;}\r\n.skeleton-list-item{border-radius:14px;height:74px;}\r\n\r\n\/* EMPTY \/ ERROR STATES *\/\r\n.state-box{grid-column:1\/-1;text-align:center;padding:3rem 1.5rem;background:var(--card);border:1px solid var(--border);border-radius:16px;}\r\n.state-box__icon{font-size:2.5rem;margin-bottom:0.75rem;}\r\n.state-box__title{font-family:'Syne',sans-serif;font-size:1.05rem;font-weight:700;color:var(--white);margin-bottom:0.5rem;}\r\n.state-box__text{font-size:0.85rem;color:var(--gray);max-width:420px;margin:0 auto 1.25rem;line-height:1.6;}\r\n.retry-btn{display:inline-flex;align-items:center;gap:0.5rem;font-family:'Syne',sans-serif;font-size:0.85rem;font-weight:700;color:var(--gray);border:1px solid var(--border);padding:0.65rem 1.4rem;border-radius:10px;transition:all 0.2s;}\r\n\r\n\/* LOAD MORE *\/\r\n.load-more-wrap{text-align:center;margin-top:2rem;}\r\n.load-more-btn{display:inline-flex;align-items:center;gap:0.55rem;font-family:'Syne',sans-serif;font-size:0.875rem;font-weight:700;color:var(--gray);border:1px solid var(--border);padding:0.75rem 1.75rem;border-radius:10px;transition:all 0.2s;cursor:pointer;-webkit-tap-highlight-color:transparent;}\r\n.load-more-btn:disabled{opacity:0.5;cursor:default;}\r\n.ew-page .load-more-btn:hover:not(:disabled){border-color:var(--cyan)!important;color:var(--cyan)!important;}\r\n\r\n\/* SIDEBAR *\/\r\n.blog-sidebar{position:sticky;top:80px;display:flex;flex-direction:column;gap:1.25rem;}\r\n.sidebar-widget{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:1.35rem 1.25rem;}\r\n.sidebar-widget__title{font-family:'Syne',sans-serif;font-size:0.72rem;font-weight:700;letter-spacing:0.14em;text-transform:uppercase;color:var(--gray);margin-bottom:1rem;padding-bottom:0.7rem;border-bottom:1px solid rgba(255,255,255,0.07);}\r\n\r\n\/* Tool widget *\/\r\n.sidebar-tool{background:linear-gradient(135deg,rgba(0,212,255,0.1),rgba(0,168,204,0.04));border:1px solid var(--border);border-radius:16px;padding:1.35rem 1.25rem;text-align:center;}\r\n.sidebar-tool__icon{font-size:2.2rem;margin-bottom:0.75rem;display:block;}\r\n.sidebar-tool h3{font-family:'Syne',sans-serif;font-size:1rem;font-weight:700;color:var(--white);margin-bottom:0.4rem;}\r\n.sidebar-tool p{font-size:0.8rem;color:var(--gray);margin-bottom:1.1rem;line-height:1.55;}\r\n.sidebar-tool-btn{display:block;width:100%;background:linear-gradient(135deg,var(--cyan),var(--cyan2));color:var(--navy);font-family:'Syne',sans-serif;font-size:0.875rem;font-weight:700;padding:0.8rem 1rem;border-radius:10px;text-align:center;transition:all 0.22s;-webkit-tap-highlight-color:transparent;}\r\n\r\n\/* Recent posts widget *\/\r\n.sidebar-post{display:flex;gap:0.75rem;align-items:flex-start;padding:0.65rem 0;border-bottom:1px solid rgba(255,255,255,0.05);}\r\n.sidebar-post:last-child{border-bottom:none;padding-bottom:0;}\r\n.sidebar-post__num{flex-shrink:0;width:22px;height:22px;border-radius:6px;background:rgba(0,212,255,0.1);display:flex;align-items:center;justify-content:center;font-family:'Syne',sans-serif;font-size:0.65rem;font-weight:700;color:var(--cyan);margin-top:1px;}\r\n.sidebar-post__title{font-size:0.82rem;color:var(--gray);line-height:1.45;transition:color 0.2s;font-weight:500;}\r\n.sidebar-widget-link{display:block;cursor:pointer;transition:color 0.2s;}\r\n.sidebar-widget__empty{font-size:0.8rem;color:var(--gray);}\r\n\r\n\/* Categories widget *\/\r\n.sidebar-category{display:flex;justify-content:space-between;align-items:center;padding:0.55rem 0;border-bottom:1px solid rgba(255,255,255,0.05);font-size:0.84rem;color:var(--gray);transition:color 0.2s;cursor:pointer;}\r\n.sidebar-category:last-child{border-bottom:none;padding-bottom:0;}\r\n.sidebar-category__count{font-family:'Syne',sans-serif;font-size:0.7rem;font-weight:700;color:var(--cyan);background:rgba(0,212,255,0.1);padding:0.15rem 0.5rem;border-radius:50px;}\r\n\r\n\/* Newsletter widget *\/\r\n.newsletter-widget{background:linear-gradient(135deg,rgba(255,179,71,0.07),rgba(255,179,71,0.03));border:1px solid rgba(255,179,71,0.2);border-radius:16px;padding:1.35rem 1.25rem;}\r\n.newsletter-widget h3{font-family:'Syne',sans-serif;font-size:0.95rem;font-weight:700;color:var(--white);margin-bottom:0.35rem;}\r\n.newsletter-widget p{font-size:0.8rem;color:#C9A050;margin-bottom:1rem;line-height:1.55;}\r\n.newsletter-input{width:100%;background:rgba(255,255,255,0.06);border:1px solid rgba(255,179,71,0.25);border-radius:9px;padding:0.7rem 0.9rem;font-size:0.85rem;color:var(--white);font-family:'Inter',sans-serif;outline:none;margin-bottom:0.65rem;}\r\n.newsletter-input::placeholder{color:rgba(176,196,216,0.5);}\r\n.newsletter-btn{width:100%;background:var(--amber);color:var(--navy);font-family:'Syne',sans-serif;font-size:0.85rem;font-weight:700;padding:0.75rem;border-radius:9px;border:none;cursor:pointer;transition:background 0.2s;-webkit-tap-highlight-color:transparent;}\r\n.newsletter-msg{font-size:0.78rem;margin-top:0.6rem;min-height:1em;}\r\n\r\n\/* Tags widget *\/\r\n.tags-cloud{display:flex;flex-wrap:wrap;gap:0.4rem;margin-top:0.25rem;}\r\n.tag-pill{font-size:0.73rem;font-weight:600;font-family:'Syne',sans-serif;color:var(--gray);border:1px solid var(--border);padding:0.28rem 0.7rem;border-radius:50px;cursor:pointer;transition:all 0.18s;}\r\n\r\n\/* CTA SECTION *\/\r\n.cta-section{padding:clamp(3.5rem,7vw,5.5rem) 0;text-align:center;background:linear-gradient(180deg,var(--navy) 0%,#071427 100%);position:relative;overflow:hidden;}\r\n.cta-section::before{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(650px,100vw);height:min(650px,100vw);border-radius:50%;background:radial-gradient(circle,rgba(0,212,255,0.07) 0%,transparent 65%);pointer-events:none;}\r\n.cta-btn{display:inline-flex;align-items:center;gap:0.6rem;background:linear-gradient(135deg,var(--cyan),var(--cyan2));color:var(--navy)!important;font-family:'Syne',sans-serif;font-size:clamp(0.95rem,1.8vw,1.05rem);font-weight:700;padding:0.95rem 2.25rem;border-radius:12px;transition:all 0.22s;box-shadow:0 4px 24px rgba(0,212,255,0.3);margin-top:1.75rem;position:relative;z-index:1;-webkit-tap-highlight-color:transparent;}\r\n.legal-nav{display:flex;justify-content:center;flex-wrap:wrap;gap:0.5rem 0.75rem;margin-top:1.75rem;position:relative;z-index:1;}\r\n.legal-nav a{font-size:0.82rem;color:var(--gray);padding:0.4rem 0.9rem;border:1px solid var(--border);border-radius:50px;transition:all 0.2s;}\r\n\r\n\/* FOOTER *\/\r\nfooter{background:#07121F;border-top:1px solid rgba(255,255,255,0.06);padding:3rem 0 1.75rem;}\r\n.footer-inner{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:2.5rem 2rem;max-width:var(--container-max);margin:0 auto;padding:0 var(--container-px);}\r\n.footer-brand h2{font-family:'Syne',sans-serif;font-size:1.1rem;font-weight:800;color:var(--white);display:flex;align-items:center;gap:0.45rem;flex-wrap:wrap;}\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{font-family:'Syne',sans-serif;font-size:0.72rem;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;color:var(--gray);margin-bottom:0.85rem;}\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-bottom{max-width:var(--container-max);margin:2rem auto 0;padding:1.35rem var(--container-px) 0;border-top:1px solid rgba(255,255,255,0.06);text-align:center;font-size:0.78rem;color:rgba(176,196,216,0.4);}\r\n\r\n\/* RESPONSIVE *\/\r\n@media(max-width:1023px){\r\n  .blog-grid{grid-template-columns:1fr;}\r\n  .blog-sidebar{position:static;}\r\n  .footer-inner{grid-template-columns:repeat(2,1fr);}\r\n  .posts-grid{grid-template-columns:repeat(2,1fr);}\r\n}\r\n@media(max-width:767px){\r\n  .navbar__nav,.navbar__cta{display:none;}\r\n  .navbar__hamburger{display:flex;}\r\n  .navbar__inner{height:58px;}\r\n  .footer-inner{grid-template-columns:1fr 1fr;}\r\n  .footer-brand{grid-column:span 2;}\r\n  .featured-card{grid-template-columns:1fr;}\r\n  .featured-card__visual{min-height:180px;}\r\n  .posts-grid{grid-template-columns:1fr;}\r\n}\r\n@media(max-width:599px){\r\n  :root{--container-px:1rem;}\r\n  .footer-inner{grid-template-columns:1fr;}\r\n  .footer-brand{grid-column:span 1;}\r\n  .posts-grid{grid-template-columns:1fr;}\r\n  .category-row{gap:0.35rem;}\r\n  .category-pill{font-size:0.72rem;padding:0.4rem 0.75rem;}\r\n}\r\n@media(max-width:479px){\r\n  .display-xl{font-size:clamp(1.75rem,8.5vw,2.4rem);}\r\n  .display-lg{font-size:clamp(1.35rem,6vw,1.85rem);}\r\n}\r\n@media(min-width:1440px){:root{--container-max:1360px;}}\r\n\r\n.reveal{opacity:0;transform:translateY(16px);}\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<div class=\"ew-page\">\r\n\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=\"\/#faq\">FAQ<\/a><\/li>\r\n      <li><a href=\"\/blog\/\" style=\"color:#00D4FF;font-weight:600;\">Blog<\/a><\/li>\r\n    <\/ul>\r\n    <a href=\"\/#tool\" class=\"navbar__cta\">Eject Water<\/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  <div class=\"navbar__drawer\" id=\"mobileDrawer\" role=\"menu\" aria-hidden=\"true\">\r\n    <a href=\"\/#how-it-works\">How It Works<\/a>\r\n    <a href=\"\/#devices\">Supported Devices<\/a>\r\n    <a href=\"\/#faq\">FAQ<\/a>\r\n    <a href=\"\/blog\/\" style=\"color:var(--cyan);\">Blog<\/a>\r\n    <a href=\"\/#tool\" class=\"drawer-cta\">\ud83d\udca7 Eject Water Now<\/a>\r\n  <\/div>\r\n<\/nav>\r\n\r\n<!-- BREADCRUMB -->\r\n<div class=\"breadcrumb\" aria-label=\"Breadcrumb\">\r\n  <div class=\"breadcrumb__inner\">\r\n    <a href=\"\/\">EjectWater.com<\/a>\r\n    <span class=\"breadcrumb__sep\" aria-hidden=\"true\">\u203a<\/span>\r\n    <span class=\"breadcrumb__current\">Blog<\/span>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- HERO -->\r\n<header class=\"blog-hero\" role=\"banner\">\r\n  <div class=\"blog-hero__bg\" aria-hidden=\"true\">\r\n    <div class=\"blog-hero__circle\"><\/div>\r\n    <div class=\"blog-hero__circle\"><\/div>\r\n  <\/div>\r\n  <div class=\"container blog-hero__inner text-center\">\r\n    <div class=\"blog-hero__badge\">\r\n      <span class=\"blog-hero__badge-dot\" aria-hidden=\"true\"><\/span>\r\n      <span class=\"eyebrow\">Tips, Guides and Advice<\/span>\r\n    <\/div>\r\n    <h1 class=\"display-xl\">\r\n      Phone <span class=\"text-cyan\">Water Damage<\/span> Blog\r\n    <\/h1>\r\n    <p class=\"text-gray\" style=\"font-size:clamp(1rem,1.5vw,1.1rem);max-width:1580px;margin:1rem auto 0;line-height:1.78;\">\r\n   Welcome to our Phone Water Damage & Water Eject Resource Center, your trusted source for guides on removing water from device speakers, preventing phone water damage, and protecting your smartphone after accidental exposure to moisture. Whether your phone was dropped in water or your speaker sounds muffled, our articles explain the safest and most effective solutions.\r\n\r\nBrowse the guides below to learn about water eject sounds, drying a wet phone, fixing speaker and charging port issues, understanding IP67 and IP68 water resistance, and keeping your iPhone, Android, AirPods, or Apple Watch working properly after water exposure.\r\n\r\n\r\n\r\n    <!-- CATEGORY FILTER (populated dynamically from WordPress categories) -->\r\n    <nav class=\"category-row\" id=\"categoryRow\" aria-label=\"Filter posts by category\">\r\n      <button class=\"category-pill active\" data-category=\"all\">All Posts<\/button>\r\n    <\/nav>\r\n  <\/div>\r\n<\/header>\r\n\r\n<!-- WAVE -->\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<!-- BLOG BODY -->\r\n<main class=\"blog-layout\" style=\"background:var(--navy2);\">\r\n  <div class=\"container\">\r\n    <div class=\"blog-grid\">\r\n\r\n      <!-- MAIN CONTENT -->\r\n      <div class=\"blog-main\">\r\n\r\n        <!-- FEATURED POST (rendered dynamically) -->\r\n        <div id=\"featuredSlot\">\r\n          <div class=\"skeleton skeleton-featured\" aria-hidden=\"true\"><\/div>\r\n        <\/div>\r\n\r\n        <!-- LATEST POSTS GRID -->\r\n        <div class=\"posts-section-title\" id=\"gridTitle\" style=\"display:none;\">Latest Articles<\/div>\r\n        <div class=\"posts-grid\" id=\"postsGrid\">\r\n          <div class=\"skeleton skeleton-card\" aria-hidden=\"true\"><\/div>\r\n          <div class=\"skeleton skeleton-card\" aria-hidden=\"true\"><\/div>\r\n          <div class=\"skeleton skeleton-card\" aria-hidden=\"true\"><\/div>\r\n          <div class=\"skeleton skeleton-card\" aria-hidden=\"true\"><\/div>\r\n        <\/div><!-- \/.posts-grid -->\r\n\r\n        <!-- MORE POSTS LIST -->\r\n        <div class=\"posts-section-title\" id=\"listTitle\" style=\"margin-top:2.5rem;display:none;\">More Articles<\/div>\r\n        <div class=\"posts-list\" id=\"postsList\">\r\n          <div class=\"skeleton skeleton-list-item\" aria-hidden=\"true\"><\/div>\r\n          <div class=\"skeleton skeleton-list-item\" aria-hidden=\"true\"><\/div>\r\n          <div class=\"skeleton skeleton-list-item\" aria-hidden=\"true\"><\/div>\r\n        <\/div><!-- \/.posts-list -->\r\n\r\n        <div class=\"load-more-wrap\" id=\"loadMoreWrap\" style=\"display:none;\">\r\n          <button class=\"load-more-btn\" id=\"loadMoreBtn\" aria-label=\"Load more articles\">\r\n            <span>Load More Articles<\/span>\r\n            <span aria-hidden=\"true\">\u2193<\/span>\r\n          <\/button>\r\n        <\/div>\r\n\r\n      <\/div><!-- \/.blog-main -->\r\n\r\n      <!-- SIDEBAR -->\r\n      <aside class=\"blog-sidebar\" aria-label=\"Blog sidebar\">\r\n\r\n        <!-- Tool widget -->\r\n        <div class=\"sidebar-tool\">\r\n          <span class=\"sidebar-tool__icon\" aria-hidden=\"true\">\ud83d\udca7<\/span>\r\n          <h3>Got Water in Your Speaker?<\/h3>\r\n          <p>Use our free tool to push it out in 30 seconds. No app, no download, no sign-up.<\/p>\r\n          <a href=\"\/#tool\" class=\"sidebar-tool-btn\">Eject Water Now<\/a>\r\n        <\/div>\r\n\r\n        <!-- Recent posts (always shows the 5 latest, regardless of filter) -->\r\n        <div class=\"sidebar-widget\">\r\n          <div class=\"sidebar-widget__title\">Recent Posts<\/div>\r\n          <div id=\"recentPostsWidget\">\r\n            <div class=\"skeleton\" style=\"height:18px;border-radius:5px;margin-bottom:12px;\" aria-hidden=\"true\"><\/div>\r\n            <div class=\"skeleton\" style=\"height:18px;border-radius:5px;margin-bottom:12px;\" aria-hidden=\"true\"><\/div>\r\n            <div class=\"skeleton\" style=\"height:18px;border-radius:5px;\" aria-hidden=\"true\"><\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Categories -->\r\n        <div class=\"sidebar-widget\">\r\n          <div class=\"sidebar-widget__title\">Categories<\/div>\r\n          <div id=\"categoriesWidget\">\r\n            <span class=\"sidebar-widget__empty\">Loading\u2026<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Device guides links (static \u2014 these are your fixed product pages, not blog posts) -->\r\n        <div class=\"sidebar-widget\">\r\n          <div class=\"sidebar-widget__title\">Device Guides<\/div>\r\n          <div class=\"sidebar-post\">\r\n            <div class=\"sidebar-post__num\" style=\"font-size:0.8rem;\">\ud83d\udcf1<\/div>\r\n            <a href=\"\/water-eject-iphone\/\" class=\"sidebar-widget-link sidebar-post__title\">iPhone Water Eject Guide<\/a>\r\n          <\/div>\r\n          <div class=\"sidebar-post\">\r\n            <div class=\"sidebar-post__num\" style=\"font-size:0.8rem;\">\ud83c\udfa7<\/div>\r\n            <a href=\"\/water-eject-airpods\/\" class=\"sidebar-widget-link sidebar-post__title\">AirPods Water Eject Guide<\/a>\r\n          <\/div>\r\n          <div class=\"sidebar-post\">\r\n            <div class=\"sidebar-post__num\" style=\"font-size:0.8rem;\">\u231a<\/div>\r\n            <a href=\"\/apple-watch-water-eject\/\" class=\"sidebar-widget-link sidebar-post__title\">Apple Watch Water Eject Guide<\/a>\r\n          <\/div>\r\n          <div class=\"sidebar-post\">\r\n            <div class=\"sidebar-post__num\" style=\"font-size:0.8rem;\">\ud83e\udd16<\/div>\r\n            <a href=\"\/android-water-eject\/\" class=\"sidebar-widget-link sidebar-post__title\">Android Water Eject Guide<\/a>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Tags -->\r\n        <div class=\"sidebar-widget\">\r\n          <div class=\"sidebar-widget__title\">Tags<\/div>\r\n          <div class=\"tags-cloud\" id=\"tagsWidget\">\r\n            <span class=\"sidebar-widget__empty\">Loading\u2026<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Newsletter -->\r\n        <div class=\"newsletter-widget\">\r\n          <h3>\ud83d\udca1 Get Water Damage Tips<\/h3>\r\n          <p>We write new guides every week. Get them straight to your inbox.<\/p>\r\n          <form id=\"newsletterForm\">\r\n            <input type=\"email\" class=\"newsletter-input\" id=\"newsletterEmail\" placeholder=\"your@email.com\" aria-label=\"Email address for newsletter\" required=\"\">\r\n            <button class=\"newsletter-btn\" type=\"submit\">Subscribe Free<\/button>\r\n            <div class=\"newsletter-msg\" id=\"newsletterMsg\"><\/div>\r\n          <\/form>\r\n        <\/div>\r\n\r\n      <\/aside><!-- \/.blog-sidebar -->\r\n\r\n    <\/div><!-- \/.blog-grid -->\r\n  <\/div><!-- \/.container -->\r\n<\/main>\r\n\r\n<!-- WAVE -->\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<!-- CTA -->\r\n<section class=\"cta-section\" aria-label=\"Use water eject tool\">\r\n  <div class=\"container-narrow\">\r\n    <p class=\"eyebrow text-center\">Free Tool. No Download.<\/p>\r\n    <h2 class=\"display-lg text-center\" 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=\"text-gray text-center\" style=\"font-size:0.95rem;margin-top:0.9rem;position:relative;z-index:1;\">Browser-based. Works on every device. Completely free.<\/p>\r\n    <div class=\"text-center\">\r\n      <a href=\"\/#tool\" class=\"cta-btn\">\ud83d\udca7 Use the Water Eject Tool<\/a>\r\n    <\/div>\r\n    <nav class=\"legal-nav\" aria-label=\"Site navigation\">\r\n      <a href=\"\/\">Home<\/a>\r\n      <a href=\"\/water-eject-iphone\/\">iPhone<\/a>\r\n      <a href=\"\/water-eject-airpods\/\">AirPods<\/a>\r\n      <a href=\"\/apple-watch-water-eject\/\">Apple Watch<\/a>\r\n      <a href=\"\/android-water-eject\/\">Android<\/a>\r\n    <\/nav>\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.<\/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\/\" style=\"color:var(--cyan);\">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. Not affiliated with Apple Inc. or Google LLC. All trademarks belong to their respective owners.<\/p>\r\n  <\/div>\r\n<\/footer>\r\n\r\n\r\n<!-- JS -->\r\n<script>\r\n(function(){\r\n  'use strict';\r\n\r\n  \/* ============================================================\r\n     STATIC UI: mobile nav + scroll reveal (unchanged behavior)\r\n     ============================================================ *\/\r\n  var toggle=document.getElementById('menuToggle');\r\n  var drawer=document.getElementById('mobileDrawer');\r\n  if(toggle&&drawer){\r\n    toggle.addEventListener('click',function(){\r\n      var 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(function(a){\r\n      a.addEventListener('click',function(){\r\n        drawer.classList.remove('open');toggle.classList.remove('open');\r\n        toggle.setAttribute('aria-expanded','false');drawer.setAttribute('aria-hidden','true');\r\n      });\r\n    });\r\n  }\r\n\r\n  if('IntersectionObserver' in window){\r\n    var io=new IntersectionObserver(function(entries){\r\n      entries.forEach(function(e,i){\r\n        if(e.isIntersecting){\r\n          setTimeout(function(){e.target.classList.add('visible');},i*55);\r\n          io.unobserve(e.target);\r\n        }\r\n      });\r\n    },{threshold:0.07,rootMargin:'0px 0px -24px 0px'});\r\n    document.querySelectorAll('.reveal').forEach(function(el){io.observe(el);});\r\n  }\r\n\r\n  \/* Newsletter form \u2014 hook your ESP (Mailchimp\/ConvertKit\/etc) up here *\/\r\n  var newsletterForm=document.getElementById('newsletterForm');\r\n  var newsletterMsg=document.getElementById('newsletterMsg');\r\n  if(newsletterForm){\r\n    newsletterForm.addEventListener('submit',function(e){\r\n      e.preventDefault();\r\n      \/\/ TODO: replace this block with a real POST to your email\r\n      \/\/ service provider's subscribe endpoint (Mailchimp, ConvertKit,\r\n      \/\/ Brevo, etc). This currently just confirms the input locally.\r\n      newsletterMsg.textContent='Thanks! You\\'re on the list.';\r\n      newsletterMsg.style.color='var(--green)';\r\n      newsletterForm.reset();\r\n    });\r\n  }\r\n\r\n  \/* ============================================================\r\n     DYNAMIC BLOG: pulled live from the WordPress REST API\r\n     ============================================================ *\/\r\n  \/\/ If this site runs WordPress in a subfolder (e.g. example.com\/blog-cms),\r\n  \/\/ window.location.origin alone won't include that subfolder. Set SITE_ROOT\r\n  \/\/ manually in that case, e.g. 'https:\/\/example.com\/blog-cms'. Leave as ''\r\n  \/\/ to auto-detect from the current page (correct for almost every install).\r\n  var SITE_ROOT = '' || window.location.origin;\r\n  var REST_BASE = SITE_ROOT + '\/wp-json\/wp\/v2';\r\n\r\n  \/\/ Robust fetch: tries the standard pretty-permalink REST URL first\r\n  \/\/ (\/wp-json\/wp\/v2\/...). If that 404s \u2014 which happens when a site's\r\n  \/\/ permalinks are set to \"Plain\" or a security plugin blocks \/wp-json\/ \u2014\r\n  \/\/ it automatically falls back to the always-available\r\n  \/\/ \/?rest_route=\/wp\/v2\/... form. Returns {json, headers}.\r\n  function apiFetch(path, params){\r\n    params = params || {};\r\n    var qs = Object.keys(params).map(function(k){\r\n      return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]);\r\n    }).join('&');\r\n    var prettyUrl = REST_BASE + path + (qs ? '?' + qs : '');\r\n\r\n    return fetch(prettyUrl).then(function(res){\r\n      if(res.status === 404){\r\n        var fallbackParams = Object.assign({}, params, { rest_route: '\/wp\/v2' + path });\r\n        var fqs = Object.keys(fallbackParams).map(function(k){\r\n          return encodeURIComponent(k) + '=' + encodeURIComponent(fallbackParams[k]);\r\n        }).join('&');\r\n        var fallbackUrl = SITE_ROOT + '\/?' + fqs;\r\n        return fetch(fallbackUrl);\r\n      }\r\n      return res;\r\n    }).then(function(res){\r\n      if(!res.ok) throw new Error('WordPress REST API returned ' + res.status + ' for ' + path);\r\n      return res.json().then(function(json){ return { json: json, headers: res.headers }; });\r\n    });\r\n  }\r\n\r\n  var GRID_SIZE = 6;          \/\/ posts shown as cards under the featured post\r\n  var LIST_INITIAL = 8;       \/\/ posts shown as list rows on first load\r\n  var LIST_INCREMENT = 8;     \/\/ posts fetched per \"Load More\" click\r\n  var INITIAL_FETCH = 1 + GRID_SIZE + LIST_INITIAL; \/\/ 15\r\n\r\n  var state = { page: 1, totalPages: 1, category: 'all', loading: false };\r\n\r\n  var categoryEmoji = {\r\n    'how-to': '\ud83d\udee0\ufe0f', 'howto': '\ud83d\udee0\ufe0f', 'guides': '\ud83d\udee0\ufe0f',\r\n    'device-tips': '\ud83d\udcf1', 'devicetips': '\ud83d\udcf1', 'device tips': '\ud83d\udcf1',\r\n    'prevention': '\ud83d\udee1\ufe0f',\r\n    'repair': '\ud83d\udd27', 'repair-advice': '\ud83d\udd27',\r\n    'science': '\ud83d\udd2c', 'the-science': '\ud83d\udd2c'\r\n  };\r\n\r\n  function getEmojiForCategory(name){\r\n    if(!name) return '\ud83d\udca7';\r\n    var key = name.toLowerCase().trim();\r\n    return categoryEmoji[key] || '\ud83d\udca7';\r\n  }\r\n\r\n  function stripHtml(html){\r\n    var tmp = document.createElement('div');\r\n    tmp.innerHTML = html || '';\r\n    return (tmp.textContent || tmp.innerText || '').replace(\/\\s+\/g,' ').trim();\r\n  }\r\n\r\n  function truncate(str, n){\r\n    if(str.length <= n) return str;\r\n    return str.slice(0, n).replace(\/\\s+\\S*$\/, '') + '\u2026';\r\n  }\r\n\r\n  function formatDate(dateStr){\r\n    try{\r\n      return new Date(dateStr).toLocaleDateString('en-US',{month:'long',day:'numeric',year:'numeric'});\r\n    }catch(e){ return ''; }\r\n  }\r\n\r\n  function readTime(html){\r\n    var words = stripHtml(html).split(' ').filter(Boolean).length;\r\n    var mins = Math.max(1, Math.round(words \/ 200));\r\n    return mins + ' min read';\r\n  }\r\n\r\n  function getImage(post){\r\n    try{\r\n      var media = post._embedded['wp:featuredmedia'][0];\r\n      return media && media.source_url ? media.source_url : null;\r\n    }catch(e){ return null; }\r\n  }\r\n\r\n  function getCategoryInfo(post){\r\n    try{\r\n      var terms = post._embedded['wp:term'][0];\r\n      var cat = terms.filter(function(t){return t.taxonomy==='category';})[0];\r\n      return cat ? { name: cat.name, id: cat.id } : { name: 'Guide', id: null };\r\n    }catch(e){ return { name: 'Guide', id: null }; }\r\n  }\r\n\r\n  function escapeHtml(str){\r\n    var d = document.createElement('div');\r\n    d.textContent = str;\r\n    return d.innerHTML;\r\n  }\r\n\r\n  function visualMarkup(post, sizeClass){\r\n    var img = getImage(post);\r\n    var cat = getCategoryInfo(post);\r\n    var emoji = getEmojiForCategory(cat.name);\r\n    if(img){\r\n      return '<img decoding=\"async\" src=\"'+img+'\" alt=\"\" loading=\"lazy\">';\r\n    }\r\n    return '<div class=\"'+sizeClass+'-bg\" aria-hidden=\"true\"><\/div><span class=\"'+sizeClass+'\" aria-hidden=\"true\" style=\"position:relative;z-index:1;\">'+emoji+'<\/span>';\r\n  }\r\n\r\n  function buildFeaturedCard(post){\r\n    var cat = getCategoryInfo(post);\r\n    var title = escapeHtml(stripHtml(post.title.rendered));\r\n    var excerpt = escapeHtml(truncate(stripHtml(post.excerpt.rendered), 180));\r\n    var img = getImage(post);\r\n    var visual = img\r\n      ? '<img decoding=\"async\" src=\"'+img+'\" alt=\"\" loading=\"lazy\">'\r\n      : '<div class=\"featured-card__visual-bg\" aria-hidden=\"true\"><\/div><span class=\"featured-card__visual-icon\" aria-hidden=\"true\">'+getEmojiForCategory(cat.name)+'<\/span>';\r\n\r\n    return '' +\r\n      '<a href=\"'+post.link+'\" class=\"featured-card\" aria-label=\"Read: '+title+'\">' +\r\n        '<div class=\"featured-card__visual\">'+visual+'<\/div>' +\r\n        '<div class=\"featured-card__body\">' +\r\n          '<span class=\"featured-label\">\u2b50 Featured Post<\/span>' +\r\n          '<h2 class=\"featured-card__title\">'+title+'<\/h2>' +\r\n          '<p class=\"featured-card__excerpt\">'+excerpt+'<\/p>' +\r\n          '<div class=\"featured-card__meta\">' +\r\n            '<span class=\"post-meta-item\">\ud83d\udcc5 '+formatDate(post.date)+'<\/span>' +\r\n            '<span class=\"post-meta-item\">\u23f1 '+readTime(post.content.rendered)+'<\/span>' +\r\n            '<span class=\"post-meta-item\" style=\"color:var(--cyan);font-weight:600;\">'+escapeHtml(cat.name)+'<\/span>' +\r\n          '<\/div>' +\r\n          '<span class=\"read-more\" style=\"margin-top:1rem;\">Read Article \u2192<\/span>' +\r\n        '<\/div>' +\r\n      '<\/a>';\r\n  }\r\n\r\n  function buildPostCard(post){\r\n    var cat = getCategoryInfo(post);\r\n    var title = escapeHtml(stripHtml(post.title.rendered));\r\n    var excerpt = escapeHtml(truncate(stripHtml(post.excerpt.rendered), 110));\r\n    var img = getImage(post);\r\n    var visual = img\r\n      ? '<img decoding=\"async\" src=\"'+img+'\" alt=\"\" loading=\"lazy\">'\r\n      : '<div class=\"post-card__visual-bg\" aria-hidden=\"true\"><\/div><span class=\"post-card__icon\" aria-hidden=\"true\">'+getEmojiForCategory(cat.name)+'<\/span>';\r\n\r\n    return '' +\r\n      '<a href=\"'+post.link+'\" class=\"post-card\" data-category=\"'+(cat.id||'')+'\">' +\r\n        '<div class=\"post-card__visual\">'+visual+'<\/div>' +\r\n        '<div class=\"post-card__body\">' +\r\n          '<span class=\"post-card__category\">'+escapeHtml(cat.name)+'<\/span>' +\r\n          '<h3 class=\"post-card__title\">'+title+'<\/h3>' +\r\n          '<p class=\"post-card__excerpt\">'+excerpt+'<\/p>' +\r\n          '<div class=\"post-card__footer\">' +\r\n            '<span class=\"post-card__date\">'+formatDate(post.date)+'<\/span>' +\r\n            '<span class=\"post-card__read\">'+readTime(post.content.rendered)+'<\/span>' +\r\n          '<\/div>' +\r\n        '<\/div>' +\r\n      '<\/a>';\r\n  }\r\n\r\n  function buildListItem(post){\r\n    var cat = getCategoryInfo(post);\r\n    var title = escapeHtml(stripHtml(post.title.rendered));\r\n    var img = getImage(post);\r\n    var iconInner = img ? '<img decoding=\"async\" src=\"'+img+'\" alt=\"\" loading=\"lazy\">' : getEmojiForCategory(cat.name);\r\n\r\n    return '' +\r\n      '<a href=\"'+post.link+'\" class=\"post-list-item\">' +\r\n        '<div class=\"post-list-item__icon-wrap\" aria-hidden=\"true\">'+iconInner+'<\/div>' +\r\n        '<div class=\"post-list-item__body\">' +\r\n          '<div class=\"post-list-item__category\">'+escapeHtml(cat.name)+'<\/div>' +\r\n          '<div class=\"post-list-item__title\">'+title+'<\/div>' +\r\n          '<div class=\"post-list-item__meta\">'+formatDate(post.date)+' \u00b7 '+readTime(post.content.rendered)+'<\/div>' +\r\n        '<\/div>' +\r\n        '<span class=\"post-list-item__arrow\" aria-hidden=\"true\">\u2192<\/span>' +\r\n      '<\/a>';\r\n  }\r\n\r\n  var featuredSlot = document.getElementById('featuredSlot');\r\n  var gridEl = document.getElementById('postsGrid');\r\n  var listEl = document.getElementById('postsList');\r\n  var gridTitle = document.getElementById('gridTitle');\r\n  var listTitle = document.getElementById('listTitle');\r\n  var loadMoreWrap = document.getElementById('loadMoreWrap');\r\n  var loadMoreBtn = document.getElementById('loadMoreBtn');\r\n\r\n  function showSkeletons(){\r\n    featuredSlot.innerHTML = '<div class=\"skeleton skeleton-featured\" aria-hidden=\"true\"><\/div>';\r\n    gridEl.innerHTML = '<div class=\"skeleton skeleton-card\"><\/div><div class=\"skeleton skeleton-card\"><\/div><div class=\"skeleton skeleton-card\"><\/div><div class=\"skeleton skeleton-card\"><\/div>';\r\n    listEl.innerHTML = '<div class=\"skeleton skeleton-list-item\"><\/div><div class=\"skeleton skeleton-list-item\"><\/div><div class=\"skeleton skeleton-list-item\"><\/div>';\r\n    gridTitle.style.display='none'; listTitle.style.display='none';\r\n    loadMoreWrap.style.display='none';\r\n  }\r\n\r\n  function showEmptyState(){\r\n    featuredSlot.innerHTML='';\r\n    gridTitle.style.display='none';\r\n    listTitle.style.display='none';\r\n    loadMoreWrap.style.display='none';\r\n    gridEl.innerHTML = '<div class=\"state-box\"><div class=\"state-box__icon\">\ud83d\udcdd<\/div>' +\r\n      '<div class=\"state-box__title\">No posts yet<\/div>' +\r\n      '<div class=\"state-box__text\">This category doesn\\'t have any published posts yet. Publish one in WordPress and it will show up here automatically.<\/div><\/div>';\r\n    listEl.innerHTML='';\r\n  }\r\n\r\n  function showErrorState(err){\r\n    featuredSlot.innerHTML='';\r\n    gridTitle.style.display='none';\r\n    listTitle.style.display='none';\r\n    loadMoreWrap.style.display='none';\r\n    listEl.innerHTML='';\r\n    gridEl.innerHTML = '<div class=\"state-box\"><div class=\"state-box__icon\">\u26a0\ufe0f<\/div>' +\r\n      '<div class=\"state-box__title\">Couldn\\'t load posts<\/div>' +\r\n      '<div class=\"state-box__text\">This block fetches posts from <code>'+escapeHtml(REST_BASE)+'\/posts<\/code>. Make sure this page is published on your live WordPress domain (not a local preview) and that the REST API isn\\'t blocked by a security plugin.<\/div>' +\r\n      '<button class=\"retry-btn\" id=\"retryBtn\">\u21bb Retry<\/button><\/div>';\r\n    var retryBtn=document.getElementById('retryBtn');\r\n    if(retryBtn) retryBtn.addEventListener('click',function(){ loadPosts(true); });\r\n    console.error('EjectWater blog fetch error:', err);\r\n  }\r\n\r\n  function renderAll(posts){\r\n    if(posts.length === 0){ showEmptyState(); return; }\r\n\r\n    var featured = posts[0];\r\n    var gridPosts = posts.slice(1, 1 + GRID_SIZE);\r\n    var listPosts = posts.slice(1 + GRID_SIZE);\r\n\r\n    featuredSlot.innerHTML = buildFeaturedCard(featured);\r\n\r\n    if(gridPosts.length){\r\n      gridTitle.style.display='';\r\n      gridEl.innerHTML = gridPosts.map(buildPostCard).join('');\r\n    } else {\r\n      gridTitle.style.display='none';\r\n      gridEl.innerHTML='';\r\n    }\r\n\r\n    if(listPosts.length){\r\n      listTitle.style.display='';\r\n      listEl.innerHTML = listPosts.map(buildListItem).join('');\r\n    } else {\r\n      listTitle.style.display='none';\r\n      listEl.innerHTML='';\r\n    }\r\n  }\r\n\r\n  function appendListPosts(posts){\r\n    if(!posts.length) return;\r\n    listTitle.style.display='';\r\n    listEl.insertAdjacentHTML('beforeend', posts.map(buildListItem).join(''));\r\n  }\r\n\r\n  function updateLoadMoreVisibility(){\r\n    loadMoreWrap.style.display = (state.page < state.totalPages) ? '' : 'none';\r\n    loadMoreBtn.disabled = false;\r\n    loadMoreBtn.innerHTML = '<span>Load More Articles<\/span><span aria-hidden=\"true\">\u2193<\/span>';\r\n  }\r\n\r\n  function loadPosts(reset){\r\n    if(state.loading) return;\r\n    state.loading = true;\r\n    if(reset){ showSkeletons(); }\r\n\r\n    var perPage = reset ? INITIAL_FETCH : LIST_INCREMENT;\r\n    var pageToFetch = reset ? 1 : state.page + 1;\r\n    var params = { _embed: '', per_page: perPage, page: pageToFetch };\r\n    if(state.category !== 'all'){ params.categories = state.category; }\r\n\r\n    apiFetch('\/posts', params)\r\n      .then(function(result){\r\n        state.totalPages = parseInt(result.headers.get('X-WP-TotalPages') || '1', 10) || 1;\r\n        return result.json;\r\n      })\r\n      .then(function(posts){\r\n        if(reset){\r\n          state.page = 1;\r\n          renderAll(posts);\r\n        } else {\r\n          state.page = pageToFetch;\r\n          appendListPosts(posts);\r\n        }\r\n        updateLoadMoreVisibility();\r\n      })\r\n      .catch(function(err){ showErrorState(err); })\r\n      .finally(function(){ state.loading = false; });\r\n  }\r\n\r\n  if(loadMoreBtn){\r\n    loadMoreBtn.addEventListener('click', function(){\r\n      loadMoreBtn.disabled = true;\r\n      loadMoreBtn.innerHTML = '<span>Loading\u2026<\/span>';\r\n      loadPosts(false);\r\n    });\r\n  }\r\n\r\n  \/* Category pills \u2014 fetched from WordPress, so they always match your real categories *\/\r\n  var categoryRow = document.getElementById('categoryRow');\r\n  function wireCategoryPill(pill){\r\n    pill.addEventListener('click', function(){\r\n      categoryRow.querySelectorAll('.category-pill').forEach(function(p){p.classList.remove('active');});\r\n      pill.classList.add('active');\r\n      state.category = pill.getAttribute('data-category');\r\n      loadPosts(true);\r\n    });\r\n  }\r\n  wireCategoryPill(categoryRow.querySelector('[data-category=\"all\"]'));\r\n\r\n  function loadCategoryPills(){\r\n    apiFetch('\/categories', { per_page: 20, hide_empty: 'true', orderby: 'count', order: 'desc' })\r\n      .then(function(result){ return result.json; })\r\n      .then(function(cats){\r\n        cats.forEach(function(cat){\r\n          var btn = document.createElement('button');\r\n          btn.className = 'category-pill';\r\n          btn.setAttribute('data-category', cat.id);\r\n          btn.textContent = cat.name;\r\n          categoryRow.appendChild(btn);\r\n          wireCategoryPill(btn);\r\n        });\r\n      })\r\n      .catch(function(err){ console.error('Could not load categories', err); });\r\n  }\r\n\r\n  \/* Sidebar: Categories widget (real counts, links to each category archive) *\/\r\n  function loadCategoriesWidget(){\r\n    var el = document.getElementById('categoriesWidget');\r\n    apiFetch('\/categories', { per_page: 20, hide_empty: 'true', orderby: 'count', order: 'desc' })\r\n      .then(function(result){ return result.json; })\r\n      .then(function(cats){\r\n        if(!cats.length){ el.innerHTML = '<span class=\"sidebar-widget__empty\">No categories yet<\/span>'; return; }\r\n        el.innerHTML = cats.map(function(c){\r\n          return '<a href=\"'+c.link+'\" class=\"sidebar-category\"><span>'+escapeHtml(c.name)+'<\/span><span class=\"sidebar-category__count\">'+c.count+'<\/span><\/a>';\r\n        }).join('');\r\n      })\r\n      .catch(function(){ el.innerHTML = '<span class=\"sidebar-widget__empty\">Unable to load<\/span>'; });\r\n  }\r\n\r\n  \/* Sidebar: Tags widget (real tags, linking to each tag archive) *\/\r\n  function loadTagsWidget(){\r\n    var el = document.getElementById('tagsWidget');\r\n    apiFetch('\/tags', { per_page: 14, hide_empty: 'true', orderby: 'count', order: 'desc' })\r\n      .then(function(result){ return result.json; })\r\n      .then(function(tags){\r\n        if(!tags.length){ el.innerHTML = '<span class=\"sidebar-widget__empty\">No tags yet<\/span>'; return; }\r\n        el.innerHTML = tags.map(function(t){\r\n          return '<a href=\"'+t.link+'\" class=\"tag-pill\">'+escapeHtml(t.name)+'<\/a>';\r\n        }).join('');\r\n      })\r\n      .catch(function(){ el.innerHTML = '<span class=\"sidebar-widget__empty\">Unable to load<\/span>'; });\r\n  }\r\n\r\n  \/* Sidebar: Recent Posts widget \u2014 always the 5 latest site-wide *\/\r\n  function loadRecentPostsWidget(){\r\n    var el = document.getElementById('recentPostsWidget');\r\n    apiFetch('\/posts', { per_page: 5, _fields: 'id,link,title' })\r\n      .then(function(result){ return result.json; })\r\n      .then(function(posts){\r\n        if(!posts.length){ el.innerHTML = '<span class=\"sidebar-widget__empty\">No posts yet<\/span>'; return; }\r\n        el.innerHTML = posts.map(function(p, i){\r\n          return '<div class=\"sidebar-post\"><div class=\"sidebar-post__num\">'+(i+1)+'<\/div><a href=\"'+p.link+'\" class=\"sidebar-widget-link sidebar-post__title\">'+escapeHtml(stripHtml(p.title.rendered))+'<\/a><\/div>';\r\n        }).join('');\r\n      })\r\n      .catch(function(){ el.innerHTML = '<span class=\"sidebar-widget__empty\">Unable to load<\/span>'; });\r\n  }\r\n\r\n  \/* Boot everything *\/\r\n  loadCategoryPills();\r\n  loadCategoriesWidget();\r\n  loadTagsWidget();\r\n  loadRecentPostsWidget();\r\n  loadPosts(true);\r\n\r\n})();\r\n<\/script>\r\n\r\n<\/div>\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 FAQ Blog Eject Water How It Works Supported Devices FAQ Blog \ud83d\udca7 Eject Water Now EjectWater.com \u203a Blog Tips, Guides and Advice Phone Water Damage Blog Welcome to our Phone Water Damage &#038; Water Eject Resource Center, your trusted source for guides on removing water from device speakers, preventing [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-54","page","type-page","status-publish","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\/54","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=54"}],"version-history":[{"count":24,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages\/54\/revisions"}],"predecessor-version":[{"id":109,"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/pages\/54\/revisions\/109"}],"wp:attachment":[{"href":"https:\/\/ejectwater.com\/zh\/wp-json\/wp\/v2\/media?parent=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}