+
+ {buttonLayout.map(btn => this.renderButton(btn))}
+
+ {!isTerminal && (
+
+ Terminal keys active when terminal is focused
+
+ )}
+
+ )
+ }
+}
diff --git a/src/client/web-components/keyboard-accessory-bar.styl b/src/client/web-components/keyboard-accessory-bar.styl
new file mode 100644
index 0000000..a1c8307
--- /dev/null
+++ b/src/client/web-components/keyboard-accessory-bar.styl
@@ -0,0 +1,82 @@
+// Keyboard accessory bar — shown above the soft keyboard on mobile/touch
+// devices when any input or the terminal is focused.
+//
+// The bar is position:fixed at the bottom of the visible viewport. With
+// windowSoftInputMode=adjustResize (set in splash-styles.xml), the WebView
+// shrinks when the keyboard appears, so bottom:0 sits right above the keyboard.
+
+.kb-accessory-bar
+ position fixed
+ left 0
+ right 0
+ bottom 0
+ z-index 9998
+ background var(--main)
+ border-top 1px solid var(--border-color, #3a3d42)
+ box-shadow 0 -2px 8px rgba(0, 0, 0, 0.25)
+ user-select none
+ -webkit-user-select none
+ -webkit-tap-highlight-color transparent
+
+.kb-accessory-scroll
+ display flex
+ align-items center
+ gap 2px
+ padding 4px 6px
+ overflow-x auto
+ overflow-y hidden
+ scrollbar-width none
+ -ms-overflow-style none
+ &::-webkit-scrollbar
+ display none
+
+.kb-key
+ flex-shrink 0
+ min-width 36px
+ height 34px
+ padding 0 8px
+ border 1px solid var(--border-color, #3a3d42)
+ border-radius 5px
+ background var(--terminal-background, #1e2024)
+ color var(--text, #cfd6e4)
+ font-size 12px
+ font-family -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif
+ line-height 1
+ cursor pointer
+ display flex
+ align-items center
+ justify-content center
+ transition background 0.12s, border-color 0.12s
+
+ &:active
+ background var(--primary, #4a90d9)
+ color #fff
+ border-color var(--primary, #4a90d9)
+
+// Highlighted toggle (Ctrl / Alt active)
+.kb-key-active
+ background var(--primary, #4a90d9)
+ color #fff
+ border-color var(--primary, #4a90d9)
+
+.kb-key-done
+ background var(--primary, #4a90d9)
+ color #fff
+ border-color var(--primary, #4a90d9)
+ font-weight 600
+ margin-left 4px
+
+ &:active
+ opacity 0.7
+
+.kb-key-wide
+ min-width 48px
+
+.kb-key-enter
+ min-width 44px
+
+.kb-accessory-hint
+ padding 2px 10px 4px
+ font-size 10px
+ color var(--text-light, #8b909f)
+ text-align center
diff --git a/src/client/web-components/web-main.jsx b/src/client/web-components/web-main.jsx
index df4370c..c550af4 100644
--- a/src/client/web-components/web-main.jsx
+++ b/src/client/web-components/web-main.jsx
@@ -3,12 +3,14 @@ import Login from '../simple-auth/web-login'
import store from './web-store'
import FileSelectDialog from '../file-select-dialog/file-select-dialog'
import Logout from '../simple-auth/logout'
+import KeyboardAccessoryBar from './keyboard-accessory-bar'
export default function MainEntry () {
return (