{"title":"hilux n80","description":"\u003cp\u003eN80 Hilux parts\u003c\/p\u003e","products":[{"product_id":"xrox-angry-hoops","title":"XROX ANGRY EYE HOOPS - Premium Front End Protection","description":"\u003cp\u003ePair of hoops included.\u003c\/p\u003e\u003cp\u003eEnhance your vehicle's front-end protection and style with our XROX Angry Eye Hoops. Crafted from durable 32nb 3.2mm wall steel, these hoops offer superior protection against damage. The unique design allows for customisation, giving you the freedom to add your own flair. Upgrade your vehicle's look and safety with these high-quality hoops.\u003c\/p\u003e","brand":"My Store","offers":[{"title":"Pair","offer_id":51814995493167,"sku":null,"price":220.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/IMG_4226.jpg?v=1776487380"},{"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  \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  \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":2950.0,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287548367151,"sku":null,"price":2950.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":"rack-end-n70-n80-toyota-hilux","title":"Steering Rack End — Toyota Hilux N70\/N80","description":"\u003cp\u003eEnhance your driving experience with our rack end for the Toyota Hilux KUN26R or GUN126R. Say goodbye to excessive play, shakes, and vague steering feel caused by worn-out components. Trust in our product to restore smooth and precise steering control, making your drive safer and more enjoyable.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51666468405551,"sku":null,"price":45.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/1249BF5A-08BD-4782-8BBD-8AE4C9311F09.png?v=1753596281"},{"product_id":"tie-rod-n70-n80-toyota-hilux","title":"Tie Rod End — Toyota Hilux N70\/N80","description":"\u003cp\u003eImprove your driving experience with this tie rod end for the Toyota Hilux N70 and N80. Say goodbye to excessive play and vague steering feel caused by worn-out components. Upgrade to this reliable replacement for improved control and stability.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51666476826927,"sku":null,"price":45.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/ADEA99F1-C321-489B-8D59-E22E5F8147F6.png?v=1753596500"},{"product_id":"fox-2-5-front-coilovers-hilux","title":"Fox 2.5 Performance Series Front Coilover Pair (2-3in Lift) — Hilux N70\/N80","description":"\u003cp\u003e\u003cspan\u003eFOX 2.5 Performance Series Front Coilovers – 2–3” Lift Kit\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eTake your Hilux to the next level with the FOX 2.5 Performance Series front coilovers. Designed specifically for 2015–2025 GUN Hilux models, these coilovers don’t just add lift — they transform the way your ute drives. Whether you’re tackling tough tracks, cruising the highway, or towing a load, FOX suspension delivers the control, comfort, and durability your Hilux deserves.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eWhy Choose FOX 2.5 Coilovers?\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003ePurpose-Built for Hilux – Tuned damping for the perfect balance of everyday drivability and serious off-road performance.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e2–3” Adjustable Lift – Achieve a leveled stance, improved clearance, and room for bigger wheels and tyres.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eHeavy-Duty 2.5” Shock Body – Increased oil volume keeps temperatures in check for consistent, fade-free performance.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003ePremium Build Quality – Type II anodized aluminum construction resists corrosion while shedding heat in demanding conditions.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eProven FOX Technology – Internal Floating Piston (IFP) design eliminates cavitation and maximises shock life.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eNo Hassle Fitment – 100% bolt-on kit with no cutting or welding required.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cspan\u003eThe Payoff\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eA smoother, more confident ride on and off-road\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBetter control under load, in rough terrain, or at speed\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eExtra clearance for tyres and suspension travel without compromising reliability\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eBring race-proven FOX suspension technology to your Hilux and feel the difference every time you hit the road or the dirt.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock — a $80 shipping charge applies.\u003c\/p\u003e\n\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Tell us what's fitted up front (and out back — some of it transfers forward) and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51828427161903,"sku":null,"price":3200.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Screenshot2025-09-01at7.00.55pm.png?v=1756718537"},{"product_id":"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\u003eHD (Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e50 – 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= 50) rating = 'HD (Heavy 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\u003cscript\u003e\n(function(){\n  \/* CoolDrive order-code sync (internal note only — never shown to the customer) *\/\n  var root = document.getElementById('chf-plat-calc');\n  if(!root) return;\n  var liftRadios = root.querySelectorAll('input[name=chf-plat-lift]');\n  var ratingEl = document.getElementById('chf-plat-rating');\n  var totalEl = document.getElementById('chf-plat-total');\n  var batteryBoxes = root.querySelectorAll('table.chf-wcalc-table input[type=checkbox]');\n  var batteryBox = Array.from(batteryBoxes).find(function(b){ return b.closest('tr').textContent.indexOf('Dual battery') !== -1; });\n  var noteTimer = null;\n  \/* _cooldrive_parts line-item property: read by the order-notes worker (underscore = hidden from customer) *\/\n  var cdForm = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]')).find(function(f){ return f.querySelector('button[type=submit], button[name=add]'); }) || document.querySelector('form[action*=\"\/cart\/add\"]');\n  var cdInput = null;\n  if(cdForm){ cdInput = document.createElement('input'); cdInput.type = 'hidden'; cdInput.name = 'properties[_cooldrive_parts]'; cdForm.appendChild(cdInput); }\n  function getLift(){\n    var checked = Array.from(liftRadios).find(function(r){ return r.checked; });\n    return checked ? checked.value : '2in';\n  }\n  var TOY_MAP = {\n    'LD': {'2in':'TOY1002','3in':'TOY1009'},\n    'HD': {'2in':'TOY1004','3in':'TOY1005'},\n    'XHD': {'2in':'TOY1007','3in':'TOY1008'}\n  };\n  function ratingCode(){\n    var t = ratingEl ? ratingEl.textContent : '';\n    if(t.indexOf('XHD') === 0) return 'XHD';\n    if(t.indexOf('HD') === 0) return 'HD';\n    return 'LD';\n  }\n  function sku(){\n    \/* Confirmed from CalOffroad's Bilstein build cross-reference sheet (via CoolDrive, Sep 2026):\n       the front coil only comes in 3 real tiers — LD (coil CSHLXLDT), HD (coil CSHLXHDT),\n       XHD (coil CSHLXEXHDT) — verified identical between N70 and N80 (same strut\/coil\/top-hat\n       part numbers for every combo). The TOY code depends on both tier and lift height. *\/\n    var code = ratingCode();\n    return TOY_MAP[code][getLift()];\n  }\n  function syncNote(){\n    var lines = [];\n    var code = sku();\n    if(cdInput) cdInput.value = code + ' x2';\n    lines.push('CoolDrive Order Code: ' + code + ' (Platinum Series Front Coilover, ' + getLift() + ' lift, ' + ratingCode() + ')');\n    lines.push('Front Weight Rating: ' + (ratingEl ? ratingEl.textContent : '–'));\n    lines.push('Estimated Front Weight: ' + (totalEl ? totalEl.textContent : '0') + 'kg');\n    lines.push('Extra Battery Preload Needed: ' + (batteryBox \u0026\u0026 batteryBox.checked ? 'Yes' : 'No'));\n    lines.push('Confirm spring rate against weight rating with CoolDrive before ordering.');\n    var noteText = lines.join('\\n');\n    if(noteTimer) clearTimeout(noteTimer);\n    noteTimer = setTimeout(function(){\n      fetch('\/cart\/update.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ note: noteText })\n      }).catch(function(){});\n    }, 400);\n  }\n  batteryBoxes.forEach(function(b){ b.addEventListener('change', syncNote); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', syncNote); });\n  syncNote();\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":"fox-2-0-for-hilux-n70-n80","title":"Fox 2.0 Performance Series Front Coilover Pair — Hilux N70\/N80","description":"\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:0 0 16px;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eFront only — this listing does not include rear shocks.\u003c\/strong\u003e Need the full front + rear kit instead? See our \u003ca href=\"\/products\/fox-2-0-performance-series-shock-kit-front-rear-hilux-n70-n80\" style=\"color:#a10000;font-weight:700;text-decoration:underline;\"\u003eFox 2.0 Performance Series Shock Kit (Front + Rear)\u003c\/a\u003e.\u003c\/div\u003e\n\n\u003cp\u003eFox 2.0 Performance Series front coilovers for the Toyota Hilux N70 and N80, pre-assembled with matched Platinum Series tapered wire coil springs. Use the calculator below to get a guide on your front spring rate.\u003c\/p\u003e\n\n\u003cdiv class=\"chf-wcalc\" id=\"chf-fox20b-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-fox20b-nudge-banner\"\u003e\n    \u003cspan id=\"chf-fox20b-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-fox20b-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-fox20b-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-fox20b-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-fox20b-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-fox20b-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-fox20b-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-fox20b-front-rating\"\u003e600lb (stock)\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-fox20b-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  \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\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-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\n  var bullbar = document.getElementById('chf-fox20b-bullbar');\n  var winch = document.getElementById('chf-fox20b-winch');\n  var sliders = document.getElementById('chf-fox20b-sliders');\n  var bash = document.getElementById('chf-fox20b-bash');\n  var battery = document.getElementById('chf-fox20b-battery');\n  var heavyFlag = document.getElementById('chf-fox20b-heavy-flag');\n  var frontRatingEl = document.getElementById('chf-fox20b-front-rating');\n  var batteryNote = document.getElementById('chf-fox20b-battery-note');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-fox20b-nudge-banner');\n  var nudgeText = document.getElementById('chf-fox20b-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 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\n  [bullbar,winch,sliders,bash,battery,heavyFlag].forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcFront(); }); });\n\n  toggleNudge();\n  recalcFront();\n})();\n\u003c\/script\u003e\n\n\u003cp\u003eContact me for spring weights and setup heights.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eSold as a pair (front only).\u003c\/strong\u003e\u003c\/p\u003e\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\" style=\"color:#a10000;font-weight:700;text-decoration:underline;\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\" style=\"color:#a10000;font-weight:700;text-decoration:underline;\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51895155589423,"sku":null,"price":1950.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/F7DF08BC-ABA0-40DC-A7A6-ABFBB9B210EA.jpg?v=1759359418"},{"product_id":"fox-2-0-shock-rebuild-kit","title":"Fox 2.0 Shock Rebuild Kit (Schrader Valve Included)","description":"\u003cp\u003eRebuild kit for the FOX 2.0 remote reservoir shock. Includes a 1\/8 Schrader valve, two sets of seals, and two Schrader valves.\u003c\/p\u003e\u003cp\u003eFor alloy body FOX shocks with an Allen key pressure seal, the seal will need to be drilled out and tapped to accept a Schrader valve. Once done, the shock can be rebuilt much more easily for the rest of its life.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51982583136559,"sku":null,"price":120.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/F9B0DD75-E478-4C4B-8B8D-05CD5E4EBF2D.jpg?v=1762157057"},{"product_id":"maxima-racing-oils-7wt-shock-fluid","title":"Maxima Racing Oils 7wt Shock Fluid","description":"\u003cp\u003e\u003cspan\u003eHigh-performance mineral-based shock fluid engineered for advanced suspension systems. Features a shear-stable formula with a high viscosity index (300+) to maintain consistent viscosity and film strength under extreme conditions, helping reduce wear and improve durability. The advanced additive package minimizes stiction, lowers operating friction, and reduces foaming and air entrainment. Ultra-clean formulation protects against corrosion, conditions seals, and extends component life.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e1-Quart Bottle (946 ml)\u003c\/span\u003e\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":51982586970415,"sku":null,"price":45.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/6A31092A-EC7F-403C-A281-47D410AD510C.jpg?v=1762157707"},{"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\"\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-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\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  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-total\"\u003eTotal front weight: \u003cspan id=\"chf-kit-front-total\"\u003e0\u003c\/span\u003ekg\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eFront Weight Rating: \u003cspan id=\"chf-kit-front-rating\"\u003e–\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\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\u003eHD (Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e50 – 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\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\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 hParts = addHidden('properties[_cooldrive_parts]'); \/* read by the order-notes worker; underscore = hidden from customer *\/\n\n  var frontBoxes = document.querySelectorAll('#chf-kit-front-calc table.chf-wcalc-table input[type=checkbox]');\n  var battery = Array.from(frontBoxes).find(function(b){ return b.closest('tr').textContent.indexOf('Dual battery') !== -1; });\n  var frontTotalEl = document.getElementById('chf-kit-front-total');\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 total = 0;\n    frontBoxes.forEach(function(b){ if(b.checked) total += parseInt(b.getAttribute('data-kg'),10); });\n    frontTotalEl.textContent = total;\n    var rating = 'LD (Light Duty)';\n    if(total \u003e= 180) rating = 'XHD (Extra Heavy Duty)';\n    else if(total \u003e= 50) rating = 'HD (Heavy Duty)';\n    frontRatingEl.textContent = rating;\n    batteryNote.className = 'chf-wcalc-note' + (battery \u0026\u0026 battery.checked ? ' show' : '');\n    hFrontRating.value = rating;\n    hBattery.value = (battery \u0026\u0026 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  var rearShockValue = '630';\n  function recalcRearShock(){ var v='630'; rearshockRadios.forEach(function(r){ if(r.checked) v=r.value; }); rearShockValue = v; 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\n  \/* Front coil TOY-code lookup, confirmed from CalOffroad's Bilstein build cross-reference\n     sheet (via CoolDrive, Sep 2026): the front coil only comes in 3 real tiers — LD (coil\n     CSHLXLDT), HD (coil CSHLXHDT), XHD (coil CSHLXEXHDT) — same tiers used on the\n     coilover-only product and the N70\/N80 kits. *\/\n  var TOY_MAP = {\n    'LD': {'2in':'TOY1002','3in':'TOY1009'},\n    'HD': {'2in':'TOY1004','3in':'TOY1005'},\n    'XHD': {'2in':'TOY1007','3in':'TOY1008'}\n  };\n  function frontDutyCode(){\n    var t = hFrontRating.value || '';\n    if(t.indexOf('XHD') === 0) return 'XHD';\n    if(t.indexOf('HD') === 0) return 'HD';\n    return 'LD';\n  }\n  function frontToyCode(){\n    return TOY_MAP[frontDutyCode()][getLift()];\n  }\n\n  \/* CoolDrive order-code sync (internal note only — never shown to the customer) *\/\n  var noteTimer = null;\n  function syncNote(){\n    var frontCode = frontToyCode();\n    var rearSku = rearShockValue === '660' ? '24-301282' : '24-228602';\n    hParts.value = frontCode + ' x2, ' + rearSku + ' x2';\n    var lines = [];\n    lines.push('CoolDrive Order Code: Front coil ' + frontCode + ' (Platinum Series Front Coilover, ' + getLift() + ' lift, ' + frontDutyCode() + ') \/ Rear shock ' + rearSku);\n    lines.push('Lift Height Chasing: ' + getLift());\n    lines.push('Suggested Front Spring Rate: ' + hFrontRating.value);\n    lines.push('Extra Battery Preload Needed: ' + hBattery.value);\n    lines.push('Suggested Rear Spring Load Option: ' + hRearRating.value + ' (added ' + hRearTotal.value + ')');\n    lines.push('Rear Shock: ' + hRearShock.value);\n    var noteText = lines.join('\\n');\n    if(noteTimer) clearTimeout(noteTimer);\n    noteTimer = setTimeout(function(){\n      fetch('\/cart\/update.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ note: noteText })\n      }).catch(function(){});\n    }, 400);\n  }\n\n  rearshockRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcRearShock(); syncNote(); }); });\n\n  frontBoxes.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcFront(); syncNote(); }); });\n  rearBoxes.forEach(function(b){ b.addEventListener('change', function(){ touched=true; toggleNudge(); recalcRear(); syncNote(); }); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalcLift(); syncNote(); }); });\n\n  toggleNudge(); recalcFront(); recalcRear(); recalcLift(); recalcRearShock(); syncNote();\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":"fox-2-0-shock-rebuild-service","title":"Fox 2.0 Shock Rebuild Service","description":"\u003cp\u003eFOX 2.0 shock rebuilding service. These shocks typically only last around 50,000km before they need fresh oil and seals, or the fronts need new spherical bearings when the dreaded squeak kicks in.\u003c\/p\u003e\u003cp\u003eNotes:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eIf the shocks don't have Schrader valves and require them, an additional fee of $50 per pair applies for installation. Shocks can only be rebuilt with Schrader valves — this is essential for re-pressurising.\u003c\/li\u003e\n\u003cli\u003eSpherical bush replacement: $65 per bush.\u003c\/li\u003e\n\u003cli\u003eFronts: $250 per shock for new oil and seals. Valving changes available on request but may incur additional costs if shims are required.\u003c\/li\u003e\n\u003cli\u003eRears: $200 per shock for new oil and seals. Valving changes available on request but may incur additional costs if shims are required.\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003eNo guarantees are made on the lifespan after a rebuild, as additional factors such as shaft pitting or lack of shaft guards can affect longevity. I won't be held responsible for such damage.\u003c\/p\u003e\u003cp\u003eFreight not included. Generally $50–$100.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Front pair","offer_id":52026123288879,"sku":null,"price":500.0,"currency_code":"AUD","in_stock":true},{"title":"Rear pair","offer_id":52026123321647,"sku":null,"price":400.0,"currency_code":"AUD","in_stock":true},{"title":"Spherical bearings","offer_id":52026123845935,"sku":null,"price":130.0,"currency_code":"AUD","in_stock":true},{"title":"Shrader valve install per pair","offer_id":52026124009775,"sku":null,"price":50.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/F7DF08BC-ABA0-40DC-A7A6-ABFBB9B210EA.jpg?v=1759359418"},{"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\n\u003cp\u003ePrice per pair.\u003cstrong\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cmeta charset=\"utf-8\"\u003e\n\u003ca href=\"https:\/\/ishop.cooldrive.com.au\/products\/24-228602\"\u003e\u003cstrong class=\"pcode\"\u003e24-228602\u003c\/strong\u003e\u003c\/a\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $35 shipping is automatically calculated at checkout for this item.\u003c\/p\u003e\n\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n\u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n\u003cp class=\"lede\"\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\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\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\u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items: flex-start;\"\u003e\n\u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n\u003cdiv\u003e\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 \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top: 3px; width: 16px; height: 16px; flex: none;\"\u003e \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 \u003c\/label\u003e\u003c\/div\u003e\n\u003c\/div\u003e\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\"\u003e\n\u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e \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 \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 \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\"\u003e\n\u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e \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 \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\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\"\u003eAn 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\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\"\u003e\n\u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e \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\"\u003e\n\u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e \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 \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\"\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 \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\"\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 \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\"\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 \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\"\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 \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\"\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 \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\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 \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\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\u003eLD\u003c\/span\u003e \u003cspan\u003eMD\u003c\/span\u003e \u003cspan\u003eHD\u003c\/span\u003e \u003cspan\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\"\u003eThis load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003evehicle\u003c\/strong\u003e's rated rear axle capacity (\u003cstrong id=\"gvm-warn-cap\"\u003ekg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade might be the better fix.\u003c\/div\u003e\n\u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003eYour 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.\u003c\/div\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\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":"eibach-coil-spring","title":"Eibach Front Coil Spring — Hilux N70\/N80","description":"\u003cp\u003eEibach coil springs to suit FOX, Radflo, King, and other assorted 2.0 and 2.5in shocks. 1400 x 300mm.\u003c\/p\u003e\u003cp\u003eAvailable in:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e600lb\u003c\/li\u003e\n\u003cli\u003e650lb\u003c\/li\u003e\n\u003cli\u003e700lb\u003c\/li\u003e\n\u003cli\u003e750lb\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003ePrice per coil — sold individually.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Tell us what's fitted up front and we'll estimate where you land — use it as a guide alongside the coil weight you pick above.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"600","offer_id":52034599977263,"sku":null,"price":260.0,"currency_code":"AUD","in_stock":true},{"title":"650","offer_id":52034600010031,"sku":null,"price":260.0,"currency_code":"AUD","in_stock":true},{"title":"700","offer_id":52034600042799,"sku":null,"price":260.0,"currency_code":"AUD","in_stock":true},{"title":"750","offer_id":52034600075567,"sku":null,"price":260.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/Screenshot2025-11-19at3.36.54pm.png?v=1763527218"},{"product_id":"n80-hilux-rear-leaf-springs-2in-lift","title":"N80 Hilux Rear Leaf Springs — 2in Lift (Sold as a Pair)","description":"\u003cp\u003eCalOffroad 2in lift rear leaf springs for the N80 Hilux, available in four duty ratings to suit your rear-end load.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDoing your leaf springs?\u003c\/strong\u003e Grab a set of fresh leaf spring bushes while you're in there — the factory rubber is usually shot by the time your leaf pack needs replacing.\u003c\/p\u003e\n\u003cdiv class=\"chf-wcalc\" id=\"chf-rearleaf-calc\"\u003e\n\u003cdiv class=\"chf-wcalc-head\"\u003eWeight Rating Calculator — find your Rear Weight Rating\u003c\/div\u003e\n\u003cp class=\"chf-wcalc-sub\"\u003eTick everything that's fitted (or planned) on the back of your ute. This gives a rough estimate only — every setup varies.\u003c\/p\u003e\n\u003ctable class=\"chf-wcalc-table\"\u003e\n\u003cthead\u003e\n\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\n\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-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-rearleaf-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-rearleaf-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\u003cdiv class=\"chf-wcalc-result\"\u003e\n\u003cdiv class=\"chf-wcalc-total\"\u003eTotal added rear weight: \u003cspan id=\"chf-rearleaf-total\"\u003e0\u003c\/span\u003ekg\u003c\/div\u003e\n\u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested Rear Weight Rating: \u003cspan id=\"chf-rearleaf-rating\"\u003eLD (Light Duty)\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chf-wcalc-warn\" id=\"chf-rearleaf-gvmwarn\"\u003e\nThis load would put the N80's rear axle over its rated capacity (\u003cstrong id=\"chf-rearleaf-gvmwarn-cap\"\u003e1700kg\u003c\/strong\u003e, from a ~1000kg stock base). Talk to us before ordering — a GVM upgrade might be the better fix.\n\u003c\/div\u003e\n\u003cdiv class=\"chf-wcalc-tip\" id=\"chf-rearleaf-lightnote\"\u003e\n\u003cstrong\u003eRunning super light back there?\u003c\/strong\u003e A near-empty rear end can actually ride a touch rough on these utes — a bit of weight low down (an alloy tray, for example) isn't a bad thing and often settles the ride. Keeping your spare tyre in its original mounted position also has a benefit: that's usually factored into how the factory\/aftermarket suspension is tuned. And weight kept low and central is genuinely good for stability — it lowers the centre of gravity, which helps guard against rollovers rather than just being something to avoid.\n\u003c\/div\u003e\n\u003ctable class=\"chf-wcalc-ref\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eRear Weight Rating\u003c\/th\u003e\n\u003cth\u003eAdded weight range\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eLD (Light Duty)\u003c\/td\u003e\n\u003ctd\u003e0 – 80kg\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMD (Medium Duty)\u003c\/td\u003e\n\u003ctd\u003e80 – 180kg\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHD (Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e180 – 280kg\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXHD (Extra Heavy Duty)\u003c\/td\u003e\n\u003ctd\u003e280kg+\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 before ordering.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  #chf-rearleaf-calc, #chf-rearleaf-calc *{box-sizing:border-box;}\n  #chf-rearleaf-calc{font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:16px 0 24px;background:#ffffff !important;color:#111111 !important;}\n  #chf-rearleaf-calc .chf-wcalc-head{font-weight:800;font-size:1.15em;margin-bottom:6px;color:#111111 !important;}\n  #chf-rearleaf-calc .chf-wcalc-sub{font-size:.9em;color:#333333 !important;margin:0 0 14px;}\n  #chf-rearleaf-calc table.chf-wcalc-table{width:100%;border-collapse:collapse;font-size:.95em;color:#111111 !important;background:#ffffff !important;}\n  #chf-rearleaf-calc table.chf-wcalc-table th{text-align:left;border-bottom:2px solid #222;padding:6px;color:#111111 !important;background:#ffffff !important;}\n  #chf-rearleaf-calc table.chf-wcalc-table td{padding:8px 6px;border-bottom:1px solid #ccc;color:#111111 !important;background:#ffffff !important;}\n  #chf-rearleaf-calc table.chf-wcalc-table td:first-child{width:32px;}\n  #chf-rearleaf-calc input[type=checkbox], #chf-rearleaf-calc input[type=radio]{width:18px;height:18px;accent-color:#ff7a1a;}\n  #chf-rearleaf-calc .chf-wcalc-lift{border-top:1px solid #ccc;padding-top:12px;margin-top:8px;color:#111111 !important;}\n  #chf-rearleaf-calc .chf-wcalc-lift-label{font-weight:700;margin-bottom:8px;}\n  #chf-rearleaf-calc .chf-wcalc-lift label{display:inline-flex;align-items:center;gap:6px;margin-right:24px;font-size:.95em;}\n  #chf-rearleaf-calc .chf-wcalc-4in{font-size:.82em;color:#a10000 !important;margin-top:10px;line-height:1.4;}\n  #chf-rearleaf-calc .chf-wcalc-result{background:#111111 !important;color:#ffffff !important;border-radius:6px;padding:12px 16px;margin:16px 0;}\n  #chf-rearleaf-calc .chf-wcalc-total{font-size:1.1em;font-weight:800;color:#ffffff !important;}\n  #chf-rearleaf-calc .chf-wcalc-rating{margin-top:6px;font-size:1.05em;color:#ffffff !important;}\n  #chf-rearleaf-calc .chf-wcalc-rating span{color:#ffb347 !important;font-weight:800;}\n  #chf-rearleaf-calc .chf-wcalc-warn{display:none;border:1px solid #a10000;border-left:4px solid #a10000;border-radius:6px;padding:10px 14px;margin:0 0 16px;font-size:.85em;line-height:1.5;color:#111111 !important;background:#fff5f5 !important;}\n  #chf-rearleaf-calc .chf-wcalc-warn.show{display:block;}\n  #chf-rearleaf-calc .chf-wcalc-tip{display:none;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-rearleaf-calc .chf-wcalc-tip.show{display:block;}\n  #chf-rearleaf-calc table.chf-wcalc-ref{width:100%;border-collapse:collapse;font-size:.9em;margin-top:10px;color:#111111 !important;background:#ffffff !important;}\n  #chf-rearleaf-calc table.chf-wcalc-ref th{color:#111111 !important;background:#ffffff !important;border-bottom:2px solid #222;padding:6px;text-align:left;}\n  #chf-rearleaf-calc table.chf-wcalc-ref td{color:#111111 !important;background:#ffffff !important;border-bottom:1px solid #ccc;padding:6px;text-align:left;}\n  #chf-rearleaf-calc .chf-wcalc-disclaimer{font-size:.8em;color:#555555 !important;margin-top:12px;}\n\u003c\/style\u003e\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var TIER_VARIANT_VALUE={LD:'LD (Light Duty)',MD:'MD (Medium Duty)',HD:'HD (Heavy Duty)',XHD:'XHD (Extra Heavy Duty)'};var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var VEHICLE_LABEL='N80';var LIGHT_THRESHOLD_KG=40;var wrap=document.getElementById('chf-rearleaf-calc');var checks=wrap.querySelectorAll('input[type=\"checkbox\"]');var liftInputs=wrap.querySelectorAll('input[name=\"chf-rearleaf-lift\"]');var totalEl=document.getElementById('chf-rearleaf-total');var ratingEl=document.getElementById('chf-rearleaf-rating');var gvmWarnEl=document.getElementById('chf-rearleaf-gvmwarn');var lightNoteEl=document.getElementById('chf-rearleaf-lightnote');var isSyncingTier=false;var tierOverridden=false;function checkedStr(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return list[i].value;return'';}\nfunction itemLabel(el){var tr=el.closest('tr');var td=tr?tr.children[1]:null;return td?td.textContent.trim():'';}\nfunction accessorySummary(){var parts=[];checks.forEach(function(c){if(c.checked)parts.push(itemLabel(c));});return parts.length?parts.join(', '):'None selected';}\nfunction ratingFor(total){if(total\u003c80)return{code:'LD',full:'Light Duty'};if(total\u003c180)return{code:'MD',full:'Medium Duty'};if(total\u003c280)return{code:'HD',full:'Heavy Duty'};return{code:'XHD',full:'Extra Heavy Duty'};}\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('Duty Rating')===0\u0026\u0026r.value===target\u0026\u0026!r.checked){isSyncingTier=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\nfunction syncToShopify(total,tier,lift,rearAxleKg){var forms=document.querySelectorAll('form[action*=\"\/cart\/add\"]');var props={'Suggested Rear Weight Rating':tier.code+' ('+tier.full+')','Total Added Rear Weight':Math.round(total)+'kg','Est. Rear Axle Load':Math.round(rearAxleKg)+'kg','Lift Height':lift,'Accessories Fitted':accessorySummary()};forms.forEach(function(form){Object.keys(props).forEach(function(name){var selector='input[name=\"properties['+name+']\"]';var input=form.querySelector(selector);if(!input){input=document.createElement('input');input.type='hidden';input.name='properties['+name+']';form.appendChild(input);}\ninput.value=props[name];});});}\nfunction update(){var total=0;checks.forEach(function(c){if(c.checked)total+=parseFloat(c.getAttribute('data-kg'))||0;});var tier=ratingFor(total);totalEl.textContent=Math.round(total);ratingEl.textContent=tier.code+' ('+tier.full+')';if(!tierOverridden){selectTierVariant(tier.code);}\nvar rearAxleKg=REAR_STOCK_KG+total;gvmWarnEl.classList.toggle('show',rearAxleKg\u003eREAR_MAX_KG);lightNoteEl.classList.toggle('show',total\u003c=LIGHT_THRESHOLD_KG);\nsyncToShopify(total,tier,checkedStr(liftInputs)||'2in',rearAxleKg);}\nchecks.forEach(function(c){c.addEventListener('change',function(){tierOverridden=false;update();});});\nliftInputs.forEach(function(r){r.addEventListener('change',function(){tierOverridden=false;update();});});\ndocument.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('Duty Rating')===0){if(isSyncingTier){isSyncingTier=false;}else{tierOverridden=true;}}});\nupdate();})();\u003c\/script\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","brand":"Cubby House Fabworks","offers":[{"title":"LD (Light Duty)","offer_id":58237299097903,"sku":"LSHLXN80L","price":785.18,"currency_code":"AUD","in_stock":true},{"title":"MD (Medium Duty)","offer_id":58237299130671,"sku":"LSHLXN80M","price":777.54,"currency_code":"AUD","in_stock":true},{"title":"HD (Heavy Duty)","offer_id":58237299163439,"sku":"LSHLXN80HD","price":1035.0,"currency_code":"AUD","in_stock":true},{"title":"XHD (Extra Heavy Duty)","offer_id":58237299196207,"sku":"LSHLXN80XHD","price":1035.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/LSHLXN80M.tag.1.jpg?v=1784698344"},{"product_id":"fox-2-5-performance-series-ifp-rear-shock-hilux-n70-n80","title":"Fox 2.5 Performance Series IFP Rear Shock Pair — Hilux N70\/N80","description":"\u003cp\u003eFox 2.5 Performance Series IFP rear shocks for the Toyota Hilux — fits both N70 and N80. Internal floating piston (IFP) design for consistent damping under load and heat, in the 0-2in lift range to suit our 2in and 3in setups.\u003c\/p\u003e\n\u003cp\u003eLarger 2.5in body than the factory shock gives more oil volume and better heat dissipation for touring and off-road use. \u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping is automatically calculated at checkout for this big, heavy 2.5in body shock pair.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock rear axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e. Tell us what's fitted and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eRear Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eEstimated Rear Duty Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested duty tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. rear axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rear-weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n    This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003evehicle\u003c\/strong\u003e's rated rear axle capacity\n    (\u003cstrong id=\"gvm-warn-cap\"\u003ekg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n    might be the better fix.\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003e\n    Your setup calculates lighter than this shock's typical build range. Nothing wrong running it under-loaded, but if you're chasing the plushest possible daily ride, talk to us about a lighter duty tier instead.\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var rangeWarn=document.getElementById('range-warn');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=0+added.frontKg;var rateRaw=0;var rearMaxKg=REAR_MAX_KG;curTotalRearKg=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,curTotalRearKg);var rearSpan=rearMaxKg-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;curRearTier=REAR_TIERS[tierIndex];tierValueEl.textContent=curRearTier.code;tierFullEl.textContent=curRearTier.full;rearWeightEl.textContent=Math.round(curTotalRearKg);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curRearTier.code);});if(curTotalRearKg\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=('Hilux N70\/N80');gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nrangeWarn.classList.toggle('show',tierIndex===0\u0026\u0026added.rearKg\u003c10);batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Rear Duty Tier: '+document.getElementById('tier-value').textContent+' ('+document.getElementById('tier-full').textContent+')');lines.push('Est. Rear Axle Load: '+document.getElementById('rear-weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Default","offer_id":58237316432175,"sku":"987-24-071","price":1466.76,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/987-24-071-white.jpg?v=1785124796"},{"product_id":"fox-2-5-performance-elite-series-front-coilover-pair-remote-reservoir-dsc-hilux-n70-n80","title":"Fox 2.5 Performance Elite Series Front Coilover Pair — Remote Reservoir DSC — Hilux N70\/N80","description":"\u003cp\u003eFox 2.5 Performance Elite Series front coilovers with remote reservoir and DSC (Dual Speed Compression) adjustment, 2-3in lift. Sold as a pair. Fits \u003cstrong\u003eToyota Hilux N70\u003c\/strong\u003e\/N80.\u003c\/p\u003e\n\u003cp\u003eThis is Fox's top-tier remote-reservoir setup — the external reservoir gives significantly more oil volume for better heat management on long touring runs or repeated hard hits, and DSC lets you independently tune low-speed (comfort\/touring) and high-speed (hits\/technical terrain) compression damping.\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your front load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux N70\/N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. Tell us what's fitted up front and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237404512559,"sku":"883-06-235","price":5100.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-06-235-white.jpg?v=1785124799"},{"product_id":"fox-2-5-performance-elite-series-rear-shock-pair-remote-reservoir-dsc-hilux-16-on","title":"Fox 2.5 Performance Elite Series Rear Shock Pair — Remote Reservoir DSC — Hilux 16-On","description":"\u003cp\u003eFox 2.5 Performance Elite Series rear shocks with remote reservoir and DSC (Dual Speed Compression) adjustment, 2in lift. Sold as a pair. Fits Toyota Hilux 2016-on (N70 late\/N80).\u003c\/p\u003e\n\u003cp\u003eThis is Fox's top-tier remote-reservoir setup — the external reservoir gives significantly more oil volume for better heat management on long touring runs or repeated hard hits, and DSC lets you independently tune low-speed (comfort\/touring) and high-speed (hits\/technical terrain) compression damping.\u003c\/p\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. This fits Hilux 2016-on, so you'll want the \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e plate (or the \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e plate if you're on a late N70).\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order item and isn't held in stock — please allow a 2 week lead time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping note:\u003c\/strong\u003e this is a big, heavy 2.5in body shock pair — a $80 shipping charge applies.\u003c\/p\u003e\u003cstyle\u003e\n  .chf-calc {\n    --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d; --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22;\n  }\n  @media (prefers-color-scheme: dark) {\n    .chf-calc { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n      --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  }\n  .chf-calc[data-theme=\"dark\"] { --bg: #14161a; --panel: #1c1f26; --panel-2: #21242c; --border: #33373f; --border-strong: #454a54;\n    --text: #f0ede6; --text-dim: #a9acb3; --text-faint: #6f727a; --accent: #e8842d; --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14); --accent-soft-strong: rgba(232, 132, 45, 0.26); --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5); --track: #2a2e36; --focus: #f0ede6; }\n  .chf-calc[data-theme=\"light\"] { --bg: #f2efe8; --panel: #ffffff; --panel-2: #f8f6f1; --border: #ddd8cc; --border-strong: #c7c1b2;\n    --text: #1b1d22; --text-dim: #6b6e76; --text-faint: #9a9da3; --accent: #c96a1e; --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1); --accent-soft-strong: rgba(201, 106, 30, 0.2); --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18); --track: #e4dfd2; --focus: #1b1d22; }\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; padding: 40px 16px 64px; border-radius: 6px; }\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n  .eyebrow { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n  .eyebrow::before { content: \"\"; width: 16px; height: 1.5px; background: var(--accent); display: inline-block; }\n  .chf-calc h1 { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.01em; font-size: clamp(28px, 6vw, 38px); line-height: 1.05; margin: 0 0 10px; text-wrap: balance; color: var(--text); background: none; border: none; box-shadow: none; }\n  .lede { font-size: 15px; line-height: 1.55; color: var(--text-dim); max-width: 54ch; margin: 0 0 28px; }\n  .lede strong { color: var(--text); font-weight: 600; }\n  .chf-calc section.card { background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 22px 22px 24px; margin-bottom: 16px; }\n  .card-title { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; font-size: 13px; color: var(--text-dim); margin: 0 0 4px; }\n  .card-sub { font-size: 13px; color: var(--text-faint); margin: 0 0 16px; line-height: 1.5; }\n  .seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px; }\n  .seg label { position: relative; text-align: center; padding: 9px 8px; font-size: 12.5px; font-weight: 600; color: var(--text-dim); border-radius: 2px; cursor: pointer; user-select: none; transition: background 0.15s ease, color 0.15s ease; line-height: 1.3; }\n  .seg label .kg { display: block; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-weight: 400; font-size: 10.5px; color: var(--text-faint); margin-top: 2px; }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label, .seg label.checked { background: var(--accent); color: var(--accent-ink); }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .rows { display: flex; flex-direction: column; }\n  .row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-top: 1px solid var(--border); }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n  .switch { position: relative; width: 42px; height: 24px; flex: none; }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track { position: absolute; inset: 0; background: var(--track); border: 1px solid var(--border-strong); border-radius: 999px; transition: background 0.15s ease, border-color 0.15s ease; }\n  .switch .thumb { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--panel); box-shadow: 0 1px 2px rgba(0,0,0,0.25); transition: transform 0.18s cubic-bezier(.4,0,.2,1); }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n  .gauge-card { padding-bottom: 26px; }\n  .readout { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 10px 20px; margin-bottom: 20px; }\n  .readout-main .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-main .value { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); font-variant-numeric: tabular-nums; }\n  .readout-main .value .unit { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 17px; color: var(--text-dim); margin-left: 4px; }\n  .readout-sub { text-align: right; }\n  .readout-sub .label { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n  .readout-sub .value { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 20px; font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track { position: relative; height: 8px; border-radius: 999px; background: var(--track); border: 1px solid var(--border); overflow: visible; }\n  .scale-fill { position: absolute; top: -1px; bottom: -1px; left: -1px; border-radius: 999px; background: linear-gradient(90deg, var(--ok), var(--accent)); width: 0%; transition: width 0.35s cubic-bezier(.4,0,.2,1); }\n  .scale-needle { position: absolute; top: 50%; left: 0%; width: 3px; height: 26px; background: var(--text); border-radius: 2px; transform: translate(-50%, -50%); transition: left 0.35s cubic-bezier(.4,0,.2,1); box-shadow: 0 2px 5px var(--needle-shadow); }\n  .scale-needle::after { content: \"\"; position: absolute; left: 50%; top: -6px; width: 9px; height: 9px; background: var(--text); border-radius: 50%; transform: translateX(-50%); }\n  .ticks { display: flex; justify-content: space-between; margin-top: 10px; }\n  .ticks span { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 11.5px; font-weight: 500; color: var(--text-faint); position: relative; font-variant-numeric: tabular-nums; }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n  .stock-flag { position: absolute; top: -22px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-faint); left: 0%; transform: translateX(-50%); white-space: nowrap; }\n  .lift-note { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n  .foot-note { font-size: 12px; color: var(--text-faint); line-height: 1.6; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }\n  .callout { display: flex; gap: 12px; align-items: flex-start; background: var(--accent-soft); border: 1px solid var(--accent-soft-strong); border-radius: 4px; padding: 14px 16px; margin: 0 0 28px; }\n  .callout .mark { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 20px; color: var(--accent); line-height: 1.2; flex: none; }\n  .callout p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text); }\n  .callout strong { color: var(--accent); }\n  .divider { display: flex; align-items: center; gap: 12px; margin: 36px 0 20px; }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n  .num-field { display: flex; align-items: center; gap: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 3px; padding: 4px 4px 4px 14px; }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input { width: 90px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 15px; font-weight: 500; color: var(--text); background: var(--panel); border: 1px solid var(--border-strong); border-radius: 2px; padding: 8px 10px; text-align: right; font-variant-numeric: tabular-nums; }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-size: 12px; color: var(--text-faint); padding-right: 12px; }\n  .gvm-warn { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 3px; padding: 12px 14px; font-size: 12.5px; line-height: 1.55; color: var(--text-dim); margin-top: 14px; display: none; }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n  .tier-name { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; font-weight: 700; font-size: 44px; line-height: 1; color: var(--accent); }\n  .tier-full { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; font-weight: 600; font-size: 15px; color: var(--text-dim); margin-top: 6px; }\n  .chf-nudge { display:flex; gap:12px; align-items:flex-start; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 4px; padding: 14px 16px; margin: 0 0 22px; font-size: 13.5px; line-height: 1.55; color: var(--text-dim); }\n  .chf-nudge.thanked { border-left-color: var(--ok); }\n  .chf-nudge strong { color: var(--text); }\n  @media (prefers-reduced-motion: reduce) { .scale-fill, .scale-needle { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eRear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eCheck your rear load.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003eHilux 2016-on (N80) carries a stock rear axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e. Tell us what's fitted and we'll estimate where you land.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eRear Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eEstimated Rear Duty Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested duty tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. rear axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"rear-weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n    This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003evehicle\u003c\/strong\u003e's rated rear axle capacity\n    (\u003cstrong id=\"gvm-warn-cap\"\u003ekg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n    might be the better fix.\n  \u003c\/div\u003e\n  \u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003e\n    Your setup calculates lighter than this shock's typical build range. Nothing wrong running it under-loaded, but if you're chasing the plushest possible daily ride, talk to us about a lighter duty tier instead.\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var rangeWarn=document.getElementById('range-warn');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=0+added.frontKg;var rateRaw=0;var rearMaxKg=REAR_MAX_KG;curTotalRearKg=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,curTotalRearKg);var rearSpan=rearMaxKg-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;curRearTier=REAR_TIERS[tierIndex];tierValueEl.textContent=curRearTier.code;tierFullEl.textContent=curRearTier.full;rearWeightEl.textContent=Math.round(curTotalRearKg);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curRearTier.code);});if(curTotalRearKg\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=('Hilux 2016-on (N80)');gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nrangeWarn.classList.toggle('show',tierIndex===0\u0026\u0026added.rearKg\u003c10);batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Rear Duty Tier: '+document.getElementById('tier-value').textContent+' ('+document.getElementById('tier-full').textContent+')');lines.push('Est. Rear Axle Load: '+document.getElementById('rear-weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Fox Shocks","offers":[{"title":"Pair","offer_id":58237404676399,"sku":"883-26-167","price":3060.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/883-26-167-white.jpg?v=1785124802"},{"product_id":"fox-2-0-performance-series-lift-kit-hilux-n70-n80","title":"Fox 2.0 Performance Series Shock Kit (Front + Rear) — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eFront + rear Fox 2.0 Performance Series shocks only — this listing does not include leaf springs.\u003c\/strong\u003e If you need leaf springs too, grab them separately or ask about our combined shocks + leaves package. 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\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the correct plate for your model: \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n70-76mm\"\u003eN70 (76mm)\u003c\/a\u003e or \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm)\u003c\/a\u003e.\u003c\/div\u003e\n\n\u003cdiv class=\"chf-wcalc\" id=\"chf-foxkit-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-foxkit-nudge-banner\"\u003e\n    \u003cspan id=\"chf-foxkit-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-foxkit-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-foxkit-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-foxkit-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-foxkit-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-foxkit-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-foxkit-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-foxkit-front-rating\"\u003e600lb (stock)\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-foxkit-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-foxkit-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-foxkit-rear-total\"\u003e0\u003c\/span\u003ekg\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested rear spring load option: \u003cspan id=\"chf-foxkit-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-foxkit-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-foxkit-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e\n  \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-foxkit-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  \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 coilover (assembled with matched coil, sold each — 2 required) CO024-xx-xI, e.g. CO024-LI-2I · Rear shock (sold each — 2 required) 985-24-075. Exact front coilover code depends on the spring rate\/duty and lift height confirmed with you before we order.\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 hSku = addHidden('properties[CoolDrive Order Reference]');\n  hSku.value = 'Front coilover CO024-xx-xI (sold each, 2 required) \/ Rear shock 985-24-075 (sold each, 2 required) — exact front code depends on spring rate\/duty and lift height confirmed before ordering';\n\n  var bullbar = document.getElementById('chf-foxkit-bullbar');\n  var winch = document.getElementById('chf-foxkit-winch');\n  var sliders = document.getElementById('chf-foxkit-sliders');\n  var bash = document.getElementById('chf-foxkit-bash');\n  var battery = document.getElementById('chf-foxkit-battery');\n  var heavyFlag = document.getElementById('chf-foxkit-heavy-flag');\n  var frontRatingEl = document.getElementById('chf-foxkit-front-rating');\n  var batteryNote = document.getElementById('chf-foxkit-battery-note');\n\n  var rearBoxes = document.querySelectorAll('#chf-foxkit-rear-calc input[type=checkbox]');\n  var rearTotalEl = document.getElementById('chf-foxkit-rear-total');\n  var rearRatingEl = document.getElementById('chf-foxkit-rear-rating');\n\n  var liftRadios = document.querySelectorAll('input[name=chf-foxkit-lift]');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-foxkit-nudge-banner');\n  var nudgeText = document.getElementById('chf-foxkit-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\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();\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\u003eThe Fox 2.0 Performance Series IFP shock uses race-proven internal floating piston (IFP) damping for a comfortable on-road ride and predictable off-road handling. The precision impact-aluminium body increases cooling capacity and won't rust. The front coilovers are CalOffroad Fox 2.0 units pre-assembled with matched Platinum Series tapered wire coil springs.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eThis kit covers shocks (front coilovers + rear shocks) only — it does not include rear leaf springs.\u003c\/strong\u003e If your leaf packs need replacing too, add our N70\/N80 Rear Leaf Springs separately, or ask about the combined shocks + leaves package.\u003c\/p\u003e\u003cp\u003eFox has decades of motorsport and off-road racing heritage behind every shock, translating directly into a smoother, more controlled ride whether you're commuting or out on the 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\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping is automatically calculated at checkout for this kit.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":58256566518063,"sku":null,"price":2987.1,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/F7DF08BC-ABA0-40DC-A7A6-ABFBB9B210EA_55d2e7f7-3d8e-473c-b766-7f703931b8a2.jpg?v=1785119786"},{"product_id":"fox-2-0-complete-suspension-package-shocks-leaf-springs-hilux-n80","title":"Fox 2.0 Complete Suspension Package (Shocks + Leaf Springs) — Hilux N80","description":"\u003cp\u003e\u003cstrong\u003eThe whole package for the N80 Hilux\u003c\/strong\u003e — front + rear Fox 2.0 Performance Series shocks AND rear leaf springs, bundled together in one order. Pick your rear duty rating below (this also sets your leaf spring rate); front spring rate and lift height are handled the same way as our shocks-only kit and confirmed with you before we order.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIncludes:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e2x Fox 2.0 Performance Series front coilovers (assembled with matched coil)\u003c\/li\u003e\n\u003cli\u003e2x Fox 2.0 Performance Series rear shocks\u003c\/li\u003e\n\u003cli\u003e1x pair of CalOffroad rear leaf springs, in your chosen duty rating\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"border:2px solid #a10000;border-radius:8px;padding:14px 16px;margin:16px 0;background:#fff3f3;color:#111111;\"\u003e\n\u003cstrong\u003eCalOffroad-recommended add-on:\u003c\/strong\u003e when fitting any Fox shock or coilover, CalOffroad advises adding a sway bar relocation plate — on a lifted Hilux the factory sway bar mount can clash with the taller Fox strut body through suspension travel. Grab the \u003ca href=\"\/products\/caloffroad-sway-bar-relocation-plate-hilux-n80-88mm\"\u003eN80 (88mm) sway bar relocation plate\u003c\/a\u003e to go with this package.\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order full kit and isn't held in stock — please allow a 2 week lead time. Please contact us regarding vehicle weights and lift height before ordering so we get the spring rates right the first time.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping is automatically calculated at checkout for this package.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"LD (Light Duty)","offer_id":58256572088623,"sku":null,"price":3572.28,"currency_code":"AUD","in_stock":true},{"title":"MD (Medium Duty)","offer_id":58256572743983,"sku":null,"price":3564.64,"currency_code":"AUD","in_stock":true},{"title":"HD (Heavy Duty)","offer_id":58256572776751,"sku":null,"price":3564.64,"currency_code":"AUD","in_stock":true},{"title":"XHD (Extra Heavy Duty)","offer_id":58256572809519,"sku":null,"price":3822.1,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5015.jpg?v=1785120982"},{"product_id":"caloffroad-fixed-upper-control-arm-kit-2-caster-hilux-n70-n80","title":"CalOffroad Fixed Upper Control Arm Kit (2° Caster) — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eCalOffroad fixed upper control arm kit with 2 degree built-in caster and camber correction\u003c\/strong\u003e — fits Toyota Hilux N70 (2005-2015), Hilux N80 (2015 On) and Fortuner (2015 On). This is a single fixed caster option that suits both 2in and 3in lifted setups; there is no separate 1° or 3° fixed variant in this range — if you need caster dialled in beyond 2°, see our adjustable upper control arm kit instead.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eFully forged arm design for strength off-road, with maintenance-free rubber bushes that stay silent and don't need greasing. Corrects wheel alignment when running a lift, helping restore factory-like caster and camber geometry. Comes with a compliance letter for engineering.\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","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":58256578183471,"sku":null,"price":919.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/UCAHLXF2.jpg?v=1785121430"},{"product_id":"caloffroad-sway-bar-relocation-plate-hilux-n80-88mm","title":"CalOffroad Sway Bar Relocation Plate — Hilux N80 (88mm)","description":"\u003cp\u003e\u003cstrong\u003eSway bar relocation plate for the N80 Hilux (2015 On), 88mm.\u003c\/strong\u003e Strongly recommended alongside any Fox shock or coilover fitment — CalOffroad's own advice is that on a lifted N80, the factory sway bar mounting can clash with the taller Fox strut body as the suspension cycles through its travel. This plate relocates the sway bar mounting point to restore clearance and stop the bar fouling on the shock.\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","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":58256616325423,"sku":null,"price":106.59,"currency_code":"AUD","in_stock":true}]},{"product_id":"caloffroad-diff-drop-kit-30mm-hilux-n70-n80","title":"CalOffroad Diff Drop Kit (30mm) — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eCalOffroad Diff Drop Kit, 30mm drop\u003c\/strong\u003e — fits Toyota Hilux N70 (2005-2015) and N80 (2015 On). Corrects front driveline angle after a lift, reducing CV joint wear and vibration.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eSold as a kit.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eComes immaculately presented in its own box. E-coat then high-end powder coat finish, stainless CalOffroad logo badge, over 30mm of diff drop. The driver's side bracket is reinforced with a side web and also reinforces the vulnerable driver's side diff mounts by adding a second mounting point to the rear cross member.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e the original sump\/bash plate will not fit without modification once this kit is installed — we'd recommend picking up our \u003ca href=\"\/products\/caloffroad-bash-plate-hilux-n70-n80\"\u003eCalOffroad Hilux Bash Plate\u003c\/a\u003e at the same time.\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","brand":"Cubby House Fabworks","offers":[{"title":"Default Title","offer_id":58256617767215,"sku":null,"price":629.84,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/DDKHLX30.tag.1.jpg?v=1785123038"},{"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 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\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":"caloffroad-platinum-front-coil-spring-pair-2-3in-lift-hilux-n70-n80","title":"CalOffroad Platinum Front Coil Spring Pair (2-3in Lift) — Hilux N70\/N80","description":"\u003cdiv class=\"chf-wcalc\" id=\"chf-spring-calc\"\u003e\n  \u003cdiv class=\"chf-wcalc-head\"\u003eSpring Tier Calculator — find your front coil spring\u003c\/div\u003e\n  \u003cp class=\"chf-wcalc-sub\"\u003eTick what's fitted up front to get a guide on whether you need MD\/HD or XHD.\u003c\/p\u003e\n  \u003cdiv class=\"chf-wcalc-tip\" id=\"chf-spring-nudge-banner\"\u003e\n    \u003cspan id=\"chf-spring-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-table\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003e\u003c\/th\u003e\n\u003cth\u003eFront accessory\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-bullbar2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBull bar (steel or alloy)\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-winch2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eWinch\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-sliders2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eRock sliders\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-bash2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eBash\/skid plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003e\u003cinput type=\"checkbox\" id=\"chf-battery2\"\u003e\u003c\/td\u003e\n\u003ctd\u003eExtra\/dual battery (engine bay)\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003clabel class=\"chf-wcalc-heavy\"\u003e\u003cinput type=\"checkbox\" id=\"chf-heavy-flag2\"\u003e My ute is on the heavier side overall (bigger canopy\/tray, tools, general heavy build)\u003c\/label\u003e\n\n  \u003cdiv class=\"chf-wcalc-lift\"\u003e\n    \u003cdiv class=\"chf-wcalc-lift-label\"\u003eLift height you're chasing:\u003c\/div\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-spring-lift\" value=\"2in\" checked\u003e 2in\u003c\/label\u003e\n    \u003clabel\u003e\u003cinput type=\"radio\" name=\"chf-spring-lift\" value=\"3in\"\u003e 3in\u003c\/label\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"chf-wcalc-result\"\u003e\n    \u003cdiv class=\"chf-wcalc-rating\"\u003eSuggested tier: \u003cspan id=\"chf-spring-rating\"\u003eMD\/HD\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"chf-wcalc-note\" id=\"chf-spring-battery-note\"\u003eNote: an extra\/dual battery sits off to one side of the engine bay — mention this when you contact us so we can advise on preload.\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003ctable class=\"chf-wcalc-ref\"\u003e\n    \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eTier\u003c\/th\u003e\n\u003cth\u003eTypical setup\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\n\u003ctd\u003eMD\/HD\u003c\/td\u003e\n\u003ctd\u003eStock through to bull bar + winch + rock sliders + bash plates\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003ctr\u003e\n\u003ctd\u003eXHD\u003c\/td\u003e\n\u003ctd\u003eHeavier ute overall, or maximum front accessory load\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \u003cp class=\"chf-wcalc-disclaimer\"\u003e* Guide only. This gets attached to your order automatically so we see it when you check out — we'll still confirm your tier before dispatch.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  #chf-spring-calc, #chf-spring-calc *{box-sizing:border-box;}\n  #chf-spring-calc{font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:0 0 24px;background:#ffffff !important;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-head{font-weight:800;font-size:1.15em;margin-bottom:6px;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-sub{font-size:.9em;color:#333333 !important;margin:0 0 14px;}\n  #chf-spring-calc table.chf-wcalc-table{width:100%;border-collapse:collapse;font-size:.95em;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table th{text-align:left;border-bottom:2px solid #222;padding:6px;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table td{padding:8px 6px;border-bottom:1px solid #ccc;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-table td:first-child{width:32px;}\n  #chf-spring-calc input[type=checkbox], #chf-spring-calc input[type=radio]{width:18px;height:18px;accent-color:#ff7a1a;}\n  #chf-spring-calc .chf-wcalc-heavy{display:flex;align-items:flex-start;gap:8px;font-size:.9em;margin:14px 0;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-heavy input{margin-top:2px;flex-shrink:0;}\n  #chf-spring-calc .chf-wcalc-lift{border-top:1px solid #ccc;padding-top:12px;margin-top:8px;color:#111111 !important;}\n  #chf-spring-calc .chf-wcalc-lift-label{font-weight:700;margin-bottom:8px;}\n  #chf-spring-calc .chf-wcalc-lift label{display:inline-flex;align-items:center;gap:6px;margin-right:24px;font-size:.95em;}\n  #chf-spring-calc .chf-wcalc-result{background:#111111 !important;color:#ffffff !important;border-radius:6px;padding:12px 16px;margin:16px 0;}\n  #chf-spring-calc .chf-wcalc-rating{font-size:1.1em;font-weight:800;color:#ffffff !important;}\n  #chf-spring-calc .chf-wcalc-rating span{color:#ffb347 !important;font-weight:800;}\n  #chf-spring-calc .chf-wcalc-note{display:none;font-size:.85em;color:#ffe0b3 !important;margin-top:10px;line-height:1.4;}\n  #chf-spring-calc .chf-wcalc-note.show{display:block;}\n  #chf-spring-calc .chf-wcalc-tip{border:1px solid #ddd8cc;border-left:4px solid #ff7a1a;border-radius:6px;padding:10px 14px;margin:0 0 16px;font-size:.85em;line-height:1.5;color:#111111 !important;background:#f8f6f1 !important;}\n  #chf-spring-calc table.chf-wcalc-ref{width:100%;border-collapse:collapse;font-size:.9em;margin-top:10px;color:#111111 !important;background:#ffffff !important;}\n  #chf-spring-calc table.chf-wcalc-ref th{color:#111111 !important;background:#ffffff !important;border-bottom:2px solid #222;padding:6px;text-align:left;}\n  #chf-spring-calc table.chf-wcalc-ref td{color:#111111 !important;background:#ffffff !important;border-bottom:1px solid #ccc;padding:6px;text-align:left;}\n  #chf-spring-calc .chf-wcalc-disclaimer{font-size:.8em;color:#555555 !important;margin-top:12px;}\n\u003c\/style\u003e\n\u003cscript\u003e\n(function(){\n  var root = document.getElementById('chf-spring-calc');\n  if(!root) return;\n  var bullbar = document.getElementById('chf-bullbar2');\n  var winch = document.getElementById('chf-winch2');\n  var sliders = document.getElementById('chf-sliders2');\n  var bash = document.getElementById('chf-bash2');\n  var battery = document.getElementById('chf-battery2');\n  var heavyFlag = document.getElementById('chf-heavy-flag2');\n  var ratingEl = document.getElementById('chf-spring-rating');\n  var batteryNote = document.getElementById('chf-spring-battery-note');\n  var liftRadios = root.querySelectorAll('input[name=chf-spring-lift]');\n  var touched = false;\n  var nudgeBanner = document.getElementById('chf-spring-nudge-banner');\n  var nudgeText = document.getElementById('chf-spring-nudge-text');\n  function toggleNudge(){\n    if(!nudgeBanner||!nudgeText) return;\n    if(touched){ nudgeText.textContent = \"Thanks — we've got your setup details.\"; }\n    else{ nudgeText.textContent = \"Please fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\"; }\n  }\n\n  function findCartForm(){\n    var forms = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]'));\n    return forms.find(function(f){ return f.querySelector('button[type=submit], button[name=add]'); }) || forms[0];\n  }\n  var cartForm = findCartForm();\n  var hiddenTier, hiddenLift, hiddenBattery;\n  if(cartForm){\n    hiddenTier = document.createElement('input');\n    hiddenTier.type = 'hidden';\n    hiddenTier.name = 'properties[Suggested Spring Tier]';\n    cartForm.appendChild(hiddenTier);\n\n    hiddenLift = document.createElement('input');\n    hiddenLift.type = 'hidden';\n    hiddenLift.name = 'properties[Lift Height Chasing]';\n    cartForm.appendChild(hiddenLift);\n\n    hiddenBattery = document.createElement('input');\n    hiddenBattery.type = 'hidden';\n    hiddenBattery.name = 'properties[Extra Battery Preload Needed]';\n    cartForm.appendChild(hiddenBattery);\n  }\n\n  function getLift(){\n    var checked = Array.from(liftRadios).find(function(r){ return r.checked; });\n    return checked ? checked.value : '2in';\n  }\n\n  function recalc(){\n    var tier = 'MD\/HD';\n    if(heavyFlag.checked || (bullbar.checked \u0026\u0026 winch.checked \u0026\u0026 sliders.checked \u0026\u0026 bash.checked)){\n      tier = 'XHD';\n    }\n    ratingEl.textContent = tier;\n    batteryNote.className = 'chf-wcalc-note' + (battery.checked ? ' show' : '');\n\n    if(hiddenTier) hiddenTier.value = tier;\n    if(hiddenLift) hiddenLift.value = getLift();\n    if(hiddenBattery) hiddenBattery.value = battery.checked ? 'Yes' : 'No';\n  }\n  [bullbar,winch,sliders,bash,battery,heavyFlag].forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  liftRadios.forEach(function(el){ el.addEventListener('change', function(){ touched=true; toggleNudge(); recalc(); }); });\n  toggleNudge();\n  recalc();\n})();\n\u003c\/script\u003e\n\u003cp\u003eCalOffroad Platinum Series front coil spring pair, 2-3in lift, for Hilux N70\/N80. Use the calculator above as a guide, or select your tier directly below — we'll confirm before dispatch.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eSold as a pair.\u003c\/strong\u003e\u003c\/p\u003e","brand":"CalOffroad","offers":[{"title":"MD\/HD","offer_id":58285580321071,"sku":null,"price":340.0,"currency_code":"AUD","in_stock":true},{"title":"XHD","offer_id":58285580845359,"sku":null,"price":340.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CSHLXLDT.jpg?v=1789524252"},{"product_id":"caloffroad-nitro-pro-2-lift-kit-hilux-n80-2015-on-xhd-xhd","title":"CalOffroad Nitro Pro Lift Kit — Hilux N80 (2015 on), XHD\/XHD","description":"\u003cp\u003eCalOffroad Nitro Pro Series 4x4 lift kit tour pack for the \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e (2015 on), Extra Heavy Duty front and rear. Rear leaf springs are rated for 600kg+ constant load.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Nitro Pro front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Nitro Pro rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\u003cp\u003eNitro Pro shocks run twin-tube construction with an 18mm hard-chromed rod and a large 54mm body for better oil capacity and heat dissipation. Gas pressurised to cut foaming and fade, with all-weather Fuchs oil, double-bonded strut bushings, double-welded loops, forged lower legs and a two-part epoxy coating for chip and corrosion resistance.\u003c\/p\u003e\n\u003cdiv id=\"c3\" style=\"font-family:inherit;border:2px solid #222;border-radius:8px;padding:18px 20px;max-width:640px;margin:24px 0;background:#fff;color:#111\"\u003e\n\u003cdiv style=\"font-weight:800;font-size:1.15em;margin-bottom:6px\"\u003eLift Height \u0026amp; Weight Guide\u003c\/div\u003e\n\u003cp style=\"font-size:.9em;color:#333;margin:0 0 14px\"\u003eTick what's fitted up front for a guide on 2in vs 3in, then pick your Lift Height above.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;font-size:.95em\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc;width:32px\"\u003e\u003cinput type=\"checkbox\" id=\"b3\" style=\"width:18px;height:18px;accent-color:#ff7a1a\"\u003e\u003c\/td\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003eBull bar (steel or alloy)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003e\u003cinput type=\"checkbox\" id=\"w3\" style=\"width:18px;height:18px;accent-color:#ff7a1a\"\u003e\u003c\/td\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003eWinch\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003e\u003cinput type=\"checkbox\" id=\"s3\" style=\"width:18px;height:18px;accent-color:#ff7a1a\"\u003e\u003c\/td\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003eRock sliders\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003e\u003cinput type=\"checkbox\" id=\"p3\" style=\"width:18px;height:18px;accent-color:#ff7a1a\"\u003e\u003c\/td\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003eBash\/skid plates\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003e\u003cinput type=\"checkbox\" id=\"y3\" style=\"width:18px;height:18px;accent-color:#ff7a1a\"\u003e\u003c\/td\u003e\n\u003ctd style=\"padding:8px 6px;border-bottom:1px solid #ccc\"\u003eExtra\/dual battery (engine bay)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\n\u003clabel style=\"display:flex;align-items:flex-start;gap:8px;font-size:.9em;margin:14px 0\"\u003e\u003cinput type=\"checkbox\" id=\"h3\" style=\"width:18px;height:18px;accent-color:#ff7a1a;margin-top:2px;flex-shrink:0\"\u003e My ute is on the heavier side overall (bigger canopy\/tray, tools, general heavy build)\u003c\/label\u003e\n\u003cdiv style=\"background:#111;color:#fff;border-radius:6px;padding:12px 16px;margin:16px 0\"\u003e\n\u003cdiv style=\"font-size:1.1em;font-weight:800\"\u003eSuggested lift height: \u003cspan id=\"r3\" style=\"color:#ffb347\"\u003e2in\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"n3\" style=\"display:none;font-size:.85em;color:#ffe0b3;margin-top:10px;line-height:1.4\"\u003eNote: an extra\/dual battery sits off to one side of the engine bay — mention this when you contact us so we can advise on preload.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chf-callout\" id=\"chf-accuracy-callout-3\" style=\"border:1px solid #ddd;border-radius:6px;padding:10px 12px;margin:14px 0;\"\u003e\u003clabel style=\"display:flex;align-items:flex-start;gap:8px;cursor:pointer;font-size:.9em;line-height:1.5;margin:0;\"\u003e\u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm-3\" style=\"width:18px;height:18px;margin-top:2px;flex-shrink:0;\"\u003e\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\u003c\/label\u003e\u003c\/div\u003e\n\u003cp style=\"font-size:.8em;color:#555;margin-top:12px\"\u003e* Guide only. This gets attached to your order automatically so we see it at checkout — please still select the matching Lift Height option above, and we'll confirm your setup before dispatch.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n(function(){var R=document.getElementById('c3');if(!R)return;var E=function(i){return document.getElementById(i)};var b=E('b3'),w=E('w3'),s=E('s3'),p=E('p3'),y=E('y3'),h=E('h3'),r=E('r3'),n=E('n3');\nvar CB=document.getElementById('chf-accuracy-confirm-3');var noteTimer=null;function buildNote(L){var lines=[];lines.push('Suggested Lift Height: '+L);lines.push('Extra\/Dual Battery: '+(y.checked?'Yes':'No'));lines.push('Heavier build ticked: '+(h.checked?'Yes':'No'));lines.push('Accessories: '+[b.checked?'Bull bar':'',w.checked?'Winch':'',s.checked?'Rock sliders':'',p.checked?'Bash\/skid plates':''].filter(Boolean).join(', '));lines.push('Customer confirmed info accurate: '+(CB\u0026\u0026CB.checked?'Yes':'No'));return lines.join('\\n');}function go(){var L=(h.checked||(b.checked\u0026\u0026w.checked\u0026\u0026s.checked\u0026\u0026p.checked))?'3in':'2in';r.textContent=L;n.style.display=y.checked?'block':'none';if(!CB||!CB.checked)return;if(noteTimer)clearTimeout(noteTimer);noteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:buildNote(L)})}).catch(function(){});},400);}[b,w,s,p,y,h].forEach(function(e){e.addEventListener('change',go)});if(CB){CB.addEventListener('change',go);}go();document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!CB||!CB.checked){e.preventDefault();var callout=document.getElementById('chf-accuracy-callout-3');if(callout){callout.style.borderColor='#c0392b';callout.scrollIntoView({behavior:'smooth',block:'center'});}if(CB)CB.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e","brand":"CalOffroad","offers":[{"title":"2in","offer_id":58287344222511,"sku":null,"price":2412.3,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58287355986223,"sku":null,"price":2412.3,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/nitro_full_kit_0b968787-9a85-4b7b-a046-00de6a9648ef.png?v=1785904680"},{"product_id":"caloffroad-platinum-series-2-lift-kit-hilux-n80-2015-on-xhd-xhd","title":"CalOffroad Platinum Series Lift Kit — Hilux N80 (2015 on)","description":"\u003cp\u003eCalOffroad Platinum Series 4x4 lift kit tour pack for the \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e (2015 on). The Platinum tier runs Bilstein-built struts and shocks, a step above the Nitro Pro range. Use the calculator below to tell us what your ute actually carries — we pick the front and rear duty tier that gives you the best ride quality for your real setup, not an overbuilt one-size-fits-all spec.\u003c\/p\u003e\n\u003ch3\u003eWhat's in the kit\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e2 x assembled CalOffroad Platinum Bilstein front coilovers (new strut tops included)\u003c\/li\u003e\n\u003cli\u003e2 x CalOffroad Platinum Bilstein rear shocks\u003c\/li\u003e\n\u003cli\u003e2 x rear leaf springs\u003c\/li\u003e\n\u003cli\u003e4 x U-bolts\u003c\/li\u003e\n\u003cli\u003e2 x greasable shackles\u003c\/li\u003e\n\u003cli\u003e2 x greasable pins\u003c\/li\u003e\n\u003cli\u003e1 x leaf spring bush kit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFronts come \u003cstrong\u003efully assembled\u003c\/strong\u003e — spring already fitted to the strut with new tops, ready to bolt straight in. No spring compressor needed.\u003c\/p\u003e\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eCalOffroad Platinum Lift Kit Calculator — Cubby House Fabworks\u003c\/title\u003e\n\u003cstyle\u003e\n\n  .chf-calc {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    .chf-calc {\n      --bg: #14161a;\n      --panel: #1c1f26;\n      --panel-2: #21242c;\n      --border: #33373f;\n      --border-strong: #454a54;\n      --text: #f0ede6;\n      --text-dim: #a9acb3;\n      --text-faint: #6f727a;\n      --accent: #e8842d;\n      --accent-ink: #14161a;\n      --accent-soft: rgba(232, 132, 45, 0.14);\n      --accent-soft-strong: rgba(232, 132, 45, 0.26);\n      --ok: #93b06d;\n      --needle-shadow: rgba(0, 0, 0, 0.5);\n      --track: #2a2e36;\n      --focus: #f0ede6;\n    }\n  }\n\n  .chf-calc[data-theme=\"dark\"] {\n    --bg: #14161a;\n    --panel: #1c1f26;\n    --panel-2: #21242c;\n    --border: #33373f;\n    --border-strong: #454a54;\n    --text: #f0ede6;\n    --text-dim: #a9acb3;\n    --text-faint: #6f727a;\n    --accent: #e8842d;\n    --accent-ink: #14161a;\n    --accent-soft: rgba(232, 132, 45, 0.14);\n    --accent-soft-strong: rgba(232, 132, 45, 0.26);\n    --ok: #93b06d;\n    --needle-shadow: rgba(0, 0, 0, 0.5);\n    --track: #2a2e36;\n    --focus: #f0ede6;\n  }\n\n  .chf-calc[data-theme=\"light\"] {\n    --bg: #f2efe8;\n    --panel: #ffffff;\n    --panel-2: #f8f6f1;\n    --border: #ddd8cc;\n    --border-strong: #c7c1b2;\n    --text: #1b1d22;\n    --text-dim: #6b6e76;\n    --text-faint: #9a9da3;\n    --accent: #c96a1e;\n    --accent-ink: #ffffff;\n    --accent-soft: rgba(201, 106, 30, 0.1);\n    --accent-soft-strong: rgba(201, 106, 30, 0.2);\n    --ok: #5f7a3d;\n    --needle-shadow: rgba(0, 0, 0, 0.18);\n    --track: #e4dfd2;\n    --focus: #1b1d22;\n  }\n\n  .chf-calc, .chf-calc * { box-sizing: border-box; }\n  .chf-calc {\n    background: var(--bg);\n    color: var(--text);\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    padding: 40px 16px 64px;\n    border-radius: 6px;\n  }\n\n  .chf-calc .wrap { width: 100%; max-width: 640px; margin: 0 auto; }\n\n  .eyebrow {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    font-weight: 500;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--accent);\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n  .eyebrow::before {\n    content: \"\";\n    width: 16px;\n    height: 1.5px;\n    background: var(--accent);\n    display: inline-block;\n  }\n\n  .chf-calc h1 {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.01em;\n    font-size: clamp(28px, 6vw, 38px);\n    line-height: 1.05;\n    margin: 0 0 10px;\n    text-wrap: balance;\n    color: var(--text);\n    background: none;\n    border: none;\n    box-shadow: none;\n  }\n\n  .lede {\n    font-size: 15px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    max-width: 54ch;\n    margin: 0 0 28px;\n  }\n  .lede strong { color: var(--text); font-weight: 600; }\n\n  .chf-calc section.card {\n    background: var(--panel);\n    border: 1px solid var(--border);\n    border-radius: 4px;\n    padding: 22px 22px 24px;\n    margin-bottom: 16px;\n  }\n\n  .card-title {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    font-size: 13px;\n    color: var(--text-dim);\n    margin: 0 0 4px;\n  }\n  .card-sub {\n    font-size: 13px;\n    color: var(--text-faint);\n    margin: 0 0 16px;\n    line-height: 1.5;\n  }\n\n  \/* segmented control *\/\n  .seg {\n    display: grid;\n    grid-auto-flow: column;\n    grid-auto-columns: 1fr;\n    gap: 6px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px;\n  }\n  .seg.wide-2 { grid-auto-columns: 1fr; }\n  .seg label {\n    position: relative;\n    text-align: center;\n    padding: 9px 8px;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: var(--text-dim);\n    border-radius: 2px;\n    cursor: pointer;\n    user-select: none;\n    transition: background 0.15s ease, color 0.15s ease;\n    line-height: 1.3;\n  }\n  .seg label .kg {\n    display: block;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-weight: 400;\n    font-size: 10.5px;\n    color: var(--text-faint);\n    margin-top: 2px;\n  }\n  .seg input { position: absolute; opacity: 0; pointer-events: none; }\n  .seg input:checked + label,\n  .seg label.checked {\n    background: var(--accent);\n    color: var(--accent-ink);\n  }\n  .seg input:checked + label .kg, .seg label.checked .kg { color: var(--accent-ink); opacity: 0.75; }\n  .seg input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 1px; }\n\n  \/* accessory rows with toggle *\/\n  .rows { display: flex; flex-direction: column; }\n  .row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    padding: 13px 0;\n    border-top: 1px solid var(--border);\n  }\n  .row:first-child { border-top: none; padding-top: 2px; }\n  .row-text { flex: 1; min-width: 0; }\n  .row-label { font-size: 14px; font-weight: 600; }\n  .row-note { font-size: 12px; color: var(--text-faint); margin-top: 2px; line-height: 1.4; }\n\n  .switch {\n    position: relative;\n    width: 42px;\n    height: 24px;\n    flex: none;\n  }\n  .switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; z-index: 1; }\n  .switch .track {\n    position: absolute;\n    inset: 0;\n    background: var(--track);\n    border: 1px solid var(--border-strong);\n    border-radius: 999px;\n    transition: background 0.15s ease, border-color 0.15s ease;\n  }\n  .switch .thumb {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    background: var(--panel);\n    box-shadow: 0 1px 2px rgba(0,0,0,0.25);\n    transition: transform 0.18s cubic-bezier(.4,0,.2,1);\n  }\n  .switch input:checked ~ .track { background: var(--accent); border-color: var(--accent); }\n  .switch input:checked ~ .thumb { transform: translateX(18px); background: var(--accent-ink); }\n  .switch input:focus-visible ~ .track { outline: 2px solid var(--focus); outline-offset: 2px; }\n\n  .chf-calc fieldset { border: none; margin: 0; padding: 0; }\n  .chf-calc legend { padding: 0; }\n\n  \/* gauge *\/\n  .gauge-card { padding-bottom: 26px; }\n  .readout {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 10px 20px;\n    margin-bottom: 20px;\n  }\n  .readout-main .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-main .value {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n    font-variant-numeric: tabular-nums;\n  }\n  .readout-main .value .unit {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 17px;\n    color: var(--text-dim);\n    margin-left: 4px;\n  }\n  .readout-sub { text-align: right; }\n  .readout-sub .label {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    margin-bottom: 4px;\n  }\n  .readout-sub .value {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 20px;\n    font-weight: 500;\n    color: var(--text);\n    font-variant-numeric: tabular-nums;\n  }\n\n  .scale { position: relative; margin: 0 4px 6px; }\n  .scale-track {\n    position: relative;\n    height: 8px;\n    border-radius: 999px;\n    background: var(--track);\n    border: 1px solid var(--border);\n    overflow: visible;\n  }\n  .scale-fill {\n    position: absolute;\n    top: -1px; bottom: -1px; left: -1px;\n    border-radius: 999px;\n    background: linear-gradient(90deg, var(--ok), var(--accent));\n    width: 0%;\n    transition: width 0.35s cubic-bezier(.4,0,.2,1);\n  }\n  .scale-needle {\n    position: absolute;\n    top: 50%;\n    left: 0%;\n    width: 3px;\n    height: 26px;\n    background: var(--text);\n    border-radius: 2px;\n    transform: translate(-50%, -50%);\n    transition: left 0.35s cubic-bezier(.4,0,.2,1);\n    box-shadow: 0 2px 5px var(--needle-shadow);\n  }\n  .scale-needle::after {\n    content: \"\";\n    position: absolute;\n    left: 50%;\n    top: -6px;\n    width: 9px;\n    height: 9px;\n    background: var(--text);\n    border-radius: 50%;\n    transform: translateX(-50%);\n  }\n  .ticks {\n    display: flex;\n    justify-content: space-between;\n    margin-top: 10px;\n  }\n  .ticks span {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    font-weight: 500;\n    color: var(--text-faint);\n    position: relative;\n    font-variant-numeric: tabular-nums;\n  }\n  .ticks span.active { color: var(--accent); font-weight: 600; }\n  .ticks span:first-child { text-align: left; }\n  .ticks span:last-child { text-align: right; }\n\n  .stock-flag {\n    position: absolute;\n    top: -22px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 10px;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n    left: 0%;\n    transform: translateX(-50%);\n    white-space: nowrap;\n  }\n\n  \/* lift height *\/\n  .lift-note {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n  }\n  .lift-note strong { color: var(--text); }\n  .lift-note.warn { border-left-color: var(--text-faint); }\n\n  \/* methodology disclosure *\/\n  .chf-calc details.method {\n    background: transparent;\n    border: 1px dashed var(--border-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n  }\n  details.method summary {\n    cursor: pointer;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 11.5px;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    font-weight: 500;\n    color: var(--text-dim);\n    list-style: none;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n  details.method summary::-webkit-details-marker { display: none; }\n  details.method summary::before {\n    content: \"+\";\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-size: 15px;\n    color: var(--accent);\n    width: 14px;\n  }\n  details.method[open] summary::before { content: \"–\"; }\n  .method-body {\n    margin-top: 12px;\n    font-size: 13px;\n    line-height: 1.6;\n    color: var(--text-dim);\n  }\n  .method-body table { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 12.5px; }\n  .method-body th, .method-body td {\n    text-align: left;\n    padding: 6px 8px 6px 0;\n    border-bottom: 1px solid var(--border);\n  }\n  .method-body th { color: var(--text-faint); font-weight: 500; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; }\n  .method-body td.num { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace; font-variant-numeric: tabular-nums; color: var(--text); }\n\n  .foot-note {\n    font-size: 12px;\n    color: var(--text-faint);\n    line-height: 1.6;\n    margin-top: 18px;\n    padding-top: 16px;\n    border-top: 1px solid var(--border);\n  }\n\n  \/* philosophy callout *\/\n  .callout {\n    display: flex;\n    gap: 12px;\n    align-items: flex-start;\n    background: var(--accent-soft);\n    border: 1px solid var(--accent-soft-strong);\n    border-radius: 4px;\n    padding: 14px 16px;\n    margin: 0 0 28px;\n  }\n  .callout .mark {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 20px;\n    color: var(--accent);\n    line-height: 1.2;\n    flex: none;\n  }\n  .callout p {\n    margin: 0;\n    font-size: 13.5px;\n    line-height: 1.55;\n    color: var(--text);\n  }\n  .callout strong { color: var(--accent); }\n\n  \/* section divider between front and rear *\/\n  .divider {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin: 36px 0 20px;\n  }\n  .divider .line { flex: 1; height: 1px; background: var(--border); }\n  .divider .eyebrow { margin-bottom: 0; }\n\n  .num-field {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-radius: 3px;\n    padding: 4px 4px 4px 14px;\n  }\n  .num-field label { font-size: 13px; font-weight: 600; flex: 1; }\n  .num-field input {\n    width: 90px;\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 15px;\n    font-weight: 500;\n    color: var(--text);\n    background: var(--panel);\n    border: 1px solid var(--border-strong);\n    border-radius: 2px;\n    padding: 8px 10px;\n    text-align: right;\n    font-variant-numeric: tabular-nums;\n  }\n  .num-field input:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }\n  .num-field .unit-tag {\n    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;\n    font-size: 12px;\n    color: var(--text-faint);\n    padding-right: 12px;\n  }\n\n  .gvm-warn {\n    background: var(--panel-2);\n    border: 1px solid var(--border);\n    border-left: 3px solid var(--accent);\n    border-radius: 3px;\n    padding: 12px 14px;\n    font-size: 12.5px;\n    line-height: 1.55;\n    color: var(--text-dim);\n    margin-top: 14px;\n    display: none;\n  }\n  .gvm-warn.show { display: block; }\n  .gvm-warn strong { color: var(--text); }\n\n  .tier-name {\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;\n    font-weight: 700;\n    font-size: 44px;\n    line-height: 1;\n    color: var(--accent);\n  }\n  .tier-full {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 15px;\n    color: var(--text-dim);\n    margin-top: 6px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .scale-fill, .scale-needle { transition: none; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"chf-calc\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n  \u003cdiv class=\"eyebrow\"\u003eFront \u0026amp; Rear Duty Tier Calculator\u003c\/div\u003e\n  \u003ch1\u003eDial in front and rear.\u003c\/h1\u003e\n  \u003cp class=\"lede\"\u003e\n    \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e and a stock rear\n    axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e on an LD tier. Tell us what's fitted and the price updates automatically\n    to match your exact front and rear duty tier.\n  \u003c\/p\u003e\n\n  \u003cdiv class=\"callout\" id=\"chf-nudge-banner\"\u003e\n    \u003cspan class=\"mark\"\u003e!\u003c\/span\u003e\n    \u003cp id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the\n    odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys\n    a daily-driven brick just so it's ready for a trip it takes twice a summer. If your\n    heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eLift Height\u003c\/p\u003e\n    \u003cp class=\"card-sub\" id=\"lift-sync-note\"\u003eWe've set the Lift Height option above to match — change it any time.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Lift height\"\u003e\n      \u003cinput type=\"radio\" name=\"lift\" id=\"lift-2\" value=\"2in\" checked\u003e\n      \u003clabel for=\"lift-2\"\u003e2in\u003cspan class=\"kg\"\u003e50mm\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"lift\" id=\"lift-3\" value=\"3in\"\u003e\n      \u003clabel for=\"lift-3\"\u003e3in\u003cspan class=\"kg\"\u003e75mm\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cp style=\"margin:12px 0 0;font-size:14px;\"\u003e\u003cstrong\u003eSelected lift height: \u003cspan id=\"chf-lift-bold\"\u003e2in\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\" id=\"uca-card\" style=\"display:none;border:2px solid var(--accent);background:var(--accent-soft);\"\u003e\n    \u003cp class=\"card-title\" style=\"color:var(--accent);\"\u003e\n      \u003cspan style=\"display:inline-block;background:var(--accent);color:var(--accent-ink);font-size:10px;font-weight:700;padding:3px 7px;border-radius:3px;letter-spacing:0.05em;margin-right:8px;vertical-align:middle;\"\u003eRECOMMENDED\u003c\/span\u003e\n      3in Lift — Caster Correction\n    \u003c\/p\u003e\n    \u003cp class=\"card-sub\" style=\"color:var(--text-dim);\"\u003eAt 3in your front caster and CV working angles move outside factory spec — left uncorrected that means faster front tyre wear and CV joints working on a harsher angle than they're built for. This UCA kit brings caster back to where it should be.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eAdd 2° Caster Correction UCAs — Pre-selected\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eCalOffroad Fixed Upper Control Arm Kit, 2° correction. $919, added as its own line item alongside your kit. We've pre-selected it as the correct spec for a 3in lift — untick if you'd rather we quote it separately.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"uca-add\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear Shock Length\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eStandard fits the factory bump stop. Long travel has a shorter closed length and needs a bump stop extension.\u003c\/p\u003e\n    \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Rear shock length\"\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-630\" value=\"630\" checked\u003e\n      \u003clabel for=\"rearshock-630\"\u003eStandard\u003cspan class=\"kg\"\u003e630mm open\u003c\/span\u003e\u003c\/label\u003e\n      \u003cinput type=\"radio\" name=\"rearshock\" id=\"rearshock-660\" value=\"660\"\u003e\n      \u003clabel for=\"rearshock-660\"\u003eLong travel\u003cspan class=\"kg\"\u003e660mm open\u003c\/span\u003e\u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"rearshock-warn\"\u003e\n      \u003cstrong\u003eLong-travel shock:\u003c\/strong\u003e shorter closed length — we recommend running a bump stop extension so the shock isn't the first thing to bottom out.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n\u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e1180\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cspan class=\"stock-flag\" id=\"stock-flag\" style=\"left:0%;\"\u003estock\u003c\/span\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eRear Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"rear-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Leaf Pack\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003ePrice adjusts automatically to match your calculated front and rear 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\"\u003e1000\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cspan class=\"stock-flag\" id=\"rear-stock-flag\" style=\"left:0%;\"\u003estock\u003c\/span\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"rear-scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"rear-scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"gvm-warn\"\u003e\n      This load is over the \u003cstrong id=\"gvm-warn-vehicle\"\u003eToyota Hilux N80\u003c\/strong\u003e's rated rear axle capacity\n      (\u003cstrong id=\"gvm-warn-cap\"\u003e1700kg\u003c\/strong\u003e). Talk to us before we spec a pack — a GVM upgrade\n      might be the better fix.\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"range-warn\"\u003e\n      This exact front\/rear combination isn't priced online yet — we've kept the price at your last valid tier. Contact us to confirm pricing for this setup before ordering.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n\n\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var REAR_STOCK_KG=1000;var REAR_MAX_KG=1700;var VEHICLE_LABEL='Toyota Hilux N80';var RANGE_MIN_INDEX=3;var REAR_TIERS=[{code:'LD',full:'Light Duty'},{code:'MD',full:'Medium Duty'},{code:'HD',full:'Heavy Duty'},{code:'XHD',full:'Extra Heavy Duty'}];var TIER_ORDER=['LD','MD','HD','XHD'];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};var PLATINUM_MODEL={2:'5013',3:'5017'};var PLATINUM_LETTER={LD:'LI',MD:'ME',HD:'HE',XHD:'EX'};var barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');function rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}function rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}var liftInputs=document.querySelectorAll('input[name=\"lift\"]');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var batteryNote=document.getElementById('battery-note');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');var tierValueEl=document.getElementById('tier-value');var tierFullEl=document.getElementById('tier-full');var rearWeightEl=document.getElementById('rear-weight-value');var rearScaleFill=document.getElementById('rear-scale-fill');var rearScaleNeedle=document.getElementById('rear-scale-needle');var rearTicks=document.querySelectorAll('#rear-gauge .ticks span');var gvmWarn=document.getElementById('gvm-warn');var gvmWarnVehicle=document.getElementById('gvm-warn-vehicle');var gvmWarnCap=document.getElementById('gvm-warn-cap');var rangeWarn=document.getElementById('range-warn');var ucaCard=document.getElementById('uca-card');var ucaCheckbox=document.getElementById('uca-add');var UCA_VARIANT_ID=58256578183471;var ucaTouched=false;function toggleUcaCard(){var show=(checkedStr(liftInputs)==='3in');if(ucaCard)ucaCard.style.display=show?'':'none';if(show\u0026\u0026ucaCheckbox\u0026\u0026!ucaTouched)ucaCheckbox.checked=true;if(!show\u0026\u0026ucaCheckbox){ucaCheckbox.checked=false;ucaTouched=false;}}var isSyncingLift=false;var touched=false;var nudgeBanner=document.getElementById('chf-nudge-banner');var nudgeText=document.getElementById('chf-nudge-text');function toggleNudge(){if(!nudgeBanner||!nudgeText)return;if(touched){nudgeText.textContent=\"Thanks — we've got your setup details.\";}else{nudgeText.textContent=\"Please fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\";}}\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction checkedStr(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return list[i].value;return'';}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction selectLiftVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Lift Height')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){isSyncingLift=true;r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\nvar CONFIRMED_COMBOS={'LD\/LD':1,'LD\/MD':1,'LD\/HD':1,'LD\/XHD':1,'MD\/LD':1,'MD\/MD':1,'MD\/HD':1,'MD\/XHD':1,'XHD\/LD':1,'XHD\/MD':1,'XHD\/HD':1,'XHD\/XHD':1};\nfunction selectDutyComboVariant(value){var radios=document.querySelectorAll('variant-selects input[type=\"radio\"]');for(var i=0;i\u003cradios.length;i++){var r=radios[i];if(r.name.trim().indexOf('Duty Combo')===0\u0026\u0026r.value===value\u0026\u0026!r.checked){r.checked=true;r.dispatchEvent(new Event('change',{bubbles:true}));}}}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front;var rearKg=buildTotal;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var rearMaxKg=REAR_MAX_KG;var totalFrontKg=FRONT_STOCK_KG+added.frontKg;var rateRaw=FRONT_BASE_LB+added.frontKg*FRONT_SLOPE;rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,rateRaw));var frontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){frontTier=FRONT_TIERS[i];break;}}\nif(frontTier.code==='HD')frontTier=FRONT_TIERS[1];\/* CalOffroad has no HD front coilover - HD front loads run the MD coilover *\/frontTierValueEl.textContent=frontTier.code;frontTierFullEl.textContent=frontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===frontTier.code);});var totalRearKgRaw=REAR_STOCK_KG+added.rearKg;var totalRearKg=Math.min(rearMaxKg,totalRearKgRaw);var rearSpan=rearMaxKg-REAR_STOCK_KG;var rearPct=((totalRearKg-REAR_STOCK_KG)\/rearSpan)*100;rearPct=Math.min(100,Math.max(0,rearPct));var tierIndex=Math.min(3,Math.floor(rearPct\/25));if(rearPct\u003e=100)tierIndex=3;var tier=REAR_TIERS[tierIndex];tierValueEl.textContent=tier.code;tierFullEl.textContent=tier.full;rearWeightEl.textContent=Math.round(totalRearKgRaw);rearScaleFill.style.width=rearPct+'%';rearScaleNeedle.style.left=rearPct+'%';rearTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===tier.code);});if(totalRearKgRaw\u003erearMaxKg){gvmWarn.classList.add('show');gvmWarnVehicle.textContent=VEHICLE_LABEL;gvmWarnCap.textContent=rearMaxKg+'kg';}else{gvmWarn.classList.remove('show');}\nvar comboKey=frontTier.code+'\/'+tier.code;var comboPriced=!!CONFIRMED_COMBOS[comboKey];rangeWarn.classList.toggle('show',!comboPriced);if(comboPriced)selectDutyComboVariant(comboKey);selectLiftVariant(checkedStr(liftInputs)||'2in');batteryNote.classList.toggle('show',battery.checked);toggleUcaCard();(function(){var w=document.getElementById('rearshock-warn');if(!w)return;var rs=document.querySelectorAll('input[name=\"rearshock\"]'),v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;w.classList.toggle('show',v===\"660\");})();syncToShopify(frontTier,totalFrontKg,tier,totalRearKgRaw,added.towballKg,checkedStr(liftInputs)||'2in');}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfLiftBoldEl=document.getElementById('chf-lift-bold');var chfNoteTimer=null;\nfunction chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift){var lines=[];var skuLift=parseInt(lift,10);var skuModel=PLATINUM_MODEL[skuLift];var sku=skuModel?('CAL'+skuModel+'-'+PLATINUM_LETTER[frontTier.code]+'-'+PLATINUM_LETTER[tier.code]+'-A'):'confirm SKU manually';lines.push('CoolDrive Order Code: '+sku);var comboKeyNote=frontTier.code+'\/'+tier.code;if(!CONFIRMED_COMBOS[comboKeyNote])lines.push('PRICE NOT AUTO-MATCHED — this combo has no online price yet, confirm manually before building');lines.push('Vehicle: '+VEHICLE_LABEL);lines.push('Lift Height: '+lift);lines.push('Suggested Front Duty Tier: '+frontTier.code+' ('+frontTier.full+')');lines.push('Est. Front Axle Load: '+Math.round(frontKg)+'kg');if(lift==='3in')lines.push('2° Caster Correction UCA: '+(ucaCheckbox\u0026\u0026ucaCheckbox.checked?'ADDED to cart ($919) — CalOffroad Fixed UCA Kit':'Not added'));lines.push('Suggested Rear Duty Tier: '+tier.code+' ('+tier.full+')');lines.push('Est. Rear Axle Load: '+Math.round(rearKg)+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(battery.checked?'Yes':'No'));if(towballKg\u003e0)lines.push('Tow Ball Weight: '+Math.round(towballKg)+'kg');lines.push((function(){var rs=document.querySelectorAll('input[name=\"rearshock\"]');var v=\"630\";for(var i=0;i\u003crs.length;i++)if(rs[i].checked)v=rs[i].value;return v==\"660\"?\"Rear shock: Long travel (660mm open) — recommended run bump stop extension\":\"Rear shock: Standard (630mm open)\";})());lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(frontTier,frontKg,tier,rearKg,towballKg,lift){if(chfLiftBoldEl)chfLiftBoldEl.textContent=lift;var text=chfBuildNoteText(frontTier,frontKg,tier,rearKg,towballKg,lift);if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\n[].concat([].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')),[].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[].slice.call(liftInputs),[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){touched=true;toggleNudge();update();});});towball.addEventListener('input',function(){touched=true;toggleNudge();update();});if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){update();});}if(ucaCheckbox){ucaCheckbox.addEventListener('change',function(){ucaTouched=true;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.');}});});var realBuyForm=document.querySelector('product-form form[action*=\"\/cart\/add\"]');if(realBuyForm){realBuyForm.addEventListener('submit',function(){if(ucaCheckbox\u0026\u0026ucaCheckbox.checked){fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({items:[{id:UCA_VARIANT_ID,quantity:1}]})}).catch(function(){});}});}document.addEventListener('change',function(e){if(!(e.target.matches\u0026\u0026e.target.matches('variant-selects input[type=\"radio\"]')))return;var name=e.target.name.trim();if(name.indexOf('Lift Height')===0){if(isSyncingLift){isSyncingLift=false;return;}\nvar val=e.target.value.trim();for(var i=0;i\u003cliftInputs.length;i++){if(liftInputs[i].value===val)liftInputs[i].checked=true;}\nupdate();}});toggleNudge();update();})();\u003c\/script\u003e\n\u003c\/div\u003e\n\n\u003cp\u003e\u003cstrong\u003eLead time:\u003c\/strong\u003e these kits are made to order and lead times vary. Please email us before ordering and we'll confirm current availability and an ETA for your build.\u003c\/p\u003e","brand":"CalOffroad","offers":[{"title":"2in \/ LD\/LD","offer_id":58479615017263,"sku":null,"price":2543.05,"currency_code":"AUD","in_stock":true},{"title":"3in \/ LD\/LD","offer_id":58479615213871,"sku":null,"price":2543.05,"currency_code":"AUD","in_stock":true},{"title":"2in \/ XHD\/XHD","offer_id":58287344582959,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in \/ XHD\/XHD","offer_id":58287356084527,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"2in \/ MD\/MD","offer_id":58479614984495,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ XHD\/MD","offer_id":58479615050031,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ XHD\/HD","offer_id":58479615082799,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ LD\/XHD","offer_id":58479615115567,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"2in \/ XHD\/LD","offer_id":58479615148335,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in \/ MD\/MD","offer_id":58479615181103,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ XHD\/MD","offer_id":58479615246639,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ XHD\/HD","offer_id":58479615279407,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ LD\/XHD","offer_id":58479615312175,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in \/ XHD\/LD","offer_id":58479615344943,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"2in \/ LD\/MD","offer_id":58521648759087,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ LD\/HD","offer_id":58521648791855,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ MD\/LD","offer_id":58521648824623,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ MD\/HD","offer_id":58521648857391,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"2in \/ MD\/XHD","offer_id":58521648890159,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true},{"title":"3in \/ LD\/MD","offer_id":58521648922927,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ LD\/HD","offer_id":58521648955695,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ MD\/LD","offer_id":58521648988463,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ MD\/HD","offer_id":58521649021231,"sku":null,"price":2731.43,"currency_code":"AUD","in_stock":true},{"title":"3in \/ MD\/XHD","offer_id":58521649053999,"sku":null,"price":2773.3,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CAL5013-EX-EX.tag.1.jpg?v=1785904209"},{"product_id":"starter-motor-12v-10t-toyota-hilux-fortuner-prado-1gd-ftv-2gd-ftv-n80","title":"Starter Motor 12V 10T — Toyota Hilux\/Fortuner\/Prado 1GD-FTV\/2GD-FTV (N80)","description":"\u003cp\u003eDirect-fit 12V 10-tooth starter motor for the Toyota Hilux, Fortuner and Prado 1GD-FTV\/2GD-FTV diesel (2015 on).\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e12V, 1.7kW, 10-tooth pinion\u003c\/li\u003e\n\u003cli\u003eSuits Toyota Hilux, Fortuner \u0026amp; Prado 1GD-FTV\/2GD-FTV Diesel 2015+\u003c\/li\u003e\n\u003cli\u003eDirect OE-fit replacement\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58340910760239,"sku":"70-8931","price":328.8,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/70-8931.tag.1.jpg?v=1786940705"},{"product_id":"alternator-12v-100a-toyota-hilux-1gd-ftv-2gd-ftv-2-8l-n80","title":"Alternator 12V 100A — Toyota Hilux 1GD-FTV\/2GD-FTV 2.8L (N80)","description":"\u003cp\u003e12V 100A alternator suiting the Toyota Hilux 1GD-FTV\/2GD-FTV 2.8L diesel (2015 on).\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e12V, 100A output\u003c\/li\u003e\n\u003cli\u003eNSK bearings\u003c\/li\u003e\n\u003cli\u003eSuits Toyota Hilux GUN122\/GUN125 1GD-FTV\/2GD-FTV 2.8L Diesel 2015+\u003c\/li\u003e\n\u003cli\u003eDirect OE-fit replacement\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58340910825775,"sku":"65-8657-1","price":629.44,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/65-8657-1.tag.1.jpg?v=1786940711"},{"product_id":"complete-power-steering-rack-toyota-hilux-n80-gun126r-fortuner","title":"Complete Power Steering Rack — Toyota Hilux N80 (GUN126R) \/ Fortuner","description":"\u003cp\u003eComplete aftermarket power steering rack assembly for Toyota Hilux N80 GUN126R 4WD and Fortuner. Equivalent to OE part number 44250-0K710.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eComplete assembly, ready to fit\u003c\/li\u003e\n\u003cli\u003eSuits Toyota Hilux GUN126R 4WD, Fortuner\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58340910858543,"sku":"PSR357A","price":2519.31,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/PSR357A.tag.1.jpg?v=1786940717"},{"product_id":"front-wheel-bearing-hub-assembly-toyota-hilux-n80-gun-ggn","title":"Front Wheel Bearing Hub Assembly — Toyota Hilux N80 (GUN\/GGN)","description":"\u003cp\u003eFront wheel bearing hub assembly for Toyota Hilux N80 (GUN\/GGN series), also fitting Prado and LandCruiser 70\/200 series (GDJ\/KDJ\/GRJ) and FJ Cruiser.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eComplete hub assembly — bearing pre-fitted\u003c\/li\u003e\n\u003cli\u003eSuits Toyota Hilux N80 (GUN\/GGN), Prado, LandCruiser GDJ\/KDJ\/GRJ, FJ Cruiser\u003c\/li\u003e\n\u003cli\u003eDirect OE-fit replacement\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58340923212079,"sku":"WBH1514","price":173.43,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/WBH1514.tag.1.jpg?v=1786941996"},{"product_id":"nitro-pro-rear-shock-0-2in-lift-toyota-hilux-n80-medium-duty","title":"Nitro Pro Rear Shock Pair, 0-2in Lift — Toyota Hilux N80 (Medium Duty)","description":"CalOffroad Nitro Pro rear shocks for the \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e (2015 on), 0-2 inch lift, Medium Duty rating. Sold as a pair (2x shocks). 0-2in lift range, Medium Duty rating. Direct bolt-in fitment.\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 N80 carries a stock rear axle around \u003cstrong\u003e1000kg\u003c\/strong\u003e. This shock is built for the Medium Duty range — tell us what's fitted and we'll confirm it fits.\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 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","offer_id":58341036654895,"sku":"CORTT001RM","price":381.48,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/CORTT001RM.tag.1.jpg?v=1786951485"},{"product_id":"nitro-pro-front-strut-coil-spring-pair-toyota-hilux-n80-1-5-2in-lift","title":"Nitro Pro Front Strut \u0026 Coil Spring Pair — Toyota Hilux N80 (1.5-2in Lift)","description":"\u003cp\u003eCalOffroad Nitro Pro front strut and coil spring pair for the \u003cstrong\u003eToyota Hilux N80\u003c\/strong\u003e (2015 on) and Fortuner. Height adjustable 1.5-2 inch lift, Medium Duty rating. Everything you need for a complete front lift — sold as a pair (2x strut, 2x coil spring).\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e1.5-2in adjustable lift range\u003c\/li\u003e\n\u003cli\u003eMedium Duty — suits light to medium accessory loads (bar, winch)\u003c\/li\u003e\n\u003cli\u003eIncludes 2x front strut and 2x front coil spring\u003c\/li\u003e\n\u003c\/ul\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 N80 carries a stock front axle around \u003cstrong\u003e1180kg\u003c\/strong\u003e on a 600lb spring. This kit is built for the Medium Duty range — tell us what's fitted and we'll confirm it fits.\u003c\/p\u003e\n  \u003cdiv class=\"chf-nudge lift-note\" id=\"chf-nudge\"\u003e\n    \u003cspan id=\"chf-nudge-text\"\u003ePlease fill in your setup below before ordering — it helps us make sure we build the right spec for your vehicle. Skipping it is fine, but the details help us get it right the first time.\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"callout\"\u003e\n    \u003cspan class=\"mark\"\u003e80\/20\u003c\/span\u003e\n    \u003cp\u003eBuild this for \u003cstrong\u003ehow you actually drive\u003c\/strong\u003e — the daily commute, the school run, the odd weekend track — not the one loaded trip you do three times a year. Nobody enjoys a daily-driven brick just so it's ready for a trip it takes twice a summer. If your heavy trips are rare, tell us straight and we'll spec for the other 80%.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n    \u003cdiv class=\"callout\" id=\"chf-accuracy-callout\" style=\"align-items:flex-start;\"\u003e\n    \u003cspan class=\"mark\"\u003e✓\u003c\/span\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:13.5px;line-height:1.55;color:var(--text);margin:0;\"\u003e\n        \u003cinput type=\"checkbox\" id=\"chf-accuracy-confirm\" style=\"margin-top:3px;width:16px;height:16px;flex:none;\"\u003e\n        \u003cspan\u003e\u003cstrong\u003eI confirm the information above is true and accurate.\u003c\/strong\u003e Your suspension is built to this spec — the more accurate it is, the better the result you'll get.\u003c\/span\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eFront-Mounted Accessories\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eBull bar and winch hang off the front overhang, so essentially all of that weight loads the front axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eBull bar\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Bull bar\"\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"bar-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-alloy\" value=\"35\"\u003e\n        \u003clabel for=\"bar-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-steel\" value=\"50\"\u003e\n        \u003clabel for=\"bar-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~50kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"bar\" id=\"bar-hd\" value=\"65\"\u003e\n        \u003clabel for=\"bar-hd\"\u003eHeavy-duty\u003cspan class=\"kg\"\u003e~65kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eWinch\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Winch\"\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"winch-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-synth\" value=\"25\"\u003e\n        \u003clabel for=\"winch-synth\"\u003eSynthetic rope\u003cspan class=\"kg\"\u003e~25kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"winch\" id=\"winch-steel\" value=\"35\"\u003e\n        \u003clabel for=\"winch-steel\"\u003eSteel cable\u003cspan class=\"kg\"\u003e~35kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eSpot lights\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eLED bar or driving light pair mounted on the bar — about 100% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"spotlights\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eUnderbody \u0026amp; Chassis\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eMounted between the axles, so only part of the weight transfers forward.\u003c\/p\u003e\n    \u003cdiv class=\"rows\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRock sliders\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~20kg\/side along the chassis rail — about 35% of that reaches the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"sliders\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eBash \/ skid plates\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine \u0026amp; transfer case plates sit forward of centre — about 75% transfers to the front.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"bash\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDual \/ extra battery\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003eEngine bay, ahead of the firewall — about 90% loads the front axle.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"battery\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gvm-warn\" id=\"battery-note\"\u003e\n      An extra\/dual battery sits off to one side of the engine bay, so that side needs a touch of preload dialled in to correct the one-sided weight. We'll set this for you.\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eRear-Mounted Gear\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTray, canopy, boxes — mounted behind the cab, so this loads mostly onto the rear axle.\u003c\/p\u003e\n    \u003cfieldset\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTray\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tray\"\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"tray-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-alloy\" value=\"150\"\u003e\n        \u003clabel for=\"tray-alloy\"\u003eAlloy\u003cspan class=\"kg\"\u003e~150kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"tray\" id=\"tray-steel\" value=\"272\"\u003e\n        \u003clabel for=\"tray-steel\"\u003eSteel\u003cspan class=\"kg\"\u003e~272kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cfieldset style=\"margin-top:16px;\"\u003e\n      \u003clegend class=\"row-label\" style=\"margin-bottom:8px; display:block;\"\u003eTool Box\u003c\/legend\u003e\n      \u003cdiv class=\"seg\" role=\"radiogroup\" aria-label=\"Tool box\"\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-none\" value=\"0\" checked\u003e\n        \u003clabel for=\"toolbox-none\"\u003eNone\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-one\" value=\"85\"\u003e\n        \u003clabel for=\"toolbox-one\"\u003eOne side\u003cspan class=\"kg\"\u003e~85kg\u003c\/span\u003e\u003c\/label\u003e\n        \u003cinput type=\"radio\" name=\"toolbox\" id=\"toolbox-two\" value=\"170\"\u003e\n        \u003clabel for=\"toolbox-two\"\u003eTwo sides\u003cspan class=\"kg\"\u003e~170kg\u003c\/span\u003e\u003c\/label\u003e\n      \u003c\/div\u003e\n    \u003c\/fieldset\u003e\n    \u003cdiv class=\"rows\" style=\"margin-top:16px;\"\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eCanopy\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~233kg average, fitted over the tub.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"canopy\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDog box\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~90kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"dogbox\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eRear bar\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~57kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"rearbar\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eLong range fuel tank\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~200kg loaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fueltank\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eDrawers\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~81kg unloaded.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"drawers\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"row\"\u003e\n        \u003cdiv class=\"row-text\"\u003e\n          \u003cdiv class=\"row-label\"\u003eFridge + drop slide\u003c\/div\u003e\n          \u003cdiv class=\"row-note\"\u003e~44kg average.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"switch\"\u003e\n          \u003cinput type=\"checkbox\" id=\"fridge\"\u003e\n          \u003cspan class=\"track\"\u003e\u003c\/span\u003e\n          \u003cspan class=\"thumb\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"card\"\u003e\n    \u003cp class=\"card-title\"\u003eTowing\u003c\/p\u003e\n    \u003cp class=\"card-sub\"\u003eTow ball weight loads almost straight onto the rear axle.\u003c\/p\u003e\n    \u003cdiv class=\"num-field\"\u003e\n      \u003clabel for=\"towball\"\u003eTow ball weight\u003c\/label\u003e\n      \u003cinput type=\"number\" id=\"towball\" inputmode=\"numeric\" min=\"0\" max=\"350\" step=\"5\" value=\"0\"\u003e\n      \u003cspan class=\"unit-tag\"\u003ekg\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv style=\"display:none\"\u003e\n  \u003cdiv class=\"divider\"\u003e\n    \u003cdiv class=\"eyebrow\"\u003eFront Result\u003c\/div\u003e\n    \u003cdiv class=\"line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"card gauge-card\" id=\"front-gauge\"\u003e\n    \u003cp class=\"card-title\"\u003eRecommended Front Tier\u003c\/p\u003e\n    \u003cdiv class=\"readout\"\u003e\n      \u003cdiv class=\"readout-main\"\u003e\n        \u003cdiv class=\"label\"\u003eSuggested tier\u003c\/div\u003e\n        \u003cdiv class=\"tier-name\" id=\"front-tier-value\"\u003eLD\u003c\/div\u003e\n        \u003cdiv class=\"tier-full\" id=\"front-tier-full\"\u003eLight Duty\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"readout-sub\"\u003e\n        \u003cdiv class=\"label\"\u003eEst. front axle load\u003c\/div\u003e\n        \u003cdiv class=\"value\"\u003e\n\u003cspan id=\"weight-value\"\u003e0\u003c\/span\u003e kg\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"scale\"\u003e\n      \u003cdiv class=\"scale-track\"\u003e\n        \u003cdiv class=\"scale-fill\" id=\"scale-fill\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"scale-needle\" id=\"scale-needle\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ticks\"\u003e\n        \u003cspan data-t=\"LD\"\u003eLD\u003c\/span\u003e\n        \u003cspan data-t=\"MD\"\u003eMD\u003c\/span\u003e\n        \u003cspan data-t=\"HD\"\u003eHD\u003c\/span\u003e\n        \u003cspan data-t=\"XHD\"\u003eXHD\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003cp class=\"foot-note\"\u003eYour setup has been calculated and attached to this order — we'll confirm the exact spec before we build.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"foot-note\"\u003e\n    Guide only. Your answers attach to your order automatically so we see them at checkout, and we'll sanity-check the spec before we build. We're chasing ride comfort and capability together — not stance for its own sake.\n  \u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* (c) Cubby House Fabworks. All rights reserved. *\/\n(function(){var FRONT_STOCK_KG=1180;var FRONT_BASE_LB=600;var FRONT_CAL_KG=152;var FRONT_CAL_LB=750;var FRONT_MAX_LB=800;var FRONT_SLOPE=(FRONT_CAL_LB-FRONT_BASE_LB)\/FRONT_CAL_KG;var FRONT_TIERS=[{code:'LD',full:'Light Duty',max:650},{code:'MD',full:'Medium Duty',max:700},{code:'HD',full:'Heavy Duty',max:750},{code:'XHD',full:'Extra Heavy Duty',max:800}];var FRAC={bar:{front:1.00,rear:0.00},winch:{front:1.00,rear:0.00},spotlights:{total:3,front:1.00,rear:0.00},battery:{total:20,front:0.90,rear:0.10},bash:{total:15,front:0.75,rear:0.25},sliders:{total:40,front:0.35,rear:0.65},build:{front:0.20,rear:0.80}};\nvar barInputs=document.querySelectorAll('input[name=\"bar\"]');var winchInputs=document.querySelectorAll('input[name=\"winch\"]');var trayInputs=document.querySelectorAll('input[name=\"tray\"]');var toolboxInputs=document.querySelectorAll('input[name=\"toolbox\"]');var canopy=document.getElementById('canopy');var dogbox=document.getElementById('dogbox');var rearbar=document.getElementById('rearbar');var fueltank=document.getElementById('fueltank');var drawers=document.getElementById('drawers');var fridge=document.getElementById('fridge');var sliders=document.getElementById('sliders');var spotlights=document.getElementById('spotlights');var bash=document.getElementById('bash');var battery=document.getElementById('battery');var towball=document.getElementById('towball');var batteryNote=document.getElementById('battery-note');var frontTierValueEl=document.getElementById('front-tier-value');var frontTierFullEl=document.getElementById('front-tier-full');var weightValueEl=document.getElementById('weight-value');var scaleFill=document.getElementById('scale-fill');var scaleNeedle=document.getElementById('scale-needle');var frontTicks=document.querySelectorAll('#front-gauge .ticks span');\nvar nudgeEl=document.getElementById('chf-nudge');var nudgeTextEl=document.getElementById('chf-nudge-text');var touched=false;var curFrontTier=null,curRearTier=null,curTotalRearKg=0;\nfunction checkedVal(list){for(var i=0;i\u003clist.length;i++)if(list[i].checked)return parseFloat(list[i].value);return 0;}\nfunction label(list){for(var i=0;i\u003clist.length;i++){if(list[i].checked){var lab=document.querySelector('label[for=\"'+list[i].id+'\"]');return lab?lab.childNodes[0].textContent.trim():list[i].value;}}\nreturn'';}\nfunction rearGearTotal(){var t=checkedVal(trayInputs)+checkedVal(toolboxInputs);if(canopy.checked)t+=233;if(dogbox.checked)t+=90;if(rearbar.checked)t+=57;if(fueltank.checked)t+=200;if(drawers.checked)t+=81;if(fridge.checked)t+=44;return t;}\nfunction rearGearSummary(){var parts=[];var trayLabel=label(trayInputs);var toolboxLabel=label(toolboxInputs);if(trayLabel\u0026\u0026trayLabel!=='None')parts.push('Tray: '+trayLabel);if(toolboxLabel\u0026\u0026toolboxLabel!=='None')parts.push('Tool box: '+toolboxLabel);if(canopy.checked)parts.push('Canopy');if(dogbox.checked)parts.push('Dog box');if(rearbar.checked)parts.push('Rear bar');if(fueltank.checked)parts.push('Long range fuel tank');if(drawers.checked)parts.push('Drawers');if(fridge.checked)parts.push('Fridge + drop slide');return parts;}\nfunction accessorySummary(){var parts=[];var barLabel=label(barInputs);var winchLabel=label(winchInputs);if(barLabel\u0026\u0026barLabel!=='None')parts.push('Bull bar: '+barLabel);if(winchLabel\u0026\u0026winchLabel!=='None')parts.push('Winch: '+winchLabel);if(sliders.checked)parts.push('Rock sliders');if(spotlights.checked)parts.push('Spot lights');if(bash.checked)parts.push('Bash plates');if(battery.checked)parts.push('Dual battery');parts=parts.concat(rearGearSummary());return parts.length?parts.join(', '):'Stock, no accessories';}\nfunction computeAdded(){var barTotal=checkedVal(barInputs);var winchTotal=checkedVal(winchInputs);var buildTotal=rearGearTotal();var towballKg=Math.max(0,parseFloat(towball.value)||0);var frontKg=barTotal*FRAC.bar.front+winchTotal*FRAC.winch.front+buildTotal*FRAC.build.front;var rearKg=barTotal*FRAC.bar.rear+winchTotal*FRAC.winch.rear+buildTotal*FRAC.build.rear;if(sliders.checked){frontKg+=FRAC.sliders.total*FRAC.sliders.front;rearKg+=FRAC.sliders.total*FRAC.sliders.rear;}\nif(spotlights.checked){frontKg+=FRAC.spotlights.total*FRAC.spotlights.front;rearKg+=FRAC.spotlights.total*FRAC.spotlights.rear;}\nif(bash.checked){frontKg+=FRAC.bash.total*FRAC.bash.front;rearKg+=FRAC.bash.total*FRAC.bash.rear;}\nif(battery.checked){frontKg+=FRAC.battery.total*FRAC.battery.front;rearKg+=FRAC.battery.total*FRAC.battery.rear;}\nrearKg+=towballKg;return{frontKg:frontKg,rearKg:rearKg,towballKg:towballKg};}\nfunction update(){var added=computeAdded();var totalFrontKg=1180+added.frontKg;var rateRaw=Math.min(FRONT_MAX_LB,Math.max(FRONT_BASE_LB,FRONT_BASE_LB+added.frontKg*FRONT_SLOPE));curFrontTier=FRONT_TIERS[FRONT_TIERS.length-1];for(var i=0;i\u003cFRONT_TIERS.length;i++){if(rateRaw\u003cFRONT_TIERS[i].max){curFrontTier=FRONT_TIERS[i];break;}}\nfrontTierValueEl.textContent=curFrontTier.code;frontTierFullEl.textContent=curFrontTier.full;weightValueEl.textContent=Math.round(totalFrontKg);var frontPct=((rateRaw-FRONT_BASE_LB)\/(FRONT_MAX_LB-FRONT_BASE_LB))*100;scaleFill.style.width=frontPct+'%';scaleNeedle.style.left=frontPct+'%';frontTicks.forEach(function(t){t.classList.toggle('active',t.getAttribute('data-t')===curFrontTier.code);});batteryNote.classList.toggle('show',battery.checked);syncToShopify(added,totalFrontKg);}\nvar chfAccuracyCheckbox=document.getElementById('chf-accuracy-confirm');var chfNoteTimer=null;\nfunction chfBuildNoteText(){var lines=[];lines.push('Suggested Front Duty Tier: '+document.getElementById('front-tier-value').textContent+' ('+document.getElementById('front-tier-full').textContent+')');lines.push('Est. Front Axle Load: '+document.getElementById('weight-value').textContent+'kg');lines.push('Accessories Fitted: '+accessorySummary());lines.push('Extra Battery Preload Needed: '+(document.getElementById('battery').checked?'Yes':'No'));var chfTowball=parseFloat(document.getElementById('towball').value)||0;if(chfTowball\u003e0)lines.push('Tow Ball Weight: '+chfTowball+'kg');lines.push('Customer confirmed info accurate: '+(chfAccuracyCheckbox\u0026\u0026chfAccuracyCheckbox.checked?'Yes':'No'));return lines.join('\\n');}\nfunction syncToShopify(added, totalFrontKg){var text=chfBuildNoteText();if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked)return;if(chfNoteTimer)clearTimeout(chfNoteTimer);chfNoteTimer=setTimeout(function(){fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({note:text})}).catch(function(){});},400);}\nfunction setTouched(){if(touched)return;touched=true;if(nudgeEl){nudgeEl.classList.add('thanked');}\nif(nudgeTextEl){nudgeTextEl.innerHTML='Thanks — we\\'ve got your setup details.';}}\n[].concat([].slice.call(barInputs),[].slice.call(winchInputs),[].slice.call(trayInputs),[].slice.call(toolboxInputs),canopy,dogbox,rearbar,fueltank,drawers,fridge,[sliders,bash,battery,spotlights]).forEach(function(el){el.addEventListener('change',function(){setTouched();update();});});towball.addEventListener('input',function(){setTouched();update();});update();if(chfAccuracyCheckbox){chfAccuracyCheckbox.addEventListener('change',function(){if(typeof update==='function')update();});}document.querySelectorAll('form[action*=\"\/cart\/add\"]').forEach(function(form){form.addEventListener('submit',function(e){if(!chfAccuracyCheckbox||!chfAccuracyCheckbox.checked){e.preventDefault();var cb=document.getElementById('chf-accuracy-callout');if(cb){cb.style.borderColor='#c0392b';cb.scrollIntoView({behavior:'smooth',block:'center'});}if(chfAccuracyCheckbox)chfAccuracyCheckbox.focus();alert('Please confirm the setup information is accurate before ordering.');}});});})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Default","offer_id":58341062902063,"sku":"CORTT001FM-PAIR-CS2001F","price":920.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/nitro_full_kit_02394781-f87c-4ea1-8289-86afef1a3b6b.png?v=1787016299"},{"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  \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\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\u003cscript\u003e\n\/* CoolDrive parts for the order-notes worker (6112 fronts are imported, so only the Platinum rears come from CoolDrive) *\/\n(function(){\n  var form = [].slice.call(document.querySelectorAll('form[action*=\"\/cart\/add\"]')).filter(function(f){ return f.querySelector('button[type=submit], button[name=add]'); })[0] || document.querySelector('form[action*=\"\/cart\/add\"]');\n  if(!form) return;\n  var input = document.createElement('input'); input.type = 'hidden'; input.name = 'properties[_cooldrive_parts]'; form.appendChild(input);\n  function sync(){ var r = document.querySelector('input[name=\"rearshock\"]:checked'); input.value = (r \u0026\u0026 r.value === '660') ? '24-301282 x2' : '24-228602 x2'; }\n  [].slice.call(document.querySelectorAll('input[name=\"rearshock\"]')).forEach(function(r){ r.addEventListener('change', sync); });\n  sync();\n})();\n\u003c\/script\u003e\n\u003c\/div\u003e\n\n\u003cp\u003e\u003cstrong\u003eFront: Bilstein 6112 B60 big-bore coilovers.\u003c\/strong\u003e A 2.5in body with a much larger piston and far more oil volume than the stock 2.0in unit — smoother over corrugations, better front-end control, less fade on long hot trips. Mono-tube gas pressure design keeps oil and nitrogen separated under 200+ psi, virtually eliminating cavitation and fade. Circlip-style height adjustment, matched spring, correct valving.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eRear: Bilstein Platinum 630mm open shocks.\u003c\/strong\u003e Sold as a pair, fits your existing standard leaf pack — no bump stop modification required.\u003c\/p\u003e\n\u003ch3\u003eGood to know\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShocks only — no leaf pack included. If you're also after a leaf pack, see the \u003ca href=\"\/products\/big-bore-lift-kit-bilstein-6112-platinum-630-rear-leaf-pack-hilux-n70-n80\"\u003eBig Bore Lift Kit\u003c\/a\u003e instead.\u003c\/li\u003e\n\u003cli\u003eYou can transfer the front top hat from your factory setup to save a few dollars — or add a note at checkout and we'll assemble with a new one.\u003c\/li\u003e\n\u003cli\u003eLead time is typically 2–4 weeks. Email us if you need it sooner and we'll check current stock.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eShipping:\u003c\/strong\u003e $80 shipping applies for the big 2.5in body front units, plus $35 for the rear pair.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e this is a made-to-order kit and isn't held in stock.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"2in","offer_id":58361659130159,"sku":"BIL-6112-PLAT630-KIT-2IN","price":3720.0,"currency_code":"AUD","in_stock":true},{"title":"3in","offer_id":58361659162927,"sku":"BIL-6112-PLAT630-KIT-3IN","price":3720.0,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/49192944-4A39-49D4-8A6B-323777E633F8.jpg?v=1786491012"},{"product_id":"caloffroad-bash-plate-hilux-n70-n80","title":"CalOffroad Bash Plate — Hilux N70\/N80","description":"\u003cp\u003e\u003cstrong\u003eCalOffroad Hilux Bash Plate\u003c\/strong\u003e — sump guard for Toyota Hilux N70 (2005-2015) and N80 (2015 On). Adds extra protection to the front underbody, and is particularly worth pairing with a diff drop kit for the added clearance around the diff centre.\u003c\/p\u003e\n\u003cp\u003eChoose your finish above — powder-coated \u003cstrong\u003eBlack\u003c\/strong\u003e, or raw zinc-plated \u003cstrong\u003ePlate\u003c\/strong\u003e finish.\u003c\/p\u003e\n\u003cp\u003eFeatures:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eMade in Australia\u003c\/li\u003e\n\u003cli\u003eE-coat\/zinc coat for maximum protection from the elements\u003c\/li\u003e\n\u003cli\u003ePowder-coated for an immaculate finish (Black variant)\u003c\/li\u003e\n\u003cli\u003eHeavy-duty extra sump protection, while still light enough not to overload the front end\u003c\/li\u003e\n\u003cli\u003eComes with mounting hardware\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003ePlease note:\u003c\/strong\u003e if you're also fitting a diff drop kit, this bash plate is designed to work alongside it for the added diff clearance — see our \u003ca href=\"\/products\/caloffroad-diff-drop-kit-30mm-hilux-n70-n80\"\u003eCalOffroad Diff Drop Kit (30mm) — Hilux N70\/N80\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp\u003eSold as each.\u003c\/p\u003e","brand":"Cubby House Fabworks","offers":[{"title":"Black","offer_id":58442129539375,"sku":"BPHLXSUMP-BL","price":353.43,"currency_code":"AUD","in_stock":true},{"title":"Plate","offer_id":58442129572143,"sku":"BPHLXSUMP-PLAT","price":353.43,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/files\/BPHLXSUMP-BL.tag.1.jpg?v=1788868188"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0902\/1092\/6895\/collections\/3300B74E-7B10-4660-9162-3775ED6A7EE6.jpg?v=1753590290","url":"https:\/\/cubbyhousefabworks.com.au\/collections\/hilux-n80.oembed?page=3","provider":"Cubby House Fabworks","version":"1.0","type":"link"}