{"id":1283,"date":"2026-04-11T00:28:13","date_gmt":"2026-04-10T23:28:13","guid":{"rendered":"https:\/\/southsunindustries.com\/?page_id=1283"},"modified":"2026-04-15T16:59:34","modified_gmt":"2026-04-15T15:59:34","slug":"dan-dash-hauling-service","status":"publish","type":"page","link":"https:\/\/southsunindustries.com\/index.php\/dan-dash-hauling-service\/","title":{"rendered":"Dan Dash | Hauling Service"},"content":{"rendered":"\n<div id=\"jhc-root\" class=\"jhc\">\n  <div class=\"jhc__header\">\n    <h2 class=\"jhc__title\">Dan Dash | Hauling Contract Calculator<\/h2>\n    <div class=\"jhc__sub\">\n      <div>1. Select your hauling route.<\/div>\n      <div>2. Enter the total volume of your contract in <b>m\u00b3<\/b>. Maximum is <b>340,000 m\u00b3<\/b> per contract.<\/div>\n      <div>3. Click <b>Calculate<\/b> to get the total hauling price.<\/div>\n      <div>4. Create a contract in-game to <b>Masuka<\/b> for Jita, and <b>Debra Morgan 0690<\/b> for UALX, using the calculated total.<\/div>\n      <div>5. Message <b>LT DAN0690<\/b> on Discord when the contract is up.<\/div>\n      Jita route: <b>500 ISK per m\u00b3<\/b> \u2022 UALX route: <b>950 ISK per m\u00b3<\/b> \u2022 Minimum fee: <b>15,000,000 ISK<\/b>\n    <\/div>\n  <\/div>\n\n  <div class=\"jhc__grid\">\n    <section class=\"jhc__card\">\n      <h3 class=\"jhc__h3\">Contract Details<\/h3>\n\n      <div class=\"jhc__row\">\n        <div class=\"jhc__field\">\n          <label class=\"jhc__label\" for=\"jhc-route\">Route<\/label>\n          <select class=\"jhc__input\" id=\"jhc-route\">\n            <option value=\"jita-nhk93\">Jita \u2192 N-HK93<\/option>\n            <option value=\"ualx-nhk93\">UALX \u2192 N-HK93<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <div class=\"jhc__row\">\n        <div class=\"jhc__field\">\n          <label class=\"jhc__label\" for=\"jhc-volume\">Volume (m\u00b3)<\/label>\n          <input class=\"jhc__input\" id=\"jhc-volume\" type=\"number\" min=\"0\" max=\"340000\" step=\"1\" placeholder=\"Enter m\u00b3 amount\">\n          <div class=\"jhc__help\">Maximum contract size is 340,000 m\u00b3.<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jhc__actions\">\n        <button class=\"jhc__btn jhc__btn--primary\" id=\"jhc-run\" type=\"button\">Calculate<\/button>\n        <button class=\"jhc__btn\" id=\"jhc-clear\" type=\"button\">Clear<\/button>\n\n        <div class=\"jhc__contractBox\" id=\"jhc-contractBox\" aria-live=\"polite\">\n          <div class=\"jhc__contractTop\">\n            <div>\n              <div class=\"jhc__contractLabel\">Contract to<\/div>\n              <div class=\"jhc__contractToon\" id=\"jhc-contractToon\">Masuka<\/div>\n            <\/div>\n            <button class=\"jhc__contractCopy\" id=\"jhc-contractCopy\" type=\"button\" title=\"Copy toon name\">\n              Copy\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jhc__status\" id=\"jhc-status\"><\/div>\n    <\/section>\n  <\/div>\n\n  <section class=\"jhc__card\">\n    <h3 class=\"jhc__h3\">Results<\/h3>\n\n    <div class=\"jhc__totalBox\">\n      <div class=\"jhc__totalLabel\">Total ISK (Hauling Price)<\/div>\n\n      <div class=\"jhc__totalRow\">\n        <div class=\"jhc__totalValue\" id=\"jhc-totalValue\">\u2014<\/div>\n        <button class=\"jhc__btn jhc__btn--copy\" id=\"jhc-copy\" type=\"button\" disabled title=\"Copy total to clipboard\">\n          Copy\n        <\/button>\n      <\/div>\n\n      <div class=\"jhc__breakdown\" id=\"jhc-breakdown\" style=\"display:none\"><\/div>\n    <\/div>\n\n    <div class=\"jhc__summary\" id=\"jhc-summary\">No results yet.<\/div>\n  <\/section>\n<\/div>\n\n<style>\n  .jhc{\n    font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\n    color:#e9eef7;\n  }\n\n  .jhc__header{margin-bottom:12px}\n  .jhc__title{\n    margin:0 0 6px;\n    font-size:22px;\n    line-height:1.2;\n    color:#f6f8ff;\n    letter-spacing:.2px;\n    text-shadow:0 1px 0 rgba(0,0,0,.4);\n  }\n  .jhc__sub{color:rgba(233,238,247,.70);font-size:13px}\n\n  .jhc__grid{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}\n\n  .jhc__card{\n    border:1px solid rgba(255,255,255,.10);\n    border-radius:12px;\n    padding:14px;\n    background:linear-gradient(180deg, rgba(30,40,54,.92), rgba(18,25,35,.92));\n    box-shadow:\n      0 10px 26px rgba(0,0,0,.25),\n      inset 0 1px 0 rgba(255,255,255,.05);\n    flex:1;\n    min-width:280px;\n  }\n\n  .jhc__h3{\n    margin:0 0 8px;\n    font-size:16px;\n    color:#f6f8ff;\n  }\n\n  .jhc__row{display:flex;gap:12px;flex-wrap:wrap}\n  .jhc__field{flex:1;min-width:220px}\n\n  .jhc__label{\n    display:block;\n    color:rgba(233,238,247,.70);\n    font-size:12px;\n    margin-bottom:6px;\n  }\n\n  .jhc__help,\n  .jhc__status,\n  .jhc__summary{\n    color:rgba(233,238,247,.58);\n    font-size:12px;\n  }\n\n  .jhc__status{margin-top:10px;min-height:16px}\n  .jhc__summary{margin-top:10px}\n\n  .jhc__input{\n    width:100%;\n    padding:10px;\n    border:1px solid rgba(255,255,255,.12);\n    border-radius:10px;\n    font:inherit;\n    box-sizing:border-box;\n    background:rgba(8,12,18,.45);\n    color:#e9eef7;\n    outline:none;\n    box-shadow:inset 0 1px 0 rgba(255,255,255,.03);\n    appearance:none;\n  }\n\n  .jhc__input::placeholder{color:rgba(233,238,247,.42)}\n\n  .jhc__input:focus{\n    border-color:rgba(120,170,255,.55);\n    box-shadow:\n      inset 0 1px 0 rgba(255,255,255,.03),\n      0 0 0 4px rgba(120,170,255,.14);\n  }\n\n  .jhc__actions{\n    display:flex;\n    gap:10px;\n    flex-wrap:wrap;\n    align-items:stretch;\n    margin-top:12px;\n  }\n\n  .jhc__btn{\n    padding:10px 14px;\n    border:1px solid rgba(255,255,255,.14);\n    border-radius:10px;\n    background:rgba(8,12,18,.35);\n    color:#e9eef7;\n    cursor:pointer;\n    transition:transform .06s ease, border-color .15s ease, box-shadow .15s ease, background .15s ease;\n  }\n\n  .jhc__btn:hover{\n    background:rgba(8,12,18,.48);\n    border-color:rgba(255,255,255,.22);\n  }\n\n  .jhc__btn:active{transform:translateY(1px)}\n  .jhc__btn:disabled{opacity:.6;cursor:not-allowed}\n\n  .jhc__btn--primary{\n    background:linear-gradient(180deg, rgba(118,168,255,.92), rgba(84,132,225,.92));\n    border-color:rgba(118,168,255,.55);\n    color:#06111f;\n    font-weight:700;\n    box-shadow:0 10px 22px rgba(118,168,255,.18);\n  }\n\n  .jhc__btn--primary:hover{\n    border-color:rgba(118,168,255,.75);\n    box-shadow:0 12px 26px rgba(118,168,255,.24);\n  }\n\n  .jhc__contractBox{\n    display:flex;\n    flex-direction:column;\n    justify-content:center;\n    min-width:260px;\n    padding:10px 14px;\n    border:1px solid rgba(118,168,255,.55);\n    border-radius:10px;\n    background:linear-gradient(180deg, rgba(118,168,255,.18), rgba(84,132,225,.12));\n    box-shadow:\n      0 0 0 1px rgba(118,168,255,.15) inset,\n      0 8px 22px rgba(118,168,255,.16);\n  }\n\n  .jhc__contractTop{\n    display:flex;\n    align-items:center;\n    justify-content:space-between;\n    gap:12px;\n    flex-wrap:wrap;\n  }\n\n  .jhc__contractLabel{\n    font-size:11px;\n    text-transform:uppercase;\n    letter-spacing:.6px;\n    color:rgba(233,238,247,.72);\n    margin-bottom:4px;\n  }\n\n  .jhc__contractToon{\n    font-size:18px;\n    font-weight:800;\n    color:#f6f8ff;\n    line-height:1.2;\n    text-shadow:0 1px 0 rgba(0,0,0,.35);\n  }\n\n  .jhc__contractCopy{\n    padding:8px 12px;\n    border:1px solid rgba(255,255,255,.18);\n    border-radius:10px;\n    background:rgba(8,12,18,.35);\n    color:#e9eef7;\n    cursor:pointer;\n    font-weight:700;\n    transition:transform .06s ease, border-color .15s ease, box-shadow .15s ease, background .15s ease;\n  }\n\n  .jhc__contractCopy:hover{\n    background:rgba(8,12,18,.48);\n    border-color:rgba(118,168,255,.40);\n    box-shadow:0 0 0 4px rgba(120,170,255,.10);\n  }\n\n  .jhc__contractCopy:active{transform:translateY(1px)}\n\n  .jhc__totalBox{\n    border:1px solid rgba(255,255,255,.10);\n    border-radius:12px;\n    padding:14px;\n    background:rgba(8,12,18,.25);\n    box-shadow:inset 0 1px 0 rgba(255,255,255,.04);\n  }\n\n  .jhc__totalLabel{\n    font-size:12px;\n    color:rgba(233,238,247,.62);\n    margin-bottom:6px;\n  }\n\n  .jhc__totalRow{\n    display:flex;\n    align-items:center;\n    gap:10px;\n    justify-content:space-between;\n    flex-wrap:wrap;\n  }\n\n  .jhc__totalValue{\n    font-size:20px;\n    font-weight:800;\n    color:#f6f8ff;\n    letter-spacing:.2px;\n    text-shadow:0 1px 0 rgba(0,0,0,.4);\n  }\n\n  .jhc__btn--copy{\n    padding:8px 12px;\n    font-weight:700;\n    border-color:rgba(255,255,255,.18);\n  }\n\n  .jhc__btn--copy:hover{\n    border-color:rgba(118,168,255,.40);\n    box-shadow:0 0 0 4px rgba(120,170,255,.10);\n  }\n\n  .jhc__breakdown{\n    margin-top:12px;\n    border-top:1px solid rgba(255,255,255,.08);\n    padding-top:10px;\n  }\n\n  .jhc__line{\n    display:flex;\n    justify-content:space-between;\n    gap:12px;\n    padding:6px 0;\n    border-bottom:1px dashed rgba(255,255,255,.06);\n  }\n\n  .jhc__line:last-child{border-bottom:0}\n  .jhc__lineLeft{min-width:0}\n  .jhc__itemName{\n    font-weight:650;\n    color:rgba(246,248,255,.92);\n    font-size:13px;\n  }\n\n  .jhc__meta{\n    color:rgba(233,238,247,.58);\n    font-size:12px;\n    margin-top:2px;\n  }\n\n  .jhc__amt{\n    font-weight:750;\n    color:rgba(233,238,247,.92);\n    font-size:13px;\n    text-align:right;\n    white-space:nowrap;\n  }\n\n  .jhc__errText{\n    color:rgba(255,220,220,.92);\n    font-size:12px;\n    margin-top:3px;\n  }\n<\/style>\n\n<script>\n(() => {\n  const root = document.getElementById(\"jhc-root\");\n  if (!root) return;\n\n  const $ = (sel) => root.querySelector(sel);\n\n  const routeEl = $(\"#jhc-route\");\n  const volumeEl = $(\"#jhc-volume\");\n  const runBtn = $(\"#jhc-run\");\n  const clearBtn = $(\"#jhc-clear\");\n  const copyBtn = $(\"#jhc-copy\");\n  const contractCopyBtn = $(\"#jhc-contractCopy\");\n  const totalValueEl = $(\"#jhc-totalValue\");\n  const breakdownEl = $(\"#jhc-breakdown\");\n  const summaryEl = $(\"#jhc-summary\");\n  const statusEl = $(\"#jhc-status\");\n  const contractToonEl = $(\"#jhc-contractToon\");\n\n  const MINIMUM_FEE = 15000000;\n  const MAX_VOLUME = 340000;\n\n  const ROUTES = {\n    \"jita-nhk93\": {\n      label: \"Jita \u2192 N-HK93\",\n      rate: 500,\n      contractTo: \"Masuka\"\n    },\n    \"ualx-nhk93\": {\n      label: \"UALX \u2192 N-HK93\",\n      rate: 950,\n      contractTo: \"Debra Morgan 0690\"\n    }\n  };\n\n  let lastTotal = null;\n\n  const fmtISK0 = (n) => Number.isFinite(n) ? `${Math.round(n).toLocaleString(\"en-GB\")}` : \"\u2014\";\n\n  function setStatus(msg) {\n    statusEl.textContent = msg || \"\";\n  }\n\n  function escapeHtml(str) {\n    return String(str).replace(\/[&<>\"']\/g, c => ({\n      \"&\": \"&amp;\",\n      \"<\": \"&lt;\",\n      \">\": \"&gt;\",\n      '\"': \"&quot;\",\n      \"'\": \"&#39;\"\n    }[c]));\n  }\n\n  async function copyText(text, buttonEl, copiedLabel = \"Copied!\") {\n    try {\n      if (navigator.clipboard && navigator.clipboard.writeText) {\n        await navigator.clipboard.writeText(text);\n      } else {\n        const ta = document.createElement(\"textarea\");\n        ta.value = text;\n        ta.setAttribute(\"readonly\", \"\");\n        ta.style.position = \"fixed\";\n        ta.style.left = \"-9999px\";\n        document.body.appendChild(ta);\n        ta.select();\n        document.execCommand(\"copy\");\n        document.body.removeChild(ta);\n      }\n\n      if (buttonEl) {\n        const prev = buttonEl.textContent;\n        buttonEl.textContent = copiedLabel;\n        setTimeout(() => { buttonEl.textContent = prev; }, 1200);\n      }\n    } catch {\n      setStatus(\"Copy failed.\");\n    }\n  }\n\n  function updateContractBox() {\n    const route = ROUTES[routeEl.value];\n    contractToonEl.textContent = route ? route.contractTo : \"\u2014\";\n  }\n\n  function renderBreakdown(lines) {\n    if (!lines.length) {\n      breakdownEl.style.display = \"none\";\n      breakdownEl.innerHTML = \"\";\n      return;\n    }\n\n    breakdownEl.style.display = \"\";\n    breakdownEl.innerHTML = lines.map(l => `\n      <div class=\"jhc__line\">\n        <div class=\"jhc__lineLeft\">\n          <div class=\"jhc__itemName\">${escapeHtml(l.name)}<\/div>\n          <div class=\"jhc__meta\">${escapeHtml(l.meta)}<\/div>\n          ${l.note ? `<div class=\"jhc__errText\">${escapeHtml(l.note)}<\/div>` : \"\"}\n        <\/div>\n        <div class=\"jhc__amt\">${escapeHtml(l.amount)}<\/div>\n      <\/div>\n    `).join(\"\");\n  }\n\n  async function copyTotalToClipboard() {\n    if (!Number.isFinite(lastTotal)) return;\n    await copyText(fmtISK0(lastTotal), copyBtn);\n  }\n\n  async function copyContractToClipboard() {\n    const route = ROUTES[routeEl.value];\n    if (!route) return;\n    await copyText(route.contractTo, contractCopyBtn);\n  }\n\n  function calculate() {\n    const routeKey = routeEl.value;\n    const route = ROUTES[routeKey];\n    const volume = Number(volumeEl.value);\n\n    if (!route) {\n      setStatus(\"Select a valid route.\");\n      return;\n    }\n\n    if (!Number.isFinite(volume) || volume <= 0) {\n      setStatus(\"Enter a valid m\u00b3 amount.\");\n      return;\n    }\n\n    if (volume > MAX_VOLUME) {\n      setStatus(\"Maximum contract size is 340,000 m\u00b3.\");\n      return;\n    }\n\n    setStatus(\"\");\n\n    const baseVolumePrice = volume * route.rate;\n    const totalPrice = Math.max(baseVolumePrice, MINIMUM_FEE);\n    const minimumApplied = baseVolumePrice < MINIMUM_FEE;\n\n    lastTotal = totalPrice;\n    totalValueEl.textContent = fmtISK0(totalPrice);\n    copyBtn.disabled = false;\n\n    renderBreakdown([\n      {\n        name: \"Route\",\n        meta: route.label,\n        amount: \"\"\n      },\n      {\n        name: \"Contract to\",\n        meta: route.contractTo,\n        amount: \"\"\n      },\n      {\n        name: \"Volume charge\",\n        meta: `${Math.round(volume).toLocaleString(\"en-GB\")} m\u00b3 \u00d7 ${route.rate.toLocaleString(\"en-GB\")} ISK`,\n        amount: fmtISK0(baseVolumePrice)\n      },\n      {\n        name: \"Minimum fee applied\",\n        meta: minimumApplied ? \"Yes\" : \"No\",\n        amount: minimumApplied ? fmtISK0(MINIMUM_FEE) : \"0\"\n      },\n      {\n        name: \"Total price\",\n        meta: \"Final hauling contract price\",\n        amount: fmtISK0(totalPrice)\n      }\n    ]);\n\n    summaryEl.textContent = `Calculated hauling price for ${route.label}. Contract this to ${route.contractTo}.`;\n  }\n\n  runBtn.addEventListener(\"click\", calculate);\n\n  routeEl.addEventListener(\"change\", () => {\n    updateContractBox();\n    setStatus(\"\");\n  });\n\n  clearBtn.addEventListener(\"click\", () => {\n    routeEl.value = \"jita-nhk93\";\n    volumeEl.value = \"\";\n    totalValueEl.textContent = \"\u2014\";\n    breakdownEl.style.display = \"none\";\n    breakdownEl.innerHTML = \"\";\n    summaryEl.textContent = \"No results yet.\";\n    statusEl.textContent = \"\";\n    copyBtn.disabled = true;\n    copyBtn.textContent = \"Copy\";\n    contractCopyBtn.textContent = \"Copy\";\n    lastTotal = null;\n    updateContractBox();\n  });\n\n  copyBtn.addEventListener(\"click\", copyTotalToClipboard);\n  contractCopyBtn.addEventListener(\"click\", copyContractToClipboard);\n\n  updateContractBox();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p> [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":"","_tec_slr_enabled":"","_tec_slr_layout":""},"class_list":["post-1283","page","type-page","status-publish","hentry"],"ticketed":false,"_links":{"self":[{"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/pages\/1283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/comments?post=1283"}],"version-history":[{"count":15,"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/pages\/1283\/revisions"}],"predecessor-version":[{"id":1327,"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/pages\/1283\/revisions\/1327"}],"wp:attachment":[{"href":"https:\/\/southsunindustries.com\/index.php\/wp-json\/wp\/v2\/media?parent=1283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}