{"title":"Fox 2.5 Coilovers \u0026amp; Shocks","description":"\u003cp\u003eFox 2.5 Performance and Performance Elite Series coilover shock absorbers and rear shocks — remote reservoir and DSC adjustable damping for Hilux N70\/N80 and Ford Ranger PX1\/PX2. Premium big-bore performance for serious touring and off-road use.\u003c\/p\u003e","products":[{"product_id":"fox-2-5-front-coilovers-hilux","title":"Fox 2.5 Performance Series Front Coilover Pair (2-3in Lift) — Hilux N70\/N80","description":"\u003cp\u003e\u003cspan\u003eFOX 2.5 Performance Series Front Coilovers – 2–3” Lift Kit\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eTake your Hilux to the next level with the FOX 2.5 Performance Series front coilovers. Designed specifically for 2015–2025 GUN Hilux models, these coilovers don’t just add lift — they transform the way your ute drives. Whether you’re tackling tough tracks, cruising the highway, or towing a load, FOX suspension delivers the control, comfort, and durability your Hilux deserves.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eWhy Choose FOX 2.5 Coilovers?\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003ePurpose-Built for Hilux – Tuned damping for the perfect balance of everyday drivability and serious off-road performance.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e2–3” Adjustable Lift – Achieve a leveled stance, improved clearance, and room for bigger wheels and tyres.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eHeavy-Duty 2.5” Shock Body – Increased oil volume keeps temperatures in check for consistent, fade-free performance.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003ePremium Build Quality – Type II anodized aluminum construction resists corrosion while shedding heat in demanding conditions.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eProven FOX Technology – Internal Floating Piston (IFP) design eliminates cavitation and maximises shock life.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eNo Hassle Fitment – 100% bolt-on kit with no cutting or welding required.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cspan\u003eThe Payoff\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eA smoother, more confident ride on and off-road\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBetter control under load, in rough terrain, or at speed\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eExtra clearance for tyres and suspension travel without compromising reliability\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eBring race-proven FOX suspension technology to your Hilux and feel the difference every time you hit the road or the dirt.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock — a $80 shipping charge applies.\u003c\/p\u003e\n\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Tell us what's fitted up front (and out back — some of it transfers forward) and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51828427161903,"sku":null,"price":3200.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Screenshot2025-09-01at7.00.55pm.png?v=1756718537"},{"product_id":"fox-2-5-performance-series-ifp-rear-shock-hilux-n70-n80","title":"Fox 2.5 Performance Series IFP Rear Shock Pair — Hilux N70\/N80","description":"\u003cp\u003eFox 2.5 Performance Series IFP rear shocks for the Toyota Hilux — fits both N70 and N80. Internal floating piston (IFP) design for consistent damping under load and heat, in the 0-2in lift range to suit our 2in and 3in setups.\u003c\/p\u003e\n\u003cp\u003eLarger 2.5in body than the factory shock gives more oil volume and better heat dissipation for touring and off-road use. \u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping is automatically calculated at checkout for this big, heavy 2.5in body shock pair.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock rear axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e. Tell us what's fitted and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eRear Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eEstimated Rear Duty Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested duty tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. rear axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rear-weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n    This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003evehicle\u003c\/strong\u003e's rated rear axle capacity\n    (\u003cstrong id=\"gvm-warn-cap\"\u003ekg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n    might be the better fix.\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003e\n    Your setup calculates lighter than this shock's typical build range. Nothing wrong running it under-loaded, but if you're chasing the plushest possible daily ride, talk to us about a lighter duty tier instead.\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var rangeWarn=document.getElementById('range-warn');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=0+added.frontKg;var rateRaw=0;var rearMaxKg=REAR_MAX_KG;curTotalRearKg=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,curTotalRearKg);var rearSpan=rearMaxKg-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;curRearTier=REAR_TIERS[tierIndex];tierValueEl.textContent=curRearTier.code;tierFullEl.textContent=curRearTier.full;rearWeightEl.textContent=Math.round(curTotalRearKg);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curRearTier.code);});if(curTotalRearKg\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=('Hilux N70\/N80');gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nrangeWarn.classList.toggle('show',tierIndex===0\u0026\u0026added.rearKg\u003c10);batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Rear Duty Tier: '+document.getElementById('tier-value').textContent+' ('+document.getElementById('tier-full').textContent+')');lines.push('Est. Rear Axle Load: '+document.getElementById('rear-weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Default","offer_id":58237316432175,"sku":"987-24-071","price":1466.76,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/987-24-071-white.jpg?v=1785124796"},{"product_id":"fox-2-5-performance-elite-dsc-front-coilover-pair-ford-ranger-px1-px2","title":"Fox 2.5 Performance Elite DSC Front Coilover Pair — Ford Ranger PX1\/PX2","description":"\u003cp\u003eFox Performance Elite 2.5 DSC front coilovers, 2-3in lift range, sold as a pair. Fits Ford Ranger PX1\/PX2.\u003c\/p\u003e\n\u003cp\u003eThis is Fox's premium Elite DSC tier — there's no plain \"Performance Series\" 2.5in option available for the PX1\/PX2 platform, so this is the entry point for a 2.5in Fox setup on this vehicle. DSC (Dual Speed Compression) adjustment lets you fine-tune low- and high-speed compression damping independently for touring vs technical off-road work.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eFox 2.5 Elite DSC Front Coilover Calculator — Cubby House Fabworks\u003c\/title\u003e\n\u003cstyle\u003e\n\n  .chf-calc {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    .chf-calc {\n      --bg: #14161a;\n      --panel: #1c1f26;\n      --panel-2: #21242c;\n      --border: #33373f;\n      --border-strong: #454a54;\n      --text: #f0ede6;\n      --text-dim: #a9acb3;\n      --text-faint: #6f727a;\n      --accent: #e8842d;\n      --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14);\n      --accent-soft-strong: rgba(232, 132, 45, 0.26);\n      --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5);\n      --track: #2a2e36;\n      --focus: #f0ede6;\n    }\n  }\n\n  .chf-calc[data-theme=\"dark\"] {\n    --bg: #14161a;\n    --panel: #1c1f26;\n    --panel-2: #21242c;\n    --border: #33373f;\n    --border-strong: #454a54;\n    --text: #f0ede6;\n    --text-dim: #a9acb3;\n    --text-faint: #6f727a;\n    --accent: #e8842d;\n    --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14);\n    --accent-soft-strong: rgba(232, 132, 45, 0.26);\n    --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5);\n    --track: #2a2e36;\n    --focus: #f0ede6;\n  }\n\n  .chf-calc[data-theme=\"light\"] {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc {\n    background: var(--bg);\n    color: var(--text);\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    padding: 40px 16px 64px;\n    border-radius: 6px;\n  }\n\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n\n  .eyebrow {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--accent);\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n  .eyebrow::before {\n    content: \"\";\n    width: 16px;\n    height: 1.5px;\n    background: var(--accent);\n    display: inline-block;\n  }\n\n  .chf-calc h1 {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.01em;\n    font-size: clamp(28px, 6vw, 38px);\n    line-height: 1.05;\n    margin: 0 0 10px;\n    text-wrap: balance;\n    color: var(--text);\n    background: none;\n    border: none;\n    box-shadow: none;\n  }\n\n  .lede {\n    font-size: 15px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    max-width: 54ch;\n    margin: 0 0 28px;\n  }\n  .lede strong { color: var(--text); font-weight: 600; }\n\n  .chf-calc section.card {\n    background: var(--panel);\n    border: 1px solid var(--border);\n    border-radius: 4px;\n    padding: 22px 22px 24px;\n    margin-bottom: 16px;\n  }\n\n  .card-title {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    font-size: 13px;\n    color: var(--text-dim);\n    margin: 0 0 4px;\n  }\n  .card-sub {\n    font-size: 13px;\n    color: var(--text-faint);\n    margin: 0 0 16px;\n    line-height: 1.5;\n  }\n\n  \/* segmented control *\/\n  .seg {\n    display: grid;\n    grid-auto-flow: column;\n    grid-auto-columns: 1fr;\n    gap: 6px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px;\n  }\n  .seg.wide-2 { grid-auto-columns: 1fr; }\n  .seg label {\n    position: relative;\n    text-align: center;\n    padding: 9px 8px;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: var(--text-dim);\n    border-radius: 2px;\n    cursor: pointer;\n    user-select: none;\n    transition: background 0.15s ease, color 0.15s ease;\n    line-height: 1.3;\n  }\n  .seg label .kg {\n    display: block;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-weight: 400;\n    font-size: 10.5px;\n    color: var(--text-faint);\n    margin-top: 2px;\n  }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label,\n  .seg label.checked {\n    background: var(--accent);\n    color: var(--accent-ink);\n  }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n\n  \/* accessory rows with toggle *\/\n  .rows { display: flex; flex-direction: column; }\n  .row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    padding: 13px 0;\n    border-top: 1px solid var(--border);\n  }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n\n  .switch {\n    position: relative;\n    width: 42px;\n    height: 24px;\n    flex: none;\n  }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track {\n    position: absolute;\n    inset: 0;\n    background: var(--track);\n    border: 1px solid var(--border-strong);\n    border-radius: 999px;\n    transition: background 0.15s ease, border-color 0.15s ease;\n  }\n  .switch .thumb {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    background: var(--panel);\n    box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n    transition: transform 0.18s cubic-bezier(.4,0,.2,1);\n  }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n\n  \/* gauge *\/\n  .gauge-card { padding-bottom: 26px; }\n  .readout {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 10px 20px;\n    margin-bottom: 20px;\n  }\n  .readout-main .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-main .value {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n    font-variant-numeric: tabular-nums;\n  }\n  .readout-main .value .unit {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 17px;\n    color: var(--text-dim);\n    margin-left: 4px;\n  }\n  .readout-sub { text-align: right; }\n  .readout-sub .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-sub .value {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 20px;\n    font-weight: 500;\n    color: var(--text);\n    font-variant-numeric: tabular-nums;\n  }\n\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track {\n    position: relative;\n    height: 8px;\n    border-radius: 999px;\n    background: var(--track);\n    border: 1px solid var(--border);\n    overflow: visible;\n  }\n  .scale-fill {\n    position: absolute;\n    top: -1px; bottom: -1px; left: -1px;\n    border-radius: 999px;\n    background: linear-gradient(90deg, var(--ok), var(--accent));\n    width: 0%;\n    transition: width 0.35s cubic-bezier(.4,0,.2,1);\n  }\n  .scale-needle {\n    position: absolute;\n    top: 50%;\n    left: 0%;\n    width: 3px;\n    height: 26px;\n    background: var(--text);\n    border-radius: 2px;\n    transform: translate(-50%, -50%);\n    transition: left 0.35s cubic-bezier(.4,0,.2,1);\n    box-shadow: 0 2px 5px var(--needle-shadow);\n  }\n  .scale-needle::after {\n    content: \"\";\n    position: absolute;\n    left: 50%;\n    top: -6px;\n    width: 9px;\n    height: 9px;\n    background: var(--text);\n    border-radius: 50%;\n    transform: translateX(-50%);\n  }\n  .ticks {\n    display: flex;\n    justify-content: space-between;\n    margin-top: 10px;\n  }\n  .ticks span {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    font-weight: 500;\n    color: var(--text-faint);\n    position: relative;\n    font-variant-numeric: tabular-nums;\n  }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n\n  .stock-flag {\n    position: absolute;\n    top: -22px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 10px;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    left: 0%;\n    transform: translateX(-50%);\n    white-space: nowrap;\n  }\n\n  \/* lift height *\/\n  .lift-note {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n  }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n\n  \/* methodology disclosure *\/\n  .chf-calc details.method {\n    background: transparent;\n    border: 1px dashed var(--border-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n  }\n  details.method summary {\n    cursor: pointer;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: var(--text-dim);\n    list-style: none;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n  details.method summary::-webkit-details-marker { display: none; }\n  details.method summary::before {\n    content: \"+\";\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-size: 15px;\n    color: var(--accent);\n    width: 14px;\n  }\n  details.method[open] summary::before { content: \"–\"; }\n  .method-body {\n    margin-top: 12px;\n    font-size: 13px;\n    line-height: 1.6;\n    color: var(--text-dim);\n  }\n  .method-body table { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 12.5px; }\n  .method-body th, .method-body td {\n    text-align: left;\n    padding: 6px 8px 6px 0;\n    border-bottom: 1px solid var(--border);\n  }\n  .method-body th { color: var(--text-faint); font-weight: 500; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; }\n  .method-body td.num { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-variant-numeric: tabular-nums; color: var(--text); }\n\n  .foot-note {\n    font-size: 12px;\n    color: var(--text-faint);\n    line-height: 1.6;\n    margin-top: 18px;\n    padding-top: 16px;\n    border-top: 1px solid var(--border);\n  }\n\n  \/* philosophy callout *\/\n  .callout {\n    display: flex;\n    gap: 12px;\n    align-items: flex-start;\n    background: var(--accent-soft);\n    border: 1px solid var(--accent-soft-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n    margin: 0 0 28px;\n  }\n  .callout .mark {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 20px;\n    color: var(--accent);\n    line-height: 1.2;\n    flex: none;\n  }\n  .callout p {\n    margin: 0;\n    font-size: 13.5px;\n    line-height: 1.55;\n    color: var(--text);\n  }\n  .callout strong { color: var(--accent); }\n\n  \/* section divider between front and rear *\/\n  .divider {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin: 36px 0 20px;\n  }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n\n  .num-field {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px 4px 4px 14px;\n  }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input {\n    width: 90px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 15px;\n    font-weight: 500;\n    color: var(--text);\n    background: var(--panel);\n    border: 1px solid var(--border-strong);\n    border-radius: 2px;\n    padding: 8px 10px;\n    text-align: right;\n    font-variant-numeric: tabular-nums;\n  }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 12px;\n    color: var(--text-faint);\n    padding-right: 12px;\n  }\n\n  .gvm-warn {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n    display: none;\n  }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n\n  .tier-name {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n  }\n  .tier-full {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 15px;\n    color: var(--text-dim);\n    margin-top: 6px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .scale-fill, .scale-needle { transition: none; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in your front tier.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Ford Ranger PX1\/PX2's stock front axle sits around \u003cstrong\u003e1185kg\u003c\/strong\u003e and runs an \u003cstrong\u003eLD\u003c\/strong\u003e tier. Every kilo\n    you bolt on shifts that — but only the fraction that actually lands on the\n    front axle. Tell us what's fitted and we'll work out the rest, then attach it to your order.\n  \u003c\/p\u003e\n\n  \u003cdiv class=\"callout\" id=\"chf-nudge-banner\"\u003e\n    \u003cspan class=\"mark\"\u003e!\u003c\/span\u003e\n    \u003cp id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the\n    odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys\n    a daily-driven brick just so it's ready for a trip it takes twice a summer. If your\n    heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eGuide only — this coilover is matched to your order, not sold as a separate SKU by height.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Lift height\"\u003e\n      \u003cinput type=\"radio\" name=\"lift\" id=\"lift-2\" value=\"2in\" checked\u003e\n      \u003clabel for=\"lift-2\"\u003e2in\u003cspan class=\"kg\"\u003e50mm\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"lift\" id=\"lift-3\" value=\"3in\"\u003e\n      \u003clabel for=\"lift-3\"\u003e3in\u003cspan class=\"kg\"\u003e75mm\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"lift-note\" id=\"lift-note\"\u003e\n      We only build 2in and 3in kits. Nothing above 3in: past that, ride quality falls off fast for no real gain, and that's not what we build.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-brush\" value=\"7\"\u003e\n        \u003clabel for=\"bar-brush\"\u003eBrush bar\u003cspan class=\"kg\"\u003e~7kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eOverall Build Weight\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, tools, general load — sits mostly behind the cab, so only a small share reaches the front axle.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Overall build weight\"\u003e\n      \u003cinput type=\"radio\" name=\"build\" id=\"build-stock\" value=\"0\" checked\u003e\n      \u003clabel for=\"build-stock\"\u003eStock\u003cspan class=\"kg\"\u003etub, no load\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"build\" id=\"build-mod\" value=\"100\"\u003e\n      \u003clabel for=\"build-mod\"\u003eModerate\u003cspan class=\"kg\"\u003ecanopy + tools, ~100kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"build\" id=\"build-heavy\" value=\"200\"\u003e\n      \u003clabel for=\"build-heavy\"\u003eHeavy\u003cspan class=\"kg\"\u003etray + full kit, ~200kg\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n\u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e1180\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cspan class=\"stock-flag\" id=\"stock-flag\" style=\"left:0%;\"\u003estock\u003c\/span\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n\n\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1185;var FRONT_BASE_LB=600;var FRONT_CAL_KG = 152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00},winch:{front:1.00},spotlights:{total:3,front:1.00},battery:{total:20,front:0.90},bash:{total:15,front:0.75},sliders:{total:40,front:0.35},build:{front:0.20}};var barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var buildInputs=document.querySelectorAll('input[name=\"build\"]');var liftInputs=document.querySelectorAll('input[name=\"lift\"]');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var liftNote=document.getElementById('lift-note');var batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');var touched=false;var nudgeBanner=document.getElementById('chf-nudge-banner');var nudgeText=document.getElementById('chf-nudge-text');function toggleNudge(){if(!nudgeBanner||!nudgeText)return;if(touched){nudgeText.textContent=\"Thanks — we've got your setup details.\";}else{nudgeText.textContent=\"Please fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\";}}function checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction checkedStr(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return list[i].value;return'';}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=checkedVal(buildInputs);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;if(sliders.checked)frontKg+=FRAC.sliders.total*FRAC.sliders.front;if(spotlights.checked)frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;if(bash.checked)frontKg+=FRAC.bash.total*FRAC.bash.front;if(battery.checked)frontKg+=FRAC.battery.total*FRAC.battery.front;return frontKg;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);var buildLabel=label(buildInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');if(buildLabel\u0026\u0026buildLabel!=='Stock')parts.push('Build: '+buildLabel);return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction update(){var frontKgAdded=computeAdded();var totalFrontKg=FRONT_STOCK_KG+frontKgAdded;var rateRaw=FRONT_BASE_LB+frontKgAdded*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var tier=TIERS[TIERS.length-1];for(var i=0;i\u003cTIERS.length;i++){if(rateRaw\u003cTIERS[i].max){tier=TIERS[i];break;}}\ntierValueEl.textContent=tier.code;tierFullEl.textContent=tier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===tier.code);});var lift=checkedStr(liftInputs)||'2in';if(lift==='2in'){liftNote.innerHTML='We only build 2in and 3in kits. Nothing above 3in: past that, ride quality falls off fast for no real gain, and that\\'s not what we build.';liftNote.classList.remove('warn');}else{liftNote.innerHTML='3in is the top of our range. We stop here on purpose: taller than this and ride quality drops off fast for no real gain, and chasing stance over how the ute actually drives isn\\'t what we're about.';liftNote.classList.add('warn');}\nbatteryNote.classList.toggle('show',battery.checked);syncToShopify(tier,totalFrontKg,lift);}\nfunction syncToShopify(tier,frontKg,lift){var forms=document.querySelectorAll('form[action*=\"\/cart\/add\"]');var props={'Suggested Front Duty Tier':tier.code+' ('+tier.full+')','Est. Front Axle Load':Math.round(frontKg)+'kg','Lift Height Chasing':lift,'Accessories Fitted':accessorySummary(),'Extra Battery Preload Needed':battery.checked?'Yes':'No'};forms.forEach(function(form){Object.keys(props).forEach(function(name){var selector='input[name=\"properties['+name+']\"]';var input=form.querySelector(selector);if(!input){input=document.createElement('input');input.type='hidden';input.name='properties['+name+']';form.appendChild(input);}\ninput.value=props[name];});});}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(buildInputs),[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});toggleNudge();update();})();\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237364764975,"sku":"883-06-239","price":5331.55,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-06-239-white.jpg?v=1785121980"},{"product_id":"fox-2-5-performance-elite-dsc-rear-shock-pair-ford-ranger-px1-px2","title":"Fox 2.5 Performance Elite DSC Rear Shock Pair — Ford Ranger PX1\/PX2","description":"\u003cp\u003eFox Performance Elite 2.5 DSC rear shocks, 0-2in lift range, sold as a pair. Fits Ford Ranger PX1\/PX2.\u003c\/p\u003e\n\u003cp\u003eThis is Fox's premium Elite DSC tier — there's no plain \"Performance Series\" 2.5in option available for the PX1\/PX2 platform, so this is the entry point for a 2.5in Fox setup on this vehicle. DSC (Dual Speed Compression) adjustment lets you fine-tune low- and high-speed compression damping independently for touring vs technical off-road work.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eFox 2.5 Elite DSC Rear Shock Calculator — Cubby House Fabworks\u003c\/title\u003e\n\u003cstyle\u003e\n\n  .chf-calc {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    .chf-calc {\n      --bg: #14161a;\n      --panel: #1c1f26;\n      --panel-2: #21242c;\n      --border: #33373f;\n      --border-strong: #454a54;\n      --text: #f0ede6;\n      --text-dim: #a9acb3;\n      --text-faint: #6f727a;\n      --accent: #e8842d;\n      --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14);\n      --accent-soft-strong: rgba(232, 132, 45, 0.26);\n      --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5);\n      --track: #2a2e36;\n      --focus: #f0ede6;\n    }\n  }\n\n  .chf-calc[data-theme=\"dark\"] {\n    --bg: #14161a;\n    --panel: #1c1f26;\n    --panel-2: #21242c;\n    --border: #33373f;\n    --border-strong: #454a54;\n    --text: #f0ede6;\n    --text-dim: #a9acb3;\n    --text-faint: #6f727a;\n    --accent: #e8842d;\n    --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14);\n    --accent-soft-strong: rgba(232, 132, 45, 0.26);\n    --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5);\n    --track: #2a2e36;\n    --focus: #f0ede6;\n  }\n\n  .chf-calc[data-theme=\"light\"] {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc {\n    background: var(--bg);\n    color: var(--text);\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    padding: 40px 16px 64px;\n    border-radius: 6px;\n  }\n\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n\n  .eyebrow {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--accent);\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n  .eyebrow::before {\n    content: \"\";\n    width: 16px;\n    height: 1.5px;\n    background: var(--accent);\n    display: inline-block;\n  }\n\n  .chf-calc h1 {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.01em;\n    font-size: clamp(28px, 6vw, 38px);\n    line-height: 1.05;\n    margin: 0 0 10px;\n    text-wrap: balance;\n    color: var(--text);\n    background: none;\n    border: none;\n    box-shadow: none;\n  }\n\n  .lede {\n    font-size: 15px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    max-width: 54ch;\n    margin: 0 0 28px;\n  }\n  .lede strong { color: var(--text); font-weight: 600; }\n\n  .chf-calc section.card {\n    background: var(--panel);\n    border: 1px solid var(--border);\n    border-radius: 4px;\n    padding: 22px 22px 24px;\n    margin-bottom: 16px;\n  }\n\n  .card-title {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    font-size: 13px;\n    color: var(--text-dim);\n    margin: 0 0 4px;\n  }\n  .card-sub {\n    font-size: 13px;\n    color: var(--text-faint);\n    margin: 0 0 16px;\n    line-height: 1.5;\n  }\n\n  \/* segmented control *\/\n  .seg {\n    display: grid;\n    grid-auto-flow: column;\n    grid-auto-columns: 1fr;\n    gap: 6px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px;\n  }\n  .seg.wide-2 { grid-auto-columns: 1fr; }\n  .seg label {\n    position: relative;\n    text-align: center;\n    padding: 9px 8px;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: var(--text-dim);\n    border-radius: 2px;\n    cursor: pointer;\n    user-select: none;\n    transition: background 0.15s ease, color 0.15s ease;\n    line-height: 1.3;\n  }\n  .seg label .kg {\n    display: block;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-weight: 400;\n    font-size: 10.5px;\n    color: var(--text-faint);\n    margin-top: 2px;\n  }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label,\n  .seg label.checked {\n    background: var(--accent);\n    color: var(--accent-ink);\n  }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n\n  \/* accessory rows with toggle *\/\n  .rows { display: flex; flex-direction: column; }\n  .row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    padding: 13px 0;\n    border-top: 1px solid var(--border);\n  }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n\n  .switch {\n    position: relative;\n    width: 42px;\n    height: 24px;\n    flex: none;\n  }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track {\n    position: absolute;\n    inset: 0;\n    background: var(--track);\n    border: 1px solid var(--border-strong);\n    border-radius: 999px;\n    transition: background 0.15s ease, border-color 0.15s ease;\n  }\n  .switch .thumb {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    background: var(--panel);\n    box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n    transition: transform 0.18s cubic-bezier(.4,0,.2,1);\n  }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n\n  \/* gauge *\/\n  .gauge-card { padding-bottom: 26px; }\n  .readout {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 10px 20px;\n    margin-bottom: 20px;\n  }\n  .readout-main .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-main .value {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n    font-variant-numeric: tabular-nums;\n  }\n  .readout-main .value .unit {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 17px;\n    color: var(--text-dim);\n    margin-left: 4px;\n  }\n  .readout-sub { text-align: right; }\n  .readout-sub .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-sub .value {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 20px;\n    font-weight: 500;\n    color: var(--text);\n    font-variant-numeric: tabular-nums;\n  }\n\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track {\n    position: relative;\n    height: 8px;\n    border-radius: 999px;\n    background: var(--track);\n    border: 1px solid var(--border);\n    overflow: visible;\n  }\n  .scale-fill {\n    position: absolute;\n    top: -1px; bottom: -1px; left: -1px;\n    border-radius: 999px;\n    background: linear-gradient(90deg, var(--ok), var(--accent));\n    width: 0%;\n    transition: width 0.35s cubic-bezier(.4,0,.2,1);\n  }\n  .scale-needle {\n    position: absolute;\n    top: 50%;\n    left: 0%;\n    width: 3px;\n    height: 26px;\n    background: var(--text);\n    border-radius: 2px;\n    transform: translate(-50%, -50%);\n    transition: left 0.35s cubic-bezier(.4,0,.2,1);\n    box-shadow: 0 2px 5px var(--needle-shadow);\n  }\n  .scale-needle::after {\n    content: \"\";\n    position: absolute;\n    left: 50%;\n    top: -6px;\n    width: 9px;\n    height: 9px;\n    background: var(--text);\n    border-radius: 50%;\n    transform: translateX(-50%);\n  }\n  .ticks {\n    display: flex;\n    justify-content: space-between;\n    margin-top: 10px;\n  }\n  .ticks span {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    font-weight: 500;\n    color: var(--text-faint);\n    position: relative;\n    font-variant-numeric: tabular-nums;\n  }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n\n  .stock-flag {\n    position: absolute;\n    top: -22px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 10px;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    left: 0%;\n    transform: translateX(-50%);\n    white-space: nowrap;\n  }\n\n  \/* lift height *\/\n  .lift-note {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n  }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n\n  \/* methodology disclosure *\/\n  .chf-calc details.method {\n    background: transparent;\n    border: 1px dashed var(--border-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n  }\n  details.method summary {\n    cursor: pointer;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: var(--text-dim);\n    list-style: none;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n  details.method summary::-webkit-details-marker { display: none; }\n  details.method summary::before {\n    content: \"+\";\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-size: 15px;\n    color: var(--accent);\n    width: 14px;\n  }\n  details.method[open] summary::before { content: \"–\"; }\n  .method-body {\n    margin-top: 12px;\n    font-size: 13px;\n    line-height: 1.6;\n    color: var(--text-dim);\n  }\n  .method-body table { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 12.5px; }\n  .method-body th, .method-body td {\n    text-align: left;\n    padding: 6px 8px 6px 0;\n    border-bottom: 1px solid var(--border);\n  }\n  .method-body th { color: var(--text-faint); font-weight: 500; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; }\n  .method-body td.num { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-variant-numeric: tabular-nums; color: var(--text); }\n\n  .foot-note {\n    font-size: 12px;\n    color: var(--text-faint);\n    line-height: 1.6;\n    margin-top: 18px;\n    padding-top: 16px;\n    border-top: 1px solid var(--border);\n  }\n\n  \/* philosophy callout *\/\n  .callout {\n    display: flex;\n    gap: 12px;\n    align-items: flex-start;\n    background: var(--accent-soft);\n    border: 1px solid var(--accent-soft-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n    margin: 0 0 28px;\n  }\n  .callout .mark {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 20px;\n    color: var(--accent);\n    line-height: 1.2;\n    flex: none;\n  }\n  .callout p {\n    margin: 0;\n    font-size: 13.5px;\n    line-height: 1.55;\n    color: var(--text);\n  }\n  .callout strong { color: var(--accent); }\n\n  \/* section divider between front and rear *\/\n  .divider {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin: 36px 0 20px;\n  }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n\n  .num-field {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px 4px 4px 14px;\n  }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input {\n    width: 90px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 15px;\n    font-weight: 500;\n    color: var(--text);\n    background: var(--panel);\n    border: 1px solid var(--border-strong);\n    border-radius: 2px;\n    padding: 8px 10px;\n    text-align: right;\n    font-variant-numeric: tabular-nums;\n  }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 12px;\n    color: var(--text-faint);\n    padding-right: 12px;\n  }\n\n  .gvm-warn {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n    display: none;\n  }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n\n  .tier-name {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n  }\n  .tier-full {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 15px;\n    color: var(--text-dim);\n    margin-top: 6px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .scale-fill, .scale-needle { transition: none; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in your rear tier.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Ford Ranger PX1\/PX2's stock rear axle sits around \u003cstrong\u003e970kg\u003c\/strong\u003e on an \u003cstrong\u003eLD\u003c\/strong\u003e tier. Every kilo\n    you load up shifts that — but only the fraction that actually lands on the rear\n    axle. Tell us what's fitted and we'll work out the rest, then attach it to your order.\n  \u003c\/p\u003e\n\n  \u003cdiv class=\"callout\" id=\"chf-nudge-banner\"\u003e\n    \u003cspan class=\"mark\"\u003e!\u003c\/span\u003e\n    \u003cp id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the\n    odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys\n    a daily-driven brick just so it's ready for a trip it takes twice a summer. If your\n    heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers back.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 65% of that loads the rear axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — only about 25% transfers to the rear.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — mostly loads the front, only about 10% reaches the rear.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n\u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eResult\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n        \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested duty tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. rear axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rear-weight-value\"\u003e970\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cspan class=\"stock-flag\" id=\"rear-stock-flag\" style=\"left:0%;\"\u003estock\u003c\/span\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n      This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003eFord Ranger PX1\/PX2\u003c\/strong\u003e's rated rear axle capacity\n      (\u003cstrong id=\"gvm-warn-cap\"\u003e1700kg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n      might be the better fix.\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"light-tip\"\u003e\n      Running super light back there? A near-empty rear end can actually ride a touch rough — a bit of weight low down (an alloy tray, for example) isn't a bad thing and often settles the ride. Keeping your spare tyre in its original mounted position also has a benefit: that's usually factored into how the suspension is tuned. And weight kept low and central is genuinely good for stability — it lowers the centre of gravity, which helps guard against rollovers rather than just being something to avoid.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n\n\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var REAR_STOCK_KG=970;var REAR_MAX_KG=2015;var VEHICLE_LABEL='Ford Ranger PX1\/PX2';var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var FRAC={battery:{total:20,rear:0.10},bash:{total:15,rear:0.25},sliders:{total:40,rear:0.65},build:{rear:0.80}};var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');function rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}function rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}var sliders=document.getElementById('sliders');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var lightTip=document.getElementById('light-tip');var touched=false;var nudgeBanner=document.getElementById('chf-nudge-banner');var nudgeText=document.getElementById('chf-nudge-text');function toggleNudge(){if(!nudgeBanner||!nudgeText)return;if(touched){nudgeText.textContent=\"Thanks — we've got your setup details.\";}else{nudgeText.textContent=\"Please fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\";}}function checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction accessorySummary(){var parts=[];if(sliders.checked)parts.push('Rock sliders');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var rearKg=buildTotal*FRAC.build.rear;if(sliders.checked)rearKg+=FRAC.sliders.total*FRAC.sliders.rear;if(bash.checked)rearKg+=FRAC.bash.total*FRAC.bash.rear;if(battery.checked)rearKg+=FRAC.battery.total*FRAC.battery.rear;rearKg+=towballKg;return{rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(REAR_MAX_KG,totalRearKgRaw);var rearSpan=REAR_MAX_KG-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;var tier=REAR_TIERS[tierIndex];tierValueEl.textContent=tier.code;tierFullEl.textContent=tier.full;rearWeightEl.textContent=Math.round(totalRearKgRaw);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===tier.code);});if(totalRearKgRaw\u003eREAR_MAX_KG){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=REAR_MAX_KG+'kg';}else{gvmWarn.classList.remove('show');}\nlightTip.classList.toggle('show', added.rearKg\u003c=40);\nbatteryNote.classList.toggle('show',battery.checked);syncToShopify(tier,totalRearKgRaw,added.towballKg);}\nfunction syncToShopify(tier,rearKg,towballKg){var forms=document.querySelectorAll('form[action*=\"\/cart\/add\"]');var props={'Suggested Rear Duty Tier':tier.code+' ('+tier.full+')','Est. Rear Axle Load':Math.round(rearKg)+'kg','Accessories Fitted':accessorySummary()};if(towballKg\u003e0)props['Tow Ball Weight']=Math.round(towballKg)+'kg';forms.forEach(function(form){Object.keys(props).forEach(function(name){var selector='input[name=\"properties['+name+']\"]';var input=form.querySelector(selector);if(!input){input=document.createElement('input');input.type='hidden';input.name='properties['+name+']';form.appendChild(input);}\ninput.value=props[name];});});}\n[].concat([].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});toggleNudge();update();})();\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237364928815,"sku":"883-26-154","price":2907.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-26-154-white.jpg?v=1785121981"},{"product_id":"fox-2-5-performance-elite-series-front-coilover-pair-remote-reservoir-dsc-hilux-n70-n80","title":"Fox 2.5 Performance Elite Series Front Coilover Pair — Remote Reservoir DSC — Hilux N70\/N80","description":"\u003cp\u003eFox 2.5 Performance Elite Series front coilovers with remote reservoir and DSC (Dual Speed Compression) adjustment, 2-3in lift. Sold as a pair. Fits \u003cstrong\u003eToyota Hilux N70\u003c\/strong\u003e\/N80.\u003c\/p\u003e\n\u003cp\u003eThis is Fox's top-tier remote-reservoir setup — the external reservoir gives significantly more oil volume for better heat management on long touring runs or repeated hard hits, and DSC lets you independently tune low-speed (comfort\/touring) and high-speed (hits\/technical terrain) compression damping.\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Tell us what's fitted up front and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237404512559,"sku":"883-06-235","price":5100.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-06-235-white.jpg?v=1785124799"},{"product_id":"fox-2-5-performance-elite-series-rear-shock-pair-remote-reservoir-dsc-hilux-16-on","title":"Fox 2.5 Performance Elite Series Rear Shock Pair — Remote Reservoir DSC — Hilux 16-On","description":"\u003cp\u003eFox 2.5 Performance Elite Series rear shocks with remote reservoir and DSC (Dual Speed Compression) adjustment, 2in lift. Sold as a pair. Fits Toyota Hilux 2016-on (N70 late\/N80).\u003c\/p\u003e\n\u003cp\u003eThis is Fox's top-tier remote-reservoir setup — the external reservoir gives significantly more oil volume for better heat management on long touring runs or repeated hard hits, and DSC lets you independently tune low-speed (comfort\/touring) and high-speed (hits\/technical terrain) compression damping.\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. This fits Hilux 2016-on, so you'll want the \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e plate (or the \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e plate if you're on a late N70).\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux 2016-on (N80) carries a stock rear axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e. Tell us what's fitted and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eRear Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eEstimated Rear Duty Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested duty tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. rear axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rear-weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n    This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003evehicle\u003c\/strong\u003e's rated rear axle capacity\n    (\u003cstrong id=\"gvm-warn-cap\"\u003ekg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n    might be the better fix.\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003e\n    Your setup calculates lighter than this shock's typical build range. Nothing wrong running it under-loaded, but if you're chasing the plushest possible daily ride, talk to us about a lighter duty tier instead.\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var rangeWarn=document.getElementById('range-warn');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=0+added.frontKg;var rateRaw=0;var rearMaxKg=REAR_MAX_KG;curTotalRearKg=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,curTotalRearKg);var rearSpan=rearMaxKg-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;curRearTier=REAR_TIERS[tierIndex];tierValueEl.textContent=curRearTier.code;tierFullEl.textContent=curRearTier.full;rearWeightEl.textContent=Math.round(curTotalRearKg);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curRearTier.code);});if(curTotalRearKg\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=('Hilux 2016-on (N80)');gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nrangeWarn.classList.toggle('show',tierIndex===0\u0026\u0026added.rearKg\u003c10);batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Rear Duty Tier: '+document.getElementById('tier-value').textContent+' ('+document.getElementById('tier-full').textContent+')');lines.push('Est. Rear Axle Load: '+document.getElementById('rear-weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237404676399,"sku":"883-26-167","price":3060.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-26-167-white.jpg?v=1785124802"}],"url":"https:\/\/cubbyhousefabworks.com.au\/collections\/fox-2-5-coilovers-amp-shocks.oembed","provider":"Cubby House Fabworks","version":"1.0","type":"link"}