{"title":"Bilstein Platinum","description":"\u003cp\u003eBilstein Platinum shock absorbers and coilovers — front struts, rear shocks, complete lift kits and Tour Packs across Hilux, Ford Ranger, Isuzu D-Max, Holden Colorado and LandCruiser 70 Series. German-engineered, purpose-built valving for Australian conditions.\u003c\/p\u003e","products":[{"product_id":"hilux-n70-rg-swap-bilstein-rear-shocks","title":"Bilstein Platinum Rear Shock 660mm Open — Hilux N70 RG Conversion (KUN26, GUN125, GGN25)","description":"\u003cp\u003ePerfect for the N70 RG real leaf conversion when paired with a 190–210mm shackle. These shocks have a closed measurement of 410mm and an open measurement of 660mm. Any longer than this on a Hilux and you'll end up binding the shock on the stock mounts — there's no gain, only a loss in up-travel.\u003c\/p\u003e\u003cp\u003eIf your ute is sitting a little lower, or you load it up heavily, I can supply the 380mm closed \/ 630mm open shock which will still allow plenty of travel.\u003c\/p\u003e\u003cp\u003eDon't mess around with Patrol shocks or anything else for this swap — the valving does not suit and it will ride like rubbish. There's no point modifying your ute to ride worse.\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:\u003c\/strong\u003e $35 shipping is automatically calculated at checkout for this item.\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\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eThis 660mm open Platinum shock suits the N70 RG real-leaf conversion. Stock rear axle sits 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=1600;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 RG Conversion');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":"Cubby House Fabworks","offers":[{"title":"630mm open – no bump stop mod required","offer_id":51795326206255,"sku":null,"price":670.0,"currency_code":"AUD","in_stock":true},{"title":"660mm open – requires bump stop spacing","offer_id":58078353195311,"sku":null,"price":670.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/bilstein_shock_square.png?v=1781953997"},{"product_id":"bilstein-platinum-coilovers-hilux-n70-n80","title":"Bilstein Platinum Front Strut Pair — Hilux N70\/N80","description":"\u003cdiv class=\"chf-wcalc\" id=\"chf-plat-calc\"\u003e\n  \u003cdiv class=\"chf-wcalc-head\"\u003eWeight Rating Calculator — find your front spring rate\u003c\/div\u003e\n  \u003cp class=\"chf-wcalc-sub\"\u003eTick everything fitted (or planned) up front. This is a rough guide only — every setup varies.\u003c\/p\u003e\n  \u003cdiv class=\"chf-wcalc-tip\" id=\"chf-plat-nudge-banner\"\u003e\n    \u003cspan id=\"chf-plat-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  \u003ctable class=\"chf-wcalc-table\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003cth\u003eFront accessory\u003c\/th\u003e\n\u003cth\u003eAvg weight\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"0\" checked disabled\u003e\u003c\/td\u003e\n\u003ctd\u003ePlastic factory bumper\u003c\/td\u003e\n\u003ctd\u003e0kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"35\"\u003e\u003c\/td\u003e\n\u003ctd\u003eAlloy bull bar\u003c\/td\u003e\n\u003ctd\u003e35kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"52\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSteel bull bar (light)\u003c\/td\u003e\n\u003ctd\u003e52kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"69\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSteel bull bar (HD)\u003c\/td\u003e\n\u003ctd\u003e69kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"28\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWinch with rope\u003c\/td\u003e\n\u003ctd\u003e28kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"35\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWinch with cable\u003c\/td\u003e\n\u003ctd\u003e35kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"22\"\u003e\u003c\/td\u003e\n\u003ctd\u003eDual battery\u003c\/td\u003e\n\u003ctd\u003e22kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"52\"\u003e\u003c\/td\u003e\n\u003ctd\u003eRock sliders\u003c\/td\u003e\n\u003ctd\u003e52kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"14\"\u003e\u003c\/td\u003e\n\u003ctd\u003eAlloy bash\/skid plates\u003c\/td\u003e\n\u003ctd\u003e14kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"23\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSteel bash\/skid plates\u003c\/td\u003e\n\u003ctd\u003e23kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"7\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBrush bars\u003c\/td\u003e\n\u003ctd\u003e7kg\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n\n  \u003cdiv class=\"chf-wcalc-lift\"\u003e\n    \u003cdiv class=\"chf-wcalc-lift-label\"\u003eLift height you're chasing:\u003c\/div\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-plat-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-plat-lift\" value=\"3in\"\u003e 3in\u003c\/label\u003e\n    \u003cp class=\"chf-wcalc-4in\"\u003eWe only run 2in and 3in lifts. \u003cstrong\u003e4in is not something we'll do\u003c\/strong\u003e — it ruins ride quality on these utes for no real benefit, so please don't ask.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-total\"\u003eTotal front weight: \u003cspan id=\"chf-plat-total\"\u003e0\u003c\/span\u003ekg\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eFront Weight Rating: \u003cspan id=\"chf-plat-rating\"\u003e–\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-plat-battery-note\"\u003eNote: 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 for the extra one-sided weight — mention this when you contact us.\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-ref\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eFront Weight Rating\u003c\/th\u003e\n\u003cth\u003eWeight range\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003eLD (Light Duty)\u003c\/td\u003e\n\u003ctd\u003e0 – 50kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eMD (Medium Duty)\u003c\/td\u003e\n\u003ctd\u003e50 – 100kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eHD (Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e100 – 180kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eXHD (Extra Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e180kg+\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003cp class=\"chf-wcalc-disclaimer\"\u003e* Weights are rough averages for guidance only. This gets attached to your order automatically so we see it when you check out — we'll still confirm the exact spring rate before building.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  #chf-plat-calc, #chf-plat-calc *{box-sizing:border-box;}\n  #chf-plat-calc{font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:0 0 24px;background:#ffffff !important;color:#111111 !important;}\n  #chf-plat-calc .chf-wcalc-head{font-weight:800;font-size:1.15em;margin-bottom:6px;color:#111111 !important;}\n  #chf-plat-calc .chf-wcalc-sub{font-size:.9em;color:#333333 !important;margin:0 0 14px;}\n  #chf-plat-calc table.chf-wcalc-table{width:100%;border-collapse:collapse;font-size:.95em;color:#111111 !important;background:#ffffff !important;}\n  #chf-plat-calc table.chf-wcalc-table th{text-align:left;border-bottom:2px solid #222;padding:6px;color:#111111 !important;background:#ffffff !important;}\n  #chf-plat-calc table.chf-wcalc-table td{padding:8px 6px;border-bottom:1px solid #ccc;color:#111111 !important;background:#ffffff !important;}\n  #chf-plat-calc table.chf-wcalc-table td:first-child{width:32px;}\n  #chf-plat-calc input[type=checkbox], #chf-plat-calc input[type=radio]{width:18px;height:18px;accent-color:#ff7a1a;}\n  #chf-plat-calc .chf-wcalc-lift{border-top:1px solid #ccc;padding-top:12px;margin-top:8px;color:#111111 !important;}\n  #chf-plat-calc .chf-wcalc-lift-label{font-weight:700;margin-bottom:8px;}\n  #chf-plat-calc .chf-wcalc-lift label{display:inline-flex;align-items:center;gap:6px;margin-right:24px;font-size:.95em;}\n  #chf-plat-calc .chf-wcalc-4in{font-size:.82em;color:#a10000 !important;margin-top:10px;line-height:1.4;}\n  #chf-plat-calc .chf-wcalc-result{background:#111111 !important;color:#ffffff !important;border-radius:6px;padding:12px 16px;margin:16px 0;}\n  #chf-plat-calc .chf-wcalc-total{font-size:1.1em;font-weight:800;color:#ffffff !important;}\n  #chf-plat-calc .chf-wcalc-rating{margin-top:6px;font-size:1.05em;color:#ffffff !important;}\n  #chf-plat-calc .chf-wcalc-rating span{color:#ffb347 !important;font-weight:800;}\n  #chf-plat-calc .chf-wcalc-note{display:none;font-size:.85em;color:#ffe0b3 !important;margin-top:10px;line-height:1.4;}\n  #chf-plat-calc .chf-wcalc-note.show{display:block;}\n  #chf-plat-calc .chf-wcalc-tip{border:1px solid #ddd8cc;border-left:4px solid #ff7a1a;border-radius:6px;padding:10px 14px;margin:0 0 16px;font-size:.85em;line-height:1.5;color:#111111 !important;background:#f8f6f1 !important;}\n  #chf-plat-calc table.chf-wcalc-ref{width:100%;border-collapse:collapse;font-size:.9em;margin-top:10px;color:#111111 !important;background:#ffffff !important;}\n  #chf-plat-calc table.chf-wcalc-ref th{color:#111111 !important;background:#ffffff !important;border-bottom:2px solid #222;padding:6px;text-align:left;}\n  #chf-plat-calc table.chf-wcalc-ref td{color:#111111 !important;background:#ffffff !important;border-bottom:1px solid #ccc;padding:6px;text-align:left;}\n  #chf-plat-calc .chf-wcalc-disclaimer{font-size:.8em;color:#555555 !important;margin-top:12px;}\n\u003c\/style\u003e\n\u003cscript\u003e\n(function(){\n  var root = document.getElementById('chf-plat-calc');\n  if(!root) return;\n  var boxes = root.querySelectorAll('table.chf-wcalc-table input[type=checkbox]');\n  var batteryBox = Array.from(boxes).find(function(b){ return b.closest('tr').textContent.indexOf('Dual battery') !== -1; });\n  var totalEl = document.getElementById('chf-plat-total');\n  var ratingEl = document.getElementById('chf-plat-rating');\n  var batteryNote = document.getElementById('chf-plat-battery-note');\n  var liftRadios = root.querySelectorAll('input[name=chf-plat-lift]');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-plat-nudge-banner');\n  var nudgeText = document.getElementById('chf-plat-nudge-text');\n  function toggleNudge(){\n    if(!nudgeBanner||!nudgeText) return;\n    if(touched){ nudgeText.textContent = \"Thanks — we've got your setup details.\"; }\n    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.\"; }\n  }\n\n  function findCartForm(){\n    var forms = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]'));\n    return forms.find(function(f){ return f.querySelector('button[type=submit], button[name=add]'); }) || forms[0];\n  }\n  var cartForm = findCartForm();\n  var hiddenRating, hiddenTotal, hiddenLift, hiddenBattery;\n  if(cartForm){\n    hiddenRating = document.createElement('input');\n    hiddenRating.type = 'hidden';\n    hiddenRating.name = 'properties[Front Weight Rating]';\n    cartForm.appendChild(hiddenRating);\n\n    hiddenTotal = document.createElement('input');\n    hiddenTotal.type = 'hidden';\n    hiddenTotal.name = 'properties[Estimated Front Weight]';\n    cartForm.appendChild(hiddenTotal);\n\n    hiddenLift = document.createElement('input');\n    hiddenLift.type = 'hidden';\n    hiddenLift.name = 'properties[Lift Height Chasing]';\n    cartForm.appendChild(hiddenLift);\n\n    hiddenBattery = document.createElement('input');\n    hiddenBattery.type = 'hidden';\n    hiddenBattery.name = 'properties[Extra Battery Preload Needed]';\n    cartForm.appendChild(hiddenBattery);\n  }\n\n  function getLift(){\n    var checked = Array.from(liftRadios).find(function(r){ return r.checked; });\n    return checked ? checked.value : '2in';\n  }\n\n  function recalc(){\n    var total = 0;\n    boxes.forEach(function(b){ if(b.checked) total += parseInt(b.getAttribute('data-kg'),10); });\n    totalEl.textContent = total;\n    var rating = 'LD (Light Duty)';\n    if(total \u003e= 180) rating = 'XHD (Extra Heavy Duty)';\n    else if(total \u003e= 100) rating = 'HD (Heavy Duty)';\n    else if(total \u003e= 50) rating = 'MD (Medium Duty)';\n    ratingEl.textContent = rating;\n    if(batteryBox){ batteryNote.className = 'chf-wcalc-note' + (batteryBox.checked ? ' show' : ''); }\n\n    if(hiddenRating) hiddenRating.value = rating;\n    if(hiddenTotal) hiddenTotal.value = total + 'kg';\n    if(hiddenLift) hiddenLift.value = getLift();\n    if(hiddenBattery) hiddenBattery.value = (batteryBox \u0026\u0026 batteryBox.checked) ? 'Yes' : 'No';\n  }\n  boxes.forEach(function(b){ b.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  toggleNudge();\n  recalc();\n})();\n\u003c\/script\u003e\n\u003cp\u003ePlease contact me regarding vehicle weights and set ups to fine tune what is actually right for you. \u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eCalOffroad Platinum Series Bilstein Coilover Assembly — sold as a pair (2 struts + 2 coils).\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eIncludes:\u003c\/span\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e2 x CalOffroad Platinum Series Bilstein Strut (24-218528)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e2 x CalOffroad Platinum Series Tapered Wire Coil Spring\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e2 x CalOffroad Strut Top\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eProduct Overview\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eThe CalOffroad Platinum Bilstein Series has been purpose-built for the Toyota Hilux IFS platform, delivering height-adjustable front struts capable of 0”–3” lift. Unlike generic rebranded shocks, these struts are custom engineered in Germany by Bilstein specifically for CalOffroad, ensuring unmatched quality and reliability both on and off-road.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eWith more than three decades of Hilux suspension development, CalOffroad combines local Australian off-road experience with global R\u0026amp;D partnerships—including extensive testing with Bilstein and TRD engineers in the USA. The result is a coilover that offers class-leading ride comfort, control, and durability.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eKey Features\u003c\/span\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eAdjustable Ride Height – Features one lowering groove and multiple raise settings to fine-tune your Hilux stance.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBilstein Monotube Design – Premium German-built construction with Internal Floating Piston (IFP) technology to separate oil and gas, eliminating fade and foaming.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAustralian Assembled – All coilovers are assembled locally, ensuring the spring and strut are perfectly matched.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTapered Wire Coil Springs – Designed and made in Australia, these coils deliver exceptional small-bump compliance while handling big hits with ease.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBuilt to Last – Fully rebuildable, maintenance-free bush system resists water, dirt, dust, and mud without ever needing greasing.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eProven Performance – Every unit is dyno tested to confirm the shock valving and coil rate are precisely tuned together\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eWhy Choose CalOffroad Platinum Bilstein?\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eNot just rebranded shocks – Purpose-built by Bilstein Germany exclusively for CalOffroad.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eR\u0026amp;D Driven – Over 14 months of development with Bilstein HQ and TRD engineers.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eSmoothest Ride on Earth – Proprietary coil and strut tuning provides unmatched comfort and control.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDesigned in Australia – Built for our conditions, tested across outback tracks and rugged terrain.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cspan\u003eFor the most advanced Bilstein coilover solution for your Toyota Hilux, the CalOffroad Platinum Series is the clear choice.\u003c\/span\u003e\u003c\/p\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 $50 shipping is automatically calculated at checkout for this item.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51857933697327,"sku":null,"price":1230.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/FullSizeRender.jpg?v=1757802176"},{"product_id":"bilstein-platinum-lift-kit-hilux-n70-n80","title":"Bilstein Platinum Front Strut \u0026 Rear Shock Kit (Shocks Only, No Leaf Pack) — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eFull front + rear Platinum lift kit.\u003c\/strong\u003e Use the two calculators below to get a guide on your front spring rate and rear spring load option — both attach to your order automatically.\u003c\/p\u003e\n\n\u003cdiv class=\"chf-wcalc\" id=\"chf-kit-front-calc\"\u003e\n  \u003cdiv class=\"chf-wcalc-head\"\u003eFront Weight Rating Calculator\u003c\/div\u003e\n  \u003cp class=\"chf-wcalc-sub\"\u003eStock with no front accessories runs a 600lb spring. Tick what's fitted up front to get a guide on where you'll land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-wcalc-tip\" id=\"chf-kit-nudge-banner\"\u003e\n    \u003cspan id=\"chf-kit-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  \u003ctable class=\"chf-wcalc-table\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003cth\u003eFront accessory\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-bullbar\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBull bar (steel or alloy)\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-winch\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWinch\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-sliders\"\u003e\u003c\/td\u003e\n\u003ctd\u003eRock sliders\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-bash\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBash\/skid plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-battery\"\u003e\u003c\/td\u003e\n\u003ctd\u003eExtra\/dual battery (engine bay)\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003clabel class=\"chf-wcalc-heavy\"\u003e\u003cinput type=\"checkbox\" id=\"chf-kit-heavy-flag\"\u003e My ute is on the heavier side overall (bigger canopy\/tray, tools, general heavy build)\u003c\/label\u003e\n  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested front spring rate: \u003cspan id=\"chf-kit-front-rating\"\u003e600lb (stock)\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-kit-battery-note\"\u003eNote: 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 for the extra one-sided weight — mention this when you contact us.\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-ref\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSpring rate\u003c\/th\u003e\n\u003cth\u003eTypical setup\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e600lb\u003c\/td\u003e\n\u003ctd\u003eStock, no front accessories\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e650lb\u003c\/td\u003e\n\u003ctd\u003eBull bar only\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e700lb\u003c\/td\u003e\n\u003ctd\u003eBull bar + winch\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e750lb\u003c\/td\u003e\n\u003ctd\u003eBull bar + winch + rock sliders + bash plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e800lb\u003c\/td\u003e\n\u003ctd\u003eHeavier ute overall\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"chf-wcalc\" id=\"chf-kit-rear-calc\"\u003e\n  \u003cdiv class=\"chf-wcalc-head\"\u003eRear Weight Rating Calculator\u003c\/div\u003e\n  \u003cp class=\"chf-wcalc-sub\"\u003eTick everything that's fitted (or planned) on the back of your ute.\u003c\/p\u003e\n  \u003ctable class=\"chf-wcalc-table\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003cth\u003eRear accessory\u003c\/th\u003e\n\u003cth\u003eAvg weight\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"90\"\u003e\u003c\/td\u003e\n\u003ctd\u003eAluminium tray\u003c\/td\u003e\n\u003ctd\u003e90kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"150\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSteel tray\u003c\/td\u003e\n\u003ctd\u003e150kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"70\"\u003e\u003c\/td\u003e\n\u003ctd\u003eAluminium canopy\u003c\/td\u003e\n\u003ctd\u003e70kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"120\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSteel canopy\u003c\/td\u003e\n\u003ctd\u003e120kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"40\"\u003e\u003c\/td\u003e\n\u003ctd\u003eDrawer system\u003c\/td\u003e\n\u003ctd\u003e40kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"25\"\u003e\u003c\/td\u003e\n\u003ctd\u003eDual battery setup\u003c\/td\u003e\n\u003ctd\u003e25kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"80\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWater tank (full, ~80L)\u003c\/td\u003e\n\u003ctd\u003e80kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"55\"\u003e\u003c\/td\u003e\n\u003ctd\u003eAux fuel tank (full, ~60L)\u003c\/td\u003e\n\u003ctd\u003e55kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"25\"\u003e\u003c\/td\u003e\n\u003ctd\u003eSpare tyre (extra\/mounted)\u003c\/td\u003e\n\u003ctd\u003e25kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"20\"\u003e\u003c\/td\u003e\n\u003ctd\u003eTool boxes\u003c\/td\u003e\n\u003ctd\u003e20kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" data-kg=\"100\"\u003e\u003c\/td\u003e\n\u003ctd\u003eGeneral camping\/touring gear\u003c\/td\u003e\n\u003ctd\u003e100kg\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-total\"\u003eTotal added rear weight: \u003cspan id=\"chf-kit-rear-total\"\u003e0\u003c\/span\u003ekg\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested rear spring load option: \u003cspan id=\"chf-kit-rear-rating\"\u003e–\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-ref\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eRear Spring Load Option\u003c\/th\u003e\n\u003cth\u003eAdded weight range\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003eLight\u003c\/td\u003e\n\u003ctd\u003e0 – 80kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eMedium\u003c\/td\u003e\n\u003ctd\u003e80 – 180kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eHeavy\u003c\/td\u003e\n\u003ctd\u003e180 – 280kg\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eExtra Heavy\u003c\/td\u003e\n\u003ctd\u003e280kg+\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"chf-wcalc\" id=\"chf-kit-lift-block\"\u003e\n  \u003cdiv class=\"chf-wcalc-lift-label\"\u003eLift height you're chasing:\u003c\/div\u003e\n  \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-kit-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e\n  \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-kit-lift\" value=\"3in\"\u003e 3in\u003c\/label\u003e\n  \u003cp class=\"chf-wcalc-4in\"\u003eWe only run 2in and 3in lifts. \u003cstrong\u003e4in is not something we'll do\u003c\/strong\u003e — it ruins ride quality on these utes for no real benefit, so please don't ask.\u003c\/p\u003e\n  \u003cdiv class=\"chf-wcalc-lift-label\" style=\"margin-top:16px;\"\u003eRear shock length:\u003c\/div\u003e\n  \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-kit-rearshock\" value=\"630\" checked\u003e Standard — 630mm open\u003c\/label\u003e\n  \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-kit-rearshock\" value=\"660\"\u003e Long travel — 660mm open\u003c\/label\u003e\n  \u003cp id=\"chf-kit-rearshock-warn\" style=\"display:none;font-size:.82em;color:#a10000 !important;margin-top:8px;line-height:1.4;\"\u003e\u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\u003c\/p\u003e\n  \u003cp class=\"chf-wcalc-disclaimer\"\u003e* Guide only. This gets attached to your order automatically so we see it when you check out — we'll confirm exact spring rates before building.\u003c\/p\u003e\n  \u003cp class=\"chf-wcalc-sku\"\u003e\u003cstrong\u003eOrdering reference (CoolDrive):\u003c\/strong\u003e Front strut 24-218528 · Rear shock 24-228602. Unlike Ranger\/LandCruiser, Hilux coils aren't sold as a separate SKU by weight rating — CalOffroad assembles the strut and matched coil locally per order, so the spring rate above is specified directly with the supplier against the strut SKU, not looked up as its own part number.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  .chf-wcalc, .chf-wcalc *{box-sizing:border-box;}\n  .chf-wcalc{font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:0 0 20px;background:#ffffff !important;color:#111111 !important;}\n  .chf-wcalc .chf-wcalc-head{font-weight:800;font-size:1.15em;margin-bottom:6px;color:#111111 !important;}\n  .chf-wcalc .chf-wcalc-sub{font-size:.9em;color:#333333 !important;margin:0 0 14px;}\n  .chf-wcalc table.chf-wcalc-table{width:100%;border-collapse:collapse;font-size:.95em;color:#111111 !important;background:#ffffff !important;}\n  .chf-wcalc table.chf-wcalc-table th{text-align:left;border-bottom:2px solid #222;padding:6px;color:#111111 !important;background:#ffffff !important;}\n  .chf-wcalc table.chf-wcalc-table td{padding:8px 6px;border-bottom:1px solid #ccc;color:#111111 !important;background:#ffffff !important;}\n  .chf-wcalc table.chf-wcalc-table td:first-child{width:32px;}\n  .chf-wcalc input[type=checkbox], .chf-wcalc input[type=radio]{width:18px;height:18px;accent-color:#ff7a1a;}\n  .chf-wcalc .chf-wcalc-heavy{display:flex;align-items:flex-start;gap:8px;font-size:.9em;margin:14px 0;color:#111111 !important;}\n  .chf-wcalc .chf-wcalc-heavy input{margin-top:2px;flex-shrink:0;}\n  .chf-wcalc .chf-wcalc-lift-label{font-weight:700;margin-bottom:8px;}\n  .chf-wcalc label{display:inline-flex;align-items:center;gap:6px;margin-right:24px;font-size:.95em;}\n  .chf-wcalc .chf-wcalc-4in{font-size:.82em;color:#a10000 !important;margin-top:10px;line-height:1.4;}\n  .chf-wcalc .chf-wcalc-sku{font-size:.85em;color:#111111 !important;background:#fff3d6;border:1px solid #e0b455;border-radius:6px;padding:8px 10px;margin-top:10px;}\n  .chf-wcalc .chf-wcalc-result{background:#111111 !important;color:#ffffff !important;border-radius:6px;padding:12px 16px;margin:16px 0;}\n  .chf-wcalc .chf-wcalc-total{font-size:1.1em;font-weight:800;color:#ffffff !important;}\n  .chf-wcalc .chf-wcalc-rating{font-size:1.05em;font-weight:800;color:#ffffff !important;}\n  .chf-wcalc .chf-wcalc-rating span{color:#ffb347 !important;font-weight:800;}\n  .chf-wcalc .chf-wcalc-note{display:none;font-size:.85em;color:#ffe0b3 !important;margin-top:10px;line-height:1.4;}\n  .chf-wcalc .chf-wcalc-note.show{display:block;}\n  .chf-wcalc .chf-wcalc-tip{border:1px solid #ddd8cc;border-left:4px solid #ff7a1a;border-radius:6px;padding:10px 14px;margin:0 0 16px;font-size:.85em;line-height:1.5;color:#111111 !important;background:#f8f6f1 !important;}\n  .chf-wcalc table.chf-wcalc-ref{width:100%;border-collapse:collapse;font-size:.9em;margin-top:10px;color:#111111 !important;background:#ffffff !important;}\n  .chf-wcalc table.chf-wcalc-ref th{color:#111111 !important;background:#ffffff !important;border-bottom:2px solid #222;padding:6px;text-align:left;}\n  .chf-wcalc table.chf-wcalc-ref td{color:#111111 !important;background:#ffffff !important;border-bottom:1px solid #ccc;padding:6px;text-align:left;}\n  .chf-wcalc .chf-wcalc-disclaimer{font-size:.8em;color:#555555 !important;margin-top:12px;}\n\u003c\/style\u003e\n\u003cscript\u003e\n(function(){\n  function findCartForm(){\n    var forms = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]'));\n    return forms.find(function(f){ return f.querySelector('button[type=submit], button[name=add]'); }) || forms[0];\n  }\n  var cartForm = findCartForm();\n  if(!cartForm) return;\n\n  function addHidden(name){\n    var el = document.createElement('input');\n    el.type = 'hidden';\n    el.name = name;\n    cartForm.appendChild(el);\n    return el;\n  }\n  var hFrontRating = addHidden('properties[Suggested Front Spring Rate]');\n  var hBattery = addHidden('properties[Extra Battery Preload Needed]');\n  var hRearRating = addHidden('properties[Suggested Rear Spring Load Option]');\n  var hRearTotal = addHidden('properties[Estimated Added Rear Weight]');\n  var hLift = addHidden('properties[Lift Height Chasing]');\n  var hRearShock = addHidden('properties[Rear Shock]');\n  var hSku = addHidden('properties[CoolDrive Order Reference]');\n  hSku.value = 'Front strut 24-218528 \/ Rear shock 24-228602 — Hilux coil is assembled per order at the spring rate above, not a separate SKU';\n\n  var bullbar = document.getElementById('chf-kit-bullbar');\n  var winch = document.getElementById('chf-kit-winch');\n  var sliders = document.getElementById('chf-kit-sliders');\n  var bash = document.getElementById('chf-kit-bash');\n  var battery = document.getElementById('chf-kit-battery');\n  var heavyFlag = document.getElementById('chf-kit-heavy-flag');\n  var frontRatingEl = document.getElementById('chf-kit-front-rating');\n  var batteryNote = document.getElementById('chf-kit-battery-note');\n\n  var rearBoxes = document.querySelectorAll('#chf-kit-rear-calc input[type=checkbox]');\n  var rearTotalEl = document.getElementById('chf-kit-rear-total');\n  var rearRatingEl = document.getElementById('chf-kit-rear-rating');\n\n  var liftRadios = document.querySelectorAll('input[name=chf-kit-lift]');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-kit-nudge-banner');\n  var nudgeText = document.getElementById('chf-kit-nudge-text');\n  function toggleNudge(){\n    if(!nudgeBanner||!nudgeText) return;\n    if(touched){ nudgeText.textContent = \"Thanks — we've got your setup details.\"; }\n    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.\"; }\n  }\n  function getLift(){\n    var checked = Array.from(liftRadios).find(function(r){ return r.checked; });\n    return checked ? checked.value : '2in';\n  }\n\n  function recalcFront(){\n    var rating = '600lb (stock)';\n    if(heavyFlag.checked){ rating = '800lb'; }\n    else if(bullbar.checked \u0026\u0026 winch.checked \u0026\u0026 sliders.checked \u0026\u0026 bash.checked){ rating = '750lb'; }\n    else if(bullbar.checked \u0026\u0026 winch.checked){ rating = '700lb'; }\n    else if(bullbar.checked){ rating = '650lb'; }\n    frontRatingEl.textContent = rating;\n    batteryNote.className = 'chf-wcalc-note' + (battery.checked ? ' show' : '');\n    hFrontRating.value = rating;\n    hBattery.value = battery.checked ? 'Yes' : 'No';\n  }\n  function recalcRear(){\n    var total = 0;\n    rearBoxes.forEach(function(b){ if(b.checked) total += parseInt(b.getAttribute('data-kg'),10); });\n    rearTotalEl.textContent = total;\n    var rating = 'Light';\n    if(total \u003e= 280) rating = 'Extra Heavy';\n    else if(total \u003e= 180) rating = 'Heavy';\n    else if(total \u003e= 80) rating = 'Medium';\n    rearRatingEl.textContent = rating;\n    hRearRating.value = rating;\n    hRearTotal.value = total + 'kg';\n  }\n  function recalcLift(){ hLift.value = getLift(); }\n  var rearshockRadios = document.querySelectorAll('input[name=chf-kit-rearshock]');\n  var rearshockWarn = document.getElementById('chf-kit-rearshock-warn');\n  function recalcRearShock(){ var v='630'; rearshockRadios.forEach(function(r){ if(r.checked) v=r.value; }); hRearShock.value = v==='660' ? 'Long travel (660mm open) — recommended run bump stop extension' : 'Standard (630mm open)'; if(rearshockWarn) rearshockWarn.style.display = v==='660' ? 'block' : 'none'; }\n  rearshockRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcRearShock(); }); });\n\n  [bullbar,winch,sliders,bash,battery,heavyFlag].forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcFront(); }); });\n  rearBoxes.forEach(function(b){ b.addEventListener('change', function(){ touched=true; toggleNudge(); recalcRear(); }); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcLift(); }); });\n\n  toggleNudge(); recalcFront(); recalcRear(); recalcLift(); recalcRearShock();\n})();\n\u003c\/script\u003e\n\n\u003cp\u003ePlease contact me regarding vehicle weights before ordering — this is critical to get your ute driving as well as possible, set at the height you want, and avoid front-end sag.\u003c\/p\u003e\u003cp\u003eWhen it comes to off-road vehicles, the Bilstein B6 Offroad gas-pressure shock absorber is the ideal suspension solution. Developed to meet the demanding requirements of Australian 4WDs, the Bilstein B6 addresses the handling dynamics that are often challenging in high-riding vehicles.\u003c\/p\u003e\u003cp\u003eWith over 50 years of development, the Bilstein B6 incorporates advanced gas pressure technology, ensuring consistent performance in all conditions. It features a 46mm piston in a mono-tube configuration, providing enhanced performance reserves and extended service life — even during demanding activities like towing or off-roading. Expect superior road adhesion, improved lane-change stability, and precise damper settings that excel both on the highway and on the rough stuff.\u003c\/p\u003e\u003cp\u003eBilstein has conducted extensive testing and fine-tuning to optimise handling performance. These shock absorbers offer increased load-carrying capacity and enhanced vehicle control across all driving conditions, from bitumen to off-road trails.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order full kit and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51982728036655,"sku":null,"price":1900.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/96B04F10-5B7B-424D-AE35-8A317F739594.jpg?v=1762162770"},{"product_id":"bilstein-platinum-630-open","title":"Bilstein Platinum Rear Shock 630mm Open — Hilux N70\/N80","description":"\u003cp\u003eBilstein Platinum 630mm open rear shocks for the \u003cstrong\u003eToyota Hilux N70\u003c\/strong\u003e and N80 on standard leaf packs. No bump stop modification required.\u003c\/p\u003e\u003cp\u003ePrice per pair.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $35 shipping is automatically calculated at checkout for this item.\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":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":52033526169903,"sku":null,"price":670.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/bilstein_shock_square.png?v=1781953997"},{"product_id":"bilstein-platinum-lift-kit-ford-ranger-px1-px2","title":"Bilstein Platinum Tour Pack — Complete Lift Kit with Leaf Springs (2in) — Ford Ranger PX1\/PX2","description":"\u003cdiv id=\"image-box\"\u003e\n\u003cp\u003e\u003cstrong\u003eCalOffroad Bilstein Tour Pack – 2\" Lift | Fits Ford Ranger PX1\/PX2 T6\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e2 x Assembled Bilstein Front Coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x Bilstein Long Travel Rear Shocks\u003c\/li\u003e\n\u003cli\u003e2 x Rear Leaf Springs\u003c\/li\u003e\n\u003cli\u003e1 x Leaf Spring Bush Kit\u003c\/li\u003e\n\u003cli\u003e4 x Round Top U-Bolts\u003c\/li\u003e\n\u003cli\u003e2 x Greasable Shackles\u003c\/li\u003e\n\u003cli\u003e2 x Greasable Pins\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003ePlease contact me regarding lift size and vehicle weights before ordering — I want to get it right the first time. Purchase, then email me with the details.\u003c\/p\u003e\n\u003c\/div\u003e\u003chr\u003e\u003cp\u003eCalOffroad has deep roots in the development of high-end suspension systems, dating back to the early 1980s. With time spent in the USA collaborating with industry leaders, and off-road designs tested in Moab, Utah and Colorado, CalOffroad brings decades of real-world experience to every product.\u003c\/p\u003e\u003cp\u003eWith over 30 years of 4x4 suspension development, CalOffroad has integrated the most advanced technology into their suspension range. The Platinum Series coils feature tapered wire technology, delivering exceptionally smooth small-bump compliance right through to big hits. CalOffroad's Platinum Series wire technology also tunes a rebound rate into the coil, reducing aggressive rebound and minimising shock fade in extreme conditions. All shocks and coilovers are dyno tested to ensure the coil rate is precisely matched to the shock valving.\u003c\/p\u003e\u003chr\u003e\u003cp\u003e\u003cstrong\u003eVehicle-specific mounts feature precision-machined ring eyes for accurate fitment, along with a high-end, low-maintenance bush system that effectively isolates road noise and vibration. These maintenance-free strut bushes are engineered to handle water, dust, dirt, snow, mud, and anything else you throw at them — without ever needing greasing.\u003c\/strong\u003e\u003c\/p\u003e\u003chr\u003e\u003cp\u003eCalOffroad leaf springs have undergone extensive development to deliver the most advanced and smoothest ride possible. Specially designed wear pads between each leaf ensure optimal performance, while a specific build ratio for each pack allows fine-tuning of when the first stage engages with the second. This delivers a smooth ride whether the vehicle is unladen or carrying heavy loads. A high-flex design enables greater wheel travel, and custom-built leaf packs are available for specific requirements.\u003c\/p\u003e\u003cp\u003eWhen it comes to off-road vehicles, the Bilstein B6 Offroad gas-pressure shock absorber is the ideal suspension solution. Developed to meet the demanding requirements of Australian 4WDs, the Bilstein B6 features a 46mm piston in a mono-tube configuration, providing enhanced performance reserves and extended service life — even during demanding activities like towing or off-roading. Expect superior road adhesion, improved lane-change stability, and precise damper settings that excel in all conditions.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order full kit and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eBilstein Platinum Tour Pack 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Ford Ranger PX1\/PX2 carries a stock front axle around \u003cstrong\u003e1185kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e970kg\u003c\/strong\u003e on an LD tier. Every kilo you bolt on shifts\n    both numbers — but only the fraction that actually lands on each axle. Tell us what's\n    fitted and we'll work out the rest, front and back.\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    \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\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\"\u003e1185\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"tier-sync-note\"\u003eWe've set the Rear Duty Rating option above to match — override it up top any time.\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  \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 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 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={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}};var TIER_VARIANT_VALUE={LD:'LD (Light Duty)',MD:'MD (Medium Duty)',HD:'HD (Heavy Duty)',XHD:'XHD (Extra Heavy Duty)'};var 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');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 spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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 tierSyncNote=document.getElementById('tier-sync-note');var tierOverridden=false;var isSyncingTier=false;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 selectTierVariant(code){var target=TIER_VARIANT_VALUE[code];var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Rear Duty Rating')===0\u0026\u0026r.value===target\u0026\u0026!r.checked){isSyncingTier=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\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 rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nif(tierOverridden){tierSyncNote.textContent='You\\'ve manually set the Rear Duty Rating above — we\\'ll leave it alone. Change anything below to let us re-suggest it.';}else{tierSyncNote.textContent='We\\'ve set the Rear Duty Rating option above to match — override it up top any time.';selectTierVariant(tier.code);}\nbatteryNote.classList.toggle('show',battery.checked);syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg);}\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('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(frontTier, frontKg, tier, rearKg, towballKg){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);}\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(){touched=true;toggleNudge();tierOverridden=false;update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();tierOverridden=false;update();});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Rear Duty Rating')===0){if(isSyncingTier){isSyncingTier=false;}\nelse{tierOverridden=true;update();}}});function injectTierReassurance(){if(document.getElementById('chf-tier-reassure'))return;var fieldsets=document.querySelectorAll('variant-selects fieldset');for(var i=0;i\u003cfieldsets.length;i++){var legend=fieldsets[i].querySelector('legend');if(legend\u0026\u0026legend.textContent.trim().indexOf('Rear Duty Rating')===0){var note=document.createElement('p');note.id='chf-tier-reassure';note.textContent=\"Rated for load, not looks — this matches what your rear axle actually carries. A higher tier just means it's set up for the weight you're running, not that we're pushing you toward something extreme. When in doubt, size up.\";note.style.cssText='font-size:12.5px;line-height:1.5;margin:8px 0 0;max-width:52ch;opacity:.72;';fieldsets[i].insertAdjacentElement('afterend',note);break;}}}\ntoggleNudge();update();injectTierReassurance();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.');}});});})();\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":52052043235631,"sku":null,"price":2950.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Screenshot2025-11-25at3.47.42pm.png?v=1764046081"},{"product_id":"px1-px2-ford-ranger","title":"PX1\/PX2 Ford Ranger — Bilstein Platinum Front Coilover Pair","description":"\u003cp\u003eFord Ranger PX T6 — CalOffroad Bilstein Platinum Series Tapered Wire Coil Spring Coilover Assembly. \u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003ePlease contact me regarding lift size and vehicle weights before ordering — I want to get it right the first time. Purchase, then email me with the details.\u003c\/p\u003e\u003cp\u003eCalOffroad Bilstein Platinum Series – 0\" to 3\" Height-Adjustable Front Strut.\u003c\/p\u003e\u003cp\u003eCalOffroad has strong roots in the off-road market dating back to the early 1980s, spending time in the USA with industry leaders building the latest in vehicle design and off-road suspension technology, and testing designs in Moab, Utah and Colorado. With a family history of exploring most of Australia's remote and outback destinations, CalOffroad has developed their own off-road testing facility to refine and develop products. This combined experience allows them to create some of the most advanced 4WD suspension components available anywhere in the world.\u003c\/p\u003e\u003cp\u003eWith over 30 years of 4x4 and suspension development, CalOffroad has developed the Platinum Series Bilstein Coilovers — the most advanced Bilstein coilover available for the Ford Ranger. This involved over 14 months of R\u0026amp;D with leading Bilstein engineers, resulting in the most capable Bilstein coilover on the market for the Ranger.\u003c\/p\u003e\u003cp\u003eThe CalOffroad Platinum Bilstein struts and shocks are not rebranded units from another vehicle. They are purpose-built by Bilstein Germany to meet CalOffroad's stringent quality requirements, ensuring your Ford Ranger looks and rides exactly how you want it to — reliably, both on and off-road.\u003c\/p\u003e\u003cp\u003eThe CalOffroad Platinum struts feature one lowering groove and multiple raising grooves, allowing you to adjust the front ride height to suit. CalOffroad Platinum Series Bilstein struts and shocks feature proprietary valving and IFP (Internal Floating Piston) technology, which separates the high-pressure nitrogen gas from the oil, eliminating shock fade and oil foaming.\u003c\/p\u003e\u003cp\u003eThese are not the cheaper US-market versions — they are high-end, fully rebuildable IFP technology shocks made in Germany.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eVehicle-specific upper mounts include fully machined ring eyes for accurate fitment, along with a high-end, low-maintenance bush system that isolates road noise and vibration. These maintenance-free strut bushes handle water, dust, dirt, snow, mud, and anything else you throw at them — without ever needing greasing.\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003eCalOffroad Platinum Coils are designed and made in Australia. All CalOffroad Platinum Coilovers are assembled in Australia. The Platinum Series coils use tapered wire technology, allowing for exceptionally smooth small-bump compliance right through to big hits. CalOffroad's wire technology tunes a rebound rate into the coil, assisting the shock with a less aggressive rebound and reducing shock fade in extreme conditions. All shocks and coilovers are dyno tested to ensure the coil rate is precisely matched to the shock valving.\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:\u003c\/strong\u003e $50 shipping is automatically calculated at checkout for this pair.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eBilstein Platinum 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    \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\"\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    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e?\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\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);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];var chfLift=(function(){var ls=document.querySelectorAll('input[name=\"lift\"]');for(var i=0;i\u003cls.length;i++)if(ls[i].checked)return ls[i].value;return '';})();if(chfLift)lines.push('Lift Height: '+chfLift);lines.push('Suggested Front Duty Tier: '+document.getElementById('tier-value').textContent+' ('+document.getElementById('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'));lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(tier, frontKg, lift){if(chfLiftBoldEl){var lb=document.querySelectorAll('input[name=\"lift\"]');for(var _i=0;_i\u003clb.length;_i++)if(lb[_i].checked)chfLiftBoldEl.textContent=lb[_i].value;}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);}\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();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.');}});});})();\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":52052045758767,"sku":null,"price":1223.64,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/FullSizeRender.jpg?v=1757802176"},{"product_id":"landcruiser-70-series-bilstein-platinum-front-shock","title":"LandCruiser 70 Series Bilstein Platinum Front Shock Pair","description":"\u003cp\u003eCalOffroad Platinum Series Bilstein front shock for the 70 Series LandCruiser (75, 76, 77, 78, 79). \u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eInternal Floating Piston (IFP) technology — separates high-pressure nitrogen gas from oil, eliminating shock fade and oil foaming\u003c\/li\u003e\n\u003cli\u003eDesigned in Australia, made in Germany\u003c\/li\u003e\n\u003cli\u003eCalOffroad Platinum finish for better corrosion protection and long-lasting durability\u003c\/li\u003e\n\u003cli\u003eExternal bumpstop technology, hidden under the dust boot, to help with fast bottom-outs\u003c\/li\u003e\n\u003cli\u003eFloating bush tube on the front upper mount to allow more travel and better shock bushing longevity\u003c\/li\u003e\n\u003cli\u003eLow-maintenance bush system that isolates road noise and vibration\u003c\/li\u003e\n\u003cli\u003eVehicle-specific upper mount includes a rotating crush tube to allow more wheel travel without causing shock bind\u003c\/li\u003e\n\u003cli\u003eValved specifically to help eliminate the wallow feel of the LandCruiser\u003c\/li\u003e\n\u003cli\u003eFully rebuildable\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eThese aren't a rebranded Bilstein from another model or the cheaper USA version — CalOffroad's Platinum Series shocks are purpose-built by Bilstein Germany, the result of over 14 months of R\u0026amp;D with Bilstein's engineers specifically for the LandCruiser 70 Series.\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:\u003c\/strong\u003e $50 shipping is automatically calculated at checkout for this pair.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eLandCruiser 70 Series Bilstein Platinum Front 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  \/* 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  .nudge-banner {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--accent-soft);\n    border: 1px solid var(--accent-soft-strong);\n    border-radius: 4px;\n    padding: 12px 16px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    line-height: 1.5;\n    color: var(--text);\n    transition: background 0.2s ease, border-color 0.2s ease;\n  }\n  .nudge-banner.done {\n    background: var(--panel-2);\n    border-color: var(--border);\n    color: var(--text-dim);\n  }\n  .nudge-banner .dot {\n    flex: none;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: var(--accent);\n  }\n  .nudge-banner.done .dot { background: var(--ok); }\n\n  @media (prefers-reduced-motion: reduce) {\n    .scale-fill, .scale-needle { transition: none; }\n  }\n\u003c\/style\u003e\n\n\n  \u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\n  \u003cdiv class=\"nudge-banner\" id=\"nudge-banner\"\u003e\n\u003cspan class=\"dot\"\u003e\u003c\/span\u003e\u003cspan id=\"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\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\"\u003eLandCruiser 70 Series' stock front axle sits around \u003cstrong\u003e1300kg\u003c\/strong\u003e and runs an \u003cstrong\u003eLD\u003c\/strong\u003e tier. Every kilo you bolt on shifts that — but only the fraction that actually lands on the front axle. Tell us what's fitted and we'll work out the rest, then attach it to your order.\u003c\/p\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\"\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\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  \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\"\u003e1300\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  \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=1300;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 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 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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');var nudgeBanner=document.getElementById('nudge-banner');var nudgeText=document.getElementById('nudge-text');var nudgeDone=false;\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 computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();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);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 markChanged(){if(!nudgeDone){nudgeDone=true;nudgeBanner.classList.add('done');nudgeText.textContent=\"Thanks — we've got your setup details.\";}}\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);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(tier,totalFrontKg);}\nfunction syncToShopify(tier,frontKg){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','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(trayInputs),[].slice.call(toolboxInputs),[canopy,dogbox,rearbar,fueltank,drawers,fridge,sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){markChanged();update();});});update();})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58237173661999,"sku":"24-301329","price":661.98,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/24-301329.tag.1.jpg?v=1784695602"},{"product_id":"landcruiser-70-series-bilstein-platinum-rear-shock","title":"LandCruiser 70 Series Bilstein Platinum Rear Shock Pair","description":"\u003cp\u003eCalOffroad Platinum Series Bilstein rear shock for the 70 Series LandCruiser (75, 76, 77, 78, 79). \u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eInternal Floating Piston (IFP) technology — separates high-pressure nitrogen gas from oil, eliminating shock fade and oil foaming\u003c\/li\u003e\n\u003cli\u003eDesigned in Australia, made in Germany\u003c\/li\u003e\n\u003cli\u003eCalOffroad Platinum finish for better corrosion protection and long-lasting durability\u003c\/li\u003e\n\u003cli\u003eExternal bumpstop technology, hidden under the dust boot, to help with fast bottom-outs\u003c\/li\u003e\n\u003cli\u003eLow-maintenance bush system that isolates road noise and vibration\u003c\/li\u003e\n\u003cli\u003eVehicle-specific mounting to allow more wheel travel without causing shock bind\u003c\/li\u003e\n\u003cli\u003eValved specifically to help eliminate the wallow feel of the LandCruiser\u003c\/li\u003e\n\u003cli\u003eFully rebuildable\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eThese aren't a rebranded Bilstein from another model or the cheaper USA version — CalOffroad's Platinum Series shocks are purpose-built by Bilstein Germany, the result of over 14 months of R\u0026amp;D with Bilstein's engineers specifically for the LandCruiser 70 Series.\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:\u003c\/strong\u003e $35 shipping is automatically calculated at checkout for this pair.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eLandCruiser 70 Series Bilstein Platinum 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  \/* 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  .nudge-banner {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--accent-soft);\n    border: 1px solid var(--accent-soft-strong);\n    border-radius: 4px;\n    padding: 12px 16px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    line-height: 1.5;\n    color: var(--text);\n    transition: background 0.2s ease, border-color 0.2s ease;\n  }\n  .nudge-banner.done {\n    background: var(--panel-2);\n    border-color: var(--border);\n    color: var(--text-dim);\n  }\n  .nudge-banner .dot {\n    flex: none;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: var(--accent);\n  }\n  .nudge-banner.done .dot { background: var(--ok); }\n\n  @media (prefers-reduced-motion: reduce) {\n    .scale-fill, .scale-needle { transition: none; }\n  }\n\u003c\/style\u003e\n\n\n  \u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\n  \u003cdiv class=\"nudge-banner\" id=\"nudge-banner\"\u003e\n\u003cspan class=\"dot\"\u003e\u003c\/span\u003e\u003cspan id=\"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\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\"\u003eLandCruiser 70 Series' stock rear axle sits around \u003cstrong\u003e980kg\u003c\/strong\u003e and runs an \u003cstrong\u003eLD\u003c\/strong\u003e tier. Tow ball weight and rear-mounted gear load almost straight onto the rear axle — tell us what's fitted and we'll work out the rest, then attach it to your order.\u003c\/p\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\"\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\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  \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\"\u003e980\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\"\u003eLandCruiser 70 Series\u003c\/strong\u003e's rated rear axle capacity\n      (\u003cstrong id=\"gvm-warn-cap\"\u003e2050kg\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  \u003c\/section\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"gvm-warn\" id=\"light-tip\"\u003eRunning 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.\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  \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=980;var REAR_MAX_KG=2050;var VEHICLE_LABEL='LandCruiser 70 Series';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:{rear:0.00},winch:{rear:0.00},spotlights:{total:3,rear:0.00},battery:{total:20,rear:0.10},bash:{total:15,rear:0.25},sliders:{total:40,rear:0.65},build:{rear:0.80}};var 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 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 batteryNote=document.getElementById('battery-note');var nudgeBanner=document.getElementById('nudge-banner');var nudgeText=document.getElementById('nudge-text');var nudgeDone=false;\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 rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked)rearKg+=FRAC.sliders.total*FRAC.sliders.rear;if(spotlights.checked)rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;if(bash.checked)rearKg+=FRAC.bash.total*FRAC.bash.rear;if(battery.checked)rearKg+=FRAC.battery.total*FRAC.battery.rear;var rearKgNoTow=rearKg;rearKg+=towballKg;return{rearKg:rearKg,rearKgNoTow:rearKgNoTow,towballKg:towballKg};}\nfunction markChanged(){if(!nudgeDone){nudgeDone=true;nudgeBanner.classList.add('done');nudgeText.textContent=\"Thanks — we've got your setup details.\";}}\nfunction update(){var added=computeAdded();var rearMaxKg=REAR_MAX_KG;var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nlightTip.classList.toggle('show',added.rearKgNoTow\u003c=40);batteryNote.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(),'Extra Battery Preload Needed':battery.checked?'Yes':'No'};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(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(){markChanged();update();});});towball.addEventListener('input',function(){markChanged();update();});update();})();\n\u003c\/script\u003e\n\u003c\/div\u003e\n","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58237222879535,"sku":"24-301336","price":661.98,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/24-301336.tag.1_bc5d3461-de72-4a32-9a63-b466380e6a98.jpg?v=1784696495"},{"product_id":"caloffroad-platinum-tour-pack-complete-suspension-package-isuzu-d-max-rg-2in-lift","title":"CalOffroad Platinum Tour Pack Complete Suspension Package — Isuzu D-Max RG (2in Lift)","description":"\u003cp\u003e\u003cstrong\u003eThe whole package for the D-Max RG\u003c\/strong\u003e — CalOffroad's genuine \"Platinum\" Tour Pack kit, a single CoolDrive part number that bundles Bilstein Yellow front struts and rear shocks (pre-assembled coilovers) with the rear leaf springs, so nothing is priced separately.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIncludes:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e2x Bilstein Yellow front struts (pre-assembled coilovers)\u003c\/li\u003e\n\u003cli\u003e2x Bilstein Yellow rear shocks\u003c\/li\u003e\n\u003cli\u003e1x coil spring pair\u003c\/li\u003e\n\u003cli\u003e2x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4x U-bolts\u003c\/li\u003e\n\u003cli\u003e1x greasable shackle pair\u003c\/li\u003e\n\u003cli\u003e1x leaf spring bush kit\u003c\/li\u003e\n\u003cli\u003e2x greasable pins\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003ePick your rear duty rating below. Front duty and exact CoolDrive part number are confirmed with you before ordering — heavier front duty combinations can shift the price slightly from what's shown, we'll always confirm before building.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order full kit and isn't held in stock — please allow a 2 week lead time. Please contact us regarding vehicle weights before ordering.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping is automatically calculated at checkout for this package.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Tour Pack D-Max 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Isuzu D-Max RG carries a stock front axle around \u003cstrong\u003e1141kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e934kg\u003c\/strong\u003e on an LD tier. Every kilo you bolt on shifts\n    both numbers — but only the fraction that actually lands on each axle. Tell us what's\n    fitted and we'll work out the rest, front and back.\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    \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\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\"\u003e1141\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"tier-sync-note\"\u003eWe've set the Rear Duty Rating option above to match — override it up top any time.\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\"\u003e934\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\"\u003eIsuzu D-Max RG\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  \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=1141;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 REAR_STOCK_KG=934;var REAR_MAX_KG=1959;var VEHICLE_LABEL='Isuzu D-Max RG';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}};var TIER_VARIANT_VALUE={LD:'LD (Light Duty)',MD:'MD (Medium Duty)',HD:'HD (Heavy Duty)',XHD:'XHD (Extra Heavy Duty)'};var 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');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 spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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 tierSyncNote=document.getElementById('tier-sync-note');var tierOverridden=false;var isSyncingTier=false;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 selectTierVariant(code){var target=TIER_VARIANT_VALUE[code];var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Rear Duty Rating')===0\u0026\u0026r.value===target\u0026\u0026!r.checked){isSyncingTier=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\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 rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nif(tierOverridden){tierSyncNote.textContent='You\\'ve manually set the Rear Duty Rating above — we\\'ll leave it alone. Change anything below to let us re-suggest it.';}else{tierSyncNote.textContent='We\\'ve set the Rear Duty Rating option above to match — override it up top any time.';selectTierVariant(tier.code);}\nbatteryNote.classList.toggle('show',battery.checked);syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg);}\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('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(frontTier, frontKg, tier, rearKg, towballKg){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);}\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(){touched=true;toggleNudge();tierOverridden=false;update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();tierOverridden=false;update();});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Rear Duty Rating')===0){if(isSyncingTier){isSyncingTier=false;}\nelse{tierOverridden=true;update();}}});function injectTierReassurance(){if(document.getElementById('chf-tier-reassure'))return;var fieldsets=document.querySelectorAll('variant-selects fieldset');for(var i=0;i\u003cfieldsets.length;i++){var legend=fieldsets[i].querySelector('legend');if(legend\u0026\u0026legend.textContent.trim().indexOf('Rear Duty Rating')===0){var note=document.createElement('p');note.id='chf-tier-reassure';note.textContent=\"Rated for load, not looks — this matches what your rear axle actually carries. A higher tier just means it's set up for the weight you're running, not that we're pushing you toward something extreme. When in doubt, size up.\";note.style.cssText='font-size:12.5px;line-height:1.5;margin:8px 0 0;max-width:52ch;opacity:.72;';fieldsets[i].insertAdjacentElement('afterend',note);break;}}}\ntoggleNudge();update();injectTierReassurance();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.');}});});})();\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"LD (Light Duty)","offer_id":58256680223023,"sku":null,"price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"MD (Medium Duty)","offer_id":58256680288559,"sku":null,"price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"HD (Heavy Duty)","offer_id":58256680321327,"sku":null,"price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"XHD (Extra Heavy Duty)","offer_id":58256680354095,"sku":null,"price":2894.76,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5001-LI-LI-A.tag.1.jpg?v=1785126755"},{"product_id":"big-bore-lift-kit-bilstein-6112-platinum-630-rear-leaf-pack-hilux-n70-n80","title":"Big Bore Lift Kit — Bilstein 6112 2.5in Body + Platinum 630 Rear + Leaf Pack (Hilux N70\/N80)","description":"\u003cp\u003eA complete front-to-rear lift package pairing Bilstein's 6112 B60 2.5in big-bore front coilover with a Bilstein Platinum rear shock, matched to a duty-rated leaf spring pack and fresh leaf spring bushes. Choose your vehicle (N70 or N80), your leaf pack duty tier, and optionally add a CalOffroad Fixed Upper Control Arm Kit (2° caster) to correct geometry at ride height.\u003c\/p\u003e\n\u003cdiv style=\"background:#f8f6f1;border:1px solid #ddd8cc;border-left:4px solid #c96a1e;border-radius:4px;padding:14px 18px;margin:0 0 24px;font-size:14px;line-height:1.6;color:#1b1d22;\"\u003e\n\u003cstrong\u003eSelect the correct Vehicle before ordering.\u003c\/strong\u003e N70 (2005–2015) and N80 (2015-on) Hilux use different rear leaf spring packs and different shackles — they are not interchangeable. Use the \u003cstrong\u003eVehicle\u003c\/strong\u003e option above to pick N70 or N80; the leaf pack duty tier, the calculator below, and the parts we build for you are all matched to that selection.\u003c\/div\u003e\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eBig Bore Lift Kit 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\"\u003eSpring Rate \u0026amp; Leaf Pack Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    A stock front axle sits at \u003cstrong\u003e1180kg\u003c\/strong\u003e on a \u003cstrong\u003e600lb\u003c\/strong\u003e coil, and a stock rear\n    axle sits around \u003cstrong\u003e1000kg\u003c\/strong\u003e on a \u003cstrong\u003eLD\u003c\/strong\u003e leaf pack. Every kilo you bolt on shifts\n    both numbers — but only the fraction that actually lands on each axle. Tell us what's\n    fitted and we'll work out the rest, front and back.\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    \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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eWe only build 2in and 3in kits — see why below.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Lift height\"\u003e\n      \u003cinput type=\"radio\" name=\"lift\" id=\"lift-2\" value=\"2\" 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=\"3\"\u003e\n      \u003clabel for=\"lift-3\"\u003e3in\u003cspan class=\"kg\"\u003e75mm\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e?\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n    \u003cdiv class=\"lift-note\" id=\"lift-note\"\u003e\n      On the 6112, 2in lands on the \u003cstrong\u003e7th circlip\u003c\/strong\u003e — each clip is 5mm of adjuster travel, worth roughly 10mm of ride height. 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\"\u003eRear Shock Length\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eStandard fits the factory bump stop. Long travel has a shorter closed length and needs a bump stop extension.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Rear shock length\"\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-630\" value=\"630\" checked\u003e\n      \u003clabel for=\"rearshock-630\"\u003eStandard\u003cspan class=\"kg\"\u003e630mm open\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-660\" value=\"660\"\u003e\n      \u003clabel for=\"rearshock-660\"\u003eLong travel\u003cspan class=\"kg\"\u003e660mm open\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"rearshock-warn\"\u003e\n      \u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\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-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\"\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 Spring Rate\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested spring\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rate-value\"\u003e600\u003c\/span\u003e\u003cspan class=\"unit\"\u003elb\u003c\/span\u003e\n\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-r=\"600\"\u003e600\u003c\/span\u003e\n        \u003cspan data-r=\"650\"\u003e650\u003c\/span\u003e\n        \u003cspan data-r=\"700\"\u003e700\u003c\/span\u003e\n        \u003cspan data-r=\"750\"\u003e750\u003c\/span\u003e\n        \u003cspan data-r=\"800\"\u003e800\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\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\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"tier-sync-note\"\u003eUses the Vehicle option you picked above — N70 and N80 run different leaf packs and shackles, so getting this right matters. We've set the Leaf Pack Duty Tier option to match — override it up top any time.\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\"\u003e1000\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\"\u003eN80\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  \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=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 REAR_STOCK_KG=1000;var REAR_MAX_KG={n70:1600,n80: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}};var TIER_VARIANT_VALUE={LD:'LD (Light Duty)',MD:'MD (Medium Duty)',HD:'HD (Heavy Duty)',XHD:'XHD (Extra Heavy Duty)'};var 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 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 towball=document.getElementById('towball');var rateValueEl=document.getElementById('rate-value');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 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('[data-t]');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var tierSyncNote=document.getElementById('tier-sync-note');var tierOverridden=false;var isSyncingTier=false;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 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 getVehicle(){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){if(radios[i].name.trim().indexOf('Vehicle')===0\u0026\u0026radios[i].checked){return radios[i].value.trim().indexOf('N70')\u003e-1?'n70':'n80';}}\nreturn'n80';}\nfunction selectTierVariant(code){var target=TIER_VARIANT_VALUE[code];var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Leaf Pack Duty Tier')===0\u0026\u0026r.value===target\u0026\u0026!r.checked){isSyncingTier=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\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 vehicle=getVehicle();var rearMaxKg=REAR_MAX_KG[vehicle];var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var rateRounded=Math.round(rateRaw\/50)*50;rateRounded=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRounded));rateValueEl.textContent=rateRounded;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){var r=parseInt(t.getAttribute('data-r'),10);t.classList.toggle('active',r===rateRounded);});var lift=checkedStr(liftInputs);if(lift==='2'){liftNote.innerHTML='On the 6112, 2in lands on the \u003cstrong\u003e7th circlip\u003c\/strong\u003e — each clip is 5mm of adjuster travel, worth roughly 10mm of ride height. 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 — about \u003cstrong\u003e2.5 clips\u003c\/strong\u003e further up from the 6112\\'s 2in setting. 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');}\nvar totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=vehicle.toUpperCase();gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nif(tierOverridden){tierSyncNote.textContent='You\\'ve manually set the Leaf Pack Duty Tier above — we\\'ll leave it alone. Change anything below to let us re-suggest it.';}else{tierSyncNote.textContent='Uses the Vehicle option you picked above — N70 and N80 run different leaf packs and shackles, so getting this right matters. We\\'ve set the Leaf Pack Duty Tier option to match — override it up top any time.';selectTierVariant(tier.code);}\nbatteryNote.classList.toggle('show',battery.checked);(function(){var w=document.getElementById('rearshock-warn');if(!w)return;var rs=document.querySelectorAll('input[name=\"rearshock\"]'),v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;w.classList.toggle('show',v===\"660\");})();syncToShopify(rateRounded,totalFrontKg,tier,totalRearKgRaw,added.towballKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];var chfLift=(function(){var ls=document.querySelectorAll('input[name=\"lift\"]');for(var i=0;i\u003cls.length;i++)if(ls[i].checked)return ls[i].value;return '';})();if(chfLift)lines.push('Lift Height: '+chfLift);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('Suggested Spring Rate: '+document.getElementById('rate-value').textContent+'lb');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((function(){var rs=document.querySelectorAll('input[name=\"rearshock\"]');var v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;return v===\"660\"?\"Rear shock: Long travel (660mm open) — recommended run bump stop extension\":\"Rear shock: Standard (630mm open)\";})());lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(rateLb, frontKg, tier, rearKg, towballKg){if(chfLiftBoldEl){var lb=document.querySelectorAll('input[name=\"lift\"]');for(var _i=0;_i\u003clb.length;_i++)if(lb[_i].checked)chfLiftBoldEl.textContent=lb[_i].value;}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);}\n[].concat([].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')),[].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();tierOverridden=false;update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();tierOverridden=false;update();});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Vehicle')===0){update();}else if(name.indexOf('Leaf Pack Duty Tier')===0){if(isSyncingTier){isSyncingTier=false;}\nelse{tierOverridden=true;update();}}});function injectTierReassurance(){if(document.getElementById('chf-tier-reassure'))return;var fieldsets=document.querySelectorAll('variant-selects fieldset');for(var i=0;i\u003cfieldsets.length;i++){var legend=fieldsets[i].querySelector('legend');if(legend\u0026\u0026legend.textContent.trim().indexOf('Leaf Pack Duty Tier')===0){var note=document.createElement('p');note.id='chf-tier-reassure';note.textContent=\"Rated for load, not looks — this matches what your rear axle actually carries. A higher tier just means it's set up for the weight you're running, not that we're pushing you toward something extreme. And if you land on XHD and it turns out to be more than you need, dropping a leaf later is a straightforward job for anyone handy with tools — conjuring one out of thin air isn't. When in doubt, size up.\";note.style.cssText='font-size:12.5px;line-height:1.5;margin:8px 0 0;max-width:52ch;opacity:.72;';fieldsets[i].insertAdjacentElement('afterend',note);break;}}}\ntoggleNudge();update();injectTierReassurance();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\n\n\u003ch3\u003eWhat's included\u003c\/h3\u003e\u003cul\u003e\n\u003cli\u003eBilstein 6112 B60 Front Coilover (2.5in big bore)\u003c\/li\u003e\n\u003cli\u003eBilstein Platinum Rear Shock — 630mm open\u003c\/li\u003e\n\u003cli\u003eRear leaf spring pack — duty tier selectable, matched to your Vehicle selection (N70 and N80 use different packs)\u003c\/li\u003e\n\u003cli\u003eLeaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003e\u003cstrong\u003eNote:\u003c\/strong\u003e N70 and N80 shackles differ too — if you're supplying or reusing your own, check fitment against the Vehicle you selected above.\u003c\/p\u003e\u003cp\u003eOptional add-on: CalOffroad Fixed Upper Control Arm Kit (2° caster) — corrects caster\/camber geometry at this lift height, sold separately or bundled here at a discount off buying individually.\u003c\/p\u003e\u003cp\u003e\u003cem\u003ePrices shown are the sum of individually costed components. This is a made-to-order package — allow standard lead time for the leaf pack and 6112 to be picked and freighted together.\u003c\/em\u003e\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Hilux N70 \/ LD (Light Duty) \/ None","offer_id":58283707793711,"sku":null,"price":4609.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ LD (Light Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283707826479,"sku":null,"price":5578.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ MD (Medium Duty) \/ None","offer_id":58283707859247,"sku":null,"price":4609.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ MD (Medium Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283707892015,"sku":null,"price":5578.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ HD (Heavy Duty) \/ None","offer_id":58283707924783,"sku":null,"price":4609.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ HD (Heavy Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283707957551,"sku":null,"price":5578.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ XHD (Extra Heavy Duty) \/ None","offer_id":58283707990319,"sku":null,"price":4656.61,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ XHD (Extra Heavy Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283708023087,"sku":null,"price":5625.61,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ LD (Light Duty) \/ None","offer_id":58283708055855,"sku":null,"price":4617.11,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ LD (Light Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283708088623,"sku":null,"price":5586.11,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ MD (Medium Duty) \/ None","offer_id":58283708121391,"sku":null,"price":4609.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ MD (Medium Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283708154159,"sku":null,"price":5578.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ HD (Heavy Duty) \/ None","offer_id":58283708186927,"sku":null,"price":4609.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ HD (Heavy Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283708219695,"sku":null,"price":5578.47,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ XHD (Extra Heavy Duty) \/ None","offer_id":58283708252463,"sku":null,"price":4866.93,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ XHD (Extra Heavy Duty) \/ CalOffroad UCA Fixed 2 Degree (+969)","offer_id":58283708285231,"sku":null,"price":5835.93,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ LD (Light Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709366575,"sku":null,"price":4716.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ MD (Medium Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709399343,"sku":null,"price":4716.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ HD (Heavy Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709432111,"sku":null,"price":4716.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ XHD (Extra Heavy Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709464879,"sku":null,"price":4763.2,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ LD (Light Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709497647,"sku":null,"price":4723.7,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ MD (Medium Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709530415,"sku":null,"price":4716.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ HD (Heavy Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709563183,"sku":null,"price":4716.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ XHD (Extra Heavy Duty) \/ Sway Bar Relocation (+107)","offer_id":58283709595951,"sku":null,"price":4973.52,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ LD (Light Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709628719,"sku":null,"price":5685.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ MD (Medium Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709661487,"sku":null,"price":5685.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ HD (Heavy Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709694255,"sku":null,"price":5685.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N70 \/ XHD (Extra Heavy Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709727023,"sku":null,"price":5732.2,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ LD (Light Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709759791,"sku":null,"price":5692.7,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ MD (Medium Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709792559,"sku":null,"price":5685.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ HD (Heavy Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709825327,"sku":null,"price":5685.06,"currency_code":"AUD","in_stock":true},{"title":"Hilux N80 \/ XHD (Extra Heavy Duty) \/ UCA and Sway Bar Both (+1076)","offer_id":58283709858095,"sku":null,"price":5942.52,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/6112_full_kit.png?v=1787016659"},{"product_id":"caloffroad-platinum-front-coil-spring-pair-2-3in-lift-hilux-n70-n80","title":"CalOffroad Platinum Front Coil Spring Pair (2-3in Lift) — Hilux N70\/N80","description":"\u003cdiv class=\"chf-wcalc\" id=\"chf-spring-calc\"\u003e\n  \u003cdiv class=\"chf-wcalc-head\"\u003eSpring Tier Calculator — find your front coil spring\u003c\/div\u003e\n  \u003cp class=\"chf-wcalc-sub\"\u003eTick what's fitted up front to get a guide on whether you need MD\/HD or XHD.\u003c\/p\u003e\n  \u003cdiv class=\"chf-wcalc-tip\" id=\"chf-spring-nudge-banner\"\u003e\n    \u003cspan id=\"chf-spring-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  \u003ctable class=\"chf-wcalc-table\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003cth\u003eFront accessory\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-bullbar2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBull bar (steel or alloy)\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-winch2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWinch\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-sliders2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eRock sliders\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-bash2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBash\/skid plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-battery2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eExtra\/dual battery (engine bay)\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003clabel class=\"chf-wcalc-heavy\"\u003e\u003cinput type=\"checkbox\" id=\"chf-heavy-flag2\"\u003e My ute is on the heavier side overall (bigger canopy\/tray, tools, general heavy build)\u003c\/label\u003e\n\n  \u003cdiv class=\"chf-wcalc-lift\"\u003e\n    \u003cdiv class=\"chf-wcalc-lift-label\"\u003eLift height you're chasing:\u003c\/div\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-spring-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-spring-lift\" value=\"3in\"\u003e 3in\u003c\/label\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested tier: \u003cspan id=\"chf-spring-rating\"\u003eMD\/HD\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-spring-battery-note\"\u003eNote: an extra\/dual battery sits off to one side of the engine bay — mention this when you contact us so we can advise on preload.\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-ref\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eTier\u003c\/th\u003e\n\u003cth\u003eTypical setup\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003eMD\/HD\u003c\/td\u003e\n\u003ctd\u003eStock through to bull bar + winch + rock sliders + bash plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eXHD\u003c\/td\u003e\n\u003ctd\u003eHeavier ute overall, or maximum front accessory load\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003cp class=\"chf-wcalc-disclaimer\"\u003e* Guide only. This gets attached to your order automatically so we see it when you check out — we'll still confirm your tier before dispatch.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  #chf-spring-calc, #chf-spring-calc *{box-sizing:border-box;}\n  #chf-spring-calc{font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:0 0 24px;background:#ffffff !important;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-head{font-weight:800;font-size:1.15em;margin-bottom:6px;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-sub{font-size:.9em;color:#333333 !important;margin:0 0 14px;}\n  #chf-spring-calc table.chf-wcalc-table{width:100%;border-collapse:collapse;font-size:.95em;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table th{text-align:left;border-bottom:2px solid #222;padding:6px;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table td{padding:8px 6px;border-bottom:1px solid #ccc;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table td:first-child{width:32px;}\n  #chf-spring-calc input[type=checkbox], #chf-spring-calc input[type=radio]{width:18px;height:18px;accent-color:#ff7a1a;}\n  #chf-spring-calc .chf-wcalc-heavy{display:flex;align-items:flex-start;gap:8px;font-size:.9em;margin:14px 0;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-heavy input{margin-top:2px;flex-shrink:0;}\n  #chf-spring-calc .chf-wcalc-lift{border-top:1px solid #ccc;padding-top:12px;margin-top:8px;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-lift-label{font-weight:700;margin-bottom:8px;}\n  #chf-spring-calc .chf-wcalc-lift label{display:inline-flex;align-items:center;gap:6px;margin-right:24px;font-size:.95em;}\n  #chf-spring-calc .chf-wcalc-result{background:#111111 !important;color:#ffffff !important;border-radius:6px;padding:12px 16px;margin:16px 0;}\n  #chf-spring-calc .chf-wcalc-rating{font-size:1.1em;font-weight:800;color:#ffffff !important;}\n  #chf-spring-calc .chf-wcalc-rating span{color:#ffb347 !important;font-weight:800;}\n  #chf-spring-calc .chf-wcalc-note{display:none;font-size:.85em;color:#ffe0b3 !important;margin-top:10px;line-height:1.4;}\n  #chf-spring-calc .chf-wcalc-note.show{display:block;}\n  #chf-spring-calc .chf-wcalc-tip{border:1px solid #ddd8cc;border-left:4px solid #ff7a1a;border-radius:6px;padding:10px 14px;margin:0 0 16px;font-size:.85em;line-height:1.5;color:#111111 !important;background:#f8f6f1 !important;}\n  #chf-spring-calc table.chf-wcalc-ref{width:100%;border-collapse:collapse;font-size:.9em;margin-top:10px;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-ref th{color:#111111 !important;background:#ffffff !important;border-bottom:2px solid #222;padding:6px;text-align:left;}\n  #chf-spring-calc table.chf-wcalc-ref td{color:#111111 !important;background:#ffffff !important;border-bottom:1px solid #ccc;padding:6px;text-align:left;}\n  #chf-spring-calc .chf-wcalc-disclaimer{font-size:.8em;color:#555555 !important;margin-top:12px;}\n\u003c\/style\u003e\n\u003cscript\u003e\n(function(){\n  var root = document.getElementById('chf-spring-calc');\n  if(!root) return;\n  var bullbar = document.getElementById('chf-bullbar2');\n  var winch = document.getElementById('chf-winch2');\n  var sliders = document.getElementById('chf-sliders2');\n  var bash = document.getElementById('chf-bash2');\n  var battery = document.getElementById('chf-battery2');\n  var heavyFlag = document.getElementById('chf-heavy-flag2');\n  var ratingEl = document.getElementById('chf-spring-rating');\n  var batteryNote = document.getElementById('chf-spring-battery-note');\n  var liftRadios = root.querySelectorAll('input[name=chf-spring-lift]');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-spring-nudge-banner');\n  var nudgeText = document.getElementById('chf-spring-nudge-text');\n  function toggleNudge(){\n    if(!nudgeBanner||!nudgeText) return;\n    if(touched){ nudgeText.textContent = \"Thanks — we've got your setup details.\"; }\n    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.\"; }\n  }\n\n  function findCartForm(){\n    var forms = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]'));\n    return forms.find(function(f){ return f.querySelector('button[type=submit], button[name=add]'); }) || forms[0];\n  }\n  var cartForm = findCartForm();\n  var hiddenTier, hiddenLift, hiddenBattery;\n  if(cartForm){\n    hiddenTier = document.createElement('input');\n    hiddenTier.type = 'hidden';\n    hiddenTier.name = 'properties[Suggested Spring Tier]';\n    cartForm.appendChild(hiddenTier);\n\n    hiddenLift = document.createElement('input');\n    hiddenLift.type = 'hidden';\n    hiddenLift.name = 'properties[Lift Height Chasing]';\n    cartForm.appendChild(hiddenLift);\n\n    hiddenBattery = document.createElement('input');\n    hiddenBattery.type = 'hidden';\n    hiddenBattery.name = 'properties[Extra Battery Preload Needed]';\n    cartForm.appendChild(hiddenBattery);\n  }\n\n  function getLift(){\n    var checked = Array.from(liftRadios).find(function(r){ return r.checked; });\n    return checked ? checked.value : '2in';\n  }\n\n  function recalc(){\n    var tier = 'MD\/HD';\n    if(heavyFlag.checked || (bullbar.checked \u0026\u0026 winch.checked \u0026\u0026 sliders.checked \u0026\u0026 bash.checked)){\n      tier = 'XHD';\n    }\n    ratingEl.textContent = tier;\n    batteryNote.className = 'chf-wcalc-note' + (battery.checked ? ' show' : '');\n\n    if(hiddenTier) hiddenTier.value = tier;\n    if(hiddenLift) hiddenLift.value = getLift();\n    if(hiddenBattery) hiddenBattery.value = battery.checked ? 'Yes' : 'No';\n  }\n  [bullbar,winch,sliders,bash,battery,heavyFlag].forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  toggleNudge();\n  recalc();\n})();\n\u003c\/script\u003e\n\u003cp\u003eCalOffroad Platinum Series front coil spring pair, 2-3in lift, for Hilux N70\/N80. Use the calculator above as a guide, or select your tier directly below — we'll confirm before dispatch.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e","brand":"CalOffroad","offers":[{"title":"MD\/HD","offer_id":58285580321071,"sku":null,"price":340.0,"currency_code":"AUD","in_stock":true},{"title":"XHD","offer_id":58285580845359,"sku":null,"price":340.0,"currency_code":"AUD","in_stock":true}]},{"product_id":"caloffroad-platinum-series-2-lift-kit-hilux-n70-2005-2015-xhd-xhd","title":"CalOffroad Platinum Series Lift Kit — Hilux N70 (2005-2015), XHD\/XHD","description":"\u003cp\u003eCalOffroad Platinum Series 4x4 lift kit tour pack for the Toyota Hilux N70 (2005-2015), Extra Heavy Duty front and rear. The Platinum tier runs Bilstein-built struts and shocks, a step above the Nitro Pro range.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Platinum Bilstein front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Platinum Bilstein rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Lift Kit 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    \u003cstrong\u003eToyota Hilux N70\u003c\/strong\u003e carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e on an LD tier. This kit is built for the \u003cstrong\u003eXHD\u003c\/strong\u003e range —\n    tell us what's fitted and we'll confirm it fits, and set your Lift Height to match.\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  \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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"lift-sync-note\"\u003eWe've set the Lift Height option above to match — change it any time.\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    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e2in\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear Shock Length\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eStandard fits the factory bump stop. Long travel has a shorter closed length and needs a bump stop extension.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Rear shock length\"\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-630\" value=\"630\" checked\u003e\n      \u003clabel for=\"rearshock-630\"\u003eStandard\u003cspan class=\"kg\"\u003e630mm open\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-660\" value=\"660\"\u003e\n      \u003clabel for=\"rearshock-660\"\u003eLong travel\u003cspan class=\"kg\"\u003e660mm open\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"rearshock-warn\"\u003e\n      \u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\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-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\"\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\"\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eThis kit is built for the XHD range.\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\"\u003e1000\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\"\u003eToyota Hilux N70\u003c\/strong\u003e's rated rear axle capacity\n      (\u003cstrong id=\"gvm-warn-cap\"\u003e1600kg\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 kit's XHD build range. Nothing wrong running it under-loaded, but if you want a softer daily ride, talk to us about a lighter kit instead.\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=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 REAR_STOCK_KG=1000;var REAR_MAX_KG=1600;var VEHICLE_LABEL='Toyota Hilux N70';var RANGE_MIN_INDEX=3;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 TIER_ORDER=['LD','MD','HD','XHD'];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}};var PLATINUM_MODEL={2:'5012',3:'5016'};var PLATINUM_LETTER={LD:'LI',MD:'ME',HD:'HE',XHD:'EX'};var 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');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 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 towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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');var isSyncingLift=false;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.\";}}\nfunction 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 selectLiftVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Lift Height')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){isSyncingLift=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\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;var rearKg=buildTotal;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;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nvar worseIndex=Math.max(TIER_ORDER.indexOf(frontTier.code),TIER_ORDER.indexOf(tier.code));rangeWarn.classList.toggle('show',worseIndex\u003cRANGE_MIN_INDEX);selectLiftVariant(checkedStr(liftInputs)||'2in');batteryNote.classList.toggle('show',battery.checked);(function(){var w=document.getElementById('rearshock-warn');if(!w)return;var rs=document.querySelectorAll('input[name=\"rearshock\"]'),v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;w.classList.toggle('show',v===\"660\");})();syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg,checkedStr(liftInputs)||'2in');}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift){var lines=[];var skuLift=parseInt(lift,10);var skuModel=PLATINUM_MODEL[skuLift];var sku=skuModel?('CAL'+skuModel+'-'+PLATINUM_LETTER[frontTier.code]+'-'+PLATINUM_LETTER[tier.code]+'-A'):'confirm SKU manually';lines.push('CoolDrive Order Code: '+sku);lines.push('Vehicle: '+VEHICLE_LABEL);lines.push('Lift Height: '+lift);lines.push('Suggested Front Duty Tier: '+frontTier.code+' ('+frontTier.full+')');lines.push('Est. Front Axle Load: '+Math.round(frontKg)+'kg');lines.push('Suggested Rear Duty Tier: '+tier.code+' ('+tier.full+')');lines.push('Est. Rear Axle Load: '+Math.round(rearKg)+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(battery.checked?'Yes':'No'));if(towballKg\u003e0)lines.push('Tow Ball Weight: '+Math.round(towballKg)+'kg');lines.push((function(){var rs=document.querySelectorAll('input[name=\"rearshock\"]');var v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;return v===\"660\"?\"Rear shock: Long travel (660mm open) — recommended run bump stop extension\":\"Rear shock: Standard (630mm open)\";})());lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(frontTier,frontKg,tier,rearKg,towballKg,lift){if(chfLiftBoldEl)chfLiftBoldEl.textContent=lift;var text=chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift);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);}\n[].concat([].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')),[].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',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.');}});});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Lift Height')===0){if(isSyncingLift){isSyncingLift=false;return;}\nvar val=e.target.value.trim();for(var i=0;i\u003cliftInputs.length;i++){if(liftInputs[i].value===val)liftInputs[i].checked=true;}\nupdate();}});toggleNudge();update();})();\u003c\/script\u003e\n\u003c\/div\u003e\n\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e\n","brand":"CalOffroad","offers":[{"title":"2in","offer_id":58287339340079,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287355855151,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5012-EX-EX.tag.1.jpg?v=1785904186"},{"product_id":"caloffroad-platinum-series-2-lift-kit-hilux-n80-2015-on-xhd-xhd","title":"CalOffroad Platinum Series Lift Kit — Hilux N80 (2015 on), XHD\/XHD","description":"\u003cp\u003eCalOffroad Platinum Series 4x4 lift kit tour pack for the \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e (2015 on), Extra Heavy Duty front and rear. The Platinum tier runs Bilstein-built struts and shocks, a step above the Nitro Pro range.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Platinum Bilstein front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Platinum Bilstein rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Lift Kit 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e on an LD tier. This kit is built for the \u003cstrong\u003eXHD\u003c\/strong\u003e range —\n    tell us what's fitted and we'll confirm it fits, and set your Lift Height to match.\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  \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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"lift-sync-note\"\u003eWe've set the Lift Height option above to match — change it any time.\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    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e2in\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear Shock Length\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eStandard fits the factory bump stop. Long travel has a shorter closed length and needs a bump stop extension.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Rear shock length\"\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-630\" value=\"630\" checked\u003e\n      \u003clabel for=\"rearshock-630\"\u003eStandard\u003cspan class=\"kg\"\u003e630mm open\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-660\" value=\"660\"\u003e\n      \u003clabel for=\"rearshock-660\"\u003eLong travel\u003cspan class=\"kg\"\u003e660mm open\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"rearshock-warn\"\u003e\n      \u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\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-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\"\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\"\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eThis kit is built for the XHD range.\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\"\u003e1000\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\"\u003eToyota Hilux N80\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=\"range-warn\"\u003e\n      Your setup calculates lighter than this kit's XHD build range. Nothing wrong running it under-loaded, but if you want a softer daily ride, talk to us about a lighter kit instead.\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=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 REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var VEHICLE_LABEL='Toyota Hilux N80';var RANGE_MIN_INDEX=3;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 TIER_ORDER=['LD','MD','HD','XHD'];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}};var PLATINUM_MODEL={2:'5013',3:'5017'};var PLATINUM_LETTER={LD:'LI',MD:'ME',HD:'HE',XHD:'EX'};var 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');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 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 towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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');var isSyncingLift=false;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.\";}}\nfunction 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 selectLiftVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Lift Height')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){isSyncingLift=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\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;var rearKg=buildTotal;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;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nvar worseIndex=Math.max(TIER_ORDER.indexOf(frontTier.code),TIER_ORDER.indexOf(tier.code));rangeWarn.classList.toggle('show',worseIndex\u003cRANGE_MIN_INDEX);selectLiftVariant(checkedStr(liftInputs)||'2in');batteryNote.classList.toggle('show',battery.checked);(function(){var w=document.getElementById('rearshock-warn');if(!w)return;var rs=document.querySelectorAll('input[name=\"rearshock\"]'),v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;w.classList.toggle('show',v===\"660\");})();syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg,checkedStr(liftInputs)||'2in');}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift){var lines=[];var skuLift=parseInt(lift,10);var skuModel=PLATINUM_MODEL[skuLift];var sku=skuModel?('CAL'+skuModel+'-'+PLATINUM_LETTER[frontTier.code]+'-'+PLATINUM_LETTER[tier.code]+'-A'):'confirm SKU manually';lines.push('CoolDrive Order Code: '+sku);lines.push('Vehicle: '+VEHICLE_LABEL);lines.push('Lift Height: '+lift);lines.push('Suggested Front Duty Tier: '+frontTier.code+' ('+frontTier.full+')');lines.push('Est. Front Axle Load: '+Math.round(frontKg)+'kg');lines.push('Suggested Rear Duty Tier: '+tier.code+' ('+tier.full+')');lines.push('Est. Rear Axle Load: '+Math.round(rearKg)+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(battery.checked?'Yes':'No'));if(towballKg\u003e0)lines.push('Tow Ball Weight: '+Math.round(towballKg)+'kg');lines.push((function(){var rs=document.querySelectorAll('input[name=\"rearshock\"]');var v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;return v===\"660\"?\"Rear shock: Long travel (660mm open) — recommended run bump stop extension\":\"Rear shock: Standard (630mm open)\";})());lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(frontTier,frontKg,tier,rearKg,towballKg,lift){if(chfLiftBoldEl)chfLiftBoldEl.textContent=lift;var text=chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift);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);}\n[].concat([].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')),[].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',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.');}});});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Lift Height')===0){if(isSyncingLift){isSyncingLift=false;return;}\nvar val=e.target.value.trim();for(var i=0;i\u003cliftInputs.length;i++){if(liftInputs[i].value===val)liftInputs[i].checked=true;}\nupdate();}});toggleNudge();update();})();\u003c\/script\u003e\n\u003c\/div\u003e\n\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e\n","brand":"CalOffroad","offers":[{"title":"2in","offer_id":58287344582959,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287356084527,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5013-EX-EX.tag.1.jpg?v=1785904209"},{"product_id":"caloffroad-platinum-series-2-lift-kit-ford-ranger-px1-px2-hd-xhd","title":"CalOffroad Platinum Series Lift Kit — Ford Ranger PX1\/PX2, HD\/XHD","description":"\u003cp\u003eCalOffroad Platinum Series 4x4 lift kit tour pack for the Ford Ranger PX1 (2011-2015) and PX2 (2015-2018). Heavy Duty front, Extra Heavy Duty rear. The Platinum tier runs Bilstein-built struts and shocks, a step above the Nitro Pro range.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Platinum Bilstein front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Platinum Bilstein rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Lift Kit 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Ford Ranger PX1\/PX2 carries a stock front axle around \u003cstrong\u003e1185kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e970kg\u003c\/strong\u003e on an LD tier. This kit is built for the \u003cstrong\u003eHD-XHD\u003c\/strong\u003e range —\n    tell us what's fitted and we'll confirm it fits, and set your Lift Height to match.\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    \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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"lift-sync-note\"\u003eWe've set the Lift Height option above to match — change it any time.\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    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e?\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\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-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\"\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\"\u003e1185\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eThis kit is built for the HD-XHD range.\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=\"range-warn\"\u003e\n      Your setup calculates lighter than this kit's HD-XHD build range. Nothing wrong running it under-loaded, but if you want a softer daily ride, talk to us about a lighter kit instead.\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 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 REAR_STOCK_KG=970;var REAR_MAX_KG=2015;var VEHICLE_LABEL='Ford Ranger PX1\/PX2';var RANGE_MIN_INDEX=2;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 TIER_ORDER=['LD','MD','HD','XHD'];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}};var 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');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 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 towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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');var isSyncingLift=false;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.\";}}\nfunction 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 selectLiftVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Lift Height')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){isSyncingLift=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\nfunction checkedStr(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return list[i].value;return'';}\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 rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nvar worseIndex=Math.max(TIER_ORDER.indexOf(frontTier.code),TIER_ORDER.indexOf(tier.code));rangeWarn.classList.toggle('show',worseIndex\u003cRANGE_MIN_INDEX);selectLiftVariant(checkedStr(liftInputs)||'2in');batteryNote.classList.toggle('show',battery.checked);syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg,checkedStr(liftInputs)||'2in');}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(frontTier, frontKg, tier, rearKg, towballKg, lift){var lines=[];lines.push('Vehicle: '+VEHICLE_LABEL);lines.push('Lift Height: '+lift);lines.push('Suggested Front Duty Tier: '+frontTier.code+' ('+frontTier.full+')');lines.push('Est. Front Axle Load: '+Math.round(frontKg)+'kg');lines.push('Suggested Rear Duty Tier: '+tier.code+' ('+tier.full+')');lines.push('Est. Rear Axle Load: '+Math.round(rearKg)+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(battery.checked?'Yes':'No'));if(towballKg\u003e0)lines.push('Tow Ball Weight: '+Math.round(towballKg)+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(frontTier, frontKg, tier, rearKg, towballKg, lift){if(chfLiftBoldEl)chfLiftBoldEl.textContent=lift;var text=chfBuildNoteText(frontTier, frontKg, tier, rearKg, towballKg, lift);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);}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Lift Height')===0){if(isSyncingLift){isSyncingLift=false;return;}\nvar val=e.target.value.trim();for(var i=0;i\u003cliftInputs.length;i++){if(liftInputs[i].value===val)liftInputs[i].checked=true;}\nupdate();}});toggleNudge();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.');}});});})();\u003c\/script\u003e\n\u003c\/div\u003e\n","brand":"CalOffroad","offers":[{"title":"2in","offer_id":58287346680111,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287356215599,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5006-HE-EX.tag.1.jpg?v=1785904234"},{"product_id":"caloffroad-platinum-series-lift-kit-ford-ranger-px3-2018-on-hd-xhd","title":"CalOffroad Platinum Series Lift Kit — Ford Ranger PX3 (2018 on), HD\/XHD","description":"\u003cp\u003eCalOffroad Platinum Series 4x4 lift kit tour pack for the Ford Ranger PX3 (2018 on). Heavy Duty front, Extra Heavy Duty rear. The Platinum tier runs Bilstein-built struts and shocks, a step above the Nitro Pro range.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Platinum Bilstein front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Platinum Bilstein rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Lift Kit PX3 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 \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    Ford Ranger PX3 carries a stock front axle around \u003cstrong\u003e1185kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e970kg\u003c\/strong\u003e on an LD tier. This kit is built for the \u003cstrong\u003eHD-XHD\u003c\/strong\u003e range —\n    tell us what's fitted and we'll confirm it fits, and set your Lift Height to match.\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    \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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"lift-sync-note\"\u003eWe've set the Lift Height option above to match — change it any time.\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    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e?\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\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-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\"\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\"\u003e1185\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\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\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eThis kit is built for the HD-XHD range.\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 PX3\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=\"range-warn\"\u003e\n      Your setup calculates lighter than this kit's HD-XHD build range. Nothing wrong running it under-loaded, but if you want a softer daily ride, talk to us about a lighter kit instead.\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 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 REAR_STOCK_KG=970;var REAR_MAX_KG=2015;var VEHICLE_LABEL='Ford Ranger PX3';var RANGE_MIN_INDEX=2;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 TIER_ORDER=['LD','MD','HD','XHD'];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}};var 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');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 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 towball=document.getElementById('towball');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 batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');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');var isSyncingLift=false;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.\";}}\nfunction 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 selectLiftVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Lift Height')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){isSyncingLift=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\nfunction checkedStr(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return list[i].value;return'';}\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 rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.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')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);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;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\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nvar worseIndex=Math.max(TIER_ORDER.indexOf(frontTier.code),TIER_ORDER.indexOf(tier.code));rangeWarn.classList.toggle('show',worseIndex\u003cRANGE_MIN_INDEX);selectLiftVariant(checkedStr(liftInputs)||'2in');batteryNote.classList.toggle('show',battery.checked);syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg,checkedStr(liftInputs)||'2in');}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(frontTier, frontKg, tier, rearKg, towballKg, lift){var lines=[];lines.push('Vehicle: '+VEHICLE_LABEL);lines.push('Lift Height: '+lift);lines.push('Suggested Front Duty Tier: '+frontTier.code+' ('+frontTier.full+')');lines.push('Est. Front Axle Load: '+Math.round(frontKg)+'kg');lines.push('Suggested Rear Duty Tier: '+tier.code+' ('+tier.full+')');lines.push('Est. Rear Axle Load: '+Math.round(rearKg)+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(battery.checked?'Yes':'No'));if(towballKg\u003e0)lines.push('Tow Ball Weight: '+Math.round(towballKg)+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(frontTier, frontKg, tier, rearKg, towballKg, lift){if(chfLiftBoldEl)chfLiftBoldEl.textContent=lift;var text=chfBuildNoteText(frontTier, frontKg, tier, rearKg, towballKg, lift);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);}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Lift Height')===0){if(isSyncingLift){isSyncingLift=false;return;}\nvar val=e.target.value.trim();for(var i=0;i\u003cliftInputs.length;i++){if(liftInputs[i].value===val)liftInputs[i].checked=true;}\nupdate();}});toggleNudge();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.');}});});})();\u003c\/script\u003e\n\u003c\/div\u003e\n","brand":"CalOffroad","offers":[{"title":"2in","offer_id":58287388000559,"sku":null,"price":3480.16,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287391211823,"sku":null,"price":3480.16,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5007-HE-EX.tag.1.jpg?v=1785905718"},{"product_id":"bilstein-6112-front-platinum-rear-shock-kit-shocks-only-no-leaf-pack-hilux-n70-n80","title":"Bilstein 6112 2.5in Body Front + Platinum Rear Shock Kit (Shocks Only, No Leaf Pack) — Hilux N70\/N80","description":"\u003cstrong\u003eBilstein 6112 B60 big-bore front coilovers paired with Bilstein Platinum 630mm rear shocks — shocks only, on your existing standard leaf pack.\u003c\/strong\u003e Pick your lift height above (2in or 3in), then run the calculator below so we can match your front spring rate — it attaches to your order automatically, so most builds need no back and forth.\n\u003cdiv style=\"background:#fff3d6;border:1px solid #e0b455;border-radius:6px;padding:12px 16px;margin:0 0 20px;font-size:14px;line-height:1.5;color:#111;\"\u003e\n\u003cstrong\u003eNo leaf pack included.\u003c\/strong\u003e This kit is shocks only — front coilover pair + rear shock pair — for utes staying on their standard leaf pack (no bump stop mod required on the rear). If you also need a leaf pack, see our \u003ca href=\"\/products\/big-bore-lift-kit-bilstein-6112-platinum-630-rear-leaf-pack-hilux-n70-n80\"\u003eBig Bore Lift Kit (with leaf pack)\u003c\/a\u003e instead.\n\u003c\/div\u003e\n\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  .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    padding: 40px 16px 64px;\n    border-radius: 6px;\n  }\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-weight: 700; text-transform: uppercase; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; color: var(--text); }\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-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; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, 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 { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg { color: var(--accent-ink); opacity: 0.75; }\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; }\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; }\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  .chf-calc fieldset { border: none; margin: 0; 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, monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .readout-main .value .unit { 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, 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, monospace; font-size: 20px; font-weight: 500; color: var(--text); }\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; }\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; 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, monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\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  .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  .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-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\u003c\/style\u003e\n\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eSpring Rate Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in your front end.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eA stock front axle sits at \u003cstrong\u003e1180kg\u003c\/strong\u003e and runs a \u003cstrong\u003e600lb\u003c\/strong\u003e coil. Every kilo you bolt on shifts that number — but only the fraction that actually lands on the front axle. Tell us what's fitted and we'll work out the rest, then attach it to your order.\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 odd weekend track — not the one loaded trip you do three times a year. 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\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eSet above — this reflects whatever you've picked.\u003c\/p\u003e\n    \u003cdiv class=\"lift-note\" id=\"lift-note\"\u003eOn the 6112, 2in lands on the \u003cstrong\u003e7th circlip\u003c\/strong\u003e — each clip is 5mm of adjuster travel, worth roughly 10mm of ride height. Nothing above 3in: past that, ride quality falls off fast for no real gain, and that's not what we build.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear Shock Length\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eStandard fits the factory bump stop. Long travel has a shorter closed length and needs a bump stop extension.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Rear shock length\"\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-630\" value=\"630\" checked\u003e\n      \u003clabel for=\"rearshock-630\"\u003eStandard\u003cspan class=\"kg\"\u003e630mm open\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-660\" value=\"660\"\u003e\n      \u003clabel for=\"rearshock-660\"\u003eLong travel\u003cspan class=\"kg\"\u003e660mm open\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"rearshock-warn\"\u003e\n      \u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\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\u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\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\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\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\u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\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\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\u003cspan class=\"track\"\u003e\u003c\/span\u003e\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\u003cspan class=\"track\"\u003e\u003c\/span\u003e\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\u003cspan class=\"track\"\u003e\u003c\/span\u003e\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\u003cspan class=\"track\"\u003e\u003c\/span\u003e\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\u003cstrong\u003eNote:\u003c\/strong\u003e 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.\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\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\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\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 Spring Rate\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n\u003cdiv class=\"label\"\u003eSuggested spring\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rate-value\"\u003e600\u003c\/span\u003e\u003cspan class=\"unit\"\u003elb\u003c\/span\u003e\n\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-r=\"600\"\u003e600\u003c\/span\u003e\u003cspan data-r=\"650\"\u003e650\u003c\/span\u003e\u003cspan data-r=\"700\"\u003e700\u003c\/span\u003e\u003cspan data-r=\"750\"\u003e750\u003c\/span\u003e\u003cspan data-r=\"800\"\u003e800\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  \u003cp class=\"foot-note\"\u003eGuide 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.\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 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 sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var rateValueEl=document.getElementById('rate-value');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.\";}}\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 getLiftHeight(){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){if(radios[i].name.trim().indexOf('Lift Height')===0\u0026\u0026radios[i].checked){return radios[i].value.trim();}}\nreturn'2in';}\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 rateRounded=Math.round(rateRaw\/50)*50;rateRounded=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRounded));rateValueEl.textContent=rateRounded;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){var r=parseInt(t.getAttribute('data-r'),10);t.classList.toggle('active',r===rateRounded);});var lift=getLiftHeight();if(lift==='2in'){liftNote.innerHTML='On the 6112, 2in lands on the \u003cstrong\u003e7th circlip\u003c\/strong\u003e — each clip is 5mm of adjuster travel, worth roughly 10mm of ride height. 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 — about \u003cstrong\u003e2.5 clips\u003c\/strong\u003e further up from the 6112\\'s 2in setting. 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);(function(){var w=document.getElementById('rearshock-warn');if(!w)return;var rs=document.querySelectorAll('input[name=\"rearshock\"]'),v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;w.classList.toggle('show',v===\"660\");})();syncToShopify(rateRounded,totalFrontKg,lift);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Lift Height: '+getLiftHeight());lines.push('Suggested Spring Rate: '+document.getElementById('rate-value').textContent+'lb');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'));lines.push((function(){var rs=document.querySelectorAll('input[name=\"rearshock\"]');var v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;return v===\"660\"?\"Rear shock: Long travel (660mm open) — recommended run bump stop extension\":\"Rear shock: Standard (630mm open)\";})());lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(rateLb, frontKg, lift){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);}\n[].concat([].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')),[].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(buildInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});document.addEventListener('change',function(e){if(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')\u0026\u0026e.target.name.trim().indexOf('Lift Height')===0){update();}});toggleNudge();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\n\n\u003cp\u003e\u003cstrong\u003eFront: Bilstein 6112 B60 big-bore coilovers.\u003c\/strong\u003e A 2.5in body with a much larger piston and far more oil volume than the stock 2.0in unit — smoother over corrugations, better front-end control, less fade on long hot trips. Mono-tube gas pressure design keeps oil and nitrogen separated under 200+ psi, virtually eliminating cavitation and fade. Circlip-style height adjustment, matched spring, correct valving.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eRear: Bilstein Platinum 630mm open shocks.\u003c\/strong\u003e Sold as a pair, fits your existing standard leaf pack — no bump stop modification required.\u003c\/p\u003e\n\u003ch3\u003eGood to know\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShocks only — no leaf pack included. If you're also after a leaf pack, see the \u003ca href=\"\/products\/big-bore-lift-kit-bilstein-6112-platinum-630-rear-leaf-pack-hilux-n70-n80\"\u003eBig Bore Lift Kit\u003c\/a\u003e instead.\u003c\/li\u003e\n\u003cli\u003eYou can transfer the front top hat from your factory setup to save a few dollars — or add a note at checkout and we'll assemble with a new one.\u003c\/li\u003e\n\u003cli\u003eLead time is typically 2–4 weeks. Email us if you need it sooner and we'll check current stock.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping applies for the big 2.5in body front units, plus $35 for the rear pair.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order kit and isn't held in stock.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"2in","offer_id":58361659130159,"sku":"BIL-6112-PLAT630-KIT-2IN","price":3720.0,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58361659162927,"sku":"BIL-6112-PLAT630-KIT-3IN","price":3720.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/49192944-4A39-49D4-8A6B-323777E633F8.jpg?v=1786491012"},{"product_id":"caloffroad-platinum-tour-pack-complete-suspension-package-holden-colorado-rg-2in-lift","title":"CalOffroad Platinum Tour Pack Complete Suspension Package — Holden Colorado RG (2in Lift)","description":"\u003cp\u003eCalOffroad Platinum Tour Pack complete suspension package — Bilstein Platinum front and rear shocks with matched rear leaf springs, 2in lift. \u003cstrong\u003eFits Holden Colorado RG (2012-2020).\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003eThe Colorado RG was co-developed by GM and Isuzu on the same platform as the Isuzu D-Max RG, so this is the identical kit we fit to the D-Max RG, just listed under the Colorado name so it's easy to find. Pick your duty rating above based on what you're carrying.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order kit and isn't held in stock — please allow standard lead time.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"LD (Light Duty)","offer_id":58361711198511,"sku":"CAL5001-LI-LI-A-COLORADO-LD","price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"MD (Medium Duty)","offer_id":58361711231279,"sku":"CAL5001-LI-LI-A-COLORADO-MD","price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"HD (Heavy Duty)","offer_id":58361711264047,"sku":"CAL5001-LI-LI-A-COLORADO-HD","price":2861.1,"currency_code":"AUD","in_stock":true},{"title":"XHD (Extra Heavy Duty)","offer_id":58361711296815,"sku":"CAL5001-LI-LI-A-COLORADO-XHD","price":2894.76,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5001-LI-LI-A.tag.1.jpg?v=1785126755"}],"url":"https:\/\/cubbyhousefabworks.com.au\/collections\/bilstein-platinum.oembed","provider":"Cubby House Fabworks","version":"1.0","type":"link"}