#chapters-editor-root { /* Tooltip styles - only on desktop where hover is available */ @media (hover: hover) and (pointer: fine) { [data-tooltip] { position: relative; } [data-tooltip]:before { content: attr(data-tooltip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); margin-bottom: 5px; background-color: rgba(0, 0, 0, 0.8); color: white; text-align: center; padding: 5px 10px; border-radius: 3px; font-size: 12px; white-space: nowrap; opacity: 0; visibility: hidden; transition: opacity 0.2s, visibility 0.2s; z-index: 1000; pointer-events: none; } [data-tooltip]:after { content: ""; position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); border-width: 5px; border-style: solid; border-color: rgba(0, 0, 0, 0.8) transparent transparent transparent; opacity: 0; visibility: hidden; transition: opacity 0.2s, visibility 0.2s; pointer-events: none; } [data-tooltip]:hover:before, [data-tooltip]:hover:after { opacity: 1; visibility: visible; } } /* Hide button tooltips on touch devices */ @media (pointer: coarse) { [data-tooltip]:before, [data-tooltip]:after { display: none !important; content: none !important; opacity: 0 !important; visibility: hidden !important; pointer-events: none !important; } } .video-player-container { position: relative; width: 100%; background: #000; border-radius: 0.5rem; overflow: hidden; margin-bottom: 1rem; aspect-ratio: 16/9; /* Prevent iOS Safari from showing default video controls */ -webkit-user-select: none; user-select: none; } .video-player-container video { width: 100%; height: 100%; cursor: pointer; /* Force hardware acceleration */ transform: translateZ(0); -webkit-transform: translateZ(0); /* Prevent iOS Safari from showing default video controls */ -webkit-user-select: none; user-select: none; } /* iOS-specific styles */ @supports (-webkit-touch-callout: none) { .video-player-container video { /* Additional iOS optimizations */ -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; } } .play-pause-indicator { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 60px; height: 60px; background-color: rgba(0, 0, 0, 0.6); border-radius: 50%; opacity: 0; transition: opacity 0.3s; pointer-events: none; } .video-player-container:hover .play-pause-indicator { opacity: 1; } .play-pause-indicator::before { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .play-pause-indicator.play-icon::before { width: 0; height: 0; border-top: 15px solid transparent; border-bottom: 15px solid transparent; border-left: 25px solid white; margin-left: 3px; } .play-pause-indicator.pause-icon::before { width: 20px; height: 25px; border-left: 6px solid white; border-right: 6px solid white; } /* iOS First-play indicator */ .ios-first-play-indicator { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 10; } .ios-play-message { color: white; font-size: 1.2rem; text-align: center; padding: 1rem; background: rgba(0, 0, 0, 0.8); border-radius: 0.5rem; animation: pulse 2s infinite; } @keyframes pulse { 0% { opacity: 0.7; transform: scale(1); } 50% { opacity: 1; transform: scale(1.05); } 100% { opacity: 0.7; transform: scale(1); } } .video-controls { position: absolute; bottom: 0; left: 0; right: 0; padding: 0.75rem; background: linear-gradient(transparent, rgba(0, 0, 0, 0.7)); opacity: 0; transition: opacity 0.3s; } .video-player-container:hover .video-controls { opacity: 1; } .video-current-time { color: white; font-size: 0.875rem; } .video-duration { color: white; font-size: 0.875rem; } .video-time-display { display: flex; justify-content: space-between; margin-bottom: 0.5rem; color: white; font-size: 0.875rem; } .video-progress { position: relative; height: 6px; background-color: rgba(255, 255, 255, 0.3); border-radius: 3px; cursor: pointer; margin: 0 10px; touch-action: none; /* Prevent browser handling of drag gestures */ flex-grow: 1; } .video-progress.dragging { height: 8px; } .video-progress-fill { position: absolute; top: 0; left: 0; height: 100%; background-color: #ff0000; border-radius: 3px; pointer-events: none; } .video-scrubber { position: absolute; top: 50%; transform: translate(-50%, -50%); width: 16px; height: 16px; background-color: #ff0000; border-radius: 50%; cursor: grab; transition: transform 0.1s ease, width 0.1s ease, height 0.1s ease; } /* Make the scrubber larger when dragging for better control */ .video-progress.dragging .video-scrubber { transform: translate(-50%, -50%) scale(1.2); width: 18px; height: 18px; cursor: grabbing; box-shadow: 0 0 8px rgba(255, 0, 0, 0.6); } /* Enhance for touch devices */ @media (pointer: coarse) { .video-scrubber { width: 20px; height: 20px; } .video-progress.dragging .video-scrubber { width: 24px; height: 24px; } /* Create a larger invisible touch target */ .video-scrubber:before { content: ""; position: absolute; top: -10px; left: -10px; right: -10px; bottom: -10px; } } .video-controls-buttons { display: flex; align-items: center; justify-content: flex-end; gap: 0.75rem; } .mute-button, .fullscreen-button { min-width: auto; color: white; background: none; border: none; cursor: pointer; padding: 0.25rem; transition: transform 0.2s; &:hover { transform: scale(1.1); } svg { width: 1.25rem; height: 1.25rem; } } /* Time tooltip that appears when dragging */ .video-time-tooltip { position: absolute; top: -30px; background-color: rgba(0, 0, 0, 0.7); color: white; padding: 4px 8px; border-radius: 4px; font-size: 12px; font-family: monospace; pointer-events: none; z-index: 1000; white-space: nowrap; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } /* Add a small arrow to the tooltip */ .video-time-tooltip:after { content: ""; position: absolute; bottom: -4px; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid rgba(0, 0, 0, 0.7); } }