PageSourceSearch

https://toolbreezy.com/_next/static/chunks/24142-07f714b150b18474.js

js toolbreezy.com collected 2026-10-02 01:48:49 UTC 50,822 bytes, 5 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[24142],{1972:(e,t,a)=>{a.d(t,{Bs:()=>c,Ge:()=>v,Iw:()=>s,Js:()=>m,Lo:()=>g,MB:()=>r,SQ:()=>f,Ui:()=>y,X7:()=>l,_r:()=>u,dz:()=>h,f3:()=>i,ir:()=>d,pF:()=>p,tc:()=>o,u5:()=>n});let n=150,i=300,r=.4,s=.5,o=3,l=[6,7,8],h="The required net free area is measured against the flat attic floor area below, which is the footprint of the ceiling, and never against the sloped area of the roof surface. A steeper roof does not need more ventilation for the same house.",d=60,u={ridge:{key:"ridge",label:"Continuous ridge vent",role:"exhaust",measure:"linearFoot",typicalLowSqIn:18,typicalHighSqIn:18,nameplateGrossSqIn:null,note:"Rated per linear foot of ridge, so the length of ridge you can actually vent is the ceiling on this side of the system. Most products want a slot cut on both sides of the ridge and the rating assumes that slot was cut to the width the instructions name."},soffitLouver:{key:"soffitLouver",label:"Louvered soffit vent, 16 by 8 inch",role:"intake",measure:"unit",typicalLowSqIn:26,typicalHighSqIn:28,nameplateGrossSqIn:128,note:"The 16 by 8 on the box is the outside of the flange rather than the hole, which is why 26 square inches of net free area is a much smaller share of it than a box vent gets out of its own opening. Cut the hole the instructions name and screw the flange over it."},soffitStrip:{key:"soffitStrip",label:"Continuous soffit strip vent",role:"intake",measure:"linearFoot",typicalLowSqIn:8,typicalHighSqIn:9,nameplateGrossSqIn:null,note:"Rated per linear foot of strip. It is the easiest intake to install and the easiest to lose, because blown insulation will pack against the back of it unless there are baffles in every rafter bay holding a channel open."},boxVent:{key:"boxVent",label:"Box vent, standard roof louver",role:"exhaust",measure:"unit",typicalLowSqIn:50,typicalHighSqIn:51,nameplateGrossSqIn:144,note:"Around 50 square inches of net free area out of a 144 square inch cut, which is the example the research uses to explain net free area. Roughly a third of the hole survives the louvers, the screen and the baffle."}},c=["ridge","soffitLouver","soffitStrip","boxVent"];function m(e){return 144*e}function f(e,t){let a=e/t,n=m(a);return{denominator:t,totalSqFt:a,totalSqIn:n,exhaustMinSqIn:n*r,exhaustMaxSqIn:n*s,intakeMinSqIn:.5*n,intakeMaxSqIn:.6*n}}function p(e,t){let a={problem:null,grossSqIn:0,netSqIn:0,netFraction:0,blockedFraction:0,ventsMultiplier:0};if(!Number.isFinite(e)||!Number.isFinite(t))return{...a,problem:"Enter both the opening size and the net free area as numbers."};if(e<=0)return{...a,problem:"The opening has to be larger than zero square inches."};if(t<=0)return{...a,problem:"The net free area has to be larger than zero square inches."};if(t>e)return{...a,problem:"The net free area cannot be larger than the opening it sits in. Check whether the larger number is the outside of the flange rather than the hole, because the flange is bigger than the cut on most vents."};let n=t/e;return{problem:null,grossSqIn:e,netSqIn:t,netFraction:n,blockedFraction:1-n,ventsMultiplier:e/t}}function g(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return{problem:"Enter the shortfall and the rating of one vent as numbers.",exact:0,whole:0};if(t<=0)return{problem:"A vent has to provide more than zero square inches of net free area to close anything.",exact:0,whole:0};if(t>1e3)return{problem:"That rating is above "+String(1e3)+" square inches for a single vent, which no residential passive vent reaches. Check whether you are reading the gross opening rather than the net free area.",exact:0,whole:0};if(e<=0)return{problem:null,exact:0,whole:0};let a=e/t;return{problem:null,exact:a,whole:Math.ceil(a)}}let b=e=>({denominator:e,totalSqFt:0,totalSqIn:0,exhaustMinSqIn:0,exhaustMaxSqIn:0,intakeMinSqIn:0,intakeMaxSqIn:0}),w="Which ratio your attic is held to is a code determination rather than an arithmetic one, so confirm with your local building department which edition they enforce and how they read the exception before you buy anything.";function x(e,t){return{problem:e,atticFloorAreaSqFt:0,ratio:t,requirements:{[n]:b(n),[i]:b(i)},lines:[],provided:{intakeLowSqIn:0,intakeHighSqIn:0,exhaustLowSqIn:0,exhaustHighSqIn:0,totalLowSqIn:0,totalHighSqIn:0,anyTypical:!1,typicalLines:[]},exhaustShareOfRequiredLow:0,exhaustShareOfRequiredHigh:0,totalShortfallSqIn:0,intakeShortfallSqIn:0,exhaustShortfallSqIn:0,totalReachesSelectedRatio:!1,intakeAtLeastExhaust:!1,conditions:[],reducedRatioStatus:"unconfirmed",advisories:[],codeDeterminationRequired:w}}function v(e){let t,a,h,c,m=e.ratio;if(m!==n&&m!==i)return x("The ratio has to be either 1 in "+String(n)+" or 1 in "+String(i)+", which are the two the code publishes.",n);let p=function(e){let t,a=e=>({problem:e,areaSqFt:0});if("dimensions"===e.kind){let{lengthFt:n,widthFt:i}=e;if(!Number.isFinite(n)||!Number.isFinite(i))return a("Enter the attic length and width as 
1numbers, in feet.");if(n<=0||i<=0)return a("Both attic dimensions have to be larger than zero feet.");if(n>400||i>400)return a("Neither attic dimension can be over "+String(400)+" feet. Check whether you have entered inches by mistake.");t=n*i}else if(!Number.isFinite(t=e.areaSqFt))return a("Enter the attic floor area as a number, in square feet.");return t<10?a("An attic floor area under "+String(10)+" square feet is a cupboard rather than an attic, and the code ratio was not written for it."):t>25e3?a("An attic floor area over "+String(25e3)+" square feet is past what this page is for. A building that size is a commercial ventilation design rather than a ratio off a chart."):{problem:null,areaSqFt:t}}(e.footprint);if(null!==p.problem)return x(p.problem,m);let g=p.areaSqFt;if(!Array.isArray(e.vents))return x("Pass the vents you have as a list, even if the list is empty.",m);if(e.vents.length>40)return x("This page will read up to "+String(40)+" separate vent lines. Combine the identical ones into a single row with a quantity.",m);let b=[];for(let t=0;t<e.vents.length;t+=1){let a=function(e,t){let a,n,i,r,s="Vent line "+String(t+1),o=e=>({problem:s+": "+e,reading:null});if("catalog"===e.kind){let t=u[e.type];if(!t)return o("that is not a vent type this page knows.");a=t.role,n=t.measure,i=t.typicalLowSqIn,r=t.typicalHighSqIn}else{if(""===e.label.trim())return o("a custom vent needs a name so you can tell the rows apart.");if("intake"!==e.role&&"exhaust"!==e.role)return o("a custom vent has to be either an intake or an exhaust.");if("unit"!==e.measure&&"linearFoot"!==e.measure)return o("a custom vent has to be rated either per unit or per linear foot.");if(!Number.isFinite(e.ratedNfaSqIn))return o("a custom vent has no published typical to fall back on, so it needs the net free area printed on its own carton.");a=e.role,n=e.measure,i=e.ratedNfaSqIn,r=e.ratedNfaSqIn}let{quantity:l}=e;if(!Number.isFinite(l))return o("enter the quantity as a number.");if(l<0)return o("a negative number of vents is not a thing you can install.");if(l>5e3)return o("that is more than "+String(5e3)+", which is past anything a house carries.");if("unit"===n&&!Number.isInteger(l))return o("vents rated per unit come in whole numbers, because half a vent provides nothing.");let h=e.ratedNfaSqIn,c=i,m=r,f="catalog"===e.kind&&null===h;if(null!==h){if(!Number.isFinite(h))return o("enter the net free area as a number, or leave it blank.");if(h<=0)return o("a vent that provides zero square inches of net free area is a hole with a lid on it.");if(h>1e3)return o("a rating above "+String(1e3)+" square inches for one vent is past anything residential. Check whether that is the gross opening rather than the net free area, because the two are commonly confused and the opening is always the larger of them.");c=h,m=h,f=!1}return{problem:null,reading:{label:"catalog"===e.kind?u[e.type].label:e.label.trim().slice(0,d),role:a,measure:n,quantity:l,perUnitLowSqIn:c,perUnitHighSqIn:m,lowSqIn:l*c,highSqIn:l*m,usedTypical:f}}}(e.vents[t],t);if(null!==a.problem||null===a.reading)return x(a.problem??"That vent line could not be read.",m);b.push(a.reading)}let v=(e,t)=>b.reduce((a,n)=>n.role===e?a+n[t]:a,0),y=v("intake","lowSqIn"),q=v("intake","highSqIn"),N=v("exhaust","lowSqIn"),S=v("exhaust","highSqIn"),F=b.filter(e=>e.usedTypical).map(e=>e.label),j={intakeLowSqIn:y,intakeHighSqIn:q,exhaustLowSqIn:N,exhaustHighSqIn:S,totalLowSqIn:y+N,totalHighSqIn:q+S,anyTypical:F.length>0,typicalLines:F},k={[n]:f(g,n),[i]:f(g,i)},A=k[m],C=N/A.totalSqIn,I=S/A.totalSqIn,L=Math.max(0,A.totalSqIn-j.totalLowSqIn),B=Math.max(0,A.intakeMinSqIn-y),T=Math.max(0,A.exhaustMinSqIn-N),M=C>=r&&C<=s,H=I>=r&&I<=s,z=e=>(100*e).toFixed(1);M&&H?(t="met",a="Your upper vents provide "+z(C)+" percent of the area this ratio requires, which is inside the 40 to 50 percent band."):M!==H?(t="unconfirmed",a="Your upper vents provide somewhere between "+z(C)+" and "+z(I)+" percent of the required area, and the 40 to 50 percent band falls inside that spread. Enter the net free area printed on your own vents to settle it."):(t="not-met",a=I<r?"Your upper vents provide "+z(I)+" percent of the required area, which is under the 40 percent floor.":"Your upper vents provide "+z(C)+" percent of the required area, which is over the 50 percent ceiling. More exhaust than the roof has intake to feed does not ventilate harder, it pulls air out of the house.");let $="yes"===e.conditions.upperVentsNearRidge?"met":"no"===e.conditions.upperVentsNearRidge?"not-met":"unconfirmed",V="met"===$?"You have confirmed the upper vents sit within "+String(o)+" feet of the ridge, measured straight down.":"not-met"===$?"Upper vents more than "+String(o)+" feet below the ridge do not count toward this condition. The air above them does not get moved and that is where the heat and the moisture collect.":"Nobody has confirmed how far below the ridge the upper vents sit. Measure it vertically rather than along the slope.";"no"===e.conditions.inColdVaporZone?(h="not-applicable",c="Outside climate zones "+l.join(", ")+" the vapor retarder is not a condition of the reduced ratio."):"unknown"===e.conditions.inColdVaporZone?(h="unconfirmed",c="This condition only applies in climate zones "+l.join(", ")+", and your zone has not been confirmed. Your building department will tell you which one you are in."):"yes"===e.conditions.vaporRetarderInstalled?(h="met",c="A Class I or II vapor retarder on the warm-in-winter side of the ceiling is confirmed, which is what the cold zones require alongside the balance."):"no"===e.conditions.vaporRetarderInstalled?(h="not-met",c="In climate zones "+l.join(", ")+" the reduced ratio also wants a Class I or II vapor retarder on the warm-in-winter side of the ceiling, and there is none."):(h="unconfirmed",c="A vapor retarder is usually behind the drywall, so it takes a look at the construction drawings or a small hole to confirm. Kraft paper facing on the batts counts, and unfaced batts do not.");let W=[{key:"balance",requirement:"Not less than 40 percent and not more than 50 percent of the required area sits in the upper portion, with the rest at the eave or soffit.",state:t,detail
1:a},{key:"placement",requirement:"Upper vents sit no more than "+String(o)+" feet below the ridge or highest point, measured vertically.",state:$,detail:V},{key:"vaporRetarder",requirement:"In climate zones "+l.join(", ")+", a Class I or II vapor retarder is installed on the warm-in-winter side of the ceiling.",state:h,detail:c}],R=W.some(e=>"not-met"===e.state)?"condition-not-met":W.some(e=>"unconfirmed"===e.state)?"unconfirmed":"conditions-met",O=[],E=y>=N;return 0===j.totalLowSqIn&&O.push("No vents are listed yet, so the figures above are the requirement rather than a comparison."),N>0&&0===y?O.push("You have exhaust and no intake at all. A ridge vent with nothing feeding it pulls air out of the house through the ceiling instead of through the attic, which costs you heat in winter and pushes humid indoor air into the cold roof deck. This is worse than having no vents."):!E&&N>0&&O.push("Your intake is smaller than your exhaust. Ventilation is a loop, so the smaller of the two sets how much air actually moves, and the shortfall gets made up from inside the house."),B>0&&O.push("Intake is short by "+B.toFixed(0)+" square inches of net free area against this ratio. Soffit intake is also the part most often blocked after the fact, by insulation pushed into the eave with no baffle holding a channel open."),T>0&&O.push("Exhaust is short by "+T.toFixed(0)+" square inches of net free area against the 40 percent floor for this ratio."),j.anyTypical&&O.push("Some lines used a published industry average rather than a rating you supplied: "+j.typicalLines.join(", ")+". The net free area is printed on the carton and on the manufacturer datasheet, and it is the only number that describes the vent you actually bought."),m===i&&"conditions-met"!==R&&O.push("You are checking against the reduced 1 in 300 ratio and at least one of the conditions it depends on is unresolved. Against the 1 in 150 baseline this attic needs "+k[n].totalSqIn.toFixed(0)+" square inches, which is exactly double."),m===n&&"not-met"===t&&O.push("The 40 to 50 percent balance is written into the code as a condition of the reduced ratio rather than as a rule for the 1 in 150 baseline you are checking against. It is still the right way to build the system, and it is not a stated requirement here."),{problem:null,atticFloorAreaSqFt:g,ratio:m,requirements:k,lines:b,provided:j,exhaustShareOfRequiredLow:C,exhaustShareOfRequiredHigh:I,totalShortfallSqIn:L,intakeShortfallSqIn:B,exhaustShortfallSqIn:T,totalReachesSelectedRatio:j.totalLowSqIn>=A.totalSqIn,intakeAtLeastExhaust:E,conditions:W,reducedRatioStatus:R,advisories:O,codeDeterminationRequired:w}}let y="This page compares a published ratio against a parts list, and it cannot tell you whether your attic is adequately ventilated, because that depends on the roof, the climate and the inspector rather than on a floor area. Which ratio applies to your house is a code determination, so the ratio is something you select rather than something worked out here, and the conditions attached to the reduced one are answers you supply after somebody has been up there to look. The per-vent net free area figures built into this page are industry averages from the research behind it, not ratings of any product, so a line that uses one comes back as a range and the number printed on your own carton always wins. Nothing here covers unvented or conditioned attic assemblies, which are a different code path entirely, and nothing here accounts for a powered fan, a gable fan or a whole house fan, all of which change the pressures this arithmetic assumes. The limits that make this page refuse an entry, on attic size, on vent count and on the rating of a single vent, are set here rather than published anywhere, and they exist to catch a typo rather than to change any answer."},24142:(e,t,a)=>{a.r(t),a.d(t,{SHARE_CAPS:()=>M,WHOLE_HOUSE_FAN_OPENING:()=>H,buildWholeHouseFanShare:()=>z,default:()=>V,restoreFromShare:()=>$});var n=a(45993),i=a(75837),r=a(30845),s=a(77771),o=a(73950),l=a(15662),h=a(22925),d=a(50792),u=a(95521),c=a(17832),m=a(1972);let f=["mild","standard","hot","unstated"],p={mild:{cfmPerSqFt:2,label:"Coastal or mild mountain",published:"The source publishes 2.0 CFM per square foot for coastal and mild mountain regions."},standard:{cfmPerSqFt:2.5,label:"Most of the continental United States",published:"The source publishes 2.5 CFM per square foot as the industry baseline for most continental United States climates."},hot:{cfmPerSqFt:3,label:"Hot and arid, or heavy daytime heat storage",published:"The source publishes 3.0 CFM per square foot for hot arid desert climates and for houses that store a lot of daytime heat."},unstated:{cfmPerSqFt:null,label:"I would rather not pick one",published:"No rate is applied. The published band still runs from 2.0 to 3.0 CFM per square foot, and that is what every figure on this page is measured against."}},g=["yes","no","unanswered"];function b(e){return"yes"===e?"yes":"no"===e?"no":"unanswered"}let w={atmosphericAppliance:"Is there a natural draft gas water heater, a B vent furnace or a standing pilot appliance inside the heated part of the house, which counts a utility closet or a basement and does not count an appliance sealed off in an unheated garage or an outside mechanical room?",fireplaceOrWoodStove:"Is there a working fireplace or wood stove in the house?"},x={problem:null,areaSqFt:0,ceilingHeightFt:0,volumeCuFt:0,bandLowCfm:0,bandHighCfm:0,achAtBandLow:0,achAtBandHigh:0,volumetricFloorCfm:0,volumetricLim
1itCfm:0,achVerdictAtBandLow:"inside",achVerdictAtBandHigh:"inside",climate:"unstated",climateCfm:null,climateAch:null},v=e=>e<15?"below-floor":e>30?"above-limit":"inside";function y(e,t){let a={problem:null,cfm:0,atticNfaSqFt:0,atticNfaSqIn:0,openWindowSqFt:0,minutesPerAirChange:null};if(!Number.isFinite(e)||e<=0)return{...a,problem:"The airflow has to be a number larger than zero CFM."};if(e>6e4)return{...a,problem:`This page will not work thresholds out past ${6e4.toLocaleString("en-US")} CFM, which is the most the published band can ask for at the largest house it accepts.`};let n=e/750,i=void 0!==t&&Number.isFinite(t)&&t>0?t:null;return{problem:null,cfm:e,atticNfaSqFt:n,atticNfaSqIn:(0,m.Js)(n),openWindowSqFt:e/250,minutesPerAirChange:null===i?null:i/e}}let q={problem:null,ratedCfm:0,verdictVsBand:"inside",timesBandLow:0,timesBandHigh:0,achAtRated:0,achVerdict:"inside",verdictVsClimate:null};function N(e,t,a){let n={problem:null,verdict:"unknown",requiredNfaSqFt:0,existingNfaSqFt:0,shortfallSqFt:0,cfmSupported:0,capped:!1,workingCfm:0};if(null!==e.problem)return{...n,problem:e.problem};if(null!==t.problem)return{...n,problem:t.problem,requiredNfaSqFt:e.atticNfaSqFt,workingCfm:e.cfm};let i=Math.max(0,e.atticNfaSqFt-t.existingNfaSqFt),r=i>0,s=r&&!0!==a;return{problem:null,verdict:r?"short":"carries-it",requiredNfaSqFt:e.atticNfaSqFt,existingNfaSqFt:t.existingNfaSqFt,shortfallSqFt:i,cfmSupported:t.cfmSupported,capped:s,workingCfm:s?t.cfmSupported:e.cfm}}function S(e,t){let a={problem:null,atticFootprintSqFt:0,requiredNfaSqFt:0,equivalentDenominator:0,codeBaselineSqFt:0,codeReducedSqFt:0,versusBaseline:"same",versusReduced:"same"};if(null!==e.problem)return{...a,problem:e.problem};if(null===t||!Number.isFinite(t))return{...a,problem:"Enter the attic footprint, which is the floor area under the roof, to compare the fan requirement against the code ventilation ratios."};if(t<100||t>2e4)return{...a,problem:`The attic footprint has to be between 100 and ${2e4.toLocaleString("en-US")} square feet. On a single story house it is the same as the floor area, and on a two story house it is the area of the upper floor.`};let n=(0,m.SQ)(t,m.u5).totalSqFt,i=(0,m.SQ)(t,m.f3).totalSqFt,r=e.atticNfaSqFt,s=e=>r>e?"more":r<e?"less":"same";return{problem:null,atticFootprintSqFt:t,requiredNfaSqFt:r,equivalentDenominator:t/r,codeBaselineSqFt:n,codeReducedSqFt:i,versusBaseline:s(n),versusReduced:s(i)}}let F=["Open the windows before the switch, every single time. A whole house fan pulls its makeup air from wherever it can get it, so with the windows shut it takes that air down a chimney, a flue or a dryer vent instead.","Carbon monoxide alarms on every floor, working, with fresh batteries. The published guidance treats this as a condition of running a whole house fan at all rather than as a suggestion.","Never run the fan while a fire is lit or while embers are still warm. A fire that looks out can produce carbon monoxide for hours after the flames stop.","Watch the attic side as well. A fan that cannot exhaust into the attic fast enough pushes hot air and attic dust back through ceiling penetrations and into the wall cavities."],j=["It will not tell you that your house can safely run a whole house fan. That depends on which appliances vent through which flue, how tight the envelope is, and what a pressure test reads with the fan running, and none of that is in a floor area.","It will not size makeup air, an interlock, a barometric damper or a powered inlet. Those are engineered assemblies, and a free page that invents one reads as authoritative while being wrong.","It will not work out your attic net free area from vent sizes. A vent opening is much larger than the area air passes through, so that conversion lives on the roof ventilation page and the answer comes here as a number you supply.","It will not decide whether your water heater is natural draft or sealed combustion. That is a look at the appliance and its flue, and getting it wrong is the failure mode this page is built around.","It will not estimate house pressure in pascals or any carbon monoxide level. Those are instrument readings taken in the house with the fan running.","It will not recommend a model, a motor, a damper or a duct layout."],k="toolbreezy:whole-house-fan-calculator",A=e=>""===e.trim()?null:(0,d.jO)(e),C=e=>
1(10*Math.round(e/10)).toLocaleString(),I=e=>e.toLocaleString(void 0,{maximumFractionDigits:2}),L=e=>e.toLocaleString(void 0,{maximumFractionDigits:1}),B={yes:"Yes",no:"No",unanswered:"Not sure yet"},T=["whfg","whfw","whfk","whfa","whfc","whfz","whff","whfn","whfp","whfv"],M={a:11,c:7,f:11,n:8,p:11},H={appliance:"unanswered",fireplace:"unanswered",area:"2000",ceiling:String(8),climate:"unstated"},z=e=>(0,h.CZ)([{key:"whfg",value:e.appliance},{key:"whfw",value:e.fireplace},{key:"whfk",value:e.lockout?"1":null},{key:"whfa",value:e.area},{key:"whfc",value:e.ceiling},{key:"whfz",value:e.climate},{key:"whff",value:e.rated},{key:"whfn",value:e.nfa},{key:"whfp",value:e.footprint},{key:"whfv",value:e.addVents?"1":null}]);function $(e){if(!(0,h.Yc)(e,T))return null;let t=e.get("whfg"),a=e.get("whfw"),n=e.get("whfz"),i=e=>null!==e&&g.includes(e)?e:"unanswered";return{appliance:i(t),fireplace:i(a),lockout:"1"===e.get("whfk"),area:(e.get("whfa")??"").slice(0,M.a),ceiling:(e.get("whfc")??"").slice(0,M.c),climate:null!==n&&f.includes(n)?n:H.climate,rated:(e.get("whff")??"").slice(0,M.f),nfa:(e.get("whfn")??"").slice(0,M.n),footprint:(e.get("whfp")??"").slice(0,M.p),addVents:"1"===e.get("whfv")}}function V(){let[e,t]=(0,i.useState)("unanswered"),[a,h]=(0,i.useState)("unanswered"),[d,m]=(0,i.useState)(!1),[T,H]=(0,i.useState)("2000"),[V,W]=(0,i.useState)(String(8)),[R,O]=(0,i.useState)("unstated"),[E,P]=(0,i.useState)(""),[U,Y]=(0,i.useState)(""),[D,_]=(0,i.useState)(""),[G,J]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let e=$(new URLSearchParams(window.location.search));if(e){t(e.appliance),h(e.fireplace),m(e.lockout),H(e.area),W(e.ceiling),O(e.climate),P(e.rated),Y(e.nfa),_(e.footprint),J(e.addVents);return}let a=(0,u.y5)(k);a.found&&(t(a.oneOf("g",g,"unanswered")),h(a.oneOf("w",g,"unanswered")),m(a.bool("k",!1)),H(a.str("a","2000",M.a)),W(a.str("c",String(8),M.c)),O(a.oneOf("z",f,"unstated")),P(a.str("f","",M.f)),Y(a.str("n","",M.n)),_(a.str("p","",M.p)),J(a.bool("v",!1)))},[]),(0,c.Vd)(k,()=>JSON.stringify({g:e,w:a,k:d,a:T,c:V,z:R,f:E,n:U,p:D,v:G}),[e,a,d,T,V,R,E,U,D,G],{debounceMs:250});let Q=(0,i.useMemo)(()=>(function(e){var t;let a=function(e){let t=b(e.atmosphericAppliance),a=b(e.fireplaceOrWoodStove);if("yes"===t)return{problem:null,verdict:"refused",sizingWithheld:!0,triggersFired:["A natural draft or standing pilot combustion appliance inside the conditioned envelope."],finding:"This page will not size a fan for that house. The published guidance is that a whole house fan is not appropriate above a natural draft gas water heater, a B vent furnace or a standing pilot appliance sitting inside the heated space, because the fan can pull enough air out of the house to reverse the draft in that flue and bring combustion gases back down into the rooms. What the published guidance asks for instead is a combustion safety assessment by somebody who can put a manometer on the house, and either a mechanical interlock or a change to sealed combustion appliances. That is 
1work for a person on site and no free page can do it from a floor area."};if("unanswered"===t||"unanswered"===a){let e=[];return"unanswered"===t&&e.push("the combustion appliance question"),"unanswered"===a&&e.push("the fireplace question"),{problem:null,verdict:"incomplete",sizingWithheld:!0,triggersFired:[],finding:`Answer ${e.join(" and ")} before this page works out any airflow. An unanswered question is left as unanswered here rather than treated as a no, because a no is what lets the calculation run and that is the wrong thing to assume on somebody else behalf. If you are not sure what vents your water heater, that uncertainty is itself the answer worth acting on, and a heating contractor can tell you in a few minutes.`}}return"yes"===a?!0!==e.fireplaceLockoutAcknowledged?{problem:null,verdict:"fireplace-unacknowledged",sizingWithheld:!0,triggersFired:["A working fireplace or wood stove in the house."],finding:"There is a working fireplace or wood stove, so the published guidance attaches a condition before any fan size is worth reading. A fan running while a fire is lit, or while embers are still warm, can pull smoke and carbon monoxide back down the chimney and through the rooms the fan is exhausting. Confirm below that the fireplace will not be used while the fan is running, and the airflow figures appear."}:{problem:null,verdict:"conditional",sizingWithheld:!1,triggersFired:["A working fireplace or wood stove in the house."],finding:"The airflow figures below assume the fireplace stays cold whenever the fan is running, which is the condition you confirmed. Warm embers count, because a fire that looks out can still be producing carbon monoxide for hours. Nothing here is a finding that the house is safe to run a fan in, and a combustion safety test by a contractor is still the thing that answers that."}:{problem:null,verdict:"no-published-trigger",sizingWithheld:!1,triggersFired:[],finding:"None of the published hard stops applied to what you entered, which is not the same as a finding that the house is safe to run a whole house fan in. It means the two questions this page knows to ask came back no. Depressurization depends on how tight the house is, on how much window you actually open, and on appliances a homeowner can easily misidentify, so a combustion safety test with the fan running is still the only thing that settles it."}}(e);if(a.sizingWithheld)return{problem:null,screen:a,sizing:null};let n=function(e){var t;let{areaSqFt:a,ceilingHeightFt:n}=e,i=(t=e.climate,f.includes(t)?t:"unstated");if(null===a||!Number.isFinite(a))return{...x,climate:i,problem:"Enter the conditioned floor area in square feet."};if(a<100||a>2e4)return{...x,climate:i,problem:`The floor area has to be between 100 and ${2e4.toLocaleString("en-US")} square feet. Outside that the rate rule this page runs on was never written for the building you are describing.`};if(null===n||!Number.isFinite(n))return{...x,climate:i,problem:"Enter the average ceiling height in feet. It decides the volume, and the volume is what the air change cross-check runs on. 8 feet is what the rate rule assumes if your ceilings are flat."};if(n<6||n>30)return{...x,climate:i,problem:"The average ceiling height has to be between 6 and 30 feet. A number outside that is usually inches typed into a box asking for feet."};let r=a*n,s=120/n,o=180/n,l=p[i].cfmPerSqFt;return{problem:null,areaSqFt:a,ceilingHeightFt:n,volumeCuFt:r,bandLowCfm:2*a,bandHighCfm:3*a,achAtBandLow:s,achAtBandHigh:o,volumetricFloorCfm:15*r/60,volumetricLimitCfm:30*r/60,achVerdictAtBandLow:v(s),achVerdictAtBandHigh:v(o),climate:i,climateCfm:null===l?null:a*l,climateAch:null===l?null:60*l/n}}(e);if(null!==n.problem)return{problem:n.problem,screen:a,sizing:null};let i=y(n.bandLowCfm,n.volumeCuFt),r=y(n.bandHighCfm,n.volumeCuFt),s=null!==(t=e.existingNfaSqFt)&&Number.isFinite(t)?t<0||t>500?{problem:"Net free area has to be between 0 and 500 square feet. A house sized attic runs to single figures, so a larger number is usually square inches.",existingNfaSqFt:0,cfmSupported:0}:{problem:null,existingNfaSqFt:t,cfmSupported:750*t}:{problem:"Enter the net free area your attic vents provide today, in square feet, to see what airflow it carries.",existingNfaSqFt:0,cfmSupported:0},o=function(e,t){if(null!==e.problem)return{...q,problem:e.problem};if(null===t||!Number.isFinite(t))return{...q,problem:"Enter the rated airflow of the fan in CFM to check it."};if(t<100||t>3e4)return{...q,problem:`A rated airflow has to be between 100 and ${3e4.toLocaleStr
1ing("en-US")} CFM. Whole house fans are sold roughly between 1,000 and 7,000, so anything far outside that is worth a second look at the spec sheet.`};let a=60*t/e.volumeCuFt;return{problem:null,ratedCfm:t,verdictVsBand:t<e.bandLowCfm?"below":t>e.bandHighCfm?"above":"inside",timesBandLow:t/e.bandLowCfm,timesBandHigh:t/e.bandHighCfm,achAtRated:a,achVerdict:v(a),verdictVsClimate:null===e.climateCfm?null:t<e.climateCfm?"under":"at-or-over"}}(n,e.ratedCfm),l=null===o.problem?y(o.ratedCfm,n.volumeCuFt):null;return{problem:null,screen:a,sizing:{band:n,requirementAtBandLow:i,requirementAtBandHigh:r,capacity:s,atticAtBandLow:N(i,s,e.willAddVents),atticAtBandHigh:N(r,s,e.willAddVents),ratioAtBandHigh:S(r,e.atticFootprintSqFt),fan:o,requirementAtFan:l,atticAtFan:null===l?null:N(l,s,e.willAddVents),ratioAtFan:null===l?null:S(l,e.atticFootprintSqFt)}}})({atmosphericAppliance:e,fireplaceOrWoodStove:a,fireplaceLockoutAcknowledged:d,areaSqFt:A(T),ceilingHeightFt:A(V),climate:R,ratedCfm:A(E),existingNfaSqFt:A(U),atticFootprintSqFt:A(D),willAddVents:G}),[e,a,d,T,V,R,E,U,D,G]),Z=Q.sizing,K=null===Z?`Whole house fan calculator
2
3${Q.screen.finding}${null===Q.problem?"":`
4
5${Q.problem}`}`:["Whole house fan, published sizing band","",`House                    ${L(Z.band.areaSqFt)} sq ft at ${L(Z.band.ceilingHeightFt)} ft average ceiling`,`Volume                   ${C(Z.band.volumeCuFt)} cu ft`,"","Airflow across the full published span of 2 to 3 CFM per sq ft",`  ${C(Z.band.bandLowCfm)} to ${C(Z.band.bandHighCfm)} CFM`,`  ${L(Z.band.achAtBandLow)} to ${L(Z.band.achAtBandHigh)} air changes an hour over your volume`,"  The published effective band is 15 to 30 air changes an hour.",...null===Z.band.climateCfm?[]:["","Narrowed by the climate you selected, which rests on your own reading of it:",`  ${C(Z.band.climateCfm)} CFM, ${L(Z.band.climateAch??0)} air changes an hour`],"","Attic net free area needed, at 1 sq ft per 750 CFM",`  ${I(Z.requirementAtBandLow.atticNfaSqFt)} to ${I(Z.requirementAtBandHigh.atticNfaSqFt)} sq ft`,`  ${C(Z.requirementAtBandLow.atticNfaSqIn)} to ${C(Z.requirementAtBandHigh.atticNfaSqIn)} sq in`,"Open window needed, at 4 sq ft per 1,000 CFM",`  ${I(Z.requirementAtBandLow.openWindowSqFt)} to ${I(Z.requirementAtBandHigh.openWindowSqFt)} sq ft`,...null!==Z.capacity.problem?["",Z.capacity.problem]:["","Your attic vents today",`  ${I(Z.capacity.existingNfaSqFt)} sq ft of net free area, which carries ${C(Z.capacity.cfmSupported)} CFM`,`  Against the top of the band: ${"short"===Z.atticAtBandHigh.verdict?`short by ${I(Z.atticAtBandHigh.shortfallSqFt)} sq ft`:"it carries it"}`],...null!==Z.fan.problem||null===Z.requirementAtFan?["",Z.fan.problem??"The fan check did not run."]:["","The fan you entered",`  ${C(Z.fan.ratedCfm)} CFM rated, ${L(Z.fan.achAtRated)} air changes an hour`,`  Against the full published span: ${Z.fan.verdictVsBand}`,`  Attic net free area it asks for: ${I(Z.requirementAtFan.atticNfaSqFt)} sq ft`,`  Open window it asks for: ${I(Z.requirementAtFan.openWindowSqFt)} sq ft`,...null!==Z.atticAtFan&&Z.atticAtFan.capped?[`  Limited by the attic to ${C(Z.atticAtFan.workingCfm)} CFM until more venting goes in.`]:[]],...null!==Z.ratioAtBandHigh.problem?["",Z.ratioAtBandHigh.problem]:["","Against the attic ventilation ratios",`  At the top of the band the fan wants 1 sq ft per ${L(Z.ratioAtBandHigh.equivalentDenominator)} sq ft of attic footprint.`],"","Open the windows before the fan, every time. Carbon monoxide alarms on every floor.","This is published guidance and not a combustion safety test."].join("\n");return(0,n.jsxs)("div",{className:"space-y-5",children:[(0,n.jsx)("div",{className:"rounded-lg border border-amber-500/40 bg-amber-500/5 p-4 text-sm",children:(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"A whole house fan without enough attic net free area pressurizes the attic and never moves its rated airflow."})," ","The figure on the carton is measured at a free discharge, and the fan in your house has to push all of it through whatever the roof has. That is the number this page cares most about, and almost nobody checks it. The other thing a fan this size c
5an do is pull combustion gases back down a flue, so the two questions below come first and there is no way past them."]})}),(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"Two questions before anything is worked out"}),(0,n.jsxs)("div",{className:"mt-4 space-y-2",children:[(0,n.jsx)("p",{className:"text-sm",children:w.atmosphericAppliance}),(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:g.map(a=>(0,n.jsx)(s.$,{size:"sm",variant:e===a?"default":"outline",onClick:()=>t(a),children:B[a]},a))})]}),(0,n.jsxs)("div",{className:"mt-4 space-y-2",children:[(0,n.jsx)("p",{className:"text-sm",children:w.fireplaceOrWoodStove}),(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:g.map(e=>(0,n.jsx)(s.$,{size:"sm",variant:a===e?"default":"outline",onClick:()=>h(e),children:B[e]},e))})]}),"yes"===a&&(0,n.jsx)("div",{className:"mt-4",children:(0,n.jsx)(s.$,{size:"sm",variant:d?"default":"outline",onClick:()=>m(e=>!e),children:d?"Confirmed, the fireplace stays cold while the fan runs":"Confirm the fireplace will not be used while the fan runs"})}),(0,n.jsx)("p",{className:`mt-4 rounded-md border p-3 text-sm ${Q.screen.sizingWithheld?"border-red-500/40 bg-red-500/5":"bg-muted/40 text-muted-foreground"}`,children:Q.screen.finding}),Q.screen.triggersFired.length>0&&(0,n.jsx)("ul",{className:"mt-3 list-disc space-y-1 pl-5 text-sm text-muted-foreground",children:Q.screen.triggersFired.map(e=>(0,n.jsx)("li",{children:e},e))})]}),!Q.screen.sizingWithheld&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)("label",{className:"text-sm font-medium",htmlFor:"a",children:"Conditioned floor area"}),(0,n.jsx)(r.p,{id:"a",inputMode:"decimal",maxLength:M.a,value:T,onChange:e=>H(e.target.value),className:"font-mono"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"Square feet the fan will draw air through."})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)("label",{className:"text-sm font-medium",htmlFor:"c",children:"Average ceiling height"}),(0,n.jsx)(r.p,{id:"c",inputMode:"decimal",maxLength:M.c,value:V,onChange:e=>W(e.target.value),className:"font-mono"}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Feet. The rate rule assumes ",8,", so a vaulted room changes the answer."]})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)("label",{className:"text-sm font-medium",htmlFor:"f",children:"Rated airflow of a fan you are looking at"}),(0,n.jsx)(r.p,{id:"f",inputMode:"decimal",maxLength:M.f,value:E,placeholder:"CFM, optional",onChange:e=>P(e.target.value),className:"font-mono"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"Off the spec sheet. Leave it blank to see the band alone."})]})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("span",{className:"text-sm font-medium",children:"Which climate description fits, if any"}),(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:f.map(e=>(0,n.jsx)(s.$,{size:"sm",variant:R===e?"default":"outline",onClick:()=>O(e),children:p[e].label},e))}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:p[R].published})]}),null===Z?(0,n.jsxs)("div",{className:"rounded-lg border bg-muted/40 p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"One more thing before this can answer"}),(0,n.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:Q.problem??"Fill in the floor area and the average ceiling height."})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsxs)("h3",{className:"text-sm font-medium",children:["Published airflow band for ",L(Z.band.areaSqFt)," square feet"]}),(0,n.jsxs)("p",{className:"mt-3 font-mono text-2xl tabular-nums",children:[C(Z.band.bandLowCfm)," to ",C(Z.band.bandHighCfm)," ",(0,n.jsx)("span",{className:"text-base",children:"CFM"})]}),(0,n.jsxs)("div",{className:"mt-3 space-y-1 font-mono text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"House volume"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[C(Z.band.volumeCuFt)," cu ft"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Air changes an hour over that volume"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[L(Z.band.achAtBandLow)," to ",L(Z.band.achAtBandHigh)]})]}),(0,n.jsxs)("div",{className:"flex justify-between border-t pt-1",children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:["The published effective band, ",15," to ",30," air changes, would ask for"]}),(0,n.jsxs)("span",{className:"tabular-nums",children:[C(Z.band.volumetricFloorCfm)," to ",C(Z.band.volumetricLim
5itCfm)," CFM"]})]}),null!==Z.band.climateCfm&&(0,n.jsxs)("div",{className:"flex justify-between border-t pt-1",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Narrowed by the climate you picked"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[C(Z.band.climateCfm)," CFM at ",L(Z.band.climateAch??0)," air changes"]})]})]}),(0,n.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["The band is the whole published span of ",2," to ",3," ","CFM per square foot, and every verdict on this page is measured against all of it. The climate line is a narrower reading that rests on you grading your own location, so it sits beside the band rather than replacing it."]}),"below-floor"===Z.band.achVerdictAtBandLow&&(0,n.jsxs)("p",{className:"mt-2 text-sm",children:["At your ceiling height the bottom of the band falls under ",15," air changes an hour, which is the point the published guidance says a fan stops producing a breeze anybody notices. That is what a tall or vaulted ceiling does to a rule written per square foot, and it is the reason the volume line is on this page."]}),"above-limit"===Z.band.achVerdictAtBandHigh&&(0,n.jsxs)("p",{className:"mt-2 text-sm",children:["At your ceiling height the top of the band goes past ",30," air changes an hour, which the published guidance treats as a limit set by noise and by what a draft does to window screens rather than as a target."]})]}),(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"What that airflow needs to exist"}),(0,n.jsxs)("div",{className:"mt-3 space-y-1 font-mono text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,n.jsxs)("span",{children:["Attic net free area, at 1 sq ft per ",750," CFM"]}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.requirementAtBandLow.atticNfaSqFt)," to ",I(Z.requirementAtBandHigh.atticNfaSqFt)," sq ft"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"The same figure in square inches"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[C(Z.requirementAtBandLow.atticNfaSqIn)," to ",C(Z.requirementAtBandHigh.atticNfaSqIn)," sq in"]})]}),(0,n.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,n.jsxs)("span",{children:["Open window, at ",4," sq ft per 1,000 CFM"]}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.requirementAtBandLow.openWindowSqFt)," to ",I(Z.requirementAtBandHigh.openWindowSqFt)," sq ft"]})]}),null!==Z.requirementAtBandHigh.minutesPerAirChange&&(0,n.jsxs)("div",{className:"flex justify-between border-t pt-1",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Minutes to change the air once"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[L(Z.requirementAtBandLow.minutesPerAirChange??0)," to"," ",L(Z.requirementAtBandHigh.minutesPerAirChange??0)]})]})]}),(0,n.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"Net free area is the open area left after the louvers, the insect screen and the weather baffle have taken their cut, so it is much smaller than the hole the vent sits in. Work yours out on the roof ventilation calculator and bring the number here, because this page has no way to tell which of the two a tape measure produced."})]}),(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"Check it against the attic you actually have"}),(0,n.jsxs)("div",{className:"mt-3 flex flex-wrap items-end gap-3",children:[(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)("label",{className:"text-sm font-medium",htmlFor:"n",children:"Net free area up there now"}),(0,n.jsx)(r.p,{id:"n",inputMode:"decimal",maxLength:M.n,value:U,placeholder:"sq ft",onChange:e=>Y(e.target.value),className:"w-32 font-mono"})]}),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsx)("label",{className:"text-sm font-medium",htmlFor:"p",children:"Attic footprint"}),(0,n.jsx)(r.p,{id:"p",inputMode:"decimal",maxLength:M.p,value:D,placeholder:"sq ft",onChange:e=>_(e.target.value),className:"w-32 font-mono"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"The floor area under the roof."})]})]}
5),null!==Z.capacity.problem?(0,n.jsx)("p",{className:"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground",children:Z.capacity.problem}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"mt-4 space-y-1 font-mono text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,n.jsx)("span",{children:"Airflow your venting carries"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[C(Z.capacity.cfmSupported)," CFM"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Against the bottom of the band"}),(0,n.jsx)("span",{className:"tabular-nums",children:"short"===Z.atticAtBandLow.verdict?`short by ${I(Z.atticAtBandLow.shortfallSqFt)} sq ft`:"it carries it"})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Against the top of the band"}),(0,n.jsx)("span",{className:"tabular-nums",children:"short"===Z.atticAtBandHigh.verdict?`short by ${I(Z.atticAtBandHigh.shortfallSqFt)} sq ft`:"it carries it"})]})]}),"short"===Z.atticAtBandHigh.verdict&&(0,n.jsxs)("div",{className:"mt-3",children:[(0,n.jsx)(s.$,{size:"sm",variant:G?"default":"outline",onClick:()=>J(e=>!e),children:G?"More attic venting is going in":"I will add more attic venting"}),(0,n.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"Until that is pressed, the page holds the working airflow down to what your current venting carries, because a fan cannot move air the roof will not let out. Pressing it does not do the work, it only says the work is planned."})]})]}),null!==Z.ratioAtBandHigh.problem&&(0,n.jsx)("p",{className:"mt-4 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground",children:Z.ratioAtBandHigh.problem}),null===Z.ratioAtBandHigh.problem&&(0,n.jsxs)("div",{className:"mt-4 rounded-md border bg-muted/30 p-3",children:[(0,n.jsx)("h4",{className:"text-sm font-medium",children:"Against the attic ventilation ratios"}),(0,n.jsxs)("div",{className:"mt-2 space-y-1 font-mono text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"The fan at the top of the band wants"}),(0,n.jsxs)("span",{className:"tabular-nums",children:["1 sq ft per ",L(Z.ratioAtBandHigh.equivalentDenominator)," sq ft of attic"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"The 1 in 150 baseline gives this attic"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.ratioAtBandHigh.codeBaselineSqFt)," sq ft"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"The 1 in 300 reduced ratio gives it"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.ratioAtBandHigh.codeReducedSqFt)," sq ft"]})]})]}),(0,n.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"A single story house sized at the standard 2.5 CFM per square foot works out to one square foot of net free area for every 300 of attic footprint, which is exactly the reduced code ratio. So that house needs the whole of its minimum attic ventilation working for the fan alone. Put the same floor area on a two story plan and the footprint halves, which lands on 1 in 150 and means the fan wants the full baseline. Whether the ratio applies to your house at all is a code question the roof ventilation page handles."})]})]}),null!==Z.fan.problem&&(0,n.jsx)("p",{className:"rounded-lg border bg-muted/40 p-4 text-sm text-muted-foreground",children:Z.fan.problem}),null===Z.fan.problem&&null!==Z.requirementAtFan&&(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsxs)("h3",{className:"text-sm font-medium",children:["The fan you entered, at ",C(Z.fan.ratedCfm)," CFM"]}),(0,n.jsxs)("div",{className:"mt-3 space-y-1 font-mono text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between font-medium",children:[(0,n.jsx)("span",{children:"Against the full published span"}),(0,n.jsx)("span",{className:"tabular-nums",children:"above"===Z.fan.verdictVsBand?"above the top":"below"===Z.fan.verdictVsBand?"below the bottom":"inside it"})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Times the bottom and the top of the band"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.fan.timesBandLow)," and ",I(Z.fan.timesBandHigh)]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Air changes an hour over your volume"}),(0,n.jsx)("span",{className:"tabular-nums",children:L(Z.fan.achAtRated)})]}),(0,n.jsxs)("div",{className:"flex justify-between border-t pt-1",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Attic net free area it asks for"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.requirementAtFan.atticNfaSqFt)," sq ft"]})]}),(0,n.jsxs)("div",{className:"flex justify-between",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"Open window it asks for"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[I(Z.requirementAtFan.openWindowSqFt)," sq ft"]})]})]}),null!==Z.fan.verdictVsClimate&&(0,n.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["Measured against the single rate your climate answer picks out, this fan sits"," ","under"===Z.fan.verdictVsClimate?"under it":"at or over it",". Treat that as the softer of the two readings, because it rests on your own grading of the location rather than on the published span."]}),"above-limit"===Z.fan.achVerdict&&(0,n.jsxs)("p",{className:"mt-3 text-sm",children:["That is more than ",30," air changes an hour over your volume, which the published guidance treats as the point where noise and draft become the problem rather than the cooling."]}),null!==Z.atticAtFan&&Z.atticAtFan.capped&&(0,n.jsxs)("p",{className:"mt-3 rounded-md border border-amber-500/40 bg-amber-500/5 p-3 text-sm",children:["Your attic venting as entered carries ",C(Z.atticAtFan.cfmSupported)," CFM, so this fan is held to that figure rather than to its rating until more net free area goes in. It would need ",I(Z.atticAtFan.shortfallSqFt)," more square feet of net free area to run at the number on the box."]})]}),(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"Every time you run it"}),(0,n.jsx)("ul",{className:"mt-3 list-disc space-y-2 pl-5 text-sm text-muted-foreground",children:F.map(e=>(0,n.jsx)("li",{children:e},e))})]}),(0,n.jsx)(l.i,{value:K,label:"Copy the band and the attic check"})]})]}),(0,n.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,n.jsx)("h3",{className:"text-sm font-medium",children:"What this page refuses to do"}),(0,n.jsx)("ul",{className:"mt-3 list-disc space-y-2 pl-5 text-sm text-muted-foreground",children:j.map(e=>(0,n.jsx)("li",{children:e},e))})]}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"This page divides a floor area by published rates and then divides the airflow by two more published figures, so every number here describes the guidance rather than your house. The 2.0 to 3.0 CFM per square foot band, the 15 to 30 air changes an hour band, the one square foot of attic net free area per 750 CFM and the four square feet of open window per 1,000 CFM all come from whole house fan manufacturers and industry ventilation guides rather than from a code section, which means no inspector is checking them and they carry the usual spread of any trade rule of thumb. It cannot tell you whether your house can run a whole house fan, because that turns on which appliances vent through which flue, how tight the envelope is, and what a manometer reads with the fan running and the windows where you actually leave them. The net free area of your attic is a number you supply, worked out on the roof ventilation page, because a vent opening is much larger than the area air passes through and nothing here can tell which of the two a tape measure produced. The combustion warnings on this page are the published ones rather than a finding about your address, and no combination of answers here is a substitute for a combustion safety test by somebody standing in the house."}),(0,n.jsx)(o.ToolActions,{share:()=>z({appliance:e,fireplace:a,lockout:d,area:T,ceiling:V,climate:R,rated:E,nfa:U,footprint:D,addVents:G}),title:"Whole House Fan Calculator",queryIsImpersonal:"the floor area, ceiling height, fan rating, attic figures and the two appliance answers you gave"})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.