/** * XKeypad Modal Styles * 키패드 모달 스타일 */ /* 모달 오버레이 - 전체화면 */ .xkeypad-modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.75); z-index: 9998; display: none; animation: fadeIn 0.2s ease; } .xkeypad-modal-overlay.active { display: block; } /* 모달 컨테이너 */ .xkeypad-modal-container { position: fixed; left: 0; right: 0; bottom: 0; background-color: transparent; z-index: 9999; transform: translateY(100%); transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); /* Safe area 적용 */ padding-bottom: env(safe-area-inset-bottom, 0); padding-bottom: constant(safe-area-inset-bottom, 0); /* iOS 11.0 */ } .xkeypad-modal-container.active { transform: translateY(0); } /* 키패드 래퍼 */ .xkeypad-wrapper { position: relative; background-color: #dbdde2; overflow: hidden; } /* 키패드 컨텐츠 영역 */ .xkeypad-content { position: relative; background-color: #dbdde2; } /* XKeypad 컨테이너가 모달 내에서 보이도록 */ .xkeypad-content .xkp_ui_qwerty, .xkeypad-content .xkp_ui_number { position: relative !important; z-index: 10001 !important; display: block !important; visibility: visible !important; opacity: 1 !important; width: 100% !important; height: auto !important; } /* 모든 키패드 자식 요소들이 보이도록 */ .xkeypad-content .xkp_ui_qwerty *, .xkeypad-content .xkp_ui_number * { visibility: visible !important; opacity: 1 !important; } /* 키패드 DIV가 모달 내에서 보이도록 */ .xkeypad-content > div { position: relative !important; display: block !important; visibility: visible !important; opacity: 1 !important; } /* 키패드 버튼들이 보이도록 */ .xkeypad-content ul, .xkeypad-content li, .xkeypad-content a { display: block !important; visibility: visible !important; opacity: 1 !important; } /* 애니메이션 */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } /* 반응형 대응 */ @media (max-width: 768px) { .xkeypad-modal-container { /* 모바일에서는 전체 너비 */ left: 0; right: 0; } } @media (min-width: 769px) { /* 데스크톱에서는 중앙 정렬 */ .xkeypad-modal-container { left: 50%; transform: translateX(-50%) translateY(100%); max-width: 600px; width: 100%; } .xkeypad-modal-container.active { transform: translateX(-50%) translateY(0); } } /* iOS 노치 대응 */ @supports (padding: max(0px)) { .xkeypad-modal-container { padding-bottom: max(env(safe-area-inset-bottom, 0), 0px); } } /* 키패드 타입별 높이는 자동 조정 - min-height 제거 */ /* 입력 필드 활성화 스타일 */ .xkeypad-input-active { border-color: #4CAF50 !important; box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1) !important; } /* 모달 열림/닫힘 시 body 스크롤 방지 */ body.xkeypad-modal-open { position: fixed; width: 100%; overflow: hidden; /* top 값은 JavaScript에서 동적으로 설정 */ } /* iOS 바운스 스크롤 방지 */ .xkeypad-modal-container { -webkit-overflow-scrolling: touch; overscroll-behavior: contain; } /* 터치 이벤트 최적화 */ .xkeypad-modal-overlay, .xkeypad-modal-container { touch-action: none; } .xkeypad-content { touch-action: manipulation; } /* 다크모드 지원 */ @media (prefers-color-scheme: dark) { .xkeypad-modal-overlay { background-color: rgba(0, 0, 0, 0.7); } .xkeypad-wrapper { background-color: #2c2c2e; border-top-color: #48484a; } .xkeypad-modal-header { background-color: #1c1c1e; border-bottom-color: #48484a; } .xkeypad-drag-indicator { background-color: #636366; } .xkeypad-close-btn { background-color: rgba(255, 255, 255, 0.1); } .xkeypad-close-btn:hover { background-color: rgba(255, 255, 255, 0.2); } .xkeypad-close-btn::before { color: #f0f0f0; } }