# Mobile Text Selection Prevention Review **Date**: 2026-01-17 **Purpose**: Review and apply text selection prevention patterns for mobile touch/drag interactions ## Pattern Applied ```css /* Prevent text selection on all draggable/interactive elements AND their children */ :deep([draggable="true"]), :deep([draggable="true"] *), :deep(.sortable-item), :deep(.sortable-item *), .interactive-item, .interactive-item * { -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; user-select: none !important; -webkit-touch-callout: none !important; /* Prevent iOS callout menu */ } /* Touch action on containers only */ :deep([draggable="true"]), :deep(.sortable-item) { touch-action: manipulation; /* Allow pan/zoom but optimize for touch */ } ``` **Tailwind utilities used**: `select-none` and `touch-manipulation` ## Components Reviewed ### ✅ Already Compliant (No Changes Needed) #### LineupBuilder.vue - **Status**: Fully compliant - **Reason**: Already has comprehensive text selection prevention for vuedraggable components - **Implementation**: Uses `:deep()` selectors with complete iOS support - **Details**: - Prevents text selection on all draggable roster items - Prevents text selection on lineup slot items - Applies to all child elements using wildcard selectors - Includes iOS-specific `-webkit-touch-callout: none` for callout menu prevention - Uses `touch-action: manipulation` for proper touch optimization ### ✅ Updated Components #### 1. UI/ToggleSwitch.vue - **Changes**: - Added `select-none` class to root container - Added `