diff --git a/components/common/menu/menu.css b/components/common/menu/menu.css
new file mode 100644
index 0000000..6359806
--- /dev/null
+++ b/components/common/menu/menu.css
@@ -0,0 +1,79 @@
+/*
+ * Action menu: GitHub's menu of plain 32px rows with no divider lines, applied to menus Forgejo
+ * renders itself and that cannot take a class. To style another menu, add it to these lists.
+ *
+ * Two kinds: an action menu (each row does something) and a single-choice menu (the current
+ * choice carries a check mark and every row is indented to make room for it).
+ */
+
+/* Action menus */
+.page-content.repository.view.issue.github-pull-review .merge.box .pull-merge-actions .ui.dropdown .menu,
+/* Single-choice menus */
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu {
+ padding: 8px;
+}
+
+.page-content.repository.view.issue.github-pull-review .merge.box .pull-merge-actions .ui.dropdown .menu > .item,
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item {
+ min-height: 32px;
+ margin: 0 !important;
+ border: 0 !important;
+ border-radius: var(--border-radius);
+ font-weight: 400;
+ line-height: 20px;
+}
+
+/* Action menu rows: the merge method menu */
+.page-content.repository.view.issue.github-pull-review .merge.box .pull-merge-actions .ui.dropdown .menu {
+ min-width: 280px;
+}
+
+.page-content.repository.view.issue.github-pull-review .merge.box .pull-merge-actions .ui.dropdown .menu > .item {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 6px 8px !important;
+}
+
+.page-content.repository.view.issue.github-pull-review .merge.box .pull-merge-actions .ui.dropdown .menu .action-text {
+ flex: 1;
+ padding: 0;
+}
+
+.page-content.repository.view.issue.github-pull-review
+ .merge.box
+ .pull-merge-actions
+ .ui.dropdown
+ .menu
+ .auto-merge-small {
+ color: var(--color-text-light-1);
+}
+
+/* Single-choice rows: the "Update branch" menu. It opens 4px below its button, at the group's width. */
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu {
+ top: calc(100% + 4px) !important;
+ width: max-content;
+ margin-top: 0 !important;
+}
+
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item {
+ position: relative;
+ padding: 6px 8px 6px 32px !important;
+ background: transparent !important;
+}
+
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item:hover {
+ background: var(--github-control-transparent-bgColor-hover) !important;
+}
+
+.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item.active::before {
+ content: "";
+ position: absolute;
+ top: 8px;
+ left: 8px;
+ width: 16px;
+ height: 16px;
+ background: currentcolor;
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z'/%3E%3C/svg%3E")
+ center / 16px no-repeat;
+}
diff --git a/styles/components/issues/pull_review.ts b/styles/components/issues/pull_review.ts
index 0bda39a..29cded9 100644
--- a/styles/components/issues/pull_review.ts
+++ b/styles/components/issues/pull_review.ts
@@ -475,30 +475,6 @@ export default css`
padding: 0;
justify-content: center;
}
- /* The merge method menu: plain 32px rows as in GitHub's action menus. */
- & .ui.dropdown .menu {
- min-width: 280px;
- padding: 8px;
- & > .item {
- display: flex;
- align-items: center;
- gap: 8px;
- min-height: 32px;
- margin: 0 !important;
- padding: 6px 8px !important;
- border: 0 !important;
- border-radius: ${otherThemeVars.border.radius};
- font-weight: 400;
- line-height: 20px;
- }
- & .action-text {
- flex: 1;
- padding: 0;
- }
- & .auto-merge-small {
- color: ${themeVars.color.text.light.num1};
- }
- }
/* The expanded form takes the whole row: title, message, then the buttons. */
& > #pull-request-merge-form:has(form .field) {
flex: 0 0 100%;
diff --git a/styles/pages/pull-request.css b/styles/pages/pull-request.css
index 6b9b00f..e670fe3 100644
--- a/styles/pages/pull-request.css
+++ b/styles/pages/pull-request.css
@@ -54,43 +54,3 @@
.github-pull-review .pull-merge-actions .tw-flex > form {
margin: 0 !important;
}
-
-/*
- * The "Update branch" menu: GitHub's single-choice menu. It opens 4px below the button instead of
- * overlapping it, rows have no divider lines, and the current choice is marked with a check
- * instead of a filled row.
- */
-.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu {
- top: calc(100% + 4px) !important;
- margin-top: 0 !important;
- width: max-content;
- padding: 8px;
-}
-
-.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item {
- position: relative;
- min-height: 32px;
- margin: 0 !important;
- padding: 6px 8px 6px 32px !important;
- border: 0 !important;
- border-radius: var(--border-radius);
- background: transparent !important;
- font-weight: 400;
- line-height: 20px;
-}
-
-.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item:hover {
- background: var(--github-control-transparent-bgColor-hover) !important;
-}
-
-.github-pull-review .merge-section .update-button .ui.ui.ui.dropdown > .menu > .item.active::before {
- content: "";
- position: absolute;
- top: 8px;
- left: 8px;
- width: 16px;
- height: 16px;
- background: currentcolor;
- mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z'/%3E%3C/svg%3E")
- center / 16px no-repeat;
-}
diff --git a/templates/base/component_assets.tmpl b/templates/base/component_assets.tmpl
index 227336d..c7cf804 100644
--- a/templates/base/component_assets.tmpl
+++ b/templates/base/component_assets.tmpl
@@ -2,6 +2,7 @@
+