{"id":11616,"date":"2026-11-11T13:56:17","date_gmt":"2026-11-11T13:56:17","guid":{"rendered":"https:\/\/twisted.co\/marine\/?page_id=11616"},"modified":"2026-11-11T16:40:32","modified_gmt":"2026-11-11T16:40:32","slug":"careers","status":"publish","type":"page","link":"https:\/\/twisted.co\/marine\/careers\/","title":{"rendered":"Careers"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11616\" class=\"elementor elementor-11616\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-09d9c73 e-flex e-con-boxed e-con e-parent\" data-id=\"09d9c73\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7dbd1bb elementor-widget elementor-widget-html\" data-id=\"7dbd1bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\n  TWISTED MARINE CAREERS \u2014 paste this whole block into ONE\n  Elementor HTML widget on twisted.co\/marine\/careers\/.\n  Self-contained: no libraries, no plugin, nothing to upload.\n  (Generated by build.mjs from careers-widget.template.html.)\n\n  CONTENT: live vacancies from HR Duo (my.hrduo.com\/candidate-jobs\/\n  Twisted_Inc_Limited), filtered to the HR Duo location(s) in\n  TC_LOCATIONS below. Post or close a\n  job in HR Duo as normal; the feed Worker re-reads HR Duo every\n  24 hours, so changes show here within a day. Every role links\n  to its own HR Duo page, where candidates apply.\n\n  FEED: HR Duo can't be read from the browser directly (no CORS),\n  so this widget reads the small Cloudflare Worker in worker.js\n  (see README.md). Set TC_FEED below to that Worker's address.\n\n  STYLING: the News portal kit (twisted.co\/news): Bebas Neue\n  numerals, Sugar Magic script, Poppins copy, hairline rules,\n  #c94a1f accent, slide-up reveals, Our Story dark palette.\n========================================================== -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bebas+Neue&family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap\" rel=\"stylesheet\">\n\n<section id=\"twisted-careers\" class=\"tc\" aria-label=\"Careers at Twisted Marine\">\n  <div class=\"tc-inner\">\n    <header class=\"tc-mast\">\n      <p class=\"tc-cap tc-mast-cap\"><a href=\"\/marine\/\">Twisted Marine<\/a> <span aria-hidden=\"true\">\/<\/span> Careers<\/p>\n      <div class=\"tc-mast-row\">\n        <div class=\"tc-clip tc-mast-clip\"><h1 class=\"tc-mast-title\">Careers<\/h1><\/div>\n        <div class=\"tc-mast-side\">\n          <p class=\"tc-script tc-mast-script\">Join the crew.<\/p>\n          <p class=\"tc-mast-copy\">From our workshops at Brighton Marina and in Salcombe, we build, refit and look after the Scorpion RIBs we\u2019re known for. If you love boats and doing things properly, there\u2019s a place for you on the team.<\/p>\n          <div class=\"tc-status\" role=\"status\">\n            <span class=\"tc-status-dot\" aria-hidden=\"true\"><\/span>\n            <span class=\"tc-status-note\">Loading vacancies\u2026<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/header>\n\n    <div class=\"tc-view\" aria-live=\"polite\"><\/div>\n\n    <p class=\"tc-cap tc-foot\">Applications are handled securely through <a href=\"https:\/\/my.hrduo.com\/candidate-jobs\/Twisted_Inc_Limited\" target=\"_blank\" rel=\"nofollow noopener\">HR Duo<\/a>, our HR partner.<\/p>\n  <\/div>\n<\/section>\n\n<style>\n  @font-face{\n    font-family:'Sugar Magic';\n    font-style:normal;\n    font-weight:normal;\n    font-display:swap;\n    src:url('https:\/\/twisted.co\/automotive\/wp-content\/uploads\/sites\/6\/2026\/01\/Sugar-Magic.woff') format('woff');\n  }\n\n  \/* ---- Tokens: identical to the News portal (#twisted-news) ---- *\/\n  #twisted-careers{\n    --tc-ink:#f2f2f0;\n    --tc-fade:rgba(242,242,240,.5);\n    --tc-line:rgba(242,242,240,.14);\n    --tc-accent:#c94a1f;\n    --tc-bg:#1D1D1B;\n    --tc-surface:#1D1D1B;\n    --tc-panel:#262623;\n    --tc-year-color:#b17c62;\n    --tc-headline-color:#FFFBDC;\n    --tc-copy-color:#a8a595;\n    --tc-sbw:0px;\n\n    --tc-display:'Bebas Neue','Arial Narrow',sans-serif;\n    --tc-script:'Sugar Magic','Brush Script MT',cursive;\n    --tc-sans:'Poppins','Helvetica Neue',Arial,sans-serif;\n    --tc-ease:cubic-bezier(.16,1,.3,1);\n\n    position:relative;\n    background:var(--tc-bg);\n    color:var(--tc-ink);\n    font-family:var(--tc-sans);\n    box-sizing:border-box;\n    overflow:hidden;\n    width:calc(100vw - var(--tc-sbw));\n    margin-left:calc(50% - 50vw + var(--tc-sbw) \/ 2);\n    margin-right:calc(50% - 50vw + var(--tc-sbw) \/ 2);\n  }\n  #twisted-careers *,#twisted-careers *::before,#twisted-careers *::after{box-sizing:border-box;margin:0;padding:0;}\n  #twisted-careers a{color:inherit;text-decoration:none;}\n  #twisted-careers button{font:inherit;color:inherit;}\n  #twisted-careers :focus-visible{outline:2px solid var(--tc-accent);outline-offset:3px;}\n  #twisted-careers .tc-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}\n\n  #twisted-careers{--tc-rail-left:0px;--tc-bar-top:0px;}\n  #twisted-careers .tc-inner{\n    max-width:1440px;\n    margin:0 auto 0 calc(var(--tc-rail-left) + max(0px, (100% - var(--tc-rail-left) - 1440px) \/ 2));\n    padding:calc(var(--tc-bar-top) + clamp(40px,7vw,96px)) clamp(16px,5vw,72px) clamp(56px,7vw,104px);\n  }\n\n  \/* ---- Shared type ---- *\/\n  #twisted-careers .tc-cap{font-size:10px;font-weight:500;letter-spacing:1.4px;text-transform:uppercase;color:var(--tc-fade);}\n  #twisted-careers .tc-cap a{transition:color .2s;}\n  #twisted-careers .tc-cap a:hover{color:var(--tc-accent);}\n  #twisted-careers .tc-script{font-family:var(--tc-script);font-weight:400;letter-spacing:.5px;line-height:1.2;color:var(--tc-headline-color);}\n  #twisted-careers .tc-numeral{font-family:var(--tc-display);font-weight:400;line-height:.92;letter-spacing:-2px;color:var(--tc-year-color);white-space:nowrap;padding-top:.04em;}\n  #twisted-careers .tc-clip{overflow:hidden;width:max-content;max-width:100%;}\n\n  \/* ---- Reveal ---- *\/\n  #twisted-careers .tc-rise{display:block;transform:translateY(100%);transition:transform .9s var(--tc-ease), color .3s;}\n  #twisted-careers .tc-fade{opacity:0;transform:translateY(14px);transition:opacity .7s ease, transform .8s var(--tc-ease);}\n  #twisted-careers .is-in .tc-rise, #twisted-careers .tc-rise.is-in{transform:none;}\n  #twisted-careers .is-in.tc-fade, #twisted-careers .is-in .tc-fade{opacity:1;transform:none;}\n\n  \/* ---- Masthead ---- *\/\n  #twisted-careers .tc-mast{border-bottom:1px solid var(--tc-line);padding-bottom:clamp(24px,3vw,36px);margin-bottom:clamp(32px,4vw,56px);}\n  #twisted-careers .tc-mast-row{display:flex;align-items:flex-end;justify-content:space-between;gap:clamp(24px,4vw,64px);flex-wrap:wrap;margin-top:18px;}\n  #twisted-careers .tc-mast-title{\n    font-family:var(--tc-display);font-weight:400;\n    font-size:clamp(96px,17vw,280px);line-height:.92;padding-top:.04em;letter-spacing:-3px;\n    color:var(--tc-year-color);\n    transform:translateY(100%);transition:transform .9s var(--tc-ease);\n  }\n  #twisted-careers.is-booted .tc-mast-title{transform:none;}\n  #twisted-careers .tc-mast-side{flex:0 1 440px;display:flex;flex-direction:column;gap:16px;padding-bottom:8px;}\n  #twisted-careers .tc-mast-script{font-size:clamp(20px,1.8vw,28px);}\n  #twisted-careers .tc-mast-copy{font-size:14px;line-height:1.7;color:var(--tc-copy-color);}\n\n  \/* the theme's page-title band, if ever switched on, replaces the big word *\/\n  #twisted-careers.tc--site-title .tc-inner{padding-top:clamp(24px,3vw,40px);}\n  #twisted-careers.tc--site-title .tc-mast-clip{display:none;}\n  #twisted-careers.tc--site-title .tc-mast-side{flex:1 1 auto;max-width:640px;}\n\n  \/* live-status dot (Build Slot Allocator \/ News) *\/\n  #twisted-careers .tc-status{display:flex;align-items:center;gap:8px;margin-top:4px;}\n  #twisted-careers .tc-status-dot{position:relative;width:7px;height:7px;border-radius:50%;background:var(--tc-fade);flex:none;}\n  #twisted-careers .tc-status.is-live .tc-status-dot{background:var(--tc-accent);}\n  #twisted-careers .tc-status.is-live .tc-status-dot::after{\n    content:\"\";position:absolute;inset:0;border-radius:50%;background:var(--tc-accent);\n    animation:tc-pulse 1.8s cubic-bezier(.2,.6,.2,1) infinite;\n  }\n  @keyframes tc-pulse{0%{opacity:.5;transform:scale(1);}100%{opacity:0;transform:scale(2.8);}}\n  #twisted-careers .tc-status-note{font-size:10px;letter-spacing:1.4px;text-transform:uppercase;color:var(--tc-fade);}\n\n  \/* ---- Section head ---- *\/\n  #twisted-careers .tc-sec + .tc-sec{margin-top:clamp(56px,7vw,96px);}\n  #twisted-careers .tc-sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;border-bottom:1px solid var(--tc-line);padding-bottom:12px;}\n  #twisted-careers .tc-sec-title{font-family:var(--tc-script);font-size:clamp(20px,1.6vw,26px);font-weight:400;color:var(--tc-headline-color);}\n\n  \/* department filter chips (only shown when there are 2+ departments) *\/\n  #twisted-careers .tc-chips{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 4px;}\n  #twisted-careers .tc-chip{\n    appearance:none;background:transparent;cursor:pointer;border-radius:0;\n    border:1px solid var(--tc-line);padding:8px 14px;\n    font-size:11px;font-weight:500;letter-spacing:1px;text-transform:uppercase;color:var(--tc-fade);\n    transition:border-color .2s,color .2s,background-color .2s;\n  }\n  #twisted-careers .tc-chip:hover{border-color:var(--tc-accent);color:var(--tc-ink);}\n  #twisted-careers .tc-chip[aria-pressed=\"true\"]{border-color:var(--tc-accent);color:var(--tc-ink);background:var(--tc-panel);}\n\n  \/* ---- Job rows: the Our Story numeral + News archive-row treatment ---- *\/\n  #twisted-careers .tc-jobs{list-style:none;}\n  #twisted-careers .tc-jobs > li{border-bottom:1px solid var(--tc-line);}\n  #twisted-careers .tc-job{\n    position:relative;\n    display:grid;grid-template-columns:clamp(84px,10vw,170px) minmax(0,1fr) auto;\n    gap:clamp(16px,3vw,48px);align-items:start;\n    padding:clamp(28px,3.4vw,48px) 0;\n  }\n  \/* accent bar slides in on hover (the slot allocator side-menu bar) *\/\n  #twisted-careers .tc-job::before{\n    content:\"\";position:absolute;left:0;top:-1px;height:1px;width:0;background:var(--tc-accent);\n    transition:width .6s var(--tc-ease);\n  }\n  #twisted-careers .tc-job:hover::before,#twisted-careers .tc-job:focus-visible::before{width:100%;}\n  #twisted-careers .tc-job .tc-numeral{font-size:clamp(72px,8.5vw,150px);}\n  #twisted-careers .tc-job:hover .tc-numeral{color:var(--tc-accent);}\n  #twisted-careers .tc-job-meta{display:flex;gap:6px 14px;flex-wrap:wrap;align-items:center;}\n  #twisted-careers .tc-job-meta .tc-dept{color:var(--tc-accent);}\n  #twisted-careers .tc-new{\n    display:inline-block;padding:3px 7px 2px;border:1px solid var(--tc-accent);color:var(--tc-ink);\n    font-size:9px;letter-spacing:1.4px;line-height:1.3;\n  }\n  #twisted-careers .tc-job-title{\n    font-family:var(--tc-sans);font-weight:600;\n    font-size:clamp(22px,2.2vw,34px);line-height:1.15;letter-spacing:-.3px;\n    color:var(--tc-headline-color);margin:12px 0 12px;transition:color .2s;\n  }\n  #twisted-careers .tc-job:hover .tc-job-title{color:var(--tc-accent);}\n  #twisted-careers .tc-job-copy{font-size:clamp(14px,1vw,15px);line-height:1.7;color:var(--tc-copy-color);max-width:68ch;\n    display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}\n  #twisted-careers .tc-facts{\n    display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px 28px;\n    margin-top:22px;padding-top:18px;border-top:1px solid var(--tc-line);max-width:860px;\n  }\n  #twisted-careers .tc-fact dt{font-size:9.5px;font-weight:500;letter-spacing:1.4px;text-transform:uppercase;color:var(--tc-fade);margin-bottom:4px;}\n  #twisted-careers .tc-fact dd{font-size:14px;font-weight:500;line-height:1.4;color:var(--tc-ink);}\n  #twisted-careers .tc-more{\n    display:inline-flex;align-items:center;gap:10px;align-self:end;white-space:nowrap;\n    font-size:11px;font-weight:600;letter-spacing:1.6px;text-transform:uppercase;color:var(--tc-ink);\n    border-bottom:1px solid currentColor;padding-bottom:4px;\n    transition:color .2s, gap .3s var(--tc-ease);\n  }\n  #twisted-careers .tc-job:hover .tc-more{color:var(--tc-accent);gap:16px;}\n  #twisted-careers .tc-more svg{width:11px;height:11px;}\n\n  \/* ---- Empty \/ error plate ---- *\/\n  #twisted-careers .tc-empty{border:1px solid var(--tc-line);padding:clamp(28px,4vw,56px);position:relative;margin-top:28px;}\n  #twisted-careers .tc-plate-cap{\n    position:absolute;top:-7px;left:14px;padding:0 8px;background:var(--tc-surface);\n    font-size:9.5px;font-weight:500;letter-spacing:1.4px;text-transform:uppercase;color:var(--tc-fade);\n  }\n  #twisted-careers .tc-empty .tc-script{font-size:clamp(22px,2vw,30px);}\n  #twisted-careers .tc-empty .tc-desc{margin-top:12px;font-size:14px;line-height:1.7;color:var(--tc-copy-color);max-width:60ch;}\n  #twisted-careers .tc-btn{\n    display:inline-block;margin-top:24px;background:transparent;\n    border:1px solid var(--tc-ink);padding:15px 34px;\n    font-size:11px;font-weight:600;letter-spacing:1.8px;text-transform:uppercase;color:var(--tc-ink);\n    transition:background-color .2s, color .2s;\n  }\n  #twisted-careers .tc-btn:hover{background:var(--tc-ink);color:var(--tc-surface);}\n\n  \/* skeleton rows while loading *\/\n  #twisted-careers .tc-skel{height:clamp(150px,14vw,210px);border-bottom:1px solid var(--tc-line);position:relative;overflow:hidden;}\n  #twisted-careers .tc-skel::after{\n    content:\"\";position:absolute;inset:0;\n    background:linear-gradient(90deg,transparent,rgba(242,242,240,.04),transparent);\n    animation:tc-shimmer 1.6s ease-in-out infinite;\n  }\n  @keyframes tc-shimmer{0%{transform:translateX(-100%);}100%{transform:translateX(100%);}}\n\n  #twisted-careers .tc-foot{margin-top:clamp(40px,5vw,64px);}\n  #twisted-careers .tc-foot a{border-bottom:1px solid var(--tc-line);}\n\n  \/* ---- Responsive ---- *\/\n  @media (max-width:900px){\n    #twisted-careers .tc-job{grid-template-columns:minmax(0,1fr);gap:10px;}\n    #twisted-careers .tc-job .tc-numeral{font-size:clamp(56px,16vw,96px);}\n    #twisted-careers .tc-more{justify-self:start;margin-top:14px;}\n    #twisted-careers .tc-mast-side{flex-basis:100%;}\n  }\n  @media (max-width:520px){\n    #twisted-careers .tc-facts{grid-template-columns:1fr 1fr;}\n  }\n  @media (prefers-reduced-motion:reduce){\n    #twisted-careers .tc-rise,#twisted-careers .tc-fade,#twisted-careers .tc-mast-title{transform:none !important;opacity:1 !important;transition:none !important;}\n    #twisted-careers .tc-status-dot::after,#twisted-careers .tc-skel::after{animation:none !important;}\n  }\n<\/style>\n\n<script>\n(function () {\n  'use strict';\n\n  \/* ================= CONFIG \u2014 safe to edit ================= *\/\n\n  \/\/ The careers feed Worker (worker.js). Change if you deploy it elsewhere.\n  var TC_FEED = window.TC_FEED_OVERRIDE || 'https:\/\/careers-feed.twisted.co\/jobs';\n\n  \/\/ Which HR Duo locations this page shows. Each must match HR Duo exactly.\n  var TC_LOCATIONS = [\"Twisted Marine Brighton ( Workshop and Parts Counter ) (BN2 5UG)\",\"Twisted Marine Salcombe ( Workshop ) (TQ8 8NQ)\"];\n\n  \/\/ Words used on the page.\n  var TC_PLACE = \"Twisted Marine\";            \/\/ \"1 vacancy at ___\"\n  var TC_COMPANY = \"Twisted Marine\";        \/\/ \"nothing advertised at ___ today\"\n  var TC_OTHERS = \"Browse vacancies across the wider Twisted group, from Twisted Automotive to KS Composites.\";          \/\/ the \"Don't see your role?\" line\n\n  \/\/ Filter buttons appear when the roles span 2+ of these: 'department' or 'location'.\n  var TC_FILTER_BY = \"location\";\n\n  \/\/ The full HR Duo board (used when there are no roles, or the feed is down).\n  var TC_BOARD = 'https:\/\/my.hrduo.com\/candidate-jobs\/Twisted_Inc_Limited';\n\n  var TC_NEW_DAYS = 14;        \/\/ roles posted within this many days get a \"New\" tag\n  var TC_CACHE_MINUTES = 30;   \/\/ how long a visitor's browser reuses the list\n  var TC_NEW_TAB = true;       \/\/ open HR Duo job pages in a new tab\n  var TC_HEADER_SELECTOR = '.elementor-location-header';\n\n  \/* ========================================================= *\/\n\n  var root = document.getElementById('twisted-careers');\n  if (!root || root.getAttribute('data-tc-ready')) return;\n  root.setAttribute('data-tc-ready', '1');\n\n  var view = root.querySelector('.tc-view');\n  var statusEl = root.querySelector('.tc-status');\n  var statusNote = root.querySelector('.tc-status-note');\n  var MONTHS = ['January','February','March','April','May','June','July','August','September','October','November','December'];\n  var state = { jobs: [], dept: '' };\n  var io = null;\n\n  \/* ---------- helpers ---------- *\/\n  function esc(s) {\n    return String(s == null ? '' : s).replace(\/[&<>\"']\/g, function (c) {\n      return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c];\n    });\n  }\n  function day(iso) { var p = String(iso || '').split('-'); return p.length === 3 ? new Date(+p[0], p[1] - 1, +p[2]) : null; }\n  function fmtShort(d) { return d.getDate() + ' ' + MONTHS[d.getMonth()].slice(0, 3) + ' ' + d.getFullYear(); }\n  function daysAgo(d) { var t = new Date(); t.setHours(0, 0, 0, 0); return Math.round((t - d) \/ 864e5); }\n  function posted(d) {\n    var n = daysAgo(d);\n    return n <= 0 ? 'Posted today' : n === 1 ? 'Posted yesterday' : n < 14 ? 'Posted ' + n + ' days ago' : 'Posted ' + fmtShort(d);\n  }\n  function pad(n) { return n < 10 ? '0' + n : String(n); }\n  function siteName(loc) {\n    \/\/ \"Twisted Automotive Limited - Sussex Court\" -> \"Sussex Court, Thirsk\"\n    \/\/ \"Twisted Marine Brighton ( Workshop \u2026 ) (BN2 5UG)\" -> \"Brighton\"\n    var name = String(loc.name || '');\n    if (!\/\\s[-\u2013]\\s\/.test(name)) return loc.city || name.replace(\/\\s*\\([^)]*\\)\/g, '').trim();\n    name = name.split(\/\\s[-\u2013]\\s\/).pop().replace(\/\\s*\\([^)]*\\)\/g, '').trim();\n    return [name, loc.city].filter(function (v, i, a) { return v && a.indexOf(v) === i; }).join(', ');\n  }\n  \/\/ \"Brighton- Marine Engineering\" -> \"Marine Engineering\"\n  function deptName(d) { return String(d || '').replace(\/^[A-Za-z]+-\\s+\/, ''); }\n  \/\/ \"Senior Marine Engineer - Twisted Marine\" -> \"Senior Marine Engineer\" (the page already says whose it is)\n  function titleOf(j) {\n    var suffix = new RegExp('\\\\s*[-\u2013]\\\\s*' + TC_COMPANY.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&') + '\\\\s*$', 'i');\n    return String(j.title || '').replace(suffix, '') || j.title;\n  }\n  function groupOf(j) { return TC_FILTER_BY === 'location' ? siteName(j.location || {}) : deptName(j.department); }\n\n  function store(val) {\n    try {\n      var key = 'tc-cache-v2:' + TC_LOCATIONS.join('|');\n      if (val === undefined) return JSON.parse(sessionStorage.getItem(key) || 'null');\n      sessionStorage.setItem(key, JSON.stringify(val));\n    } catch (e) { return null; }\n  }\n\n  function load() {\n    var cached = store();\n    if (cached && cached.t > Date.now() - TC_CACHE_MINUTES * 60000) return Promise.resolve(cached.data);\n    var want = TC_LOCATIONS.map(function (l) { return l.toLowerCase(); });\n    return fetch(TC_FEED, { credentials: 'omit' }).then(function (r) {\n      if (!r.ok) throw new Error('HTTP ' + r.status);\n      return r.json();\n    }).then(function (data) {\n      if (!data || !Array.isArray(data.jobs)) throw new Error('Bad feed');\n      data = { updated: data.updated, jobs: data.jobs.filter(function (j) {\n        return j.location && want.indexOf(String(j.location.name).toLowerCase()) > -1;\n      }) };\n      store({ t: Date.now(), data: data });\n      return data;\n    });\n  }\n\n  \/* ---------- markup ---------- *\/\n  function fact(label, value) {\n    return value ? '<div class=\"tc-fact\"><dt>' + label + '<\/dt><dd>' + esc(value) + '<\/dd><\/div>' : '';\n  }\n\n  function jobRow(j, i) {\n    var d = day(j.published);\n    var isNew = d && daysAgo(d) <= TC_NEW_DAYS;\n    var target = ' rel=\"nofollow' + (TC_NEW_TAB ? ' noopener\" target=\"_blank\"' : '\"');\n    return '<li class=\"tc-fade\">' +\n      '<a class=\"tc-job\" href=\"' + esc(j.url) + '\"' + target + '>' +\n        '<div class=\"tc-clip\"><span class=\"tc-numeral tc-rise\" aria-hidden=\"true\">' + pad(i + 1) + '<\/span><\/div>' +\n        '<div class=\"tc-job-body\">' +\n          '<p class=\"tc-job-meta tc-cap\">' +\n            (j.department ? '<span class=\"tc-dept\">' + esc(deptName(j.department)) + '<\/span>' : '') +\n            (d ? '<time datetime=\"' + esc(j.published) + '\">' + posted(d) + '<\/time>' : '') +\n            (isNew ? '<span class=\"tc-new\">New<\/span>' : '') +\n          '<\/p>' +\n          '<h3 class=\"tc-job-title\">' + esc(titleOf(j)) + '<\/h3>' +\n          (j.summary ? '<p class=\"tc-job-copy\">' + esc(j.summary) + '<\/p>' : '') +\n          '<dl class=\"tc-facts\">' +\n            fact('Location', siteName(j.location || {})) +\n            fact('Contract', j.type) +\n            fact('Workplace', j.workplace) +\n            fact('Salary', j.salary) +\n            (j.closing ? fact('Closes', fmtShort(day(j.closing))) : '') +\n          '<\/dl>' +\n        '<\/div>' +\n        '<span class=\"tc-more\">View &amp; apply <svg viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" aria-hidden=\"true\"><path d=\"M3 9l6-6M4 3h5v5\"\/><\/svg>' +\n          (TC_NEW_TAB ? '<span class=\"tc-sr\"> (opens HR Duo in a new tab)<\/span>' : '') + '<\/span>' +\n      '<\/a><\/li>';\n  }\n\n  function chips() {\n    var depts = [];\n    state.jobs.forEach(function (j) { var g = groupOf(j); if (g && depts.indexOf(g) < 0) depts.push(g); });\n    if (depts.length < 2) return '';\n    depts.sort();\n    return '<div class=\"tc-chips\" role=\"group\" aria-label=\"Filter by ' + TC_FILTER_BY + '\">' +\n      '<button type=\"button\" class=\"tc-chip\" data-tc-dept=\"\" aria-pressed=\"' + (!state.dept) + '\">All<\/button>' +\n      depts.map(function (d) {\n        return '<button type=\"button\" class=\"tc-chip\" data-tc-dept=\"' + esc(d) + '\" aria-pressed=\"' + (state.dept === d) + '\">' + esc(d) + '<\/button>';\n      }).join('') + '<\/div>';\n  }\n\n  function viewJobs() {\n    var list = state.jobs.filter(function (j) { return !state.dept || groupOf(j) === state.dept; });\n    var n = state.jobs.length;\n    return '<section class=\"tc-sec\">' +\n      '<div class=\"tc-sec-head\"><h2 class=\"tc-sec-title\">Open roles<\/h2><span class=\"tc-cap\">' + n + ' ' + (n === 1 ? 'vacancy' : 'vacancies') + ' at ' + esc(TC_PLACE) + '<\/span><\/div>' +\n      chips() +\n      '<ul class=\"tc-jobs\">' + list.map(jobRow).join('') + '<\/ul><\/section>' +\n      '<section class=\"tc-sec\">' + plate('Not the right fit?',\n        'Don\u2019t see your role?',\n        'We\u2019re always keen to hear from anti-ordinary people. ' + TC_OTHERS,\n        'All Twisted vacancies') + '<\/section>';\n  }\n\n  function plate(cap, title, copy, cta) {\n    return '<div class=\"tc-empty tc-fade\"><p class=\"tc-plate-cap\">' + esc(cap) + '<\/p>' +\n      '<p class=\"tc-script\">' + esc(title) + '<\/p><p class=\"tc-desc\">' + esc(copy) + '<\/p>' +\n      '<a class=\"tc-btn\" href=\"' + esc(TC_BOARD) + '\" target=\"_blank\" rel=\"nofollow noopener\">' + esc(cta) + ' <span aria-hidden=\"true\">\u2197<\/span><\/a><\/div>';\n  }\n\n  function viewNone() {\n    return '<section class=\"tc-sec\"><div class=\"tc-sec-head\"><h2 class=\"tc-sec-title\">Open roles<\/h2><span class=\"tc-cap\">0 vacancies<\/span><\/div>' +\n      plate(TC_PLACE, 'No open roles right now.',\n        'There\u2019s nothing advertised at ' + TC_COMPANY + ' today, but new roles appear here as soon as they\u2019re posted. You can also browse vacancies across the wider Twisted group.',\n        'All Twisted vacancies') + '<\/section>';\n  }\n\n  function viewError() {\n    return '<section class=\"tc-sec\">' + plate('Vacancies', 'The job board is taking a breather.',\n      'Our vacancies couldn\u2019t be loaded just now. You can still see every open role on our HR Duo careers board.',\n      'View vacancies on HR Duo') + '<\/section>';\n  }\n\n  function viewLoading() {\n    return '<div class=\"tc-sec-head\"><h2 class=\"tc-sec-title\">Open roles<\/h2><\/div><div class=\"tc-skel\"><\/div><div class=\"tc-skel\"><\/div>';\n  }\n\n  function render(html) {\n    view.innerHTML = html;\n    reveal();\n    measureChrome();\n  }\n\n  function reveal() {\n    var els = view.querySelectorAll('.tc-fade:not(.is-in), .tc-clip:not(.is-in)');\n    if (!('IntersectionObserver' in window)) { [].forEach.call(els, function (el) { el.classList.add('is-in'); }); return; }\n    if (!io) io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); } });\n    }, { rootMargin: '0px 0px -6% 0px' });\n    [].forEach.call(els, function (el) { io.observe(el); });\n  }\n\n  \/* ---------- events ---------- *\/\n  root.addEventListener('click', function (e) {\n    var chip = e.target.closest('[data-tc-dept]');\n    if (!chip) return;\n    state.dept = chip.getAttribute('data-tc-dept');\n    render(viewJobs());\n  });\n\n  \/* Keep clear of the site's Elementor header (60px rail on desktop, top\n     bar on phones). Same measurement as the News portal. *\/\n  function measureChrome() {\n    root.style.setProperty('--tc-sbw', (window.innerWidth - document.documentElement.clientWidth) + 'px');\n    var left = 0, top = 0, vw = window.innerWidth, vh = window.innerHeight;\n    [].forEach.call(document.querySelectorAll(TC_HEADER_SELECTOR + ' *'), function (el) {\n      var cs = getComputedStyle(el);\n      if (cs.position !== 'fixed' && cs.position !== 'sticky') return;\n      if (cs.display === 'none' || cs.visibility === 'hidden') return;\n      var r = el.getBoundingClientRect();\n      if (!r.width || !r.height) return;\n      if (r.left <= 1 && r.height >= vh * 0.6 && r.width < vw * 0.3) left = Math.max(left, r.right);\n      else if (r.top <= 1 && r.width >= vw * 0.6 && r.height < vh * 0.3) top = Math.max(top, r.bottom);\n    });\n    var box = root.getBoundingClientRect();\n    root.style.setProperty('--tc-rail-left', Math.round(Math.max(0, left - box.left)) + 'px');\n    root.style.setProperty('--tc-bar-top', Math.round(Math.max(0, top - (box.top + window.pageYOffset))) + 'px');\n  }\n  function readPage() {\n    var t = document.querySelector('.elementor-widget-theme-post-title, .elementor-page-title, .page-header .entry-title');\n    var above = t && t.offsetParent !== null && (t.compareDocumentPosition(root) & Node.DOCUMENT_POSITION_FOLLOWING);\n    root.classList.toggle('tc--site-title', !!above);\n    \/\/ the theme already has an H1 then, so ours steps down\n    if (above) root.querySelector('.tc-mast-title').setAttribute('aria-hidden', 'true');\n  }\n  readPage();\n  measureChrome();\n  window.addEventListener('resize', measureChrome);\n  window.addEventListener('load', measureChrome);\n\n  \/* ---------- boot ---------- *\/\n  setTimeout(function () { root.classList.add('is-booted'); }, 60);\n  render(viewLoading());\n  load().then(function (data) {\n    state.jobs = data.jobs;\n    var n = state.jobs.length;\n    var upd = data.updated ? new Date(data.updated) : null;\n    statusEl.classList.add('is-live');\n    statusNote.textContent = (n ? n + ' open ' + (n === 1 ? 'role' : 'roles') : 'No open roles') +\n      (upd && !isNaN(upd) ? ' \u00b7 checked ' + upd.getDate() + ' ' + MONTHS[upd.getMonth()].slice(0, 3) : '') + ' \u00b7 via HR Duo';\n    render(n ? viewJobs() : viewNone());\n  }).catch(function () {\n    statusNote.textContent = 'Could not reach the job board';\n    render(viewError());\n  });\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Twisted Marine \/ Careers Careers Join the crew. From our workshops at Brighton Marina and in Salcombe, we build, refit and look after the Scorpion RIBs we\u2019re known for. If you love boats and doing things properly, there\u2019s a place for you on the team. Loading vacancies\u2026 Applications are handled securely through HR Duo, our [&hellip;]<\/p>\n","protected":false},"author":92,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-11616","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Careers - Twisted Marine<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/twisted.co\/marine\/careers\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Careers - Twisted Marine\" \/>\n<meta property=\"og:description\" content=\"Twisted Marine \/ Careers Careers Join the crew. From our workshops at Brighton Marina and in Salcombe, we build, refit and look after the Scorpion RIBs we\u2019re known for. If you love boats and doing things properly, there\u2019s a place for you on the team. Loading vacancies\u2026 Applications are handled securely through HR Duo, our [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/twisted.co\/marine\/careers\/\" \/>\n<meta property=\"og:site_name\" content=\"Twisted Marine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TwistedAutomotiveLtd\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-11T16:40:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/twisted.co\/marine\/wp-content\/uploads\/sites\/8\/2026\/02\/twisted-social-preview.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/careers\\\/\",\"url\":\"https:\\\/\\\/twisted.co\\\/marine\\\/careers\\\/\",\"name\":\"Careers - Twisted Marine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#website\"},\"datePublished\":\"2026-11-11T13:56:17+00:00\",\"dateModified\":\"2026-11-11T16:40:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/careers\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/twisted.co\\\/marine\\\/careers\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/careers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/twisted.co\\\/marine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Careers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#website\",\"url\":\"https:\\\/\\\/twisted.co\\\/marine\\\/\",\"name\":\"Twisted Automotive\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/twisted.co\\\/marine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#organization\",\"name\":\"Twisted Automotive\",\"url\":\"https:\\\/\\\/twisted.co\\\/marine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":false,\"contentUrl\":false,\"width\":530,\"height\":530,\"caption\":\"Twisted Automotive\"},\"image\":{\"@id\":\"https:\\\/\\\/twisted.co\\\/marine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/TwistedAutomotiveLtd\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Careers - Twisted Marine","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/twisted.co\/marine\/careers\/","og_locale":"en_GB","og_type":"article","og_title":"Careers - Twisted Marine","og_description":"Twisted Marine \/ Careers Careers Join the crew. From our workshops at Brighton Marina and in Salcombe, we build, refit and look after the Scorpion RIBs we\u2019re known for. If you love boats and doing things properly, there\u2019s a place for you on the team. Loading vacancies\u2026 Applications are handled securely through HR Duo, our [&hellip;]","og_url":"https:\/\/twisted.co\/marine\/careers\/","og_site_name":"Twisted Marine","article_publisher":"https:\/\/www.facebook.com\/TwistedAutomotiveLtd","article_modified_time":"2026-11-11T16:40:32+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/twisted.co\/marine\/wp-content\/uploads\/sites\/8\/2026\/02\/twisted-social-preview.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/twisted.co\/marine\/careers\/","url":"https:\/\/twisted.co\/marine\/careers\/","name":"Careers - Twisted Marine","isPartOf":{"@id":"https:\/\/twisted.co\/marine\/#website"},"datePublished":"2026-11-11T13:56:17+00:00","dateModified":"2026-11-11T16:40:32+00:00","breadcrumb":{"@id":"https:\/\/twisted.co\/marine\/careers\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/twisted.co\/marine\/careers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/twisted.co\/marine\/careers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/twisted.co\/marine\/"},{"@type":"ListItem","position":2,"name":"Careers"}]},{"@type":"WebSite","@id":"https:\/\/twisted.co\/marine\/#website","url":"https:\/\/twisted.co\/marine\/","name":"Twisted Automotive","description":"","publisher":{"@id":"https:\/\/twisted.co\/marine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/twisted.co\/marine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/twisted.co\/marine\/#organization","name":"Twisted Automotive","url":"https:\/\/twisted.co\/marine\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/twisted.co\/marine\/#\/schema\/logo\/image\/","url":false,"contentUrl":false,"width":530,"height":530,"caption":"Twisted Automotive"},"image":{"@id":"https:\/\/twisted.co\/marine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/TwistedAutomotiveLtd"]}]}},"permalink_manager":null,"_links":{"self":[{"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/pages\/11616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/users\/92"}],"replies":[{"embeddable":true,"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/comments?post=11616"}],"version-history":[{"count":7,"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/pages\/11616\/revisions"}],"predecessor-version":[{"id":11626,"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/pages\/11616\/revisions\/11626"}],"wp:attachment":[{"href":"https:\/\/twisted.co\/marine\/wp-json\/wp\/v2\/media?parent=11616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}