Для правильного вопроса надо знать половину ответа
Note: The attr() function can be used with any CSS property, but support for properties other than content is experimental, and support for the type-or-unit parameter is sparse.
Для правильного вопроса надо знать половину ответа
Потому что вы написали "элемент с классом .smile, являющийся потомком элемента image с псевдослассом hover".
А надо написать "элемент с классом .smile, следующий за элементом image с псевдослассом hover".
Для правильного вопроса надо знать половину ответа
Вангую, что reader у вас - глобальная переменная с инстансом FileReader.
И вы каждым вызовом reader.addEventListener навешиваете на неё ещё один обработчик события 'load'.
В результате все навешенные обработчики срабатывают на загрузку каждого следующего файла.
Для правильного вопроса надо знать половину ответа
Рисуете свой зал со столами в SVG, каждый стол отдельным path. Вставляете эту картинку на страницу и работаете с элементами так же, как с обычными html, привязываете обработчики событий, прописываете стили, меняете классы и т.д.