diff --git a/.gitignore b/.gitignore
index b103c72c..67c383d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,4 @@ frontend-tools/video-editor/client/public/videos/sample-video.mp3
frontend-tools/chapters-editor/client/public/videos/sample-video.mp3
static/chapters_editor/videos/sample-video.mp3
static/video_editor/videos/sample-video.mp3
+templates/todo-MS4.md
diff --git a/cms/version.py b/cms/version.py
index 56bcd646..5ed5d632 100644
--- a/cms/version.py
+++ b/cms/version.py
@@ -1 +1 @@
-VERSION = "7.2.2"
+VERSION = "7.3.0-beta.3"
diff --git a/frontend-tools/chapters-editor/client/src/App.tsx b/frontend-tools/chapters-editor/client/src/App.tsx
index 4e0b8f1c..5e825b4a 100644
--- a/frontend-tools/chapters-editor/client/src/App.tsx
+++ b/frontend-tools/chapters-editor/client/src/App.tsx
@@ -150,6 +150,11 @@ const App = () => {
canRedo={historyPosition < history.length - 1}
/>
+ {/* Timeline Header */}
+
+
Add Chapters
+
+
{/* Timeline Controls */}
{
// Generate the same color background for a segment as shown in the timeline
const getSegmentColorClass = (index: number) => {
- // Return CSS class based on index modulo 8
- // This matches the CSS nth-child selectors in the timeline
- return `segment-default-color segment-color-${(index % 8) + 1}`;
+ // Return CSS class based on index modulo 20
+ // This matches the CSS classes for up to 20 segments
+ return `segment-default-color segment-color-${(index % 20) + 1}`;
};
// Get selected segment
@@ -65,8 +65,8 @@ const ClipSegments = ({ segments, selectedSegmentId }: ClipSegmentsProps) => {
handleDeleteSegment(segment.id)}
>
diff --git a/frontend-tools/chapters-editor/client/src/components/TimelineControls.tsx b/frontend-tools/chapters-editor/client/src/components/TimelineControls.tsx
index 9b89822a..21baeb2a 100644
--- a/frontend-tools/chapters-editor/client/src/components/TimelineControls.tsx
+++ b/frontend-tools/chapters-editor/client/src/components/TimelineControls.tsx
@@ -177,7 +177,16 @@ const TimelineControls = ({
const [isAutoSaving, setIsAutoSaving] = useState(false);
const autoSaveTimerRef = useRef(null);
const clipSegmentsRef = useRef(clipSegments);
-
+ // Track when a drag just ended to prevent Safari from triggering clicks after drag
+ const dragJustEndedRef = useRef(false);
+ const dragEndTimeoutRef = useRef(null);
+
+ // Helper function to detect Safari browser
+ const isSafari = () => {
+ if (typeof window === 'undefined') return false;
+ const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;
+ return /Safari/.test(userAgent) && !/Chrome/.test(userAgent) && !/Chromium/.test(userAgent);
+ };
// Keep clipSegmentsRef updated
useEffect(() => {
@@ -867,6 +876,12 @@ const TimelineControls = ({
logger.debug('Clearing auto-save timer in cleanup:', autoSaveTimerRef.current);
clearTimeout(autoSaveTimerRef.current);
}
+
+ // Clear any pending drag end timeout
+ if (dragEndTimeoutRef.current) {
+ clearTimeout(dragEndTimeoutRef.current);
+ dragEndTimeoutRef.current = null;
+ }
};
}, [scheduleAutoSave]);
@@ -1084,16 +1099,20 @@ const TimelineControls = ({
};
// Helper function to calculate available space for a new segment
- const calculateAvailableSpace = (startTime: number): number => {
+ const calculateAvailableSpace = (startTime: number, segmentsOverride?: Segment[]): number => {
// Always return at least 0.1 seconds to ensure tooltip shows
const MIN_SPACE = 0.1;
+ // Use override segments if provided, otherwise use ref to get latest segments
+ // This ensures we always have the most up-to-date segments, especially important for Safari
+ const segmentsToUse = segmentsOverride || clipSegmentsRef.current;
+
// Determine the amount of available space:
// 1. Check remaining space until the end of video
const remainingDuration = Math.max(0, duration - startTime);
// 2. Find the next segment (if any)
- const sortedSegments = [...clipSegments].sort((a, b) => a.startTime - b.startTime);
+ const sortedSegments = [...segmentsToUse].sort((a, b) => a.startTime - b.startTime);
// Find the next and previous segments
const nextSegment = sortedSegments.find((seg) => seg.startTime > startTime);
@@ -1109,14 +1128,6 @@ const TimelineControls = ({
availableSpace = duration - startTime;
}
- // Log the space calculation for debugging
- logger.debug('Space calculation:', {
- position: formatDetailedTime(startTime),
- nextSegment: nextSegment ? formatDetailedTime(nextSegment.startTime) : 'none',
- prevSegment: prevSegment ? formatDetailedTime(prevSegment.endTime) : 'none',
- availableSpace: formatDetailedTime(Math.max(MIN_SPACE, availableSpace)),
- });
-
// Always return at least MIN_SPACE to ensure tooltip shows
return Math.max(MIN_SPACE, availableSpace);
};
@@ -1125,8 +1136,11 @@ const TimelineControls = ({
const updateTooltipForPosition = (currentPosition: number) => {
if (!timelineRef.current) return;
+ // Use ref to get latest segments to avoid stale state issues
+ const currentSegments = clipSegmentsRef.current;
+
// Find if we're in a segment at the current position with a small tolerance
- const segmentAtPosition = clipSegments.find((seg) => {
+ const segmentAtPosition = currentSegments.find((seg) => {
const isWithinSegment = currentPosition >= seg.startTime && currentPosition <= seg.endTime;
const isVeryCloseToStart = Math.abs(currentPosition - seg.startTime) < 0.001;
const isVeryCloseToEnd = Math.abs(currentPosition - seg.endTime) < 0.001;
@@ -1134,7 +1148,7 @@ const TimelineControls = ({
});
// Find the next and previous segments
- const sortedSegments = [...clipSegments].sort((a, b) => a.startTime - b.startTime);
+ const sortedSegments = [...currentSegments].sort((a, b) => a.startTime - b.startTime);
const nextSegment = sortedSegments.find((seg) => seg.startTime > currentPosition);
const prevSegment = [...sortedSegments].reverse().find((seg) => seg.endTime < currentPosition);
@@ -1144,21 +1158,13 @@ const TimelineControls = ({
setShowEmptySpaceTooltip(false);
} else {
// We're in a cutaway area
- // Calculate available space for new segment
- const availableSpace = calculateAvailableSpace(currentPosition);
+ // Calculate available space for new segment using current segments
+ const availableSpace = calculateAvailableSpace(currentPosition, currentSegments);
setAvailableSegmentDuration(availableSpace);
// Always show empty space tooltip
setSelectedSegmentId(null);
setShowEmptySpaceTooltip(true);
-
- // Log position info for debugging
- logger.debug('Cutaway position:', {
- current: formatDetailedTime(currentPosition),
- prevSegmentEnd: prevSegment ? formatDetailedTime(prevSegment.endTime) : 'none',
- nextSegmentStart: nextSegment ? formatDetailedTime(nextSegment.startTime) : 'none',
- availableSpace: formatDetailedTime(availableSpace),
- });
}
// Update tooltip position
@@ -1188,6 +1194,12 @@ const TimelineControls = ({
if (!timelineRef.current || !scrollContainerRef.current) return;
+ // Safari-specific fix: Ignore clicks that happen immediately after a drag operation
+ // Safari fires click events after drag ends, which can cause issues with stale state
+ if (isSafari() && dragJustEndedRef.current) {
+ return;
+ }
+
// If on mobile device and video hasn't been initialized, don't handle timeline clicks
if (isIOSUninitialized) {
return;
@@ -1195,7 +1207,6 @@ const TimelineControls = ({
// Check if video is globally playing before the click
const wasPlaying = videoRef.current && !videoRef.current.paused;
- logger.debug('Video was playing before timeline click:', wasPlaying);
// Reset continuation flag when clicking on timeline - ensures proper boundary detection
setContinuePastBoundary(false);
@@ -1216,14 +1227,6 @@ const TimelineControls = ({
const newTime = position * duration;
- // Log the position for debugging
- logger.debug(
- 'Timeline clicked at:',
- formatDetailedTime(newTime),
- 'distance from end:',
- formatDetailedTime(duration - newTime)
- );
-
// Store position globally for iOS Safari (this is critical for first-time visits)
if (typeof window !== 'undefined') {
window.lastSeekedPosition = newTime;
@@ -1236,8 +1239,12 @@ const TimelineControls = ({
setClickedTime(newTime);
setDisplayTime(newTime);
+ // Use ref to get latest segments to avoid stale state issues, especially in Safari
+ // Safari can fire click events immediately after drag before React re-renders
+ const currentSegments = clipSegmentsRef.current;
+
// Find if we clicked in a segment with a small tolerance for boundaries
- const segmentAtClickedTime = clipSegments.find((seg) => {
+ const segmentAtClickedTime = currentSegments.find((seg) => {
// Standard check for being inside a segment
const isInside = newTime >= seg.startTime && newTime <= seg.endTime;
// Additional checks for being exactly at the start or end boundary (with small tolerance)
@@ -1258,7 +1265,7 @@ const TimelineControls = ({
if (isPlayingSegments && wasPlaying) {
// Update the current segment index if we clicked into a segment
if (segmentAtClickedTime) {
- const orderedSegments = [...clipSegments].sort((a, b) => a.startTime - b.startTime);
+ const orderedSegments = [...currentSegments].sort((a, b) => a.startTime - b.startTime);
const targetSegmentIndex = orderedSegments.findIndex((seg) => seg.id === segmentAtClickedTime.id);
if (targetSegmentIndex !== -1) {
@@ -1311,8 +1318,9 @@ const TimelineControls = ({
// We're in a cutaway area - always show tooltip
setSelectedSegmentId(null);
- // Calculate the available space for a new segment
- const availableSpace = calculateAvailableSpace(newTime);
+ // Calculate the available space for a new segment using current segments from ref
+ // This ensures we use the latest segments even if React hasn't re-rendered yet
+ const availableSpace = calculateAvailableSpace(newTime, currentSegments);
setAvailableSegmentDuration(availableSpace);
// Calculate and set tooltip position correctly for zoomed timeline
@@ -1334,18 +1342,6 @@ const TimelineControls = ({
// Always show the empty space tooltip in cutaway areas
setShowEmptySpaceTooltip(true);
-
- // Log the cutaway area details
- const sortedSegments = [...clipSegments].sort((a, b) => a.startTime - b.startTime);
- const prevSegment = [...sortedSegments].reverse().find((seg) => seg.endTime < newTime);
- const nextSegment = sortedSegments.find((seg) => seg.startTime > newTime);
-
- logger.debug('Clicked in cutaway area:', {
- position: formatDetailedTime(newTime),
- availableSpace: formatDetailedTime(availableSpace),
- prevSegmentEnd: prevSegment ? formatDetailedTime(prevSegment.endTime) : 'none',
- nextSegmentStart: nextSegment ? formatDetailedTime(nextSegment.startTime) : 'none',
- });
}
}
};
@@ -1498,6 +1494,10 @@ const TimelineControls = ({
return seg;
});
+ // Update the ref immediately during drag to ensure we always have latest segments
+ // This is critical for Safari which may fire events before React re-renders
+ clipSegmentsRef.current = updatedSegments;
+
// Create a custom event to update the segments WITHOUT recording in history during drag
const updateEvent = new CustomEvent('update-segments', {
detail: {
@@ -1582,6 +1582,26 @@ const TimelineControls = ({
return seg;
});
+ // CRITICAL: Update the ref immediately with the new segments
+ // This ensures that if Safari fires a click event before React re-renders,
+ // the click handler will use the updated segments instead of stale ones
+ clipSegmentsRef.current = finalSegments;
+
+ // Safari-specific fix: Set flag to ignore clicks immediately after drag
+ // Safari fires click events after drag ends, which can interfere with state updates
+ if (isSafari()) {
+ dragJustEndedRef.current = true;
+ // Clear the flag after a delay to allow React to re-render with updated segments
+ // Increased timeout to ensure state has propagated
+ if (dragEndTimeoutRef.current) {
+ clearTimeout(dragEndTimeoutRef.current);
+ }
+ dragEndTimeoutRef.current = setTimeout(() => {
+ dragJustEndedRef.current = false;
+ dragEndTimeoutRef.current = null;
+ }, 200); // 200ms to ensure React has processed the state update and re-rendered
+ }
+
// Now we can create a history record for the complete drag operation
const actionType = isLeft ? 'adjust_segment_start' : 'adjust_segment_end';
document.dispatchEvent(
@@ -1594,6 +1614,13 @@ const TimelineControls = ({
})
);
+ // Dispatch segment-drag-end event for other listeners
+ document.dispatchEvent(
+ new CustomEvent('segment-drag-end', {
+ detail: { segmentId },
+ })
+ );
+
// After drag is complete, do a final check to see if playhead is inside the segment
if (selectedSegmentId === segmentId && videoRef.current) {
const currentTime = videoRef.current.currentTime;
@@ -3943,9 +3970,7 @@ const TimelineControls = ({
setShowSaveChaptersModal(true)}
className="save-chapters-button"
- data-tooltip={clipSegments.length === 0
- ? "Clear all chapters"
- : "Save chapters"}
+ {...(clipSegments.length === 0 && { 'data-tooltip': 'Clear all chapters' })}
>
{clipSegments.length === 0
? 'Clear Chapters'
diff --git a/frontend-tools/chapters-editor/client/src/hooks/useVideoChapters.tsx b/frontend-tools/chapters-editor/client/src/hooks/useVideoChapters.tsx
index fbcb9691..dd5186d1 100644
--- a/frontend-tools/chapters-editor/client/src/hooks/useVideoChapters.tsx
+++ b/frontend-tools/chapters-editor/client/src/hooks/useVideoChapters.tsx
@@ -60,6 +60,9 @@ const useVideoChapters = () => {
const [duration, setDuration] = useState(0);
const [isPlaying, setIsPlaying] = useState(false);
const [isMuted, setIsMuted] = useState(false);
+
+ // Track if editor has been initialized to prevent re-initialization on Safari metadata events
+ const isInitializedRef = useRef(false);
// Timeline state
const [trimStart, setTrimStart] = useState(0);
@@ -108,11 +111,7 @@ const useVideoChapters = () => {
// Detect Safari browser
const isSafari = () => {
const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;
- const isSafariBrowser = /Safari/.test(userAgent) && !/Chrome/.test(userAgent) && !/Chromium/.test(userAgent);
- if (isSafariBrowser) {
- logger.debug('Safari browser detected, enabling audio support fallbacks');
- }
- return isSafariBrowser;
+ return /Safari/.test(userAgent) && !/Chrome/.test(userAgent) && !/Chromium/.test(userAgent);
};
// Initialize video event listeners
@@ -121,7 +120,15 @@ const useVideoChapters = () => {
if (!video) return;
const handleLoadedMetadata = () => {
- logger.debug('Video loadedmetadata event fired, duration:', video.duration);
+ // CRITICAL: Prevent re-initialization if editor has already been initialized
+ // Safari fires loadedmetadata multiple times, which was resetting segments
+ if (isInitializedRef.current) {
+ // Still update duration and trimEnd in case they changed
+ setDuration(video.duration);
+ setTrimEnd(video.duration);
+ return;
+ }
+
setDuration(video.duration);
setTrimEnd(video.duration);
@@ -173,7 +180,7 @@ const useVideoChapters = () => {
setHistory([initialState]);
setHistoryPosition(0);
setClipSegments(initialSegments);
- logger.debug('Editor initialized with segments:', initialSegments.length);
+ isInitializedRef.current = true; // Mark as initialized
};
initializeEditor();
@@ -181,20 +188,18 @@ const useVideoChapters = () => {
// Safari-specific fallback for audio files
const handleCanPlay = () => {
- logger.debug('Video canplay event fired');
// If loadedmetadata hasn't fired yet but we have duration, trigger initialization
- if (video.duration && duration === 0) {
- logger.debug('Safari fallback: Using canplay event to initialize');
+ // Also check if already initialized to prevent re-initialization
+ if (video.duration && duration === 0 && !isInitializedRef.current) {
handleLoadedMetadata();
}
};
// Additional Safari fallback for audio files
const handleLoadedData = () => {
- logger.debug('Video loadeddata event fired');
// If we still don't have duration, try again
- if (video.duration && duration === 0) {
- logger.debug('Safari fallback: Using loadeddata event to initialize');
+ // Also check if already initialized to prevent re-initialization
+ if (video.duration && duration === 0 && !isInitializedRef.current) {
handleLoadedMetadata();
}
};
@@ -226,14 +231,12 @@ const useVideoChapters = () => {
// Safari-specific fallback event listeners for audio files
if (isSafari()) {
- logger.debug('Adding Safari-specific event listeners for audio support');
video.addEventListener('canplay', handleCanPlay);
video.addEventListener('loadeddata', handleLoadedData);
// Additional timeout fallback for Safari audio files
const safariTimeout = setTimeout(() => {
- if (video.duration && duration === 0) {
- logger.debug('Safari timeout fallback: Force initializing editor');
+ if (video.duration && duration === 0 && !isInitializedRef.current) {
handleLoadedMetadata();
}
}, 1000);
diff --git a/frontend-tools/chapters-editor/client/src/styles/ClipSegments.css b/frontend-tools/chapters-editor/client/src/styles/ClipSegments.css
index b9356045..8db34d0f 100644
--- a/frontend-tools/chapters-editor/client/src/styles/ClipSegments.css
+++ b/frontend-tools/chapters-editor/client/src/styles/ClipSegments.css
@@ -82,27 +82,24 @@
font-size: 0.875rem;
font-weight: 500;
color: var(--foreground, #333);
- margin: 0;
+ margin-bottom: 0.75rem;
}
.save-chapters-button {
- display: flex;
- align-items: center;
- gap: 0.5rem;
- padding: 0.5rem 1rem;
- background-color: #3b82f6;
- color: white;
- border: none;
- border-radius: 0.375rem;
- font-size: 0.875rem;
- font-weight: 500;
+ color: #ffffff;
+ background: #059669;
+ border-radius: 0.25rem;
+ font-size: 0.75rem;
+ padding: 0.25rem 0.5rem;
cursor: pointer;
- transition: all 0.2s ease;
+ border: none;
+ white-space: nowrap;
+ transition: background-color 0.2s;
+ min-width: fit-content;
&:hover {
- background-color: #2563eb;
- transform: translateY(-1px);
- box-shadow: 0 4px 6px -1px rgba(59, 130, 246, 0.3);
+ background-color: #059669;
+ box-shadow: 0 4px 6px -1px rgba(5, 150, 105, 0.3);
}
&.has-changes {
@@ -205,9 +202,9 @@
}
&.selected {
- border-color: #3b82f6;
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
- background-color: rgba(59, 130, 246, 0.05);
+ border-color: #059669;
+ box-shadow: 0 0 0 3px rgba(5, 150, 105, 0.1);
+ background-color: rgba(5, 150, 105, 0.05);
}
}
@@ -287,29 +284,68 @@
color: rgba(51, 51, 51, 0.7);
}
+ /* Generate 20 shades of #059669 (rgb(5, 150, 105)) */
+ /* Base color: #059669 = rgb(5, 150, 105) */
+ /* Creating variations from lighter to darker */
.segment-color-1 {
- background-color: rgba(59, 130, 246, 0.15);
+ background-color: rgba(167, 243, 208, 0.2);
}
.segment-color-2 {
- background-color: rgba(16, 185, 129, 0.15);
+ background-color: rgba(134, 239, 172, 0.2);
}
.segment-color-3 {
- background-color: rgba(245, 158, 11, 0.15);
+ background-color: rgba(101, 235, 136, 0.2);
}
.segment-color-4 {
- background-color: rgba(239, 68, 68, 0.15);
+ background-color: rgba(68, 231, 100, 0.2);
}
.segment-color-5 {
- background-color: rgba(139, 92, 246, 0.15);
+ background-color: rgba(35, 227, 64, 0.2);
}
.segment-color-6 {
- background-color: rgba(236, 72, 153, 0.15);
+ background-color: rgba(20, 207, 54, 0.2);
}
.segment-color-7 {
- background-color: rgba(6, 182, 212, 0.15);
+ background-color: rgba(15, 187, 48, 0.2);
}
.segment-color-8 {
- background-color: rgba(250, 204, 21, 0.15);
+ background-color: rgba(10, 167, 42, 0.2);
+ }
+ .segment-color-9 {
+ background-color: rgba(5, 150, 105, 0.2);
+ }
+ .segment-color-10 {
+ background-color: rgba(4, 135, 95, 0.2);
+ }
+ .segment-color-11 {
+ background-color: rgba(3, 120, 85, 0.2);
+ }
+ .segment-color-12 {
+ background-color: rgba(2, 105, 75, 0.2);
+ }
+ .segment-color-13 {
+ background-color: rgba(2, 90, 65, 0.2);
+ }
+ .segment-color-14 {
+ background-color: rgba(1, 75, 55, 0.2);
+ }
+ .segment-color-15 {
+ background-color: rgba(1, 66, 48, 0.2);
+ }
+ .segment-color-16 {
+ background-color: rgba(1, 57, 41, 0.2);
+ }
+ .segment-color-17 {
+ background-color: rgba(1, 48, 34, 0.2);
+ }
+ .segment-color-18 {
+ background-color: rgba(0, 39, 27, 0.2);
+ }
+ .segment-color-19 {
+ background-color: rgba(0, 30, 20, 0.2);
+ }
+ .segment-color-20 {
+ background-color: rgba(0, 21, 13, 0.2);
}
/* Responsive styles */
diff --git a/frontend-tools/chapters-editor/client/src/styles/IOSNotification.css b/frontend-tools/chapters-editor/client/src/styles/IOSNotification.css
index bc9cbe39..5e20d8d6 100644
--- a/frontend-tools/chapters-editor/client/src/styles/IOSNotification.css
+++ b/frontend-tools/chapters-editor/client/src/styles/IOSNotification.css
@@ -31,7 +31,7 @@
.ios-notification-icon {
flex-shrink: 0;
- color: #0066cc;
+ color: #059669;
margin-right: 15px;
margin-top: 3px;
}
@@ -96,7 +96,7 @@
}
.ios-desktop-mode-btn {
- background-color: #0066cc;
+ background-color: #059669;
color: white;
border: none;
border-radius: 8px;
diff --git a/frontend-tools/chapters-editor/client/src/styles/Modal.css b/frontend-tools/chapters-editor/client/src/styles/Modal.css
index c1aacce7..afcf39b5 100644
--- a/frontend-tools/chapters-editor/client/src/styles/Modal.css
+++ b/frontend-tools/chapters-editor/client/src/styles/Modal.css
@@ -92,12 +92,12 @@
}
.modal-button-primary {
- background-color: #0066cc;
+ background-color: #059669;
color: white;
}
.modal-button-primary:hover {
- background-color: #0055aa;
+ background-color: #059669;
}
.modal-button-secondary {
@@ -138,7 +138,7 @@
.spinner {
border: 4px solid rgba(0, 0, 0, 0.1);
border-radius: 50%;
- border-top: 4px solid #0066cc;
+ border-top: 4px solid #059669;
width: 30px;
height: 30px;
animation: spin 1s linear infinite;
@@ -224,7 +224,7 @@
padding: 12px 16px;
border: none;
border-radius: 4px;
- background-color: #0066cc;
+ background-color: #059669;
text-align: center;
cursor: pointer;
transition: all 0.2s;
@@ -258,12 +258,12 @@
margin: 0 auto;
width: auto;
min-width: 220px;
- background-color: #0066cc;
+ background-color: #059669;
color: white;
}
.centered-choice:hover {
- background-color: #0055aa;
+ background-color: #059669;
}
@media (max-width: 480px) {
@@ -300,7 +300,7 @@
.countdown {
font-weight: bold;
- color: #0066cc;
+ color: #059669;
font-size: 1.1rem;
}
}
diff --git a/frontend-tools/chapters-editor/client/src/styles/TimelineControls.css b/frontend-tools/chapters-editor/client/src/styles/TimelineControls.css
index 9514fe2a..e30d5441 100644
--- a/frontend-tools/chapters-editor/client/src/styles/TimelineControls.css
+++ b/frontend-tools/chapters-editor/client/src/styles/TimelineControls.css
@@ -1,4 +1,16 @@
#chapters-editor-root {
+ .timeline-header-container {
+ margin-left: 1rem;
+ margin-top: -0.5rem;
+ }
+
+ .timeline-header-title {
+ font-size: 1.125rem;
+ font-weight: 600;
+ color: #059669;
+ margin: 0;
+ }
+
.timeline-container-card {
background-color: white;
border-radius: 0.5rem;
@@ -11,6 +23,8 @@
display: flex;
justify-content: space-between;
align-items: center;
+ padding-bottom: 0.5rem;
+ border-bottom: 2px solid rgba(16, 185, 129, 0.2);
}
.timeline-title {
@@ -20,7 +34,7 @@
}
.timeline-title-text {
- font-weight: 700;
+ font-size: 0.875rem;
}
.current-time {
@@ -48,10 +62,11 @@
.timeline-container {
position: relative;
min-width: 100%;
- background-color: #fafbfc;
+ background-color: #e2ede4;
height: 70px;
border-radius: 0.25rem;
overflow: visible !important;
+ border: 1px solid rgba(16, 185, 129, 0.2);
}
.timeline-marker {
@@ -194,7 +209,7 @@
left: 0;
right: 0;
padding: 0.4rem;
- background-color: rgba(0, 0, 0, 0.4);
+ background-color: rgba(16, 185, 129, 0.6);
color: white;
opacity: 1;
transition: background-color 0.2s;
@@ -202,15 +217,15 @@
}
.clip-segment:hover .clip-segment-info {
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgba(16, 185, 129, 0.7);
}
.clip-segment.selected .clip-segment-info {
- background-color: rgba(59, 130, 246, 0.5);
+ background-color: rgba(5, 150, 105, 0.8);
}
.clip-segment.selected:hover .clip-segment-info {
- background-color: rgba(59, 130, 246, 0.4);
+ background-color: rgba(5, 150, 105, 0.75);
}
.clip-segment-name {
@@ -540,7 +555,7 @@
.save-copy-button,
.save-segments-button {
color: #ffffff;
- background: #0066cc;
+ background: #059669;
border-radius: 0.25rem;
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
@@ -713,7 +728,7 @@
height: 50px;
border: 5px solid rgba(0, 0, 0, 0.1);
border-radius: 50%;
- border-top-color: #0066cc;
+ border-top-color: #059669;
animation: spin 1s ease-in-out infinite;
}
@@ -753,7 +768,7 @@
align-items: center;
justify-content: center;
padding: 0.75rem 1.25rem;
- background-color: #0066cc;
+ background-color: #059669;
color: white;
border-radius: 4px;
text-decoration: none;
@@ -766,7 +781,7 @@
}
.modal-choice-button:hover {
- background-color: #0056b3;
+ background-color:rgb(7, 119, 84);
}
.modal-choice-button svg {
@@ -941,7 +956,6 @@
.save-chapters-button:hover {
background-color: #2563eb;
- transform: translateY(-1px);
box-shadow: 0 4px 6px -1px rgba(59, 130, 246, 0.3);
}
diff --git a/frontend-tools/video-editor/client/src/App.tsx b/frontend-tools/video-editor/client/src/App.tsx
index 5428a068..ab70e670 100644
--- a/frontend-tools/video-editor/client/src/App.tsx
+++ b/frontend-tools/video-editor/client/src/App.tsx
@@ -309,6 +309,11 @@ const App = () => {
canRedo={historyPosition < history.length - 1}
/>
+ {/* Timeline Header */}
+
+
Trim or Split
+
+
{/* Timeline Controls */}
{
// Generate the same color background for a segment as shown in the timeline
const getSegmentColorClass = (index: number) => {
- // Return CSS class based on index modulo 8
- // This matches the CSS nth-child selectors in the timeline
- return `segment-default-color segment-color-${(index % 8) + 1}`;
+ // Return CSS class based on index modulo 20
+ // This matches the CSS classes for up to 20 segments
+ return `segment-default-color segment-color-${(index % 20) + 1}`;
};
return (
diff --git a/frontend-tools/video-editor/client/src/styles/ClipSegments.css b/frontend-tools/video-editor/client/src/styles/ClipSegments.css
index 9eefcb09..b7e190f3 100644
--- a/frontend-tools/video-editor/client/src/styles/ClipSegments.css
+++ b/frontend-tools/video-editor/client/src/styles/ClipSegments.css
@@ -99,6 +99,7 @@
}
.segment-thumbnail {
+ display: none;
width: 4rem;
height: 2.25rem;
background-size: cover;
@@ -129,7 +130,7 @@
margin-top: 0.25rem;
display: inline-block;
background-color: #f3f4f6;
- padding: 0 0.5rem;
+ padding: 0;
border-radius: 0.25rem;
color: black;
}
@@ -169,28 +170,67 @@
color: rgba(51, 51, 51, 0.7);
}
+ /* Generate 20 shades of #2563eb (rgb(37, 99, 235)) */
+ /* Base color: #2563eb = rgb(37, 99, 235) */
+ /* Creating variations from lighter to darker */
.segment-color-1 {
- background-color: rgba(59, 130, 246, 0.15);
+ background-color: rgba(147, 179, 247, 0.2);
}
.segment-color-2 {
- background-color: rgba(16, 185, 129, 0.15);
+ background-color: rgba(129, 161, 243, 0.2);
}
.segment-color-3 {
- background-color: rgba(245, 158, 11, 0.15);
+ background-color: rgba(111, 143, 239, 0.2);
}
.segment-color-4 {
- background-color: rgba(239, 68, 68, 0.15);
+ background-color: rgba(93, 125, 237, 0.2);
}
.segment-color-5 {
- background-color: rgba(139, 92, 246, 0.15);
+ background-color: rgba(75, 107, 235, 0.2);
}
.segment-color-6 {
- background-color: rgba(236, 72, 153, 0.15);
+ background-color: rgba(65, 99, 235, 0.2);
}
.segment-color-7 {
- background-color: rgba(6, 182, 212, 0.15);
+ background-color: rgba(55, 91, 235, 0.2);
}
.segment-color-8 {
- background-color: rgba(250, 204, 21, 0.15);
+ background-color: rgba(45, 83, 235, 0.2);
+ }
+ .segment-color-9 {
+ background-color: rgba(37, 99, 235, 0.2);
+ }
+ .segment-color-10 {
+ background-color: rgba(33, 89, 215, 0.2);
+ }
+ .segment-color-11 {
+ background-color: rgba(29, 79, 195, 0.2);
+ }
+ .segment-color-12 {
+ background-color: rgba(25, 69, 175, 0.2);
+ }
+ .segment-color-13 {
+ background-color: rgba(21, 59, 155, 0.2);
+ }
+ .segment-color-14 {
+ background-color: rgba(17, 49, 135, 0.2);
+ }
+ .segment-color-15 {
+ background-color: rgba(15, 43, 119, 0.2);
+ }
+ .segment-color-16 {
+ background-color: rgba(13, 37, 103, 0.2);
+ }
+ .segment-color-17 {
+ background-color: rgba(11, 31, 87, 0.2);
+ }
+ .segment-color-18 {
+ background-color: rgba(9, 25, 71, 0.2);
+ }
+ .segment-color-19 {
+ background-color: rgba(7, 19, 55, 0.2);
+ }
+ .segment-color-20 {
+ background-color: rgba(5, 13, 39, 0.2);
}
}
diff --git a/frontend-tools/video-editor/client/src/styles/TimelineControls.css b/frontend-tools/video-editor/client/src/styles/TimelineControls.css
index 807c27a9..3239dd1f 100644
--- a/frontend-tools/video-editor/client/src/styles/TimelineControls.css
+++ b/frontend-tools/video-editor/client/src/styles/TimelineControls.css
@@ -1,4 +1,16 @@
#video-editor-trim-root {
+ .timeline-header-container {
+ margin-left: 1rem;
+ margin-top: -0.5rem;
+ }
+
+ .timeline-header-title {
+ font-size: 1.125rem;
+ font-weight: 600;
+ color: #2563eb;
+ margin: 0;
+ }
+
.timeline-container-card {
background-color: white;
border-radius: 0.5rem;
@@ -11,6 +23,8 @@
display: flex;
justify-content: space-between;
align-items: center;
+ padding-bottom: 0.5rem;
+ border-bottom: 2px solid rgba(59, 130, 246, 0.2);
}
.timeline-title {
@@ -20,7 +34,7 @@
}
.timeline-title-text {
- font-weight: 700;
+ font-size: 0.875rem;
}
.current-time {
@@ -48,10 +62,11 @@
.timeline-container {
position: relative;
min-width: 100%;
- background-color: #fafbfc;
+ background-color: #eff6ff;
height: 70px;
border-radius: 0.25rem;
overflow: visible !important;
+ border: 1px solid rgba(59, 130, 246, 0.2);
}
.timeline-marker {
@@ -194,7 +209,7 @@
left: 0;
right: 0;
padding: 0.4rem;
- background-color: rgba(0, 0, 0, 0.4);
+ background-color: rgba(59, 130, 246, 0.6);
color: white;
opacity: 1;
transition: background-color 0.2s;
@@ -202,15 +217,15 @@
}
.clip-segment:hover .clip-segment-info {
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgba(59, 130, 246, 0.7);
}
.clip-segment.selected .clip-segment-info {
- background-color: rgba(59, 130, 246, 0.5);
+ background-color: rgba(37, 99, 235, 0.8);
}
.clip-segment.selected:hover .clip-segment-info {
- background-color: rgba(59, 130, 246, 0.4);
+ background-color: rgba(37, 99, 235, 0.75);
}
.clip-segment-name {
diff --git a/static/chapters_editor/chapters-editor.css b/static/chapters_editor/chapters-editor.css
index 53b04b57..11772c62 100644
--- a/static/chapters_editor/chapters-editor.css
+++ b/static/chapters_editor/chapters-editor.css
@@ -1 +1 @@
-#chapters-editor-root{@keyframes pulse{0%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}to{opacity:.7;transform:scale(1)}}}#chapters-editor-root .video-player-container{position:relative;width:100%;background:#000;border-radius:.5rem;overflow:hidden;margin-bottom:1rem;aspect-ratio:16/9;-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .audio-poster-background{position:absolute;top:0;left:0;width:100%;height:100%;background-size:contain;background-position:center;background-repeat:no-repeat;z-index:1;pointer-events:none}#chapters-editor-root .video-player-container video{position:relative;width:100%;height:100%;cursor:pointer;z-index:2;transform:translateZ(0);-webkit-transform:translateZ(0);-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .video-player-container video.audio-with-poster{background:transparent}@supports (-webkit-touch-callout: none){#chapters-editor-root .video-player-container video{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}}#chapters-editor-root .play-pause-indicator{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:60px;height:60px;background-color:#0009;border-radius:50%;opacity:0;transition:opacity .3s;pointer-events:none;z-index:3}#chapters-editor-root .video-player-container:hover .play-pause-indicator{opacity:1}#chapters-editor-root .play-pause-indicator:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#chapters-editor-root .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}#chapters-editor-root .play-pause-indicator.pause-icon:before{width:20px;height:25px;border-left:6px solid white;border-right:6px solid white}#chapters-editor-root .ios-first-play-indicator{position:absolute;top:0;left:0;width:100%;height:100%;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10}#chapters-editor-root .ios-play-message{color:#fff;font-size:1.2rem;text-align:center;padding:1rem;background:#000c;border-radius:.5rem;animation:pulse 2s infinite}#chapters-editor-root .video-controls{position:absolute;bottom:0;left:0;right:0;padding:.75rem;background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .3s;z-index:3}#chapters-editor-root .video-player-container:hover .video-controls{opacity:1}#chapters-editor-root .video-current-time,#chapters-editor-root .video-duration{color:#fff;font-size:.875rem}#chapters-editor-root .video-time-display{display:flex;justify-content:space-between;margin-bottom:.5rem;color:#fff;font-size:.875rem}#chapters-editor-root .video-progress{position:relative;height:6px;background-color:#ffffff4d;border-radius:3px;cursor:pointer;margin:0 10px;touch-action:none;flex-grow:1}#chapters-editor-root .video-progress.dragging{height:8px}#chapters-editor-root .video-progress-fill{position:absolute;top:0;left:0;height:100%;background-color:red;border-radius:3px;pointer-events:none}#chapters-editor-root .video-scrubber{position:absolute;top:50%;transform:translate(-50%,-50%);width:16px;height:16px;background-color:red;border-radius:50%;cursor:grab;transition:transform .1s ease,width .1s ease,height .1s ease}#chapters-editor-root .video-progress.dragging .video-scrubber{transform:translate(-50%,-50%) scale(1.2);width:18px;height:18px;cursor:grabbing;box-shadow:0 0 8px #f009}@media (pointer: coarse){#chapters-editor-root .video-scrubber{width:20px;height:20px}#chapters-editor-root .video-progress.dragging .video-scrubber{width:24px;height:24px}#chapters-editor-root .video-scrubber:before{content:"";position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px}}#chapters-editor-root .video-controls-buttons{display:flex;align-items:center;justify-content:flex-end;gap:.75rem}#chapters-editor-root .mute-button,#chapters-editor-root .fullscreen-button{min-width:auto;color:#fff;background:none;border:none;cursor:pointer;padding:.25rem;transition:transform .2s}#chapters-editor-root .mute-button:hover,#chapters-editor-root .fullscreen-button:hover{transform:scale(1.1)}#chapters-editor-root .mute-button svg,#chapters-editor-root .fullscreen-button svg{width:1.25rem;height:1.25rem}#chapters-editor-root .video-time-tooltip{position:absolute;top:-30px;background-color:#000000b3;color:#fff;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 #0000004d}#chapters-editor-root .video-time-tooltip:after{content:"";position:absolute;bottom:-4px;left:50%;transform:translate(-50%);width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(0,0,0,.7)}#chapters-editor-root{@keyframes modal-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes success-pop{0%{transform:scale(0);opacity:0}70%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:1}}@keyframes error-pop{0%{transform:scale(0);opacity:0}70%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:1}}}#chapters-editor-root .modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}#chapters-editor-root .modal-container{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;width:90%;max-width:500px;max-height:90vh;overflow-y:auto;animation:modal-fade-in .3s ease-out}#chapters-editor-root .modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #eee}#chapters-editor-root .modal-title{margin:0;font-size:1.25rem;font-weight:600;color:#333}#chapters-editor-root .modal-close-button{background:none;border:none;cursor:pointer;color:#666;padding:4px;display:flex;align-items:center;justify-content:center;transition:color .2s}#chapters-editor-root .modal-close-button:hover{color:#000}#chapters-editor-root .modal-content{padding:20px;color:#333;font-size:1rem;line-height:1.5;max-height:400px;overflow-y:auto}#chapters-editor-root .modal-actions{display:flex;justify-content:flex-end;padding:16px 20px;border-top:1px solid #eee;gap:12px}#chapters-editor-root .modal-button{padding:8px 16px;border-radius:4px;font-weight:500;cursor:pointer;transition:all .2s;border:none}#chapters-editor-root .modal-button-primary{background-color:#06c;color:#fff}#chapters-editor-root .modal-button-primary:hover{background-color:#05a}#chapters-editor-root .modal-button-secondary{background-color:#f0f0f0;color:#333}#chapters-editor-root .modal-button-secondary:hover{background-color:#e0e0e0}#chapters-editor-root .modal-button-danger{background-color:#dc3545;color:#fff}#chapters-editor-root .modal-button-danger:hover{background-color:#bd2130}#chapters-editor-root .modal-message{margin-bottom:16px;font-size:1rem}#chapters-editor-root .modal-spinner{display:flex;align-items:center;justify-content:center;margin:20px 0}#chapters-editor-root .spinner{border:4px solid rgba(0,0,0,.1);border-radius:50%;border-top:4px solid #0066cc;width:30px;height:30px;animation:spin 1s linear infinite}#chapters-editor-root .modal-success-icon{display:flex;justify-content:center;margin-bottom:16px;color:#28a745;font-size:2rem}#chapters-editor-root .modal-success-icon svg{width:60px;height:60px;color:#4caf50;animation:success-pop .5s ease-out}#chapters-editor-root .modal-error-icon{display:flex;justify-content:center;margin-bottom:16px;color:#dc3545;font-size:2rem}#chapters-editor-root .modal-error-icon svg{width:60px;height:60px;color:#f44336;animation:error-pop .5s ease-out}#chapters-editor-root .modal-choices{display:flex;flex-direction:column;gap:10px;margin-top:20px}#chapters-editor-root .modal-choice-button{padding:12px 16px;border:none;border-radius:4px;background-color:#06c;text-align:center;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;font-weight:500;text-decoration:none;color:#fff}#chapters-editor-root .modal-choice-button:hover{background-color:#05a;transform:translateY(-1px);box-shadow:0 2px 5px #0000001a}#chapters-editor-root .modal-choice-button svg{margin-right:8px}#chapters-editor-root .success-link{background-color:#4caf50}#chapters-editor-root .success-link:hover{background-color:#3d8b40}#chapters-editor-root .centered-choice{margin:0 auto;width:auto;min-width:220px;background-color:#06c;color:#fff}#chapters-editor-root .centered-choice:hover{background-color:#05a}@media (max-width: 480px){#chapters-editor-root .modal-container{width:95%}#chapters-editor-root .modal-actions{flex-direction:column}#chapters-editor-root .modal-button{width:100%}}#chapters-editor-root .error-message{color:#f44336;font-weight:500;background-color:#f443361a;padding:10px;border-radius:4px;border-left:4px solid #f44336;margin-top:10px}#chapters-editor-root .redirect-message{color:#555;font-size:.95rem;padding:0;margin:0}#chapters-editor-root .countdown{font-weight:700;color:#06c;font-size:1.1rem}#chapters-editor-root{@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}}#chapters-editor-root .timeline-container-card{background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .timeline-header{margin-bottom:.75rem;display:flex;justify-content:space-between;align-items:center}#chapters-editor-root .timeline-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333)}#chapters-editor-root .timeline-title-text{font-weight:700}#chapters-editor-root .current-time{font-size:.875rem;color:var(--foreground, #333)}#chapters-editor-root .time-code{font-family:monospace;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem}#chapters-editor-root .duration-time{font-size:.875rem;color:var(--foreground, #333)}#chapters-editor-root .timeline-scroll-container{position:relative;overflow:visible!important}#chapters-editor-root .timeline-container{position:relative;min-width:100%;background-color:#fafbfc;height:70px;border-radius:.25rem;overflow:visible!important}#chapters-editor-root .timeline-marker{position:absolute;height:82px;width:2px;background-color:#000;transform:translate(-50%);z-index:50;pointer-events:none}#chapters-editor-root .timeline-marker-head{position:absolute;top:-6px;left:50%;transform:translate(-50%);width:16px;height:16px;background-color:#ef4444;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;pointer-events:auto;z-index:51}#chapters-editor-root .timeline-marker-drag{position:absolute;bottom:-12px;left:50%;transform:translate(-50%);width:16px;height:16px;background-color:#4b5563;border-radius:50%;cursor:grab;display:flex;align-items:center;justify-content:center;pointer-events:auto;z-index:51}#chapters-editor-root .timeline-marker-drag.dragging{cursor:grabbing;background-color:#374151}#chapters-editor-root .timeline-marker-head-icon{color:#fff;font-size:14px;font-weight:700;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .timeline-marker-drag-icon{color:#fff;font-size:12px;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform:rotate(90deg);display:inline-block}#chapters-editor-root .trim-line-marker{position:absolute;top:0;bottom:0;width:1px;background-color:#00000080;z-index:20}#chapters-editor-root .trim-handle{position:absolute;width:10px;height:20px;background-color:#000;cursor:ew-resize}#chapters-editor-root .trim-handle.left{right:0;top:10px;border-radius:3px 0 0 3px}#chapters-editor-root .trim-handle.right{left:0;top:10px;border-radius:0 3px 3px 0}#chapters-editor-root .timeline-thumbnail{display:inline-block;height:70px;border-right:1px solid rgba(0,0,0,.03)}#chapters-editor-root .split-point{position:absolute;top:0;bottom:0;width:1px;background-color:#ff000080;z-index:15}#chapters-editor-root .clip-segment{position:absolute;height:70px;border-radius:4px;z-index:10;border:2px solid rgba(0,0,0,.15);cursor:pointer}#chapters-editor-root .clip-segment:hover{box-shadow:0 0 0 2px #0000004d;border-color:#0006;background-color:#f0f0f0cc!important}#chapters-editor-root .clip-segment.selected{box-shadow:0 0 0 2px #3b82f6b3;border-color:#3b82f6e6}#chapters-editor-root .clip-segment.selected:hover{background-color:#f0f8ffd9!important}#chapters-editor-root .clip-segment-info{position:absolute;bottom:0;left:0;right:0;padding:.4rem;background-color:#0006;color:#fff;opacity:1;transition:background-color .2s;line-height:1.3}#chapters-editor-root .clip-segment:hover .clip-segment-info{background-color:#00000080}#chapters-editor-root .clip-segment.selected .clip-segment-info{background-color:#3b82f680}#chapters-editor-root .clip-segment.selected:hover .clip-segment-info{background-color:#3b82f666}#chapters-editor-root .clip-segment-name{font-weight:700;font-size:12px}#chapters-editor-root .clip-segment-time,#chapters-editor-root .clip-segment-duration{font-size:10px}#chapters-editor-root .clip-segment-handle{position:absolute;top:0;bottom:0;width:6px;background-color:#0003;cursor:ew-resize}#chapters-editor-root .clip-segment-handle:hover{background-color:#0006}#chapters-editor-root .clip-segment-handle.left{left:0;border-radius:2px 0 0 2px}#chapters-editor-root .clip-segment-handle.right{right:0;border-radius:0 2px 2px 0}@media (pointer: coarse){#chapters-editor-root .clip-segment-handle{width:14px;background-color:#0006}#chapters-editor-root .clip-segment-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:20px;background-color:#fffc;border-radius:1px}#chapters-editor-root .clip-segment-handle.left:after{box-shadow:-2px 0 #00000080}#chapters-editor-root .clip-segment-handle.right:after{box-shadow:2px 0 #00000080}#chapters-editor-root .clip-segment-handle:active{background-color:#0009}#chapters-editor-root .timeline-marker{height:85px}#chapters-editor-root .timeline-marker-head{width:24px;height:24px;top:-13px}#chapters-editor-root .timeline-marker-drag{width:24px;height:24px;bottom:-18px}#chapters-editor-root .timeline-marker-head.dragging{width:28px;height:28px;top:-15px}}#chapters-editor-root .segment-tooltip,#chapters-editor-root .empty-space-tooltip{position:absolute;background-color:#fff;border-radius:4px;box-shadow:0 2px 8px #0000004d;padding:.5rem;z-index:1000;min-width:150px;text-align:center;pointer-events:auto;top:-105px!important;transform:translateY(-10px)}#chapters-editor-root .segment-tooltip{top:-165px!important}#chapters-editor-root .segment-tooltip:after,#chapters-editor-root .empty-space-tooltip:after{content:"";position:absolute;bottom:-5px;left:50%;transform:translate(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid white}#chapters-editor-root .segment-tooltip:before,#chapters-editor-root .empty-space-tooltip:before{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.1);z-index:-1}#chapters-editor-root .tooltip-time{font-weight:600;font-size:.875rem;margin-bottom:.5rem;color:#333}#chapters-editor-root .tooltip-actions{display:flex;justify-content:center;gap:.5rem}#chapters-editor-root .tooltip-action-btn{background-color:#f3f4f6;border:none;border-radius:.25rem;padding:.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#4b5563;min-width:20px!important}#chapters-editor-root .tooltip-action-btn:hover{background-color:#e5e7eb;color:#111827}#chapters-editor-root .tooltip-action-btn.delete{color:#ef4444}#chapters-editor-root .tooltip-action-btn.delete:hover{background-color:#fee2e2}#chapters-editor-root .tooltip-action-btn.new-segment{padding:.375rem .5rem}#chapters-editor-root .tooltip-action-btn.new-segment .tooltip-btn-text{margin-left:.25rem;font-size:.75rem}#chapters-editor-root .tooltip-action-btn svg{width:1rem;height:1rem}#chapters-editor-root .timeline-controls{display:flex;align-items:center;justify-content:space-between;margin-top:.75rem}#chapters-editor-root .time-navigation{display:none;align-items:center;gap:.5rem}#chapters-editor-root .time-nav-label{font-size:.875rem;font-weight:500}#chapters-editor-root .time-input{border:1px solid #d1d5db;border-radius:.25rem;padding:.25rem .5rem;width:8rem;font-size:.875rem}#chapters-editor-root .time-button-group{display:flex}#chapters-editor-root .time-button{background-color:#e5e7eb;color:#000;padding:.25rem .5rem;font-size:.875rem;border:none;cursor:pointer;margin-right:.5rem}#chapters-editor-root .time-button:hover{background-color:#d1d5db}#chapters-editor-root .time-button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}#chapters-editor-root .time-button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}#chapters-editor-root .controls-right{display:flex;align-items:center;gap:.5rem;margin-left:auto}#chapters-editor-root .zoom-dropdown-container{position:relative;z-index:100;display:none}#chapters-editor-root .zoom-button{background-color:#374151;color:#fff;border:none;border-radius:.25rem;padding:.25rem .75rem;font-size:.875rem;display:flex;align-items:center;cursor:pointer}#chapters-editor-root .zoom-button:hover{background-color:#1f2937}#chapters-editor-root .zoom-button svg{margin-left:.25rem}#chapters-editor-root .zoom-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;width:9rem;background-color:#374151;color:#fff;border-radius:.25rem;box-shadow:0 4px 6px -1px #0000001a;z-index:50;max-height:300px;overflow-y:auto}#chapters-editor-root .zoom-option{padding:.25rem .75rem;cursor:pointer}#chapters-editor-root .zoom-option:hover{background-color:#4b5563}#chapters-editor-root .zoom-option.selected{background-color:#6b7280;display:flex;align-items:center}#chapters-editor-root .zoom-option svg{margin-right:.25rem}#chapters-editor-root .save-buttons-row{display:flex;align-items:center;gap:.5rem;margin:0;flex-wrap:nowrap}#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{color:#fff;background:#06c;border-radius:.25rem;font-size:.75rem;padding:.25rem .5rem;cursor:pointer;border:none;white-space:nowrap;transition:background-color .2s;min-width:-moz-fit-content;min-width:fit-content}#chapters-editor-root .save-button:hover,#chapters-editor-root .save-copy-button:hover,#chapters-editor-root .save-segments-button:hover{background-color:#0056b3}@media (max-width: 576px){#chapters-editor-root .save-buttons-row{width:100%;justify-content:space-between;gap:.5rem}#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{flex:1;font-size:.7rem;padding:.25rem .35rem}}@media (max-width: 480px){#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{font-size:.675rem;padding:.25rem}#chapters-editor-root .controls-right,#chapters-editor-root .controls-right button{margin:0}}#chapters-editor-root .modal-success-content,#chapters-editor-root .modal-error-content{display:flex;flex-direction:column;align-items:center;padding:1rem;text-align:center;padding:0;margin:0}#chapters-editor-root .modal-success-icon,#chapters-editor-root .modal-error-icon{margin-bottom:1rem}#chapters-editor-root .modal-success-icon svg{color:#4caf50;animation:fadeIn .5s ease-in-out}#chapters-editor-root .modal-error-icon svg{color:#f44336;animation:fadeIn .5s ease-in-out}#chapters-editor-root .success-link{background-color:#4caf50;color:#fff;transition:background-color .3s}#chapters-editor-root .success-link:hover{background-color:#388e3c}#chapters-editor-root .error-message{color:#f44336;font-weight:500}#chapters-editor-root .modal-spinner{display:flex;justify-content:center;margin:2rem 0}#chapters-editor-root .spinner{width:50px;height:50px;border:5px solid rgba(0,0,0,.1);border-radius:50%;border-top-color:#06c;animation:spin 1s ease-in-out infinite}#chapters-editor-root .auto-save-spinner{animation:spin 1s linear infinite}#chapters-editor-root .text-center{text-align:center}#chapters-editor-root .modal-message{margin-bottom:1rem;line-height:1.5}#chapters-editor-root .modal-choice-button{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;background-color:#06c;color:#fff;border-radius:4px;text-decoration:none;margin:0 auto;cursor:pointer;font-weight:500;gap:.5rem;border:none;transition:background-color .3s}#chapters-editor-root .modal-choice-button:hover{background-color:#0056b3}#chapters-editor-root .modal-choice-button svg{flex-shrink:0}#chapters-editor-root .centered-choice{margin:0 auto;min-width:180px}.mobile-timeline-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:50;display:flex;justify-content:center;align-items:center;border-radius:.5rem;pointer-events:none}.mobile-timeline-message{background-color:#000c;border-radius:8px;padding:15px 25px;text-align:center;max-width:80%;animation:pulse 2s infinite}.mobile-timeline-message p{color:#fff;font-size:16px;margin:0 0 15px;font-weight:500}.mobile-play-icon{width:0;height:0;border-top:15px solid transparent;border-bottom:15px solid transparent;border-left:25px solid white;margin:0 auto}@keyframes pulse{0%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}to{opacity:.7;transform:scale(1)}}.segments-playback-mode .tooltip-time-btn,.segments-playback-mode .tooltip-action-btn.play,.segments-playback-mode .tooltip-action-btn.pause{opacity:1;cursor:pointer}.segments-playback-mode .tooltip-time-btn[disabled],.segments-playback-mode .tooltip-action-btn[disabled]{opacity:.5!important;cursor:not-allowed!important}.segments-playback-mode [data-tooltip][disabled]:hover:before,.segments-playback-mode [data-tooltip][disabled]:hover:after{opacity:1!important;visibility:visible!important}.segments-playback-message{display:flex;align-items:center;background-color:#3b82f61a;color:#3b82f6;padding:6px 12px;border-radius:4px;font-weight:600;font-size:.875rem;animation:pulse 2s infinite}.segments-playback-message svg{height:1.25rem;width:1.25rem;margin-right:.5rem;color:#3b82f6}.chapter-editor{background-color:#f8fafc;border:2px solid #3b82f6;border-radius:.5rem;padding:1rem;margin-bottom:1rem;transition:all .2s ease}.chapter-editor-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.75rem;gap:1rem}.chapter-editor-title-section{display:flex;flex-direction:column;gap:.5rem;flex:1}.chapter-editor-header h4{margin:0;font-size:.875rem;font-weight:600;color:#1f2937}.chapter-editor-segment{font-size:.75rem;color:#6b7280;background-color:#e5e7eb;padding:.25rem .5rem;border-radius:.25rem;display:inline-block}.save-chapters-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background-color:#3b82f6;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap;flex-shrink:0}.save-chapters-button:hover{background-color:#2563eb;transform:translateY(-1px);box-shadow:0 4px 6px -1px #3b82f64d}.save-chapters-button.has-changes{background-color:#10b981;animation:pulse-green-chapters 2s infinite}.save-chapters-button.has-changes:hover{background-color:#059669}.save-chapters-button svg{width:1rem;height:1rem}@keyframes pulse-green-chapters{0%,to{background-color:#10b981}50%{background-color:#34d399}}.chapter-title-input{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}.chapter-title-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.chapter-title-input::-moz-placeholder{color:#9ca3af}.chapter-title-input::placeholder{color:#9ca3af}.chapter-editor-info{margin-top:.5rem;font-size:.75rem;color:#6b7280;font-style:italic}@media (max-width: 768px){.chapter-editor-header{flex-direction:column;gap:.75rem;align-items:stretch}.save-chapters-button{justify-content:center;align-self:stretch}.chapter-editor-segment{text-align:center}}.tooltip-chapter-editor{background-color:#fffffff2;border-radius:.375rem;pointer-events:auto}textarea.tooltip-chapter-input{width:100%;padding:.5rem;border:2px solid #ccc;border-radius:.25rem;background-color:#fff;color:#000;font-size:.75rem;resize:none;outline:none;box-sizing:border-box;height:55px!important;max-height:55px!important;min-height:55px!important}textarea.tooltip-chapter-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f64d}textarea.tooltip-chapter-input::-moz-placeholder{color:#999}textarea.tooltip-chapter-input::placeholder{color:#999}.two-row-tooltip{display:flex;flex-direction:column;background-color:#fff;padding:6px;border-radius:4px;box-shadow:0 2px 8px #00000026;position:relative;z-index:3000}.tooltip-time-btn[data-tooltip="Decrease by 100ms"],.tooltip-time-btn[data-tooltip="Increase by 100ms"]{display:none!important}.tooltip-row{display:flex;justify-content:space-between;align-items:center;gap:3px}.tooltip-row:first-child{margin-bottom:6px}.tooltip-time-btn{background-color:#f0f0f0!important;border:none!important;border-radius:4px!important;padding:4px 8px!important;font-size:.75rem!important;font-weight:500!important;color:#333!important;cursor:pointer!important;transition:background-color .2s!important;min-width:20px!important}.tooltip-time-btn:hover{background-color:#e0e0e0!important}.tooltip-time-display{font-family:monospace!important;font-size:.875rem!important;font-weight:600!important;color:#333!important;padding:4px 6px!important;background-color:#f7f7f7!important;border-radius:4px!important;min-width:100px!important;text-align:center!important;overflow:hidden!important}.tooltip-time-display.disabled{pointer-events:none!important;cursor:not-allowed!important;opacity:.6!important;user-select:none!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important}.tooltip-time-btn.disabled[data-tooltip]:hover:before,.tooltip-time-btn.disabled[data-tooltip]:hover:after,.tooltip-action-btn.disabled[data-tooltip]:hover:before,.tooltip-action-btn.disabled[data-tooltip]:hover:after{opacity:1!important;visibility:visible!important}.tooltip-actions{display:flex;justify-content:space-between;align-items:center;gap:3px;position:relative;z-index:2500;margin-top:5px}.tooltip-action-btn{background-color:#f3f4f6;border:none;border-radius:4px;padding:5px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#4b5563;width:26px;height:26px;min-width:20px!important;position:relative}.tooltip-action-btn[data-tooltip]:before{content:attr(data-tooltip);position:absolute;height:30px;top:35px;left:50%;transform:translate(-50%);margin-left:0;background-color:#000000d9;color:#fff;text-align:left;padding:6px 12px;border-radius:4px;box-shadow:0 2px 8px #0003;font-size:12px;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:2500;pointer-events:none}.tooltip-action-btn[data-tooltip]:after{content:"";position:absolute;top:35px;left:50%;transform:translate(-50%);border-width:4px;border-style:solid;border-color:rgba(0,0,0,.85) transparent transparent transparent;margin-left:0;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:2500;pointer-events:none}@media (hover: hover) and (pointer: fine){.tooltip-action-btn[data-tooltip]:hover:before,.tooltip-action-btn[data-tooltip]:hover:after{opacity:1;visibility:visible}}@media (pointer: coarse){.tooltip-action-btn[data-tooltip]:before,.tooltip-action-btn[data-tooltip]:after{display:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important;content:none!important}}.tooltip-action-btn:hover{background-color:#e5e7eb;color:#111827}.tooltip-action-btn.delete{color:#ef4444}.tooltip-action-btn.delete:hover{background-color:#fee2e2}.tooltip-action-btn.play{color:#10b981}.tooltip-action-btn.play:hover{background-color:#d1fae5}.tooltip-action-btn.pause{color:#3b82f6}.tooltip-action-btn.pause:hover{background-color:#dbeafe}.tooltip-action-btn.play-from-start{color:#4f46e5}.tooltip-action-btn.play-from-start:hover{background-color:#e0e7ff}.tooltip-action-btn svg{width:16px;height:16px}.tooltip-action-btn.new-segment{width:auto;height:auto;padding:6px 10px;display:flex;flex-direction:row;color:#10b981}.tooltip-action-btn.new-segment:hover{background-color:#d1fae5}.tooltip-action-btn.new-segment .tooltip-btn-text{margin-left:6px;font-size:.75rem;white-space:nowrap}.tooltip-action-btn.disabled{opacity:.5;cursor:not-allowed;background-color:#f3f4f6}.tooltip-action-btn.disabled:hover{background-color:#f3f4f6;color:#9ca3af}.tooltip-action-btn.disabled svg{color:#9ca3af}.tooltip-action-btn.disabled .tooltip-btn-text{color:#9ca3af}.tooltip-action-btn.pause.disabled{color:#9ca3af!important;opacity:.5;cursor:not-allowed}.tooltip-action-btn.pause.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-action-btn.play.disabled{color:#9ca3af!important;opacity:.5;cursor:not-allowed}.tooltip-action-btn.play.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-time-btn.disabled{opacity:.5!important;cursor:not-allowed!important;background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-time-btn.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}@media (max-width: 768px){.two-row-tooltip{padding:4px}.tooltip-row:first-child{margin-bottom:4px}.tooltip-time-btn{min-width:20px!important;font-size:.7rem!important;padding:3px 6px!important}.tooltip-time-display{font-size:.8rem!important;padding:3px 4px!important;min-width:90px!important}.tooltip-action-btn{width:24px;height:24px;padding:4px}.tooltip-action-btn.new-segment{padding:4px 8px}.tooltip-action-btn svg{width:14px;height:14px}.tooltip-action-btn[data-tooltip]:before{min-width:100px;font-size:11px;padding:4px 8px;height:24px;top:33px}.tooltip-action-btn[data-tooltip]:after{top:33px}}#chapters-editor-root{@keyframes bluePulse{0%{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}to{box-shadow:0 0 #3b82f600}}@keyframes pulse{0%{opacity:.8}50%{opacity:1}to{opacity:.8}}}#chapters-editor-root .editing-tools-container{background-color:#fff;border-radius:.5rem;padding:1rem;margin-bottom:2.5rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .flex-container{display:flex;justify-content:space-between;align-items:center;position:relative;gap:15px;width:100%}#chapters-editor-root .flex-container.single-row{flex-wrap:nowrap}#chapters-editor-root .full-text{display:inline}#chapters-editor-root .short-text{display:none}#chapters-editor-root .reset-text{display:inline}#chapters-editor-root .button-group{display:flex;align-items:center}#chapters-editor-root .button-group.play-buttons-group{gap:.75rem;justify-content:flex-start;flex:0 0 auto}#chapters-editor-root .button-group.secondary{gap:.75rem;align-items:center;justify-content:flex-end;margin-left:auto}#chapters-editor-root .button-group button{display:flex;align-items:center;color:#333;background:none;border:none;cursor:pointer;min-width:auto}#chapters-editor-root .button-group button:hover:not(:disabled){color:inherit}#chapters-editor-root .button-group button:disabled{opacity:.5;cursor:not-allowed}#chapters-editor-root .button-group button svg{height:1.25rem;width:1.25rem;margin-right:.25rem}#chapters-editor-root .divider{border-right:1px solid #d1d5db;height:1.5rem;margin:0 .5rem}#chapters-editor-root .play-button,#chapters-editor-root .preview-button{font-weight:600;display:flex;align-items:center;position:relative;overflow:hidden;min-width:80px;justify-content:center;font-size:.875rem!important}#chapters-editor-root .play-button.greyed-out{opacity:.5;cursor:not-allowed}#chapters-editor-root .segments-button.highlighted-stop{background-color:#3b82f61a;color:#3b82f6;border:1px solid #3b82f6;animation:bluePulse 2s infinite}#chapters-editor-root .play-button:hover:not(:disabled),#chapters-editor-root .preview-button:hover:not(:disabled){color:inherit!important;transform:none!important;font-size:.875rem!important;width:auto!important;background:none!important}#chapters-editor-root .play-button svg,#chapters-editor-root .preview-button svg{height:1.5rem;width:1.5rem;flex-shrink:0}#chapters-editor-root .button-text{margin-left:.25rem}@media (max-width: 992px){#chapters-editor-root .button-group.secondary .button-text{display:none}}@media (max-width: 768px){#chapters-editor-root .flex-container.single-row{justify-content:space-between}#chapters-editor-root .button-group{gap:.5rem}#chapters-editor-root .preview-button,#chapters-editor-root .play-button{font-size:.875rem!important}}@media (max-width: 640px){#chapters-editor-root .editing-tools-container{padding:.75rem;overflow-x:hidden}#chapters-editor-root .preview-button{min-width:auto}#chapters-editor-root .full-text{display:none}#chapters-editor-root .short-text{display:inline;margin-left:.15rem}#chapters-editor-root .reset-text{display:none}#chapters-editor-root .button-group.play-buttons-group{flex:initial;justify-content:flex-start;flex-shrink:0}#chapters-editor-root .button-group.secondary{flex:initial;justify-content:flex-end;flex-shrink:0}#chapters-editor-root .button-group button{padding:.375rem;min-width:auto}#chapters-editor-root .button-group button svg{height:1.125rem;width:1.125rem;margin-right:.125rem}}@media (max-width: 576px){#chapters-editor-root .flex-container.single-row{justify-content:space-between;flex-wrap:nowrap;gap:10px}#chapters-editor-root .button-group.play-buttons-group{justify-content:flex-start;flex:0 0 auto}#chapters-editor-root .button-group.secondary{justify-content:flex-end;margin-left:auto}#chapters-editor-root .button-group button{padding:.25rem}#chapters-editor-root .divider{margin:0 .25rem}}@media (max-width: 480px){#chapters-editor-root .editing-tools-container{padding:.5rem}#chapters-editor-root .flex-container.single-row{gap:8px}#chapters-editor-root .button-group.play-buttons-group,#chapters-editor-root .button-group.secondary{gap:.25rem}#chapters-editor-root .divider{display:none}#chapters-editor-root .button-group button{padding:.125rem}#chapters-editor-root .button-group button svg{height:1rem;width:1rem;margin-right:0}#chapters-editor-root .button-text,#chapters-editor-root .reset-text{display:none}}@media (max-width: 640px) and (orientation: portrait){#chapters-editor-root .editing-tools-container{width:100%;box-sizing:border-box}#chapters-editor-root .flex-container.single-row{width:100%;padding:0;margin:0}#chapters-editor-root .button-group{max-width:50%}#chapters-editor-root .button-group.play-buttons-group{max-width:60%}#chapters-editor-root .button-group.secondary{max-width:40%}}#chapters-editor-root{@keyframes pulse-green{0%,to{background-color:#10b981}50%{background-color:#34d399}}}@media (hover: hover) and (pointer: fine){#chapters-editor-root [data-tooltip]{position:relative}#chapters-editor-root [data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:5px;background-color:#000c;color:#fff;text-align:center;padding:5px 10px;border-radius:3px;font-size:12px;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:1000;pointer-events:none}#chapters-editor-root [data-tooltip]:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:rgba(0,0,0,.8) transparent transparent transparent;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}#chapters-editor-root [data-tooltip]:hover:before,#chapters-editor-root [data-tooltip]:hover:after{opacity:1;visibility:visible}}@media (pointer: coarse){#chapters-editor-root [data-tooltip]:before,#chapters-editor-root [data-tooltip]:after{display:none!important;content:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important}}#chapters-editor-root .clip-segments-container{margin-top:1rem;background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .clip-segments-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}#chapters-editor-root .clip-segments-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333);margin:0}#chapters-editor-root .save-chapters-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background-color:#3b82f6;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease}#chapters-editor-root .save-chapters-button:hover{background-color:#2563eb;transform:translateY(-1px);box-shadow:0 4px 6px -1px #3b82f64d}#chapters-editor-root .save-chapters-button.has-changes{background-color:#10b981;animation:pulse-green 2s infinite}#chapters-editor-root .save-chapters-button.has-changes:hover{background-color:#059669}#chapters-editor-root .save-chapters-button svg{width:1rem;height:1rem}#chapters-editor-root .chapter-editor{background-color:#f8fafc;border:2px solid #3b82f6;border-radius:.5rem;padding:1rem;margin-bottom:1rem;transition:all .2s ease}#chapters-editor-root .chapter-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}#chapters-editor-root .chapter-editor-header h4{margin:0;font-size:.875rem;font-weight:600;color:#1f2937}#chapters-editor-root .chapter-editor-segment{font-size:.75rem;color:#6b7280;background-color:#e5e7eb;padding:.25rem .5rem;border-radius:.25rem}#chapters-editor-root .chapter-title-input{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}#chapters-editor-root .chapter-title-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}#chapters-editor-root .chapter-title-input::-moz-placeholder{color:#9ca3af}#chapters-editor-root .chapter-title-input::placeholder{color:#9ca3af}#chapters-editor-root .chapter-editor-info{margin-top:.5rem;font-size:.75rem;color:#6b7280;font-style:italic}#chapters-editor-root .segment-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border:1px solid #e5e7eb;border-radius:.25rem;margin-bottom:.5rem;transition:all .2s ease}#chapters-editor-root .segment-item:hover{box-shadow:0 4px 6px -1px #0000001a}#chapters-editor-root .segment-item.selected{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a;background-color:#3b82f60d}#chapters-editor-root .segment-content{display:flex;align-items:center}#chapters-editor-root .segment-info{display:flex;flex-direction:column}#chapters-editor-root .segment-title{font-weight:500;font-size:.875rem;color:#000}#chapters-editor-root .chapter-title{color:#1f2937;font-weight:600}#chapters-editor-root .default-title{color:#6b7280;font-style:italic}#chapters-editor-root .segment-time{font-size:.75rem;color:#000}#chapters-editor-root .segment-duration{font-size:.75rem;margin-top:.25rem;display:inline-block;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem;color:#000}#chapters-editor-root .segment-actions{display:flex;align-items:center;gap:.5rem}#chapters-editor-root .delete-button{padding:.375rem;color:#4b5563;background-color:#e5e7eb;border-radius:9999px;border:none;cursor:pointer;transition:background-color .2s,color .2s;min-width:auto}#chapters-editor-root .delete-button:hover{color:#000;background-color:#d1d5db}#chapters-editor-root .delete-button svg{height:1rem;width:1rem}#chapters-editor-root .empty-message{padding:1rem;text-align:center;color:#333333b3}#chapters-editor-root .segment-color-1{background-color:#3b82f626}#chapters-editor-root .segment-color-2{background-color:#10b98126}#chapters-editor-root .segment-color-3{background-color:#f59e0b26}#chapters-editor-root .segment-color-4{background-color:#ef444426}#chapters-editor-root .segment-color-5{background-color:#8b5cf626}#chapters-editor-root .segment-color-6{background-color:#ec489926}#chapters-editor-root .segment-color-7{background-color:#06b6d426}#chapters-editor-root .segment-color-8{background-color:#facc1526}@media (max-width: 768px){#chapters-editor-root .clip-segments-header{flex-direction:column;gap:.75rem;align-items:stretch}#chapters-editor-root .save-chapters-button{justify-content:center}#chapters-editor-root .chapter-editor-header{flex-direction:column;gap:.5rem;align-items:flex-start}#chapters-editor-root .chapter-editor-segment{align-self:stretch;text-align:center}}.mobile-play-prompt-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000000b3;display:flex;justify-content:center;align-items:center;z-index:1000;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.mobile-play-prompt{background-color:#fff;width:90%;max-width:400px;border-radius:12px;padding:25px;box-shadow:0 4px 20px #00000040;text-align:center}.mobile-play-prompt h3{margin:0 0 15px;font-size:20px;color:#333;font-weight:600}.mobile-play-prompt p{margin:0 0 15px;font-size:16px;color:#444;line-height:1.5}.mobile-prompt-instructions{margin:20px 0;text-align:left;background-color:#f8f9fa;padding:15px;border-radius:8px}.mobile-prompt-instructions p{margin:0 0 8px;font-size:15px;font-weight:500}.mobile-prompt-instructions ol{margin:0;padding-left:22px}.mobile-prompt-instructions li{margin-bottom:8px;font-size:14px;color:#333}.mobile-play-button{background-color:#007bff;color:#fff;border:none;border-radius:8px;padding:12px 25px;font-size:16px;font-weight:500;cursor:pointer;transition:background-color .2s;margin-top:5px;min-height:44px;min-width:200px}.mobile-play-button:hover{background-color:#0069d9}.mobile-play-button:active{background-color:#0062cc;transform:scale(.98)}@supports (-webkit-touch-callout: none){.mobile-play-button{padding:14px 25px}}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{border-color:hsl(var(--border))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-6xl{max-width:72rem}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.gap-4{gap:1rem}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.bg-background{background-color:hsl(var(--background))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.text-center{text-align:center}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.paused{animation-play-state:paused}:root{--foreground: 20 14.3% 4.1%;--muted: 60 4.8% 95.9%;--muted-foreground: 25 5.3% 44.7%;--popover: 0 0% 100%;--popover-foreground: 20 14.3% 4.1%;--card: 0 0% 100%;--card-foreground: 20 14.3% 4.1%;--border: 20 5.9% 90%;--input: 20 5.9% 90%;--primary: 207 90% 54%;--primary-foreground: 211 100% 99%;--secondary: 30 84% 54%;--secondary-foreground: 60 9.1% 97.8%;--accent: 60 4.8% 95.9%;--accent-foreground: 24 9.8% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 60 9.1% 97.8%;--ring: 20 14.3% 4.1%;--radius: .5rem}.video-player{position:relative;width:100%;background-color:#000;overflow:hidden;border-radius:.5rem}.video-controls{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.8),transparent);padding:1rem;display:flex;flex-direction:column}.video-current-time{color:#fff;font-weight:500}.video-progress{position:relative;height:4px;background-color:#ffffff4d;border-radius:2px;margin-bottom:1rem}.video-progress-fill{position:absolute;left:0;top:0;height:100%;background-color:hsl(var(--primary));border-radius:2px}.video-scrubber{position:absolute;width:12px;height:12px;margin-left:-6px;background-color:#fff;border-radius:50%;top:-4px}.video-player-container{position:relative;overflow:hidden}.play-pause-indicator{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:70px;height:70px;border-radius:50%;background-color:#00000080;z-index:20;opacity:0;transition:opacity .2s ease;pointer-events:none;background-position:center;background-repeat:no-repeat}.play-icon{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='white'%3E%3Cpath d='M8 5v14l11-7z'/%3E%3C/svg%3E")}.pause-icon{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='white'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z'/%3E%3C/svg%3E")}.video-player-container:hover .play-pause-indicator{opacity:1}.timeline-scroll-container{height:6rem;border-radius:.375rem;overflow-x:auto;overflow-y:hidden;margin-bottom:.75rem;background-color:#eee;position:relative}.timeline-container{position:relative;background-color:#eee;height:6rem;width:100%;cursor:pointer;transition:width .3s ease}.timeline-marker{position:absolute;top:-10px;height:calc(100% + 10px);width:2px;background-color:red;z-index:100;pointer-events:none;box-shadow:0 0 4px #ff000080}.trim-line-marker{position:absolute;top:0;bottom:0;width:2px;background-color:#007bffe6;z-index:10}.trim-handle{width:8px;background-color:#6c757de6;position:absolute;top:0;bottom:0;cursor:ew-resize;z-index:15}.trim-handle.left{left:-4px}.trim-handle.right{right:-4px}.split-point{position:absolute;width:2px;background-color:#6c757de6;top:0;bottom:0;z-index:5}.clip-segment{position:absolute;height:95%;top:0;border-radius:4px;background-size:cover;background-position:center;background-blend-mode:soft-light;box-shadow:0 2px 8px #0003;overflow:hidden;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:box-shadow .2s,transform .1s;z-index:15}.clip-segment:nth-child(odd),.segment-color-1,.segment-color-3,.segment-color-5,.segment-color-7{background-color:transparent;border:2px solid rgba(0,123,255,.9)}.clip-segment:nth-child(2n),.segment-color-2,.segment-color-4,.segment-color-6,.segment-color-8{background-color:transparent;border:2px solid rgba(108,117,125,.9)}.clip-segment:hover{box-shadow:0 4px 12px #0000004d;transform:translateY(-1px);filter:brightness(1.1)}.clip-segment:active{cursor:grabbing;box-shadow:0 2px 6px #0000004d;transform:translateY(0)}.clip-segment.selected{border-width:3px;box-shadow:0 4px 12px #0006;z-index:25;filter:brightness(1.2)}.clip-segment-info{background-color:#e2e6eae6;color:#000;padding:6px 8px;font-size:.7rem;position:absolute;top:0;left:0;width:100%;border-radius:4px 4px 0 0;z-index:2;display:flex;flex-direction:column;gap:2px}.clip-segment-name{font-weight:700;color:#000}.clip-segment-time{font-size:.65rem;color:#000}.clip-segment-duration{font-size:.65rem;color:#000;background:#b3d9ff66;padding:1px 4px;border-radius:2px;display:inline-block;margin-top:2px}.clip-segment-handle{position:absolute;width:8px;top:0;bottom:0;background-color:#6c757de6;cursor:ew-resize;z-index:20;display:flex;align-items:center;justify-content:center}.clip-segment-handle:after{content:"↔";color:#fff;font-size:12px;text-shadow:0 0 2px rgba(0,0,0,.8)}.clip-segment-handle.left{left:0}.clip-segment-handle.right{right:0}.clip-segment-handle:hover{background-color:#007bffe6;width:10px}input[type=range]{-webkit-appearance:none;height:6px;background:#e0e0e0;border-radius:3px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;height:16px;width:16px;border-radius:50%;background:#007bffe6;cursor:pointer}[data-tooltip]{position:relative;cursor:pointer}[data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;background-color:#000c;color:#fff;padding:5px 10px;border-radius:4px;font-size:.8rem;white-space:nowrap;z-index:1000;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}[data-tooltip]:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:rgba(0,0,0,.8) transparent transparent transparent;margin-bottom:0;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}@media (hover: hover) and (pointer: fine){[data-tooltip]:hover:before,[data-tooltip]:hover:after{opacity:1;visibility:visible}}@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}}button[disabled][data-tooltip]:before,button[disabled][data-tooltip]:after{opacity:.5}.tooltip-action-btn{position:relative}.tooltip-action-btn[data-tooltip]:before,.tooltip-action-btn[data-tooltip]:after{opacity:0;visibility:hidden;position:absolute;pointer-events:none;transition:all .3s ease}.tooltip-action-btn[data-tooltip]:before{content:attr(data-tooltip);background-color:#000c;color:#fff;font-size:12px;padding:4px 8px;border-radius:3px;white-space:nowrap;bottom:-35px;left:50%;transform:translate(-50%);z-index:9999}.tooltip-action-btn[data-tooltip]:after{content:"";border-width:5px;border-style:solid;border-color:transparent transparent rgba(0,0,0,.8) transparent;bottom:-15px;left:50%;transform:translate(-50%);z-index:9999}@media (hover: hover) and (pointer: fine){.tooltip-action-btn:hover[data-tooltip]:before,.tooltip-action-btn:hover[data-tooltip]:after{opacity:1;visibility:visible}}.segment-tooltip{background-color:#b3d9fff2;color:#000;border-radius:4px;padding:6px;min-width:140px;z-index:1000;box-shadow:0 3px 10px #0003}.segment-tooltip:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(179,217,255,.95)}.tooltip-time{font-size:.85rem;font-weight:700;text-align:center;margin-bottom:6px;color:#000}.tooltip-actions{display:flex;justify-content:space-between;gap:5px;position:relative}.tooltip-action-btn{background-color:#007bff33;border:none;border-radius:3px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:6px;transition:background-color .2s;min-width:20px!important}.tooltip-action-btn:hover{background-color:#007bff66}.tooltip-action-btn svg{width:100%;height:100%;stroke:currentColor}.tooltip-action-btn.set-in svg,.tooltip-action-btn.set-out svg{width:100%;height:100%;margin:0 auto;fill:currentColor;stroke:none}.empty-space-tooltip{background-color:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;padding:8px;z-index:50;min-width:120px;text-align:center;position:relative}.empty-space-tooltip:after{content:"";position:absolute;bottom:-8px;left:50%;transform:translate(-50%);border-width:8px 8px 0;border-style:solid;border-color:white transparent transparent}.tooltip-action-btn.new-segment{width:auto;padding:6px 10px;display:flex;align-items:center;gap:5px}.tooltip-btn-text{font-size:.8rem;white-space:nowrap;color:#000}.icon-new-segment{width:20px;height:20px}.zoom-dropdown-container{position:relative}.zoom-button{display:flex;align-items:center;gap:6px;background-color:#6c757dcc;color:#fff;border:none;border-radius:4px;padding:8px 12px;font-weight:500;cursor:pointer;transition:background-color .2s}.zoom-button:hover{background-color:#6c757d}.zoom-dropdown{background-color:#fff;border-radius:4px;box-shadow:0 2px 10px #00000026;max-height:300px;overflow-y:auto}.zoom-option{padding:8px 12px;cursor:pointer;display:flex;align-items:center;gap:5px}.zoom-option:hover{background-color:#007bff1a}.zoom-option.selected{background-color:#007bff33;font-weight:500}.save-button,.save-copy-button,.save-segments-button{background-color:#007bffcc;color:#fff;border:none;border-radius:4px;padding:8px 12px;font-weight:500;cursor:pointer;transition:background-color .2s}.save-button:hover,.save-copy-button:hover{background-color:#007bff}.save-copy-button{background-color:#6c757dcc}.save-copy-button:hover{background-color:#6c757d}.time-nav-label{font-weight:500;font-size:.9rem}.time-input{padding:6px 10px;border-radius:4px;border:1px solid #ccc;width:150px;font-family:monospace}.time-button-group{display:flex;gap:5px}.time-button{background-color:#6c757dcc;color:#fff;border:none;border-radius:4px;padding:6px 8px;font-size:.8rem;cursor:pointer;transition:background-color .2s}.time-button:hover{background-color:#6c757d}.timeline-controls{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;padding:12px;background-color:#f5f5f5;border-radius:6px;margin-top:15px}.time-navigation{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.controls-right{display:flex;align-items:center;gap:10px}@media (max-width: 768px){.timeline-controls{flex-direction:column;align-items:flex-start;gap:15px}.controls-right{margin-top:10px;width:100%;justify-content:flex-start;text-align:center;align-items:center;justify-content:center}}.timeline-header{display:flex;align-items:center;gap:20px;margin-bottom:10px;flex-wrap:wrap}.timeline-title{font-weight:700;margin-right:20px}.timeline-title-text{font-size:1.1rem}.current-time,.duration-time{white-space:nowrap}.time-code{font-family:monospace;font-weight:500}@media (max-width: 480px){.timeline-header{flex-direction:column;align-items:flex-start;gap:8px}.time-navigation{width:100%;flex-direction:column;align-items:flex-start;gap:10px}.time-button-group{width:100%;display:flex;justify-content:space-between;margin-top:10px}.controls-right{flex-wrap:wrap;gap:8px}.save-button,.save-copy-button{margin-top:8px;width:100%}.zoom-dropdown-container{width:100%}.zoom-button{width:100%;justify-content:center}}
+#chapters-editor-root{@keyframes pulse{0%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}to{opacity:.7;transform:scale(1)}}}#chapters-editor-root .video-player-container{position:relative;width:100%;background:#000;border-radius:.5rem;overflow:hidden;margin-bottom:1rem;aspect-ratio:16/9;-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .audio-poster-background{position:absolute;top:0;left:0;width:100%;height:100%;background-size:contain;background-position:center;background-repeat:no-repeat;z-index:1;pointer-events:none}#chapters-editor-root .video-player-container video{position:relative;width:100%;height:100%;cursor:pointer;z-index:2;transform:translateZ(0);-webkit-transform:translateZ(0);-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .video-player-container video.audio-with-poster{background:transparent}@supports (-webkit-touch-callout: none){#chapters-editor-root .video-player-container video{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}}#chapters-editor-root .play-pause-indicator{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:60px;height:60px;background-color:#0009;border-radius:50%;opacity:0;transition:opacity .3s;pointer-events:none;z-index:3}#chapters-editor-root .video-player-container:hover .play-pause-indicator{opacity:1}#chapters-editor-root .play-pause-indicator:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#chapters-editor-root .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}#chapters-editor-root .play-pause-indicator.pause-icon:before{width:20px;height:25px;border-left:6px solid white;border-right:6px solid white}#chapters-editor-root .ios-first-play-indicator{position:absolute;top:0;left:0;width:100%;height:100%;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10}#chapters-editor-root .ios-play-message{color:#fff;font-size:1.2rem;text-align:center;padding:1rem;background:#000c;border-radius:.5rem;animation:pulse 2s infinite}#chapters-editor-root .video-controls{position:absolute;bottom:0;left:0;right:0;padding:.75rem;background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .3s;z-index:3}#chapters-editor-root .video-player-container:hover .video-controls{opacity:1}#chapters-editor-root .video-current-time,#chapters-editor-root .video-duration{color:#fff;font-size:.875rem}#chapters-editor-root .video-time-display{display:flex;justify-content:space-between;margin-bottom:.5rem;color:#fff;font-size:.875rem}#chapters-editor-root .video-progress{position:relative;height:6px;background-color:#ffffff4d;border-radius:3px;cursor:pointer;margin:0 10px;touch-action:none;flex-grow:1}#chapters-editor-root .video-progress.dragging{height:8px}#chapters-editor-root .video-progress-fill{position:absolute;top:0;left:0;height:100%;background-color:red;border-radius:3px;pointer-events:none}#chapters-editor-root .video-scrubber{position:absolute;top:50%;transform:translate(-50%,-50%);width:16px;height:16px;background-color:red;border-radius:50%;cursor:grab;transition:transform .1s ease,width .1s ease,height .1s ease}#chapters-editor-root .video-progress.dragging .video-scrubber{transform:translate(-50%,-50%) scale(1.2);width:18px;height:18px;cursor:grabbing;box-shadow:0 0 8px #f009}@media (pointer: coarse){#chapters-editor-root .video-scrubber{width:20px;height:20px}#chapters-editor-root .video-progress.dragging .video-scrubber{width:24px;height:24px}#chapters-editor-root .video-scrubber:before{content:"";position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px}}#chapters-editor-root .video-controls-buttons{display:flex;align-items:center;justify-content:flex-end;gap:.75rem}#chapters-editor-root .mute-button,#chapters-editor-root .fullscreen-button{min-width:auto;color:#fff;background:none;border:none;cursor:pointer;padding:.25rem;transition:transform .2s}#chapters-editor-root .mute-button:hover,#chapters-editor-root .fullscreen-button:hover{transform:scale(1.1)}#chapters-editor-root .mute-button svg,#chapters-editor-root .fullscreen-button svg{width:1.25rem;height:1.25rem}#chapters-editor-root .video-time-tooltip{position:absolute;top:-30px;background-color:#000000b3;color:#fff;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 #0000004d}#chapters-editor-root .video-time-tooltip:after{content:"";position:absolute;bottom:-4px;left:50%;transform:translate(-50%);width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(0,0,0,.7)}#chapters-editor-root{@keyframes modal-fade-in{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes success-pop{0%{transform:scale(0);opacity:0}70%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:1}}@keyframes error-pop{0%{transform:scale(0);opacity:0}70%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:1}}}#chapters-editor-root .modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}#chapters-editor-root .modal-container{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;width:90%;max-width:500px;max-height:90vh;overflow-y:auto;animation:modal-fade-in .3s ease-out}#chapters-editor-root .modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #eee}#chapters-editor-root .modal-title{margin:0;font-size:1.25rem;font-weight:600;color:#333}#chapters-editor-root .modal-close-button{background:none;border:none;cursor:pointer;color:#666;padding:4px;display:flex;align-items:center;justify-content:center;transition:color .2s}#chapters-editor-root .modal-close-button:hover{color:#000}#chapters-editor-root .modal-content{padding:20px;color:#333;font-size:1rem;line-height:1.5;max-height:400px;overflow-y:auto}#chapters-editor-root .modal-actions{display:flex;justify-content:flex-end;padding:16px 20px;border-top:1px solid #eee;gap:12px}#chapters-editor-root .modal-button{padding:8px 16px;border-radius:4px;font-weight:500;cursor:pointer;transition:all .2s;border:none}#chapters-editor-root .modal-button-primary{background-color:#059669;color:#fff}#chapters-editor-root .modal-button-primary:hover{background-color:#059669}#chapters-editor-root .modal-button-secondary{background-color:#f0f0f0;color:#333}#chapters-editor-root .modal-button-secondary:hover{background-color:#e0e0e0}#chapters-editor-root .modal-button-danger{background-color:#dc3545;color:#fff}#chapters-editor-root .modal-button-danger:hover{background-color:#bd2130}#chapters-editor-root .modal-message{margin-bottom:16px;font-size:1rem}#chapters-editor-root .modal-spinner{display:flex;align-items:center;justify-content:center;margin:20px 0}#chapters-editor-root .spinner{border:4px solid rgba(0,0,0,.1);border-radius:50%;border-top:4px solid #059669;width:30px;height:30px;animation:spin 1s linear infinite}#chapters-editor-root .modal-success-icon{display:flex;justify-content:center;margin-bottom:16px;color:#28a745;font-size:2rem}#chapters-editor-root .modal-success-icon svg{width:60px;height:60px;color:#4caf50;animation:success-pop .5s ease-out}#chapters-editor-root .modal-error-icon{display:flex;justify-content:center;margin-bottom:16px;color:#dc3545;font-size:2rem}#chapters-editor-root .modal-error-icon svg{width:60px;height:60px;color:#f44336;animation:error-pop .5s ease-out}#chapters-editor-root .modal-choices{display:flex;flex-direction:column;gap:10px;margin-top:20px}#chapters-editor-root .modal-choice-button{padding:12px 16px;border:none;border-radius:4px;background-color:#059669;text-align:center;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;font-weight:500;text-decoration:none;color:#fff}#chapters-editor-root .modal-choice-button:hover{background-color:#05a;transform:translateY(-1px);box-shadow:0 2px 5px #0000001a}#chapters-editor-root .modal-choice-button svg{margin-right:8px}#chapters-editor-root .success-link{background-color:#4caf50}#chapters-editor-root .success-link:hover{background-color:#3d8b40}#chapters-editor-root .centered-choice{margin:0 auto;width:auto;min-width:220px;background-color:#059669;color:#fff}#chapters-editor-root .centered-choice:hover{background-color:#059669}@media (max-width: 480px){#chapters-editor-root .modal-container{width:95%}#chapters-editor-root .modal-actions{flex-direction:column}#chapters-editor-root .modal-button{width:100%}}#chapters-editor-root .error-message{color:#f44336;font-weight:500;background-color:#f443361a;padding:10px;border-radius:4px;border-left:4px solid #f44336;margin-top:10px}#chapters-editor-root .redirect-message{color:#555;font-size:.95rem;padding:0;margin:0}#chapters-editor-root .countdown{font-weight:700;color:#059669;font-size:1.1rem}#chapters-editor-root{@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}}#chapters-editor-root .timeline-header-container{margin-left:1rem;margin-top:-.5rem}#chapters-editor-root .timeline-header-title{font-size:1.125rem;font-weight:600;color:#059669;margin:0}#chapters-editor-root .timeline-container-card{background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .timeline-header{margin-bottom:.75rem;display:flex;justify-content:space-between;align-items:center;padding-bottom:.5rem;border-bottom:2px solid rgba(16,185,129,.2)}#chapters-editor-root .timeline-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333)}#chapters-editor-root .timeline-title-text{font-size:.875rem}#chapters-editor-root .current-time{font-size:.875rem;color:var(--foreground, #333)}#chapters-editor-root .time-code{font-family:monospace;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem}#chapters-editor-root .duration-time{font-size:.875rem;color:var(--foreground, #333)}#chapters-editor-root .timeline-scroll-container{position:relative;overflow:visible!important}#chapters-editor-root .timeline-container{position:relative;min-width:100%;background-color:#e2ede4;height:70px;border-radius:.25rem;overflow:visible!important;border:1px solid rgba(16,185,129,.2)}#chapters-editor-root .timeline-marker{position:absolute;height:82px;width:2px;background-color:#000;transform:translate(-50%);z-index:50;pointer-events:none}#chapters-editor-root .timeline-marker-head{position:absolute;top:-6px;left:50%;transform:translate(-50%);width:16px;height:16px;background-color:#ef4444;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;pointer-events:auto;z-index:51}#chapters-editor-root .timeline-marker-drag{position:absolute;bottom:-12px;left:50%;transform:translate(-50%);width:16px;height:16px;background-color:#4b5563;border-radius:50%;cursor:grab;display:flex;align-items:center;justify-content:center;pointer-events:auto;z-index:51}#chapters-editor-root .timeline-marker-drag.dragging{cursor:grabbing;background-color:#374151}#chapters-editor-root .timeline-marker-head-icon{color:#fff;font-size:14px;font-weight:700;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}#chapters-editor-root .timeline-marker-drag-icon{color:#fff;font-size:12px;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none;transform:rotate(90deg);display:inline-block}#chapters-editor-root .trim-line-marker{position:absolute;top:0;bottom:0;width:1px;background-color:#00000080;z-index:20}#chapters-editor-root .trim-handle{position:absolute;width:10px;height:20px;background-color:#000;cursor:ew-resize}#chapters-editor-root .trim-handle.left{right:0;top:10px;border-radius:3px 0 0 3px}#chapters-editor-root .trim-handle.right{left:0;top:10px;border-radius:0 3px 3px 0}#chapters-editor-root .timeline-thumbnail{display:inline-block;height:70px;border-right:1px solid rgba(0,0,0,.03)}#chapters-editor-root .split-point{position:absolute;top:0;bottom:0;width:1px;background-color:#ff000080;z-index:15}#chapters-editor-root .clip-segment{position:absolute;height:70px;border-radius:4px;z-index:10;border:2px solid rgba(0,0,0,.15);cursor:pointer}#chapters-editor-root .clip-segment:hover{box-shadow:0 0 0 2px #0000004d;border-color:#0006;background-color:#f0f0f0cc!important}#chapters-editor-root .clip-segment.selected{box-shadow:0 0 0 2px #3b82f6b3;border-color:#3b82f6e6}#chapters-editor-root .clip-segment.selected:hover{background-color:#f0f8ffd9!important}#chapters-editor-root .clip-segment-info{position:absolute;bottom:0;left:0;right:0;padding:.4rem;background-color:#10b98199;color:#fff;opacity:1;transition:background-color .2s;line-height:1.3}#chapters-editor-root .clip-segment:hover .clip-segment-info{background-color:#10b981b3}#chapters-editor-root .clip-segment.selected .clip-segment-info{background-color:#059669cc}#chapters-editor-root .clip-segment.selected:hover .clip-segment-info{background-color:#059669bf}#chapters-editor-root .clip-segment-name{font-weight:700;font-size:12px}#chapters-editor-root .clip-segment-time,#chapters-editor-root .clip-segment-duration{font-size:10px}#chapters-editor-root .clip-segment-handle{position:absolute;top:0;bottom:0;width:6px;background-color:#0003;cursor:ew-resize}#chapters-editor-root .clip-segment-handle:hover{background-color:#0006}#chapters-editor-root .clip-segment-handle.left{left:0;border-radius:2px 0 0 2px}#chapters-editor-root .clip-segment-handle.right{right:0;border-radius:0 2px 2px 0}@media (pointer: coarse){#chapters-editor-root .clip-segment-handle{width:14px;background-color:#0006}#chapters-editor-root .clip-segment-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:20px;background-color:#fffc;border-radius:1px}#chapters-editor-root .clip-segment-handle.left:after{box-shadow:-2px 0 #00000080}#chapters-editor-root .clip-segment-handle.right:after{box-shadow:2px 0 #00000080}#chapters-editor-root .clip-segment-handle:active{background-color:#0009}#chapters-editor-root .timeline-marker{height:85px}#chapters-editor-root .timeline-marker-head{width:24px;height:24px;top:-13px}#chapters-editor-root .timeline-marker-drag{width:24px;height:24px;bottom:-18px}#chapters-editor-root .timeline-marker-head.dragging{width:28px;height:28px;top:-15px}}#chapters-editor-root .segment-tooltip,#chapters-editor-root .empty-space-tooltip{position:absolute;background-color:#fff;border-radius:4px;box-shadow:0 2px 8px #0000004d;padding:.5rem;z-index:1000;min-width:150px;text-align:center;pointer-events:auto;top:-105px!important;transform:translateY(-10px)}#chapters-editor-root .segment-tooltip{top:-165px!important}#chapters-editor-root .segment-tooltip:after,#chapters-editor-root .empty-space-tooltip:after{content:"";position:absolute;bottom:-5px;left:50%;transform:translate(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid white}#chapters-editor-root .segment-tooltip:before,#chapters-editor-root .empty-space-tooltip:before{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.1);z-index:-1}#chapters-editor-root .tooltip-time{font-weight:600;font-size:.875rem;margin-bottom:.5rem;color:#333}#chapters-editor-root .tooltip-actions{display:flex;justify-content:center;gap:.5rem}#chapters-editor-root .tooltip-action-btn{background-color:#f3f4f6;border:none;border-radius:.25rem;padding:.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#4b5563;min-width:20px!important}#chapters-editor-root .tooltip-action-btn:hover{background-color:#e5e7eb;color:#111827}#chapters-editor-root .tooltip-action-btn.delete{color:#ef4444}#chapters-editor-root .tooltip-action-btn.delete:hover{background-color:#fee2e2}#chapters-editor-root .tooltip-action-btn.new-segment{padding:.375rem .5rem}#chapters-editor-root .tooltip-action-btn.new-segment .tooltip-btn-text{margin-left:.25rem;font-size:.75rem}#chapters-editor-root .tooltip-action-btn svg{width:1rem;height:1rem}#chapters-editor-root .timeline-controls{display:flex;align-items:center;justify-content:space-between;margin-top:.75rem}#chapters-editor-root .time-navigation{display:none;align-items:center;gap:.5rem}#chapters-editor-root .time-nav-label{font-size:.875rem;font-weight:500}#chapters-editor-root .time-input{border:1px solid #d1d5db;border-radius:.25rem;padding:.25rem .5rem;width:8rem;font-size:.875rem}#chapters-editor-root .time-button-group{display:flex}#chapters-editor-root .time-button{background-color:#e5e7eb;color:#000;padding:.25rem .5rem;font-size:.875rem;border:none;cursor:pointer;margin-right:.5rem}#chapters-editor-root .time-button:hover{background-color:#d1d5db}#chapters-editor-root .time-button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}#chapters-editor-root .time-button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}#chapters-editor-root .controls-right{display:flex;align-items:center;gap:.5rem;margin-left:auto}#chapters-editor-root .zoom-dropdown-container{position:relative;z-index:100;display:none}#chapters-editor-root .zoom-button{background-color:#374151;color:#fff;border:none;border-radius:.25rem;padding:.25rem .75rem;font-size:.875rem;display:flex;align-items:center;cursor:pointer}#chapters-editor-root .zoom-button:hover{background-color:#1f2937}#chapters-editor-root .zoom-button svg{margin-left:.25rem}#chapters-editor-root .zoom-dropdown{position:absolute;top:100%;left:0;margin-top:.25rem;width:9rem;background-color:#374151;color:#fff;border-radius:.25rem;box-shadow:0 4px 6px -1px #0000001a;z-index:50;max-height:300px;overflow-y:auto}#chapters-editor-root .zoom-option{padding:.25rem .75rem;cursor:pointer}#chapters-editor-root .zoom-option:hover{background-color:#4b5563}#chapters-editor-root .zoom-option.selected{background-color:#6b7280;display:flex;align-items:center}#chapters-editor-root .zoom-option svg{margin-right:.25rem}#chapters-editor-root .save-buttons-row{display:flex;align-items:center;gap:.5rem;margin:0;flex-wrap:nowrap}#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{color:#fff;background:#059669;border-radius:.25rem;font-size:.75rem;padding:.25rem .5rem;cursor:pointer;border:none;white-space:nowrap;transition:background-color .2s;min-width:-moz-fit-content;min-width:fit-content}#chapters-editor-root .save-button:hover,#chapters-editor-root .save-copy-button:hover,#chapters-editor-root .save-segments-button:hover{background-color:#0056b3}@media (max-width: 576px){#chapters-editor-root .save-buttons-row{width:100%;justify-content:space-between;gap:.5rem}#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{flex:1;font-size:.7rem;padding:.25rem .35rem}}@media (max-width: 480px){#chapters-editor-root .save-button,#chapters-editor-root .save-copy-button,#chapters-editor-root .save-segments-button{font-size:.675rem;padding:.25rem}#chapters-editor-root .controls-right,#chapters-editor-root .controls-right button{margin:0}}#chapters-editor-root .modal-success-content,#chapters-editor-root .modal-error-content{display:flex;flex-direction:column;align-items:center;padding:1rem;text-align:center;padding:0;margin:0}#chapters-editor-root .modal-success-icon,#chapters-editor-root .modal-error-icon{margin-bottom:1rem}#chapters-editor-root .modal-success-icon svg{color:#4caf50;animation:fadeIn .5s ease-in-out}#chapters-editor-root .modal-error-icon svg{color:#f44336;animation:fadeIn .5s ease-in-out}#chapters-editor-root .success-link{background-color:#4caf50;color:#fff;transition:background-color .3s}#chapters-editor-root .success-link:hover{background-color:#388e3c}#chapters-editor-root .error-message{color:#f44336;font-weight:500}#chapters-editor-root .modal-spinner{display:flex;justify-content:center;margin:2rem 0}#chapters-editor-root .spinner{width:50px;height:50px;border:5px solid rgba(0,0,0,.1);border-radius:50%;border-top-color:#059669;animation:spin 1s ease-in-out infinite}#chapters-editor-root .auto-save-spinner{animation:spin 1s linear infinite}#chapters-editor-root .text-center{text-align:center}#chapters-editor-root .modal-message{margin-bottom:1rem;line-height:1.5}#chapters-editor-root .modal-choice-button{display:flex;align-items:center;justify-content:center;padding:.75rem 1.25rem;background-color:#059669;color:#fff;border-radius:4px;text-decoration:none;margin:0 auto;cursor:pointer;font-weight:500;gap:.5rem;border:none;transition:background-color .3s}#chapters-editor-root .modal-choice-button:hover{background-color:#077754}#chapters-editor-root .modal-choice-button svg{flex-shrink:0}#chapters-editor-root .centered-choice{margin:0 auto;min-width:180px}.mobile-timeline-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:50;display:flex;justify-content:center;align-items:center;border-radius:.5rem;pointer-events:none}.mobile-timeline-message{background-color:#000c;border-radius:8px;padding:15px 25px;text-align:center;max-width:80%;animation:pulse 2s infinite}.mobile-timeline-message p{color:#fff;font-size:16px;margin:0 0 15px;font-weight:500}.mobile-play-icon{width:0;height:0;border-top:15px solid transparent;border-bottom:15px solid transparent;border-left:25px solid white;margin:0 auto}@keyframes pulse{0%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}to{opacity:.7;transform:scale(1)}}.segments-playback-mode .tooltip-time-btn,.segments-playback-mode .tooltip-action-btn.play,.segments-playback-mode .tooltip-action-btn.pause{opacity:1;cursor:pointer}.segments-playback-mode .tooltip-time-btn[disabled],.segments-playback-mode .tooltip-action-btn[disabled]{opacity:.5!important;cursor:not-allowed!important}.segments-playback-mode [data-tooltip][disabled]:hover:before,.segments-playback-mode [data-tooltip][disabled]:hover:after{opacity:1!important;visibility:visible!important}.segments-playback-message{display:flex;align-items:center;background-color:#3b82f61a;color:#3b82f6;padding:6px 12px;border-radius:4px;font-weight:600;font-size:.875rem;animation:pulse 2s infinite}.segments-playback-message svg{height:1.25rem;width:1.25rem;margin-right:.5rem;color:#3b82f6}.chapter-editor{background-color:#f8fafc;border:2px solid #3b82f6;border-radius:.5rem;padding:1rem;margin-bottom:1rem;transition:all .2s ease}.chapter-editor-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.75rem;gap:1rem}.chapter-editor-title-section{display:flex;flex-direction:column;gap:.5rem;flex:1}.chapter-editor-header h4{margin:0;font-size:.875rem;font-weight:600;color:#1f2937}.chapter-editor-segment{font-size:.75rem;color:#6b7280;background-color:#e5e7eb;padding:.25rem .5rem;border-radius:.25rem;display:inline-block}.save-chapters-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background-color:#3b82f6;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap;flex-shrink:0}.save-chapters-button:hover{background-color:#2563eb;box-shadow:0 4px 6px -1px #3b82f64d}.save-chapters-button.has-changes{background-color:#10b981;animation:pulse-green-chapters 2s infinite}.save-chapters-button.has-changes:hover{background-color:#059669}.save-chapters-button svg{width:1rem;height:1rem}@keyframes pulse-green-chapters{0%,to{background-color:#10b981}50%{background-color:#34d399}}.chapter-title-input{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}.chapter-title-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.chapter-title-input::-moz-placeholder{color:#9ca3af}.chapter-title-input::placeholder{color:#9ca3af}.chapter-editor-info{margin-top:.5rem;font-size:.75rem;color:#6b7280;font-style:italic}@media (max-width: 768px){.chapter-editor-header{flex-direction:column;gap:.75rem;align-items:stretch}.save-chapters-button{justify-content:center;align-self:stretch}.chapter-editor-segment{text-align:center}}.tooltip-chapter-editor{background-color:#fffffff2;border-radius:.375rem;pointer-events:auto}textarea.tooltip-chapter-input{width:100%;padding:.5rem;border:2px solid #ccc;border-radius:.25rem;background-color:#fff;color:#000;font-size:.75rem;resize:none;outline:none;box-sizing:border-box;height:55px!important;max-height:55px!important;min-height:55px!important}textarea.tooltip-chapter-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f64d}textarea.tooltip-chapter-input::-moz-placeholder{color:#999}textarea.tooltip-chapter-input::placeholder{color:#999}.two-row-tooltip{display:flex;flex-direction:column;background-color:#fff;padding:6px;border-radius:4px;box-shadow:0 2px 8px #00000026;position:relative;z-index:3000}.tooltip-time-btn[data-tooltip="Decrease by 100ms"],.tooltip-time-btn[data-tooltip="Increase by 100ms"]{display:none!important}.tooltip-row{display:flex;justify-content:space-between;align-items:center;gap:3px}.tooltip-row:first-child{margin-bottom:6px}.tooltip-time-btn{background-color:#f0f0f0!important;border:none!important;border-radius:4px!important;padding:4px 8px!important;font-size:.75rem!important;font-weight:500!important;color:#333!important;cursor:pointer!important;transition:background-color .2s!important;min-width:20px!important}.tooltip-time-btn:hover{background-color:#e0e0e0!important}.tooltip-time-display{font-family:monospace!important;font-size:.875rem!important;font-weight:600!important;color:#333!important;padding:4px 6px!important;background-color:#f7f7f7!important;border-radius:4px!important;min-width:100px!important;text-align:center!important;overflow:hidden!important}.tooltip-time-display.disabled{pointer-events:none!important;cursor:not-allowed!important;opacity:.6!important;user-select:none!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important}.tooltip-time-btn.disabled[data-tooltip]:hover:before,.tooltip-time-btn.disabled[data-tooltip]:hover:after,.tooltip-action-btn.disabled[data-tooltip]:hover:before,.tooltip-action-btn.disabled[data-tooltip]:hover:after{opacity:1!important;visibility:visible!important}.tooltip-actions{display:flex;justify-content:space-between;align-items:center;gap:3px;position:relative;z-index:2500;margin-top:5px}.tooltip-action-btn{background-color:#f3f4f6;border:none;border-radius:4px;padding:5px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#4b5563;width:26px;height:26px;min-width:20px!important;position:relative}.tooltip-action-btn[data-tooltip]:before{content:attr(data-tooltip);position:absolute;height:30px;top:35px;left:50%;transform:translate(-50%);margin-left:0;background-color:#000000d9;color:#fff;text-align:left;padding:6px 12px;border-radius:4px;box-shadow:0 2px 8px #0003;font-size:12px;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:2500;pointer-events:none}.tooltip-action-btn[data-tooltip]:after{content:"";position:absolute;top:35px;left:50%;transform:translate(-50%);border-width:4px;border-style:solid;border-color:rgba(0,0,0,.85) transparent transparent transparent;margin-left:0;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:2500;pointer-events:none}@media (hover: hover) and (pointer: fine){.tooltip-action-btn[data-tooltip]:hover:before,.tooltip-action-btn[data-tooltip]:hover:after{opacity:1;visibility:visible}}@media (pointer: coarse){.tooltip-action-btn[data-tooltip]:before,.tooltip-action-btn[data-tooltip]:after{display:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important;content:none!important}}.tooltip-action-btn:hover{background-color:#e5e7eb;color:#111827}.tooltip-action-btn.delete{color:#ef4444}.tooltip-action-btn.delete:hover{background-color:#fee2e2}.tooltip-action-btn.play{color:#10b981}.tooltip-action-btn.play:hover{background-color:#d1fae5}.tooltip-action-btn.pause{color:#3b82f6}.tooltip-action-btn.pause:hover{background-color:#dbeafe}.tooltip-action-btn.play-from-start{color:#4f46e5}.tooltip-action-btn.play-from-start:hover{background-color:#e0e7ff}.tooltip-action-btn svg{width:16px;height:16px}.tooltip-action-btn.new-segment{width:auto;height:auto;padding:6px 10px;display:flex;flex-direction:row;color:#10b981}.tooltip-action-btn.new-segment:hover{background-color:#d1fae5}.tooltip-action-btn.new-segment .tooltip-btn-text{margin-left:6px;font-size:.75rem;white-space:nowrap}.tooltip-action-btn.disabled{opacity:.5;cursor:not-allowed;background-color:#f3f4f6}.tooltip-action-btn.disabled:hover{background-color:#f3f4f6;color:#9ca3af}.tooltip-action-btn.disabled svg{color:#9ca3af}.tooltip-action-btn.disabled .tooltip-btn-text{color:#9ca3af}.tooltip-action-btn.pause.disabled{color:#9ca3af!important;opacity:.5;cursor:not-allowed}.tooltip-action-btn.pause.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-action-btn.play.disabled{color:#9ca3af!important;opacity:.5;cursor:not-allowed}.tooltip-action-btn.play.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-time-btn.disabled{opacity:.5!important;cursor:not-allowed!important;background-color:#f3f4f6!important;color:#9ca3af!important}.tooltip-time-btn.disabled:hover{background-color:#f3f4f6!important;color:#9ca3af!important}@media (max-width: 768px){.two-row-tooltip{padding:4px}.tooltip-row:first-child{margin-bottom:4px}.tooltip-time-btn{min-width:20px!important;font-size:.7rem!important;padding:3px 6px!important}.tooltip-time-display{font-size:.8rem!important;padding:3px 4px!important;min-width:90px!important}.tooltip-action-btn{width:24px;height:24px;padding:4px}.tooltip-action-btn.new-segment{padding:4px 8px}.tooltip-action-btn svg{width:14px;height:14px}.tooltip-action-btn[data-tooltip]:before{min-width:100px;font-size:11px;padding:4px 8px;height:24px;top:33px}.tooltip-action-btn[data-tooltip]:after{top:33px}}#chapters-editor-root{@keyframes bluePulse{0%{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}to{box-shadow:0 0 #3b82f600}}@keyframes pulse{0%{opacity:.8}50%{opacity:1}to{opacity:.8}}}#chapters-editor-root .editing-tools-container{background-color:#fff;border-radius:.5rem;padding:1rem;margin-bottom:2.5rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .flex-container{display:flex;justify-content:space-between;align-items:center;position:relative;gap:15px;width:100%}#chapters-editor-root .flex-container.single-row{flex-wrap:nowrap}#chapters-editor-root .full-text{display:inline}#chapters-editor-root .short-text{display:none}#chapters-editor-root .reset-text{display:inline}#chapters-editor-root .button-group{display:flex;align-items:center}#chapters-editor-root .button-group.play-buttons-group{gap:.75rem;justify-content:flex-start;flex:0 0 auto}#chapters-editor-root .button-group.secondary{gap:.75rem;align-items:center;justify-content:flex-end;margin-left:auto}#chapters-editor-root .button-group button{display:flex;align-items:center;color:#333;background:none;border:none;cursor:pointer;min-width:auto}#chapters-editor-root .button-group button:hover:not(:disabled){color:inherit}#chapters-editor-root .button-group button:disabled{opacity:.5;cursor:not-allowed}#chapters-editor-root .button-group button svg{height:1.25rem;width:1.25rem;margin-right:.25rem}#chapters-editor-root .divider{border-right:1px solid #d1d5db;height:1.5rem;margin:0 .5rem}#chapters-editor-root .play-button,#chapters-editor-root .preview-button{font-weight:600;display:flex;align-items:center;position:relative;overflow:hidden;min-width:80px;justify-content:center;font-size:.875rem!important}#chapters-editor-root .play-button.greyed-out{opacity:.5;cursor:not-allowed}#chapters-editor-root .segments-button.highlighted-stop{background-color:#3b82f61a;color:#3b82f6;border:1px solid #3b82f6;animation:bluePulse 2s infinite}#chapters-editor-root .play-button:hover:not(:disabled),#chapters-editor-root .preview-button:hover:not(:disabled){color:inherit!important;transform:none!important;font-size:.875rem!important;width:auto!important;background:none!important}#chapters-editor-root .play-button svg,#chapters-editor-root .preview-button svg{height:1.5rem;width:1.5rem;flex-shrink:0}#chapters-editor-root .button-text{margin-left:.25rem}@media (max-width: 992px){#chapters-editor-root .button-group.secondary .button-text{display:none}}@media (max-width: 768px){#chapters-editor-root .flex-container.single-row{justify-content:space-between}#chapters-editor-root .button-group{gap:.5rem}#chapters-editor-root .preview-button,#chapters-editor-root .play-button{font-size:.875rem!important}}@media (max-width: 640px){#chapters-editor-root .editing-tools-container{padding:.75rem;overflow-x:hidden}#chapters-editor-root .preview-button{min-width:auto}#chapters-editor-root .full-text{display:none}#chapters-editor-root .short-text{display:inline;margin-left:.15rem}#chapters-editor-root .reset-text{display:none}#chapters-editor-root .button-group.play-buttons-group{flex:initial;justify-content:flex-start;flex-shrink:0}#chapters-editor-root .button-group.secondary{flex:initial;justify-content:flex-end;flex-shrink:0}#chapters-editor-root .button-group button{padding:.375rem;min-width:auto}#chapters-editor-root .button-group button svg{height:1.125rem;width:1.125rem;margin-right:.125rem}}@media (max-width: 576px){#chapters-editor-root .flex-container.single-row{justify-content:space-between;flex-wrap:nowrap;gap:10px}#chapters-editor-root .button-group.play-buttons-group{justify-content:flex-start;flex:0 0 auto}#chapters-editor-root .button-group.secondary{justify-content:flex-end;margin-left:auto}#chapters-editor-root .button-group button{padding:.25rem}#chapters-editor-root .divider{margin:0 .25rem}}@media (max-width: 480px){#chapters-editor-root .editing-tools-container{padding:.5rem}#chapters-editor-root .flex-container.single-row{gap:8px}#chapters-editor-root .button-group.play-buttons-group,#chapters-editor-root .button-group.secondary{gap:.25rem}#chapters-editor-root .divider{display:none}#chapters-editor-root .button-group button{padding:.125rem}#chapters-editor-root .button-group button svg{height:1rem;width:1rem;margin-right:0}#chapters-editor-root .button-text,#chapters-editor-root .reset-text{display:none}}@media (max-width: 640px) and (orientation: portrait){#chapters-editor-root .editing-tools-container{width:100%;box-sizing:border-box}#chapters-editor-root .flex-container.single-row{width:100%;padding:0;margin:0}#chapters-editor-root .button-group{max-width:50%}#chapters-editor-root .button-group.play-buttons-group{max-width:60%}#chapters-editor-root .button-group.secondary{max-width:40%}}#chapters-editor-root{@keyframes pulse-green{0%,to{background-color:#10b981}50%{background-color:#34d399}}}@media (hover: hover) and (pointer: fine){#chapters-editor-root [data-tooltip]{position:relative}#chapters-editor-root [data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:5px;background-color:#000c;color:#fff;text-align:center;padding:5px 10px;border-radius:3px;font-size:12px;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;z-index:1000;pointer-events:none}#chapters-editor-root [data-tooltip]:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:rgba(0,0,0,.8) transparent transparent transparent;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}#chapters-editor-root [data-tooltip]:hover:before,#chapters-editor-root [data-tooltip]:hover:after{opacity:1;visibility:visible}}@media (pointer: coarse){#chapters-editor-root [data-tooltip]:before,#chapters-editor-root [data-tooltip]:after{display:none!important;content:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important}}#chapters-editor-root .clip-segments-container{margin-top:1rem;background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#chapters-editor-root .clip-segments-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}#chapters-editor-root .clip-segments-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333);margin-bottom:.75rem}#chapters-editor-root .save-chapters-button{color:#fff;background:#059669;border-radius:.25rem;font-size:.75rem;padding:.25rem .5rem;cursor:pointer;border:none;white-space:nowrap;transition:background-color .2s;min-width:-moz-fit-content;min-width:fit-content}#chapters-editor-root .save-chapters-button:hover{background-color:#059669;box-shadow:0 4px 6px -1px #0596694d}#chapters-editor-root .save-chapters-button.has-changes{background-color:#10b981;animation:pulse-green 2s infinite}#chapters-editor-root .save-chapters-button.has-changes:hover{background-color:#059669}#chapters-editor-root .save-chapters-button svg{width:1rem;height:1rem}#chapters-editor-root .chapter-editor{background-color:#f8fafc;border:2px solid #3b82f6;border-radius:.5rem;padding:1rem;margin-bottom:1rem;transition:all .2s ease}#chapters-editor-root .chapter-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}#chapters-editor-root .chapter-editor-header h4{margin:0;font-size:.875rem;font-weight:600;color:#1f2937}#chapters-editor-root .chapter-editor-segment{font-size:.75rem;color:#6b7280;background-color:#e5e7eb;padding:.25rem .5rem;border-radius:.25rem}#chapters-editor-root .chapter-title-input{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}#chapters-editor-root .chapter-title-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}#chapters-editor-root .chapter-title-input::-moz-placeholder{color:#9ca3af}#chapters-editor-root .chapter-title-input::placeholder{color:#9ca3af}#chapters-editor-root .chapter-editor-info{margin-top:.5rem;font-size:.75rem;color:#6b7280;font-style:italic}#chapters-editor-root .segment-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border:1px solid #e5e7eb;border-radius:.25rem;margin-bottom:.5rem;transition:all .2s ease}#chapters-editor-root .segment-item:hover{box-shadow:0 4px 6px -1px #0000001a}#chapters-editor-root .segment-item.selected{border-color:#059669;box-shadow:0 0 0 3px #0596691a;background-color:#0596690d}#chapters-editor-root .segment-content{display:flex;align-items:center}#chapters-editor-root .segment-info{display:flex;flex-direction:column}#chapters-editor-root .segment-title{font-weight:500;font-size:.875rem;color:#000}#chapters-editor-root .chapter-title{color:#1f2937;font-weight:600}#chapters-editor-root .default-title{color:#6b7280;font-style:italic}#chapters-editor-root .segment-time{font-size:.75rem;color:#000}#chapters-editor-root .segment-duration{font-size:.75rem;margin-top:.25rem;display:inline-block;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem;color:#000}#chapters-editor-root .segment-actions{display:flex;align-items:center;gap:.5rem}#chapters-editor-root .delete-button{padding:.375rem;color:#4b5563;background-color:#e5e7eb;border-radius:9999px;border:none;cursor:pointer;transition:background-color .2s,color .2s;min-width:auto}#chapters-editor-root .delete-button:hover{color:#000;background-color:#d1d5db}#chapters-editor-root .delete-button svg{height:1rem;width:1rem}#chapters-editor-root .empty-message{padding:1rem;text-align:center;color:#333333b3}#chapters-editor-root .segment-color-1{background-color:#a7f3d033}#chapters-editor-root .segment-color-2{background-color:#86efac33}#chapters-editor-root .segment-color-3{background-color:#65eb8833}#chapters-editor-root .segment-color-4{background-color:#44e76433}#chapters-editor-root .segment-color-5{background-color:#23e34033}#chapters-editor-root .segment-color-6{background-color:#14cf3633}#chapters-editor-root .segment-color-7{background-color:#0fbb3033}#chapters-editor-root .segment-color-8{background-color:#0aa72a33}#chapters-editor-root .segment-color-9{background-color:#05966933}#chapters-editor-root .segment-color-10{background-color:#04875f33}#chapters-editor-root .segment-color-11{background-color:#03785533}#chapters-editor-root .segment-color-12{background-color:#02694b33}#chapters-editor-root .segment-color-13{background-color:#025a4133}#chapters-editor-root .segment-color-14{background-color:#014b3733}#chapters-editor-root .segment-color-15{background-color:#01423033}#chapters-editor-root .segment-color-16{background-color:#01392933}#chapters-editor-root .segment-color-17{background-color:#01302233}#chapters-editor-root .segment-color-18{background-color:#00271b33}#chapters-editor-root .segment-color-19{background-color:#001e1433}#chapters-editor-root .segment-color-20{background-color:#00150d33}@media (max-width: 768px){#chapters-editor-root .clip-segments-header{flex-direction:column;gap:.75rem;align-items:stretch}#chapters-editor-root .save-chapters-button{justify-content:center}#chapters-editor-root .chapter-editor-header{flex-direction:column;gap:.5rem;align-items:flex-start}#chapters-editor-root .chapter-editor-segment{align-self:stretch;text-align:center}}.mobile-play-prompt-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000000b3;display:flex;justify-content:center;align-items:center;z-index:1000;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.mobile-play-prompt{background-color:#fff;width:90%;max-width:400px;border-radius:12px;padding:25px;box-shadow:0 4px 20px #00000040;text-align:center}.mobile-play-prompt h3{margin:0 0 15px;font-size:20px;color:#333;font-weight:600}.mobile-play-prompt p{margin:0 0 15px;font-size:16px;color:#444;line-height:1.5}.mobile-prompt-instructions{margin:20px 0;text-align:left;background-color:#f8f9fa;padding:15px;border-radius:8px}.mobile-prompt-instructions p{margin:0 0 8px;font-size:15px;font-weight:500}.mobile-prompt-instructions ol{margin:0;padding-left:22px}.mobile-prompt-instructions li{margin-bottom:8px;font-size:14px;color:#333}.mobile-play-button{background-color:#007bff;color:#fff;border:none;border-radius:8px;padding:12px 25px;font-size:16px;font-weight:500;cursor:pointer;transition:background-color .2s;margin-top:5px;min-height:44px;min-width:200px}.mobile-play-button:hover{background-color:#0069d9}.mobile-play-button:active{background-color:#0062cc;transform:scale(.98)}@supports (-webkit-touch-callout: none){.mobile-play-button{padding:14px 25px}}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{border-color:hsl(var(--border))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-6xl{max-width:72rem}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.gap-4{gap:1rem}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.bg-background{background-color:hsl(var(--background))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.text-center{text-align:center}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.paused{animation-play-state:paused}:root{--foreground: 20 14.3% 4.1%;--muted: 60 4.8% 95.9%;--muted-foreground: 25 5.3% 44.7%;--popover: 0 0% 100%;--popover-foreground: 20 14.3% 4.1%;--card: 0 0% 100%;--card-foreground: 20 14.3% 4.1%;--border: 20 5.9% 90%;--input: 20 5.9% 90%;--primary: 207 90% 54%;--primary-foreground: 211 100% 99%;--secondary: 30 84% 54%;--secondary-foreground: 60 9.1% 97.8%;--accent: 60 4.8% 95.9%;--accent-foreground: 24 9.8% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 60 9.1% 97.8%;--ring: 20 14.3% 4.1%;--radius: .5rem}.video-player{position:relative;width:100%;background-color:#000;overflow:hidden;border-radius:.5rem}.video-controls{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.8),transparent);padding:1rem;display:flex;flex-direction:column}.video-current-time{color:#fff;font-weight:500}.video-progress{position:relative;height:4px;background-color:#ffffff4d;border-radius:2px;margin-bottom:1rem}.video-progress-fill{position:absolute;left:0;top:0;height:100%;background-color:hsl(var(--primary));border-radius:2px}.video-scrubber{position:absolute;width:12px;height:12px;margin-left:-6px;background-color:#fff;border-radius:50%;top:-4px}.video-player-container{position:relative;overflow:hidden}.play-pause-indicator{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:70px;height:70px;border-radius:50%;background-color:#00000080;z-index:20;opacity:0;transition:opacity .2s ease;pointer-events:none;background-position:center;background-repeat:no-repeat}.play-icon{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='white'%3E%3Cpath d='M8 5v14l11-7z'/%3E%3C/svg%3E")}.pause-icon{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='36' height='36' fill='white'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z'/%3E%3C/svg%3E")}.video-player-container:hover .play-pause-indicator{opacity:1}.timeline-scroll-container{height:6rem;border-radius:.375rem;overflow-x:auto;overflow-y:hidden;margin-bottom:.75rem;background-color:#eee;position:relative}.timeline-container{position:relative;background-color:#eee;height:6rem;width:100%;cursor:pointer;transition:width .3s ease}.timeline-marker{position:absolute;top:-10px;height:calc(100% + 10px);width:2px;background-color:red;z-index:100;pointer-events:none;box-shadow:0 0 4px #ff000080}.trim-line-marker{position:absolute;top:0;bottom:0;width:2px;background-color:#007bffe6;z-index:10}.trim-handle{width:8px;background-color:#6c757de6;position:absolute;top:0;bottom:0;cursor:ew-resize;z-index:15}.trim-handle.left{left:-4px}.trim-handle.right{right:-4px}.split-point{position:absolute;width:2px;background-color:#6c757de6;top:0;bottom:0;z-index:5}.clip-segment{position:absolute;height:95%;top:0;border-radius:4px;background-size:cover;background-position:center;background-blend-mode:soft-light;box-shadow:0 2px 8px #0003;overflow:hidden;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:box-shadow .2s,transform .1s;z-index:15}.clip-segment:nth-child(odd),.segment-color-1,.segment-color-3,.segment-color-5,.segment-color-7{background-color:transparent;border:2px solid rgba(0,123,255,.9)}.clip-segment:nth-child(2n),.segment-color-2,.segment-color-4,.segment-color-6,.segment-color-8{background-color:transparent;border:2px solid rgba(108,117,125,.9)}.clip-segment:hover{box-shadow:0 4px 12px #0000004d;transform:translateY(-1px);filter:brightness(1.1)}.clip-segment:active{cursor:grabbing;box-shadow:0 2px 6px #0000004d;transform:translateY(0)}.clip-segment.selected{border-width:3px;box-shadow:0 4px 12px #0006;z-index:25;filter:brightness(1.2)}.clip-segment-info{background-color:#e2e6eae6;color:#000;padding:6px 8px;font-size:.7rem;position:absolute;top:0;left:0;width:100%;border-radius:4px 4px 0 0;z-index:2;display:flex;flex-direction:column;gap:2px}.clip-segment-name{font-weight:700;color:#000}.clip-segment-time{font-size:.65rem;color:#000}.clip-segment-duration{font-size:.65rem;color:#000;background:#b3d9ff66;padding:1px 4px;border-radius:2px;display:inline-block;margin-top:2px}.clip-segment-handle{position:absolute;width:8px;top:0;bottom:0;background-color:#6c757de6;cursor:ew-resize;z-index:20;display:flex;align-items:center;justify-content:center}.clip-segment-handle:after{content:"↔";color:#fff;font-size:12px;text-shadow:0 0 2px rgba(0,0,0,.8)}.clip-segment-handle.left{left:0}.clip-segment-handle.right{right:0}.clip-segment-handle:hover{background-color:#007bffe6;width:10px}input[type=range]{-webkit-appearance:none;height:6px;background:#e0e0e0;border-radius:3px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;height:16px;width:16px;border-radius:50%;background:#007bffe6;cursor:pointer}[data-tooltip]{position:relative;cursor:pointer}[data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;background-color:#000c;color:#fff;padding:5px 10px;border-radius:4px;font-size:.8rem;white-space:nowrap;z-index:1000;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}[data-tooltip]:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border-width:5px;border-style:solid;border-color:rgba(0,0,0,.8) transparent transparent transparent;margin-bottom:0;opacity:0;visibility:hidden;transition:opacity .2s,visibility .2s;pointer-events:none}@media (hover: hover) and (pointer: fine){[data-tooltip]:hover:before,[data-tooltip]:hover:after{opacity:1;visibility:visible}}@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}}button[disabled][data-tooltip]:before,button[disabled][data-tooltip]:after{opacity:.5}.tooltip-action-btn{position:relative}.tooltip-action-btn[data-tooltip]:before,.tooltip-action-btn[data-tooltip]:after{opacity:0;visibility:hidden;position:absolute;pointer-events:none;transition:all .3s ease}.tooltip-action-btn[data-tooltip]:before{content:attr(data-tooltip);background-color:#000c;color:#fff;font-size:12px;padding:4px 8px;border-radius:3px;white-space:nowrap;bottom:-35px;left:50%;transform:translate(-50%);z-index:9999}.tooltip-action-btn[data-tooltip]:after{content:"";border-width:5px;border-style:solid;border-color:transparent transparent rgba(0,0,0,.8) transparent;bottom:-15px;left:50%;transform:translate(-50%);z-index:9999}@media (hover: hover) and (pointer: fine){.tooltip-action-btn:hover[data-tooltip]:before,.tooltip-action-btn:hover[data-tooltip]:after{opacity:1;visibility:visible}}.segment-tooltip{background-color:#b3d9fff2;color:#000;border-radius:4px;padding:6px;min-width:140px;z-index:1000;box-shadow:0 3px 10px #0003}.segment-tooltip:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(179,217,255,.95)}.tooltip-time{font-size:.85rem;font-weight:700;text-align:center;margin-bottom:6px;color:#000}.tooltip-actions{display:flex;justify-content:space-between;gap:5px;position:relative}.tooltip-action-btn{background-color:#007bff33;border:none;border-radius:3px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:6px;transition:background-color .2s;min-width:20px!important}.tooltip-action-btn:hover{background-color:#007bff66}.tooltip-action-btn svg{width:100%;height:100%;stroke:currentColor}.tooltip-action-btn.set-in svg,.tooltip-action-btn.set-out svg{width:100%;height:100%;margin:0 auto;fill:currentColor;stroke:none}.empty-space-tooltip{background-color:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;padding:8px;z-index:50;min-width:120px;text-align:center;position:relative}.empty-space-tooltip:after{content:"";position:absolute;bottom:-8px;left:50%;transform:translate(-50%);border-width:8px 8px 0;border-style:solid;border-color:white transparent transparent}.tooltip-action-btn.new-segment{width:auto;padding:6px 10px;display:flex;align-items:center;gap:5px}.tooltip-btn-text{font-size:.8rem;white-space:nowrap;color:#000}.icon-new-segment{width:20px;height:20px}.zoom-dropdown-container{position:relative}.zoom-button{display:flex;align-items:center;gap:6px;background-color:#6c757dcc;color:#fff;border:none;border-radius:4px;padding:8px 12px;font-weight:500;cursor:pointer;transition:background-color .2s}.zoom-button:hover{background-color:#6c757d}.zoom-dropdown{background-color:#fff;border-radius:4px;box-shadow:0 2px 10px #00000026;max-height:300px;overflow-y:auto}.zoom-option{padding:8px 12px;cursor:pointer;display:flex;align-items:center;gap:5px}.zoom-option:hover{background-color:#007bff1a}.zoom-option.selected{background-color:#007bff33;font-weight:500}.save-button,.save-copy-button,.save-segments-button{background-color:#007bffcc;color:#fff;border:none;border-radius:4px;padding:8px 12px;font-weight:500;cursor:pointer;transition:background-color .2s}.save-button:hover,.save-copy-button:hover{background-color:#007bff}.save-copy-button{background-color:#6c757dcc}.save-copy-button:hover{background-color:#6c757d}.time-nav-label{font-weight:500;font-size:.9rem}.time-input{padding:6px 10px;border-radius:4px;border:1px solid #ccc;width:150px;font-family:monospace}.time-button-group{display:flex;gap:5px}.time-button{background-color:#6c757dcc;color:#fff;border:none;border-radius:4px;padding:6px 8px;font-size:.8rem;cursor:pointer;transition:background-color .2s}.time-button:hover{background-color:#6c757d}.timeline-controls{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;padding:12px;background-color:#f5f5f5;border-radius:6px;margin-top:15px}.time-navigation{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.controls-right{display:flex;align-items:center;gap:10px}@media (max-width: 768px){.timeline-controls{flex-direction:column;align-items:flex-start;gap:15px}.controls-right{margin-top:10px;width:100%;justify-content:flex-start;text-align:center;align-items:center;justify-content:center}}.timeline-header{display:flex;align-items:center;gap:20px;margin-bottom:10px;flex-wrap:wrap}.timeline-title{font-weight:700;margin-right:20px}.timeline-title-text{font-size:1.1rem}.current-time,.duration-time{white-space:nowrap}.time-code{font-family:monospace;font-weight:500}@media (max-width: 480px){.timeline-header{flex-direction:column;align-items:flex-start;gap:8px}.time-navigation{width:100%;flex-direction:column;align-items:flex-start;gap:10px}.time-button-group{width:100%;display:flex;justify-content:space-between;margin-top:10px}.controls-right{flex-wrap:wrap;gap:8px}.save-button,.save-copy-button{margin-top:8px;width:100%}.zoom-dropdown-container{width:100%}.zoom-button{width:100%;justify-content:center}}
diff --git a/static/chapters_editor/chapters-editor.js b/static/chapters_editor/chapters-editor.js
index b82273e5..aca2df0b 100644
--- a/static/chapters_editor/chapters-editor.js
+++ b/static/chapters_editor/chapters-editor.js
@@ -1,4 +1,4 @@
-(function(){"use strict";var up={exports:{}},_s={exports:{}},rl={exports:{}};rl.exports;var sp;function Fw(){return sp||(sp=1,function(B,b){/**
+(function(){"use strict";var up={exports:{}},_s={exports:{}},ol={exports:{}};ol.exports;var sp;function Fw(){return sp||(sp=1,function(B,v){/**
* @license React
* react.development.js
*
@@ -6,29 +6,29 @@
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var _="18.3.1",MA=Symbol.for("react.element"),KA=Symbol.for("react.portal"),z=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),De=Symbol.for("react.profiler"),cA=Symbol.for("react.provider"),dA=Symbol.for("react.context"),ce=Symbol.for("react.forward_ref"),tA=Symbol.for("react.suspense"),qA=Symbol.for("react.suspense_list"),iA=Symbol.for("react.memo"),pA=Symbol.for("react.lazy"),aA=Symbol.for("react.offscreen"),Xe=Symbol.iterator,ge="@@iterator";function ZA(u){if(u===null||typeof u!="object")return null;var d=Xe&&u[Xe]||u[ge];return typeof d=="function"?d:null}var LA={current:null},Ae={transition:null},Q={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},PA={current:null},V={},Ke=null;function HA(u){Ke=u}V.setExtraStackFrame=function(u){Ke=u},V.getCurrentStack=null,V.getStackAddendum=function(){var u="";Ke&&(u+=Ke);var d=V.getCurrentStack;return d&&(u+=d()||""),u};var fe=!1,Ye=!1,RA=!1,O=!1,te=!1,$={ReactCurrentDispatcher:LA,ReactCurrentBatchConfig:Ae,ReactCurrentOwner:PA};$.ReactDebugCurrentFrame=V,$.ReactCurrentActQueue=Q;function de(u){{for(var d=arguments.length,U=new Array(d>1?d-1:0),v=1;v1?d-1:0),v=1;v1){for(var Je=Array(Qe),ke=0;ke1){for(var ae=Array(ke),At=0;At is not supported and will be removed in a future major release. Did you mean to render instead?")),d.Provider},set:function(CA){d.Provider=CA}},_currentValue:{get:function(){return d._currentValue},set:function(CA){d._currentValue=CA}},_currentValue2:{get:function(){return d._currentValue2},set:function(CA){d._currentValue2=CA}},_threadCount:{get:function(){return d._threadCount},set:function(CA){d._threadCount=CA}},Consumer:{get:function(){return U||(U=!0,yA("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),d.Consumer}},displayName:{get:function(){return d.displayName},set:function(CA){X||(de("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",CA),X=!0)}}}),d.Consumer=FA}return d._currentRenderer=null,d._currentRenderer2=null,d}var yt=-1,gt=0,$t=1,Ai=2;function Ta(u){if(u._status===yt){var d=u._result,U=d();if(U.then(function(FA){if(u._status===gt||u._status===yt){var CA=u;CA._status=$t,CA._result=FA}},function(FA){if(u._status===gt||u._status===yt){var CA=u;CA._status=Ai,CA._result=FA}}),u._status===yt){var v=u;v._status=gt,v._result=U}}if(u._status===$t){var X=u._result;return X===void 0&&yA(`lazy: Expected the result of a dynamic import() call. Instead received: %s
+ */(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var P="18.3.1",LA=Symbol.for("react.element"),bA=Symbol.for("react.portal"),z=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),Ke=Symbol.for("react.profiler"),cA=Symbol.for("react.provider"),mA=Symbol.for("react.context"),ye=Symbol.for("react.forward_ref"),tA=Symbol.for("react.suspense"),KA=Symbol.for("react.suspense_list"),AA=Symbol.for("react.memo"),CA=Symbol.for("react.lazy"),_=Symbol.for("react.offscreen"),Pe=Symbol.iterator,ue="@@iterator";function NA(u){if(u===null||typeof u!="object")return null;var d=Pe&&u[Pe]||u[ue];return typeof d=="function"?d:null}var kA={current:null},XA={transition:null},L={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},HA={current:null},X={},Le=null;function Ee(u){Le=u}X.setExtraStackFrame=function(u){Le=u},X.getCurrentStack=null,X.getStackAddendum=function(){var u="";Le&&(u+=Le);var d=X.getCurrentStack;return d&&(u+=d()||""),u};var $A=!1,Ue=!1,xA=!1,O=!1,Ae=!1,aA={ReactCurrentDispatcher:kA,ReactCurrentBatchConfig:XA,ReactCurrentOwner:HA};aA.ReactDebugCurrentFrame=X,aA.ReactCurrentActQueue=L;function se(u){{for(var d=arguments.length,U=new Array(d>1?d-1:0),F=1;F1?d-1:0),F=1;F1){for(var Oe=Array(We),Xe=0;Xe1){for(var le=Array(Xe),it=0;it is not supported and will be removed in a future major release. Did you mean to render instead?")),d.Provider},set:function(gA){d.Provider=gA}},_currentValue:{get:function(){return d._currentValue},set:function(gA){d._currentValue=gA}},_currentValue2:{get:function(){return d._currentValue2},set:function(gA){d._currentValue2=gA}},_threadCount:{get:function(){return d._threadCount},set:function(gA){d._threadCount=gA}},Consumer:{get:function(){return U||(U=!0,dA("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),d.Consumer}},displayName:{get:function(){return d.displayName},set:function(gA){k||(se("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",gA),k=!0)}}}),d.Consumer=QA}return d._currentRenderer=null,d._currentRenderer2=null,d}var Ei=-1,ei=0,ti=1,Ut=2;function Ti(u){if(u._status===Ei){var d=u._result,U=d();if(U.then(function(QA){if(u._status===ei||u._status===Ei){var gA=u;gA._status=ti,gA._result=QA}},function(QA){if(u._status===ei||u._status===Ei){var gA=u;gA._status=Ut,gA._result=QA}}),u._status===Ei){var F=u;F._status=ei,F._result=U}}if(u._status===ti){var k=u._result;return k===void 0&&dA(`lazy: Expected the result of a dynamic import() call. Instead received: %s
Your code should look like:
const MyComponent = lazy(() => import('./MyComponent'))
-Did you accidentally put curly braces around the import?`,X),"default"in X||yA(`lazy: Expected the result of a dynamic import() call. Instead received: %s
+Did you accidentally put curly braces around the import?`,k),"default"in k||dA(`lazy: Expected the result of a dynamic import() call. Instead received: %s
Your code should look like:
- const MyComponent = lazy(() => import('./MyComponent'))`,X),X.default}else throw u._result}function Ra(u){var d={_status:yt,_result:u},U={$$typeof:pA,_payload:d,_init:Ta};{var v,X;Object.defineProperties(U,{defaultProps:{configurable:!0,get:function(){return v},set:function(FA){yA("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),v=FA,Object.defineProperty(U,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return X},set:function(FA){yA("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),X=FA,Object.defineProperty(U,"propTypes",{enumerable:!0})}}})}return U}function La(u){u!=null&&u.$$typeof===iA?yA("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof u!="function"?yA("forwardRef requires a render function but was given %s.",u===null?"null":typeof u):u.length!==0&&u.length!==2&&yA("forwardRef render functions accept exactly two parameters: props and ref. %s",u.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),u!=null&&(u.defaultProps!=null||u.propTypes!=null)&&yA("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var d={$$typeof:ce,render:u};{var U;Object.defineProperty(d,"displayName",{enumerable:!1,configurable:!0,get:function(){return U},set:function(v){U=v,!u.name&&!u.displayName&&(u.displayName=v)}})}return d}var y;y=Symbol.for("react.module.reference");function W(u){return!!(typeof u=="string"||typeof u=="function"||u===z||u===De||te||u===s||u===tA||u===qA||O||u===aA||fe||Ye||RA||typeof u=="object"&&u!==null&&(u.$$typeof===pA||u.$$typeof===iA||u.$$typeof===cA||u.$$typeof===dA||u.$$typeof===ce||u.$$typeof===y||u.getModuleId!==void 0))}function H(u,d){W(u)||yA("memo: The first argument must be a component. Instead received: %s",u===null?"null":typeof u);var U={$$typeof:iA,type:u,compare:d===void 0?null:d};{var v;Object.defineProperty(U,"displayName",{enumerable:!1,configurable:!0,get:function(){return v},set:function(X){v=X,!u.name&&!u.displayName&&(u.displayName=X)}})}return U}function mA(){var u=LA.current;return u===null&&yA(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
+ const MyComponent = lazy(() => import('./MyComponent'))`,k),k.default}else throw u._result}function La(u){var d={_status:Ei,_result:u},U={$$typeof:CA,_payload:d,_init:Ti};{var F,k;Object.defineProperties(U,{defaultProps:{configurable:!0,get:function(){return F},set:function(QA){dA("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),F=QA,Object.defineProperty(U,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return k},set:function(QA){dA("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),k=QA,Object.defineProperty(U,"propTypes",{enumerable:!0})}}})}return U}function Ni(u){u!=null&&u.$$typeof===AA?dA("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof u!="function"?dA("forwardRef requires a render function but was given %s.",u===null?"null":typeof u):u.length!==0&&u.length!==2&&dA("forwardRef render functions accept exactly two parameters: props and ref. %s",u.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),u!=null&&(u.defaultProps!=null||u.propTypes!=null)&&dA("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var d={$$typeof:ye,render:u};{var U;Object.defineProperty(d,"displayName",{enumerable:!1,configurable:!0,get:function(){return U},set:function(F){U=F,!u.name&&!u.displayName&&(u.displayName=F)}})}return d}var p;p=Symbol.for("react.module.reference");function W(u){return!!(typeof u=="string"||typeof u=="function"||u===z||u===Ke||Ae||u===s||u===tA||u===KA||O||u===_||$A||Ue||xA||typeof u=="object"&&u!==null&&(u.$$typeof===CA||u.$$typeof===AA||u.$$typeof===cA||u.$$typeof===mA||u.$$typeof===ye||u.$$typeof===p||u.getModuleId!==void 0))}function eA(u,d){W(u)||dA("memo: The first argument must be a component. Instead received: %s",u===null?"null":typeof u);var U={$$typeof:AA,type:u,compare:d===void 0?null:d};{var F;Object.defineProperty(U,"displayName",{enumerable:!1,configurable:!0,get:function(){return F},set:function(k){F=k,!u.name&&!u.displayName&&(u.displayName=k)}})}return U}function hA(){var u=kA.current;return u===null&&dA(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
-See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),u}function ie(u){var d=mA();if(u._context!==void 0){var U=u._context;U.Consumer===u?yA("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):U.Provider===u&&yA("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return d.useContext(u)}function p(u){var d=mA();return d.useState(u)}function x(u,d,U){var v=mA();return v.useReducer(u,d,U)}function C(u){var d=mA();return d.useRef(u)}function S(u,d){var U=mA();return U.useEffect(u,d)}function R(u,d){var U=mA();return U.useInsertionEffect(u,d)}function q(u,d){var U=mA();return U.useLayoutEffect(u,d)}function w(u,d){var U=mA();return U.useCallback(u,d)}function G(u,d){var U=mA();return U.useMemo(u,d)}function Y(u,d,U){var v=mA();return v.useImperativeHandle(u,d,U)}function wA(u,d){{var U=mA();return U.useDebugValue(u,d)}}function EA(){var u=mA();return u.useTransition()}function vA(u){var d=mA();return d.useDeferredValue(u)}function me(){var u=mA();return u.useId()}function _e(u,d,U){var v=mA();return v.useSyncExternalStore(u,d,U)}var ft=0,Ut,Ua,Qi,Dt,ra,qt,ze;function ei(){}ei.__reactDisabledLog=!0;function la(){{if(ft===0){Ut=console.log,Ua=console.info,Qi=console.warn,Dt=console.error,ra=console.group,qt=console.groupCollapsed,ze=console.groupEnd;var u={configurable:!0,enumerable:!0,value:ei,writable:!0};Object.defineProperties(console,{info:u,log:u,warn:u,error:u,group:u,groupCollapsed:u,groupEnd:u})}ft++}}function Gi(){{if(ft--,ft===0){var u={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:QA({},u,{value:Ut}),info:QA({},u,{value:Ua}),warn:QA({},u,{value:Qi}),error:QA({},u,{value:Dt}),group:QA({},u,{value:ra}),groupCollapsed:QA({},u,{value:qt}),groupEnd:QA({},u,{value:ze})})}ft<0&&yA("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var oa=$.ReactCurrentDispatcher,Jt;function mi(u,d,U){{if(Jt===void 0)try{throw Error()}catch(X){var v=X.stack.trim().match(/\n( *(at )?)/);Jt=v&&v[1]||""}return`
-`+Jt+u}}var ua=!1,en;{var st=typeof WeakMap=="function"?WeakMap:Map;en=new st}function Le(u,d){if(!u||ua)return"";{var U=en.get(u);if(U!==void 0)return U}var v;ua=!0;var X=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var FA;FA=oa.current,oa.current=null,la();try{if(d){var CA=function(){throw Error()};if(Object.defineProperty(CA.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(CA,[])}catch(ht){v=ht}Reflect.construct(u,[],CA)}else{try{CA.call()}catch(ht){v=ht}u.call(CA.prototype)}}else{try{throw Error()}catch(ht){v=ht}u()}}catch(ht){if(ht&&v&&typeof ht.stack=="string"){for(var JA=ht.stack.split(`
-`),le=v.stack.split(`
-`),Qe=JA.length-1,Je=le.length-1;Qe>=1&&Je>=0&&JA[Qe]!==le[Je];)Je--;for(;Qe>=1&&Je>=0;Qe--,Je--)if(JA[Qe]!==le[Je]){if(Qe!==1||Je!==1)do if(Qe--,Je--,Je<0||JA[Qe]!==le[Je]){var ke=`
-`+JA[Qe].replace(" at new "," at ");return u.displayName&&ke.includes("")&&(ke=ke.replace("",u.displayName)),typeof u=="function"&&en.set(u,ke),ke}while(Qe>=1&&Je>=0);break}}}finally{ua=!1,oa.current=FA,Gi(),Error.prepareStackTrace=X}var ae=u?u.displayName||u.name:"",At=ae?mi(ae):"";return typeof u=="function"&&en.set(u,At),At}function bi(u,d,U){return Le(u,!1)}function Vi(u){var d=u.prototype;return!!(d&&d.isReactComponent)}function zi(u,d,U){if(u==null)return"";if(typeof u=="function")return Le(u,Vi(u));if(typeof u=="string")return mi(u);switch(u){case tA:return mi("Suspense");case qA:return mi("SuspenseList")}if(typeof u=="object")switch(u.$$typeof){case ce:return bi(u.render);case iA:return zi(u.type,d,U);case pA:{var v=u,X=v._payload,FA=v._init;try{return zi(FA(X),d,U)}catch{}}}return""}var ko={},ol=$.ReactDebugCurrentFrame;function Ee(u){if(u){var d=u._owner,U=zi(u.type,u._source,d?d.type:null);ol.setExtraStackFrame(U)}else ol.setExtraStackFrame(null)}function tc(u,d,U,v,X){{var FA=Function.call.bind(AA);for(var CA in u)if(FA(u,CA)){var JA=void 0;try{if(typeof u[CA]!="function"){var le=Error((v||"React class")+": "+U+" type `"+CA+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof u[CA]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw le.name="Invariant Violation",le}JA=u[CA](d,CA,v,U,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(Qe){JA=Qe}JA&&!(JA instanceof Error)&&(Ee(X),yA("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",v||"React class",U,CA,typeof JA),Ee(null)),JA instanceof Error&&!(JA.message in ko)&&(ko[JA.message]=!0,Ee(X),yA("Failed %s type: %s",U,JA.message),Ee(null))}}}function Da(u){if(u){var d=u._owner,U=zi(u.type,u._source,d?d.type:null);HA(U)}else HA(null)}var OA;OA=!1;function ul(){if(PA.current){var u=rA(PA.current.type);if(u)return`
+See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),u}function _A(u){var d=hA();if(u._context!==void 0){var U=u._context;U.Consumer===u?dA("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):U.Provider===u&&dA("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return d.useContext(u)}function qA(u){var d=hA();return d.useState(u)}function ne(u,d,U){var F=hA();return F.useReducer(u,d,U)}function ee(u){var d=hA();return d.useRef(u)}function y(u,d){var U=hA();return U.useEffect(u,d)}function T(u,d){var U=hA();return U.useInsertionEffect(u,d)}function w(u,d){var U=hA();return U.useLayoutEffect(u,d)}function E(u,d){var U=hA();return U.useCallback(u,d)}function Q(u,d){var U=hA();return U.useMemo(u,d)}function Y(u,d,U){var F=hA();return F.useImperativeHandle(u,d,U)}function C(u,d){{var U=hA();return U.useDebugValue(u,d)}}function b(){var u=hA();return u.useTransition()}function Z(u){var d=hA();return d.useDeferredValue(u)}function GA(){var u=hA();return u.useId()}function ke(u,d,U){var F=hA();return F.useSyncExternalStore(u,d,U)}var te=0,Fe,$e,kt,Dt,Ua,Oi,Bt;function Xi(){}Xi.__reactDisabledLog=!0;function Mt(){{if(te===0){Fe=console.log,$e=console.info,kt=console.warn,Dt=console.error,Ua=console.group,Oi=console.groupCollapsed,Bt=console.groupEnd;var u={configurable:!0,enumerable:!0,value:Xi,writable:!0};Object.defineProperties(console,{info:u,log:u,warn:u,error:u,group:u,groupCollapsed:u,groupEnd:u})}te++}}function Be(){{if(te--,te===0){var u={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:UA({},u,{value:Fe}),info:UA({},u,{value:$e}),warn:UA({},u,{value:kt}),error:UA({},u,{value:Dt}),group:UA({},u,{value:Ua}),groupCollapsed:UA({},u,{value:Oi}),groupEnd:UA({},u,{value:Bt})})}te<0&&dA("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ot=aA.ReactCurrentDispatcher,Ri;function Mn(u,d,U){{if(Ri===void 0)try{throw Error()}catch(k){var F=k.stack.trim().match(/\n( *(at )?)/);Ri=F&&F[1]||""}return`
+`+Ri+u}}var ca=!1,pi;{var Li=typeof WeakMap=="function"?WeakMap:Map;pi=new Li}function en(u,d){if(!u||ca)return"";{var U=pi.get(u);if(U!==void 0)return U}var F;ca=!0;var k=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var QA;QA=Ot.current,Ot.current=null,Mt();try{if(d){var gA=function(){throw Error()};if(Object.defineProperty(gA.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(gA,[])}catch(mt){F=mt}Reflect.construct(u,[],gA)}else{try{gA.call()}catch(mt){F=mt}u.call(gA.prototype)}}else{try{throw Error()}catch(mt){F=mt}u()}}catch(mt){if(mt&&F&&typeof mt.stack=="string"){for(var VA=mt.stack.split(`
+`),he=F.stack.split(`
+`),We=VA.length-1,Oe=he.length-1;We>=1&&Oe>=0&&VA[We]!==he[Oe];)Oe--;for(;We>=1&&Oe>=0;We--,Oe--)if(VA[We]!==he[Oe]){if(We!==1||Oe!==1)do if(We--,Oe--,Oe<0||VA[We]!==he[Oe]){var Xe=`
+`+VA[We].replace(" at new "," at ");return u.displayName&&Xe.includes("")&&(Xe=Xe.replace("",u.displayName)),typeof u=="function"&&pi.set(u,Xe),Xe}while(We>=1&&Oe>=0);break}}}finally{ca=!1,Ot.current=QA,Be(),Error.prepareStackTrace=k}var le=u?u.displayName||u.name:"",it=le?Mn(le):"";return typeof u=="function"&&pi.set(u,it),it}function Qn(u,d,U){return en(u,!1)}function ft(u){var d=u.prototype;return!!(d&&d.isReactComponent)}function xe(u,d,U){if(u==null)return"";if(typeof u=="function")return en(u,ft(u));if(typeof u=="string")return Mn(u);switch(u){case tA:return Mn("Suspense");case KA:return Mn("SuspenseList")}if(typeof u=="object")switch(u.$$typeof){case ye:return Qn(u.render);case AA:return xe(u.type,d,U);case CA:{var F=u,k=F._payload,QA=F._init;try{return xe(QA(k),d,U)}catch{}}}return""}var Hi={},Ui=aA.ReactDebugCurrentFrame;function ce(u){if(u){var d=u._owner,U=xe(u.type,u._source,d?d.type:null);Ui.setExtraStackFrame(U)}else Ui.setExtraStackFrame(null)}function tc(u,d,U,F,k){{var QA=Function.call.bind(nA);for(var gA in u)if(QA(u,gA)){var VA=void 0;try{if(typeof u[gA]!="function"){var he=Error((F||"React class")+": "+U+" type `"+gA+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof u[gA]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw he.name="Invariant Violation",he}VA=u[gA](d,gA,F,U,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(We){VA=We}VA&&!(VA instanceof Error)&&(ce(k),dA("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",F||"React class",U,gA,typeof VA),ce(null)),VA instanceof Error&&!(VA.message in Hi)&&(Hi[VA.message]=!0,ce(k),dA("Failed %s type: %s",U,VA.message),ce(null))}}}function Da(u){if(u){var d=u._owner,U=xe(u.type,u._source,d?d.type:null);Ee(U)}else Ee(null)}var JA;JA=!1;function sl(){if(HA.current){var u=I(HA.current.type);if(u)return`
-Check the render method of \``+u+"`."}return""}function ti(u){if(u!==void 0){var d=u.fileName.replace(/^.*[\\\/]/,""),U=u.lineNumber;return`
+Check the render method of \``+u+"`."}return""}function ii(u){if(u!==void 0){var d=u.fileName.replace(/^.*[\\\/]/,""),U=u.lineNumber;return`
-Check your code at `+d+":"+U+"."}return""}function Mn(u){return u!=null?ti(u.__source):""}var tn={};function ic(u){var d=ul();if(!d){var U=typeof u=="string"?u:u.displayName||u.name;U&&(d=`
+Check your code at `+d+":"+U+"."}return""}function bn(u){return u!=null?ii(u.__source):""}var tn={};function ic(u){var d=sl();if(!d){var U=typeof u=="string"?u:u.displayName||u.name;U&&(d=`
-Check the top-level render call using <`+U+">.")}return d}function Bt(u,d){if(!(!u._store||u._store.validated||u.key!=null)){u._store.validated=!0;var U=ic(d);if(!tn[U]){tn[U]=!0;var v="";u&&u._owner&&u._owner!==PA.current&&(v=" It was passed a child from "+rA(u._owner.type)+"."),Da(u),yA('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',U,v),Da(null)}}}function $e(u,d){if(typeof u=="object"){if(at(u))for(var U=0;U ",X=" Did you accidentally export a JSX literal instead of a component?"):CA=typeof u,yA("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",CA,X)}var JA=jA.apply(this,arguments);if(JA==null)return JA;if(v)for(var le=2;le10&&de("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),v._updatedFibers.clear()}}}var cl=!1,or=null;function nc(u){if(or===null)try{var d=("require"+Math.random()).slice(0,7),U=B&&B[d];or=U.call(B,"timers").setImmediate}catch{or=function(X){cl===!1&&(cl=!0,typeof MessageChannel>"u"&&yA("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var FA=new MessageChannel;FA.port1.onmessage=X,FA.port2.postMessage(void 0)}}return or(u)}var an=0,Qn=!1;function hl(u){{var d=an;an++,Q.current===null&&(Q.current=[]);var U=Q.isBatchingLegacy,v;try{if(Q.isBatchingLegacy=!0,v=u(),!U&&Q.didScheduleLegacyUpdate){var X=Q.current;X!==null&&(Q.didScheduleLegacyUpdate=!1,cr(X))}}catch(ae){throw Ba(d),ae}finally{Q.isBatchingLegacy=U}if(v!==null&&typeof v=="object"&&typeof v.then=="function"){var FA=v,CA=!1,JA={then:function(ae,At){CA=!0,FA.then(function(ht){Ba(d),an===0?ur(ht,ae,At):ae(ht)},function(ht){Ba(d),At(ht)})}};return!Qn&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){CA||(Qn=!0,yA("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),JA}else{var le=v;if(Ba(d),an===0){var Qe=Q.current;Qe!==null&&(cr(Qe),Q.current=null);var Je={then:function(ae,At){Q.current===null?(Q.current=[],ur(le,ae,At)):ae(le)}};return Je}else{var ke={then:function(ae,At){ae(le)}};return ke}}}}function Ba(u){u!==an-1&&yA("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),an=u}function ur(u,d,U){{var v=Q.current;if(v!==null)try{cr(v),nc(function(){v.length===0?(Q.current=null,d(u)):ur(u,d,U)})}catch(X){U(X)}else d(u)}}var sr=!1;function cr(u){if(!sr){sr=!0;var d=0;try{for(;d.")}return d}function Qt(u,d){if(!(!u._store||u._store.validated||u.key!=null)){u._store.validated=!0;var U=ic(d);if(!tn[U]){tn[U]=!0;var F="";u&&u._owner&&u._owner!==HA.current&&(F=" It was passed a child from "+I(u._owner.type)+"."),Da(u),dA('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',U,F),Da(null)}}}function tt(u,d){if(typeof u=="object"){if(lt(u))for(var U=0;U ",k=" Did you accidentally export a JSX literal instead of a component?"):gA=typeof u,dA("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",gA,k)}var VA=MA.apply(this,arguments);if(VA==null)return VA;if(F)for(var he=2;he10&&se("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),F._updatedFibers.clear()}}}var hl=!1,sr=null;function nc(u){if(sr===null)try{var d=("require"+Math.random()).slice(0,7),U=B&&B[d];sr=U.call(B,"timers").setImmediate}catch{sr=function(k){hl===!1&&(hl=!0,typeof MessageChannel>"u"&&dA("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var QA=new MessageChannel;QA.port1.onmessage=k,QA.port2.postMessage(void 0)}}return sr(u)}var an=0,vn=!1;function ml(u){{var d=an;an++,L.current===null&&(L.current=[]);var U=L.isBatchingLegacy,F;try{if(L.isBatchingLegacy=!0,F=u(),!U&&L.didScheduleLegacyUpdate){var k=L.current;k!==null&&(L.didScheduleLegacyUpdate=!1,mr(k))}}catch(le){throw Ba(d),le}finally{L.isBatchingLegacy=U}if(F!==null&&typeof F=="object"&&typeof F.then=="function"){var QA=F,gA=!1,VA={then:function(le,it){gA=!0,QA.then(function(mt){Ba(d),an===0?cr(mt,le,it):le(mt)},function(mt){Ba(d),it(mt)})}};return!vn&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){gA||(vn=!0,dA("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),VA}else{var he=F;if(Ba(d),an===0){var We=L.current;We!==null&&(mr(We),L.current=null);var Oe={then:function(le,it){L.current===null?(L.current=[],cr(he,le,it)):le(he)}};return Oe}else{var Xe={then:function(le,it){le(he)}};return Xe}}}}function Ba(u){u!==an-1&&dA("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),an=u}function cr(u,d,U){{var F=L.current;if(F!==null)try{mr(F),nc(function(){F.length===0?(L.current=null,d(u)):cr(u,d,U)})}catch(k){U(k)}else d(u)}}var hr=!1;function mr(u){if(!hr){hr=!0;var d=0;try{for(;d.")}return d}function Bt(u,d){if(!(
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */return function(){var B=$s(),b=Symbol.for("react.element"),_=Symbol.for("react.portal"),MA=Symbol.for("react.fragment"),KA=Symbol.for("react.strict_mode"),z=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),De=Symbol.for("react.context"),cA=Symbol.for("react.forward_ref"),dA=Symbol.for("react.suspense"),ce=Symbol.for("react.suspense_list"),tA=Symbol.for("react.memo"),qA=Symbol.for("react.lazy"),iA=Symbol.for("react.offscreen"),pA=Symbol.iterator,aA="@@iterator";function Xe(y){if(y===null||typeof y!="object")return null;var W=pA&&y[pA]||y[aA];return typeof W=="function"?W:null}var ge=B.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function ZA(y){{for(var W=arguments.length,H=new Array(W>1?W-1:0),mA=1;mA=1&&q>=0&&C[R]!==S[q];)q--;for(;R>=1&&q>=0;R--,q--)if(C[R]!==S[q]){if(R!==1||q!==1)do if(R--,q--,q<0||C[R]!==S[q]){var w=`
-`+C[R].replace(" at new "," at ");return y.displayName&&w.includes("")&&(w=w.replace("",y.displayName)),typeof y=="function"&&it.set(y,w),w}while(R>=1&&q>=0);break}}}finally{pe=!1,He.current=p,he(),Error.prepareStackTrace=ie}var G=y?y.displayName||y.name:"",Y=G?Ft(G):"";return typeof y=="function"&&it.set(y,Y),Y}function at(y,W,H){return ee(y,!1)}function nt(y){var W=y.prototype;return!!(W&&W.isReactComponent)}function rt(y,W,H){if(y==null)return"";if(typeof y=="function")return ee(y,nt(y));if(typeof y=="string")return Ft(y);switch(y){case dA:return Ft("Suspense");case ce:return Ft("SuspenseList")}if(typeof y=="object")switch(y.$$typeof){case cA:return at(y.render);case tA:return rt(y.type,W,H);case qA:{var mA=y,ie=mA._payload,p=mA._init;try{return rt(p(ie),W,H)}catch{}}}return""}var et=Object.prototype.hasOwnProperty,hi={},M=ge.ReactDebugCurrentFrame;function I(y){if(y){var W=y._owner,H=rt(y.type,y._source,W?W.type:null);M.setExtraStackFrame(H)}else M.setExtraStackFrame(null)}function rA(y,W,H,mA,ie){{var p=Function.call.bind(et);for(var x in y)if(p(y,x)){var C=void 0;try{if(typeof y[x]!="function"){var S=Error((mA||"React class")+": "+H+" type `"+x+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof y[x]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw S.name="Invariant Violation",S}C=y[x](W,x,mA,H,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(R){C=R}C&&!(C instanceof Error)&&(I(ie),ZA("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",mA||"React class",H,x,typeof C),I(null)),C instanceof Error&&!(C.message in hi)&&(hi[C.message]=!0,I(ie),ZA("Failed %s type: %s",H,C.message),I(null))}}}var AA=Array.isArray;function SA(y){return AA(y)}function YA(y){{var W=typeof Symbol=="function"&&Symbol.toStringTag,H=W&&y[Symbol.toStringTag]||y.constructor.name||"Object";return H}}function re(y){try{return UA(y),!1}catch{return!0}}function UA(y){return""+y}function GA(y){if(re(y))return ZA("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",YA(y)),UA(y)}var Ce=ge.ReactCurrentOwner,Ne={key:!0,ref:!0,__self:!0,__source:!0},ut,J;function gA(y){if(et.call(y,"ref")){var W=Object.getOwnPropertyDescriptor(y,"ref").get;if(W&&W.isReactWarning)return!1}return y.ref!==void 0}function jA(y){if(et.call(y,"key")){var W=Object.getOwnPropertyDescriptor(y,"key").get;if(W&&W.isReactWarning)return!1}return y.key!==void 0}function ye(y,W){typeof y.ref=="string"&&Ce.current}function Me(y,W){{var H=function(){ut||(ut=!0,ZA("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",W))};H.isReactWarning=!0,Object.defineProperty(y,"key",{get:H,configurable:!0})}}function Ge(y,W){{var H=function(){J||(J=!0,ZA("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",W))};H.isReactWarning=!0,Object.defineProperty(y,"ref",{get:H,configurable:!0})}}var je=function(y,W,H,mA,ie,p,x){var C={$$typeof:b,type:y,key:W,ref:H,props:x,_owner:p};return C._store={},Object.defineProperty(C._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(C,"_self",{configurable:!1,enumerable:!1,writable:!1,value:mA}),Object.defineProperty(C,"_source",{configurable:!1,enumerable:!1,writable:!1,value:ie}),Object.freeze&&(Object.freeze(C.props),Object.freeze(C)),C};function Kt(y,W,H,mA,ie){{var p,x={},C=null,S=null;H!==void 0&&(GA(H),C=""+H),jA(W)&&(GA(W.key),C=""+W.key),gA(W)&&(S=W.ref,ye(W,ie));for(p in W)et.call(W,p)&&!Ne.hasOwnProperty(p)&&(x[p]=W[p]);if(y&&y.defaultProps){var R=y.defaultProps;for(p in R)x[p]===void 0&&(x[p]=R[p])}if(C||S){var q=typeof y=="function"?y.displayName||y.name||"Unknown":y;C&&Me(x,q),S&&Ge(x,q)}return je(y,C,S,ie,mA,Ce.current,x)}}var Ve=ge.ReactCurrentOwner,Ze=ge.ReactDebugCurrentFrame;function We(y){if(y){var W=y._owner,H=rt(y.type,y._source,W?W.type:null);Ze.setExtraStackFrame(H)}else Ze.setExtraStackFrame(null)}var Zi;Zi=!1;function wi(y){return typeof y=="object"&&y!==null&&y.$$typeof===b}function Si(){{if(Ve.current){var y=O(Ve.current.type);if(y)return`
+ */return function(){var B=$s(),v=Symbol.for("react.element"),P=Symbol.for("react.portal"),LA=Symbol.for("react.fragment"),bA=Symbol.for("react.strict_mode"),z=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),Ke=Symbol.for("react.context"),cA=Symbol.for("react.forward_ref"),mA=Symbol.for("react.suspense"),ye=Symbol.for("react.suspense_list"),tA=Symbol.for("react.memo"),KA=Symbol.for("react.lazy"),AA=Symbol.for("react.offscreen"),CA=Symbol.iterator,_="@@iterator";function Pe(p){if(p===null||typeof p!="object")return null;var W=CA&&p[CA]||p[_];return typeof W=="function"?W:null}var ue=B.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function NA(p){{for(var W=arguments.length,eA=new Array(W>1?W-1:0),hA=1;hA=1&&w>=0&&ee[T]!==y[w];)w--;for(;T>=1&&w>=0;T--,w--)if(ee[T]!==y[w]){if(T!==1||w!==1)do if(T--,w--,w<0||ee[T]!==y[w]){var E=`
+`+ee[T].replace(" at new "," at ");return p.displayName&&E.includes("")&&(E=E.replace("",p.displayName)),typeof p=="function"&&rt.set(p,E),E}while(T>=1&&w>=0);break}}}finally{we=!1,_e.current=qA,ge(),Error.prepareStackTrace=_A}var Q=p?p.displayName||p.name:"",Y=Q?qt(Q):"";return typeof p=="function"&&rt.set(p,Y),Y}function lt(p,W,eA){return ae(p,!1)}function ct(p){var W=p.prototype;return!!(W&&W.isReactComponent)}function ot(p,W,eA){if(p==null)return"";if(typeof p=="function")return ae(p,ct(p));if(typeof p=="string")return qt(p);switch(p){case mA:return qt("Suspense");case ye:return qt("SuspenseList")}if(typeof p=="object")switch(p.$$typeof){case cA:return lt(p.render);case tA:return ot(p.type,W,eA);case KA:{var hA=p,_A=hA._payload,qA=hA._init;try{return ot(qA(_A),W,eA)}catch{}}}return""}var at=Object.prototype.hasOwnProperty,Jt={},mi=ue.ReactDebugCurrentFrame;function M(p){if(p){var W=p._owner,eA=ot(p.type,p._source,W?W.type:null);mi.setExtraStackFrame(eA)}else mi.setExtraStackFrame(null)}function I(p,W,eA,hA,_A){{var qA=Function.call.bind(at);for(var ne in p)if(qA(p,ne)){var ee=void 0;try{if(typeof p[ne]!="function"){var y=Error((hA||"React class")+": "+eA+" type `"+ne+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof p[ne]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw y.name="Invariant Violation",y}ee=p[ne](W,ne,hA,eA,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(T){ee=T}ee&&!(ee instanceof Error)&&(M(_A),NA("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",hA||"React class",eA,ne,typeof ee),M(null)),ee instanceof Error&&!(ee.message in Jt)&&(Jt[ee.message]=!0,M(_A),NA("Failed %s type: %s",eA,ee.message),M(null))}}}var nA=Array.isArray;function $(p){return nA(p)}function fA(p){{var W=typeof Symbol=="function"&&Symbol.toStringTag,eA=W&&p[Symbol.toStringTag]||p.constructor.name||"Object";return eA}}function IA(p){try{return WA(p),!1}catch{return!0}}function WA(p){return""+p}function BA(p){if(IA(p))return NA("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",fA(p)),WA(p)}var fe=ue.ReactCurrentOwner,Se={key:!0,ref:!0,__self:!0,__source:!0},Ce,J;function pA(p){if(at.call(p,"ref")){var W=Object.getOwnPropertyDescriptor(p,"ref").get;if(W&&W.isReactWarning)return!1}return p.ref!==void 0}function MA(p){if(at.call(p,"key")){var W=Object.getOwnPropertyDescriptor(p,"key").get;if(W&&W.isReactWarning)return!1}return p.key!==void 0}function re(p,W){typeof p.ref=="string"&&fe.current}function Ge(p,W){{var eA=function(){Ce||(Ce=!0,NA("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",W))};eA.isReactWarning=!0,Object.defineProperty(p,"key",{get:eA,configurable:!0})}}function Ne(p,W){{var eA=function(){J||(J=!0,NA("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",W))};eA.isReactWarning=!0,Object.defineProperty(p,"ref",{get:eA,configurable:!0})}}var Ve=function(p,W,eA,hA,_A,qA,ne){var ee={$$typeof:v,type:p,key:W,ref:eA,props:ne,_owner:qA};return ee._store={},Object.defineProperty(ee._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(ee,"_self",{configurable:!1,enumerable:!1,writable:!1,value:hA}),Object.defineProperty(ee,"_source",{configurable:!1,enumerable:!1,writable:!1,value:_A}),Object.freeze&&(Object.freeze(ee.props),Object.freeze(ee)),ee};function gt(p,W,eA,hA,_A){{var qA,ne={},ee=null,y=null;eA!==void 0&&(BA(eA),ee=""+eA),MA(W)&&(BA(W.key),ee=""+W.key),pA(W)&&(y=W.ref,re(W,_A));for(qA in W)at.call(W,qA)&&!Se.hasOwnProperty(qA)&&(ne[qA]=W[qA]);if(p&&p.defaultProps){var T=p.defaultProps;for(qA in T)ne[qA]===void 0&&(ne[qA]=T[qA])}if(ee||y){var w=typeof p=="function"?p.displayName||p.name||"Unknown":p;ee&&Ge(ne,w),y&&Ne(ne,w)}return Ve(p,ee,y,_A,hA,fe.current,ne)}}var Je=ue.ReactCurrentOwner,ve=ue.ReactDebugCurrentFrame;function ze(p){if(p){var W=p._owner,eA=ot(p.type,p._source,W?W.type:null);ve.setExtraStackFrame(eA)}else ve.setExtraStackFrame(null)}var Ji;Ji=!1;function xi(p){return typeof p=="object"&&p!==null&&p.$$typeof===v}function di(){{if(Je.current){var p=O(Je.current.type);if(p)return`
-Check the render method of \``+y+"`."}return""}}function na(y){return""}var Mi={};function _a(y){{var W=Si();if(!W){var H=typeof y=="string"?y:y.displayName||y.name;H&&(W=`
+Check the render method of \``+p+"`."}return""}}function ki(p){return""}var _a={};function $a(p){{var W=di();if(!W){var eA=typeof p=="string"?p:p.displayName||p.name;eA&&(W=`
-Check the top-level render call using <`+H+">.")}return W}}function Ea(y,W){{if(!y._store||y._store.validated||y.key!=null)return;y._store.validated=!0;var H=_a(W);if(Mi[H])return;Mi[H]=!0;var mA="";y&&y._owner&&y._owner!==Ve.current&&(mA=" It was passed a child from "+O(y._owner.type)+"."),We(y),ZA('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',H,mA),We(null)}}function $a(y,W){{if(typeof y!="object")return;if(SA(y))for(var H=0;H ",C=" Did you accidentally export a JSX literal instead of a component?"):R=typeof y,ZA("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",R,C)}var q=Kt(y,W,H,ie,p);if(q==null)return q;if(x){var w=W.children;if(w!==void 0)if(mA)if(SA(w)){for(var G=0;G0?"{key: someKey, "+wA.join(": ..., ")+": ...}":"{key: someKey}";if(!gt[Y+EA]){var vA=wA.length>0?"{"+wA.join(": ..., ")+": ...}":"{}";ZA(`A props object containing a "key" prop is being spread into JSX:
+Check the top-level render call using <`+eA+">.")}return W}}function Ra(p,W){{if(!p._store||p._store.validated||p.key!=null)return;p._store.validated=!0;var eA=$a(W);if(_a[eA])return;_a[eA]=!0;var hA="";p&&p._owner&&p._owner!==Je.current&&(hA=" It was passed a child from "+O(p._owner.type)+"."),ze(p),NA('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',eA,hA),ze(null)}}function qi(p,W){{if(typeof p!="object")return;if($(p))for(var eA=0;eA ",ee=" Did you accidentally export a JSX literal instead of a component?"):T=typeof p,NA("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",T,ee)}var w=gt(p,W,eA,_A,qA);if(w==null)return w;if(ne){var E=W.children;if(E!==void 0)if(hA)if($(E)){for(var Q=0;Q0?"{key: someKey, "+C.join(": ..., ")+": ...}":"{key: someKey}";if(!ei[Y+b]){var Z=C.length>0?"{"+C.join(": ..., ")+": ...}":"{}";NA(`A props object containing a "key" prop is being spread into JSX:
let props = %s;
<%s {...props} />
React keys must be passed directly to JSX without using spread:
let props = %s;
- <%s key={someKey} {...props} />`,EA,Y,vA,Y),gt[Y+EA]=!0}}return y===MA?yt(q):An(q),q}}function Ai(y,W,H){return $t(y,W,H,!0)}function Ta(y,W,H){return $t(y,W,H,!1)}var Ra=Ta,La=Ai;ll.Fragment=MA,ll.jsx=Ra,ll.jsxs=La}(),ll}up.exports=Kw();var m=up.exports,mp={exports:{}},Ac={exports:{}},ec={},dp;function qw(){return dp||(dp=1,function(B){/**
+ <%s key={someKey} {...props} />`,b,Y,Z,Y),ei[Y+b]=!0}}return p===LA?Ei(w):An(w),w}}function Ut(p,W,eA){return ti(p,W,eA,!0)}function Ti(p,W,eA){return ti(p,W,eA,!1)}var La=Ti,Ni=Ut;ul.Fragment=LA,ul.jsx=La,ul.jsxs=Ni}(),ul}up.exports=Kw();var m=up.exports,mp={exports:{}},Ac={exports:{}},ec={},dp;function qw(){return dp||(dp=1,function(B){/**
* @license React
* scheduler.development.js
*
@@ -57,7 +57,7 @@ React keys must be passed directly to JSX without using spread:
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var b=!1,_=5;function MA(J,gA){var jA=J.length;J.push(gA),s(J,gA,jA)}function KA(J){return J.length===0?null:J[0]}function z(J){if(J.length===0)return null;var gA=J[0],jA=J.pop();return jA!==gA&&(J[0]=jA,De(J,jA,0)),gA}function s(J,gA,jA){for(var ye=jA;ye>0;){var Me=ye-1>>>1,Ge=J[Me];if(cA(Ge,gA)>0)J[Me]=gA,J[ye]=Ge,ye=Me;else return}}function De(J,gA,jA){for(var ye=jA,Me=J.length,Ge=Me>>>1;yejA&&(!J||M()));){var ye=RA.callback;if(typeof ye=="function"){RA.callback=null,O=RA.priorityLevel;var Me=RA.expirationTime<=jA,Ge=ye(Me);jA=B.unstable_now(),typeof Ge=="function"?RA.callback=Ge:RA===KA(HA)&&z(HA),qe(jA)}else z(HA);RA=KA(HA)}if(RA!==null)return!0;var je=KA(fe);return je!==null&&GA(BA,je.startTime-jA),!1}function XA(J,gA){switch(J){case dA:case ce:case tA:case qA:case iA:break;default:J=tA}var jA=O;O=J;try{return gA()}finally{O=jA}}function he(J){var gA;switch(O){case dA:case ce:case tA:gA=tA;break;default:gA=O;break}var jA=O;O=gA;try{return J()}finally{O=jA}}function He(J){var gA=O;return function(){var jA=O;O=gA;try{return J.apply(this,arguments)}finally{O=jA}}}function xe(J,gA,jA){var ye=B.unstable_now(),Me;if(typeof jA=="object"&&jA!==null){var Ge=jA.delay;typeof Ge=="number"&&Ge>0?Me=ye+Ge:Me=ye}else Me=ye;var je;switch(J){case dA:je=Ae;break;case ce:je=Q;break;case iA:je=Ke;break;case qA:je=V;break;case tA:default:je=PA;break}var Kt=Me+je,Ve={id:Ye++,callback:gA,priorityLevel:J,startTime:Me,expirationTime:Kt,sortIndex:-1};return Me>ye?(Ve.sortIndex=Me,MA(fe,Ve),KA(HA)===null&&Ve===KA(fe)&&(de?Ce():de=!0,GA(BA,Me-ye))):(Ve.sortIndex=Kt,MA(HA,Ve),!$&&!te&&($=!0,UA(QA))),Ve}function Ft(){}function pe(){!$&&!te&&($=!0,UA(QA))}function it(){return KA(HA)}function Be(J){J.callback=null}function ee(){return O}var at=!1,nt=null,rt=-1,et=_,hi=-1;function M(){var J=B.unstable_now()-hi;return!(J125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported");return}J>0?et=Math.floor(1e3/J):et=_}var AA=function(){if(nt!==null){var J=B.unstable_now();hi=J;var gA=!0,jA=!0;try{jA=nt(gA,J)}finally{jA?SA():(at=!1,nt=null)}}else at=!1},SA;if(typeof _A=="function")SA=function(){_A(AA)};else if(typeof MessageChannel<"u"){var YA=new MessageChannel,re=YA.port2;YA.port1.onmessage=AA,SA=function(){re.postMessage(null)}}else SA=function(){yA(AA,0)};function UA(J){nt=J,at||(at=!0,SA())}function GA(J,gA){rt=yA(function(){J(B.unstable_now())},gA)}function Ce(){hA(rt),rt=-1}var Ne=I,ut=null;B.unstable_IdlePriority=iA,B.unstable_ImmediatePriority=dA,B.unstable_LowPriority=qA,B.unstable_NormalPriority=tA,B.unstable_Profiling=ut,B.unstable_UserBlockingPriority=ce,B.unstable_cancelCallback=Be,B.unstable_continueExecution=pe,B.unstable_forceFrameRate=rA,B.unstable_getCurrentPriorityLevel=ee,B.unstable_getFirstCallbackNode=it,B.unstable_next=he,B.unstable_pauseExecution=Ft,B.unstable_requestPaint=Ne,B.unstable_runWithPriority=XA,B.unstable_scheduleCallback=xe,B.unstable_shouldYield=M,B.unstable_wrapCallback=He,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)})()}(ec)),ec}var pp;function Nw(){return pp||(pp=1,Ac.exports=qw()),Ac.exports}var ci={},yp;function Ww(){if(yp)return ci;yp=1;/**
+ */(function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var v=!1,P=5;function LA(J,pA){var MA=J.length;J.push(pA),s(J,pA,MA)}function bA(J){return J.length===0?null:J[0]}function z(J){if(J.length===0)return null;var pA=J[0],MA=J.pop();return MA!==pA&&(J[0]=MA,Ke(J,MA,0)),pA}function s(J,pA,MA){for(var re=MA;re>0;){var Ge=re-1>>>1,Ne=J[Ge];if(cA(Ne,pA)>0)J[Ge]=pA,J[re]=Ne,re=Ge;else return}}function Ke(J,pA,MA){for(var re=MA,Ge=J.length,Ne=Ge>>>1;reMA&&(!J||mi()));){var re=xA.callback;if(typeof re=="function"){xA.callback=null,O=xA.priorityLevel;var Ge=xA.expirationTime<=MA,Ne=re(Ge);MA=B.unstable_now(),typeof Ne=="function"?xA.callback=Ne:xA===bA(Ee)&&z(Ee),et(MA)}else z(Ee);xA=bA(Ee)}if(xA!==null)return!0;var Ve=bA($A);return Ve!==null&&BA(wA,Ve.startTime-MA),!1}function OA(J,pA){switch(J){case mA:case ye:case tA:case KA:case AA:break;default:J=tA}var MA=O;O=J;try{return pA()}finally{O=MA}}function ge(J){var pA;switch(O){case mA:case ye:case tA:pA=tA;break;default:pA=O;break}var MA=O;O=pA;try{return J()}finally{O=MA}}function _e(J){var pA=O;return function(){var MA=O;O=pA;try{return J.apply(this,arguments)}finally{O=MA}}}function De(J,pA,MA){var re=B.unstable_now(),Ge;if(typeof MA=="object"&&MA!==null){var Ne=MA.delay;typeof Ne=="number"&&Ne>0?Ge=re+Ne:Ge=re}else Ge=re;var Ve;switch(J){case mA:Ve=XA;break;case ye:Ve=L;break;case AA:Ve=Le;break;case KA:Ve=X;break;case tA:default:Ve=HA;break}var gt=Ge+Ve,Je={id:Ue++,callback:pA,priorityLevel:J,startTime:Ge,expirationTime:gt,sortIndex:-1};return Ge>re?(Je.sortIndex=Ge,LA($A,Je),bA(Ee)===null&&Je===bA($A)&&(se?fe():se=!0,BA(wA,Ge-re))):(Je.sortIndex=gt,LA(Ee,Je),!aA&&!Ae&&(aA=!0,WA(UA))),Je}function qt(){}function we(){!aA&&!Ae&&(aA=!0,WA(UA))}function rt(){return bA(Ee)}function qe(J){J.callback=null}function ae(){return O}var lt=!1,ct=null,ot=-1,at=P,Jt=-1;function mi(){var J=B.unstable_now()-Jt;return!(J125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported");return}J>0?at=Math.floor(1e3/J):at=P}var nA=function(){if(ct!==null){var J=B.unstable_now();Jt=J;var pA=!0,MA=!0;try{MA=ct(pA,J)}finally{MA?$():(lt=!1,ct=null)}}else lt=!1},$;if(typeof PA=="function")$=function(){PA(nA)};else if(typeof MessageChannel<"u"){var fA=new MessageChannel,IA=fA.port2;fA.port1.onmessage=nA,$=function(){IA.postMessage(null)}}else $=function(){dA(nA,0)};function WA(J){ct=J,lt||(lt=!0,$())}function BA(J,pA){ot=dA(function(){J(B.unstable_now())},pA)}function fe(){oA(ot),ot=-1}var Se=M,Ce=null;B.unstable_IdlePriority=AA,B.unstable_ImmediatePriority=mA,B.unstable_LowPriority=KA,B.unstable_NormalPriority=tA,B.unstable_Profiling=Ce,B.unstable_UserBlockingPriority=ye,B.unstable_cancelCallback=qe,B.unstable_continueExecution=we,B.unstable_forceFrameRate=I,B.unstable_getCurrentPriorityLevel=ae,B.unstable_getFirstCallbackNode=rt,B.unstable_next=ge,B.unstable_pauseExecution=qt,B.unstable_requestPaint=Se,B.unstable_runWithPriority=OA,B.unstable_scheduleCallback=De,B.unstable_shouldYield=mi,B.unstable_wrapCallback=_e,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)})()}(ec)),ec}var pp;function Nw(){return pp||(pp=1,Ac.exports=qw()),Ac.exports}var hi={},yp;function Ww(){if(yp)return hi;yp=1;/**
* @license React
* react-dom.development.js
*
@@ -65,15 +65,15 @@ React keys must be passed directly to JSX without using spread:
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */return function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var B=$s(),b=Nw(),_=B.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,MA=!1;function KA(A){MA=A}function z(A){if(!MA){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i1?e-1:0),i=1;i2&&(A[0]==="o"||A[0]==="O")&&(A[1]==="n"||A[1]==="N")}function je(A,e,t,i){if(t!==null&&t.type===SA)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":{if(i)return!1;if(t!==null)return!t.acceptsBooleans;var a=A.toLowerCase().slice(0,5);return a!=="data-"&&a!=="aria-"}default:return!1}}function Kt(A,e,t,i){if(e===null||typeof e>"u"||je(A,e,t,i))return!0;if(i)return!1;if(t!==null)switch(t.type){case UA:return!e;case GA:return e===!1;case Ce:return isNaN(e);case Ne:return isNaN(e)||e<1}return!1}function Ve(A){return We.hasOwnProperty(A)?We[A]:null}function Ze(A,e,t,i,a,n,r){this.acceptsBooleans=e===re||e===UA||e===GA,this.attributeName=i,this.attributeNamespace=a,this.mustUseProperty=t,this.propertyName=A,this.type=e,this.sanitizeURL=n,this.removeEmptyString=r}var We={},Zi=["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"];Zi.forEach(function(A){We[A]=new Ze(A,SA,!1,A,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(A){var e=A[0],t=A[1];We[e]=new Ze(e,YA,!1,t,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(A){We[A]=new Ze(A,re,!1,A.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(A){We[A]=new Ze(A,re,!1,A,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(A){We[A]=new Ze(A,UA,!1,A.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(A){We[A]=new Ze(A,UA,!0,A,null,!1,!1)}),["capture","download"].forEach(function(A){We[A]=new Ze(A,GA,!1,A,null,!1,!1)}),["cols","rows","size","span"].forEach(function(A){We[A]=new Ze(A,Ne,!1,A,null,!1,!1)}),["rowSpan","start"].forEach(function(A){We[A]=new Ze(A,Ce,!1,A.toLowerCase(),null,!1,!1)});var wi=/[\-\:]([a-z])/g,Si=function(A){return A[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(A){var e=A.replace(wi,Si);We[e]=new Ze(e,YA,!1,A,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(A){var e=A.replace(wi,Si);We[e]=new Ze(e,YA,!1,A,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(A){var e=A.replace(wi,Si);We[e]=new Ze(e,YA,!1,A,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(A){We[A]=new Ze(A,YA,!1,A.toLowerCase(),null,!1,!1)});var na="xlinkHref";We[na]=new Ze("xlinkHref",YA,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(A){We[A]=new Ze(A,YA,!1,A.toLowerCase(),null,!0,!0)});var Mi=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,_a=!1;function Ea(A){!_a&&Mi.test(A)&&(_a=!0,s("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(A)))}function $a(A,e,t,i){if(i.mustUseProperty){var a=i.propertyName;return A[a]}else{et(t,e),i.sanitizeURL&&Ea(""+t);var n=i.attributeName,r=null;if(i.type===GA){if(A.hasAttribute(n)){var l=A.getAttribute(n);return l===""?!0:Kt(e,t,i,!1)?l:l===""+t?t:l}}else if(A.hasAttribute(n)){if(Kt(e,t,i,!1))return A.getAttribute(n);if(i.type===UA)return t;r=A.getAttribute(n)}return Kt(e,t,i,!1)?r===null?t:r:r===""+t?t:r}}function An(A,e,t,i){{if(!Me(e))return;if(!A.hasAttribute(e))return t===void 0?void 0:null;var a=A.getAttribute(e);return et(t,e),a===""+t?t:a}}function yt(A,e,t,i){var a=Ve(e);if(!Ge(e,a,i)){if(Kt(e,t,a,i)&&(t=null),i||a===null){if(Me(e)){var n=e;t===null?A.removeAttribute(n):(et(t,e),A.setAttribute(n,""+t))}return}var r=a.mustUseProperty;if(r){var l=a.propertyName;if(t===null){var o=a.type;A[l]=o===UA?!1:""}else A[l]=t;return}var c=a.attributeName,h=a.attributeNamespace;if(t===null)A.removeAttribute(c);else{var f=a.type,g;f===UA||f===GA&&t===!0?g="":(et(t,c),g=""+t,a.sanitizeURL&&Ea(g.toString())),h?A.setAttributeNS(h,c,g):A.setAttribute(c,g)}}}var gt=Symbol.for("react.element"),$t=Symbol.for("react.portal"),Ai=Symbol.for("react.fragment"),Ta=Symbol.for("react.strict_mode"),Ra=Symbol.for("react.profiler"),La=Symbol.for("react.provider"),y=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),H=Symbol.for("react.suspense"),mA=Symbol.for("react.suspense_list"),ie=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),x=Symbol.for("react.scope"),C=Symbol.for("react.debug_trace_mode"),S=Symbol.for("react.offscreen"),R=Symbol.for("react.legacy_hidden"),q=Symbol.for("react.cache"),w=Symbol.for("react.tracing_marker"),G=Symbol.iterator,Y="@@iterator";function wA(A){if(A===null||typeof A!="object")return null;var e=G&&A[G]||A[Y];return typeof e=="function"?e:null}var EA=Object.assign,vA=0,me,_e,ft,Ut,Ua,Qi,Dt;function ra(){}ra.__reactDisabledLog=!0;function qt(){{if(vA===0){me=console.log,_e=console.info,ft=console.warn,Ut=console.error,Ua=console.group,Qi=console.groupCollapsed,Dt=console.groupEnd;var A={configurable:!0,enumerable:!0,value:ra,writable:!0};Object.defineProperties(console,{info:A,log:A,warn:A,error:A,group:A,groupCollapsed:A,groupEnd:A})}vA++}}function ze(){{if(vA--,vA===0){var A={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:EA({},A,{value:me}),info:EA({},A,{value:_e}),warn:EA({},A,{value:ft}),error:EA({},A,{value:Ut}),group:EA({},A,{value:Ua}),groupCollapsed:EA({},A,{value:Qi}),groupEnd:EA({},A,{value:Dt})})}vA<0&&s("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var ei=_.ReactCurrentDispatcher,la;function Gi(A,e,t){{if(la===void 0)try{throw Error()}catch(a){var i=a.stack.trim().match(/\n( *(at )?)/);la=i&&i[1]||""}return`
-`+la+A}}var oa=!1,Jt;{var mi=typeof WeakMap=="function"?WeakMap:Map;Jt=new mi}function ua(A,e){if(!A||oa)return"";{var t=Jt.get(A);if(t!==void 0)return t}var i;oa=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var n;n=ei.current,ei.current=null,qt();try{if(e){var r=function(){throw Error()};if(Object.defineProperty(r.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(r,[])}catch(D){i=D}Reflect.construct(A,[],r)}else{try{r.call()}catch(D){i=D}A.call(r.prototype)}}else{try{throw Error()}catch(D){i=D}A()}}catch(D){if(D&&i&&typeof D.stack=="string"){for(var l=D.stack.split(`
+ */return function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var B=$s(),v=Nw(),P=B.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,LA=!1;function bA(A){LA=A}function z(A){if(!LA){for(var e=arguments.length,t=new Array(e>1?e-1:0),i=1;i1?e-1:0),i=1;i2&&(A[0]==="o"||A[0]==="O")&&(A[1]==="n"||A[1]==="N")}function Ve(A,e,t,i){if(t!==null&&t.type===$)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":{if(i)return!1;if(t!==null)return!t.acceptsBooleans;var a=A.toLowerCase().slice(0,5);return a!=="data-"&&a!=="aria-"}default:return!1}}function gt(A,e,t,i){if(e===null||typeof e>"u"||Ve(A,e,t,i))return!0;if(i)return!1;if(t!==null)switch(t.type){case WA:return!e;case BA:return e===!1;case fe:return isNaN(e);case Se:return isNaN(e)||e<1}return!1}function Je(A){return ze.hasOwnProperty(A)?ze[A]:null}function ve(A,e,t,i,a,n,r){this.acceptsBooleans=e===IA||e===WA||e===BA,this.attributeName=i,this.attributeNamespace=a,this.mustUseProperty=t,this.propertyName=A,this.type=e,this.sanitizeURL=n,this.removeEmptyString=r}var ze={},Ji=["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"];Ji.forEach(function(A){ze[A]=new ve(A,$,!1,A,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(A){var e=A[0],t=A[1];ze[e]=new ve(e,fA,!1,t,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(A){ze[A]=new ve(A,IA,!1,A.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(A){ze[A]=new ve(A,IA,!1,A,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(A){ze[A]=new ve(A,WA,!1,A.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(A){ze[A]=new ve(A,WA,!0,A,null,!1,!1)}),["capture","download"].forEach(function(A){ze[A]=new ve(A,BA,!1,A,null,!1,!1)}),["cols","rows","size","span"].forEach(function(A){ze[A]=new ve(A,Se,!1,A,null,!1,!1)}),["rowSpan","start"].forEach(function(A){ze[A]=new ve(A,fe,!1,A.toLowerCase(),null,!1,!1)});var xi=/[\-\:]([a-z])/g,di=function(A){return A[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(A){var e=A.replace(xi,di);ze[e]=new ve(e,fA,!1,A,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(A){var e=A.replace(xi,di);ze[e]=new ve(e,fA,!1,A,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(A){var e=A.replace(xi,di);ze[e]=new ve(e,fA,!1,A,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(A){ze[A]=new ve(A,fA,!1,A.toLowerCase(),null,!1,!1)});var ki="xlinkHref";ze[ki]=new ve("xlinkHref",fA,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(A){ze[A]=new ve(A,fA,!1,A.toLowerCase(),null,!0,!0)});var _a=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,$a=!1;function Ra(A){!$a&&_a.test(A)&&($a=!0,s("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(A)))}function qi(A,e,t,i){if(i.mustUseProperty){var a=i.propertyName;return A[a]}else{at(t,e),i.sanitizeURL&&Ra(""+t);var n=i.attributeName,r=null;if(i.type===BA){if(A.hasAttribute(n)){var l=A.getAttribute(n);return l===""?!0:gt(e,t,i,!1)?l:l===""+t?t:l}}else if(A.hasAttribute(n)){if(gt(e,t,i,!1))return A.getAttribute(n);if(i.type===WA)return t;r=A.getAttribute(n)}return gt(e,t,i,!1)?r===null?t:r:r===""+t?t:r}}function An(A,e,t,i){{if(!Ge(e))return;if(!A.hasAttribute(e))return t===void 0?void 0:null;var a=A.getAttribute(e);return at(t,e),a===""+t?t:a}}function Ei(A,e,t,i){var a=Je(e);if(!Ne(e,a,i)){if(gt(e,t,a,i)&&(t=null),i||a===null){if(Ge(e)){var n=e;t===null?A.removeAttribute(n):(at(t,e),A.setAttribute(n,""+t))}return}var r=a.mustUseProperty;if(r){var l=a.propertyName;if(t===null){var o=a.type;A[l]=o===WA?!1:""}else A[l]=t;return}var c=a.attributeName,h=a.attributeNamespace;if(t===null)A.removeAttribute(c);else{var f=a.type,g;f===WA||f===BA&&t===!0?g="":(at(t,c),g=""+t,a.sanitizeURL&&Ra(g.toString())),h?A.setAttributeNS(h,c,g):A.setAttribute(c,g)}}}var ei=Symbol.for("react.element"),ti=Symbol.for("react.portal"),Ut=Symbol.for("react.fragment"),Ti=Symbol.for("react.strict_mode"),La=Symbol.for("react.profiler"),Ni=Symbol.for("react.provider"),p=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),eA=Symbol.for("react.suspense"),hA=Symbol.for("react.suspense_list"),_A=Symbol.for("react.memo"),qA=Symbol.for("react.lazy"),ne=Symbol.for("react.scope"),ee=Symbol.for("react.debug_trace_mode"),y=Symbol.for("react.offscreen"),T=Symbol.for("react.legacy_hidden"),w=Symbol.for("react.cache"),E=Symbol.for("react.tracing_marker"),Q=Symbol.iterator,Y="@@iterator";function C(A){if(A===null||typeof A!="object")return null;var e=Q&&A[Q]||A[Y];return typeof e=="function"?e:null}var b=Object.assign,Z=0,GA,ke,te,Fe,$e,kt,Dt;function Ua(){}Ua.__reactDisabledLog=!0;function Oi(){{if(Z===0){GA=console.log,ke=console.info,te=console.warn,Fe=console.error,$e=console.group,kt=console.groupCollapsed,Dt=console.groupEnd;var A={configurable:!0,enumerable:!0,value:Ua,writable:!0};Object.defineProperties(console,{info:A,log:A,warn:A,error:A,group:A,groupCollapsed:A,groupEnd:A})}Z++}}function Bt(){{if(Z--,Z===0){var A={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:b({},A,{value:GA}),info:b({},A,{value:ke}),warn:b({},A,{value:te}),error:b({},A,{value:Fe}),group:b({},A,{value:$e}),groupCollapsed:b({},A,{value:kt}),groupEnd:b({},A,{value:Dt})})}Z<0&&s("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Xi=P.ReactCurrentDispatcher,Mt;function Be(A,e,t){{if(Mt===void 0)try{throw Error()}catch(a){var i=a.stack.trim().match(/\n( *(at )?)/);Mt=i&&i[1]||""}return`
+`+Mt+A}}var Ot=!1,Ri;{var Mn=typeof WeakMap=="function"?WeakMap:Map;Ri=new Mn}function ca(A,e){if(!A||Ot)return"";{var t=Ri.get(A);if(t!==void 0)return t}var i;Ot=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var n;n=Xi.current,Xi.current=null,Oi();try{if(e){var r=function(){throw Error()};if(Object.defineProperty(r.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(r,[])}catch(D){i=D}Reflect.construct(A,[],r)}else{try{r.call()}catch(D){i=D}A.call(r.prototype)}}else{try{throw Error()}catch(D){i=D}A()}}catch(D){if(D&&i&&typeof D.stack=="string"){for(var l=D.stack.split(`
`),o=i.stack.split(`
`),c=l.length-1,h=o.length-1;c>=1&&h>=0&&l[c]!==o[h];)h--;for(;c>=1&&h>=0;c--,h--)if(l[c]!==o[h]){if(c!==1||h!==1)do if(c--,h--,h<0||l[c]!==o[h]){var f=`
-`+l[c].replace(" at new "," at ");return A.displayName&&f.includes("")&&(f=f.replace("",A.displayName)),typeof A=="function"&&Jt.set(A,f),f}while(c>=1&&h>=0);break}}}finally{oa=!1,ei.current=n,ze(),Error.prepareStackTrace=a}var g=A?A.displayName||A.name:"",L=g?Gi(g):"";return typeof A=="function"&&Jt.set(A,L),L}function en(A,e,t){return ua(A,!0)}function st(A,e,t){return ua(A,!1)}function Le(A){var e=A.prototype;return!!(e&&e.isReactComponent)}function bi(A,e,t){if(A==null)return"";if(typeof A=="function")return ua(A,Le(A));if(typeof A=="string")return Gi(A);switch(A){case H:return Gi("Suspense");case mA:return Gi("SuspenseList")}if(typeof A=="object")switch(A.$$typeof){case W:return st(A.render);case ie:return bi(A.type,e,t);case p:{var i=A,a=i._payload,n=i._init;try{return bi(n(a),e,t)}catch{}}}return""}function Vi(A){switch(A._debugOwner&&A._debugOwner.type,A._debugSource,A.tag){case iA:return Gi(A.type);case Ke:return Gi("Lazy");case Q:return Gi("Suspense");case Ye:return Gi("SuspenseList");case cA:case ce:case V:return st(A.type);case LA:return st(A.type.render);case dA:return en(A.type);default:return""}}function zi(A){try{var e="",t=A;do e+=Vi(t),t=t.return;while(t);return e}catch(i){return`
+`+l[c].replace(" at new "," at ");return A.displayName&&f.includes("")&&(f=f.replace("",A.displayName)),typeof A=="function"&&Ri.set(A,f),f}while(c>=1&&h>=0);break}}}finally{Ot=!1,Xi.current=n,Bt(),Error.prepareStackTrace=a}var g=A?A.displayName||A.name:"",R=g?Be(g):"";return typeof A=="function"&&Ri.set(A,R),R}function pi(A,e,t){return ca(A,!0)}function Li(A,e,t){return ca(A,!1)}function en(A){var e=A.prototype;return!!(e&&e.isReactComponent)}function Qn(A,e,t){if(A==null)return"";if(typeof A=="function")return ca(A,en(A));if(typeof A=="string")return Be(A);switch(A){case eA:return Be("Suspense");case hA:return Be("SuspenseList")}if(typeof A=="object")switch(A.$$typeof){case W:return Li(A.render);case _A:return Qn(A.type,e,t);case qA:{var i=A,a=i._payload,n=i._init;try{return Qn(n(a),e,t)}catch{}}}return""}function ft(A){switch(A._debugOwner&&A._debugOwner.type,A._debugSource,A.tag){case AA:return Be(A.type);case Le:return Be("Lazy");case L:return Be("Suspense");case Ue:return Be("SuspenseList");case cA:case ye:case X:return Li(A.type);case kA:return Li(A.type.render);case mA:return pi(A.type);default:return""}}function xe(A){try{var e="",t=A;do e+=ft(t),t=t.return;while(t);return e}catch(i){return`
Error generating stack: `+i.message+`
-`+i.stack}}function ko(A,e,t){var i=A.displayName;if(i)return i;var a=e.displayName||e.name||"";return a!==""?t+"("+a+")":t}function ol(A){return A.displayName||"Context"}function Ee(A){if(A==null)return null;if(typeof A.tag=="number"&&s("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof A=="function")return A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case Ai:return"Fragment";case $t:return"Portal";case Ra:return"Profiler";case Ta:return"StrictMode";case H:return"Suspense";case mA:return"SuspenseList"}if(typeof A=="object")switch(A.$$typeof){case y:var e=A;return ol(e)+".Consumer";case La:var t=A;return ol(t._context)+".Provider";case W:return ko(A,A.render,"ForwardRef");case ie:var i=A.displayName||null;return i!==null?i:Ee(A.type)||"Memo";case p:{var a=A,n=a._payload,r=a._init;try{return Ee(r(n))}catch{return null}}}return null}function tc(A,e,t){var i=e.displayName||e.name||"";return A.displayName||(i!==""?t+"("+i+")":t)}function Da(A){return A.displayName||"Context"}function OA(A){var e=A.tag,t=A.type;switch(e){case $:return"Cache";case ge:var i=t;return Da(i)+".Consumer";case ZA:var a=t;return Da(a._context)+".Provider";case fe:return"DehydratedFragment";case LA:return tc(t,t.render,"ForwardRef");case aA:return"Fragment";case iA:return t;case qA:return"Portal";case tA:return"Root";case pA:return"Text";case Ke:return Ee(t);case Xe:return t===Ta?"StrictMode":"Mode";case O:return"Offscreen";case Ae:return"Profiler";case RA:return"Scope";case Q:return"Suspense";case Ye:return"SuspenseList";case de:return"TracingMarker";case dA:case cA:case HA:case ce:case PA:case V:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;break}return null}var ul=_.ReactDebugCurrentFrame,ti=null,Mn=!1;function tn(){{if(ti===null)return null;var A=ti._debugOwner;if(A!==null&&typeof A<"u")return OA(A)}return null}function ic(){return ti===null?"":zi(ti)}function Bt(){ul.getCurrentStack=null,ti=null,Mn=!1}function $e(A){ul.getCurrentStack=A===null?null:ic,ti=A,Mn=!1}function Oo(){return ti}function vi(A){Mn=A}function ii(A){return""+A}function Ii(A){switch(typeof A){case"boolean":case"number":case"string":case"undefined":return A;case"object":return AA(A),A;default:return""}}var ac={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function sl(A,e){ac[e.type]||e.onChange||e.onInput||e.readOnly||e.disabled||e.value==null||s("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."),e.onChange||e.readOnly||e.disabled||e.checked==null||s("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}function Xo(A){var e=A.type,t=A.nodeName;return t&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function cl(A){return A._valueTracker}function or(A){A._valueTracker=null}function nc(A){var e="";return A&&(Xo(A)?e=A.checked?"true":"false":e=A.value),e}function an(A){var e=Xo(A)?"checked":"value",t=Object.getOwnPropertyDescriptor(A.constructor.prototype,e);AA(A[e]);var i=""+A[e];if(!(A.hasOwnProperty(e)||typeof t>"u"||typeof t.get!="function"||typeof t.set!="function")){var a=t.get,n=t.set;Object.defineProperty(A,e,{configurable:!0,get:function(){return a.call(this)},set:function(l){AA(l),i=""+l,n.call(this,l)}}),Object.defineProperty(A,e,{enumerable:t.enumerable});var r={getValue:function(){return i},setValue:function(l){AA(l),i=""+l},stopTracking:function(){or(A),delete A[e]}};return r}}function Qn(A){cl(A)||(A._valueTracker=an(A))}function hl(A){if(!A)return!1;var e=cl(A);if(!e)return!0;var t=e.getValue(),i=nc(A);return i!==t?(e.setValue(i),!0):!1}function Ba(A){if(A=A||(typeof document<"u"?document:void 0),typeof A>"u")return null;try{return A.activeElement||A.body}catch{return A.body}}var ur=!1,sr=!1,cr=!1,Ho=!1;function Po(A){var e=A.type==="checkbox"||A.type==="radio";return e?A.checked!=null:A.value!=null}function ml(A,e){var t=A,i=e.checked,a=EA({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??t._wrapperState.initialChecked});return a}function _o(A,e){sl("input",e),e.checked!==void 0&&e.defaultChecked!==void 0&&!sr&&(s("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",tn()||"A component",e.type),sr=!0),e.value!==void 0&&e.defaultValue!==void 0&&!ur&&(s("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",tn()||"A component",e.type),ur=!0);var t=A,i=e.defaultValue==null?"":e.defaultValue;t._wrapperState={initialChecked:e.checked!=null?e.checked:e.defaultChecked,initialValue:Ii(e.value!=null?e.value:i),controlled:Po(e)}}function u(A,e){var t=A,i=e.checked;i!=null&&yt(t,"checked",i,!1)}function d(A,e){var t=A;{var i=Po(e);!t._wrapperState.controlled&&i&&!Ho&&(s("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),Ho=!0),t._wrapperState.controlled&&!i&&!cr&&(s("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),cr=!0)}u(A,e);var a=Ii(e.value),n=e.type;if(a!=null)n==="number"?(a===0&&t.value===""||t.value!=a)&&(t.value=ii(a)):t.value!==ii(a)&&(t.value=ii(a));else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?FA(t,e.type,a):e.hasOwnProperty("defaultValue")&&FA(t,e.type,Ii(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function U(A,e,t){var i=A;if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var a=e.type,n=a==="submit"||a==="reset";if(n&&(e.value===void 0||e.value===null))return;var r=ii(i._wrapperState.initialValue);t||r!==i.value&&(i.value=r),i.defaultValue=r}var l=i.name;l!==""&&(i.name=""),i.defaultChecked=!i.defaultChecked,i.defaultChecked=!!i._wrapperState.initialChecked,l!==""&&(i.name=l)}function v(A,e){var t=A;d(t,e),X(t,e)}function X(A,e){var t=e.name;if(e.type==="radio"&&t!=null){for(var i=A;i.parentNode;)i=i.parentNode;et(t,"name");for(var a=i.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),n=0;n.")))}):e.dangerouslySetInnerHTML!=null&&(le||(le=!0,s("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")))),e.selected!=null&&!CA&&(s("Use the `defaultValue` or `value` props on instead of setting `selected` on ."),CA=!0)}function Je(A,e){e.value!=null&&A.setAttribute("value",ii(Ii(e.value)))}var ke=Array.isArray;function ae(A){return ke(A)}var At;At=!1;function ht(){var A=tn();return A?`
+`+i.stack}}function Hi(A,e,t){var i=A.displayName;if(i)return i;var a=e.displayName||e.name||"";return a!==""?t+"("+a+")":t}function Ui(A){return A.displayName||"Context"}function ce(A){if(A==null)return null;if(typeof A.tag=="number"&&s("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof A=="function")return A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case Ut:return"Fragment";case ti:return"Portal";case La:return"Profiler";case Ti:return"StrictMode";case eA:return"Suspense";case hA:return"SuspenseList"}if(typeof A=="object")switch(A.$$typeof){case p:var e=A;return Ui(e)+".Consumer";case Ni:var t=A;return Ui(t._context)+".Provider";case W:return Hi(A,A.render,"ForwardRef");case _A:var i=A.displayName||null;return i!==null?i:ce(A.type)||"Memo";case qA:{var a=A,n=a._payload,r=a._init;try{return ce(r(n))}catch{return null}}}return null}function tc(A,e,t){var i=e.displayName||e.name||"";return A.displayName||(i!==""?t+"("+i+")":t)}function Da(A){return A.displayName||"Context"}function JA(A){var e=A.tag,t=A.type;switch(e){case aA:return"Cache";case ue:var i=t;return Da(i)+".Consumer";case NA:var a=t;return Da(a._context)+".Provider";case $A:return"DehydratedFragment";case kA:return tc(t,t.render,"ForwardRef");case _:return"Fragment";case AA:return t;case KA:return"Portal";case tA:return"Root";case CA:return"Text";case Le:return ce(t);case Pe:return t===Ti?"StrictMode":"Mode";case O:return"Offscreen";case XA:return"Profiler";case xA:return"Scope";case L:return"Suspense";case Ue:return"SuspenseList";case se:return"TracingMarker";case mA:case cA:case Ee:case ye:case HA:case X:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;break}return null}var sl=P.ReactDebugCurrentFrame,ii=null,bn=!1;function tn(){{if(ii===null)return null;var A=ii._debugOwner;if(A!==null&&typeof A<"u")return JA(A)}return null}function ic(){return ii===null?"":xe(ii)}function Qt(){sl.getCurrentStack=null,ii=null,bn=!1}function tt(A){sl.getCurrentStack=A===null?null:ic,ii=A,bn=!1}function Oo(){return ii}function Wi(A){bn=A}function ai(A){return""+A}function Pi(A){switch(typeof A){case"boolean":case"number":case"string":case"undefined":return A;case"object":return nA(A),A;default:return""}}var ac={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function cl(A,e){ac[e.type]||e.onChange||e.onInput||e.readOnly||e.disabled||e.value==null||s("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."),e.onChange||e.readOnly||e.disabled||e.checked==null||s("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}function Xo(A){var e=A.type,t=A.nodeName;return t&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function hl(A){return A._valueTracker}function sr(A){A._valueTracker=null}function nc(A){var e="";return A&&(Xo(A)?e=A.checked?"true":"false":e=A.value),e}function an(A){var e=Xo(A)?"checked":"value",t=Object.getOwnPropertyDescriptor(A.constructor.prototype,e);nA(A[e]);var i=""+A[e];if(!(A.hasOwnProperty(e)||typeof t>"u"||typeof t.get!="function"||typeof t.set!="function")){var a=t.get,n=t.set;Object.defineProperty(A,e,{configurable:!0,get:function(){return a.call(this)},set:function(l){nA(l),i=""+l,n.call(this,l)}}),Object.defineProperty(A,e,{enumerable:t.enumerable});var r={getValue:function(){return i},setValue:function(l){nA(l),i=""+l},stopTracking:function(){sr(A),delete A[e]}};return r}}function vn(A){hl(A)||(A._valueTracker=an(A))}function ml(A){if(!A)return!1;var e=hl(A);if(!e)return!0;var t=e.getValue(),i=nc(A);return i!==t?(e.setValue(i),!0):!1}function Ba(A){if(A=A||(typeof document<"u"?document:void 0),typeof A>"u")return null;try{return A.activeElement||A.body}catch{return A.body}}var cr=!1,hr=!1,mr=!1,Ho=!1;function Po(A){var e=A.type==="checkbox"||A.type==="radio";return e?A.checked!=null:A.value!=null}function dl(A,e){var t=A,i=e.checked,a=b({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??t._wrapperState.initialChecked});return a}function _o(A,e){cl("input",e),e.checked!==void 0&&e.defaultChecked!==void 0&&!hr&&(s("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",tn()||"A component",e.type),hr=!0),e.value!==void 0&&e.defaultValue!==void 0&&!cr&&(s("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",tn()||"A component",e.type),cr=!0);var t=A,i=e.defaultValue==null?"":e.defaultValue;t._wrapperState={initialChecked:e.checked!=null?e.checked:e.defaultChecked,initialValue:Pi(e.value!=null?e.value:i),controlled:Po(e)}}function u(A,e){var t=A,i=e.checked;i!=null&&Ei(t,"checked",i,!1)}function d(A,e){var t=A;{var i=Po(e);!t._wrapperState.controlled&&i&&!Ho&&(s("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),Ho=!0),t._wrapperState.controlled&&!i&&!mr&&(s("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),mr=!0)}u(A,e);var a=Pi(e.value),n=e.type;if(a!=null)n==="number"?(a===0&&t.value===""||t.value!=a)&&(t.value=ai(a)):t.value!==ai(a)&&(t.value=ai(a));else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?QA(t,e.type,a):e.hasOwnProperty("defaultValue")&&QA(t,e.type,Pi(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function U(A,e,t){var i=A;if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var a=e.type,n=a==="submit"||a==="reset";if(n&&(e.value===void 0||e.value===null))return;var r=ai(i._wrapperState.initialValue);t||r!==i.value&&(i.value=r),i.defaultValue=r}var l=i.name;l!==""&&(i.name=""),i.defaultChecked=!i.defaultChecked,i.defaultChecked=!!i._wrapperState.initialChecked,l!==""&&(i.name=l)}function F(A,e){var t=A;d(t,e),k(t,e)}function k(A,e){var t=e.name;if(e.type==="radio"&&t!=null){for(var i=A;i.parentNode;)i=i.parentNode;at(t,"name");for(var a=i.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),n=0;n.")))}):e.dangerouslySetInnerHTML!=null&&(he||(he=!0,s("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")))),e.selected!=null&&!gA&&(s("Use the `defaultValue` or `value` props on instead of setting `selected` on ."),gA=!0)}function Oe(A,e){e.value!=null&&A.setAttribute("value",ai(Pi(e.value)))}var Xe=Array.isArray;function le(A){return Xe(A)}var it;it=!1;function mt(){var A=tn();return A?`
-Check the render method of \``+A+"`.":""}var bn=["value","defaultValue"];function dl(A){{sl("select",A);for(var e=0;e must be an array if `multiple` is true.%s",t,ht()):!A.multiple&&i&&s("The `%s` prop supplied to must be a scalar value if `multiple` is false.%s",t,ht())}}}}function Ma(A,e,t,i){var a=A.options;if(e){for(var n=t,r={},l=0;l.");var i=EA({},e,{value:void 0,defaultValue:void 0,children:ii(t._wrapperState.initialValue)});return i}function Lp(A,e){var t=A;sl("textarea",e),e.value!==void 0&&e.defaultValue!==void 0&&!Rp&&(s("%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://reactjs.org/link/controlled-components",tn()||"A component"),Rp=!0);var i=e.value;if(i==null){var a=e.children,n=e.defaultValue;if(a!=null){s("Use the `defaultValue` or `value` props instead of setting children on