{"id":27957,"date":"2026-11-09T15:09:43","date_gmt":"2026-11-09T15:09:43","guid":{"rendered":"https:\/\/tradefoxapp.com\/calculators\/carpentry\/"},"modified":"2026-11-09T15:56:39","modified_gmt":"2026-11-09T15:56:39","slug":"carpentry","status":"publish","type":"page","link":"https:\/\/tradefoxapp.com\/fr\/calculators\/carpentry\/","title":{"rendered":"Carpentry calculators"},"content":{"rendered":"\n<style>\n\/* Tradefox calculators \u2014 Apple-style, scoped to .tfc so it can sit inside any WordPress page *\/\n.tfc{--fg:#1d1d1f;--fg2:#6e6e73;--line:#d2d2d7;--soft:#f5f5f7;--brand:#F15927;--brand-ink:#C2410C;--radius:18px;\n font-family:-apple-system,BlinkMacSystemFont,\"SF Pro Text\",\"SF Pro Display\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;\n color:var(--fg);-webkit-font-smoothing:antialiased;font-size:17px;line-height:1.47;letter-spacing:-.022em;text-align:left}\n.tfc *,.tfc *::before,.tfc *::after{box-sizing:border-box}\n.tfc a{color:var(--brand-ink);text-decoration:none}\n.tfc a:hover{text-decoration:underline}\n.tfc button,.tfc input,.tfc select{font:inherit;letter-spacing:inherit;color:inherit}\n.tfc-wrap{max-width:1024px;margin:0 auto;padding:0 22px}\n.tfc-brand{display:flex;align-items:center;gap:8px;padding:18px 0 0;font-size:14px;font-weight:600;color:var(--fg)}\n.tfc-brand img{width:98px;height:20px;display:block}\n.tfc-hero{padding:44px 0 28px}\n.tfc-h1{margin:0;font-size:56px;line-height:1.07;font-weight:700;letter-spacing:-.005em}\n.tfc-h1 span{display:block;color:var(--fg2)}\n.tfc-search{position:relative;margin-top:28px;max-width:560px}\n.tfc-search input{width:100%;height:48px;border-radius:999px;border:1px solid transparent;background:var(--soft);padding:0 20px 0 46px;font-size:17px;outline:none;transition:border-color .2s,background .2s}\n.tfc-search input:focus{background:#fff;border-color:var(--brand);box-shadow:0 0 0 4px rgba(241,89,39,.15)}\n.tfc-search svg{position:absolute;left:17px;top:50%;width:17px;height:17px;transform:translateY(-50%);color:var(--fg2)}\n.tfc-chips{display:flex;flex-wrap:wrap;gap:8px;padding:22px 0 4px}\n.tfc-chips::-webkit-scrollbar{display:none}\n.tfc .tfc-chip{flex:0 0 auto;border:0;background:var(--soft);color:var(--fg);border-radius:999px;padding:8px 16px;font-size:14px;cursor:pointer;transition:background .2s,color .2s}\n.tfc .tfc-chip:hover{background:#e8e8ed}\n.tfc .tfc-chip[aria-pressed=\"true\"]{background:var(--fg);color:#fff}\n.tfc-band{background:var(--soft);padding:36px 0 64px}\n.tfc-group{margin:0 0 40px}\n.tfc-h2{margin:0 0 16px;font-size:28px;line-height:1.14;font-weight:700;letter-spacing:.004em}\n.tfc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}\n.tfc-card{display:flex;flex-direction:column;gap:6px;min-height:150px;background:#fff;border-radius:var(--radius);padding:22px 22px 20px;color:var(--fg)!important;text-decoration:none!important;\n box-shadow:2px 4px 12px rgba(0,0,0,.08);transition:box-shadow .3s cubic-bezier(0,0,.5,1),transform .3s cubic-bezier(0,0,.5,1)}\n@media (hover:hover) and (pointer:fine){.tfc-card:hover{box-shadow:2px 4px 16px rgba(0,0,0,.16);transform:scale3d(1.01,1.01,1.01)}}\n.tfc-card .k{font-size:12px;font-weight:600;color:var(--fg2)}\n.tfc-card .t{font-size:19px;line-height:1.21;font-weight:600}\n.tfc-card .f{margin-top:auto;font-size:14px;color:var(--fg2);overflow-wrap:anywhere}\n.tfc-empty{color:var(--fg2);padding:20px 0}\n\/* detail *\/\n.tfc-back{display:inline-flex;align-items:center;gap:4px;margin-top:22px;font-size:14px}\n.tfc-detail{padding:20px 0 64px}\n.tfc-eyebrow{font-size:14px;font-weight:600;color:var(--brand-ink);margin:0 0 6px}\n.tfc-title{margin:0;font-size:48px;line-height:1.08;font-weight:700;letter-spacing:-.003em}\n.tfc-formula{display:inline-block;margin:18px 0 0;padding:10px 16px;border-radius:12px;background:var(--soft);font:500 16px\/1.4 \"SF Mono\",ui-monospace,Menlo,Consolas,monospace;letter-spacing:0;overflow-wrap:anywhere}\n.tfc-intro{max-width:692px;margin:20px 0 0;color:var(--fg)}\n.tfc-intro p{margin:0 0 .8em}\n.tfc-layout>*,.tfc-info>*,.tfc-grid>*{min-width:0}\n.tfc-row input,.tfc-row select{width:100%}\n.tfc-row select,.tfc-unit{width:auto}\n.tfc-layout{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:24px;margin-top:32px;align-items:start}\n.tfc-panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:24px}\n.tfc-field{margin:0 0 18px}\n.tfc-field label{display:block;font-size:14px;font-weight:600;margin:0 0 6px}\n.tfc-row{display:flex;gap:8px}\n.tfc-row input{flex:1 1 auto;min-width:0;height:48px;border:1px solid var(--line);border-radius:12px;padding:0 14px;font-size:17px;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s}\n.tfc-row input:focus,.tfc-row select:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(241,89,39,.15)}\n.tfc-row input[aria-invalid=\"true\"]{border-color:#e30000}\n.tfc-row select,.tfc-unit{flex:0 0 auto;height:48px;border:1px solid var(--line);border-radius:12px;padding:0 12px;font-size:15px;background:var(--soft);outline:none;min-width:72px}\n.tfc-unit{display:flex;align-items:center;color:var(--fg2);border-color:transparent}\n.tfc-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:6px}\n.tfc .tfc-btn{border:0;border-radius:999px;background:var(--brand);color:#fff;font-weight:600;font-size:17px;padding:12px 26px;cursor:pointer;transition:background .2s}\n.tfc .tfc-btn:hover{background:#d94d1f}\n.tfc .tfc-link{border:0;background:none;padding:0;color:var(--brand-ink);font-size:15px;cursor:pointer}\n.tfc .tfc-link:hover{text-decoration:underline}\n.tfc-error{color:#d70015;font-size:14px;margin:12px 0 0;min-height:1em}\n.tfc-results{background:var(--soft);border-radius:var(--radius);padding:24px;min-height:100%}\n.tfc-results .lbl{font-size:14px;color:var(--fg2);margin:0}\n.tfc-out{margin:0 0 20px}\n.tfc-out:last-of-type{margin-bottom:0}\n.tfc-num{font-size:40px;line-height:1.1;font-weight:700;letter-spacing:-.01em;overflow-wrap:anywhere}\n.tfc-num small{font-size:21px;font-weight:600;color:var(--fg2);margin-left:6px}\n.tfc-pct{display:block;font-size:14px;color:var(--fg2)}\n.tfc-wait{color:var(--fg2);margin:0}\n.tfc-tag{display:inline-block;font-size:12px;font-weight:600;color:var(--fg2);background:#fff;border-radius:999px;padding:3px 10px;margin:0 0 14px}\n.tfc-notice{font-size:14px;color:var(--fg2);margin:16px 0 0}\n.tfc-work{margin-top:18px;font-size:14px}\n.tfc-work summary{cursor:pointer;color:var(--brand-ink);font-weight:600}\n.tfc-work pre{white-space:pre-wrap;font:13px\/1.5 \"SF Mono\",ui-monospace,Menlo,Consolas,monospace;letter-spacing:0;background:#fff;border-radius:12px;padding:12px;margin:10px 0 0;overflow-wrap:anywhere}\n.tfc-info{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:24px}\n.tfc-info section{background:var(--soft);border-radius:var(--radius);padding:22px}\n.tfc-info h3{margin:0 0 8px;font-size:17px;font-weight:600}\n.tfc-info p,.tfc-info ul{margin:0;font-size:15px;color:var(--fg)}\n.tfc-info ul{padding-left:18px}\n.tfc-info li{margin:0 0 6px}\n.tfc-foot{max-width:692px;font-size:12px;line-height:1.5;color:var(--fg2);margin:28px 0 0}\n@media (max-width:833px){\n .tfc-h1{font-size:40px}.tfc-title{font-size:34px}\n .tfc-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n .tfc-layout,.tfc-info{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:560px){\n .tfc-wrap{padding:0 16px}.tfc-h1{font-size:32px}.tfc-title{font-size:28px}.tfc-h2{font-size:24px}\n .tfc-grid{grid-template-columns:1fr}.tfc-card{min-height:0}\n .tfc-num{font-size:32px}\n}\n@media (prefers-reduced-motion:reduce){.tfc *{transition:none!important}.tfc-card:hover{transform:none!important}}\n\n\/* local nav (Apple-style sticky product bar) + pager *\/\n.tfc-local{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid rgba(0,0,0,.16)}\n.tfc-local-in{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:52px}\n.tfc .tfc-local-title{font-size:21px;font-weight:600;letter-spacing:.011em;color:var(--fg);white-space:nowrap}\n.tfc .tfc-local-title:hover{text-decoration:none;color:var(--brand-ink)}\n.tfc-local-links{display:flex;gap:20px;overflow-x:auto;scrollbar-width:none;font-size:12px}\n.tfc-local-links::-webkit-scrollbar{display:none}\n.tfc .tfc-local-links a{color:var(--fg);opacity:.8;white-space:nowrap}\n.tfc .tfc-local-links a:hover{opacity:1;color:var(--brand-ink);text-decoration:none}\n.tfc-pager{display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:center;margin-top:40px;padding-top:24px;border-top:1px solid var(--line)}\n.tfc .tfc-pager a{font-size:17px;font-weight:600;color:var(--fg)}\n.tfc .tfc-pager a span{display:block;font-size:12px;font-weight:400;color:var(--fg2)}\n.tfc .tfc-pager a:hover{color:var(--brand-ink);text-decoration:none}\n.tfc .tfc-pager .tfc-all{font-size:15px;color:var(--brand-ink)}\n.tfc-pager .tfc-next{text-align:right}\n@media (max-width:560px){.tfc-local-in{flex-direction:column;align-items:flex-start;gap:4px;padding:8px 16px}.tfc .tfc-local-title{font-size:17px}.tfc-local-links{width:100%;gap:16px}\n .tfc-pager{grid-template-columns:1fr 1fr}.tfc-pager .tfc-all{grid-column:1\/-1;grid-row:1;text-align:center}}\n\n.tfc .tfc-math{display:inline-block;max-width:100%;box-sizing:border-box;margin:18px 0 0;padding:16px 22px;border-radius:16px;background:var(--soft);overflow-x:auto;color:var(--fg)}\n.tfc .tfc-math math,.tfc .tfc-math math *,.tfc .tfc-where math,.tfc .tfc-where math *{font-family:\"STIX Two Math\",\"Cambria Math\",\"Latin Modern Math\",\"Times New Roman\",math,serif!important}\n.tfc .tfc-math math{font-size:22px;margin:4px 0;text-align:left;math-style:normal}\n.tfc .tfc-math math[display=block]{display:block math}\n.tfc .tfc-where{margin:12px 0 0;padding:10px 0 0;border-top:1px solid rgba(0,0,0,.08);display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font:400 14px\/1.45 -apple-system,BlinkMacSystemFont,\"SF Pro Text\",\"Helvetica Neue\",sans-serif;color:#6e6e73}\n.tfc .tfc-where>div{display:contents}\n.tfc .tfc-where dt,.tfc .tfc-where dd{margin:0}\n.tfc .tfc-where dt math{font-size:17px;color:#1d1d1f}\n.tfc .tfc-where .tfc-where-h{grid-column:1\/-1;font-style:italic}\n@media(max-width:600px){.tfc .tfc-math{display:block;padding:14px 16px}.tfc .tfc-math math{font-size:18px}}\n\n.tfc .tfc-card .tfc-cm{display:block;overflow:hidden;max-width:100%;font-family:inherit;color:var(--fg)}\n.tfc .tfc-card .tfc-cm math{font-size:17px;text-align:left;margin:0}\n.tfc .tfc-card .tfc-cm math[display=block]{display:inline math;math-style:normal}\n.tfc .tfc-card .tfc-cm math,.tfc .tfc-card .tfc-cm math *{font-family:\"STIX Two Math\",\"Cambria Math\",\"Latin Modern Math\",\"Times New Roman\",math,serif!important}\n\n\n.tfc-brand{display:none}\n.tfc-hero{padding-top:56px}\n<\/style>\n<div class=\"tfc\" id=\"tfc\"><\/div>\n<script>\n\/* Carpentry: converted line-for-line from the original Tradefox Unity C# model (Model.cs). *\/\n(function(){\nfunction SnapWhole(x){const nearest=Math.round(x);return nearest!==0&&Math.abs(x-nearest)<=4*2.2204460492503131e-16*Math.abs(x)?nearest:x;}\nfunction Up(x){return Math.ceil(SnapWhole(x));}\nfunction Need(ok,message){if(!ok)throw new Error(message);}\nfunction Fmt(x){return String(Number(x.toPrecision(10)));}\nfunction calculate(item,a){\n Need(a.length===item.fields.length,'Missing inputs.');\n for(let i=0;i<a.length;i++){const f=item.fields[i];Need(Number.isFinite(a[i]),f.label+': enter a finite number.');Need(a[i]>=f.min&&a[i]<=f.max,f.label+': allowed range '+Fmt(f.min)+' to '+Fmt(f.max)+'.');Need(!f.integer||a[i]===Math.trunc(a[i]),f.label+': use a whole number.');}\n const x=a[0],y=a.length>1?a[1]:0,z=a.length>2?a[2]:0,w=a.length>3?a[3]:0,t=a.length>4?a[4]:0,u=a.length>5?a[5]:0,v=a.length>6?a[6]:0;let r,b,n,q;\n switch(item.id){\n case \"rectangle\":q=[x*y,2*(x+y)];break;\n case \"triangle\":q=[x*y\/2];break;\n case \"circle\":q=[Math.PI*x*x\/4,Math.PI*x];break;\n case \"diagonal\":r=Math.sqrt(x*x+y*y);q=[r,Math.abs(z-w)*1000,(z-r)*1000,(w-r)*1000];break;\n case \"square\":q=[3*x,4*x,5*x];break;\n case \"slope\":q=[Math.sqrt(x*x+y*y),Math.atan2(y,x)*180\/Math.PI,y\/x*100,y==0?0:x\/y];break;\n case \"fall\":q=[x\/y*1000,z-x\/y];break;\n case \"level\":q=[x+y,x+y-z];break;\n case \"scale\":q=[x*y,x*y\/1000,z\/y];break;\n case \"mass\":q=[x*y,x*y\/1000,x*y*9.81\/1000];break;\n case \"packs\":r=Up(x*(1+y\/100));n=Up(r\/z);q=[r,n,n*z,n*z-r];break;\n case \"cost\":r=x*y+z*w+t;b=r*(1+u\/100);q=[r,b,b*v\/100,b*(1+v\/100)];break;\n case \"time\":q=[x\/y,x\/y\/z];break;\n case \"convert\":q=[x\/1000,y\/1e6,z\/1000,w*25.4];break;\n case \"timber\":q=[x*y,x*y*z*w\/1e6];break;\n case \"boardfeet\":r=x*y*z*w\/12;q=[r,r*.002359737216];break;\n case \"round\":q=[Math.PI*x*x\/4\/1e6*y*z];break;\n case \"sheets\":r=y*z\/1e6;n=Up(x*(1+w\/100)\/r);q=[r,n,n*r];break;\n case \"sheetgrid\":r=Up(x\/z)*Up(y\/w);b=Up(x\/w)*Up(y\/z);q=[r,b,Math.min(r,b)];break;\n case \"floor\":r=x*(1+y\/100);n=Up(r\/z);q=[r,n,n*z];break;\n case \"rows\":r=x-2*z;Need(r>0,\"Expansion gaps consume the room width.\");n=Up(r\/y);b=n==1?r:(r-(n-2)*y)\/2;q=[r,n,b];break;\n case \"deck\":r=x-2*w;Need(r>0,\"Edge gaps consume the width.\");n=Up((r+z)\/(y+z));Need(n>=2,\"Use at least two full boards for this calculation.\");b=(r-n*y)\/(n-1);Need(b>=0,\"Full-width boards cannot fit: rip an edge board or change the layout.\");q=[n,b];break;\n case \"cladding\":r=x\/(y\/1000);q=[r,r*(1+z\/100)];break;\n case \"studs\":n=Up(x\/y);q=[n,n+1,x\/n];break;\n case \"noggins\":Need(x>y,\"Member thickness must be less than centres.\");r=x-y;n=z*w;q=[r,n,r*n\/1000];break;\n case \"studlength\":Need(x>y+z,\"Plates consume the frame height.\");q=[x-y-z];break;\n case \"spacing\":Need(x>2*y,\"Margins consume the length.\");q=[(x-2*y)\/(z-1),y,x-y];break;\n case \"gaps\":Need(x>=y*z,\"Members are wider than the opening.\");r=(x-y*z)\/(z+1);q=[r,y+r];break;\n case \"balustercount\":n=Math.max(1,Up((x-z)\/(y+z)));Need(n*y<=x,\"Members cannot fit the opening.\");q=[n,(x-n*y)\/(n+1)];break;\n case \"cut\":r=x-w;Need(r>0,\"Trims consume the stock.\");n=Math.floor(SnapWhole(r\/(y+z)));Need(n>=1,\"A finished piece plus its separating cut will not fit.\");q=[n,Up(t\/n),Math.max(0,r-n*(y+z))];break;\n case \"skirting\":r=2*(x+y)-z+w;Need(r>0,\"Deductions exceed the trim run.\");b=r*(1+t\/100);q=[r,b,Up(b\/u)];break;\n case \"architrave\":r=y+z+w;b=x+2*(z+w);q=[r,b,(2*r+b)*t\/1000];break;\n case \"door\":Need(x>z+w&&y>t+u,\"Gaps consume the opening.\");q=[x-z-w,y-t-u];break;\n case \"lining\":r=x+2*z;b=y+z;q=[r,b,r+2*w,b+t];break;\n case \"panel\":Need(w<2*z&#038;&#038;t<2*z,\"Total clearance must be less than twice the groove depth so the panel engages both opposing grooves.\");q=[x+2*z-w,y+2*z-t];break;\n case \"drawer\":r=x-y-z;Need(r>2*w,\"Allowances consume the box width.\");q=[r,r-2*w];break;\n case \"mitre\":q=[x\/2,90-x\/2];break;\n case \"polygon\":q=[180-360\/x,180\/x];break;\n case \"crown\":r=x*Math.PI\/180;b=y*Math.PI\/360;q=[Math.atan(Math.sin(r)\/Math.tan(b))*180\/Math.PI,Math.asin(Math.cos(r)*Math.cos(b))*180\/Math.PI];break;\n case \"mitrepoints\":r=y*Math.tan(z*Math.PI\/180);q=[r,x+2*r];break;\n case \"lapjoint\":q=[x\/2,x\/2];break;\n case \"tenon\":Need(y<x,\"Tenon must be thinner than stock.\");q=[(x-y)\/2];break;\n case \"dovetail\":q=[Math.atan(1\/x)*180\/Math.PI];break;\n case \"router\":Need(x>y,\"Bush outside diameter must exceed cutter diameter.\");q=[(x-y)\/2,x-y];break;\n case \"taper\":Need(y>=z,\"Wide end must be at least the narrow end.\");r=y-z;q=[r,Math.atan(r\/x)*180\/Math.PI,Math.atan(r\/(2*x))*180\/Math.PI];break;\n case \"rafter\":r=y*Math.PI\/180;b=x\/Math.cos(r);n=z\/Math.cos(r);q=[x*Math.tan(r),b,n,b+n];break;\n case \"ridge\":q=[x\/2,x\/2\/Math.cos(y*Math.PI\/180)];break;\n case \"hip\":r=x*Math.sqrt(2);b=x*Math.tan(y*Math.PI\/180);q=[r,b,Math.sqrt(r*r+b*b),Math.atan2(b,r)*180\/Math.PI];break;\n case \"jack\":q=[x\/Math.cos(y*Math.PI\/180)];break;\n case \"roofarea\":r=x\/Math.cos(y*Math.PI\/180);q=[r,r*(1+z\/100)];break;\n case \"firring\":q=[x\/y,z+x\/y,Math.atan(1\/y)*180\/Math.PI];break;\n case \"stairs\":r=x\/y;n=y-1;q=[r,n,n*z,Math.atan(r\/z)*180\/Math.PI,2*r+z];break;\n case \"risers\":n=Up(x\/y);q=[n,x\/n];break;\n case \"stairline\":r=Math.sqrt(x*x+y*y);q=[r,r*z];break;\n case \"tread\":q=[x+y+z];break;\n case \"headroom\":r=x+y*z\/w;q=[r,t-r];break;\n case \"moisture\":r=x*y\/100*(w-z);Need(x+r>0,\"The movement inputs imply a non-positive final width. Check the coefficient and moisture range.\");q=[r,x+r];break;\n case \"finish\":r=x*y\/z;q=[r,r*(1+w\/100)];break;\n case \"fixings\":r=Up(x*y*(1+z\/100));q=[r,Up(r\/w)];break;\n case \"shelf\":r=y*z*z*z\/12;b=t*x*x\/8;q=[r,5*t*Math.pow(x,4)\/(384*w*r),b,b\/(y*z*z\/6)];break;\n case \"pointload\":r=y*z*z*z\/12;q=[t*Math.pow(x,3)\/(48*w*r),t*x\/4,t\/2];break;\n \n default:throw new Error('Unknown calculator.');\n }\n Need(q.length===item.outputs.length,'Output definition mismatch.');for(const res of q)Need(Number.isFinite(res),'Result exceeds the calculation range.');return q;\n}\nwindow.TF_CARP_MODEL=calculate;if(typeof module!=='undefined')module.exports=calculate;\n})();\n\n<\/script>\n<script>\n\/* Tradefox carpentry calculators: adapter for the shared shell. Data from the original catalogue.json. *\/\n(function(){\n'use strict';\nconst CALCS=[{\"id\":\"rectangle\",\"group\":\"Geometry\",\"title\":\"Rectangle area & perimeter\",\"formula\":\"Area = L \u00d7 W; perimeter = 2 \u00d7 (L + W).\",\"intro\":[\"Calculate a rectangular plan, base or panel.\"],\"notes\":\"Perimeter is the complete outside boundary.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Length\",\"unit\":\"m\",\"example\":4,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Width\",\"unit\":\"m\",\"example\":3,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Area\",\"unit\":\"m\u00b2\"},{\"label\":\"Perimeter\",\"unit\":\"m\"}],\"expected\":[12,14]},{\"id\":\"triangle\",\"group\":\"Geometry\",\"title\":\"Triangle area\",\"formula\":\"Area = base \u00d7 perpendicular height \/ 2.\",\"intro\":[\"Calculate a triangle using its base and perpendicular height.\"],\"notes\":\"The height must be at right angles to the base, not the sloping side.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Base\",\"unit\":\"m\",\"example\":4,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Perpendicular height\",\"unit\":\"m\",\"example\":3,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Area\",\"unit\":\"m\u00b2\"}],\"expected\":[6]},{\"id\":\"circle\",\"group\":\"Geometry\",\"title\":\"Circle area & circumference\",\"formula\":\"Area = \u03c0d\u00b2 \/ 4; circumference = \u03c0d.\",\"intro\":[\"Calculate a circular feature from its diameter.\"],\"notes\":\"Use the correct setting-out line: inside, outside or centreline.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Diameter\",\"unit\":\"m\",\"example\":2,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Area\",\"unit\":\"m\u00b2\"},{\"label\":\"Circumference\",\"unit\":\"m\"}],\"expected\":[3.141592653589793,6.283185307179586]},{\"id\":\"diagonal\",\"group\":\"Setting out\",\"title\":\"Square a rectangular set-out\",\"formula\":\"Target = \u221a(L\u00b2 + W\u00b2); difference = |diagonal 1 \u2212 diagonal 2|.\",\"intro\":[\"Find the target diagonal and compare two measured diagonals.\"],\"notes\":\"Equal diagonals alone do not prove every side or corner is correct. Check side lengths, right angles, datum and position as well.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Length\",\"unit\":\"m\",\"example\":4,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Width\",\"unit\":\"m\",\"example\":3,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Measured diagonal 1\",\"unit\":\"m\",\"example\":5,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Measured diagonal 2\",\"unit\":\"m\",\"example\":5.01,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Target diagonal\",\"unit\":\"m\"},{\"label\":\"Measured difference\",\"unit\":\"mm\"},{\"label\":\"Diagonal 1 error\",\"unit\":\"mm\"},{\"label\":\"Diagonal 2 error\",\"unit\":\"mm\"}],\"expected\":[5,10,0,10]},{\"id\":\"square\",\"group\":\"Setting out\",\"title\":\"3\u20134\u20135 setting-out triangle\",\"formula\":\"Sides = 3k, 4k and 5k.\",\"intro\":[\"Scale a right-angle check to a useful site size.\"],\"notes\":\"Measure from the same corner and use the same units. Larger triangles usually reduce the effect of small reading errors.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Scale k\",\"unit\":\"m\",\"example\":1,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"First leg\",\"unit\":\"m\"},{\"label\":\"Second leg\",\"unit\":\"m\"},{\"label\":\"Diagonal\",\"unit\":\"m\"}],\"expected\":[3,4,5]},{\"id\":\"slope\",\"group\":\"Geometry\",\"title\":\"Rise, run, slope & rake\",\"formula\":\"Length = \u221a(run\u00b2 + rise\u00b2); angle = atan(rise\/run); gradient = rise\/run \u00d7 100; 1:n = run\/rise.\",\"intro\":[\"Calculate a rake or fall from horizontal run and vertical rise.\"],\"notes\":\"Rise may be negative to represent a fall. Zero rise is level; a 1:n ratio is then not applicable.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Horizontal run\",\"unit\":\"m\",\"example\":4,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Vertical rise \/ fall\",\"unit\":\"m\",\"example\":1,\"integer\":false,\"min\":-10000,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Sloping length\",\"unit\":\"m\"},{\"label\":\"Angle\",\"unit\":\"degrees\"},{\"label\":\"Gradient\",\"unit\":\"%\"},{\"label\":\"1:n denominator (signed; 0 = level)\",\"unit\":\"\"}],\"expected\":[4.123105625617661,14.036243467926479,25,4]},{\"id\":\"fall\",\"group\":\"Setting out\",\"title\":\"Fall from a 1:n gradient\",\"formula\":\"Fall = horizontal run \/ n; end level = start level \u2212 fall.\",\"intro\":[\"Calculate a vertical fall from a specified horizontal distance and gradient.\"],\"notes\":\"Use the fall specified for the particular detail. No universal paving, DPC or drainage fall is assumed.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Run\",\"unit\":\"m\",\"example\":5,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Gradient denominator n\",\"unit\":\"\",\"example\":80,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Start level\",\"unit\":\"m\",\"example\":10,\"integer\":false,\"min\":-10000,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Fall\",\"unit\":\"mm\"},{\"label\":\"End level\",\"unit\":\"m\"}],\"expected\":[62.5,9.9375]},{\"id\":\"level\",\"group\":\"Setting out\",\"title\":\"Level-book calculation\",\"formula\":\"Height of instrument = known RL + backsight; new RL = HI \u2212 foresight.\",\"intro\":[\"Use a known reduced level and staff readings to find a new reduced level.\"],\"notes\":\"All readings must relate to the same instrument setup. Complete closing checks and record change points separately.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Known RL\",\"unit\":\"m\",\"example\":100,\"integer\":false,\"min\":-10000,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Backsight\",\"unit\":\"m\",\"example\":1.2,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Foresight\",\"unit\":\"m\",\"example\":1.8,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Height of instrument\",\"unit\":\"m\"},{\"label\":\"New RL\",\"unit\":\"m\"}],\"expected\":[101.2,99.4]},{\"id\":\"scale\",\"group\":\"Setting out\",\"title\":\"Drawing scale\",\"formula\":\"Real mm = drawing mm \u00d7 n; drawing mm = real mm \/ n.\",\"intro\":[\"Convert a measured drawing length at a stated 1:n scale.\"],\"notes\":\"Prefer written dimensions. Check the print calibration; screen zoom and resized prints change the effective scale.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Drawing length\",\"unit\":\"mm\",\"example\":40,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Scale denominator n\",\"unit\":\"\",\"example\":50,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Real length for reverse calculation\",\"unit\":\"mm\",\"example\":2000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Real length\",\"unit\":\"mm\"},{\"label\":\"Real length\",\"unit\":\"m\"},{\"label\":\"Reverse drawing length\",\"unit\":\"mm\"}],\"expected\":[2000,2,40]},{\"id\":\"mass\",\"group\":\"Site maths\",\"title\":\"Material mass & self-weight\",\"formula\":\"Mass = volume \u00d7 density; force = mass \u00d7 9.81 \/ 1000.\",\"intro\":[\"Calculate mass and gravity load from a known volume and bulk density.\"],\"notes\":\"Use the correct dry\/wet bulk density. This does not check floors, scaffolds, lifting operations or structural capacity.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Volume\",\"unit\":\"m\u00b3\",\"example\":1,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Bulk density\",\"unit\":\"kg\/m\u00b3\",\"example\":1800,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Mass\",\"unit\":\"kg\"},{\"label\":\"Mass\",\"unit\":\"tonnes\"},{\"label\":\"Self-weight\",\"unit\":\"kN\"}],\"expected\":[1800,1.8,17.658]},{\"id\":\"packs\",\"group\":\"Site maths\",\"title\":\"Packs, units & waste\",\"formula\":\"Target = ceil(net \u00d7 (1+w\/100)); packs = ceil(target \/ pack size).\",\"intro\":[\"Convert a net quantity to whole supplier packs.\"],\"notes\":\"Rounding to packs happens after waste allowance. Pack size is supplier-specific.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Net units\",\"unit\":\"\",\"example\":1000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":5,\"integer\":false,\"min\":0,\"max\":100},{\"key\":\"f2\",\"label\":\"Units per pack\",\"unit\":\"\",\"example\":500,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Target units\",\"unit\":\"\"},{\"label\":\"Whole packs\",\"unit\":\"\"},{\"label\":\"Units supplied\",\"unit\":\"\"},{\"label\":\"Surplus above target\",\"unit\":\"\"}],\"expected\":[1050,3,1500,450]},{\"id\":\"cost\",\"group\":\"Site maths\",\"title\":\"Job estimate & VAT\",\"formula\":\"Base = quantity \u00d7 unit cost + days \u00d7 day rate + other costs; net quote = base\u00d7(1+markup\/100); gross = net\u00d7(1+VAT\/100).\",\"intro\":[\"Combine material and labour costs, add markup, then the entered VAT rate.\"],\"notes\":\"Markup is not margin. Enter the VAT treatment applicable to the work; the calculator does not decide tax eligibility. Costs are estimates in GBP.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Quantity\",\"unit\":\"\",\"example\":1000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Unit price\",\"unit\":\"\u00a3\",\"example\":0.8,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Labour days\",\"unit\":\"\",\"example\":5,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Day rate\",\"unit\":\"\u00a3\",\"example\":220,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Other costs\",\"unit\":\"\u00a3\",\"example\":100,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f5\",\"label\":\"Markup\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":1000},{\"key\":\"f6\",\"label\":\"VAT\",\"unit\":\"%\",\"example\":20,\"integer\":false,\"min\":0,\"max\":100}],\"outs\":[{\"label\":\"Base cost\",\"unit\":\"\u00a3\"},{\"label\":\"Quote ex VAT\",\"unit\":\"\u00a3\"},{\"label\":\"VAT\",\"unit\":\"\u00a3\"},{\"label\":\"Quote inc VAT\",\"unit\":\"\u00a3\"}],\"expected\":[2000,2200,440,2640]},{\"id\":\"time\",\"group\":\"Site maths\",\"title\":\"Labour duration\",\"formula\":\"Worker-days = units \/ rate per person-day; team-days = worker-days \/ people.\",\"intro\":[\"Estimate working time using a realistic team rate.\"],\"notes\":\"Fractional days are retained. Access, complexity, curing, weather and preparation affect production. This is not a promised programme.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Items \/ work units\",\"unit\":\"\",\"example\":120,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Work units per person-day\",\"unit\":\"\",\"example\":40,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"People\",\"unit\":\"\",\"example\":2,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Worker-days\",\"unit\":\"\"},{\"label\":\"Team working days\",\"unit\":\"\"}],\"expected\":[3,1.5]},{\"id\":\"convert\",\"group\":\"Site maths\",\"title\":\"Length, area & volume conversions\",\"formula\":\"mm\u2192m \u00f71000; mm\u00b2\u2192m\u00b2 \u00f71,000,000; litres\u2192m\u00b3 \u00f71000; inches\u2192mm \u00d725.4.\",\"intro\":[\"Convert common metric site measurements without mixing dimensional powers.\"],\"notes\":\"Linear, area and volume conversions use different scale factors.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Length\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Area\",\"unit\":\"mm\u00b2\",\"example\":1000000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Volume\",\"unit\":\"litres\",\"example\":1000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Length\",\"unit\":\"inches\",\"example\":9,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Length\",\"unit\":\"m\"},{\"label\":\"Area\",\"unit\":\"m\u00b2\"},{\"label\":\"Volume\",\"unit\":\"m\u00b3\"},{\"label\":\"Inches as mm\",\"unit\":\"\"}],\"expected\":[1,1,1,228.6]},{\"id\":\"timber\",\"group\":\"Materials\",\"title\":\"Timber volume & linear metres\",\"formula\":\"Total length = pieces \u00d7 length; volume = total length \u00d7 width \u00d7 thickness \/ 1,000,000.\",\"intro\":[\"Calculate a batch of rectangular timber using actual finished section sizes.\"],\"notes\":\"Lengths in metres, section in mm. Use finished dimensions for installed volume; ordered rough sizes may differ.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Pieces\",\"unit\":\"\",\"example\":10,\"integer\":true,\"min\":1,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Length per piece\",\"unit\":\"m\",\"example\":4.8,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Width\",\"unit\":\"mm\",\"example\":145,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Thickness\",\"unit\":\"mm\",\"example\":47,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Total length\",\"unit\":\"m\"},{\"label\":\"Volume\",\"unit\":\"m\u00b3\"}],\"expected\":[48,0.32712]},{\"id\":\"boardfeet\",\"group\":\"Materials\",\"title\":\"Board feet to metric volume\",\"formula\":\"Board feet = thickness(in) \u00d7 width(in) \u00d7 length(ft) \u00d7 count \/ 12; m\u00b3 = board feet \u00d7 0.002359737216.\",\"intro\":[\"Convert a timber tally from inches and feet to board feet and cubic metres.\"],\"notes\":\"Board feet is a volume tally, not a linear length. Use the supplier\u2019s nominal\/actual tally convention.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Thickness\",\"unit\":\"inches\",\"example\":1,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Width\",\"unit\":\"inches\",\"example\":12,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Length\",\"unit\":\"feet\",\"example\":10,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Count\",\"unit\":\"\",\"example\":1,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Board feet\",\"unit\":\"\"},{\"label\":\"Volume\",\"unit\":\"m\u00b3\"}],\"expected\":[10,0.02359737216]},{\"id\":\"round\",\"group\":\"Materials\",\"title\":\"Round timber volume\",\"formula\":\"Volume (m\u00b3) = \u03c0 \u00d7 (diameter in mm \/ 1000)\u00b2 \/ 4 \u00d7 length in m \u00d7 count.\",\"intro\":[\"Calculate a constant-diameter cylindrical piece.\"],\"notes\":\"Diameter is in mm; length in metres. Not suitable for tapered logs or merchant grading\/tally rules.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Diameter\",\"unit\":\"mm\",\"example\":200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Length\",\"unit\":\"m\",\"example\":3,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Count\",\"unit\":\"\",\"example\":2,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Volume\",\"unit\":\"m\u00b3\"}],\"expected\":[0.1884955592153876]},{\"id\":\"sheets\",\"group\":\"Materials\",\"title\":\"Sheet material area estimate\",\"formula\":\"Sheets = ceil(net area \u00d7 (1+waste\/100) \/ sheet area).\",\"intro\":[\"Estimate whole sheets from net area, sheet size and waste.\"],\"notes\":\"Area estimate only. Does not optimise cuts, orient grain or allow for support\/joint layout. Use the separate layout calculator for a uniform grid.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Net area\",\"unit\":\"m\u00b2\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Sheet length\",\"unit\":\"mm\",\"example\":2400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Sheet width\",\"unit\":\"mm\",\"example\":1200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100}],\"outs\":[{\"label\":\"Sheet area\",\"unit\":\"m\u00b2\"},{\"label\":\"Whole sheets\",\"unit\":\"\"},{\"label\":\"Purchased area\",\"unit\":\"m\u00b2\"}],\"expected\":[2.88,8,23.04],\"limits\":\"Sheet area estimates do not optimise cuts; the two-orientation grid conservatively counts rectangular cells without offcut reuse.\"},{\"id\":\"sheetgrid\",\"group\":\"Materials\",\"title\":\"Sheet layout: two orientations\",\"formula\":\"Grid A = ceil(room L \/ sheet L) \u00d7 ceil(room W \/ sheet W); grid B swaps sheet axes.\",\"intro\":[\"Compare two simple rectangular sheet grids without reusing offcuts.\"],\"notes\":\"All inputs in mm. Reports whole-sheet cells, not an optimised cutting plan. Board orientation, staggered joints, support and expansion may dictate a different layout.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Room length\",\"unit\":\"mm\",\"example\":5000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Room width\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Sheet length\",\"unit\":\"mm\",\"example\":2400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Sheet width\",\"unit\":\"mm\",\"example\":1200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Grid A sheets\",\"unit\":\"\"},{\"label\":\"Grid B sheets\",\"unit\":\"\"},{\"label\":\"Smaller grid count\",\"unit\":\"\"}],\"expected\":[9,10,9],\"limits\":\"Sheet area estimates do not optimise cuts; the two-orientation grid conservatively counts rectangular cells without offcut reuse.\"},{\"id\":\"floor\",\"group\":\"Materials\",\"title\":\"Flooring packs\",\"formula\":\"Order area = net area \u00d7 (1+waste\/100); packs = ceil(order area \/ coverage).\",\"intro\":[\"Estimate flooring packs from net area and declared pack coverage.\"],\"notes\":\"Use product coverage, pattern-specific waste and manufacturer expansion requirements. Does not establish a laying layout.\",\"sources\":[{\"title\":\"EGGER product guidance \/ arithmetic\",\"url\":\"https:\/\/www.egger.com\/en\/support\/e-learning\/flooring-installation\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Net area\",\"unit\":\"m\u00b2\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100},{\"key\":\"f2\",\"label\":\"Pack coverage\",\"unit\":\"m\u00b2\",\"example\":2.2,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Order area\",\"unit\":\"m\u00b2\"},{\"label\":\"Whole packs\",\"unit\":\"\"},{\"label\":\"Coverage supplied\",\"unit\":\"m\u00b2\"}],\"expected\":[22,10,22],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"rows\",\"group\":\"Materials\",\"title\":\"Floorboard rows & balanced edges\",\"formula\":\"Usable width = room \u2212 2\u00d7gap; rows = ceil(usable \/ cover); equal edge widths = [usable \u2212 (rows\u22122)\u00d7cover] \/ 2.\",\"intro\":[\"Set out equal first and last rows across a room.\"],\"notes\":\"Cover width excludes the tongue. For one row the full usable width is reported. Confirm product minimum rip width and support. Expansion gap is a specified input.\",\"sources\":[{\"title\":\"EGGER expansion guidance \/ geometry\",\"url\":\"https:\/\/www.egger.com\/en\/support\/e-learning\/flooring-installation\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Room width\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Effective board cover\",\"unit\":\"mm\",\"example\":150,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Specified gap at each wall\",\"unit\":\"mm\",\"example\":10,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Usable width\",\"unit\":\"mm\"},{\"label\":\"Row count\",\"unit\":\"\"},{\"label\":\"Equal edge-row width\",\"unit\":\"mm\"}],\"expected\":[2980,20,140],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"deck\",\"group\":\"Materials\",\"title\":\"Deck board rows & equal gaps\",\"formula\":\"Clear span = overall width \u2212 2\u00d7edge gap; count = ceil[(clear span + max gap)\/(board width + max gap)]; actual gap = (clear span \u2212 count\u00d7board width)\/(count\u22121).\",\"intro\":[\"Find the minimum board count with gaps not exceeding the chosen maximum.\"],\"notes\":\"All boards assumed full width. Rejects a negative gap: rip an edge board or revise the layout. Use the supplier\u2019s moisture-dependent gap and fixing details.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Overall width\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Board width\",\"unit\":\"mm\",\"example\":140,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Maximum gap\",\"unit\":\"mm\",\"example\":6,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Edge gap each side\",\"unit\":\"mm\",\"example\":5,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Full-width boards\",\"unit\":\"\"},{\"label\":\"Equal internal gap\",\"unit\":\"mm\"}],\"expected\":[21,2.5],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"cladding\",\"group\":\"Materials\",\"title\":\"Cladding cover & linear metres\",\"formula\":\"Linear metres = area \/ (exposed cover\/1000); order length = linear metres \u00d7 (1+waste\/100).\",\"intro\":[\"Estimate cladding length from exposed face coverage.\"],\"notes\":\"Use exposed coverage after overlaps, not overall board width. Allow separately for corners, profiles and stock-length cutting.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Area\",\"unit\":\"m\u00b2\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Exposed cover width\",\"unit\":\"mm\",\"example\":125,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100}],\"outs\":[{\"label\":\"Net linear metres\",\"unit\":\"\"},{\"label\":\"Order linear metres\",\"unit\":\"\"}],\"expected\":[160,176]},{\"id\":\"studs\",\"group\":\"Framing\",\"title\":\"Stud \/ joist centre spacing\",\"formula\":\"Bays = ceil(centre-line span \/ maximum centres); members = bays+1; actual centres = span\/bays.\",\"intro\":[\"Distribute equal bays between two end-member centre lines.\"],\"notes\":\"Span is between end centres, not the outside frame size. Extra corner studs, trimmers, lintels and openings are separate. This does not choose a structural spacing.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"End-centre span\",\"unit\":\"mm\",\"example\":3600,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Maximum specified centres\",\"unit\":\"mm\",\"example\":400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Bays\",\"unit\":\"\"},{\"label\":\"Members\",\"unit\":\"\"},{\"label\":\"Equal centres\",\"unit\":\"mm\"}],\"expected\":[9,10,400]},{\"id\":\"noggins\",\"group\":\"Framing\",\"title\":\"Noggins between uniform members\",\"formula\":\"Clear length = centres \u2212 member thickness; count = bays \u00d7 rows; total length = count \u00d7 clear length.\",\"intro\":[\"Calculate one noggin per bay per row between equal-thickness members.\"],\"notes\":\"Includes no trimming waste, stagger offsets or end rebates. Check the actual gap before cutting.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Centres\",\"unit\":\"mm\",\"example\":400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Member thickness\",\"unit\":\"mm\",\"example\":47,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Bays\",\"unit\":\"\",\"example\":9,\"integer\":true,\"min\":1,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Rows\",\"unit\":\"\",\"example\":2,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Noggin cut length\",\"unit\":\"mm\"},{\"label\":\"Noggin count\",\"unit\":\"\"},{\"label\":\"Total cut length\",\"unit\":\"m\"}],\"expected\":[353,18,6.354]},{\"id\":\"studlength\",\"group\":\"Framing\",\"title\":\"Stud length between plates\",\"formula\":\"Stud = overall height \u2212 bottom plate thickness \u2212 total top-plate thickness.\",\"intro\":[\"Deduct bottom and top plate stacks from an overall frame height.\"],\"notes\":\"All values in mm. Allow for head clearance or deflection details separately where specified.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Overall height\",\"unit\":\"mm\",\"example\":2400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Bottom plate thickness\",\"unit\":\"mm\",\"example\":47,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Top-plate stack thickness\",\"unit\":\"mm\",\"example\":94,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Stud length\",\"unit\":\"mm\"}],\"expected\":[2259]},{\"id\":\"spacing\",\"group\":\"Setting out\",\"title\":\"Equal centres along a member\",\"formula\":\"Pitch = (length \u2212 2\u00d7margin)\/(points\u22121); first = margin; last = length\u2212margin.\",\"intro\":[\"Find positions with equal end margins and a chosen number of points.\"],\"notes\":\"Point positions, not clear gaps. For fixing layouts use the approved edge distances and maximum spacing.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Length\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"End margin\",\"unit\":\"mm\",\"example\":50,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Points\",\"unit\":\"\",\"example\":6,\"integer\":true,\"min\":2,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Pitch\",\"unit\":\"mm\"},{\"label\":\"First position\",\"unit\":\"mm\"},{\"label\":\"Last position\",\"unit\":\"mm\"}],\"expected\":[180,50,950]},{\"id\":\"gaps\",\"group\":\"Setting out\",\"title\":\"Equal clear gaps \/ balusters\",\"formula\":\"Gap = (clear opening \u2212 count\u00d7width)\/(count+1); pitch = width+gap.\",\"intro\":[\"Fit full-width members with equal clear gaps at both ends and between.\"],\"notes\":\"Geometric spacing only. Does not check guarding strength, climbability or regulatory opening limits; use the project specification.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Clear opening\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Member width\",\"unit\":\"mm\",\"example\":40,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Member count\",\"unit\":\"\",\"example\":8,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Equal clear gap\",\"unit\":\"mm\"},{\"label\":\"Centre pitch\",\"unit\":\"mm\"}],\"expected\":[75.55555555555556,115.55555555555556]},{\"id\":\"balustercount\",\"group\":\"Setting out\",\"title\":\"Count for a maximum clear gap\",\"formula\":\"Count = ceil[(opening \u2212 max gap)\/(member width + max gap)]; actual gap = (opening \u2212 count\u00d7width)\/(count+1).\",\"intro\":[\"Choose a whole member count so equal end and internal gaps do not exceed a specified limit.\"],\"notes\":\"Maximum gap is supplied by the design. A gap calculation is not a guarding compliance check. Uses at least one member.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Clear opening\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Member width\",\"unit\":\"mm\",\"example\":40,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Specified maximum gap\",\"unit\":\"mm\",\"example\":95,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Members\",\"unit\":\"\"},{\"label\":\"Equal clear gap\",\"unit\":\"mm\"}],\"expected\":[7,90]},{\"id\":\"cut\",\"group\":\"Cutting & joints\",\"title\":\"Identical cuts from stock\",\"formula\":\"Usable = stock \u2212 end trims; pieces per stock = floor[usable\/(piece length + kerf)]; stock count = ceil(pieces required \/ pieces per stock).\",\"intro\":[\"Plan equal-length pieces with an explicit saw-cut count convention.\"],\"notes\":\"This calculator reserves one cut per piece, including the final separating cut. End trims are total length lost including their kerfs. It is conservative when an exact-fit end piece needs no separating cut.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Stock length\",\"unit\":\"mm\",\"example\":4800,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Finished piece length\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Saw kerf\",\"unit\":\"mm\",\"example\":3,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Total end trim loss\",\"unit\":\"mm\",\"example\":20,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Pieces required\",\"unit\":\"\",\"example\":12,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Pieces per stock\",\"unit\":\"\"},{\"label\":\"Whole stock lengths\",\"unit\":\"\"},{\"label\":\"Remainder per full stock\",\"unit\":\"mm\"}],\"expected\":[4,3,768],\"limits\":\"The equal-piece stock tool reserves one separating kerf per piece and includes end-trim losses explicitly. It is not a mixed-length optimiser.\"},{\"id\":\"skirting\",\"group\":\"Second fix\",\"title\":\"Skirting \/ perimeter trim\",\"formula\":\"Net = 2(L+W) \u2212 deductions + returns; order = net\u00d7(1+waste\/100).\",\"intro\":[\"Calculate linear trim from a rectangular room after deductions and returns.\"],\"notes\":\"Deductions and returns are total lengths in metres. Stock count is an aggregate allowance, not a cut plan; check each wall run and joint locations.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Room length\",\"unit\":\"m\",\"example\":5,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Room width\",\"unit\":\"m\",\"example\":4,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Deductions\",\"unit\":\"m\",\"example\":0.9,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Additional returns\",\"unit\":\"m\",\"example\":0.2,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100},{\"key\":\"f5\",\"label\":\"Stock length\",\"unit\":\"m\",\"example\":4.2,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Net trim\",\"unit\":\"m\"},{\"label\":\"Order length\",\"unit\":\"m\"},{\"label\":\"Aggregate stock allowance\",\"unit\":\"\"}],\"expected\":[17.3,19.03,5],\"limits\":\"Skirting stock allowances do not guarantee every run can be cut from those stock lengths.\"},{\"id\":\"architrave\",\"group\":\"Second fix\",\"title\":\"Architrave: three-sided long points\",\"formula\":\"Leg long point = opening height + reveal + trim width; head long point = opening width + 2\u00d7(reveal+trim width).\",\"intro\":[\"Calculate two legs and a head for a square, mitred frame with equal-width architrave.\"],\"notes\":\"Measured from floor\/base to opening head and across opening. Assumes 45\u00b0 mitres, equal trim width and square frame. Scribed or unequal-width details need their own layout.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Opening width\",\"unit\":\"mm\",\"example\":838,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Opening height\",\"unit\":\"mm\",\"example\":1981,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Reveal\",\"unit\":\"mm\",\"example\":5,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Trim face width\",\"unit\":\"mm\",\"example\":70,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Sides to trim\",\"unit\":\"\",\"example\":2,\"integer\":true,\"min\":1,\"max\":2}],\"outs\":[{\"label\":\"Leg long-point length\",\"unit\":\"mm\"},{\"label\":\"Head long-point length\",\"unit\":\"mm\"},{\"label\":\"Total cut length\",\"unit\":\"m\"}],\"expected\":[2056,988,10.2]},{\"id\":\"door\",\"group\":\"Second fix\",\"title\":\"Door leaf clearance arithmetic\",\"formula\":\"Leaf width = opening width \u2212 left gap \u2212 right gap; leaf height = opening height \u2212 top gap \u2212 bottom gap.\",\"intro\":[\"Deduct specified operating clearances from a measured lining opening.\"],\"notes\":\"Does not authorise trimming. Fire, smoke, security and acoustic doorsets require their certified instructions, gap limits and permitted trimming.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Opening width\",\"unit\":\"mm\",\"example\":838,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Opening height\",\"unit\":\"mm\",\"example\":1981,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Left gap\",\"unit\":\"mm\",\"example\":3,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Right gap\",\"unit\":\"mm\",\"example\":3,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Top gap\",\"unit\":\"mm\",\"example\":3,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f5\",\"label\":\"Bottom gap\",\"unit\":\"mm\",\"example\":8,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Calculated leaf width\",\"unit\":\"mm\"},{\"label\":\"Calculated leaf height\",\"unit\":\"mm\"}],\"expected\":[832,1970],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"lining\",\"group\":\"Second fix\",\"title\":\"Lining outer size\",\"formula\":\"Outside width = clear width + 2\u00d7jamb thickness; outside height = clear height + head thickness; rough size adds fitting gaps.\",\"intro\":[\"Calculate the outside frame size and rough-opening allowance.\"],\"notes\":\"Three-sided lining, no threshold. Jamb length and head joint details are not inferred from outside dimensions.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Clear width\",\"unit\":\"mm\",\"example\":838,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Clear height\",\"unit\":\"mm\",\"example\":1981,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Jamb \/ head thickness\",\"unit\":\"mm\",\"example\":32,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Fitting gap at each side\",\"unit\":\"mm\",\"example\":10,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Fitting gap above\",\"unit\":\"mm\",\"example\":10,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Outside width\",\"unit\":\"mm\"},{\"label\":\"Outside height\",\"unit\":\"mm\"},{\"label\":\"Rough opening width\",\"unit\":\"mm\"},{\"label\":\"Rough opening height\",\"unit\":\"mm\"}],\"expected\":[902,2013,922,2023]},{\"id\":\"panel\",\"group\":\"Bench joinery\",\"title\":\"Panel in a grooved frame\",\"formula\":\"Panel width = clear opening + 2\u00d7groove depth \u2212 total width clearance; likewise height.\",\"intro\":[\"Add groove engagement and deduct the specified total movement clearance.\"],\"notes\":\"Clearance is total across each dimension, not per edge, and must be less than twice the groove depth. Assumes a centred panel with positive engagement in all four grooves; the design may require more engagement.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Clear opening width\",\"unit\":\"mm\",\"example\":500,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Clear opening height\",\"unit\":\"mm\",\"example\":700,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Groove depth\",\"unit\":\"mm\",\"example\":10,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Total width clearance\",\"unit\":\"mm\",\"example\":4,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Total height clearance\",\"unit\":\"mm\",\"example\":4,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Panel width\",\"unit\":\"mm\"},{\"label\":\"Panel height\",\"unit\":\"mm\"}],\"expected\":[516,716]},{\"id\":\"drawer\",\"group\":\"Bench joinery\",\"title\":\"Drawer box between slides\",\"formula\":\"Outside box = opening \u2212 left slide allowance \u2212 right slide allowance; between-side piece = outside box \u2212 2\u00d7side thickness.\",\"intro\":[\"Calculate box width and a front\/back piece fitted between equal sides.\"],\"notes\":\"Use the slide manufacturer\u2019s required clearance, tolerances and drawer system. Does not size drawer depth or inset\/overlay fronts.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Cabinet opening\",\"unit\":\"mm\",\"example\":600,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Left slide allowance\",\"unit\":\"mm\",\"example\":12.7,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Right slide allowance\",\"unit\":\"mm\",\"example\":12.7,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Side thickness\",\"unit\":\"mm\",\"example\":18,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Outside box width\",\"unit\":\"mm\"},{\"label\":\"Between-side front\/back length\",\"unit\":\"mm\"}],\"expected\":[574.6,538.6],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"mitre\",\"group\":\"Cutting & joints\",\"title\":\"Equal flat mitres at a corner\",\"formula\":\"Cut line to long edge = included angle \/ 2; saw setting from square = 90\u00b0 \u2212 included angle \/ 2.\",\"intro\":[\"Find equal mitre saw settings for two coplanar pieces at a measured included angle.\"],\"notes\":\"Angle is the smaller included angle between the two finished runs (0\u2013180\u00b0). Both pieces have equal width. Saw handedness and waste side depend on the joint; test on scrap.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Included corner angle\",\"unit\":\"degrees\",\"example\":90,\"integer\":false,\"min\":0.001,\"max\":179.999}],\"outs\":[{\"label\":\"Cut line to long edge\",\"unit\":\"degrees\"},{\"label\":\"Saw setting from square\",\"unit\":\"degrees\"}],\"expected\":[45,45],\"limits\":\"Simple mitre settings are from square, not from the long edge.\"},{\"id\":\"polygon\",\"group\":\"Cutting & joints\",\"title\":\"Regular polygon mitres\",\"formula\":\"Interior = 180 \u2212 360\/n; saw setting from square = 180\/n.\",\"intro\":[\"Calculate equal mitres for a flat regular polygon frame.\"],\"notes\":\"Equal sides and coplanar members. This is not a compound bevel for sloping-sided boxes.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Number of sides\",\"unit\":\"\",\"example\":6,\"integer\":true,\"min\":3,\"max\":1000}],\"outs\":[{\"label\":\"Interior angle\",\"unit\":\"degrees\"},{\"label\":\"Mitre from square\",\"unit\":\"degrees\"}],\"expected\":[120,30]},{\"id\":\"crown\",\"group\":\"Cutting & joints\",\"title\":\"Coving \/ crown compound angles\",\"formula\":\"Mitre = atan[sin(spring)\/tan(corner\/2)]; bevel = asin[cos(spring)\u00d7cos(corner\/2)].\",\"intro\":[\"Calculate magnitude of compound settings for crown cut flat.\"],\"notes\":\"Spring is the installed angle between the back of the moulding and the wall, not ceiling. Angles are magnitudes only. Left\/right, inside\/outside and fence orientation follow the saw\/moulding instructions. Test cuts are essential; this is not a universal profile cut list.\",\"sources\":[{\"title\":\"DeWalt crown-cutting reference \/ trigonometry\",\"url\":\"https:\/\/www.dewalt.ca\/en-ca\/resources\/highlights-news\/featured-articles\/how-to-cut-crown-molding\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Spring angle to wall\",\"unit\":\"degrees\",\"example\":38,\"integer\":false,\"min\":0.001,\"max\":89.999},{\"key\":\"f1\",\"label\":\"Included corner angle\",\"unit\":\"degrees\",\"example\":90,\"integer\":false,\"min\":0.001,\"max\":179.999}],\"outs\":[{\"label\":\"Mitre magnitude\",\"unit\":\"degrees\"},{\"label\":\"Bevel magnitude\",\"unit\":\"degrees\"}],\"expected\":[31.619006537464564,33.86291398096766],\"limits\":\"Crown angles are magnitudes for material cut flat, with spring measured to the wall.\"},{\"id\":\"mitrepoints\",\"group\":\"Cutting & joints\",\"title\":\"Mitre long point \/ short point\",\"formula\":\"Each end difference = face width \u00d7 tan(saw angle from square); long = short + 2\u00d7difference.\",\"intro\":[\"Convert between edge lengths for matching mitres at both ends.\"],\"notes\":\"Both ends slope outward to the same long edge. Saw angle is from square, not the included corner angle.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Short-edge length\",\"unit\":\"mm\",\"example\":500,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Face width\",\"unit\":\"mm\",\"example\":70,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Mitre from square\",\"unit\":\"degrees\",\"example\":45,\"integer\":false,\"min\":0,\"max\":89}],\"outs\":[{\"label\":\"Difference per end\",\"unit\":\"mm\"},{\"label\":\"Long-edge length\",\"unit\":\"mm\"}],\"expected\":[70,640]},{\"id\":\"lapjoint\",\"group\":\"Cutting & joints\",\"title\":\"Equal half-lap depth\",\"formula\":\"Recess = thickness\/2; remaining thickness = thickness\/2.\",\"intro\":[\"Calculate the nominal recess depth for equal-thickness members.\"],\"notes\":\"Equal-thickness flush half lap only. Does not verify joint strength, fasteners or suitability for structural members.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Member thickness\",\"unit\":\"mm\",\"example\":44,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Recess depth\",\"unit\":\"mm\"},{\"label\":\"Remaining thickness\",\"unit\":\"mm\"}],\"expected\":[22,22]},{\"id\":\"tenon\",\"group\":\"Bench joinery\",\"title\":\"Centred tenon shoulders\",\"formula\":\"Shoulder = (stock thickness \u2212 tenon thickness)\/2.\",\"intro\":[\"Calculate equal shoulders around a specified central tenon.\"],\"notes\":\"Tenon thickness is chosen from the joint design. Fit allowances, haunches, length and strength are not inferred.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Stock thickness\",\"unit\":\"mm\",\"example\":45,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Specified tenon thickness\",\"unit\":\"mm\",\"example\":15,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Shoulder each face\",\"unit\":\"mm\"}],\"expected\":[15]},{\"id\":\"dovetail\",\"group\":\"Bench joinery\",\"title\":\"Dovetail slope angle\",\"formula\":\"Angle from the reference axis = atan(1\/n).\",\"intro\":[\"Convert a rise-to-run slope of 1:n to an angle.\"],\"notes\":\"This is a marking angle, not a recommendation of slope for a timber species or loading.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Slope denominator n\",\"unit\":\"\",\"example\":6,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Slope angle\",\"unit\":\"degrees\"}],\"expected\":[9.462322208025617]},{\"id\":\"router\",\"group\":\"Bench joinery\",\"title\":\"Router guide-bush offset\",\"formula\":\"Offset = (bush outside diameter \u2212 cutter diameter)\/2.\",\"intro\":[\"Calculate the radial offset between guide bush and cutter.\"],\"notes\":\"Use actual compatible diameters and a concentric bush. Internal and external templates require opposite offsets; check against the drawing.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Bush outside diameter\",\"unit\":\"mm\",\"example\":30,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Cutter diameter\",\"unit\":\"mm\",\"example\":12,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Radial offset\",\"unit\":\"mm\"},{\"label\":\"Two-sided dimension difference\",\"unit\":\"mm\"}],\"expected\":[9,18]},{\"id\":\"taper\",\"group\":\"Cutting & joints\",\"title\":\"Taper marking angle\",\"formula\":\"Offset = wide end \u2212 narrow end; angle = atan(offset\/length).\",\"intro\":[\"Find the edge slope for a one-sided taper.\"],\"notes\":\"One edge remains straight. For a symmetric two-sided taper, use half the width difference on each edge.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Length\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Wide end\",\"unit\":\"mm\",\"example\":100,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Narrow end\",\"unit\":\"mm\",\"example\":50,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"One-sided offset\",\"unit\":\"mm\"},{\"label\":\"One-sided angle\",\"unit\":\"degrees\"},{\"label\":\"Symmetric edge angle\",\"unit\":\"degrees\"}],\"expected\":[50,2.8624052261117474,1.4320961841646465]},{\"id\":\"rafter\",\"group\":\"Roof geometry\",\"title\":\"Common rafter line length\",\"formula\":\"Rise = run\u00d7tan(pitch); line = run\/cos(pitch); tail line = horizontal overhang\/cos(pitch).\",\"intro\":[\"Calculate a common rafter theoretical line from horizontal run and pitch.\"],\"notes\":\"Run is to the ridge centreline or other stated datum. These are theoretical line lengths, not fabrication lengths; ridge deductions, seat cuts, bearings and fascia details are separate.\",\"sources\":[{\"title\":\"Roof geometry \/ designer-controlled details\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Horizontal run\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Roof pitch\",\"unit\":\"degrees\",\"example\":30,\"integer\":false,\"min\":0.001,\"max\":80},{\"key\":\"f2\",\"label\":\"Horizontal overhang\",\"unit\":\"mm\",\"example\":450,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Rise\",\"unit\":\"mm\"},{\"label\":\"Main line length\",\"unit\":\"mm\"},{\"label\":\"Tail line length\",\"unit\":\"mm\"},{\"label\":\"Combined line length\",\"unit\":\"mm\"}],\"expected\":[1732.0508075688772,3464.1016151377544,519.6152422706632,3983.7168574084176],\"limits\":\"Roof lines are theoretical datum-to-datum lengths. They are not fabricated member lengths with ridge, bearing, seat, overhang or fascia details resolved.\"},{\"id\":\"ridge\",\"group\":\"Roof geometry\",\"title\":\"Ridge thickness line deduction\",\"formula\":\"Horizontal deduction = ridge thickness\/2; line deduction = horizontal deduction\/cos(pitch).\",\"intro\":[\"Calculate the geometric deduction for half a vertical ridge thickness.\"],\"notes\":\"Symmetrical roof with a centred vertical ridge board and common rafter. This is not a bearing or joint design.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Ridge thickness\",\"unit\":\"mm\",\"example\":38,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Pitch\",\"unit\":\"degrees\",\"example\":30,\"integer\":false,\"min\":0.001,\"max\":80}],\"outs\":[{\"label\":\"Horizontal deduction\",\"unit\":\"mm\"},{\"label\":\"Rafter line deduction\",\"unit\":\"mm\"}],\"expected\":[19,21.939310229205777],\"limits\":\"Roof lines are theoretical datum-to-datum lengths. They are not fabricated member lengths with ridge, bearing, seat, overhang or fascia details resolved.\"},{\"id\":\"hip\",\"group\":\"Roof geometry\",\"title\":\"Equal-pitch hip \/ valley line\",\"formula\":\"Plan diagonal = common run\u00d7\u221a2; rise = common run\u00d7tan(pitch); diagonal line = \u221a(plan\u00b2+rise\u00b2).\",\"intro\":[\"Calculate the diagonal line at a 90\u00b0 plan intersection of equal-pitch roofs.\"],\"notes\":\"Ideal equal-pitch 90\u00b0 geometry only. No backing, side-cut, ridge or overhang allowances. Unequal pitches need a separate design.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Common horizontal run\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Common roof pitch\",\"unit\":\"degrees\",\"example\":30,\"integer\":false,\"min\":0.001,\"max\":80}],\"outs\":[{\"label\":\"Plan diagonal\",\"unit\":\"mm\"},{\"label\":\"Rise\",\"unit\":\"mm\"},{\"label\":\"Hip\/valley line\",\"unit\":\"mm\"},{\"label\":\"Hip\/valley inclination\",\"unit\":\"degrees\"}],\"expected\":[4242.640687119285,1732.0508075688772,4582.57569495584,22.207654298596484],\"limits\":\"Roof lines are theoretical datum-to-datum lengths. They are not fabricated member lengths with ridge, bearing, seat, overhang or fascia details resolved. Equal-pitch hip and jack tools assume a 90-degree plan corner.\"},{\"id\":\"jack\",\"group\":\"Roof geometry\",\"title\":\"Equal-pitch jack length difference\",\"formula\":\"Line difference = spacing along eaves \/ cos(common pitch).\",\"intro\":[\"Calculate theoretical successive common-jack differences at a 45\u00b0 plan hip.\"],\"notes\":\"Equal pitches and a 90\u00b0 plan corner only. This gives a difference, not the first jack length, side cut, or cutting allowance.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Spacing along eaves\",\"unit\":\"mm\",\"example\":400,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Common pitch\",\"unit\":\"degrees\",\"example\":30,\"integer\":false,\"min\":0.001,\"max\":80}],\"outs\":[{\"label\":\"Theoretical line difference\",\"unit\":\"mm\"}],\"expected\":[461.8802153517006],\"limits\":\"Roof lines are theoretical datum-to-datum lengths. They are not fabricated member lengths with ridge, bearing, seat, overhang or fascia details resolved. Equal-pitch hip and jack tools assume a 90-degree plan corner.\"},{\"id\":\"roofarea\",\"group\":\"Roof geometry\",\"title\":\"Roof covering area from plan\",\"formula\":\"Slope area = horizontal projected area \/ cos(pitch); order = area\u00d7(1+waste\/100).\",\"intro\":[\"Calculate the area of roof planes having one uniform pitch.\"],\"notes\":\"Plan area must include horizontal overhang projections and exclude openings as appropriate. Split unequal pitches into separate calculations. Laps and product coverage are separate.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Horizontal projected area\",\"unit\":\"m\u00b2\",\"example\":60,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Pitch\",\"unit\":\"degrees\",\"example\":30,\"integer\":false,\"min\":0,\"max\":80},{\"key\":\"f2\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100}],\"outs\":[{\"label\":\"Sloping area\",\"unit\":\"m\u00b2\"},{\"label\":\"Order area\",\"unit\":\"m\u00b2\"}],\"expected\":[69.28203230275508,76.2102355330306]},{\"id\":\"firring\",\"group\":\"Roof geometry\",\"title\":\"Firring strip taper\",\"formula\":\"Rise = horizontal length\/n; high thickness = low thickness+rise; taper angle = atan(1\/n).\",\"intro\":[\"Calculate the geometric high end and taper for a specified fall.\"],\"notes\":\"The designer specifies the fall, supports and roof build-up. This does not account for deflection or choose a compliant design fall.\",\"sources\":[{\"title\":\"NHBC roof guidance \/ geometry\",\"url\":\"https:\/\/www.nhbc.co.uk\/nhbcstandards\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Horizontal length\",\"unit\":\"mm\",\"example\":4000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Fall denominator n\",\"unit\":\"\",\"example\":40,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Low-end thickness\",\"unit\":\"mm\",\"example\":20,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Rise\",\"unit\":\"mm\"},{\"label\":\"High-end thickness\",\"unit\":\"mm\"},{\"label\":\"Taper angle\",\"unit\":\"degrees\"}],\"expected\":[100,120,1.4320961841646465]},{\"id\":\"stairs\",\"group\":\"Stair geometry\",\"title\":\"Straight stair: rise, going & pitch\",\"formula\":\"Rise = floor height\/risers; goings = risers\u22121; run = goings\u00d7going; pitch = atan(rise\/going); relationship = 2\u00d7rise+going.\",\"intro\":[\"Calculate a uniform straight flight with the upper floor acting as the last landing.\"],\"notes\":\"Geometry only, not a compliance pass. Landings, headroom, nosings, winders, guarding, accessibility and local national rules must also be checked. One flight, no intermediate landing.\",\"sources\":[{\"title\":\"Approved Document K (England) \/ geometry\",\"url\":\"https:\/\/www.gov.uk\/government\/publications\/protection-from-falling-collision-and-impact-approved-document-k\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Finished floor-to-floor height\",\"unit\":\"mm\",\"example\":2600,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Risers\",\"unit\":\"\",\"example\":13,\"integer\":true,\"min\":2,\"max\":100},{\"key\":\"f2\",\"label\":\"Going\",\"unit\":\"mm\",\"example\":250,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Rise per step\",\"unit\":\"mm\"},{\"label\":\"Number of goings\",\"unit\":\"\"},{\"label\":\"Horizontal run\",\"unit\":\"mm\"},{\"label\":\"Pitch\",\"unit\":\"degrees\"},{\"label\":\"2R + G\",\"unit\":\"mm\"}],\"expected\":[200,12,3000,38.659808254090095,650],\"limits\":\"Stair going is measured horizontally between nosing lines. The straight-flight tool assumes the upper floor forms the last landing, so goings equal risers minus one. Building guidance differs across UK nations. Stair geometry must be checked against the applicable nation, building use and project requirements.\"},{\"id\":\"risers\",\"group\":\"Stair geometry\",\"title\":\"Riser count from a specified maximum\",\"formula\":\"Risers = ceil(total rise\/max rise); actual rise = total rise\/risers.\",\"intro\":[\"Find a whole riser count not exceeding a supplied maximum rise.\"],\"notes\":\"The maximum is a project input, not an automatic legal recommendation. Also check minimum rise, going, pitch and all other stair provisions.\",\"sources\":[{\"title\":\"Approved Document K context \/ arithmetic\",\"url\":\"https:\/\/www.gov.uk\/government\/publications\/protection-from-falling-collision-and-impact-approved-document-k\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Total finished rise\",\"unit\":\"mm\",\"example\":2600,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Specified maximum rise\",\"unit\":\"mm\",\"example\":220,\"integer\":false,\"min\":0.001,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Riser count\",\"unit\":\"\"},{\"label\":\"Actual rise\",\"unit\":\"mm\"}],\"expected\":[12,216.66666666666666],\"limits\":\"Stair going is measured horizontally between nosing lines. Building guidance differs across UK nations. Stair geometry must be checked against the applicable nation, building use and project requirements.\"},{\"id\":\"stairline\",\"group\":\"Stair geometry\",\"title\":\"Stair pitch-line segment\",\"formula\":\"One interval = \u221a(rise\u00b2+going\u00b2); line = intervals\u00d7one interval.\",\"intro\":[\"Calculate a pitch-line segment spanning a known number of identical going intervals.\"],\"notes\":\"Intervals are explicit. This is not a full string blank length; top\/bottom extensions, housings, joints and landings are separate.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Rise per step\",\"unit\":\"mm\",\"example\":200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Going per step\",\"unit\":\"mm\",\"example\":250,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Going intervals\",\"unit\":\"\",\"example\":12,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Single interval\",\"unit\":\"mm\"},{\"label\":\"Pitch-line segment\",\"unit\":\"mm\"}],\"expected\":[320.1562118716424,3841.874542459709],\"limits\":\"Stair going is measured horizontally between nosing lines. The pitch-line segment tool uses an explicit number of going intervals; it does not silently equate a full floor-height diagonal with a string blank. Building guidance differs across UK nations. Stair geometry must be checked against the applicable nation, building use and project requirements.\"},{\"id\":\"tread\",\"group\":\"Stair geometry\",\"title\":\"Tread blank depth\",\"formula\":\"Blank depth = going + nosing projection + rear engagement.\",\"intro\":[\"Add a specified nosing projection and rear engagement to a going.\"],\"notes\":\"Use the actual stair joint and nosing design. Going is the horizontal distance between adjacent nosing lines, not necessarily the timber tread depth.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Going\",\"unit\":\"mm\",\"example\":250,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Nosing projection\",\"unit\":\"mm\",\"example\":25,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Rear engagement\",\"unit\":\"mm\",\"example\":10,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Tread blank depth\",\"unit\":\"mm\"}],\"expected\":[285],\"limits\":\"Stair going is measured horizontally between nosing lines. Building guidance differs across UK nations. Stair geometry must be checked against the applicable nation, building use and project requirements.\"},{\"id\":\"headroom\",\"group\":\"Stair geometry\",\"title\":\"Vertical clearance to a level soffit\",\"formula\":\"Pitch-line height = datum + distance\u00d7rise\/going; clearance = soffit level\u2212pitch-line height.\",\"intro\":[\"Calculate vertical clearance above a straight pitch line at a specified horizontal station.\"],\"notes\":\"All levels share one datum; distance is horizontal from a stated pitch-line point. Geometry only, not a complete headroom or building-regulations check.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Pitch-line datum height\",\"unit\":\"mm\",\"example\":0,\"integer\":false,\"min\":-100000,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Horizontal distance\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Rise\",\"unit\":\"mm\",\"example\":200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Going\",\"unit\":\"mm\",\"example\":250,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Soffit level\",\"unit\":\"mm\",\"example\":3000,\"integer\":false,\"min\":-100000,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Pitch-line level\",\"unit\":\"mm\"},{\"label\":\"Vertical clearance\",\"unit\":\"mm\"}],\"expected\":[800,2200],\"limits\":\"Building guidance differs across UK nations. Stair geometry must be checked against the applicable nation, building use and project requirements.\"},{\"id\":\"moisture\",\"group\":\"Materials\",\"title\":\"Timber movement estimate\",\"formula\":\"Movement = original width \u00d7 coefficient(% dimension per 1 percentage-point MC) \/100 \u00d7 change in MC.\",\"intro\":[\"Estimate across-grain movement using a supplied species\/direction coefficient.\"],\"notes\":\"Linear approximation over a suitable moisture range below fibre saturation. Coefficient depends on species and radial\/tangential direction. Does not predict engineered flooring or replace manufacturer movement gaps.\",\"sources\":[{\"title\":\"Product\/species coefficient required\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Original width\",\"unit\":\"mm\",\"example\":200,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Movement coefficient\",\"unit\":\"%\",\"example\":0.25,\"integer\":false,\"min\":1e-06,\"max\":5},{\"key\":\"f2\",\"label\":\"Initial moisture content\",\"unit\":\"%\",\"example\":12,\"integer\":false,\"min\":0,\"max\":30},{\"key\":\"f3\",\"label\":\"Final moisture content\",\"unit\":\"%\",\"example\":18,\"integer\":false,\"min\":0,\"max\":30}],\"outs\":[{\"label\":\"Signed movement\",\"unit\":\"mm\"},{\"label\":\"Estimated final width\",\"unit\":\"mm\"}],\"expected\":[3,203],\"limits\":\"Timber movement requires the actual species\/direction coefficient and a suitable moisture range; the example coefficient is not universal.\"},{\"id\":\"finish\",\"group\":\"Materials\",\"title\":\"Finish \/ adhesive coverage\",\"formula\":\"Litres = area\u00d7coats \/ coverage; order = litres\u00d7(1+waste\/100).\",\"intro\":[\"Calculate product quantity from area, coat count and declared coverage.\"],\"notes\":\"Coverage is per litre per coat. Use the specific product, substrate and application method; adhesives stated in kg\/m\u00b2 need a different unit conversion.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Area\",\"unit\":\"m\u00b2\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Coats\",\"unit\":\"\",\"example\":2,\"integer\":true,\"min\":1,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Coverage\",\"unit\":\"m\u00b2\/litre\/coat\",\"example\":10,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100}],\"outs\":[{\"label\":\"Net litres\",\"unit\":\"\"},{\"label\":\"Order litres\",\"unit\":\"\"}],\"expected\":[4,4.4],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"fixings\",\"group\":\"Materials\",\"title\":\"Fixing quantity allowance\",\"formula\":\"Count = ceil(members\u00d7fixings per member\u00d7(1+waste\/100)); boxes = ceil(count\/box size).\",\"intro\":[\"Estimate fixings from the specified number per member.\"],\"notes\":\"Does not choose fixing diameter, length, embedment, spacing or corrosion class. Use the approved fastening schedule.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Members\",\"unit\":\"\",\"example\":20,\"integer\":true,\"min\":1,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Fixings per member\",\"unit\":\"\",\"example\":4,\"integer\":true,\"min\":1,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Waste\",\"unit\":\"%\",\"example\":10,\"integer\":false,\"min\":0,\"max\":100},{\"key\":\"f3\",\"label\":\"Fixings per box\",\"unit\":\"\",\"example\":100,\"integer\":true,\"min\":1,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Order fixings\",\"unit\":\"\"},{\"label\":\"Whole boxes\",\"unit\":\"\"}],\"expected\":[88,1],\"limits\":\"Flooring gaps, slide clearances, fire-door gaps, fixing schedules and finishes must follow the design and product instructions.\"},{\"id\":\"shelf\",\"group\":\"Load arithmetic\",\"title\":\"Shelf deflection: simple elastic model\",\"formula\":\"I = b\u00d7h\u00b3\/12; deflection = 5wL\u2074\/(384EI); moment = wL\u00b2\/8; stress = moment\/(b\u00d7h\u00b2\/6).\",\"intro\":[\"Calculate an ideal simply supported rectangular member under a uniform load.\"],\"notes\":\"All lengths mm; w in N\/mm (numerically equal to kN\/m); E in N\/mm\u00b2. Ideal short-term bending only: no creep, shear, support restraint, grading, safety factors or resistance check. Not structural sizing or a safe-span verdict.\",\"sources\":[{\"title\":\"Elementary beam theory \/ WoodWorks example\",\"url\":\"https:\/\/www.woodworks.org\/wp-content\/uploads\/webinar_slides-CLOUSTON-WoodWorksWebinar2019.pdf\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Span L\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Width b\",\"unit\":\"mm\",\"example\":300,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Vertical depth h\",\"unit\":\"mm\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Elastic modulus E\",\"unit\":\"N\/mm\u00b2\",\"example\":10000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Uniform line load w\",\"unit\":\"N\/mm\",\"example\":0.5,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Second moment I\",\"unit\":\"mm\u2074\"},{\"label\":\"Midspan deflection\",\"unit\":\"mm\"},{\"label\":\"Maximum moment\",\"unit\":\"Nmm\"},{\"label\":\"Bending stress\",\"unit\":\"N\/mm\u00b2\"}],\"expected\":[200000,3.2552083333333335,62500,3.125],\"limits\":\"The two beam tools implement ideal short-term linear elastic bending of a simply supported rectangular section. They do not include creep, shear deflection, load combinations, material strength, buckling, service class, duration factors, connection capacity, bearing or actual restraint. They produce no safe\/unsafe verdict and must not be used as structural sizing tools. Beam calculations use the stated ideal supports and loads; they do not select a safe timber size.\"},{\"id\":\"pointload\",\"group\":\"Load arithmetic\",\"title\":\"Central point-load beam arithmetic\",\"formula\":\"I = b\u00d7h\u00b3\/12; deflection = PL\u00b3\/(48EI); moment = PL\/4; reaction at each end = P\/2.\",\"intro\":[\"Calculate the ideal response of a simply supported rectangular member to a central point force.\"],\"notes\":\"P is N, lengths mm, E N\/mm\u00b2. Short-term linear bending model only. No capacity, creep, shear, lateral stability or connection checks. Not a structural design result.\",\"sources\":[{\"title\":\"Geometry \/ arithmetic\"}],\"fields\":[{\"key\":\"f0\",\"label\":\"Span L\",\"unit\":\"mm\",\"example\":1000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f1\",\"label\":\"Width b\",\"unit\":\"mm\",\"example\":300,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f2\",\"label\":\"Vertical depth h\",\"unit\":\"mm\",\"example\":20,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f3\",\"label\":\"Elastic modulus E\",\"unit\":\"N\/mm\u00b2\",\"example\":10000,\"integer\":false,\"min\":0.001,\"max\":1000000000.0},{\"key\":\"f4\",\"label\":\"Central force P\",\"unit\":\"N\",\"example\":500,\"integer\":false,\"min\":0,\"max\":1000000000.0}],\"outs\":[{\"label\":\"Midspan deflection\",\"unit\":\"mm\"},{\"label\":\"Maximum moment\",\"unit\":\"Nmm\"},{\"label\":\"Reaction per support\",\"unit\":\"N\"}],\"expected\":[5.208333333333333,125000,250],\"limits\":\"The two beam tools implement ideal short-term linear elastic bending of a simply supported rectangular section. They do not include creep, shear deflection, load combinations, material strength, buckling, service class, duration factors, connection capacity, bearing or actual restraint. They produce no safe\/unsafe verdict and must not be used as structural sizing tools. Beam calculations use the stated ideal supports and loads; they do not select a safe timber size.\"}];\nconst ITEMS={\"rectangle\":{\"id\":\"rectangle\",\"fields\":[{\"label\":\"Length (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Area (m\u00b2)\",\"Perimeter (m)\"]},\"triangle\":{\"id\":\"triangle\",\"fields\":[{\"label\":\"Base (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Perpendicular height (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Area (m\u00b2)\"]},\"circle\":{\"id\":\"circle\",\"fields\":[{\"label\":\"Diameter (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Area (m\u00b2)\",\"Circumference (m)\"]},\"diagonal\":{\"id\":\"diagonal\",\"fields\":[{\"label\":\"Length (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Measured diagonal 1 (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Measured diagonal 2 (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Target diagonal (m)\",\"Measured difference (mm)\",\"Diagonal 1 error (mm)\",\"Diagonal 2 error (mm)\"]},\"square\":{\"id\":\"square\",\"fields\":[{\"label\":\"Scale k (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"First leg (m)\",\"Second leg (m)\",\"Diagonal (m)\"]},\"slope\":{\"id\":\"slope\",\"fields\":[{\"label\":\"Horizontal run (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Vertical rise \/ fall (m)\",\"min\":-10000,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Sloping length (m)\",\"Angle (degrees)\",\"Gradient (%)\",\"1:n denominator (signed; 0 = level)\"]},\"fall\":{\"id\":\"fall\",\"fields\":[{\"label\":\"Run (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Gradient denominator n\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Start level (m)\",\"min\":-10000,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Fall (mm)\",\"End level (m)\"]},\"level\":{\"id\":\"level\",\"fields\":[{\"label\":\"Known RL (m)\",\"min\":-10000,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Backsight (m)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Foresight (m)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Height of instrument (m)\",\"New RL (m)\"]},\"scale\":{\"id\":\"scale\",\"fields\":[{\"label\":\"Drawing length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Scale denominator n\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Real length for reverse calculation (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Real length (mm)\",\"Real length (m)\",\"Reverse drawing length (mm)\"]},\"mass\":{\"id\":\"mass\",\"fields\":[{\"label\":\"Volume (m\u00b3)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Bulk density (kg\/m\u00b3)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Mass (kg)\",\"Mass (tonnes)\",\"Self-weight (kN)\"]},\"packs\":{\"id\":\"packs\",\"fields\":[{\"label\":\"Net units\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false},{\"label\":\"Units per pack\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Target units\",\"Whole packs\",\"Units supplied\",\"Surplus above target\"]},\"cost\":{\"id\":\"cost\",\"fields\":[{\"label\":\"Quantity\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Unit price (\u00a3)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Labour days\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Day rate (\u00a3)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Other costs (\u00a3)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Markup (%)\",\"min\":0,\"max\":1000,\"integer\":false},{\"label\":\"VAT (%)\",\"min\":0,\"max\":100,\"integer\":false}],\"outputs\":[\"Base cost (\u00a3)\",\"Quote ex VAT (\u00a3)\",\"VAT (\u00a3)\",\"Quote inc VAT (\u00a3)\"]},\"time\":{\"id\":\"time\",\"fields\":[{\"label\":\"Items \/ work units\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Work units per person-day\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"People\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Worker-days\",\"Team working days\"]},\"convert\":{\"id\":\"convert\",\"fields\":[{\"label\":\"Length (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Area (mm\u00b2)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Volume (litres)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Length (inches)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Length (m)\",\"Area (m\u00b2)\",\"Volume (m\u00b3)\",\"Inches as mm\"]},\"timber\":{\"id\":\"timber\",\"fields\":[{\"label\":\"Pieces\",\"min\":1,\"max\":1000000000.0,\"integer\":true},{\"label\":\"Length per piece (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Total length (m)\",\"Volume (m\u00b3)\"]},\"boardfeet\":{\"id\":\"boardfeet\",\"fields\":[{\"label\":\"Thickness (inches)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width (inches)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Length (feet)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Count\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Board feet\",\"Volume (m\u00b3)\"]},\"round\":{\"id\":\"round\",\"fields\":[{\"label\":\"Diameter (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Length (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Count\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Volume (m\u00b3)\"]},\"sheets\":{\"id\":\"sheets\",\"fields\":[{\"label\":\"Net area (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Sheet length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Sheet width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false}],\"outputs\":[\"Sheet area (m\u00b2)\",\"Whole sheets\",\"Purchased area (m\u00b2)\"]},\"sheetgrid\":{\"id\":\"sheetgrid\",\"fields\":[{\"label\":\"Room length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Room width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Sheet length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Sheet width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Grid A sheets\",\"Grid B sheets\",\"Smaller grid count\"]},\"floor\":{\"id\":\"floor\",\"fields\":[{\"label\":\"Net area (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false},{\"label\":\"Pack coverage (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Order area (m\u00b2)\",\"Whole packs\",\"Coverage supplied (m\u00b2)\"]},\"rows\":{\"id\":\"rows\",\"fields\":[{\"label\":\"Room width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Effective board cover (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Specified gap at each wall (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Usable width (mm)\",\"Row count\",\"Equal edge-row width (mm)\"]},\"deck\":{\"id\":\"deck\",\"fields\":[{\"label\":\"Overall width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Board width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Maximum gap (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Edge gap each side (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Full-width boards\",\"Equal internal gap (mm)\"]},\"cladding\":{\"id\":\"cladding\",\"fields\":[{\"label\":\"Area (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Exposed cover width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false}],\"outputs\":[\"Net linear metres\",\"Order linear metres\"]},\"studs\":{\"id\":\"studs\",\"fields\":[{\"label\":\"End-centre span (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Maximum specified centres (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Bays\",\"Members\",\"Equal centres (mm)\"]},\"noggins\":{\"id\":\"noggins\",\"fields\":[{\"label\":\"Centres (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Member thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Bays\",\"min\":1,\"max\":1000000000.0,\"integer\":true},{\"label\":\"Rows\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Noggin cut length (mm)\",\"Noggin count\",\"Total cut length (m)\"]},\"studlength\":{\"id\":\"studlength\",\"fields\":[{\"label\":\"Overall height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Bottom plate thickness (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Top-plate stack thickness (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Stud length (mm)\"]},\"spacing\":{\"id\":\"spacing\",\"fields\":[{\"label\":\"Length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"End margin (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Points\",\"min\":2,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Pitch (mm)\",\"First position (mm)\",\"Last position (mm)\"]},\"gaps\":{\"id\":\"gaps\",\"fields\":[{\"label\":\"Clear opening (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Member width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Member count\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Equal clear gap (mm)\",\"Centre pitch (mm)\"]},\"balustercount\":{\"id\":\"balustercount\",\"fields\":[{\"label\":\"Clear opening (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Member width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Specified maximum gap (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Members\",\"Equal clear gap (mm)\"]},\"cut\":{\"id\":\"cut\",\"fields\":[{\"label\":\"Stock length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Finished piece length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Saw kerf (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Total end trim loss (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Pieces required\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Pieces per stock\",\"Whole stock lengths\",\"Remainder per full stock (mm)\"]},\"skirting\":{\"id\":\"skirting\",\"fields\":[{\"label\":\"Room length (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Room width (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Deductions (m)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Additional returns (m)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false},{\"label\":\"Stock length (m)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Net trim (m)\",\"Order length (m)\",\"Aggregate stock allowance\"]},\"architrave\":{\"id\":\"architrave\",\"fields\":[{\"label\":\"Opening width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Opening height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Reveal (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Trim face width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Sides to trim\",\"min\":1,\"max\":2,\"integer\":true}],\"outputs\":[\"Leg long-point length (mm)\",\"Head long-point length (mm)\",\"Total cut length (m)\"]},\"door\":{\"id\":\"door\",\"fields\":[{\"label\":\"Opening width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Opening height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Left gap (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Right gap (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Top gap (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Bottom gap (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Calculated leaf width (mm)\",\"Calculated leaf height (mm)\"]},\"lining\":{\"id\":\"lining\",\"fields\":[{\"label\":\"Clear width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Clear height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Jamb \/ head thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Fitting gap at each side (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Fitting gap above (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Outside width (mm)\",\"Outside height (mm)\",\"Rough opening width (mm)\",\"Rough opening height (mm)\"]},\"panel\":{\"id\":\"panel\",\"fields\":[{\"label\":\"Clear opening width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Clear opening height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Groove depth (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Total width clearance (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Total height clearance (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Panel width (mm)\",\"Panel height (mm)\"]},\"drawer\":{\"id\":\"drawer\",\"fields\":[{\"label\":\"Cabinet opening (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Left slide allowance (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Right slide allowance (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Side thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Outside box width (mm)\",\"Between-side front\/back length (mm)\"]},\"mitre\":{\"id\":\"mitre\",\"fields\":[{\"label\":\"Included corner angle (degrees)\",\"min\":0.001,\"max\":179.999,\"integer\":false}],\"outputs\":[\"Cut line to long edge (degrees)\",\"Saw setting from square (degrees)\"]},\"polygon\":{\"id\":\"polygon\",\"fields\":[{\"label\":\"Number of sides\",\"min\":3,\"max\":1000,\"integer\":true}],\"outputs\":[\"Interior angle (degrees)\",\"Mitre from square (degrees)\"]},\"crown\":{\"id\":\"crown\",\"fields\":[{\"label\":\"Spring angle to wall (degrees)\",\"min\":0.001,\"max\":89.999,\"integer\":false},{\"label\":\"Included corner angle (degrees)\",\"min\":0.001,\"max\":179.999,\"integer\":false}],\"outputs\":[\"Mitre magnitude (degrees)\",\"Bevel magnitude (degrees)\"]},\"mitrepoints\":{\"id\":\"mitrepoints\",\"fields\":[{\"label\":\"Short-edge length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Face width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Mitre from square (degrees)\",\"min\":0,\"max\":89,\"integer\":false}],\"outputs\":[\"Difference per end (mm)\",\"Long-edge length (mm)\"]},\"lapjoint\":{\"id\":\"lapjoint\",\"fields\":[{\"label\":\"Member thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Recess depth (mm)\",\"Remaining thickness (mm)\"]},\"tenon\":{\"id\":\"tenon\",\"fields\":[{\"label\":\"Stock thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Specified tenon thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Shoulder each face (mm)\"]},\"dovetail\":{\"id\":\"dovetail\",\"fields\":[{\"label\":\"Slope denominator n\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Slope angle (degrees)\"]},\"router\":{\"id\":\"router\",\"fields\":[{\"label\":\"Bush outside diameter (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Cutter diameter (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Radial offset (mm)\",\"Two-sided dimension difference (mm)\"]},\"taper\":{\"id\":\"taper\",\"fields\":[{\"label\":\"Length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Wide end (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Narrow end (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"One-sided offset (mm)\",\"One-sided angle (degrees)\",\"Symmetric edge angle (degrees)\"]},\"rafter\":{\"id\":\"rafter\",\"fields\":[{\"label\":\"Horizontal run (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Roof pitch (degrees)\",\"min\":0.001,\"max\":80,\"integer\":false},{\"label\":\"Horizontal overhang (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Rise (mm)\",\"Main line length (mm)\",\"Tail line length (mm)\",\"Combined line length (mm)\"]},\"ridge\":{\"id\":\"ridge\",\"fields\":[{\"label\":\"Ridge thickness (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Pitch (degrees)\",\"min\":0.001,\"max\":80,\"integer\":false}],\"outputs\":[\"Horizontal deduction (mm)\",\"Rafter line deduction (mm)\"]},\"hip\":{\"id\":\"hip\",\"fields\":[{\"label\":\"Common horizontal run (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Common roof pitch (degrees)\",\"min\":0.001,\"max\":80,\"integer\":false}],\"outputs\":[\"Plan diagonal (mm)\",\"Rise (mm)\",\"Hip\/valley line (mm)\",\"Hip\/valley inclination (degrees)\"]},\"jack\":{\"id\":\"jack\",\"fields\":[{\"label\":\"Spacing along eaves (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Common pitch (degrees)\",\"min\":0.001,\"max\":80,\"integer\":false}],\"outputs\":[\"Theoretical line difference (mm)\"]},\"roofarea\":{\"id\":\"roofarea\",\"fields\":[{\"label\":\"Horizontal projected area (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Pitch (degrees)\",\"min\":0,\"max\":80,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false}],\"outputs\":[\"Sloping area (m\u00b2)\",\"Order area (m\u00b2)\"]},\"firring\":{\"id\":\"firring\",\"fields\":[{\"label\":\"Horizontal length (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Fall denominator n\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Low-end thickness (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Rise (mm)\",\"High-end thickness (mm)\",\"Taper angle (degrees)\"]},\"stairs\":{\"id\":\"stairs\",\"fields\":[{\"label\":\"Finished floor-to-floor height (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Risers\",\"min\":2,\"max\":100,\"integer\":true},{\"label\":\"Going (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Rise per step (mm)\",\"Number of goings\",\"Horizontal run (mm)\",\"Pitch (degrees)\",\"2R + G (mm)\"]},\"risers\":{\"id\":\"risers\",\"fields\":[{\"label\":\"Total finished rise (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Specified maximum rise (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Riser count\",\"Actual rise (mm)\"]},\"stairline\":{\"id\":\"stairline\",\"fields\":[{\"label\":\"Rise per step (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Going per step (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Going intervals\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Single interval (mm)\",\"Pitch-line segment (mm)\"]},\"tread\":{\"id\":\"tread\",\"fields\":[{\"label\":\"Going (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Nosing projection (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Rear engagement (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Tread blank depth (mm)\"]},\"headroom\":{\"id\":\"headroom\",\"fields\":[{\"label\":\"Pitch-line datum height (mm)\",\"min\":-100000,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Horizontal distance (mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Rise (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Going (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Soffit level (mm)\",\"min\":-100000,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Pitch-line level (mm)\",\"Vertical clearance (mm)\"]},\"moisture\":{\"id\":\"moisture\",\"fields\":[{\"label\":\"Original width (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Movement coefficient (%)\",\"min\":1e-06,\"max\":5,\"integer\":false},{\"label\":\"Initial moisture content (%)\",\"min\":0,\"max\":30,\"integer\":false},{\"label\":\"Final moisture content (%)\",\"min\":0,\"max\":30,\"integer\":false}],\"outputs\":[\"Signed movement (mm)\",\"Estimated final width (mm)\"]},\"finish\":{\"id\":\"finish\",\"fields\":[{\"label\":\"Area (m\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Coats\",\"min\":1,\"max\":1000000000.0,\"integer\":true},{\"label\":\"Coverage (m\u00b2\/litre\/coat)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false}],\"outputs\":[\"Net litres\",\"Order litres\"]},\"fixings\":{\"id\":\"fixings\",\"fields\":[{\"label\":\"Members\",\"min\":1,\"max\":1000000000.0,\"integer\":true},{\"label\":\"Fixings per member\",\"min\":1,\"max\":1000000000.0,\"integer\":true},{\"label\":\"Waste (%)\",\"min\":0,\"max\":100,\"integer\":false},{\"label\":\"Fixings per box\",\"min\":1,\"max\":1000000000.0,\"integer\":true}],\"outputs\":[\"Order fixings\",\"Whole boxes\"]},\"shelf\":{\"id\":\"shelf\",\"fields\":[{\"label\":\"Span L (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width b (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Vertical depth h (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Elastic modulus E (N\/mm\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Uniform line load w (N\/mm)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Second moment I (mm\u2074)\",\"Midspan deflection (mm)\",\"Maximum moment (Nmm)\",\"Bending stress (N\/mm\u00b2)\"]},\"pointload\":{\"id\":\"pointload\",\"fields\":[{\"label\":\"Span L (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Width b (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Vertical depth h (mm)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Elastic modulus E (N\/mm\u00b2)\",\"min\":0.001,\"max\":1000000000.0,\"integer\":false},{\"label\":\"Central force P (N)\",\"min\":0,\"max\":1000000000.0,\"integer\":false}],\"outputs\":[\"Midspan deflection (mm)\",\"Maximum moment (Nmm)\",\"Reaction per support (N)\"]}};\nfunction fmt(x){return String(Number(x.toPrecision(10)));}\nfunction withUnit(v,u){return u?v+' '+u:v;}\nwindow.TF_CALC={\n name:'Carpentry',\n h1:'Carpentry calculators.',\n sub:'61 tools for timber, joinery, roofs and stairs.',\n disclaimer:'This is a calculation aid, not a structural design or compliance certificate. Every default is an example, not a specification for your project.',\n calcs:CALCS,\n run(calc,inputs){\n  const model=window.TF_CARP_MODEL, item=ITEMS[calc.id];\n  if(!model||!item)throw new Error('Unknown calculator.');\n  const a=calc.fields.map(f=>{const v=inputs[f.key];if(!v||v.value===null||v.value===undefined||v.value==='')throw new Error('Enter a value for '+f.label.toLowerCase()+'.');return Number(v.value);});\n  const q=model(item,a);\n  const outputs=calc.outs.map((o,i)=>({label:o.label,value:q[i],unit:o.unit}));\n  const working=[calc.formula,'',\n   ...calc.fields.map((f,i)=>f.label+' = '+withUnit(fmt(a[i]),f.unit)),\n   '\u2192',\n   ...outputs.map(o=>o.label+' = '+withUnit(Number.isFinite(o.value)?fmt(o.value):'not applicable',o.unit))].join('\\n');\n  return {outputs,working};\n }\n};\n})();\n\n<\/script>\n<script>\n(function(){window.TF_MATH={\"rectangle\":{\"m\":[\"<math display=\\\"block\\\"><mi>A<\\\/mi><mo>=<\\\/mo><mi>L<\\\/mi><mi>W<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>P<\\\/mi><mo>=<\\\/mo><mn>2<\\\/mn><mo>(<\\\/mo><mi>L<\\\/mi><mo>+<\\\/mo><mi>W<\\\/mi><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>A<\\\/mi>\",\"area (m\u00b2)\"],[\"<mi>L<\\\/mi>\",\"length (m)\"],[\"<mi>W<\\\/mi>\",\"width (m)\"],[\"<mi>P<\\\/mi>\",\"perimeter (m)\"]]},\"triangle\":{\"m\":[\"<math display=\\\"block\\\"><mi>A<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>b<\\\/mi><mi>h<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>A<\\\/mi>\",\"area (m\u00b2)\"],[\"<mi>b<\\\/mi>\",\"base (m)\"],[\"<mi>h<\\\/mi>\",\"perpendicular height (m)\"]]},\"circle\":{\"m\":[\"<math display=\\\"block\\\"><mi>A<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>\u03c0<\\\/mi><msup><mi>d<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>4<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>C<\\\/mi><mo>=<\\\/mo><mi>\u03c0<\\\/mi><mi>d<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>A<\\\/mi>\",\"area (m\u00b2)\"],[\"<mi>d<\\\/mi>\",\"diameter (m)\"],[\"<mi>C<\\\/mi>\",\"circumference (m)\"]]},\"diagonal\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>d<\\\/mi><mtext>t<\\\/mtext><\\\/msub><mo>=<\\\/mo><msqrt><msup><mi>L<\\\/mi><mn>2<\\\/mn><\\\/msup><mo>+<\\\/mo><msup><mi>W<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/msqrt><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u0394<\\\/mi><mo>=<\\\/mo><mo>|<\\\/mo><msub><mi>d<\\\/mi><mi>1<\\\/mi><\\\/msub><mo>\u2212<\\\/mo><msub><mi>d<\\\/mi><mi>2<\\\/mi><\\\/msub><mo>|<\\\/mo><mo>\u00d7<\\\/mo><mn>1000<\\\/mn><\\\/math>\"],\"w\":[[\"<msub><mi>d<\\\/mi><mi>t<\\\/mi><\\\/msub>\",\"target diagonal (m)\"],[\"<mi>L<\\\/mi>\",\"length (m)\"],[\"<mi>W<\\\/mi>\",\"width (m)\"],[\"<mi>\u0394<\\\/mi>\",\"difference between measured diagonals (mm)\"],[\"<mtext>d\u2081, d\u2082<\\\/mtext>\",\"measured diagonals 1 and 2 (m)\"]]},\"square\":{\"m\":[\"<math display=\\\"block\\\"><mtext>sides<\\\/mtext><mo>=<\\\/mo><mn>3<\\\/mn><mi>k<\\\/mi><mo>,<\\\/mo><mn>4<\\\/mn><mi>k<\\\/mi><mtext> and <\\\/mtext><mn>5<\\\/mn><mi>k<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>k<\\\/mi>\",\"scale factor (m)\"]]},\"slope\":{\"m\":[\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><msqrt><msup><mi>x<\\\/mi><mn>2<\\\/mn><\\\/msup><mo>+<\\\/mo><msup><mi>y<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/msqrt><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mi>y<\\\/mi><\\\/mrow><mrow><mi>x<\\\/mi><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>G<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>y<\\\/mi><\\\/mrow><mrow><mi>x<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u00d7<\\\/mo><mn>100<\\\/mn><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>x<\\\/mi><\\\/mrow><mrow><mi>y<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>L<\\\/mi>\",\"sloping length (m)\"],[\"<mi>x<\\\/mi>\",\"horizontal run (m)\"],[\"<mi>y<\\\/mi>\",\"vertical rise or fall (m)\"],[\"<mi>\u03b8<\\\/mi>\",\"angle (\u00b0)\"],[\"<mi>G<\\\/mi>\",\"gradient (%)\"],[\"<mi>n<\\\/mi>\",\"ratio denominator, 1:n\"]]},\"fall\":{\"m\":[\"<math display=\\\"block\\\"><mi>f<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>x<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u00d7<\\\/mo><mn>1000<\\\/mn><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>z<\\\/mi><mi>2<\\\/mi><\\\/msub><mo>=<\\\/mo><msub><mi>z<\\\/mi><mi>1<\\\/mi><\\\/msub><mo>\u2212<\\\/mo><mfrac><mrow><mi>x<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>f<\\\/mi>\",\"fall (mm)\"],[\"<mi>x<\\\/mi>\",\"horizontal run (m)\"],[\"<mi>n<\\\/mi>\",\"gradient denominator (1:n)\"],[\"<mtext>z\u2082<\\\/mtext>\",\"end level (m)\"],[\"<mtext>z\u2081<\\\/mtext>\",\"start level (m)\"]]},\"level\":{\"m\":[\"<math display=\\\"block\\\"><mtext>HI<\\\/mtext><mo>=<\\\/mo><msub><mtext>RL<\\\/mtext><mtext>known<\\\/mtext><\\\/msub><mo>+<\\\/mo><mtext>BS<\\\/mtext><\\\/math>\",\"<math display=\\\"block\\\"><msub><mtext>RL<\\\/mtext><mtext>new<\\\/mtext><\\\/msub><mo>=<\\\/mo><mtext>HI<\\\/mtext><mo>\u2212<\\\/mo><mtext>FS<\\\/mtext><\\\/math>\"],\"w\":[[\"<mtext>HI<\\\/mtext>\",\"height of instrument (m)\"],[\"<mtext>RL<\\\/mtext>\",\"reduced level (m)\"],[\"<mtext>BS<\\\/mtext>\",\"backsight (m)\"],[\"<mtext>FS<\\\/mtext>\",\"foresight (m)\"]]},\"scale\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>r<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>l<\\\/mi><mtext>d<\\\/mtext><\\\/msub><mi>n<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>d<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>l<\\\/mi><mtext>r<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<msub><mi>l<\\\/mi><mi>r<\\\/mi><\\\/msub>\",\"real length (mm)\"],[\"<msub><mi>l<\\\/mi><mi>d<\\\/mi><\\\/msub>\",\"drawing length (mm)\"],[\"<mi>n<\\\/mi>\",\"scale denominator (1:n)\"]]},\"mass\":{\"m\":[\"<math display=\\\"block\\\"><mi>m<\\\/mi><mo>=<\\\/mo><mi>V<\\\/mi><mi>\u03c1<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>F<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>m<\\\/mi><mo>\u00d7<\\\/mo><mn>9.81<\\\/mn><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>m<\\\/mi>\",\"mass (kg)\"],[\"<mi>V<\\\/mi>\",\"volume (m\u00b3)\"],[\"<mi>\u03c1<\\\/mi>\",\"bulk density (kg\/m\u00b3)\"],[\"<mi>F<\\\/mi>\",\"self-weight (kN)\"]]},\"packs\":{\"m\":[\"<math display=\\\"block\\\"><mi>T<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mi>N<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>T<\\\/mi><\\\/mrow><mrow><mi>s<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>T<\\\/mi>\",\"target units\"],[\"<mi>N<\\\/mi>\",\"net units\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"],[\"<mi>n<\\\/mi>\",\"whole packs\"],[\"<mi>s<\\\/mi>\",\"units per pack\"]]},\"cost\":{\"m\":[\"<math display=\\\"block\\\"><mi>B<\\\/mi><mo>=<\\\/mo><mi>q<\\\/mi><mi>u<\\\/mi><mo>+<\\\/mo><mi>D<\\\/mi><mi>r<\\\/mi><mo>+<\\\/mo><msub><mi>C<\\\/mi><mtext>o<\\\/mtext><\\\/msub><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>Q<\\\/mi><mtext>net<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>B<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>m<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>Q<\\\/mi><mtext>gross<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>Q<\\\/mi><mtext>net<\\\/mtext><\\\/msub><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>v<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>B<\\\/mi>\",\"base cost (\u00a3)\"],[\"<mi>q<\\\/mi>\",\"quantity\"],[\"<mi>u<\\\/mi>\",\"unit price (\u00a3)\"],[\"<mi>D<\\\/mi>\",\"labour days\"],[\"<mi>r<\\\/mi>\",\"day rate (\u00a3)\"],[\"<msub><mi>C<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"other costs (\u00a3)\"],[\"<msub><mi>Q<\\\/mi><mtext>net<\\\/mtext><\\\/msub>\",\"quote ex VAT (\u00a3)\"],[\"<mi>m<\\\/mi>\",\"markup (%)\"],[\"<msub><mi>Q<\\\/mi><mtext>gross<\\\/mtext><\\\/msub>\",\"quote inc VAT (\u00a3)\"],[\"<mi>v<\\\/mi>\",\"VAT rate (%)\"]]},\"time\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>D<\\\/mi><mtext>w<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><mi>U<\\\/mi><\\\/mrow><mrow><mi>r<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>D<\\\/mi><mtext>t<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>D<\\\/mi><mtext>w<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>p<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<msub><mi>D<\\\/mi><mi>w<\\\/mi><\\\/msub>\",\"worker-days\"],[\"<mi>U<\\\/mi>\",\"items \/ work units\"],[\"<mi>r<\\\/mi>\",\"work units per person-day\"],[\"<msub><mi>D<\\\/mi><mi>t<\\\/mi><\\\/msub>\",\"team working days\"],[\"<mi>p<\\\/mi>\",\"people\"]]},\"convert\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>m<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>l<\\\/mi><mtext>mm<\\\/mtext><\\\/msub><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>A<\\\/mi><mtext>m\u00b2<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>A<\\\/mi><mtext>mm\u00b2<\\\/mtext><\\\/msub><\\\/mrow><mrow><mn>1,000,000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>V<\\\/mi><mtext>m\u00b3<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>V<\\\/mi><mtext>L<\\\/mtext><\\\/msub><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>mm<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>l<\\\/mi><mtext>in<\\\/mtext><\\\/msub><mo>\u00d7<\\\/mo><mn>25.4<\\\/mn><\\\/math>\"],\"w\":[[\"<mi>l<\\\/mi>\",\"length, in the subscripted unit\"],[\"<mi>A<\\\/mi>\",\"area, in the subscripted unit\"],[\"<mi>V<\\\/mi>\",\"volume (L = litres)\"]]},\"timber\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>t<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>n<\\\/mi><mi>l<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>V<\\\/mi><mo>=<\\\/mo><mfrac><mrow><msub><mi>L<\\\/mi><mtext>t<\\\/mtext><\\\/msub><mi>w<\\\/mi><mi>t<\\\/mi><\\\/mrow><mrow><mn>1,000,000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<msub><mi>L<\\\/mi><mi>t<\\\/mi><\\\/msub>\",\"total length (m)\"],[\"<mi>n<\\\/mi>\",\"pieces\"],[\"<mi>l<\\\/mi>\",\"length per piece (m)\"],[\"<mi>V<\\\/mi>\",\"volume (m\u00b3)\"],[\"<mi>w<\\\/mi>\",\"width (mm)\"],[\"<mi>t<\\\/mi>\",\"thickness (mm)\"]]},\"boardfeet\":{\"m\":[\"<math display=\\\"block\\\"><mtext>BF<\\\/mtext><mo>=<\\\/mo><mfrac><mrow><mi>t<\\\/mi><mi>w<\\\/mi><mi>l<\\\/mi><mi>n<\\\/mi><\\\/mrow><mrow><mn>12<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>V<\\\/mi><mo>=<\\\/mo><mtext>BF<\\\/mtext><mo>\u00d7<\\\/mo><mn>0.002359737216<\\\/mn><\\\/math>\"],\"w\":[[\"<mtext>BF<\\\/mtext>\",\"board feet\"],[\"<mi>t<\\\/mi>\",\"thickness (in)\"],[\"<mi>w<\\\/mi>\",\"width (in)\"],[\"<mi>l<\\\/mi>\",\"length (ft)\"],[\"<mi>n<\\\/mi>\",\"count\"],[\"<mi>V<\\\/mi>\",\"volume (m\u00b3)\"]]},\"round\":{\"m\":[\"<math display=\\\"block\\\"><mi>V<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>\u03c0<\\\/mi><msup><mrow><mo>(<\\\/mo><mfrac><mrow><mi>d<\\\/mi><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/mrow><mn>2<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>4<\\\/mn><\\\/mrow><\\\/mfrac><mi>l<\\\/mi><mi>n<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>V<\\\/mi>\",\"volume (m\u00b3)\"],[\"<mi>d<\\\/mi>\",\"diameter (mm)\"],[\"<mi>l<\\\/mi>\",\"length (m)\"],[\"<mi>n<\\\/mi>\",\"count\"]]},\"sheets\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>A<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><mi>l<\\\/mi><mi>b<\\\/mi><\\\/mrow><msup><mn>10<\\\/mn><mn>6<\\\/mn><\\\/msup><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>A<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/mrow><mrow><msub><mi>A<\\\/mi><mtext>s<\\\/mtext><\\\/msub><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>A<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"sheet area (m\u00b2)\"],[\"<mi>l<\\\/mi>\",\"sheet length (mm)\"],[\"<mi>b<\\\/mi>\",\"sheet width (mm)\"],[\"<mi>N<\\\/mi>\",\"whole sheets\"],[\"<mi>A<\\\/mi>\",\"net area (m\u00b2)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"]]},\"sheetgrid\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>N<\\\/mi><mtext>A<\\\/mtext><\\\/msub><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>L<\\\/mi><\\\/mrow><mrow><mi>l<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>W<\\\/mi><\\\/mrow><mrow><mi>w<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>N<\\\/mi><mtext>B<\\\/mtext><\\\/msub><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>L<\\\/mi><\\\/mrow><mrow><mi>w<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>W<\\\/mi><\\\/mrow><mrow><mi>l<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>N<\\\/mi><mi>A<\\\/mi><\\\/msub>\",\"grid A sheets\"],[\"<mi>L<\\\/mi>\",\"room length (mm)\"],[\"<mi>l<\\\/mi>\",\"sheet length (mm)\"],[\"<mi>W<\\\/mi>\",\"room width (mm)\"],[\"<mi>w<\\\/mi>\",\"sheet width (mm)\"],[\"<msub><mi>N<\\\/mi><mi>B<\\\/mi><\\\/msub>\",\"grid B sheets (sheet axes swapped)\"]]},\"floor\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>A<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>A<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><msub><mi>A<\\\/mi><mtext>o<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>c<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>A<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"order area (m\u00b2)\"],[\"<mi>A<\\\/mi>\",\"net area (m\u00b2)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"],[\"<mi>N<\\\/mi>\",\"whole packs\"],[\"<mi>c<\\\/mi>\",\"pack coverage (m\u00b2)\"]]},\"rows\":{\"m\":[\"<math display=\\\"block\\\"><mi>u<\\\/mi><mo>=<\\\/mo><mi>W<\\\/mi><mo>\u2212<\\\/mo><mn>2<\\\/mn><mi>g<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>u<\\\/mi><\\\/mrow><mrow><mi>c<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>e<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>u<\\\/mi><mo>\u2212<\\\/mo><mo>(<\\\/mo><mi>n<\\\/mi><mo>\u2212<\\\/mo><mn>2<\\\/mn><mo>)<\\\/mo><mi>c<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>u<\\\/mi>\",\"usable width (mm)\"],[\"<mi>W<\\\/mi>\",\"room width (mm)\"],[\"<mi>g<\\\/mi>\",\"gap at each wall (mm)\"],[\"<mi>n<\\\/mi>\",\"row count\"],[\"<mi>c<\\\/mi>\",\"effective board cover (mm)\"],[\"<mi>e<\\\/mi>\",\"equal edge-row width (mm)\"]]},\"deck\":{\"m\":[\"<math display=\\\"block\\\"><mi>s<\\\/mi><mo>=<\\\/mo><mi>W<\\\/mi><mo>\u2212<\\\/mo><mn>2<\\\/mn><mi>e<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>s<\\\/mi><mo>+<\\\/mo><msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>b<\\\/mi><mo>+<\\\/mo><msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>g<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>s<\\\/mi><mo>\u2212<\\\/mo><mi>n<\\\/mi><mi>b<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><mo>\u2212<\\\/mo><mn>1<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>s<\\\/mi>\",\"clear span (mm)\"],[\"<mi>W<\\\/mi>\",\"overall width (mm)\"],[\"<mi>e<\\\/mi>\",\"edge gap each side (mm)\"],[\"<mi>n<\\\/mi>\",\"full-width boards\"],[\"<msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub>\",\"maximum gap (mm)\"],[\"<mi>b<\\\/mi>\",\"board width (mm)\"],[\"<mi>g<\\\/mi>\",\"actual gap (mm)\"]]},\"cladding\":{\"m\":[\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>A<\\\/mi><\\\/mrow><mrow><mfrac><mrow><mi>c<\\\/mi><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>L<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>L<\\\/mi>\",\"linear metres (m)\"],[\"<mi>A<\\\/mi>\",\"area (m\u00b2)\"],[\"<mi>c<\\\/mi>\",\"exposed cover width (mm)\"],[\"<msub><mi>L<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"order length (m)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"]]},\"studs\":{\"m\":[\"<math display=\\\"block\\\"><mi>b<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>S<\\\/mi><\\\/mrow><mrow><msub><mi>c<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mi>b<\\\/mi><mo>+<\\\/mo><mn>1<\\\/mn><\\\/math>\",\"<math display=\\\"block\\\"><mi>c<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>S<\\\/mi><\\\/mrow><mrow><mi>b<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>b<\\\/mi>\",\"bays\"],[\"<mi>S<\\\/mi>\",\"end-centre span (mm)\"],[\"<msub><mi>c<\\\/mi><mtext>max<\\\/mtext><\\\/msub>\",\"maximum specified centres (mm)\"],[\"<mi>N<\\\/mi>\",\"members\"],[\"<mi>c<\\\/mi>\",\"actual centres (mm)\"]]},\"noggins\":{\"m\":[\"<math display=\\\"block\\\"><mi>l<\\\/mi><mo>=<\\\/mo><mi>c<\\\/mi><mo>\u2212<\\\/mo><mi>t<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mi>b<\\\/mi><mi>r<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>N<\\\/mi><mi>l<\\\/mi><\\\/mrow><mrow><mn>1000<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>l<\\\/mi>\",\"noggin clear length (mm)\"],[\"<mi>c<\\\/mi>\",\"centres (mm)\"],[\"<mi>t<\\\/mi>\",\"member thickness (mm)\"],[\"<mi>N<\\\/mi>\",\"noggin count\"],[\"<mi>b<\\\/mi>\",\"bays\"],[\"<mi>r<\\\/mi>\",\"rows\"],[\"<mi>L<\\\/mi>\",\"total cut length (m)\"]]},\"studlength\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>H<\\\/mi><mo>\u2212<\\\/mo><msub><mi>t<\\\/mi><mtext>b<\\\/mtext><\\\/msub><mo>\u2212<\\\/mo><msub><mi>t<\\\/mi><mtext>t<\\\/mtext><\\\/msub><\\\/math>\"],\"w\":[[\"<msub><mi>l<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"stud length (mm)\"],[\"<mi>H<\\\/mi>\",\"overall height (mm)\"],[\"<msub><mi>t<\\\/mi><mi>b<\\\/mi><\\\/msub>\",\"bottom plate thickness (mm)\"],[\"<msub><mi>t<\\\/mi><mi>t<\\\/mi><\\\/msub>\",\"total top-plate thickness (mm)\"]]},\"spacing\":{\"m\":[\"<math display=\\\"block\\\"><mi>p<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>L<\\\/mi><mo>\u2212<\\\/mo><mn>2<\\\/mn><mi>m<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><mo>\u2212<\\\/mo><mn>1<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>x<\\\/mi><mi>1<\\\/mi><\\\/msub><mo>=<\\\/mo><mi>m<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>x<\\\/mi><mi>n<\\\/mi><\\\/msub><mo>=<\\\/mo><mi>L<\\\/mi><mo>\u2212<\\\/mo><mi>m<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>p<\\\/mi>\",\"pitch (mm)\"],[\"<mi>L<\\\/mi>\",\"length (mm)\"],[\"<mi>m<\\\/mi>\",\"end margin (mm)\"],[\"<mi>n<\\\/mi>\",\"points\"],[\"<mtext>x\u2081<\\\/mtext>\",\"first position (mm)\"],[\"<mtext>x\u2099<\\\/mtext>\",\"last position (mm)\"]]},\"gaps\":{\"m\":[\"<math display=\\\"block\\\"><mi>g<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>W<\\\/mi><mo>\u2212<\\\/mo><mi>n<\\\/mi><mi>b<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><mo>+<\\\/mo><mn>1<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>p<\\\/mi><mo>=<\\\/mo><mi>b<\\\/mi><mo>+<\\\/mo><mi>g<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>g<\\\/mi>\",\"equal clear gap (mm)\"],[\"<mi>W<\\\/mi>\",\"clear opening (mm)\"],[\"<mi>n<\\\/mi>\",\"member count\"],[\"<mi>b<\\\/mi>\",\"member width (mm)\"],[\"<mi>p<\\\/mi>\",\"centre pitch (mm)\"]]},\"balustercount\":{\"m\":[\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>W<\\\/mi><mo>\u2212<\\\/mo><msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>b<\\\/mi><mo>+<\\\/mo><msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>g<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>W<\\\/mi><mo>\u2212<\\\/mo><mi>n<\\\/mi><mi>b<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><mo>+<\\\/mo><mn>1<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>n<\\\/mi>\",\"member count\"],[\"<mi>W<\\\/mi>\",\"clear opening (mm)\"],[\"<msub><mi>g<\\\/mi><mtext>max<\\\/mtext><\\\/msub>\",\"specified maximum gap (mm)\"],[\"<mi>b<\\\/mi>\",\"member width (mm)\"],[\"<mi>g<\\\/mi>\",\"actual gap (mm)\"]]},\"cut\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>u<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>L<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>\u2212<\\\/mo><mi>T<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mo>\u230a<\\\/mo><mfrac><mrow><msub><mi>L<\\\/mi><mtext>u<\\\/mtext><\\\/msub><\\\/mrow><mrow><mi>l<\\\/mi><mo>+<\\\/mo><mi>k<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u230b<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>q<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>L<\\\/mi><mi>u<\\\/mi><\\\/msub>\",\"usable length (mm)\"],[\"<msub><mi>L<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"stock length (mm)\"],[\"<mi>T<\\\/mi>\",\"total end trim loss (mm)\"],[\"<mi>n<\\\/mi>\",\"pieces per stock\"],[\"<mi>l<\\\/mi>\",\"finished piece length (mm)\"],[\"<mi>k<\\\/mi>\",\"saw kerf (mm)\"],[\"<mi>N<\\\/mi>\",\"stock lengths\"],[\"<mi>q<\\\/mi>\",\"pieces required\"]]},\"skirting\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>net<\\\/mtext><\\\/msub><mo>=<\\\/mo><mn>2<\\\/mn><mo>(<\\\/mo><mi>L<\\\/mi><mo>+<\\\/mo><mi>W<\\\/mi><mo>)<\\\/mo><mo>\u2212<\\\/mo><mi>D<\\\/mi><mo>+<\\\/mo><mi>R<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>L<\\\/mi><mtext>net<\\\/mtext><\\\/msub><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>L<\\\/mi><mtext>net<\\\/mtext><\\\/msub>\",\"net trim length (m)\"],[\"<mi>L<\\\/mi>\",\"room length (m)\"],[\"<mi>W<\\\/mi>\",\"room width (m)\"],[\"<mi>D<\\\/mi>\",\"deductions (m)\"],[\"<mi>R<\\\/mi>\",\"additional returns (m)\"],[\"<msub><mi>L<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"order length (m)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"]]},\"architrave\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>leg<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>H<\\\/mi><mo>+<\\\/mo><mi>r<\\\/mi><mo>+<\\\/mo><mi>t<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>head<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>W<\\\/mi><mo>+<\\\/mo><mn>2<\\\/mn><mo>(<\\\/mo><mi>r<\\\/mi><mo>+<\\\/mo><mi>t<\\\/mi><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>l<\\\/mi><mtext>leg<\\\/mtext><\\\/msub>\",\"leg long point (mm)\"],[\"<mi>H<\\\/mi>\",\"opening height (mm)\"],[\"<mi>r<\\\/mi>\",\"reveal (mm)\"],[\"<mi>t<\\\/mi>\",\"trim face width (mm)\"],[\"<msub><mi>l<\\\/mi><mtext>head<\\\/mtext><\\\/msub>\",\"head long point (mm)\"],[\"<mi>W<\\\/mi>\",\"opening width (mm)\"]]},\"door\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>w<\\\/mi><mtext>leaf<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>W<\\\/mi><mo>\u2212<\\\/mo><msub><mi>g<\\\/mi><mi>l<\\\/mi><\\\/msub><mo>\u2212<\\\/mo><msub><mi>g<\\\/mi><mi>r<\\\/mi><\\\/msub><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>h<\\\/mi><mtext>leaf<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>H<\\\/mi><mo>\u2212<\\\/mo><msub><mi>g<\\\/mi><mi>t<\\\/mi><\\\/msub><mo>\u2212<\\\/mo><msub><mi>g<\\\/mi><mi>b<\\\/mi><\\\/msub><\\\/math>\"],\"w\":[[\"<msub><mi>w<\\\/mi><mtext>leaf<\\\/mtext><\\\/msub>\",\"leaf width (mm)\"],[\"<mi>W<\\\/mi>\",\"opening width (mm)\"],[\"<msub><mi>g<\\\/mi><mtext>l, g_r<\\\/mtext><\\\/msub>\",\"left and right gaps (mm)\"],[\"<msub><mi>h<\\\/mi><mtext>leaf<\\\/mtext><\\\/msub>\",\"leaf height (mm)\"],[\"<mi>H<\\\/mi>\",\"opening height (mm)\"],[\"<msub><mi>g<\\\/mi><mtext>t, g_b<\\\/mtext><\\\/msub>\",\"top and bottom gaps (mm)\"]]},\"lining\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>W<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>W<\\\/mi><mo>+<\\\/mo><mn>2<\\\/mn><mi>t<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>H<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>H<\\\/mi><mo>+<\\\/mo><mi>t<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>W<\\\/mi><mtext>r<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>W<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>+<\\\/mo><mn>2<\\\/mn><msub><mi>g<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>,<\\\/mo><msub><mi>H<\\\/mi><mtext>r<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>H<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>+<\\\/mo><msub><mi>g<\\\/mi><mtext>h<\\\/mtext><\\\/msub><\\\/math>\"],\"w\":[[\"<msub><mi>W<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"outside width (mm)\"],[\"<mi>W<\\\/mi>\",\"clear width (mm)\"],[\"<mi>t<\\\/mi>\",\"jamb \/ head thickness (mm)\"],[\"<msub><mi>H<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"outside height (mm)\"],[\"<mi>H<\\\/mi>\",\"clear height (mm)\"],[\"<msub><mi>W<\\\/mi><mtext>r, H_r<\\\/mtext><\\\/msub>\",\"rough opening width and height (mm)\"],[\"<msub><mi>g<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"fitting gap at each side (mm)\"],[\"<msub><mi>g<\\\/mi><mi>h<\\\/mi><\\\/msub>\",\"fitting gap above (mm)\"]]},\"panel\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>w<\\\/mi><mtext>p<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>W<\\\/mi><mo>+<\\\/mo><mn>2<\\\/mn><mi>d<\\\/mi><mo>\u2212<\\\/mo><msub><mi>c<\\\/mi><mtext>w<\\\/mtext><\\\/msub><mo>,<\\\/mo><msub><mi>h<\\\/mi><mtext>p<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>H<\\\/mi><mo>+<\\\/mo><mn>2<\\\/mn><mi>d<\\\/mi><mo>\u2212<\\\/mo><msub><mi>c<\\\/mi><mtext>h<\\\/mtext><\\\/msub><\\\/math>\"],\"w\":[[\"<msub><mi>w<\\\/mi><mtext>p, h_p<\\\/mtext><\\\/msub>\",\"panel width and height (mm)\"],[\"<mi>W<\\\/mi>\",\"clear opening width (mm)\"],[\"<mi>d<\\\/mi>\",\"groove depth (mm)\"],[\"<msub><mi>c<\\\/mi><mi>w<\\\/mi><\\\/msub>\",\"total width clearance (mm)\"],[\"<mi>H<\\\/mi>\",\"clear opening height (mm)\"],[\"<msub><mi>c<\\\/mi><mi>h<\\\/mi><\\\/msub>\",\"total height clearance (mm)\"]]},\"drawer\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>W<\\\/mi><mtext>box<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>O<\\\/mi><mo>\u2212<\\\/mo><msub><mi>a<\\\/mi><mi>l<\\\/mi><\\\/msub><mo>\u2212<\\\/mo><msub><mi>a<\\\/mi><mi>r<\\\/mi><\\\/msub><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>l<\\\/mi><mtext>b<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>W<\\\/mi><mtext>box<\\\/mtext><\\\/msub><mo>\u2212<\\\/mo><mn>2<\\\/mn><mi>t<\\\/mi><\\\/math>\"],\"w\":[[\"<msub><mi>W<\\\/mi><mtext>box<\\\/mtext><\\\/msub>\",\"outside box width (mm)\"],[\"<mi>O<\\\/mi>\",\"cabinet opening (mm)\"],[\"<msub><mi>a<\\\/mi><mtext>l, a_r<\\\/mtext><\\\/msub>\",\"left and right slide allowances (mm)\"],[\"<msub><mi>l<\\\/mi><mi>b<\\\/mi><\\\/msub>\",\"between-side piece length (mm)\"],[\"<mi>t<\\\/mi>\",\"side thickness (mm)\"]]},\"mitre\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u03b1<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>\u03b8<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b2<\\\/mi><mo>=<\\\/mo><mn>90<\\\/mn><mo>\u00b0<\\\/mo><mo>\u2212<\\\/mo><mfrac><mrow><mi>\u03b8<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>\u03b1<\\\/mi>\",\"cut line to long edge (\u00b0)\"],[\"<mi>\u03b8<\\\/mi>\",\"included corner angle (\u00b0)\"],[\"<mi>\u03b2<\\\/mi>\",\"saw setting from square (\u00b0)\"]]},\"polygon\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mn>180<\\\/mn><mo>\u2212<\\\/mo><mfrac><mrow><mn>360<\\\/mn><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b2<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mn>180<\\\/mn><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>\u03b8<\\\/mi>\",\"interior angle (\u00b0)\"],[\"<mi>n<\\\/mi>\",\"number of sides\"],[\"<mi>\u03b2<\\\/mi>\",\"saw setting from square (\u00b0)\"]]},\"crown\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u03b1<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>[<\\\/mo><mfrac><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>sin<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03c6<\\\/mi><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>tan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mi>\u03b8<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/mrow><\\\/mfrac><mo>]<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b2<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arcsin<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>[<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03c6<\\\/mi><mo>\u00b7<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mi>\u03b8<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><mo>]<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>\u03b1<\\\/mi>\",\"mitre angle (\u00b0)\"],[\"<mi>\u03c6<\\\/mi>\",\"spring angle to wall (\u00b0)\"],[\"<mi>\u03b8<\\\/mi>\",\"included corner angle (\u00b0)\"],[\"<mi>\u03b2<\\\/mi>\",\"bevel angle (\u00b0)\"]]},\"mitrepoints\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u0394<\\\/mi><mo>=<\\\/mo><mi>w<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>tan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mi>S<\\\/mi><mo>+<\\\/mo><mn>2<\\\/mn><mi>\u0394<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>\u0394<\\\/mi>\",\"each end difference (mm)\"],[\"<mi>w<\\\/mi>\",\"face width (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"saw angle from square (\u00b0)\"],[\"<mi>L<\\\/mi>\",\"long-edge length (mm)\"],[\"<mi>S<\\\/mi>\",\"short-edge length (mm)\"]]},\"lapjoint\":{\"m\":[\"<math display=\\\"block\\\"><mi>d<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>t<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>t<\\\/mi><mtext>r<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><mi>t<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>d<\\\/mi>\",\"recess depth (mm)\"],[\"<mi>t<\\\/mi>\",\"member thickness (mm)\"],[\"<msub><mi>t<\\\/mi><mi>r<\\\/mi><\\\/msub>\",\"remaining thickness (mm)\"]]},\"tenon\":{\"m\":[\"<math display=\\\"block\\\"><mi>s<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>T<\\\/mi><mo>\u2212<\\\/mo><mi>t<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>s<\\\/mi>\",\"shoulder (mm)\"],[\"<mi>T<\\\/mi>\",\"stock thickness (mm)\"],[\"<mi>t<\\\/mi>\",\"tenon thickness (mm)\"]]},\"dovetail\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mn>1<\\\/mn><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>\u03b8<\\\/mi>\",\"angle from the reference axis (\u00b0)\"],[\"<mi>n<\\\/mi>\",\"slope denominator (1:n)\"]]},\"router\":{\"m\":[\"<math display=\\\"block\\\"><mi>o<\\\/mi><mo>=<\\\/mo><mfrac><mrow><msub><mi>D<\\\/mi><mtext>b<\\\/mtext><\\\/msub><mo>\u2212<\\\/mo><msub><mi>d<\\\/mi><mtext>c<\\\/mtext><\\\/msub><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>o<\\\/mi>\",\"offset (mm)\"],[\"<msub><mi>D<\\\/mi><mi>b<\\\/mi><\\\/msub>\",\"bush outside diameter (mm)\"],[\"<msub><mi>d<\\\/mi><mi>c<\\\/mi><\\\/msub>\",\"cutter diameter (mm)\"]]},\"taper\":{\"m\":[\"<math display=\\\"block\\\"><mi>o<\\\/mi><mo>=<\\\/mo><mi>W<\\\/mi><mo>\u2212<\\\/mo><mi>w<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mi>o<\\\/mi><\\\/mrow><mrow><mi>L<\\\/mi><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>o<\\\/mi>\",\"offset (mm)\"],[\"<mi>W<\\\/mi>\",\"wide end (mm)\"],[\"<mi>w<\\\/mi>\",\"narrow end (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"taper angle (\u00b0)\"],[\"<mi>L<\\\/mi>\",\"length (mm)\"]]},\"rafter\":{\"m\":[\"<math display=\\\"block\\\"><mi>R<\\\/mi><mo>=<\\\/mo><mi>x<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>tan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>x<\\\/mi><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>L<\\\/mi><mtext>t<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><mi>o<\\\/mi><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>R<\\\/mi>\",\"rise (mm)\"],[\"<mi>x<\\\/mi>\",\"horizontal run (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"roof pitch (\u00b0)\"],[\"<mi>L<\\\/mi>\",\"rafter line length (mm)\"],[\"<msub><mi>L<\\\/mi><mi>t<\\\/mi><\\\/msub>\",\"tail line length (mm)\"],[\"<mi>o<\\\/mi>\",\"horizontal overhang (mm)\"]]},\"ridge\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>d<\\\/mi><mtext>h<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><mi>t<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>d<\\\/mi><mtext>l<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>d<\\\/mi><mtext>h<\\\/mtext><\\\/msub><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<msub><mi>d<\\\/mi><mi>h<\\\/mi><\\\/msub>\",\"horizontal deduction (mm)\"],[\"<mi>t<\\\/mi>\",\"ridge thickness (mm)\"],[\"<msub><mi>d<\\\/mi><mi>l<\\\/mi><\\\/msub>\",\"line deduction (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"pitch (\u00b0)\"]]},\"hip\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>x<\\\/mi><mtext>p<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>x<\\\/mi><msqrt><mn>2<\\\/mn><\\\/msqrt><\\\/math>\",\"<math display=\\\"block\\\"><mi>R<\\\/mi><mo>=<\\\/mo><mi>x<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>tan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><msqrt><msup><mrow><msub><mi>x<\\\/mi><mtext>p<\\\/mtext><\\\/msub><\\\/mrow><mn>2<\\\/mn><\\\/msup><mo>+<\\\/mo><msup><mi>R<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/msqrt><\\\/math>\"],\"w\":[[\"<msub><mi>x<\\\/mi><mi>p<\\\/mi><\\\/msub>\",\"plan diagonal (mm)\"],[\"<mi>x<\\\/mi>\",\"common horizontal run (mm)\"],[\"<mi>R<\\\/mi>\",\"rise (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"common roof pitch (\u00b0)\"],[\"<mi>L<\\\/mi>\",\"hip diagonal line length (mm)\"]]},\"jack\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u0394<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>s<\\\/mi><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>\u0394<\\\/mi>\",\"line length difference (mm)\"],[\"<mi>s<\\\/mi>\",\"spacing along eaves (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"common pitch (\u00b0)\"]]},\"roofarea\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>A<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>=<\\\/mo><mfrac><mrow><msub><mi>A<\\\/mi><mtext>h<\\\/mtext><\\\/msub><\\\/mrow><mrow><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>cos<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>\u03b8<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>A<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>A<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<msub><mi>A<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"slope area (m\u00b2)\"],[\"<msub><mi>A<\\\/mi><mi>h<\\\/mi><\\\/msub>\",\"horizontal projected area (m\u00b2)\"],[\"<mi>\u03b8<\\\/mi>\",\"pitch (\u00b0)\"],[\"<msub><mi>A<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"order area (m\u00b2)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"]]},\"firring\":{\"m\":[\"<math display=\\\"block\\\"><mi>r<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>L<\\\/mi><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>T<\\\/mi><mo>=<\\\/mo><mi>t<\\\/mi><mo>+<\\\/mo><mi>r<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mn>1<\\\/mn><\\\/mrow><mrow><mi>n<\\\/mi><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>r<\\\/mi>\",\"rise (mm)\"],[\"<mi>L<\\\/mi>\",\"horizontal length (mm)\"],[\"<mi>n<\\\/mi>\",\"fall denominator (1:n)\"],[\"<mi>T<\\\/mi>\",\"high-end thickness (mm)\"],[\"<mi>t<\\\/mi>\",\"low-end thickness (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"taper angle (\u00b0)\"]]},\"stairs\":{\"m\":[\"<math display=\\\"block\\\"><mi>r<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>H<\\\/mi><\\\/mrow><mrow><mi>N<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>n<\\\/mi><mo>=<\\\/mo><mi>N<\\\/mi><mo>\u2212<\\\/mo><mn>1<\\\/mn><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mi>n<\\\/mi><mi>g<\\\/mi><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b8<\\\/mi><mo>=<\\\/mo><mspace width=\\\"0.17em\\\"><\\\/mspace><mi>arctan<\\\/mi><mspace width=\\\"0.17em\\\"><\\\/mspace><mo>(<\\\/mo><mfrac><mrow><mi>r<\\\/mi><\\\/mrow><mrow><mi>g<\\\/mi><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>S<\\\/mi><mo>=<\\\/mo><mn>2<\\\/mn><mi>r<\\\/mi><mo>+<\\\/mo><mi>g<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>r<\\\/mi>\",\"rise per step (mm)\"],[\"<mi>H<\\\/mi>\",\"floor-to-floor height (mm)\"],[\"<mi>N<\\\/mi>\",\"risers\"],[\"<mi>n<\\\/mi>\",\"goings\"],[\"<mi>L<\\\/mi>\",\"total run (mm)\"],[\"<mi>g<\\\/mi>\",\"going (mm)\"],[\"<mi>\u03b8<\\\/mi>\",\"pitch (\u00b0)\"],[\"<mi>S<\\\/mi>\",\"step relationship 2r + g (mm)\"]]},\"risers\":{\"m\":[\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>H<\\\/mi><\\\/mrow><mrow><msub><mi>r<\\\/mi><mtext>max<\\\/mtext><\\\/msub><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>r<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>H<\\\/mi><\\\/mrow><mrow><mi>N<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>N<\\\/mi>\",\"risers\"],[\"<mi>H<\\\/mi>\",\"total finished rise (mm)\"],[\"<msub><mi>r<\\\/mi><mtext>max<\\\/mtext><\\\/msub>\",\"specified maximum rise (mm)\"],[\"<mi>r<\\\/mi>\",\"actual rise (mm)\"]]},\"stairline\":{\"m\":[\"<math display=\\\"block\\\"><mi>s<\\\/mi><mo>=<\\\/mo><msqrt><msup><mi>r<\\\/mi><mn>2<\\\/mn><\\\/msup><mo>+<\\\/mo><msup><mi>g<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/msqrt><\\\/math>\",\"<math display=\\\"block\\\"><mi>L<\\\/mi><mo>=<\\\/mo><mi>n<\\\/mi><mi>s<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>s<\\\/mi>\",\"one interval length (mm)\"],[\"<mi>r<\\\/mi>\",\"rise per step (mm)\"],[\"<mi>g<\\\/mi>\",\"going per step (mm)\"],[\"<mi>L<\\\/mi>\",\"pitch-line length (mm)\"],[\"<mi>n<\\\/mi>\",\"going intervals\"]]},\"tread\":{\"m\":[\"<math display=\\\"block\\\"><mi>D<\\\/mi><mo>=<\\\/mo><mi>g<\\\/mi><mo>+<\\\/mo><mi>p<\\\/mi><mo>+<\\\/mo><mi>e<\\\/mi><\\\/math>\"],\"w\":[[\"<mi>D<\\\/mi>\",\"blank depth (mm)\"],[\"<mi>g<\\\/mi>\",\"going (mm)\"],[\"<mi>p<\\\/mi>\",\"nosing projection (mm)\"],[\"<mi>e<\\\/mi>\",\"rear engagement (mm)\"]]},\"headroom\":{\"m\":[\"<math display=\\\"block\\\"><msub><mi>h<\\\/mi><mtext>p<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>h<\\\/mi><mi>0<\\\/mi><\\\/msub><mo>+<\\\/mo><mfrac><mrow><mi>x<\\\/mi><mi>r<\\\/mi><\\\/mrow><mrow><mi>g<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>h<\\\/mi><mtext>c<\\\/mtext><\\\/msub><mo>=<\\\/mo><msub><mi>z<\\\/mi><mtext>s<\\\/mtext><\\\/msub><mo>\u2212<\\\/mo><msub><mi>h<\\\/mi><mtext>p<\\\/mtext><\\\/msub><\\\/math>\"],\"w\":[[\"<msub><mi>h<\\\/mi><mi>p<\\\/mi><\\\/msub>\",\"pitch-line height (mm)\"],[\"<mtext>h\u2080<\\\/mtext>\",\"pitch-line datum height (mm)\"],[\"<mi>x<\\\/mi>\",\"horizontal distance (mm)\"],[\"<mi>r<\\\/mi>\",\"rise (mm)\"],[\"<mi>g<\\\/mi>\",\"going (mm)\"],[\"<msub><mi>h<\\\/mi><mi>c<\\\/mi><\\\/msub>\",\"headroom clearance (mm)\"],[\"<msub><mi>z<\\\/mi><mi>s<\\\/mi><\\\/msub>\",\"soffit level (mm)\"]]},\"moisture\":{\"m\":[\"<math display=\\\"block\\\"><mi>\u0394<\\\/mi><mi>W<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>W<\\\/mi><mi>c<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mi>\u0394<\\\/mi><mi>M<\\\/mi><\\\/math>\"],\"w\":[[\"<mtext>\u0394W<\\\/mtext>\",\"movement (mm)\"],[\"<mi>W<\\\/mi>\",\"original width (mm)\"],[\"<mi>c<\\\/mi>\",\"movement coefficient (% of dimension per percentage point MC)\"],[\"<mtext>\u0394M<\\\/mtext>\",\"change in moisture content, final \u2212 initial (percentage points)\"]]},\"finish\":{\"m\":[\"<math display=\\\"block\\\"><mi>V<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>A<\\\/mi><mi>n<\\\/mi><\\\/mrow><mrow><mi>c<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><msub><mi>V<\\\/mi><mtext>o<\\\/mtext><\\\/msub><mo>=<\\\/mo><mi>V<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>V<\\\/mi>\",\"litres required (L)\"],[\"<mi>A<\\\/mi>\",\"area (m\u00b2)\"],[\"<mi>n<\\\/mi>\",\"coats\"],[\"<mi>c<\\\/mi>\",\"coverage (m\u00b2\/L)\"],[\"<msub><mi>V<\\\/mi><mi>o<\\\/mi><\\\/msub>\",\"order quantity (L)\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"]]},\"fixings\":{\"m\":[\"<math display=\\\"block\\\"><mi>N<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mi>m<\\\/mi><mi>f<\\\/mi><mo>(<\\\/mo><mn>1<\\\/mn><mo>+<\\\/mo><mfrac><mrow><mi>w<\\\/mi><\\\/mrow><mrow><mn>100<\\\/mn><\\\/mrow><\\\/mfrac><mo>)<\\\/mo><mo>\u2309<\\\/mo><\\\/math>\",\"<math display=\\\"block\\\"><mi>B<\\\/mi><mo>=<\\\/mo><mo>\u2308<\\\/mo><mfrac><mrow><mi>N<\\\/mi><\\\/mrow><mrow><mi>s<\\\/mi><\\\/mrow><\\\/mfrac><mo>\u2309<\\\/mo><\\\/math>\"],\"w\":[[\"<mi>N<\\\/mi>\",\"fixing count\"],[\"<mi>m<\\\/mi>\",\"members\"],[\"<mi>f<\\\/mi>\",\"fixings per member\"],[\"<mi>w<\\\/mi>\",\"waste (%)\"],[\"<mi>B<\\\/mi>\",\"boxes\"],[\"<mi>s<\\\/mi>\",\"fixings per box\"]]},\"shelf\":{\"m\":[\"<math display=\\\"block\\\"><mi>I<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>b<\\\/mi><msup><mi>h<\\\/mi><mn>3<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>12<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b4<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mn>5<\\\/mn><mi>w<\\\/mi><msup><mi>L<\\\/mi><mn>4<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>384<\\\/mn><mi>E<\\\/mi><mi>I<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>M<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>w<\\\/mi><msup><mi>L<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>8<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03c3<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>M<\\\/mi><\\\/mrow><mrow><mfrac><mrow><mi>b<\\\/mi><msup><mi>h<\\\/mi><mn>2<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>6<\\\/mn><\\\/mrow><\\\/mfrac><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>I<\\\/mi>\",\"second moment of area (mm\u2074)\"],[\"<mi>b<\\\/mi>\",\"width (mm)\"],[\"<mi>h<\\\/mi>\",\"vertical depth (mm)\"],[\"<mi>\u03b4<\\\/mi>\",\"midspan deflection (mm)\"],[\"<mi>w<\\\/mi>\",\"uniform line load (N\/mm)\"],[\"<mi>L<\\\/mi>\",\"span (mm)\"],[\"<mi>E<\\\/mi>\",\"elastic modulus (N\/mm\u00b2)\"],[\"<mi>M<\\\/mi>\",\"maximum bending moment (Nmm)\"],[\"<mi>\u03c3<\\\/mi>\",\"bending stress (N\/mm\u00b2)\"]]},\"pointload\":{\"m\":[\"<math display=\\\"block\\\"><mi>I<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>b<\\\/mi><msup><mi>h<\\\/mi><mn>3<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>12<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>\u03b4<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>P<\\\/mi><msup><mi>L<\\\/mi><mn>3<\\\/mn><\\\/msup><\\\/mrow><mrow><mn>48<\\\/mn><mi>E<\\\/mi><mi>I<\\\/mi><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>M<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>P<\\\/mi><mi>L<\\\/mi><\\\/mrow><mrow><mn>4<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\",\"<math display=\\\"block\\\"><mi>R<\\\/mi><mo>=<\\\/mo><mfrac><mrow><mi>P<\\\/mi><\\\/mrow><mrow><mn>2<\\\/mn><\\\/mrow><\\\/mfrac><\\\/math>\"],\"w\":[[\"<mi>I<\\\/mi>\",\"second moment of area (mm\u2074)\"],[\"<mi>b<\\\/mi>\",\"width (mm)\"],[\"<mi>h<\\\/mi>\",\"vertical depth (mm)\"],[\"<mi>\u03b4<\\\/mi>\",\"midspan deflection (mm)\"],[\"<mi>P<\\\/mi>\",\"central point force (N)\"],[\"<mi>L<\\\/mi>\",\"span (mm)\"],[\"<mi>E<\\\/mi>\",\"elastic modulus (N\/mm\u00b2)\"],[\"<mi>M<\\\/mi>\",\"maximum bending moment (Nmm)\"],[\"<mi>R<\\\/mi>\",\"reaction at each end (N)\"]]}};})();\n\n<\/script>\n<script>\n\/* Tradefox calculators \u2014 shared interface. Expects window.TF_CALC = {name, h1, sub, calcs, run}. *\/\n(function(){\n'use strict';\nconst D=window.TF_CALC, root=document.getElementById('tfc');\nif(!D||!root)return;\nconst esc=s=>String(s==null?'':s).replace(\/[&<>\"']\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\nconst byId=Object.fromEntries(D.calcs.map(c=>[c.id,c]));\nconst groups=[];D.calcs.forEach(c=>{if(!groups.includes(c.group))groups.push(c.group)});\nconst LOGO='data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAAAoCAYAAAChIFWSAAAaUUlEQVR42u1dfZRcRZX\/3Vv1uns+kpmQDyQhG0MgSoCQMIkYBIaIQVARRTtKgoCEg66oq+JZ9ahMRnGVVXdX9+giCqJAgDR+ggqixlEBgUyEgAEkEAgkIV8zmcl8dL\/3qu7+0fXGN53+nmDCMXVOZTLd79Wrd+t+\/urWHeBQO9QOtUPtUPunaARAAeBDpDjUXpFNOsBr2tu1tLdrSadVR0fdzEwFv6sin+2fm2po1vX9MXZ8rFq0Q6VmAEiFa3gMWkbcM4q1\/UHvUfNf096uzxjLaFOmCGUyRecrAsLSNGPHjurmPKVLkIGlyvSFOManzuJrLOm0wpyMlPq+yNoLACilviYia621t8V4ouSa0ytMgXCNQnEwmW5UIXgHr+ZOQ1GmpGBXZPZyjBwfu++SeceETG1hyAkInvWT\/nPTv\/fYizXSmgB4RHQrEb0TwG4AH7fW3gFgOKaMTKmFIgCitf6wiBwLILDWjsXvsszsAbjLGPMrANBa\/6uIHA8gjJ5rbWneZuaYZpJt1tp7AKyrQigi7TBNKfWpEs+R\/CM4MMZcDaAnrlUKBVApdSYzn2+tDay1zMxVzV1EdjBzVxiGfyyYGzsarSCi+dbasA4LZJlZM\/N1QRCsB0B\/+8jZiQm7N70rYZECw1oBASo\/cMxWWpERRchEYp2d8ZRwnzT0TLul+6cASSFDb\/zgkilTsttPNX4wAUKW1eixovHykwOg6bl79875w9JMxpQSitVpqKUZmCcvOnXuVBn4osXw2eM5maBEfpV35azVbP8asvr9Tk7deuwND\/\/ZEbKUctEAQqXUahFJi0gOQJKIAOApANdaa68HsDcmPLZQIBiAJaIHReR17ub90f5TRD4FAER0P4BFdatYIiGiLxljPl9BKDSAkJmXicgtFcYEEb3ZGPPrEhojGuvzAL4gIvXMG0R0mzHmMgBDMXobIroHwFljMj1E7xVrbxcAG65YOPHw3oGdhyWIarVFIgBpYIevth0+a\/2R6CQLgKSjg6iz0z6\/vO0DE1X26kYyk2iEj8qMRxZiBUOS6t4bJD449baH1wrAFFs3SacVZTJmywXzLmvVwTcaWRr7\/EASTMEQ9E\/gNa7utYneFELohDTttHhp7g0Pry3zWAXAMPNVADpFJAsg5b4LnNUAgGcAdFhrbynGPHFNvMdpcFOl\/12qhQA0EQ3GmGhMY4sIE9HnmHmztfa7pUxe7PqT3PPCwveM5igiGsDJAH5dYYUHRaTcWOXmDQDvZeYma+15Ma0EAH0V5lgpdlBElIsobLNKAOoZ8sOWUCDxd5LK\/rFNWTCBemPxiKLOznD7hW0XTUkMXzuY87HHKqMgAkjZMQVMliwmeEEbtH\/P8+8\/dSG+\/6dNkaVY29bmUSYTbFk296NTU+E3BodD2SMSNCilB4R3TVq14b010iPih1MBrAQQElFKRF4C8CKABU4YQgCzANzMzB8XkbtF5HMjVruIu8ElunKLVti5TKeCCRfeq2LPpFjnWAAUXSs276d8HkCDsxBUIvgGEbW5+7yC5+mCzxdV4d9zHe8+cp2I+ADOZea0m5+qgyZUgkaFrKgA0gLScF1ABBBJ3g9ynVx3vwvytswNSQDO6Ooymy5ub\/Xs4Nf8rBVjtVEEJRAtzmaPGiMaU8BEVilh1ZcL\/WatDmsw\/V8hQLAhTdLRrhd0dwd\/evsp45rYXzmc80MD6xNI5ay147U6YvOFC64AgE0Xz0hJRwevTqeVlEacIle0kZmvl7wbRwB+LiIni8hCInoPgHsBKBGBW5M2Zj4qtsb7aKWGOhCVYtcmnHZM7CckKGIeEZHpAOYCeLCIlYj8wfFEdJzTzlwCRIj+P9e993CJOKIc+MA1ggEXAVhdQfiqpUl0jVduskxAk2Yl4Biryz4mwwqUUgwbhC1YCdgN+UB3i+xd3JxUkwezgSGCIskPOk6xAhjkxiMhGBYwLIwlDIVh\/hsib8gPxAOfs\/HCRVPo5swOANh22Wkzk9m9\/5cU2yqkaHxK6WxgkDWhCUyAiWy\/uuWCuRun\/WD9PWvaf6+XdnWFFehrlFJfATBb8gv\/pLPIAKCttasBrNZan2yM+SKANwLwjTFfiivSQoH4G4CJzqyoAiZrAXBk3PoSkRGRpx1TUoHL5BHR1hJ+dzTGLgDPRsxesKYGwKsBTIldH10zoRxhtNazRWRygacgLnieGLtWAEz1PO+1QRD8pYxAFGu+80WlyLt5AI6Jx2giwgBmxtydUjTZ7WjCFeZi3TU7iw0kABQIPuAHofcHy9awZQKJSBQkutFJIFYgDYASlXghTreENbM9bYWE8mqXgBAU9oben1hJVgQc6QUKiIwn0KJelYSc4MOCALIigKLmXMKbJpe39W4fCr8wPtd3BVMwjimJPmvu6w\/0vQlLl7R69Oo9QWCSkIZWLb98\/sL575hxc9eda9rb9eLiQqEAWK316621H4nx4mxmvpuZrwrD8KERxgzDB5VS14nIEhH5LoC\/xhWrjksHgBUAqICJtQtI0kS0OrYQBKBHRBa5+GCfBXSSWiwANkSkiehOY8ylZRZ9PjM\/6Hx9KcSYS2lya+189w5RvEJEtFUpda4xpktExsX2B7QxZgGAv1QJ69o8mEIvWmvnOdrE56QAiFLqGyJyhYs9uECrF40JHE3uMsZcUnUgYQwkz6ejaEIC0UooEPQeturRs+KoUcX2QwLa2wnoQoPkkhBFBAMBwnFa656Qbpi0av0HSt2+evVqteSnHRsamWYPh2IFoAQzZVOpvb19vecc3iyf7uvP+Y2ekgHRv1xz3ufPW7p0qXlmxRuvRbjrzvEJs3CPHwaNYD2Jh2\/buuyk06eu6uqOgvASyiQUkSDamXYx55tFZAkz3wlgted5D+RyuaSIfJ2ItllrP1PIt7rE4Pv45MWY0DGdFFxXdbDptCZFaE4Rn\/BFhxSMqwXDJ6LXxYQ68tk3BUHwF2beRERzJXYBES0C8N06gmUbU8ij+FREnqgVlapAk3IbfyWQHoAsaNfyk8dNPBoD2ADCnMp0jMOjVshCHGglADEBgucF4KfPPto75uSNwaibN4Bo6VLTs+zYHZp4NsgIIGQFSEKahzh1H4ayGyc0JI7e6\/NQL0380NKlS82mi2ekZl7\/u+3dyxanj1EvrWv2EodlA99PUbKxWdmfPrf8tNfRLZltBfBtZIETIvK1KNaM0TNSiOeJyHm+7w8wswUw3hhzllPko9xuXYW\/zGUCWBQEf1LtYrkJxxmqlOtBNSIvsNbOL9zIE5H1zvr9xcUNNqa5F8TctFoEotS7UxRHjWF3W8aykScAWACCkpf8BjupE7aYJakq\/Ck0LqQ8AqwMTzPUudEWPJcEoF5hLbHXsCCwL6kjb3p497pL3vqWhN5yzW7fXjfrpt9sXp1Oq5k\/yGQlnVa0KvP84xe8\/pyj1NBdTdpO7guM35Lyj2wxu+9Yne5YDHSGHQB3\/l3RhUT0PRFpL4JgKqf4Ik+lmYggIitdgL2P0qnGQlRamPj3UiOGnq2gRaXGHUoBMIWIZrtxKfastZJ3nx8QkYtHPIu8Vj4mlUpNz2azm2vcDS\/17mNi5v22u0z5QHfn5P07rq28ENJDzn0ggQiDYZCkPUYAoht\/8TSA8yMBitwgymSMpNOKbs089MyyE86czN4vWhN2+uCwn21tTJ1ymvrZDdSJCyWdVndlMl43EDDzlQAuca6pLrY+RBQCeALAC0R0vzHmy1G8WS9K8vIsWJ5rK0GLNaFdSqk5zsWK1k0TkVhrH3HfPzwSc\/7dqqSCIJi3P9NZyu1k15B+UKmXT1ATAdkxvg8J1SXaNn47QYnF+GAYBMh3LocnaSjpAO8T+2QyZk17u5616rHHHrWHnzFok0+OS+lU37CffZUOl\/csn\/dflMmYRwhBo1JvAfC1AhBo1F4TETER\/cxaO89ae24Yhl+OzVAOKoGIadKwwE2IJjtUa76QiLTF\/Ptop3g7gKcBIAiCJwFsjVkUcQz8+oMkv6sUTYp1lIPwxP07Z+fOUTk6NUnXfnolEQc\/AJjQC0sZmFL5TYu7usI17e36tFW\/fXZjouHMAZNY3+JRqi8bZCckwo8PX7xopREcGxLfmt9jl2J7MiEReUqpXzQ0NHwoFpfpWvcQioPeSu1XEhERlFIJAM0AWp1Wj3orgGal1ClE1Fil+yFu3IWx1JMoftgAYMARYwjA+sINXCI6uYxH8A9xf4gILgesGE0K+\/hSqBUVLPEzR77ZCAiU339DqV5RLOqUmnpuW9zVFUo6rdpuuH\/rDjQt6UfysXEepXqG\/TBFAx3\/e\/KMh\/wQ4xkKkFF8LC59Q3ued\/OMGTPeNTAwsCu2HVAWqNC1hKt1RGQln+u0+HIiOrcEzUREJjvURQo0OpVKZRCRuUUC6nXx3CQi+jOAc5zLFjHVCY7J+mvcj9hfLaLJO4locQU+sg5aTAP44xkuuBwl4gQKLcAID3vN9nse2L3sWCOgfdLUJA\/R2kYN7pXUU1NvWncBQdD9mgFClwsCCrVofU4UPKbaYswoprg5s6P70lPOPjo3cH9zYnhGTzZrPnxcS7MvIlc+9AIpNaLGRISFFZTW+ppcLvfpjRs31pQlrYEDGkM0AmisgOQU22EeLIGETQcwKxZQR9q\/Ow4RuyTGOEokACYDOA7AA6UCrn8QTVIAXlXl5akKjgoYpJvYnjiizGRf7W0AJJjAQdBQ+YRB\/S2ox7q4mKLthq6tcsWZZ\/X37+5uUNnG3QPD9uPHt\/CgCXBV93Z4SiQUkFZMiWTik4ODg1+P7THYsaRdHAh\/uRo\/2Thm3g7gkYK0XXJu3QkuXcTEYDertV4fH8MY86gTKo4f4GHmhQdBHFENTUzJhaZ94a7BUOxAKGYwEDtkxMT7YP5nGARiBTRY1uc5QFRZ3NUFRQB967cLzv\/Nc8kcayS15t7BIXz2xCn4xPFTJTBCjToRjGtqWeGEQdWD9h0MZ01NrKNErBdldjKAzyCfy84Fu9ew1rYVgT23+L6\/KTYOAdguIk\/F4wMHvy46SA7ymCq7VErBBhhEEqVdSDFcmAFhQnk46cBRJL\/XoPQbElr98Lfb9ugVf9hJ5Cl4itA3nJVrFrTi6vnTs4M+zu7t33VDW37\/ytQzaz4ITpLFMz1L6SBFRLsAfNha+\/0iLk2EKC0oYuCfAJCNjR9t9q0ryAkCEZ3krjMH0EpQiczaeE\/EfpYMYVkIChZNHqlmj1Szx66TGud6s0eqwSNPeVBCNO7lem0B4AV1nZA0AKaLSCY0UAlm+fHz2+myP24H65T1hOxgNiufnd+ihy+Z8xYRobXp\/CZkXYHcAVp067T9gwBuimn7TwGYFu1PuJYTkQ9aa38FYHuRAClynZIuMB75zKE294VhKDF0wXcW4TdEdFkBFx2VSCRm+r7\/9AEQCOsw84dE5AdR0lqxk3huj4NF5HEAOAOwXUUCCKWYhkX2+CFfwiTDsEzg4lqzyQCGEnsBCwHQ9lSzHGArEdE\/ycw\/stYeQYAJwSqpGLc9u9O2eszfesMk9A0Z2zMUqsMa5MqdF8ybQLdihaTTSjIZWysOdMAEwqFHj4rIt2IL3gjgmijpzuWiJKy1fU4YEhFDFwn3ZiGfjTsqhdpau5yI3lQkLBxXQAMDQIdheBLyexZ8IGgiIo+JyLdr2exbCUhnEa5lEqiQchNuf\/JnB8Nx7qAeV4noBgALAYQC0iwWgVCY0Epf+7fdd31qwdSeV6f4ot5cLuzLikxqxKU7lx8vdEvmMklDSZVFDuoQiP3vRYhIMnZYJ7DW3sjMn0E+1Tzy7YmIvigid5agaXQ++UQi4lhCV4RSzXa92n2MRQBuP4B8k4y5RmEtFTfG53NR\/h5YCyAs9Ez6pJajcNQAduwgTJlSkjkyAJYWZJPasmlsL9tuRHR097MAlrksVg8QsYAlhlasV19+Yu7Co1c9Gmxbfvz0ycnE4r6sCfqG\/XBSMrnipWXzhmjVIx+V9nYtXV2mWqHQOPAoU3zRd7hz0FfEjlVaIjqOmd9kjLm71NFREVlYkH2Lclv0RVJDorymhYWxxQGkSVjLjf0Amop8PoxmQ5mMqSe57wAQICoS8G5r7dUxPhAAwsxKa\/3N4Wz2Y98B4QiynJ3c+O7+HXvXNDeYuf1ZDvuzQXh4yn5k27ITe2lVV8fatjYP3d3BKwVlijMuORcqnptiHaNeWSE9va2IKjIFKdqF6SFhEVocD2BSQYbvK6JcTz\/GQ4hjkyUQJL\/DgjFU\/pFa0\/vqdpqiDcZ5InJjLHVfnEvNSqnP5nK5f8sfeAVWdnTgX\/77zz1bYM7uN\/rJFo90CMJANginJOxVW5a3fWRBd3ewtq3N268CYV7+mCpiwCeI6G73\/xErISJv9DxvfsGZ5PiR0TlF3klVgdjsc\/xUKXVClfRRRToDUByvo1O7b8E1dCrlmgiAkAkbMNZSWE7IKJ8wyGJJOsAYGCARjDqXjQ7kv2OMpI1byh\/MgFcVojRZKfUTImqKZ7IrpYSZP+D7\/n\/E1l+os9NKOq3m3PLktmdlwpv3Gr2p1RMdCmPYD81EPfzNze+bs2xBd3ew9vLKQqFxEBb0IqL\/AfA2F3hHwqLDMPwYgIuLHBl9jbV2UkGKBwG4B8CWMvusGkAa+TPV8ZSI1wFYU0X6RLbUmQwAOZd7jzoqltgi4EHNDjrBgiSByZgytgSrOOkIgHAun5jXbYucUhcA2HXBSL4rlAhIGAE1VMruVcycEZFXu1gQ7rO9zPx+3\/d\/FIPFZZ8Uj5symx97z+Il03jbveOTMnOPjyAVGJqo6IdPXrSg97XXrf2VtLdrKnM++2ATCAOAjDFriGgdgPmxQx9CRGkRuQrA5rh2jB0Iih8ZDa21lyKf2VpuvY9BvvJGHDWouEFHRA1KqUVF\/HwCoIwx76jRCkfKYKIrFufFi7qVAEDJ0WIgCqo5Vh5GQFDWjMljspz3usS9dWgNQqIzd7\/nuFuS2oSDmqUxx3lAImlJcixZeNM98l+TMxaRnQiZ0a9S7l3SLoQf7Soppb4jIu3ubEMkIFs9z0tns9n7ywENI0Jxe+aZx9\/3hjNI9tzbkghn9+ckSIH0kTR0x9PvmbeEbu+6v8xR1INOIOJw2zeJ6EYHNUbuUwMRfVBEPhPP9CSihTFNLC6FbTPyRQV0CQsRIRkPA1hkrZUY8853aE8pVAtENM1ae38VFoBjccxwGY0evc+5RPS2AktXtF6sO4N9PhvzEwAY398PjtW6ppHcvB11L8YgTH8LQVxSoBoMgCZl3pSz9m++hUn4gjAyin5eJ2kOGzWBgnzpQAZZWKPEJFNDAJCek5Ei6\/AJAJc7RInymTjqKWY+P5vNbqgGdYtbisff94Yl02X3b8elcPRAzvqNbBqnJPhnT73v9NPppswTpYTiH5n+TbVYCWvtHSLyYoyh2G3YrUA+NTqe7jG\/oJIGkE\/xzrrfg1jq76guIvfFkgEjekz3PO+YctGjC\/TL5RvZgrKTBKC7UrGBgpN+VC7OKBTG\/vHjEfL+SdXNOHg2tE3dvs3HCNGDAyPiMaU0U5MmNGmmfKf8TxahIKpxKbBJUjYgu62VT8+n0HSOKsgQKqXOgcjXXUlPEJFm5ge11kt8399Qw\/nyEaE4\/qb7Nm80E940KLRxXJISe43ym2AmHSm9dz5x6SlTyZXXPJhRprj2Uy757nuxYDcq\/ziZmS+MMd6U2D5DnBcersBUFgA8z1vnBEbFIE9ylTgwxsB4RMBFBFrrb1e551tNgt8+cHJ\/\/sn5snruJxHXJRtL8zAtP+jPuH9PiLUtHisR8SPvyVhYMbDGwhoro7oInDCItSxBMpnkrFXfmXZd55Ck04pi9W0BzAOwCkQWgDCR53nez1taWs7KZrMvIJ7aXmPaeNuqB55\/Dskle433TEuCEv2B8VMqN+sIv+8Xmy86cRo680dY60OZjJFYSfp4r4XRC++VcoiTtfa7zDzg0jxM7LsPRQW6lFJzrLXNzu8cSdQjou4KzCcAKJfLbUK+vpKNYFoRsSJycoW52wrMGn2vmFkB+PcgCNYV7KPUOm7Fk3MkUB4JKYjySAgS1u8Wd+QFY6Bhwoo9SPS0pHRCMZFHQh4L64IefZZgIWaQ0ppbG73k9sD+bnrv1GukA4xMxhYor6MBtIqIZWbPSySuf\/vb335+T09P\/1jS8COhmP+DR5\/bnJ2wJBfSC80eJfqzGGxJyTxt5GoCLNrbVb0WIird6EXwooPGqEqwIhW7P+HydpIVinBtBXBbvJSmQ56OdVYCInJ6LCEuKiFpjTGPVyEQypWMeSR2b8L9\/4xI6Jg54YQyUS0c6t6PADwlIhdba79aZIGTtY4b615szgCA5sSQhMDgMGjIJwwMixoKwAM76zVznbDSAZ51\/Z\/Wv+i1ntpv+ccAdmZBQ1HPxXr0+zBoKAQPEIfP9QT6y0\/wxLfS3Xfn0AmJQVbGzf8OEblSsSKt9Zey2exlmbzQjPlPH0RnKeZl\/rjpaTSfHRi9s7WZm\/b6qtdQw7UCEM7osrX69SPVLJRSc40xIxtWWms\/DMMHKpg0AiCe582z1k4yxlgXj7AxZiuADSWC3mhuE5VS8xyTx92n7QAeB3CsUmqamxcAkNZ62M1Lqnm3ZDI5M5fLzSo4XxEgf1goSKVSM4IgOCb+7tXEXMzcEwTBX124yQXjC4ATlFKHlxq3QtwmjoaPRtX7Ojo6+B2b7jmiKTFI4rNkTZI8TDDH3nzPS0RjKGkTq4X0+IrXH5Y0YdNQwNJQ+jgRDvNZ9s5M7p7Z2ZUdqa5RZj0aGxtPGhoaWrf\/jiPF5u+g1s3LTjt9UnLok88JVs65sXtdrJzNoXYAkDO80v\/UldTx560knVZVpGLzy50RUDj3Uu9SywRKlYUxNWx5Uom4op7nSkFZzXrnhSrGoDoBiEoVMng\/MIEdXa0OtHLl38dcuRIyFutQ5IVoZUd1c1452kU64H8dSjrAUfXCKv8016F2qP1zt\/8H3pWYzFCjWXUAAAAASUVORK5CYII=';\nconst MX=window.TF_MATH||{};\nfunction cardMath(c){const m=MX[c.id];return m&&m.m&&m.m.length?`<span class=\"f tfc-cm\" role=\"math\" aria-label=\"${esc(c.formula)}\">${m.m[0]}<\/span>`:`<span class=\"f\">${esc(c.formula)}<\/span>`}\nfunction mathHTML(c){const m=MX[c.id];if(!m||!m.m||!m.m.length)return `<div class=\"tfc-formula\">${esc(c.formula)}<\/div>`;\n const w=(m.w||[]).length?`<dl class=\"tfc-where\"><dt class=\"tfc-where-h\">where<\/dt>${m.w.map(x=>`<div><dt><math>${x[0].startsWith('<')?x[0]:`<mi>${esc(x[0])}<\/mi>`}<\/math><\/dt><dd>${esc(x[1])}<\/dd><\/div>`).join('')}<\/dl>`:'';\n return `<div class=\"tfc-math\" role=\"math\" aria-label=\"${esc(c.formula)}\">${m.m.join('')}${w}<\/div>`}\nlet filterGroup='All', query='';\nconst TRADES=[['Electrical','https:\/\/tradefoxapp.com\/calculators\/electrical\/'],['Gas and plumbing','https:\/\/tradefoxapp.com\/calculators\/gas-plumbing\/'],['Bricklaying','https:\/\/tradefoxapp.com\/calculators\/bricklaying\/'],['Carpentry','https:\/\/tradefoxapp.com\/calculators\/carpentry\/']];\nfunction localNav(){\n const others=TRADES.filter(t=>t[0].toLowerCase()!==D.name.toLowerCase());\n return `<nav class=\"tfc-local\" aria-label=\"Calculators\"><div class=\"tfc-wrap tfc-local-in\"><a class=\"tfc-local-title\" href=\"#\/\">${esc(D.name)} calculators<\/a><div class=\"tfc-local-links\"><a href=\"https:\/\/tradefoxapp.com\/calculators\/\">All trades<\/a>${others.map(t=>`<a href=\"${t[1]}\">${esc(t[0])}<\/a>`).join('')}<\/div><\/div><\/nav>`;\n}\n\nfunction fmt(v){\n if(!Number.isFinite(v))return '\u2014';\n if(v===0)return '0';\n const a=Math.abs(v);\n if(a>=1e9||a<1e-4){const [m,e]=v.toExponential(4).split('e');return Number(m)+' \u00d7 10'+String(Number(e)).replace(\/-\/,'\u207b').replace(\/\\d\/g,d=>'\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079'[d]);}\n return Number(v.toPrecision(6)).toLocaleString('en-GB',{maximumFractionDigits:6});\n}\nfunction title(t){try{document.title=t}catch(e){}}\n\nfunction listView(){\n const q=query.trim().toLowerCase();\n const hits=D.calcs.filter(c=>(filterGroup==='All'||c.group===filterGroup)&&(!q||(c.title+' '+c.group+' '+c.formula+' '+(c.intro||[]).join(' ')).toLowerCase().includes(q)));\n const sections=groups.map(g=>{const cs=hits.filter(c=>c.group===g);if(!cs.length)return '';return `<section class=\"tfc-group\"><h2 class=\"tfc-h2\">${esc(g)}<\/h2><div class=\"tfc-grid\">${cs.map(c=>`<a class=\"tfc-card\" href=\"#\/${encodeURIComponent(c.id)}\"><span class=\"k\">${esc(c.group)}<\/span><span class=\"t\">${esc(c.title)}<\/span>${cardMath(c)}<\/a>`).join('')}<\/div><\/section>`}).join('');\n return sections||`<p class=\"tfc-empty\">No calculators match \u201c${esc(query)}\u201d. Try a different word.<\/p>`;\n}\nfunction fitCards(){root.querySelectorAll('.tfc-cm').forEach(el=>{const m=el.querySelector('math');if(!m)return;m.style.fontSize='';const w=el.clientWidth,sw=m.getBoundingClientRect().width;if(w&&sw>w)m.style.fontSize=Math.max(11,Math.floor(17*w\/sw*0.97))+'px'})}\nwindow.addEventListener('resize',()=>fitCards());\nfunction renderList(){\n title(D.h1+' | Tradefox');\n root.innerHTML=localNav()+`<div class=\"tfc-wrap\"><a class=\"tfc-brand\" href=\"https:\/\/tradefoxapp.com\/\" aria-label=\"Tradefox home\"><img decoding=\"async\" src=\"${LOGO}\" alt=\"Tradefox\" width=\"98\" height=\"20\"><\/a>\n <header class=\"tfc-hero\"><h1 class=\"tfc-h1\">${esc(D.h1)}<span>${esc(D.sub)}<\/span><\/h1>\n <div class=\"tfc-search\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"M20 20l-3.5-3.5\"\/><\/svg>\n <input type=\"search\" id=\"tfc-q\" placeholder=\"Search ${D.calcs.length} ${esc(D.name.toLowerCase())} calculators\" aria-label=\"Search calculators\" value=\"${esc(query)}\"><\/div>\n <div class=\"tfc-chips\" role=\"toolbar\" aria-label=\"Filter by topic\">${['All',...groups].map(g=>`<button type=\"button\" class=\"tfc-chip\" data-g=\"${esc(g)}\" aria-pressed=\"${g===filterGroup}\">${esc(g)}<\/button>`).join('')}<\/div><\/header><\/div>\n <div class=\"tfc-band\"><div class=\"tfc-wrap\" id=\"tfc-list\">${listView()}<\/div><\/div>`;\n const input=root.querySelector('#tfc-q');\n input.addEventListener('input',()=>{query=input.value;(root.querySelector('#tfc-list').innerHTML=listView(),fitCards())});\n root.querySelectorAll('.tfc-chip').forEach(b=>b.addEventListener('click',()=>{filterGroup=b.dataset.g;root.querySelectorAll('.tfc-chip').forEach(x=>x.setAttribute('aria-pressed',String(x===b)));(root.querySelector('#tfc-list').innerHTML=listView(),fitCards())}));\n fitCards();\n}\n\nfunction fieldHTML(f){\n const id='tfc-f-'+f.key, unit=f.units&&f.units.length>1\n  ?`<select id=\"${id}-u\" aria-label=\"${esc(f.label)} unit\">${f.units.map(u=>`<option${u===f.unit?' selected':''}>${esc(u)}<\/option>`).join('')}<\/select>`\n  :(f.unit?`<span class=\"tfc-unit\">${esc(f.unit)}<\/span>`:'');\n return `<div class=\"tfc-field\"><label for=\"${id}\">${esc(f.label)}<\/label><div class=\"tfc-row\"><input id=\"${id}\" inputmode=\"decimal\" autocomplete=\"off\" placeholder=\"e.g. ${esc(f.example)}\">${unit}<\/div><\/div>`;\n}\nfunction renderDetail(c){\n title(c.title+' calculator | Tradefox');\n const info=[];\n if(c.notes)info.push(`<section><h3>Good to know<\/h3><p>${esc(c.notes)}<\/p><\/section>`);\n if(c.mistake)info.push(`<section><h3>Common mistake<\/h3><p>${esc(c.mistake)}<\/p><\/section>`);\n if(c.limits)info.push(`<section><h3>Limits<\/h3><p>${esc(c.limits)}<\/p><\/section>`);\n if(c.sources&&c.sources.length)info.push(`<section><h3>Sources<\/h3><ul>${c.sources.map(s=>s.url?`<li><a href=\"${esc(s.url)}\" target=\"_blank\" rel=\"noopener\">${esc(s.title)}<\/a><\/li>`:`<li>${esc(s.title)}<\/li>`).join('')}<\/ul><\/section>`);\n const ix=D.calcs.indexOf(c),prev=D.calcs[ix-1],next=D.calcs[ix+1];\n root.innerHTML=localNav()+`<div class=\"tfc-wrap tfc-detail\"><a class=\"tfc-back\" href=\"#\/\">\u2039 All ${esc(D.name.toLowerCase())} calculators<\/a>\n <div style=\"margin-top:22px\"><p class=\"tfc-eyebrow\">${esc(c.group)}<\/p><h1 class=\"tfc-title\">${esc(c.title)}<\/h1>${mathHTML(c)}\n ${(c.intro||[]).length?`<div class=\"tfc-intro\">${c.intro.map(p=>`<p>${esc(p)}<\/p>`).join('')}<\/div>`:''}<\/div>\n <div class=\"tfc-layout\"><form class=\"tfc-panel\" id=\"tfc-form\" novalidate>${c.fields.map(fieldHTML).join('')}\n  <div class=\"tfc-actions\"><button class=\"tfc-btn\" type=\"submit\">Calculate<\/button><button class=\"tfc-link\" type=\"button\" id=\"tfc-ex\">Use example values<\/button><button class=\"tfc-link\" type=\"button\" id=\"tfc-clear\">Clear<\/button><\/div>\n  <p class=\"tfc-error\" id=\"tfc-err\" role=\"alert\"><\/p><\/form>\n  <div class=\"tfc-results\" id=\"tfc-res\" aria-live=\"polite\"><p class=\"tfc-wait\">Enter your values to see the result.<\/p><\/div><\/div>\n ${info.length?`<div class=\"tfc-info\">${info.join('')}<\/div>`:''}\n <nav class=\"tfc-pager\" aria-label=\"More calculators\">${prev?`<a class=\"tfc-prev\" href=\"#\/${encodeURIComponent(prev.id)}\"><span>Previous<\/span>\u2039 ${esc(prev.title)}<\/a>`:'<span><\/span>'}<a class=\"tfc-all\" href=\"#\/\">All ${esc(D.name.toLowerCase())} calculators<\/a>${next?`<a class=\"tfc-next\" href=\"#\/${encodeURIComponent(next.id)}\"><span>Next<\/span>${esc(next.title)} \u203a<\/a>`:'<span><\/span>'}<\/nav>\n <p class=\"tfc-foot\">${esc(D.disclaimer||'Results are arithmetic from the formula shown. They do not replace manufacturer instructions, regulations, design calculations or inspection and testing by a competent person.')}<\/p><\/div>`;\n const form=root.querySelector('#tfc-form'), err=root.querySelector('#tfc-err'), res=root.querySelector('#tfc-res');\n let example=false, touched=false;\n function read(strict){\n  const vals={};\n  for(const f of c.fields){\n   const el=root.querySelector('#tfc-f-'+f.key), u=root.querySelector('#tfc-f-'+f.key+'-u');\n   const raw=el.value.trim().replace(\/,\/g,'');\n   el.removeAttribute('aria-invalid');\n   if(raw===''){if(strict){el.setAttribute('aria-invalid','true');throw Error('Enter a value for '+f.label.toLowerCase()+'.')}return null}\n   if(!\/^[+-]?(\\d+\\.?\\d*|\\.\\d+)(e[+-]?\\d+)?$\/i.test(raw)){el.setAttribute('aria-invalid','true');throw Error(f.label+': enter a number, using a decimal point.')}\n   vals[f.key]={value:Number(raw),unit:u?u.value:f.unit};\n  }\n  return vals;\n }\n function show(strict){\n  err.textContent='';\n  let vals;\n  try{vals=read(strict)}catch(e){if(strict||touched)err.textContent=e.message;return}\n  if(!vals){res.innerHTML='<p class=\"tfc-wait\">Enter your values to see the result.<\/p>';return}\n  try{\n   const r=D.run(c,vals);\n   res.innerHTML=(example?'<span class=\"tfc-tag\">Example values<\/span>':'')+r.outputs.map(o=>`<div class=\"tfc-out\"><p class=\"lbl\">${esc(o.label)}<\/p><div class=\"tfc-num\">${esc(fmt(o.value))}${o.unit?`<small>${esc(o.unit)}<\/small>`:''}<\/div>${o.pct?`<span class=\"tfc-pct\">${esc(fmt(o.value*100))}%<\/span>`:''}<\/div>`).join('')\n    +(r.notice?`<p class=\"tfc-notice\">${esc(r.notice)}<\/p>`:'')\n    +(r.working?`<details class=\"tfc-work\"><summary>Show the working<\/summary><pre>${esc(r.working)}<\/pre><\/details>`:'');\n  }catch(e){err.textContent=e.message;res.innerHTML='<p class=\"tfc-wait\">Check the values above.<\/p>'}\n }\n form.addEventListener('submit',e=>{e.preventDefault();touched=true;show(true)});\n form.addEventListener('input',()=>{example=false;show(false)});\n form.addEventListener('change',()=>show(false));\n root.querySelector('#tfc-ex').addEventListener('click',()=>{c.fields.forEach(f=>{root.querySelector('#tfc-f-'+f.key).value=f.example;const u=root.querySelector('#tfc-f-'+f.key+'-u');if(u)u.value=f.unit});example=true;show(true)});\n root.querySelector('#tfc-clear').addEventListener('click',()=>{form.reset();example=false;touched=false;err.textContent='';show(false)});\n}\nfunction route(){\n const id=decodeURIComponent((location.hash.match(\/^#\\\/(.+)$\/)||[])[1]||'');\n if(id&&byId[id]){renderDetail(byId[id]);root.scrollIntoView({block:'start'})}else renderList();\n}\nwindow.addEventListener('hashchange',route);route();\n})();\n\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":27953,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-27957","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Carpentry calculators - Tradefox | Construction Training Online<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tradefoxapp.com\/fr\/calculators\/carpentry\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Carpentry calculators - Tradefox | Construction Training Online\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tradefoxapp.com\/fr\/calculators\/carpentry\/\" \/>\n<meta property=\"og:site_name\" content=\"Tradefox | Construction Training Online\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61561067514381\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-09T15:56:39+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@Tradefox_app\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/carpentry\\\/\",\"url\":\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/carpentry\\\/\",\"name\":\"Carpentry calculators - Tradefox | Construction Training Online\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#website\"},\"datePublished\":\"2026-11-09T15:09:43+00:00\",\"dateModified\":\"2026-11-09T15:56:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/carpentry\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/carpentry\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/carpentry\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/tradefoxapp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculators\",\"item\":\"https:\\\/\\\/tradefoxapp.com\\\/calculators\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Carpentry calculators\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#website\",\"url\":\"https:\\\/\\\/tradefoxapp.com\\\/\",\"name\":\"Tradefox | Construction Training Online\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tradefoxapp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#organization\",\"name\":\"Tradefox | Construction Training Online\",\"url\":\"https:\\\/\\\/tradefoxapp.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/tradefoxapp.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/logo-transperent.png\",\"contentUrl\":\"https:\\\/\\\/tradefoxapp.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/logo-transperent.png\",\"width\":1024,\"height\":208,\"caption\":\"Tradefox | Construction Training Online\"},\"image\":{\"@id\":\"https:\\\/\\\/tradefoxapp.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61561067514381\",\"https:\\\/\\\/x.com\\\/Tradefox_app\",\"https:\\\/\\\/www.instagram.com\\\/tradefoxapp\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/tradefox-ltd\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Carpentry calculators - Tradefox | Construction Training Online","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tradefoxapp.com\/fr\/calculators\/carpentry\/","og_locale":"fr_FR","og_type":"article","og_title":"Carpentry calculators - Tradefox | Construction Training Online","og_url":"https:\/\/tradefoxapp.com\/fr\/calculators\/carpentry\/","og_site_name":"Tradefox | Construction Training Online","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61561067514381","article_modified_time":"2026-11-09T15:56:39+00:00","twitter_card":"summary_large_image","twitter_site":"@Tradefox_app","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/tradefoxapp.com\/calculators\/carpentry\/","url":"https:\/\/tradefoxapp.com\/calculators\/carpentry\/","name":"Carpentry calculators - Tradefox | Construction Training Online","isPartOf":{"@id":"https:\/\/tradefoxapp.com\/#website"},"datePublished":"2026-11-09T15:09:43+00:00","dateModified":"2026-11-09T15:56:39+00:00","breadcrumb":{"@id":"https:\/\/tradefoxapp.com\/calculators\/carpentry\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tradefoxapp.com\/calculators\/carpentry\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tradefoxapp.com\/calculators\/carpentry\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tradefoxapp.com\/"},{"@type":"ListItem","position":2,"name":"Calculators","item":"https:\/\/tradefoxapp.com\/calculators\/"},{"@type":"ListItem","position":3,"name":"Carpentry calculators"}]},{"@type":"WebSite","@id":"https:\/\/tradefoxapp.com\/#website","url":"https:\/\/tradefoxapp.com\/","name":"Tradefox | Formation en construction en ligne","description":"","publisher":{"@id":"https:\/\/tradefoxapp.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tradefoxapp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/tradefoxapp.com\/#organization","name":"Tradefox | Formation en construction en ligne","url":"https:\/\/tradefoxapp.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/tradefoxapp.com\/#\/schema\/logo\/image\/","url":"https:\/\/tradefoxapp.com\/wp-content\/uploads\/2026\/03\/logo-transperent.png","contentUrl":"https:\/\/tradefoxapp.com\/wp-content\/uploads\/2026\/03\/logo-transperent.png","width":1024,"height":208,"caption":"Tradefox | Construction Training Online"},"image":{"@id":"https:\/\/tradefoxapp.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61561067514381","https:\/\/x.com\/Tradefox_app","https:\/\/www.instagram.com\/tradefoxapp\/","https:\/\/www.linkedin.com\/company\/tradefox-ltd\/"]}]}},"_links":{"self":[{"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/pages\/27957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/comments?post=27957"}],"version-history":[{"count":4,"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/pages\/27957\/revisions"}],"predecessor-version":[{"id":27971,"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/pages\/27957\/revisions\/27971"}],"up":[{"embeddable":true,"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/pages\/27953"}],"wp:attachment":[{"href":"https:\/\/tradefoxapp.com\/fr\/wp-json\/wp\/v2\/media?parent=27957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}