diff --git a/apps/web/src/import/ImportControl.tsx b/apps/web/src/import/ImportControl.tsx
index 040458c..a6e8d0e 100644
--- a/apps/web/src/import/ImportControl.tsx
+++ b/apps/web/src/import/ImportControl.tsx
@@ -1,4 +1,5 @@
import { IMPORT_EXTENSIONS } from '@dorfteich/shared';
+import { Import } from 'lucide-react';
import { useRef } from 'react';
import { useTranslation } from 'react-i18next';
@@ -28,10 +29,12 @@ export function ImportControl({ pondId, pondSlug }: ImportControlProps): React.J
inputRef.current?.click()}
>
- {t('action')}
+
}
- {creating ? (
+ {creating && (
setCreating(false)}
/>
- ) : (
- setCreating(true)}
- >
- {t('layout.sidebar.newPage')}
-
)}
-
-
{/* Keyboard/drag reordering announcements for screen readers. */}
{announcement}
- {/* Graph + trash stay text links, pinned to the sidebar's bottom
- (M10 follow-up; pond settings moved to the TopBar gear icon).
- The graph is for every member (#112); the trash is owner-only. */}
+ {/* All four actions live as an icon row pinned to the sidebar's
+ bottom (#124): graph, new page, import, trash — hover hints via
+ title. The graph is for every member (#112); trash is owner-only. */}
-
- {t('graph:link')}
+
+
+ setCreating(!creating)}
+ >
+
+
+
{isOwner && (
-
- {t('editor:trash.link')}
+
+
)}
diff --git a/apps/web/src/styles/base.css b/apps/web/src/styles/base.css
index 4236ee7..9bd438c 100644
--- a/apps/web/src/styles/base.css
+++ b/apps/web/src/styles/base.css
@@ -148,10 +148,6 @@ button {
padding: var(--space-1) var(--space-2);
}
-.sidebar__trash-link {
- font-size: 0.85rem;
- white-space: nowrap;
-}
.sidebar__pages {
list-style: none;
@@ -369,13 +365,6 @@ button {
font-weight: 600;
}
-.sidebar__new-page {
- font-size: 0.9rem;
- /* The sidebar is a flex column now; keep the stretched button reading
- like the left-aligned link it used to be. */
- text-align: left;
-}
-
.sidebar__new-page-form {
margin-top: var(--space-2);
}
@@ -390,21 +379,29 @@ button {
gap: var(--space-3);
}
+/* The import control sits in the pinned footer icon row (#124); its
+ progress list floats ABOVE the row so the icons stay put. */
.sidebar__import {
- margin-top: var(--space-2);
-}
-
-.sidebar__import-action {
- font-size: 0.9rem;
+ position: relative;
+ display: inline-flex;
}
.sidebar__import-list {
list-style: none;
- margin: var(--space-2) 0 0;
- padding: 0;
+ position: absolute;
+ bottom: calc(100% + var(--space-1));
+ left: 0;
+ width: 14rem;
+ margin: 0;
+ padding: var(--space-2);
display: flex;
flex-direction: column;
gap: var(--space-2);
+ background: var(--color-surface);
+ border: 1px solid var(--color-border);
+ border-radius: var(--radius);
+ box-shadow: 0 4px 12px rgb(0 0 0 / 10%);
+ z-index: 30;
}
.sidebar__import-item {
@@ -1760,12 +1757,8 @@ button {
margin-top: auto;
padding-top: var(--space-4);
display: flex;
- gap: var(--space-3);
-}
-
-.sidebar__graph-link {
- font-size: 0.85rem;
- white-space: nowrap;
+ align-items: center;
+ gap: var(--space-1);
}
/* Knowledge graph (issue #112) + local graph panel (#113). */
diff --git a/packages/shared/i18n/de/common.json b/packages/shared/i18n/de/common.json
index 22b7c1a..6f5facf 100644
--- a/packages/shared/i18n/de/common.json
+++ b/packages/shared/i18n/de/common.json
@@ -21,6 +21,7 @@
"reparented": "{{title}} unter {{parent}} eingeordnet."
},
"newPage": "+ Neue Seite",
+ "newPageHint": "Neue Seite",
"newPageTitle": "Titel",
"newPageUnder": "Wird unter „{{title}}“ angelegt.",
"create": "Erstellen",
diff --git a/packages/shared/i18n/de/editor.json b/packages/shared/i18n/de/editor.json
index 001e6c0..4a42bcb 100644
--- a/packages/shared/i18n/de/editor.json
+++ b/packages/shared/i18n/de/editor.json
@@ -142,6 +142,7 @@
},
"trash": {
"link": "Papierkorb",
+ "showLink": "Papierkorb anzeigen",
"title": "Papierkorb — {{pond}}",
"empty": "Der Papierkorb ist leer.",
"deletedAt": "Gelöscht am {{date}}",
diff --git a/packages/shared/i18n/en/common.json b/packages/shared/i18n/en/common.json
index f27b50d..5a56d04 100644
--- a/packages/shared/i18n/en/common.json
+++ b/packages/shared/i18n/en/common.json
@@ -21,6 +21,7 @@
"reparented": "Moved {{title}} under {{parent}}."
},
"newPage": "+ New page",
+ "newPageHint": "New page",
"newPageTitle": "Title",
"newPageUnder": "Will be created under “{{title}}”.",
"create": "Create",
diff --git a/packages/shared/i18n/en/editor.json b/packages/shared/i18n/en/editor.json
index 18541bc..c3060c6 100644
--- a/packages/shared/i18n/en/editor.json
+++ b/packages/shared/i18n/en/editor.json
@@ -142,6 +142,7 @@
},
"trash": {
"link": "Trash",
+ "showLink": "Show trash",
"title": "Trash — {{pond}}",
"empty": "The trash is empty.",
"deletedAt": "Deleted {{date}}",