<video controls autoplay loop muted playsinline>
<source src="#" type="video/mp4">
Your browser does not support HTML5 video.
</video>
Ну и ещё надо понять какой кодек используется, по этому если выведет "Your browser does not support HTML5 video." значит, что-то не так с самим видео и его надо перекодировать.
Смотрите, svg по своей сути это обычный текст и раз у вас рисование происходит не странице, то у вас есть в html контейнер где уже сгенерирован svg (пользователь же как-то видит результат работы). Ну а дальше, дело техники:
Ну я бы сделал так.
1. По нажатию на кнопку "Cохранить", на сервер отправляются настройки.
2. Сервер на основе настроек формирует нужный html
3. Открываем например безголовым хромом этот html и сохраняем как pdf
В данный момент на проекте для этих нужд использую api для nodejs Puppeteer
Cпецифичность бы сработала если бы для зеленого цвета селектор был UL LI SPAN, а так у нас получается, что зеленый цвет назначен для UL и пока у span не будет объявлен в стилях свой цвет, span'ы внутри списка будут наследовать зеленый, но как только мы в селекторе используем тег span он станет приоритетнее. В примере у нас сначала действует blue, а потом его перебивает orange так как он находится ниже.