diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6705535f0088c033b0f354b0d8be5a199bd3bcd2..1b650e7de95e17c605e6504c13b044ec3aaf9471 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,26 @@
 
 You should also include the user name that made the change.
 -->
+
+## 13.6.0 (2023/02/11)
+
+### Improvements
+- MkPageHeaderをごっそり変えた
+  * モバイルではヘッダーは上下に分割され、下段にタブが表示されるように
+  * iconOnlyのタブ項目がアクティブな場合にはタブのタイトルを表示するように
+  * メインタイムラインではタイトルを表示しない
+  * メインタイムラインかつモバイルで表示される左上のアバターを選択するとアカウントメニューが開くように
+- ユーザーページのノート一覧をタブとして分離
+- コンディショナルロールもバッジとして表示可能に
+- enhance(client): ロールをより簡単に付与できるように
+- enhance(client): 一度見たノートのRenoteは省略して表示するように
+- enhance(client): 迷惑になる可能性のある投稿を行う前に警告を表示
+- リアクションの数が多い場合の表示を改善
+- 一部のMFM構文をopt-outに
+
+### Bugfixes
+- Client: ユーザーページでタブがほとんど見れないことがないように
+
 ## 13.5.6 (2023/02/10)
 
 ### Improvements
diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml
index 5542e09b19f47381862e1060b7a62403d7bd32f6..467aed1294a9458953293dbf52ad0c5aaf10021b 100644
--- a/locales/ar-SA.yml
+++ b/locales/ar-SA.yml
@@ -886,56 +886,6 @@ _nsfw:
   respect: "اخف الوسائط ذات المحتوى الحساس"
   ignore: "اعرض الوسائط ذات المحتوى الحساس"
   force: "اخف كل الوسائط"
-_mfm:
-  cheatSheet: "مرجع ملخص عن MFM"
-  intro: "MFM هي لغة ترميزية مخصصة  يمكن استخدامها في عدّة أماكن في ميسكي. يمكنك مراجعة كل تعابيرها مع كيفية استخدامها هنا."
-  mention: "أشر الى"
-  mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم."
-  hashtag: "الوسوم"
-  hashtagDescription: "يمكنك تعيين وسم من خلال كتابة # متبوعة بالنص المطلوب."
-  url: "الرابط"
-  urlDescription: "يمكن عرض الروابط"
-  link: "رابط"
-  bold: "عريض"
-  boldDescription: "جعل الحروف أثخن لإبرازها."
-  small: "صغير"
-  smallDescription: "يعرض المحتوى صغيرًا ورفيعًا."
-  center: "وسط"
-  centerDescription: "يمركز المحتوى في الوَسَط."
-  quote: "اقتبس"
-  quoteDescription: "يعرض المحتوى كاقتباس"
-  emoji: "إيموجي مخصص"
-  emojiDescription: "إحاطة اسم الإيموجي بنقطتي تفسير سيستبدله بصورة الإيموجي."
-  search: "البحث"
-  searchDescription: "يعرض نصًا في صندوق البحث"
-  flip: "اقلب"
-  flipDescription: "يقلب المحتوى عموديًا أو أفقيًا"
-  jelly: "تأثير (هلام)"
-  jellyDescription: "يمنح المحتوى حركة هلامية."
-  tada: "تأثير (تادا)"
-  tadaDescription: "يمنح للمحتوى تأثير تادا"
-  jump: "تأثير (قفز)"
-  jumpDescription: "يمنح للمحتوى حركة قفز."
-  bounce: "تأثير (ارتداد)"
-  bounceDescription: "يمنح للمحتوى حركة ارتدادية"
-  shake: "تأثير (اهتزاز)"
-  shakeDescription: "يمنح المحتوى حركة اهتزازية."
-  spin: "تأثير (دوران)"
-  spinDescription: "يمنح المحتوى حركة دورانية."
-  x2: "كبير"
-  x2Description: "يُكبر المحتوى"
-  x3: "كبير جداً"
-  x3Description: "يُضخم المحتوى"
-  x4: "هائل"
-  x4Description: "يُضخم المحتوى أكثر مما سبق."
-  blur: "طمس"
-  blurDescription: "يطمس المحتوى، لكن بالتمرير فوقه سيظهر بوضوح."
-  font: "الخط"
-  fontDescription: "الخط المستخدم لعرض المحتوى."
-  rainbow: "قوس قزح"
-  rainbowDescription: "اجعل المحتوى يظهر بألوان الطيف"
-  rotate: "تدوير"
-  rotateDescription: "يُدير المحتوى بزاوية معيّنة."
 _instanceTicker:
   none: "لا تظهره بتاتًا"
   remote: "أظهر للمستخدمين البِعاد"
diff --git a/locales/bn-BD.yml b/locales/bn-BD.yml
index 6f5d67639506224648ac9b0516126313444a21cb..92e3785936ff057f15966c7e6074dec42452e338 100644
--- a/locales/bn-BD.yml
+++ b/locales/bn-BD.yml
@@ -455,7 +455,6 @@ youHaveNoGroups: "আপনার কোন গ্রুপ নেই "
 joinOrCreateGroup: "একটি বিদ্যমান গ্রুপের আমন্ত্রণ পান বা একটি নতুন গ্রুপ তৈরি করুন৷"
 noHistory: "কোনো ইতিহাস নেই"
 signinHistory: "প্রবেশ করার ইতিহাস"
-disableAnimatedMfm: "অ্যানিমেটেড MFM অক্ষম করুন"
 doing: "প্রক্রিয়া করছে..."
 category: "বিভাগ"
 tags: "ট‍্যাগসমূহ"
@@ -923,70 +922,6 @@ _nsfw:
   respect: "স্পর্শকাতর মিডিয়া লুকান"
   ignore: "স্পর্শকাতর মিডিয়া লুকাবেন না"
   force: "সকল মিডিয়া লুকান"
-_mfm:
-  cheatSheet: "MFM চিটশিট"
-  intro: "MFM একটি মার্কআপ ভাষা যা Misskey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
-  dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে"
-  mention: "উল্লেখ"
-  mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।"
-  hashtag: "হ্যাশট্যাগ"
-  hashtagDescription: "আপনি একটি # চিহ্ন + ট্যাগ সহ একটি হ্যাশট্যাগ নির্দেশ করতে পারেন।"
-  url: "URL"
-  urlDescription: "URL দেখানো সম্ভব।"
-  link: "লিংক"
-  linkDescription: "আপনি পাঠ্যের একটি নির্দিষ্ট অংশকে URL হিসাবে দেখাতে পারেন৷"
-  bold: "গাঢ়"
-  boldDescription: "অক্ষরগুলিকে মোটাকরে প্রদর্শন করা হবে।"
-  small: "ছোট"
-  smallDescription: "লেখা ছোট এবং পাতলা করে দেখানো হবে।"
-  center: "সেন্টার"
-  centerDescription: "লেখা মাঝ বরাবর দেখানো হবে"
-  inlineCode: "কোড (ইনলাইন)"
-  inlineCodeDescription: " প্রোগ্রামের কোডের জন্য ইনলাইন সিনট্যাক্স হাইলাইটিং করা হবে"
-  blockCode: "কোড (ব্লক)"
-  blockCodeDescription: "মাল্টি-লাইন প্রোগ্রামের কোডের জন্য সিনট্যাক্স হাইলাইট করে।"
-  inlineMath: "গাণিতিক সূত্র (ইনলাইন)"
-  inlineMathDescription: "গাণিতিক সূত্র প্রদর্শন করুন (KaTeX) ইনলাইন।"
-  blockMath: "গাণিতিক সূত্র (ব্লক)"
-  blockMathDescription: "একটি ব্লকে একাধিক লাইনের গাণিতিক সূত্র প্রদর্শন করুন (KaTeX)।"
-  quote: "উদ্ধৃতি"
-  quoteDescription: "বিষয়বস্তুকে একটি উদ্ধৃতি হিসাবে দেখানো হবে।"
-  emoji: "স্বনির্ধারিত ইমোজিগুলি"
-  emojiDescription: "আপনি একটি কাস্টম ইমোজির নাম কোলনে আবদ্ধ করে কাস্টম ইমোজিটি দেখাতে পারেন৷"
-  search: "খুঁজুন"
-  searchDescription: "পূর্ব-টাইপ করা পাঠ্য সহ একটি অনুসন্ধান বাক্স প্রদর্শন করে।"
-  flip: "উল্টান"
-  flipDescription: "বিষয়বস্তু উপরে/নীচে বা বাম/ডানে উল্টান।"
-  jelly: "অ্যানিমেশন (জেলি)"
-  jellyDescription: "জেলির মত অ্যানিমেশন দেখায়।"
-  tada: "অ্যানিমেশন (টাডা)"
-  tadaDescription: "\"টাডা!\" এর মত অ্যানিমেশন দেখায়।"
-  jump: "অ্যানিমেশন (লাফ)"
-  jumpDescription: "বিষয়বস্তুতে লাফ মারার মত অ্যানিমেশন দেখায়।"
-  bounce: "অ্যানিমেশন (তিড়িং বিড়িং)"
-  bounceDescription: "তিড়িং বিড়িং করার মত অ্যানিমেশন দেখায়।"
-  shake: "অ্যানিমেশন (ঝাঁকি)"
-  shakeDescription: "ঝাঁকির মত অ্যানিমেশন দেখায়।"
-  twitch: "অ্যানিমেশন (মোচড়ানো)"
-  twitchDescription: "মোচড়ানোর মত অ্যানিমেশন দেখায়।"
-  spin: "অ্যানিমেশন (ঘুরা)"
-  spinDescription: "ঘুরার মত অ্যানিমেশন দেখায়।"
-  x2: "বড়"
-  x2Description: "বিষয়বস্তু বড় করে দেখায়।"
-  x3: "অনেক বড়"
-  x3Description: "বিষয়বস্তু আরও বড় করে দেখায়।"
-  x4: "অস্বাভাবিক বড়"
-  x4Description: "বিষয়বস্তুকে আগের থেকেও আরও বড় করে দেখায়।"
-  blur: "ব্লার"
-  blurDescription: "বিষয়বস্তুকে ব্লার করতে পারেন। আপনি এর উপর মাউস কার্সার রাখলে, এটি পরিষ্কারভাবে দেখতে পাবেন।"
-  font: "ফন্ট"
-  fontDescription: "বিষয়বস্তুকে কোন ফন্টে দেখানো হবে তা নির্ধারণ করে।"
-  rainbow: "রেইনবো"
-  rainbowDescription: "বিষয়বস্তুকে রংধনুর রং গুলিতে প্রদর্শন করে।"
-  sparkle: "চিক চিক"
-  sparkleDescription: "বিষয়বস্তুকে একটি চিকচিকে কণা প্রভাব দেয়।"
-  rotate: "ঘুরান"
-  rotateDescription: "বিষয়বস্তুকে একটি নির্দিষ্ট কোনে ঘুরায়।"
 _instanceTicker:
   none: "দেখাবেন না"
   remote: "রিমোট ব্যাবহারকারীদের জন্য দেখান"
diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml
index 8bc5bf03662cb7232dff993fef6ce0ef7b2dd1db..d89e22631c598f43cbc9e46079b0186c6b9105fb 100644
--- a/locales/ca-ES.yml
+++ b/locales/ca-ES.yml
@@ -375,11 +375,6 @@ file: "Fitxers"
 _email:
   _follow:
     title: "t'ha seguit"
-_mfm:
-  mention: "Menció"
-  quote: "Citar"
-  emoji: "Emojis personalitzats"
-  search: "Cercar"
 _instanceMute:
   instanceMuteDescription: "Silencia tots els impulsos dels servidors seleccionats, també els usuaris que responen a altres d'un servidor silenciat."
 _theme:
diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml
index 926c173f8c9a5d7b13b3ab4a014e7b78b4c34987..eaafd5ee107f479a5034d70c1223ab591d258e2d 100644
--- a/locales/cs-CZ.yml
+++ b/locales/cs-CZ.yml
@@ -642,19 +642,6 @@ _registry:
 _aboutMisskey:
   allContributors: "Všichni přispěvatelé"
   source: "Zdrojový kód"
-_mfm:
-  mention: "Zmínění"
-  hashtag: "Hashtag"
-  link: "Odkaz"
-  bold: "Tučně"
-  quote: "Citovat"
-  emoji: "Vlastní emoji"
-  search: "Vyhledávání"
-  flip: "Otočit"
-  tada: "Animace (tadá)"
-  blur: "Rozmazání"
-  font: "Font"
-  rainbow: "Duha"
 _channel:
   featured: "Trendy"
 _menuDisplay:
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index c1b272b26db577d5565e20e6a4c64a0770adf91b..fb80b92850cd7ac95f4a85745a70f512ab0d5c87 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -467,7 +467,6 @@ youHaveNoGroups: "Keine Gruppen vorhanden"
 joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigene."
 noHistory: "Kein Verlauf gefunden"
 signinHistory: "Anmeldungsverlauf"
-disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren"
 doing: "In Bearbeitung …"
 category: "Kategorie"
 tags: "Schlagwörter"
@@ -1330,72 +1329,6 @@ _nsfw:
   respect: "Als NSFW markierte Bilder verbergen"
   ignore: "Als NSFW markierte Bilder nicht verbergen"
   force: "Alle Medien verbergen"
-_mfm:
-  cheatSheet: "MFM Spickzettel"
-  intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen."
-  dummy: "Misskey erweitert die Welt des Fediverse"
-  mention: "Erwähnung"
-  mentionDescription: "Mit At-Zeichen und Benutzername kann ein individueller Nutzer angegeben werden."
-  hashtag: "Hashtag"
-  hashtagDescription: "Mit einer Raute und Text kann ein Hashtag angegeben werden."
-  url: "URL"
-  urlDescription: "Zeigt URLs an."
-  link: "Link"
-  linkDescription: "Zeigt spezifische Textabschnitte als URL an."
-  bold: "Fett"
-  boldDescription: "Zeichen zur Betonung dicker erscheinen lassen."
-  small: "Klein"
-  smallDescription: "Inhalt klein und dünn erscheinen lassen."
-  center: "Zentrieren"
-  centerDescription: "Inhalt zentriert anzeigen."
-  inlineCode: "Code (Eingebettet)"
-  inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen."
-  blockCode: "Code (Block)"
-  blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen."
-  inlineMath: "Mathe (Eingebettet)"
-  inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen."
-  blockMath: "Mathe (Block)"
-  blockMathDescription: "Mehrzeilige mathematische Formeln (KaTeX) als Block einbetten."
-  quote: "Zitationen"
-  quoteDescription: "Inhalt als Zitat anzeigen."
-  emoji: "Benutzerdefinierte Emojis"
-  emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können benutzerdefinierte Emojis angezeigt werden."
-  search: "Suche"
-  searchDescription: "Eine vorgefertige Suchanfragebox anzeigen."
-  flip: "Spiegelung"
-  flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen."
-  jelly: "Animation (Dehnen)"
-  jellyDescription: "Verleiht Inhalt eine sich dehnende Animation."
-  tada: "Animation (Tada)"
-  tadaDescription: "Verleiht Inhalt eine Animation mit \"Tada!\"-Gefühl"
-  jump: "Animation (Sprung)"
-  jumpDescription: "Verleiht Inhalt eine springende Animation."
-  bounce: "Animation (Federn)"
-  bounceDescription: "Verleiht Inhalt eine federnde Animation."
-  shake: "Animation (Zittern)"
-  shakeDescription: "Verleiht Inhalt eine zitternde Animation."
-  twitch: "Animation (Zucken)"
-  twitchDescription: "Verleiht Inhalt eine sehr stark zuckende Animation."
-  spin: "Animation (Rotieren)"
-  spinDescription: "Verleiht Inhalt eine rotierende Animation."
-  x2: "Groß"
-  x2Description: "Inhalte größer anzeigen."
-  x3: "Sehr groß"
-  x3Description: "Inhalte noch größer anzeigen."
-  x4: "Unglaublich groß"
-  x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden."
-  blur: "Weichzeichnen"
-  blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers über den Inhalt wird er klar angezeigt."
-  font: "Schriftart"
-  fontDescription: "Setzt die Schriftart des Inhaltes fest."
-  rainbow: "Regenbogen"
-  rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen."
-  sparkle: "Glitzer"
-  sparkleDescription: "Verleiht Inhalt einen glitzernden Partikeleffekt."
-  rotate: "Drehen"
-  rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel."
-  plain: "Schlicht"
-  plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts befindet."
 _instanceTicker:
   none: "Nie anzeigen"
   remote: "Für Benutzer fremder Instanzen anzeigen"
diff --git a/locales/el-GR.yml b/locales/el-GR.yml
index c711683ffca6720c3795c6486b6ae3a7ed63054b..889be0557888d6f26daa20ac6b85290fc28bf874 100644
--- a/locales/el-GR.yml
+++ b/locales/el-GR.yml
@@ -298,11 +298,6 @@ cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω 
 _email:
   _follow:
     title: "Έχετε ένα νέο ακόλουθο"
-_mfm:
-  mention: "Επισήμανση"
-  quote: "Παράθεση"
-  emoji: "Επιπλέον emoji"
-  search: "Αναζήτηση"
 _channel:
   featured: "Δημοφιλή"
 _theme:
diff --git a/locales/en-US.yml b/locales/en-US.yml
index 685e373a4368147d537a7d65d148dd5b6dd35e2e..b18e57af8e115987b41218e62d33484f49afff2f 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -467,7 +467,6 @@ youHaveNoGroups: "You have no groups"
 joinOrCreateGroup: "Get invited to a group or create your own."
 noHistory: "No history available"
 signinHistory: "Login history"
-disableAnimatedMfm: "Disable MFM with animation"
 doing: "Processing..."
 category: "Category"
 tags: "Tags"
@@ -1330,72 +1329,6 @@ _nsfw:
   respect: "Hide NSFW media"
   ignore: "Don't hide NSFW media"
   force: "Hide all media"
-_mfm:
-  cheatSheet: "MFM Cheatsheet"
-  intro: "MFM is a Misskey-exclusive markup language that can be used in many places. Here you can view a list of all available MFM syntax."
-  dummy: "Misskey expands the world of the Fediverse"
-  mention: "Mention"
-  mentionDescription: "You can specify a user by using an At-Symbol and a username."
-  hashtag: "Hashtag"
-  hashtagDescription: "You can specify a hashtag using a number sign and text."
-  url: "URL"
-  urlDescription: "URLs can be displayed."
-  link: "Link"
-  linkDescription: "Specific parts of text can be displayed as a URL."
-  bold: "Bold"
-  boldDescription: "Highlights letters by making them thicker."
-  small: "Small"
-  smallDescription: "Displays content small and thin."
-  center: "Center"
-  centerDescription: "Displays content centered."
-  inlineCode: "Code (Inline)"
-  inlineCodeDescription: "Displays inline syntax highlighting for (program) code."
-  blockCode: "Code (Block)"
-  blockCodeDescription: "Displays syntax highlighting for multi-line (program) code in a block."
-  inlineMath: "Math (Inline)"
-  inlineMathDescription: "Display math formulas (KaTeX) in-line"
-  blockMath: "Math (Block)"
-  blockMathDescription: "Display multi-line math formulas (KaTeX) in a block"
-  quote: "Quote"
-  quoteDescription: "Displays content as a quote."
-  emoji: "Custom Emoji"
-  emojiDescription: "By surrounding a custom emoji name with colons, custom emoji can be displayed."
-  search: "Search"
-  searchDescription: "Displays a search box with pre-entered text."
-  flip: "Flip"
-  flipDescription: "Flips content horizontally or vertically."
-  jelly: "Animation (Jelly)"
-  jellyDescription: "Gives content a jelly-like animation."
-  tada: "Animation (Tada)"
-  tadaDescription: "Gives content a \"Tada!\"-like animation."
-  jump: "Animation (Jump)"
-  jumpDescription: "Gives content a jumping animation."
-  bounce: "Animation (Bounce)"
-  bounceDescription: "Gives content a bouncy animation."
-  shake: "Animation (Shake)"
-  shakeDescription: "Gives content a shaking animation."
-  twitch: "Animation (Twitch)"
-  twitchDescription: "Gives content a strongly twitching animation."
-  spin: "Animation (Spin)"
-  spinDescription: "Gives content a spinning animation."
-  x2: "Big"
-  x2Description: "Displays content bigger."
-  x3: "Very big"
-  x3Description: "Displays content even bigger."
-  x4: "Unbelievably big"
-  x4Description: "Displays content even bigger than bigger than big."
-  blur: "Blur"
-  blurDescription: "Blurs content. It will be displayed clearly when hovered over."
-  font: "Font"
-  fontDescription: "Sets the font to display content in."
-  rainbow: "Rainbow"
-  rainbowDescription: "Makes the content appear in rainbow colors."
-  sparkle: "Sparkle"
-  sparkleDescription: "Gives content a sparkling particle effect."
-  rotate: "Rotate"
-  rotateDescription: "Turns content by a specified angle."
-  plain: "Plain"
-  plainDescription: "Deactivates the effects of all MFM contained within this MFM effect."
 _instanceTicker:
   none: "Never show"
   remote: "Show for remote users"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index 5c1d249f6789304dc18be3ff0ff54bd27ee02b52..093818f5a21269abdccb5b74ff04c6fd21c84d6a 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -467,7 +467,6 @@ youHaveNoGroups: "Sin grupos"
 joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su propio grupo."
 noHistory: "No hay datos en el historial"
 signinHistory: "Historial de ingresos"
-disableAnimatedMfm: "Deshabilitar MFM que tiene animaciones"
 doing: "Voy en camino"
 category: "Categoría"
 tags: "Etiqueta"
@@ -1328,72 +1327,6 @@ _nsfw:
   respect: "Ocultar medios NSFW"
   ignore: "No esconder medios NSFW "
   force: "Ocultar todos los medios"
-_mfm:
-  cheatSheet: "Hoja de referencia de MFM"
-  intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de Misskey. Aquí puede ver una lista de sintaxis disponibles en MFM."
-  dummy: "Misskey expande el mundo de la Fediverso"
-  mention: "Menciones"
-  mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar para notificar a un usuario en particular."
-  hashtag: "Hashtag"
-  hashtagDescription: "Puede especificar un hashtag con un numeral y el texto."
-  url: "URL"
-  urlDescription: "Se pueden mostrar las URL"
-  link: "Vínculo"
-  linkDescription: "Se pueden asociar partes de texto a la URL"
-  bold: "Negrita"
-  boldDescription: "Muestra el texto con las letras más gruesas"
-  small: "Pequeño"
-  smallDescription: "Muestra el texto más pequeño y delgado"
-  center: "Centrar"
-  centerDescription: "Muestra el texto centrado"
-  inlineCode: "Código (insertado)"
-  inlineCodeDescription: "Muestra el código de un programa resaltando su sintaxis"
-  blockCode: "Código (bloque)"
-  blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias líneas con bloques."
-  inlineMath: "Fórmula (insertado)"
-  inlineMathDescription: "Muestra fórmulas (KaTeX) insertadas"
-  blockMath: "Fórmula (bloque)"
-  blockMathDescription: "Muestra fórmulas (KaTeX) de varias líneas en un bloque"
-  quote: "Citar"
-  quoteDescription: "Muestra el contenido como una cita"
-  emoji: "Emojis personalizados"
-  emojiDescription: "Muestra los emojis personalizados encerrados entre dos puntos."
-  search: "Buscar"
-  searchDescription: "Muestra una caja de búsqueda con texto pre-escrito"
-  flip: "Echar de un capirotazo"
-  flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda / derecha."
-  jelly: "Animación (gelatina)"
-  jellyDescription: "Aplica un efecto de animación tipo gelatina"
-  tada: "Animación (tadá)"
-  tadaDescription: "Aplica un efecto de animación al estilo \"Tadá\""
-  jump: "Animación (saltar)"
-  jumpDescription: "Aplica un efecto de animación tipo salto"
-  bounce: "Animación (rebotar)"
-  bounceDescription: "Aplica un efecto de animación tipo rebote"
-  shake: "Animación (temblor)"
-  shakeDescription: "Aplica un efecto de animación tipo temblor"
-  twitch: "Animación (sacudida)"
-  twitchDescription: "Aplica un efecto de animación tipo sacudida"
-  spin: "Animación (giro)"
-  spinDescription: "Aplica un efecto de animación tipo rotación"
-  x2: "Grande"
-  x2Description: "Muestra el contenido más grande"
-  x3: "Muy grande"
-  x3Description: "Muestra el contenido mucho más grande"
-  x4: "Totalmente grande"
-  x4Description: "Muestra el contenido totalmente grande"
-  blur: "Desenfoque"
-  blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar el puntero encima."
-  font: "Fuente"
-  fontDescription: "Elegir la fuente del contenido"
-  rainbow: "Arcoíris"
-  rainbowDescription: "Muestra el contenido con los colores del arcoíris"
-  sparkle: "Parpadeante"
-  sparkleDescription: "Aplica un efecto de partículas parpadeantes"
-  rotate: "Rotar"
-  rotateDescription: "Rota el contenido a un ángulo especificado."
-  plain: "Plano"
-  plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto MFM."
 _instanceTicker:
   none: "No mostrar"
   remote: "Mostrar a usuarios remotos"
diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml
index 8a9476e916a31a9dc2db9c9f75580b7241e01d42..bb976334e94ec0653f75a612d1cdc9c53ff28f2c 100644
--- a/locales/fr-FR.yml
+++ b/locales/fr-FR.yml
@@ -464,7 +464,6 @@ youHaveNoGroups: "Vous n’avez aucun groupe"
 joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou créer votre propre nouveau groupe."
 noHistory: "Pas d'historique"
 signinHistory: "Historique de connexion"
-disableAnimatedMfm: "Désactiver MFM ayant des animations"
 doing: "En cours..."
 category: "Catégorie"
 tags: "Étiquettes"
@@ -1011,72 +1010,6 @@ _nsfw:
   respect: "Cacher les médias marqués comme contenu sensible"
   ignore: "Afficher les médias sensibles"
   force: "Cacher tous les médias"
-_mfm:
-  cheatSheet: "Antisèche MFM"
-  intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey. Vous pouvez vérifier ici les structures utilisables avec MFM."
-  dummy: "La Fédiverse s'agrandit avec Misskey"
-  mention: "Mentionner"
-  mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant une arobase suivie d'un nom d'utilisateur"
-  hashtag: "Hashtags"
-  hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon et du texte"
-  url: "URL"
-  urlDescription: "L'adresse web peut être affichée."
-  link: "Lien"
-  linkDescription: "Une partie précise d'une phrase peut être liée à l'adresse web."
-  bold: "Gras"
-  boldDescription: "Il est possible de mettre le texte en exergue en le mettant en gras."
-  small: "Diminuer l'emphase"
-  smallDescription: "Le contenu peut être affiché en petit et fin."
-  center: "Centrer"
-  centerDescription: "Le contenu peut être centré"
-  inlineCode: "Code (inline)"
-  inlineCodeDescription: "Coloration syntaxique des lignes de code."
-  blockCode: "Bloc de code"
-  blockCodeDescription: "Coloration syntaxique des lignes de code pour les blocs multi-lignes."
-  inlineMath: "Formule mathématique (inline)"
-  inlineMathDescription: "Afficher les formules mathématiques (KaTeX)."
-  blockMath: "Formule mathématique (bloc)"
-  blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes dans un bloc."
-  quote: "Citer"
-  quoteDescription: "Affiche le contenu sous forme de citation."
-  emoji: "Émojis personnalisés"
-  emojiDescription: "Entourez le nom de l'émoji personnalisé de deux points pour l'afficher."
-  search: "Rechercher"
-  searchDescription: "Affiche une boîte de recherche avec du texte pré-saisi."
-  flip: "Inverser"
-  flipDescription: "Rotation verticale ou horizontale du contenu"
-  jelly: "Animation (Gelée)"
-  jellyDescription: "Donne une animation d'étirement."
-  tada: "Animation (Tada)"
-  tadaDescription: "Donne une animation qui donne une impression de \"Tada !\""
-  jump: "Animation (Saut)"
-  jumpDescription: "Donne une animation qui saute."
-  bounce: "Animation (Rebond)"
-  bounceDescription: "Donne une animation de rebondissement."
-  shake: "Animation (Secousse)"
-  shakeDescription: "Donne une animation tremblante."
-  twitch: "Animation (Tremblement)"
-  twitchDescription: "Donne une animation de tremblement intense."
-  spin: "Animation (Rotation)"
-  spinDescription: "Donne une animation de rotation."
-  x2: "Grand"
-  x2Description: "Afficher le contenu en grand."
-  x3: "Très grand"
-  x3Description: "Afficher le contenu en très grand."
-  x4: "Plus grand"
-  x4Description: "Afficher le contenu en plus grand."
-  blur: "Flou"
-  blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur."
-  font: "Police de caractères"
-  fontDescription: "Il est possible de choisir la police."
-  rainbow: "Arc-en-ciel"
-  rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel."
-  sparkle: "Paillettes"
-  sparkleDescription: "Ajoute un effet scintillant au contenu."
-  rotate: "Pivoter"
-  rotateDescription: "Faire pivoter à un angle spécifié."
-  plain: "Vu texte non formaté"
-  plainDescription: "Désactive toute la syntaxe interne."
 _instanceTicker:
   none: "Cacher "
   remote: "Montrer pour les utilisateur·ice·s distant·e·s"
diff --git a/locales/id-ID.yml b/locales/id-ID.yml
index 7332e030c42b20784e1c81bec31f03f9a221c1af..002eead68999bdc0c17bbdf91d775e68253b6fd2 100644
--- a/locales/id-ID.yml
+++ b/locales/id-ID.yml
@@ -464,7 +464,6 @@ youHaveNoGroups: "Kamu tidak memiliki grup"
 joinOrCreateGroup: "Bergabunglah dengan grup atau kamu dapat membuat grupmu sendiri."
 noHistory: "Tidak ada riwayat"
 signinHistory: "Riwayat masuk"
-disableAnimatedMfm: "Nonaktifkan MFM dengan animasi"
 doing: "Sedang berkerja..."
 category: "Kategori"
 tags: "Tandai"
@@ -1131,70 +1130,6 @@ _nsfw:
   respect: "Sembunyikan media NSFW"
   ignore: "Jangan sembunyikan media NSFW"
   force: "Sembunyikan semua media"
-_mfm:
-  cheatSheet: "Contekan MFM"
-  intro: "MFM adalah Misskey-exclusive Markup Language yang dapat digunakan di banyak tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada."
-  dummy: "Misskey membentangkan dunia Fediverse"
-  mention: "Sebut"
-  mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan simbol-At dan nama engguna mereka."
-  hashtag: "Tagar"
-  hashtagDescription: "Kamu dapat menentukan tagar dengan menggunakan angka dan teks."
-  url: "URL"
-  urlDescription: "URL dapat ditampilkan."
-  link: "Tautan"
-  linkDescription: "Bagian tertentu dari teks dapat ditampilka sebagai URL."
-  bold: "Tebal"
-  boldDescription: "Sorot tulisan dengan membuatnya tebal."
-  small: "Kecil"
-  smallDescription: "Tampilkan konten kecil dan tipis."
-  center: "Tengah"
-  centerDescription: "Tampilkan konten di tengah."
-  inlineCode: "Kode (Dalam baris)"
-  inlineCodeDescription: "Menampilkan sorotan sintaks dalam baris untuk kode(program-)."
-  blockCode: "Kode (Blok)"
-  blockCodeDescription: "Menampilkan sorotan sintaks untuk kode(program-) multi baris dalam sebuah blok."
-  inlineMath: "Matematika (Dalam baris)"
-  inlineMathDescription: "Menampilkan formula matematika (KaTeX) dalam baris."
-  blockMath: "Matematika (Blok)"
-  blockMathDescription: "Menampilkan formula matematika (KaTeX) multibaris dalam sebuah blok."
-  quote: "Kutip"
-  quoteDescription: "Menampilkan konten sebagai kutipan."
-  emoji: "Emoji kustom"
-  emojiDescription: "Emoji kustom dapat ditampilkan dengan mengurung nama emoji kustom menggunakan tanda titik dua."
-  search: "Penelusuran"
-  searchDescription: "Menampilkan kotak pencarian dengan teks yang sudah dimasukkan."
-  flip: "Balik"
-  flipDescription: "Balikkan konten secara horizontal atau vertikal."
-  jelly: "Animasi (Jelly)"
-  jellyDescription: "Menerapkan animasi seperti jelly"
-  tada: "Animasi (Tada)"
-  tadaDescription: "Menerapkan animasi seperti \"Kejutan!\"."
-  jump: "Animasi (Loncat)"
-  jumpDescription: "Menerapkan animasi melompat."
-  bounce: "Animasi (Melambung)"
-  bounceDescription: "Menerapkan animasi melambung."
-  shake: "Animasi (Goyang)"
-  shakeDescription: "Menerapkan animasi bergoyang."
-  twitch: "Animasi (Cubit)"
-  twitchDescription: "Terapkan animasi cubit yang kuat."
-  spin: "Animasi (Putar)"
-  spinDescription: "Terapkan animasi putar."
-  x2: "Besar"
-  x2Description: "Tampilkan konten menjadi besar."
-  x3: "Lebih besar"
-  x3Description: "Tampilkan konten menjadi lebih besar."
-  x4: "Sangat besar"
-  x4Description: "Tampilka konten menjadi sangat besar."
-  blur: "Buram"
-  blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan dengan jelas dengan melayangkan kursor tetikus di atasnya."
-  font: "Font"
-  fontDescription: "Setel font yang ditampilkan untuk konten."
-  rainbow: "Pelangi"
-  rainbowDescription: "Membuat konten muncul dalam warna pelangi."
-  sparkle: "Kelap-kelip"
-  sparkleDescription: "Memberikan konten efek partikel kelap-kelip."
-  rotate: "Putar"
-  rotateDescription: "Putar konten sesuai sudut yang ditentukan."
 _instanceTicker:
   none: "Jangan tampilkan"
   remote: "Tampilkan untuk pengguna luar"
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index 12bbc78d6222bb4980438ea46d7302ceb7d04020..fbee5d9719c8e8ce72ae361db447f7180cb701e7 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -464,7 +464,6 @@ youHaveNoGroups: "Nessun gruppo"
 joinOrCreateGroup: "Puoi creare il tuo gruppo o essere invitat@ a gruppi che già esistono."
 noHistory: "Nessuna cronologia"
 signinHistory: "Storico degli accessi al profilo"
-disableAnimatedMfm: "Disabilità i MFM animati"
 doing: "In corso..."
 category: "Categoria"
 tags: "Tag"
@@ -1323,72 +1322,6 @@ _nsfw:
   respect: "Nascondere i media segnati come sensibli"
   ignore: "Visualizzare i media segnati come sensibili"
   force: "Nascondere tutti i media"
-_mfm:
-  cheatSheet: "Bigliettino MFM"
-  intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di Misskey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile."
-  dummy: "Il Fediverso si espande con Misskey"
-  mention: "Menzioni"
-  mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @."
-  hashtag: "Hashtag"
-  hashtagDescription: "Per indicare un hashtag si può usare il segno numerico + tag."
-  url: "URL"
-  urlDescription: "È possibile indicare gli URL"
-  link: "Link"
-  linkDescription: "È possibile associare specifici intervalli di testo agli URL"
-  bold: "Grassetto"
-  boldDescription: "Il testo può essere grassettato per enfasi"
-  small: "vistosamente"
-  smallDescription: "Il contenuto può essere visualizzato più piccolo e più sottile"
-  center: "centratura"
-  centerDescription: "Il contenuto può essere centrato"
-  inlineCode: "Codice (inline)"
-  inlineCodeDescription: "Evidenziazione della sintassi in linea di programmi e altro codice"
-  blockCode: "Codice (blocco)"
-  blockCodeDescription: "Evidenziazione della sintassi di programmi multilinea e di altro codice in blocchi"
-  inlineMath: "Espressione matematica(Immersione)"
-  inlineMathDescription: "Visualizza le formule (KaTeX) in linea."
-  blockMath: "Formula matematica (blocco)"
-  blockMathDescription: "Visualizzazione di formule multilinea (KaTeX) in blocchi."
-  quote: "Cita il nota"
-  quoteDescription: "Può indicare che il contenuto è una citazione."
-  emoji: "Emoji personalizzati"
-  emojiDescription: "Utilizzare i due punti per racchiudere il nome di un'emoji personalizzata e visualizzarla."
-  search: "Cerca"
-  searchDescription: "È possibile visualizzare una casella di ricerca precompilata."
-  flip: "Inverti"
-  flipDescription: "Capovolgere il contenuto verso l'alto o verso il basso, a sinistra o a destra."
-  jelly: "Animazione (Biyon Biyon)."
-  jellyDescription: "Dà un'animazione di salto."
-  tada: "Animazione (jang)."
-  tadaDescription: "Ta-da! dà un'animazione che assomiglia a."
-  jump: "Animazione(salto)"
-  jumpDescription: "Da un animazione che salta su e giù."
-  bounce: "Animazione(rimbalzo)"
-  bounceDescription: "Rende il testo rimbalzante"
-  shake: "rimbalzante"
-  shakeDescription: "Rende il testo traballante"
-  twitch: "testo"
-  twitchDescription: "Fa tremare il testo"
-  spin: "Animazione (rotazione)"
-  spinDescription: "Fornisce un'animazione rotante."
-  x2: "Più grande"
-  x2Description: "Mostra il contenuto ingrandito."
-  x3: "Molto più grande"
-  x3Description: "Mostra il contenuto molto più ingrandito."
-  x4: "Estremamente più grande"
-  x4Description: "Mostra il contenuto estremamente più ingrandito."
-  blur: "Sfocatura"
-  blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore su di esso tornerà visibile chiaramente."
-  font: "Tipo di carattere"
-  fontDescription: "Puoi scegliere il tipo di carattere per il contenuto."
-  rainbow: "Arcobaleno"
-  rainbowDescription: "Arcobaleno il contenuto."
-  sparkle: "brillantini"
-  sparkleDescription: "Aggiungere effetti particellari scintillanti."
-  rotate: "Ruota"
-  rotateDescription: "Ruota con un angolo specificato."
-  plain: "Testo semplice"
-  plainDescription: "Disattiva tutta la sintassi interna."
 _instanceTicker:
   none: "Nascondi"
   remote: "Mostra solo per i profili remoti"
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 79b78f3f985d3d01125cec31785ecb16e9aff75e..5c919c303232b06696b8f5aa90c2b5d7c8f42f9a 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -467,7 +467,8 @@ youHaveNoGroups: "グループがありません"
 joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループを作成してください。"
 noHistory: "履歴はありません"
 signinHistory: "ログイン履歴"
-disableAnimatedMfm: "動きのあるMFMを無効にする"
+enableAdvancedMfm: "高度なMFMを有効にする"
+enableAnimatedMfm: "動きのあるMFMを有効にする"
 doing: "やっています"
 category: "カテゴリ"
 tags: "ã‚¿ã‚°"
@@ -946,6 +947,10 @@ selectFromPresets: "プリセットから選択"
 achievements: "実績"
 gotInvalidResponseError: "サーバーの応答が無効です"
 gotInvalidResponseErrorDescription: "サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから再度お試しください。"
+thisPostMayBeAnnoying: "この投稿は迷惑になる可能性があります。"
+thisPostMayBeAnnoyingHome: "ホームに投稿"
+thisPostMayBeAnnoyingCancel: "やめる"
+thisPostMayBeAnnoyingIgnore: "このまま投稿"
 
 _achievements:
   earnedAt: "獲得日時"
@@ -1347,73 +1352,6 @@ _nsfw:
   ignore: "閲覧注意のメディアを隠さない"
   force: "常にメディアを隠す"
 
-_mfm:
-  cheatSheet: "MFMチートシート"
-  intro: "MFMは、Misskey内の様々な場所で使用できる専用のマークアップ言語です。ここでは、MFMで使用可能な構文一覧が確認できます。"
-  dummy: "MisskeyでFediverseの世界が広がります"
-  mention: "メンション"
-  mentionDescription: "アットマーク + ユーザー名で、特定のユーザーを示すことができます。"
-  hashtag: "ハッシュタグ"
-  hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示すことができます。"
-  url: "URL"
-  urlDescription: "URLを示すことができます。"
-  link: "リンク"
-  linkDescription: "文章の特定の範囲を、URLに紐づけることができます。"
-  bold: "太字"
-  boldDescription: "文字を太く表示して強調することができます。"
-  small: "目立たなく"
-  smallDescription: "内容を小さく・薄く表示させることができます。"
-  center: "中央寄せ"
-  centerDescription: "内容を中央寄せで表示させることができます。"
-  inlineCode: "コード(インライン)"
-  inlineCodeDescription: "プログラムなどのコードをインラインでシンタックスハイライトします。"
-  blockCode: "コード(ブロック)"
-  blockCodeDescription: "複数行のプログラムなどのコードをブロックでシンタックスハイライトします。"
-  inlineMath: "数式(インライン)"
-  inlineMathDescription: "数式(KaTeX)をインラインで表示します。"
-  blockMath: "数式(ブロック)"
-  blockMathDescription: "複数行の数式(KaTeX)をブロックで表示します。"
-  quote: "引用"
-  quoteDescription: "内容が引用であることを示すことができます。"
-  emoji: "カスタム絵文字"
-  emojiDescription: "コロンでカスタム絵文字名を囲むと、カスタム絵文字を表示させることができます。"
-  search: "検索"
-  searchDescription: "入力済み検索ボックスを表示させることができます。"
-  flip: "反転"
-  flipDescription: "内容を上下または左右に反転させます。"
-  jelly: "アニメーション(びよんびよん)"
-  jellyDescription: "びよんびよんするアニメーションを与えます。"
-  tada: "アニメーション(じゃーん)"
-  tadaDescription: "ジャーン!という感じのアニメーションを与えます。"
-  jump: "アニメーション(ジャンプ)"
-  jumpDescription: "飛び跳ねるようなアニメーションを与えます。"
-  bounce: "アニメーション(バウンド)"
-  bounceDescription: "ぽよんぽよん弾むようなアニメーションを与えます。"
-  shake: "アニメーション(ぶるぶる)"
-  shakeDescription: "ぶるぶる震えるアニメーションを与えます。"
-  twitch: "アニメーション(ブレ)"
-  twitchDescription: "激しくブレるアニメーションを与えます。"
-  spin: "アニメーション(回転)"
-  spinDescription: "回転するアニメーションを与えます。"
-  x2: "大きく"
-  x2Description: "内容を大きく表示します。"
-  x3: "とても大きく"
-  x3Description: "内容をとても大きく表示します。"
-  x4: "究極に大きく"
-  x4Description: "内容を究極に大きく表示します。"
-  blur: "ぼかし"
-  blurDescription: "内容をぼかすことができます。ポインターを上に乗せるとはっきり見えるようになります。"
-  font: "フォント"
-  fontDescription: "内容のフォントを指定することができます。"
-  rainbow: "レインボー"
-  rainbowDescription: "内容をレインボーにします。"
-  sparkle: "キラキラ"
-  sparkleDescription: "キラキラしたパーティクルのエフェクトを追加します。"
-  rotate: "回転"
-  rotateDescription: "指定した角度で回転させます。"
-  plain: "プレーン"
-  plainDescription: "内側の構文を全て無効にします。"
-
 _instanceTicker:
   none: "表示しない"
   remote: "リモートユーザーに表示"
diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml
index 2987112e24481b57646361c55d0c05d9f434e403..ced47e11755274363a47b3f98f0e846b8d92cb86 100644
--- a/locales/ja-KS.yml
+++ b/locales/ja-KS.yml
@@ -467,7 +467,8 @@ youHaveNoGroups: "グループがあらへんねぇ。"
 joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループ作ってからやってな"
 noHistory: "履歴はあらへんねぇ。"
 signinHistory: "ログイン履歴"
-disableAnimatedMfm: "動きがやかましいMFMを止める"
+enableAdvancedMfm: "ややこしいMFMもありにする"
+enableAnimatedMfm: "動きがやかましいMFMも許したる"
 doing: "やっとるがな"
 category: "カテゴリ"
 tags: "ã‚¿ã‚°"
@@ -1119,72 +1120,6 @@ _nsfw:
   respect: "閲覧注意のメディアは隠すで"
   ignore: "閲覧注意のメディアは隠さへんで"
   force: "常にメディアを隠すで"
-_mfm:
-  cheatSheet: "MFMチートシート"
-  intro: "MFMは、Misskey内の色んな所で使える専用のマークアップ言語やで。このページでMFMで使える構文一覧が確認できるで。"
-  dummy: "MisskeyでFediverseの世界が広がります"
-  mention: "メンション"
-  mentionDescription: "アットマーク + ユーザー名で、特定のユーザーを示すことができるで。"
-  hashtag: "ハッシュタグ"
-  hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示すことができるで。"
-  url: "URL"
-  urlDescription: "URLを示すことができるで。"
-  link: "リンク"
-  linkDescription: "文章の特定の範囲をURLに紐づけることができるで"
-  bold: "太字"
-  boldDescription: "文字を太く表示して強調することができるで"
-  small: "目立たなく"
-  smallDescription: "内容を小さく・薄く表示することができるで"
-  center: "中央寄せ"
-  centerDescription: "内容を中央寄せで表示することができるで"
-  inlineCode: "コード(インライン)"
-  inlineCodeDescription: "プログラムとかのコードをインラインでシンタックスハイライトするで"
-  blockCode: "コード(ブロック)"
-  blockCodeDescription: "複数行のプログラムとかのコードをブロックでシンタックスハイライトするで"
-  inlineMath: "数式(インライン)"
-  inlineMathDescription: "数式(KaTeX)をインラインで表示するで"
-  blockMath: "数式(ブロック)"
-  blockMathDescription: "複数行の数式(KaTeX)をブロックで表示するで"
-  quote: "引用"
-  quoteDescription: "内容が引用ってことを示すことができるで"
-  emoji: "カスタム絵文字"
-  emojiDescription: "コロンでカスタム絵文字名を囲んだると、カスタム絵文字を表示させることができるで"
-  search: "探す"
-  searchDescription: "入力済み検索ボックスを表示することができるで"
-  flip: "反転"
-  flipDescription: "内容を上下または左右に反転するで"
-  jelly: "アニメーション(びよんびよん)"
-  jellyDescription: "びよんびよんするアニメーションやな。"
-  tada: "アニメーション(じゃーん)"
-  tadaDescription: "ジャーン!ってな感じのアニメーションやな。"
-  jump: "アニメーション(ジャンプ)"
-  jumpDescription: "飛び跳ねるようなアニメーションやな。"
-  bounce: "アニメーション(バウンド)"
-  bounceDescription: "ぽよんぽよん弾むようなアニメーションやな。"
-  shake: "アニメーション(ぶるぶる)"
-  shakeDescription: "ぶるぶる震えるアニメーションやな。"
-  twitch: "アニメーション(ブレ)"
-  twitchDescription: "激しくブレるアニメーションやな。"
-  spin: "アニメーション(回転)"
-  spinDescription: "回転するアニメーションやな。"
-  x2: "大きく"
-  x2Description: "内容を大きく表示するで"
-  x3: "とても大きく"
-  x3Description: "内容をとても大きく表示するで"
-  x4: "究極に大きく"
-  x4Description: "内容を究極に大きく表示するで"
-  blur: "ぼかし"
-  blurDescription: "内容をぼかすことができるで。ポインターを上に乗せるとはっきり見えるようになるで"
-  font: "フォント"
-  fontDescription: "内容のフォントを指定することができるで"
-  rainbow: "レインボー"
-  rainbowDescription: "内容をレインボーにするで"
-  sparkle: "キラキラ"
-  sparkleDescription: "キラキラしたバーティ来るのエフェクトを追加するで"
-  rotate: "回転"
-  rotateDescription: "指定した角度で回転させるで"
-  plain: "プレーン"
-  plainDescription: "内側の構文を全部無効にするで"
 _instanceTicker:
   none: "表示せん"
   remote: "リモートユーザーに表示"
diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml
index 7c2e3a065e9dca6ac415ed902eee72cd6baaec4d..fcd490db12146970713103a176b727d7f70c9107 100644
--- a/locales/kab-KAB.yml
+++ b/locales/kab-KAB.yml
@@ -61,10 +61,6 @@ account: "Imiḍan"
 _email:
   _follow:
     title: "Yeṭṭafaṛ-ik·em-id"
-_mfm:
-  mention: "Bder"
-  search: "Nadi"
-  font: "Tasefsit"
 _theme:
   keys:
     mention: "Bder"
diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml
index 55b72d3a6e2ac4d9297025424ad8fb9ad9f3ed6b..ef66f3fbd234b5c028500b7a71a678b71dbb7d31 100644
--- a/locales/kn-IN.yml
+++ b/locales/kn-IN.yml
@@ -64,8 +64,6 @@ file: "ಕಡತಗಳು"
 _email:
   _follow:
     title: "ಹಿಂಬಾಲಿಸಿದರು"
-_mfm:
-  search: "ಹುಡುಕು"
 _sfx:
   notification: "ಅಧಿಸೂಚನೆಗಳು"
 _widgets:
diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml
index 23814208a3ec05b3c641e2588ea011f46fc7044c..2def444095b503472b3d4a13937395d4c0bae25b 100644
--- a/locales/ko-KR.yml
+++ b/locales/ko-KR.yml
@@ -464,7 +464,6 @@ youHaveNoGroups: "그룹이 없습니다"
 joinOrCreateGroup: "다른 그룹의 초대를 받거나, 직접 새 그룹을 만들어 보세요."
 noHistory: "기록이 없습니다"
 signinHistory: "로그인 기록"
-disableAnimatedMfm: "움직임이 있는 MFM을 비활성화"
 doing: "잠시만요"
 category: "카테고리"
 tags: "태그"
@@ -1320,72 +1319,6 @@ _nsfw:
   respect: "열람주의로 설정된 미디어 숨기기"
   ignore: "열람 주의 미디어 항상 표시"
   force: "미디어 항상 숨기기"
-_mfm:
-  cheatSheet: "MFM 도움말"
-  intro: "MFM는 Misskey의 다양한 곳에서 사용할 수 있는 전용 마크업 언어입니다. 여기에서는 MFM에서 사용할 수 있는 구문을 확인할 수 있습니다."
-  dummy: "Misskey로 연합우주의 세계가 펼쳐집니다"
-  mention: "멘션"
-  mentionDescription: "골뱅이표(@) 뒤에 사용자명을 넣어 특정 유저를 나타낼 수 있습니다."
-  hashtag: "해시태그"
-  hashtagDescription: "샵 또는 우물정자(#)를 앞에 붙여서 해시태그를 나타낼 수 있습니다."
-  url: "URL"
-  urlDescription: "URL을 나타낼 수 있습니다."
-  link: "링크"
-  linkDescription: "문장의 특정 범위를 URL로 표시합니다."
-  bold: "굵음/볼드체"
-  boldDescription: "문자를 굵게 강조합니다."
-  small: "눈에 띄지 않음"
-  smallDescription: "내용을 작고 연하게 보이게 합니다."
-  center: "가운데 정렬"
-  centerDescription: "내용을 가운데 정렬로 보이게 합니다."
-  inlineCode: "코드(인라인)"
-  inlineCodeDescription: "여러 행의 코드를 문법 강조를 적용하여 인라인으로 표시합니다."
-  blockCode: "코드(블록)"
-  blockCodeDescription: "여러 행의 코드를 문법 강조를 적용하여 블록으로 표시합니다."
-  inlineMath: "수식(인라인)"
-  inlineMathDescription: "수식(KaTeX)를 인라인으로 보이게 합니다."
-  blockMath: "수식(블록)"
-  blockMathDescription: "여러 줄의 수식(KaTeX)를 블록으로 보이게 합니다."
-  quote: "인용"
-  quoteDescription: "내용을 인용문으로 표시합니다."
-  emoji: "커스텀 이모지"
-  emojiDescription: "커스텀 이모지의 이름을 쌍점(:)으로 감싸서 커스텀 이모지를 사용합니다."
-  search: "검색"
-  searchDescription: "주어진 키워드가 입력된 검색창을 보이게 합니다."
-  flip: "플립"
-  flipDescription: "내용을 상하 또는 좌우로 반전시킵니다."
-  jelly: "애니메이션 (젤리)"
-  jellyDescription: "젤리처럼 탱글탱글한 느낌의 효과를 줍니다."
-  tada: "애니메이션 (짠!)"
-  tadaDescription: "짠! 하는 느낌의 효과를 줍니다."
-  jump: "애니메이션(점프)"
-  jumpDescription: "펄쩍 뛸 듯한 느낌의 효과를 줍니다."
-  bounce: "애니메이션 (바운스)"
-  bounceDescription: "통통 튀는 느낌의 효과를 줍니다."
-  shake: "애니메이션 (부들부들)"
-  shakeDescription: "부들부들 떠는 느낌의 효과를 줍니다."
-  twitch: "애니메이션 (경련)"
-  twitchDescription: "격하게 흔들리는 느낌의 효과를 줍니다."
-  spin: "애니메이션 (회전)"
-  spinDescription: "회전 효과를 줍니다."
-  x2: "크게"
-  x2Description: "내용을 크게 표시합니다."
-  x3: "더 크게"
-  x3Description: "내용을 더 크게 표시합니다."
-  x4: "매우 크게"
-  x4Description: "내용을 매우 크게 표시합니다."
-  blur: "흐림"
-  blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다."
-  font: "폰트"
-  fontDescription: "내용의 글꼴을 지정할 수 있습니다."
-  rainbow: "무지개"
-  rainbowDescription: "내용을 무지개로 표시합니다."
-  sparkle: "반짝반짝"
-  sparkleDescription: "반짝이는 파티클 효과를 추가합니다."
-  rotate: "회전"
-  rotateDescription: "지정한 각도로 회전시킵니다."
-  plain: "평문"
-  plainDescription: "안에 있는 MFM 구문을 모두 무시하고 평문으로 표시합니다."
 _instanceTicker:
   none: "보이지 않음"
   remote: "리모트 유저에게만 보이기"
diff --git a/locales/lo-LA.yml b/locales/lo-LA.yml
index cfda4e0e9e51e6222b6a42b1faa6e151120e78f9..263a7eb18c725fe76515a0c8f5eb1ceb61e64f08 100644
--- a/locales/lo-LA.yml
+++ b/locales/lo-LA.yml
@@ -187,11 +187,6 @@ file: "ໄຟລ໌"
 _email:
   _follow:
     title: "ໄດ້ຕິດຕາມທ່ານ"
-_mfm:
-  mention: "ໄດ້ກ່າວມາ"
-  quote: "ລວມຂໍ້ຄວາມອ້າງອີງ"
-  emoji: "ອີໂມຈິແບບກຳນົດເອງ"
-  search: "ຄົ້ນຫາ"
 _theme:
   keys:
     mention: "ໄດ້ກ່າວມາ"
diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml
index e99d49710dc3be5f702fa6294e034d4f18fc1f34..a05d106652d53a945e21c5b2274556f6e22ab29f 100644
--- a/locales/nl-NL.yml
+++ b/locales/nl-NL.yml
@@ -427,11 +427,6 @@ loggedInAsBot: "Momenteel als bot ingelogd"
 _email:
   _follow:
     title: "volgde jou"
-_mfm:
-  mention: "Vermelding"
-  quote: "Quote"
-  emoji: "Maatwerk emoji"
-  search: "Zoeken"
 _theme:
   keys:
     mention: "Vermelding"
diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml
index d8c7739f6ce4c94cadec41ed9cc522761224ecbf..0874dded9ca3bb93b4b3d0726b81684cab329316 100644
--- a/locales/pl-PL.yml
+++ b/locales/pl-PL.yml
@@ -461,7 +461,6 @@ youHaveNoGroups: "Nie masz żadnych grup"
 joinOrCreateGroup: "Uzyskaj zaproszenie do dołączenia do grupy lub utwórz własną grupę."
 noHistory: "Brak historii"
 signinHistory: "Historia logowania"
-disableAnimatedMfm: "Wyłącz MFM z animacją"
 doing: "Przetwarzanie..."
 category: "Kategoria"
 tags: "Tagi"
@@ -958,68 +957,6 @@ _nsfw:
   respect: "Ukrywaj media NSFW"
   ignore: "Nie ukrywaj mediów NSFW"
   force: "Ukrywaj wszystkie media"
-_mfm:
-  cheatSheet: "ÅšciÄ…ga MFM"
-  intro: "MFM to język składniowy wyjątkowy dla Misskey, który może być użyty w wielu miejscach. Tu znajdziesz listę wszystkich możliwych elementów składni MFM."
-  dummy: "Misskey rozszerza świat Fediwersum"
-  mention: "Wspomnij"
-  mentionDescription: "Używając znaku @ i nazwy użytkownika, możesz określić danego użytkownika."
-  hashtag: "Hashtag"
-  hashtagDescription: "Używając kratki i tekstu, możesz określić hashtag."
-  url: "Adres URL"
-  urlDescription: "Adresy URL mogą być wyświetlane"
-  link: "Odnośnik"
-  linkDescription: "Określone części tekstu mogą być wyświetlane jako adres URL."
-  bold: "Pogrubienie"
-  boldDescription: "Wyróżnia litery pogrubiając je."
-  small: "Małe"
-  smallDescription: "Wyświetla treść jako małą i cienką."
-  center: "Wyśrodkowanie"
-  centerDescription: "Wyśrodkowuje zawartość."
-  inlineCode: "Kod (w wierszu)"
-  blockCode: "Kod (blok)"
-  blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu linii."
-  blockMath: "Matematyka (Blok)"
-  quote: "Cytuj"
-  quoteDescription: "Wyświetla treść jako cytat."
-  emoji: "Niestandardowe emoji"
-  emojiDescription: "Otaczając nazwę niestandardowego emoji dwukropkami, możesz użyć niestandardowego emoji."
-  search: "Szukaj"
-  searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem."
-  flip: "Odwróć"
-  flipDescription: "Przerzuca treść poziomo lub pionowo."
-  jelly: "Animacja (Galaretka)"
-  jellyDescription: "Nadaje treści galaretowatą animację."
-  tada: "Animation (Tada)"
-  tadaDescription: "Nadaje treści animację podobną do \"Tada!\"."
-  jump: "Animacja (Skok)"
-  jumpDescription: "Nadaje treści animację skakania."
-  bounce: "Animacja (Odbijanie)"
-  bounceDescription: "Nadaje treści animację odbijania się."
-  shake: "Animacja (WstrzÄ…sanie)"
-  shakeDescription: "Nadaje treści animację wstrząsania."
-  twitch: "Animacja (Drganie)"
-  twitchDescription: "Nadaje treści mocno drgającą animację."
-  spin: "Animacja (Obrót)"
-  spinDescription: "Nadaje treści animację obracania."
-  x2: "Duże"
-  x2Description: "Czyni treść większą."
-  x3: "Bardzo duże"
-  x3Description: "Czyni treść jeszcze większą."
-  x4: "Ogromne"
-  x4Description: "Czyni treść jeszcze większą niż jeszcze większa."
-  blur: "Rozmycie"
-  blurDescription: "Rozmywa treść. Zostanie wyraźnie wyświetlona po najechaniu."
-  font: "Czcionka"
-  fontDescription: "Wybiera czcionkę do wyświetlania treści."
-  rainbow: "Tęcza"
-  rainbowDescription: "Sprawia, że zawartość pojawia się w kolorach tęczy."
-  sparkle: "Blask"
-  sparkleDescription: "Nadaje zawartości efekt lśniącego brokatu."
-  rotate: "Obróć"
-  rotateDescription: "Obraca zawartość o określony kąt."
-  plain: "Zwyczajny"
-  plainDescription: "Wyłącza efekty wszystkich MFM zawartych w tym efekcie MFM."
 _instanceTicker:
   none: "Nigdy nie pokazuj"
   remote: "Pokaż dla zdalnych użytkowników"
diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml
index 8eac5fee642518b5027289e25fb9d1b7e9f3183a..6ca41a395f6013909ff19d44bf88b5d6d2871fd4 100644
--- a/locales/pt-PT.yml
+++ b/locales/pt-PT.yml
@@ -475,11 +475,6 @@ file: "Ficheiros"
 _email:
   _follow:
     title: "Você tem um novo seguidor"
-_mfm:
-  mention: "Menção"
-  quote: "Citar"
-  emoji: "Emoji personalizado"
-  search: "Buscar"
 _theme:
   keys:
     mention: "Menção"
diff --git a/locales/ro-RO.yml b/locales/ro-RO.yml
index f354801d5ced39f12bb71ed6787248e6ae745a9b..551652ef466f247261ace5ee702fa8766b8b95c0 100644
--- a/locales/ro-RO.yml
+++ b/locales/ro-RO.yml
@@ -455,7 +455,6 @@ youHaveNoGroups: "Nu ai niciun grup"
 joinOrCreateGroup: "Primește o invitație într-un grup sau creează unul nou."
 noHistory: "Nu există istoric"
 signinHistory: "Istoric autentificări"
-disableAnimatedMfm: "Dezactivează MFM cu animații"
 doing: "Se procesează..."
 category: "Categorie"
 tags: "Etichete"
@@ -655,11 +654,6 @@ _role:
 _email:
   _follow:
     title: "te-a urmărit"
-_mfm:
-  mention: "Mențiune"
-  quote: "Citează"
-  emoji: "Emoji personalizat"
-  search: "Caută"
 _theme:
   description: "Descriere"
   keys:
diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml
index 26e9ad0e94996daad3fe14d9226f88211e85b1ec..1abd79c983589c7cb67f9e5c46ce779fad2b3b8d 100644
--- a/locales/ru-RU.yml
+++ b/locales/ru-RU.yml
@@ -462,7 +462,6 @@ youHaveNoGroups: "У вас нет ни одной группы"
 joinOrCreateGroup: "Получайте приглашения в группы или создавайте свои собственные"
 noHistory: "История пока пуста"
 signinHistory: "Журнал посещений"
-disableAnimatedMfm: "Отключение анимированной разметки MFM"
 doing: "В процессе"
 category: "Категория"
 tags: "Метки"
@@ -1309,72 +1308,6 @@ _nsfw:
   respect: "Скрывать содержимое не для всех"
   ignore: "Показывать содержимое не для всех"
   force: "Скрывать вообще все файлы"
-_mfm:
-  cheatSheet: "Подсказка по разметке MFM"
-  intro: "MFM — язык оформления текста, который придуман специально для Misskey и готов для применения во многих местах. На этой странице собраны и кратко изложены способы его использовать."
-  dummy: "Misskey расширяет границы Федиверса."
-  mention: "Упоминание"
-  mentionDescription: "При помощи знака «собака» перед именем можно упомянуть какого-нибудь пользователя."
-  hashtag: "Хэштег"
-  hashtagDescription: "При помощи знака «решётка» перед словом задаётся хэштег."
-  url: "Простая ссылка (URL)"
-  urlDescription: "Ссылки могут отображаться непосредственно."
-  link: "Ссылка с пояснением"
-  linkDescription: "Можно ссылку оформить в виде произвольного текста."
-  bold: "Жирный шрифт"
-  boldDescription: "Выделяет текст, делая буквы жирнее."
-  small: "Мелкий шрифт"
-  smallDescription: "Делает текст маленьким и незаметным."
-  center: "Выровнять элементы по центру"
-  centerDescription: "Так можно выровнять что-то по центру."
-  inlineCode: "Программа (в тексте)"
-  inlineCodeDescription: "Подсвечивает фрагмент программы внутри сплошного текста."
-  blockCode: "Программа (блок)"
-  blockCodeDescription: "Оформляет текст программы в виде отдельного блокоа. Он может состоять из множества строк."
-  inlineMath: "Математическое выражение (в тексте)"
-  inlineMathDescription: "Позволяет вставлять математические выражения внутрь текста при помощи языка KaTeX."
-  blockMath: "Математическое выражение (блок)"
-  blockMathDescription: "Оформляет математическое выражение (KaTeX) на отдельной строке."
-  quote: "Цитата"
-  quoteDescription: "Так можно процитировать чей-то текст."
-  emoji: "Собственные эмодзи"
-  emojiDescription: "Можно вставить эмодзи в текст, окружив название двоеточиями."
-  search: "Поиск"
-  searchDescription: "Можно добавить форму для поиска, сразу задав, что искать."
-  flip: "Переворот"
-  flipDescription: "Позволяет отразить текст зеркально по вертикали или горизонтали."
-  jelly: "Анимация желе (шлёп-плёп)"
-  jellyDescription: "Напоминает горку джема, дёргающуюся от шлепков."
-  tada: "Анимация (та-дам!)"
-  tadaDescription: "Получается нечто выпрыгивающее, как бы крича: «а вот и я!»"
-  jump: "Анимация прыжков (прыг-скок)"
-  jumpDescription: "Побуждает радостно подпрыгивать."
-  bounce: "Анимация отскоков (бум-бум)"
-  bounceDescription: "Это будет скакать как мяч."
-  shake: "Анимация дрожи (б-р-р-р)"
-  shakeDescription: "Такое дрожит, словно от холода. Или от страха."
-  twitch: "Анимация тряски"
-  twitchDescription: "Заставляет трястись как одержимого"
-  spin: "Вращение"
-  spinDescription: "Так можно крутить содержимое в разных направлениях."
-  x2: "Крупный шрифт"
-  x2Description: "Увеличивает содержимое."
-  x3: "Ещё крупнее"
-  x3Description: "Сильнее увеличивает содержимое."
-  x4: "Совсем крупно"
-  x4Description: "Увеличивает содержимое совсем сильно."
-  blur: "Размытие"
-  blurDescription: "Размывает текст до нечитаемости, будто его поместили за матовое стекло. Наведение указателя мыши на размытый текст возвращает чёткость."
-  font: "Шрифт"
-  fontDescription: "Так можно писать произвольным шрифтом."
-  rainbow: "Радуга"
-  rainbowDescription: "Заставлять содержимое отображаться в цветах радуги."
-  sparkle: "Искры"
-  sparkleDescription: "Добавляет эффект искрящихся частиц."
-  rotate: "Повернуть"
-  rotateDescription: "Поворачивает на заданный угол."
-  plain: "Буквально"
-  plainDescription: "MFM внутри отключается, и текст отображается как есть"
 _instanceTicker:
   none: "Не показывать"
   remote: "Только для других сайтов"
diff --git a/locales/sk-SK.yml b/locales/sk-SK.yml
index 369f1af36d63dfbbb6fcda3fb7d84daee1e64cf9..844243ffec07111ea34aeff6f74b322ddf02bc09 100644
--- a/locales/sk-SK.yml
+++ b/locales/sk-SK.yml
@@ -464,7 +464,6 @@ youHaveNoGroups: "Nemáte žiadne skupiny"
 joinOrCreateGroup: "Požiadajte o pozvanie do existujúcej skupiny alebo vytvorte novú."
 noHistory: "Žiadna história"
 signinHistory: "História prihlásení"
-disableAnimatedMfm: "Vypnúť MFM s animáciou"
 doing: "Pracujem..."
 category: "Kategórie"
 tags: "Značky"
@@ -1013,72 +1012,6 @@ _nsfw:
   respect: "Skryť NSFW médiá"
   ignore: "Neskrývať NSFW médiá"
   force: "Skryť všetky médiá"
-_mfm:
-  cheatSheet: "MFM Cheatsheet"
-  intro: "MFM je Misskey exkluzívny značkovací jazyk, ktorý sa dá používať na viacerých miestach. Tu môžete vidieť zoznam všetkej dostupnej MFM syntaxe."
-  dummy: "Misskey rozširuje svet Fediverza"
-  mention: "Zmienka"
-  mentionDescription: "Používateľa spomeniete použítím zavináča a mena používateľa"
-  hashtag: "Hashtag"
-  hashtagDescription: "Môžete zadať hashtag použitím mriežky a textu"
-  url: "URL"
-  urlDescription: "URL sa dajú zobraziť."
-  link: "Odkaz"
-  linkDescription: "Jednotlivé časti texty sa dajú zobraziť ako URL."
-  bold: "Tučné"
-  boldDescription: "Zvýrazní písmená tým, že budú tučnejšie."
-  small: "Malé"
-  smallDescription: "Zobrazí obsah malý a tenký."
-  center: "Vystrediť prvky"
-  centerDescription: "Zobrazí obsah v strede"
-  inlineCode: "Kód (inline)"
-  inlineCodeDescription: "Zobrazí kód so zvýraznením syntaxe."
-  blockCode: "Kód (blok)"
-  blockCodeDescription: "Zobrazí viacriadkový kód so zvýraznením syntaxe v bloku."
-  inlineMath: "Vzorec (inline)"
-  inlineMathDescription: "Zobrazí matematický vzorec (KaTeX) v riadku."
-  blockMath: "Vzorec (blok)"
-  blockMathDescription: "Zobrazí viacriadkový matematický vzorec (KaTeX) v bloku"
-  quote: "Citovať"
-  quoteDescription: "Zobrazí obsah ako citát."
-  emoji: "Vlastné emoji"
-  emojiDescription: "Pridaním dvojbodiek pred a za názov vlastnej emoji, sa dá zobraziť vlastná emoji."
-  search: "Hľadať"
-  searchDescription: "Zobrazí vyhľadávacie pole so zadaným textom."
-  flip: "Preklopiť"
-  flipDescription: "Preklopí obsah horizontálne alebo vertikálne"
-  jelly: "Animácia (želé)"
-  jellyDescription: "Obsah sa bude hýbať ako želé."
-  tada: "Animácia (tadá)"
-  tadaDescription: "Obsah sa bude hýbať ako Tada!"
-  jump: "Animácia (skok)"
-  jumpDescription: "Obsah skočí."
-  bounce: "Animácia (odraz)"
-  bounceDescription: "Obsah sa bude odrážať."
-  shake: "Animácia (trasenie)"
-  shakeDescription: "Obsah sa bude triasť."
-  twitch: "Animácia (myknutie)"
-  twitchDescription: "Obsahu dá animáciu silného trasenia."
-  spin: "Animácia (rotácia)"
-  spinDescription: "Obsahu pridá otáčajúcu animáciu."
-  x2: "Veľký"
-  x2Description: "Zobrazí obsah väčší."
-  x3: "Veľmi veľký"
-  x3Description: "Zobrazí obsah ešte väčší."
-  x4: "Neuveriteľne veľký"
-  x4Description: "Zobrazí obsah ešte viac veľký než veľmi veľký."
-  blur: "Rozmazanie"
-  blurDescription: "Týmto efektom môže byť obsah rozmazaný. Zaostrí sa keď ned neho príde kurzor."
-  font: "Písmo"
-  fontDescription: "Nastaví písmo, ktorým sa zobrazí text."
-  rainbow: "Dúha"
-  rainbowDescription: "Zobrazí obsah vo farbách dúhy."
-  sparkle: "Trblietky"
-  sparkleDescription: "Obsahu dodá trblietajúci efekt."
-  rotate: "Otáčať"
-  rotateDescription: "Otočí obsah o určitý uhol."
-  plain: "Obyčajné"
-  plainDescription: "Bez akejkoľvej syntaxe"
 _instanceTicker:
   none: "Nikdy nezobrazovať"
   remote: "Zobraziť pre vzdialených používateľov"
diff --git a/locales/sv-SE.yml b/locales/sv-SE.yml
index 1abd0d194dfbeea435dfcf52586a470da6489237..184db2e907aaa8689fa8b0af7e295e260ec9e8ff 100644
--- a/locales/sv-SE.yml
+++ b/locales/sv-SE.yml
@@ -371,11 +371,6 @@ pushNotificationNotSupported: "Din webbläsare eller instans har inte stöd för
 _email:
   _follow:
     title: "följde dig"
-_mfm:
-  mention: "Nämn"
-  quote: "Citat"
-  emoji: "Anpassa emoji"
-  search: "Sök"
 _channel:
   setBanner: "Välj banner"
   removeBanner: "Ta bort banner"
diff --git a/locales/th-TH.yml b/locales/th-TH.yml
index 010e32426c809f84af3ee296f6815f947fecb400..bea19c37069adf0ad793d0dc0c76c7fc26f3e307 100644
--- a/locales/th-TH.yml
+++ b/locales/th-TH.yml
@@ -465,7 +465,6 @@ youHaveNoGroups: "คุณยังไม่มีกลุ่ม"
 joinOrCreateGroup: "รับเชิญเข้าร่วมกลุ่มหรือสร้างกลุ่มของคุณเองเลยนะ"
 noHistory: "ไม่มีรายการ"
 signinHistory: "ประวัติการเข้าสู่ระบบ"
-disableAnimatedMfm: "ปิดการใช้งาน MFM ด้วยแอนิเมชั่น"
 doing: "กำลังประมวลผล......"
 category: "หมวดหมู่"
 tags: "แท็ก"
@@ -1326,72 +1325,6 @@ _nsfw:
   respect: "ซ่อนสื่อ NSFW"
   ignore: "อย่าซ่อนสื่อ NSFW"
   force: "ซ่อนสื่อทั้งหมด"
-_mfm:
-  cheatSheet: "โค้ด MFM Cheat Sheet"
-  intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Misskey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ"
-  dummy: "Misskey ขยายโลกของ Fediverse"
-  mention: "กล่าวถึง"
-  mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ"
-  hashtag: "แฮชแท็ก"
-  hashtagDescription: "คุณสามารถระบุชื่อแฮชแท็กได้โดยใช้เครื่องหมายตัวเลขและข้อความได้นะ"
-  url: "URL"
-  urlDescription: "สามารถแสดง URL ได้นะ"
-  link: "ลิงก์"
-  linkDescription: "เจาะจงเฉพาะ ส่วนของข้อความที่สามารถแสดงเป็น URL ได้"
-  bold: "ตัวหนา"
-  boldDescription: "ไฮไลท์ตัวอักษรโดยทำให้หนาขึ้น"
-  small: "ขนาดเล็ก"
-  smallDescription: "แสดงผลเนื้อหาขนาดเล็กและบาง"
-  center: "เซ็นเตอร์"
-  centerDescription: "แสดงผลเนื้อหาเป็นศูนย์กลาง"
-  inlineCode: "โค้ด (อินไลน์)"
-  inlineCodeDescription: "แสดงผลการเน้นไวยากรณ์แบบอินไลน์สำหรับโค้ด (โปรแกรม)"
-  blockCode: "โค้ด (บล็อก)"
-  blockCodeDescription: "แสดงผลการเน้นไวยากรณ์สำหรับโค้ดหลายบรรทัด (โปรแกรม) ในบล็อก"
-  inlineMath: "คณิต (อินไลน์)"
-  inlineMathDescription: "แสดงผลสูตรคณิต (KaTeX) ในบรรทัด"
-  blockMath: "คณิต (บล็อก)"
-  blockMathDescription: "แสดงผลสูตรคณิตหลายบรรทัด (KaTeX) ในบล็อก"
-  quote: "อ้างคำพูด"
-  quoteDescription: "แสดงผลเนื้อหาเป็นใบเสนอราคา"
-  emoji: "กำหนดอีโมจิเอง"
-  emojiDescription: "โดยล้อมรอบชื่ออีโมจิที่กำหนดเองด้วยเครื่องหมายทวิภาค จะสามารถแสดงผลอีโมจิที่กำหนดเองได้"
-  search: "ค้นหา"
-  searchDescription: "แสดงผลกล่องค้นหาพร้อมกับข้อความที่ป้อนไว้ล่วงหน้า"
-  flip: "พลิก"
-  flipDescription: "พลิกเนื้อหาในแนวนอนหรือแนวตั้ง"
-  jelly: "แอนิเมชั่น (เยลลี่)"
-  jellyDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือนเยลลี่"
-  tada: "แอนิเมชั่น (ธาดา)"
-  tadaDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือน \"ทาด้า!\""
-  jump: "อนิเมชั่น (กระโดด)"
-  jumpDescription: "ให้เนื้อหามีภาพเคลื่อนไหวแบบกระโดด"
-  bounce: "อนิเมชั่น (เด้ง)"
-  bounceDescription: "ให้เนื้อหามีอนิเมชั่นเด้ง"
-  shake: "อนิเมชั่น (เขย่า)"
-  shakeDescription: "ให้เนื้อหามีภาพเคลื่อนไหวสั่น"
-  twitch: "แอนิเมชั่น (Twitch)"
-  twitchDescription: "ให้เนื้อหามีแอนิเมชั่นกระตุกอย่างแรง"
-  spin: "แอนิเมชั่น (สปิน)"
-  spinDescription: "ให้เนื้อหาเป็นภาพเคลื่อนไหวแบบหมุน"
-  x2: "ขนาดใหญ่"
-  x2Description: "แสดงเนื้อหาที่ใหญ่ขึ้น"
-  x3: "ใหญ่มาก"
-  x3Description: "แสดงเนื้อหาอีเว้นท์ที่ใหญ่ขึ้น"
-  x4: "ใหญ่อย่างไม่น่าเชื่อ"
-  x4Description: "แสดงผลเนื้อหาที่ใหญ่กว่าใหญ่กว่าขนาดใหญ่"
-  blur: "เบลอ"
-  blurDescription: "เบลอเนื้อหา จะแสดงผลอย่างชัดเจนต่อเมื่อวางเมาส์เหนือ"
-  font: "ตัวอักษร"
-  fontDescription: "ตั้งค่าตัวอักษรเพื่อแสดงเนื้อหาใน"
-  rainbow: "สายรุ้ง"
-  rainbowDescription: "ทำให้เนื้อหานั้นปรากฏเป็นสีรุ้ง"
-  sparkle: "กลิตเตอร์"
-  sparkleDescription: "ให้เนื้อหานั้นมีเอฟเฟกต์แบบอนุภาคประกาย"
-  rotate: "หมุนหน้าจอ"
-  rotateDescription: "เปลี่ยนเนื้อหาตามด้วยมุมที่ระบุไว้"
-  plain: "เรียบง่าย"
-  plainDescription: "ปิดการใช้งานเอฟเฟกต์ของ MFM ทั้งหมดที่มีอยู่ในเอฟเฟกต์ MFM นี้"
 _instanceTicker:
   none: "ไม่ต้องแสดง"
   remote: "แสดงสำหรับผู้ใช้ระยะไกล"
diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml
index ebcdfa5bfbf0b61714e40e407fb5a28603f09b05..7bd8188a48f5be6cd209a619c07481d1fe35fca3 100644
--- a/locales/tr-TR.yml
+++ b/locales/tr-TR.yml
@@ -48,8 +48,6 @@ smtpUser: "Kullanıcı Adı"
 smtpPass: "Åžifre"
 user: "Kullanıcı"
 searchByGoogle: "Arama"
-_mfm:
-  search: "Arama"
 _sfx:
   notification: "Bildirim"
 _widgets:
diff --git a/locales/ug-CN.yml b/locales/ug-CN.yml
index a7504542d073d948d8a367db430e7d09dc44ff4b..65ef84125907178fa6b7d801d4f33b981c97e0a7 100644
--- a/locales/ug-CN.yml
+++ b/locales/ug-CN.yml
@@ -2,5 +2,3 @@
 _lang_: "ياپونچە"
 search: "ئىزدەش"
 searchByGoogle: "ئىزدەش"
-_mfm:
-  search: "ئىزدەش"
diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml
index 68e949f92031011eb5f6a43271ca07cc78b0bd02..2305fcab1b4e0275ba4258145e7b78e11bd05f12 100644
--- a/locales/uk-UA.yml
+++ b/locales/uk-UA.yml
@@ -461,7 +461,6 @@ youHaveNoGroups: "Немає груп"
 joinOrCreateGroup: "Отримуйте запрошення до груп або створюйте свої власні групи."
 noHistory: "Історія порожня"
 signinHistory: "Історія входів"
-disableAnimatedMfm: "Відключити анімації MFM"
 doing: "Виконується"
 category: "Категорія"
 tags: "Теги"
@@ -1191,65 +1190,6 @@ _nsfw:
   respect: "Приховувати NSFW медіа"
   ignore: "Не приховувати NSFW медіа"
   force: "Приховувати всі медіа файли"
-_mfm:
-  cheatSheet: " Довідка MFM"
-  intro: "MFM це ексклюзивна мова розмітки тексту в Misskey, яку можна використовувати в багатьох місцях. Тут ви можете переглянути приклади її синтаксису."
-  dummy: "Misskey розширює світ Федіверсу"
-  mention: "Згадка"
-  mentionDescription: "За допомогою знака \"@\" перед ім'ям можна згадати конкретного користувача."
-  hashtag: "Хештеґ"
-  hashtagDescription: "За допомогою знака \"решітка\" перед словом задається хештег."
-  url: "URL"
-  urlDescription: "Відображаються URL-адреси."
-  link: "Посилання"
-  linkDescription: "Окремі частини тексту можуть містити посилання"
-  bold: "Жирний шрифт"
-  boldDescription: "Виділяє літери, роблячи їх товще"
-  small: "Дрібний шрифт"
-  smallDescription: "Робить текст маленьким і тонким"
-  center: "По центру"
-  centerDescription: "Показує вміст у центрі"
-  inlineCode: "Код (у рядку)"
-  inlineCodeDescription: "Показує фрагмент тексту у рядку як програмний код"
-  blockCode: "Код (блок)"
-  blockCodeDescription: "Показує кілька рядків тексту як блок програмного кода"
-  inlineMath: "Формула (у рядку)"
-  inlineMathDescription: "Відображення математичних формул (KaTeX) у рядку"
-  blockMath: "Формули (блок)"
-  blockMathDescription: "Відображати багаторядкові формули (KaTeX) блоками"
-  quote: "Цитата"
-  quoteDescription: "Відображає зміст як цитату."
-  emoji: "Кастомні емоджі"
-  emojiDescription: "Щоб показати нетиповий емоджі, потрібно ввести його назву в двокрапках."
-  search: "Пошук"
-  searchDescription: "Відображає вікно пошуку з попередньо введеним текстом"
-  flip: "Перевернути"
-  flipDescription: "Віддзеркалює вміст по горизонталі або вертикалі"
-  jelly: "Анімація (желе)"
-  jellyDescription: "Створює желеподібну анімацію"
-  tada: "Анімація (Тада!)"
-  tadaDescription: "Створює анімацію з відчуттям \"Тада!\""
-  jump: "Анімація (стрибки)"
-  jumpDescription: "Показує стрибаючу анімацію"
-  bounce: "Анімація (пружина)"
-  bounceDescription: "Надає вмісту стрибаючу анімацію."
-  shake: "Анімація (Shake)"
-  shakeDescription: "Надає вмісту тремтливу анімацію."
-  twitch: "Анімація (Twitch)"
-  spin: "Анімація (Spin)"
-  x2: "Великий"
-  x2Description: "Показує контент збільшеним."
-  x3: "Дуже великий"
-  x3Description: "Показує контент ще більшим."
-  x4: "Надзвичайно великий"
-  x4Description: "Показує контент надзвичайно великим."
-  blur: "Розмиття"
-  blurDescription: "Цей ефект зробить контент розмитим. Контент можна зробити чітким, якщо навести на нього вказівник миші."
-  font: "Шрифт"
-  fontDescription: "Встановлює шрифт для контенту."
-  rotate: "Обертати"
-  plain: "Звичайний"
-  plainDescription: "Деактивує всі ефекти MFM, що містяться в цьому ефекті MFM."
 _instanceTicker:
   none: "Не відображати"
   remote: "Відображати для віддалених користувачів"
diff --git a/locales/vi-VN.yml b/locales/vi-VN.yml
index 26527c74c3a54f20c1452a3c4e6094330d051c04..594052dfce6988af62e831ed4a8f7fada3ffc729 100644
--- a/locales/vi-VN.yml
+++ b/locales/vi-VN.yml
@@ -457,7 +457,6 @@ youHaveNoGroups: "Không có nhóm nào"
 joinOrCreateGroup: "Tham gia hoặc tạo một nhóm mới."
 noHistory: "Không có dữ liệu"
 signinHistory: "Lịch sử đăng nhập"
-disableAnimatedMfm: "Tắt MFM với chuyển động"
 doing: "Đang xử lý..."
 category: "Phân loại"
 tags: "Thẻ"
@@ -992,72 +991,6 @@ _nsfw:
   respect: "Ẩn nội dung NSFW"
   ignore: "Hiện nội dung NSFW"
   force: "Ẩn mọi media"
-_mfm:
-  cheatSheet: "MFM Cheatsheet"
-  intro: "MFM là ngôn ngữ phát triển độc quyền của Misskey có thể được sử dụng ở nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn."
-  dummy: "Misskey mở rộng thế giới Fediverse"
-  mention: "Nhắc đến"
-  mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sử dụng @tên người dùng."
-  hashtag: "Hashtag"
-  hashtagDescription: "Bạn có thể tạo một hashtag bằng #chữ hoặc #số."
-  url: "URL"
-  urlDescription: "Những URL có thể hiển thị."
-  link: "Đường dẫn"
-  linkDescription: "Các phần cụ thể của văn bản có thể được hiển thị dưới dạng URL."
-  bold: "In đậm"
-  boldDescription: "Nổi bật các chữ cái bằng cách làm chúng dày hơn."
-  small: "Nhỏ"
-  smallDescription: "Hiển thị nội dung nhỏ và mỏng."
-  center: "Giữa"
-  centerDescription: "Hiển thị nội dung căn giữa."
-  inlineCode: "Mã (Trong dòng)"
-  inlineCodeDescription: "Hiển thị tô sáng cú pháp trong dòng cho mã (chương trình)."
-  blockCode: "Mã (Khối)"
-  blockCodeDescription: "Hiển thị tô sáng cú pháp cho mã nhiều dòng (chương trình) trong một khối."
-  inlineMath: "Toán học (Trong dòng)"
-  inlineMathDescription: "Hiển thị công thức toán (KaTeX) trong dòng"
-  blockMath: "Toán học (Khối)"
-  blockMathDescription: "Hiển thị công thức toán học nhiều dòng (KaTeX) trong một khối"
-  quote: "Trích dẫn"
-  quoteDescription: "Hiển thị nội dung dạng lời trích dạng."
-  emoji: "Tùy chỉnh emoji"
-  emojiDescription: "Hiển thị emoji với cú pháp :tên emoji:"
-  search: "Tìm kiếm"
-  searchDescription: "Hiển thị hộp tìm kiếm với văn bản được nhập trước."
-  flip: "Lật"
-  flipDescription: "Lật nội dung theo chiều ngang hoặc chiều dọc."
-  jelly: "Chuyển động (Thạch rau câu)"
-  jellyDescription: "Cho phép nội dung chuyển động giống như thạch rau câu."
-  tada: "Chuyển động (Tada)"
-  tadaDescription: "Cho phép nội dung chuyển động kiểu \"Tada!\"."
-  jump: "Chuyển động (Nhảy múa)"
-  jumpDescription: "Cho phép nội dung chuyển động nhảy nhót."
-  bounce: "Chuyển động (Cà tưng)"
-  bounceDescription: "Cho phép nội dung chuyển động cà tưng."
-  shake: "Chuyển động (Rung)"
-  shakeDescription: "Cho phép nội dung chuyển động rung lắc."
-  twitch: "Chuyển động (Co rút)"
-  twitchDescription: "Cho phép nội dung chuyển động co rút."
-  spin: "Chuyển động (Xoay tít)"
-  spinDescription: "Cho phép nội dung chuyển động xoay tít."
-  x2: "Lớn"
-  x2Description: "Hiển thị nội dung cỡ lớn hơn."
-  x3: "Rất lớn"
-  x3Description: "Hiển thị nội dung cỡ lớn hơn nữa."
-  x4: "Khổng lồ"
-  x4Description: "Hiển thị nội dung cỡ khổng lồ."
-  blur: "Làm mờ"
-  blurDescription: "Làm mờ nội dung. Nó sẽ được hiển thị rõ ràng khi di chuột qua."
-  font: "Phông chữ"
-  fontDescription: "Chọn phông chữ để hiển thị nội dung."
-  rainbow: "Cầu vồng"
-  rainbowDescription: "Làm cho nội dung hiển thị với màu sắc cầu vồng."
-  sparkle: "Lấp lánh"
-  sparkleDescription: "Làm cho nội dung hiệu ứng hạt lấp lánh."
-  rotate: "Xoay"
-  rotateDescription: "Xoay nội dung theo một góc cụ thể."
-  plain: "Đơn giản"
-  plainDescription: "Vô hiệu hóa mọi hiệu ứng MFM chứa trong hiệu ứng MFM này."
 _instanceTicker:
   none: "Không hiển thị"
   remote: "Hiện cho người dùng từ máy chủ khác"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index a1081588823d6978456712360389784eb22586b7..16b824b97517518cff7aff89b7124ccb19da2482 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -467,7 +467,6 @@ youHaveNoGroups: "没有群组"
 joinOrCreateGroup: "请加入一个现有的群组,或者创建新群组。"
 noHistory: "没有历史记录"
 signinHistory: "登录历史"
-disableAnimatedMfm: "禁用MFM动画"
 doing: "正在进行"
 category: "类别"
 tags: "标签"
@@ -1330,72 +1329,6 @@ _nsfw:
   respect: "隐藏敏感内容"
   ignore: "不隐藏敏感内容"
   force: "总是隐藏内容"
-_mfm:
-  cheatSheet: "MFM代码速查表"
-  intro: "MFM是一种在Misskey中的各个位置使用的专用标记语言。在这里您可以看到MFM中可用的语法列表。"
-  dummy: "通过Misskey扩展联邦宇宙的世界"
-  mention: "提及"
-  mentionDescription: "可以使用 @+用户名 来指示特定用户"
-  hashtag: "话题标签"
-  hashtagDescription: "可以使用井号+文字来表示话题标签。"
-  url: "URL"
-  urlDescription: "可以表示URL地址。"
-  link: "链接"
-  linkDescription: "可以将部分文字和URL关联起来。"
-  bold: "粗体"
-  boldDescription: "可以将文字显示为粗体来表示强调。"
-  small: "缩小"
-  smallDescription: "可以使内容文字变小、变淡。"
-  center: "居中"
-  centerDescription: "可以将内容居中显示。"
-  inlineCode: "代码(内嵌)"
-  inlineCodeDescription: "将文字中的程序代码语法高亮显示。"
-  blockCode: "代码(块)"
-  blockCodeDescription: "语法高亮显示整块程序代码。"
-  inlineMath: "数学公式(内嵌)"
-  inlineMathDescription: "显示内嵌的KaTex公式。"
-  blockMath: "数学公式(块)"
-  blockMathDescription: "显示整块的多行KaTex数学公式。"
-  quote: "引用"
-  quoteDescription: "可以用来表示引用的内容。"
-  emoji: "自定义表情符号"
-  emojiDescription: "可以将自定义表情符号使用冒号括起来,就可以显示自定义表情符号了。"
-  search: "搜索"
-  searchDescription: "显示含有搜索内容示例的搜索框。"
-  flip: "翻转"
-  flipDescription: "将内容上下或左右翻转。"
-  jelly: "动画(果冻)"
-  jellyDescription: "显示果冻一样的动画效果。"
-  tada: "动画(锵锵)"
-  tadaDescription: "显示\"锵锵!\"的动画效果。"
-  jump: "动画(跳动)"
-  jumpDescription: "显示跳动的动画效果。"
-  bounce: "动画(弹性)"
-  bounceDescription: "显示弹性一样的动画效果。"
-  shake: "动画(摇晃)"
-  shakeDescription: "显示摇晃的动画效果。"
-  twitch: "动画(颤抖)"
-  twitchDescription: "显示强烈颤抖的动画效果。"
-  spin: "动画(旋转)"
-  spinDescription: "显示旋转的动画效果。"
-  x2: "大"
-  x2Description: "以大尺寸显示内容。"
-  x3: "非常大"
-  x3Description: "以更大尺寸显示内容。"
-  x4: "最大"
-  x4Description: "以最大尺寸显示内容。"
-  blur: "模糊"
-  blurDescription: "产生模糊效果。将鼠标指针放在上面即可将内容显示出来。"
-  font: "字体"
-  fontDescription: "可以设置内容所使用的字体。"
-  rainbow: "彩虹"
-  rainbowDescription: "用彩虹色来显示内容。"
-  sparkle: "闪光"
-  sparkleDescription: "添加发光粒子效果。"
-  rotate: "旋转"
-  rotateDescription: "旋转指定的角度。"
-  plain: "简洁"
-  plainDescription: "禁用所有内部语法。"
 _instanceTicker:
   none: "不显示"
   remote: "仅远程用户"
diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml
index 2e1787e7ae702f74813d98646c93f9f79921c647..ac0e38cf0c3faee746997d9e79dbbce66922c4f4 100644
--- a/locales/zh-TW.yml
+++ b/locales/zh-TW.yml
@@ -467,7 +467,6 @@ youHaveNoGroups: "找不到群組"
 joinOrCreateGroup: "請加入現有群組,或創建新群組。"
 noHistory: "沒有歷史紀錄"
 signinHistory: "登入歷史"
-disableAnimatedMfm: "禁用MFM動畫"
 doing: "正在進行"
 category: "類別"
 tags: "標籤"
@@ -1330,72 +1329,6 @@ _nsfw:
   respect: "隱藏敏感內容"
   ignore: "不隱藏敏感內容"
   force: "隱藏所有內容"
-_mfm:
-  cheatSheet: "MFM代碼小抄"
-  intro: "MFM是Misskey專用的標記語言,可以在Misskey中的各個位置使用。 您可以這裏看到MFM可用語法列表。"
-  dummy: "Misskey拓展了Fediverse的世界"
-  mention: "提及"
-  mentionDescription: "透過 @+用戶名 來標示特定使用者。"
-  hashtag: "#tag"
-  hashtagDescription: "可以使用\"#\"符號後加文字表示話題標籤。"
-  url: "URL"
-  urlDescription: "可以展示URL位址。"
-  link: "鏈接"
-  linkDescription: "您可以將特定範圍的文章與 URL 相關聯。 "
-  bold: "ç²—é«”"
-  boldDescription: "可以將文字顯示为粗體来強調。"
-  small: "縮小"
-  smallDescription: "可以使內容文字變小、變淡。"
-  center: "置中"
-  centerDescription: "可以將內容置中顯示。"
-  inlineCode: "程式碼(内嵌)"
-  inlineCodeDescription: "在行內用高亮度顯示,例如程式碼語法。"
-  blockCode: "程式碼(區塊)"
-  blockCodeDescription: "在區塊中用高亮度顯示,例如複數行的程式碼語法。"
-  inlineMath: "數學公式(內嵌)"
-  inlineMathDescription: "顯示內嵌的KaTex數學公式。"
-  blockMath: "數學公式(方塊)"
-  blockMathDescription: "以區塊顯示複數行的KaTex數學式。"
-  quote: "引用"
-  quoteDescription: "可以用來表示引用的内容。"
-  emoji: "自訂表情符號"
-  emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。 "
-  search: "搜尋"
-  searchDescription: "您可以顯示所輸入的搜索框。"
-  flip: "翻轉"
-  flipDescription: "將內容上下或左右翻轉。"
-  jelly: "動畫(果凍)"
-  jellyDescription: "顯示果凍一樣的動畫效果。"
-  tada: "動畫(鏘~)"
-  tadaDescription: "顯示「鏘~!」這種感覺的動畫效果。"
-  jump: "動畫(跳動)"
-  jumpDescription: "顯示跳動的動畫效果。"
-  bounce: "動畫(反彈)"
-  bounceDescription: "顯示有彈性的動畫效果。"
-  shake: "動畫(搖晃)"
-  shakeDescription: "顯示顫抖的動畫效果。"
-  twitch: "動畫(顫抖)"
-  twitchDescription: "顯示強烈顫抖的動畫效果。"
-  spin: "動畫(旋轉)"
-  spinDescription: "顯示旋轉的動畫效果。"
-  x2: "大"
-  x2Description: "放大顯示內容。"
-  x3: "較大"
-  x3Description: "放大顯示內容。"
-  x4: "最大"
-  x4Description: "將顯示內容放至最大。"
-  blur: "模糊"
-  blurDescription: "產生模糊效果。将游標放在上面即可將内容顯示出來。"
-  font: "å­—åž‹"
-  fontDescription: "您可以設定顯示內容的字型"
-  rainbow: "彩虹"
-  rainbowDescription: "用彩虹色來顯示內容。"
-  sparkle: "閃閃發光"
-  sparkleDescription: "添加閃閃發光的粒子效果。"
-  rotate: "旋轉"
-  rotateDescription: "以指定的角度旋轉。"
-  plain: "ç°¡æ½”"
-  plainDescription: "停用全部的內部語法。"
 _instanceTicker:
   none: "隱藏"
   remote: "向遠端使用者顯示"
diff --git a/package.json b/package.json
index 97c9dea7d234c26152ace2bf81cbf198392f175f..7cc3f6cf5c2757b63a39690a5269d8849d72a997 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
 	"name": "misskey",
-	"version": "13.5.6",
+	"version": "13.6.0",
 	"codename": "nasubi",
 	"repository": {
 		"type": "git",
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 6ec2ef4b764344553b6fbbe5229107f7e55d6cd1..0351e02e0ffede4a62cf703440f7d8a008b83e86 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -116,7 +116,7 @@
 		"tsc-alias": "1.8.2",
 		"tsconfig-paths": "4.1.2",
 		"twemoji-parser": "14.0.0",
-		"typeorm": "0.3.12",
+		"typeorm": "0.3.11",
 		"typescript": "4.9.5",
 		"ulid": "2.3.0",
 		"unzipper": "0.10.11",
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index d15d8c0aeead0660bd9e0f2288a51532efc128a9..9a782780d1ab0053b7feff54b0b8bd35b76002ca 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -211,8 +211,14 @@ export class RoleService implements OnApplicationShutdown {
 		const assignedRoleIds = assigns.map(x => x.roleId);
 		const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({}));
 		const assignedBadgeRoles = roles.filter(r => r.asBadge && assignedRoleIds.includes(r.id));
-		// コンディショナルロールも含めるのは負荷高そうだから一旦無し
-		return assignedBadgeRoles;
+		const badgeCondRoles = roles.filter(r => r.asBadge && (r.target === 'conditional'));
+		if (badgeCondRoles.length > 0) {
+			const user = roles.some(r => r.target === 'conditional') ? await this.userCacheService.findById(userId) : null;
+			const matchedBadgeCondRoles = badgeCondRoles.filter(r => this.evalCond(user!, r.condFormula));
+			return [...assignedBadgeRoles, ...matchedBadgeCondRoles];
+		} else {
+			return assignedBadgeRoles;
+		}
 	}
 
 	@bindThis
diff --git a/packages/frontend/src/components/MkDialog.vue b/packages/frontend/src/components/MkDialog.vue
index da4db634064ed9b8efb90f5b7903d6737ce21386..9690353432b6429a59ec925a7c59fd2ac9e0b146 100644
--- a/packages/frontend/src/components/MkDialog.vue
+++ b/packages/frontend/src/components/MkDialog.vue
@@ -32,7 +32,7 @@
 			<MkButton v-if="showCancelButton || input || select" inline @click="cancel">{{ cancelText ?? i18n.ts.cancel }}</MkButton>
 		</div>
 		<div v-if="actions" :class="$style.buttons">
-			<MkButton v-for="action in actions" :key="action.text" inline :primary="action.primary" @click="() => { action.callback(); close(); }">{{ action.text }}</MkButton>
+			<MkButton v-for="action in actions" :key="action.text" inline :primary="action.primary" @click="() => { action.callback(); modal?.close(); }">{{ action.text }}</MkButton>
 		</div>
 	</div>
 </MkModal>
diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue
index 6ac56f3ce0a08a1205335692961080fdf4f7abce..b777a1329b20158ae7f2c0e57d8ee101f9f6f50e 100644
--- a/packages/frontend/src/components/MkMediaImage.vue
+++ b/packages/frontend/src/components/MkMediaImage.vue
@@ -8,7 +8,7 @@
 		</div>
 	</div>
 </div>
-<div v-else :class="$style.visible">
+<div v-else :class="$style.visible" :style="defaultStore.state.darkMode ? '--c: rgb(255 255 255 / 2%);' : '--c: rgb(0 0 0 / 2%);'">
 	<a
 		:class="$style.imageContainer"
 		:href="image.url"
@@ -78,7 +78,6 @@ watch(() => props.image, () => {
 	position: relative;
 	//box-shadow: 0 0 0 1px var(--divider) inset;
 	background: var(--bg);
-	--c: rgb(0 0 0 / 2%);
 	background-image: linear-gradient(45deg, var(--c) 16.67%, var(--bg) 16.67%, var(--bg) 50%, var(--c) 50%, var(--c) 66.67%, var(--bg) 66.67%, var(--bg) 100%);
 	background-size: 16px 16px;
 }
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index 7edcaf13247dbf50eb7252223dd65a37e988923b..e910fbab01cf442bc4b2a709a4c6b99b1a76626e 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -5,14 +5,14 @@
 	ref="el"
 	v-hotkey="keymap"
 	:class="$style.root"
-	:tabindex="!isDeleted ? '-1' : null"
+	:tabindex="!isDeleted ? '-1' : undefined"
 >
-	<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" :class="$style.replyTo"/>
+	<MkNoteSub v-if="appearNote.reply && !renoteCollapsed" :note="appearNote.reply" :class="$style.replyTo"/>
 	<div v-if="pinned" :class="$style.tip"><i class="ti ti-pin"></i> {{ i18n.ts.pinnedNote }}</div>
 	<!--<div v-if="appearNote._prId_" class="tip"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ti ti-x"></i></button></div>-->
 	<!--<div v-if="appearNote._featuredId_" class="tip"><i class="ti ti-bolt"></i> {{ i18n.ts.featured }}</div>-->
 	<div v-if="isRenote" :class="$style.renote">
-		<MkAvatar v-once :class="$style.renoteAvatar" :user="note.user" link preview/>
+		<MkAvatar :class="$style.renoteAvatar" :user="note.user" link preview/>
 		<i class="ti ti-repeat" style="margin-right: 4px;"></i>
 		<I18n :src="i18n.ts.renotedBy" tag="span" :class="$style.renoteText">
 			<template #user>
@@ -34,8 +34,12 @@
 			<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span>
 		</div>
 	</div>
-	<article :class="$style.article" @contextmenu.stop="onContextmenu">
-		<MkAvatar v-once :class="$style.avatar" :user="appearNote.user" link preview/>
+	<div v-if="renoteCollapsed" :class="$style.collapsedRenoteTarget">
+		<MkAvatar :class="$style.collapsedRenoteTargetAvatar" :user="appearNote.user" link preview/>
+		<Mfm :text="getNoteSummary(appearNote)" :plain="true" :nowrap="true" :author="appearNote.user" :class="$style.collapsedRenoteTargetText" @click="renoteCollapsed = false"/>
+	</div>
+	<article v-else :class="$style.article" @contextmenu.stop="onContextmenu">
+		<MkAvatar :class="$style.avatar" :user="appearNote.user" link preview/>
 		<div :class="$style.main">
 			<MkNoteHeader :class="$style.header" :note="appearNote" :mini="true"/>
 			<MkInstanceTicker v-if="showTicker" :class="$style.ticker" :instance="appearNote.user.instance"/>
@@ -60,7 +64,7 @@
 					<div v-if="appearNote.files.length > 0" :class="$style.files">
 						<MkMediaList :media-list="appearNote.files"/>
 					</div>
-					<MkPoll v-if="appearNote.poll" ref="pollViewer" :note="appearNote" :class="$style.poll"/>
+					<MkPoll v-if="appearNote.poll" :note="appearNote" :class="$style.poll"/>
 					<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="false" :class="$style.urlPreview"/>
 					<div v-if="appearNote.renote" :class="$style.quote"><MkNoteSimple :note="appearNote.renote" :class="$style.quoteNote"/></div>
 					<button v-if="isLong && collapsed" :class="$style.collapsed" class="_button" @click="collapsed = false">
@@ -73,7 +77,13 @@
 				<MkA v-if="appearNote.channel && !inChannel" :class="$style.channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-device-tv"></i> {{ appearNote.channel.name }}</MkA>
 			</div>
 			<footer :class="$style.footer">
-				<MkReactionsViewer ref="reactionsViewer" :note="appearNote"/>
+				<MkReactionsViewer :note="appearNote" :max-number="16">
+					<template v-slot:more>
+						<button class="_button" :class="$style.reactionDetailsButton" @click="showReactions">
+							{{ i18n.ts.more }}
+						</button>
+					</template>
+				</MkReactionsViewer>
 				<button :class="$style.footerButton" class="_button" @click="reply()">
 					<i class="ti ti-arrow-back-up"></i>
 					<p v-if="appearNote.repliesCount > 0" :class="$style.footerButtonCount">{{ appearNote.repliesCount }}</p>
@@ -116,7 +126,7 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, Ref } from 'vue';
+import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, Ref, defineAsyncComponent } from 'vue';
 import * as mfm from 'mfm-js';
 import * as misskey from 'misskey-js';
 import MkNoteSub from '@/components/MkNoteSub.vue';
@@ -144,6 +154,8 @@ import { useNoteCapture } from '@/scripts/use-note-capture';
 import { deepClone } from '@/scripts/clone';
 import { useTooltip } from '@/scripts/use-tooltip';
 import { claimAchievement } from '@/scripts/achievements';
+import { getNoteSummary } from '@/scripts/get-note-summary';
+import { shownNoteIds } from '@/os';
 
 const props = defineProps<{
 	note: misskey.entities.Note;
@@ -180,18 +192,23 @@ const reactButton = shallowRef<HTMLElement>();
 let appearNote = $computed(() => isRenote ? note.renote as misskey.entities.Note : note);
 const isMyRenote = $i && ($i.id === note.userId);
 const showContent = ref(false);
+const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null;
 const isLong = (appearNote.cw == null && appearNote.text != null && (
 	(appearNote.text.split('\n').length > 9) ||
-	(appearNote.text.length > 500)
+	(appearNote.text.length > 500) ||
+	(appearNote.files.length >= 5) ||
+	(urls && urls.length >= 4)
 ));
 const collapsed = ref(appearNote.cw == null && isLong);
 const isDeleted = ref(false);
 const muted = ref(checkWordMute(appearNote, $i, defaultStore.state.mutedWords));
-const translation = ref(null);
+const translation = ref<any>(null);
 const translating = ref(false);
-const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null;
 const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.user.instance);
 const canRenote = computed(() => ['public', 'home'].includes(appearNote.visibility) || appearNote.userId === $i.id);
+let renoteCollapsed = $ref(isRenote && (($i && ($i.id === note.userId)) || shownNoteIds.has(appearNote.id)));
+
+shownNoteIds.add(appearNote.id);
 
 const keymap = {
 	'r': () => reply(true),
@@ -350,6 +367,12 @@ function readPromo() {
 	});
 	isDeleted.value = true;
 }
+
+function showReactions(): void {
+	os.popup(defineAsyncComponent(() => import('@/components/MkReactedUsersDialog.vue')), {
+		noteId: appearNote.id,
+	}, {}, 'closed');
+}
 </script>
 
 <style lang="scss" module>
@@ -433,7 +456,6 @@ function readPromo() {
 	width: 28px;
 	height: 28px;
 	margin: 0 8px 0 0;
-	border-radius: 6px;
 }
 
 .renoteText {
@@ -461,6 +483,36 @@ function readPromo() {
 	margin-right: 4px;
 }
 
+.collapsedRenoteTarget {
+	display: flex;
+	align-items: center;
+	line-height: 28px;
+	white-space: pre;
+	padding: 0 32px 18px;
+}
+
+.collapsedRenoteTargetAvatar {
+	flex-shrink: 0;
+	display: inline-block;
+	width: 28px;
+	height: 28px;
+	margin: 0 8px 0 0;
+}
+
+.collapsedRenoteTargetText {
+	overflow: hidden;
+	flex-shrink: 1;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	font-size: 90%;
+	opacity: 0.7;
+	cursor: pointer;
+
+	&:hover {
+		text-decoration: underline;
+	}
+}
+
 .article {
 	display: flex;
 	padding: 28px 32px 18px;
@@ -614,6 +666,11 @@ function readPromo() {
 		padding: 8px 16px 0 16px;
 	}
 
+	.collapsedRenoteTarget {
+		padding: 0 16px 9px;
+		margin-top: 4px;
+	}
+
 	.article {
 		padding: 14px 16px 9px;
 	}
@@ -652,4 +709,19 @@ function readPromo() {
 	text-align: center;
 	opacity: 0.7;
 }
+
+.reactionDetailsButton {
+	display: inline-block;
+	height: 32px;
+	margin: 2px;
+	padding: 0 6px;
+	border: dashed 1px var(--divider);
+	border-radius: 4px;
+	background: transparent;
+	opacity: .8;
+
+	&:hover {
+		background: var(--X5);
+	}
+}
 </style>
diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue
index 6b43f146650b2fc0d7d5c57a804a66e87712eacd..32998e1a704dd788b1f40443a918242ce893e907 100644
--- a/packages/frontend/src/components/MkNoteHeader.vue
+++ b/packages/frontend/src/components/MkNoteHeader.vue
@@ -1,6 +1,6 @@
 <template>
 <header :class="$style.root">
-	<MkA v-once v-user-preview="note.user.id" :class="$style.name" :to="userPage(note.user)">
+	<MkA v-user-preview="note.user.id" :class="$style.name" :to="userPage(note.user)">
 		<MkUserName :user="note.user"/>
 	</MkA>
 	<div v-if="note.user.isBot" :class="$style.isBot">bot</div>
@@ -90,7 +90,7 @@ defineProps<{
 	vertical-align: -20%;
 
 	& + .badgeRole {
-		margin-left: .125em;
+		margin-left: 0.2em;
 	}
 }
 </style>
diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue
index 8c7114eac138b81aa3221a5d9fe0606196ae3c72..0d42e8ffbfde2b5afc8b4e89319cfc2c33cc306e 100644
--- a/packages/frontend/src/components/MkNotification.vue
+++ b/packages/frontend/src/components/MkNotification.vue
@@ -1,6 +1,6 @@
 <template>
 <div ref="elRef" :class="$style.root">
-	<div v-once :class="$style.head">
+	<div :class="$style.head">
 		<MkAvatar v-if="notification.type === 'pollEnded'" :class="$style.icon" :user="notification.note.user" link preview/>
 		<MkAvatar v-else-if="notification.type === 'achievementEarned'" :class="$style.icon" :user="$i" link preview/>
 		<MkAvatar v-else-if="notification.user" :class="$style.icon" :user="notification.user" link preview/>
@@ -35,7 +35,7 @@
 			<span v-else>{{ notification.header }}</span>
 			<MkTime v-if="withTime" :time="notification.createdAt" :class="$style.headerTime"/>
 		</header>
-		<div v-once :class="$style.content">
+		<div :class="$style.content">
 			<MkA v-if="notification.type === 'reaction'" :class="$style.text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)">
 				<i class="ti ti-quote" :class="$style.quote"></i>
 				<Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="true" :author="notification.note.user"/>
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index c7e7e85b2e838c1f00a6574421b37effcbce3fbc..f15906c1c12ae5bf8e978520019800eb92e8fc45 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -109,7 +109,7 @@ const props = withDefaults(defineProps<{
 	mention?: misskey.entities.User;
 	specified?: misskey.entities.User;
 	initialText?: string;
-	initialVisibility?: typeof misskey.noteVisibilities;
+	initialVisibility?: (typeof misskey.noteVisibilities)[number];
 	initialFiles?: misskey.entities.DriveFile[];
 	initialLocalOnly?: boolean;
 	initialVisibleUsers?: misskey.entities.User[];
@@ -579,6 +579,36 @@ async function post(ev?: MouseEvent) {
 		os.popup(MkRippleEffect, { x, y }, {}, 'end');
 	}
 
+	const annoying =
+		text.includes('$[x2') ||
+		text.includes('$[x3') ||
+		text.includes('$[x4') ||
+		text.includes('$[scale') ||
+		text.includes('$[position');
+	if (annoying) {
+		const { canceled, result } = await os.actions({
+			type: 'warning',
+			text: i18n.ts.thisPostMayBeAnnoying,
+			actions: [{
+				value: 'home',
+				text: i18n.ts.thisPostMayBeAnnoyingHome,
+				primary: true,
+			}, {
+				value: 'cancel',
+				text: i18n.ts.thisPostMayBeAnnoyingCancel,
+			}, {
+				value: 'ignore',
+				text: i18n.ts.thisPostMayBeAnnoyingIgnore,
+			}],
+		});
+
+		if (canceled) return;
+		if (result === 'cancel') return;
+		if (result === 'home') {
+			visibility = 'home';
+		}
+	}
+
 	let postData = {
 		text: text === '' ? undefined : text,
 		fileIds: files.length > 0 ? files.map(f => f.id) : undefined,
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
index 83fdf0f9882c2676ab04b13a14bb6f0f8a9b5bd0..4abd2562dfa223bdc00572838b48b5a115aeed47 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
@@ -107,7 +107,7 @@ useTooltip(buttonEl, async (showing) => {
 	border-radius: 4px;
 
 	&.canToggle {
-		background: rgba(0, 0, 0, 0.05);
+		background: var(--buttonBg);
 
 		&:hover {
 			background: rgba(0, 0, 0, 0.1);
diff --git a/packages/frontend/src/components/MkReactionsViewer.vue b/packages/frontend/src/components/MkReactionsViewer.vue
index 5981471c6887ff14e4cc1cc09edf45a4662d4fa4..cdd6f528e76c5fd1e1334e86de0ee74c887fc1b0 100644
--- a/packages/frontend/src/components/MkReactionsViewer.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.vue
@@ -7,23 +7,60 @@
 	:move-class="$store.state.animation ? $style.transition_x_move : ''"
 	tag="div" :class="$style.root"
 >
-	<XReaction v-for="(count, reaction) in note.reactions" :key="reaction" :reaction="reaction" :count="count" :is-initial="initialReactions.has(reaction)" :note="note"/>
+	<XReaction v-for="[reaction, count] in reactions" :key="reaction" :reaction="reaction" :count="count" :is-initial="initialReactions.has(reaction)" :note="note"/>
+	<slot v-if="hasMoreReactions" name="more" />
 </TransitionGroup>
 </template>
 
 <script lang="ts" setup>
-import { computed } from 'vue';
 import * as misskey from 'misskey-js';
-import { $i } from '@/account';
 import XReaction from '@/components/MkReactionsViewer.reaction.vue';
+import { watch } from 'vue';
 
-const props = defineProps<{
-	note: misskey.entities.Note;
-}>();
+const props = withDefaults(defineProps<{
+    note: misskey.entities.Note;
+    maxNumber?: number;
+}>(), {
+    maxNumber: Infinity,
+});
 
 const initialReactions = new Set(Object.keys(props.note.reactions));
 
-const isMe = computed(() => $i && $i.id === props.note.userId);
+let reactions = $ref<[string, number][]>([]);
+let hasMoreReactions = $ref(false);
+
+if (props.note.myReaction && !Object.keys(reactions).includes(props.note.myReaction)) {
+	reactions[props.note.myReaction] = props.note.reactions[props.note.myReaction];
+}
+
+watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumber]) => {
+	let newReactions: [string, number][] = [];
+	hasMoreReactions = Object.keys(newSource).length > maxNumber;
+
+	for (let i = 0; i < reactions.length; i++) {
+		const reaction = reactions[i][0];
+		if (reaction in newSource && newSource[reaction] !== 0) {
+			reactions[i][1] = newSource[reaction];
+			newReactions.push(reactions[i]);
+		}
+	}
+
+	const newReactionsNames = newReactions.map(([x]) => x);
+	newReactions = [
+		...newReactions,
+		...Object.entries(newSource)
+			.sort(([, a], [, b]) => b - a)
+			.filter(([y], i) => i < maxNumber && !newReactionsNames.includes(y)),
+	]
+
+	newReactions = newReactions.slice(0, props.maxNumber);
+
+	if (props.note.myReaction && !newReactions.map(([x]) => x).includes(props.note.myReaction)) {
+		newReactions.push([props.note.myReaction, newSource[props.note.myReaction]]);
+	}
+
+	reactions = newReactions;
+}, { immediate: true, deep: true });
 </script>
 
 <style lang="scss" module>
diff --git a/packages/frontend/src/components/MkUserPreview.vue b/packages/frontend/src/components/MkUserPreview.vue
index f68fdd64d9bc2880d516074d030978a87c896a56..eacc66de4f84ff683d283ac32c55d54d8ae81334 100644
--- a/packages/frontend/src/components/MkUserPreview.vue
+++ b/packages/frontend/src/components/MkUserPreview.vue
@@ -24,6 +24,7 @@
 					<p>{{ $ts.followers }}</p><span>{{ user.followersCount }}</span>
 				</div>
 			</div>
+			<button class="menu _button" @click="showMenu"><i class="ti ti-dots"></i></button>
 			<MkFollowButton v-if="$i && user.id != $i.id" class="koudoku-button" :user="user" mini/>
 		</div>
 		<div v-else>
@@ -40,6 +41,7 @@ import * as misskey from 'misskey-js';
 import MkFollowButton from '@/components/MkFollowButton.vue';
 import { userPage } from '@/filters/user';
 import * as os from '@/os';
+import { getUserMenu } from '@/scripts/get-user-menu';
 
 const props = defineProps<{
 	showing: boolean;
@@ -58,6 +60,10 @@ let user = $ref<misskey.entities.UserDetailed | null>(null);
 let top = $ref(0);
 let left = $ref(0);
 
+function showMenu(ev: MouseEvent) {
+	os.popupMenu(getUserMenu(user), ev.currentTarget ?? ev.target);
+}
+
 onMounted(() => {
 	if (typeof props.q === 'object') {
 		user = props.q;
@@ -174,6 +180,13 @@ onMounted(() => {
 			}
 		}
 
+		> .menu {
+			position: absolute;
+			top: 8px;
+			right: 42px;
+			padding: 8px;
+		}
+
 		> .koudoku-button {
 			position: absolute;
 			top: 8px;
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index ab66502e065644b06e54d82b6ce152e3980d18e9..23a39b9ac9cab892018978f59ebd76d058907076 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -1,37 +1,62 @@
 <template>
-<div v-if="show" ref="el" :class="[$style.root, { [$style.slim]: narrow, [$style.thin]: thin_ }]" :style="{ background: bg }" @click="onClick">
-	<div v-if="narrow" :class="$style.buttonsLeft">
-		<MkAvatar v-if="props.displayMyAvatar && $i" :class="$style.avatar" :user="$i"/>
-	</div>
-	<template v-if="metadata">
-		<div v-if="!hideTitle" :class="$style.titleContainer" @click="showTabsPopup">
-			<MkAvatar v-if="metadata.avatar" :class="$style.titleAvatar" :user="metadata.avatar" indicator/>
-			<i v-else-if="metadata.icon" :class="[$style.titleIcon, metadata.icon]"></i>
-
-			<div :class="$style.title">
-				<MkUserName v-if="metadata.userName" :user="metadata.userName" :nowrap="true"/>
-				<div v-else-if="metadata.title">{{ metadata.title }}</div>
-				<div v-if="!narrow && metadata.subtitle" :class="$style.subtitle">
-					{{ metadata.subtitle }}
+<div v-if="show" ref="el" :class="[$style.root]" :style="{ background: bg }">
+	<div :class="[$style.upper, { [$style.slim]: narrow, [$style.thin]: thin_ }]">
+		<div v-if="narrow && props.displayMyAvatar && $i" class="_button" :class="$style.buttonsLeft" @click="openAccountMenu">
+			<MkAvatar :class="$style.avatar" :user="$i" />
+		</div>
+		<div v-else-if="narrow && !hideTitle" :class="$style.buttonsLeft" />
+
+		<template v-if="metadata">
+			<div v-if="!hideTitle" :class="$style.titleContainer" @click="top">
+				<MkAvatar v-if="metadata.avatar" :class="$style.titleAvatar" :user="metadata.avatar" indicator/>
+				<i v-else-if="metadata.icon" :class="[$style.titleIcon, metadata.icon]"></i>
+
+				<div :class="$style.title">
+					<MkUserName v-if="metadata.userName" :user="metadata.userName" :nowrap="true"/>
+					<div v-else-if="metadata.title">{{ metadata.title }}</div>
+					<div v-if="metadata.subtitle" :class="$style.subtitle">
+						{{ metadata.subtitle }}
+					</div>
 				</div>
-				<div v-if="narrow && hasTabs" :class="[$style.subtitle, $style.activeTab]">
-					{{ tabs.find(tab => tab.key === props.tab)?.title }}
-					<i class="ti ti-chevron-down" :class="$style.chevron"></i>
+			</div>
+			<div v-if="!narrow || hideTitle" :class="$style.tabs" @wheel="onTabWheel">
+				<div :class="$style.tabsInner">
+					<button v-for="t in tabs" :ref="(el) => tabRefs[t.key] = (el as HTMLElement)" v-tooltip.noDelay="t.title" class="_button" :class="[$style.tab, { [$style.active]: t.key != null && t.key === props.tab }]" @mousedown="(ev) => onTabMousedown(t, ev)" @click="(ev) => onTabClick(t, ev)">
+						<div :class="$style.tabInner">
+							<i v-if="t.icon" :class="[$style.tabIcon, t.icon]"></i>
+							<div v-if="!t.iconOnly" :class="$style.tabTitle">{{ t.title }}</div>
+							<Transition
+								v-else
+								@enter="enter"
+								@after-enter="afterEnter"
+								@leave="leave"
+								@after-leave="afterLeave"
+								mode="in-out"
+							>
+								<div v-if="t.key === tab" :class="$style.tabTitle">{{ t.title }}</div>
+							</Transition>
+						</div>
+					</button>
 				</div>
+				<div ref="tabHighlightEl" :class="$style.tabHighlight"></div>
 			</div>
+		</template>
+		<div v-if="(narrow && !hideTitle) || (actions && actions.length > 0)" :class="$style.buttonsRight">
+			<template v-for="action in actions">
+				<button v-tooltip.noDelay="action.text" class="_button" :class="[$style.button, { [$style.highlighted]: action.highlighted }]" @click.stop="action.handler" @touchstart="preventDrag"><i :class="action.icon"></i></button>
+			</template>
 		</div>
-		<div v-if="!narrow || hideTitle" :class="$style.tabs">
-			<button v-for="tab in tabs" :ref="(el) => tabRefs[tab.key] = (el as HTMLElement)" v-tooltip.noDelay="tab.title" class="_button" :class="[$style.tab, { [$style.active]: tab.key != null && tab.key === props.tab }]" @mousedown="(ev) => onTabMousedown(tab, ev)" @click="(ev) => onTabClick(tab, ev)">
-				<i v-if="tab.icon" :class="[$style.tabIcon, tab.icon]"></i>
-				<span v-if="!tab.iconOnly" :class="$style.tabTitle">{{ tab.title }}</span>
-			</button>
+	</div>
+	<div v-if="(narrow && !hideTitle) && hasTabs" :class="[$style.lower, { [$style.slim]: narrow, [$style.thin]: thin_ }]">
+		<div :class="$style.tabs" @wheel="onTabWheel">
+			<div :class="$style.tabsInner">
+				<button v-for="tab in tabs" :ref="(el) => tabRefs[tab.key] = (el as HTMLElement)" v-tooltip.noDelay="tab.title" class="_button" :class="[$style.tab, { [$style.active]: tab.key != null && tab.key === props.tab }]" @mousedown="(ev) => onTabMousedown(tab, ev)" @click="(ev) => onTabClick(tab, ev)">
+					<i v-if="tab.icon" :class="[$style.tabIcon, tab.icon]"></i>
+					<span v-if="!tab.iconOnly" :class="$style.tabTitle">{{ tab.title }}</span>
+				</button>
+			</div>
 			<div ref="tabHighlightEl" :class="$style.tabHighlight"></div>
 		</div>
-	</template>
-	<div :class="$style.buttonsRight">
-		<template v-for="action in actions">
-			<button v-tooltip.noDelay="action.text" class="_button" :class="[$style.button, { [$style.highlighted]: action.highlighted }]" @click.stop="action.handler" @touchstart="preventDrag"><i :class="action.icon"></i></button>
-		</template>
 	</div>
 </div>
 </template>
@@ -39,11 +64,10 @@
 <script lang="ts" setup>
 import { onMounted, onUnmounted, ref, inject, watch, nextTick } from 'vue';
 import tinycolor from 'tinycolor2';
-import { popupMenu } from '@/os';
 import { scrollToTop } from '@/scripts/scroll';
 import { globalEvents } from '@/events';
 import { injectPageMetadata } from '@/scripts/page-metadata';
-import { $i } from '@/account';
+import { $i, openAccountMenu as openAccountMenu_ } from '@/account';
 
 type Tab = {
 	key: string;
@@ -77,9 +101,9 @@ const metadata = injectPageMetadata();
 const hideTitle = inject('shouldOmitHeaderTitle', false);
 const thin_ = props.thin || inject('shouldHeaderThin', false);
 
-const el = $shallowRef<HTMLElement | undefined>(undefined);
+let el = $shallowRef<HTMLElement | undefined>(undefined);
 const tabRefs: Record<string, HTMLElement | null> = {};
-const tabHighlightEl = $shallowRef<HTMLElement | null>(null);
+let tabHighlightEl = $shallowRef<HTMLElement | null>(null);
 const bg = ref<string | undefined>(undefined);
 let narrow = $ref(false);
 const hasTabs = $computed(() => props.tabs.length > 0);
@@ -88,32 +112,22 @@ const show = $computed(() => {
 	return !hideTitle || hasTabs || hasActions;
 });
 
-const showTabsPopup = (ev: MouseEvent) => {
-	if (!hasTabs) return;
-	if (!narrow) return;
-	ev.preventDefault();
-	ev.stopPropagation();
-	const menu = props.tabs.map(tab => ({
-		text: tab.title,
-		icon: tab.icon,
-		active: tab.key != null && tab.key === props.tab,
-		action: (ev) => {
-			onTabClick(tab, ev);
-		},
-	}));
-	popupMenu(menu, (ev.currentTarget ?? ev.target) as HTMLElement);
-};
-
 const preventDrag = (ev: TouchEvent) => {
 	ev.stopPropagation();
 };
 
-const onClick = () => {
+const top = () => {
 	if (el) {
 		scrollToTop(el as HTMLElement, { behavior: 'smooth' });
 	}
 };
 
+function openAccountMenu(ev: MouseEvent) {
+	openAccountMenu_({
+		withExtraOperation: true,
+	}, ev);
+}
+
 function onTabMousedown(tab: Tab, ev: MouseEvent): void {
 	// ユーザビリティの観点からmousedown時にはonClickは呼ばない
 	if (tab.key) {
@@ -121,14 +135,17 @@ function onTabMousedown(tab: Tab, ev: MouseEvent): void {
 	}
 }
 
-function onTabClick(tab: Tab, ev: MouseEvent): void {
-	if (tab.onClick) {
+function onTabClick(t: Tab, ev: MouseEvent): void {
+	if (t.key === props.tab) {
+		top();
+	} else if (t.onClick) {
 		ev.preventDefault();
 		ev.stopPropagation();
-		tab.onClick(ev);
+		t.onClick(ev);
 	}
-	if (tab.key) {
-		emit('update:tab', tab.key);
+
+	if (t.key) {
+		emit('update:tab', t.key);
 	}
 }
 
@@ -139,56 +156,124 @@ const calcBg = () => {
 	bg.value = tinyBg.toRgbString();
 };
 
-let ro: ResizeObserver | null;
+let ro1: ResizeObserver | null;
+let ro2: ResizeObserver | null;
+
+function renderTab() {
+	const tabEl = props.tab ? tabRefs[props.tab] : undefined;
+	if (tabEl && tabHighlightEl && tabHighlightEl.parentElement) {
+		// offsetWidth や offsetLeft は少数を丸めてしまうため getBoundingClientRect を使う必要がある
+		// https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/offsetWidth#%E5%80%A4
+		const parentRect = tabHighlightEl.parentElement.getBoundingClientRect();
+		const rect = tabEl.getBoundingClientRect();
+		tabHighlightEl.style.width = rect.width + 'px';
+		tabHighlightEl.style.left = (rect.left - parentRect.left + tabHighlightEl.parentElement.scrollLeft) + 'px';
+	}
+}
+
+function onTabWheel(ev: WheelEvent) {
+	if (ev.deltaY !== 0 && ev.deltaX === 0) {
+		ev.preventDefault();
+		ev.stopPropagation();
+		(ev.currentTarget as HTMLElement).scrollBy({
+			left: ev.deltaY,
+			behavior: 'smooth',
+		});
+	}
+	return false;
+}
+
+function enter(el: HTMLElement) {
+	const elementWidth = el.getBoundingClientRect().width;
+	el.style.width = '0';
+	el.offsetWidth; // reflow
+	el.style.width = elementWidth + 'px';
+	setTimeout(renderTab, 70);
+}
+function afterEnter(el: HTMLElement) {
+	el.style.width = '';
+	nextTick(renderTab);
+}
+function leave(el: HTMLElement) {
+	const elementWidth = el.getBoundingClientRect().width;
+	el.style.width = elementWidth + 'px';
+	el.offsetWidth; // reflow
+	el.style.width = '0';
+}
+function afterLeave(el: HTMLElement) {
+	el.style.width = '';
+}
 
 onMounted(() => {
 	calcBg();
 	globalEvents.on('themeChanged', calcBg);
 
-	watch(() => [props.tab, props.tabs], () => {
-		nextTick(() => {
-			const tabEl = props.tab ? tabRefs[props.tab] : undefined;
-			if (tabEl && tabHighlightEl && tabEl.parentElement) {
-				// offsetWidth や offsetLeft は少数を丸めてしまうため getBoundingClientRect を使う必要がある
-				// https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/offsetWidth#%E5%80%A4
-				const parentRect = tabEl.parentElement.getBoundingClientRect();
-				const rect = tabEl.getBoundingClientRect();
-				tabHighlightEl.style.width = rect.width + 'px';
-				tabHighlightEl.style.left = (rect.left - parentRect.left) + 'px';
-			}
-		});
+	watch([() => props.tab, () => props.tabs], () => {
+		nextTick(() => renderTab());
 	}, {
 		immediate: true,
 	});
 
 	if (el && el.parentElement) {
 		narrow = el.parentElement.offsetWidth < 500;
-		ro = new ResizeObserver((entries, observer) => {
-			if (el.parentElement && document.body.contains(el as HTMLElement)) {
+		ro1 = new ResizeObserver((entries, observer) => {
+			if (el && el.parentElement && document.body.contains(el as HTMLElement)) {
 				narrow = el.parentElement.offsetWidth < 500;
 			}
 		});
-		ro.observe(el.parentElement as HTMLElement);
+		ro1.observe(el.parentElement as HTMLElement);
+	}
+
+	if (el) {
+		ro2 = new ResizeObserver((entries, observer) => {
+			if (document.body.contains(el as HTMLElement)) {
+				nextTick(() => renderTab());
+			}
+		});
+		ro2.observe(el);
 	}
 });
 
 onUnmounted(() => {
 	globalEvents.off('themeChanged', calcBg);
-	if (ro) ro.disconnect();
+	if (ro1) ro1.disconnect();
+	if (ro2) ro2.disconnect();
 });
 </script>
 
 <style lang="scss" module>
 .root {
-	--height: 50px;
-	display: flex;
-	width: 100%;
 	-webkit-backdrop-filter: var(--blur, blur(15px));
 	backdrop-filter: var(--blur, blur(15px));
 	border-bottom: solid 0.5px var(--divider);
-	contain: strict;
+	width: 100%;
+}
+
+.upper,
+.lower {
+	width: 100%;
+	background: transparent;
+}
+
+.upper {
+	--height: 50px;
+	display: flex;
 	height: var(--height);
 
+	.tabs:first-child {
+		margin-left: auto;
+	}
+	.tabs:not(:first-child) {
+		padding-left: 16px;
+		mask-image: linear-gradient(90deg, rgba(0,0,0,0), rgb(0,0,0) 16px, rgb(0,0,0) 100%);
+	}
+	.tabs:last-child {
+		margin-right: auto;
+	}
+	.tabs:not(:last-child) {
+		margin-right: 0;
+	}
+
 	&.thin {
 		--height: 42px;
 
@@ -205,6 +290,7 @@ onUnmounted(() => {
 		> .titleContainer {
 			flex: 1;
 			margin: 0 auto;
+			max-width: 100%;
 
 			> *:first-child {
 				margin-left: auto;
@@ -217,6 +303,11 @@ onUnmounted(() => {
 	}
 }
 
+.lower {
+	--height: 40px;
+	height: var(--height);
+}
+
 .buttons {
 	--margin: 8px;
 	display: flex;
@@ -247,15 +338,14 @@ onUnmounted(() => {
 	height: $size;
 	vertical-align: bottom;
 	margin: 0 8px;
-	pointer-events: none;
 }
 
 .button {
 	display: flex;
 	align-items: center;
 	justify-content: center;
-	height: calc(var(--height) - (var(--margin) * 2));
-	width: calc(var(--height) - (var(--margin) * 2));
+	height: var(--height);
+	width: calc(var(--height) - (var(--margin)));
 	box-sizing: border-box;
 	position: relative;
 	border-radius: 5px;
@@ -278,7 +368,7 @@ onUnmounted(() => {
 .titleContainer {
 	display: flex;
 	align-items: center;
-	max-width: 400px;
+	max-width: min(30vw, 400px);
 	overflow: auto;
 	white-space: nowrap;
 	text-align: left;
@@ -330,10 +420,24 @@ onUnmounted(() => {
 }
 
 .tabs {
+	display: block;
 	position: relative;
-	margin-left: 16px;
+	margin: 0;
+	height: var(--height);
 	font-size: 0.8em;
-	overflow: auto;
+	text-align: center;
+	overflow-x: auto;
+	overflow-y: hidden;
+	scrollbar-width: none;
+
+	&::-webkit-scrollbar {
+		display: none;
+	}
+}
+
+.tabsInner {
+	display: inline-block;
+	height: var(--height);
 	white-space: nowrap;
 }
 
@@ -344,6 +448,7 @@ onUnmounted(() => {
 	height: 100%;
 	font-weight: normal;
 	opacity: 0.7;
+	transition: opacity 0.2s ease;
 
 	&:hover {
 		opacity: 1;
@@ -354,8 +459,18 @@ onUnmounted(() => {
 	}
 }
 
+.tabInner {
+	display: flex;
+	align-items: center;
+}
+
 .tabIcon + .tabTitle {
 	margin-left: 8px;
+} 
+
+.tabTitle {
+	overflow: hidden;
+	transition: width 0.15s ease-in-out;
 }
 
 .tabHighlight {
@@ -364,7 +479,7 @@ onUnmounted(() => {
 	height: 3px;
 	background: var(--accent);
 	border-radius: 999px;
-	transition: all 0.2s ease;
+	transition: width 0.15s ease, left 0.15s ease;
 	pointer-events: none;
 }
 </style>
diff --git a/packages/frontend/src/components/mfm.ts b/packages/frontend/src/components/mfm.ts
index 683c9014a17a6a60e5b3020ecac292a2f0eabd4e..816a42a5fb7d12b0483bfb6fc3ad060d2e1fb828 100644
--- a/packages/frontend/src/components/mfm.ts
+++ b/packages/frontend/src/components/mfm.ts
@@ -12,6 +12,7 @@ import MkSparkle from '@/components/MkSparkle.vue';
 import MkA from '@/components/global/MkA.vue';
 import { host } from '@/config';
 import { MFM_TAGS } from '@/scripts/mfm-tags';
+import { defaultStore } from '@/store';
 
 const QUOTE_STYLE = `
 display: block;
@@ -64,6 +65,8 @@ export default defineComponent({
 			return t.match(/^[0-9.]+s$/) ? t : null;
 		};
 
+		const useAnim = defaultStore.state.advancedMfm && defaultStore.state.animatedMfm;
+
 		const genEl = (ast: mfm.MfmNode[]) => ast.map((token): VNode | string | (VNode | string)[] => {
 			switch (token.type) {
 				case 'text': {
@@ -102,22 +105,22 @@ export default defineComponent({
 					switch (token.props.name) {
 						case 'tada': {
 							const speed = validTime(token.props.args.speed) ?? '1s';
-							style = 'font-size: 150%;' + (this.$store.state.animatedMfm ? `animation: tada ${speed} linear infinite both;` : '');
+							style = 'font-size: 150%;' + (useAnim ? `animation: tada ${speed} linear infinite both;` : '');
 							break;
 						}
 						case 'jelly': {
 							const speed = validTime(token.props.args.speed) ?? '1s';
-							style = (this.$store.state.animatedMfm ? `animation: mfm-rubberBand ${speed} linear infinite both;` : '');
+							style = (useAnim ? `animation: mfm-rubberBand ${speed} linear infinite both;` : '');
 							break;
 						}
 						case 'twitch': {
 							const speed = validTime(token.props.args.speed) ?? '0.5s';
-							style = this.$store.state.animatedMfm ? `animation: mfm-twitch ${speed} ease infinite;` : '';
+							style = useAnim ? `animation: mfm-twitch ${speed} ease infinite;` : '';
 							break;
 						}
 						case 'shake': {
 							const speed = validTime(token.props.args.speed) ?? '0.5s';
-							style = this.$store.state.animatedMfm ? `animation: mfm-shake ${speed} ease infinite;` : '';
+							style = useAnim ? `animation: mfm-shake ${speed} ease infinite;` : '';
 							break;
 						}
 						case 'spin': {
@@ -130,17 +133,17 @@ export default defineComponent({
 								token.props.args.y ? 'mfm-spinY' :
 								'mfm-spin';
 							const speed = validTime(token.props.args.speed) ?? '1.5s';
-							style = this.$store.state.animatedMfm ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction};` : '';
+							style = useAnim ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction};` : '';
 							break;
 						}
 						case 'jump': {
 							const speed = validTime(token.props.args.speed) ?? '0.75s';
-							style = this.$store.state.animatedMfm ? `animation: mfm-jump ${speed} linear infinite;` : '';
+							style = useAnim ? `animation: mfm-jump ${speed} linear infinite;` : '';
 							break;
 						}
 						case 'bounce': {
 							const speed = validTime(token.props.args.speed) ?? '0.75s';
-							style = this.$store.state.animatedMfm ? `animation: mfm-bounce ${speed} linear infinite; transform-origin: center bottom;` : '';
+							style = useAnim ? `animation: mfm-bounce ${speed} linear infinite; transform-origin: center bottom;` : '';
 							break;
 						}
 						case 'flip': {
@@ -153,17 +156,17 @@ export default defineComponent({
 						}
 						case 'x2': {
 							return h('span', {
-								class: 'mfm-x2',
+								class: defaultStore.state.advancedMfm ? 'mfm-x2' : '',
 							}, genEl(token.children));
 						}
 						case 'x3': {
 							return h('span', {
-								class: 'mfm-x3',
+								class: defaultStore.state.advancedMfm ? 'mfm-x3' : '',
 							}, genEl(token.children));
 						}
 						case 'x4': {
 							return h('span', {
-								class: 'mfm-x4',
+								class: defaultStore.state.advancedMfm ? 'mfm-x4' : '',
 							}, genEl(token.children));
 						}
 						case 'font': {
@@ -185,11 +188,11 @@ export default defineComponent({
 						}
 						case 'rainbow': {
 							const speed = validTime(token.props.args.speed) ?? '1s';
-							style = this.$store.state.animatedMfm ? `animation: mfm-rainbow ${speed} linear infinite;` : '';
+							style = useAnim ? `animation: mfm-rainbow ${speed} linear infinite;` : '';
 							break;
 						}
 						case 'sparkle': {
-							if (!this.$store.state.animatedMfm) {
+							if (!useAnim) {
 								return genEl(token.children);
 							}
 							return h(MkSparkle, {}, genEl(token.children));
@@ -200,12 +203,17 @@ export default defineComponent({
 							break;
 						}
 						case 'position': {
+							if (!defaultStore.state.advancedMfm) break;
 							const x = parseFloat(token.props.args.x ?? '0');
 							const y = parseFloat(token.props.args.y ?? '0');
 							style = `transform: translateX(${x}em) translateY(${y}em);`;
 							break;
 						}
 						case 'scale': {
+							if (!defaultStore.state.advancedMfm) {
+								style = '';
+								break;
+							}
 							const x = Math.min(parseFloat(token.props.args.x ?? '1'), 5);
 							const y = Math.min(parseFloat(token.props.args.y ?? '1'), 5);
 							style = `transform: scale(${x}, ${y});`;
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index e21a21ef76cc2d436f6d2de543fdb4e50ec59b3c..639f4eaf17ab811c8566add7ae608f9e30cb1e49 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -186,6 +186,38 @@ export function confirm(props: {
 	});
 }
 
+// TODO: const T extends ... にしたい
+// https://zenn.dev/general_link/articles/813e47b7a0eef7#const-type-parameters
+export function actions<T extends {
+	value: string;
+	text: string;
+	primary?: boolean,
+}[]>(props: {
+	type: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question';
+	title?: string | null;
+	text?: string | null;
+	actions: T;
+}): Promise<{ canceled: true; result: undefined; } | {
+	canceled: false; result: T[number]['value'];
+}> {
+	return new Promise((resolve, reject) => {
+		popup(MkDialog, {
+			...props,
+			actions: props.actions.map(a => ({
+				text: a.text,
+				primary: a.primary,
+				callback: () => {
+					resolve({ canceled: false, result: a.value });
+				},
+			})),
+		}, {
+			done: result => {
+				resolve(result ? result : { canceled: true });
+			},
+		}, 'closed');
+	});
+}
+
 export function inputText(props: {
 	type?: 'text' | 'email' | 'password' | 'url';
 	title?: string | null;
@@ -540,3 +572,9 @@ export function checkExistence(fileData: ArrayBuffer): Promise<any> {
 		});
 	});
 }*/
+
+export const shownNoteIds = new Set();
+
+window.setInterval(() => {
+	shownNoteIds.clear();
+}, 1000 * 60 * 5);
diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue
index f8e97807149eae6847059556630e14534715dfe1..bc3d2481933acfd912da68869cf59d9affd3d4cf 100644
--- a/packages/frontend/src/pages/about-misskey.vue
+++ b/packages/frontend/src/pages/about-misskey.vue
@@ -192,6 +192,7 @@ const patrons = [
 	'蝉暮せせせ',
 	'ThatOneCalculator',
 	'pixeldesu',
+	'あめ玉',
 ];
 
 let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure'));
diff --git a/packages/frontend/src/pages/antenna-timeline.vue b/packages/frontend/src/pages/antenna-timeline.vue
index bf3004f28093fec6f49ed8cae1c648b352284c67..ff31c3ab2cd8ccd4e611f43e6e6246d97d641349 100644
--- a/packages/frontend/src/pages/antenna-timeline.vue
+++ b/packages/frontend/src/pages/antenna-timeline.vue
@@ -98,6 +98,7 @@ definePageMetadata(computed(() => antenna ? {
 		top: calc(var(--stickyTop, 0px) + 16px);
 		z-index: 1000;
 		width: 100%;
+		margin: calc(-0.675em - 8px - var(--margin)) 0 calc(-0.675em - 8px);
 
 		> button {
 			display: block;
diff --git a/packages/frontend/src/pages/mfm-cheat-sheet.vue b/packages/frontend/src/pages/mfm-cheat-sheet.vue
deleted file mode 100644
index 73a571623624442de61e88fab17d31db766099df..0000000000000000000000000000000000000000
--- a/packages/frontend/src/pages/mfm-cheat-sheet.vue
+++ /dev/null
@@ -1,377 +0,0 @@
-<template>
-<MkStickyContainer>
-	<template #header><MkPageHeader/></template>
-	<MkSpacer :content-max="800">
-		<div class="mwysmxbg">
-			<div>{{ i18n.ts._mfm.intro }}</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.mention }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.mentionDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_mention"/>
-						<MkTextarea v-model="preview_mention"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.hashtag }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.hashtagDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_hashtag"/>
-						<MkTextarea v-model="preview_hashtag"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.url }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.urlDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_url"/>
-						<MkTextarea v-model="preview_url"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.link }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.linkDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_link"/>
-						<MkTextarea v-model="preview_link"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.emoji }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.emojiDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_emoji"/>
-						<MkTextarea v-model="preview_emoji"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.bold }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.boldDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_bold"/>
-						<MkTextarea v-model="preview_bold"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.small }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.smallDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_small"/>
-						<MkTextarea v-model="preview_small"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.quote }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.quoteDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_quote"/>
-						<MkTextarea v-model="preview_quote"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.center }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.centerDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_center"/>
-						<MkTextarea v-model="preview_center"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.inlineCode }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.inlineCodeDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_inlineCode"/>
-						<MkTextarea v-model="preview_inlineCode"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.blockCode }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.blockCodeDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_blockCode"/>
-						<MkTextarea v-model="preview_blockCode"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<!-- deprecated
-		<div class="section">
-			<div class="title">{{ i18n.ts._mfm.search }}</div>
-			<div class="content">
-				<p>{{ i18n.ts._mfm.searchDescription }}</p>
-				<div class="preview">
-					<Mfm :text="preview_search"/>
-					<MkTextarea v-model="preview_search"><template #label>MFM</template></MkTextarea>
-				</div>
-			</div>
-		</div>
-		-->
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.flip }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.flipDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_flip"/>
-						<MkTextarea v-model="preview_flip"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.font }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.fontDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_font"/>
-						<MkTextarea v-model="preview_font"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.x2 }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.x2Description }}</p>
-					<div class="preview">
-						<Mfm :text="preview_x2"/>
-						<MkTextarea v-model="preview_x2"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.x3 }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.x3Description }}</p>
-					<div class="preview">
-						<Mfm :text="preview_x3"/>
-						<MkTextarea v-model="preview_x3"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.x4 }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.x4Description }}</p>
-					<div class="preview">
-						<Mfm :text="preview_x4"/>
-						<MkTextarea v-model="preview_x4"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.blur }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.blurDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_blur"/>
-						<MkTextarea v-model="preview_blur"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.jelly }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.jellyDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_jelly"/>
-						<MkTextarea v-model="preview_jelly"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.tada }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.tadaDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_tada"/>
-						<MkTextarea v-model="preview_tada"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.jump }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.jumpDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_jump"/>
-						<MkTextarea v-model="preview_jump"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.bounce }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.bounceDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_bounce"/>
-						<MkTextarea v-model="preview_bounce"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.spin }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.spinDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_spin"/>
-						<MkTextarea v-model="preview_spin"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.shake }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.shakeDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_shake"/>
-						<MkTextarea v-model="preview_shake"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.twitch }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.twitchDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_twitch"/>
-						<MkTextarea v-model="preview_twitch"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.rainbow }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.rainbowDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_rainbow"/>
-						<MkTextarea v-model="preview_rainbow"><template #label>MFM</template></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.sparkle }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.sparkleDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_sparkle"/>
-						<MkTextarea v-model="preview_sparkle"><span>MFM</span></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.rotate }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.rotateDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_rotate"/>
-						<MkTextarea v-model="preview_rotate"><span>MFM</span></MkTextarea>
-					</div>
-				</div>
-			</div>
-			<div class="section">
-				<div class="title">{{ i18n.ts._mfm.plain }}</div>
-				<div class="content">
-					<p>{{ i18n.ts._mfm.plainDescription }}</p>
-					<div class="preview">
-						<Mfm :text="preview_plain"/>
-						<MkTextarea v-model="preview_plain"><span>MFM</span></MkTextarea>
-					</div>
-				</div>
-			</div>
-		</div>
-	</MkSpacer>
-</MkStickyContainer>
-</template>
-
-<script lang="ts" setup>
-import { defineComponent } from 'vue';
-import MkTextarea from '@/components/MkTextarea.vue';
-import { definePageMetadata } from '@/scripts/page-metadata';
-import { i18n } from '@/i18n';
-import { instance } from '@/instance';
-import { customEmojis } from '@/custom-emojis';
-
-let preview_mention = $ref('@example');
-let preview_hashtag = $ref('#test');
-let preview_url = $ref('https://example.com');
-let preview_link = $ref(`[${i18n.ts._mfm.dummy}](https://example.com)`);
-let preview_emoji = $ref(customEmojis.value.length ? `:${customEmojis.value[0].name}:` : ':emojiname:');
-let preview_bold = $ref(`**${i18n.ts._mfm.dummy}**`);
-let preview_small = $ref(`<small>${i18n.ts._mfm.dummy}</small>`);
-let preview_center = $ref(`<center>${i18n.ts._mfm.dummy}</center>`);
-let preview_inlineCode = $ref('`<: "Hello, world!"`');
-let preview_blockCode = $ref('```\n~ (#i, 100) {\n\t<: ? ((i % 15) = 0) "FizzBuzz"\n\t\t.? ((i % 3) = 0) "Fizz"\n\t\t.? ((i % 5) = 0) "Buzz"\n\t\t. i\n}\n```');
-let preview_quote = $ref(`> ${i18n.ts._mfm.dummy}`);
-let preview_search = $ref(`${i18n.ts._mfm.dummy} 検索`);
-let preview_jelly = $ref('$[jelly 🍮] $[jelly.speed=5s 🍮]');
-let preview_tada = $ref('$[tada 🍮] $[tada.speed=5s 🍮]');
-let preview_jump = $ref('$[jump 🍮] $[jump.speed=5s 🍮]');
-let preview_bounce = $ref('$[bounce 🍮] $[bounce.speed=5s 🍮]');
-let preview_shake = $ref('$[shake 🍮] $[shake.speed=5s 🍮]');
-let preview_twitch = $ref('$[twitch 🍮] $[twitch.speed=5s 🍮]');
-let preview_spin = $ref('$[spin 🍮] $[spin.left 🍮] $[spin.alternate 🍮]\n$[spin.x 🍮] $[spin.x,left 🍮] $[spin.x,alternate 🍮]\n$[spin.y 🍮] $[spin.y,left 🍮] $[spin.y,alternate 🍮]\n\n$[spin.speed=5s 🍮]');
-let preview_flip = $ref(`$[flip ${i18n.ts._mfm.dummy}]\n$[flip.v ${i18n.ts._mfm.dummy}]\n$[flip.h,v ${i18n.ts._mfm.dummy}]`);
-let preview_font = $ref(`$[font.serif ${i18n.ts._mfm.dummy}]\n$[font.monospace ${i18n.ts._mfm.dummy}]\n$[font.cursive ${i18n.ts._mfm.dummy}]\n$[font.fantasy ${i18n.ts._mfm.dummy}]`);
-let preview_x2 = $ref('$[x2 🍮]');
-let preview_x3 = $ref('$[x3 🍮]');
-let preview_x4 = $ref('$[x4 🍮]');
-let preview_blur = $ref(`$[blur ${i18n.ts._mfm.dummy}]`);
-let preview_rainbow = $ref('$[rainbow 🍮] $[rainbow.speed=5s 🍮]');
-let preview_sparkle = $ref('$[sparkle 🍮]');
-let preview_rotate = $ref('$[rotate 🍮]');
-let preview_plain = $ref('<plain>**bold** @mention #hashtag `code` $[x2 🍮]</plain>');
-
-definePageMetadata({
-	title: i18n.ts._mfm.cheatSheet,
-	icon: 'ti ti-question-circle',
-});
-</script>
-
-<style lang="scss" scoped>
-.mwysmxbg {
-	background: var(--bg);
-
-	> .section {
-		> .title {
-			position: sticky;
-			z-index: 1;
-			top: var(--stickyTop, 0px);
-			padding: 16px;
-			font-weight: bold;
-			-webkit-backdrop-filter: var(--blur, blur(10px));
-			backdrop-filter: var(--blur, blur(10px));
-			background-color: var(--X16);
-		}
-
-		> .content {
-			> p {
-				margin: 0;
-				padding: 16px;
-			}
-
-			> .preview {
-				border-top: solid 0.5px var(--divider);
-				padding: 16px;
-			}
-		}
-	}
-}
-</style>
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 0ce66b065fe0026093b2f6f83d9249d4ea8f6b54..b4851df1767336c10e5e55eeaf541bf85e444540 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -45,7 +45,8 @@
 
 		<div class="_gaps_m">
 			<div class="_gaps_s">
-				<MkSwitch v-model="disableAnimatedMfm">{{ i18n.ts.disableAnimatedMfm }}</MkSwitch>
+				<MkSwitch v-model="advancedMfm">{{ i18n.ts.enableAdvancedMfm }}</MkSwitch>
+				<MkSwitch v-if="advancedMfm" v-model="animatedMfm">{{ i18n.ts.enableAnimatedMfm }}</MkSwitch>
 				<MkSwitch v-model="reduceAnimation">{{ i18n.ts.reduceUiAnimation }}</MkSwitch>
 				<MkSwitch v-model="useBlurEffect">{{ i18n.ts.useBlurEffect }}</MkSwitch>
 				<MkSwitch v-model="useBlurEffectForModal">{{ i18n.ts.useBlurEffectForModal }}</MkSwitch>
@@ -142,7 +143,8 @@ const reduceAnimation = computed(defaultStore.makeGetterSetter('animation', v =>
 const useBlurEffectForModal = computed(defaultStore.makeGetterSetter('useBlurEffectForModal'));
 const useBlurEffect = computed(defaultStore.makeGetterSetter('useBlurEffect'));
 const showGapBetweenNotesInTimeline = computed(defaultStore.makeGetterSetter('showGapBetweenNotesInTimeline'));
-const disableAnimatedMfm = computed(defaultStore.makeGetterSetter('animatedMfm', v => !v, v => !v));
+const animatedMfm = computed(defaultStore.makeGetterSetter('animatedMfm'));
+const advancedMfm = computed(defaultStore.makeGetterSetter('advancedMfm'));
 const emojiStyle = computed(defaultStore.makeGetterSetter('emojiStyle'));
 const disableDrawer = computed(defaultStore.makeGetterSetter('disableDrawer'));
 const disableShowingAnimatedImages = computed(defaultStore.makeGetterSetter('disableShowingAnimatedImages'));
diff --git a/packages/frontend/src/pages/settings/preferences-backups.vue b/packages/frontend/src/pages/settings/preferences-backups.vue
index 87a08612fc89aed2b84b3aa98721076bf8838c41..0512a8d0c90cf704691dbf056ee46f6db2f84234 100644
--- a/packages/frontend/src/pages/settings/preferences-backups.vue
+++ b/packages/frontend/src/pages/settings/preferences-backups.vue
@@ -62,6 +62,7 @@ const defaultStoreSaveKeys: (keyof typeof defaultStore['state'])[] = [
 	'nsfw',
 	'animation',
 	'animatedMfm',
+	'advancedMfm',
 	'loadRawImages',
 	'imageNewTab',
 	'disableShowingAnimatedImages',
diff --git a/packages/frontend/src/pages/share.vue b/packages/frontend/src/pages/share.vue
index d8b956b6d17bc3bb9ee4a79e735b2a6ac0b8197c..78e0710162aff4edd01393002ea79b4cba1ea9d8 100644
--- a/packages/frontend/src/pages/share.vue
+++ b/packages/frontend/src/pages/share.vue
@@ -2,7 +2,7 @@
 <MkStickyContainer>
 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template>
 	<MkSpacer :content-max="800">
-		<XPostForm
+		<MkPostForm
 			v-if="state === 'writing'"
 			fixed
 			:instant="true"
@@ -37,17 +37,17 @@ import { i18n } from '@/i18n';
 
 const urlParams = new URLSearchParams(window.location.search);
 const localOnlyQuery = urlParams.get('localOnly');
-const visibilityQuery = urlParams.get('visibility');
+const visibilityQuery = urlParams.get('visibility') as typeof noteVisibilities[number];
 
 let state = $ref('fetching' as 'fetching' | 'writing' | 'posted');
 let title = $ref(urlParams.get('title'));
 const text = urlParams.get('text');
 const url = urlParams.get('url');
-let initialText = $ref(null as string | null);
-let reply = $ref(null as Misskey.entities.Note | null);
-let renote = $ref(null as Misskey.entities.Note | null);
-let visibility = $ref(noteVisibilities.includes(visibilityQuery) ? visibilityQuery : null);
-let localOnly = $ref(localOnlyQuery === '0' ? false : localOnlyQuery === '1' ? true : null);
+let initialText = $ref<string | undefined>();
+let reply = $ref<Misskey.entities.Note | undefined>();
+let renote = $ref<Misskey.entities.Note | undefined>();
+let visibility = $ref(noteVisibilities.includes(visibilityQuery) ? visibilityQuery : undefined);
+let localOnly = $ref(localOnlyQuery === '0' ? false : localOnlyQuery === '1' ? true : undefined);
 let files = $ref([] as Misskey.entities.DriveFile[]);
 let visibleUsers = $ref([] as Misskey.entities.User[]);
 
@@ -130,7 +130,7 @@ async function init() {
 			);
 		}
 		//#endregion
-	} catch (err) {
+	} catch (err: any) {
 		os.alert({
 			type: 'error',
 			title: err.message,
diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue
index 057409484c1869c3bf5f6cc640c981e91baf74d5..31f4793dc43937c61693d00f23d12bb5a7e19b75 100644
--- a/packages/frontend/src/pages/timeline.vue
+++ b/packages/frontend/src/pages/timeline.vue
@@ -22,7 +22,7 @@
 </template>
 
 <script lang="ts" setup>
-import { defineAsyncComponent, computed, watch } from 'vue';
+import { defineAsyncComponent, computed, watch, provide } from 'vue';
 import XTimeline from '@/components/MkTimeline.vue';
 import MkPostForm from '@/components/MkPostForm.vue';
 import { scroll } from '@/scripts/scroll';
@@ -33,6 +33,8 @@ import { instance } from '@/instance';
 import { $i } from '@/account';
 import { definePageMetadata } from '@/scripts/page-metadata';
 
+provide('shouldOmitHeaderTitle', true);
+
 const XTutorial = defineAsyncComponent(() => import('./timeline.tutorial.vue'));
 
 const isLocalTimelineAvailable = ($i == null && instance.policies.ltlAvailable) || ($i != null && $i.policies.ltlAvailable);
@@ -177,6 +179,11 @@ definePageMetadata(computed(() => ({
 	top: calc(var(--stickyTop, 0px) + 16px);
 	z-index: 1000;
 	width: 100%;
+	margin: calc(-0.675em - 8px) 0;
+
+	&:first-child {
+		margin-top: calc(-0.675em - 8px - var(--margin));
+	}
 
 	> button {
 		display: block;
diff --git a/packages/frontend/src/pages/user-list-timeline.vue b/packages/frontend/src/pages/user-list-timeline.vue
index 6817d44d8c02738bc305e2a1639960c66d3094ee..3f47edfd44147a81286bb2c0a09c343f0b2bd771 100644
--- a/packages/frontend/src/pages/user-list-timeline.vue
+++ b/packages/frontend/src/pages/user-list-timeline.vue
@@ -91,6 +91,7 @@ definePageMetadata(computed(() => list ? {
 		top: calc(var(--stickyTop, 0px) + 16px);
 		z-index: 1000;
 		width: 100%;
+		margin: calc(-0.675em - 8px - var(--margin)) 0 calc(-0.675em - 8px);
 
 		> button {
 			display: block;
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index 56858a9377c11e7ed12cd925ba398c0896340550..fab47d09e234a27f395ef71874d74b5b2d6e3696 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -101,9 +101,6 @@
 					<XActivity :key="user.id" :user="user"/>
 				</template>
 			</div>
-			<div>
-				<XUserTimeline :user="user"/>
-			</div>
 		</div>
 		<div v-if="!narrow" class="sub _gaps" style="container-type: inline-size;">
 			<XPhotos :key="user.id" :user="user"/>
@@ -117,7 +114,6 @@
 import { defineAsyncComponent, computed, inject, onMounted, onUnmounted, watch } from 'vue';
 import calcAge from 's-age';
 import * as misskey from 'misskey-js';
-import XUserTimeline from './index.timeline.vue';
 import XNote from '@/components/MkNote.vue';
 import MkFollowButton from '@/components/MkFollowButton.vue';
 import MkContainer from '@/components/MkContainer.vue';
diff --git a/packages/frontend/src/pages/user/index.timeline.vue b/packages/frontend/src/pages/user/index.timeline.vue
index 41983a5ae87345a1b01ca84e99590f626446b358..34e16c707d20cc9ac66306b607d3f67db9ab801c 100644
--- a/packages/frontend/src/pages/user/index.timeline.vue
+++ b/packages/frontend/src/pages/user/index.timeline.vue
@@ -1,14 +1,16 @@
 <template>
-<MkStickyContainer>
-	<template #header>
-		<MkTab v-model="include" :class="$style.tab">
-			<option :value="null">{{ i18n.ts.notes }}</option>
-			<option value="replies">{{ i18n.ts.notesAndReplies }}</option>
-			<option value="files">{{ i18n.ts.withFiles }}</option>
-		</MkTab>
-	</template>
-	<XNotes :no-gap="true" :pagination="pagination"/>
-</MkStickyContainer>
+<MkSpacer :content-max="800" style="padding-top: 0">
+	<MkStickyContainer>
+		<template #header>
+			<MkTab v-model="include" :class="$style.tab">
+				<option :value="null">{{ i18n.ts.notes }}</option>
+				<option value="replies">{{ i18n.ts.notesAndReplies }}</option>
+				<option value="files">{{ i18n.ts.withFiles }}</option>
+			</MkTab>
+		</template>
+		<XNotes :no-gap="true" :pagination="pagination" :class="$style.tl"/>
+	</MkStickyContainer>
+</MkSpacer>
 </template>
 
 <script lang="ts" setup>
@@ -42,4 +44,10 @@ const pagination = {
 	padding: calc(var(--margin) / 2) 0;
 	background: var(--bg);
 }
+
+.tl {
+	background: var(--bg);
+    border-radius: var(--radius);
+    overflow: clip;
+}
 </style>
diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue
index 120f67d8a5a866d29dabd989abb4cce5c2efef5a..84909f72c2bc60d399ba25026b01cf297c17eab6 100644
--- a/packages/frontend/src/pages/user/index.vue
+++ b/packages/frontend/src/pages/user/index.vue
@@ -5,7 +5,7 @@
 		<Transition name="fade" mode="out-in">
 			<div v-if="user">
 				<XHome v-if="tab === 'home'" :user="user"/>
-				<XActivity v-else-if="tab === 'activity'" :user="user"/>
+				<XTimeline v-else-if="tab === 'notes'" :user="user" />
 				<XAchievements v-else-if="tab === 'achievements'" :user="user"/>
 				<XReactions v-else-if="tab === 'reactions'" :user="user"/>
 				<XClips v-else-if="tab === 'clips'" :user="user"/>
@@ -34,6 +34,7 @@ import { i18n } from '@/i18n';
 import { $i } from '@/account';
 
 const XHome = defineAsyncComponent(() => import('./home.vue'));
+const XTimeline = defineAsyncComponent(() => import('./index.timeline.vue'));
 const XActivity = defineAsyncComponent(() => import('./activity.vue'));
 const XAchievements = defineAsyncComponent(() => import('./achievements.vue'));
 const XReactions = defineAsyncComponent(() => import('./reactions.vue'));
@@ -74,6 +75,10 @@ const headerTabs = $computed(() => user ? [{
 	key: 'home',
 	title: i18n.ts.overview,
 	icon: 'ti ti-home',
+}, {
+	key: 'notes',
+	title: i18n.ts.notes,
+	icon: 'ti ti-pencil',
 }, {
 	key: 'activity',
 	title: i18n.ts.activity,
diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts
index 87d42c5c87ce5d382a55e9fc232d7632ab9a4ded..900426268967c91b09e924133982d869962d19e5 100644
--- a/packages/frontend/src/router.ts
+++ b/packages/frontend/src/router.ts
@@ -224,9 +224,6 @@ export const routes = [{
 	path: '/api-console',
 	component: page(() => import('./pages/api-console.vue')),
 	loginRequired: true,
-}, {
-	path: '/mfm-cheat-sheet',
-	component: page(() => import('./pages/mfm-cheat-sheet.vue')),
 }, {
 	path: '/scratchpad',
 	component: page(() => import('./pages/scratchpad.vue')),
diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts
index 74bd61fd783b4a451cd8da95981088cfdc3d67ec..941d9a0db9b1867c76875c4a7a779deef5bc8697 100644
--- a/packages/frontend/src/scripts/get-user-menu.ts
+++ b/packages/frontend/src/scripts/get-user-menu.ts
@@ -203,6 +203,20 @@ export function getUserMenu(user, router: Router = mainRouter) {
 				action: () => {
 					router.push('/user-info/' + user.id + '#moderation');
 				},
+			}, {
+				icon: 'ti ti-badges',
+				text: i18n.ts.roles,
+				action: async () => {
+					const roles = await os.api('admin/roles/list');
+
+					const { canceled, result: roleId } = await os.select({
+						title: i18n.ts._role.chooseRoleToAssign,
+						items: roles.map(r => ({ text: r.name, value: r.id })),
+					});
+					if (canceled) return;
+
+					await os.apiWithDialog('admin/roles/assign', { roleId, userId: user.id });
+				},
 			}]);
 		}
 	}
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index 94892ff5267013e2eb2c833c72ed6dfa1bf5577b..80bd22a8139fc3110768c0be8541f9eb9ceb2a63 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -158,6 +158,10 @@ export const defaultStore = markRaw(new Storage('base', {
 		where: 'device',
 		default: false,
 	},
+	advancedMfm: {
+		where: 'device',
+		default: true,
+	},
 	loadRawImages: {
 		where: 'device',
 		default: false,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7480d74ed16a42bb858bb8eb5795aead0ed572bd..7d255b7a42cadf0cb00392ec6ad78c680e662678 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -197,7 +197,7 @@ importers:
       tsc-alias: 1.8.2
       tsconfig-paths: 4.1.2
       twemoji-parser: 14.0.0
-      typeorm: 0.3.12
+      typeorm: 0.3.11
       typescript: 4.9.5
       ulid: 2.3.0
       unzipper: 0.10.11
@@ -301,7 +301,7 @@ importers:
       tsc-alias: 1.8.2
       tsconfig-paths: 4.1.2
       twemoji-parser: 14.0.0
-      typeorm: 0.3.12_ioredis@4.28.5+pg@8.9.0
+      typeorm: 0.3.11_ioredis@4.28.5+pg@8.9.0
       typescript: 4.9.5
       ulid: 2.3.0
       unzipper: 0.10.11
@@ -9493,12 +9493,6 @@ packages:
     hasBin: true
     dev: false
 
-  /mkdirp/2.1.3:
-    resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dev: false
-
   /mnemonist/0.39.5:
     resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==}
     dependencies:
@@ -12762,8 +12756,8 @@ packages:
     resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
     dev: false
 
-  /typeorm/0.3.12_ioredis@4.28.5+pg@8.9.0:
-    resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==}
+  /typeorm/0.3.11_ioredis@4.28.5+pg@8.9.0:
+    resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==}
     engines: {node: '>= 12.9.0'}
     hasBin: true
     peerDependencies:
@@ -12774,7 +12768,7 @@ packages:
       ioredis: ^5.0.4
       mongodb: ^3.6.0
       mssql: ^7.3.0
-      mysql2: ^2.2.5 || ^3.0.1
+      mysql2: ^2.2.5
       oracledb: ^5.1.0
       pg: ^8.5.1
       pg-native: ^3.0.0
@@ -12828,15 +12822,15 @@ packages:
       date-fns: 2.29.3
       debug: 4.3.4
       dotenv: 16.0.3
-      glob: 8.1.0
+      glob: 7.2.3
       ioredis: 4.28.5
       js-yaml: 4.1.0
-      mkdirp: 2.1.3
+      mkdirp: 1.0.4
       pg: 8.9.0
       reflect-metadata: 0.1.13
       sha.js: 2.4.11
       tslib: 2.5.0
-      uuid: 9.0.0
+      uuid: 8.3.2
       xml2js: 0.4.23
       yargs: 17.6.2
     transitivePeerDependencies: