// Mobile-specific responsive styles @import './variables.scss'; @import './mixins/_responsive.scss'; // ============================================= // HEADER PROPERTIES RESPONSIVE VISIBILITY // ============================================= // Desktop: Show properties in first row, hide mobile row .header-properties-desktop { display: flex; align-items: center; gap: 10px; } .header-properties-mobile { display: none; } // Mobile: Hide desktop properties, show mobile row @media only screen and (max-width: 767px) { .header-properties-desktop { display: none !important; } .header-properties-mobile { display: block !important; padding: 10px 0 0 0; border-top: 1px solid rgba(255, 255, 255, 0.1); margin-top: 10px; .ant-select { flex: 1; max-width: none !important; width: 100% !important; } } } // ============================================= // MOBILE BASE STYLES (max-width: 767px) // ============================================= @media only screen and (max-width: 767px) { // Body & Root body, html { font-size: 14px; overflow-x: hidden; } // Header #header { padding: 10px !important; min-height: 60px; .header-flex { flex-wrap: wrap; gap: 10px; } } .header-logo { width: 250px; flex: 0 0 auto; display: flex; align-items: center; gap: 10px; } .logo { padding: 5px !important; img { width: 120px !important; height: auto; } } .header-options { flex: 1; justify-content: flex-end; gap: 5px; } // Hide property selector text on mobile, show only icon .ant-layout-header .ant-select { width: auto !important; max-width: 180px; margin-left: 5px !important; .propertiesOption { gap: 5px !important; font-size: 12px !important; padding: 4px !important; } } // Main wrapper .main-wrapper { padding: 0 8px !important; &.dashboard-wrapper { padding: 8px !important; } } .main-container { padding: 10px 0; } // Navigation .main-navigation { margin-top: 15px; margin-bottom: 5px; } .drawer .main-navigation { text-align: left; } .drawer-button { right: 10px !important; top: 10px !important; } // Heading row .heading-row { flex-direction: column; padding: 10px 0 !important; gap: 10px; h1 { font-size: 18px !important; margin: 0 !important; text-align: center; width: 100%; padding: 8px !important; } } .heading-action-buttons { width: 100%; display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; .ant-btn { flex: 1 1 auto; min-width: 100px; max-width: 150px; } .ant-space { flex-wrap: wrap; justify-content: center; gap: 8px !important; } } // Breadcrumb - hide on mobile .ant-breadcrumb { display: none !important; } // Forms .pms-form .ant-form-item { margin-bottom: 8px; padding: 8px 10px !important; min-height: 50px; } .pms-form .ant-form-item-label { padding: 0 0 4px 0 !important; > label { font-size: 12px !important; } } .filter-form { width: 100% !important; max-width: 100% !important; } // Tables - horizontal scroll .data-table { overflow-x: auto; -webkit-overflow-scrolling: touch; .ant-table { // min-width: 600px; } .ant-table-thead > tr > th, .ant-table-tbody > tr > td { padding: 8px 10px !important; font-size: 12px !important; } } // Tabs .panel.ant-tabs > .ant-tabs-nav { padding: 8px; } .panel .ant-tabs-tabpane { padding: 15px 8px 30px 8px; } .ant-tabs-tab { padding: 8px 12px !important; .ant-typography { font-size: 14px !important; } } // Cards .ant-card { margin: 0 0 10px 0; } .ant-card-body { padding: 12px !important; } .photo-card { .photo-footer { padding: 8px; flex-direction: row; gap: 8px; .property-status-indicators { // width: 100%; justify-content: center; } .actions-buttons { // width: 100%; justify-content: center; } } } // Buttons .ant-btn { // padding: 6px 12px; font-size: 13px; height: auto; &.ant-btn-lg { // padding: 8px 16px; font-size: 14px; } &.ant-btn-sm { // padding: 4px 8px; font-size: 12px; } } // Modals .ant-modal { max-width: calc(100vw - 16px) !important; margin: 8px !important; top: 20px !important; } .ant-modal-body { padding: 16px !important; max-height: 70vh; overflow-y: auto; } // Dropdowns .dropdown-items { /* width: 100% !important; */ max-width: calc(100vw - 20px); right: 10px; /* left: 10px; */ } // Photo gallery .photo-card .selections { top: 4px; left: 4px; } // Upload container .upload-container { padding: 16px; } // Footer .ant-layout-footer { padding: 20px 15px !important; margin-top: 30px; .footer-flex { flex-direction: column; gap: 20px; text-align: center; } p { font-size: 14px !important; } ul.footer-menu { flex-direction: column; gap: 15px; justify-content: center; align-items: center; li { font-size: 14px; } } } .footer-logo { width: 100%; text-align: center; .logo { float: none !important; display: inline-block; text-align: center !important; } } // Overview row .overview-row { padding: 10px !important; .overview-row-details { padding: 8px !important; .field.large { width: 100% !important; margin-bottom: 8px; } } } // Popovers .ant-popover { max-width: calc(100vw - 20px); } .main-search-popover .ant-popover-inner-content { padding: 10px; } // Leaflet popup .leaflet-popup-content-wrapper { width: 280px !important; } // Panel .panel { padding: 20px 12px; border-radius: 8px; } // Action row .action-row { padding: 10px; margin-bottom: 15px; } // Property dropdown .custom-property-dropdown.ant-select-dropdown { width: calc(100vw - 20px) !important; max-width: 400px; } // Select boxes .ant-select { width: 100%; } // Input groups .ant-input-group-wrapper { width: 100%; } // Reservation date range picker .reservation-range-picker { width: 100% !important; } // Row and Col adjustments .ant-row { margin-left: 0 !important; margin-right: 0 !important; } // Facilities list and similar .facilities_list { .ant-col { padding: 4px !important; } } // Room type rate card .room_type_rate { flex-direction: column; .room_type_image { width: 100%; max-height: 150px; object-fit: cover; } .room_type_rate_details { padding: 12px; } } } // RangePicker dropdown responsive behavior @media only screen and (max-width: 767px) { .responsive-range-picker-dropdown { width: calc(100vw - 16px) !important; max-width: calc(100vw - 16px) !important; left: 8px !important; right: 8px !important; } .responsive-range-picker-dropdown .ant-picker-panel-container { width: 100%; } .responsive-range-picker-dropdown .ant-picker-panels { display: flex; flex-direction: column; } .responsive-range-picker-dropdown .ant-picker-panel { width: 100%; min-width: 0; } .responsive-range-picker-dropdown .ant-picker-content { width: 100%; } } // ============================================= // SMALL MOBILE (max-width: 480px) // ============================================= @media only screen and (max-width: 480px) { .logo img { width: 100px !important; } .heading-row h1 { font-size: 16px !important; } .heading-action-buttons .ant-btn { min-width: 80px; padding: 4px 8px; font-size: 12px; } .pms-form .ant-form-item { padding: 6px 8px !important; } .ant-modal { margin: 4px !important; } .panel { padding: 15px 8px; } .panel .ant-tabs-tabpane { padding: 10px 4px 20px 4px; } // Stack buttons vertically .heading-action-buttons { .ant-btn { width: 100%; max-width: none; } } } // ============================================= // TABLET (768px - 991px) // ============================================= @media only screen and (min-width: 768px) and (max-width: 991px) { .main-wrapper { padding: 0 15px !important; } .heading-row { padding: 20px 0 10px 0; h1 { font-size: 22px !important; } } .ant-layout-footer { .footer-flex { flex-wrap: wrap; gap: 20px; } ul.footer-menu { gap: 30px; } } } // ============================================= // TOUCH DEVICE OPTIMIZATIONS // ============================================= @media (hover: none) and (pointer: coarse) { // Larger touch targets .ant-btn { // min-height: 44px; // min-width: 44px; } .ant-checkbox-wrapper, .ant-radio-wrapper { padding: 8px 0; } .ant-select-selector { min-height: 44px !important; } .ant-input { min-height: 44px; font-size: 16px !important; // Prevents zoom on iOS } .ant-tabs-tab { min-height: 44px; } // Remove hover effects that don't work on touch .photo-card:hover > .hover-overlay { opacity: 0; } .photo-card .hover-overlay { display: none; } .photo-card .photo-footer { .actions-buttons { display: flex !important; } } } // ============================================= // LANDSCAPE MOBILE // ============================================= @media only screen and (max-height: 500px) and (orientation: landscape) { .ant-modal-body { max-height: 60vh; } .heading-row { padding: 5px 0 !important; } } // ============================================= // PRINT STYLES (moved from App.scss for organization) // ============================================= @media print { .main-wrapper { padding: 0 !important; } .heading-action-buttons, .ant-btn:not(.btn-print) { display: none !important; } }