if (image.left < container.left) { можно двигать вправо }
if (image.left + image.width < container.left + container.width) { можно двигать влево }
Код не настоящий, лишь для демонстрации.
По событию mousedown начинать перемещение, mousemove - выполнять перемещение, mouseup - прекращать перемещение.
Нужно написать четыре условия выхода за границы (по четырем сторонам), если условия не выполняются, ничего не делать.
Если есть возможность того, что картинка будет меньше блока, то условия на границах будут немного другие, нужно будет их написать отдельно.
Как правильно написал Константин Китманов - используется непрерывная интеграция.
В простейшем случае это может быть скриптик, который вызывается вручную или хуком на пуш в репу. Скрипт собирает билд в новую диру со случайным названием (или порядковым номером). Папка на проде, которая светит в веб является симлинком на подобные диры. Скрипт убирает симлинк и тут же ставит его на вновь созданный билд. Старые билды какое-то время и в каком-то количестве (допустим последние три) хранятся на сервере, потом подчищаются. Хранение позволяет мгновенно откатится на предыдущий релиз, если случайно релизнули серьёзные баги.
nauchivse, и? шрифты в любом случае будут загружаться отдельно, с серверов гугла, или с вашего, не важно. А вот на парочке блокирующих запросов вы сэкономите, убрав css в общий файл.
Если вдруг это случится — вам придется или менять сферу деятельности, или уезжать из страны.
Этот ответ достаточно очевиден, непонятно, с какой целью задан вопрос.
Этот вопрос нужно согласовывать с программистом и клиентом.
Первому будет проще в админке реализовать добавление одного изображение, второй должен знать, что ему нужно на сайте.
как-то так