workload_tag_training_id
const subcontractTagTrainingId = subcontract_tag_training_id
const workloadTagOnSite = workload_tag_on_site
const workloadTagRemote = workload_tag_remote
const subcontractTagOnSite = subcontract_tag_on_site
const subcontractTagRemote = subcontract_tag_remote
const workloadCancelledStatuses = []
const subcontractCancelledStatuses = []
// Cache SVG inline — fetch une seule fois par icône, synchrone ensuite
const _iconCache = {}
async function preloadIcons(names) {
await Promise.all((names || []).filter(Boolean).map(async name => {
if (_iconCache[name]) return
try {
const r = await fetch('/images/' + name + '.svg')
_iconCache[name] = r.ok ? await r.text() : ''
} catch(e) { _iconCache[name] = '' }
}))
}
// Retourne le SVG inline avec class/style injectés
function iconSrc(name, opts = {}) {
let svg = _iconCache[name] || ''
if (!svg) return ''
const cls = opts.class !== undefined ? opts.class : 'w-5 h-5'
if (cls) svg = svg.replace('