// Scoped Eval
function scoped(selector, rule) {

  let styles = ''
  let count = 0

  document.querySelectorAll(selector).forEach(tag => {

    const attr = selector.replace(/\W/g, '')
    const evaluated =
      rule.replace(/eval\( *((".*?")|('.*?')) *\)/g, (string, match) =>
        new Function(`return ${match.slice(1, -1)}`).call(tag) || ''
      )

    tag.setAttribute(`data-scoped-${attr}`, count)
    styles += `[data-scoped-${attr}="${count}"] { ${evaluated} }\n`
    count++

  })

  return styles

}