/* The key design is inside Shadow DOM. These rules reserve space in the real app. */
.ws-compact-keyboard[hidden]{display:none!important}
html:has(.ws-keyboard-open){scroll-padding-bottom:calc(var(--ws-keyboard-height,0px) + 16px)}
body.ws-keyboard-open{padding-bottom:var(--ws-keyboard-height,0px)}
body.ws-keyboard-open dialog[data-ws-keyboard-owner]{max-height:calc(100dvh - var(--ws-keyboard-height,0px) - var(--safe-top,0px) - 20px);margin-top:max(10px,var(--safe-top,0px));margin-bottom:auto;overflow:auto}
body.ws-keyboard-open .drawer[data-ws-keyboard-owner]{bottom:var(--ws-keyboard-height,0px);max-height:calc(100dvh - var(--ws-keyboard-height,0px) - var(--safe-top,0px))}
/* Stack owns a fixed viewport, so page scrolling cannot expose its composer. */
body.ws-keyboard-open #stackSummon[data-ws-keyboard-owner]{height:calc(var(--stack-visual-height,100dvh) - var(--ws-keyboard-height,0px));--stack-composer-safe:0px}
input.ws-keyboard-active{scroll-margin-bottom:calc(var(--ws-keyboard-height,0px) + 20px)}
body[data-ws-keyboard-dock="bottomArea"] #bottomArea,body[data-ws-keyboard-dock="searchDock"] #searchDock{bottom:calc(var(--ws-keyboard-height,0px) + 8px)!important;transform:none!important}
@media print{.ws-compact-keyboard{display:none!important}body.ws-keyboard-open{padding-bottom:0}}

body.ws-keyboard-open .map-bottom-dock{--keyboard-offset:var(--ws-keyboard-height,0px)!important}

/* Retain form space through the closing gesture so a tap cannot land on another control. */
body.ws-keyboard-closing{padding-bottom:var(--ws-keyboard-closing-height,0px)}
