* fix: resolve all Rubocop and ERBLint offenses
Rubocop (16 offenses):
- Style/IfUnlessModifier in account_logo_controller
- Lint/RedundantSafeNavigation in templates_documents_controller
- Layout/LineLength in templates_documents_controller, account_config
- Rails/WhereMissing in teams_controller
- Rails/WhereExists in send_submitter_reminder_email_job
- Style/StringLiterals in create_teams migration
- Metrics/* (disabled via inline comments for complex case statements)
ERBLint (10 errors):
- Void element self-closing tags (img /> → img >)
- Layout/ArgumentAlignment in reminder_queue
- Style/StringLiterals + Rails/LinkToBlank in navbar_buttons
- Layout/BlockAlignment in custom_content mailer
- Style/WordArray in role_select
* feat: add local CI via Docker and pre-push lint hook
- Add docker-compose.ci.yml: lint, brakeman, rspec services
- Add Dockerfile.ci: test environment with Ruby, Node, Chromium
- Add bin/lint: quick lint-only check
- Add bin/ci: full CI suite (lint + brakeman + rspec)
- Add .githooks/pre-push: auto-runs linters before push
- Update docker-compose.yml: use ghcr.io image instead of local build
Setup: git config core.hooksPath .githooks
Usage: bin/ci or bin/lint
---------
Co-authored-by: Sebastian Noe <sebastian.schneider@boxine.de>
- Add has_one_attached :logo to Account model
- Add AccountLogoController for upload/delete in Settings
- Display custom logo in signing forms (start_form, submit_form)
- Display custom logo in submission preview
- Add logo upload form with drag-and-drop to personalization settings