CINXE.COM
Best Ceiling & Bath Fans | Handy
<!DOCTYPE html> <html class='' ng-app='root'> <style>[ng-cloak], .ng-cloak { display: none !important; }</style> <head> <script class="handy-analytics" id="handy-analytics--properties"> window.Handy = window.Handy || {}; (function setupHandyAnalytics(){ window.Handy.analytics = window.Handy.analytics || {"utm":{"handy_utm_source":null,"handy_utm_campaign":null,"handy_utm_coupon":null,"handy_utm_term":null,"handy_utm_medium":null,"handy_utm_content":null},"env":{"scully_fingerprint":["f61e014e-5439-4aec-b1d2-39ac89120a5e","45877b80-bef0-4387-905f-8bbebc0bd9ce","936de6b5-bd9b-4c89-ad4d-c5d48742b09b","f02f2481-da6a-4612-b5cc-f3cd24c3d273","80179280-47c2-44b9-9b61-e76d576affaa","8262a1e2-4111-4016-97f6-b3379cf61f43","f76bb87a-24d8-4f46-84fe-e3f2cd131a26","ad30d738-4fee-4801-9852-8f37c732e2db","148a89d5-a2dd-4fde-ae5b-af77c162b066","9d39ed29-6db1-4512-8367-892b9167c51c","22f1e458-b0a0-459d-bed5-5c5fe7fa2c7e","9085bc5d-35ff-40a9-a7a8-37ff61c626d3","4a005674-3d4f-409a-88a9-d413af06e5fd","8a27e092-a629-4bc8-8c5a-5a74cd8041d0","022ae9ae-f5c5-40ef-bb5c-3dccfd6930ab","0b12fa2e-0a04-47b9-9150-edf9162bb68f","a48b4f5d-5bc2-473b-af88-25c2756d1008","20def8ec-aece-496e-80bc-8b608943c526","32faf179-c8fc-488f-a8d1-ff864e3be35e","72128813-e90f-45bf-8610-42980db57e90","0982159d-bc11-4173-b706-3123595ec604","b108499f-2e65-44e0-bb1d-fb8adfd675ef","30ecbfb0-ac32-4782-89c9-7aa751b9c540","3ef14d53-b7e4-408b-bb82-11106f2e12f4","78476689-4e12-4656-b509-f50e7c7190ee","34264c8c-942e-4051-b79f-bb3b67a4b9e9","8b1b9adb-5c3e-4fb1-a3d3-04a5db56a0d0","f39efb97-6942-4f29-ab22-19872ff8138c","7eb84b52-de6a-420f-ab00-739b72dcc716","281f397f-066f-4cca-8161-184db8a399e2","aee2200d-50e7-4cdb-b707-47bfea3e57fc","66d4b66b-ca20-4259-9fed-e0cd6856997c","65cf9460-893b-4155-bf93-a20ebb96167f","b5bbd335-1824-4e09-9810-2564222500c9","0d8c92ef-07bb-4bdb-9e78-698da974ba61","2db075b9-0c02-4e1e-9e81-2afaeeb4156b","bf779d91-45fa-44ed-98d7-05802e5c24b3","e975b5e5-c2d3-4991-a9d1-a399b27b1b37","1dcebcb7-550f-4c69-873e-57fc6734b2d3","0644d3ac-1eec-4513-9d16-7c41a61c41cf","37dffef4-caf2-47ec-a0b7-effc326b18aa","f7166369-537f-4cc5-8076-9fc369d1f33a"],"browser_uid":"ChoDmZKJNfhhJUd/2+9TxgQwQ2HzqcqpoeOeR4+NKE6b+o0yyfo0i63aAZnBagXyNQowR9r95I/sq89qnTWfJw==","from_native":false,"native_session_uid":null},"user":{"impersonating":false,"brand":"handy","new":false},"booking":{},"quote_request":{"zip":null,"service_name":"ceiling_fan"},"pageInfo":{"bookingId":null,"conversionType":38,"serviceName":"Ceiling \u0026 Bath Fans","serviceCategory":38,"serviceId":40,"recurringFrequency":"One-time","zipcode":null,"dateOfBooking":"2024-11-25","timeOfBooking":"13:00:00 -0500","dateAdded":null,"hourlyRate":null,"bookingHrs":0.0,"discount":null,"couponCode":null,"confirmedBooking":false,"cleaningType":null,"numberCreatedBookings":0,"isCleaning":0,"isCommit":0,"isOneTime":0,"isRecurring":0},"customerInfo":{"newUser":1,"userLoggedIn":false,"userHasAccount":false}}; }()); </script> <title>Best Ceiling & Bath Fans | Handy</title> <meta charset='utf-8'> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"fee8387e35","applicationID":"16225130","transactionName":"IQwNRkoKXlVcSh5JEw0XBkEXC1dO","queueTime":0,"applicationTime":300,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={xpid:"VwMPUFNbGwIGVlNXBgIH",licenseKey:"fee8387e35",applicationID:"16225130"};;/*! For license information please see nr-loader-full-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>d});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function d(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>p,xN:()=>g});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const d="[data-nr-mask]",u=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(d):""===t||null===t?e.mask_selector=d:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function g(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,u());const r=(0,s.nY)(e);r&&(r.init=l[e])}function p(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},d={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},u={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!u[e])throw new Error("Runtime for ".concat(e," was never set"));return u[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");u[e]={...(0,n.a)(t,d),...c},Object.hasOwnProperty.call(u[e],"harvestCount")||Object.defineProperty(u[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=u[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.274.0",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>d,RI:()=>i,WN:()=>f,bv:()=>o,gm:()=>a,lR:()=>l,m:()=>c,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>d});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function d(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function u(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(u(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>d});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),d=function e(t,r){var n={},s={},u={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:g,addEventListener:g,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(d.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=p(e),u=c.length,l=0;l<u;l++)c[l].apply(a,r);var g=v()[s[e]];g&&g.push([f,e,r,a]);return a},get:m,listeners:p,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function g(e,t){n[e]=p(e).concat(t)}function p(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),u=(0,n.Zm)();u.ee||(u.ee=d)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>d});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function d(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>d,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>u,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>d,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function d(e){let t=a();return t.initializedAgents?.[e]}function u(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),h(a.gm,f),h(c.prototype,f)),t.on(d+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(u+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],d=e[c];u(d)||(e[c]=r(d,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return u(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){d([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,u,l;try{a=this,o=[...arguments],u="function"==typeof n?n(o,a):n||{}}catch(t){d([t,"",[o,a,s],u],e)}i(r+"start",[o,a,s],u,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],u,c),e}finally{i(r+"end",[o,a,l],u,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){d([t,r,n,i],e)}s=a}}}function d(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function u(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,Zp:()=>i,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log",a=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),o=r(860),a=r(3969),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>u,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>d,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},d={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},u=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>d,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function d(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>d,Rz:()=>u,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,d="fn"+s,u="pushState",l=1e3},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},425:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),d=r(5289),u=r(6154),l=r(944),f=r(3969),h=r(384),g=r(6344);const p=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",g.G4.RECORD,g.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),R=r(3785),x=r(2646),w=r(3434);function T(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,w.YM)(i),a=new x.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function A(){const e=(0,h.pV)();p.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var S=r(9417),_=r(5603),O=r(5284);const N=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let I=!1;function P(e,t={},p,x){let{init:w,info:P,loader_config:j,runtime:C={},exposed:k=!0}=t;C.loaderType=p;const H=(0,h.pV)();P||(w=H.init,P=H.info,j=H.loader_config),(0,S.xN)(e.agentIdentifier,w||{}),(0,_.a)(e.agentIdentifier,j||{}),P.jsAttributes??={},u.bv&&(P.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,P);const D=(0,S.D0)(e.agentIdentifier),L=[P.beacon,P.errorBeacon];I||(D.proxy.assets&&(N(D.proxy.assets),L.push(D.proxy.assets)),D.proxy.beacon&&L.push(D.proxy.beacon),A(),(0,h.US)("activatedFeatures",O.B),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),C.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?L:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const p={};var x=s.ee.get(e),w=x.get("tracer");E[e]=b.g.OFF,x.on(g.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var A="api-",S=A+"ixn-";function _(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(A,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}p.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,x),(0,R.R)(x,e,t,r)},p.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,x),T(x,e,t,{customAttributes:r,level:i})},m.forEach((e=>{p[e]=I(A,e,!0,"api")})),p.addPageAction=I(A,"addPageAction",!0,n.K7.genericEvents),p.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(A,"setPageViewName",!0)()},p.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return _(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},p.setUserId=function(e){if("string"==typeof e||null===e)return _("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},p.setApplicationVersion=function(e){if("string"==typeof e||null===e)return _("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},p.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,x),x.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},p[g.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.RECORD,[],void 0,n.K7.sessionReplay,x)},p[g.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.PAUSE,[],void 0,n.K7.sessionReplay,x)},p.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const N=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,x),h||(0,a.p)(S+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,x),function(){if(w.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw w.emit("fn-err",[arguments,this,t],r),t}finally{w.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,x),i&&(0,a.p)(e+t,[(0,v.t)(),...arguments],r?null:this,i,x),r?void 0:this}}function P(){r.e(891).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),x.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{N[e]=I(S,e,void 0,h?n.K7.softNav:n.K7.spa)})),p.setCurrentRouteName=h?I(S,"routeName",void 0,n.K7.softNav):I(A,"routeName",!0,n.K7.spa),p.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,x),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,x)},u.RI?(0,d.GG)((()=>P()),!0):P(),p}(e.agentIdentifier,x,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),I=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({95:"nr-full-compressor",222:"nr-full-recorder",891:"nr-full"}[e]+"-1.274.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={891:"sha512-Sx2xJQrHp2m/Ngn/ZcfBCUwNr2Xy/C5urYtWpfm3bWpil4spXOQGTtNwIfF5HvPGioGASn9QTyE4Z+zC7r7wcg==",222:"sha512-hMte3OWgwwYeisSiD7WCIx/6tT16zLaPjag9uF4tIZp7ybOvrJKbeyzhe4fz1tDbkdcdOMm8dvgPPLBatSAGeA==",95:"sha512-MPaT9dkHv16XzwEUVZPyqpN1do/Er1XFAZoIAPYWylmv+iGIThqN+GwQq27pUyAX7sNXVJQVZezH96p53Ks3Pg=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={959:0,85:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,d=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);d<a.length;d++)o=a[d],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function d(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var u=i(425);var l=i(1687),f=i(4234),h=i(5289),g=i(6154),p=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(891).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(891).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(891).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};g.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,p.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class R extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var x=i(384);var w=i(9908),T=i(2843),A=i(3878),E=i(782),S=i(1863);class _ extends b{static featureName=E.T;constructor(e,t=!0){super(e,E.T,t),g.RI&&((0,T.u)((()=>(0,w.p)("docHidden",[(0,S.t)()],void 0,E.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,w.p)("winPagehide",[(0,S.t)()],void 0,E.T,this.ee))),this.importAggregator(e))}}var O=i(3969);class N extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),P=i(3304);class j{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,P.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return D(e)?e:new j(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(D(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function H(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new j(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return D(e.error)?e.error:C(e)}function D(e){return e instanceof Error&&!!e.stack}class L extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(e=>{this.abortHandler&&(0,w.p)("ierr",[C(e),(0,S.t)(),!0,{},this.#r],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),g.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,w.p)("err",[k(e),(0,S.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",(e=>{this.abortHandler&&(0,w.p)("err",[H(e),(0,S.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var K=i(8990);let M=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,K.I)(e,U,(function(){return M++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,P.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,s=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=g.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(p?p.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var p=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===d||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",Q=["arrayBuffer","blob","json","text","formData"],J=g.gm.Request,ee=g.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(J&&ee&&g.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,Q.forEach((e=>{r(J[te],e,X),r(ee[te],e,X)})),r(g.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),d={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,P.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),de=["load","error","abort","timeout"],ue=de.length,le=(0,x.dV)().o.REQ,fe=(0,x.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,w.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};ge(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=x,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){T(t,e)}),(0,A.jT)(!1)),g.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},ge(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,S.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<ue;s++)r.addEventListener(de[s],this.listener,(0,A.jT)(!1))}function d(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function u(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,S.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function p(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,S.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,S.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,S.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:g.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),ge(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function R(e,t){if(this.endTime=(0,S.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,S.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function x(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<ue;t++)e.removeEventListener(de[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,S.t)()-this.startTime,this.loadCazptureCalled||4!==e.readyState?null==t.status&&(t.status=0):T(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function T(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,w.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",d),t.on("xhr-load-added",u),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",p),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",R)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function ge(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const pe={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!g.RI||pe[t.debugId]++||(pe[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:Re,d3:xe,Kp:we,TZ:Te,Lc:Ae,uP:Ee,Rz:Se}=be;class _e extends b{static featureName=Te;constructor(e,t=!0){super(e,Te,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Ee,(function(e,t){this.bstStart=(0,S.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,w.p)("bst",[e[0],t,this.bstStart,(0,S.t)()],void 0,a.K7.sessionTrace,r)})),r.on(Se+xe,(function(e){this.time=(0,S.t)(),this.startPath=location.pathname+location.hash})),r.on(Se+we,(function(e){(0,w.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,w.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:Re,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class Ne extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,p.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,w.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,p.Aw)(this.agentIdentifier)}#d=!1;async#c(e){if(!this.#d){this.#d=!0;try{const{Recorder:t}=await Promise.all([i.e(891),i.e(222)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3333);class Pe extends b{static featureName=Ie.TZ;constructor(e,t=!0){super(e,Ie.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled];g.RI&&e.init.user_actions.enabled&&(Ie.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),Ie.qN.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)))))),r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var je=i(993),Ce=i(3785);class ke extends b{static featureName=je.TZ;constructor(e,t=!0){super(e,je.TZ,t);const r=this.ee;this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,Ce.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),g.gm?(this.features={},(0,x.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,u.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=d(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,x.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,_,_e,Ne,he,N,L,Pe,ke],loaderType:"pro"})})()})();</script> <meta content='on' http-equiv='cleartype'> <meta content='width=device-width, initial-scale=1, maximum-scale=1' name='viewport'> <meta content='True' name='HandheldFriendly'> <meta content='yes' name='apple-mobile-web-app-capable'> <meta content='black' name='apple-mobile-web-app-status-bar-style'> <meta content='telephone=no' name='format-detection'> <meta content='summary' name='twitter:card'> <meta content='Best Ceiling & Bath Fans | Handy' name='twitter:title'> <meta content='Handy' name='author'> <meta content='Handy' name='og:site_name'> <meta content='@Handy' name='twitter:site'> <meta content='https://cache.hbfiles.com/assets/open-graph/og-image-1fc721c4787b73c5c13d04648df3c401e4cf5f45ff44ba93095d723e7e94c6be.jpg ' name='image' property='image'> <meta content='https://cache.hbfiles.com/assets/open-graph/og-image-1fc721c4787b73c5c13d04648df3c401e4cf5f45ff44ba93095d723e7e94c6be.jpg ' name='og:image' property='og:image'> <meta content='https://cache.hbfiles.com/assets/open-graph/og-image-1fc721c4787b73c5c13d04648df3c401e4cf5f45ff44ba93095d723e7e94c6be.jpg ' name='twitter:image' property='twitter:image'> <meta content='app-id=604419063' name='apple-itunes-app'> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-57x57.png" sizes="57x57" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-114x114.png" sizes="114x114" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-60x60.png" sizes="60x60" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-120x120.png" sizes="120x120" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-72x72.png" sizes="72x72" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-144x144.png" sizes="144x144" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-76x76.png" sizes="76x76" /> <link rel="apple-touch-icon" type="image/png" href="https://cache.hbfiles.com/favicons/apple-touch-icon-152x152.png" sizes="152x152" /> <link rel="icon" type="image/png" href="https://cache.hbfiles.com/favicons/favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="https://cache.hbfiles.com/favicons/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="https://cache.hbfiles.com/favicons/favicon-96x96.png" sizes="96x96" /> <link rel="icon" type="image/png" href="https://cache.hbfiles.com/favicons/favicon-160x160.png" sizes="160x160" /> <link rel="icon" type="image/png" href="https://cache.hbfiles.com/favicons/favicon-196x196.png" sizes="196x196" /> <meta content='#2d89ef' name='msapplication-TileColor'> <meta content='/mstile-144x144.png' name='msapplication-TileImage'> <meta name="stripe-key" content="pk_live_S11YUr7x6AxvE7QHPTRhCUQY" /> <link href='https://www.handy.com/services/ceiling-fan' rel='canonical'> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="X+12mqylN1pz1/2MiJeQ+q7BTbBdS5+8Wlb9guuZz2k9Cafwo5bKFQY4zQh1IA4xBnXNl16M9UoWzW+V/lKHpA==" /> <link rel="stylesheet" media="screen" href="https://cache.hbfiles.com/assets/font_manifest-df4b95e6619d4e537be4efe30d979f568f2a987b1f2176c9af8928064728ca53.css" /> <link rel="stylesheet" media="screen" href="https://cache.hbfiles.com/assets/application-4342066986960bfc8e30fa07efba820f9976403cc08ddca6a7a9021d736aaad6.css" /> <script type="text/javascript"> window.waitForGlobalLib = function(library, callback, count) { // Allow a string or array of strings to be passed in var lib = library; var remaining_lib_count = 0; if (lib instanceof Array) { lib = lib[0]; remaining_lib_count = library.length - 1; } if (count >= 10) { console.error("Library `" + lib + "` didn't load after 1 second"); } else if (window[lib]) { if (remaining_lib_count > 0) { // if there are libraries left, // continuing checking for them (immediately) setTimeout(waitForGlobalLib, 0, library.slice(1), callback, 0); } else { callback(); } } else { setTimeout(waitForGlobalLib, 100, library, callback, count ? count + 1 : 1); } }; </script> <script class="handy-analytics" id="handy-analytics--properties"> window.Handy = window.Handy || {}; (function setupHandyAnalytics(){ window.Handy.analytics = window.Handy.analytics || {"utm":{"handy_utm_source":null,"handy_utm_campaign":null,"handy_utm_coupon":null,"handy_utm_term":null,"handy_utm_medium":null,"handy_utm_content":null},"env":{"scully_fingerprint":["f61e014e-5439-4aec-b1d2-39ac89120a5e","45877b80-bef0-4387-905f-8bbebc0bd9ce","936de6b5-bd9b-4c89-ad4d-c5d48742b09b","f02f2481-da6a-4612-b5cc-f3cd24c3d273","80179280-47c2-44b9-9b61-e76d576affaa","8262a1e2-4111-4016-97f6-b3379cf61f43","f76bb87a-24d8-4f46-84fe-e3f2cd131a26","ad30d738-4fee-4801-9852-8f37c732e2db","148a89d5-a2dd-4fde-ae5b-af77c162b066","9d39ed29-6db1-4512-8367-892b9167c51c","22f1e458-b0a0-459d-bed5-5c5fe7fa2c7e","9085bc5d-35ff-40a9-a7a8-37ff61c626d3","4a005674-3d4f-409a-88a9-d413af06e5fd","8a27e092-a629-4bc8-8c5a-5a74cd8041d0","022ae9ae-f5c5-40ef-bb5c-3dccfd6930ab","0b12fa2e-0a04-47b9-9150-edf9162bb68f","a48b4f5d-5bc2-473b-af88-25c2756d1008","20def8ec-aece-496e-80bc-8b608943c526","32faf179-c8fc-488f-a8d1-ff864e3be35e","72128813-e90f-45bf-8610-42980db57e90","0982159d-bc11-4173-b706-3123595ec604","b108499f-2e65-44e0-bb1d-fb8adfd675ef","30ecbfb0-ac32-4782-89c9-7aa751b9c540","3ef14d53-b7e4-408b-bb82-11106f2e12f4","78476689-4e12-4656-b509-f50e7c7190ee","34264c8c-942e-4051-b79f-bb3b67a4b9e9","8b1b9adb-5c3e-4fb1-a3d3-04a5db56a0d0","f39efb97-6942-4f29-ab22-19872ff8138c","7eb84b52-de6a-420f-ab00-739b72dcc716","281f397f-066f-4cca-8161-184db8a399e2","aee2200d-50e7-4cdb-b707-47bfea3e57fc","66d4b66b-ca20-4259-9fed-e0cd6856997c","65cf9460-893b-4155-bf93-a20ebb96167f","b5bbd335-1824-4e09-9810-2564222500c9","0d8c92ef-07bb-4bdb-9e78-698da974ba61","2db075b9-0c02-4e1e-9e81-2afaeeb4156b","bf779d91-45fa-44ed-98d7-05802e5c24b3","e975b5e5-c2d3-4991-a9d1-a399b27b1b37","1dcebcb7-550f-4c69-873e-57fc6734b2d3","0644d3ac-1eec-4513-9d16-7c41a61c41cf","37dffef4-caf2-47ec-a0b7-effc326b18aa","f7166369-537f-4cc5-8076-9fc369d1f33a"],"browser_uid":"ChoDmZKJNfhhJUd/2+9TxgQwQ2HzqcqpoeOeR4+NKE6b+o0yyfo0i63aAZnBagXyNQowR9r95I/sq89qnTWfJw==","from_native":false,"native_session_uid":null},"user":{"impersonating":false,"brand":"handy","new":false},"booking":{},"quote_request":{"zip":null,"service_name":"ceiling_fan"},"pageInfo":{"bookingId":null,"conversionType":38,"serviceName":"Ceiling \u0026 Bath Fans","serviceCategory":38,"serviceId":40,"recurringFrequency":"One-time","zipcode":null,"dateOfBooking":"2024-11-25","timeOfBooking":"13:00:00 -0500","dateAdded":null,"hourlyRate":null,"bookingHrs":0.0,"discount":null,"couponCode":null,"confirmedBooking":false,"cleaningType":null,"numberCreatedBookings":0,"isCleaning":0,"isCommit":0,"isOneTime":0,"isRecurring":0},"customerInfo":{"newUser":1,"userLoggedIn":false,"userHasAccount":false}}; }()); </script> <script class="handy-analytics" id="handy-analytics--mixpanel"> (function(e,a){if(!a.__SV){var b=window;try{var c,l,i,j=b.location,g=j.hash;c=function(a,b){return(l=a.match(RegExp(b+"=([^&]*)")))?l[1]:null};g&&c(g,"state")&&(i=JSON.parse(decodeURIComponent(c(g,"state"))),"mpeditor"===i.action&&(b.sessionStorage.setItem("_mpcehash",g),history.replaceState(i.desiredHash||"",e.title,j.pathname+j.search)))}catch(m){}var k,h;window.mixpanel=a;a._i=[];a.init=function(b,c,f){function e(b,a){var c=a.split(".");2==c.length&&(b=b[c[0]],a=c[1]);b[a]=function(){b.push([a].concat(Array.prototype.slice.call(arguments, 0)))}}var d=a;"undefined"!==typeof f?d=a[f]=[]:f="mixpanel";d.people=d.people||[];d.toString=function(b){var a="mixpanel";"mixpanel"!==f&&(a+="."+f);b||(a+=" (stub)");return a};d.people.toString=function(){return d.toString(1)+".people (stub)"};k="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" "); for(h=0;h<k.length;h++)e(d,k[h]);a._i.push([b,c,f])};a.__SV=1.2;b=e.createElement("script");b.type="text/javascript";b.async=!0;b.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";c=e.getElementsByTagName("script")[0];c.parentNode.insertBefore(b,c)}})(document,window.mixpanel||[]); mixpanel.init('864ccb52b900de546bb1bba717ab4fac'); mixpanel.init('285f70ac22992c5c5a2a0639a095aa59', {}, 'mp_v2'); </script> <script src="https://cache.hbfiles.com/assets/analytics-lib-67744239654dd45701c556d5ecdbe8ed42050829d29e3352f19a7403cb53a2ba.js"></script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type":"ListItem","position":"1","item":{"@id":"https://www.handy.com/","name":"Handy"}},{"@type":"ListItem","position":"2","item":{"@id":"https://www.handy.com/services","name":"Services"}},{"@type":"ListItem","position":"3","item":{"@id":"/services/ceiling-fan","name":"Ceiling \u0026 Bath Fans"}}] } </script> <script type="application/ld+json"> {"@context":"http://schema.org","@type":"Product","brand":{"@type":"Organization","name":"Handy"},"name":"Handy Ceiling \u0026 Bath Fans","image":"https://cache.hbfiles.com/assets/logos/handy-serp-logo-307d9676f3b4e2d0c76f6bb62bb996a8cd151db6bf3fdf618a6c4a3fba069ac5.png","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.4","reviewCount":115,"bestRating":5,"worstRating":0}} </script> <script src="https://cache.hbfiles.com/assets/accessibility-6ce81c161307e3641911a1964bb04a220f820a8a8e415ad48abcb26f6044cf9c.js" defer="defer"></script> <script src="https://cache.hbfiles.com/assets/nav_dropdown-fc89864a75fb4c72b82d851a70571014fff2591705018c65edd6f9b20f821bea.js" defer="defer"></script> <script src="https://cache.hbfiles.com/assets/newrelic_ignored_errors-83d3aadbead42c7e0d95d270341e67d0139ab49f22b7d4934596c9d1a7a3d98c.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js" crossorigin="anonymous" integrity="sha384-NXgwF8Kv9SSAr+jemKKcbvQsz+teULH/a5UNJvZc6kP47hZgl62M1vGnw6gHQhb1"></script> <script> window.jQuery || document.write("<script src='https://cache.hbfiles.com/jquery-3.7.0.min.js'><\/script>") </script> </head> <body class=''> <!-- 6.1 --> <div class='nav-drawer'> <ul class='nav-list-first nav-border-bottom'> <li class='nav-link'><a class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="login" data-qa="login-link" href="/login">Login</a></li> <li class='nav-link'><a target="_blank" class="trackable help" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="help" data-qa="help-link" href="/help">Help</a></li> <li class='nav-link'><a class="pro-apply-link trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="apply" href="/apply?utm_source=home_footer">Become a Professional</a></li> </ul> <ul class='nav-list nav-border-bottom'> <li class='nav-link'><div class='services-dropdown-menu'> <ul> <li> <a class="services-dropdown-link" href="">Book Services</a> <i class='desktop fa fa-angle-down fa-hover-show'></i> <i class='desktop fa fa-angle-up fa-hover-hidden'></i> <i class='mobile fa fa-angle-down'></i> </li> <div class='nav-link nav-border-bottom services-dropdown-content'> <li class='nav-link'><a href="/services/home-cleaning">Home Cleaning</a></li> <li class='nav-link'><a href="/services/furniture-assembly">Furniture Assembly</a></li> <li class='nav-link'><a href="/services/mount-tv">TV Mounting</a></li> <li class='nav-link'><a href="/services/painting">Interior Painting</a></li> <li class='nav-link'><a href="/services/hanging-pictures-shelves">Hanging Pictures & Shelves</a></li> <li class='nav-link'><a href="/services/moving-help">Moving Help</a></li> <li class='nav-link'><a href="/services/other-handyman-service">Handyman Service</a></li> <li class='nav-link'><a href="/services/other-smart-device">Smart Device Installation</a></li> <li class='nav-link'><a href="/services/maid-service">Maid Service</a></li> <li class='nav-link'><a href="/services/housekeeping">Housekeeping</a></li> <li class='nav-link'> <a class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services" href="/services">See All</a> </li> </div> </ul> </div> </li> </ul> <div class='about-dropdown-menu'> <ul class='nav-list'> <li class='nav-link'> <a class="about-dropdown-link" href="">About</a> <i class='desktop fa fa-angle-down fa-hover-show'></i> <i class='desktop fa fa-angle-up fa-hover-hidden'></i> <i class='mobile fa fa-angle-down'></i> </li> <div class='about-dropdown-content'> <li class='nav-link'><a href="/handy-guarantee">The Handy Happiness Guarantee</a></li> <li class='nav-link'><a href="/press">Press</a></li> <li class='nav-link'><a href="/retail">Retail Partnerships</a></li> <li class='nav-link'><a href="/blog">Blog</a></li> <li class='nav-link'><a href="/careers">Careers</a></li> <li class='nav-link'><a href="/help">Contact Us</a></li> </div> </ul> <div class='about-dropdown-content'> <ul class='nav-list nav-border-top'> <li class='nav-link'><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">Privacy</a></li> <li class='nav-link'><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">CA Pre-Collection Notice</a></li> <li class='nav-link'><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#do-not-sell-or-share-my-personal-information">Do Not Sell or Share My Personal Information</a></li> <li class='nav-link'><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#cookies-policy">Cookies</a></li> <li class='nav-link'><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-terms-of-use">Terms</a></li> <li class='nav-link'> <form class="" id="locale-select-form" action="/locale_select" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="V8LLR3tFKd2lwN+yx0MpNnDuW38lwZb4b5ZvORxH4ns1JhotdHbUktAv7zY69Lf92FrbWCYG/A4jDf0uCYyqtg==" autocomplete="off" /> <div class='select-wrapper footer-mobile-nav-select-wrapper'> <select name="locale" id="locale" class="locale-dropdown" onchange="this.form.submit()"><option selected="selected" value="en-US">United States</option> <option value="en-CA">Canada</option> <option value="en-GB">United Kingdom</option></select> </div> </form> </li> </ul> </div> </div> </div> <div class='nav-drawer with-drilldown'> <div class='mobile_menu'> <ul class='nav-list-first'> <li><a class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="login" data-qa="login-link" href="/login">Login</a></li> <li><a target="_blank" class="trackable help" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="help" data-qa="help-link" href="/help">Help</a></li> <li><a class="pro-apply-link trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="apply" href="/apply?utm_source=home_footer">Become a Professional</a></li> <div class='nav__line'></div> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services'> All Services </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='#'> Services by Category </a> <ul> <li> <a href='#'> Cleaning </a> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_home_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/home-cleaning'> Home Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_move_out_in_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/move-out-in-cleaning'> Move Out Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_office_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/office-cleaning'> Office Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deep_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/deep-cleaning-service'> Deep Cleaning </a> </li> </ul> </li> <li> <a href='#'> Installation </a> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_mount_tv' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/mount-tv'> TV Mounting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_hanging_pictures_shelves' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/hanging-pictures-shelves'> Picture or Shelf Hanging </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_light_fixtures' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/light-fixtures'> Light Fixtures </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_ceiling_fan' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/ceiling-fan'> Ceiling Fans </a> </li> </ul> </li> <li> <a href='#'> Handyman </a> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_furniture_assembly' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/furniture-assembly'> Furniture Assembly </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_handyman_service' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/other-handyman-service'> General Handyman </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_plumbing' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/other-plumbing'> General Plumbing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_faucets_replacement' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/faucets-replacement'> Faucets </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_toilet_trouble' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/toilet-trouble'> Toilets </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_electrical' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/other-electrical'> General Electric </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_outlets' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/outlets'> Outlets and Switches </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_moving_help' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/moving-help'> Moving Help </a> </li> </ul> </li> <li> <a href='#'> Outdoor Projects </a> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_lawn_care_maintenance_service' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/lawn-care-maintenance-service?redirect_source=nav_bar'> Lawn Care </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_gutter_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/gutter-installation?redirect_source=nav_bar'> Gutters and Downspouts </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_tree_removal' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/tree-removal?redirect_source=nav_bar'> Tree Removal </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_tree_trimming' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/tree-trimming?redirect_source=nav_bar'> Tree Trimming </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_fence_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/fence-installation?redirect_source=nav_bar'> Wood Fence Installation </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deck_and_porch_repair' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/deck-and-porch-repair?redirect_source=nav_bar'> Deck and Porch Repairs </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deck_repair_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/deck-repair-installation?redirect_source=nav_bar'> Deck Installation </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_exterior_painting' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/exterior-painting?redirect_source=nav_bar'> Exterior Painting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_power_washing' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/power-washing?redirect_source=nav_bar'> Exterior Surfaces </a> </li> </ul> </li> <li> <a href='#'> Home Renovations </a> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_bathroom_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/bathroom-remodeling?redirect_source=nav_bar'> Remodel a Bathroom </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_kitchen_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/kitchen-remodeling?redirect_source=nav_bar'> Remodel a Kitchen </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_basement_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/basement-remodeling?redirect_source=nav_bar'> Remodel a Basement </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_major_home_renovations' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/major-home-renovations?redirect_source=nav_bar'> Major Home Renovations </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_installing_wood_flooring' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/installing-wood-flooring?redirect_source=nav_bar'> Refinish Wood Flooring </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_install_asphalt_shingle_roofing' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/install-asphalt-shingle-roofing?redirect_source=nav_bar'> Install Roofing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_repair_asphalt_shingle_roofing' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/repair-asphalt-shingle-roofing?redirect_source=nav_bar'> Repair Roofing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_6_windows_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/6-windows-installation?redirect_source=nav_bar'> Install New Windows </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_painting' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/painting'> Interior Painting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_install_window_treatments' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/services/install-window-treatments'> Window Treatments </a> </li> </ul> </li> </ul> </li> <div class='nav__line'></div> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='blog' data-mixpanel-event='nav_bar_cta' data-mixpanel-trigger='click' href='/blog'> Blog </a> </li> <li> <a class="about-dropdown-link" href="">About</a> <ul> <li><a href="/handy-guarantee">The Handy Happiness Guarantee</a></li> <li><a href="/press">Press</a></li> <li><a href="/retail">Retail Partnerships</a></li> <li><a href="/blog">Blog</a></li> <li><a href="/careers">Careers</a></li> <li><a href="/help">Contact Us</a></li> <div class='nav__line'></div> <li><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">Privacy</a></li> <li><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">CA Pre-Collection Notice</a></li> <li><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#do-not-sell-or-share-my-personal-information">Do Not Sell or Share My Personal Information</a></li> <li><a href="/cookies">Cookies</a></li> <li><a href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-terms-of-use">Terms</a></li> <li> <form class="" id="locale-select-form" action="/locale_select" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="L4/94FxoW0CR6vk7ybwS7lr6wGnqIJu6i6Lx0BD1UKdNayyKU1umD+QFyb80C4wl8k5ATunn8UzHOWPHBT4Yag==" autocomplete="off" /> <div class='select-wrapper footer-mobile-nav-select-wrapper'> <select name="locale" id="locale" class="locale-dropdown" onchange="this.form.submit()"><option selected="selected" value="en-US">United States</option> <option value="en-CA">Canada</option> <option value="en-GB">United Kingdom</option></select> </div> </form> </li> </ul> </li> </ul> </div> </div> <script> jQuery(function () { if (typeof $.fn.slinky === "undefined") { return } const slinkyConfig = { 'theme': 'slinky-theme-white' }; $('.mobile_menu').slinky(slinkyConfig); const backLinks = $('.slinky-menu .header'); backLinks.each(function () { const backTxt = $(this).parent().parent().find('a:first > span').text(); $('a', this).text(backTxt); }); }); </script> <div class='non-drawer-content'> <div class='non-drawer-content-overlay'></div> <div class='non-flash-banner-content'> <header class='site-header'> <div class='header-row ms-margin-left'> <div class='header-content-container'> <div class='header-logo'><a class="home-link" href="/"><svg viewBox="0 0 32 23" height="100%"><path d=" M22.472 6.592l-2.365 0.503v6.82l2.356-0.501c1.969-0.419 3.285-1.996 3.285-4.104-0-2.106-1.316-3.134-3.276-2.718zM24.229 9.633c0 1.367-0.819 2.147-1.822 2.36l-0.847 0.18-0-3.954 0.847-0.18c1.003-0.213 1.822 0.228 1.822 1.594zM14.59 8.268l-1.443 0.307 0 6.82 1.443-0.307v-4.329l2.819 3.73 1.444-0.307v-6.82l-1.444 0.307v4.33l-2.819-3.731zM6.252 13.445c0 2.106 1.316 3.135 3.276 2.718l2.365-0.503v-6.82l-2.356 0.501c-1.969 0.419-3.285 1.998-3.285 4.104zM9.593 10.764l0.847-0.181v3.954l-0.847 0.18c-1.003 0.213-1.822-0.228-1.822-1.594s0.819-2.146 1.822-2.359zM30.547 9.029c-0 0.904-0.483 1.459-1.238 1.62s-1.238-0.19-1.238-1.094v-4.153l-1.453 0.309v4.22c0 1.783 1.197 2.469 2.691 2.152 0.447-0.095 0.867-0.271 1.238-0.516 0 0 0 1.143 0 1.525v0c0 0.913-0.592 1.779-1.581 1.989l-28.965 6.157v1.519l29.378-6.244c1.64-0.349 2.621-1.784 2.621-3.297v-8.647l-1.453 0.309 0 4.153zM1.453 13.727c0-0.904 0.483-1.459 1.237-1.62s1.238 0.189 1.238 1.094v4.153l1.453-0.309v-4.22c0-1.782-1.197-2.469-2.691-2.151-0.447 0.096-0.867 0.271-1.237 0.516 0 0 0-1.145 0-1.526 0-0.913 0.592-1.778 1.581-1.989l28.965-6.157-0-1.519-29.378 6.245c-1.64 0.348-2.621 1.784-2.621 3.297v8.647l1.453-0.309v-4.153z " fill="#00cded"></path></svg> </a><div class='site-header-container'> <div class='nav-drawer-trigger right-bumper'><span class='menu-icon'></span></div> <ul class='nav-container'><li class='header-link'> <div class='dropdown services-menu menu'> <a class="trackable-mouseover-once" data-mixpanel-event="nav_bar_hover" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services" href="/services">All Services</a> <i class='desktop fa fa-angle-down fa-hover-show'></i> <i class='desktop fa fa-angle-up fa-hover-hidden'></i> </div> <div class='grid-container services-panel'> <div class='grid-x'> <div class='cell'> <ul class='services-columns four-columns'> <li> <span> Cleaning </span> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_home_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/home-cleaning'> Home Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_move_out_in_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/move-out-in-cleaning'> Move Out Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_office_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/office-cleaning'> Office Cleaning </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deep_cleaning' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/deep-cleaning-service'> Deep Cleaning </a> </li> </ul> </li> <li> <span> Installation </span> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_mount_tv' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/mount-tv'> TV Mounting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_hanging_pictures_shelves' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/hanging-pictures-shelves'> Picture or Shelf Hanging </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_light_fixtures' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/light-fixtures'> Light Fixtures </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_ceiling_fan' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/ceiling-fan'> Ceiling Fans </a> </li> </ul> </li> <li> <span> Handyman </span> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_furniture_assembly' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/furniture-assembly'> Furniture Assembly </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_handyman_service' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/other-handyman-service'> General Handyman </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_plumbing' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/other-plumbing'> General Plumbing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_faucets_replacement' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/faucets-replacement'> Faucets </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_toilet_trouble' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/toilet-trouble'> Toilets </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_other_electrical' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/other-electrical'> General Electric </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_outlets' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/outlets'> Outlets and Switches </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_moving_help' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/moving-help'> Moving Help </a> </li> </ul> </li> <li> <span> Outdoor Projects </span> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_lawn_care_maintenance_service' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/lawn-care-maintenance-service?redirect_source=nav_bar'> Lawn Care </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_gutter_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/gutter-installation?redirect_source=nav_bar'> Gutters and Downspouts </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_tree_removal' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/tree-removal?redirect_source=nav_bar'> Tree Removal </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_tree_trimming' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/tree-trimming?redirect_source=nav_bar'> Tree Trimming </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_fence_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/fence-installation?redirect_source=nav_bar'> Wood Fence Installation </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deck_and_porch_repair' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/deck-and-porch-repair?redirect_source=nav_bar'> Deck and Porch Repairs </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_deck_repair_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/deck-repair-installation?redirect_source=nav_bar'> Deck Installation </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_exterior_painting' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/exterior-painting?redirect_source=nav_bar'> Exterior Painting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_power_washing' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/power-washing?redirect_source=nav_bar'> Exterior Surfaces </a> </li> </ul> </li> <li> <span> Home Renovations <span class='new-category'>NEW!</span> </span> <ul> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_bathroom_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/bathroom-remodeling?redirect_source=nav_bar'> Remodel a Bathroom </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_kitchen_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/kitchen-remodeling?redirect_source=nav_bar'> Remodel a Kitchen </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_basement_remodeling' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/basement-remodeling?redirect_source=nav_bar'> Remodel a Basement </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_major_home_renovations' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/major-home-renovations?redirect_source=nav_bar'> Major Home Renovations </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_installing_wood_flooring' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/installing-wood-flooring?redirect_source=nav_bar'> Refinish Wood Flooring </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_install_asphalt_shingle_roofing' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/install-asphalt-shingle-roofing?redirect_source=nav_bar'> Install Roofing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_repair_asphalt_shingle_roofing' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/repair-asphalt-shingle-roofing?redirect_source=nav_bar'> Repair Roofing </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_6_windows_installation' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/6-windows-installation?redirect_source=nav_bar'> Install New Windows </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_painting' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/painting'> Interior Painting </a> </li> <li> <a class='trackable' data-mixpanel-event-context='nav_bar_monolith' data-mixpanel-event-source='services_install_window_treatments' data-mixpanel-event='nav_bar_cta' data-mixpanel-product-type='consumer' href='/services/install-window-treatments'> Window Treatments </a> </li> </ul> </li> </ul> </div> </div> <div class='grid-x button-row'> <div class='row all-services__button'> <a class='button primary trackable' data-mixpanel-event-context='nav_bar_refinery' data-mixpanel-event='nav_bar_cta' data-mixpanel-source='services' data-mixpanel-trigger='click' href='/services'> See All Services </a> </div> </div> </div> <script> const servicesPanel = document.querySelector('.services-panel'); const servicesMenu = document.querySelector('.services-menu'); servicesPanel.addEventListener('mouseenter', function() { servicesMenu.classList.add('chevron-hack'); }); servicesPanel.addEventListener('mouseleave', function() { servicesMenu.classList.remove('chevron-hack'); }); </script></li><li class='header-link'> <a class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="blog" href="/blog">Blog</a></li></ul> <ul class='nav-container'><li class='header-link'> <a class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="apply" href="/apply">Become a Pro</a></li> <li class='header-link'><a target="_blank" class="trackable" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="help" data-qa="help-link" href="/help">Help</a></li> <li class='header-link'><a class="trackable right-bumper" data-mixpanel-event="nav_bar_cta" data-mixpanel-event-context="nav_bar_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="login" data-qa="login-link" href="/login">Log In</a></li></ul></div></div> </div> </div> </header> <div class='main-body-container'> <div class="analytics-event-post" style="display: none;" data-event-name="when page" data-event-properties="{"service":"ceiling_fan","booking_zipcode":null,"selected_days_out":2}"></div> <div data-default-hours='2' id='default-hours'></div> <div class='when-container handyman-bg'> <div class='row'> <div class='when-main-container'> <div class='checkout-row center'> <figure class='service-icon'> <div class='vertically-center icon-electrician'></div> </figure> </div> <div class='checkout-row'> <p class='service-name-when'> Ceiling & Bath Fans </p> <p class='service-desc-when'> <span class='tweak'> These professional handymen are experts at installing and repairing ceiling and bathroom fans. Every handyman is vetted and will arrive prepared with the proper tools and supplies to get your job done right the first time. </span> </p> </div> <div class='small-12 columns service-desc-when'> <div class='small-12 medium-6 columns'> <ul class='when-checks'> <li>Vetted and screened professionals <br><a href='https://www.handy.com/trust-and-safety'>Learn More</a></li> <li>Backed by the Handy Happiness Guarantee. <br><a href='https://www.handy.com/handy-guarantee'>Learn More</a></li> </ul> </div> <div class='small-12 medium-6 columns'> <ul class='when-checks'> <li>Friendly 24/7 customer service</li> <li>Affordable pricing</li> </ul> </div> </div> </div> <div class='when-checkout-container center'> <div class='payment-content-wrapper frame-container'> <form class="simple_form new_quote_request" id="quote_when_form" name="when_form" action="/quotes" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="u7CwmvXy/KzmqSPJfSa5cUH90BHBSbeZjVC8ZfsftTnZVGHw+sEB45NGE02AkSe66UlQNsKO3W/Byy5y7tT99A==" autocomplete="off" /><input autocomplete="off" type="hidden" value="40" name="quote_request[service_id]" id="quote_request_service_id" /> <input value="1" autocomplete="off" type="hidden" name="quote_request[number_providers]" id="quote_request_number_providers" /> <input value="false" autocomplete="off" type="hidden" name="quote_request[home_cleaning]" id="quote_request_home_cleaning" /> <div class='checkout-row'> <div class='when-main-header'>Get a Price</div> </div> <div class='checkout-row'> <div class='small-12 columns'> <input class="string optional zipcode-field required when-font" maxlength="255" placeholder="ZIP Code" size="255" type="text" name="quote_request[zipcode]" id="quote_request_zipcode" /> </div> </div> <div class='when-section' id='service-details-section'> <div class='checkout-row'> <div class='when-sub-header pad-bot'>Tell us about the job</div> </div> <div class='checkout-row stepper'> <div class='small-12 columns'> <div class='small-12 columns stepper-columns'> <button class='stepper-button-down' data-direction='down' data-qa='ceiling_fans_minus' type='button'></button> <span class='stepper-text'><input type="text" name="booking_params[answers[ceiling fans]]" id="booking_params_answers_ceiling_fans" value="1" data-hours="2" class="stepper field-ceiling fans" readonly="readonly" />ceiling fans</span> <button class='stepper-button-up' data-direction='up' data-qa='ceiling_fans_plus' type='button'></button> </div> </div> </div> <div class='checkout-row stepper'> <div class='small-12 columns'> <div class='small-12 columns stepper-columns'> <button class='stepper-button-down' data-direction='down' data-qa='bathroom_fans_minus' type='button'></button> <span class='stepper-text'><input type="text" name="booking_params[answers[bathroom fans]]" id="booking_params_answers_bathroom_fans" value="0" data-hours="2" class="stepper field-bathroom fans" readonly="readonly" />bathroom fans</span> <button class='stepper-button-up' data-direction='up' data-qa='bathroom_fans_plus' type='button'></button> </div> </div> </div> <div id='q1_wrapper'> <div class='form-line'> <div class='checkout-row'> <div class='small-12 column'> <p class='when-sub-header when-font'>What do you need done?</p> <div class='select-wrapper form-select-wrapper'> <select name="booking_params[answers[q1]]" id="booking_params_answers_q1" class="hb_select"><option selected="selected" value="0">New Installation</option> <option value="1">Repair</option> <option value="2">Replacement</option></select> </div> </div> </div> <p class='hidden when-sub-header warn-style custom_warn checkout-row'></p> </div> </div> <div id='q4_wrapper'> <div class='form-line'> <div class='checkout-row'> <div class='small-12 column'> <p class='when-sub-header when-font'>Will a ladder be required?</p> <div class='select-wrapper form-select-wrapper'> <select name="booking_params[answers[q4]]" id="booking_params_answers_q4" class="hb_select" data-warn-on-option="1,2"><option selected="selected" value="0">No</option> <option value="1">Yes - 6 ft (1.8 m)</option> <option value="2">Yes - 10 ft (3.0 m)</option></select> </div> </div> </div> <p class='hidden when-sub-header warn-style custom_warn checkout-row'>There will be an additional fee.</p> </div> </div> <div class='checkout-row push-top'> <div class='small-12 columns'> <textarea name="booking_params[notes]" id="booking_params_notes" cols="40" rows="5" class="placeholder" placeholder="Please describe the job in detail. (optional)"> </textarea> </div> </div> </div> <div class='checkout-row'> <div class='when-sub-header'> We recommend <strong> <span class='js-estimated-job-hours'>2</span> <span>hours</span> </strong> </div> </div> <div class='checkout-row'> <div class='small-12 columns'> <div class="select-wrapper form-select-wrapper"><select selected="selected" class="hb_select required when-font" name="quote_request[base_hours]" id="quote_request_base_hours"><option selected="selected" value="2.0">2 hours</option> <option value="2.5">2.5 hours</option> <option value="3.0">3 hours</option> <option value="3.5">3.5 hours</option> <option value="4.0">4 hours</option> <option value="4.5">4.5 hours</option> <option value="5.0">5 hours</option> <option value="5.5">5.5 hours</option> <option value="6.0">6 hours</option> <option value="6.5">6.5 hours</option> <option value="7.0">7 hours</option> <option value="7.5">7.5 hours</option> <option value="8.0">8 hours</option> <option value="8.5">8.5 hours</option> <option value="9.0">9 hours</option> <option value="9.5">9.5 hours</option> <option value="10.0">10 hours</option></select></div> </div> <div class='small-12 columns'> <p class='hidden when-sub-header warn-style time-warn'> Because you are booking less time than recommended, we may not be able to finish the job. </p> </div> </div> <div class='checkout-row'> <div class='when-sub-header'>When would you like a Pro to come?</div> </div> <div class='checkout-row'> <div class='small-12 columns'> <input type="hidden" name="quote_request_date" id="quote_request_date" value="Mon, 25 Nov 2024 13:00:00 -0500" autocomplete="off" /> <div class='calendar-date-selector'> <input type="text" name="quote_request_date_calendar" id="quote_request_date_calendar" value="Mon Nov 25" class="pikaday when-font date-time-input " data-format="ddd MMM DD" /> </div> <div class='dropdown-date-selector'> <div class='select-wrapper when-font form-select-wrapper date-time-input '> <select name="quote_request_date_dropdown" id="quote_request_date_dropdown"><option value="Sat Nov 23">Sat Nov 23</option> <option value="Sun Nov 24">Sun Nov 24</option> <option selected="selected" value="Mon Nov 25">Mon Nov 25</option> <option value="Tue Nov 26">Tue Nov 26</option> <option value="Wed Nov 27">Wed Nov 27</option> <option value="Thu Nov 28">Thu Nov 28</option> <option value="Fri Nov 29">Fri Nov 29</option> <option value="Sat Nov 30">Sat Nov 30</option> <option value="Sun Dec 01">Sun Dec 01</option> <option value="Mon Dec 02">Mon Dec 02</option> <option value="Tue Dec 03">Tue Dec 03</option> <option value="Wed Dec 04">Wed Dec 04</option> <option value="Thu Dec 05">Thu Dec 05</option> <option value="Fri Dec 06">Fri Dec 06</option> <option value="Sat Dec 07">Sat Dec 07</option> <option value="Sun Dec 08">Sun Dec 08</option> <option value="Mon Dec 09">Mon Dec 09</option> <option value="Tue Dec 10">Tue Dec 10</option> <option value="Wed Dec 11">Wed Dec 11</option> <option value="Thu Dec 12">Thu Dec 12</option> <option value="Fri Dec 13">Fri Dec 13</option> <option value="Sat Dec 14">Sat Dec 14</option> <option value="Sun Dec 15">Sun Dec 15</option> <option value="Mon Dec 16">Mon Dec 16</option> <option value="Tue Dec 17">Tue Dec 17</option> <option value="Wed Dec 18">Wed Dec 18</option> <option value="Thu Dec 19">Thu Dec 19</option> <option value="Fri Dec 20">Fri Dec 20</option> <option value="Sat Dec 21">Sat Dec 21</option> <option value="Sun Dec 22">Sun Dec 22</option> <option value="Mon Dec 23">Mon Dec 23</option> <option value="Tue Dec 24">Tue Dec 24</option> <option value="Wed Dec 25">Wed Dec 25</option> <option value="Thu Dec 26">Thu Dec 26</option> <option value="Fri Dec 27">Fri Dec 27</option> <option value="Sat Dec 28">Sat Dec 28</option> <option value="Sun Dec 29">Sun Dec 29</option> <option value="Mon Dec 30">Mon Dec 30</option> <option value="Tue Dec 31">Tue Dec 31</option> <option value="Wed Jan 01">Wed Jan 01</option> <option value="Thu Jan 02">Thu Jan 02</option> <option value="Fri Jan 03">Fri Jan 03</option> <option value="Sat Jan 04">Sat Jan 04</option> <option value="Sun Jan 05">Sun Jan 05</option> <option value="Mon Jan 06">Mon Jan 06</option></select> </div> </div> </div> <div class='small-12 columns'> <div class='select-wrapper when-font form-select-wrapper date-time-input '> <select name="quote_request_start_time" id="quote_request_start_time"><option value="07:00">7:00 AM</option> <option value="07:30">7:30 AM</option> <option value="08:00">8:00 AM</option> <option value="08:30">8:30 AM</option> <option value="09:00">9:00 AM</option> <option value="09:30">9:30 AM</option> <option value="10:00">10:00 AM</option> <option value="10:30">10:30 AM</option> <option value="11:00">11:00 AM</option> <option value="11:30">11:30 AM</option> <option value="12:00">12:00 PM</option> <option value="12:30">12:30 PM</option> <option selected="selected" value="13:00">1:00 PM</option> <option value="13:30">1:30 PM</option> <option value="14:00">2:00 PM</option> <option value="14:30">2:30 PM</option> <option value="15:00">3:00 PM</option> <option value="15:30">3:30 PM</option> <option value="16:00">4:00 PM</option> <option value="16:30">4:30 PM</option> <option value="17:00">5:00 PM</option> <option value="17:30">5:30 PM</option> <option value="18:00">6:00 PM</option> <option value="18:30">6:30 PM</option> <option value="19:00">7:00 PM</option> <option value="19:30">7:30 PM</option> <option value="20:00">8:00 PM</option> <option value="20:30">8:30 PM</option> <option value="21:00">9:00 PM</option></select> <input value="2024-11-25 13:00:00" autocomplete="off" type="hidden" name="quote_request[date_start]" id="quote_request_date_start" /> <input type="hidden" name="display_date" id="display_date" value="2024-11-25 13:00:00 -0500" autocomplete="off" /> </div> </div> </div> <div class='checkout-row push-top'> <div class='small-12 columns'> <input class="form-input required when-font" placeholder="Email Address" type="email" name="quote_request[email]" id="quote_request_email" /> </div> </div> <div class='checkout-row push-top'> <div class='small-12 columns'> <input placeholder="Phone Number (Optional)" maxlength="14" class="js-limit-input when-phone when-font js-phone-input" size="14" type="tel" name="when[phone]" id="when_phone" /> </div> </div> <div class='when-continue-button-container checkout-row'> <div class='small-12 columns'> <button class='booking-continue-button btn-continue when-button btn-primary js-submit-payment' type='submit'>Get a Price</button> </div> </div> </form></div> <div class='pad-top'> <div class='email-disclosure tiny form-text center'> By clicking Get A Price, I agree that I have read and agree to the <a href='/terms' target='_blank'>Handy Terms</a>, and that Handy may call or text me regarding pro matches using automated technology and prerecorded messages. Consent is not a condition of purchase. </div> </div> </div> </div> </div> </div> <div class='breadcrumbs-menu flex-rows to-cols'> <div class='row'> <div class='medium-12 columns'> <span class='home'> <i class='fa fa-home'></i> </span> <span class='breadcrumbs-link'> <a href="/">Home</a> <i class='fa fa-angle-right'></i> <a href="/services">All Services</a> <i class='fa fa-angle-right'></i> Ceiling & Bath Fans </span> </div> </div> </div> <footer class='site-footer'> <div class='row hide-for-small search-footer-content-row'> <nav class='small-5 columns'> <ul class='footer-link-menu top-footer-links'> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="happiness_guarantee" href="/handy-guarantee">The Handy Happiness Guarantee</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="about" href="/about">About</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="press" href="/press">Press</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="careers" href="/careers">Careers</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="blog" href="/blog">Blog</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="help" href="/help">Help</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="help" href="/help">Contact Us</a></li> <br> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="apply" href="/apply?utm_source=home_footer">Be a Professional</a></li> <li class=''><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="retail" href="/retail">Retail Partnerships</a></li> <li class='pad-top2 footer-appstore-icons'> <div class='row'> <div class='small-12 columns'> <a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="app" href="https://handy.app.link/app"><img src="" data-img-src="https://cache.hbfiles.com/assets/miscellaneous/app-store-badge-4a71a8c7f185bad9ad8653a3267dafec0a9a649da7d5764c582fec70b8dc9f45.svg" class="lazy-loading " /></a> <a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="app" href="https://handy.app.link/app"><img src="" data-img-src="https://cache.hbfiles.com/assets/miscellaneous/play-store-badge-49e311a794277c754af75084413fbc788682c55ad83b651c681c99d6197c6bc1.svg" class="lazy-loading " /></a> </div> </div> </li> </ul> </nav> <nav class='small-4 columns'> <p class='footer-header'>Locations</p> <ul class='footer-link-menu'> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_boston" href="/services/home-cleaning/boston">Boston</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_chicago" href="/services/home-cleaning/chicago">Chicago</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_london" href="/services/home-cleaning/london">London</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_los-angeles" href="/services/home-cleaning/los-angeles">Los Angeles</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_new-york" href="/services/home-cleaning/new-york">New York</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_san-francisco" href="/services/home-cleaning/san-francisco">San Francisco</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_toronto" href="/services/home-cleaning/toronto">Toronto</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations_vancouver" href="/services/home-cleaning/vancouver">Vancouver</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="locations" href="/locations">See all locations</a></li> <li class='header-link'> <form class="header-form-wrapper" id="locale-select-form" action="/locale_select" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="j2/d5nET/Q2o7AhbKkBhhA9W+uyczvLz2zONNXRHlTjtiwyMfiAAQt0DON/X9/9Pp+J6y58JmAWXqB8iYYzd9Q==" autocomplete="off" /> <div class='select-wrapper header-select-wrapper'> <select name="locale" id="locale" class="locale-dropdown" onchange="this.form.submit()"><option selected="selected" value="en-US">United States</option> <option value="en-CA">Canada</option> <option value="en-GB">United Kingdom</option></select> </div> </form> </li> </ul> </nav> <nav class='small-3 columns'> <p class='footer-header'>Popular Services</p> <ul class='footer-link-menu'> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_home_cleaning" href="/services/home-cleaning">Cleaning</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_other_handyman_service" href="/services/other-handyman-service">Handyman</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_other_plumbing" href="/services/other-plumbing">Plumbing</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_other_electrical" href="/services/other-electrical">Electrical</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_moving_help" href="/services/moving-help">Moving Help</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_painting" href="/services/painting">Painting</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services_furniture_assembly" href="/services/furniture-assembly">Furniture Assembly</a></li> <li><a class="trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="services" href="/services">See all services</a></li> </ul> </nav> </div> <div class='row hide-for-small search-footer-content-row'> <div class='footer-social-icon-row columns'> <a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="twitter" href="https://twitter.com/handy"><i class='fa lazy-loading' data-class='fa-twitter'></i> </a><a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="facebook" href="https://facebook.com/handyhq"><i class='fa lazy-loading' data-class='fa-facebook'></i> </a><a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="instagram" href="http://instagram.com/handy_hq"><i class='fa lazy-loading' data-class='fa-instagram'></i> </a><a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="wikipedia" href="https://en.wikipedia.org/wiki/Handy_(company)"><i class='fa lazy-loading' data-class='fa-wikipedia-w'></i> </a><a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="linkedin" href="https://www.linkedin.com/company/handyhq"><i class='fa lazy-loading' data-class='fa-linkedin'></i> </a><a class="icon-link" target="_blank" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="crunchbase" href="https://crunchbase.com/organization/handybook"><i class='fa lazy-loading' data-class='fa-cb'></i> </a></div> <div class='small-12 columns'> <div class='footer-divider'></div> </div> </div> <div class='row search-footer-content-row'> <div class='row footer-interlinks'> <div class='column headline'>Other Handy Services</div> <div class='column medium-5'> <ul> <li> <a href="https://www.handy.com/services/apartment-cleaning">apartment cleaning</a> </li> <li> <a href="https://www.handy.com/services/apartment-cleaning">apartment cleaning services</a> </li> <li> <a href="https://www.handy.com/services/cleaning-service/san-antonio">cleaning services in san antonio</a> </li> </ul> </div> <div class='column medium-4'> <ul> <li> <a href="https://www.handy.com/services/home-cleaning/portland">house cleaning portland</a> </li> <li> <a href="https://www.handy.com/services/home-cleaning">house cleaning service</a> </li> <li> <a href="https://www.handy.com/services/housekeeping/near-me">housekeeping near me</a> </li> </ul> </div> <div class='column medium-3'> <ul> <li> <a href="https://www.handy.com/services/office-cleaning/houston">houston janitorial services</a> </li> <li> <a href="https://www.handy.com/services/home-cleaning/chicago">local home cleaning services chicago</a> </li> <li> <a href="https://www.handy.com/services/maid-service">maids</a> </li> </ul> </div> </div> <div class='small-12 columns'> <div class='footer-divider'></div> </div> </div> <div class='row pad-top lower-footer search-footer-content-row'> <div class='small-12 medium-8 columns footer-term-links'> <ul class='footer-secondary-links'> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="contact" href="/help">Contact</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="privacy" href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">Privacy</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="privacy" href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-privacy-policy">CA Pre-Collection Notice</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="cookies" href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#do-not-sell-or-share-my-personal-information">Do Not Sell or Share My Personal Information</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="cookies" href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#cookies-policy">Cookies</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="terms" href="https://vault.pactsafe.io/s/f2c54d1f-373d-4a51-b961-d1bea6d73ec5/handy-legal-center#us-terms-of-use">Terms</a></li> <li><a class="smaller trackable" data-mixpanel-event="footer_cta" data-mixpanel-event-context="footer_monolith" data-mixpanel-product-type="consumer" data-mixpanel-event-source="cancellation_policy" href="https://help.handy.com/handysupport/s/article/What-s-the-cancellation-policy--How-Handy-Works">Cancellation Policy</a></li> </ul> </div> <div class='small-12 medium-4 columns footer-copyright-text'> <div class='attribution-wrapper'> <span> 2024 Handy. All rights reserved. </span> <strong> Handy powered by Angi </strong> </div> </div> </div> <!-- BEGIN TRACERS --> <!-- handy_request_trace_id=5edb87f2d2770f5313fcdb61ad304ff1 --> <!-- handy_user_trace_id=Csony2dCebcm6AAHflKbAg== --> <!-- END TRACERS --> </footer> </div> </div> <script src="https://cache.hbfiles.com/assets/vendor/built-8f695339a51840c6b18455b0b02afe88e4d355e73f60ad4719021a17817342fc.js"></script> <script src="https://cache.hbfiles.com/assets/polyfills-cfc5672726f9bad46be17973ffae6c2e4b48ee765cc9cb93573b3235ec3bc12e.js" defer="defer"></script> <script src="https://cache.hbfiles.com/assets/application-047e2ce373aa30fcb3f8426e63dc2263d3bc835f563b199305fefa434531bcd9.js" defer="defer"></script> <script> // https://developers.google.com/tag-manager/devguide#datalayer window.dataLayer = window.dataLayer || [window.Handy.analytics]; </script> <style>.async-hide { opacity: 0 !important} </style> <script class="handy-analytics" id="handy-analytics--gtm_tag"> (function(w,d,s,l,i) { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'}); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j,f); })(window, document, 'script', 'dataLayer', 'GTM-5JWM6VD'); </script> <script> function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); </script> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5JWM6VD" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <script class="handy-analytics" id="handy-analytics--bright_tag"> window.pageData = {"navigation":{"pageName":"quotes_new","pageCategory":"quotes_new","pageId":null},"pageInfo":{"conversionType":38,"serviceName":"Ceiling \u0026 Bath Fans","serviceCategory":38,"serviceId":40,"bookingId":null,"recurringFrequency":"One-time","zipcode":null,"dateOfBooking":"2024-11-25","timeOfBooking":"13:00:00 -0500","dateAdded":null,"hourlyRate":null,"bookingHrs":0.0,"discount":null,"commisionableAmount":null,"couponCode":null,"confirmedBooking":false,"cleaningType":null,"numberCreatedBookings":0,"isCleaning":0,"isCommit":0,"isOneTime":0,"isRecurring":0},"customerInfo":{"newUser":1,"userLoggedIn":false,"userHasAccount":false,"uid":null,"experimentInfo":{"direct_mail_campaign":{"variant":null}}},"partnerInfo":{"nanPid":null}}; (function() { var btjs = document.createElement('script'), s = document.getElementsByTagName('script')[0]; btjs.async = true; btjs.src = '//s.btstatic.com/tag.js#site=FT5eU6D&referrer=' + encodeURIComponent(document.location.href) + ''; s.parentNode.insertBefore(btjs, s); }()); </script> <noscript> <iframe src="//s.thebrighttag.com/iframe?c=FT5eU6D" width="1" height="1" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe> </noscript> <script class="handy-analytics" id="handy-analytics--customerio"> var _cio = _cio || []; (function() { var a,b,c;a=function(f){return function(){_cio.push([f]. concat(Array.prototype.slice.call(arguments,0)))}};b=["identify","track"];for(c=0;c<b.length;c++){_cio[b[c]]=a(b[c])}; var t = document.createElement('script'), s = document.getElementsByTagName('script')[0]; t.async = true; t.id = 'cio-tracker'; t.setAttribute('data-site-id', 'f7df926230324fc46acf'); t.src = 'https://assets.customer.io/assets/track.js'; s.parentNode.insertBefore(t, s); })(); </script> <script class="handy-analytics" id="handy-analytics--fb_sdk"> window.fbAsyncInit = function() { FB.init({ appId : '381615805205781', xfbml : true, version : 'v2.6' }); }; (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> <!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1500856566877282'); fbq('track', 'PageView'); </script> <noscript> <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1500856566877282&ev=PageView&noscript=1"/> </noscript> <!-- End Facebook Pixel Code --> <script class="handy-analytics" id="handy-analytics--ga"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-31442860-1']); _gaq.push(['_setSiteSpeedSampleRate', 50]); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <script class="handy-analytics" id="handy-analytics--ga_conversion"> /* <![CDATA[ */ var google_conversion_id = 1002781891; var google_conversion_language = "en"; var google_conversion_format = "3"; var google_conversion_color = "ffffff"; var google_conversion_label = "QNwtCI2nggMQw_mU3gM"; var google_conversion_value = 0; /* ]]> */ </script> <script src="https://www.googleadservices.com/pagead/conversion.js"></script> <noscript> <div style="display: inline; position: absolute; top: 0px; border-style: none;"> <img src="https://www.googleadservices.com/pagead/conversion/1002781891/?value=0&label=QNwtCI2nggMQw_mU3gM&guid=ON&script=0" height="1" width="1" style="display: inline; position: absolute; top: 0px; border-style: none;" alt="" /> </div> </noscript> <script class="handy-analytics-events" id="handy-analytics--events--mixpanel"> document.addEventListener('DOMContentLoaded', function(){ window.Handy = window.Handy || {}; if (typeof Handy.track === "function") { Handy.track("quote_page_shown", {"event_context":"booking_funnel","view":"quotes_new","product_type":"consumer","email":null,"session_id":"5d48f61cb1c36827","session_event_count":1}, 2); } if (typeof Handy.trackLink === "function") { } if (typeof Handy.trackVisibleElement === "function") { Handy.trackVisibleElement("#quote_request_zipcode", "zip_shown", {"event_context":"booking_funnel","view":"quotes_new","url_source":"https://www.handy.com/services/ceiling-fan","product_type":"consumer","native_session_uid":null,"from_native":false,"is_cms_page":false,"session_id":"5d48f61cb1c36827","session_event_count":2}, 2); Handy.trackVisibleElement("#quote_request_date", "scheduler_shown", {"event_context":"booking_funnel","view":"quotes_new","product_type":"consumer","session_id":"5d48f61cb1c36827","session_event_count":3}, 2); Handy.trackVisibleElement("#booking_params_notes", "comments_shown", {"event_context":"booking_funnel","view":"quotes_new","product_type":"consumer","session_id":"5d48f61cb1c36827","session_event_count":4}, 2); Handy.trackVisibleElement("#service-details-section", "service_details_shown", {"event_context":"booking_funnel","view":"quotes_new","product_type":"consumer","session_id":"5d48f61cb1c36827","session_event_count":5}, 2); } }); </script> </body> </html>