From 09454774ac1e11990cabb501a92981f988f1d4c4 Mon Sep 17 00:00:00 2001 From: Yiannis Christodoulou Date: Thu, 2 Oct 2025 13:31:13 +0300 Subject: [PATCH] build assets --- static/video_editor/video-editor.css | 1 + static/video_editor/video-editor.js | 203 ++++++++++++++++++ static/video_editor/video-editor.js.map | 1 + static/video_js/video-js.css | 2 +- static/video_js/video-js.js | 262 ++++++++++++------------ static/video_js/video-js.js.map | 2 +- 6 files changed, 341 insertions(+), 130 deletions(-) create mode 100644 static/video_editor/video-editor.css create mode 100644 static/video_editor/video-editor.js create mode 100644 static/video_editor/video-editor.js.map diff --git a/static/video_editor/video-editor.css b/static/video_editor/video-editor.css new file mode 100644 index 00000000..c10b7d73 --- /dev/null +++ b/static/video_editor/video-editor.css @@ -0,0 +1 @@ +#video-editor-trim-root{@keyframes pulse{0%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}to{opacity:.7;transform:scale(1)}}}#video-editor-trim-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}#video-editor-trim-root .video-player-container video{width:100%;height:100%;cursor:pointer;transform:translateZ(0);-webkit-transform:translateZ(0);-webkit-user-select:none;-moz-user-select:none;user-select:none}@supports (-webkit-touch-callout: none){#video-editor-trim-root .video-player-container video{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}}#video-editor-trim-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}#video-editor-trim-root .video-player-container:hover .play-pause-indicator{opacity:1}#video-editor-trim-root .play-pause-indicator:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#video-editor-trim-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}#video-editor-trim-root .play-pause-indicator.pause-icon:before{width:20px;height:25px;border-left:6px solid white;border-right:6px solid white}#video-editor-trim-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}#video-editor-trim-root .ios-play-message{color:#fff;font-size:1.2rem;text-align:center;padding:1rem;background:#000c;border-radius:.5rem;animation:pulse 2s infinite}#video-editor-trim-root .video-controls{position:absolute;bottom:0;left:0;right:0;padding:.75rem;background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .3s}#video-editor-trim-root .video-player-container:hover .video-controls{opacity:1}#video-editor-trim-root .video-current-time,#video-editor-trim-root .video-duration{color:#fff;font-size:.875rem}#video-editor-trim-root .video-time-display{display:flex;justify-content:space-between;margin-bottom:.5rem;color:#fff;font-size:.875rem}#video-editor-trim-root .video-progress{position:relative;height:6px;background-color:#ffffff4d;border-radius:3px;cursor:pointer;margin:0 10px;touch-action:none;flex-grow:1}#video-editor-trim-root .video-progress.dragging{height:8px}#video-editor-trim-root .video-progress-fill{position:absolute;top:0;left:0;height:100%;background-color:red;border-radius:3px;pointer-events:none}#video-editor-trim-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}#video-editor-trim-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){#video-editor-trim-root .video-scrubber{width:20px;height:20px}#video-editor-trim-root .video-progress.dragging .video-scrubber{width:24px;height:24px}#video-editor-trim-root .video-scrubber:before{content:"";position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px}}#video-editor-trim-root .video-controls-buttons{display:flex;align-items:center;justify-content:flex-end;gap:.75rem}#video-editor-trim-root .mute-button,#video-editor-trim-root .fullscreen-button{min-width:auto;color:#fff;background:none;border:none;cursor:pointer;padding:.25rem;transition:transform .2s}#video-editor-trim-root .mute-button:hover,#video-editor-trim-root .fullscreen-button:hover{transform:scale(1.1)}#video-editor-trim-root .mute-button svg,#video-editor-trim-root .fullscreen-button svg{width:1.25rem;height:1.25rem}#video-editor-trim-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}#video-editor-trim-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)}#video-editor-trim-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}}}#video-editor-trim-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}#video-editor-trim-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}#video-editor-trim-root .modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #eee}#video-editor-trim-root .modal-title{margin:0;font-size:1.25rem;font-weight:600;color:#333}#video-editor-trim-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}#video-editor-trim-root .modal-close-button:hover{color:#000}#video-editor-trim-root .modal-content{padding:20px;color:#333;font-size:1rem;line-height:1.5;max-height:400px;overflow-y:auto}#video-editor-trim-root .modal-actions{display:flex;justify-content:flex-end;padding:16px 20px;border-top:1px solid #eee;gap:12px}#video-editor-trim-root .modal-button{padding:8px 16px;border-radius:4px;font-weight:500;cursor:pointer;transition:all .2s;border:none}#video-editor-trim-root .modal-button-primary{background-color:#06c;color:#fff}#video-editor-trim-root .modal-button-primary:hover{background-color:#05a}#video-editor-trim-root .modal-button-secondary{background-color:#f0f0f0;color:#333}#video-editor-trim-root .modal-button-secondary:hover{background-color:#e0e0e0}#video-editor-trim-root .modal-button-danger{background-color:#dc3545;color:#fff}#video-editor-trim-root .modal-button-danger:hover{background-color:#bd2130}#video-editor-trim-root .modal-message{margin-bottom:16px;font-size:1rem}#video-editor-trim-root .modal-spinner{display:flex;align-items:center;justify-content:center;margin:20px 0}#video-editor-trim-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}#video-editor-trim-root .modal-success-icon{display:flex;justify-content:center;margin-bottom:16px;color:#28a745;font-size:2rem}#video-editor-trim-root .modal-success-icon svg{width:60px;height:60px;color:#4caf50;animation:success-pop .5s ease-out}#video-editor-trim-root .modal-error-icon{display:flex;justify-content:center;margin-bottom:16px;color:#dc3545;font-size:2rem}#video-editor-trim-root .modal-error-icon svg{width:60px;height:60px;color:#f44336;animation:error-pop .5s ease-out}#video-editor-trim-root .modal-choices{display:flex;flex-direction:column;gap:10px;margin-top:20px}#video-editor-trim-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}#video-editor-trim-root .modal-choice-button:hover{background-color:#05a;transform:translateY(-1px);box-shadow:0 2px 5px #0000001a}#video-editor-trim-root .modal-choice-button svg{margin-right:8px}#video-editor-trim-root .success-link{background-color:#4caf50}#video-editor-trim-root .success-link:hover{background-color:#3d8b40}#video-editor-trim-root .centered-choice{margin:0 auto;width:auto;min-width:220px;background-color:#06c;color:#fff}#video-editor-trim-root .centered-choice:hover{background-color:#05a}@media (max-width: 480px){#video-editor-trim-root .modal-container{width:95%}#video-editor-trim-root .modal-actions{flex-direction:column}#video-editor-trim-root .modal-button{width:100%}}#video-editor-trim-root .error-message{color:#f44336;font-weight:500;background-color:#f443361a;padding:10px;border-radius:4px;border-left:4px solid #f44336;margin-top:10px}#video-editor-trim-root .redirect-message{color:#555;font-size:.95rem;padding:0;margin:0}#video-editor-trim-root .countdown{font-weight:700;color:#06c;font-size:1.1rem}#video-editor-trim-root{@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}}#video-editor-trim-root .timeline-container-card{background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#video-editor-trim-root .timeline-header{margin-bottom:.75rem;display:flex;justify-content:space-between;align-items:center}#video-editor-trim-root .timeline-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333)}#video-editor-trim-root .timeline-title-text{font-weight:700}#video-editor-trim-root .current-time{font-size:.875rem;color:var(--foreground, #333)}#video-editor-trim-root .time-code{font-family:monospace;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem}#video-editor-trim-root .duration-time{font-size:.875rem;color:var(--foreground, #333)}#video-editor-trim-root .timeline-scroll-container{position:relative;overflow:visible!important}#video-editor-trim-root .timeline-container{position:relative;min-width:100%;background-color:#fafbfc;height:70px;border-radius:.25rem;overflow:visible!important}#video-editor-trim-root .timeline-marker{position:absolute;height:82px;width:2px;background-color:#000;transform:translate(-50%);z-index:50;pointer-events:none}#video-editor-trim-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}#video-editor-trim-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}#video-editor-trim-root .timeline-marker-drag.dragging{cursor:grabbing;background-color:#374151}#video-editor-trim-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}#video-editor-trim-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}#video-editor-trim-root .trim-line-marker{position:absolute;top:0;bottom:0;width:1px;background-color:#00000080;z-index:20}#video-editor-trim-root .trim-handle{position:absolute;width:10px;height:20px;background-color:#000;cursor:ew-resize}#video-editor-trim-root .trim-handle.left{right:0;top:10px;border-radius:3px 0 0 3px}#video-editor-trim-root .trim-handle.right{left:0;top:10px;border-radius:0 3px 3px 0}#video-editor-trim-root .timeline-thumbnail{display:inline-block;height:70px;border-right:1px solid rgba(0,0,0,.03)}#video-editor-trim-root .split-point{position:absolute;top:0;bottom:0;width:1px;background-color:#ff000080;z-index:15}#video-editor-trim-root .clip-segment{position:absolute;height:70px;border-radius:4px;z-index:10;border:2px solid rgba(0,0,0,.15);cursor:pointer}#video-editor-trim-root .clip-segment:hover{box-shadow:0 0 0 2px #0000004d;border-color:#0006;background-color:#f0f0f0cc!important}#video-editor-trim-root .clip-segment.selected{box-shadow:0 0 0 2px #3b82f6b3;border-color:#3b82f6e6}#video-editor-trim-root .clip-segment.selected:hover{background-color:#f0f8ffd9!important}#video-editor-trim-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}#video-editor-trim-root .clip-segment:hover .clip-segment-info{background-color:#00000080}#video-editor-trim-root .clip-segment.selected .clip-segment-info{background-color:#3b82f680}#video-editor-trim-root .clip-segment.selected:hover .clip-segment-info{background-color:#3b82f666}#video-editor-trim-root .clip-segment-name{font-weight:700;font-size:12px}#video-editor-trim-root .clip-segment-time,#video-editor-trim-root .clip-segment-duration{font-size:10px}#video-editor-trim-root .clip-segment-handle{position:absolute;top:0;bottom:0;width:6px;background-color:#0003;cursor:ew-resize}#video-editor-trim-root .clip-segment-handle:hover{background-color:#0006}#video-editor-trim-root .clip-segment-handle.left{left:0;border-radius:2px 0 0 2px}#video-editor-trim-root .clip-segment-handle.right{right:0;border-radius:0 2px 2px 0}@media (pointer: coarse){#video-editor-trim-root .clip-segment-handle{width:14px;background-color:#0006}#video-editor-trim-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}#video-editor-trim-root .clip-segment-handle.left:after{box-shadow:-2px 0 #00000080}#video-editor-trim-root .clip-segment-handle.right:after{box-shadow:2px 0 #00000080}#video-editor-trim-root .clip-segment-handle:active{background-color:#0009}#video-editor-trim-root .timeline-marker{height:85px}#video-editor-trim-root .timeline-marker-head{width:24px;height:24px;top:-13px}#video-editor-trim-root .timeline-marker-drag{width:24px;height:24px;bottom:-18px}#video-editor-trim-root .timeline-marker-head.dragging{width:28px;height:28px;top:-15px}}#video-editor-trim-root .segment-tooltip,#video-editor-trim-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:-100px!important;transform:translateY(-10px)}#video-editor-trim-root .segment-tooltip:after,#video-editor-trim-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}#video-editor-trim-root .segment-tooltip:before,#video-editor-trim-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}#video-editor-trim-root .tooltip-time{font-weight:600;font-size:.875rem;margin-bottom:.5rem;color:#333}#video-editor-trim-root .tooltip-actions{display:flex;justify-content:center;gap:.5rem}#video-editor-trim-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}#video-editor-trim-root .tooltip-action-btn:hover{background-color:#e5e7eb;color:#111827}#video-editor-trim-root .tooltip-action-btn.delete{color:#ef4444}#video-editor-trim-root .tooltip-action-btn.delete:hover{background-color:#fee2e2}#video-editor-trim-root .tooltip-action-btn.new-segment{padding:.375rem .5rem}#video-editor-trim-root .tooltip-action-btn.new-segment .tooltip-btn-text{margin-left:.25rem;font-size:.75rem}#video-editor-trim-root .tooltip-action-btn svg{width:1rem;height:1rem}#video-editor-trim-root .timeline-controls{display:flex;align-items:center;justify-content:space-between;margin-top:.75rem}#video-editor-trim-root .time-navigation{display:none;align-items:center;gap:.5rem}#video-editor-trim-root .time-nav-label{font-size:.875rem;font-weight:500}#video-editor-trim-root .time-input{border:1px solid #d1d5db;border-radius:.25rem;padding:.25rem .5rem;width:8rem;font-size:.875rem}#video-editor-trim-root .time-button-group{display:flex}#video-editor-trim-root .time-button{background-color:#e5e7eb;color:#000;padding:.25rem .5rem;font-size:.875rem;border:none;cursor:pointer;margin-right:.5rem}#video-editor-trim-root .time-button:hover{background-color:#d1d5db}#video-editor-trim-root .time-button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}#video-editor-trim-root .time-button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}#video-editor-trim-root .controls-right{display:flex;align-items:center;gap:.5rem;margin-left:auto}#video-editor-trim-root .zoom-dropdown-container{position:relative;z-index:100;display:none}#video-editor-trim-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}#video-editor-trim-root .zoom-button:hover{background-color:#1f2937}#video-editor-trim-root .zoom-button svg{margin-left:.25rem}#video-editor-trim-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}#video-editor-trim-root .zoom-option{padding:.25rem .75rem;cursor:pointer}#video-editor-trim-root .zoom-option:hover{background-color:#4b5563}#video-editor-trim-root .zoom-option.selected{background-color:#6b7280;display:flex;align-items:center}#video-editor-trim-root .zoom-option svg{margin-right:.25rem}#video-editor-trim-root .save-buttons-row{display:flex;align-items:center;gap:.5rem;margin:0;flex-wrap:nowrap}#video-editor-trim-root .save-button,#video-editor-trim-root .save-copy-button,#video-editor-trim-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}#video-editor-trim-root .save-button:hover,#video-editor-trim-root .save-copy-button:hover,#video-editor-trim-root .save-segments-button:hover{background-color:#0056b3}@media (max-width: 576px){#video-editor-trim-root .save-buttons-row{width:100%;justify-content:space-between;gap:.5rem}#video-editor-trim-root .save-button,#video-editor-trim-root .save-copy-button,#video-editor-trim-root .save-segments-button{flex:1;font-size:.7rem;padding:.25rem .35rem}}@media (max-width: 480px){#video-editor-trim-root .save-button,#video-editor-trim-root .save-copy-button,#video-editor-trim-root .save-segments-button{font-size:.675rem;padding:.25rem}#video-editor-trim-root .controls-right,#video-editor-trim-root .controls-right button{margin:0}}#video-editor-trim-root .modal-success-content,#video-editor-trim-root .modal-error-content{display:flex;flex-direction:column;align-items:center;padding:1rem;text-align:center;padding:0;margin:0}#video-editor-trim-root .modal-success-icon,#video-editor-trim-root .modal-error-icon{margin-bottom:1rem}#video-editor-trim-root .modal-success-icon svg{color:#4caf50;animation:fadeIn .5s ease-in-out}#video-editor-trim-root .modal-error-icon svg{color:#f44336;animation:fadeIn .5s ease-in-out}#video-editor-trim-root .success-link{background-color:#4caf50;color:#fff;transition:background-color .3s}#video-editor-trim-root .success-link:hover{background-color:#388e3c}#video-editor-trim-root .error-message{color:#f44336;font-weight:500}#video-editor-trim-root .modal-spinner{display:flex;justify-content:center;margin:2rem 0}#video-editor-trim-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}#video-editor-trim-root .text-center{text-align:center}#video-editor-trim-root .modal-message{margin-bottom:1rem;line-height:1.5}#video-editor-trim-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}#video-editor-trim-root .modal-choice-button:hover{background-color:#0056b3}#video-editor-trim-root .modal-choice-button svg{flex-shrink:0}#video-editor-trim-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}.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}.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}}#video-editor-trim-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}}}#video-editor-trim-root .editing-tools-container{background-color:#fff;border-radius:.5rem;padding:1rem;margin-bottom:2.5rem;box-shadow:0 1px 2px #0000000d}#video-editor-trim-root .flex-container{display:flex;justify-content:space-between;align-items:center;position:relative;gap:15px;width:100%}#video-editor-trim-root .flex-container.single-row{flex-wrap:nowrap}#video-editor-trim-root .full-text{display:inline}#video-editor-trim-root .short-text{display:none}#video-editor-trim-root .reset-text{display:inline}#video-editor-trim-root .button-group{display:flex;align-items:center}#video-editor-trim-root .button-group.play-buttons-group{gap:.75rem;justify-content:flex-start;flex:0 0 auto}#video-editor-trim-root .button-group.secondary{gap:.75rem;align-items:center;justify-content:flex-end;margin-left:auto}#video-editor-trim-root .button-group button{display:flex;align-items:center;color:#333;background:none;border:none;cursor:pointer;min-width:auto}#video-editor-trim-root .button-group button:hover:not(:disabled){color:inherit}#video-editor-trim-root .button-group button:disabled{opacity:.5;cursor:not-allowed}#video-editor-trim-root .button-group button svg{height:1.25rem;width:1.25rem;margin-right:.25rem}#video-editor-trim-root .divider{border-right:1px solid #d1d5db;height:1.5rem;margin:0 .5rem}#video-editor-trim-root .play-button,#video-editor-trim-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}#video-editor-trim-root .play-button.greyed-out{opacity:.5;cursor:not-allowed}#video-editor-trim-root .segments-button.highlighted-stop{background-color:#3b82f61a;color:#3b82f6;border:1px solid #3b82f6;animation:bluePulse 2s infinite}#video-editor-trim-root .play-button:hover:not(:disabled),#video-editor-trim-root .preview-button:hover:not(:disabled){color:inherit!important;transform:none!important;font-size:.875rem!important;width:auto!important;background:none!important}#video-editor-trim-root .play-button svg,#video-editor-trim-root .preview-button svg{height:1.5rem;width:1.5rem;flex-shrink:0}#video-editor-trim-root .button-text{margin-left:.25rem}@media (max-width: 992px){#video-editor-trim-root .button-group.secondary .button-text{display:none}}@media (max-width: 768px){#video-editor-trim-root .flex-container.single-row{justify-content:space-between}#video-editor-trim-root .button-group{gap:.5rem}#video-editor-trim-root .preview-button,#video-editor-trim-root .play-button{font-size:.875rem!important}}@media (max-width: 640px){#video-editor-trim-root .editing-tools-container{padding:.75rem;overflow-x:hidden}#video-editor-trim-root .preview-button{min-width:auto}#video-editor-trim-root .full-text{display:none}#video-editor-trim-root .short-text{display:inline;margin-left:.15rem}#video-editor-trim-root .reset-text{display:none}#video-editor-trim-root .button-group.play-buttons-group{flex:initial;justify-content:flex-start;flex-shrink:0}#video-editor-trim-root .button-group.secondary{flex:initial;justify-content:flex-end;flex-shrink:0}#video-editor-trim-root .button-group button{padding:.375rem;min-width:auto}#video-editor-trim-root .button-group button svg{height:1.125rem;width:1.125rem;margin-right:.125rem}}@media (max-width: 576px){#video-editor-trim-root .flex-container.single-row{justify-content:space-between;flex-wrap:nowrap;gap:10px}#video-editor-trim-root .button-group.play-buttons-group{justify-content:flex-start;flex:0 0 auto}#video-editor-trim-root .button-group.secondary{justify-content:flex-end;margin-left:auto}#video-editor-trim-root .button-group button{padding:.25rem}#video-editor-trim-root .divider{margin:0 .25rem}}@media (max-width: 480px){#video-editor-trim-root .editing-tools-container{padding:.5rem}#video-editor-trim-root .flex-container.single-row{gap:8px}#video-editor-trim-root .button-group.play-buttons-group,#video-editor-trim-root .button-group.secondary{gap:.25rem}#video-editor-trim-root .divider{display:none}#video-editor-trim-root .button-group button{padding:.125rem}#video-editor-trim-root .button-group button svg{height:1rem;width:1rem;margin-right:0}#video-editor-trim-root .button-text,#video-editor-trim-root .reset-text{display:none}}@media (max-width: 640px) and (orientation: portrait){#video-editor-trim-root .editing-tools-container{width:100%;box-sizing:border-box}#video-editor-trim-root .flex-container.single-row{width:100%;padding:0;margin:0}#video-editor-trim-root .button-group{max-width:50%}#video-editor-trim-root .button-group.play-buttons-group{max-width:60%}#video-editor-trim-root .button-group.secondary{max-width:40%}}@media (hover: hover) and (pointer: fine){#video-editor-trim-root [data-tooltip]{position:relative}#video-editor-trim-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}#video-editor-trim-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}#video-editor-trim-root [data-tooltip]:hover:before,#video-editor-trim-root [data-tooltip]:hover:after{opacity:1;visibility:visible}}@media (pointer: coarse){#video-editor-trim-root [data-tooltip]:before,#video-editor-trim-root [data-tooltip]:after{display:none!important;content:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important}}#video-editor-trim-root .clip-segments-container{margin-top:1rem;background-color:#fff;border-radius:.5rem;padding:1rem;box-shadow:0 1px 2px #0000000d}#video-editor-trim-root .clip-segments-title{font-size:.875rem;font-weight:500;color:var(--foreground, #333);margin-bottom:.75rem}#video-editor-trim-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:box-shadow .2s ease}#video-editor-trim-root .segment-item:hover{box-shadow:0 4px 6px -1px #0000001a}#video-editor-trim-root .segment-content{display:flex;align-items:center}#video-editor-trim-root .segment-thumbnail{width:4rem;height:2.25rem;background-size:cover;background-position:center;border-radius:.25rem;margin-right:.75rem;box-shadow:0 0 0 1px #ffffff4d}#video-editor-trim-root .segment-info{display:flex;flex-direction:column}#video-editor-trim-root .segment-title{font-weight:500;font-size:.875rem;color:#000}#video-editor-trim-root .segment-time{font-size:.75rem;color:#000}#video-editor-trim-root .segment-duration{font-size:.75rem;margin-top:.25rem;display:inline-block;background-color:#f3f4f6;padding:0 .5rem;border-radius:.25rem;color:#000}#video-editor-trim-root .segment-actions{display:flex;align-items:center;gap:.5rem}#video-editor-trim-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}#video-editor-trim-root .delete-button:hover{color:#000;background-color:#d1d5db}#video-editor-trim-root .delete-button svg{height:1rem;width:1rem}#video-editor-trim-root .empty-message{padding:1rem;text-align:center;color:#333333b3}#video-editor-trim-root .segment-color-1{background-color:#3b82f626}#video-editor-trim-root .segment-color-2{background-color:#10b98126}#video-editor-trim-root .segment-color-3{background-color:#f59e0b26}#video-editor-trim-root .segment-color-4{background-color:#ef444426}#video-editor-trim-root .segment-color-5{background-color:#8b5cf626}#video-editor-trim-root .segment-color-6{background-color:#ec489926}#video-editor-trim-root .segment-color-7{background-color:#06b6d426}#video-editor-trim-root .segment-color-8{background-color:#facc1526}.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}.timeline-thumbnail{height:100%;border-right:1px solid rgba(0,0,0,.1);position:relative;display:inline-block;background-size:cover;background-position:center}.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/video_editor/video-editor.js b/static/video_editor/video-editor.js new file mode 100644 index 00000000..015f0f9c --- /dev/null +++ b/static/video_editor/video-editor.js @@ -0,0 +1,203 @@ +(function(){"use strict";var dm={exports:{}},Kc={exports:{}},il={exports:{}};il.exports;var vm;function z0(){return vm||(vm=1,function(w,k){/** + * @license React + * react.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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 se="18.3.1",me=Symbol.for("react.element"),le=Symbol.for("react.portal"),xe=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),ge=Symbol.for("react.provider"),re=Symbol.for("react.context"),yt=Symbol.for("react.forward_ref"),W=Symbol.for("react.suspense"),z=Symbol.for("react.suspense_list"),ne=Symbol.for("react.memo"),Le=Symbol.for("react.lazy"),zt=Symbol.for("react.offscreen"),Gt=Symbol.iterator,gt="@@iterator";function Pe(s){if(s===null||typeof s!="object")return null;var m=Gt&&s[Gt]||s[gt];return typeof m=="function"?m:null}var De={current:null},rt={transition:null},M={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},ie={current:null},we={},$t=null;function Ae(s){$t=s}we.setExtraStackFrame=function(s){$t=s},we.getCurrentStack=null,we.getStackAddendum=function(){var s="";$t&&(s+=$t);var m=we.getCurrentStack;return m&&(s+=m()||""),s};var he=!1,nt=!1,ce=!1,Me=!1,Je=!1,fe={ReactCurrentDispatcher:De,ReactCurrentBatchConfig:rt,ReactCurrentOwner:ie};fe.ReactDebugCurrentFrame=we,fe.ReactCurrentActQueue=M;function I(s){{for(var m=arguments.length,L=new Array(m>1?m-1:0),A=1;A1?m-1:0),A=1;A1){for(var It=Array(Ot),Wt=0;Wt1){for(var ot=Array(Wt),Zt=0;Zt is not supported and will be removed in a future major release. Did you mean to render instead?")),m.Provider},set:function(Se){m.Provider=Se}},_currentValue:{get:function(){return m._currentValue},set:function(Se){m._currentValue=Se}},_currentValue2:{get:function(){return m._currentValue2},set:function(Se){m._currentValue2=Se}},_threadCount:{get:function(){return m._threadCount},set:function(Se){m._threadCount=Se}},Consumer:{get:function(){return L||(L=!0,q("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),m.Consumer}},displayName:{get:function(){return m.displayName},set:function(Se){Z||(I("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",Se),Z=!0)}}}),m.Consumer=Ne}return m._currentRenderer=null,m._currentRenderer2=null,m}var $n=-1,Kn=0,Jn=1,ka=2;function Tr(s){if(s._status===$n){var m=s._result,L=m();if(L.then(function(Ne){if(s._status===Kn||s._status===$n){var Se=s;Se._status=Jn,Se._result=Ne}},function(Ne){if(s._status===Kn||s._status===$n){var Se=s;Se._status=ka,Se._result=Ne}}),s._status===$n){var A=s;A._status=Kn,A._result=L}}if(s._status===Jn){var Z=s._result;return Z===void 0&&q(`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?`,Z),"default"in Z||q(`lazy: Expected the result of a dynamic import() call. Instead received: %s + +Your code should look like: + const MyComponent = lazy(() => import('./MyComponent'))`,Z),Z.default}else throw s._result}function Ma(s){var m={_status:$n,_result:s},L={$$typeof:Le,_payload:m,_init:Tr};{var A,Z;Object.defineProperties(L,{defaultProps:{configurable:!0,get:function(){return A},set:function(Ne){q("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."),A=Ne,Object.defineProperty(L,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return Z},set:function(Ne){q("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."),Z=Ne,Object.defineProperty(L,"propTypes",{enumerable:!0})}}})}return L}function La(s){s!=null&&s.$$typeof===ne?q("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof s!="function"?q("forwardRef requires a render function but was given %s.",s===null?"null":typeof s):s.length!==0&&s.length!==2&&q("forwardRef render functions accept exactly two parameters: props and ref. %s",s.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),s!=null&&(s.defaultProps!=null||s.propTypes!=null)&&q("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var m={$$typeof:yt,render:s};{var L;Object.defineProperty(m,"displayName",{enumerable:!1,configurable:!0,get:function(){return L},set:function(A){L=A,!s.name&&!s.displayName&&(s.displayName=A)}})}return m}var h;h=Symbol.for("react.module.reference");function $(s){return!!(typeof s=="string"||typeof s=="function"||s===xe||s===X||Je||s===f||s===W||s===z||Me||s===zt||he||nt||ce||typeof s=="object"&&s!==null&&(s.$$typeof===Le||s.$$typeof===ne||s.$$typeof===ge||s.$$typeof===re||s.$$typeof===yt||s.$$typeof===h||s.getModuleId!==void 0))}function v(s,m){$(s)||q("memo: The first argument must be a component. Instead received: %s",s===null?"null":typeof s);var L={$$typeof:ne,type:s,compare:m===void 0?null:m};{var A;Object.defineProperty(L,"displayName",{enumerable:!1,configurable:!0,get:function(){return A},set:function(Z){A=Z,!s.name&&!s.displayName&&(s.displayName=Z)}})}return L}function x(){var s=De.current;return s===null&&q(`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.`),s}function T(s){var m=x();if(s._context!==void 0){var L=s._context;L.Consumer===s?q("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?"):L.Provider===s&&q("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return m.useContext(s)}function y(s){var m=x();return m.useState(s)}function b(s,m,L){var A=x();return A.useReducer(s,m,L)}function C(s){var m=x();return m.useRef(s)}function g(s,m){var L=x();return L.useEffect(s,m)}function U(s,m){var L=x();return L.useInsertionEffect(s,m)}function H(s,m){var L=x();return L.useLayoutEffect(s,m)}function J(s,m){var L=x();return L.useCallback(s,m)}function et(s,m){var L=x();return L.useMemo(s,m)}function te(s,m,L){var A=x();return A.useImperativeHandle(s,m,L)}function Re(s,m){{var L=x();return L.useDebugValue(s,m)}}function ye(){var s=x();return s.useTransition()}function it(s){var m=x();return m.useDeferredValue(s)}function on(){var s=x();return s.useId()}function Xr(s,m,L){var A=x();return A.useSyncExternalStore(s,m,L)}var Zn=0,xn,ir,wn,Bt,sa,Er,ll;function Cr(){}Cr.__reactDisabledLog=!0;function ga(){{if(Zn===0){xn=console.log,ir=console.info,wn=console.warn,Bt=console.error,sa=console.group,Er=console.groupCollapsed,ll=console.groupEnd;var s={configurable:!0,enumerable:!0,value:Cr,writable:!0};Object.defineProperties(console,{info:s,log:s,warn:s,error:s,group:s,groupCollapsed:s,groupEnd:s})}Zn++}}function Rn(){{if(Zn--,Zn===0){var s={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Ie({},s,{value:xn}),info:Ie({},s,{value:ir}),warn:Ie({},s,{value:wn}),error:Ie({},s,{value:Bt}),group:Ie({},s,{value:sa}),groupCollapsed:Ie({},s,{value:Er}),groupEnd:Ie({},s,{value:ll})})}Zn<0&&q("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var or=fe.ReactCurrentDispatcher,lr;function nn(s,m,L){{if(lr===void 0)try{throw Error()}catch(Z){var A=Z.stack.trim().match(/\n( *(at )?)/);lr=A&&A[1]||""}return` +`+lr+s}}var ht=!1,ba;{var Sa=typeof WeakMap=="function"?WeakMap:Map;ba=new Sa}function Qr(s,m){if(!s||ht)return"";{var L=ba.get(s);if(L!==void 0)return L}var A;ht=!0;var Z=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Ne;Ne=or.current,or.current=null,ga();try{if(m){var Se=function(){throw Error()};if(Object.defineProperty(Se.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Se,[])}catch(fn){A=fn}Reflect.construct(s,[],Se)}else{try{Se.call()}catch(fn){A=fn}s.call(Se.prototype)}}else{try{throw Error()}catch(fn){A=fn}s()}}catch(fn){if(fn&&A&&typeof fn.stack=="string"){for(var We=fn.stack.split(` +`),st=A.stack.split(` +`),Ot=We.length-1,It=st.length-1;Ot>=1&&It>=0&&We[Ot]!==st[It];)It--;for(;Ot>=1&&It>=0;Ot--,It--)if(We[Ot]!==st[It]){if(Ot!==1||It!==1)do if(Ot--,It--,It<0||We[Ot]!==st[It]){var Wt=` +`+We[Ot].replace(" at new "," at ");return s.displayName&&Wt.includes("")&&(Wt=Wt.replace("",s.displayName)),typeof s=="function"&&ba.set(s,Wt),Wt}while(Ot>=1&&It>=0);break}}}finally{ht=!1,or.current=Ne,Rn(),Error.prepareStackTrace=Z}var ot=s?s.displayName||s.name:"",Zt=ot?nn(ot):"";return typeof s=="function"&&ba.set(s,Zt),Zt}function ul(s,m,L){return Qr(s,!1)}function af(s){var m=s.prototype;return!!(m&&m.isReactComponent)}function xi(s,m,L){if(s==null)return"";if(typeof s=="function")return Qr(s,af(s));if(typeof s=="string")return nn(s);switch(s){case W:return nn("Suspense");case z:return nn("SuspenseList")}if(typeof s=="object")switch(s.$$typeof){case yt:return ul(s.render);case ne:return xi(s.type,m,L);case Le:{var A=s,Z=A._payload,Ne=A._init;try{return xi(Ne(Z),m,L)}catch{}}}return""}var Iu={},sl=fe.ReactDebugCurrentFrame;function xt(s){if(s){var m=s._owner,L=xi(s.type,s._source,m?m.type:null);sl.setExtraStackFrame(L)}else sl.setExtraStackFrame(null)}function rf(s,m,L,A,Z){{var Ne=Function.call.bind(vt);for(var Se in s)if(Ne(s,Se)){var We=void 0;try{if(typeof s[Se]!="function"){var st=Error((A||"React class")+": "+L+" type `"+Se+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof s[Se]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw st.name="Invariant Violation",st}We=s[Se](m,Se,A,L,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(Ot){We=Ot}We&&!(We instanceof Error)&&(xt(Z),q("%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).",A||"React class",L,Se,typeof We),xt(null)),We instanceof Error&&!(We.message in Iu)&&(Iu[We.message]=!0,xt(Z),q("Failed %s type: %s",L,We.message),xt(null))}}}function xr(s){if(s){var m=s._owner,L=xi(s.type,s._source,m?m.type:null);Ae(L)}else Ae(null)}var Xe;Xe=!1;function cl(){if(ie.current){var s=Ge(ie.current.type);if(s)return` + +Check the render method of \``+s+"`."}return""}function ea(s){if(s!==void 0){var m=s.fileName.replace(/^.*[\\\/]/,""),L=s.lineNumber;return` + +Check your code at `+m+":"+L+"."}return""}function wi(s){return s!=null?ea(s.__source):""}var Kr={};function of(s){var m=cl();if(!m){var L=typeof s=="string"?s:s.displayName||s.name;L&&(m=` + +Check the top-level render call using <`+L+">.")}return m}function Dn(s,m){if(!(!s._store||s._store.validated||s.key!=null)){s._store.validated=!0;var L=of(m);if(!Kr[L]){Kr[L]=!0;var A="";s&&s._owner&&s._owner!==ie.current&&(A=" It was passed a child from "+Ge(s._owner.type)+"."),xr(s),q('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',L,A),xr(null)}}}function Jt(s,m){if(typeof s=="object"){if(V(s))for(var L=0;L",Z=" Did you accidentally export a JSX literal instead of a component?"):Se=typeof s,q("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",Se,Z)}var We=Ke.apply(this,arguments);if(We==null)return We;if(A)for(var st=2;st10&&I("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."),A._updatedFibers.clear()}}}var dl=!1,oo=null;function uf(s){if(oo===null)try{var m=("require"+Math.random()).slice(0,7),L=w&&w[m];oo=L.call(w,"timers").setImmediate}catch{oo=function(Z){dl===!1&&(dl=!0,typeof MessageChannel>"u"&&q("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 Ne=new MessageChannel;Ne.port1.onmessage=Z,Ne.port2.postMessage(void 0)}}return oo(s)}var Jr=0,Ri=!1;function vl(s){{var m=Jr;Jr++,M.current===null&&(M.current=[]);var L=M.isBatchingLegacy,A;try{if(M.isBatchingLegacy=!0,A=s(),!L&&M.didScheduleLegacyUpdate){var Z=M.current;Z!==null&&(M.didScheduleLegacyUpdate=!1,so(Z))}}catch(ot){throw wr(m),ot}finally{M.isBatchingLegacy=L}if(A!==null&&typeof A=="object"&&typeof A.then=="function"){var Ne=A,Se=!1,We={then:function(ot,Zt){Se=!0,Ne.then(function(fn){wr(m),Jr===0?lo(fn,ot,Zt):ot(fn)},function(fn){wr(m),Zt(fn)})}};return!Ri&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){Se||(Ri=!0,q("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 () => ...);"))}),We}else{var st=A;if(wr(m),Jr===0){var Ot=M.current;Ot!==null&&(so(Ot),M.current=null);var It={then:function(ot,Zt){M.current===null?(M.current=[],lo(st,ot,Zt)):ot(st)}};return It}else{var Wt={then:function(ot,Zt){ot(st)}};return Wt}}}}function wr(s){s!==Jr-1&&q("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),Jr=s}function lo(s,m,L){{var A=M.current;if(A!==null)try{so(A),uf(function(){A.length===0?(M.current=null,m(s)):lo(s,m,L)})}catch(Z){L(Z)}else m(s)}}var uo=!1;function so(s){if(!uo){uo=!0;var m=0;try{for(;m1?$-1:0),x=1;x<$;x++)v[x-1]=arguments[x];De("error",h,v)}}function De(h,$,v){{var x=gt.ReactDebugCurrentFrame,T=x.getStackAddendum();T!==""&&($+="%s",v=v.concat([T]));var y=v.map(function(b){return String(b)});y.unshift("Warning: "+$),Function.prototype.apply.call(console[h],console,y)}}var rt=!1,M=!1,ie=!1,we=!1,$t=!1,Ae;Ae=Symbol.for("react.module.reference");function he(h){return!!(typeof h=="string"||typeof h=="function"||h===me||h===xe||$t||h===le||h===re||h===yt||we||h===ne||rt||M||ie||typeof h=="object"&&h!==null&&(h.$$typeof===z||h.$$typeof===W||h.$$typeof===f||h.$$typeof===X||h.$$typeof===ge||h.$$typeof===Ae||h.getModuleId!==void 0))}function nt(h,$,v){var x=h.displayName;if(x)return x;var T=$.displayName||$.name||"";return T!==""?v+"("+T+")":v}function ce(h){return h.displayName||"Context"}function Me(h){if(h==null)return null;if(typeof h.tag=="number"&&Pe("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof h=="function")return h.displayName||h.name||null;if(typeof h=="string")return h;switch(h){case me:return"Fragment";case se:return"Portal";case xe:return"Profiler";case le:return"StrictMode";case re:return"Suspense";case yt:return"SuspenseList"}if(typeof h=="object")switch(h.$$typeof){case X:var $=h;return ce($)+".Consumer";case f:var v=h;return ce(v._context)+".Provider";case ge:return nt(h,h.render,"ForwardRef");case W:var x=h.displayName||null;return x!==null?x:Me(h.type)||"Memo";case z:{var T=h,y=T._payload,b=T._init;try{return Me(b(y))}catch{return null}}}return null}var Je=Object.assign,fe=0,I,q,Ye,Fe,at,ut,Ie;function Ve(){}Ve.__reactDisabledLog=!0;function Ue(){{if(fe===0){I=console.log,q=console.info,Ye=console.warn,Fe=console.error,at=console.group,ut=console.groupCollapsed,Ie=console.groupEnd;var h={configurable:!0,enumerable:!0,value:Ve,writable:!0};Object.defineProperties(console,{info:h,log:h,warn:h,error:h,group:h,groupCollapsed:h,groupEnd:h})}fe++}}function un(){{if(fe--,fe===0){var h={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Je({},h,{value:I}),info:Je({},h,{value:q}),warn:Je({},h,{value:Ye}),error:Je({},h,{value:Fe}),group:Je({},h,{value:at}),groupCollapsed:Je({},h,{value:ut}),groupEnd:Je({},h,{value:Ie})})}fe<0&&Pe("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ze=gt.ReactCurrentDispatcher,Ut;function pt(h,$,v){{if(Ut===void 0)try{throw Error()}catch(T){var x=T.stack.trim().match(/\n( *(at )?)/);Ut=x&&x[1]||""}return` +`+Ut+h}}var Qe=!1,Xt;{var en=typeof WeakMap=="function"?WeakMap:Map;Xt=new en}function En(h,$){if(!h||Qe)return"";{var v=Xt.get(h);if(v!==void 0)return v}var x;Qe=!0;var T=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var y;y=Ze.current,Ze.current=null,Ue();try{if($){var b=function(){throw Error()};if(Object.defineProperty(b.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(b,[])}catch(Re){x=Re}Reflect.construct(h,[],b)}else{try{b.call()}catch(Re){x=Re}h.call(b.prototype)}}else{try{throw Error()}catch(Re){x=Re}h()}}catch(Re){if(Re&&x&&typeof Re.stack=="string"){for(var C=Re.stack.split(` +`),g=x.stack.split(` +`),U=C.length-1,H=g.length-1;U>=1&&H>=0&&C[U]!==g[H];)H--;for(;U>=1&&H>=0;U--,H--)if(C[U]!==g[H]){if(U!==1||H!==1)do if(U--,H--,H<0||C[U]!==g[H]){var J=` +`+C[U].replace(" at new "," at ");return h.displayName&&J.includes("")&&(J=J.replace("",h.displayName)),typeof h=="function"&&Xt.set(h,J),J}while(U>=1&&H>=0);break}}}finally{Qe=!1,Ze.current=y,un(),Error.prepareStackTrace=T}var et=h?h.displayName||h.name:"",te=et?pt(et):"";return typeof h=="function"&&Xt.set(h,te),te}function V(h,$,v){return En(h,!1)}function K(h){var $=h.prototype;return!!($&&$.isReactComponent)}function Ee(h,$,v){if(h==null)return"";if(typeof h=="function")return En(h,K(h));if(typeof h=="string")return pt(h);switch(h){case re:return pt("Suspense");case yt:return pt("SuspenseList")}if(typeof h=="object")switch(h.$$typeof){case ge:return V(h.render);case W:return Ee(h.type,$,v);case z:{var x=h,T=x._payload,y=x._init;try{return Ee(y(T),$,v)}catch{}}}return""}var Te=Object.prototype.hasOwnProperty,He={},Tt=gt.ReactDebugCurrentFrame;function Et(h){if(h){var $=h._owner,v=Ee(h.type,h._source,$?$.type:null);Tt.setExtraStackFrame(v)}else Tt.setExtraStackFrame(null)}function Ge(h,$,v,x,T){{var y=Function.call.bind(Te);for(var b in h)if(y(h,b)){var C=void 0;try{if(typeof h[b]!="function"){var g=Error((x||"React class")+": "+v+" type `"+b+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof h[b]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw g.name="Invariant Violation",g}C=h[b]($,b,x,v,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(U){C=U}C&&!(C instanceof Error)&&(Et(T),Pe("%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).",x||"React class",v,b,typeof C),Et(null)),C instanceof Error&&!(C.message in He)&&(He[C.message]=!0,Et(T),Pe("Failed %s type: %s",v,C.message),Et(null))}}}var vt=Array.isArray;function Ct(h){return vt(h)}function Kt(h){{var $=typeof Symbol=="function"&&Symbol.toStringTag,v=$&&h[Symbol.toStringTag]||h.constructor.name||"Object";return v}}function sn(h){try{return Lt(h),!1}catch{return!0}}function Lt(h){return""+h}function Mt(h){if(sn(h))return Pe("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Kt(h)),Lt(h)}var Cn=gt.ReactCurrentOwner,Xn={key:!0,ref:!0,__self:!0,__source:!0},Ba,G;function _e(h){if(Te.call(h,"ref")){var $=Object.getOwnPropertyDescriptor(h,"ref").get;if($&&$.isReactWarning)return!1}return h.ref!==void 0}function Ke(h){if(Te.call(h,"key")){var $=Object.getOwnPropertyDescriptor(h,"key").get;if($&&$.isReactWarning)return!1}return h.key!==void 0}function Rt(h,$){typeof h.ref=="string"&&Cn.current}function mt(h,$){{var v=function(){Ba||(Ba=!0,Pe("%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)",$))};v.isReactWarning=!0,Object.defineProperty(h,"key",{get:v,configurable:!0})}}function Ht(h,$){{var v=function(){G||(G=!0,Pe("%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)",$))};v.isReactWarning=!0,Object.defineProperty(h,"ref",{get:v,configurable:!0})}}var Pt=function(h,$,v,x,T,y,b){var C={$$typeof:k,type:h,key:$,ref:v,props:b,_owner:y};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:x}),Object.defineProperty(C,"_source",{configurable:!1,enumerable:!1,writable:!1,value:T}),Object.freeze&&(Object.freeze(C.props),Object.freeze(C)),C};function cn(h,$,v,x,T){{var y,b={},C=null,g=null;v!==void 0&&(Mt(v),C=""+v),Ke($)&&(Mt($.key),C=""+$.key),_e($)&&(g=$.ref,Rt($,T));for(y in $)Te.call($,y)&&!Xn.hasOwnProperty(y)&&(b[y]=$[y]);if(h&&h.defaultProps){var U=h.defaultProps;for(y in U)b[y]===void 0&&(b[y]=U[y])}if(C||g){var H=typeof h=="function"?h.displayName||h.name||"Unknown":h;C&&mt(b,H),g&&Ht(b,H)}return Pt(h,C,g,T,x,Cn.current,b)}}var Ft=gt.ReactCurrentOwner,Dt=gt.ReactDebugCurrentFrame;function Vt(h){if(h){var $=h._owner,v=Ee(h.type,h._source,$?$.type:null);Dt.setExtraStackFrame(v)}else Dt.setExtraStackFrame(null)}var ar;ar=!1;function ha(h){return typeof h=="object"&&h!==null&&h.$$typeof===k}function ya(){{if(Ft.current){var h=Me(Ft.current.type);if(h)return` + +Check the render method of \``+h+"`."}return""}}function rr(h){return""}var Wr={};function qr(h){{var $=ya();if(!$){var v=typeof h=="string"?h:h.displayName||h.name;v&&($=` + +Check the top-level render call using <`+v+">.")}return $}}function Qn(h,$){{if(!h._store||h._store.validated||h.key!=null)return;h._store.validated=!0;var v=qr($);if(Wr[v])return;Wr[v]=!0;var x="";h&&h._owner&&h._owner!==Ft.current&&(x=" It was passed a child from "+Me(h._owner.type)+"."),Vt(h),Pe('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',v,x),Vt(null)}}function _a(h,$){{if(typeof h!="object")return;if(Ct(h))for(var v=0;v",C=" Did you accidentally export a JSX literal instead of a component?"):U=typeof h,Pe("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",U,C)}var H=cn(h,$,v,T,y);if(H==null)return H;if(b){var J=$.children;if(J!==void 0)if(x)if(Ct(J)){for(var et=0;et0?"{key: someKey, "+Re.join(": ..., ")+": ...}":"{key: someKey}";if(!Kn[te+ye]){var it=Re.length>0?"{"+Re.join(": ..., ")+": ...}":"{}";Pe(`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} />`,ye,te,it,te),Kn[te+ye]=!0}}return h===me?$n(H):Gr(H),H}}function ka(h,$,v){return Jn(h,$,v,!0)}function Tr(h,$,v){return Jn(h,$,v,!1)}var Ma=Tr,La=ka;ol.Fragment=me,ol.jsx=Ma,ol.jsxs=La}(),ol}dm.exports=F0();var p=dm.exports,hm={exports:{}},Zc={exports:{}},ef={},ym;function V0(){return ym||(ym=1,function(w){/** + * @license React + * scheduler.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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 k=!1,se=5;function me(G,_e){var Ke=G.length;G.push(_e),f(G,_e,Ke)}function le(G){return G.length===0?null:G[0]}function xe(G){if(G.length===0)return null;var _e=G[0],Ke=G.pop();return Ke!==_e&&(G[0]=Ke,X(G,Ke,0)),_e}function f(G,_e,Ke){for(var Rt=Ke;Rt>0;){var mt=Rt-1>>>1,Ht=G[mt];if(ge(Ht,_e)>0)G[mt]=_e,G[Rt]=Ht,Rt=mt;else return}}function X(G,_e,Ke){for(var Rt=Ke,mt=G.length,Ht=mt>>>1;RtKe&&(!G||Tt()));){var Rt=ce.callback;if(typeof Rt=="function"){ce.callback=null,Me=ce.priorityLevel;var mt=ce.expirationTime<=Ke,Ht=Rt(mt);Ke=w.unstable_now(),typeof Ht=="function"?ce.callback=Ht:ce===le(Ae)&&xe(Ae),at(Ke)}else xe(Ae);ce=le(Ae)}if(ce!==null)return!0;var Pt=le(he);return Pt!==null&&Mt(ut,Pt.startTime-Ke),!1}function Ue(G,_e){switch(G){case re:case yt:case W:case z:case ne:break;default:G=W}var Ke=Me;Me=G;try{return _e()}finally{Me=Ke}}function un(G){var _e;switch(Me){case re:case yt:case W:_e=W;break;default:_e=Me;break}var Ke=Me;Me=_e;try{return G()}finally{Me=Ke}}function Ze(G){var _e=Me;return function(){var Ke=Me;Me=_e;try{return G.apply(this,arguments)}finally{Me=Ke}}}function Ut(G,_e,Ke){var Rt=w.unstable_now(),mt;if(typeof Ke=="object"&&Ke!==null){var Ht=Ke.delay;typeof Ht=="number"&&Ht>0?mt=Rt+Ht:mt=Rt}else mt=Rt;var Pt;switch(G){case re:Pt=rt;break;case yt:Pt=M;break;case ne:Pt=$t;break;case z:Pt=we;break;case W:default:Pt=ie;break}var cn=mt+Pt,Ft={id:nt++,callback:_e,priorityLevel:G,startTime:mt,expirationTime:cn,sortIndex:-1};return mt>Rt?(Ft.sortIndex=mt,me(he,Ft),le(Ae)===null&&Ft===le(he)&&(I?Cn():I=!0,Mt(ut,mt-Rt))):(Ft.sortIndex=cn,me(Ae,Ft),!fe&&!Je&&(fe=!0,Lt(Ie))),Ft}function pt(){}function Qe(){!fe&&!Je&&(fe=!0,Lt(Ie))}function Xt(){return le(Ae)}function en(G){G.callback=null}function En(){return Me}var V=!1,K=null,Ee=-1,Te=se,He=-1;function Tt(){var G=w.unstable_now()-He;return!(G125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported");return}G>0?Te=Math.floor(1e3/G):Te=se}var vt=function(){if(K!==null){var G=w.unstable_now();He=G;var _e=!0,Ke=!0;try{Ke=K(_e,G)}finally{Ke?Ct():(V=!1,K=null)}}else V=!1},Ct;if(typeof Fe=="function")Ct=function(){Fe(vt)};else if(typeof MessageChannel<"u"){var Kt=new MessageChannel,sn=Kt.port2;Kt.port1.onmessage=vt,Ct=function(){sn.postMessage(null)}}else Ct=function(){q(vt,0)};function Lt(G){K=G,V||(V=!0,Ct())}function Mt(G,_e){Ee=q(function(){G(w.unstable_now())},_e)}function Cn(){Ye(Ee),Ee=-1}var Xn=Et,Ba=null;w.unstable_IdlePriority=ne,w.unstable_ImmediatePriority=re,w.unstable_LowPriority=z,w.unstable_NormalPriority=W,w.unstable_Profiling=Ba,w.unstable_UserBlockingPriority=yt,w.unstable_cancelCallback=en,w.unstable_continueExecution=Qe,w.unstable_forceFrameRate=Ge,w.unstable_getCurrentPriorityLevel=En,w.unstable_getFirstCallbackNode=Xt,w.unstable_next=un,w.unstable_pauseExecution=pt,w.unstable_requestPaint=Xn,w.unstable_runWithPriority=Ue,w.unstable_scheduleCallback=Ut,w.unstable_shouldYield=Tt,w.unstable_wrapCallback=Ze,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)})()}(ef)),ef}var gm;function B0(){return gm||(gm=1,Zc.exports=V0()),Zc.exports}var ua={},bm;function $0(){if(bm)return ua;bm=1;/** + * @license React + * react-dom.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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 w=Jc(),k=B0(),se=w.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,me=!1;function le(e){me=e}function xe(e){if(!me){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a1?t-1:0),a=1;a2&&(e[0]==="o"||e[0]==="O")&&(e[1]==="n"||e[1]==="N")}function Pt(e,t,n,a){if(n!==null&&n.type===Ct)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":{if(a)return!1;if(n!==null)return!n.acceptsBooleans;var r=e.toLowerCase().slice(0,5);return r!=="data-"&&r!=="aria-"}default:return!1}}function cn(e,t,n,a){if(t===null||typeof t>"u"||Pt(e,t,n,a))return!0;if(a)return!1;if(n!==null)switch(n.type){case Lt:return!t;case Mt:return t===!1;case Cn:return isNaN(t);case Xn:return isNaN(t)||t<1}return!1}function Ft(e){return Vt.hasOwnProperty(e)?Vt[e]:null}function Dt(e,t,n,a,r,i,o){this.acceptsBooleans=t===sn||t===Lt||t===Mt,this.attributeName=a,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var Vt={},ar=["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"];ar.forEach(function(e){Vt[e]=new Dt(e,Ct,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0],n=e[1];Vt[t]=new Dt(t,Kt,!1,n,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){Vt[e]=new Dt(e,sn,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Vt[e]=new Dt(e,sn,!1,e,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(e){Vt[e]=new Dt(e,Lt,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){Vt[e]=new Dt(e,Lt,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){Vt[e]=new Dt(e,Mt,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){Vt[e]=new Dt(e,Xn,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){Vt[e]=new Dt(e,Cn,!1,e.toLowerCase(),null,!1,!1)});var ha=/[\-\:]([a-z])/g,ya=function(e){return e[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(e){var t=e.replace(ha,ya);Vt[t]=new Dt(t,Kt,!1,e,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(e){var t=e.replace(ha,ya);Vt[t]=new Dt(t,Kt,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ha,ya);Vt[t]=new Dt(t,Kt,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){Vt[e]=new Dt(e,Kt,!1,e.toLowerCase(),null,!1,!1)});var rr="xlinkHref";Vt[rr]=new Dt("xlinkHref",Kt,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){Vt[e]=new Dt(e,Kt,!1,e.toLowerCase(),null,!0,!0)});var Wr=/^[\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,qr=!1;function Qn(e){!qr&&Wr.test(e)&&(qr=!0,f("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(e)))}function _a(e,t,n,a){if(a.mustUseProperty){var r=a.propertyName;return e[r]}else{Te(n,t),a.sanitizeURL&&Qn(""+n);var i=a.attributeName,o=null;if(a.type===Mt){if(e.hasAttribute(i)){var l=e.getAttribute(i);return l===""?!0:cn(t,n,a,!1)?l:l===""+n?n:l}}else if(e.hasAttribute(i)){if(cn(t,n,a,!1))return e.getAttribute(i);if(a.type===Lt)return n;o=e.getAttribute(i)}return cn(t,n,a,!1)?o===null?n:o:o===""+n?n:o}}function Gr(e,t,n,a){{if(!mt(t))return;if(!e.hasAttribute(t))return n===void 0?void 0:null;var r=e.getAttribute(t);return Te(n,t),r===""+n?n:r}}function $n(e,t,n,a){var r=Ft(t);if(!Ht(t,r,a)){if(cn(t,n,r,a)&&(n=null),a||r===null){if(mt(t)){var i=t;n===null?e.removeAttribute(i):(Te(n,t),e.setAttribute(i,""+n))}return}var o=r.mustUseProperty;if(o){var l=r.propertyName;if(n===null){var u=r.type;e[l]=u===Lt?!1:""}else e[l]=n;return}var c=r.attributeName,d=r.attributeNamespace;if(n===null)e.removeAttribute(c);else{var E=r.type,S;E===Lt||E===Mt&&n===!0?S="":(Te(n,c),S=""+n,r.sanitizeURL&&Qn(S.toString())),d?e.setAttributeNS(d,c,S):e.setAttribute(c,S)}}}var Kn=Symbol.for("react.element"),Jn=Symbol.for("react.portal"),ka=Symbol.for("react.fragment"),Tr=Symbol.for("react.strict_mode"),Ma=Symbol.for("react.profiler"),La=Symbol.for("react.provider"),h=Symbol.for("react.context"),$=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),x=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),b=Symbol.for("react.scope"),C=Symbol.for("react.debug_trace_mode"),g=Symbol.for("react.offscreen"),U=Symbol.for("react.legacy_hidden"),H=Symbol.for("react.cache"),J=Symbol.for("react.tracing_marker"),et=Symbol.iterator,te="@@iterator";function Re(e){if(e===null||typeof e!="object")return null;var t=et&&e[et]||e[te];return typeof t=="function"?t:null}var ye=Object.assign,it=0,on,Xr,Zn,xn,ir,wn,Bt;function sa(){}sa.__reactDisabledLog=!0;function Er(){{if(it===0){on=console.log,Xr=console.info,Zn=console.warn,xn=console.error,ir=console.group,wn=console.groupCollapsed,Bt=console.groupEnd;var e={configurable:!0,enumerable:!0,value:sa,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}it++}}function ll(){{if(it--,it===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:ye({},e,{value:on}),info:ye({},e,{value:Xr}),warn:ye({},e,{value:Zn}),error:ye({},e,{value:xn}),group:ye({},e,{value:ir}),groupCollapsed:ye({},e,{value:wn}),groupEnd:ye({},e,{value:Bt})})}it<0&&f("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Cr=se.ReactCurrentDispatcher,ga;function Rn(e,t,n){{if(ga===void 0)try{throw Error()}catch(r){var a=r.stack.trim().match(/\n( *(at )?)/);ga=a&&a[1]||""}return` +`+ga+e}}var or=!1,lr;{var nn=typeof WeakMap=="function"?WeakMap:Map;lr=new nn}function ht(e,t){if(!e||or)return"";{var n=lr.get(e);if(n!==void 0)return n}var a;or=!0;var r=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var i;i=Cr.current,Cr.current=null,Er();try{if(t){var o=function(){throw Error()};if(Object.defineProperty(o.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(o,[])}catch(O){a=O}Reflect.construct(e,[],o)}else{try{o.call()}catch(O){a=O}e.call(o.prototype)}}else{try{throw Error()}catch(O){a=O}e()}}catch(O){if(O&&a&&typeof O.stack=="string"){for(var l=O.stack.split(` +`),u=a.stack.split(` +`),c=l.length-1,d=u.length-1;c>=1&&d>=0&&l[c]!==u[d];)d--;for(;c>=1&&d>=0;c--,d--)if(l[c]!==u[d]){if(c!==1||d!==1)do if(c--,d--,d<0||l[c]!==u[d]){var E=` +`+l[c].replace(" at new "," at ");return e.displayName&&E.includes("")&&(E=E.replace("",e.displayName)),typeof e=="function"&&lr.set(e,E),E}while(c>=1&&d>=0);break}}}finally{or=!1,Cr.current=i,ll(),Error.prepareStackTrace=r}var S=e?e.displayName||e.name:"",_=S?Rn(S):"";return typeof e=="function"&&lr.set(e,_),_}function ba(e,t,n){return ht(e,!0)}function Sa(e,t,n){return ht(e,!1)}function Qr(e){var t=e.prototype;return!!(t&&t.isReactComponent)}function ul(e,t,n){if(e==null)return"";if(typeof e=="function")return ht(e,Qr(e));if(typeof e=="string")return Rn(e);switch(e){case v:return Rn("Suspense");case x:return Rn("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case $:return Sa(e.render);case T:return ul(e.type,t,n);case y:{var a=e,r=a._payload,i=a._init;try{return ul(i(r),t,n)}catch{}}}return""}function af(e){switch(e._debugOwner&&e._debugOwner.type,e._debugSource,e.tag){case ne:return Rn(e.type);case $t:return Rn("Lazy");case M:return Rn("Suspense");case nt:return Rn("SuspenseList");case ge:case yt:case we:return Sa(e.type);case De:return Sa(e.type.render);case re:return ba(e.type);default:return""}}function xi(e){try{var t="",n=e;do t+=af(n),n=n.return;while(n);return t}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}function Iu(e,t,n){var a=e.displayName;if(a)return a;var r=t.displayName||t.name||"";return r!==""?n+"("+r+")":n}function sl(e){return e.displayName||"Context"}function xt(e){if(e==null)return null;if(typeof e.tag=="number"&&f("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case ka:return"Fragment";case Jn:return"Portal";case Ma:return"Profiler";case Tr:return"StrictMode";case v:return"Suspense";case x:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case h:var t=e;return sl(t)+".Consumer";case La:var n=e;return sl(n._context)+".Provider";case $:return Iu(e,e.render,"ForwardRef");case T:var a=e.displayName||null;return a!==null?a:xt(e.type)||"Memo";case y:{var r=e,i=r._payload,o=r._init;try{return xt(o(i))}catch{return null}}}return null}function rf(e,t,n){var a=t.displayName||t.name||"";return e.displayName||(a!==""?n+"("+a+")":n)}function xr(e){return e.displayName||"Context"}function Xe(e){var t=e.tag,n=e.type;switch(t){case fe:return"Cache";case gt:var a=n;return xr(a)+".Consumer";case Pe:var r=n;return xr(r._context)+".Provider";case he:return"DehydratedFragment";case De:return rf(n,n.render,"ForwardRef");case zt:return"Fragment";case ne:return n;case z:return"Portal";case W:return"Root";case Le:return"Text";case $t:return xt(n);case Gt:return n===Tr?"StrictMode":"Mode";case Me:return"Offscreen";case rt:return"Profiler";case ce:return"Scope";case M:return"Suspense";case nt:return"SuspenseList";case I:return"TracingMarker";case re:case ge:case Ae:case yt:case ie:case we:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n;break}return null}var cl=se.ReactDebugCurrentFrame,ea=null,wi=!1;function Kr(){{if(ea===null)return null;var e=ea._debugOwner;if(e!==null&&typeof e<"u")return Xe(e)}return null}function of(){return ea===null?"":xi(ea)}function Dn(){cl.getCurrentStack=null,ea=null,wi=!1}function Jt(e){cl.getCurrentStack=e===null?null:of,ea=e,wi=!1}function Wu(){return ea}function Oa(e){wi=e}function ta(e){return""+e}function $a(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return vt(e),e;default:return""}}var lf={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function fl(e,t){lf[t.type]||t.onChange||t.onInput||t.readOnly||t.disabled||t.value==null||f("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`."),t.onChange||t.readOnly||t.disabled||t.checked==null||f("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 qu(e){var t=e.type,n=e.nodeName;return n&&n.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function dl(e){return e._valueTracker}function oo(e){e._valueTracker=null}function uf(e){var t="";return e&&(qu(e)?t=e.checked?"true":"false":t=e.value),t}function Jr(e){var t=qu(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);vt(e[t]);var a=""+e[t];if(!(e.hasOwnProperty(t)||typeof n>"u"||typeof n.get!="function"||typeof n.set!="function")){var r=n.get,i=n.set;Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(l){vt(l),a=""+l,i.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable});var o={getValue:function(){return a},setValue:function(l){vt(l),a=""+l},stopTracking:function(){oo(e),delete e[t]}};return o}}function Ri(e){dl(e)||(e._valueTracker=Jr(e))}function vl(e){if(!e)return!1;var t=dl(e);if(!t)return!0;var n=t.getValue(),a=uf(e);return a!==n?(t.setValue(a),!0):!1}function wr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var lo=!1,uo=!1,so=!1,Gu=!1;function Xu(e){var t=e.type==="checkbox"||e.type==="radio";return t?e.checked!=null:e.value!=null}function pl(e,t){var n=e,a=t.checked,r=ye({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:a??n._wrapperState.initialChecked});return r}function Qu(e,t){fl("input",t),t.checked!==void 0&&t.defaultChecked!==void 0&&!uo&&(f("%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",Kr()||"A component",t.type),uo=!0),t.value!==void 0&&t.defaultValue!==void 0&&!lo&&(f("%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",Kr()||"A component",t.type),lo=!0);var n=e,a=t.defaultValue==null?"":t.defaultValue;n._wrapperState={initialChecked:t.checked!=null?t.checked:t.defaultChecked,initialValue:$a(t.value!=null?t.value:a),controlled:Xu(t)}}function s(e,t){var n=e,a=t.checked;a!=null&&$n(n,"checked",a,!1)}function m(e,t){var n=e;{var a=Xu(t);!n._wrapperState.controlled&&a&&!Gu&&(f("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"),Gu=!0),n._wrapperState.controlled&&!a&&!so&&(f("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"),so=!0)}s(e,t);var r=$a(t.value),i=t.type;if(r!=null)i==="number"?(r===0&&n.value===""||n.value!=r)&&(n.value=ta(r)):n.value!==ta(r)&&(n.value=ta(r));else if(i==="submit"||i==="reset"){n.removeAttribute("value");return}t.hasOwnProperty("value")?Ne(n,t.type,r):t.hasOwnProperty("defaultValue")&&Ne(n,t.type,$a(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(n.defaultChecked=!!t.defaultChecked)}function L(e,t,n){var a=e;if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type,i=r==="submit"||r==="reset";if(i&&(t.value===void 0||t.value===null))return;var o=ta(a._wrapperState.initialValue);n||o!==a.value&&(a.value=o),a.defaultValue=o}var l=a.name;l!==""&&(a.name=""),a.defaultChecked=!a.defaultChecked,a.defaultChecked=!!a._wrapperState.initialChecked,l!==""&&(a.name=l)}function A(e,t){var n=e;m(n,t),Z(n,t)}function Z(e,t){var n=t.name;if(t.type==="radio"&&n!=null){for(var a=e;a.parentNode;)a=a.parentNode;Te(n,"name");for(var r=a.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),i=0;i.")))}):t.dangerouslySetInnerHTML!=null&&(st||(st=!0,f("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")))),t.selected!=null&&!Se&&(f("Use the `defaultValue` or `value` props on must be a scalar value if `multiple` is false.%s",n,fn())}}}}function Rr(e,t,n,a){var r=e.options;if(t){for(var i=n,o={},l=0;l.");var a=ye({},t,{value:void 0,defaultValue:void 0,children:ta(n._wrapperState.initialValue)});return a}function Lm(e,t){var n=e;fl("textarea",t),t.value!==void 0&&t.defaultValue!==void 0&&!Mm&&(f("%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",Kr()||"A component"),Mm=!0);var a=t.value;if(a==null){var r=t.children,i=t.defaultValue;if(r!=null){f("Use the `defaultValue` or `value` props instead of setting children on