:root {--vk-height: 300px;--vk-max-height: 360px;--vk-key-radius: 8px;--vk-key-h: 50px;--vk-key-font: 1.08rem;--vk-bg: linear-gradient(180deg,var(--surface) 0%,var(--bg-card) 100%);--vk-key-bg: color-mix(in srgb,var(--text) 6%,var(--bg-card));--vk-key-border: color-mix(in srgb,var(--accent) 42%,transparent);--vk-key-glow: color-mix(in srgb,var(--accent) 20%,transparent);--vk-key-active: color-mix(in srgb,var(--accent) 24%,transparent);--vk-special-bg: var(--accent-dim);--vk-special-border: color-mix(in srgb,var(--accent) 48%,transparent);--vk-special-glow: var(--accent-glow);--vk-press-inset: color-mix(in srgb,var(--accent) 50%,transparent);--vk-text: var(--text);--vk-text-dim: var(--text-muted);}.virtual-keyboard {position: fixed;left: 0;right: 0;bottom: 0;z-index: 10000;width: 100%;max-width: 100%;box-sizing: border-box;height: auto;max-height: min(var(--vk-max-height),58vh);background: var(--vk-bg);border-top: 1px solid var(--border-strong);box-shadow: var(--shadow-md,0 8px 32px rgba(0,0,0,0.5)),0 0 0 1px color-mix(in srgb,var(--accent) 10%,transparent) inset;display: flex;flex-direction: column;padding: 8px 8px;padding-bottom: calc(8px + env(safe-area-inset-bottom));transform: translateY(100%);opacity: 0;visibility: hidden;transition: transform 0.3s cubic-bezier(0.4,0,0.2,1),opacity 0.25s ease,visibility 0.25s;-webkit-user-select: none;user-select: none;-webkit-tap-highlight-color: transparent;touch-action: none;overscroll-behavior: contain;}.virtual-keyboard.visible {transform: translateY(0);opacity: 1;visibility: visible;}.vk-header {flex-shrink: 0;display: flex;align-items: center;justify-content: space-between;gap: 12px;padding: 6px 6px 8px;border-bottom: 1px solid var(--border);margin-bottom: 2px;}.vk-field-label {flex: 1;font-size: 0.9rem;font-weight: 600;color: var(--accent);overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}.vk-close {padding: 8px 14px;font-size: 0.9rem;font-weight: 600;color: var(--accent);background: var(--accent-dim);border: 1px solid color-mix(in srgb,var(--accent) 36%,transparent);border-radius: min(var(--vk-key-radius,8px),14px);cursor: pointer;-webkit-tap-highlight-color: transparent;transition: background 0.15s,border-color 0.15s;}.vk-close:active {background: color-mix(in srgb,var(--accent) 22%,transparent);border-color: color-mix(in srgb,var(--accent) 52%,transparent);}body.virtual-keyboard-open #authModal.modal {overflow: hidden !important;align-items: flex-end !important;justify-content: center;padding-top: 8px;padding-bottom: var(--vk-height) !important;padding-left: 0;padding-right: 0;box-sizing: border-box;touch-action: pan-y;overscroll-behavior-y: contain;}body.virtual-keyboard-open .modal:not(#authModal) {align-items: flex-start !important;padding-top: 12px;padding-bottom: 0;overflow-y: auto;-webkit-overflow-scrolling: touch;}body.virtual-keyboard-open .modal-dialog {margin-top: 0;margin-bottom: 0;}body.virtual-keyboard-open #authModal .auth-modal-box {max-height: calc(100vh - var(--vk-height) - 16px) !important;max-height: calc(100dvh - var(--vk-height) - 16px) !important;overflow: hidden !important;overflow-y: hidden !important;}body.virtual-keyboard-open #authModal #registerForm,body.virtual-keyboard-open #authModal #loginForm {scroll-snap-type: y proximity;scroll-padding: 16px 0 12px;}body.virtual-keyboard-open .reg-field-wrap,body.virtual-keyboard-open .auth-form > .input-wrap {scroll-snap-align: center;scroll-margin: 16px 0;transition: opacity 0.2s ease,box-shadow 0.2s ease;}body.virtual-keyboard-open .reg-field-wrap:has(.vk-focused),body.virtual-keyboard-open .auth-form > .input-wrap:has(.vk-focused) {opacity: 1;}body.virtual-keyboard-open .reg-field-wrap:not(:has(.vk-focused)),body.virtual-keyboard-open .auth-form > .input-wrap:not(:has(.vk-focused)) {opacity: 0.85;}@media (max-height: 600px) {:root {--vk-key-h: 46px;--vk-max-height: 310px;}.virtual-keyboard {max-height: min(var(--vk-max-height),54vh);}}.vk-rows {flex: 0 0 auto;display: flex;flex-direction: column;gap: 2px;min-height: 0;width: 100%;max-width: 100%;min-width: 0;overflow-x: hidden;touch-action: none;overscroll-behavior: contain;}.vk-row {display: flex;gap: 3px;justify-content: flex-start;align-items: stretch;flex: 0 0 auto;min-height: 0;min-width: 0;width: 100%;touch-action: none;}.vk-row--dense {gap: 2px;}.vk-row--dense .vk-key:not(.vk-key--special) {font-size: 1em;border-radius: min(7px,24%);padding-left: 1px;padding-right: 1px;}.vk-key {flex: 1 1 0;min-width: 0;-webkit-appearance: none;appearance: none;height: var(--vk-key-h,50px);min-height: var(--vk-key-h,50px);max-height: var(--vk-key-h,50px);display: flex;align-items: center;justify-content: center;background: var(--vk-key-bg);border: 1px solid var(--vk-key-border);border-radius: var(--vk-key-radius,8px);color: var(--vk-text);font-size: var(--vk-key-font);font-weight: 700;font-family: inherit;cursor: pointer;transition: all 0.1s ease;box-shadow: 0 2px 8px rgba(0,0,0,0.3),0 0 12px var(--vk-key-glow);-webkit-tap-highlight-color: transparent;touch-action: manipulation;padding: 0 3px;box-sizing: border-box;}.vk-key:active {background: var(--vk-key-active);transform: scale(0.92);box-shadow: 0 0 24px var(--vk-key-glow),0 0 0 2px var(--vk-press-inset) inset;filter: brightness(1.15);}.vk-key--special {background: var(--vk-special-bg);border-color: var(--vk-special-border);box-shadow: 0 2px 12px var(--vk-special-glow);flex: 1.2;}.vk-key--special:active {box-shadow: 0 0 28px var(--vk-special-glow),0 0 0 2px color-mix(in srgb,var(--accent) 42%,transparent) inset;transform: scale(0.92);}.vk-key--space {flex: 2.5;min-width: 56px;max-width: 160px;height: var(--vk-key-h,50px);min-height: var(--vk-key-h,50px);max-height: var(--vk-key-h,50px);border-radius: min(var(--vk-key-radius,8px),14px);}.vk-key--backspace {flex: 1.2;}.vk-key--lang {flex: 1;min-width: 48px;font-size: 0.92rem;}.vk-key--done {flex: 1.2;min-width: 78px;height: var(--vk-key-h,50px);min-height: var(--vk-key-h,50px);max-height: var(--vk-key-h,50px);border-radius: min(var(--vk-key-radius,8px),14px);background: linear-gradient(135deg,var(--btn-primary) 0%,var(--btn-primary-hover) 100%);border-color: color-mix(in srgb,var(--accent) 45%,transparent);color: var(--btn-primary-text);box-shadow: 0 2px 12px var(--accent-glow);}.vk-key--done:active {box-shadow: 0 0 20px var(--accent-glow);}.vk-key--shift.active {background: color-mix(in srgb,var(--accent) 26%,transparent);border-color: color-mix(in srgb,var(--accent) 62%,transparent);box-shadow: 0 0 16px var(--vk-special-glow);}.vk-key {position: relative;overflow: hidden;}.vk-key::after {content: '';position: absolute;inset: 0;background: radial-gradient(circle at var(--vk-x,50%) var(--vk-y,50%),rgba(255,255,255,0.2) 0%,transparent 70%);opacity: 0;pointer-events: none;}.vk-key:active::after {opacity: 1;animation: vk-ripple 0.4s ease-out;}@keyframes vk-ripple {to {transform: scale(2);opacity: 0;}}.virtual-keyboard[data-mode="text"] .vk-row:not([data-mode="text"]),.virtual-keyboard[data-mode="num"] .vk-row:not([data-mode="num"]),.virtual-keyboard[data-mode="phone"] .vk-row:not([data-mode="phone"]),.virtual-keyboard[data-mode="promo"] .vk-row:not([data-mode="promo"]) {display: none;}.virtual-keyboard[data-mode="text"] .vk-row[data-mode="text"],.virtual-keyboard[data-mode="num"] .vk-row[data-mode="num"],.virtual-keyboard[data-mode="phone"] .vk-row[data-mode="phone"],.virtual-keyboard[data-mode="promo"] .vk-row[data-mode="promo"] {display: flex;}.auth-input.vk-focused {border-color: color-mix(in srgb,var(--accent) 58%,transparent);box-shadow: inset 0 0 0 1px color-mix(in srgb,var(--accent) 32%,transparent);}.input-wrap .vk-cursor {position: absolute;top: 50%;transform: translateY(-50%);left: 42px;width: 2px;height: 1.15em;background: var(--accent);border-radius: 1px;pointer-events: none;animation: vk-cursor-blink 1s step-end infinite;z-index: 2;}@keyframes vk-cursor-blink {0%,50% {opacity: 1;}51%,100% {opacity: 0;}}@media (max-width: 1023px) {.virtual-keyboard {max-width: 100vw;overflow-x: hidden;}.vk-header {gap: 8px;padding-left: 6px;padding-right: 6px;}.vk-close {padding: 6px 10px;font-size: 0.82rem;flex-shrink: 0;}.vk-field-label {font-size: 0.85rem;}}@media (max-width: 390px) {:root {--vk-key-radius: 7px;--vk-key-h: 46px;--vk-key-font: 1.02rem;--vk-max-height: 340px;}.virtual-keyboard {padding: 6px 4px;}.vk-rows {gap: 2px;}.vk-row {gap: 2px;}.vk-row--dense {gap: 2px;}.vk-key {padding: 0 2px;}.vk-key--space {min-width: 60px;max-width: 150px;}.vk-key--done {min-width: 68px;flex: 1.15;}}@media (min-width: 1024px) {.virtual-keyboard {display: none !important;}}