@kenkaiiii/ggcoder 5.69.0 → 5.71.0
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/assets/motion/bin/contact-sheet.mjs +9 -3
- package/assets/motion/bin/cues.mjs +337 -0
- package/assets/motion/bin/library.mjs +53 -10
- package/assets/motion/bin/motion-blur.mjs +943 -0
- package/assets/motion/bin/motion-check.mjs +354 -3
- package/assets/motion/bin/music-fit.mjs +436 -0
- package/assets/motion/bin/pdf-extract.mjs +22 -10
- package/assets/motion/bin/reference-study.mjs +346 -0
- package/assets/motion/bin/score-synth.mjs +1052 -93
- package/assets/motion/library/README.md +50 -14
- package/assets/motion/library/kit/moves.js +1981 -0
- package/assets/motion/library/library.json +232 -0
- package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
- package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
- package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
- package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
- package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
- package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
- package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
- package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
- package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
- package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
- package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
- package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
- package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
- package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
- package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
- package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
- package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
- package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
- package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
- package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
- package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
- package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
- package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
- package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
- package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
- package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
- package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
- package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
- package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/references/build-sheet.md +206 -0
- package/assets/motion/references/runtime/determinism-rules.md +1 -1
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +29 -29
- package/assets/motion/references/runtime/inputs-and-assets.md +7 -12
- package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
- package/assets/motion/references/runtime/minimal-composition.md +1 -1
- package/assets/motion/references/runtime/preview-render.md +3 -3
- package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
- package/assets/motion/skills/before-after/SKILL.md +53 -0
- package/assets/motion/skills/brand-kit/SKILL.md +3 -3
- package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
- package/assets/motion/skills/launch-video/SKILL.md +62 -0
- package/assets/motion/skills/match-reference/SKILL.md +58 -0
- package/assets/motion/skills/motion/SKILL.md +78 -85
- package/assets/motion/skills/source-ingest/SKILL.md +17 -6
- package/assets/motion/skills/website-video/SKILL.md +59 -0
- package/assets/skills/bulletproof/SKILL.md +36 -11
- package/assets/skills/bulletproof/references/agent-surface.md +19 -9
- package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
- package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
- package/assets/skills/bulletproof/references/provenance.md +26 -1
- package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
- package/assets/skills/bulletproof/references/supply-chain.md +21 -17
- package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
- package/assets/skills/bulletproof/references/verification.md +2 -0
- package/assets/skills/clarify/SKILL.md +25 -16
- package/assets/skills/code-review/SKILL.md +71 -13
- package/assets/skills/code-review/references/agent-diffs.md +27 -0
- package/assets/skills/code-review/references/tests.md +19 -0
- package/assets/skills/compliance-guard/SKILL.md +20 -5
- package/assets/skills/compliance-guard/references/artifacts.md +1 -1
- package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
- package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
- package/assets/skills/compliance-guard/references/provenance.md +41 -2
- package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
- package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
- package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
- package/assets/skills/compliance-guard/references/us.md +27 -21
- package/assets/skills/durable/SKILL.md +87 -79
- package/assets/skills/durable/references/agent-db-safety.md +69 -0
- package/assets/skills/durable/references/backups-and-runtime.md +19 -12
- package/assets/skills/durable/references/migrations-and-schema.md +13 -6
- package/assets/skills/evidence-led-ui/SKILL.md +69 -127
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
- package/assets/skills/evidence-led-ui/references/direction.md +124 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
- package/assets/skills/lean/SKILL.md +90 -71
- package/assets/skills/lean/references/memory-and-processes.md +3 -2
- package/assets/skills/lean/references/playbooks.md +37 -12
- package/assets/skills/refactoring/SKILL.md +24 -3
- package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
- package/assets/skills/refactoring/references/legacy.md +21 -0
- package/assets/skills/root-cause/SKILL.md +20 -10
- package/assets/skills/shared-language/SKILL.md +16 -14
- package/assets/skills/tdd/SKILL.md +27 -15
- package/dist/app-sidecar.js +56 -33
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +2 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/acceptance-checks.d.ts +48 -0
- package/dist/core/acceptance-checks.js +144 -0
- package/dist/core/acceptance-checks.js.map +1 -0
- package/dist/core/agent-session.d.ts +32 -70
- package/dist/core/agent-session.js +92 -413
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +6 -5
- package/dist/core/agents.js.map +1 -1
- package/dist/core/bundled-agents.js +1 -3
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/compaction/compactor.js +78 -48
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/mcp/content.js +6 -2
- package/dist/core/mcp/content.js.map +1 -1
- package/dist/core/model-unavailable.d.ts +14 -0
- package/dist/core/model-unavailable.js +23 -0
- package/dist/core/model-unavailable.js.map +1 -0
- package/dist/core/node-debugger.d.ts +148 -0
- package/dist/core/node-debugger.js +642 -0
- package/dist/core/node-debugger.js.map +1 -0
- package/dist/core/process-manager.d.ts +14 -0
- package/dist/core/process-manager.js +61 -0
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/session-history.d.ts +12 -0
- package/dist/core/session-history.js +27 -0
- package/dist/core/session-history.js.map +1 -1
- package/dist/core/settings-manager.d.ts +0 -1
- package/dist/core/settings-manager.js +2 -5
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.js +3 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +11 -5
- package/dist/core/subagent-manager.js +15 -7
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/test-impact.d.ts +73 -0
- package/dist/core/test-impact.js +467 -0
- package/dist/core/test-impact.js.map +1 -0
- package/dist/core/thinking-level.d.ts +1 -1
- package/dist/core/thinking-level.js +1 -1
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/verification-gate.d.ts +8 -98
- package/dist/core/verification-gate.js +26 -256
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/interactive.js +2 -1
- package/dist/interactive.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +17 -5
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +6 -2
- package/dist/motion-agent/motion-agent.js +5 -7
- package/dist/motion-agent/motion-agent.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +14 -19
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/dist/motion-agent/motion-review.d.ts +5 -1
- package/dist/motion-agent/motion-review.js +8 -3
- package/dist/motion-agent/motion-review.js.map +1 -1
- package/dist/motion-agent/motion-studio-context.js +1 -1
- package/dist/motion-agent/motion-studio-context.js.map +1 -1
- package/dist/system-prompt.js +3 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/test-support/keep-alive.d.ts +14 -0
- package/dist/test-support/keep-alive.js +17 -0
- package/dist/test-support/keep-alive.js.map +1 -0
- package/dist/tools/bash-read-evidence.d.ts +10 -0
- package/dist/tools/bash-read-evidence.js +133 -0
- package/dist/tools/bash-read-evidence.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -1
- package/dist/tools/bash.js +66 -3
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/debug.d.ts +54 -0
- package/dist/tools/debug.js +233 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/edit.js +12 -4
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.js +46 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.js +2 -0
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +5 -0
- package/dist/tools/read-tracker.js +19 -9
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/skill.js +5 -0
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/steroids.d.ts +1 -1
- package/dist/tools/subagent-control.js +11 -3
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +16 -8
- package/dist/tools/subagent-shared.js +21 -15
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +8 -2
- package/dist/tools/subagent.js +16 -9
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +2 -2
- package/dist/tools/tool-tiers.js +3 -2
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/ui/App.d.ts +0 -7
- package/dist/ui/App.js +6 -79
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +0 -7
- package/dist/ui/hooks/useAgentLoop.js +1 -119
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/render.d.ts +0 -4
- package/dist/ui/render.js +0 -2
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +16 -0
- package/dist/utils/image.js.map +1 -1
- package/package.json +4 -4
- package/assets/motion/references/motion-language.md +0 -128
- package/assets/motion/skills/video-qa/SKILL.md +0 -89
- package/dist/core/ideal-review-subagent.d.ts +0 -56
- package/dist/core/ideal-review-subagent.js +0 -112
- package/dist/core/ideal-review-subagent.js.map +0 -1
- package/dist/core/ideal-review.d.ts +0 -82
- package/dist/core/ideal-review.js +0 -242
- package/dist/core/ideal-review.js.map +0 -1
- package/dist/motion-agent/motion-check-tool.d.ts +0 -42
- package/dist/motion-agent/motion-check-tool.js +0 -564
- package/dist/motion-agent/motion-check-tool.js.map +0 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
scale-dive: a powers-of-ten dive (move kit). One world layer holds a
|
|
4
|
+
dashboard; kit.camera starts wide, dives into one card (zoom ~4), then into
|
|
5
|
+
the number inside it (zoom ~16), which fills the frame as the payoff and
|
|
6
|
+
rests dead still (no hand-held float in the rest).
|
|
7
|
+
Crisp at every level: each nested level is authored at the size it is SEEN
|
|
8
|
+
at and scaled down with a transform. The card's content is a 1920x1080 box
|
|
9
|
+
at scale(1/CARD_ZOOM); the number is a 1920x1080 box inside it at
|
|
10
|
+
scale(1/(NUM_ZOOM/CARD_ZOOM)). When the camera reaches a level, that
|
|
11
|
+
level's text is back at 1:1 pixels, so it renders sharp, not blown up.
|
|
12
|
+
Needs the move kit: `library.mjs add` installs it; put its <script> in the
|
|
13
|
+
root head after GSAP.
|
|
14
|
+
Params (script top): CARD_ZOOM / NUM_ZOOM (zoom per level; the card box is
|
|
15
|
+
1920/CARD_ZOOM wide, so keep it 16:9), DIVE_1 / DIVE_2 (start of each dive),
|
|
16
|
+
DIVE_DUR, REST_AT (rest starts; no float after it), DELTA_AT (the delta line
|
|
17
|
+
under the payoff). Move the target card with its left/top in world px.
|
|
18
|
+
-->
|
|
19
|
+
<html lang="en">
|
|
20
|
+
<head>
|
|
21
|
+
<meta charset="UTF-8" />
|
|
22
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<div
|
|
26
|
+
id="scale-dive-root"
|
|
27
|
+
data-composition-id="scale-dive"
|
|
28
|
+
data-start="0"
|
|
29
|
+
data-duration="6"
|
|
30
|
+
data-width="1920"
|
|
31
|
+
data-height="1080"
|
|
32
|
+
>
|
|
33
|
+
<style>
|
|
34
|
+
[data-composition-id="scale-dive"] {
|
|
35
|
+
position: absolute;
|
|
36
|
+
inset: 0;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
color: var(--ink, #111);
|
|
39
|
+
font-family: var(--text, sans-serif);
|
|
40
|
+
}
|
|
41
|
+
[data-composition-id="scale-dive"] .sd-world {
|
|
42
|
+
position: absolute;
|
|
43
|
+
left: 0;
|
|
44
|
+
top: 0;
|
|
45
|
+
width: 1920px;
|
|
46
|
+
height: 1080px;
|
|
47
|
+
}
|
|
48
|
+
[data-composition-id="scale-dive"] .sd-surface {
|
|
49
|
+
background: color-mix(in srgb, var(--field, #fff) 93%, var(--ink, #111));
|
|
50
|
+
border: 2px solid var(--line, rgba(0, 0, 0, 0.14));
|
|
51
|
+
border-radius: var(--radius, 16px);
|
|
52
|
+
box-sizing: border-box;
|
|
53
|
+
}
|
|
54
|
+
[data-composition-id="scale-dive"] .sd-side {
|
|
55
|
+
position: absolute;
|
|
56
|
+
left: 60px;
|
|
57
|
+
top: 60px;
|
|
58
|
+
width: 260px;
|
|
59
|
+
height: 960px;
|
|
60
|
+
padding: 40px 30px;
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
gap: 26px;
|
|
64
|
+
}
|
|
65
|
+
[data-composition-id="scale-dive"] .sd-brand {
|
|
66
|
+
font-family: var(--display, sans-serif);
|
|
67
|
+
font-weight: var(--display-weight, 700);
|
|
68
|
+
letter-spacing: var(--display-tracking, -0.02em);
|
|
69
|
+
font-size: 34px;
|
|
70
|
+
margin-bottom: 20px;
|
|
71
|
+
}
|
|
72
|
+
[data-composition-id="scale-dive"] .sd-nav {
|
|
73
|
+
font-size: 24px;
|
|
74
|
+
color: var(--muted, #666);
|
|
75
|
+
}
|
|
76
|
+
[data-composition-id="scale-dive"] .sd-nav.on {
|
|
77
|
+
color: var(--ink, #111);
|
|
78
|
+
font-weight: 600;
|
|
79
|
+
}
|
|
80
|
+
[data-composition-id="scale-dive"] .sd-head {
|
|
81
|
+
position: absolute;
|
|
82
|
+
left: 360px;
|
|
83
|
+
top: 70px;
|
|
84
|
+
font-family: var(--display, sans-serif);
|
|
85
|
+
font-weight: var(--display-weight, 700);
|
|
86
|
+
letter-spacing: var(--display-tracking, -0.02em);
|
|
87
|
+
font-size: 56px;
|
|
88
|
+
}
|
|
89
|
+
[data-composition-id="scale-dive"] .sd-sub {
|
|
90
|
+
position: absolute;
|
|
91
|
+
left: 360px;
|
|
92
|
+
top: 150px;
|
|
93
|
+
font-family: var(--mono, monospace);
|
|
94
|
+
font-size: 22px;
|
|
95
|
+
color: var(--muted, #666);
|
|
96
|
+
letter-spacing: 0.06em;
|
|
97
|
+
text-transform: uppercase;
|
|
98
|
+
}
|
|
99
|
+
/* Small cards: plain world-px content (only ever seen wide). */
|
|
100
|
+
[data-composition-id="scale-dive"] .sd-card {
|
|
101
|
+
position: absolute;
|
|
102
|
+
width: 480px;
|
|
103
|
+
height: 270px;
|
|
104
|
+
padding: 30px 34px;
|
|
105
|
+
display: flex;
|
|
106
|
+
flex-direction: column;
|
|
107
|
+
justify-content: space-between;
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
}
|
|
110
|
+
[data-composition-id="scale-dive"] .sd-label {
|
|
111
|
+
font-family: var(--mono, monospace);
|
|
112
|
+
font-size: 18px;
|
|
113
|
+
letter-spacing: 0.08em;
|
|
114
|
+
text-transform: uppercase;
|
|
115
|
+
color: var(--muted, #666);
|
|
116
|
+
}
|
|
117
|
+
[data-composition-id="scale-dive"] .sd-val {
|
|
118
|
+
font-family: var(--display, sans-serif);
|
|
119
|
+
font-weight: var(--display-weight, 700);
|
|
120
|
+
letter-spacing: var(--display-tracking, -0.02em);
|
|
121
|
+
font-size: 64px;
|
|
122
|
+
line-height: 1;
|
|
123
|
+
}
|
|
124
|
+
[data-composition-id="scale-dive"] .sd-bars {
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: flex-end;
|
|
127
|
+
gap: 10px;
|
|
128
|
+
height: 60px;
|
|
129
|
+
}
|
|
130
|
+
[data-composition-id="scale-dive"] .sd-bars i {
|
|
131
|
+
flex: 1;
|
|
132
|
+
background: var(--line, rgba(0, 0, 0, 0.18));
|
|
133
|
+
border-radius: 4px;
|
|
134
|
+
}
|
|
135
|
+
/* The target card: its content is authored at 1920x1080 and scaled down. */
|
|
136
|
+
[data-composition-id="scale-dive"] .sd-target {
|
|
137
|
+
position: absolute;
|
|
138
|
+
width: 480px;
|
|
139
|
+
height: 270px;
|
|
140
|
+
overflow: hidden;
|
|
141
|
+
}
|
|
142
|
+
[data-composition-id="scale-dive"] .sd-l1 {
|
|
143
|
+
position: absolute;
|
|
144
|
+
left: 0;
|
|
145
|
+
top: 0;
|
|
146
|
+
width: 1920px;
|
|
147
|
+
height: 1080px;
|
|
148
|
+
transform-origin: 0 0;
|
|
149
|
+
}
|
|
150
|
+
[data-composition-id="scale-dive"] .sd-l1-label {
|
|
151
|
+
position: absolute;
|
|
152
|
+
left: 130px;
|
|
153
|
+
top: 110px;
|
|
154
|
+
font-family: var(--mono, monospace);
|
|
155
|
+
font-size: 64px;
|
|
156
|
+
letter-spacing: 0.08em;
|
|
157
|
+
text-transform: uppercase;
|
|
158
|
+
color: var(--muted, #666);
|
|
159
|
+
}
|
|
160
|
+
[data-composition-id="scale-dive"] .sd-l1-note {
|
|
161
|
+
position: absolute;
|
|
162
|
+
left: 130px;
|
|
163
|
+
bottom: 110px;
|
|
164
|
+
font-size: 56px;
|
|
165
|
+
color: var(--muted, #666);
|
|
166
|
+
}
|
|
167
|
+
[data-composition-id="scale-dive"] .sd-l1-chart {
|
|
168
|
+
position: absolute;
|
|
169
|
+
right: 130px;
|
|
170
|
+
top: 110px;
|
|
171
|
+
width: 520px;
|
|
172
|
+
height: 200px;
|
|
173
|
+
}
|
|
174
|
+
/* The number's box: one 1/(NUM/CARD) step smaller again, centred in the card. */
|
|
175
|
+
[data-composition-id="scale-dive"] .sd-l2 {
|
|
176
|
+
position: absolute;
|
|
177
|
+
left: 720px;
|
|
178
|
+
top: 405px;
|
|
179
|
+
width: 1920px;
|
|
180
|
+
height: 1080px;
|
|
181
|
+
transform-origin: 0 0;
|
|
182
|
+
display: flex;
|
|
183
|
+
flex-direction: column;
|
|
184
|
+
align-items: center;
|
|
185
|
+
justify-content: center;
|
|
186
|
+
}
|
|
187
|
+
[data-composition-id="scale-dive"] .sd-num {
|
|
188
|
+
font-family: var(--display, sans-serif);
|
|
189
|
+
font-weight: var(--display-weight, 700);
|
|
190
|
+
font-stretch: var(--display-stretch, 100%);
|
|
191
|
+
letter-spacing: var(--display-tracking, -0.03em);
|
|
192
|
+
font-size: 520px;
|
|
193
|
+
line-height: 0.9;
|
|
194
|
+
white-space: nowrap;
|
|
195
|
+
}
|
|
196
|
+
[data-composition-id="scale-dive"] .sd-num em {
|
|
197
|
+
font-style: normal;
|
|
198
|
+
color: var(--accent, #2f5bff);
|
|
199
|
+
}
|
|
200
|
+
[data-composition-id="scale-dive"] .sd-delta {
|
|
201
|
+
margin-top: 120px;
|
|
202
|
+
display: flex;
|
|
203
|
+
align-items: center;
|
|
204
|
+
gap: 24px;
|
|
205
|
+
font-family: var(--mono, monospace);
|
|
206
|
+
font-size: 64px;
|
|
207
|
+
letter-spacing: 0.04em;
|
|
208
|
+
color: var(--ink, #111);
|
|
209
|
+
}
|
|
210
|
+
</style>
|
|
211
|
+
<div class="sd-world">
|
|
212
|
+
<div class="sd-side sd-surface">
|
|
213
|
+
<!-- edit: app name + nav -->
|
|
214
|
+
<div class="sd-brand">Ledger</div>
|
|
215
|
+
<div class="sd-nav on">Overview</div>
|
|
216
|
+
<div class="sd-nav">Orders</div>
|
|
217
|
+
<div class="sd-nav">Customers</div>
|
|
218
|
+
<div class="sd-nav">Reports</div>
|
|
219
|
+
<div class="sd-nav">Settings</div>
|
|
220
|
+
</div>
|
|
221
|
+
<!-- edit: page title -->
|
|
222
|
+
<div class="sd-head">Overview</div>
|
|
223
|
+
<div class="sd-sub">Last 7 days</div>
|
|
224
|
+
<!-- edit: the surrounding cards (context only) -->
|
|
225
|
+
<div class="sd-card sd-surface" style="left: 360px; top: 240px">
|
|
226
|
+
<div class="sd-label">Revenue</div>
|
|
227
|
+
<div class="sd-val">$84.2k</div>
|
|
228
|
+
<div class="sd-bars"><i style="height: 40%"></i><i style="height: 55%"></i><i style="height: 48%"></i><i style="height: 70%"></i><i style="height: 66%"></i><i style="height: 90%"></i></div>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="sd-card sd-surface" style="left: 1400px; top: 240px">
|
|
231
|
+
<div class="sd-label">Orders</div>
|
|
232
|
+
<div class="sd-val">1,906</div>
|
|
233
|
+
<div class="sd-bars"><i style="height: 60%"></i><i style="height: 52%"></i><i style="height: 74%"></i><i style="height: 58%"></i><i style="height: 80%"></i><i style="height: 72%"></i></div>
|
|
234
|
+
</div>
|
|
235
|
+
<div class="sd-card sd-surface" style="left: 360px; top: 550px">
|
|
236
|
+
<div class="sd-label">Refunds</div>
|
|
237
|
+
<div class="sd-val">0.6%</div>
|
|
238
|
+
<div class="sd-bars"><i style="height: 30%"></i><i style="height: 26%"></i><i style="height: 22%"></i><i style="height: 24%"></i><i style="height: 18%"></i><i style="height: 15%"></i></div>
|
|
239
|
+
</div>
|
|
240
|
+
<div class="sd-card sd-surface" style="left: 880px; top: 550px">
|
|
241
|
+
<div class="sd-label">Avg. basket</div>
|
|
242
|
+
<div class="sd-val">$44.10</div>
|
|
243
|
+
<div class="sd-bars"><i style="height: 50%"></i><i style="height: 54%"></i><i style="height: 52%"></i><i style="height: 58%"></i><i style="height: 61%"></i><i style="height: 64%"></i></div>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="sd-card sd-surface" style="left: 1400px; top: 550px">
|
|
246
|
+
<div class="sd-label">New customers</div>
|
|
247
|
+
<div class="sd-val">312</div>
|
|
248
|
+
<div class="sd-bars"><i style="height: 35%"></i><i style="height: 45%"></i><i style="height: 62%"></i><i style="height: 58%"></i><i style="height: 77%"></i><i style="height: 84%"></i></div>
|
|
249
|
+
</div>
|
|
250
|
+
<!-- the target: left/top in world px; content authored at 1920x1080 -->
|
|
251
|
+
<div class="sd-target sd-surface" style="left: 880px; top: 240px">
|
|
252
|
+
<div class="sd-l1">
|
|
253
|
+
<!-- edit: target card label, note -->
|
|
254
|
+
<div class="sd-l1-label">Checkout conversion</div>
|
|
255
|
+
<svg class="sd-l1-chart" viewBox="0 0 520 200" fill="none">
|
|
256
|
+
<path d="M6 170 L90 150 L175 160 L260 118 L345 104 L430 60 L514 30" stroke="var(--accent, #2f5bff)" stroke-width="12" stroke-linecap="round" stroke-linejoin="round" />
|
|
257
|
+
</svg>
|
|
258
|
+
<div class="sd-l1-note">vs 3.51% the week before</div>
|
|
259
|
+
<div class="sd-l2">
|
|
260
|
+
<!-- edit: the payoff number + delta -->
|
|
261
|
+
<div class="sd-num">4.82<em>%</em></div>
|
|
262
|
+
<div class="sd-delta">
|
|
263
|
+
<svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="var(--accent, #2f5bff)" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"><path class="sd-up" d="M4 17 L10 11 L14 15 L20 7 M14 7 H20 V13" /></svg>
|
|
264
|
+
<span class="sd-delta-txt">+1.31 pts this week</span>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
<script>
|
|
272
|
+
(function () {
|
|
273
|
+
const CARD_ZOOM = 4; // camera zoom that fills the frame with the card
|
|
274
|
+
const NUM_ZOOM = 16; // camera zoom that fills the frame with the number
|
|
275
|
+
const DIVE_1 = 0.7;
|
|
276
|
+
const DIVE_2 = 2.7;
|
|
277
|
+
const DIVE_DUR = 1.3;
|
|
278
|
+
const REST_AT = 4.15;
|
|
279
|
+
const DELTA_AT = 4.25;
|
|
280
|
+
|
|
281
|
+
const kit = window.GGMotionKit;
|
|
282
|
+
const root = document.querySelector('[data-composition-id="scale-dive"]');
|
|
283
|
+
const world = root.querySelector(".sd-world");
|
|
284
|
+
const target = root.querySelector(".sd-target");
|
|
285
|
+
const l1 = root.querySelector(".sd-l1");
|
|
286
|
+
const l2 = root.querySelector(".sd-l2");
|
|
287
|
+
const tl = gsap.timeline({ paused: true });
|
|
288
|
+
|
|
289
|
+
const inner = NUM_ZOOM / CARD_ZOOM;
|
|
290
|
+
l1.style.transform = `scale(${1 / CARD_ZOOM})`;
|
|
291
|
+
l2.style.transform = `scale(${1 / inner})`;
|
|
292
|
+
// Number box centred in the card's 1920x1080 space.
|
|
293
|
+
l2.style.left = `${960 - 960 / inner}px`;
|
|
294
|
+
l2.style.top = `${540 - 540 / inner}px`;
|
|
295
|
+
|
|
296
|
+
const card = kit.centerOf(target, world);
|
|
297
|
+
const KEYS = [
|
|
298
|
+
{ x: 960, y: 540, zoom: 1 },
|
|
299
|
+
{ at: DIVE_1, x: card.x, y: card.y, zoom: CARD_ZOOM * 0.92, move: "travel", duration: DIVE_DUR },
|
|
300
|
+
{ at: DIVE_2, x: card.x, y: card.y, zoom: NUM_ZOOM, move: "travel", duration: DIVE_DUR },
|
|
301
|
+
];
|
|
302
|
+
kit.camera(tl, world, KEYS, {
|
|
303
|
+
duration: 6,
|
|
304
|
+
handheld: { amp: 4, rotate: 0.1, seed: 9 },
|
|
305
|
+
rests: [[REST_AT, 6]],
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// The payoff's delta line: drawn arrow, then the words rise.
|
|
309
|
+
const txt = root.querySelector(".sd-delta-txt");
|
|
310
|
+
tl.fromTo(txt, { opacity: 0, y: 30 }, { opacity: 1, y: 0, duration: 0.5, ease: "expo.out" }, DELTA_AT + 0.15);
|
|
311
|
+
const up = root.querySelector(".sd-up");
|
|
312
|
+
tl.fromTo(up, { opacity: 0 }, { opacity: 1, duration: 0.01 }, DELTA_AT);
|
|
313
|
+
kit.tick(tl, up, DELTA_AT, { duration: 0.45 });
|
|
314
|
+
tl.to({}, { duration: 6 - tl.duration() });
|
|
315
|
+
|
|
316
|
+
window.__timelines = window.__timelines || {};
|
|
317
|
+
window.__timelines["scale-dive"] = tl;
|
|
318
|
+
})();
|
|
319
|
+
</script>
|
|
320
|
+
</body>
|
|
321
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "screen-replica-steps",
|
|
3
|
+
"name": "Screen replica steps",
|
|
4
|
+
"kind": "ui",
|
|
5
|
+
"description": "A real app screen rebuilt at its screenshot size and walked through step by step: a cursor opens a dropdown, picks an option and saves, every state scripted by a pure setState(t), with one camera close-up per step that follows the cursor and widens at the end. Replace the replica elements with your screenshot's measured layout and edit the copy.",
|
|
6
|
+
"tags": ["replica", "walkthrough", "cursor", "zoom", "camera", "screenshot", "settings", "continuous", "kit"],
|
|
7
|
+
"fonts": [],
|
|
8
|
+
"duration": 8,
|
|
9
|
+
"previewAt": 2.4,
|
|
10
|
+
"license": "original",
|
|
11
|
+
"requires": ["kit"],
|
|
12
|
+
"previewLook": "soft-light-ad"
|
|
13
|
+
}
|