{"title":"Bilstein Shock Packages","description":"\u003cp\u003eBilstein suspension packages for Hilux N70\/N80 — 6112 big-bore coilovers, Platinum shocks, and ZoneControl 8100\/8112 coilovers.\u003c\/p\u003e","products":[{"product_id":"bilstein-6112-front-coilovers-hilux-n70-n80","title":"Bilstein 6112 Front Coilovers (Shock Absorbers) | Toyota Hilux N70 N80 | 2.5in Body \/ Big Bore","description":"\u003cp\u003e\u003cstrong\u003eBilstein 6112 B60 big-bore front coilovers for the Hilux N70 and N80.\u003c\/strong\u003e Pick your lift height above (2in or 3in), then run the calculator below so we can match your spring rate — it attaches to your order automatically, so most builds need no back and forth.\u003c\/p\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 Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in your front end.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    A stock front axle sits at \u003cstrong\u003e1180kg\u003c\/strong\u003e and runs a \u003cstrong\u003e600lb\u003c\/strong\u003e coil. Every kilo\n    you bolt on shifts that number — 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\"\u003eSet above — this reflects whatever you've picked.\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\"\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\"\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 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\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 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);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('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(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\u003eBuilt tough for Aussie roads.\u003c\/strong\u003e Sick of bottoming out or a harsh ride up front? A 2.0in body doesn't cut it once you're loaded. These big-bore 2.5in Bilsteins bring a much larger piston and far more oil volume, which means a smoother ride over corrugations and potholes, better front-end control, and far less fade on long hot trips or hard trails.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhy they hit different.\u003c\/strong\u003e Bilstein's mono-tube gas pressure design keeps oil and nitrogen separated under 200+ psi, virtually eliminating cavitation and shock fade — consistent performance even when things get rowdy. They run vulcanised rubber bushings rather than noisy spherical gear, so the ute stays quiet and comfortable even loaded up or flexing through rough tracks.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAdjustable and properly tuned.\u003c\/strong\u003e Circlip-style height adjustment means no guesswork and no silly preload. A matched spring plus correct valving gives you balance, not just height. Plenty of people get this wrong by running an overly stiff spring purely to make the ute sit tall — that's not how we do it. We're chasing ride comfort and capability together.\u003c\/p\u003e\n\u003cp\u003eI run these on my own ute. That's how much I rate them.\u003c\/p\u003e\n\u003ch3\u003eGood to know\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eYou can transfer the 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 on these units. 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 these are big, heavy 2.5in body shocks — an $80 shipping charge applies.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Cubby House Fabworks","offers":[{"title":"2in","offer_id":52033255407919,"sku":null,"price":3050.0,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287548367151,"sku":null,"price":3050.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Screenshot_2024-11-10_at_3.17.31_pm.png?v=1750046472"},{"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":"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":"bilstein-b8-8112-zonecontrol-cr-front-coilovers-hilux-n70-n80","title":"Bilstein B8 8112 ZoneControl CR Front Coilovers — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eLead time: this is a special-order item, typically 4–16 weeks depending on stock and manufacturing at time of order. We'll confirm an estimated timeframe when you order.\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003eThe B8 8112 ZoneControl® CR is Bilstein's flagship position-sensitive front coilover — the same 2.65in remote-reservoir platform used on Bilstein's top-tier US truck applications, fitted here for Hilux N70\/N80.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eZoneControl® CR damping\u003c\/strong\u003e — 3 compression zones and 2 rebound zones controlled by 3 independent pistons, giving a plush ride over small bumps and progressively firmer control as the shock moves deeper into its travel.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eJounce Cut-Off (JCO) system\u003c\/strong\u003e — a 2-stage telescoping internal compression stop provides bottom-out control without needing an external hydraulic bump stop.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRebound Cut-Off (RCO) system\u003c\/strong\u003e — dissipates spring energy and stabilises the suspension immediately after a big hit, and eliminates harsh top-out without an external limit strap.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e60mm remote reservoir\u003c\/strong\u003e for increased oil capacity and cooling under sustained off-road use.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eThreaded spring seat\u003c\/strong\u003e — fine-tune ride height across a 2.5–6in adjustment range.\u003c\/li\u003e\n\u003cli\u003eChrome 5\/8in heim joint mounting with rubber-sealed misalignment spacers for a durable, load-bearing mount.\u003c\/li\u003e\n\u003cli\u003eAluminium components with zinc-plated shock bodies to resist off-road corrosion. Factory rebuildable. Made in the USA by Bilstein.\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch3\u003eFitment\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eN70 Hilux:\u003c\/strong\u003e direct bolt-in, no modification required.\u003cbr\u003e\u003cstrong\u003eN80 Hilux:\u003c\/strong\u003e requires an additional mounting bracket — included with this kit.\u003c\/p\u003e\u003cp\u003e\u003cem\u003eSold as a pair (2 x front coilover). Non-adjustable — for external 3-way adjustability, see the DSA+ version.\u003c\/em\u003e\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Pick your Vehicle above, 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\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};function 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';}\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Bilstein","offers":[{"title":"N70 Hilux (Direct Fit)","offer_id":58285348487471,"sku":null,"price":5500.0,"currency_code":"AUD","in_stock":true},{"title":"N80 Hilux (Incl. Mounting Bracket)","offer_id":58285348847919,"sku":null,"price":5500.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/c2caddext__29469.1759595456.jpg?v=1787134618"},{"product_id":"bilstein-b8-8112-zonecontrol-cr-dsa-externally-adjustable-front-coilovers-hilux-n70-n80","title":"Bilstein B8 8112 ZoneControl CR DSA+ (Externally Adjustable) Front Coilovers — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eLead time: this is a special-order item, typically 4–16 weeks depending on stock and manufacturing at time of order. We'll confirm an estimated timeframe when you order.\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003eThe B8 8112 ZoneControl® CR DSA+ is Bilstein's most advanced direct-fit front coilover — everything in the standard 8112 CR, plus external 3-way adjustability, fitted here for Hilux N70\/N80.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eZoneControl® CR damping\u003c\/strong\u003e — 3 compression zones and 2 rebound zones controlled by 3 independent pistons.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDual Speed Adjustable (DSA) compression with adjustable JCO\u003c\/strong\u003e — click-adjuster knobs give precise control of both low-speed and high-speed compression, plus an adjustable internal bump stop (JCO). Low-speed adjustment tunes stability through cornering and braking; high-speed adjustment manages sharp hits without bottoming out.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRebound Cut-Off (RCO) system\u003c\/strong\u003e — dissipates spring energy after a big hit and eliminates harsh top-out without an external limit strap.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e60mm remote reservoir\u003c\/strong\u003e, nitrogen-infused monotube design with a floating dividing piston for consistent, fade-free damping.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eThreaded spring seat\u003c\/strong\u003e — ride height adjustable, pre-loaded to the factory recommended height.\u003c\/li\u003e\n\u003cli\u003eChrome 5\/8in heim joint mounting with rubber-sealed misalignment spacers. Owner rebuildable and revalvable. Made in the USA by Bilstein. Limited 2-year warranty.\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch3\u003eFitment\u003c\/h3\u003e\u003cp\u003e\u003cstrong\u003eN70 Hilux:\u003c\/strong\u003e direct bolt-in, no modification required.\u003cbr\u003e\u003cstrong\u003eN80 Hilux:\u003c\/strong\u003e requires an additional mounting bracket — included with this kit.\u003c\/p\u003e\u003cp\u003e\u003cem\u003eSold as a pair (2 x front coilover). This is the externally adjustable version — for the standard fixed-valving kit, see the B8 8112 ZoneControl CR.\u003c\/em\u003e\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Pick your Vehicle above, 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\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};function 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';}\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Bilstein","offers":[{"title":"N70 Hilux (Direct Fit)","offer_id":58285348553007,"sku":null,"price":6500.0,"currency_code":"AUD","in_stock":true},{"title":"N80 Hilux (Incl. Mounting Bracket)","offer_id":58285348880687,"sku":null,"price":6500.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/41-319574__43788.1719341239.jpg?v=1787134619"},{"product_id":"bilstein-b8-8100-bypass-rear-shocks-pin-top-hilux-n70-n80","title":"Bilstein B8 8100 Bypass Rear Shocks (Pin Top) — Hilux N70\/N80","description":"\u003cp\u003eThe BILSTEIN B8 8100 Bypass is the top of Bilstein's rear shock range — a 60mm big-bore, remote-reservoir, dual tube external bypass shock with independently adjustable compression and rebound, built for lifted trucks running hard, high-speed terrain rather than just around town.\u003c\/p\u003e\n\n\u003cdiv style=\"background:#fff3cd;border:1px solid #e0c46c;border-left:4px solid #b8860b;border-radius:4px;padding:14px 18px;margin:0 0 24px;font-size:14px;line-height:1.6;color:#1b1d22;\"\u003e\n\u003cstrong\u003eRead this before ordering.\u003c\/strong\u003e The 8100's upper mount is a \u003cstrong\u003epin top (stem) design, not an eye\/bush top\u003c\/strong\u003e like the shocks that came stock on your Hilux or that we normally fit. There is no bolt-in chassis mount for the Hilux for this shock — \u003cstrong\u003efabrication is required\u003c\/strong\u003e to mount it correctly, front-to-back geometry and reservoir clearance included. We are developing a weld-on shock mount kit for the Hilux N70\/N80 to make this a proper bolt-in job, but it is not ready yet. Until it is, this is a fit-up job for us or your fabricator, not a straight swap. Talk to us before ordering if you're not doing the fabrication yourself.\u003c\/div\u003e\n\n\u003ch3\u003eFeatures\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDual tube external bypass offers position-sensitive damping with independent adjustment for rebound and compression\u003c\/li\u003e\n\u003cli\u003eIncremental Flow adjuster gives finite, click-by-click changes in damping force\u003c\/li\u003e\n\u003cli\u003e60mm large-bore hard-anodized aluminium piston for a wide range of damping control and long-term durability\u003c\/li\u003e\n\u003cli\u003e18mm piston rod for tensile strength and a smoother ride under load\u003c\/li\u003e\n\u003cli\u003e60mm remote reservoir with machined aluminium chassis mounts, bottom-port hose for stronger bottom-out control\u003c\/li\u003e\n\u003cli\u003eBillet rod end construction, fully serviceable and rebuildable\u003c\/li\u003e\n\u003cli\u003eDouble adjustable compression and rebound via click adjuster knobs\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eSpecifications\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpper mount type: Stem (pin top)\u003c\/li\u003e\n\u003cli\u003eLower mount type: Eye, 12mm\u003c\/li\u003e\n\u003cli\u003eInternal design: Monotube\u003c\/li\u003e\n\u003cli\u003eBody design: Bypass body (non-coilover)\u003c\/li\u003e\n\u003cli\u003eBody diameter: 2.65in\u003c\/li\u003e\n\u003cli\u003ePiston diameter: 60mm\u003c\/li\u003e\n\u003cli\u003eShaft diameter: 18mm\u003c\/li\u003e\n\u003cli\u003eCollapsed length: 362mm \/ Extended length: 608mm\u003c\/li\u003e\n\u003cli\u003eBoot and spring seat: not included (this is a rear bypass shock, not a coilover — pair with your existing or upgraded leaf pack)\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eSold as a pair (left and right). This is a special-order, made-to-order item — lead time is typically 4–16 weeks depending on stock and manufacturing at time of order, same as our other high-end Bilstein special orders. We'll confirm an estimated timeframe when you order.\u003c\/p\u003e\n\n\u003cp\u003e\u003cem\u003eGiven the fabrication involved, we treat this as an enquiry item rather than an instant checkout — message us with your setup (leaf pack, lift height, weight\/towing) before ordering so we can scope the mounting work alongside the shock.\u003c\/em\u003e\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 — talk to us before ordering regardless, given the fabrication involved.\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":"Bilstein","offers":[{"title":"Default","offer_id":58349824213295,"sku":"BIL-8100-BYPASS-HILUX-PAIR","price":4500.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Taco8100BYP3G_1200x1200_2ec75698-defb-4acc-b786-3d86cac17418.jpg?v=1787133994"},{"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"}],"url":"https:\/\/cubbyhousefabworks.com.au\/collections\/bilstein-shock-packages.oembed","provider":"Cubby House Fabworks","version":"1.0","type":"link"}