animot-presenter 0.5.19 → 0.5.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AnimotPresenter.svelte +168 -13
- package/dist/cdn/animot-presenter.css +1 -1
- package/dist/cdn/animot-presenter.esm.js +4595 -4514
- package/dist/cdn/animot-presenter.min.js +9 -9
- package/dist/engine/container-layout.d.ts +12 -0
- package/dist/engine/container-layout.js +108 -0
- package/dist/renderers/Container.svelte +30 -0
- package/dist/renderers/Container.svelte.d.ts +7 -0
- package/dist/types.d.ts +60 -2
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import CounterRenderer from './renderers/CounterRenderer.svelte';
|
|
9
9
|
import ChartRenderer from './renderers/ChartRenderer.svelte';
|
|
10
10
|
import ProgressBar from './renderers/ProgressBar.svelte';
|
|
11
|
+
import Container from './renderers/Container.svelte';
|
|
11
12
|
import IconRenderer from './renderers/IconRenderer.svelte';
|
|
12
13
|
import FlowMarkers from './FlowMarkers.svelte';
|
|
13
14
|
import { traceSvgPaths } from './utils/trace-svg-paths';
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
import type {
|
|
22
23
|
AnimotProject, AnimotPresenterProps, CanvasElement, CodeElement, TextElement,
|
|
23
24
|
ArrowElement, ImageElement, VideoElement, ShapeElement, CounterElement, ChartElement, IconElement,
|
|
24
|
-
SvgElement, MotionPathElement, ProgressElement, PathPoint,
|
|
25
|
+
SvgElement, MotionPathElement, ProgressElement, ContainerElement, PathPoint,
|
|
25
26
|
Slide, CodeAnimationMode, AnimatableProperty
|
|
26
27
|
} from './types';
|
|
27
28
|
import './styles/presenter.css';
|
|
@@ -54,6 +55,92 @@
|
|
|
54
55
|
if (motionPathLoopAbort) { motionPathLoopAbort.abort(); motionPathLoopAbort = null; }
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
// Keyframe schedule loop — independent from motion-path / morph engines.
|
|
59
|
+
let keyframeLoopAbort: AbortController | null = null;
|
|
60
|
+
let keyframeOverrides = $state<Map<string, Record<string, any>>>(new Map());
|
|
61
|
+
function cancelKeyframeLoops() {
|
|
62
|
+
if (keyframeLoopAbort) { keyframeLoopAbort.abort(); keyframeLoopAbort = null; }
|
|
63
|
+
}
|
|
64
|
+
function setKeyframeOverride(elementId: string, prop: string, value: any) {
|
|
65
|
+
const cur = keyframeOverrides.get(elementId) ?? {};
|
|
66
|
+
keyframeOverrides.set(elementId, { ...cur, [prop]: value });
|
|
67
|
+
keyframeOverrides = new Map(keyframeOverrides);
|
|
68
|
+
}
|
|
69
|
+
function easingForTween(name: string | undefined): string {
|
|
70
|
+
// Animotion tween easing accepts strings; pass-through with default.
|
|
71
|
+
switch (name) {
|
|
72
|
+
case 'linear': case 'ease-in': case 'ease-out': case 'ease-in-out': return name;
|
|
73
|
+
case 'spring': return 'ease-out';
|
|
74
|
+
case 'ease': default: return 'ease-out';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function animateKeyframes(slide: Slide) {
|
|
78
|
+
cancelKeyframeLoops();
|
|
79
|
+
keyframeLoopAbort = new AbortController();
|
|
80
|
+
const signal = keyframeLoopAbort.signal;
|
|
81
|
+
if (keyframeOverrides.size > 0) keyframeOverrides = new Map();
|
|
82
|
+
for (const element of slide.canvas.elements) {
|
|
83
|
+
if (!element.keyframes || element.keyframes.length === 0) continue;
|
|
84
|
+
const animated = animatedElements.get(element.id) as any;
|
|
85
|
+
if (!animated) continue;
|
|
86
|
+
const sorted = [...element.keyframes].sort((a, b) => a.time - b.time);
|
|
87
|
+
const first = sorted[0];
|
|
88
|
+
|
|
89
|
+
// Snap to KF1 instantly so the slide-displayed pose IS the start.
|
|
90
|
+
if (first.position) { animated.x?.to(first.position.x, { duration: 0 }); animated.y?.to(first.position.y, { duration: 0 }); }
|
|
91
|
+
if (first.size) { animated.width?.to(first.size.width, { duration: 0 }); animated.height?.to(first.size.height, { duration: 0 }); }
|
|
92
|
+
if (first.rotation !== undefined) animated.rotation?.to(first.rotation, { duration: 0 });
|
|
93
|
+
if (first.opacity !== undefined) animated.opacity?.to(first.opacity, { duration: 0 });
|
|
94
|
+
if (first.skewX !== undefined) animated.skewX?.to(first.skewX, { duration: 0 });
|
|
95
|
+
if (first.skewY !== undefined) animated.skewY?.to(first.skewY, { duration: 0 });
|
|
96
|
+
if (first.tiltX !== undefined) animated.tiltX?.to(first.tiltX, { duration: 0 });
|
|
97
|
+
if (first.tiltY !== undefined) animated.tiltY?.to(first.tiltY, { duration: 0 });
|
|
98
|
+
if (first.borderRadius !== undefined) animated.borderRadius?.to(first.borderRadius, { duration: 0 });
|
|
99
|
+
if (first.fontSize !== undefined) animated.fontSize?.to(first.fontSize, { duration: 0 });
|
|
100
|
+
if (first.fillColor !== undefined) animated.fillColor?.to(first.fillColor, { duration: 0 });
|
|
101
|
+
if (first.strokeColor !== undefined) animated.strokeColor?.to(first.strokeColor, { duration: 0 });
|
|
102
|
+
if (first.strokeWidth !== undefined) animated.strokeWidth?.to(first.strokeWidth, { duration: 0 });
|
|
103
|
+
if (first.blur !== undefined) animated.blur?.to(first.blur, { duration: 0 });
|
|
104
|
+
if (first.brightness !== undefined) animated.brightness?.to(first.brightness, { duration: 0 });
|
|
105
|
+
if (first.contrast !== undefined) animated.contrast?.to(first.contrast, { duration: 0 });
|
|
106
|
+
if (first.saturate !== undefined) animated.saturate?.to(first.saturate, { duration: 0 });
|
|
107
|
+
if (first.grayscale !== undefined) animated.grayscale?.to(first.grayscale, { duration: 0 });
|
|
108
|
+
if (first.backgroundColor !== undefined) setKeyframeOverride(element.id, 'backgroundColor', first.backgroundColor);
|
|
109
|
+
if (first.color !== undefined) setKeyframeOverride(element.id, 'color', first.color);
|
|
110
|
+
|
|
111
|
+
for (const kf of sorted.slice(1)) {
|
|
112
|
+
const delay = Math.max(0, kf.time);
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
if (signal.aborted) return;
|
|
115
|
+
const easing = easingForTween(kf.easing);
|
|
116
|
+
const idx = sorted.indexOf(kf);
|
|
117
|
+
const prevTime = idx === 0 ? 0 : sorted[idx - 1].time;
|
|
118
|
+
const span = Math.max(50, kf.time - prevTime);
|
|
119
|
+
if (kf.position) { animated.x?.to(kf.position.x, { duration: span, easing }); animated.y?.to(kf.position.y, { duration: span, easing }); }
|
|
120
|
+
if (kf.size) { animated.width?.to(kf.size.width, { duration: span, easing }); animated.height?.to(kf.size.height, { duration: span, easing }); }
|
|
121
|
+
if (kf.rotation !== undefined) animated.rotation?.to(kf.rotation, { duration: span, easing });
|
|
122
|
+
if (kf.opacity !== undefined) animated.opacity?.to(kf.opacity, { duration: span, easing });
|
|
123
|
+
if (kf.skewX !== undefined) animated.skewX?.to(kf.skewX, { duration: span, easing });
|
|
124
|
+
if (kf.skewY !== undefined) animated.skewY?.to(kf.skewY, { duration: span, easing });
|
|
125
|
+
if (kf.tiltX !== undefined) animated.tiltX?.to(kf.tiltX, { duration: span, easing });
|
|
126
|
+
if (kf.tiltY !== undefined) animated.tiltY?.to(kf.tiltY, { duration: span, easing });
|
|
127
|
+
if (kf.borderRadius !== undefined) animated.borderRadius?.to(kf.borderRadius, { duration: span, easing });
|
|
128
|
+
if (kf.fontSize !== undefined) animated.fontSize?.to(kf.fontSize, { duration: span, easing });
|
|
129
|
+
if (kf.fillColor !== undefined) animated.fillColor?.to(kf.fillColor, { duration: span, easing });
|
|
130
|
+
if (kf.strokeColor !== undefined) animated.strokeColor?.to(kf.strokeColor, { duration: span, easing });
|
|
131
|
+
if (kf.strokeWidth !== undefined) animated.strokeWidth?.to(kf.strokeWidth, { duration: span, easing });
|
|
132
|
+
if (kf.blur !== undefined) animated.blur?.to(kf.blur, { duration: span, easing });
|
|
133
|
+
if (kf.brightness !== undefined) animated.brightness?.to(kf.brightness, { duration: span, easing });
|
|
134
|
+
if (kf.contrast !== undefined) animated.contrast?.to(kf.contrast, { duration: span, easing });
|
|
135
|
+
if (kf.saturate !== undefined) animated.saturate?.to(kf.saturate, { duration: span, easing });
|
|
136
|
+
if (kf.grayscale !== undefined) animated.grayscale?.to(kf.grayscale, { duration: span, easing });
|
|
137
|
+
if (kf.backgroundColor !== undefined) setKeyframeOverride(element.id, 'backgroundColor', kf.backgroundColor);
|
|
138
|
+
if (kf.color !== undefined) setKeyframeOverride(element.id, 'color', kf.color);
|
|
139
|
+
}, delay);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
57
144
|
// --- Motion Path Utilities ---
|
|
58
145
|
function buildPresenterPathD(points: PathPoint[], closed: boolean): string {
|
|
59
146
|
if (points.length < 2) return '';
|
|
@@ -263,8 +350,67 @@
|
|
|
263
350
|
return elements.map(e => e.id);
|
|
264
351
|
});
|
|
265
352
|
|
|
266
|
-
|
|
267
|
-
|
|
353
|
+
/**
|
|
354
|
+
* Resolve an element's pose on a slide, taking per-element keyframes
|
|
355
|
+
* into account. Keyframes turn the element's "effective state" into
|
|
356
|
+
* something time-dependent — `pose='enter'` returns the FIRST keyframe's
|
|
357
|
+
* state (used as morph TARGET / initial-tween-seed), `pose='exit'` the
|
|
358
|
+
* LAST keyframe's (used as morph SOURCE on slide leave).
|
|
359
|
+
*/
|
|
360
|
+
function getElementInSlide(slide: Slide | null, elementId: string, pose: 'enter' | 'exit' = 'enter'): CanvasElement | undefined {
|
|
361
|
+
const el = slide?.canvas.elements.find(el => el.id === elementId);
|
|
362
|
+
if (!el) return el;
|
|
363
|
+
if (!el.keyframes || el.keyframes.length === 0) return el;
|
|
364
|
+
const sorted = [...el.keyframes].sort((a, b) => a.time - b.time);
|
|
365
|
+
const k = pose === 'exit' ? sorted[sorted.length - 1] : sorted[0];
|
|
366
|
+
const out: any = { ...el };
|
|
367
|
+
if (k.position) out.position = k.position;
|
|
368
|
+
if (k.size) out.size = k.size;
|
|
369
|
+
if (k.rotation !== undefined) out.rotation = k.rotation;
|
|
370
|
+
if (k.opacity !== undefined) out.opacity = k.opacity;
|
|
371
|
+
if (k.skewX !== undefined) out.skewX = k.skewX;
|
|
372
|
+
if (k.skewY !== undefined) out.skewY = k.skewY;
|
|
373
|
+
if (k.tiltX !== undefined) out.tiltX = k.tiltX;
|
|
374
|
+
if (k.tiltY !== undefined) out.tiltY = k.tiltY;
|
|
375
|
+
if (k.borderRadius !== undefined) out.borderRadius = k.borderRadius;
|
|
376
|
+
if (k.fontSize !== undefined) out.fontSize = k.fontSize;
|
|
377
|
+
if (k.fillColor !== undefined) out.fillColor = k.fillColor;
|
|
378
|
+
if (k.strokeColor !== undefined) out.strokeColor = k.strokeColor;
|
|
379
|
+
if (k.strokeWidth !== undefined) out.strokeWidth = k.strokeWidth;
|
|
380
|
+
if (k.blur !== undefined) out.blur = k.blur;
|
|
381
|
+
if (k.brightness !== undefined) out.brightness = k.brightness;
|
|
382
|
+
if (k.contrast !== undefined) out.contrast = k.contrast;
|
|
383
|
+
if (k.saturate !== undefined) out.saturate = k.saturate;
|
|
384
|
+
if (k.grayscale !== undefined) out.grayscale = k.grayscale;
|
|
385
|
+
return out as CanvasElement;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Overlay the current LIVE tween values for properties that the renderer
|
|
390
|
+
* reads directly from element data. Lets per-element keyframes drive
|
|
391
|
+
* borderRadius / fontSize / shape colors / stroke width / CSS filters
|
|
392
|
+
* at render time, plus non-tweened overrides (backgroundColor, color).
|
|
393
|
+
*/
|
|
394
|
+
function liveProps<T extends CanvasElement>(element: T): T {
|
|
395
|
+
const a = animatedElements.get(element.id);
|
|
396
|
+
const overrides = keyframeOverrides.get(element.id);
|
|
397
|
+
if (!a && !overrides) return element;
|
|
398
|
+
const e = element as any;
|
|
399
|
+
const out: any = { ...element };
|
|
400
|
+
if (a) {
|
|
401
|
+
if ((a as any).borderRadius && e.borderRadius !== undefined) out.borderRadius = (a as any).borderRadius.current;
|
|
402
|
+
if ((a as any).fontSize && e.fontSize !== undefined) out.fontSize = (a as any).fontSize.current;
|
|
403
|
+
if ((a as any).fillColor && e.fillColor !== undefined) out.fillColor = (a as any).fillColor.current;
|
|
404
|
+
if ((a as any).strokeColor && e.strokeColor !== undefined) out.strokeColor = (a as any).strokeColor.current;
|
|
405
|
+
if ((a as any).strokeWidth && e.strokeWidth !== undefined) out.strokeWidth = (a as any).strokeWidth.current;
|
|
406
|
+
if ((a as any).blur && e.blur !== undefined) out.blur = (a as any).blur.current;
|
|
407
|
+
if ((a as any).brightness && e.brightness !== undefined) out.brightness = (a as any).brightness.current;
|
|
408
|
+
if ((a as any).contrast && e.contrast !== undefined) out.contrast = (a as any).contrast.current;
|
|
409
|
+
if ((a as any).saturate && e.saturate !== undefined) out.saturate = (a as any).saturate.current;
|
|
410
|
+
if ((a as any).grayscale && e.grayscale !== undefined) out.grayscale = (a as any).grayscale.current;
|
|
411
|
+
}
|
|
412
|
+
if (overrides) Object.assign(out, overrides);
|
|
413
|
+
return out as T;
|
|
268
414
|
}
|
|
269
415
|
|
|
270
416
|
// Typewriter
|
|
@@ -497,6 +643,7 @@
|
|
|
497
643
|
isTransitioning = true;
|
|
498
644
|
clearAllTypewriterAnimations();
|
|
499
645
|
cancelMotionPathLoops();
|
|
646
|
+
cancelKeyframeLoops();
|
|
500
647
|
const firstSlide = slides[0];
|
|
501
648
|
if (!firstSlide) { isTransitioning = false; return; }
|
|
502
649
|
|
|
@@ -575,6 +722,7 @@
|
|
|
575
722
|
}
|
|
576
723
|
}
|
|
577
724
|
|
|
725
|
+
animateKeyframes(firstSlide);
|
|
578
726
|
animateMotionPaths(firstSlide);
|
|
579
727
|
onslidechange?.(0, slides.length);
|
|
580
728
|
}
|
|
@@ -588,6 +736,7 @@
|
|
|
588
736
|
const targetSlide = slides[targetIndex];
|
|
589
737
|
clearAllTypewriterAnimations();
|
|
590
738
|
cancelMotionPathLoops();
|
|
739
|
+
cancelKeyframeLoops();
|
|
591
740
|
// Manual arrow nav and the autoplay timer are both forms of "user
|
|
592
741
|
// is moving forward in the deck" — both should swap narration to
|
|
593
742
|
// the new slide. The pause button is what stops audio. Without
|
|
@@ -684,6 +833,7 @@
|
|
|
684
833
|
transitionClass = `transition-${transition.type}-in`;
|
|
685
834
|
await new Promise(r => setTimeout(r, duration * 0.6));
|
|
686
835
|
transitionClass = '';
|
|
836
|
+
animateKeyframes(targetSlide);
|
|
687
837
|
animateMotionPaths(targetSlide);
|
|
688
838
|
isTransitioning = false;
|
|
689
839
|
onslidechange?.(targetIndex, slides.length);
|
|
@@ -694,7 +844,9 @@
|
|
|
694
844
|
// Per-element morphing (transition type = 'none')
|
|
695
845
|
const animations: Promise<void>[] = [];
|
|
696
846
|
for (const elementId of allElementIds) {
|
|
697
|
-
|
|
847
|
+
// FROM-sync: use the EXIT pose (last keyframe) so morph starts
|
|
848
|
+
// from where the keyframe loop left the element on screen.
|
|
849
|
+
const currentEl = getElementInSlide(currentSlide, elementId, 'exit');
|
|
698
850
|
const animated = animatedElements.get(elementId);
|
|
699
851
|
if (!animated) continue;
|
|
700
852
|
if (currentEl) {
|
|
@@ -755,8 +907,8 @@
|
|
|
755
907
|
const animationTasks: AnimationTask[] = [];
|
|
756
908
|
|
|
757
909
|
for (const elementId of allElementIds) {
|
|
758
|
-
const currentEl = getElementInSlide(currentSlide, elementId);
|
|
759
|
-
const targetEl = getElementInSlide(targetSlide, elementId);
|
|
910
|
+
const currentEl = getElementInSlide(currentSlide, elementId, 'exit');
|
|
911
|
+
const targetEl = getElementInSlide(targetSlide, elementId, 'enter');
|
|
760
912
|
const animated = animatedElements.get(elementId);
|
|
761
913
|
if (!animated) continue;
|
|
762
914
|
const animConfig = targetEl?.animationConfig || currentEl?.animationConfig;
|
|
@@ -999,6 +1151,7 @@
|
|
|
999
1151
|
const animated = animatedElements.get(elementId);
|
|
1000
1152
|
if (!onSlide && animated) { animated.opacity.to(0, { duration: 0 }); }
|
|
1001
1153
|
}
|
|
1154
|
+
animateKeyframes(slides[targetIndex]);
|
|
1002
1155
|
animateMotionPaths(slides[targetIndex]);
|
|
1003
1156
|
onslidechange?.(targetIndex, slides.length);
|
|
1004
1157
|
if (targetIndex === slides.length - 1 && !loop) oncomplete?.();
|
|
@@ -1167,7 +1320,7 @@
|
|
|
1167
1320
|
initAllAnimatedElements();
|
|
1168
1321
|
await loadCodeHighlights();
|
|
1169
1322
|
loading = false;
|
|
1170
|
-
if (currentSlide) setTimeout(() => animateMotionPaths(currentSlide!), 300);
|
|
1323
|
+
if (currentSlide) setTimeout(() => { animateKeyframes(currentSlide!); animateMotionPaths(currentSlide!); }, 300);
|
|
1171
1324
|
// Narration starts via the play-state effect below — not on
|
|
1172
1325
|
// mount. That way the user's click on Play is the gesture
|
|
1173
1326
|
// that unlocks audio, and a paused deck stays silent.
|
|
@@ -1299,7 +1452,7 @@
|
|
|
1299
1452
|
use:decorations={{ config: element.decorations, slideDuration: currentSlide?.duration, shape: element.type === 'shape' ? { type: (element as any).shapeType, borderRadius: (element as any).borderRadius } : undefined, key: `${currentSlideIndex}-${JSON.stringify(element.decorations ?? null)}-${element.type === 'shape' ? (element as any).shapeType + ':' + ((element as any).borderRadius ?? 0) : ''}` }}
|
|
1300
1453
|
>
|
|
1301
1454
|
{#if element.type === 'code'}
|
|
1302
|
-
{@const codeEl = element as CodeElement}
|
|
1455
|
+
{@const codeEl = liveProps(element) as CodeElement}
|
|
1303
1456
|
{@const morphState = codeMorphState.get(codeEl.id)}
|
|
1304
1457
|
<div class="animot-code-block" class:transparent-bg={codeEl.transparentBackground} style:font-size="{codeEl.fontSize}px" style:font-weight={codeEl.fontWeight || 400} style:padding="{codeEl.padding}px" style:border-radius="{animated.borderRadius.current}px" style:background={codeEl.bgColor ?? '#0d1117'}>
|
|
1305
1458
|
{#if codeEl.showHeader}
|
|
@@ -1356,7 +1509,7 @@
|
|
|
1356
1509
|
</div>
|
|
1357
1510
|
</div>
|
|
1358
1511
|
{:else if element.type === 'text'}
|
|
1359
|
-
{@const textEl = element as TextElement}
|
|
1512
|
+
{@const textEl = liveProps(element) as TextElement}
|
|
1360
1513
|
{@const animFontSize = animated.fontSize?.current ?? textEl.fontSize}
|
|
1361
1514
|
{@const typewriterState = textTypewriterState.get(element.id)}
|
|
1362
1515
|
{@const displayText = typewriterState?.isAnimating ? typewriterState.fullText.slice(0, typewriterState.displayedChars) : textEl.content}
|
|
@@ -1387,7 +1540,7 @@
|
|
|
1387
1540
|
{#if !isActionTextMode}{displayText}{#if typewriterState?.isAnimating}<span class="animot-typewriter-cursor">|</span>{/if}{/if}
|
|
1388
1541
|
</div>
|
|
1389
1542
|
{:else if element.type === 'arrow'}
|
|
1390
|
-
{@const arrowEl = element as ArrowElement}
|
|
1543
|
+
{@const arrowEl = liveProps(element) as ArrowElement}
|
|
1391
1544
|
{@const cp = arrowEl.controlPoints || []}
|
|
1392
1545
|
{@const pathD = cp.length === 0 ? `M ${arrowEl.startPoint.x} ${arrowEl.startPoint.y} L ${arrowEl.endPoint.x} ${arrowEl.endPoint.y}` : cp.length === 1 ? `M ${arrowEl.startPoint.x} ${arrowEl.startPoint.y} Q ${cp[0].x} ${cp[0].y} ${arrowEl.endPoint.x} ${arrowEl.endPoint.y}` : cp.length === 2 ? `M ${arrowEl.startPoint.x} ${arrowEl.startPoint.y} C ${cp[0].x} ${cp[0].y} ${cp[1].x} ${cp[1].y} ${arrowEl.endPoint.x} ${arrowEl.endPoint.y}` : buildCatmullRomPath(arrowEl.startPoint, cp, arrowEl.endPoint)}
|
|
1393
1546
|
{@const lastCp = cp.length > 0 ? cp[cp.length - 1] : arrowEl.startPoint}
|
|
@@ -1410,11 +1563,11 @@
|
|
|
1410
1563
|
{/if}
|
|
1411
1564
|
</svg>
|
|
1412
1565
|
{:else if element.type === 'image'}
|
|
1413
|
-
{@const imgEl = element as ImageElement}
|
|
1566
|
+
{@const imgEl = liveProps(element) as ImageElement}
|
|
1414
1567
|
{@const clipPath = imgEl.clipMask?.enabled ? (imgEl.clipMask.shapeType === 'circle' ? 'circle(50% at 50% 50%)' : imgEl.clipMask.shapeType === 'ellipse' ? 'ellipse(50% 50% at 50% 50%)' : imgEl.clipMask.shapeType === 'triangle' ? 'polygon(50% 0%, 0% 100%, 100% 100%)' : imgEl.clipMask.shapeType === 'star' ? 'polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)' : imgEl.clipMask.shapeType === 'hexagon' ? 'polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%)' : (imgEl.clipMask.borderRadius ?? 0) > 0 ? `inset(0 round ${imgEl.clipMask.borderRadius}px)` : 'none') : 'none'}
|
|
1415
1568
|
<img class="animot-image-element" src={imgEl.src} alt="" style:object-fit={imgEl.objectFit} style:border-radius="{imgEl.clipMask?.enabled ? 0 : imgEl.borderRadius}px" style:clip-path={clipPath} style:background-color={imgEl.backgroundColor ?? 'transparent'} />
|
|
1416
1569
|
{:else if element.type === 'video'}
|
|
1417
|
-
{@const videoEl = element as VideoElement}
|
|
1570
|
+
{@const videoEl = liveProps(element) as VideoElement}
|
|
1418
1571
|
{@const videoEmbed = parseEmbedUrl(videoEl.src)}
|
|
1419
1572
|
{#if videoEmbed}
|
|
1420
1573
|
<div class="animot-video-element animot-embed-wrap" style:border-radius="{videoEl.borderRadius}px" style:opacity={videoEl.opacity}>
|
|
@@ -1424,7 +1577,7 @@
|
|
|
1424
1577
|
<video class="animot-video-element" src={videoEl.src} poster={videoEl.posterImage} autoplay={videoEl.autoplay} loop={videoEl.loop} muted={videoEl.muted} controls={!!videoEl.showControls} playsinline preload="auto" style:object-fit={videoEl.objectFit} style:border-radius="{videoEl.borderRadius}px" style:opacity={videoEl.opacity}></video>
|
|
1425
1578
|
{/if}
|
|
1426
1579
|
{:else if element.type === 'shape'}
|
|
1427
|
-
{@const shapeEl = element as ShapeElement}
|
|
1580
|
+
{@const shapeEl = liveProps(element) as ShapeElement}
|
|
1428
1581
|
{@const animFill = animated.fillColor?.current ?? shapeEl.fillColor}
|
|
1429
1582
|
{@const animStroke = animated.strokeColor?.current ?? shapeEl.strokeColor}
|
|
1430
1583
|
{@const animStrokeWidth = animated.strokeWidth?.current ?? shapeEl.strokeWidth}
|
|
@@ -1458,6 +1611,8 @@
|
|
|
1458
1611
|
slideId={currentSlide?.id ?? ''}
|
|
1459
1612
|
previousElement={previousProgressContent.get(element.id) ?? null}
|
|
1460
1613
|
/>
|
|
1614
|
+
{:else if element.type === 'container'}
|
|
1615
|
+
<Container element={element as ContainerElement} />
|
|
1461
1616
|
{:else if element.type === 'icon'}
|
|
1462
1617
|
<IconRenderer element={element as IconElement} />
|
|
1463
1618
|
{:else if element.type === 'svg'}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.code-morph.svelte-1hmk0l{width:100%;height:100%;margin:0;padding:0;background:transparent;font-family:var(--font-mono, "JetBrains Mono", monospace);font-size:inherit;line-height:1.6;white-space:pre-wrap;word-wrap:break-word;color:#e6edf3;box-sizing:border-box;overflow:visible}.code-morph.svelte-1hmk0l pre{margin:0;padding:16px;background:transparent!important;font-family:var(--font-mono);font-size:inherit;line-height:1.6;overflow:visible}.code-morph.svelte-1hmk0l code{font-family:inherit;font-size:inherit;font-weight:inherit}.code-morph.svelte-1hmk0l .line-number{display:inline-block;width:2.5em;margin-right:1em;text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;opacity:.6}.code-morph.svelte-1hmk0l .word-highlight{background:var(--highlight-color, #facc15);color:#000;border-radius:3px;padding:1px 3px;margin:0 -3px;-webkit-box-decoration-break:clone;box-decoration-break:clone;animation:svelte-1hmk0l-fadeHighlight var(--duration, 1s) ease-out forwards}@keyframes svelte-1hmk0l-fadeHighlight{0%{background:var(--highlight-color, #facc15);color:#000}70%{background:var(--highlight-color, #facc15);color:#000}to{background:transparent;color:inherit}}.counter.svelte-1er5jjj{width:100%;height:100%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:hidden;white-space:nowrap}.animot-chart.svelte-1mq2d7j{width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.animot-chart-title.svelte-1mq2d7j{font-weight:600;text-align:center;margin-bottom:8px}.animot-chart-content.svelte-1mq2d7j{flex:1;min-height:0;display:flex;flex-direction:column}.animot-chart-content.svelte-1mq2d7j svg:where(.svelte-1mq2d7j){width:100%;flex:1;min-height:0}.animot-bar-chart.svelte-1mq2d7j,.animot-line-chart.svelte-1mq2d7j{overflow:visible}.animot-series-legend.svelte-1mq2d7j{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;padding:6px 0 0;font-size:.85em}.animot-legend-item.svelte-1mq2d7j{display:inline-flex;align-items:center;gap:5px}.animot-swatch.svelte-1mq2d7j{width:10px;height:10px;border-radius:2px;display:inline-block}.progress-element.svelte-10tny4e{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;position:relative;box-sizing:border-box}.bar-track.svelte-10tny4e,.ring-svg.svelte-10tny4e{flex-shrink:0}.progress-element.ring.svelte-10tny4e .ring-svg:where(.svelte-10tny4e){width:100%;height:100%;min-height:0;min-width:0}.bar-track.svelte-10tny4e{position:relative;overflow:hidden}.bar-fill.svelte-10tny4e{position:absolute;display:flex;align-items:center;justify-content:center;transition:width 0s,height 0s}.bar-stripe-clip.svelte-10tny4e{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.bar-stripe-tape.svelte-10tny4e{position:absolute;top:0;left:0;width:calc(100% + var(--stripe-cycle));height:100%;mask-image:var(--stripe-mask);-webkit-mask-image:var(--stripe-mask);mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;animation:svelte-10tny4e-progress-stripe-x var(--stripe-speed) linear infinite;animation-direction:var(--stripe-direction);will-change:transform}.bar-stripe-tape.vertical.svelte-10tny4e{width:100%;height:calc(100% + var(--stripe-cycle));animation-name:svelte-10tny4e-progress-stripe-y}@keyframes svelte-10tny4e-progress-stripe-x{0%{transform:translate(0)}to{transform:translate(calc(-1 * var(--stripe-cycle)))}}@keyframes svelte-10tny4e-progress-stripe-y{0%{transform:translateY(0)}to{transform:translateY(calc(-1 * var(--stripe-cycle)))}}.ring-svg.svelte-10tny4e{width:100%;height:100%}.ring-spin.svelte-10tny4e{animation:svelte-10tny4e-progress-ring-spin 1.4s linear infinite;transform-origin:50% 50%}@keyframes svelte-10tny4e-progress-ring-spin{to{transform:rotate(360deg)}}.label.svelte-10tny4e{text-align:center;white-space:nowrap;pointer-events:none}.label.center.svelte-10tny4e{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.label.inside.svelte-10tny4e{padding:0 8px;flex-shrink:0}.label.inside-vertical.svelte-10tny4e{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-orientation:mixed;writing-mode:horizontal-tb}.icon-element.svelte-2ld65o{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.icon-element.svelte-2ld65o svg{width:100%;height:100%}.flow-markers.svelte-15cxp1m{pointer-events:none}.embed-player.svelte-1u59mvz{position:relative;width:100%;height:100%;background:#000;overflow:hidden}.embed-frame.svelte-1u59mvz{width:100%;height:100%;display:block;border:0}.embed-frame.passthrough.svelte-1u59mvz{pointer-events:none}.custom-controls.svelte-1u59mvz{position:absolute;left:8px;right:8px;bottom:8px;display:flex;align-items:center;gap:10px;padding:6px 10px;background:#0009;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:8px;opacity:0;transition:opacity .2s}.embed-player.svelte-1u59mvz:hover .custom-controls:where(.svelte-1u59mvz),.custom-controls.svelte-1u59mvz:focus-within{opacity:1}.ctrl-btn.svelte-1u59mvz{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;border-radius:4px;color:#fff;cursor:pointer}.ctrl-btn.svelte-1u59mvz:hover{background:#ffffff26}.ctrl-btn.svelte-1u59mvz svg:where(.svelte-1u59mvz){width:16px;height:16px}.scrub.svelte-1u59mvz{flex:1;accent-color:#6366f1}.time.svelte-1u59mvz{font-size:11px;color:#ffffffd9;font-variant-numeric:tabular-nums;min-width:80px;text-align:right}@keyframes float-vertical{0%,to{translate:0 0}50%{translate:0 calc(-1 * var(--float-amp, 10px))}}@keyframes float-horizontal{0%,to{translate:0 0}50%{translate:var(--float-amp, 10px) 0}}@keyframes float-both-0{0%{translate:0 0}15%{translate:calc(.8 * var(--float-amp, 10px)) calc(-.6 * var(--float-amp, 10px))}35%{translate:calc(-.4 * var(--float-amp, 10px)) calc(-1 * var(--float-amp, 10px))}55%{translate:calc(-.9 * var(--float-amp, 10px)) calc(.3 * var(--float-amp, 10px))}75%{translate:calc(.3 * var(--float-amp, 10px)) calc(.7 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-1{0%{translate:0 0}20%{translate:calc(-.7 * var(--float-amp, 10px)) calc(-.8 * var(--float-amp, 10px))}40%{translate:calc(.5 * var(--float-amp, 10px)) calc(-.3 * var(--float-amp, 10px))}60%{translate:calc(.9 * var(--float-amp, 10px)) calc(.6 * var(--float-amp, 10px))}80%{translate:calc(-.4 * var(--float-amp, 10px)) calc(.9 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-2{0%{translate:0 0}12%{translate:calc(.6 * var(--float-amp, 10px)) calc(.5 * var(--float-amp, 10px))}30%{translate:calc(1 * var(--float-amp, 10px)) calc(-.4 * var(--float-amp, 10px))}50%{translate:calc(-.3 * var(--float-amp, 10px)) calc(-.9 * var(--float-amp, 10px))}70%{translate:calc(-.8 * var(--float-amp, 10px)) calc(.2 * var(--float-amp, 10px))}88%{translate:calc(.2 * var(--float-amp, 10px)) calc(.8 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-3{0%{translate:0 0}17%{translate:calc(-.9 * var(--float-amp, 10px)) calc(.4 * var(--float-amp, 10px))}33%{translate:calc(-.5 * var(--float-amp, 10px)) calc(-.7 * var(--float-amp, 10px))}50%{translate:calc(.7 * var(--float-amp, 10px)) calc(-.9 * var(--float-amp, 10px))}67%{translate:calc(.9 * var(--float-amp, 10px)) calc(.5 * var(--float-amp, 10px))}83%{translate:calc(-.2 * var(--float-amp, 10px)) calc(.8 * var(--float-amp, 10px))}to{translate:0 0}}.animot-svg-element.icon-anim-draw path,.animot-svg-element.icon-anim-draw circle,.animot-svg-element.icon-anim-draw rect,.animot-svg-element.icon-anim-draw line,.animot-svg-element.icon-anim-draw polyline,.animot-svg-element.icon-anim-draw polygon,.animot-svg-element.icon-anim-draw ellipse{stroke-dashoffset:var(--path-len, 1000);animation:animot-svg-draw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-undraw path,.animot-svg-element.icon-anim-undraw circle,.animot-svg-element.icon-anim-undraw rect,.animot-svg-element.icon-anim-undraw line,.animot-svg-element.icon-anim-undraw polyline,.animot-svg-element.icon-anim-undraw polygon,.animot-svg-element.icon-anim-undraw ellipse{stroke-dashoffset:0;animation:animot-svg-undraw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-draw-undraw path,.animot-svg-element.icon-anim-draw-undraw circle,.animot-svg-element.icon-anim-draw-undraw rect,.animot-svg-element.icon-anim-draw-undraw line,.animot-svg-element.icon-anim-draw-undraw polyline,.animot-svg-element.icon-anim-draw-undraw polygon,.animot-svg-element.icon-anim-draw-undraw ellipse{stroke-dashoffset:var(--path-len, 1000);animation:animot-svg-draw-undraw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-loop path,.animot-svg-element.icon-anim-loop circle,.animot-svg-element.icon-anim-loop rect,.animot-svg-element.icon-anim-loop line,.animot-svg-element.icon-anim-loop polyline,.animot-svg-element.icon-anim-loop polygon,.animot-svg-element.icon-anim-loop ellipse{animation-iteration-count:infinite!important}.animot-svg-element.icon-anim-reverse path,.animot-svg-element.icon-anim-reverse circle,.animot-svg-element.icon-anim-reverse rect,.animot-svg-element.icon-anim-reverse line,.animot-svg-element.icon-anim-reverse polyline,.animot-svg-element.icon-anim-reverse polygon,.animot-svg-element.icon-anim-reverse ellipse{animation-direction:reverse!important}@keyframes animot-svg-draw{to{stroke-dashoffset:0}}@keyframes animot-svg-undraw{0%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes animot-svg-draw-undraw{0%{stroke-dashoffset:var(--path-len, 1000)}50%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}.animot-presenter.svelte-16ocdv9 *{margin:0;padding:0;box-sizing:border-box}.animot-presenter.svelte-16ocdv9{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;background:transparent;line-height:normal;font-size:16px;font-weight:400;font-style:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:left;color:inherit}.animot-canvas-wrapper.svelte-16ocdv9{display:flex;align-items:center;justify-content:center}.animot-canvas.svelte-16ocdv9{position:relative;overflow:hidden}.animot-element.svelte-16ocdv9{position:absolute;box-sizing:border-box;will-change:transform,opacity,left,top,width,height;isolation:isolate}.animot-element.floating.svelte-16ocdv9{animation-duration:var(--float-speed, 3s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:var(--float-delay, 0s)}.animot-code-block.svelte-16ocdv9{width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0006;margin:0;box-sizing:border-box}.animot-code-block.transparent-bg.svelte-16ocdv9{background:transparent!important;box-shadow:none}.animot-code-block.transparent-bg.svelte-16ocdv9 .animot-code-header:where(.svelte-16ocdv9){background:transparent;border-bottom-color:#ffffff0f}.animot-code-header.svelte-16ocdv9{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0;min-height:40px}.animot-window-controls.svelte-16ocdv9{display:flex;gap:8px;align-items:center;flex-shrink:0}.macos.svelte-16ocdv9 .animot-control:where(.svelte-16ocdv9){width:12px;height:12px;border-radius:50%;display:block}.macos.svelte-16ocdv9 .animot-control.close:where(.svelte-16ocdv9){background:#ff5f57}.macos.svelte-16ocdv9 .animot-control.minimize:where(.svelte-16ocdv9){background:#febc2e}.macos.svelte-16ocdv9 .animot-control.maximize:where(.svelte-16ocdv9){background:#28c840}.windows.svelte-16ocdv9 .animot-window-controls:where(.svelte-16ocdv9){order:99;margin-left:auto;gap:0}.windows.svelte-16ocdv9 .animot-control:where(.svelte-16ocdv9){display:flex;align-items:center;justify-content:center;width:28px;height:24px;border-radius:4px;color:#ffffff73}.animot-filename-tab.svelte-16ocdv9{display:flex;align-items:center;gap:6px;background:#ffffff0f;border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:4px 10px;max-width:220px;color:#fff6}.animot-file-icon.svelte-16ocdv9{flex-shrink:0}.animot-filename.svelte-16ocdv9{color:#ffffff8c;font-size:12px;line-height:18px}.animot-copy-code-btn.svelte-16ocdv9{display:flex;align-items:center;gap:5px;height:28px;padding:0 8px;margin-left:auto;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fff6;cursor:pointer;opacity:0;transition:opacity .2s,background .15s,color .15s;flex-shrink:0;font-size:12px;font-family:inherit;white-space:nowrap}.animot-copy-code-btn.svelte-16ocdv9:hover{background:#ffffff1f;color:#fffc}.animot-copy-code-btn.svelte-16ocdv9 svg:where(.svelte-16ocdv9){width:14px;height:14px;flex-shrink:0}.animot-copy-code-btn.svelte-16ocdv9 .animot-check-icon:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.svelte-16ocdv9 .animot-copied-label:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copy-icon:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copy-label:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-check-icon:where(.svelte-16ocdv9){display:block;color:#4ade80}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copied-label:where(.svelte-16ocdv9){display:inline;color:#4ade80}.animot-copy-code-btn.animot-floating.svelte-16ocdv9{position:absolute;top:8px;right:8px;z-index:2}.animot-code-block.svelte-16ocdv9:hover .animot-copy-code-btn:where(.svelte-16ocdv9){opacity:1}.animot-code-content.svelte-16ocdv9{flex:1;overflow:hidden;position:relative}.animot-highlighted-code.svelte-16ocdv9{width:100%;height:100%}.animot-code-content.svelte-16ocdv9 pre,.animot-highlighted-code.svelte-16ocdv9 pre{margin:0;padding:16px;background:transparent!important;line-height:1.6;font-size:inherit;overflow:visible}.animot-highlighted-code.svelte-16ocdv9 code{font-family:inherit;font-size:inherit;font-weight:inherit}.animot-highlighted-code.svelte-16ocdv9 .line-number{display:inline-block;width:2.5em;margin-right:1em;text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;opacity:.6}.animot-text-element.svelte-16ocdv9{width:100%;height:100%;display:flex;align-items:center;white-space:pre-wrap;word-wrap:break-word}.animot-typewriter-cursor.svelte-16ocdv9{animation:svelte-16ocdv9-animot-blink .7s infinite;font-weight:100}@keyframes svelte-16ocdv9-animot-blink{0%,50%{opacity:1}51%,to{opacity:0}}.animot-arrow-element.svelte-16ocdv9{width:100%;height:100%}.arrow-animate-draw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:var(--path-len, 1000);animation:svelte-16ocdv9-animot-arrow-draw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-undraw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:0;animation:svelte-16ocdv9-animot-arrow-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-draw-undraw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:var(--path-len, 1000);animation:svelte-16ocdv9-animot-arrow-draw-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-head-styled-draw.svelte-16ocdv9{opacity:0;animation:svelte-16ocdv9-animot-arrow-head-appear var(--arrow-anim-duration, .5s) ease-out forwards;animation-delay:calc(var(--arrow-anim-duration, .5s) * .7)}.arrow-animate-draw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){opacity:0;animation:svelte-16ocdv9-animot-arrow-head-appear var(--arrow-anim-duration, .5s) ease-out forwards;animation-delay:calc(var(--arrow-anim-duration, .5s) * .7)}.arrow-animate-undraw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9),.arrow-head-undraw.svelte-16ocdv9{opacity:1;animation:svelte-16ocdv9-animot-arrow-head-disappear var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-draw-undraw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9),.arrow-head-draw-undraw.svelte-16ocdv9{opacity:0;animation:svelte-16ocdv9-animot-arrow-head-draw-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-grow.svelte-16ocdv9{transform-origin:left center;animation:svelte-16ocdv9-animot-arrow-grow var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-anim-loop.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9),.arrow-anim-loop.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){animation-iteration-count:infinite!important}.arrow-anim-reverse.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9),.arrow-anim-reverse.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){animation-direction:reverse!important}@keyframes svelte-16ocdv9-animot-arrow-draw{to{stroke-dashoffset:0}}@keyframes svelte-16ocdv9-animot-arrow-undraw{0%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes svelte-16ocdv9-animot-arrow-draw-undraw{0%{stroke-dashoffset:var(--path-len, 1000)}50%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes svelte-16ocdv9-animot-arrow-head-appear{0%{opacity:0}to{opacity:1}}@keyframes svelte-16ocdv9-animot-arrow-head-disappear{0%{opacity:1}70%{opacity:1}to{opacity:0}}@keyframes svelte-16ocdv9-animot-arrow-head-draw-undraw{0%{opacity:0}35%{opacity:1}65%{opacity:1}to{opacity:0}}@keyframes svelte-16ocdv9-animot-arrow-grow{0%{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}.animot-image-element.svelte-16ocdv9{width:100%;height:100%;display:block}.animot-video-element.svelte-16ocdv9{width:100%;height:100%;display:block;background:#000}.animot-video-element.animot-embed-frame.svelte-16ocdv9{border:0;background:transparent}.animot-video-element.animot-embed-wrap.svelte-16ocdv9{overflow:hidden;background:#000}.animot-cinema-camera.svelte-16ocdv9{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:0 0}.animot-cinema-camera.active.svelte-16ocdv9{transition:transform var(--cinema-transition-duration, .8s) cubic-bezier(.65,0,.35,1)}.animot-cinema-camera.active.svelte-16ocdv9 .animot-element:where(.svelte-16ocdv9){transition:translate var(--cinema-transition-duration, .8s) cubic-bezier(.65,0,.35,1)}.animot-shape-element.svelte-16ocdv9{width:100%;height:100%;display:block;overflow:visible}.animot-canvas.svelte-16ocdv9{--transition-duration: .5s;transition:transform calc(var(--transition-duration) * .4) ease,opacity calc(var(--transition-duration) * .4) ease}.animot-canvas.transition-fade-out.svelte-16ocdv9{opacity:0}.animot-canvas.transition-fade-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-fadeIn calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-left-out.forward.svelte-16ocdv9{transform:translate(-100%);opacity:0}.animot-canvas.transition-slide-left-in.forward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromRight calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-left-out.backward.svelte-16ocdv9{transform:translate(100%);opacity:0}.animot-canvas.transition-slide-left-in.backward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromLeft calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-right-out.forward.svelte-16ocdv9{transform:translate(100%);opacity:0}.animot-canvas.transition-slide-right-in.forward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromLeft calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-up-out.svelte-16ocdv9{transform:translateY(-100%);opacity:0}.animot-canvas.transition-slide-up-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromBottom calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-down-out.svelte-16ocdv9{transform:translateY(100%);opacity:0}.animot-canvas.transition-slide-down-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromTop calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-zoom-in-out.svelte-16ocdv9{transform:scale(.5);opacity:0}.animot-canvas.transition-zoom-in-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-zoomIn calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-zoom-out-out.svelte-16ocdv9{transform:scale(1.5);opacity:0}.animot-canvas.transition-zoom-out-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-zoomOut calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-flip-out.svelte-16ocdv9{transform:perspective(1000px) rotateY(90deg);opacity:0}.animot-canvas.transition-flip-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromLeft{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromBottom{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromTop{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes svelte-16ocdv9-animot-zoomIn{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes svelte-16ocdv9-animot-zoomOut{0%{transform:scale(1.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes svelte-16ocdv9-animot-flipIn{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}to{transform:perspective(1000px) rotateY(0);opacity:1}}.animot-canvas.transition-flip-x-out.svelte-16ocdv9{transform:perspective(1000px) rotateX(90deg);opacity:0}.animot-canvas.transition-flip-x-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipXIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-flipXIn{0%{transform:perspective(1000px) rotateX(-90deg);opacity:0}to{transform:perspective(1000px) rotateX(0);opacity:1}}.animot-canvas.transition-flip-y-out.svelte-16ocdv9{transform:perspective(1000px) rotateY(90deg);opacity:0}.animot-canvas.transition-flip-y-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipYIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-flipYIn{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}to{transform:perspective(1000px) rotateY(0);opacity:1}}.animot-svg-element.svelte-16ocdv9{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.animot-svg-element.svelte-16ocdv9 svg{width:100%;height:100%}.animot-controls.svelte-16ocdv9{position:absolute;bottom:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:8px 16px;background:#000000b3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:10px;opacity:0;transition:opacity .3s ease .15s;z-index:100}.animot-presenter.svelte-16ocdv9:hover .animot-controls:where(.svelte-16ocdv9),.animot-menu-visible.svelte-16ocdv9 .animot-controls:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9){display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;border:none;cursor:pointer;background:#ffffff1a;color:#fff;transition:background .2s}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9):hover:not(:disabled){background:#fff3}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9):disabled{opacity:.3;cursor:not-allowed}.animot-controls.svelte-16ocdv9 button.active:where(.svelte-16ocdv9){background:#6366f199}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9) svg:where(.svelte-16ocdv9){width:16px;height:16px}.animot-slide-indicator.svelte-16ocdv9{font-size:12px;color:#fff;min-width:50px;text-align:center;font-family:system-ui,sans-serif}.animot-arrow.svelte-16ocdv9{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;border:none;cursor:pointer;background:#00000080;color:#fff;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s .15s;z-index:100;padding:0;margin:0}.animot-presenter.svelte-16ocdv9:hover .animot-arrow:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-presenter.svelte-16ocdv9:hover .animot-arrow:where(.svelte-16ocdv9):disabled{opacity:.3;cursor:not-allowed}.animot-arrow.svelte-16ocdv9:hover:not(:disabled){background:#000000b3}.animot-arrow.svelte-16ocdv9 svg:where(.svelte-16ocdv9){width:20px;height:20px}.animot-arrow-left.svelte-16ocdv9{left:8px}.animot-arrow-right.svelte-16ocdv9{right:8px}.animot-progress-bar.svelte-16ocdv9{position:absolute;bottom:0;left:0;right:0;height:3px;background:#ffffff1a;z-index:100;opacity:0;transition:opacity .3s .15s}.animot-presenter.svelte-16ocdv9:hover .animot-progress-bar:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-progress-fill.svelte-16ocdv9{height:100%;background:linear-gradient(135deg,#7c3aed,#ec4899);transition:width .6s ease}.animot-loading.svelte-16ocdv9{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.animot-spinner.svelte-16ocdv9{width:32px;height:32px;border:3px solid rgba(255,255,255,.2);border-top-color:#7c3aed;border-radius:50%;animation:svelte-16ocdv9-animot-spin .8s linear infinite}@keyframes svelte-16ocdv9-animot-spin{to{transform:rotate(360deg)}}.animot-error.svelte-16ocdv9{color:#ef4444;padding:20px;text-align:center;font-family:system-ui,sans-serif}
|
|
1
|
+
.code-morph.svelte-1hmk0l{width:100%;height:100%;margin:0;padding:0;background:transparent;font-family:var(--font-mono, "JetBrains Mono", monospace);font-size:inherit;line-height:1.6;white-space:pre-wrap;word-wrap:break-word;color:#e6edf3;box-sizing:border-box;overflow:visible}.code-morph.svelte-1hmk0l pre{margin:0;padding:16px;background:transparent!important;font-family:var(--font-mono);font-size:inherit;line-height:1.6;overflow:visible}.code-morph.svelte-1hmk0l code{font-family:inherit;font-size:inherit;font-weight:inherit}.code-morph.svelte-1hmk0l .line-number{display:inline-block;width:2.5em;margin-right:1em;text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;opacity:.6}.code-morph.svelte-1hmk0l .word-highlight{background:var(--highlight-color, #facc15);color:#000;border-radius:3px;padding:1px 3px;margin:0 -3px;-webkit-box-decoration-break:clone;box-decoration-break:clone;animation:svelte-1hmk0l-fadeHighlight var(--duration, 1s) ease-out forwards}@keyframes svelte-1hmk0l-fadeHighlight{0%{background:var(--highlight-color, #facc15);color:#000}70%{background:var(--highlight-color, #facc15);color:#000}to{background:transparent;color:inherit}}.counter.svelte-1er5jjj{width:100%;height:100%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:hidden;white-space:nowrap}.animot-chart.svelte-1mq2d7j{width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.animot-chart-title.svelte-1mq2d7j{font-weight:600;text-align:center;margin-bottom:8px}.animot-chart-content.svelte-1mq2d7j{flex:1;min-height:0;display:flex;flex-direction:column}.animot-chart-content.svelte-1mq2d7j svg:where(.svelte-1mq2d7j){width:100%;flex:1;min-height:0}.animot-bar-chart.svelte-1mq2d7j,.animot-line-chart.svelte-1mq2d7j{overflow:visible}.animot-series-legend.svelte-1mq2d7j{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;padding:6px 0 0;font-size:.85em}.animot-legend-item.svelte-1mq2d7j{display:inline-flex;align-items:center;gap:5px}.animot-swatch.svelte-1mq2d7j{width:10px;height:10px;border-radius:2px;display:inline-block}.progress-element.svelte-10tny4e{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;position:relative;box-sizing:border-box}.bar-track.svelte-10tny4e,.ring-svg.svelte-10tny4e{flex-shrink:0}.progress-element.ring.svelte-10tny4e .ring-svg:where(.svelte-10tny4e){width:100%;height:100%;min-height:0;min-width:0}.bar-track.svelte-10tny4e{position:relative;overflow:hidden}.bar-fill.svelte-10tny4e{position:absolute;display:flex;align-items:center;justify-content:center;transition:width 0s,height 0s}.bar-stripe-clip.svelte-10tny4e{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.bar-stripe-tape.svelte-10tny4e{position:absolute;top:0;left:0;width:calc(100% + var(--stripe-cycle));height:100%;mask-image:var(--stripe-mask);-webkit-mask-image:var(--stripe-mask);mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;animation:svelte-10tny4e-progress-stripe-x var(--stripe-speed) linear infinite;animation-direction:var(--stripe-direction);will-change:transform}.bar-stripe-tape.vertical.svelte-10tny4e{width:100%;height:calc(100% + var(--stripe-cycle));animation-name:svelte-10tny4e-progress-stripe-y}@keyframes svelte-10tny4e-progress-stripe-x{0%{transform:translate(0)}to{transform:translate(calc(-1 * var(--stripe-cycle)))}}@keyframes svelte-10tny4e-progress-stripe-y{0%{transform:translateY(0)}to{transform:translateY(calc(-1 * var(--stripe-cycle)))}}.ring-svg.svelte-10tny4e{width:100%;height:100%}.ring-spin.svelte-10tny4e{animation:svelte-10tny4e-progress-ring-spin 1.4s linear infinite;transform-origin:50% 50%}@keyframes svelte-10tny4e-progress-ring-spin{to{transform:rotate(360deg)}}.label.svelte-10tny4e{text-align:center;white-space:nowrap;pointer-events:none}.label.center.svelte-10tny4e{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.label.inside.svelte-10tny4e{padding:0 8px;flex-shrink:0}.label.inside-vertical.svelte-10tny4e{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-orientation:mixed;writing-mode:horizontal-tb}.animot-container-element.svelte-e5oeuv{box-sizing:border-box;pointer-events:none}.icon-element.svelte-2ld65o{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.icon-element.svelte-2ld65o svg{width:100%;height:100%}.flow-markers.svelte-15cxp1m{pointer-events:none}.embed-player.svelte-1u59mvz{position:relative;width:100%;height:100%;background:#000;overflow:hidden}.embed-frame.svelte-1u59mvz{width:100%;height:100%;display:block;border:0}.embed-frame.passthrough.svelte-1u59mvz{pointer-events:none}.custom-controls.svelte-1u59mvz{position:absolute;left:8px;right:8px;bottom:8px;display:flex;align-items:center;gap:10px;padding:6px 10px;background:#0009;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:8px;opacity:0;transition:opacity .2s}.embed-player.svelte-1u59mvz:hover .custom-controls:where(.svelte-1u59mvz),.custom-controls.svelte-1u59mvz:focus-within{opacity:1}.ctrl-btn.svelte-1u59mvz{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;border-radius:4px;color:#fff;cursor:pointer}.ctrl-btn.svelte-1u59mvz:hover{background:#ffffff26}.ctrl-btn.svelte-1u59mvz svg:where(.svelte-1u59mvz){width:16px;height:16px}.scrub.svelte-1u59mvz{flex:1;accent-color:#6366f1}.time.svelte-1u59mvz{font-size:11px;color:#ffffffd9;font-variant-numeric:tabular-nums;min-width:80px;text-align:right}@keyframes float-vertical{0%,to{translate:0 0}50%{translate:0 calc(-1 * var(--float-amp, 10px))}}@keyframes float-horizontal{0%,to{translate:0 0}50%{translate:var(--float-amp, 10px) 0}}@keyframes float-both-0{0%{translate:0 0}15%{translate:calc(.8 * var(--float-amp, 10px)) calc(-.6 * var(--float-amp, 10px))}35%{translate:calc(-.4 * var(--float-amp, 10px)) calc(-1 * var(--float-amp, 10px))}55%{translate:calc(-.9 * var(--float-amp, 10px)) calc(.3 * var(--float-amp, 10px))}75%{translate:calc(.3 * var(--float-amp, 10px)) calc(.7 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-1{0%{translate:0 0}20%{translate:calc(-.7 * var(--float-amp, 10px)) calc(-.8 * var(--float-amp, 10px))}40%{translate:calc(.5 * var(--float-amp, 10px)) calc(-.3 * var(--float-amp, 10px))}60%{translate:calc(.9 * var(--float-amp, 10px)) calc(.6 * var(--float-amp, 10px))}80%{translate:calc(-.4 * var(--float-amp, 10px)) calc(.9 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-2{0%{translate:0 0}12%{translate:calc(.6 * var(--float-amp, 10px)) calc(.5 * var(--float-amp, 10px))}30%{translate:calc(1 * var(--float-amp, 10px)) calc(-.4 * var(--float-amp, 10px))}50%{translate:calc(-.3 * var(--float-amp, 10px)) calc(-.9 * var(--float-amp, 10px))}70%{translate:calc(-.8 * var(--float-amp, 10px)) calc(.2 * var(--float-amp, 10px))}88%{translate:calc(.2 * var(--float-amp, 10px)) calc(.8 * var(--float-amp, 10px))}to{translate:0 0}}@keyframes float-both-3{0%{translate:0 0}17%{translate:calc(-.9 * var(--float-amp, 10px)) calc(.4 * var(--float-amp, 10px))}33%{translate:calc(-.5 * var(--float-amp, 10px)) calc(-.7 * var(--float-amp, 10px))}50%{translate:calc(.7 * var(--float-amp, 10px)) calc(-.9 * var(--float-amp, 10px))}67%{translate:calc(.9 * var(--float-amp, 10px)) calc(.5 * var(--float-amp, 10px))}83%{translate:calc(-.2 * var(--float-amp, 10px)) calc(.8 * var(--float-amp, 10px))}to{translate:0 0}}.animot-svg-element.icon-anim-draw path,.animot-svg-element.icon-anim-draw circle,.animot-svg-element.icon-anim-draw rect,.animot-svg-element.icon-anim-draw line,.animot-svg-element.icon-anim-draw polyline,.animot-svg-element.icon-anim-draw polygon,.animot-svg-element.icon-anim-draw ellipse{stroke-dashoffset:var(--path-len, 1000);animation:animot-svg-draw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-undraw path,.animot-svg-element.icon-anim-undraw circle,.animot-svg-element.icon-anim-undraw rect,.animot-svg-element.icon-anim-undraw line,.animot-svg-element.icon-anim-undraw polyline,.animot-svg-element.icon-anim-undraw polygon,.animot-svg-element.icon-anim-undraw ellipse{stroke-dashoffset:0;animation:animot-svg-undraw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-draw-undraw path,.animot-svg-element.icon-anim-draw-undraw circle,.animot-svg-element.icon-anim-draw-undraw rect,.animot-svg-element.icon-anim-draw-undraw line,.animot-svg-element.icon-anim-draw-undraw polyline,.animot-svg-element.icon-anim-draw-undraw polygon,.animot-svg-element.icon-anim-draw-undraw ellipse{stroke-dashoffset:var(--path-len, 1000);animation:animot-svg-draw-undraw var(--icon-anim-duration, .8s) ease-out forwards}.animot-svg-element.icon-anim-loop path,.animot-svg-element.icon-anim-loop circle,.animot-svg-element.icon-anim-loop rect,.animot-svg-element.icon-anim-loop line,.animot-svg-element.icon-anim-loop polyline,.animot-svg-element.icon-anim-loop polygon,.animot-svg-element.icon-anim-loop ellipse{animation-iteration-count:infinite!important}.animot-svg-element.icon-anim-reverse path,.animot-svg-element.icon-anim-reverse circle,.animot-svg-element.icon-anim-reverse rect,.animot-svg-element.icon-anim-reverse line,.animot-svg-element.icon-anim-reverse polyline,.animot-svg-element.icon-anim-reverse polygon,.animot-svg-element.icon-anim-reverse ellipse{animation-direction:reverse!important}@keyframes animot-svg-draw{to{stroke-dashoffset:0}}@keyframes animot-svg-undraw{0%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes animot-svg-draw-undraw{0%{stroke-dashoffset:var(--path-len, 1000)}50%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}.animot-presenter.svelte-16ocdv9 *{margin:0;padding:0;box-sizing:border-box}.animot-presenter.svelte-16ocdv9{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;background:transparent;line-height:normal;font-size:16px;font-weight:400;font-style:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-align:left;color:inherit}.animot-canvas-wrapper.svelte-16ocdv9{display:flex;align-items:center;justify-content:center}.animot-canvas.svelte-16ocdv9{position:relative;overflow:hidden}.animot-element.svelte-16ocdv9{position:absolute;box-sizing:border-box;will-change:transform,opacity,left,top,width,height;isolation:isolate}.animot-element.floating.svelte-16ocdv9{animation-duration:var(--float-speed, 3s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-delay:var(--float-delay, 0s)}.animot-code-block.svelte-16ocdv9{width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 8px 32px #0006;margin:0;box-sizing:border-box}.animot-code-block.transparent-bg.svelte-16ocdv9{background:transparent!important;box-shadow:none}.animot-code-block.transparent-bg.svelte-16ocdv9 .animot-code-header:where(.svelte-16ocdv9){background:transparent;border-bottom-color:#ffffff0f}.animot-code-header.svelte-16ocdv9{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#0003;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0;min-height:40px}.animot-window-controls.svelte-16ocdv9{display:flex;gap:8px;align-items:center;flex-shrink:0}.macos.svelte-16ocdv9 .animot-control:where(.svelte-16ocdv9){width:12px;height:12px;border-radius:50%;display:block}.macos.svelte-16ocdv9 .animot-control.close:where(.svelte-16ocdv9){background:#ff5f57}.macos.svelte-16ocdv9 .animot-control.minimize:where(.svelte-16ocdv9){background:#febc2e}.macos.svelte-16ocdv9 .animot-control.maximize:where(.svelte-16ocdv9){background:#28c840}.windows.svelte-16ocdv9 .animot-window-controls:where(.svelte-16ocdv9){order:99;margin-left:auto;gap:0}.windows.svelte-16ocdv9 .animot-control:where(.svelte-16ocdv9){display:flex;align-items:center;justify-content:center;width:28px;height:24px;border-radius:4px;color:#ffffff73}.animot-filename-tab.svelte-16ocdv9{display:flex;align-items:center;gap:6px;background:#ffffff0f;border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:4px 10px;max-width:220px;color:#fff6}.animot-file-icon.svelte-16ocdv9{flex-shrink:0}.animot-filename.svelte-16ocdv9{color:#ffffff8c;font-size:12px;line-height:18px}.animot-copy-code-btn.svelte-16ocdv9{display:flex;align-items:center;gap:5px;height:28px;padding:0 8px;margin-left:auto;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fff6;cursor:pointer;opacity:0;transition:opacity .2s,background .15s,color .15s;flex-shrink:0;font-size:12px;font-family:inherit;white-space:nowrap}.animot-copy-code-btn.svelte-16ocdv9:hover{background:#ffffff1f;color:#fffc}.animot-copy-code-btn.svelte-16ocdv9 svg:where(.svelte-16ocdv9){width:14px;height:14px;flex-shrink:0}.animot-copy-code-btn.svelte-16ocdv9 .animot-check-icon:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.svelte-16ocdv9 .animot-copied-label:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copy-icon:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copy-label:where(.svelte-16ocdv9){display:none}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-check-icon:where(.svelte-16ocdv9){display:block;color:#4ade80}.animot-copy-code-btn.copied.svelte-16ocdv9 .animot-copied-label:where(.svelte-16ocdv9){display:inline;color:#4ade80}.animot-copy-code-btn.animot-floating.svelte-16ocdv9{position:absolute;top:8px;right:8px;z-index:2}.animot-code-block.svelte-16ocdv9:hover .animot-copy-code-btn:where(.svelte-16ocdv9){opacity:1}.animot-code-content.svelte-16ocdv9{flex:1;overflow:hidden;position:relative}.animot-highlighted-code.svelte-16ocdv9{width:100%;height:100%}.animot-code-content.svelte-16ocdv9 pre,.animot-highlighted-code.svelte-16ocdv9 pre{margin:0;padding:16px;background:transparent!important;line-height:1.6;font-size:inherit;overflow:visible}.animot-highlighted-code.svelte-16ocdv9 code{font-family:inherit;font-size:inherit;font-weight:inherit}.animot-highlighted-code.svelte-16ocdv9 .line-number{display:inline-block;width:2.5em;margin-right:1em;text-align:right;color:#6e7681;-webkit-user-select:none;user-select:none;opacity:.6}.animot-text-element.svelte-16ocdv9{width:100%;height:100%;display:flex;align-items:center;white-space:pre-wrap;word-wrap:break-word}.animot-typewriter-cursor.svelte-16ocdv9{animation:svelte-16ocdv9-animot-blink .7s infinite;font-weight:100}@keyframes svelte-16ocdv9-animot-blink{0%,50%{opacity:1}51%,to{opacity:0}}.animot-arrow-element.svelte-16ocdv9{width:100%;height:100%}.arrow-animate-draw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:var(--path-len, 1000);animation:svelte-16ocdv9-animot-arrow-draw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-undraw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:0;animation:svelte-16ocdv9-animot-arrow-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-draw-undraw.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9){stroke-dashoffset:var(--path-len, 1000);animation:svelte-16ocdv9-animot-arrow-draw-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-head-styled-draw.svelte-16ocdv9{opacity:0;animation:svelte-16ocdv9-animot-arrow-head-appear var(--arrow-anim-duration, .5s) ease-out forwards;animation-delay:calc(var(--arrow-anim-duration, .5s) * .7)}.arrow-animate-draw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){opacity:0;animation:svelte-16ocdv9-animot-arrow-head-appear var(--arrow-anim-duration, .5s) ease-out forwards;animation-delay:calc(var(--arrow-anim-duration, .5s) * .7)}.arrow-animate-undraw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9),.arrow-head-undraw.svelte-16ocdv9{opacity:1;animation:svelte-16ocdv9-animot-arrow-head-disappear var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-draw-undraw.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9),.arrow-head-draw-undraw.svelte-16ocdv9{opacity:0;animation:svelte-16ocdv9-animot-arrow-head-draw-undraw var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-animate-grow.svelte-16ocdv9{transform-origin:left center;animation:svelte-16ocdv9-animot-arrow-grow var(--arrow-anim-duration, .5s) ease-out forwards}.arrow-anim-loop.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9),.arrow-anim-loop.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){animation-iteration-count:infinite!important}.arrow-anim-reverse.svelte-16ocdv9 .arrow-path:where(.svelte-16ocdv9),.arrow-anim-reverse.svelte-16ocdv9 .arrow-head:where(.svelte-16ocdv9){animation-direction:reverse!important}@keyframes svelte-16ocdv9-animot-arrow-draw{to{stroke-dashoffset:0}}@keyframes svelte-16ocdv9-animot-arrow-undraw{0%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes svelte-16ocdv9-animot-arrow-draw-undraw{0%{stroke-dashoffset:var(--path-len, 1000)}50%{stroke-dashoffset:0}to{stroke-dashoffset:var(--path-len, 1000)}}@keyframes svelte-16ocdv9-animot-arrow-head-appear{0%{opacity:0}to{opacity:1}}@keyframes svelte-16ocdv9-animot-arrow-head-disappear{0%{opacity:1}70%{opacity:1}to{opacity:0}}@keyframes svelte-16ocdv9-animot-arrow-head-draw-undraw{0%{opacity:0}35%{opacity:1}65%{opacity:1}to{opacity:0}}@keyframes svelte-16ocdv9-animot-arrow-grow{0%{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}.animot-image-element.svelte-16ocdv9{width:100%;height:100%;display:block}.animot-video-element.svelte-16ocdv9{width:100%;height:100%;display:block;background:#000}.animot-video-element.animot-embed-frame.svelte-16ocdv9{border:0;background:transparent}.animot-video-element.animot-embed-wrap.svelte-16ocdv9{overflow:hidden;background:#000}.animot-cinema-camera.svelte-16ocdv9{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:0 0}.animot-cinema-camera.active.svelte-16ocdv9{transition:transform var(--cinema-transition-duration, .8s) cubic-bezier(.65,0,.35,1)}.animot-cinema-camera.active.svelte-16ocdv9 .animot-element:where(.svelte-16ocdv9){transition:translate var(--cinema-transition-duration, .8s) cubic-bezier(.65,0,.35,1)}.animot-shape-element.svelte-16ocdv9{width:100%;height:100%;display:block;overflow:visible}.animot-canvas.svelte-16ocdv9{--transition-duration: .5s;transition:transform calc(var(--transition-duration) * .4) ease,opacity calc(var(--transition-duration) * .4) ease}.animot-canvas.transition-fade-out.svelte-16ocdv9{opacity:0}.animot-canvas.transition-fade-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-fadeIn calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-left-out.forward.svelte-16ocdv9{transform:translate(-100%);opacity:0}.animot-canvas.transition-slide-left-in.forward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromRight calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-left-out.backward.svelte-16ocdv9{transform:translate(100%);opacity:0}.animot-canvas.transition-slide-left-in.backward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromLeft calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-right-out.forward.svelte-16ocdv9{transform:translate(100%);opacity:0}.animot-canvas.transition-slide-right-in.forward.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromLeft calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-up-out.svelte-16ocdv9{transform:translateY(-100%);opacity:0}.animot-canvas.transition-slide-up-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromBottom calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-slide-down-out.svelte-16ocdv9{transform:translateY(100%);opacity:0}.animot-canvas.transition-slide-down-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-slideInFromTop calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-zoom-in-out.svelte-16ocdv9{transform:scale(.5);opacity:0}.animot-canvas.transition-zoom-in-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-zoomIn calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-zoom-out-out.svelte-16ocdv9{transform:scale(1.5);opacity:0}.animot-canvas.transition-zoom-out-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-zoomOut calc(var(--transition-duration) * .6) ease forwards}.animot-canvas.transition-flip-out.svelte-16ocdv9{transform:perspective(1000px) rotateY(90deg);opacity:0}.animot-canvas.transition-flip-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromLeft{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromBottom{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes svelte-16ocdv9-animot-slideInFromTop{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes svelte-16ocdv9-animot-zoomIn{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes svelte-16ocdv9-animot-zoomOut{0%{transform:scale(1.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes svelte-16ocdv9-animot-flipIn{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}to{transform:perspective(1000px) rotateY(0);opacity:1}}.animot-canvas.transition-flip-x-out.svelte-16ocdv9{transform:perspective(1000px) rotateX(90deg);opacity:0}.animot-canvas.transition-flip-x-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipXIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-flipXIn{0%{transform:perspective(1000px) rotateX(-90deg);opacity:0}to{transform:perspective(1000px) rotateX(0);opacity:1}}.animot-canvas.transition-flip-y-out.svelte-16ocdv9{transform:perspective(1000px) rotateY(90deg);opacity:0}.animot-canvas.transition-flip-y-in.svelte-16ocdv9{animation:svelte-16ocdv9-animot-flipYIn calc(var(--transition-duration) * .6) ease forwards}@keyframes svelte-16ocdv9-animot-flipYIn{0%{transform:perspective(1000px) rotateY(-90deg);opacity:0}to{transform:perspective(1000px) rotateY(0);opacity:1}}.animot-svg-element.svelte-16ocdv9{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.animot-svg-element.svelte-16ocdv9 svg{width:100%;height:100%}.animot-controls.svelte-16ocdv9{position:absolute;bottom:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:8px 16px;background:#000000b3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:10px;opacity:0;transition:opacity .3s ease .15s;z-index:100}.animot-presenter.svelte-16ocdv9:hover .animot-controls:where(.svelte-16ocdv9),.animot-menu-visible.svelte-16ocdv9 .animot-controls:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9){display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;border:none;cursor:pointer;background:#ffffff1a;color:#fff;transition:background .2s}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9):hover:not(:disabled){background:#fff3}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9):disabled{opacity:.3;cursor:not-allowed}.animot-controls.svelte-16ocdv9 button.active:where(.svelte-16ocdv9){background:#6366f199}.animot-controls.svelte-16ocdv9 button:where(.svelte-16ocdv9) svg:where(.svelte-16ocdv9){width:16px;height:16px}.animot-slide-indicator.svelte-16ocdv9{font-size:12px;color:#fff;min-width:50px;text-align:center;font-family:system-ui,sans-serif}.animot-arrow.svelte-16ocdv9{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;border:none;cursor:pointer;background:#00000080;color:#fff;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s .15s;z-index:100;padding:0;margin:0}.animot-presenter.svelte-16ocdv9:hover .animot-arrow:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-presenter.svelte-16ocdv9:hover .animot-arrow:where(.svelte-16ocdv9):disabled{opacity:.3;cursor:not-allowed}.animot-arrow.svelte-16ocdv9:hover:not(:disabled){background:#000000b3}.animot-arrow.svelte-16ocdv9 svg:where(.svelte-16ocdv9){width:20px;height:20px}.animot-arrow-left.svelte-16ocdv9{left:8px}.animot-arrow-right.svelte-16ocdv9{right:8px}.animot-progress-bar.svelte-16ocdv9{position:absolute;bottom:0;left:0;right:0;height:3px;background:#ffffff1a;z-index:100;opacity:0;transition:opacity .3s .15s}.animot-presenter.svelte-16ocdv9:hover .animot-progress-bar:where(.svelte-16ocdv9){opacity:1;transition-delay:0s}.animot-progress-fill.svelte-16ocdv9{height:100%;background:linear-gradient(135deg,#7c3aed,#ec4899);transition:width .6s ease}.animot-loading.svelte-16ocdv9{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.animot-spinner.svelte-16ocdv9{width:32px;height:32px;border:3px solid rgba(255,255,255,.2);border-top-color:#7c3aed;border-radius:50%;animation:svelte-16ocdv9-animot-spin .8s linear infinite}@keyframes svelte-16ocdv9-animot-spin{to{transform:rotate(360deg)}}.animot-error.svelte-16ocdv9{color:#ef4444;padding:20px;text-align:center;font-family:system-ui,sans-serif}
|