diff --git a/.github/stylelint-matcher.json b/.github/stylelint-matcher.json
deleted file mode 100644
index cdfd4086bd4200..00000000000000
--- a/.github/stylelint-matcher.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "problemMatcher": [
-    {
-      "owner": "stylelint",
-      "pattern": [
-        {
-          "regexp": "^([^\\s].*)$",
-          "file": 1
-        },
-        {
-          "regexp": "^\\s+((\\d+):(\\d+))?\\s+(✖|×)\\s+(.*)\\s{2,}(.*)$",
-          "line": 2,
-          "column": 3,
-          "message": 5,
-          "code": 6,
-          "loop": true
-        }
-      ]
-    }
-  ]
-}
diff --git a/.github/workflows/lint-css.yml b/.github/workflows/lint-css.yml
index e5f487487719f1..d3b8035cd86521 100644
--- a/.github/workflows/lint-css.yml
+++ b/.github/workflows/lint-css.yml
@@ -38,9 +38,5 @@ jobs:
       - name: Set up Javascript environment
         uses: ./.github/actions/setup-javascript
 
-      - uses: xt0rted/stylelint-problem-matcher@v1
-
-      - run: echo "::add-matcher::.github/stylelint-matcher.json"
-
       - name: Stylelint
-        run: yarn lint:css
+        run: yarn lint:css -f github
diff --git a/Gemfile.lock b/Gemfile.lock
index a231785402e1ab..190888ddb81ba7 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -167,9 +167,9 @@ GEM
       activesupport
     cbor (0.5.9.8)
     charlock_holmes (0.7.7)
-    chewy (7.5.1)
+    chewy (7.6.0)
       activesupport (>= 5.2)
-      elasticsearch (>= 7.12.0, < 7.14.0)
+      elasticsearch (>= 7.14.0, < 8)
       elasticsearch-dsl
     chunky_png (1.4.0)
     climate_control (1.2.0)
@@ -220,14 +220,14 @@ GEM
     dotenv (3.1.1)
     drb (2.2.1)
     ed25519 (1.3.0)
-    elasticsearch (7.13.3)
-      elasticsearch-api (= 7.13.3)
-      elasticsearch-transport (= 7.13.3)
-    elasticsearch-api (7.13.3)
+    elasticsearch (7.17.10)
+      elasticsearch-api (= 7.17.10)
+      elasticsearch-transport (= 7.17.10)
+    elasticsearch-api (7.17.10)
       multi_json
     elasticsearch-dsl (0.1.10)
-    elasticsearch-transport (7.13.3)
-      faraday (~> 1)
+    elasticsearch-transport (7.17.10)
+      faraday (>= 1, < 3)
       multi_json
     email_spec (2.2.2)
       htmlentities (~> 4.3.3)
@@ -346,7 +346,7 @@ GEM
       activesupport (>= 3.0)
       nokogiri (>= 1.6)
     io-console (0.7.2)
-    irb (1.13.0)
+    irb (1.13.1)
       rdoc (>= 4.0.0)
       reline (>= 0.4.2)
     jmespath (1.6.2)
@@ -601,7 +601,7 @@ GEM
     redlock (1.3.2)
       redis (>= 3.0.0, < 6.0)
     regexp_parser (2.9.0)
-    reline (0.5.4)
+    reline (0.5.5)
       io-console (~> 0.5)
     request_store (1.6.0)
       rack (>= 1.4)
@@ -651,8 +651,8 @@ GEM
       rubocop-ast (>= 1.31.1, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 2.4.0, < 3.0)
-    rubocop-ast (1.31.2)
-      parser (>= 3.3.0.4)
+    rubocop-ast (1.31.3)
+      parser (>= 3.3.1.0)
     rubocop-capybara (2.20.0)
       rubocop (~> 1.41)
     rubocop-factory_bot (2.25.1)
@@ -665,7 +665,7 @@ GEM
       rack (>= 1.1)
       rubocop (>= 1.33.0, < 2.0)
       rubocop-ast (>= 1.31.1, < 2.0)
-    rubocop-rspec (2.29.1)
+    rubocop-rspec (2.29.2)
       rubocop (~> 1.40)
       rubocop-capybara (~> 2.17)
       rubocop-factory_bot (~> 2.22)
diff --git a/app/controllers/admin/site_uploads_controller.rb b/app/controllers/admin/site_uploads_controller.rb
index a5d2cf41cf121d..96e61cf6bbc194 100644
--- a/app/controllers/admin/site_uploads_controller.rb
+++ b/app/controllers/admin/site_uploads_controller.rb
@@ -9,7 +9,7 @@ def destroy
 
       @site_upload.destroy!
 
-      redirect_to admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
+      redirect_back fallback_location: admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
     end
 
     private
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index c4e678a024cb26..881aec13e26d2f 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -9,16 +9,22 @@ class Api::V1::AccountsController < Api::BaseController
   before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' }, only: [:block, :unblock]
   before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create]
 
-  before_action :require_user!, except: [:show, :create]
-  before_action :set_account, except: [:create]
-  before_action :check_account_approval, except: [:create]
-  before_action :check_account_confirmation, except: [:create]
+  before_action :require_user!, except: [:index, :show, :create]
+  before_action :set_account, except: [:index, :create]
+  before_action :set_accounts, only: [:index]
+  before_action :check_account_approval, except: [:index, :create]
+  before_action :check_account_confirmation, except: [:index, :create]
   before_action :check_enabled_registrations, only: [:create]
+  before_action :check_accounts_limit, only: [:index]
 
   skip_before_action :require_authenticated_user!, only: :create
 
   override_rate_limit_headers :follow, family: :follows
 
+  def index
+    render json: @accounts, each_serializer: REST::AccountSerializer
+  end
+
   def show
     cache_if_unauthenticated!
     render json: @account, serializer: REST::AccountSerializer
@@ -84,6 +90,10 @@ def set_account
     @account = Account.find(params[:id])
   end
 
+  def set_accounts
+    @accounts = Account.where(id: account_ids).without_unapproved
+  end
+
   def check_account_approval
     raise(ActiveRecord::RecordNotFound) if @account.local? && @account.user_pending?
   end
@@ -92,10 +102,22 @@ def check_account_confirmation
     raise(ActiveRecord::RecordNotFound) if @account.local? && !@account.user_confirmed?
   end
 
+  def check_accounts_limit
+    raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT
+  end
+
   def relationships(**options)
     AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
   end
 
+  def account_ids
+    Array(accounts_params[:ids]).uniq.map(&:to_i)
+  end
+
+  def accounts_params
+    params.permit(ids: [])
+  end
+
   def account_params
     params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone, :invite_code)
   end
diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb
index 3634acf95662db..e1ad89ee3e02e2 100644
--- a/app/controllers/api/v1/push/subscriptions_controller.rb
+++ b/app/controllers/api/v1/push/subscriptions_controller.rb
@@ -1,9 +1,12 @@
 # frozen_string_literal: true
 
 class Api::V1::Push::SubscriptionsController < Api::BaseController
+  include Redisable
+  include Lockable
+
   before_action -> { doorkeeper_authorize! :push }
   before_action :require_user!
-  before_action :set_push_subscription
+  before_action :set_push_subscription, only: [:show, :update]
   before_action :check_push_subscription, only: [:show, :update]
 
   def show
@@ -11,16 +14,18 @@ def show
   end
 
   def create
-    @push_subscription&.destroy!
+    with_redis_lock("push_subscription:#{current_user.id}") do
+      destroy_web_push_subscriptions!
 
-    @push_subscription = Web::PushSubscription.create!(
-      endpoint: subscription_params[:endpoint],
-      key_p256dh: subscription_params[:keys][:p256dh],
-      key_auth: subscription_params[:keys][:auth],
-      data: data_params,
-      user_id: current_user.id,
-      access_token_id: doorkeeper_token.id
-    )
+      @push_subscription = Web::PushSubscription.create!(
+        endpoint: subscription_params[:endpoint],
+        key_p256dh: subscription_params[:keys][:p256dh],
+        key_auth: subscription_params[:keys][:auth],
+        data: data_params,
+        user_id: current_user.id,
+        access_token_id: doorkeeper_token.id
+      )
+    end
 
     render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
@@ -31,14 +36,18 @@ def update
   end
 
   def destroy
-    @push_subscription&.destroy!
+    destroy_web_push_subscriptions!
     render_empty
   end
 
   private
 
+  def destroy_web_push_subscriptions!
+    doorkeeper_token.web_push_subscriptions.destroy_all
+  end
+
   def set_push_subscription
-    @push_subscription = Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id)
+    @push_subscription = doorkeeper_token.web_push_subscriptions.first
   end
 
   def check_push_subscription
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index e2c01635f63ee2..94c53fccc4271c 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -5,9 +5,11 @@ class Api::V1::StatusesController < Api::BaseController
 
   before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
   before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only:   [:create, :update, :destroy]
-  before_action :require_user!, except:  [:show, :context]
-  before_action :set_status, only:       [:show, :context]
-  before_action :set_thread, only:       [:create]
+  before_action :require_user!, except:      [:index, :show, :context]
+  before_action :set_statuses, only:         [:index]
+  before_action :set_status, only:           [:show, :context]
+  before_action :set_thread, only:           [:create]
+  before_action :check_statuses_limit, only: [:index]
 
   override_rate_limit_headers :create, family: :statuses
   override_rate_limit_headers :update, family: :statuses
@@ -23,6 +25,11 @@ class Api::V1::StatusesController < Api::BaseController
   DESCENDANTS_LIMIT       = 60
   DESCENDANTS_DEPTH_LIMIT = 20
 
+  def index
+    @statuses = cache_collection(@statuses, Status)
+    render json: @statuses, each_serializer: REST::StatusSerializer
+  end
+
   def show
     cache_if_unauthenticated!
     @status = cache_collection([@status], Status).first
@@ -125,6 +132,10 @@ def destroy
 
   private
 
+  def set_statuses
+    @statuses = Status.permitted_statuses_from_ids(status_ids, current_account)
+  end
+
   def set_status
     @status = Status.find(params[:id])
     authorize @status, :show?
@@ -139,6 +150,18 @@ def set_thread
     render json: { error: I18n.t('statuses.errors.in_reply_not_found') }, status: 404
   end
 
+  def check_statuses_limit
+    raise(Mastodon::ValidationError) if status_ids.size > DEFAULT_STATUSES_LIMIT
+  end
+
+  def status_ids
+    Array(statuses_params[:ids]).uniq.map(&:to_i)
+  end
+
+  def statuses_params
+    params.permit(ids: [])
+  end
+
   def status_params
     params.permit(
       :status,
diff --git a/app/controllers/well_known/oauth_metadata_controller.rb b/app/controllers/well_known/oauth_metadata_controller.rb
new file mode 100644
index 00000000000000..c80be2d65258c5
--- /dev/null
+++ b/app/controllers/well_known/oauth_metadata_controller.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+module WellKnown
+  class OauthMetadataController < ActionController::Base # rubocop:disable Rails/ApplicationController
+    include CacheConcern
+
+    # Prevent `active_model_serializer`'s `ActionController::Serialization` from calling `current_user`
+    # and thus re-issuing session cookies
+    serialization_scope nil
+
+    def show
+      # Due to this document potentially changing between Mastodon versions (as
+      # new OAuth scopes are added), we don't use expires_in to cache upstream,
+      # instead just caching in the rails cache:
+      render_with_cache(
+        json: ::OauthMetadataPresenter.new,
+        serializer: ::OauthMetadataSerializer,
+        content_type: 'application/json',
+        expires_in: 15.minutes
+      )
+    end
+  end
+end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index ad4ec449709a46..0d6feb934c6717 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -251,9 +251,14 @@ def prerender_custom_emojis(html, custom_emojis, other_options = {})
   end
 
   def prerender_custom_emojis_from_hash(html, custom_emojis_hash)
-    # rubocop:disable Style/OpenStructUse
-    prerender_custom_emojis(html, JSON.parse([custom_emojis_hash].to_json, object_class: OpenStruct))
-    # rubocop:enable Style/OpenStructUse
+    prerender_custom_emojis(html, JSON.parse([custom_emojis_hash].to_json, object_class: OpenStruct)) # rubocop:disable Style/OpenStructUse
+  end
+
+  def site_icon_path(type, size = '48')
+    icon = SiteUpload.find_by(var: type)
+    return nil unless icon
+
+    icon.file.url(size)
   end
 
   private
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index dd13f10aa3467f..68e32dd2aab6e7 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -5,7 +5,7 @@
   "about.domain_blocks.no_reason_available": "السبب غير متوفر",
   "about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.",
   "about.domain_blocks.silenced.explanation": "عموماً، لن ترى ملفات التعريف والمحتوى من هذا الخادم، إلا إذا كنت تبحث عنه بشكل صريح أو تختار أن تتابعه.",
-  "about.domain_blocks.silenced.title": "تم كتمه",
+  "about.domain_blocks.silenced.title": "محدود",
   "about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
   "about.domain_blocks.suspended.title": "مُعلّق",
   "about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
@@ -21,7 +21,7 @@
   "account.blocked": "محظور",
   "account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
   "account.cancel_follow_request": "إلغاء طلب المتابعة",
-  "account.copy": "نسخ الرابط إلى الملف الشخصي",
+  "account.copy": "نسخ الرابط إلى الحساب",
   "account.direct": "إشارة خاصة لـ @{name}",
   "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
   "account.domain_blocked": "اسم النِّطاق محظور",
@@ -32,7 +32,7 @@
   "account.featured_tags.last_status_never": "لا توجد رسائل",
   "account.featured_tags.title": "وسوم {name} المميَّزة",
   "account.follow": "متابعة",
-  "account.follow_back": "تابعه بدورك",
+  "account.follow_back": "رد المتابعة",
   "account.followers": "مُتابِعون",
   "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
   "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}",
@@ -89,12 +89,12 @@
   "announcement.announcement": "إعلان",
   "attachments_list.unprocessed": "(غير معالَج)",
   "audio.hide": "إخفاء المقطع الصوتي",
-  "block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.",
-  "block_modal.show_less": "اعرض أقلّ",
+  "block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
+  "block_modal.show_less": "أظهر الأقل",
   "block_modal.show_more": "أظهر المزيد",
   "block_modal.they_cant_mention": "لن يستطيع ذِكرك أو متابعتك.",
   "block_modal.they_cant_see_posts": "لن يستطيع رؤية منشوراتك ولن ترى منشوراته.",
-  "block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حجبه.",
+  "block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حظره.",
   "block_modal.title": "أتريد حظر المستخدم؟",
   "block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
   "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
@@ -220,7 +220,7 @@
   "domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.",
   "domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.",
   "domain_pill.server": "الخادِم",
-  "domain_pill.their_handle": "مُعرِّفُه:",
+  "domain_pill.their_handle": "مُعرفه:",
   "domain_pill.their_server": "بيتهم الرقمي، حيث تُستضاف كافة منشوراتهم.",
   "domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.",
   "domain_pill.username": "اسم المستخدم",
@@ -308,6 +308,8 @@
   "follow_suggestions.hints.similar_to_recently_followed": "هذا الملف الشخصي مشابه للملفات الشخصية التي تابعتها مؤخرا.",
   "follow_suggestions.personalized_suggestion": "توصية مخصصة",
   "follow_suggestions.popular_suggestion": "توصية رائجة",
+  "follow_suggestions.popular_suggestion_longer": "رائج على {domain}",
+  "follow_suggestions.similar_to_recently_followed_longer": "مشابهة لمواصفات الملفات الشخصية التي تابعتَها حديثًا",
   "follow_suggestions.view_all": "عرض الكل",
   "follow_suggestions.who_to_follow": "حسابات للمُتابَعة",
   "followed_tags": "الوسوم المتابَعة",
@@ -360,8 +362,8 @@
   "interaction_modal.title.reply": "الرد على منشور {name}",
   "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
   "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
-  "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
-  "keyboard_shortcuts.back": "للعودة",
+  "intervals.full.minutes": "{number, plural, one {دقيقة واحدة}two {دقيقتان} other {# دقائق}}",
+  "keyboard_shortcuts.back": "للرجوع",
   "keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين",
   "keyboard_shortcuts.boost": "لإعادة النشر",
   "keyboard_shortcuts.column": "للتركيز على منشور على أحد الأعمدة",
@@ -421,7 +423,9 @@
   "loading_indicator.label": "جاري التحميل…",
   "media_gallery.toggle_visible": "{number, plural, zero {} one {اخف الصورة} two {اخف الصورتين} few {اخف الصور} many {اخف الصور} other {اخف الصور}}",
   "moved_to_account_banner.text": "حسابك {disabledAccount} معطل حاليًا لأنك انتقلت إلى {movedToAccount}.",
+  "mute_modal.hide_from_notifications": "إخفاء من قائمة الإشعارات",
   "mute_modal.hide_options": "إخفاء الخيارات",
+  "mute_modal.indefinite": "إلى أن أفسخ كتمها",
   "mute_modal.show_options": "إظهار الخيارات",
   "mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.",
   "mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.",
@@ -460,10 +464,20 @@
   "notification.follow": "يتابعك {name}",
   "notification.follow_request": "لقد طلب {name} متابعتك",
   "notification.mention": "{name} ذكرك",
+  "notification.moderation-warning.learn_more": "اعرف المزيد",
+  "notification.moderation_warning.action_disable": "تم تعطيل حسابك.",
+  "notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.",
+  "notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.",
+  "notification.moderation_warning.action_sensitive": "سيتم وضع علامة على منشوراتك على أنها حساسة من الآن فصاعدا.",
+  "notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.",
   "notification.own_poll": "انتهى استطلاعك للرأي",
   "notification.poll": "لقد انتهى استطلاع رأي شاركتَ فيه",
   "notification.reblog": "قام {name} بمشاركة منشورك",
+  "notification.relationships_severance_event": "فقدت الاتصالات مع {name}",
+  "notification.relationships_severance_event.account_suspension": "قام مشرف من {from} بتعليق {target}، مما يعني أنك لم يعد بإمكانك تلقي التحديثات منهم أو التفاعل معهم.",
+  "notification.relationships_severance_event.domain_block": "قام مشرف من {from} بحظر {target}، بما في ذلك {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.",
   "notification.relationships_severance_event.learn_more": "اعرف المزيد",
+  "notification.relationships_severance_event.user_domain_block": "لقد قمت بحظر {target}، مما أدى إلى إزالة {followersCount} من متابعينك و {followingCount, plural, one {# حساب} other {# حسابات}} تتابعها.",
   "notification.status": "{name} نشر للتو",
   "notification.update": "عدّلَ {name} منشورًا",
   "notification_requests.accept": "موافقة",
@@ -503,10 +517,15 @@
   "notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً",
   "notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً",
   "notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.",
+  "notifications.policy.filter_new_accounts.hint": "تم إنشاؤها منذ {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
   "notifications.policy.filter_new_accounts_title": "حسابات جديدة",
+  "notifications.policy.filter_not_followers_hint": "بما في ذلك الأشخاص الذين يتابعونك أقل من {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
   "notifications.policy.filter_not_followers_title": "أشخاص لا يتابعونك",
   "notifications.policy.filter_not_following_hint": "حتى توافق عليهم يدويا",
   "notifications.policy.filter_not_following_title": "أشخاص لا تتابعهم",
+  "notifications.policy.filter_private_mentions_hint": "تمت تصفيته إلا إذا أن يكون ردًا على ذكرك أو إذا كنت تتابع الحساب",
+  "notifications.policy.filter_private_mentions_title": "إشارات خاصة غير مرغوب فيها",
+  "notifications.policy.title": "تصفية الإشعارات من…",
   "notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
   "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
   "notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
@@ -687,6 +706,7 @@
   "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}",
   "status.embed": "إدماج",
   "status.favourite": "فضّل",
+  "status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}",
   "status.filter": "تصفية هذه الرسالة",
   "status.filtered": "مُصفّى",
   "status.hide": "إخفاء المنشور",
@@ -707,6 +727,7 @@
   "status.reblog": "إعادة النشر",
   "status.reblog_private": "إعادة النشر إلى الجمهور الأصلي",
   "status.reblogged_by": "شارَكَه {name}",
+  "status.reblogs": "{count, plural, one {تعزيز واحد} two {تعزيزتان} few {# تعزيزات} many {# تعزيزات} other {# تعزيزات}}",
   "status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
   "status.redraft": "إزالة وإعادة الصياغة",
   "status.remove_bookmark": "احذفه مِن الفواصل المرجعية",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 59d3d0965afd2a..577664107946a5 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -331,7 +331,7 @@
   "footer.source_code": "Quellcode anzeigen",
   "footer.status": "Status",
   "generic.saved": "Gespeichert",
-  "getting_started.heading": "Auf geht’s!",
+  "getting_started.heading": "Auf gehts!",
   "hashtag.column_header.tag_mode.all": "und {additional}",
   "hashtag.column_header.tag_mode.any": "oder {additional}",
   "hashtag.column_header.tag_mode.none": "ohne {additional}",
@@ -400,7 +400,7 @@
   "keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen",
   "keyboard_shortcuts.search": "Suchleiste fokussieren",
   "keyboard_shortcuts.spoilers": "Feld für Inhaltswarnung anzeigen/ausblenden",
-  "keyboard_shortcuts.start": "„Auf geht’s!“ öffnen",
+  "keyboard_shortcuts.start": "„Auf gehts!“ öffnen",
   "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden",
   "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden",
   "keyboard_shortcuts.toot": "Neuen Beitrag erstellen",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 83d2532e2c7fa4..798a16ebc089ba 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -578,6 +578,15 @@
   "notification.follow_request": "{name}さんがあなたにフォローリクエストしました",
   "notification.list_status": "{name}さんの投稿が{listName}に追加されました",
   "notification.mention": "{name}さんがあなたに返信しました",
+  "notification.moderation-warning.learn_more": "さらに詳しく",
+  "notification.moderation_warning": "あなたは管理者からの警告を受けています。",
+  "notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。",
+  "notification.moderation_warning.action_disable": "あなたのアカウントは無効になりました。",
+  "notification.moderation_warning.action_mark_statuses_as_sensitive": "あなたの投稿のいくつかは閲覧注意として判定されています。",
+  "notification.moderation_warning.action_none": "あなたのアカウントは管理者からの警告を受けています。",
+  "notification.moderation_warning.action_sensitive": "あなたの投稿はこれから閲覧注意としてマークされます。",
+  "notification.moderation_warning.action_silence": "あなたのアカウントは制限されています。",
+  "notification.moderation_warning.action_suspend": "あなたのアカウントは停止されました。",
   "notification.own_poll": "アンケートが終了しました",
   "notification.poll": "アンケートが終了しました",
   "notification.reblog": "{name}さんがあなたの投稿をブーストしました",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index ed4fa8dfaf7317..7806abc6b55fbb 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -308,6 +308,8 @@
   "follow_requests.unlocked_explanation": "Čeprav vaš račun ni zaklenjen, zaposleni pri {domain} menijo, da bi morda želeli pregledati zahteve za sledenje teh računov ročno.",
   "follow_suggestions.curated_suggestion": "Izbor osebja",
   "follow_suggestions.dismiss": "Ne pokaži več",
+  "follow_suggestions.featured_longer": "Osebno izbrala ekipa {domain}",
+  "follow_suggestions.friends_of_friends_longer": "Priljubljeno med osebami, ki jim sledite",
   "follow_suggestions.hints.featured": "Ta profil so izbrali skrbniki strežnika {domain}.",
   "follow_suggestions.hints.friends_of_friends": "Ta profil je priljubljen med osebami, ki jim sledite.",
   "follow_suggestions.hints.most_followed": "Ta profil na strežniku {domain} je en izmed najbolj sledenih.",
@@ -315,6 +317,8 @@
   "follow_suggestions.hints.similar_to_recently_followed": "Ta profil je podoben profilom, ki ste jim nedavno začeli slediti.",
   "follow_suggestions.personalized_suggestion": "Osebno prilagojen predlog",
   "follow_suggestions.popular_suggestion": "Priljubljen predlog",
+  "follow_suggestions.popular_suggestion_longer": "Priljubljeno na {domain}",
+  "follow_suggestions.similar_to_recently_followed_longer": "Podobno profilom, ki ste jim pred kratkim sledili",
   "follow_suggestions.view_all": "Pokaži vse",
   "follow_suggestions.who_to_follow": "Komu slediti",
   "followed_tags": "Sledeni ključniki",
@@ -469,6 +473,15 @@
   "notification.follow": "{name} vam sledi",
   "notification.follow_request": "{name} vam želi slediti",
   "notification.mention": "{name} vas je omenil/a",
+  "notification.moderation-warning.learn_more": "Več o tem",
+  "notification.moderation_warning": "Prejeli ste opozorilo moderatorjev",
+  "notification.moderation_warning.action_delete_statuses": "Nekatere vaše objave so odstranjene.",
+  "notification.moderation_warning.action_disable": "Vaš račun je bil onemogočen.",
+  "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nekatere vaše objave so bile označene kot občutljive.",
+  "notification.moderation_warning.action_none": "Vaš račun je prejel opozorilo moderatorjev.",
+  "notification.moderation_warning.action_sensitive": "Vaše objave bodo odslej označene kot občutljive.",
+  "notification.moderation_warning.action_silence": "Vaš račun je bil omejen.",
+  "notification.moderation_warning.action_suspend": "Vaš račun je bil suspendiran.",
   "notification.own_poll": "Vaša anketa je zaključena",
   "notification.poll": "Anketa, v kateri ste sodelovali, je zaključena",
   "notification.reblog": "{name} je izpostavila/a vašo objavo",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index da35b3d43ba57a..a25eab9cbfe66e 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -297,6 +297,7 @@
   "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re",
   "filter_modal.select_filter.title": "Filtroje këtë postim",
   "filter_modal.title.status": "Filtroni një postim",
+  "filtered_notifications_banner.mentions": "{count, plural, one {përmendje} other {përmendje}}",
   "filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
   "filtered_notifications_banner.title": "Njoftime të filtruar",
   "firehose.all": "Krejt",
@@ -307,6 +308,8 @@
   "follow_requests.unlocked_explanation": "Edhe pse llogaria juaj s’është e kyçur, ekipi i {domain} mendoi se mund të donit të shqyrtonit dorazi kërkesa ndjekjeje prej këtyre llogarive.",
   "follow_suggestions.curated_suggestion": "Zgjedhur nga ekipi",
   "follow_suggestions.dismiss": "Mos shfaq më",
+  "follow_suggestions.featured_longer": "Zgjedhur enkas nga ekipi {domain}",
+  "follow_suggestions.friends_of_friends_longer": "Popullore mes personash që ndiqni",
   "follow_suggestions.hints.featured": "Ky profil është zgjedhur nga ekipi {domain}.",
   "follow_suggestions.hints.friends_of_friends": "Ky profil është popullor mes personave që ndiqni.",
   "follow_suggestions.hints.most_followed": "Ky profil është një nga më të ndjekur në {domain}.",
@@ -314,6 +317,8 @@
   "follow_suggestions.hints.similar_to_recently_followed": "Ky profil është i ngjashëm me profile që keni ndjekur tani afër.",
   "follow_suggestions.personalized_suggestion": "Sugjerim i personalizuar",
   "follow_suggestions.popular_suggestion": "Sugjerim popullor",
+  "follow_suggestions.popular_suggestion_longer": "Popullore në {domain}",
+  "follow_suggestions.similar_to_recently_followed_longer": "I ngjashëm me profile që keni zënë të ndiqni së fundi",
   "follow_suggestions.view_all": "Shihni krejt",
   "follow_suggestions.who_to_follow": "Cilët të ndiqen",
   "followed_tags": "Hashtag-ë të ndjekur",
@@ -468,6 +473,15 @@
   "notification.follow": "{name} zuri t’ju ndjekë",
   "notification.follow_request": "{name} ka kërkuar t’ju ndjekë",
   "notification.mention": "{name} ju ka përmendur",
+  "notification.moderation-warning.learn_more": "Mësoni më tepër",
+  "notification.moderation_warning": "Keni marrë një sinjalizim moderimi",
+  "notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
+  "notification.moderation_warning.action_disable": "Llogaria juaj është çaktivizuar.",
+  "notification.moderation_warning.action_mark_statuses_as_sensitive": "Disa prej postimeve tuaja u është vënë shenjë si me spec.",
+  "notification.moderation_warning.action_none": "Llogaria juaj ka marrë një sinjalizim moderimi.",
+  "notification.moderation_warning.action_sensitive": "Postimeve tuaja do t’u vihet shenjë si me spec, nga tani e tutje.",
+  "notification.moderation_warning.action_silence": "Llogaria juaj është kufizuar.",
+  "notification.moderation_warning.action_suspend": "Llogaria juaj është pezulluar.",
   "notification.own_poll": "Pyetësori juaj ka përfunduar",
   "notification.poll": "Ka përfunduar një pyetësor ku keni votuar",
   "notification.reblog": "{name} përforcoi mesazhin tuaj",
diff --git a/app/lib/access_token_extension.rb b/app/lib/access_token_extension.rb
index f51bde492736ef..4e9585dd1e6583 100644
--- a/app/lib/access_token_extension.rb
+++ b/app/lib/access_token_extension.rb
@@ -6,6 +6,8 @@ module AccessTokenExtension
   included do
     include Redisable
 
+    has_many :web_push_subscriptions, class_name: 'Web::PushSubscription', inverse_of: :access_token
+
     after_commit :push_to_streaming_api
   end
 
diff --git a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb
index 1d2dbbe4146a86..65f444624e493b 100644
--- a/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb
+++ b/app/lib/admin/metrics/measure/instance_media_attachments_measure.rb
@@ -50,7 +50,7 @@ def sql_query_string
           WHERE date_trunc('day', media_attachments.created_at)::date = axis.period
             AND #{account_domain_sql(params[:include_subdomains])}
         )
-        SELECT COALESCE(SUM(size), 0) FROM new_media_attachments
+        SELECT COALESCE(SUM(size), 0)::bigint FROM new_media_attachments
       ) AS value
       FROM (
         SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period
diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb
index bec7d3a4550df4..07776c36991b56 100644
--- a/app/lib/link_details_extractor.rb
+++ b/app/lib/link_details_extractor.rb
@@ -282,6 +282,6 @@ def detector
   end
 
   def html_entities
-    @html_entities ||= HTMLEntities.new
+    @html_entities ||= HTMLEntities.new(:expanded)
   end
 end
diff --git a/app/models/account.rb b/app/models/account.rb
index a41dab4c152247..dd85767bc4e3a1 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -17,11 +17,9 @@
 #  url                           :string
 #  avatar_file_name              :string
 #  avatar_content_type           :string
-#  avatar_file_size              :integer
 #  avatar_updated_at             :datetime
 #  header_file_name              :string
 #  header_content_type           :string
-#  header_file_size              :integer
 #  header_updated_at             :datetime
 #  avatar_remote_url             :string
 #  locked                        :boolean          default(FALSE), not null
@@ -55,6 +53,8 @@
 #  indexable                     :boolean          default(FALSE), not null
 #  master_settings               :jsonb
 #  remote_pending                :boolean          default(FALSE), not null
+#  avatar_file_size              :bigint(8)
+#  header_file_size              :bigint(8)
 #
 
 class Account < ApplicationRecord
diff --git a/app/models/concerns/status/threading_concern.rb b/app/models/concerns/status/threading_concern.rb
index b33ea88893387d..9424d66f5e7f2b 100644
--- a/app/models/concerns/status/threading_concern.rb
+++ b/app/models/concerns/status/threading_concern.rb
@@ -3,6 +3,23 @@
 module Status::ThreadingConcern
   extend ActiveSupport::Concern
 
+  class_methods do
+    def permitted_statuses_from_ids(ids, account, stable: false)
+      statuses    = Status.with_accounts(ids).to_a
+      account_ids = statuses.map(&:account_id).uniq
+      domains     = statuses.filter_map(&:account_domain).uniq
+      relations   = account&.relations_map(account_ids, domains) || {}
+
+      statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
+
+      if stable
+        statuses.sort_by! { |status| ids.index(status.id) }
+      else
+        statuses
+      end
+    end
+  end
+
   def ancestors(limit, account = nil)
     find_statuses_from_tree_path(ancestor_ids(limit), account)
   end
@@ -85,15 +102,7 @@ def descendant_ids(limit, depth)
   end
 
   def find_statuses_from_tree_path(ids, account, promote: false)
-    statuses    = Status.with_accounts(ids).to_a
-    account_ids = statuses.map(&:account_id).uniq
-    domains     = statuses.filter_map(&:account_domain).uniq
-    relations   = account&.relations_map(account_ids, domains) || {}
-
-    statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
-
-    # Order ancestors/descendants by tree path
-    statuses.sort_by! { |status| ids.index(status.id) }
+    statuses = Status.permitted_statuses_from_ids(ids, account, stable: true)
 
     # Bring self-replies to the top
     if promote
diff --git a/app/models/concerns/user/ldap_authenticable.rb b/app/models/concerns/user/ldap_authenticable.rb
index 180df9d3101ebb..c8e9fa93484917 100644
--- a/app/models/concerns/user/ldap_authenticable.rb
+++ b/app/models/concerns/user/ldap_authenticable.rb
@@ -22,7 +22,7 @@ def ldap_get_user(attributes = {})
         safe_username = safe_username.gsub(keys, replacement)
       end
 
-      resource = joins(:account).find_by(accounts: { username: safe_username })
+      resource = joins(:account).merge(Account.where(Account.arel_table[:username].lower.eq safe_username.downcase)).take
 
       if resource.blank?
         resource = new(
diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb
index ffa48b777d85ed..bef804106fdef6 100644
--- a/app/models/custom_emoji.rb
+++ b/app/models/custom_emoji.rb
@@ -9,7 +9,6 @@
 #  domain                       :string
 #  image_file_name              :string
 #  image_content_type           :string
-#  image_file_size              :integer
 #  image_updated_at             :datetime
 #  created_at                   :datetime         not null
 #  updated_at                   :datetime         not null
@@ -24,6 +23,7 @@
 #  aliases                      :jsonb
 #  is_sensitive                 :boolean          default(FALSE), not null
 #  license                      :string
+#  image_file_size              :bigint(8)
 #
 
 class CustomEmoji < ApplicationRecord
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index c47bdc71e3228e..cbdd37654c313a 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -65,6 +65,8 @@ class Form::AdminSettings
     hold_remote_new_accounts
     stop_fetch_activity_domains
     stop_link_preview_domains
+    app_icon
+    favicon
   ).freeze
 
   INTEGER_KEYS = %i(
@@ -114,6 +116,8 @@ class Form::AdminSettings
   UPLOAD_KEYS = %i(
     thumbnail
     mascot
+    app_icon
+    favicon
   ).freeze
 
   OVERRIDEN_SETTINGS = {
diff --git a/app/models/import.rb b/app/models/import.rb
index 4bdb392014b70d..281b25a36e9d5f 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -11,10 +11,10 @@
 #  updated_at        :datetime         not null
 #  data_file_name    :string
 #  data_content_type :string
-#  data_file_size    :integer
 #  data_updated_at   :datetime
 #  account_id        :bigint(8)        not null
 #  overwrite         :boolean          default(FALSE), not null
+#  data_file_size    :bigint(8)
 #
 
 # NOTE: This is a deprecated model, only kept to not break ongoing imports
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 54dece0e7a5f50..668349389f279d 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -8,7 +8,6 @@
 #  status_id                   :bigint(8)
 #  file_file_name              :string
 #  file_content_type           :string
-#  file_file_size              :integer
 #  file_updated_at             :datetime
 #  remote_url                  :string           default(""), not null
 #  created_at                  :datetime         not null
@@ -24,9 +23,10 @@
 #  file_storage_schema_version :integer
 #  thumbnail_file_name         :string
 #  thumbnail_content_type      :string
-#  thumbnail_file_size         :integer
 #  thumbnail_updated_at        :datetime
 #  thumbnail_remote_url        :string
+#  file_file_size              :bigint(8)
+#  thumbnail_file_size         :bigint(8)
 #
 
 class MediaAttachment < ApplicationRecord
diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb
index 9fe02bd1681014..56b72b5e6fe87f 100644
--- a/app/models/preview_card.rb
+++ b/app/models/preview_card.rb
@@ -10,7 +10,6 @@
 #  description                  :string           default(""), not null
 #  image_file_name              :string
 #  image_content_type           :string
-#  image_file_size              :integer
 #  image_updated_at             :datetime
 #  type                         :integer          default("link"), not null
 #  html                         :text             default(""), not null
@@ -32,6 +31,7 @@
 #  link_type                    :integer
 #  published_at                 :datetime
 #  image_description            :string           default(""), not null
+#  image_file_size              :bigint(8)
 #
 
 class PreviewCard < ApplicationRecord
diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb
index 03d472cdb2e737..2b22e13e400cdf 100644
--- a/app/models/site_upload.rb
+++ b/app/models/site_upload.rb
@@ -8,18 +8,26 @@
 #  var               :string           default(""), not null
 #  file_file_name    :string
 #  file_content_type :string
-#  file_file_size    :integer
 #  file_updated_at   :datetime
 #  meta              :json
 #  created_at        :datetime         not null
 #  updated_at        :datetime         not null
 #  blurhash          :string
+#  file_file_size    :bigint(8)
 #
 
 class SiteUpload < ApplicationRecord
   include Attachmentable
 
+  FAVICON_SIZES = [16, 32, 48].freeze
+  APPLE_ICON_SIZES   = [57, 60, 72, 76, 114, 120, 144, 152, 167, 180, 1024].freeze
+  ANDROID_ICON_SIZES = [36, 48, 72, 96, 144, 192, 256, 384, 512].freeze
+
+  APP_ICON_SIZES = (APPLE_ICON_SIZES + ANDROID_ICON_SIZES).uniq.freeze
+
   STYLES = {
+    app_icon: APP_ICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze,
+    favicon: FAVICON_SIZES.each_with_object({}) { |size, hash| hash[size.to_s.to_sym] = "#{size}x#{size}#" }.freeze,
     thumbnail: {
       '@1x': {
         format: 'png',
diff --git a/app/models/status.rb b/app/models/status.rb
index d56e80eca30a79..d9f436c1bf4dfd 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -336,7 +336,7 @@ def non_sensitive_with_media?
   end
 
   def reported?
-    @reported ||= Report.where(target_account: account).unresolved.exists?(['? = ANY(status_ids)', id])
+    @reported ||= account.targeted_reports.unresolved.exists?(['? = ANY(status_ids)', id]) || account.strikes.exists?(['? = ANY(status_ids)', id.to_s])
   end
 
   def dtl?
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 64a75fe1116627..9ea710f3b814b9 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -39,7 +39,7 @@ class Tag < ApplicationRecord
   HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
   HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}"
 
-  HASHTAG_RE = %r{(?<![=/)\w])#(#{HASHTAG_NAME_PAT})}i
+  HASHTAG_RE = %r{(?<![=/)\p{Alnum}])#(#{HASHTAG_NAME_PAT})}i
   HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
   HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]\u0E47-\u0E4E#{HASHTAG_SEPARATORS}]/
 
diff --git a/app/presenters/oauth_metadata_presenter.rb b/app/presenters/oauth_metadata_presenter.rb
new file mode 100644
index 00000000000000..546503bfcca22e
--- /dev/null
+++ b/app/presenters/oauth_metadata_presenter.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+
+class OauthMetadataPresenter < ActiveModelSerializers::Model
+  include RoutingHelper
+
+  attributes :issuer, :authorization_endpoint, :token_endpoint,
+             :revocation_endpoint, :scopes_supported,
+             :response_types_supported, :response_modes_supported,
+             :grant_types_supported, :token_endpoint_auth_methods_supported,
+             :service_documentation, :app_registration_endpoint
+
+  def issuer
+    root_url
+  end
+
+  def service_documentation
+    'https://docs.joinmastodon.org/'
+  end
+
+  def authorization_endpoint
+    oauth_authorization_url
+  end
+
+  def token_endpoint
+    oauth_token_url
+  end
+
+  # As the api_v1_apps route doesn't technically conform to the specification
+  # for OAuth 2.0 Dynamic Client Registration defined in RFC 7591 we use a
+  # non-standard property for now to indicate the mastodon specific registration
+  # endpoint. See: https://datatracker.ietf.org/doc/html/rfc7591
+  def app_registration_endpoint
+    api_v1_apps_url
+  end
+
+  def revocation_endpoint
+    oauth_revoke_url
+  end
+
+  def scopes_supported
+    doorkeeper.scopes
+  end
+
+  def response_types_supported
+    doorkeeper.authorization_response_types
+  end
+
+  def response_modes_supported
+    doorkeeper.authorization_response_flows.flat_map(&:response_mode_matches).uniq
+  end
+
+  def grant_types_supported
+    grant_types_supported = doorkeeper.grant_flows.dup
+    grant_types_supported << 'refresh_token' if doorkeeper.refresh_token_enabled?
+    grant_types_supported
+  end
+
+  def token_endpoint_auth_methods_supported
+    %w(client_secret_basic client_secret_post)
+  end
+
+  private
+
+  def doorkeeper
+    @doorkeeper ||= Doorkeeper.configuration
+  end
+end
diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb
index 1c1f7d0ad534a3..759490228c04bf 100644
--- a/app/serializers/manifest_serializer.rb
+++ b/app/serializers/manifest_serializer.rb
@@ -1,21 +1,10 @@
 # frozen_string_literal: true
 
 class ManifestSerializer < ActiveModel::Serializer
+  include ApplicationHelper
   include RoutingHelper
   include ActionView::Helpers::TextHelper
 
-  ICON_SIZES = %w(
-    36
-    48
-    72
-    96
-    144
-    192
-    256
-    384
-    512
-  ).freeze
-
   attributes :id, :name, :short_name,
              :icons, :theme_color, :background_color,
              :display, :start_url, :scope,
@@ -37,9 +26,12 @@ def short_name
   end
 
   def icons
-    ICON_SIZES.map do |size|
+    SiteUpload::ANDROID_ICON_SIZES.map do |size|
+      src = site_icon_path('app_icon', size.to_i)
+      src = URI.join(root_url, src).to_s if src.present?
+
       {
-        src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
+        src: src || frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
         sizes: "#{size}x#{size}",
         type: 'image/png',
         purpose: 'any maskable',
diff --git a/app/serializers/oauth_metadata_serializer.rb b/app/serializers/oauth_metadata_serializer.rb
new file mode 100644
index 00000000000000..5f3dc7b87e2e05
--- /dev/null
+++ b/app/serializers/oauth_metadata_serializer.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class OauthMetadataSerializer < ActiveModel::Serializer
+  attributes :issuer, :authorization_endpoint, :token_endpoint,
+             :revocation_endpoint, :scopes_supported,
+             :response_types_supported, :response_modes_supported,
+             :grant_types_supported, :token_endpoint_auth_methods_supported,
+             :service_documentation, :app_registration_endpoint
+end
diff --git a/app/views/admin/settings/branding/show.html.haml b/app/views/admin/settings/branding/show.html.haml
index 769c0dafe81d5f..71aac5ead1c1f0 100644
--- a/app/views/admin/settings/branding/show.html.haml
+++ b/app/views/admin/settings/branding/show.html.haml
@@ -40,5 +40,33 @@
           = fa_icon 'trash fw'
           = t('admin.site_uploads.delete')
 
+  .fields-row
+    .fields-row__column.fields-row__column-6.fields-group
+      = f.input :favicon,
+                as: :file,
+                input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') },
+                wrapper: :with_block_label
+
+    .fields-row__column.fields-row__column-6.fields-group
+      - if @admin_settings.favicon.persisted?
+        = image_tag @admin_settings.favicon.file.url('48'), class: 'fields-group__thumbnail'
+        = link_to admin_site_upload_path(@admin_settings.favicon), data: { method: :delete }, class: 'link-button link-button--destructive' do
+          = fa_icon 'trash fw'
+          = t('admin.site_uploads.delete')
+
+  .fields-row
+    .fields-row__column.fields-row__column-6.fields-group
+      = f.input :app_icon,
+                as: :file,
+                input_html: { accept: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].join(',') },
+                wrapper: :with_block_label
+
+    .fields-row__column.fields-row__column-6.fields-group
+      - if @admin_settings.app_icon.persisted?
+        = image_tag @admin_settings.app_icon.file.url('48'), class: 'fields-group__thumbnail'
+        = link_to admin_site_upload_path(@admin_settings.app_icon), data: { method: :delete }, class: 'link-button link-button--destructive' do
+          = fa_icon 'trash fw'
+          = t('admin.site_uploads.delete')
+
   .actions
     = f.button :button, t('generic.save_changes'), type: :submit
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index 9d7669d685124a..56857b2b635c14 100755
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -11,13 +11,13 @@
     - if storage_host?
       %link{ rel: 'dns-prefetch', href: storage_host }/
 
-    %link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/
+    %link{ rel: 'icon', href: site_icon_path('favicon') || '/favicon.ico', type: 'image/x-icon' }/
 
-    - %w(16 32 48).each do |size|
-      %link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
+    - SiteUpload::FAVICON_SIZES.each do |size|
+      %link{ rel: 'icon', sizes: "#{size}x#{size}", href: site_icon_path('favicon', size.to_i) || frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
 
-    - %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size|
-      %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
+    - SiteUpload::APPLE_ICON_SIZES.each do |size|
+      %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: site_icon_path('app_icon', size.to_i) || frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
 
     %link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/
     %link{ rel: 'manifest', href: manifest_path(format: :json) }/
diff --git a/config/initializers/active_record_encryption.rb b/config/initializers/active_record_encryption.rb
index f99585b4ada6eb..7cda8c621c2b69 100644
--- a/config/initializers/active_record_encryption.rb
+++ b/config/initializers/active_record_encryption.rb
@@ -6,9 +6,9 @@
   ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
 ).each do |key|
   ENV.fetch(key) do
-    raise <<~MESSAGE
+    abort <<~MESSAGE
 
-      The ActiveRecord encryption feature requires that these variables are set:
+      Mastodon now requires that these variables are set:
 
         - ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
         - ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 93a0720b8a51f5..02ba56d0b23213 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -804,6 +804,7 @@ ar:
         desc_html: ويعتمد هذا على نصوص برمجية خارجية من hCaptcha، والتي قد تكون مصدر قلق يتعلق بالأمان والخصوصية. بالإضافة إلى ذلك، <strong>قد يؤدي ذلك إلى جعل عملية التسجيل أقل سهولة بالنسبة لبعض الأشخاص (وخاصة المعاقين)</strong>. لهذه الأسباب، يرجى النظر في تدابير بديلة مثل التسجيل على أساس الموافقة أو على أساس الدعوة.
         title: مطالبة المستخدمين الجدد بحل اختبار CAPTCHA لتأكيد حساباتهم
       content_retention:
+        danger_zone: منطقة خطرة
         preamble: التحكم في كيفية تخزين المحتوى الذي ينشئه المستخدم في ماستدون.
         title: الاحتفاظ بالمحتوى
       default_noindex:
diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml
index 6c89f4c6d4f189..56875078188301 100644
--- a/config/locales/devise.ia.yml
+++ b/config/locales/devise.ia.yml
@@ -23,8 +23,11 @@ ia:
         action_with_app: Confirmar e retornar a %{app}
         title: Verificar adresse de e-mail
       email_changed:
+        explanation: 'Le adresse de e-mail pro tu conto essera cambiate a:'
+        subject: 'Mastodon: E-mail cambiate'
         title: Nove adresse de e-mail
       password_change:
+        explanation: Le contrasigno de tu conto ha essite cambiate.
         subject: 'Mastodon: Contrasigno cambiate'
         title: Contrasigno cambiate
       reconfirmation_instructions:
diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml
index fd7d7a08367fbf..86bd1ad9853ca2 100644
--- a/config/locales/doorkeeper.ia.yml
+++ b/config/locales/doorkeeper.ia.yml
@@ -17,6 +17,7 @@ ia:
         authorize: Autorisar
         cancel: Cancellar
         edit: Modificar
+        submit: Submitter
       confirmations:
         destroy: Es tu secur?
       edit:
diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml
index 308a5429a6da88..793819c597419e 100644
--- a/config/locales/doorkeeper.sq.yml
+++ b/config/locales/doorkeeper.sq.yml
@@ -174,6 +174,7 @@ sq:
       read:filters: të shohë filtrat tuaj
       read:follows: të shohë ndjekësit tuaj
       read:lists: të shohë listat tuaja
+      read:me: të shohë vetëm hollësi elementare të llogarisë tuaj
       read:mutes: të shohë ç’keni heshtuar
       read:notifications: të shohë njoftimet tuaja
       read:reports: të shohë raportimet tuaja
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index ff7b47c1febd59..85d7c0ed859592 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -106,6 +106,9 @@ ia:
       pending: Attende revision
       perform_full_suspension: Suspender
       previous_strikes: Previe admonitiones
+      previous_strikes_description_html:
+        one: Iste conto ha <strong>un</strong> admonition.
+        other: Iste conto ha <strong>%{count}</strong> admonitiones.
       promote: Promover
       protocol: Protocollo
       public: Public
@@ -159,70 +162,187 @@ ia:
       undo_suspension: Disfacer le suspension
       unsilenced_msg: Le limite del conto de %{username} ha essite cancellate
       unsubscribe: Desubscriber
+      unsuspended_msg: Le suspension del conto %{username} ha essite annullate
       username: Nomine de usator
       view_domain: Vider summario de dominio
-      warn: Avisar
+      warn: Advertir
       web: Web
+      whitelisted: Permittite pro federation
     action_logs:
       action_types:
+        approve_appeal: Approbar appello
+        approve_user: Approbar usator
+        assigned_to_self_report: Assignar reporto
         change_email_user: Cambiar e-mail pro le usator
         change_role_user: Cambiar le rolo del usator
         confirm_user: Confirmar le usator
         create_account_warning: Crear un advertimento
         create_announcement: Crear annuncio
+        create_canonical_email_block: Crear blocada de email
+        create_custom_emoji: Crear emoticone personalisate
+        create_domain_allow: Crear permisso de dominio
+        create_domain_block: Crear blocada de dominio
+        create_email_domain_block: Crear blocada de dominio email
         create_ip_block: Crear un regula IP
+        create_unavailable_domain: Crear dominio indisponibile
         create_user_role: Crear un rolo
+        demote_user: Degradar usator
         destroy_announcement: Deler annuncio
+        destroy_canonical_email_block: Deler blocada de email
+        destroy_custom_emoji: Deler emoticone personalisate
+        destroy_domain_allow: Deler permisso de dominio
+        destroy_domain_block: Deler blocada de dominio
+        destroy_email_domain_block: Crear blocada de dominio email
+        destroy_instance: Purgar dominio
         destroy_ip_block: Deler le regula IP
         destroy_status: Deler le message
         destroy_unavailable_domain: Deler le dominio non disponibile
+        destroy_user_role: Destruer rolo
         disable_2fa_user: Disactivar 2FA
         disable_custom_emoji: Disactivar emoji personalisate
+        disable_sign_in_token_auth_user: Disactivar le authentication per testimonio via email pro usator
         disable_user: Disactivar le usator
         enable_custom_emoji: Activar emoji personalisate
+        enable_sign_in_token_auth_user: Activar le authentication per testimonio via email pro usator
         enable_user: Activar le usator
+        memorialize_account: Commemorar conto
         promote_user: Promover usator
+        reject_appeal: Rejectar appello
+        reject_user: Rejectar usator
+        remove_avatar_user: Remover avatar
+        reopen_report: Reaperir reporto
         resend_user: Reinviar message de confirmation
         reset_password_user: Reinitialisar contrasigno
+        resolve_report: Resolver reporto
+        sensitive_account: Marcar como sensibile le medios del conto
         silence_account: Limitar conto
+        suspend_account: Suspender conto
+        unassigned_report: Disassignar reporto
         unblock_email_account: Disblocar adresse de e-mail
+        unsensitive_account: Dismarcar como sensibile le medios del conto
         unsilence_account: Disfacer le limite de conto
+        unsuspend_account: Annullar suspension de conto
         update_announcement: Actualisar annuncio
         update_custom_emoji: Actualisar emoji personalisate
+        update_domain_block: Actualisar blocada de dominio
         update_ip_block: Actualisar le regula IP
         update_status: Actualisar le message
         update_user_role: Actualisar rolo
       actions:
+        approve_appeal_html: "%{name} approbava appello del decision de moderation de %{target}"
+        approve_user_html: "%{name} approbava inscription de %{target}"
+        assigned_to_self_report_html: "%{name} assignava reporto %{target} a se mesme"
         change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}"
+        change_role_user_html: "%{name} cambiava rolo de %{target}"
+        confirm_user_html: "%{name} confirmava le adresse email del usator %{target}"
+        create_account_warning_html: "%{name} inviava un advertimento a %{target}"
         create_announcement_html: "%{name} creava un nove annuncio %{target}"
+        create_canonical_email_block_html: "%{name} blocava email con le hash %{target}"
+        create_custom_emoji_html: "%{name} cargava nove emoticone %{target}"
+        create_domain_allow_html: "%{name} permitteva federation con dominio %{target}"
+        create_domain_block_html: "%{name} blocava dominio %{target}"
+        create_email_domain_block_html: "%{name} blocava dominio email %{target}"
+        create_ip_block_html: "%{name} creava regula pro IP %{target}"
+        create_unavailable_domain_html: "%{name} stoppava consignation a dominio %{target}"
+        create_user_role_html: "%{name} creava rolo de %{target}"
+        demote_user_html: "%{name} degradava usator %{target}"
+        destroy_announcement_html: "%{name} deleva annuncio %{target}"
+        destroy_canonical_email_block_html: "%{name} disblocava email con le hash %{target}"
+        destroy_custom_emoji_html: "%{name} deleva emoji %{target}"
+        destroy_domain_allow_html: "%{name} impediva le federation con dominio %{target}"
+        destroy_domain_block_html: "%{name} disblocava dominio %{target}"
+        destroy_email_domain_block_html: "%{name} disblocava le dominio email %{target}"
+        destroy_instance_html: "%{name} purgava le dominio %{target}"
+        destroy_ip_block_html: "%{name} deleva le regula pro IP %{target}"
+        destroy_status_html: "%{name} removeva le message de %{target}"
+        destroy_unavailable_domain_html: "%{name} resumeva le consignation al dominio %{target}"
+        destroy_user_role_html: "%{name} deleva le rolo de %{target}"
+        disable_2fa_user_html: "%{name} disactivava le authentication a duo factores pro le usator %{target}"
+        disable_custom_emoji_html: "%{name} disactivava le emoticone %{target}"
+        disable_sign_in_token_auth_user_html: "%{name} disactivava authentication per testimonio via email pro %{target}"
+        disable_user_html: "%{name} disactivava le accesso pro le usator %{target}"
+        enable_custom_emoji_html: "%{name} activava le emoticone %{target}"
+        enable_sign_in_token_auth_user_html: "%{name} activava le authentication per testimonio via email pro %{target}"
+        enable_user_html: "%{name} activava le accesso pro le usator %{target}"
+        memorialize_account_html: "%{name} mutava le conto de %{target} in un pagina commemorative"
+        promote_user_html: "%{name} promoveva le usator %{target}"
+        reject_appeal_html: "%{name} refusava le appello del decision de moderation de %{target}"
+        reject_user_html: "%{name} refusava le inscription de %{target}"
+        remove_avatar_user_html: "%{name} removeva le avatar de %{target}"
+        reopen_report_html: "%{name} reaperiva le reporto %{target}"
+        resend_user_html: "%{name} reinviava le email de confirmation pro %{target}"
+        reset_password_user_html: "%{name} reinitialisava le contrasigno del usator %{target}"
+        resolve_report_html: "%{name} resolveva le reporto %{target}"
+        sensitive_account_html: "%{name} marcava como sensibile le medios de %{target}"
+        silence_account_html: "%{name} limitava le conto de %{target}"
+        suspend_account_html: "%{name} suspendeva le conto de %{target}"
+        unassigned_report_html: "%{name} de-assignava le reporto %{target}"
+        unblock_email_account_html: "%{name} disblocava le adresse email de %{target}"
+        unsensitive_account_html: "%{name} dismarcava como sensibile le medios de %{target}"
+        unsilence_account_html: "%{name} removeva le limite del conto de %{target}"
+        unsuspend_account_html: "%{name} removeva le suspension del conto de %{target}"
+        update_announcement_html: "%{name} actualisava le annuncio %{target}"
+        update_custom_emoji_html: "%{name} actualisava le emoticone %{target}"
+        update_domain_block_html: "%{name} actualisava le blocada de dominio pro %{target}"
+        update_ip_block_html: "%{name} cambiava le regula pro IP %{target}"
+        update_status_html: "%{name} actualisava le message per %{target}"
+        update_user_role_html: "%{name} cambiava le rolo de %{target}"
       deleted_account: conto delite
+      empty: Nulle registrationes trovate.
+      filter_by_action: Filtrar per action
+      filter_by_user: Filtrar per usator
+      title: Registro de inspection
     announcements:
       destroyed_msg: Annuncio delite con successo!
       edit:
         title: Modificar annuncio
       empty: Necun annuncios trovate.
+      live: Al vivo
       new:
         create: Crear annuncio
         title: Nove annuncio
       publish: Publicar
       published_msg: Annuncio publicate con successo!
+      scheduled_for: Programmate pro %{time}
+      scheduled_msg: Annuncio programmate pro le publication!
       title: Annuncios
+      unpublish: Depublicar
+      unpublished_msg: Le publication del annuncio ha essite disfacite!
+      updated_msg: Annuncio actualisate con successo!
+    critical_update_pending: Actualisation critic pendente
     custom_emojis:
+      assign_category: Assignar categoria
       by_domain: Dominio
       copied_msg: Copia local del emoji create con successo
       copy: Copiar
+      copy_failed_msg: Impossibile crear un copia local de ille emoticone
       create_new_category: Crear nove categoria
       created_msg: Emoji create con successo!
       delete: Deler
+      destroyed_msg: Emoticone destruite con successo destroyed!
       disable: Disactivar
       disabled: Disactivate
       disabled_msg: Emoji disactivate con successo
+      emoji: Emoticone
       enable: Activar
       enabled: Activate
       enabled_msg: Emoji activate con successo
+      image_hint: PNG o GIF usque %{size}
+      list: Listar
+      listed: Listate
       new:
         title: Adder nove emoji personalisate
+      no_emoji_selected: Nulle emoticones ha essite cambiate perque nulle ha essite seligite
+      not_permitted: Tu non es autorisate a exequer iste action
+      overwrite: Superscriber
+      shortcode: Via breve
+      shortcode_hint: Al minus 2 characteres, solo characteres alphanumeric e lineettas basse
       title: Emojis personalisate
+      uncategorized: Sin categoria
+      unlist: Non listar
+      unlisted: Non listate
+      update_failed_msg: Impossibile actualisar ille emoticone
+      updated_msg: Emoticone actualisate con successo!
       upload: Incargar
     dashboard:
       active_users: usatores active
@@ -230,71 +350,180 @@ ia:
       media_storage: Immagazinage de medios
       new_users: nove usatores
       opened_reports: reportos aperte
+      resolved_reports: reportos resolvite
       software: Software
+      sources: Fontes de inscription
+      space: Uso de spatio
+      title: Pannello de controlo
       top_languages: Linguas le plus active
       top_servers: Servitores le plus active
       website: Sito web
+    disputes:
+      appeals:
+        empty: Nulle appellos trovate.
+        title: Appellos
     domain_allows:
       add_new: Permitter federation con dominio
+      created_msg: Le dominio ha essite permittite con successo pro federation
+      destroyed_msg: Le dominio ha essite prohibite pro federation
       export: Exportar
       import: Importar
+      undo: Prohiber federation con dominio
     domain_blocks:
+      add_new: Adder nove blocada de dominio
       confirm_suspension:
         cancel: Cancellar
+        confirm: Suspender
+        permanent_action: Disfacer le suspension non restaurara alcun datos o relation.
+        preamble_html: Tu es sur le puncto de suspender <strong>%{domain}</strong> e su subdominios.
+        remove_all_data: Isto removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio.
         stop_communication: Tu servitor stoppara le communication con iste servitores.
+        title: Confirmar le blocada del dominio %{domain}
+        undo_relationships: Isto disfacera omne relation de sequimento inter le contos de iste servitores e illos del tue.
+      created_msg: Le blocada del dominio es ora in tractamento
+      destroyed_msg: Le blocada del dominio ha essite disfacite
       domain: Dominio
-      edit: Modificar un bloco de dominio
+      edit: Modificar un blocada de dominio
+      existing_domain_block: Tu ha ja imponite limites plus stricte sur %{name}.
+      existing_domain_block_html: Tu ha ja imponite limites plus stricte sur %{name}; ora es necessari <a href="%{unblock_url}">disblocar lo</a> primo.
       export: Exportar
       import: Importar
       new:
+        create: Crear blocada
+        hint: Le blocada del dominio non impedira le creation de entratas de conto in le base de datos, ma applicara retroactive- e automaticamente le methodos specific de moderation a iste contos.
         severity:
+          desc_html: "<strong>Limitar</strong> rendera le messages del contos de iste dominio invisibile pro tote persona que non los seque. <strong>Suspender</strong> removera de tu servitor tote le contento, multimedia e datos de profilo del contos de iste dominio. Usa <strong>Necun</strong> si tu solmente vole rejectar le files multimedial."
+          noop: Nemo
           silence: Limitar
           suspend: Suspender
+        title: Nove blocada de dominio
+      no_domain_block_selected: Necun blocada de dominio ha essite cambiate perque necun ha essite seligite
+      not_permitted: Tu non es autorisate a exequer iste action
+      obfuscate: Offuscar le nomine de dominio
+      obfuscate_hint: Offuscar partialmente le nomine de dominio in le lista si le diffusion del lista de limitationes del dominio es activate
       private_comment: Commento private
+      private_comment_hint: Commentar iste limitation de dominio pro uso interne per le moderatores.
       public_comment: Commento public
+      public_comment_hint: Commentar iste limitation de dominio pro le publico general, si le diffusion del lista de limitationes del dominio es activate.
+      reject_media: Refusar files multimedial
+      reject_media_hint: Remove le files multimedial immagazinate localmente e refusa de discargar tales in futuro. Irrelevante pro le suspensiones
+      reject_reports: Refusar reportos
+      reject_reports_hint: Ignorar tote le reportos proveniente de iste dominio. Irrelevante pro le suspensiones
+      undo: Disfacer blocada de dominio
+      view: Examinar blocada de dominio
     email_domain_blocks:
       add_new: Adder nove
+      allow_registrations_with_approval: Permitter inscriptiones con approbation
+      attempts_over_week:
+        one: "%{count} tentativa de inscription in le ultime septimana"
+        other: "%{count} tentativas de inscription in le ultime septimana"
+      created_msg: Le dominio de e-mail ha essite blocate
       delete: Deler
+      dns:
+        types:
+          mx: Registro MX
       domain: Dominio
       new:
         create: Adder un dominio
+        resolve: Resolver dominio
         title: Blocar un nove dominio de e-mail
+      no_email_domain_block_selected: Necun blocadas de dominio de e-mail ha essite cambiate perque necun ha essite seligite
+      not_permitted: Non permittite
+      resolved_dns_records_hint_html: Le nomine de dominio se resolve al sequente dominios MX, le quales ha le ultime responsibilitate pro le reception de e-mail. Blocar un dominio MX blocara le inscriptiones de qualcunque adresse de e-mail que usa le mesme dominio MX, mesmo si le nomine de dominio visibile es differente. <strong>Presta attention a evitar de blocar le grande fornitores de e-mail.</strong>
+      resolved_through_html: Resolvite per %{domain}
       title: Dominios de e-mail blocate
     export_domain_allows:
+      new:
+        title: Importar permissiones de dominio
       no_file: Necun file seligite
     export_domain_blocks:
+      import:
+        description_html: Tu es sur le puncto de importar un lista de blocadas de dominio. Per favor revide con grande cura iste lista, particularmente si tu non lo ha scribite tu mesme.
+        existing_relationships_warning: Relationes existente de sequimento
+        private_comment_description_html: 'Pro adjutar te a traciar de ubi proveni le blocadas importate, le blocadas importate essera create con le sequente commento private: <q>%{comment}</q>'
+        private_comment_template: Importate de %{source} le %{date}
+        title: Importar blocadas de dominio
+      invalid_domain_block: 'Un o plus blocadas de dominio ha essite saltate a causa del sequente error(es): %{error}'
+      new:
+        title: Importar blocadas de dominio
       no_file: Necun file seligite
     follow_recommendations:
+      description_html: "<strong>Le recommendationes de sequimento adjuta le nove usatores a trovar rapidemente contento interessante.</strong> Quando un usator non ha un historia sufficiente de interactiones con alteres pro formar recommendationes personalisate de sequimento, iste contos es recommendate. Illos se recalcula cata die a partir de un mixtura de contos con le plus grande numero de ingagiamentos recente e le numero de sequitores local le plus alte pro un lingua date."
       language: Per lingua
       status: Stato
+      suppress: Supprimer recommendation de sequimento
+      suppressed: Supprimite
       title: Sequer le recommendationes
+      unsuppress: Restaurar recommendation de sequimento
     instances:
+      availability:
+        description_html:
+          one: Si le livration al dominio falle <strong>%{count} die</strong> sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration <em>ab</em> le dominio.
+          other: Si le livration al dominio falle durante <strong>%{count} dies differente</strong> sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration <em>ab</em> le dominio.
+        failure_threshold_reached: Limine de fallimentos attingite le %{date}.
+        failures_recorded:
+          one: Tentativa fallite durante %{count} die.
+          other: Tentativa fallite durante %{count} dies differente.
+        no_failures_recorded: Necun fallimento cognoscite.
+        title: Disponibilitate
+        warning: Le ultime tentativa de connexion a iste servitor non ha succedite
       back_to_all: Toto
       back_to_limited: Limitate
       back_to_warning: Advertimento
       by_domain: Dominio
+      confirm_purge: Es tu secur que tu vole deler permanentemente le datos de iste dominio?
       content_policies:
         comment: Nota interne
+        description_html: Tu pote definir politicas de contento que se applicara a tote le contos de iste dominio e a qualcunque de su subdominios.
+        limited_federation_mode_description_html: Tu pote decider si permitter le federation con iste dominio.
         policies:
+          reject_media: Rejectar multimedia
+          reject_reports: Rejectar reportos
           silence: Limitar
           suspend: Suspender
         policy: Politica
         reason: Ration public
+        title: Politicas de contento
       dashboard:
         instance_accounts_dimension: Contos le plus sequite
+        instance_accounts_measure: contos immagazinate
+        instance_followers_measure: nostre sequitores illac
+        instance_follows_measure: lor sequitores hic
         instance_languages_dimension: Linguas principal
+        instance_media_attachments_measure: annexos multimedial immagazinate
+        instance_reports_measure: signalationes sur illos
+        instance_statuses_measure: messages immagazinate
       delivery:
+        all: Totes
+        clear: Rader errores de livration
+        failing: Fallente
+        restart: Recomenciar livration
+        stop: Cessar livration
         unavailable: Non disponibile
+      delivery_available: Livration es disponibile
+      delivery_error_days: Dies de errores de livration
+      delivery_error_hint: Si le livration non es possibile durante %{count} dies, illo essera automaticamente marcate como non livrabile.
+      destroyed_msg: Le datos de %{domain} es ora in cauda pro deletion imminente.
       empty: Necun dominios trovate.
+      known_accounts:
+        one: "%{count} conto cognoscite"
+        other: "%{count} contos cognoscite"
       moderation:
         all: Toto
         limited: Limitate
         title: Moderation
       private_comment: Commento private
       public_comment: Commento public
+      purge: Purgar
+      purge_description_html: Si tu crede que iste dominio es foras de linea pro sempre, tu pote deler de tu immagazinage tote le registros del conto e le datos associate de iste dominio. Isto pote prender un tempore.
       title: Federation
       total_blocked_by_us: Blocate per nos
+      total_followed_by_them: Sequite per illes
       total_followed_by_us: Sequite per nos
+      total_reported: Signalationes sur illes
+      total_storage: Annexos multimedial
+      totals_time_period_hint_html: Le totales monstrate hic infra include le datos de tote le tempore.
+      unknown_instance: Iste dominio non es actualmente cognoscite sur iste servitor.
     invites:
       deactivate_all: Disactivar toto
       filter:
@@ -305,6 +534,7 @@ ia:
       title: Invitationes
     ip_blocks:
       add_new: Crear regula
+      created_msg: Le nove regula IP ha essite addite
       delete: Deler
       expires_in:
         '1209600': 2 septimanas
@@ -315,8 +545,12 @@ ia:
         '94670856': 3 annos
       new:
         title: Crear un nove regula IP
+      no_ip_block_selected: Necun regula IP ha essite cambiate perque necun ha essite seligite
       title: Regulas IP
+    relationships:
+      title: Relationes de %{acct}
     relays:
+      add_new: Adder nove repetitor
       delete: Deler
       description_html: Un <strong>repetitor de federation</strong> es un servitor intermediari que excambia grande volumines de messages public inter le servitores que se inscribe e publica a illo. <strong>Illo pote adjutar le servitores micre e medie a discoperir le contento del fediverso</strong>, sin requirer que le usatores local seque manualmente altere personas sur servitores distante.
       disable: Disactivar
@@ -324,59 +558,212 @@ ia:
       enable: Activar
       enable_hint: Un vice activate, tu servitor se inscribera a tote le messages public de iste repetitor, e comenciara a inviar le messages public de iste servitor a illo.
       enabled: Activate
+      inbox_url: URL del repetitor
+      pending: Attende le approbation del repetitor
       save_and_enable: Salveguardar e activar
+      setup: Crear un connexion con un repetitor
+      signatures_not_enabled: Le repetitores pote non functionar correctemente durante que le modo secur o le modo de federation limitate es activate
       status: Stato
+      title: Repetitores
+    report_notes:
+      created_msg: Nota de signalation create con successo!
+      destroyed_msg: Nota de signalation delite con successo!
     reports:
+      account:
+        notes:
+          one: "%{count} nota"
+          other: "%{count} notas"
+      action_log: Registro de inspection
+      action_taken_by: Action prendite per
+      actions:
+        delete_description_html: Le messages signalate essera delite e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto.
+        mark_as_sensitive_description_html: Le files multimedial in le messages reportate essera marcate como sensibile e un admonition essera registrate pro adjutar te a prender mesuras in caso de futur infractiones proveniente del mesme conto.
+        other_description_html: Vider plus optiones pro controlar le comportamento del conto e personalisar le communication al conto signalate.
+        resolve_description_html: Necun action essera prendite contra le conto signalate, necun admonition registrate, e le signalation essera claudite.
+        silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le signalationes contra iste conto.
+        suspend_description_html: Le conto e tote su contento essera inaccessible e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le signalationes contra iste conto.
+      actions_description_html: Decide qual action prender pro resolver iste signalation. Si tu prende un action punitive contra le conto signalate, le persona recipera un notification in e-mail, excepte si le categoria <strong>Spam</strong> es seligite.
+      actions_description_remote_html: Decide qual action prender pro resolver iste signalation. Isto affectara solmente le maniera in que <strong>tu</strong> servitor communica con iste conto remote e gere su contento.
       add_to_report: Adder plus al reporto
+      already_suspended_badges:
+        local: Ja suspendite sur iste servitor
+        remote: Ja suspendite sur su servitor
       are_you_sure: Es tu secur?
+      assign_to_self: Assignar a me
+      assigned: Moderator assignate
+      by_target_domain: Dominio del conto signalate
       cancel: Cancellar
       category: Categoria
+      category_description_html: Le motivo pro le qual iste conto e/o contento ha essite signalate essera citate in le communication con le conto signalate
+      comment:
+        none: Necun
+      comment_description_html: 'Pro fornir plus information, %{name} ha scribite:'
       confirm: Confirmar
+      confirm_action: Confirmar le action de moderation contra %{acct}
+      created_at: Signalate
       delete_and_resolve: Deler le messages
+      forwarded: Reexpedite
+      forwarded_replies_explanation: Iste signalation proveni de un usator remote e concerne contento remote. Illo te ha essite reexpedite perque le contento signalate es in responsa a un usator tue.
+      forwarded_to: Reexpedite a %{domain}
+      mark_as_resolved: Marcar como resolvite
+      mark_as_sensitive: Marcar como sensibile
+      mark_as_unresolved: Marcar como non resolvite
       no_one_assigned: Nemo
       notes:
         create: Adder un nota
+        create_and_resolve: Resolver con nota
+        create_and_unresolve: Reaperir con nota
         delete: Deler
+        placeholder: Describe le actiones prendite, o insere altere information pertinente...
         title: Notas
+      notes_description_html: Vider e lassar notas pro altere moderatores e pro tu proprie futuro
+      processed_msg: 'Reporto #%{id} elaborate con successo'
+      quick_actions_description_html: 'Face un rapide action o rola a basso pro vider le contento reportate:'
+      remote_user_placeholder: le usator remote ab %{instance}
+      reopen: Reaperir reporto
+      report: 'Reporto #%{id}'
+      reported_account: Conto signalate
+      reported_by: Signalate per
+      resolved: Resolvite
+      resolved_msg: Reporto resolvite con successo!
       skip_to_actions: Saltar al actiones
       status: Stato
+      statuses: Contento signalate
+      statuses_description_html: Le contento offensive sera citate in communication con le conto reportate
+      summary:
+        action_preambles:
+          delete_html: 'Tu va <strong>remover</strong> parte de messages de <strong>@%{acct}</strong>. Isto ira:'
+          mark_as_sensitive_html: 'Tu va <strong>marcar</strong> parte de messages de <strong>@%{acct}</strong> como <strong>sensibile</strong>. Isto ira:'
+          silence_html: 'Tu va <strong>limitar</strong> le conto de <strong>@%{acct}</strong>. Isto ira:'
+          suspend_html: 'Tu va <strong>limitar</strong> le conto de <strong>@%{acct}</strong>. Isto ira:'
+        actions:
+          delete_html: Remover le messages offensive
+          mark_as_sensitive_html: Marcar le medios de messages offensive como sensibile
+          silence_html: Limitar gravemente le portata de <strong>@%{acct}</strong> rendente le profilo e contento visibile solmente a qui ja lo seque o lo cerca manualmente
+          suspend_html: Suspender <strong>@%{acct}</strong>, rendente le profilo e contento inaccessibile e le interaction con illo impossibile
+        close_report: Marcar le signalation №%{id} como resolvite
+        close_reports_html: Marcar <strong>tote</strong> le signalationes contra <strong>@%{acct}</strong> como resolvite
+        delete_data_html: Deler le profilo e contento de <strong>@%{acct}</strong> in 30 dies excepte si le suspension es disfacite intertanto
+        preview_preamble_html: "<strong>@%{acct}</strong> recipera un advertimento con le sequente contento:"
+        record_strike_html: Registrar un admonition contra <strong>@%{acct}</strong> pro adjutar te a imponer sanctiones in caso de futur violationes de iste conto
+        send_email_html: Inviar un e-mail de advertimento a <strong>@%{acct}</strong>
+        warning_placeholder: Motivation supplementari facultative pro le action de moderation.
+      target_origin: Origine del conto signalate
+      title: Reportos
+      unassign: Disassignar
+      unknown_action_msg: 'Action incognite: %{action}'
+      unresolved: Non resolvite
       updated_at: Actualisate
       view_profile: Vider profilo
     roles:
+      add_new: Adder rolo
       assigned_users:
         one: "%{count} usator"
         other: "%{count} usatores"
       categories:
+        administration: Administration
+        devops: DevOps
         invites: Invitationes
         moderation: Moderation
         special: Special
       delete: Deler
+      description_html: Le <strong>rolos de usator</strong> permitte personalisar le functiones e areas de Mastodon al quales le usator pote acceder.
+      edit: Modificar le rolo '%{name}'
       everyone: Permissiones predefinite
+      everyone_full_description_html: Iste es le <strong>rolo de base</strong> que affecta <strong>tote le usatores</strong>, mesmo illes sin rolo assignate. Tote le altere rolos heredita le permissiones de illo.
+      permissions_count:
+        one: "%{count} permission"
+        other: "%{count} permissiones"
       privileges:
+        administrator: Administrator
+        administrator_description: Le usatores con iste permission pote contornar tote permission
         delete_user_data: Deler le datos de usator
+        delete_user_data_description: Permitte que usatores dele immediatemente le datos de altere usatores
+        invite_users: Invitar usatores
+        invite_users_description: Permitte que usatores invita nove personas al servitor
         manage_announcements: Gerer le annuncios
+        manage_announcements_description: Permitte que usatores genere annuncios sur le servitor
+        manage_appeals: Gerer appellos
+        manage_appeals_description: Permitte que usatores revide appellos contra actiones de moderation
+        manage_blocks: Gerer blocadas
+        manage_blocks_description: Permitter que usatores bloca le fornitores de e-mail e le adresses IP
+        manage_custom_emojis: Gerer emojis personalisate
+        manage_custom_emojis_description: Permitte que usatores gere emojis personalisate sur le servitor
+        manage_federation: Gerer federation
+        manage_federation_description: Permitte que le usatores bloca o permitte le federation con altere dominios, e controla le livration
         manage_invites: Gerer le invitationes
+        manage_invites_description: Permitte que usatores examina e deactiva ligamines de invitation
+        manage_reports: Gerer le reportos
+        manage_reports_description: Permitte que usatores revide signalationes e exeque actiones de moderation a base de illos
+        manage_roles: Gerer le rolos
+        manage_roles_description: Permitte que usatores gere e assigna rolos inferior a lor privilegios actual
         manage_rules: Gerer le regulas
+        manage_rules_description: Permitte que usatores cambia le regulas del servitor
         manage_settings: Gerer le parametros
+        manage_settings_description: Permitte que usatores cambia le parametros del sito
+        manage_taxonomies: Gerer taxonomias
+        manage_taxonomies_description: Permitte que usatores revide contento in tendentias e actualisa le parametros de hashtag
+        manage_user_access: Gerer le accessos de usator
+        manage_user_access_description: Permitte que usatores disactiva le authentication bifactorial de altere usatores, cambia lor adresses de e-mail, e reinitialisa lor contrasigno
         manage_users: Gerer usatores
+        manage_users_description: Permitte que usatores vide le detalios de altere usatores e exeque actiones de moderation contra illes
+        manage_webhooks: Gerer Webhooks
+        manage_webhooks_description: Permitte que usatores installa “webhooks” pro eventos administrative
+        view_audit_log: Vider le registro de inspection
+        view_audit_log_description: Permitte que usatores vide un historia de actiones administrative sur le servitor
+        view_dashboard: Vider le tabuliero de instrumentos
+        view_dashboard_description: Permitte que usatores accede al tabuliero de instrumentos e a varie statisticas
+        view_devops: DevOps
+        view_devops_description: Permitte que usatores accede al tabulieros de instrumentos de Sidekiq e pgHero
       title: Rolos
     rules:
+      add_new: Adder regula
       delete: Deler
+      description_html: Ben que multes affirma de haber legite e acceptate le conditiones de servicio, generalmente le gente non los lege completemente usque un problema surge. <strong>Facilita le visibilitate del regulas de tu servitor in un colpo de oculo forniente los in un lista a punctos.</strong> Tenta mantener le regulas individual curte e simple, ma sin divider los in multe punctos separate.
+      edit: Modificar regula
+      empty: Necun regula del servitor ha essite definite ancora.
+      title: Regulas del servitor
     settings:
       about:
+        manage_rules: Gerer le regulas del servitor
+        preamble: Fornir information detaliate sur le functionamento, moderation e financiamento del servitor.
+        rules_hint: Il ha un area dedicate al regulas que tu usatores debe acceptar.
         title: A proposito de
       appearance:
         preamble: Personalisar le interfacie web de Mastodon.
         title: Apparentia
+      branding:
+        preamble: Le marca de tu servitor lo differentia de altere servitores in le rete. Iste information pote esser monstrate in diverse ambientes, como le interfacie web de Mastodon, applicationes native, in previsualisationes de ligamines sur altere sitos web, in applicationes de messageria, etc. Pro iste ration, il es melior mantener iste information clar, breve e concise.
+        title: Marca
+      captcha_enabled:
+        desc_html: Iste depende de scripts externe de hCaptcha, que pote esser un problema de securitate e vita private. De plus, <strong>isto pote render le processo de inscription multo minus accessibile a certe personas (particularmente personas con discapacitates)</strong>. Pro iste rationes, considera altere mesuras como le inscription basate sur approbation o invitation.
+        title: Require que nove usatores solve un CAPTCHA pro confirmar lor conto
+      content_retention:
+        danger_zone: Zona periculose
       discovery:
         profile_directory: Directorio de profilos
         public_timelines: Chronologias public
+        title: Discoperi
         trends: Tendentias
+      domain_blocks:
+        all: A omnes
+        disabled: A necuno
+        users: A usators local in session
+      registrations:
+        title: Registrationes
+      registrations_mode:
+        modes:
+          none: Nemo pote inscriber se
+          open: Quicunque pote inscriber se
+      security:
+        authorized_fetch_hint: Requirer authentication de servitores federate permitte un application plus stricte de blocadas a nivello de usator e de servitor. Nonobstante, isto diminue le prestationes del servitor, reduce le portata de tu responsas e pote introducer problemas de compatibilitate con certe servicios federate. In plus, isto non impedira le actores dedicate a recuperar tu messages public e tu contos.
       title: Parametros de servitor
     site_uploads:
       delete: Deler file incargate
+      destroyed_msg: Incarga de sito delite con successo!
     software_updates:
       documentation_link: Pro saper plus
+      release_notes: Notas de version
       title: Actualisationes disponibile
       type: Typo
       types:
@@ -391,31 +778,136 @@ ia:
       deleted: Delite
       favourites: Favoritos
       history: Chronologia del versiones
+      in_reply_to: Replicante a
       language: Lingua
       media:
         title: Medios
       metadata: Metadatos
       open: Aperir message
       original_status: Message original
+      status_changed: Messages cambiate
       title: Messages del conto
       trending: Tendentias
       visibility: Visibilitate
+      with_media: Con medios
     strikes:
       actions:
+        delete_statuses: "%{name} ha delite le messages de %{target}"
+        disable: "%{name} ha gelate le conto de %{target}"
+        mark_statuses_as_sensitive: "%{name} ha marcate le messages de %{target} como sensibile"
         none: "%{name} ha inviate un advertimento a %{target}"
+        sensitive: "%{name} ha marcate le conto de %{target} como sensibile"
+        silence: "%{name} ha limitate le conto de %{target}"
+        suspend: "%{name} ha suspendite le conto de %{target}"
+      appeal_approved: Appello facite
+      appeal_pending: Appello pendente
+      appeal_rejected: Appello rejectate
     system_checks:
+      elasticsearch_preset:
+        action: Vide documentation
+      elasticsearch_preset_single_node:
+        action: Vide documentation
       rules_check:
         action: Gerer le regulas del servitor
       software_version_critical_check:
         action: Vider le actualisationes disponibile
+        message_html: Un actualisation critic de Mastodon es disponibile, actualisa lo le plus rapide possibile.
       software_version_patch_check:
         action: Vider le actualisationes disponibile
       upload_check_privacy_error:
         action: Verifica hic pro plus de information
+      upload_check_privacy_error_object_storage:
+        action: Verifica hic pro plus de information
+    trends:
+      approved: Approbate
+      rejected: Rejectate
+      tags:
+        not_usable: Non pote esser usate
+      title: Tendentias
+    warning_presets:
+      add_new: Adder nove
+      delete: Deler
+    webhooks:
+      delete: Deler
+      disable: Disactivar
+      disabled: Disactivate
+      enable: Activar
+      events: Eventos
+      status: Stato
+  admin_mailer:
+    new_critical_software_updates:
+      subject: Actualisationes critic de Mastodon es disponibile pro %{instance}!
+    new_software_updates:
+      subject: Nove versiones de Mastodon es disponibile pro %{instance}!
+  appearance:
+    advanced_web_interface: Interfacie web avantiate
+    sensitive_content: Contento sensibile
   application_mailer:
+    notification_preferences: Cambiar preferentias de e-mail
+    settings: 'Cambiar preferentias de e-mail: %{link}'
     unsubscribe: Desubscriber
+    view: 'Vider:'
+    view_profile: Vider profilo
+    view_status: Vider message
+  applications:
+    created: Application create con successo
+    destroyed: Application delite con successo
+    logout: Clauder le session
+  auth:
+    confirmations:
+      welcome_title: Benvenite, %{name}!
+    delete_account: Deler le conto
+    logout: Clauder le session
+    progress:
+      details: Tu detalios
+    set_new_password: Definir un nove contrasigno
+    status:
+      account_status: Stato del conto
+      view_strikes: Examinar le admonitiones passate contra tu conto
+  challenge:
+    invalid_password: Contrasigno non valide
+  deletes:
+    proceed: Deler le conto
+    success_msg: Tu conto esseva delite con successo
+    warning:
+      data_removal: Tu messages e altere datos essera removite permanentemente
+      email_change_html: Tu pote <a href="%{path}">cambiar tu adresse de e-mail</a> sin deler tu conto
+  disputes:
+    strikes:
+      action_taken: Action prendite
+      appeal: Facer appello
+      appeal_approved: Iste admonition ha essite annullate in appello e non es plus valide
+      appeal_rejected: Le appello ha essite rejectate
+      appeal_submitted_at: Appello submittite
+      appealed_msg: Tu appello ha essite submittite. Si es approbate, tu recipera notification.
+      appeals:
+        submit: Submitter appello
+      approve_appeal: Approbar apello
+      associated_report: Signalation associate
+      created_at: Del data
+      description_html: Istes es le actiones prendite contra tu conto e le advertimentos que te ha essite inviate per le personal de %{instance}.
+      recipient: Adressate a
+      reject_appeal: Rejectar appello
+      status: Message №%{id}
+      status_removed: Le message ha ja essite removite del systema
+      title: "%{action} del %{date}"
+      title_actions:
+        delete_statuses: Elimination de messages
+        disable: Gelamento del conto
+        mark_statuses_as_sensitive: Marcation de messages como sensibile
+        none: Advertimento
+        sensitive: Marcation del conto como sensibile
+        silence: Limitation del conto
+        suspend: Suspension del conto
+      your_appeal_approved: Tu appello ha essite approbate
+      your_appeal_pending: Tu ha submittite un appello
+      your_appeal_rejected: Tu appello ha essite rejectate
   edit_profile:
+    basic_information: Information basic
     other: Alteres
+  errors:
+    '422':
+      content: Le verification de securitate ha fallite. Bloca tu le cookies?
   existing_username_validator:
     not_found_multiple: non poteva trovar %{usernames}
   exports:
@@ -426,6 +918,7 @@ ia:
     blocks: Tu ha blocate
     bookmarks: Marcapaginas
     csv: CSV
+    domain_blocks: Blocadas de dominio
     mutes: Tu ha silentiate
     storage: Immagazinage de medios
   featured_tags:
@@ -444,6 +937,10 @@ ia:
       title: Modificar filtro
     index:
       delete: Deler
+      title: Filtros
+    new:
+      save: Salveguardar nove filtro
+      title: Adder nove filtro
   generic:
     all: Toto
     cancel: Cancellar
@@ -457,12 +954,37 @@ ia:
   imports:
     errors:
       empty: File CSV vacue
+      invalid_csv_file: 'File CSV non valide. Error: %{error}'
       too_large: Le file es troppo longe
     failures: Fallimentos
+    overwrite_preambles:
+      blocking_html: Tu es sur le puncto de <strong>reimplaciar tu lista de blocadas</strong> per usque a <strong>%{total_items} contos</strong> proveniente de <strong>%{filename}</strong>.
+      domain_blocking_html: Tu es sur le puncto de <strong>reimplaciar tu lista de blocadas de dominio</strong> per usque a <strong>%{total_items} dominios</strong> proveniente de <strong>%{filename}</strong>.
+    preambles:
+      blocking_html: Tu es sur le puncto de <strong>blocar</strong> usque a <strong>%{total_items} contos</strong> a partir de <strong>%{filename}</strong>.
+      domain_blocking_html: Tu es sur le puncto de <strong>blocar</strong> usque a <strong>%{total_items} dominios</strong> a partir de <strong>%{filename}</strong>.
+    preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
+    recent_imports: Importationes recente
     status: Stato
+    titles:
+      blocking: Importation de contos blocate
+      bookmarks: Importation de marcapaginas
+      domain_blocking: Importation de dominios blocate
+      lists: Importation de listas
+      muting: Importation de contos silentiate
+    type: Typo de importation
+    type_groups:
+      constructive: Sequites e marcapaginas
+      destructive: Blocadas e silentiamentos
     types:
+      blocking: Lista de blocadas
+      bookmarks: Marcapaginas
+      domain_blocking: Lista de dominios blocate
       lists: Listas
+    upload: Incargar
   invites:
+    delete: Disactivar
+    expired: Expirate
     expires_in:
       '1800': 30 minutas
       '21600': 6 horas
@@ -492,9 +1014,90 @@ ia:
   migrations:
     errors:
       not_found: non poterea esser trovate
+  move_handler:
+    carry_blocks_over_text: Iste usator ha cambiate de conto desde %{acct}, que tu habeva blocate.
+  notification_mailer:
+    follow:
+      title: Nove sequitor
+    follow_request:
+      title: Nove requesta de sequimento
+    mention:
+      action: Responder
+    poll:
+      subject: Un inquesta de %{name} ha finite
+  pagination:
+    next: Sequente
   preferences:
+    other: Altere
     public_timelines: Chronologias public
+  privacy_policy:
+    title: Politica de confidentialitate
+  relationships:
+    activity: Activitate del conto
+    most_recent: Plus recente
+    status: Stato del conto
+  sessions:
+    activity: Ultime activitate
+    browser: Navigator
+    browsers:
+      alipay: Alipay
+      blackberry: BlackBerry
+      chrome: Chrome
+      edge: Microsoft Edge
+      electron: Electron
+      firefox: Firefox
+      generic: Navigator incognite
+      huawei_browser: Huawei Browser
+      ie: Internet Explorer
+      micro_messenger: MicroMessenger
+      nokia: Navigator de Nokia S40 Ovi
+      opera: Opera
+      otter: Otter
+      phantom_js: PhantomJS
+      qq: QQ Browser
+      safari: Safari
+      uc_browser: UC Browser
+      unknown_browser: Navigator Incognite
+      weibo: Weibo
+    current_session: Session actual
+    date: Data
+    description: "%{browser} sur %{platform}"
+    platforms:
+      adobe_air: Adobe Air
+      android: Android
+      blackberry: BlackBerry
+      chrome_os: ChromeOS
+      firefox_os: Firefox OS
+      ios: iOS
+      kai_os: KaiOS
+      linux: Linux
+      mac: macOS
+      unknown_platform: Platteforma incognite
+      windows: Windows
+      windows_mobile: Windows Mobile
+      windows_phone: Windows Phone
+  settings:
+    account: Conto
+    account_settings: Parametros de conto
+    appearance: Apparentia
+    delete: Deletion de conto
+    development: Disveloppamento
+    edit_profile: Modificar profilo
+    import: Importar
+    migrate: Migration de conto
+    notifications: Notificationes de e-mail
+    preferences: Preferentias
+    profile: Profilo public
+    relationships: Sequites e sequitores
+    strikes: Admonitiones de moderation
+  severed_relationships:
+    event_type:
+      domain_block: Suspension del servitor (%{target_name})
+      user_domain_block: Tu ha blocate %{target_name}
+    preamble: Tu pote perder sequites e sequitores quando tu bloca un dominio o quando tu moderatores decide suspender un servitor remote. Quando isto occurre, tu potera discargar listas de relationes rumpite, a inspectar e eventualmente importar in un altere servitor.
+    type: Evento
   statuses:
+    open_in_web: Aperir in le web
     poll:
       vote: Votar
     show_more: Monstrar plus
@@ -511,7 +1114,13 @@ ia:
       '604800': 1 septimana
       '63113904': 2 annos
       '7889238': 3 menses
+  stream_entries:
+    sensitive_content: Contento sensibile
+  strikes:
+    errors:
+      too_late: Es troppo tarde pro facer appello contra iste admonition
   themes:
+    contrast: Mastodon (Alte contrasto)
     default: Mastodon (Obscur)
     mastodon-light: Mastodon (Clar)
     system: Automatic (usar thema del systema)
@@ -522,6 +1131,24 @@ ia:
   user_mailer:
     appeal_approved:
       action: Parametros de conto
+      explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite approbate. Tu conto ha de novo un bon reputation.
+    appeal_rejected:
+      explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite rejectate.
+    warning:
+      appeal: Submitter un appello
+      subject:
+        none: Advertimento pro %{acct}
+        sensitive: Tu messages sur %{acct} essera marcate como sensibile a partir de ora
+        silence: Tu conto %{acct} ha essite limitate
+        suspend: Tu conto %{acct} ha essite suspendite
+      title:
+        delete_statuses: Messages removite
+        disable: Conto gelate
+        mark_statuses_as_sensitive: Messages marcate como sensibile
+        none: Advertimento
+        sensitive: Conto marcate como sensibile
+        silence: Conto limitate
+        suspend: Conto suspendite
     welcome:
       apps_android_action: Obtene lo sur Google Play
       apps_ios_action: Discargar sur le App Store
@@ -530,6 +1157,9 @@ ia:
       edit_profile_action: Personalisar
       edit_profile_title: Personalisar tu profilo
       feature_action: Apprender plus
+      follow_action: Sequer
+      post_title: Face tu prime message
+      share_action: Compartir
       share_title: Compartir tu profilo de Mastodon
       subject: Benvenite in Mastodon
   verification:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 9753ecd374be78..a4143be060bbae 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -990,6 +990,7 @@ ja:
         desc_html: この機能は hCaptcha による外部スクリプトを使用しますが、hCaptcha にはセキュリティとプライバシーの懸念が考えられます。また、<strong>CAPTCHAにより新規登録のアクセシビリティが大幅に損なわれる可能性があり、身体および精神障害者においては特に顕著です。</strong>以上の理由から、承認制や招待制を基本とするなど、代わりの登録手順を提供することを検討してください。
         title: 新規ユーザーのアカウント確認にCHAPCHAを要求する
       content_retention:
+        danger_zone: 危険な操作
         preamble: ユーザーが生成したコンテンツがどのように Mastodon に保存されるかを管理します。
         title: コンテンツの保持
       default_noindex:
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 82fbde6ce1a211..3449f1d5d72399 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -410,6 +410,8 @@ lt:
           silence: Riboti
           suspend: Pristabdyti
         title: Naujos domeno blokas
+      public_comment: Viešas komentaras
+      public_comment_hint: Komentaras apie šį domeno apribojimą plačiajai visuomenei, jei įjungtas domenų apribojimų sąrašo reklamavimas.
       reject_media: Atmesti medijos failus
       reject_media_hint: Panaikina lokaliai saugomus medijos failus bei atsisako jų parsisiuntimo ateityje. Neliečia užblokavimu
       reject_reports: Atmesti ataskaitas
@@ -427,11 +429,14 @@ lt:
       title: El pašto juodasis sąrašas
     instances:
       by_domain: Domenas
+      content_policies:
+        reason: Viešoji priežastis
       delivery_available: Pristatymas galimas
       moderation:
         all: Visi
         limited: Limituotas
         title: Moderacija
+      public_comment: Viešas komentaras
       title: Federacija
       total_blocked_by_us: Mes užblokavome
       total_followed_by_them: Jų sekami
@@ -449,11 +454,11 @@ lt:
     relays:
       add_new: Pridėti naują pamainą
       delete: Ištrinti
-      description_html: "<strong>Federacijos perjungėjas</strong> tai tarpinis serveris, kuris apsikeičia didelios apimties informacija tarp kitų serverių. <strong> Tai gali padėti mažesniems serveriams atrasti turinį iš fedi-visatos</strong>, kuris kitaip reikalautų vartotojų lokaliai sekti kitus žmones naudojantis kitus tolimus serverius."
+      description_html: "<strong>Federacijos perdavimas</strong> – tai tarpinis serveris, kuris keičiasi dideliais viešų įrašų kiekiais tarp jį prenumeruojančių ir skelbiančių serverių. <strong>Jis gali padėti mažiems ir vidutiniams serveriams atrasti fediverse esantį turinį</strong>, nes priešingu atveju vietiniams naudotojams reikėtų rankiniu būdu sekti kitus žmones iš nutolusių serverių."
       disable: Išjungti
       disabled: Išjungtas
       enable: Įjungti
-      enable_hint: Kai įjungta, Jūsų serveris prenumeruos visas viešas žinutes iš šio tinklo, ir pradės siųsti šio serverio viešas žinutes į tinklą.
+      enable_hint: Kai bus įjungtas, tavo serveris užsiprenumeruos visus šio perdavimo viešus įrašus ir pradės į jį siųsti šio serverio viešus įrašus.
       enabled: Įjungtas
       inbox_url: Perdavimo URL
       pending: Laukiama perdavimo patvirtinimo
@@ -504,6 +509,8 @@ lt:
         desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, <strong>dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami</strong>. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją.
       content_retention:
         danger_zone: Pavojinga zona
+      discovery:
+        public_timelines: Viešieji laiko skalės
       domain_blocks:
         all: Visiems
       registrations:
@@ -543,7 +550,7 @@ lt:
       body: Mastodon verčia savanoriai.
       guide_link_text: Visi gali prisidėti.
   application_mailer:
-    notification_preferences: Keisti el pašto parinktis
+    notification_preferences: Keisti el. pašto nuostatas
     settings: 'Keisti el. pašto nuostatas: %{link}'
     view: 'Peržiūra:'
     view_profile: Peržiurėti profilį
@@ -635,7 +642,7 @@ lt:
     contexts:
       home: Namų laiko juosta
       notifications: Priminimai
-      public: Viešos laiko juostos
+      public: Viešieji laiko skalės
       thread: Pokalbiai
     edit:
       title: Keisti filtrą
@@ -727,6 +734,8 @@ lt:
     prev: Ankstesnis
   preferences:
     other: Kita
+    posting_defaults: Skelbimo numatytosios nuostatos
+    public_timelines: Viešieji laiko skalės
   privacy:
     hint_html: "<strong>Tikrink, kaip nori, kad tavo profilis ir įrašai būtų randami.</strong> Įjungus įvairias Mastodon funkcijas, jos gali padėti pasiekti platesnę auditoriją. Akimirką peržiūrėk šiuos nustatymus, kad įsitikintum, jog jie atitinka tavo naudojimo būdą."
   redirects:
@@ -769,7 +778,8 @@ lt:
     import: Importuoti
     migrate: Paskyros migracija
     notifications: El. laiško pranešimai
-    preferences: Preferencijos
+    preferences: Nuostatos
+    profile: Viešas profilis
     two_factor_authentication: Dviejų veiksnių autentikacija
   statuses:
     attached:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 8e30a27b8b116b..0c2e6cfd6d782d 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -751,6 +751,7 @@ pt-PT:
         desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, <strong>isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas)</strong>. Por isso, considere medidas alternativas tais como registo mediante aprovação ou sob convite.
         title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a sua conta
       content_retention:
+        danger_zone: Zona de perigo
         preamble: Controle como o conteúdo gerado pelos utilizadores é armazenado no Mastodon.
         title: Retenção de conteúdo
       default_noindex:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 29e525b2c857cc..a1406b1ad9d2f9 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -240,6 +240,7 @@ ar:
         backups_retention_period: فترة الاحتفاظ بأرشيف المستخدم
         bootstrap_timeline_accounts: أوصي دائما بهذه الحسابات للمستخدمين الجدد
         closed_registrations_message: رسالة مخصصة عندما يكون التسجيل غير متاح
+        content_cache_retention_period: مدة الاحتفاظ بالمحتوى البعيد
         custom_css: سي أس أس CSS مخصص
         mascot: جالب حظ مخصص (قديم)
         media_cache_retention_period: مدة الاحتفاظ بالتخزين المؤقت للوسائط
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index f4668ccada1c38..9aedac15f3dbdd 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -77,9 +77,12 @@ en-GB:
           warn: Hide the filtered content behind a warning mentioning the filter's title
       form_admin_settings:
         activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
+        app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon.
+        backups_retention_period: Keep generated user archives for the specified number of days.
         bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
         closed_registrations_message: Displayed when sign-ups are closed
         custom_css: You can apply custom styles on the web version of Mastodon.
+        favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
         mascot: Overrides the illustration in the advanced web interface.
         peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
         profile_directory: The profile directory lists all users who have opted-in to be discoverable.
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index f72da822584770..73cb9ee36e8eb0 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -96,6 +96,7 @@ en:
           warn: Hide the filtered content behind a warning mentioning the filter's title
       form_admin_settings:
         activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
+        app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon.
         backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days.
         bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
         closed_registrations_message: Displayed when sign-ups are closed
@@ -105,6 +106,7 @@ en:
         enable_local_timeline: While enabling this feature will allow for interaction between like-minded users, it may also strengthen the internal atmosphere; since Mastodon is supposed to have a local timeline, we recommend annotating it in the server introduction if it is to be disabled.
         enable_public_unlisted_visibility: If true, your community maybe closed-minded. If turn it false, strongly recommend that you disclose that you have disabled this setting!
         enable_public_visibility: If disabled, public posts will be forcibly replaced with "Local public" or "Unlisted" posts.
+        favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
         mascot: Overrides the illustration in the advanced web interface.
         media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time.
         peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index b07ed8b8b5f6e6..841745dbc0e294 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -77,10 +77,13 @@ he:
           warn: הסתר את התוכן המסונן מאחורי אזהרה עם כותרת המסנן
       form_admin_settings:
         activity_api_enabled: מספר ההודעות שפורסמו מקומית, משתמשים פעילים, והרשמות חדשות בדליים שבועיים
+        backups_retention_period: למשתמשים יש יכולת לבקש ארכיון של הודעותיהם להורדה מאוחר יותר. כאשר נבחר ערך חיובי, הארכיונים הללו ימחקו מאחסון לאחר מספר הימים שצוינו.
         bootstrap_timeline_accounts: חשבונות אלו יוצמדו לראש רשימת המלצות המעקב של משתמשים חדשים.
         closed_registrations_message: להציג כאשר הרשמות חדשות אינן מאופשרות
+        content_cache_retention_period: כל ההודעות משרתים אחרים (לרבות הדהודים ותגובות) ימחקו אחרי מספר ימים, ללא קשר לאינטראקציה של משתמשים מקומיים איתם. בכלל זה הודעות שהמתשתמשים המקומיים סימנו בסימניה או חיבוב. איזכורים פרטיים ("דיאם") בין משתמשים בין שרתים שונים יאבדו גם הם ולא תהיה אפשרות לשחזרם. השימוש באפשרות הזו מיועד לשרתים עם ייעוד מיוחד ושובר את ציפיותיהם של רב המשתמשים כאשר האפשרות מופעלת בשרת לשימוש כללי.
         custom_css: ניתן לבחור ערכות סגנון אישיות בגרסת הדפדפן של מסטודון.
         mascot: בחירת ציור למנשק הווב המתקדם.
+        media_cache_retention_period: קבצי מדיה מהודעות שהגיעו משרתים רחוקים נשמרות על השרת שלך. כאשר יבחר פה מספר חיובי, המדיה תמחק לאחר מספר ימים כמצוין. אם המידע יבוקש שוב לאחר שנמחק, הוא יורד מחדש, אם המידע עדיין זמין בצד הרחוק. עקב מגבלות על תכיפות שליפת כרטיסי קדימון מאתרים מרוחקים, מומלץ לכוון את הערך ל־14 יום לפחות, או שכרטיסי קדימונים לא יעודכנו לפי דרישה לפני חלוף חלון הזמן הזה.
         peers_api_enabled: רשימת השרתים ששרת זה פגש בפדיוורס. לא כולל מידע לגבי קשר ישיר עם שרת נתון, אלא רק שידוע לשרת זה על קיומו. מידע זה משמש שירותים האוספים סטטיסטיקות כלליות על הפדרציה.
         profile_directory: ספריית הפרופילים מציגה ברשימה את כל המשתמשים שביקשו להיות ניתנים לגילוי.
         require_invite_text: כאשר הרשמות דורשות אישור ידני, הפיכת טקסט ה"מדוע את/ה רוצה להצטרף" להכרחי במקום אופציונלי
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 05a5fa5013d07a..c796cb5fac51e3 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -48,15 +48,96 @@ ia:
         email: Te sera inviate un email de confirmation
         header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px
         inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar
+        irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite
+        locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate
         password: Usa al minus 8 characteres
+        phrase: Sera concordate ignorante majuscule/minuscule in le texto o avisos de contento de un message
+        scopes: A que APIs sera permittite acceder al application. Si tu selige un ambito de maxime nivello, tu non besonia de seliger los singulemente.
+        setting_aggregate_reblogs: Non monstra nove stimulos pro messages que ha essite recentemente stimulate (stimulos solo affice los novemente recipite)
+        setting_always_send_emails: Normalmente le avisos de email non sera inviate quando tu activemente usa Mastodon
+        setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic
+        setting_display_media_default: Celar le medios marcate como sensibile
         setting_display_media_hide_all: Sempre celar le medios
         setting_display_media_show_all: Sempre monstrar le medios
+        setting_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios
+        setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo
         username: Tu pote usar litteras, numeros e tractos de sublineamento
+        whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola
+      domain_allow:
+        domain: Iste dominio potera reportar datos ab iste servitor e le datos in ingresso ab illo sera processate e immagazinate
+      email_domain_block:
+        domain: Isto pote esser le nomine de dominio que apparera in le adresse email o le registration MX que illo usa. Illos sera verificate durante le inscription.
+        with_dns_records: Un tentativa sera facite pro resolver le registrationes de DNS del dominio date e le resultatos sera alsi blocate
+      featured_tag:
+        name: 'Ecce alcun del hashtags que tu usava le plus recentemente:'
+      filters:
+        action: Selige que action exequer quando un message concorda con le filtro
+        actions:
+          hide: Completemente celar le contento filtrate, comportar se como si illo non existerea
+          warn: Celar le contento filtrate detra un aviso citante le titulo del filtro
+      form_admin_settings:
+        activity_api_enabled: Numeros de messages localmente publicate, usatores active, e nove registrationes in gruppos septimanal
+        backups_retention_period: Le usatores pote generar archivos de lor messages pro discargar los plus tarde. Quando predefinite a un valor positive, iste archivos sera automaticamente delite de tu immagazinage post le specificate numero de dies.
+        bootstrap_timeline_accounts: Iste contos sera appunctate al summitate del recommendationes a sequer del nove usatores.
+        closed_registrations_message: Monstrate quando le inscriptiones es claudite
+        content_cache_retention_period: Tote messages de altere servitores (includite stimulos e responsas) sera delite post le specificate numero de dies, sin considerar alcun interaction de usator local con ille messages. Isto include messages ubi un usator local los ha marcate como marcapaginas o favoritos. Mentiones private inter usatores de differente instantias sera alsi perdite e impossibile a restaurar. Le uso de iste parametros es intendite pro specific instantias e infringe multe expectationes de usator quando implementate pro uso general.
+        custom_css: Tu pote applicar stilos personalisate sur le version de web de Mastodon.
+        mascot: Illo substitue le illustration in le interfacie web avantiate.
+        media_cache_retention_period: Le files multimedial de messages producite per usatores remote es in cache sur tu servitor. Quando predefinite a un valor positive, le medios sera delite post le numero de dies specificate. Le datos multimedial requirite post que illo es delite, sera re-discargate, si le contento original sera ancora disponibile. Per limitationes sur le frequentia con que le schedas de pre-visualisation de ligamine scruta le sitos de tertie partes, il es recommendate de predefinir iste valor a al minus 14 dies, o le schedas de pre-visualisation de ligamine non sera actualisate sur demanda ante ille tempore.
+        peers_api_enabled: Un lista de nomines de dominio que iste servitor ha incontrate in le fediverso. Nulle datos es includite ci re tu federation con un date servitor, justo que tu servitor lo cognosce. Isto es usate per servicios que collige statistica re le federation in senso general.
+        profile_directory: Le directorio de profilo lista tote le usatores qui ha optate pro esser detectabile.
+        require_invite_text: Quando le inscriptiones require approbation manual, rende obligatori, plus tosto que optional, le entrata de texto “Perque vole tu junger te?”
+        site_contact_email: Como pote contactar te le personas pro questiones legal o de supporto.
+        site_contact_username: Como pote contactar te le personas re Mastodon.
+        site_extended_description: Qualcunque information additional que pote esser utile al visitatores e a tu usatores. Pote esser structurate con syntaxe de markdown.
+        site_short_description: Un breve description pro adjutar a univocamente identificar tu servitor. Qui ha exequite illo, proque es illo?
+        site_terms: Usa tu proprie politica de confidentialitate o lassa blanc pro usar le predefinite. Pote esser structurate con syntaxe de markdown.
+        site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio.
+        status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption
+        theme: Thema que le visitatores disconnexe e le nove usatores vide.
+        thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor.
+        timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor.
+        trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto.
+        trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor.
+        trends_as_landing_page: Monstrar contento de tendentia a usatores disconnexe e visitatores in vice que un description de iste servitor. Require tendentias esser activate.
+      form_challenge:
+        current_password: Tu entra in un area secur
+      imports:
+        data: File CSV exportate ab un altere servitor de Mastodon
+      invite_request:
+        text: Isto nos adjutara a revider tu application
       ip_block:
+        comment: Optional. Memorar perque tu ha addite iste regula.
+        expires_in: Le adresses IP es un ressource finite, illos es aliquando compartite e sovente cambia manos. Pro iste ration, blocadas de IP indefinite non es recommendate.
+        ip: Inserer un adresse IPv4 o IPv6. Tu pote blocar campos integre per le syntaxe CIDR. Sia attente pro non disconnecter te!
         severities:
           no_access: Blocar accesso a tote le ressources
+          sign_up_block: Nove inscriptiones non sera possibile
+          sign_up_requires_approval: Nove inscriptiones requirera tu approbation
+        severity: Seliger que evenira con requestas ab iste IP
+      rule:
+        hint: Optional. Forni altere detalios re le regula
+        text: Describe un regula o requisito pro usatores sur iste servitor. Tenta de mantener lo breve e simple
+      sessions:
+        otp: 'Insere le codice a duo factores generate per le app de tu telephono o usa un de tu codices de recuperation:'
+        webauthn: Si illo es un clave USB cura de inserer lo e, si necessari, tocca lo.
+      settings:
+        indexable: Tu pagina del profilo pote apparer in resultatos del recerca sur Google, Bing, e alteros.
+        show_application: Tu sempre sera capace totevia de vider que app publicava tu message.
+      tag:
+        name: Tu pote solo cambiar le inveloppe del litteras, per exemplo, pro render lo plus legibile
+      user:
+        chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public
+        role: Le rolo controla que permissos ha le usator
+      user_role:
+        color: Color a esser usate pro le rolo in omne parte del UI, como RGB in formato hexadecimal
+        highlighted: Iste rende le rolo publicamente visibile
+        name: Nomine public del rolo, si rolo es definite a esser monstrate como insignia
+        permissions_as_keys: Usatores con iste rolo habera accesso a...
+        position: Rolo superior decide resolution de conflicto in certe situationes. Certe actiones pote solo esser exequite sur rolos con un prioritate inferior
       webhook:
         events: Selige le eventos a inviar
+        template: Compone tu proprie carga utile JSON per interpolation de variabile. Lassar blanc pro JSON predefinite.
         url: Ubi le eventos essera inviate
     labels:
       account:
@@ -67,9 +148,17 @@ ia:
         indexable: Includer messages public in le resultatos de recerca
         show_collections: Monstrar sequites e sequitores in le profilo
         unlocked: Acceptar automaticamente nove sequitores
+      account_alias:
+        acct: Pseudonymo del vetere conto
+      account_migration:
+        acct: Pseudonymo del nove conto
       account_warning_preset:
+        text: Texto predefinite
         title: Titulo
       admin_account_action:
+        include_statuses: Includer messages reportate in le email
+        send_email_notification: Notificar le usator per e-mail
+        text: Advertimento personalisate
         type: Action
         types:
           disable: Gelar
@@ -77,35 +166,72 @@ ia:
           sensitive: Sensibile
           silence: Limitar
           suspend: Suspender
+        warning_preset_id: Usar un aviso predefinite
       announcement:
+        all_day: Evento quotidian
+        ends_at: Fin del evento
+        scheduled_at: Planificar publication
+        starts_at: Initio del evento
         text: Annuncio
+      appeal:
+        text: Explicar perque iste decision deberea esser revertite
       defaults:
         autofollow: Invitar a sequer tu conto
         avatar: Pictura de profilo
+        bot: Isto es un conto automatisate
         chosen_languages: Filtrar linguas
         confirm_new_password: Confirmar nove contrasigno
         confirm_password: Confirmar contrasigno
+        context: Contextos del filtro
         current_password: Contrasigno actual
+        data: Datos
         display_name: Nomine a monstrar
         email: Adresse de e-mail
+        expires_in: Expira post
+        fields: Campos extra
+        header: Imagine titulo
+        honeypot: "%{label} (non compilar)"
+        inbox_url: URL del cassa de ingresso de repetitor
+        irreversible: Declinar in vice que celar
         locale: Lingua de interfacie
+        max_uses: Numero max de usos
         new_password: Nove contrasigno
+        note: Bio
+        otp_attempt: Codice a duo factores
         password: Contrasigno
+        phrase: Parola o phrase clave
         setting_advanced_layout: Activar le interfacie web avantiate
+        setting_aggregate_reblogs: Gruppa promotiones in classificationes temporal
         setting_always_send_emails: Sempre inviar notificationes per e-mail
+        setting_auto_play_gif: Auto-reproduce GIFs animate
+        setting_boost_modal: Monstrar dialogo de confirmation ante promover
         setting_default_language: Lingua de publication
+        setting_default_privacy: Confidentialitate del messages
+        setting_default_sensitive: Sempre marcar le medios cmo sensbile
+        setting_delete_modal: Monstrar le dialogo de confirmation ante deler un message
+        setting_disable_swiping: Disactivar le movimentos per glissamento
+        setting_display_media: Visualisation de medios
         setting_display_media_default: Predefinite
         setting_display_media_hide_all: Celar toto
         setting_display_media_show_all: Monstrar toto
+        setting_expand_spoilers: Sempre expander messages marcate con avisos de contento
+        setting_hide_network: Cela tu rete social
+        setting_reduce_motion: Reducer movimento in animationes
         setting_system_font_ui: Usar typo de litteras predefinite del systema
         setting_theme: Thema de sito
         setting_trends: Monstrar le tendentias de hodie
+        setting_unfollow_modal: Monstrar dialogo de confirmation ante cessar de sequer alcuno
+        setting_use_blurhash: Monstrar imagines degradate multicolor pro medios celate
+        setting_use_pending_items: Modo lente
         severity: Severitate
         sign_in_token_attempt: Codice de securitate
         title: Titulo
+        type: Importar le typo
         username: Nomine de usator
         username_or_email: Nomine de usator o e-mail
         whole_word: Parola integre
+      email_domain_block:
+        with_dns_records: Includer registrationes MX e IPs del dominio
       featured_tag:
         name: Hashtag
       filters:
@@ -113,51 +239,98 @@ ia:
           hide: Celar completemente
           warn: Celar con un advertimento
       form_admin_settings:
+        activity_api_enabled: Publicar statisticas aggregate re le activitate de usator in le API
+        backups_retention_period: Periodo de retention del archivo de usator
         bootstrap_timeline_accounts: Recommenda sempre iste contos a nove usatores
+        closed_registrations_message: Message personalisate quando le inscriptiones non es disponibile
+        content_cache_retention_period: Periodo de retention del contento remote
         custom_css: CSS personalisate
+        mascot: Personalisar le mascotte (hereditage)
+        media_cache_retention_period: Periodo de retention del cache multimedial
+        peers_api_enabled: Publicar le lista de servitores discoperite in le API
         profile_directory: Activar directorio de profilos
+        registrations_mode: Qui pote inscriber se
+        require_invite_text: Requirer un ration pro junger se
+        show_domain_blocks: Monstrar le blocadas de dominio
+        show_domain_blocks_rationale: Monstrar perque le dominios era blocate
         site_contact_email: Adresse de e-mail de contacto
         site_contact_username: Nomine de usator de contacto
+        site_extended_description: Description extense
         site_short_description: Description de servitor
         site_terms: Politica de confidentialitate
         site_title: Nomine de servitor
         status_page_url: URL del pagina de stato
         theme: Thema predefinite
+        thumbnail: Miniatura de servitor
+        timeline_preview: Permitter accesso non authenticate a chronologias public
+        trendable_by_default: Permitter tendentias sin revision previe
         trends: Activar tendentias
+        trends_as_landing_page: Usar tendentias como pagina de destination
+      interactions:
+        must_be_follower: Blocar notificationes de non-sequaces
+        must_be_following: Blocar notificationes de gente que tu non sequer
+        must_be_following_dm: Blocar messages directe de gente que tu non seque
       invite:
         comment: Commento
+      invite_request:
+        text: Perque vole tu junger te?
       ip_block:
         comment: Commento
         ip: IP
         severities:
           no_access: Blocar le accesso
+          sign_up_block: Blocar inscriptiones
+          sign_up_requires_approval: Limitar inscriptiones
         severity: Regula
       notification_emails:
+        appeal: Alcuno appella un decision de moderator
+        digest: Inviar emails compendio
+        favourite: Alcuno appreciava tu message
+        follow: Alcuno te sequeva
+        follow_request: Alcuno requireva de sequer te
+        mention: Alcuno te mentionava
+        pending_account: Nove conto besonia de revision
+        reblog: Alcuno promoveva tu message
+        report: Un nove reporto es inviate
         software_updates:
           all: Notificar sur tote le actualisationes
           critical: Notificar solmente sur actualisationes critic
           label: Un nove version de Mastodon es disponibile
           none: Nunquam notificar sur actualisationes (non recommendate)
+          patch: Notificar re actualisationes de correction de bug
+        trending_tag: Un nove tendentia require revision
       rule:
         hint: Information additional
         text: Regula
       settings:
         indexable: Includer pagina de profilo in le motores de recerca
+        show_application: Monstrar ab que app tu ha inviate un message
       tag:
         listable: Permitter a iste hashtag apparer in le recercas e suggestiones
         name: Hashtag
+        trendable: Permitter a iste hashtag de sub tendentias
         usable: Permitter al messages usar iste hashtag
       user:
         role: Rolo
         time_zone: Fuso horari
       user_role:
+        color: Color de insignia
+        highlighted: Monstrar le rolo como insignia sur le profilos de usator
         name: Nomine
         permissions_as_keys: Permissiones
         position: Prioritate
       webhook:
         events: Eventos activate
+        template: Modello de carga utile
+        url: URL de extremo
+    'no': 'No'
     not_recommended: Non recommendate
+    overridden: Supplantate
     recommended: Recommendate
     required:
+      mark: "*"
       text: requirite
+    title:
+      sessions:
+        webauthn: Usa un de tu claves de securitate pro acceder
     'yes': Si
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index dde97e2475a5cc..1aa88e631694b2 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -103,14 +103,17 @@ ja:
           warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します
       form_admin_settings:
         activity_api_enabled: 週単位でローカルで公開された投稿数、アクティブユーザー数、新規登録者数を表示します
+        backups_retention_period: ユーザーには、後でダウンロードするために投稿のアーカイブを生成する機能があります。正の値に設定すると、これらのアーカイブは指定された日数後に自動的にストレージから削除されます。
         bootstrap_timeline_accounts: これらのアカウントは、新しいユーザー向けのおすすめユーザーの一番上にピン留めされます。
         closed_registrations_message: アカウント作成を停止している時に表示されます
+        content_cache_retention_period: 他のサーバーからのすべての投稿(ブーストや返信を含む)は、指定された日数が経過すると、ローカルユーザーとのやりとりに関係なく削除されます。これには、ローカルユーザーがブックマークやお気に入りとして登録した投稿も含まれます。異なるサーバーのユーザー間の非公開な変身も失われ、復元することは不可能です。この設定の使用は特別な目的のインスタンスのためのものであり、一般的な目的のサーバーで使用するした場合、多くのユーザーの期待を裏切ることになります。
         custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。
         delete_content_cache_without_reaction: この機能は現在、負荷に関する懸念があります。すべての投稿をブックマークするユーザーbotの出現も想定されます。特に大規模サーバーでは慎重に検討してください。
         enable_local_timeline: 有効にすると気の合ったユーザー同士の交流が捗る反面、内輪の雰囲気が強くなるかもしれません。Mastodonはローカルタイムラインがあるものだと思われているので、無効にする場合はサーバー紹介での注記をおすすめします。
         enable_public_unlisted_visibility: 有効にするとあなたのコミュニティは閉鎖的になるかもしれません。この設定はkmyblueの主要機能の1つであり、無効にする場合は概要などに記載することを強くおすすめします。
         enable_public_visibility: 無効にすると公開投稿は強制的に「ローカル公開」または「非収載」に置き換えられます。
         mascot: 上級者向けWebインターフェースのイラストを上書きします。
+        media_cache_retention_period: リモートユーザーが投稿したメディアファイルは、あなたのサーバーにキャッシュされます。正の値を設定すると、メディアは指定した日数後に削除されます。削除後にメディアデータが要求された場合、ソースコンテンツがまだ利用可能であれば、再ダウンロードされます。リンクプレビューカードがサードパーティのサイトを更新する頻度に制限があるため、この値を少なくとも14日に設定することをお勧めします。
         peers_api_enabled: このサーバーが Fediverse で遭遇したドメイン名のリストです。このサーバーが知っているだけで、特定のサーバーと連合しているかのデータは含まれません。これは一般的に Fediverse に関する統計情報を収集するサービスによって使用されます。
         profile_directory: ディレクトリには、掲載する設定をしたすべてのユーザーが一覧表示されます。
         receive_other_servers_emoji_reaction: 負荷の原因になります。人が少ない場合にのみ有効にすることをおすすめします。
@@ -360,6 +363,7 @@ ja:
         bootstrap_timeline_accounts: おすすめユーザーに常に表示するアカウント
         check_lts_version_only: 更新チェックの時、LTSバージョンのみ確認する
         closed_registrations_message: アカウント作成を停止している時のカスタムメッセージ
+        content_cache_retention_period: リモートコンテンツの保存期間
         custom_css: カスタムCSS
         delete_content_cache_without_reaction: お気に入り・ブックマークされた投稿を削除対象から除外する
         enable_emoji_reaction: 絵文字リアクション機能を有効にする
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 3292c48289aca1..a26468894b9a33 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -77,10 +77,13 @@ pt-PT:
           warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro
       form_admin_settings:
         activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos
+        backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
         bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
         closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
+        content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado como favoritas ou adicionado aos items salvos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
         custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
         mascot: Sobrepõe-se à ilustração na interface web avançada.
+        media_cache_retention_period: Os ficheiros multimédia de publicações feitas por utilizadores remotos são armazenados em cache no seu servidor. Quando definido para um valor positivo, os ficheiros multimédia serão eliminados após o número de dias especificado. Se os ficheiros multimédia forem solicitados depois de terem sido eliminados, serão transferidos novamente, se o conteúdo de origem ainda estiver disponível. Devido a restrições sobre a frequência com que os cartões de pré-visualização de links pesquisam sites de terceiros, recomenda-se que este valor seja definido para, pelo menos, 14 dias, ou os cartões de pré-visualização de links não serão atualizados a pedido antes desse período.
         peers_api_enabled: Uma lista de nomes de domínio que este servidor encontrou no fediverso. Nenhum dado é incluído aqui sobre se você federa com um determinado servidor, apenas que o seu servidor o conhece. Este serviço é utilizado por serviços que recolhem estatísticas na federação, em termos gerais.
         profile_directory: O diretório de perfis lista todos os utilizadores que optaram por ter a sua conta a ser sugerida a outros.
         require_invite_text: Quando as incrições exigirem aprovação manual, faça o texto "Por que se quer juntar a nós?" da solicitação de convite ser obrigatório, em vez de opcional
@@ -240,6 +243,7 @@ pt-PT:
         backups_retention_period: Período de retenção de arquivos de utilizador
         bootstrap_timeline_accounts: Recomendar sempre estas contas para novos utilizadores
         closed_registrations_message: Mensagem personalizada quando as inscrições não estiverem disponíveis
+        content_cache_retention_period: Período de retenção de conteúdos remotos
         custom_css: CSS personalizado
         mascot: Mascote personalizada (legado)
         media_cache_retention_period: Período de retenção de ficheiros de media em cache
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index a6c93033801eb2..d545f2cd341cba 100644
--- a/config/locales/simple_form.sq.yml
+++ b/config/locales/simple_form.sq.yml
@@ -77,10 +77,13 @@ sq:
           warn: Fshihe lëndën e filtruar pas një sinjalizimi që përmend titullin e filtrit
       form_admin_settings:
         activity_api_enabled: Numër postimesh të botuar lokalisht, përdoruesish aktiv dhe regjistrimesh të reja sipas matjesh javore
+        backups_retention_period: Përdorues kanë aftësinë të prodhojnë arkiva të postimeve të tyre për t’i shkarkuar më vonë. Kur i jepet një vlerë pozitive, këto arkiva do të fshihen automatikisht prej depozitës tuaj pas numrit të dhënë të ditëve.
         bootstrap_timeline_accounts: Këto llogari do të fiksohen në krye të rekomandimeve për ndjekje nga përdorues të rinj.
         closed_registrations_message: Shfaqur kur mbyllen dritare regjistrimesh
+        content_cache_retention_period: Krejt postimet prej shërbyesve të tjerë (përfshi përforcime dhe përgjigje) do të fshihen pas numrit të caktuar të ditëve, pa marrë parasysh çfarëdo ndërveprimi përdoruesi me këto postime. Kjo përfshin postime kur një përdorues vendor u ka vënë shenjë si faqerojtës, ose të parapëlqyer. Do të humbin gjithashtu dhe përmendje private mes përdoruesish nga instanca të ndryshme dhe s’do të jetë e mundshme të rikthehen. Përdorimi i këtij rregullimi është menduar për instanca me qëllim të caktuar dhe ndërhyn në çka presin mjaft përdorues, kur sendërtohet për përdorim të përgjithshëm.
         custom_css: Stile vetjakë mund të aplikoni në versionin web të Mastodon-it.
         mascot: Anashkalon ilustrimin te ndërfaqja web e thelluar.
+        media_cache_retention_period: Kartela media nga postime të bëra nga përdorues të largët ruhen në një fshehtinë në shërbyesin tuaj. Kur i jepet një vlerë pozitive, media do të fshihet pas numrit të dhënë të ditëve. Nëse të dhënat e medias duhen pas fshirjes, do të rishkarkohen, nëse lënda burim mund të kihet ende. Për shkak kufizimesh mbi sa shpesh skeda paraparjesh lidhjesh ndërveprojnë me sajte palësh të treta, rekomandohet të vihet kjo vlerë të paktën 14 ditë, ose skedat e paraparjes së lidhje s’do të përditësohen duke e kërkuar para asaj kohe.
         peers_api_enabled: Një listë emrash përkatësish që ky shërbyes ka hasur në fedivers. Këtu s’jepen të dhëna nëse jeni i federuar me shërbyesin e dhënë, thjesht tregohet se shërbyesi juaj e njeh. Kjo përdoret nga shërbime që mbledhin statistika mbi federimin në kuptimin e përgjithshëm.
         profile_directory: Drejtoria e profileve paraqet krejt përdoruesit që kanë zgjedhur të jenë të zbulueshëm.
         require_invite_text: Kur regjistrimet lypin miratim dorazi, bëje tekstin “Përse doni të bëheni pjesë?” të detyrueshëm, në vend se opsional
@@ -240,6 +243,7 @@ sq:
         backups_retention_period: Periudhë mbajtjeje arkivash përdoruesish
         bootstrap_timeline_accounts: Rekomandoju përherë këto llogari përdoruesve të rinj
         closed_registrations_message: Mesazh vetjak për pamundësi regjistrimesh të reja
+        content_cache_retention_period: Periudhë mbajtjeje lënde të largët
         custom_css: CSS Vetjake
         mascot: Simbol vetjak (e dikurshme)
         media_cache_retention_period: Periudhë mbajtjeje lënde media
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index 3ab16bf69be35c..5e5c6f95491507 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -77,10 +77,13 @@ sv:
           warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik
       form_admin_settings:
         activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka
+        backups_retention_period: Användare har möjlighet att generera arkiv av sina inlägg för att ladda ned senare. När det sätts till ett positivt värde raderas dessa arkiv automatiskt från din lagring efter det angivna antalet dagar.
         bootstrap_timeline_accounts: Dessa konton kommer fästas högst upp i nya användares följrekommendationer.
         closed_registrations_message: Visas när nyregistreringar är avstängda
+        content_cache_retention_period: Alla inlägg från andra servrar (inklusive booster och svar) kommer att raderas efter det angivna antalet dagar, utan hänsyn till någon lokal användarinteraktion med dessa inlägg. Detta inkluderar inlägg där en lokal användare har markerat det som bokmärke eller favoriter. Privata omnämnanden mellan användare från olika instanser kommer också att gå förlorade och blir omöjliga att återställa. Användningen av denna inställning är avsedd för specialfall och bryter många användarförväntningar när de implementeras för allmänt bruk.
         custom_css: Du kan använda anpassade stilar på webbversionen av Mastodon.
         mascot: Åsidosätter illustrationen i det avancerade webbgränssnittet.
+        media_cache_retention_period: Mediafiler från inlägg som gjorts av fjärranvändare cachas på din server. När inställd på ett positivt värde kommer media att raderas efter det angivna antalet dagar. Om mediadatat begärs efter att det har raderats, kommer det att laddas ned igen om källinnehållet fortfarande är tillgängligt. På grund av begränsningar för hur ofta förhandsgranskningskort för länkar hämtas från tredjepartswebbplatser, rekommenderas det att ange detta värde till minst 14 dagar, annars kommer förhandsgranskningskorten inte att uppdateras på begäran före den tiden.
         peers_api_enabled: En lista över domänen den här servern har stött på i fediversum. Ingen data inkluderas om du har federerat med servern, bara att din server känner till den. Detta används av tjänster som samlar statistik om federering i allmänhet.
         profile_directory: Profilkatalogen visar alla användare som har samtyckt till att bli upptäckbara.
         require_invite_text: Gör fältet "Varför vill du gå med?" obligatoriskt när nyregistreringar kräver manuellt godkännande
@@ -240,6 +243,7 @@ sv:
         backups_retention_period: Lagringsperiod för användararkivet
         bootstrap_timeline_accounts: Rekommendera alltid dessa konton till nya användare
         closed_registrations_message: Anpassat meddelande när nyregistreringar inte är tillgängliga
+        content_cache_retention_period: Förvaringsperiod för fjärrinnehåll
         custom_css: Anpassad CSS
         mascot: Anpassad maskot (tekniskt arv)
         media_cache_retention_period: Tid för bibehållande av mediecache
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index bfc2d2e6b6289d..e68642c2f636dc 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -77,8 +77,10 @@ th:
           warn: ซ่อนเนื้อหาที่กรองอยู่หลังคำเตือนที่กล่าวถึงชื่อเรื่องของตัวกรอง
       form_admin_settings:
         activity_api_enabled: จำนวนโพสต์ที่เผยแพร่ในเซิร์ฟเวอร์, ผู้ใช้ที่ใช้งานอยู่ และการลงทะเบียนใหม่ในบักเก็ตรายสัปดาห์
+        backups_retention_period: ผู้ใช้มีความสามารถในการสร้างการเก็บถาวรของโพสต์ของเขาเพื่อดาวน์โหลดในภายหลัง เมื่อตั้งเป็นค่าบวก จะลบการเก็บถาวรเหล่านี้ออกจากที่เก็บข้อมูลของคุณโดยอัตโนมัติหลังจากจำนวนวันที่ระบุ
         bootstrap_timeline_accounts: จะปักหมุดบัญชีเหล่านี้ไว้ด้านบนสุดของคำแนะนำการติดตามของผู้ใช้ใหม่
         closed_registrations_message: แสดงเมื่อมีการปิดการลงทะเบียน
+        content_cache_retention_period: จะลบโพสต์ทั้งหมดจากเซิร์ฟเวอร์อื่น ๆ (รวมถึงการดันและการตอบกลับ) หลังจากจำนวนวันที่ระบุ โดยไม่คำนึงถึงการโต้ตอบใด ๆ ของผู้ใช้ในเซิร์ฟเวอร์กับโพสต์เหล่านั้น สิ่งนี้รวมถึงโพสต์ที่ผู้ใช้ในเซิร์ฟเวอร์ได้ทำเครื่องหมายโพสต์ว่าเป็นที่คั่นหน้าหรือรายการโปรด การกล่าวถึงแบบส่วนตัวระหว่างผู้ใช้จากอินสแตนซ์ที่แตกต่างกันจะหายไปและไม่สามารถคืนค่าได้เช่นกัน การใช้การตั้งค่านี้มีไว้สำหรับอินสแตนซ์ที่มีวัตถุประสงค์พิเศษและทำลายความคาดหวังของผู้ใช้จำนวนมากเมื่อนำไปใช้สำหรับการใช้งานที่มีวัตถุประสงค์ทั่วไป
         custom_css: คุณสามารถนำไปใช้ลักษณะที่กำหนดเองใน Mastodon รุ่นเว็บ
         mascot: เขียนทับภาพประกอบในส่วนติดต่อเว็บขั้นสูง
         peers_api_enabled: รายการชื่อโดเมนที่เซิร์ฟเวอร์นี้พบในจักรวาลสหพันธ์ ไม่มีข้อมูลรวมอยู่ที่นี่เกี่ยวกับว่าคุณติดต่อกับเซิร์ฟเวอร์ที่กำหนดหรือไม่ เพียงแค่ว่าเซิร์ฟเวอร์ของคุณทราบเกี่ยวกับเซิร์ฟเวอร์ที่กำหนด มีการใช้สิ่งนี้โดยบริการที่เก็บรวบรวมสถิติในการติดต่อกับภายนอกในความหมายทั่วไป
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 400059770b76c6..78e7bdb25eafc1 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -524,6 +524,7 @@ sk:
           many: "%{count} poznámok"
           one: "%{count} poznámka"
           other: "%{count} poznámky"
+      action_log: Denník auditu
       action_taken_by: Zákrok vykonal/a
       actions:
         suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu.
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index ff23e648414095..6c26511ad6968a 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -779,6 +779,7 @@ sl:
         desc_html: To se zanaša na zunanje skripte hCaptcha in lahko predstavlja tveganje za varnost in zasebnost. Poleg tega <strong>to lahko nekaterim ljudem (posebno invalidom) občutno oteži dostopnost registracijskega postopka</strong>. Zato svetujemo, da razmislite o drugih ukrepih, kot je na primer registracija na podlagi odobritve ali povabila.
         title: Od novih uporabnikov zahtevaj reševanje CAPTCHA za potrditev računov
       content_retention:
+        danger_zone: Območje nevarnosti
         preamble: Nazdor nad hrambo vsebine uporabnikov v Mastodonu.
         title: Hramba vsebin
       default_noindex:
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index dcacb46bf99819..8319cfcaecac48 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -748,6 +748,7 @@ sq:
         desc_html: Kjo bazohet në programthe të jashtëm prej hCaptcha, çka mund të përbëjë një shqetësim për sigurinë dhe privatësinë. Veç kësaj, <strong>kjo mund ta bëjë procesin e regjistrimit në shkallë të madhe më pak të përdorshëm për disa persona (veçanërisht ata me paaftësi)</strong>. Për këto arsye, ju lutemi, shihni mundësinë e masave alternative, fjala vjen, bazuar në miratim, ose regjistrim vetëm me ftesa.
         title: Kërko prej përdoruesve të rinj të zgjidhin një CAPTCHA, si ripohim të llogarisë të tyre
       content_retention:
+        danger_zone: Zonë rreziku
         preamble: Kontrolloni se si depozitohen në Mastodon lënda e prodhuar nga përdoruesit.
         title: Mbajtje lënde
       default_noindex:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 0d7483d79ae9b7..8a001d875581c5 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1837,6 +1837,7 @@ th:
       explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน
       feature_action: เรียนรู้เพิ่มเติม
       feature_audience: Mastodon มีความพิเศษที่ให้คุณจัดการผู้รับสารของคุณได้โดยไม่มีตัวกลาง นอกจากนี้ การติดตั้ง Mastodon บนโครงสร้างพื้นฐานของคุณจะทำให้คุณสามารถติดตาม (และติดตามโดย) เซิร์ฟเวอร์ Mastodon แห่งไหนก็ได้ที่ทำงานอยู่ โดยไม่มีใครสามารถควบคุมได้นอกจากคุณ
+      feature_audience_title: สร้างผู้ชมของคุณด้วยความมั่นใจ
       follow_action: ติดตาม
       follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ
       follow_title: ปรับแต่งฟีดหน้าแรกของคุณ
diff --git a/config/routes.rb b/config/routes.rb
index 410899c011093d..c86fcc82ba1ba0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -69,6 +69,7 @@ def redirect_with_vary(path)
                 tokens: 'oauth/tokens'
   end
 
+  get '.well-known/oauth-authorization-server', to: 'well_known/oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' }
   get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' }
   get '.well-known/nodeinfo', to: 'well_known/node_info#index', as: :nodeinfo, defaults: { format: 'json' }
   get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger
diff --git a/config/routes/api.rb b/config/routes/api.rb
index 85021f75988466..07332a44983850 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -6,7 +6,7 @@
 
   # JSON / REST API
   namespace :v1 do
-    resources :statuses, only: [:create, :show, :update, :destroy] do
+    resources :statuses, only: [:index, :create, :show, :update, :destroy] do
       scope module: :statuses do
         resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
         resources :favourited_by, controller: :favourited_by_accounts, only: :index
@@ -194,7 +194,7 @@
       resources :familiar_followers, only: :index
     end
 
-    resources :accounts, only: [:create, :show] do
+    resources :accounts, only: [:index, :create, :show] do
       scope module: :accounts do
         resources :statuses, only: :index
         resources :followers, only: :index, controller: :follower_accounts
diff --git a/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb
new file mode 100644
index 00000000000000..f8223f9c9321d0
--- /dev/null
+++ b/db/migrate/20240217175251_convert_file_size_columns_to_big_int.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require_relative '../../lib/mastodon/migration_helpers'
+
+class ConvertFileSizeColumnsToBigInt < ActiveRecord::Migration[7.1]
+  include Mastodon::MigrationHelpers
+
+  TABLE_COLUMN_MAPPING = [
+    [:accounts, :avatar_file_size],
+    [:accounts, :header_file_size],
+    [:custom_emojis, :image_file_size],
+    [:imports, :data_file_size],
+    [:media_attachments, :file_file_size],
+    [:media_attachments, :thumbnail_file_size],
+    [:preview_cards, :image_file_size],
+    [:site_uploads, :file_file_size],
+  ].freeze
+
+  disable_ddl_transaction!
+
+  def migrate_columns(to_type)
+    TABLE_COLUMN_MAPPING.each do |column_parts|
+      table, column = column_parts
+
+      # Skip this if we're resuming and already did this one.
+      next if column_for(table, column).sql_type == to_type.to_s
+
+      safety_assured do
+        change_column_type_concurrently table, column, to_type
+        cleanup_concurrent_column_type_change table, column
+      end
+    end
+  end
+
+  def up
+    migrate_columns(:bigint)
+  end
+
+  def down
+    migrate_columns(:integer)
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b070ac1eee2acc..b5d2f9c977cc98 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -168,11 +168,9 @@
     t.string "url"
     t.string "avatar_file_name"
     t.string "avatar_content_type"
-    t.integer "avatar_file_size"
     t.datetime "avatar_updated_at", precision: nil
     t.string "header_file_name"
     t.string "header_content_type"
-    t.integer "header_file_size"
     t.datetime "header_updated_at", precision: nil
     t.string "avatar_remote_url"
     t.boolean "locked", default: false, null: false
@@ -206,6 +204,8 @@
     t.boolean "indexable", default: false, null: false
     t.jsonb "master_settings"
     t.boolean "remote_pending", default: false, null: false
+    t.bigint "avatar_file_size"
+    t.bigint "header_file_size"
     t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin
     t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true
     t.index ["domain", "id"], name: "index_accounts_on_domain_and_id"
@@ -491,7 +491,6 @@
     t.string "domain"
     t.string "image_file_name"
     t.string "image_content_type"
-    t.integer "image_file_size"
     t.datetime "image_updated_at", precision: nil
     t.datetime "created_at", precision: nil, null: false
     t.datetime "updated_at", precision: nil, null: false
@@ -506,6 +505,7 @@
     t.jsonb "aliases"
     t.boolean "is_sensitive", default: false, null: false
     t.string "license"
+    t.bigint "image_file_size"
     t.index ["shortcode", "domain"], name: "index_custom_emojis_on_shortcode_and_domain", unique: true
   end
 
@@ -732,10 +732,10 @@
     t.datetime "updated_at", precision: nil, null: false
     t.string "data_file_name"
     t.string "data_content_type"
-    t.integer "data_file_size"
     t.datetime "data_updated_at", precision: nil
     t.bigint "account_id", null: false
     t.boolean "overwrite", default: false, null: false
+    t.bigint "data_file_size"
   end
 
   create_table "instance_infos", force: :cascade do |t|
@@ -829,7 +829,6 @@
     t.bigint "status_id"
     t.string "file_file_name"
     t.string "file_content_type"
-    t.integer "file_file_size"
     t.datetime "file_updated_at", precision: nil
     t.string "remote_url", default: "", null: false
     t.datetime "created_at", precision: nil, null: false
@@ -845,9 +844,10 @@
     t.integer "file_storage_schema_version"
     t.string "thumbnail_file_name"
     t.string "thumbnail_content_type"
-    t.integer "thumbnail_file_size"
     t.datetime "thumbnail_updated_at", precision: nil
     t.string "thumbnail_remote_url"
+    t.bigint "file_file_size"
+    t.bigint "thumbnail_file_size"
     t.index ["account_id", "status_id"], name: "index_media_attachments_on_account_id_and_status_id", order: { status_id: :desc }
     t.index ["id"], name: "index_media_attachments_vacuum", where: "((file_file_name IS NOT NULL) AND ((remote_url)::text <> ''::text))"
     t.index ["scheduled_status_id"], name: "index_media_attachments_on_scheduled_status_id", where: "(scheduled_status_id IS NOT NULL)"
@@ -1153,7 +1153,6 @@
     t.string "description", default: "", null: false
     t.string "image_file_name"
     t.string "image_content_type"
-    t.integer "image_file_size"
     t.datetime "image_updated_at", precision: nil
     t.integer "type", default: 0, null: false
     t.text "html", default: "", null: false
@@ -1175,6 +1174,7 @@
     t.integer "link_type"
     t.datetime "published_at"
     t.string "image_description", default: "", null: false
+    t.bigint "image_file_size"
     t.index ["id"], name: "index_preview_cards_vacuum", where: "((image_file_name IS NOT NULL) AND ((image_file_name)::text <> ''::text))"
     t.index ["url"], name: "index_preview_cards_on_url", unique: true
   end
@@ -1312,12 +1312,12 @@
     t.string "var", default: "", null: false
     t.string "file_file_name"
     t.string "file_content_type"
-    t.integer "file_file_size"
     t.datetime "file_updated_at", precision: nil
     t.json "meta"
     t.datetime "created_at", precision: nil, null: false
     t.datetime "updated_at", precision: nil, null: false
     t.string "blurhash"
+    t.bigint "file_file_size"
     t.index ["var"], name: "index_site_uploads_on_var", unique: true
   end
 
diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake
index 4208c2ae4b5bca..07de087766d8eb 100644
--- a/lib/tasks/db.rake
+++ b/lib/tasks/db.rake
@@ -1,6 +1,22 @@
 # frozen_string_literal: true
 
+# We are providing our own task with our own format
+Rake::Task['db:encryption:init'].clear
+
 namespace :db do
+  namespace :encryption do
+    desc 'Generate a set of keys for configuring Active Record encryption in a given environment'
+    task init: :environment do
+      puts <<~MSG
+        Add these environment variables to your Mastodon environment:#{' '}
+
+        ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=#{SecureRandom.alphanumeric(32)}
+        ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=#{SecureRandom.alphanumeric(32)}
+        ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=#{SecureRandom.alphanumeric(32)}
+      MSG
+    end
+  end
+
   namespace :migrate do
     desc 'Setup the db or migrate depending on state of db'
     task setup: :environment do
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 35d72c867d82f9..616ef5e7e8fadf 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -289,4 +289,28 @@ def current_theme = 'default'
       end
     end
   end
+
+  describe '#site_icon_path' do
+    context 'when an icon exists' do
+      let!(:favicon) { Fabricate(:site_upload, var: 'favicon') }
+
+      it 'returns the URL of the icon' do
+        expect(helper.site_icon_path('favicon')).to eq(favicon.file.url('48'))
+      end
+
+      it 'returns the URL of the icon with size parameter' do
+        expect(helper.site_icon_path('favicon', 16)).to eq(favicon.file.url('16'))
+      end
+    end
+
+    context 'when an icon does not exist' do
+      it 'returns nil' do
+        expect(helper.site_icon_path('favicon')).to be_nil
+      end
+
+      it 'returns nil with size parameter' do
+        expect(helper.site_icon_path('favicon', 16)).to be_nil
+      end
+    end
+  end
 end
diff --git a/spec/lib/admin/system_check/elasticsearch_check_spec.rb b/spec/lib/admin/system_check/elasticsearch_check_spec.rb
index a885640ce0c603..8f210579d000ac 100644
--- a/spec/lib/admin/system_check/elasticsearch_check_spec.rb
+++ b/spec/lib/admin/system_check/elasticsearch_check_spec.rb
@@ -127,7 +127,7 @@
   end
 
   def stub_elasticsearch_error
-    client = instance_double(Elasticsearch::Transport::Client)
+    client = instance_double(Elasticsearch::Client)
     allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error)
     allow(Chewy).to receive(:client).and_return(client)
   end
diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb
index e855bb7ce547d2..18a62e451cc98f 100644
--- a/spec/models/status_spec.rb
+++ b/spec/models/status_spec.rb
@@ -380,6 +380,48 @@
     end
   end
 
+  describe '#reported?' do
+    context 'when the status is not reported' do
+      it 'returns false' do
+        expect(subject.reported?).to be false
+      end
+    end
+
+    context 'when the status is part of an open report' do
+      before do
+        Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
+      end
+
+      it 'returns true' do
+        expect(subject.reported?).to be true
+      end
+    end
+
+    context 'when the status is part of a closed report with an account warning mentioning the account' do
+      before do
+        report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
+        report.resolve!(Fabricate(:account))
+        Fabricate(:account_warning, target_account: subject.account, status_ids: [subject.id], report: report)
+      end
+
+      it 'returns true' do
+        expect(subject.reported?).to be true
+      end
+    end
+
+    context 'when the status is part of a closed report with an account warning not mentioning the account' do
+      before do
+        report = Fabricate(:report, target_account: subject.account, status_ids: [subject.id])
+        report.resolve!(Fabricate(:account))
+        Fabricate(:account_warning, target_account: subject.account, report: report)
+      end
+
+      it 'returns false' do
+        expect(subject.reported?).to be false
+      end
+    end
+  end
+
   describe '.mutes_map' do
     subject { described_class.mutes_map([status.conversation.id], account) }
 
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
index 4c2bdd52f4b579..7799afe44b2708 100644
--- a/spec/models/tag_spec.rb
+++ b/spec/models/tag_spec.rb
@@ -36,6 +36,10 @@
       expect(subject.match('https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111895#c4')).to be_nil
     end
 
+    it 'does not match URLs with hashtag-like anchors after a non-ascii character' do
+      expect(subject.match('https://example.org/testé#foo')).to be_nil
+    end
+
     it 'does not match URLs with hashtag-like anchors after an empty query parameter' do
       expect(subject.match('https://en.wikipedia.org/wiki/Ghostbusters_(song)?foo=#Lawsuit')).to be_nil
     end
diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb
index f7131e232bdf71..9cd6e8abfb5980 100644
--- a/spec/requests/api/v1/accounts_spec.rb
+++ b/spec/requests/api/v1/accounts_spec.rb
@@ -8,6 +8,22 @@
   let(:token)   { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
   let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
 
+  describe 'GET /api/v1/accounts?ids[]=:id' do
+    let(:account) { Fabricate(:account) }
+    let(:other_account) { Fabricate(:account) }
+    let(:scopes) { 'read:accounts' }
+
+    it 'returns expected response' do
+      get '/api/v1/accounts', headers: headers, params: { ids: [account.id, other_account.id, 123_123] }
+
+      expect(response).to have_http_status(200)
+      expect(body_as_json).to contain_exactly(
+        hash_including(id: account.id.to_s),
+        hash_including(id: other_account.id.to_s)
+      )
+    end
+  end
+
   describe 'GET /api/v1/accounts/:id' do
     context 'when logged out' do
       let(:account) { Fabricate(:account) }
diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb
index aa94d79f510e9d..1bf0ecaab96868 100644
--- a/spec/requests/api/v1/statuses_spec.rb
+++ b/spec/requests/api/v1/statuses_spec.rb
@@ -9,6 +9,22 @@
     let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: client_app, scopes: scopes) }
     let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
 
+    describe 'GET /api/v1/statuses?ids[]=:id' do
+      let(:status) { Fabricate(:status) }
+      let(:other_status) { Fabricate(:status) }
+      let(:scopes) { 'read:statuses' }
+
+      it 'returns expected response' do
+        get '/api/v1/statuses', headers: headers, params: { ids: [status.id, other_status.id, 123_123] }
+
+        expect(response).to have_http_status(200)
+        expect(body_as_json).to contain_exactly(
+          hash_including(id: status.id.to_s),
+          hash_including(id: other_status.id.to_s)
+        )
+      end
+    end
+
     describe 'GET /api/v1/statuses/:id' do
       subject do
         get "/api/v1/statuses/#{status.id}", headers: headers
diff --git a/spec/requests/well_known/oauth_metadata_spec.rb b/spec/requests/well_known/oauth_metadata_spec.rb
new file mode 100644
index 00000000000000..deef189ac909f3
--- /dev/null
+++ b/spec/requests/well_known/oauth_metadata_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe 'The /.well-known/oauth-authorization-server request' do
+  let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http }
+
+  before do
+    host! ENV.fetch('LOCAL_DOMAIN')
+  end
+
+  it 'returns http success with valid JSON response' do
+    get '/.well-known/oauth-authorization-server'
+
+    expect(response)
+      .to have_http_status(200)
+      .and have_attributes(
+        media_type: 'application/json'
+      )
+
+    grant_types_supported = Doorkeeper.configuration.grant_flows.dup
+    grant_types_supported << 'refresh_token' if Doorkeeper.configuration.refresh_token_enabled?
+
+    expect(body_as_json).to include(
+      issuer: root_url(protocol: protocol),
+      service_documentation: 'https://docs.joinmastodon.org/',
+      authorization_endpoint: oauth_authorization_url(protocol: protocol),
+      token_endpoint: oauth_token_url(protocol: protocol),
+      revocation_endpoint: oauth_revoke_url(protocol: protocol),
+      scopes_supported: Doorkeeper.configuration.scopes.map(&:to_s),
+      response_types_supported: Doorkeeper.configuration.authorization_response_types,
+      grant_types_supported: grant_types_supported,
+      # non-standard extension:
+      app_registration_endpoint: api_v1_apps_url(protocol: protocol)
+    )
+  end
+end
diff --git a/streaming/package.json b/streaming/package.json
index c4dcccf1f57acc..f08d2a4c2d1e86 100644
--- a/streaming/package.json
+++ b/streaming/package.json
@@ -25,7 +25,7 @@
     "pg": "^8.5.0",
     "pg-connection-string": "^2.6.0",
     "pino": "^9.0.0",
-    "pino-http": "^9.0.0",
+    "pino-http": "^10.0.0",
     "prom-client": "^15.0.0",
     "uuid": "^9.0.0",
     "ws": "^8.12.1"
diff --git a/yarn.lock b/yarn.lock
index cb63888ca7733e..cfbe3500db8f82 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1551,13 +1551,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/cascade-layer-name-parser@npm:^1.0.9":
-  version: 1.0.9
-  resolution: "@csstools/cascade-layer-name-parser@npm:1.0.9"
+"@csstools/cascade-layer-name-parser@npm:^1.0.11":
+  version: 1.0.11
+  resolution: "@csstools/cascade-layer-name-parser@npm:1.0.11"
   peerDependencies:
-    "@csstools/css-parser-algorithms": ^2.6.1
-    "@csstools/css-tokenizer": ^2.2.4
-  checksum: 10c0/f6e28c7cdeca44711288400cf20de9ebc4db71eafa39ca9a6b3e9f5d3295ba636dd986aac9fcb9e6171c84d436712d68ced923504d78d5fda0601c880eb352fe
+    "@csstools/css-parser-algorithms": ^2.6.3
+    "@csstools/css-tokenizer": ^2.3.1
+  checksum: 10c0/52ac8369877c8072ff5c111f656bd87e9a2a4b9e44e48fe005c26faeb6cffd83bfe2f463f4f385a2ae5cfe1f82bbf95d26ddaabca18b66c6b657c4fe1520fb43
   languageName: node
   linkType: hard
 
@@ -1568,52 +1568,52 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/css-calc@npm:^1.2.0":
-  version: 1.2.0
-  resolution: "@csstools/css-calc@npm:1.2.0"
+"@csstools/css-calc@npm:^1.2.2":
+  version: 1.2.2
+  resolution: "@csstools/css-calc@npm:1.2.2"
   peerDependencies:
-    "@csstools/css-parser-algorithms": ^2.6.1
-    "@csstools/css-tokenizer": ^2.2.4
-  checksum: 10c0/ef12dc08ccdb9903e5cb24d81b469080b94c79123415f62f707196a85c53420b7729be608930314c7a9404f50c832fe5256f647c0567d1c825079cb77f6a8719
+    "@csstools/css-parser-algorithms": ^2.6.3
+    "@csstools/css-tokenizer": ^2.3.1
+  checksum: 10c0/6032b482764a11c1b882d7502928950ab11760044fa7a2c23ecee802002902f6ea8fca045ee2919302af5a5c399e7baa9f68dff001ac6246ac7fef48fb3f6df7
   languageName: node
   linkType: hard
 
-"@csstools/css-color-parser@npm:^2.0.0":
-  version: 2.0.0
-  resolution: "@csstools/css-color-parser@npm:2.0.0"
+"@csstools/css-color-parser@npm:^2.0.2":
+  version: 2.0.2
+  resolution: "@csstools/css-color-parser@npm:2.0.2"
   dependencies:
     "@csstools/color-helpers": "npm:^4.2.0"
-    "@csstools/css-calc": "npm:^1.2.0"
+    "@csstools/css-calc": "npm:^1.2.2"
   peerDependencies:
-    "@csstools/css-parser-algorithms": ^2.6.1
-    "@csstools/css-tokenizer": ^2.2.4
-  checksum: 10c0/295f844a194dec4f51439e8760dbb4a142901b8b60cd9d676a62c15c0e8408eb7bcdcbb40be52cdd5f67d020e655a1c3267a28923cfc4f6bae2b74aa48fce426
+    "@csstools/css-parser-algorithms": ^2.6.3
+    "@csstools/css-tokenizer": ^2.3.1
+  checksum: 10c0/c5ae4ad78745e425dce56da9f1ab053fb4f7963399735df3303305b32123bed0b2237689c2e7e99da2c62387e3226c12ea85e70e275c4027c7507e4ac929bffa
   languageName: node
   linkType: hard
 
-"@csstools/css-parser-algorithms@npm:^2.6.1":
-  version: 2.6.1
-  resolution: "@csstools/css-parser-algorithms@npm:2.6.1"
+"@csstools/css-parser-algorithms@npm:^2.6.1, @csstools/css-parser-algorithms@npm:^2.6.3":
+  version: 2.6.3
+  resolution: "@csstools/css-parser-algorithms@npm:2.6.3"
   peerDependencies:
-    "@csstools/css-tokenizer": ^2.2.4
-  checksum: 10c0/2c60377c4ffc96bbeb962cab19c09fccbcc834785928747219ed3bd916a34e52977393935d1d36501403f3f95ff59d358dd741d1dddcdaf9564ab36d73926aa6
+    "@csstools/css-tokenizer": ^2.3.1
+  checksum: 10c0/6648fda75a1c08096320fb5c04fd13656a0168de13584d2795547fecfb26c2c7d8b3b1fb79ba7aa758714851e98bfbec20d89e28697f999f41f91133eafe4207
   languageName: node
   linkType: hard
 
-"@csstools/css-tokenizer@npm:^2.2.4":
-  version: 2.2.4
-  resolution: "@csstools/css-tokenizer@npm:2.2.4"
-  checksum: 10c0/23997db5874514f4b951ebd215e1e6cc8baf03adf9a35fc6fd028b84cb52aa2dc053860722108c09859a9b37b455f62b84181fe15539cd37797ea699b9ff85f0
+"@csstools/css-tokenizer@npm:^2.2.4, @csstools/css-tokenizer@npm:^2.3.1":
+  version: 2.3.1
+  resolution: "@csstools/css-tokenizer@npm:2.3.1"
+  checksum: 10c0/fed6619fb5108e109d4dd10b0e967035a92793bae8fb84544e1342058b6df4e306d9d075623e2201fe88831b1ada797aea3546a8d12229d2d81cd7a5dfee4444
   languageName: node
   linkType: hard
 
-"@csstools/media-query-list-parser@npm:^2.1.9":
-  version: 2.1.9
-  resolution: "@csstools/media-query-list-parser@npm:2.1.9"
+"@csstools/media-query-list-parser@npm:^2.1.11, @csstools/media-query-list-parser@npm:^2.1.9":
+  version: 2.1.11
+  resolution: "@csstools/media-query-list-parser@npm:2.1.11"
   peerDependencies:
-    "@csstools/css-parser-algorithms": ^2.6.1
-    "@csstools/css-tokenizer": ^2.2.4
-  checksum: 10c0/602e9b5631928c078e670018df20b959bfb8e42ea11024d5218f1604e5ef94e070a74934a919ccbff3713e506d99096057947fa0c2e4768939f7b22479553534
+    "@csstools/css-parser-algorithms": ^2.6.3
+    "@csstools/css-tokenizer": ^2.3.1
+  checksum: 10c0/9bcd99f7d28ae3cdaba73fbbfef571b0393dd4e841f522cc796fe5161744f17e327ba1713dad3c481626fade1357c55890e3d365177abed50e857b69130a9be5
   languageName: node
   linkType: hard
 
@@ -1629,46 +1629,46 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-color-function@npm:^3.0.14":
-  version: 3.0.14
-  resolution: "@csstools/postcss-color-function@npm:3.0.14"
+"@csstools/postcss-color-function@npm:^3.0.16":
+  version: 3.0.16
+  resolution: "@csstools/postcss-color-function@npm:3.0.16"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/81592b0eb3ad7022313ecafd028908b167de42acc6765f708c9b10631f86123c2b803aca27378f021c2b3dab8cc47770c0364fe5a3c1e18ec006deaf72e17c38
+  checksum: 10c0/41756a4601a3f1086290dab6ca92b54e201bd94637b54b439c66a04fd628a14e2a0bd1452ad294d2981e2f4bb306758fa5f44639b1c4332320435050749aa487
   languageName: node
   linkType: hard
 
-"@csstools/postcss-color-mix-function@npm:^2.0.14":
-  version: 2.0.14
-  resolution: "@csstools/postcss-color-mix-function@npm:2.0.14"
+"@csstools/postcss-color-mix-function@npm:^2.0.16":
+  version: 2.0.16
+  resolution: "@csstools/postcss-color-mix-function@npm:2.0.16"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/1dd3c63bbbbb9d3094699f169bbb9d26e86a49accb5f9abaa2441b54cb8a6f4cd332409666684a275eca867e3ef0ea3f6eafdf9fb87f2cbfa17c6296fb1ed4d7
+  checksum: 10c0/70cd5b291dd615e20e4475517bf0027c90c433241397a66866f89acedb12cb91f45552a162bdd1000636ec56f7d6a099b65e44fe100fd03228fc65f17cfae285
   languageName: node
   linkType: hard
 
-"@csstools/postcss-exponential-functions@npm:^1.0.5":
-  version: 1.0.5
-  resolution: "@csstools/postcss-exponential-functions@npm:1.0.5"
+"@csstools/postcss-exponential-functions@npm:^1.0.7":
+  version: 1.0.7
+  resolution: "@csstools/postcss-exponential-functions@npm:1.0.7"
   dependencies:
-    "@csstools/css-calc": "npm:^1.2.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-calc": "npm:^1.2.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/45e18ca9025597da29cbef214cef39fcabef1e169bbb1f5c015de5f677e2927a1c3b8ae18558d815701e8d3e64db1043412a222af35036c92c25011a0e1e027d
+  checksum: 10c0/2079c81c3437686ef432d88502fa3a13bf8a27b7af105b4c6c2eb8e779f14adc8967a5a3ed03271ab919eeaf999fc4489fe4b37d32a8f61ab3212439517bddcc
   languageName: node
   linkType: hard
 
@@ -1684,46 +1684,46 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-gamut-mapping@npm:^1.0.7":
-  version: 1.0.7
-  resolution: "@csstools/postcss-gamut-mapping@npm:1.0.7"
+"@csstools/postcss-gamut-mapping@npm:^1.0.9":
+  version: 1.0.9
+  resolution: "@csstools/postcss-gamut-mapping@npm:1.0.9"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/7b349db44fcd697d57172ab63b7a02a56c0b49bce17e48cb72aa0fa246bd2be83fe693c507fd400a9ed83597a711d18ece9319ee3af8000c8fd3a2761e228a11
+  checksum: 10c0/412ae1410f3fce240401576441637c2c4e71d1a54153ac9b7a991b3de7519c253d03e10db78b09872eb10b0776d7f960b442779efabc11332b5be6672163c836
   languageName: node
   linkType: hard
 
-"@csstools/postcss-gradients-interpolation-method@npm:^4.0.15":
-  version: 4.0.15
-  resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.15"
+"@csstools/postcss-gradients-interpolation-method@npm:^4.0.17":
+  version: 4.0.17
+  resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.17"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/dc0bbf6a4787d5ad3f9fe268dfa9776ecdc25b6cc0a49486bf53238341a339647f1e475240ead3cec1f4af9a237f6518ace015103e90ce8afe4d44539a566e04
+  checksum: 10c0/465ac42856ca1a57aa2b9ea41ede31d9e2bcf2fe84345dbc182ae41f463069a0cfd41041b834b5133108c702cd85ecb8636b51b0b88fff8a221628639b59f386
   languageName: node
   linkType: hard
 
-"@csstools/postcss-hwb-function@npm:^3.0.13":
-  version: 3.0.13
-  resolution: "@csstools/postcss-hwb-function@npm:3.0.13"
+"@csstools/postcss-hwb-function@npm:^3.0.15":
+  version: 3.0.15
+  resolution: "@csstools/postcss-hwb-function@npm:3.0.15"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/684c3d408ceb027e7276c4f25c9a17ef9bd52f0948268cf58b5184097e9b71f5364a41b42bab44691938c6fadffcba0c8e66f809a339a8b282f4a432d32d00ef
+  checksum: 10c0/fdfaeefbab1008ab1e4a98a2b45cc3db002b2724c404fa0600954b411a68b1fa4028286250bf9898eed10fa80c44e4d6b4e55f1aca073c3dfce8198a0aaedf3f
   languageName: node
   linkType: hard
 
@@ -1761,17 +1761,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-light-dark-function@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "@csstools/postcss-light-dark-function@npm:1.0.3"
+"@csstools/postcss-light-dark-function@npm:^1.0.5":
+  version: 1.0.5
+  resolution: "@csstools/postcss-light-dark-function@npm:1.0.5"
   dependencies:
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/99a1b72aba08a6fa5c7271d42f4459d86f001fe83f533c0ed3d21556f53ee227f65f94cda1feee1aa910890fc42482f15a4dfb3edbc7afdad828ce8897d0c52b
+  checksum: 10c0/4fbeda98372d0da25d3ed87da09903c9a0a5d0b8c13cc9de82a98acce4a8f8367e5ba33bfc25c2534d10f2b1db9d5b4278df4ebab755e27ef2b03a95e0ebe264
   languageName: node
   linkType: hard
 
@@ -1813,42 +1813,42 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-logical-viewport-units@npm:^2.0.7":
-  version: 2.0.7
-  resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.7"
+"@csstools/postcss-logical-viewport-units@npm:^2.0.9":
+  version: 2.0.9
+  resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.9"
   dependencies:
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/9493f5395ccfe88d0d0740e54f77f0c844afc79b164068fdd907aed75004b4252ba9423dea22194ad98114dd1a2e77c14e307604305d926425251d4ab3013949
+  checksum: 10c0/25b01e36b08c571806d09046be63582dbebf97a4612df59be405fa8a92e6eebcd4e768ad7fbe53b0b8739d6ab04d56957964fb04d6a3ea129fc5f72e6d0adf95
   languageName: node
   linkType: hard
 
-"@csstools/postcss-media-minmax@npm:^1.1.4":
-  version: 1.1.4
-  resolution: "@csstools/postcss-media-minmax@npm:1.1.4"
+"@csstools/postcss-media-minmax@npm:^1.1.6":
+  version: 1.1.6
+  resolution: "@csstools/postcss-media-minmax@npm:1.1.6"
   dependencies:
-    "@csstools/css-calc": "npm:^1.2.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
-    "@csstools/media-query-list-parser": "npm:^2.1.9"
+    "@csstools/css-calc": "npm:^1.2.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
+    "@csstools/media-query-list-parser": "npm:^2.1.11"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/620bb85065195c72cf9c0abe9af822f9feeaf919b53bfd47ec09f75b644cb544bd967b09278c48f829348808b34c552718c1aa3eb5342e2dec983e22eb63b0a0
+  checksum: 10c0/2cbfb3728a232c655d82f63d5ac7da36876d14e5fee5d62a0738efed40c58f20ef11f600395ade24d5063d750e8e093251dd93cc361f782b5a6c0e0f80288f51
   languageName: node
   linkType: hard
 
-"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.7":
-  version: 2.0.7
-  resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.7"
+"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.9":
+  version: 2.0.9
+  resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.9"
   dependencies:
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
-    "@csstools/media-query-list-parser": "npm:^2.1.9"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
+    "@csstools/media-query-list-parser": "npm:^2.1.11"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/d5d52a744f9a9466d86a506aab430811778dfa681d3f52f5486ee9b686390919eaae9ad356b84bc782d263227f35913ef68d9a6c3eefcfc38d8ffaccc9b94de0
+  checksum: 10c0/d431d2900a7177c938d9dc2d5bdf3c1930758adc214cc72f94b34e6bbd02fd917c200dc81482db515519c97d4f1e766ba3200f3ec9b55081887f2f8111f68e20
   languageName: node
   linkType: hard
 
@@ -1875,18 +1875,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-oklab-function@npm:^3.0.14":
-  version: 3.0.14
-  resolution: "@csstools/postcss-oklab-function@npm:3.0.14"
+"@csstools/postcss-oklab-function@npm:^3.0.16":
+  version: 3.0.16
+  resolution: "@csstools/postcss-oklab-function@npm:3.0.16"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/dfe0b12c2256dded995c64825fac9507be9c747d776cfa09eeefff6dee0efa5eed6a92a1ecba39069a751a7fc3cefa8891c34209a7a3c7ea33d356c95d01a02d
+  checksum: 10c0/9c67ee5f51116df16ab6baffa1b3c6c7aa93d53b836f421125ae8824075bd3cfaa1a93594466de0ac935c89c4fc8171e80974e1a15bafa23ea864e4cf1f1c1f2
   languageName: node
   linkType: hard
 
@@ -1901,18 +1901,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-relative-color-syntax@npm:^2.0.14":
-  version: 2.0.14
-  resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.14"
+"@csstools/postcss-relative-color-syntax@npm:^2.0.16":
+  version: 2.0.16
+  resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.16"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/64cd5f8054e4403f4e25ed11a5b9d157098af639dbc30ac25b94660b3af489c0bacc49fc439cba1ccceefa4caa5831a913e3d1d889a9796cc6fbf3902c7c31c1
+  checksum: 10c0/cdc965706212dcbc03394f55c79a0ad043d1e0174059c4d0d90e4267fe8e6fd9eef7cfed4f5bbc1f8e89c225c1c042ae792e115bba198eb2daae763d65f44679
   languageName: node
   linkType: hard
 
@@ -1927,16 +1927,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-stepped-value-functions@npm:^3.0.6":
-  version: 3.0.6
-  resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.6"
+"@csstools/postcss-stepped-value-functions@npm:^3.0.8":
+  version: 3.0.8
+  resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.8"
   dependencies:
-    "@csstools/css-calc": "npm:^1.2.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-calc": "npm:^1.2.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/a198aedc4fffe88909c92bfaa36031e6803e739a2578ba4a81c01b9f1525e6a6876d6ffacbbe21701298598dcade8b2ac8423d8ab0fc5d9f4ba86ed60f53cbca
+  checksum: 10c0/2be66aa769808245137be8ff14308aa17c3a0d75433f6fd6789114966a78c365dbf173d087e7ff5bc80118c75be2ff740baab83ed39fc0671980f6217779956b
   languageName: node
   linkType: hard
 
@@ -1952,16 +1952,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/postcss-trigonometric-functions@npm:^3.0.6":
-  version: 3.0.6
-  resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.6"
+"@csstools/postcss-trigonometric-functions@npm:^3.0.8":
+  version: 3.0.8
+  resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.8"
   dependencies:
-    "@csstools/css-calc": "npm:^1.2.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-calc": "npm:^1.2.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/4b484af853d9eb59a4a4b1c063fcf48e2658bb2d6930dfab1d79e676986534687e6440b8cdcd2731ddcb7726537f4ed484208a2b80ef2c9359053762ba35e5e7
+  checksum: 10c0/aeed8d1026f4a5cb7afafbadd739af84291d5bfcbcdef2f79b77174f003d0cd0c7f9deb3fe0b9377efab37ce9bb17a2499efd4af8211f5ff9eb01b878b0b62b3
   languageName: node
   linkType: hard
 
@@ -2212,16 +2212,37 @@ __metadata:
   linkType: hard
 
 "@formatjs/cli@npm:^6.1.1":
-  version: 6.2.9
-  resolution: "@formatjs/cli@npm:6.2.9"
-  peerDependencies:
+  version: 6.2.10
+  resolution: "@formatjs/cli@npm:6.2.10"
+  peerDependencies:
+    "@glimmer/env": ^0.1.7
+    "@glimmer/reference": ^0.91.1
+    "@glimmer/syntax": ^0.91.1
+    "@glimmer/validator": ^0.91.1
+    "@vue/compiler-core": ^3.4.0
+    content-tag: ^2.0.1
+    ember-template-recast: ^6.1.4
     vue: ^3.4.0
   peerDependenciesMeta:
+    "@glimmer/env":
+      optional: true
+    "@glimmer/reference":
+      optional: true
+    "@glimmer/syntax":
+      optional: true
+    "@glimmer/validator":
+      optional: true
+    "@vue/compiler-core":
+      optional: true
+    content-tag:
+      optional: true
+    ember-template-recast:
+      optional: true
     vue:
       optional: true
   bin:
     formatjs: bin/formatjs
-  checksum: 10c0/498383bcdca7f8f8a748c1151be17392f71eb1861f6a23bc714280533167cba7cdc35a470a380113f6111236e721ff43cbee7b084939dac67b6a5d9b04c0587c
+  checksum: 10c0/34b1b0b3be25d945111c1f57913f50da7308ecd05501a27eaca210a774eb50c616b5706ba796d37ffa223ac4c5cddd5f36fe0ca8d31ad8c8ade79cdd497ccfb9
   languageName: node
   linkType: hard
 
@@ -2307,23 +2328,23 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@formatjs/intl@npm:2.10.1":
-  version: 2.10.1
-  resolution: "@formatjs/intl@npm:2.10.1"
+"@formatjs/intl@npm:2.10.2":
+  version: 2.10.2
+  resolution: "@formatjs/intl@npm:2.10.2"
   dependencies:
     "@formatjs/ecma402-abstract": "npm:1.18.2"
     "@formatjs/fast-memoize": "npm:2.2.0"
     "@formatjs/icu-messageformat-parser": "npm:2.7.6"
     "@formatjs/intl-displaynames": "npm:6.6.6"
     "@formatjs/intl-listformat": "npm:7.5.5"
-    intl-messageformat: "npm:10.5.11"
+    intl-messageformat: "npm:10.5.12"
     tslib: "npm:^2.4.0"
   peerDependencies:
     typescript: ^4.7 || 5
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/24eee77382d1efd226aee7590228d3ae80f66a8547a65295f8028986b15b6abbfea3e380f4a338ece0e841e1db6f36554ca48124d84c0830382e3a9d395b5d75
+  checksum: 10c0/20df407e141055e8c7b2605c06e952b643be7ea01d992862e13fc623ca2db034069744eae2be16655bf7888b3add1bfc2653fd0a08bcfdb67fb9b72a306f7718
   languageName: node
   linkType: hard
 
@@ -2925,7 +2946,7 @@ __metadata:
     pg: "npm:^8.5.0"
     pg-connection-string: "npm:^2.6.0"
     pino: "npm:^9.0.0"
-    pino-http: "npm:^9.0.0"
+    pino-http: "npm:^10.0.0"
     pino-pretty: "npm:^11.0.0"
     prom-client: "npm:^15.0.0"
     typescript: "npm:^5.0.4"
@@ -3353,8 +3374,8 @@ __metadata:
   linkType: hard
 
 "@testing-library/jest-dom@npm:^6.0.0":
-  version: 6.4.2
-  resolution: "@testing-library/jest-dom@npm:6.4.2"
+  version: 6.4.5
+  resolution: "@testing-library/jest-dom@npm:6.4.5"
   dependencies:
     "@adobe/css-tools": "npm:^4.3.2"
     "@babel/runtime": "npm:^7.9.2"
@@ -3362,7 +3383,7 @@ __metadata:
     chalk: "npm:^3.0.0"
     css.escape: "npm:^1.5.1"
     dom-accessibility-api: "npm:^0.6.3"
-    lodash: "npm:^4.17.15"
+    lodash: "npm:^4.17.21"
     redent: "npm:^3.0.0"
   peerDependencies:
     "@jest/globals": ">= 28"
@@ -3381,21 +3402,25 @@ __metadata:
       optional: true
     vitest:
       optional: true
-  checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc
+  checksum: 10c0/4cfdd44e2abab2b9d399c47cbfe686729bb65160d7df0f9e2329aaaea7702f6e852a9eefb29b468f00c1e5a5274b684f8cac76959d33299dfa909ba007ea191d
   languageName: node
   linkType: hard
 
 "@testing-library/react@npm:^15.0.0":
-  version: 15.0.5
-  resolution: "@testing-library/react@npm:15.0.5"
+  version: 15.0.6
+  resolution: "@testing-library/react@npm:15.0.6"
   dependencies:
     "@babel/runtime": "npm:^7.12.5"
     "@testing-library/dom": "npm:^10.0.0"
     "@types/react-dom": "npm:^18.0.0"
   peerDependencies:
+    "@types/react": ^18.0.0
     react: ^18.0.0
     react-dom: ^18.0.0
-  checksum: 10c0/8759cc8e7e6b4d8964f151d8872ea3c91b6ef6d8fb3b9116fae53350b9a6b29e5ad45b18408c22525924d050263f7ea77cd17ca803918759f22a760f68a42227
+  peerDependenciesMeta:
+    "@types/react":
+      optional: true
+  checksum: 10c0/3705a2272f929f2f848f5d7e6ac9829bf7ecc1725a35733ffae7e7a261d4bdab470b080558e8544edb1f9ba25db9fbc4232527df9b4ec6ab6ae4462a902a7f95
   languageName: node
   linkType: hard
 
@@ -3696,9 +3721,9 @@ __metadata:
   linkType: hard
 
 "@types/lodash@npm:^4.14.195":
-  version: 4.17.0
-  resolution: "@types/lodash@npm:4.17.0"
-  checksum: 10c0/4c5b41c9a6c41e2c05d08499e96f7940bcf194dcfa84356235b630da920c2a5e05f193618cea76006719bec61c76617dff02defa9d29934f9f6a76a49291bd8f
+  version: 4.17.1
+  resolution: "@types/lodash@npm:4.17.1"
+  checksum: 10c0/af2ad8a3c8d7deb170a7ec6e18afc5ae8980576e5f7fe798d8a95a1df7222c15bdf967a25a35879f575a3b64743de00145710ee461a0051e055e94e4fe253f45
   languageName: node
   linkType: hard
 
@@ -3754,13 +3779,13 @@ __metadata:
   linkType: hard
 
 "@types/pg@npm:^8.6.6":
-  version: 8.11.5
-  resolution: "@types/pg@npm:8.11.5"
+  version: 8.11.6
+  resolution: "@types/pg@npm:8.11.6"
   dependencies:
     "@types/node": "npm:*"
     pg-protocol: "npm:*"
     pg-types: "npm:^4.0.1"
-  checksum: 10c0/d64d183bee2df96cd0558231190ff629558e8c0fd3203b880f48a7d34b1eaea528d20c09b57b19c0939f369136e6c6941533592eadd71174be78d1ec0ca5e60e
+  checksum: 10c0/e68e057d9500b25cd776f4fcc547b4880c4f3b0c7b6e03c8a0e5e262b6189dd7a00f4edc8937ffc55a9f6a136a78d7e4a9b6bbe6a46122a95c134f7be66f6842
   languageName: node
   linkType: hard
 
@@ -3814,11 +3839,11 @@ __metadata:
   linkType: hard
 
 "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.4":
-  version: 18.2.25
-  resolution: "@types/react-dom@npm:18.2.25"
+  version: 18.3.0
+  resolution: "@types/react-dom@npm:18.3.0"
   dependencies:
     "@types/react": "npm:*"
-  checksum: 10c0/87604407eca6884c5b4d4657cb511dc5ba28ea1cfa5d0ce1fc2d659a7ad1b64ae85dcda60e3f010641f9a52a6a60dfcaa6be3b0d0de9d624475052a13dae01f4
+  checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b
   languageName: node
   linkType: hard
 
@@ -3890,11 +3915,11 @@ __metadata:
   linkType: hard
 
 "@types/react-test-renderer@npm:^18.0.0":
-  version: 18.0.7
-  resolution: "@types/react-test-renderer@npm:18.0.7"
+  version: 18.3.0
+  resolution: "@types/react-test-renderer@npm:18.3.0"
   dependencies:
     "@types/react": "npm:*"
-  checksum: 10c0/45cbe963354acee2ab090979d856763c84f59ef7b63477d1fef5d0fd52760b69aa67bbd205fbd3bd36264620fce72c8e407735a9f2009c40ca50da59b0058c34
+  checksum: 10c0/3c9748be52e8e659e7adf91dea6939486463264e6f633bf21c4cb116de18af7bef0595568a1e588160420b2f65289473075dda1cb417c2875df8cf7a09f5d913
   languageName: node
   linkType: hard
 
@@ -3917,12 +3942,12 @@ __metadata:
   linkType: hard
 
 "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7":
-  version: 18.2.79
-  resolution: "@types/react@npm:18.2.79"
+  version: 18.3.1
+  resolution: "@types/react@npm:18.3.1"
   dependencies:
     "@types/prop-types": "npm:*"
     csstype: "npm:^3.0.2"
-  checksum: 10c0/c8a8a005d8830a48cc1ef93c3510c4935a2a03e5557dbecaa8f1038450cbfcb18eb206fa7fba7077d54b8da21faeb25577e897a333392770a7797f625b62c78a
+  checksum: 10c0/18d856c12a4ec93f3cda2d58ef3d77a9480818afd3af895f812896fb82cfca1f35a692ab1add4ce826a4eb58a071624c7d1c8c6c4ccfb81c100d2916dc607614
   languageName: node
   linkType: hard
 
@@ -4101,14 +4126,14 @@ __metadata:
   linkType: hard
 
 "@typescript-eslint/eslint-plugin@npm:^7.0.0":
-  version: 7.7.1
-  resolution: "@typescript-eslint/eslint-plugin@npm:7.7.1"
+  version: 7.8.0
+  resolution: "@typescript-eslint/eslint-plugin@npm:7.8.0"
   dependencies:
     "@eslint-community/regexpp": "npm:^4.10.0"
-    "@typescript-eslint/scope-manager": "npm:7.7.1"
-    "@typescript-eslint/type-utils": "npm:7.7.1"
-    "@typescript-eslint/utils": "npm:7.7.1"
-    "@typescript-eslint/visitor-keys": "npm:7.7.1"
+    "@typescript-eslint/scope-manager": "npm:7.8.0"
+    "@typescript-eslint/type-utils": "npm:7.8.0"
+    "@typescript-eslint/utils": "npm:7.8.0"
+    "@typescript-eslint/visitor-keys": "npm:7.8.0"
     debug: "npm:^4.3.4"
     graphemer: "npm:^1.4.0"
     ignore: "npm:^5.3.1"
@@ -4121,25 +4146,25 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/11a085240e7daf4bdeb011aa53ac7cfeea6263c60d53607823f5c314eb5c9d559b28fce0d6686acb9702ee3d0cb0406534fafae61163e5a903eaf818c48194ad
+  checksum: 10c0/37ca22620d1834ff0baa28fa4b8fd92039a3903cb95748353de32d56bae2a81ce50d1bbaed27487eebc884e0a0f9387fcb0f1647593e4e6df5111ef674afa9f0
   languageName: node
   linkType: hard
 
 "@typescript-eslint/parser@npm:^7.0.0":
-  version: 7.7.1
-  resolution: "@typescript-eslint/parser@npm:7.7.1"
+  version: 7.8.0
+  resolution: "@typescript-eslint/parser@npm:7.8.0"
   dependencies:
-    "@typescript-eslint/scope-manager": "npm:7.7.1"
-    "@typescript-eslint/types": "npm:7.7.1"
-    "@typescript-eslint/typescript-estree": "npm:7.7.1"
-    "@typescript-eslint/visitor-keys": "npm:7.7.1"
+    "@typescript-eslint/scope-manager": "npm:7.8.0"
+    "@typescript-eslint/types": "npm:7.8.0"
+    "@typescript-eslint/typescript-estree": "npm:7.8.0"
+    "@typescript-eslint/visitor-keys": "npm:7.8.0"
     debug: "npm:^4.3.4"
   peerDependencies:
     eslint: ^8.56.0
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/ace43eeb8123bbee61e936650e1d57a2cf70f2030870c6dcad8602fce3f7cdf2cce350121dbbc66cffd60bac36652f426a1c5293c45ed28998b90cd95673b5c9
+  checksum: 10c0/0dd994c1b31b810c25e1b755b8d352debb7bf21a31f9a91acaec34acf4e471320bcceaa67cf64c110c0b8f5fac10a037dbabac6ec423e17adf037e59a7bce9c1
   languageName: node
   linkType: hard
 
@@ -4153,22 +4178,22 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/scope-manager@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/scope-manager@npm:7.7.1"
+"@typescript-eslint/scope-manager@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/scope-manager@npm:7.8.0"
   dependencies:
-    "@typescript-eslint/types": "npm:7.7.1"
-    "@typescript-eslint/visitor-keys": "npm:7.7.1"
-  checksum: 10c0/4032da8fce8922044a6b659c8435ba203377778d5b7de6a5572c1172f2e3cf8ddd890a0f9e083c5d5315a9c2dba323707528ee4ad3cc1be2bd334de2527ef5cb
+    "@typescript-eslint/types": "npm:7.8.0"
+    "@typescript-eslint/visitor-keys": "npm:7.8.0"
+  checksum: 10c0/c253b98e96d4bf0375f473ca2c4d081726f1fd926cdfa65ee14c9ee99cca8eddb763b2d238ac365daa7246bef21b0af38180d04e56e9df7443c0e6f8474d097c
   languageName: node
   linkType: hard
 
-"@typescript-eslint/type-utils@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/type-utils@npm:7.7.1"
+"@typescript-eslint/type-utils@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/type-utils@npm:7.8.0"
   dependencies:
-    "@typescript-eslint/typescript-estree": "npm:7.7.1"
-    "@typescript-eslint/utils": "npm:7.7.1"
+    "@typescript-eslint/typescript-estree": "npm:7.8.0"
+    "@typescript-eslint/utils": "npm:7.8.0"
     debug: "npm:^4.3.4"
     ts-api-utils: "npm:^1.3.0"
   peerDependencies:
@@ -4176,7 +4201,7 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/bd083c4106e207aa8c2a71251eca52d23c7ea905399b8c62004f3bb1e85b9c88d601db9dcecae88beef0f8362d53450bb2721aab353ee731c1665496fea3fbda
+  checksum: 10c0/00f6315626b64f7dbc1f7fba6f365321bb8d34141ed77545b2a07970e59a81dbdf768c1e024225ea00953750d74409ddd8a16782fc4a39261e507c04192dacab
   languageName: node
   linkType: hard
 
@@ -4187,10 +4212,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/types@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/types@npm:7.7.1"
-  checksum: 10c0/7d240503d9d0b12d68c8204167690609f02ededb77dcb035c1c8b932da08cf43553829c29a5f7889824a7337463c300343bc5abe532479726d4c83443a7e2704
+"@typescript-eslint/types@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/types@npm:7.8.0"
+  checksum: 10c0/b2fdbfc21957bfa46f7d8809b607ad8c8b67c51821d899064d09392edc12f28b2318a044f0cd5d523d782e84e8f0558778877944964cf38e139f88790cf9d466
   languageName: node
   linkType: hard
 
@@ -4213,12 +4238,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/typescript-estree@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/typescript-estree@npm:7.7.1"
+"@typescript-eslint/typescript-estree@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/typescript-estree@npm:7.8.0"
   dependencies:
-    "@typescript-eslint/types": "npm:7.7.1"
-    "@typescript-eslint/visitor-keys": "npm:7.7.1"
+    "@typescript-eslint/types": "npm:7.8.0"
+    "@typescript-eslint/visitor-keys": "npm:7.8.0"
     debug: "npm:^4.3.4"
     globby: "npm:^11.1.0"
     is-glob: "npm:^4.0.3"
@@ -4228,24 +4253,24 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/c6b32bd96fd13b9da0a30de01935066f7505f6214f5759e3cd019f7d1852f7bf19358765f62e51de72be47647656aa0e8f07ac0ab316c4149a4e6bd1dd12cbb6
+  checksum: 10c0/1690b62679685073dcb0f62499f0b52b445b37ae6e12d02aa4acbafe3fb023cf999b01f714b6282e88f84fd934fe3e2eefb21a64455d19c348d22bbc68ca8e47
   languageName: node
   linkType: hard
 
-"@typescript-eslint/utils@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/utils@npm:7.7.1"
+"@typescript-eslint/utils@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/utils@npm:7.8.0"
   dependencies:
     "@eslint-community/eslint-utils": "npm:^4.4.0"
     "@types/json-schema": "npm:^7.0.15"
     "@types/semver": "npm:^7.5.8"
-    "@typescript-eslint/scope-manager": "npm:7.7.1"
-    "@typescript-eslint/types": "npm:7.7.1"
-    "@typescript-eslint/typescript-estree": "npm:7.7.1"
+    "@typescript-eslint/scope-manager": "npm:7.8.0"
+    "@typescript-eslint/types": "npm:7.8.0"
+    "@typescript-eslint/typescript-estree": "npm:7.8.0"
     semver: "npm:^7.6.0"
   peerDependencies:
     eslint: ^8.56.0
-  checksum: 10c0/0986b8c297d6bfdbd2ac8cd3bcf447ef9b934e2dae536771d3368a5c284a0b16c0ea041f82aa100c48d05acc33198e1a3d9d721d3319ae80abba0f5e69c21633
+  checksum: 10c0/31fb58388d15b082eb7bd5bce889cc11617aa1131dfc6950471541b3df64c82d1c052e2cccc230ca4ae80456d4f63a3e5dccb79899a8f3211ce36c089b7d7640
   languageName: node
   linkType: hard
 
@@ -4276,13 +4301,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/visitor-keys@npm:7.7.1":
-  version: 7.7.1
-  resolution: "@typescript-eslint/visitor-keys@npm:7.7.1"
+"@typescript-eslint/visitor-keys@npm:7.8.0":
+  version: 7.8.0
+  resolution: "@typescript-eslint/visitor-keys@npm:7.8.0"
   dependencies:
-    "@typescript-eslint/types": "npm:7.7.1"
+    "@typescript-eslint/types": "npm:7.8.0"
     eslint-visitor-keys: "npm:^3.4.3"
-  checksum: 10c0/19cbd14ac9a234d847f457cbd880cbd98b83c331a46d2dc2d8c0e6cb54ce6159552f6dd2f7236035be1a71f13f48df4a2aa09e70ad1f1e2ff3da7c3622927bd3
+  checksum: 10c0/5892fb5d9c58efaf89adb225f7dbbb77f9363961f2ff420b6b130bdd102dddd7aa8a16c46a5a71c19889d27b781e966119a89270555ea2cb5653a04d8994123d
   languageName: node
   linkType: hard
 
@@ -7775,8 +7800,8 @@ __metadata:
   linkType: hard
 
 "eslint-plugin-formatjs@npm:^4.10.1":
-  version: 4.13.0
-  resolution: "eslint-plugin-formatjs@npm:4.13.0"
+  version: 4.13.1
+  resolution: "eslint-plugin-formatjs@npm:4.13.1"
   dependencies:
     "@formatjs/icu-messageformat-parser": "npm:2.7.6"
     "@formatjs/ts-transformer": "npm:3.13.12"
@@ -7791,7 +7816,7 @@ __metadata:
     unicode-emoji-utils: "npm:^1.2.0"
   peerDependencies:
     eslint: 7 || 8
-  checksum: 10c0/3dbe4ffd3e72d4ce5b14afdcf6dd5db889dd09cb15bc875f29bcc5b49295e0ae4a3eb672ed89ed33f22aacbfe655151398ca4307fd0610508e568a6e4db50aa8
+  checksum: 10c0/ce18141dff84e8fe026127085c1a63279acb3a1bc0b70dc1ddce2fc65bb37d68ccf6d097231428745eda2caea42080e1c80a01a1895803155c15123a01bfeee3
   languageName: node
   linkType: hard
 
@@ -9643,15 +9668,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"intl-messageformat@npm:10.5.11, intl-messageformat@npm:^10.3.5":
-  version: 10.5.11
-  resolution: "intl-messageformat@npm:10.5.11"
+"intl-messageformat@npm:10.5.12, intl-messageformat@npm:^10.3.5":
+  version: 10.5.12
+  resolution: "intl-messageformat@npm:10.5.12"
   dependencies:
     "@formatjs/ecma402-abstract": "npm:1.18.2"
     "@formatjs/fast-memoize": "npm:2.2.0"
     "@formatjs/icu-messageformat-parser": "npm:2.7.6"
     tslib: "npm:^2.4.0"
-  checksum: 10c0/423f1c879ce2d0e7b9e0b4c1787a81ead7fe4d1734e0366a20fef56b06c09146e7ca3618e2e78b4f8b8f2b59cafe6237ceed21530fe0c16cfb47d915fc80222d
+  checksum: 10c0/f95734e98a05ef7f51de0c27904d3a994528e3a174963bd1b3a6db9416b5fd84bbd8f7d26d84fc547d51af69ccf46dd3f73a3f4f20a2ccef5c9cd90e946ad82c
   languageName: node
   linkType: hard
 
@@ -11431,7 +11456,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21":
+"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.20, lodash@npm:^4.17.21":
   version: 4.17.21
   resolution: "lodash@npm:4.17.21"
   checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
@@ -12996,7 +13021,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0, pino-abstract-transport@npm:^1.2.0":
+"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0":
   version: 1.2.0
   resolution: "pino-abstract-transport@npm:1.2.0"
   dependencies:
@@ -13006,15 +13031,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"pino-http@npm:^9.0.0":
-  version: 9.0.0
-  resolution: "pino-http@npm:9.0.0"
+"pino-http@npm:^10.0.0":
+  version: 10.0.0
+  resolution: "pino-http@npm:10.0.0"
   dependencies:
     get-caller-file: "npm:^2.0.5"
-    pino: "npm:^8.17.1"
-    pino-std-serializers: "npm:^6.2.2"
+    pino: "npm:^9.0.0"
+    pino-std-serializers: "npm:^7.0.0"
     process-warning: "npm:^3.0.0"
-  checksum: 10c0/05496cb76cc9908658e50c4620fbdf7b0b5d99fb529493d601c3e4635b0bf7ce12b8a8eed7b5b520089f643b099233d61dd71f7cdfad8b66e59b9b81d79b6512
+  checksum: 10c0/40d2dcb2bc0c51f1ce45d3d7144c54f087fe1a122d82d0f497d65656151a1603a64f82f62d7fc6a3c172754c5a5cf6105b3096620eece31cefbc8cf95b26c062
   languageName: node
   linkType: hard
 
@@ -13042,31 +13067,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"pino-std-serializers@npm:^6.0.0, pino-std-serializers@npm:^6.2.2":
+"pino-std-serializers@npm:^6.0.0":
   version: 6.2.2
   resolution: "pino-std-serializers@npm:6.2.2"
   checksum: 10c0/8f1c7f0f0d8f91e6c6b5b2a6bfb48f06441abeb85f1c2288319f736f9c6d814fbeebe928d2314efc2ba6018fa7db9357a105eca9fc99fc1f28945a8a8b28d3d5
   languageName: node
   linkType: hard
 
-"pino@npm:^8.17.1":
-  version: 8.20.0
-  resolution: "pino@npm:8.20.0"
-  dependencies:
-    atomic-sleep: "npm:^1.0.0"
-    fast-redact: "npm:^3.1.1"
-    on-exit-leak-free: "npm:^2.1.0"
-    pino-abstract-transport: "npm:^1.1.0"
-    pino-std-serializers: "npm:^6.0.0"
-    process-warning: "npm:^3.0.0"
-    quick-format-unescaped: "npm:^4.0.3"
-    real-require: "npm:^0.2.0"
-    safe-stable-stringify: "npm:^2.3.1"
-    sonic-boom: "npm:^3.7.0"
-    thread-stream: "npm:^2.0.0"
-  bin:
-    pino: bin.js
-  checksum: 10c0/6b973474160e1fa01fa150de0f69b7db9c6c06ae15f992d369669751825c8f2af3bb5600348eaf9be65b4952326bbdfa226f51e425820eb511f0f594fbddbaa7
+"pino-std-serializers@npm:^7.0.0":
+  version: 7.0.0
+  resolution: "pino-std-serializers@npm:7.0.0"
+  checksum: 10c0/73e694d542e8de94445a03a98396cf383306de41fd75ecc07085d57ed7a57896198508a0dec6eefad8d701044af21eb27253ccc352586a03cf0d4a0bd25b4133
   languageName: node
   linkType: hard
 
@@ -13175,18 +13186,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-color-functional-notation@npm:^6.0.9":
-  version: 6.0.9
-  resolution: "postcss-color-functional-notation@npm:6.0.9"
+"postcss-color-functional-notation@npm:^6.0.11":
+  version: 6.0.11
+  resolution: "postcss-color-functional-notation@npm:6.0.11"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/120f7bc23bf46dd1c008b3aa806fb02dd988ae180f9c0c10dca9f5ea3473bf20d7743aafae1441df5b4a3945a63ebb0dae1d4d55f7c8bcd34540529b627c4e3e
+  checksum: 10c0/7fd75e6881cf62f536f79dfc0ae1b709ea0b8b84833cce1671372711f6019ab4360c6a17089b654b2d376b87e7f9455b94f0d13b45ab0ab767e547b604709b3d
   languageName: node
   linkType: hard
 
@@ -13240,46 +13251,46 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-custom-media@npm:^10.0.4":
-  version: 10.0.4
-  resolution: "postcss-custom-media@npm:10.0.4"
+"postcss-custom-media@npm:^10.0.6":
+  version: 10.0.6
+  resolution: "postcss-custom-media@npm:10.0.6"
   dependencies:
-    "@csstools/cascade-layer-name-parser": "npm:^1.0.9"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
-    "@csstools/media-query-list-parser": "npm:^2.1.9"
+    "@csstools/cascade-layer-name-parser": "npm:^1.0.11"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
+    "@csstools/media-query-list-parser": "npm:^2.1.11"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/2384a40f0e38abe92fbfc707000b264e4bdfe65bd0086ab18c6aab71049198f9dd1431bc4f9bbf68f7cca86b4ff0da352bac4a6ecd04e3671b7ddf6ed6ec3d04
+  checksum: 10c0/98a524bc46b780a86094bbe8007f1e577137da5490823631a683d4b3df4a13e40c5e1ab52380275a54f7011abfd98bb597c6293d964c14f9f22ec6cf9d75c550
   languageName: node
   linkType: hard
 
-"postcss-custom-properties@npm:^13.3.8":
-  version: 13.3.8
-  resolution: "postcss-custom-properties@npm:13.3.8"
+"postcss-custom-properties@npm:^13.3.10":
+  version: 13.3.10
+  resolution: "postcss-custom-properties@npm:13.3.10"
   dependencies:
-    "@csstools/cascade-layer-name-parser": "npm:^1.0.9"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/cascade-layer-name-parser": "npm:^1.0.11"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/utilities": "npm:^1.0.0"
     postcss-value-parser: "npm:^4.2.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/03dd1918f897005b23d09615ebb2c3faf4a01cac67462069c9cfa87c024b2a878f64948b0cf668971bc0ca00cfc349080879b3864deb3808a32d52ff2b473319
+  checksum: 10c0/52688fd0aaadccfdf4a3d86d3a2ab988163e8108088c5e33fc9145d261f75b92b8321c044a8161345abda10df5715d674330309dcc0c17f2980db5515f6a76d6
   languageName: node
   linkType: hard
 
-"postcss-custom-selectors@npm:^7.1.8":
-  version: 7.1.8
-  resolution: "postcss-custom-selectors@npm:7.1.8"
+"postcss-custom-selectors@npm:^7.1.10":
+  version: 7.1.10
+  resolution: "postcss-custom-selectors@npm:7.1.10"
   dependencies:
-    "@csstools/cascade-layer-name-parser": "npm:^1.0.9"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/cascade-layer-name-parser": "npm:^1.0.11"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     postcss-selector-parser: "npm:^6.0.13"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/6a7d8248342177a222821531ea3b4008764362e4f7e8f7f2d5767e5880c37ffa39ac5adced2c686baeb9c1f4ed4c283fcc8a8d30ef3b4fc5f63d4ef9a691285e
+  checksum: 10c0/11311ae6f306420223c6bf926fb1798738f3aa525a267de204de8e8ee9de467bf63b580d9ad5dbb0fff4bd9266770a3fa7e27a24af08a2e0a4115d0727d1d043
   languageName: node
   linkType: hard
 
@@ -13395,18 +13406,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-lab-function@npm:^6.0.14":
-  version: 6.0.14
-  resolution: "postcss-lab-function@npm:6.0.14"
+"postcss-lab-function@npm:^6.0.16":
+  version: 6.0.16
+  resolution: "postcss-lab-function@npm:6.0.16"
   dependencies:
-    "@csstools/css-color-parser": "npm:^2.0.0"
-    "@csstools/css-parser-algorithms": "npm:^2.6.1"
-    "@csstools/css-tokenizer": "npm:^2.2.4"
+    "@csstools/css-color-parser": "npm:^2.0.2"
+    "@csstools/css-parser-algorithms": "npm:^2.6.3"
+    "@csstools/css-tokenizer": "npm:^2.3.1"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
     "@csstools/utilities": "npm:^1.0.0"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/0b5d998ddb98ec6243448f1eca216f6e23872431885b152843feef1e844fc5b6b3ebe16ea8940f3d6abea732aa0c51b2ec0e57437e4326e5b2cb2bcb949e6d9f
+  checksum: 10c0/ba8717cd8a197ec17acaac1b61631cd4403f07bd406b0c92f2e430a55e3f786cd6c338b626c3326e9178a0f3e58ff838ebaded19f480f39197a9cb17349ecdcd
   languageName: node
   linkType: hard
 
@@ -13726,37 +13737,37 @@ __metadata:
   linkType: hard
 
 "postcss-preset-env@npm:^9.5.2":
-  version: 9.5.9
-  resolution: "postcss-preset-env@npm:9.5.9"
+  version: 9.5.11
+  resolution: "postcss-preset-env@npm:9.5.11"
   dependencies:
     "@csstools/postcss-cascade-layers": "npm:^4.0.4"
-    "@csstools/postcss-color-function": "npm:^3.0.14"
-    "@csstools/postcss-color-mix-function": "npm:^2.0.14"
-    "@csstools/postcss-exponential-functions": "npm:^1.0.5"
+    "@csstools/postcss-color-function": "npm:^3.0.16"
+    "@csstools/postcss-color-mix-function": "npm:^2.0.16"
+    "@csstools/postcss-exponential-functions": "npm:^1.0.7"
     "@csstools/postcss-font-format-keywords": "npm:^3.0.2"
-    "@csstools/postcss-gamut-mapping": "npm:^1.0.7"
-    "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.15"
-    "@csstools/postcss-hwb-function": "npm:^3.0.13"
+    "@csstools/postcss-gamut-mapping": "npm:^1.0.9"
+    "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.17"
+    "@csstools/postcss-hwb-function": "npm:^3.0.15"
     "@csstools/postcss-ic-unit": "npm:^3.0.6"
     "@csstools/postcss-initial": "npm:^1.0.1"
     "@csstools/postcss-is-pseudo-class": "npm:^4.0.6"
-    "@csstools/postcss-light-dark-function": "npm:^1.0.3"
+    "@csstools/postcss-light-dark-function": "npm:^1.0.5"
     "@csstools/postcss-logical-float-and-clear": "npm:^2.0.1"
     "@csstools/postcss-logical-overflow": "npm:^1.0.1"
     "@csstools/postcss-logical-overscroll-behavior": "npm:^1.0.1"
     "@csstools/postcss-logical-resize": "npm:^2.0.1"
-    "@csstools/postcss-logical-viewport-units": "npm:^2.0.7"
-    "@csstools/postcss-media-minmax": "npm:^1.1.4"
-    "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.7"
+    "@csstools/postcss-logical-viewport-units": "npm:^2.0.9"
+    "@csstools/postcss-media-minmax": "npm:^1.1.6"
+    "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.9"
     "@csstools/postcss-nested-calc": "npm:^3.0.2"
     "@csstools/postcss-normalize-display-values": "npm:^3.0.2"
-    "@csstools/postcss-oklab-function": "npm:^3.0.14"
+    "@csstools/postcss-oklab-function": "npm:^3.0.16"
     "@csstools/postcss-progressive-custom-properties": "npm:^3.2.0"
-    "@csstools/postcss-relative-color-syntax": "npm:^2.0.14"
+    "@csstools/postcss-relative-color-syntax": "npm:^2.0.16"
     "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1"
-    "@csstools/postcss-stepped-value-functions": "npm:^3.0.6"
+    "@csstools/postcss-stepped-value-functions": "npm:^3.0.8"
     "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.6"
-    "@csstools/postcss-trigonometric-functions": "npm:^3.0.6"
+    "@csstools/postcss-trigonometric-functions": "npm:^3.0.8"
     "@csstools/postcss-unset-value": "npm:^3.0.1"
     autoprefixer: "npm:^10.4.19"
     browserslist: "npm:^4.22.3"
@@ -13766,12 +13777,12 @@ __metadata:
     cssdb: "npm:^8.0.0"
     postcss-attribute-case-insensitive: "npm:^6.0.3"
     postcss-clamp: "npm:^4.1.0"
-    postcss-color-functional-notation: "npm:^6.0.9"
+    postcss-color-functional-notation: "npm:^6.0.11"
     postcss-color-hex-alpha: "npm:^9.0.4"
     postcss-color-rebeccapurple: "npm:^9.0.3"
-    postcss-custom-media: "npm:^10.0.4"
-    postcss-custom-properties: "npm:^13.3.8"
-    postcss-custom-selectors: "npm:^7.1.8"
+    postcss-custom-media: "npm:^10.0.6"
+    postcss-custom-properties: "npm:^13.3.10"
+    postcss-custom-selectors: "npm:^7.1.10"
     postcss-dir-pseudo-class: "npm:^8.0.1"
     postcss-double-position-gradients: "npm:^5.0.6"
     postcss-focus-visible: "npm:^9.0.1"
@@ -13779,7 +13790,7 @@ __metadata:
     postcss-font-variant: "npm:^5.0.0"
     postcss-gap-properties: "npm:^5.0.1"
     postcss-image-set-function: "npm:^6.0.3"
-    postcss-lab-function: "npm:^6.0.14"
+    postcss-lab-function: "npm:^6.0.16"
     postcss-logical: "npm:^7.0.1"
     postcss-nesting: "npm:^12.1.2"
     postcss-opacity-percentage: "npm:^2.0.0"
@@ -13791,7 +13802,7 @@ __metadata:
     postcss-selector-not: "npm:^7.0.2"
   peerDependencies:
     postcss: ^8.4
-  checksum: 10c0/dbe020e3fc08f0b71a3ee9d3c8a66a93bb6ba62281ac89fa59c82b8632ca58d6a911ddd9c65f15355c36aad63477633fc101cc0f3ce494dbc757193ba42eb61c
+  checksum: 10c0/9460f4ce18cf1af7582d0a1f366151f59b6e9b0c7cbb62e59081dc91da14760a749f59fa52bc190e5e2c8fd531952c647719d19c4740aa1a0ebcb93f075ad931
   languageName: node
   linkType: hard
 
@@ -14381,18 +14392,18 @@ __metadata:
   linkType: hard
 
 "react-intl@npm:^6.4.2":
-  version: 6.6.5
-  resolution: "react-intl@npm:6.6.5"
+  version: 6.6.6
+  resolution: "react-intl@npm:6.6.6"
   dependencies:
     "@formatjs/ecma402-abstract": "npm:1.18.2"
     "@formatjs/icu-messageformat-parser": "npm:2.7.6"
-    "@formatjs/intl": "npm:2.10.1"
+    "@formatjs/intl": "npm:2.10.2"
     "@formatjs/intl-displaynames": "npm:6.6.6"
     "@formatjs/intl-listformat": "npm:7.5.5"
     "@types/hoist-non-react-statics": "npm:^3.3.1"
     "@types/react": "npm:16 || 17 || 18"
     hoist-non-react-statics: "npm:^3.3.2"
-    intl-messageformat: "npm:10.5.11"
+    intl-messageformat: "npm:10.5.12"
     tslib: "npm:^2.4.0"
   peerDependencies:
     react: ^16.6.0 || 17 || 18
@@ -14400,7 +14411,7 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 10c0/31f231701af080bc923fdf25ff22ae7ad56bd7892602879fe6fa3de0c6ab95aab10ff86595372be155e0be45a7130a2cca91dbab73e558359cebc1785711ded2
+  checksum: 10c0/04c1d1ca783f2a5e605544290c93e57629500be6811d7c2c3342903bf9f9a720d2e4c9cf3924133bf84e510ee879bf3d870a3ff269f5b197f894a49047bd089d
   languageName: node
   linkType: hard
 
@@ -16505,8 +16516,8 @@ __metadata:
   linkType: hard
 
 "stylelint@npm:^16.0.2":
-  version: 16.4.0
-  resolution: "stylelint@npm:16.4.0"
+  version: 16.5.0
+  resolution: "stylelint@npm:16.5.0"
   dependencies:
     "@csstools/css-parser-algorithms": "npm:^2.6.1"
     "@csstools/css-tokenizer": "npm:^2.2.4"
@@ -16549,7 +16560,7 @@ __metadata:
     write-file-atomic: "npm:^5.0.1"
   bin:
     stylelint: bin/stylelint.mjs
-  checksum: 10c0/7e603a0d88732180b60528c9f2edfca7fdf8c966f42c260af16131854c3acb5acfa30403b1f4fd72cd1470eb9ba625ca4de84e8cb379942df54127c55afc1288
+  checksum: 10c0/9281693ff6c1918e07fdcf7a950531f79678a28261a0d5bd36ca2fcf524e53d7305158d20ba890f5dd01c0ff90c09a13453dce2fe6887f4c157d8c2c0acf3666
   languageName: node
   linkType: hard
 
@@ -16829,7 +16840,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"thread-stream@npm:^2.0.0, thread-stream@npm:^2.6.0":
+"thread-stream@npm:^2.6.0":
   version: 2.6.0
   resolution: "thread-stream@npm:2.6.0"
   dependencies: